<?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>176273</bug_id>
          
          <creation_ts>2017-09-02 01:09:00 -0700</creation_ts>
          <short_desc>Move UI Process part of the Remote Layer Tree code out of a Mac-specific directory</short_desc>
          <delta_ts>2017-09-27 12:39:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174097</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1344771</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-09-02 01:09:00 -0700</bug_when>
    <thetext>Move UI Process part of the Remote Layer Tree code out of a Mac-specific directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344775</commentid>
    <comment_count>1</comment_count>
      <attachid>319705</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-09-02 01:15:25 -0700</bug_when>
    <thetext>Created attachment 319705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344776</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-09-02 01:16:08 -0700</bug_when>
    <thetext>Oh, webkit-patch -g, you never quite do the right thing :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344786</commentid>
    <comment_count>3</comment_count>
      <attachid>319711</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-09-02 01:42:49 -0700</bug_when>
    <thetext>Created attachment 319711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344787</commentid>
    <comment_count>4</comment_count>
      <attachid>319711</attachid>
    <who name="">mitz</who>
    <bug_when>2017-09-02 01:44:24 -0700</bug_when>
    <thetext>Comment on attachment 319711
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344872</commentid>
    <comment_count>5</comment_count>
      <attachid>319743</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-09-02 15:53:45 -0700</bug_when>
    <thetext>Created attachment 319743
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344874</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-02 15:55:44 -0700</bug_when>
    <thetext>Attachment 319743 did not pass style-queue:


ERROR: Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:446:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingTree.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeScrollingPerformanceData.h:27:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:30:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:30:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebKit/PlatformMac.cmake:281:  Alphabetical sorting problem. &quot;UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm&quot; should be before &quot;UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp&quot;.  [list/order] [5]
Total errors found: 10 in 19 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>1344885</commentid>
    <comment_count>7</comment_count>
      <attachid>319743</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-02 16:52:38 -0700</bug_when>
    <thetext>Comment on attachment 319743
Patch for EWS

Clearing flags on attachment: 319743

Committed r221541: &lt;http://trac.webkit.org/changeset/221541&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344886</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-02 16:52:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353572</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:39:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693694&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319705</attachid>
            <date>2017-09-02 01:15:25 -0700</date>
            <delta_ts>2017-09-02 01:16:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176273-20170902011524.patch</filename>
            <type>text/plain</type>
            <size>332303</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDIxMDE0YmM0N2FjNjEwZWNj
OTNhNTM3YzQ4OWRhZGRmODQ0ZTA4MmIuLjk3MmY3ZTc3Y2Q1YjdkMmVjNjdmNWU3ZWIzM2Y5Mjg0
ZjZiMzExZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTctMDktMDIgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBXZWIgUHJvY2Vz
cyBwYXJ0IG9mIHRoZSBSZW1vdGUgTGF5ZXIgVHJlZSBjb2RlIG91dCBvZiBhIE1hYy1zcGVjaWZp
YyBkaXJlY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NjI3MQorCisgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IERhbiBCZXJuc3RlaW4uCisK
KyAgICAgICAgVUktc2lkZSBjb21wb3NpdGluZyB3b3JrcyBvbiBhbGwgQ29jb2EgcGxhdGZvcm1z
LCBzbyB0aGUgY29kZSBzaG91bGQKKyAgICAgICAgbm90IGxpdmUgaW5zaWRlIE1hYy8uIEFsc28g
bWVyZ2UgdGhlIFNjcm9sbGluZyBkaXJlY3RvcnkgaW4gaGVyZSwKKyAgICAgICAgc2luY2UgdGhv
c2UgZmlsZXMgYXJlIHZlcnkgcmVsYXRlZC4KKworICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXll
clRyZWUvR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcDogUmVuYW1lZCBmcm9tIFdlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL0dyYXBoaWNzTGF5ZXJDQVJlbW90ZS5oOiBSZW5h
bWVkIGZyb20gV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9HcmFwaGljc0xheWVyQ0FSZW1vdGUuaC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FB
bmltYXRpb25SZW1vdGUuaDogUmVuYW1lZCBmcm9tIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbTogUmVuYW1lZCBmcm9t
IFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbS4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXll
clJlbW90ZS5jcHA6IFJlbmFtZWQgZnJvbSBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3Jt
Q0FMYXllclJlbW90ZS5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxh
eWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaDogUmVuYW1lZCBmcm9tIFdlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmguCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20uaDog
UmVuYW1lZCBmcm9tIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3Rl
Q3VzdG9tLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9Q
bGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW06IFJlbmFtZWQgZnJvbSBXZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbS4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVk
QmFja2luZy5jcHA6IFJlbmFtZWQgZnJvbSBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3Jt
Q0FMYXllclJlbW90ZVRpbGVkQmFja2luZy5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmcuaDog
UmVuYW1lZCBmcm9tIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3Rl
VGlsZWRCYWNraW5nLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0Lmg6IFJlbmFtZWQgZnJvbSBXZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW06IFJlbmFt
ZWQgZnJvbSBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0u
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
clRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IuaDogUmVuYW1lZCBmcm9tIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db2NvYS9SZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IuaC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURp
c3BsYXlSZWZyZXNoTW9uaXRvci5tbTogUmVuYW1lZCBmcm9tIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9SZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IubW0uCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYS5oOiBSZW5hbWVkIGZyb20gV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXll
clRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW06IFJlbmFtZWQgZnJvbSBXZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tLgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaDogUmVuYW1lZCBmcm9tIFdlYlByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9t
IFdlYlByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2Vz
LmluLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3IubW06IFJlbmFtZWQgZnJvbSBXZWJQcm9jZXNzL1Njcm9sbGlu
Zy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbS4KKwogMjAxNy0wOS0wMiAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV2F5bGFu
ZF0gT3BlbmluZyBGZWRvcmFQcm9qZWN0J3MgcGFzdGViaW4gY2hld3MgQ1BVCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLm1ha2UKaW5kZXggYmNkNTVjODc1YmVhZTEyZTNkNzNjNWE3YzVlNWY5OTFjODIx
NzYyNi4uZjc2MThiMWJjMmUzNTdlMTcwZjU4NmNhMWQyMjJjNDE5YTU0MjVkNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNTQsOCArNTQsOCBAQCBWUEFUSCA9IFwKICAgICAkKFdl
YktpdDIpL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucyBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9j
ZXNzL09yaWdpbkRhdGEgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9QbHVnaW5zIFwKKyAg
ICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlIFwKICAgICAkKFdlYktpdDIp
L1dlYlByb2Nlc3MvUmVzb3VyY2VDYWNoZSBcCi0gICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL1Nj
cm9sbGluZyBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL1N0b3JhZ2UgXAogICAgICQoV2Vi
S2l0MikvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMu
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDllZmJlOGU2NWNk
MzkyZWJmODMzZTI5MjIzNjc2OTZmMWIyMTBjNGUuLjNlMjg5ODMyZGI5M2M0ZjQwMDcxMGQ1YmM2
YTZmNzVjY2VkODhiNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21h
a2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMzQ3LDcgKzM0Nywx
NSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1BsdWdpbnMv
UERGL1BERlBsdWdpblBhc3N3b3JkRmllbGQubW0KICAgICBXZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpblRleHRBbm5vdGF0aW9uLm1tCiAKLSAgICBXZWJQcm9jZXNzL1Njcm9sbGluZy9S
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbQorICAgIFdlYlByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL0dyYXBoaWNzTGF5ZXJDQVJlbW90ZS5jcHAKKyAgICBXZWJQcm9jZXNzL1JlbW90ZUxheWVy
VHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCisgICAgV2ViUHJvY2Vzcy9SZW1vdGVM
YXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAorICAgIFdlYlByb2Nlc3MvUmVtb3Rl
TGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbQorICAgIFdlYlByb2Nlc3Mv
UmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2luZy5jcHAKKyAg
ICBXZWJQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tCisg
ICAgV2ViUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJl
c2hNb25pdG9yLm1tCisgICAgV2ViUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWEubW0KKyAgICBXZWJQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvci5tbQogCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuY3BwCkBAIC0zNjIsMTcgKzM3MCw5IEBAIGxpc3Qo
QVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0
dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwCiAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2Ev
UmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yLm1tCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQogCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9HcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9Q
YWdlQmFubmVyTWFjLm1tCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBQW5p
bWF0aW9uUmVtb3RlLm1tCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5
ZXJSZW1vdGUuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGVDdXN0b20ubW0KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXll
clJlbW90ZVRpbGVkQmFja2luZy5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90
ZUxheWVyVHJlZUNvbnRleHQubW0KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhLm1tCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tB
Y2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UubW0KICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFlYmM0NzZiMGNjNzA0Mzdm
YzQ5OGM0OWUyNTFhYjliOGNhNzc5NTkuLmRkZjMwOTMxZjc4N2JlYzI5MzEyMmZiNmRmNjAyODRk
MjdmNGE5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMjI3Nyw5ICsyMjc3LDkgQEAKIAkJMEYxNzRBQTYxNDJBQUM2MTAwMzkyNTBG
IC8qIFdLR2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0tHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0M3MjU3MTk2
RjVGNTAwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0M3MjU5MTk2RjVGNjgwMEFFREQwQyAv
KiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGNTk0NzhEMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvci5oOyBwYXRoID0gU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTk0NzhFMTg3QjNCM0EwMDQzNzg1
NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdlcy5pbjsgcGF0aCA9
IFNjcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdlcy5pbjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY1OTQ3OEYxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW07IHBhdGggPSBTY3JvbGxpbmcv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNTk0NzhEMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU5NDc4RTE4N0IzQjNB
MDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTk0NzhGMTg3QjNCM0EwMDQzNzg1NyAv
KiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDc5NDE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcDsgcGF0aCA9IFNjcm9s
bGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY1OTQ3OTUxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oOyBwYXRoID0gU2Nyb2xsaW5nL1JlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1OTQ3OTYxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ1RyZWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVtb3RlU2Nyb2xsaW5nVHJlZS5jcHA7
IHBhdGggPSBTY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00NjMxLDE2ICs0NjMxLDYgQEAKIAkJCXRhYldpZHRoID0gODsKIAkJ
CXVzZXNUYWJzID0gMDsKIAkJfTsKLQkJMEY1OTQ3OEMxODdCM0IyQTAwNDM3ODU3IC8qIFNjcm9s
bGluZyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMEY1
OTQ3OEQxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggKi8s
Ci0JCQkJMEY1OTQ3OEUxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yLm1lc3NhZ2VzLmluICovLAotCQkJCTBGNTk0NzhGMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvci5tbSAqLywKLQkJCSk7Ci0JCQluYW1lID0gU2Nyb2xsaW5n
OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMEY1OTQ3OTMxODdCM0I0QzAw
NDM3ODU3IC8qIFNjcm9sbGluZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC01NDMzLDYgKzU0MjMsMzIgQEAKIAkJCW5hbWUgPSBDdXN0b21Qcm90b2NvbHM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkyRDE1NTFBODFGNUE5NTIyMDAw
NkUzRkUgLyogUmVtb3RlTGF5ZXJUcmVlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQkyREEwNDlCNTE4MENDRDBBMDBBQUZBOUUgLyogR3JhcGhpY3NMYXll
ckNBUmVtb3RlLmNwcCAqLywKKwkJCQkyREEwNDlCNjE4MENDRDBBMDBBQUZBOUUgLyogR3JhcGhp
Y3NMYXllckNBUmVtb3RlLmggKi8sCisJCQkJMEY1RTIwMDIxOEU3NzA1MTAwM0VDM0U1IC8qIFBs
YXRmb3JtQ0FBbmltYXRpb25SZW1vdGUuaCAqLywKKwkJCQkwRjVFMjAwMTE4RTc3MDUxMDAzRUMz
RTUgLyogUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbSAqLywKKwkJCQkyREEwNDlCMTE4MEND
Q0QzMDBBQUZBOUUgLyogUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcCAqLywKKwkJCQkyREEwNDlC
MjE4MENDQ0QzMDBBQUZBOUUgLyogUGxhdGZvcm1DQUxheWVyUmVtb3RlLmggKi8sCisJCQkJMkQ4
NzEwMTUxODI4NDE1RDAwMThGQTAxIC8qIFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5oICov
LAorCQkJCTJEODcxMDE0MTgyODQxNUQwMDE4RkEwMSAvKiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVD
dXN0b20ubW0gKi8sCisJCQkJMkQ4OTQ5RUUxODIwNDRGNjAwRTg5OEFBIC8qIFBsYXRmb3JtQ0FM
YXllclJlbW90ZVRpbGVkQmFja2luZy5jcHAgKi8sCisJCQkJMkQ4OTQ5RUYxODIwNDRGNjAwRTg5
OEFBIC8qIFBsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2luZy5oICovLAorCQkJCTFBQjE2
QUU4MTY0QjNBODgwMDI5MEQ2MiAvKiBSZW1vdGVMYXllclRyZWVDb250ZXh0LmggKi8sCisJCQkJ
MUFCMTZBRTcxNjRCM0E4ODAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZUNvbnRleHQubW0gKi8s
CisJCQkJMkQyOUVDQ0UxOTJGMkMyRTAwOTg0Qjc4IC8qIFJlbW90ZUxheWVyVHJlZURpc3BsYXlS
ZWZyZXNoTW9uaXRvci5oICovLAorCQkJCTJEMjlFQ0NGMTkyRjJDMkUwMDk4NEI3OCAvKiBSZW1v
dGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IubW0gKi8sCisJCQkJMUFCMTZBREMxNjQ4
NTk4NDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmggKi8sCisJCQkJMUFC
MTZBREIxNjQ4NTk4NDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tICov
LAorCQkJCTBGNTk0NzhEMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvci5oICovLAorCQkJCTBGNTk0NzhFMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvci5tZXNzYWdlcy5pbiAqLywKKwkJCQkwRjU5NDc4RjE4N0IzQjNBMDA0Mzc4
NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0gKi8sCisJCQkpOworCQkJcGF0aCA9
IFJlbW90ZUxheWVyVHJlZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTJE
MjhGM0RGMTg4NUNDQjQwMDRCOUVBRSAvKiBpb3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtNTQ0OCw4ICs1NDY0LDYgQEAKIAkJMkQyOUVDQ0QxOTJGMkMy
RTAwOTg0Qjc4IC8qIENvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKLQkJCQkyRDI5RUNDRTE5MkYyQzJFMDA5ODRCNzggLyogUmVtb3RlTGF5ZXJUcmVlRGlz
cGxheVJlZnJlc2hNb25pdG9yLmggKi8sCi0JCQkJMkQyOUVDQ0YxOTJGMkMyRTAwOTg0Qjc4IC8q
IFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvci5tbSAqLywKIAkJCQkyREM0Q0Y3
QTFEMkRFMjRCMDBFQ0NDOTQgLyogV2ViUGFnZUNvY29hLm1tICovLAogCQkJKTsKIAkJCXBhdGgg
PSBDb2NvYTsKQEAgLTY2OTEsNyArNjcwNSw2IEBACiAJCQkJNTEwNUIwRDIxNjJGN0E1RTAwRTI3
NzA5IC8qIE5ldHdvcmsgKi8sCiAJCQkJMzEwOTk5NzQxNDZDOEFBODAwMjlERUI5IC8qIE5vdGlm
aWNhdGlvbnMgKFVzZXIpICovLAogCQkJCTFBNkZCN0FBMTFFNjRCNDkwMERCMTM3MSAvKiBQbHVn
aW5zICovLAotCQkJCTBGNTk0NzhDMTg3QjNCMkEwMDQzNzg1NyAvKiBTY3JvbGxpbmcgKi8sCiAJ
CQkJNTExOEU5OTgxRjI5NTI1OTAwM0VGOUY1IC8qIFN0b3JhZ2UgKi8sCiAJCQkJMUFBRjA4QUEx
OTI2OTMwQjAwQjYzOTBDIC8qIFVzZXJDb250ZW50ICovLAogCQkJCUJDMDMyRDVEMTBGNDM3MjIw
MDU4QzE1QSAvKiBXZWJDb3JlU3VwcG9ydCAqLywKQEAgLTY3NjYsNiArNjc3OSw3IEBACiAJCQkJ
MkQyOUVDQ0QxOTJGMkMyRTAwOTg0Qjc4IC8qIENvY29hICovLAogCQkJCTJEQTk0NEI0MTg4NEVB
MkEwMEVEODZEQiAvKiBpb3MgKi8sCiAJCQkJQkM5NjNENkMxMTNERDE5NTAwNTc0QkUyIC8qIG1h
YyAqLywKKwkJCQkyRDE1NTFBODFGNUE5NTIyMDAwNkUzRkUgLyogUmVtb3RlTGF5ZXJUcmVlICov
LAogCQkJCUJDODQ1MkE1MTE2MkM4MDkwMENBQjlCNSAvKiBEcmF3aW5nQXJlYS5jcHAgKi8sCiAJ
CQkJQkM4NDUyQTYxMTYyQzgwOTAwQ0FCOUI1IC8qIERyYXdpbmdBcmVhLmggKi8sCiAJCQkJMUE2
NDIyOEExMkREMDI0NzAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhLm1lc3NhZ2VzLmluICovLApAQCAt
NzYxMCwyMSArNzYyNCw3IEBACiAJCUJDOTYzRDZDMTEzREQxOTUwMDU3NEJFMiAvKiBtYWMgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTJEQTA0OUI1MTgw
Q0NEMEEwMEFBRkE5RSAvKiBHcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwICovLAotCQkJCTJEQTA0
OUI2MTgwQ0NEMEEwMEFBRkE5RSAvKiBHcmFwaGljc0xheWVyQ0FSZW1vdGUuaCAqLywKIAkJCQk3
QzZEMzdGQTE3MkY1NTVGMDA5RDI4NDcgLyogUGFnZUJhbm5lck1hYy5tbSAqLywKLQkJCQkwRjVF
MjAwMjE4RTc3MDUxMDAzRUMzRTUgLyogUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oICovLAot
CQkJCTBGNUUyMDAxMThFNzcwNTEwMDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
Lm1tICovLAotCQkJCTJEQTA0OUIxMTgwQ0NDRDMwMEFBRkE5RSAvKiBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGUuY3BwICovLAotCQkJCTJEQTA0OUIyMTgwQ0NDRDMwMEFBRkE5RSAvKiBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGUuaCAqLywKLQkJCQkyRDg3MTAxNTE4Mjg0MTVEMDAxOEZBMDEgLyogUGxhdGZv
cm1DQUxheWVyUmVtb3RlQ3VzdG9tLmggKi8sCi0JCQkJMkQ4NzEwMTQxODI4NDE1RDAwMThGQTAx
IC8qIFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbSAqLywKLQkJCQkyRDg5NDlFRTE4MjA0
NEY2MDBFODk4QUEgLyogUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nLmNwcCAqLywK
LQkJCQkyRDg5NDlFRjE4MjA0NEY2MDBFODk4QUEgLyogUGxhdGZvcm1DQUxheWVyUmVtb3RlVGls
ZWRCYWNraW5nLmggKi8sCi0JCQkJMUFCMTZBRTgxNjRCM0E4ODAwMjkwRDYyIC8qIFJlbW90ZUxh
eWVyVHJlZUNvbnRleHQuaCAqLywKLQkJCQkxQUIxNkFFNzE2NEIzQTg4MDAyOTBENjIgLyogUmVt
b3RlTGF5ZXJUcmVlQ29udGV4dC5tbSAqLywKLQkJCQkxQUIxNkFEQzE2NDg1OTg0MDAyOTBENjIg
LyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCAqLywKLQkJCQkxQUIxNkFEQjE2NDg1OTg0
MDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gKi8sCiAJCQkJMUFBRjI2
MzcxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmggKi8s
CiAJCQkJMUFBRjI2MzYxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhLm1tICovLAogCQkJCTFDOEUyREFEMTI3OEM1QjIwMEJDN0JEMCAvKiBXZWJJbnNwZWN0
b3JVSU1hYy5tbSAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9TY3Jv
bGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggY2Y1ZGNlZDNiNGM3NDJiYjA5MzZjZjNlOGUzYmVjNDNkMmQyMDE3
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yX2gKLSNkZWZpbmUgUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JfaAotCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLQotI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQXN5bmNTY3JvbGxpbmdDb29yZGlu
YXRvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsVHlwZXMuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgot
Ci1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIERlY29kZXI7Ci1jbGFzcyBFbmNvZGVyOwotfQotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb247Ci0KLWNsYXNzIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yIDogcHVibGljIFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IsIHB1YmxpYyBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvcj4gY3JlYXRlKFdlYlBhZ2UqIHBhZ2UpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBidWlsZFRyYW5zYWN0aW9uKFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yVHJhbnNhY3Rpb24mKTsKLQotcHJpdmF0ZToKLSAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvcihXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB+UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KTsKLQotICAgIGJvb2wgaXNSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcigpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICAKLSAgICAvLyBTY3JvbGxpbmdDb29yZGluYXRvcgot
ICAgIGJvb2wgY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoY29uc3QgV2ViQ29yZTo6
RnJhbWVWaWV3JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2hlZHVsZVRyZWVTdGF0ZUNv
bW1pdCgpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTY3JvbGxQaW5uaW5nQmVoYXZpb3IoV2ViQ29yZTo6
U2Nyb2xsUGlubmluZ0JlaGF2aW9yKSBvdmVycmlkZTsKLSAgICBib29sIGlzU2Nyb2xsU25hcElu
UHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVy
Ci0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBvdmVycmlkZTsKLSAgICAKLSAgICAvLyBSZXNwb25kIHRvIFVJIHByb2Nlc3MgY2hhbmdl
cy4KLSAgICB2b2lkIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUoV2ViQ29yZTo6U2Nyb2xs
aW5nTm9kZUlELCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgYm9v
bCBzeW5jTGF5ZXJQb3NpdGlvbik7Ci0gICAgdm9pZCBjdXJyZW50U25hcFBvaW50SW5kaWNlc0No
YW5nZWRGb3JOb2RlKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRh
bCwgdW5zaWduZWQgdmVydGljYWwpOwotCi0gICAgV2ViUGFnZSogbV93ZWJQYWdlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfU0NST0xMSU5H
X0NPT1JESU5BVE9SKFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IsIGlzUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSk7Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQotCi0jZW5kaWYgLy8gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9TY3JvbGxpbmcv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDJjMDk4YTEwOTcwMjM2N2MzODMzNzFlODhlNWE3NjFkNDVlMTk5YWQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdl
cy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLQot
bWVzc2FnZXMgLT4gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IgewotICAgIFNjcm9sbFBvc2l0
aW9uQ2hhbmdlZEZvck5vZGUodWludDY0X3Qgbm9kZUlELCBXZWJDb3JlOjpGbG9hdFBvaW50IHNj
cm9sbFBvc2l0aW9uLCBib29sIHN5bmNMYXllclBvc2l0aW9uKTsKLSAgICBDdXJyZW50U25hcFBv
aW50SW5kaWNlc0NoYW5nZWRGb3JOb2RlKHVpbnQ2NF90IG5vZGVJRCwgdW5zaWduZWQgaG9yaXpv
bnRhbCwgdW5zaWduZWQgdmVydGljYWwpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9TY3JvbGxpbmcv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
U2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4ODY0MTUyNWU1MmI5NzlkZTQwM2E2ZTZhNzEwMmNkM2EyNWQzMjUyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0KKysr
IC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIgotCi0jaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKLQotI2ltcG9ydCAiQXJndW1lbnRDb2RlcnMuaCIKLSNp
bXBvcnQgIkdyYXBoaWNzTGF5ZXJDQVJlbW90ZS5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWEuaCIKLSNpbXBvcnQgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2Fn
ZXMuaCIKLSNpbXBvcnQgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uaCIK
LSNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2ltcG9ydCAiV2ViUGFnZS5oIgot
I2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5o
PgotI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlRml4ZWRO
b2RlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yKFdlYlBhZ2UqIHBh
Z2UpCi0gICAgOiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UtPmNvcmVQYWdlKCkpCi0g
ICAgLCBtX3dlYlBhZ2UocGFnZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS0+cGFnZUlEKCksICp0aGlzKTsKLX0KLQotUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6On5SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcigpCi17
Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X3dlYlBhZ2UtPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKQotewotICAgIG1fd2ViUGFnZS0+ZHJhd2luZ0Fy
ZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotYm9vbCBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoY29u
c3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpIGNvbnN0Ci17Ci0gICAgUmVuZGVyVmlldyogcmVuZGVy
VmlldyA9IGZyYW1lVmlldy5yZW5kZXJWaWV3KCk7Ci0gICAgcmV0dXJuIHJlbmRlclZpZXcgJiYg
cmVuZGVyVmlldy0+dXNlc0NvbXBvc2l0aW5nKCk7Ci19Ci0KLWJvb2wgUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAotewotICAgIC8vIEZJ
WE1FOiBuZWVkIHRvIG1haW50YWluIHN0YXRlIGluIHRoZSB3ZWIgcHJvY2Vzcz8KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmlzU2Nyb2xs
U25hcEluUHJvZ3Jlc3MoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBuZWVkIHRvIG1haW50YWlu
IHN0YXRlIGluIHRoZSB3ZWIgcHJvY2Vzcz8KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcihTY3Jv
bGxQaW5uaW5nQmVoYXZpb3IpCi17Ci0gICAgLy8gRklYTUU6IHNlbmQgdG8gdGhlIFVJIHByb2Nl
c3MuCi19Ci0KLXZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmJ1aWxkVHJhbnNhY3Rp
b24oUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17
Ci0gICAgd2lsbENvbW1pdFRyZWUoKTsKLSAgICB0cmFuc2FjdGlvbi5zZXRTdGF0ZVRyZWVUb0Vu
Y29kZShzY3JvbGxpbmdTdGF0ZVRyZWUoKS0+Y29tbWl0KExheWVyUmVwcmVzZW50YXRpb246OlBs
YXRmb3JtTGF5ZXJJRFJlcHJlc2VudGF0aW9uKSk7Ci19Ci0KLS8vIE5vdGlmaWNhdGlvbiBmcm9t
IHRoZSBVSSBwcm9jZXNzIHRoYXQgd2Ugc2Nyb2xsZWQuCi12b2lkIFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKFNjcm9sbGluZ05vZGVJRCBu
b2RlSUQsIGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBib29sIHN5bmNMYXllclBv
c2l0aW9uKQotewotICAgIHNjaGVkdWxlVXBkYXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5jU2Ny
b2xsKG5vZGVJRCwgc2Nyb2xsUG9zaXRpb24sIHN0ZDo6bnVsbG9wdCwgZmFsc2UgLyogRklYTUUg
Ki8sIHN5bmNMYXllclBvc2l0aW9uID8gU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3lu
YyA6IFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlNldCk7Ci19Ci0KLXZvaWQgUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzQ2hhbmdlZEZvck5v
ZGUoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQg
dmVydGljYWwpCi17Ci0gICAgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXMobm9kZUlELCBob3Jp
em9udGFsLCB2ZXJ0aWNhbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0NvY29hL1JlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRv
ci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvUmVtb3RlTGF5ZXJU
cmVlRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDMyYjdmNWFhMTdhMzA2MzhjMmJkMGIwODE0OGNjZmQwN2Q4NjhkYjAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLQotI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZy
ZXNoTW9uaXRvciA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3IgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9y
PiBjcmVhdGUoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlELCBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYSYgZHJhd2luZ0FyZWEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlE
LCBkcmF3aW5nQXJlYSkpOwotICAgIH0KLSAgICAKLSAgICB2aXJ0dWFsIH5SZW1vdGVMYXllclRy
ZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IoKTsKLQotICAgIGJvb2wgcmVxdWVzdFJlZnJlc2hDYWxs
YmFjaygpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkaWRVcGRhdGVMYXllcnMoKTsKLQotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2Vi
Q29yZTo6UGxhdGZvcm1EaXNwbGF5SUQsIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhJik7Ci0K
LSAgICBXZWFrUHRyPFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhPiBtX2RyYXdpbmdBcmVhOwot
fTsKLQotfQotCi0jZW5kaWYgLy8gVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlf
TU9OSVRPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
Y29hL1JlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvci5tbSBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1JlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNo
TW9uaXRvci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkyZDY1NzE1NTk4Zjc3
NGFiZjllMzQ0OTA3NTcxNjNjYzQ0NTA4Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9S
ZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IubW0KKysrIC9kZXYvbnVsbApAQCAt
MSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmgiCi0KLSNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExB
WV9NT05JVE9SKQotCi0jaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1SZW1vdGVMYXllclRyZWVEaXNw
bGF5UmVmcmVzaE1vbml0b3I6OlJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQ
bGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhJiBk
cmF3aW5nQXJlYSkKLSAgICA6IERpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQpCi0gICAg
LCBtX2RyYXdpbmdBcmVhKGRyYXdpbmdBcmVhLmNyZWF0ZVdlYWtQdHIoKSkKLXsKLX0KLQotUmVt
b3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yOjp+UmVtb3RlTGF5ZXJUcmVlRGlzcGxh
eVJlZnJlc2hNb25pdG9yKCkKLXsKLSAgICBpZiAobV9kcmF3aW5nQXJlYSkKLSAgICAgICAgbV9k
cmF3aW5nQXJlYS0+d2lsbERlc3Ryb3lEaXNwbGF5UmVmcmVzaE1vbml0b3IodGhpcyk7Ci19Ci0K
LWJvb2wgUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yOjpyZXF1ZXN0UmVmcmVz
aENhbGxiYWNrKCkKLXsKLSAgICBpZiAoIW1fZHJhd2luZ0FyZWEgfHwgIWlzQWN0aXZlKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghaXNTY2hlZHVsZWQoKSkKLSAgICAgICAg
c3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWEmPigqbV9kcmF3aW5nQXJlYS5nZXQoKSkuc2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyRmx1c2goKTsKLQotICAgIHNldElzQWN0aXZlKHRydWUpOwotICAgIHNl
dElzU2NoZWR1bGVkKHRydWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbW90ZUxh
eWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcjo6ZGlkVXBkYXRlTGF5ZXJzKCkKLXsKLSAgICBz
ZXRJc1NjaGVkdWxlZChmYWxzZSk7Ci0KLSAgICBpZiAoIWlzUHJldmlvdXNGcmFtZURvbmUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNQcmV2aW91c0ZyYW1lRG9uZShmYWxzZSk7Ci0g
ICAgaGFuZGxlRGlzcGxheVJlZnJlc2hlZE5vdGlmaWNhdGlvbk9uTWFpblRocmVhZCh0aGlzKTsK
LX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlf
TU9OSVRPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9HcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL0dyYXBoaWNzTGF5ZXJDQVJlbW90ZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmRmNDJlOTQ3MzBmMTYzODNmOWI1YTczMmU4Mjk2Y2I1YzFhMjVmMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZUxheWVyVHJlZS9HcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNBUmVtb3RlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllclJlbW90
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitHcmFwaGljc0xheWVyQ0FSZW1v
dGU6On5HcmFwaGljc0xheWVyQ0FSZW1vdGUoKQoreworfQorCitib29sIEdyYXBoaWNzTGF5ZXJD
QVJlbW90ZTo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzKQoreworICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmZpbHRlcnNDYW5C
ZUNvbXBvc2l0ZWQoZmlsdGVycyk7Cit9CisKK1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IEdyYXBoaWNz
TGF5ZXJDQVJlbW90ZTo6Y3JlYXRlUGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKK3sKKyAgICBh
dXRvIHJlc3VsdCA9IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRlKGxheWVyVHlwZSwgb3du
ZXIsIG1fY29udGV4dCk7CisKKyAgICBpZiAocmVzdWx0LT5jYW5IYXZlQmFja2luZ1N0b3JlKCkp
CisgICAgICAgIHJlc3VsdC0+c2V0V2FudHNEZWVwQ29sb3JCYWNraW5nU3RvcmUoc2NyZWVuU3Vw
cG9ydHNFeHRlbmRlZENvbG9yKCkpOworCisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30K
KworUmVmPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBUmVtb3RlOjpjcmVhdGVQbGF0
Zm9ybUNBTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciwgUGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lcikKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVh
dGUocGxhdGZvcm1MYXllciwgb3duZXIsIG1fY29udGV4dCk7Cit9CisKK1JlZjxQbGF0Zm9ybUNB
QW5pbWF0aW9uPiBHcmFwaGljc0xheWVyQ0FSZW1vdGU6OmNyZWF0ZVBsYXRmb3JtQ0FBbmltYXRp
b24oUGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OmNyZWF0
ZSh0eXBlLCBrZXlQYXRoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvR3JhcGhp
Y3NMYXllckNBUmVtb3RlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1v
dGVMYXllclRyZWUvR3JhcGhpY3NMYXllckNBUmVtb3RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTRhOTI1N2E2
OWFiMmFlZmQxZWE4NmQwYzhiYzU2Yzg1Njc4YTc2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9HcmFwaGljc0xheWVy
Q0FSZW1vdGUuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzTGF5ZXJDQS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDsKKworY2xhc3Mg
R3JhcGhpY3NMYXllckNBUmVtb3RlIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDQSB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NMYXllckNBUmVtb3RlKFR5cGUgbGF5ZXJUeXBl
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50JiBjbGllbnQsIFJlbW90ZUxheWVyVHJlZUNv
bnRleHQmIGNvbnRleHQpCisgICAgICAgIDogR3JhcGhpY3NMYXllckNBKGxheWVyVHlwZSwgY2xp
ZW50KQorICAgICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIH5HcmFwaGljc0xheWVyQ0FSZW1vdGUoKTsKKworICAgIGJvb2wgZmlsdGVyc0NhbkJl
Q29tcG9zaXRlZChjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBib29sIGlzR3JhcGhpY3NMYXllckNBUmVtb3RlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgUmVmPFdlYkNvcmU6OlBsYXRmb3Jt
Q0FMYXllcj4gY3JlYXRlUGxhdGZvcm1DQUxheWVyKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6
TGF5ZXJUeXBlLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBvdmVycmlk
ZTsKKyAgICBSZWY8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVQbGF0Zm9ybUNBTGF5
ZXIoUGxhdGZvcm1MYXllciosIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIp
IG92ZXJyaWRlOworICAgIFJlZjxXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uPiBjcmVhdGVQ
bGF0Zm9ybUNBQW5pbWF0aW9uKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb246OkFuaW1hdGlv
blR5cGUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkgb3ZlcnJpZGU7CisKKyAgICAvLyBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGUgY2FuJ3QgY3VycmVudGx5IHByb3h5IGRpcmVjdGx5IGNvbXBvc2l0ZWQg
aW1hZ2UgY29udGVudHMsIHNvIG9wdCBvdXQgb2YgdGhpcyBvcHRpbWl6YXRpb24uCisgICAgYm9v
bCBzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKFdlYkNvcmU6OkltYWdlKikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICBSZW1vdGVMYXllclRyZWVDb250ZXh0
JiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19HUkFQSElDU0xBWUVSKFdlYktpdDo6R3JhcGhpY3NMYXllckNBUmVtb3RlLCBp
c0dyYXBoaWNzTGF5ZXJDQVJlbW90ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzJkNjhkZTg1MjQxYTMyZTU4MjFk
OGU3ZjNiY2QwZGU3MzVhODc5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
LmgKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGVfaAorI2RlZmluZSBQ
bGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1D
QUFuaW1hdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBFbmNvZGVyOworY2xhc3MgRGVjb2Rl
cjsKK307CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgVGV4dFN0cmVhbTsKK307CisKK09CSkNf
Q0xBU1MgQ0FMYXllcjsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUxheWVy
VHJlZUhvc3Q7CisKK2NsYXNzIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUgZmluYWwgOiBwdWJs
aWMgV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBjcmVhdGUoQW5pbWF0aW9uVHlwZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoKTsKKworICAgIHZpcnR1YWwgflBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUoKSB7
IH0KKworICAgIGJvb2wgaXNQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgUmVmPFBsYXRmb3JtQ0FBbmltYXRpb24+IGNvcHko
KSBjb25zdCBvdmVycmlkZTsKKworICAgIFN0cmluZyBrZXlQYXRoKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIHNldEJlZ2luVGltZShDRlRpbWVJbnRlcnZhbCkgb3ZlcnJpZGU7CisKKyAgICBDRlRpbWVJ
bnRlcnZhbCBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0RHVyYXRpb24o
Q0ZUaW1lSW50ZXJ2YWwpIG92ZXJyaWRlOworCisgICAgZmxvYXQgc3BlZWQoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIHNldFNwZWVkKGZsb2F0KSBvdmVycmlkZTsKKworICAgIENGVGltZUlu
dGVydmFsIHRpbWVPZmZzZXQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFRpbWVPZmZz
ZXQoQ0ZUaW1lSW50ZXJ2YWwpIG92ZXJyaWRlOworCisgICAgZmxvYXQgcmVwZWF0Q291bnQoKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFJlcGVhdENvdW50KGZsb2F0KSBvdmVycmlkZTsK
KworICAgIGJvb2wgYXV0b3JldmVyc2VzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRB
dXRvcmV2ZXJzZXMoYm9vbCkgb3ZlcnJpZGU7CisKKyAgICBGaWxsTW9kZVR5cGUgZmlsbE1vZGUo
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldEZpbGxNb2RlKEZpbGxNb2RlVHlwZSkgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIHNldFRpbWluZ0Z1bmN0aW9uKGNvbnN0IFdlYkNvcmU6OlRpbWlu
Z0Z1bmN0aW9uKiwgYm9vbCByZXZlcnNlID0gZmFsc2UpIG92ZXJyaWRlOworICAgIHZvaWQgY29w
eVRpbWluZ0Z1bmN0aW9uRnJvbShjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uJikg
b3ZlcnJpZGU7CisKKyAgICBib29sIGlzUmVtb3ZlZE9uQ29tcGxldGlvbigpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgc2V0UmVtb3ZlZE9uQ29tcGxldGlvbihib29sKSBvdmVycmlkZTsKKwor
ICAgIGJvb2wgaXNBZGRpdGl2ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0QWRkaXRp
dmUoYm9vbCkgb3ZlcnJpZGU7CisKKyAgICBWYWx1ZUZ1bmN0aW9uVHlwZSB2YWx1ZUZ1bmN0aW9u
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWYWx1ZUZ1bmN0aW9uKFZhbHVlRnVuY3Rp
b25UeXBlKSBvdmVycmlkZTsKKworICAgIC8vIEJhc2ljLWFuaW1hdGlvbiBwcm9wZXJ0aWVzLgor
ICAgIHZvaWQgc2V0RnJvbVZhbHVlKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldEZyb21W
YWx1ZShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOworICAg
IHZvaWQgc2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQzRCYpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBzZXRGcm9tVmFsdWUoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uKiwg
aW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb3B5
RnJvbVZhbHVlRnJvbShjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIHNldFRvVmFsdWUoZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsK
KyAgICB2b2lkIHNldFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uKiwgaW50
IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb3B5VG9W
YWx1ZUZyb20oY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOwor
CisgICAgLy8gS2V5ZnJhbWUtYW5pbWF0aW9uIHByb3BlcnRpZXMuCisgICAgdm9pZCBzZXRWYWx1
ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VmFsdWVzKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeD4mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRQb2ludDNEPiYpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb2xvcj4m
KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFdlYkNv
cmU6OkZpbHRlck9wZXJhdGlvbj4+JiwgaW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBjb3B5VmFsdWVzRnJvbShjb25zdCBXZWJDb3JlOjpQbGF0Zm9y
bUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEtleVRpbWVzKGNvbnN0IFZl
Y3RvcjxmbG9hdD4mKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvcHlLZXlUaW1lc0Zyb20oY29uc3Qg
V2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRU
aW1pbmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9u
Kj4mLCBib29sIHJldmVyc2UgPSBmYWxzZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb3B5VGltaW5n
RnVuY3Rpb25zRnJvbShjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJp
ZGU7CisKKyAgICBBbmltYXRpb25UeXBlIGFuaW1hdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3Byb3BlcnRpZXMuYW5pbWF0aW9uVHlwZTsgfQorICAgIHZvaWQgc2V0SGFzRXhwbGljaXRCZWdp
blRpbWUoYm9vbCBoYXNFeHBsaWNpdEJlZ2luVGltZSkgeyBtX3Byb3BlcnRpZXMuaGFzRXhwbGlj
aXRCZWdpblRpbWUgPSBoYXNFeHBsaWNpdEJlZ2luVGltZTsgfQorICAgIGJvb2wgaGFzRXhwbGlj
aXRCZWdpblRpbWUoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuaGFzRXhwbGljaXRCZWdp
blRpbWU7IH0KKworICAgIHZvaWQgZGlkU3RhcnQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSB7
IG1fcHJvcGVydGllcy5iZWdpblRpbWUgPSBiZWdpblRpbWU7IH0KKworICAgIGNsYXNzIEtleWZy
YW1lVmFsdWUgeworICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBLZXlmcmFtZVR5cGUgeworICAg
ICAgICAgICAgTnVtYmVyS2V5VHlwZSwKKyAgICAgICAgICAgIENvbG9yS2V5VHlwZSwKKyAgICAg
ICAgICAgIFBvaW50S2V5VHlwZSwKKyAgICAgICAgICAgIFRyYW5zZm9ybUtleVR5cGUsCisgICAg
ICAgICAgICBGaWx0ZXJLZXlUeXBlLAorICAgICAgICB9OworCisgICAgICAgIH5LZXlmcmFtZVZh
bHVlKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgS2V5ZnJhbWVWYWx1ZShmbG9h
dCB2YWx1ZSA9IDApCisgICAgICAgICAgICA6IGtleVR5cGUoTnVtYmVyS2V5VHlwZSkKKyAgICAg
ICAgICAgICwgbnVtYmVyKHZhbHVlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBL
ZXlmcmFtZVZhbHVlKFdlYkNvcmU6OkNvbG9yIHZhbHVlKQorICAgICAgICAgICAgOiBrZXlUeXBl
KENvbG9yS2V5VHlwZSkKKyAgICAgICAgICAgICwgY29sb3IodmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIEtleWZyYW1lVmFsdWUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dDNEJiB2YWx1ZSkKKyAgICAgICAgICAgIDoga2V5VHlwZShQb2ludEtleVR5cGUpCisgICAgICAg
ICAgICAsIHBvaW50KHZhbHVlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBLZXlm
cmFtZVZhbHVlKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKKyAg
ICAgICAgICAgIDoga2V5VHlwZShUcmFuc2Zvcm1LZXlUeXBlKQorICAgICAgICAgICAgLCB0cmFu
c2Zvcm0odmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEtleWZyYW1lVmFs
dWUoUmVmUHRyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbj4mJiB2YWx1ZSkKKyAgICAgICAgICAg
IDoga2V5VHlwZShGaWx0ZXJLZXlUeXBlKQorICAgICAgICAgICAgLCBmaWx0ZXIoV1RGTW92ZSh2
YWx1ZSkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEtleWZyYW1lVmFsdWUoY29u
c3QgS2V5ZnJhbWVWYWx1ZSYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgICp0aGlzID0g
b3RoZXI7CisgICAgICAgIH0KKworICAgICAgICBLZXlmcmFtZVZhbHVlJiBvcGVyYXRvcj0oY29u
c3QgS2V5ZnJhbWVWYWx1ZSYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGtleVR5cGUg
PSBvdGhlci5rZXlUeXBlOworICAgICAgICAgICAgc3dpdGNoIChrZXlUeXBlKSB7CisgICAgICAg
ICAgICBjYXNlIE51bWJlcktleVR5cGU6CisgICAgICAgICAgICAgICAgbnVtYmVyID0gb3RoZXIu
bnVtYmVyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb2xvcktl
eVR5cGU6CisgICAgICAgICAgICAgICAgY29sb3IgPSBvdGhlci5jb2xvcjsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUG9pbnRLZXlUeXBlOgorICAgICAgICAgICAg
ICAgIHBvaW50ID0gb3RoZXIucG9pbnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFRyYW5zZm9ybUtleVR5cGU6CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0g
b3RoZXIudHJhbnNmb3JtOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBGaWx0ZXJLZXlUeXBlOgorICAgICAgICAgICAgICAgIGZpbHRlciA9IG90aGVyLmZpbHRlcjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgS2V5ZnJhbWVUeXBlIGtleWZyYW1lVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIGtleVR5cGU7IH0KKworICAgICAgICBmbG9hdCBudW1iZXJWYWx1
ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChrZXlUeXBlID09IE51bWJl
cktleVR5cGUpOworICAgICAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICAgICAgfQorCisgICAg
ICAgIFdlYkNvcmU6OkNvbG9yIGNvbG9yVmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoa2V5VHlwZSA9PSBDb2xvcktleVR5cGUpOworICAgICAgICAgICAgcmV0dXJu
IGNvbG9yOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludDNE
JiBwb2ludFZhbHVlKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGtleVR5
cGUgPT0gUG9pbnRLZXlUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAg
fQorCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm1WYWx1ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChrZXlUeXBlID09
IFRyYW5zZm9ybUtleVR5cGUpOworICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbiogZmlsdGVyVmFs
dWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoa2V5VHlwZSA9PSBGaWx0
ZXJLZXlUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXIuZ2V0KCk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKKyAgICAgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKElQQzo6RGVjb2RlciYsIEtleWZyYW1lVmFsdWUmKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIEtleWZyYW1lVHlwZSBrZXlUeXBlOworICAgICAgICB1bmlvbiB7Cisg
ICAgICAgICAgICBmbG9hdCBudW1iZXI7CisgICAgICAgICAgICBXZWJDb3JlOjpDb2xvciBjb2xv
cjsKKyAgICAgICAgICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQzRCBwb2ludDsKKyAgICAgICAgICAg
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICAgICAgfTsKKyAg
ICAgICAgUmVmUHRyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbj4gZmlsdGVyOworICAgIH07CisK
KyAgICBzdHJ1Y3QgUHJvcGVydGllcyB7CisgICAgICAgIFByb3BlcnRpZXMoKQorICAgICAgICAg
ICAgOiBhbmltYXRpb25UeXBlKEJhc2ljKQorICAgICAgICAgICAgLCBiZWdpblRpbWUoMCkKKyAg
ICAgICAgICAgICwgZHVyYXRpb24oMCkKKyAgICAgICAgICAgICwgdGltZU9mZnNldCgwKQorICAg
ICAgICAgICAgLCByZXBlYXRDb3VudCgxKQorICAgICAgICAgICAgLCBzcGVlZCgxKQorICAgICAg
ICAgICAgLCBmaWxsTW9kZShOb0ZpbGxNb2RlKQorICAgICAgICAgICAgLCB2YWx1ZUZ1bmN0aW9u
KE5vVmFsdWVGdW5jdGlvbikKKyAgICAgICAgICAgICwgYXV0b1JldmVyc2VzKGZhbHNlKQorICAg
ICAgICAgICAgLCByZW1vdmVkT25Db21wbGV0aW9uKHRydWUpCisgICAgICAgICAgICAsIGFkZGl0
aXZlKGZhbHNlKQorICAgICAgICAgICAgLCByZXZlcnNlVGltaW5nRnVuY3Rpb25zKGZhbHNlKQor
ICAgICAgICAgICAgLCBoYXNFeHBsaWNpdEJlZ2luVGltZShmYWxzZSkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CisgICAg
ICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRlY29kZXImLCBQcm9wZXJ0aWVzJik7CisKKyAg
ICAgICAgU3RyaW5nIGtleVBhdGg7CisgICAgICAgIFBsYXRmb3JtQ0FBbmltYXRpb246OkFuaW1h
dGlvblR5cGUgYW5pbWF0aW9uVHlwZTsKKworICAgICAgICBkb3VibGUgYmVnaW5UaW1lOworICAg
ICAgICBkb3VibGUgZHVyYXRpb247CisgICAgICAgIGRvdWJsZSB0aW1lT2Zmc2V0OworICAgICAg
ICBmbG9hdCByZXBlYXRDb3VudDsKKyAgICAgICAgZmxvYXQgc3BlZWQ7CisKKyAgICAgICAgUGxh
dGZvcm1DQUFuaW1hdGlvbjo6RmlsbE1vZGVUeXBlIGZpbGxNb2RlOworICAgICAgICBQbGF0Zm9y
bUNBQW5pbWF0aW9uOjpWYWx1ZUZ1bmN0aW9uVHlwZSB2YWx1ZUZ1bmN0aW9uOworCisgICAgICAg
IGJvb2wgYXV0b1JldmVyc2VzOworICAgICAgICBib29sIHJlbW92ZWRPbkNvbXBsZXRpb247Cisg
ICAgICAgIGJvb2wgYWRkaXRpdmU7CisgICAgICAgIGJvb2wgcmV2ZXJzZVRpbWluZ0Z1bmN0aW9u
czsKKyAgICAgICAgYm9vbCBoYXNFeHBsaWNpdEJlZ2luVGltZTsKKworICAgICAgICAvLyBGb3Ig
YmFzaWMgYW5pbWF0aW9ucywgdGhlc2UgdmVjdG9ycyBoYXZlIHR3byBlbnRyaWVzLiBGb3Iga2V5
ZnJhbWUgYW5pbWF0aW9ucywgdHdvIG9yIG1vcmUuCisgICAgICAgIC8vIHRpbWluZ0Z1bmN0aW9u
cyBoYXMgbi0xIGVudHJpZXMuCisgICAgICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPiBrZXlWYWx1
ZXM7CisgICAgICAgIFZlY3RvcjxmbG9hdD4ga2V5VGltZXM7CisgICAgICAgIFZlY3RvcjxSZWZQ
dHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb24+PiB0aW1pbmdGdW5jdGlvbnM7CisgICAgfTsKKwor
ICAgIGNvbnN0IFByb3BlcnRpZXMmIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3Bl
cnRpZXM7IH0KKworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFByb3BlcnRp
ZXM+PiBBbmltYXRpb25zTGlzdDsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVMYXllckFuaW1hdGlv
bnMoQ0FMYXllciAqLCBSZW1vdGVMYXllclRyZWVIb3N0KiwgY29uc3QgQW5pbWF0aW9uc0xpc3Qm
IGFuaW1hdGlvbnNUb0FkZCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbmltYXRpb25zVG9SZW1v
dmUpOworCitwcml2YXRlOgorICAgIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUoQW5pbWF0aW9u
VHlwZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKKworICAgIFByb3BlcnRpZXMgbV9wcm9wZXJ0
aWVzOworfTsKKworV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWUmKTsKK1dURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBQbGF0Zm9ybUNB
QW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQU5JTUFUSU9OKFdlYktpdDo6UGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZSwgaXNQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlKCkpCisKKyNlbmRpZiAv
LyBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVt
b3RlLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVl
L1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDZlMjczYzNhNzE5ZTY5
MTAwZDE1ZjVhMzFhMWEyZDQ1ZmY2ZmY0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9u
UmVtb3RlLm1tCkBAIC0wLDAgKzEsOTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxhdGZvcm1D
QUFuaW1hdGlvblJlbW90ZS5oIgorCisjaW1wb3J0ICJBcmd1bWVudENvZGVycy5oIgorI2ltcG9y
dCAiUmVtb3RlTGF5ZXJUcmVlSG9zdC5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NMYXllci5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2EuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUZpbHRlcnMuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvVGltaW5nRnVuY3Rpb24uaD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29y
ZVNQSS5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0
Zi9DdXJyZW50VGltZS5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK3N0YXRpYyBkb3VibGUgbWVkaWFUaW1lVG9DdXJyZW50VGltZShDRlRp
bWVJbnRlcnZhbCB0KQoreworICAgIHJldHVybiBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KSArIHQgLSBDQUN1cnJlbnRNZWRpYVRpbWUoKTsKK30KKworc3RhdGljIE5TU3RyaW5nICogY29u
c3QgV0tFeHBsaWNpdEJlZ2luVGltZUZsYWcgPSBAIldLUGxhdGZvcm1DQUFuaW1hdGlvbkV4cGxp
Y2l0QmVnaW5UaW1lRmxhZyI7CisKK0BpbnRlcmZhY2UgV0tBbmltYXRpb25EZWxlZ2F0ZSA6IE5T
T2JqZWN0IDxDQUFuaW1hdGlvbkRlbGVnYXRlPiB7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZv
cm1MYXllcklEIF9sYXllcklEOworICAgIFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlSG9zdCogX2xh
eWVyVHJlZUhvc3Q7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aExheWVySUQ6KEdyYXBo
aWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRClsYXllcklEIGxheWVyVHJlZUhvc3Q6KFdlYktpdDo6
UmVtb3RlTGF5ZXJUcmVlSG9zdCopbGF5ZXJUcmVlSG9zdDsKKy0gKHZvaWQpaW52YWxpZGF0ZTsK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLQW5pbWF0aW9uRGVsZWdhdGUKKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoTGF5ZXJJRDooR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEKWxh
eWVySUQgbGF5ZXJUcmVlSG9zdDooV2ViS2l0OjpSZW1vdGVMYXllclRyZWVIb3N0KilsYXllclRy
ZWVIb3N0Cit7CisgICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgeworICAgICAgICBfbGF5
ZXJJRCA9IGxheWVySUQ7CisgICAgICAgIF9sYXllclRyZWVIb3N0ID0gbGF5ZXJUcmVlSG9zdDsK
KyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZQoreworICAg
IF9sYXllclRyZWVIb3N0ID0gbnVsbHB0cjsKK30KKworLSAodm9pZClhbmltYXRpb25EaWRTdGFy
dDooQ0FBbmltYXRpb24gKilhbmltYXRpb24KK3sKKyAgICBpZiAoIV9sYXllclRyZWVIb3N0KQor
ICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc0V4cGxpY2l0QmVnaW5UaW1lID0gW1thbmlt
YXRpb24gdmFsdWVGb3JLZXk6V0tFeHBsaWNpdEJlZ2luVGltZUZsYWddIGJvb2xWYWx1ZV07Cisg
ICAgQ0ZUaW1lSW50ZXJ2YWwgc3RhcnRUaW1lOworCisgICAgaWYgKGhhc0V4cGxpY2l0QmVnaW5U
aW1lKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hhdCB0aW1lIENBIHVzZWQgdG8gY29t
bWl0IHRoZSBhbmltYXRpb24sIHNvIGp1c3QgdXNlIHRoZSBjdXJyZW50IHRpbWUKKyAgICAgICAg
Ly8gKGV2ZW4gdGhvdWdoIHRoaXMgd2lsbCBiZSBzbGlnaHRseSBvZmYpLgorICAgICAgICBzdGFy
dFRpbWUgPSBtZWRpYVRpbWVUb0N1cnJlbnRUaW1lKENBQ3VycmVudE1lZGlhVGltZSgpKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgc3RhcnRUaW1lID0gbWVkaWFUaW1lVG9DdXJyZW50VGltZShbYW5p
bWF0aW9uIGJlZ2luVGltZV0pOworCisgICAgX2xheWVyVHJlZUhvc3QtPmFuaW1hdGlvbkRpZFN0
YXJ0KF9sYXllcklELCBhbmltYXRpb24sIHN0YXJ0VGltZSk7Cit9CisKKy0gKHZvaWQpYW5pbWF0
aW9uRGlkU3RvcDooQ0FBbmltYXRpb24gKilhbmltYXRpb24gZmluaXNoZWQ6KEJPT0wpZmluaXNo
ZWQKK3sKKyAgICBpZiAoIV9sYXllclRyZWVIb3N0KQorICAgICAgICByZXR1cm47CisKKyAgICBf
bGF5ZXJUcmVlSG9zdC0+YW5pbWF0aW9uRGlkRW5kKF9sYXllcklELCBhbmltYXRpb24pOworfQor
CitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGU6OktleWZyYW1lVmFsdWU6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0
Cit7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGtleVR5cGUpOworCisgICAgc3dpdGNoIChrZXlU
eXBlKSB7CisgICAgY2FzZSBOdW1iZXJLZXlUeXBlOgorICAgICAgICBlbmNvZGVyIDw8IG51bWJl
cjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2xvcktleVR5cGU6CisgICAgICAgIGVuY29k
ZXIgPDwgY29sb3I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUG9pbnRLZXlUeXBlOgorICAg
ICAgICBlbmNvZGVyIDw8IHBvaW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyYW5zZm9y
bUtleVR5cGU6CisgICAgICAgIGVuY29kZXIgPDwgdHJhbnNmb3JtOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZpbHRlcktleVR5cGU6CisgICAgICAgIGVuY29kZXIgPDwgKmZpbHRlci5nZXQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIFBsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGU6OktleWZyYW1lVmFsdWU6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFBsYXRm
b3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWUmIHZhbHVlKQoreworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVFbnVtKHZhbHVlLmtleVR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBzd2l0Y2ggKHZhbHVlLmtleVR5cGUpIHsKKyAgICBjYXNlIE51bWJlcktleVR5cGU6
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUubnVtYmVyKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2xvcktleVR5cGU6Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUuY29sb3IpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBvaW50S2V5VHlwZToKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZS5wb2ludCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJhbnNmb3JtS2V5VHlwZToKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZS50cmFuc2Zvcm0pKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbHRlcktleVR5cGU6CisgICAg
ICAgIGlmICghZGVjb2RlRmlsdGVyT3BlcmF0aW9uKGRlY29kZXIsIHZhbHVlLmZpbHRlcikpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRp
ZXM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8
PCBrZXlQYXRoOworICAgIGVuY29kZXIuZW5jb2RlRW51bShhbmltYXRpb25UeXBlKTsKKworICAg
IGVuY29kZXIgPDwgYmVnaW5UaW1lOworICAgIGVuY29kZXIgPDwgZHVyYXRpb247CisgICAgZW5j
b2RlciA8PCB0aW1lT2Zmc2V0OworICAgIGVuY29kZXIgPDwgcmVwZWF0Q291bnQ7CisgICAgZW5j
b2RlciA8PCBzcGVlZDsKKworICAgIGVuY29kZXIuZW5jb2RlRW51bShmaWxsTW9kZSk7CisgICAg
ZW5jb2Rlci5lbmNvZGVFbnVtKHZhbHVlRnVuY3Rpb24pOworCisgICAgZW5jb2RlciA8PCBhdXRv
UmV2ZXJzZXM7CisgICAgZW5jb2RlciA8PCByZW1vdmVkT25Db21wbGV0aW9uOworICAgIGVuY29k
ZXIgPDwgYWRkaXRpdmU7CisgICAgZW5jb2RlciA8PCByZXZlcnNlVGltaW5nRnVuY3Rpb25zOwor
ICAgIGVuY29kZXIgPDwgaGFzRXhwbGljaXRCZWdpblRpbWU7CisgICAgCisgICAgZW5jb2RlciA8
PCBrZXlWYWx1ZXM7CisgICAgZW5jb2RlciA8PCBrZXlUaW1lczsKKyAgICAKKyAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0aW1pbmdGdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIHRpbWluZ0Z1bmN0aW9uIDogdGltaW5nRnVuY3Rpb25zKSB7CisgICAg
ICAgIHN3aXRjaCAodGltaW5nRnVuY3Rpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIFRpbWlu
Z0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKKyAgICAgICAgICAgIGVuY29kZXIgPDwgKnN0YXRp
Y19jYXN0PExpbmVhclRpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24uZ2V0KCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlv
bjo6Q3ViaWNCZXppZXJGdW5jdGlvbjoKKyAgICAgICAgICAgIGVuY29kZXIgPDwgKnN0YXRpY19j
YXN0PEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbi5nZXQoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246
OlN0ZXBzRnVuY3Rpb246CisgICAgICAgICAgICBlbmNvZGVyIDw8ICpzdGF0aWNfY2FzdDxTdGVw
c1RpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24uZ2V0KCkpOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3ByaW5nRnVuY3Rpb246CisgICAg
ICAgICAgICBlbmNvZGVyIDw8ICpzdGF0aWNfY2FzdDxTcHJpbmdUaW1pbmdGdW5jdGlvbio+KHRp
bWluZ0Z1bmN0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorfQorCitib29sIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXM6OmRlY29k
ZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3Bl
cnRpZXMmIHByb3BlcnRpZXMpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9wZXJ0aWVz
LmtleVBhdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRW51bShwcm9wZXJ0aWVzLmFuaW1hdGlvblR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHByb3BlcnRpZXMuYmVnaW5UaW1lKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9wZXJ0aWVzLmR1
cmF0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShwcm9wZXJ0aWVzLnRpbWVPZmZzZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHByb3BlcnRpZXMucmVwZWF0Q291bnQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHByb3BlcnRpZXMuc3BlZWQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShwcm9w
ZXJ0aWVzLmZpbGxNb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUVudW0ocHJvcGVydGllcy52YWx1ZUZ1bmN0aW9uKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9wZXJ0aWVzLmF1dG9SZXZlcnNl
cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocHJv
cGVydGllcy5yZW1vdmVkT25Db21wbGV0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9wZXJ0aWVzLmFkZGl0aXZlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9wZXJ0aWVzLnJldmVyc2VU
aW1pbmdGdW5jdGlvbnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHByb3BlcnRpZXMuaGFzRXhwbGljaXRCZWdpblRpbWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHByb3BlcnRpZXMua2V5VmFsdWVz
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9w
ZXJ0aWVzLmtleVRpbWVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdWludDY0X3Qg
bnVtVGltaW5nRnVuY3Rpb25zOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobnVtVGltaW5nRnVu
Y3Rpb25zKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChudW1UaW1pbmdG
dW5jdGlvbnMpIHsKKyAgICAgICAgcHJvcGVydGllcy50aW1pbmdGdW5jdGlvbnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShudW1UaW1pbmdGdW5jdGlvbnMpOworCisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtVGltaW5nRnVuY3Rpb25zOyArK2kpIHsKKyAgICAgICAgCisgICAgICAg
ICAgICBUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25UeXBlIHR5cGU7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bSh0eXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgIFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rp
b247CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVGltaW5n
RnVuY3Rpb246OkxpbmVhckZ1bmN0aW9uOgorICAgICAgICAgICAgICAgIHRpbWluZ0Z1bmN0aW9u
ID0gTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoKnN0YXRpY19jYXN0PExpbmVhclRpbWluZ0Z1bmN0aW9uKj4odGltaW5n
RnVuY3Rpb24uZ2V0KCkpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBU
aW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjoKKyAgICAgICAgICAgICAgICB0aW1p
bmdGdW5jdGlvbiA9IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworICAgICAg
ICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoKnN0YXRpY19jYXN0PEN1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbi5nZXQoKSkpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246CisgICAgICAgICAg
ICAgICAgdGltaW5nRnVuY3Rpb24gPSBTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKCpzdGF0aWNfY2FzdDxTdGVwc1RpbWlu
Z0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24uZ2V0KCkpKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IFRpbWluZ0Z1bmN0aW9uOjpTcHJpbmdGdW5jdGlvbjoKKyAgICAgICAgICAgICAgICB0aW1pbmdG
dW5jdGlvbiA9IFNwcmluZ1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKCpzdGF0aWNfY2FzdDxTcHJpbmdUaW1pbmdGdW5jdGlvbio+
KHRpbWluZ0Z1bmN0aW9uLmdldCgpKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgcHJvcGVydGllcy50aW1pbmdGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUodGltaW5nRnVuY3Rpb24pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorICAgIAorUmVmPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGU6OmNyZWF0ZShQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlKHR5cGUsIGtleVBhdGgpKTsKK30KKworUmVmPFBsYXRmb3Jt
Q0FBbmltYXRpb24+IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OmNvcHkoKSBjb25zdAorewor
ICAgIGF1dG8gYW5pbWF0aW9uID0gY3JlYXRlKGFuaW1hdGlvblR5cGUoKSwga2V5UGF0aCgpKTsK
KyAgICAKKyAgICBhbmltYXRpb24tPnNldEJlZ2luVGltZShiZWdpblRpbWUoKSk7CisgICAgYW5p
bWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbigpKTsKKyAgICBhbmltYXRpb24tPnNldFNwZWVk
KHNwZWVkKCkpOworICAgIGFuaW1hdGlvbi0+c2V0VGltZU9mZnNldCh0aW1lT2Zmc2V0KCkpOwor
ICAgIGFuaW1hdGlvbi0+c2V0UmVwZWF0Q291bnQocmVwZWF0Q291bnQoKSk7CisgICAgYW5pbWF0
aW9uLT5zZXRBdXRvcmV2ZXJzZXMoYXV0b3JldmVyc2VzKCkpOworICAgIGFuaW1hdGlvbi0+c2V0
RmlsbE1vZGUoZmlsbE1vZGUoKSk7CisgICAgYW5pbWF0aW9uLT5zZXRSZW1vdmVkT25Db21wbGV0
aW9uKGlzUmVtb3ZlZE9uQ29tcGxldGlvbigpKTsKKyAgICBhbmltYXRpb24tPnNldEFkZGl0aXZl
KGlzQWRkaXRpdmUoKSk7CisgICAgYW5pbWF0aW9uLT5jb3B5VGltaW5nRnVuY3Rpb25Gcm9tKCp0
aGlzKTsKKyAgICBhbmltYXRpb24tPnNldFZhbHVlRnVuY3Rpb24odmFsdWVGdW5jdGlvbigpKTsK
KworICAgIGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU+KGFuaW1hdGlvbi5nZXQo
KSkuc2V0SGFzRXhwbGljaXRCZWdpblRpbWUoaGFzRXhwbGljaXRCZWdpblRpbWUoKSk7CisgICAg
CisgICAgLy8gQ29weSB0aGUgc3BlY2lmaWMgQmFzaWMgb3IgS2V5ZnJhbWUgdmFsdWVzLgorICAg
IGlmIChhbmltYXRpb25UeXBlKCkgPT0gS2V5ZnJhbWUpIHsKKyAgICAgICAgYW5pbWF0aW9uLT5j
b3B5VmFsdWVzRnJvbSgqdGhpcyk7CisgICAgICAgIGFuaW1hdGlvbi0+Y29weUtleVRpbWVzRnJv
bSgqdGhpcyk7CisgICAgICAgIGFuaW1hdGlvbi0+Y29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oKnRo
aXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFuaW1hdGlvbi0+Y29weUZyb21WYWx1ZUZyb20o
KnRoaXMpOworICAgICAgICBhbmltYXRpb24tPmNvcHlUb1ZhbHVlRnJvbSgqdGhpcyk7CisgICAg
fQorICAgIAorICAgIHJldHVybiBhbmltYXRpb247Cit9CisKK1BsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGU6OlBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUoQW5pbWF0aW9uVHlwZSB0eXBlLCBjb25z
dCBTdHJpbmcmIGtleVBhdGgpCisgICAgOiBQbGF0Zm9ybUNBQW5pbWF0aW9uKHR5cGUpCit7Cisg
ICAgbV9wcm9wZXJ0aWVzLmtleVBhdGggPSBrZXlQYXRoOworICAgIG1fcHJvcGVydGllcy5hbmlt
YXRpb25UeXBlID0gdHlwZTsKK30KKworU3RyaW5nIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6
OmtleVBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3Byb3BlcnRpZXMua2V5UGF0aDsKK30K
KworQ0ZUaW1lSW50ZXJ2YWwgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6YmVnaW5UaW1lKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmJlZ2luVGltZTsKK30KKwordm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRCZWdpblRpbWUoQ0ZUaW1lSW50ZXJ2YWwgdmFs
dWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLmJlZ2luVGltZSA9IHZhbHVlOworICAgIAorICAgIC8v
IEFsc28gc2V0IGEgZmxhZyB0byB0ZWxsIHVzIGlmIHdlJ3ZlIHBhc3NlZCBpbiBhIDAgdmFsdWUu
IAorICAgIC8vIFRoZSBmbGFnIGlzIG5lZWRlZCBiZWNhdXNlIGxhdGVyIGJlZ2luVGltZSB3aWxs
IGdldCBjaGFuZ2VkCisgICAgLy8gdG8gdGhlIHRpbWUgYXQgd2hpY2ggaXQgZmlyZWQgYW5kIHdl
IG5lZWQgdG8ga25vdyB3aGV0aGVyCisgICAgLy8gb3Igbm90IGl0IHdhcyAwIHRvIGJlZ2luIHdp
dGguCisgICAgaWYgKHZhbHVlKQorICAgICAgICBtX3Byb3BlcnRpZXMuaGFzRXhwbGljaXRCZWdp
blRpbWUgPSB2YWx1ZTsKK30KKworQ0ZUaW1lSW50ZXJ2YWwgUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZTo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3Byb3BlcnRpZXMuZHVyYXRp
b247Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0RHVyYXRpb24oQ0ZU
aW1lSW50ZXJ2YWwgdmFsdWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLmR1cmF0aW9uID0gdmFsdWU7
Cit9CisKK2Zsb2F0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OnNwZWVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLnNwZWVkOworfQorCit2b2lkIFBsYXRmb3JtQ0FBbmlt
YXRpb25SZW1vdGU6OnNldFNwZWVkKGZsb2F0IHZhbHVlKQoreworICAgIG1fcHJvcGVydGllcy5z
cGVlZCA9IHZhbHVlOworfQorCitDRlRpbWVJbnRlcnZhbCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVt
b3RlOjp0aW1lT2Zmc2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLnRpbWVP
ZmZzZXQ7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VGltZU9mZnNl
dChDRlRpbWVJbnRlcnZhbCB2YWx1ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMudGltZU9mZnNldCA9
IHZhbHVlOworfQorCitmbG9hdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpyZXBlYXRDb3Vu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJvcGVydGllcy5yZXBlYXRDb3VudDsKK30KKwor
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRSZXBlYXRDb3VudChmbG9hdCB2YWx1
ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMucmVwZWF0Q291bnQgPSB2YWx1ZTsKK30KKworYm9vbCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjphdXRvcmV2ZXJzZXMoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3Byb3BlcnRpZXMuYXV0b1JldmVyc2VzOworfQorCit2b2lkIFBsYXRmb3JtQ0FBbmlt
YXRpb25SZW1vdGU6OnNldEF1dG9yZXZlcnNlcyhib29sIHZhbHVlKQoreworICAgIG1fcHJvcGVy
dGllcy5hdXRvUmV2ZXJzZXMgPSB2YWx1ZTsKK30KKworUGxhdGZvcm1DQUFuaW1hdGlvbjo6Rmls
bE1vZGVUeXBlIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OmZpbGxNb2RlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmZpbGxNb2RlOworfQorCit2b2lkIFBsYXRmb3JtQ0FB
bmltYXRpb25SZW1vdGU6OnNldEZpbGxNb2RlKEZpbGxNb2RlVHlwZSB2YWx1ZSkKK3sKKyAgICBt
X3Byb3BlcnRpZXMuZmlsbE1vZGUgPSB2YWx1ZTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0
aW9uUmVtb3RlOjpzZXRUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiogdmFsdWUs
IGJvb2wgcmV2ZXJzZSkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFRpbWluZ0Z1bmN0aW9uPj4gdGlt
aW5nRnVuY3Rpb25zOworICAgIHRpbWluZ0Z1bmN0aW9ucy5hcHBlbmQodmFsdWUtPmNsb25lKCkp
OworCisgICAgbV9wcm9wZXJ0aWVzLnRpbWluZ0Z1bmN0aW9ucyA9IFdURk1vdmUodGltaW5nRnVu
Y3Rpb25zKTsKKyAgICBtX3Byb3BlcnRpZXMucmV2ZXJzZVRpbWluZ0Z1bmN0aW9ucyA9IHJldmVy
c2U7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weVRpbWluZ0Z1bmN0
aW9uRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKK3sKKyAgICBjb3B5VGlt
aW5nRnVuY3Rpb25zRnJvbSh2YWx1ZSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZTo6aXNSZW1vdmVkT25Db21wbGV0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9w
ZXJ0aWVzLnJlbW92ZWRPbkNvbXBsZXRpb247Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
blJlbW90ZTo6c2V0UmVtb3ZlZE9uQ29tcGxldGlvbihib29sIHZhbHVlKQoreworICAgIG1fcHJv
cGVydGllcy5yZW1vdmVkT25Db21wbGV0aW9uID0gdmFsdWU7Cit9CisKK2Jvb2wgUGxhdGZvcm1D
QUFuaW1hdGlvblJlbW90ZTo6aXNBZGRpdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJv
cGVydGllcy5hZGRpdGl2ZTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpz
ZXRBZGRpdGl2ZShib29sIHZhbHVlKQoreworICAgIG1fcHJvcGVydGllcy5hZGRpdGl2ZSA9IHZh
bHVlOworfQorCitQbGF0Zm9ybUNBQW5pbWF0aW9uOjpWYWx1ZUZ1bmN0aW9uVHlwZSBQbGF0Zm9y
bUNBQW5pbWF0aW9uUmVtb3RlOjp2YWx1ZUZ1bmN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcm9wZXJ0aWVzLnZhbHVlRnVuY3Rpb247Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
blJlbW90ZTo6c2V0VmFsdWVGdW5jdGlvbihWYWx1ZUZ1bmN0aW9uVHlwZSB2YWx1ZSkKK3sKKyAg
ICBtX3Byb3BlcnRpZXMudmFsdWVGdW5jdGlvbiA9IHZhbHVlOworfQorCit2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGU6OnNldEZyb21WYWx1ZShmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAo
YW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Byb3Bl
cnRpZXMua2V5VmFsdWVzLnJlc2l6ZSgyKTsKKyAgICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzWzBd
ID0gS2V5ZnJhbWVWYWx1ZSh2YWx1ZSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZTo6c2V0RnJvbVZhbHVlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKK3sK
KyAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzLnJlc2l6ZSgyKTsKKyAgICBtX3Byb3BlcnRpZXMua2V5
VmFsdWVzWzBdID0gS2V5ZnJhbWVWYWx1ZSh2YWx1ZSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZTo6c2V0RnJvbVZhbHVlKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit7
CisgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcy5yZXNpemUoMik7CisgICAgbV9wcm9wZXJ0aWVzLmtl
eVZhbHVlc1swXSA9IEtleWZyYW1lVmFsdWUodmFsdWUpOworfQorCit2b2lkIFBsYXRmb3JtQ0FB
bmltYXRpb25SZW1vdGU6OnNldEZyb21WYWx1ZShjb25zdCBDb2xvciYgdmFsdWUpCit7CisgICAg
aWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9w
cm9wZXJ0aWVzLmtleVZhbHVlcy5yZXNpemUoMik7CisgICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVl
c1swXSA9IEtleWZyYW1lVmFsdWUodmFsdWUpOworfQorCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGU6OnNldEZyb21WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwg
aW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKK3sKKyAgICBpZiAoYW5pbWF0aW9uVHlw
ZSgpICE9IEJhc2ljKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Byb3BlcnRpZXMua2V5VmFs
dWVzLnJlc2l6ZSgyKTsKKyAgICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzWzBdID0gS2V5ZnJhbWVW
YWx1ZShvcGVyYXRpb24tPmNsb25lKCkpOworfQorCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGU6OmNvcHlGcm9tVmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVl
KQoreworICAgIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUmIG90aGVyID0gZG93bmNh
c3Q8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZT4odmFsdWUpOworCisgICAgaWYgKG90aGVyLm1f
cHJvcGVydGllcy5rZXlWYWx1ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcy5yZXNpemUoMik7CisgICAgbV9wcm9wZXJ0aWVzLmtl
eVZhbHVlc1swXSA9IG90aGVyLm1fcHJvcGVydGllcy5rZXlWYWx1ZXNbMF07Cit9CisKK3ZvaWQg
UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VG9WYWx1ZShmbG9hdCB2YWx1ZSkKK3sKKyAg
ICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3Byb3BlcnRpZXMua2V5VmFsdWVzLnJlc2l6ZSgyKTsKKyAgICBtX3Byb3BlcnRpZXMua2V5VmFs
dWVzWzFdID0gS2V5ZnJhbWVWYWx1ZSh2YWx1ZSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvblJlbW90ZTo6c2V0VG9WYWx1ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUp
Cit7CisgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcy5yZXNpemUoMik7CisgICAgbV9wcm9wZXJ0aWVz
LmtleVZhbHVlc1sxXSA9IEtleWZyYW1lVmFsdWUodmFsdWUpOworfQorCit2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGU6OnNldFRvVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkK
K3sKKyAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzLnJlc2l6ZSgyKTsKKyAgICBtX3Byb3BlcnRpZXMu
a2V5VmFsdWVzWzFdID0gS2V5ZnJhbWVWYWx1ZSh2YWx1ZSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1D
QUFuaW1hdGlvblJlbW90ZTo6c2V0VG9WYWx1ZShjb25zdCBDb2xvciYgdmFsdWUpCit7CisgICAg
aWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9w
cm9wZXJ0aWVzLmtleVZhbHVlcy5yZXNpemUoMik7CisgICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVl
c1sxXSA9IEtleWZyYW1lVmFsdWUodmFsdWUpOworfQorCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGU6OnNldFRvVmFsdWUoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRpb24sIGlu
dCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCit7CisgICAgaWYgKGFuaW1hdGlvblR5cGUo
KSAhPSBCYXNpYykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFVOVVNFRF9QQVJBTShpbnRl
cm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOworICAgIEFTU0VSVChvcGVyYXRpb24pOworICAgIG1f
cHJvcGVydGllcy5rZXlWYWx1ZXMucmVzaXplKDIpOworICAgIG1fcHJvcGVydGllcy5rZXlWYWx1
ZXNbMV0gPSBLZXlmcmFtZVZhbHVlKG9wZXJhdGlvbi0+Y2xvbmUoKSk7Cit9CisKK3ZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weVRvVmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FB
bmltYXRpb24mIHZhbHVlKQoreworICAgIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUm
IG90aGVyID0gZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZT4odmFsdWUpOworCisg
ICAgaWYgKG90aGVyLm1fcHJvcGVydGllcy5rZXlWYWx1ZXMuc2l6ZSgpIDwgMikKKyAgICAgICAg
cmV0dXJuOworICAgIG1fcHJvcGVydGllcy5rZXlWYWx1ZXMucmVzaXplKDIpOworICAgIG1fcHJv
cGVydGllcy5rZXlWYWx1ZXNbMV0gPSBvdGhlci5tX3Byb3BlcnRpZXMua2V5VmFsdWVzWzFdOwor
fQorCisvLyBLZXlmcmFtZS1hbmltYXRpb24gcHJvcGVydGllcy4KK3ZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKK3sK
KyAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQorICAgICAgICByZXR1cm47CisK
KyAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT4ga2V5ZnJhbWVzOworICAgIGtleWZyYW1lcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHZhbHVlcy5zaXplKCkpOworICAgIAorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQorICAgICAgICBrZXlmcmFtZXMudW5jaGVj
a2VkQXBwZW5kKEtleWZyYW1lVmFsdWUodmFsdWVzW2ldKSk7CisgICAgCisgICAgbV9wcm9wZXJ0
aWVzLmtleVZhbHVlcyA9IFdURk1vdmUoa2V5ZnJhbWVzKTsKK30KKwordm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uUmVtb3RlOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFRyYW5zZm9ybWF0aW9uTWF0
cml4PiYgdmFsdWVzKQoreworICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IGtleWZy
YW1lczsKKyAgICBrZXlmcmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2YWx1ZXMuc2l6ZSgp
KTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkK
KyAgICAgICAga2V5ZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChLZXlmcmFtZVZhbHVlKHZhbHVlc1tp
XSkpOworICAgIAorICAgIG1fcHJvcGVydGllcy5rZXlWYWx1ZXMgPSBXVEZNb3ZlKGtleWZyYW1l
cyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0
IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZXMpCit7CisgICAgaWYgKGFuaW1hdGlvblR5cGUo
KSAhPSBLZXlmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBWZWN0b3I8S2V5
ZnJhbWVWYWx1ZT4ga2V5ZnJhbWVzOworICAgIGtleWZyYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHZhbHVlcy5zaXplKCkpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFs
dWVzLnNpemUoKTsgKytpKQorICAgICAgICBrZXlmcmFtZXMudW5jaGVja2VkQXBwZW5kKEtleWZy
YW1lVmFsdWUodmFsdWVzW2ldKSk7CisgICAgCisgICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9
IFdURk1vdmUoa2V5ZnJhbWVzKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPENvbG9yPiYgdmFsdWVzKQoreworICAgIGlmIChhbmlt
YXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
VmVjdG9yPEtleWZyYW1lVmFsdWU+IGtleWZyYW1lczsKKyAgICBrZXlmcmFtZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSh2YWx1ZXMuc2l6ZSgpKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgICAga2V5ZnJhbWVzLnVuY2hlY2tlZEFw
cGVuZChLZXlmcmFtZVZhbHVlKHZhbHVlc1tpXSkpOworICAgIAorICAgIG1fcHJvcGVydGllcy5r
ZXlWYWx1ZXMgPSBXVEZNb3ZlKGtleWZyYW1lcyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9u
Pj4mIHZhbHVlcywgaW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKK3sKKyAgICBVTlVT
RURfUEFSQU0oaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKKyAgICAKKyAgICBpZiAoYW5p
bWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IFZlY3RvcjxLZXlmcmFtZVZhbHVlPiBrZXlmcmFtZXM7CisgICAga2V5ZnJhbWVzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkodmFsdWVzLnNpemUoKSk7CisgICAgCisgICAgZm9yIChhdXRvJiB2YWx1
ZSA6IHZhbHVlcykKKyAgICAgICAga2V5ZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChLZXlmcmFtZVZh
bHVlIHsgdmFsdWUuY29weVJlZigpIH0pOworICAgIAorICAgIG1fcHJvcGVydGllcy5rZXlWYWx1
ZXMgPSBXVEZNb3ZlKGtleWZyYW1lcyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZTo6Y29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCit7
CisgICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9IGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGU+KHZhbHVlKS5tX3Byb3BlcnRpZXMua2V5VmFsdWVzOworfQorCit2b2lkIFBsYXRm
b3JtQ0FBbmltYXRpb25SZW1vdGU6OnNldEtleVRpbWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtl
eVRpbWVzKQoreworICAgIG1fcHJvcGVydGllcy5rZXlUaW1lcyA9IGtleVRpbWVzOworfQorCit2
b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OmNvcHlLZXlUaW1lc0Zyb20oY29uc3QgUGxh
dGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLmtleVRpbWVzID0g
ZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZT4odmFsdWUpLm1fcHJvcGVydGllcy5r
ZXlUaW1lczsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRUaW1pbmdG
dW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9uKj4mIHZhbHVlcywgYm9v
bCByZXZlcnNlKQoreworICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb24+
PiB0aW1pbmdGdW5jdGlvbnM7CisgICAgdGltaW5nRnVuY3Rpb25zLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkodmFsdWVzLnNpemUoKSk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
YWx1ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHRpbWluZ0Z1bmN0aW9ucy51bmNoZWNrZWRBcHBl
bmQodmFsdWVzW2ldLT5jbG9uZSgpKTsKKyAgICAKKyAgICBtX3Byb3BlcnRpZXMudGltaW5nRnVu
Y3Rpb25zID0gV1RGTW92ZSh0aW1pbmdGdW5jdGlvbnMpOworICAgIG1fcHJvcGVydGllcy5yZXZl
cnNlVGltaW5nRnVuY3Rpb25zID0gcmV2ZXJzZTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0
aW9uUmVtb3RlOjpjb3B5VGltaW5nRnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0
aW9uJiB2YWx1ZSkKK3sKKyAgICBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlJiBvdGhl
ciA9IGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU+KHZhbHVlKTsKKworICAgIG1f
cHJvcGVydGllcy50aW1pbmdGdW5jdGlvbnMgPSBvdGhlci5tX3Byb3BlcnRpZXMudGltaW5nRnVu
Y3Rpb25zOworICAgIG1fcHJvcGVydGllcy5yZXZlcnNlVGltaW5nRnVuY3Rpb25zID0gb3RoZXIu
bV9wcm9wZXJ0aWVzLnJldmVyc2VUaW1pbmdGdW5jdGlvbnM7Cit9CisKK3N0YXRpYyBOU09iamVj
dCogYW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0
aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQoreworICAgIHN3aXRjaCAo
a2V5ZnJhbWVWYWx1ZS5rZXlmcmFtZVR5cGUoKSkgeworICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1h
dGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6TnVtYmVyS2V5VHlwZToKKyAgICAgICAgcmV0dXJu
IEAoa2V5ZnJhbWVWYWx1ZS5udW1iZXJWYWx1ZSgpKTsKKyAgICAgICAgICAgIAorICAgIGNhc2Ug
UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6Q29sb3JLZXlUeXBlOiB7
CisgICAgICAgIENvbG9yIGNvbG9yID0ga2V5ZnJhbWVWYWx1ZS5jb2xvclZhbHVlKCk7CisgICAg
ICAgIHJldHVybiBAWyBAKGNvbG9yLnJlZCgpKSwgQChjb2xvci5ncmVlbigpKSwgQChjb2xvci5i
bHVlKCkpLCBAKGNvbG9yLmFscGhhKCkpIF07CisgICAgfQorCisgICAgY2FzZSBQbGF0Zm9ybUNB
QW5pbWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlOjpQb2ludEtleVR5cGU6IHsKKyAgICAgICAg
RmxvYXRQb2ludDNEIHBvaW50ID0ga2V5ZnJhbWVWYWx1ZS5wb2ludFZhbHVlKCk7CisgICAgICAg
IHJldHVybiBAWyBAKHBvaW50LngoKSksIEAocG9pbnQueSgpKSwgQChwb2ludC56KCkpIF07Cisg
ICAgfQorICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6
VHJhbnNmb3JtS2V5VHlwZToKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJh
bnNmb3JtM0Q6a2V5ZnJhbWVWYWx1ZS50cmFuc2Zvcm1WYWx1ZSgpXTsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6RmlsdGVy
S2V5VHlwZToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZv
ck9wZXJhdGlvbihrZXlmcmFtZVZhbHVlLmZpbHRlclZhbHVlKCksIDAgLyogdW51c2VkICovKS5h
dXRvcmVsZWFzZSgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWRkQW5pbWF0aW9uVG9MYXll
cihDQUxheWVyICpsYXllciwgUmVtb3RlTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRp
ZXMmIHByb3BlcnRpZXMpCit7CisgICAgUmV0YWluUHRyPENBUHJvcGVydHlBbmltYXRpb24+IGNh
QW5pbWF0aW9uOworICAgIHN3aXRjaCAocHJvcGVydGllcy5hbmltYXRpb25UeXBlKSB7CisgICAg
Y2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpCYXNpYzogeworICAgICAgICBSZXRhaW5QdHI8Q0FC
YXNpY0FuaW1hdGlvbj4gYmFzaWNBbmltYXRpb247CisgICAgICAgIGJhc2ljQW5pbWF0aW9uID0g
W0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRo
XTsKKyAgICAgICAgCisgICAgICAgIGlmIChwcm9wZXJ0aWVzLmtleVZhbHVlcy5zaXplKCkgPiAx
KSB7CisgICAgICAgICAgICBbYmFzaWNBbmltYXRpb24gc2V0RnJvbVZhbHVlOmFuaW1hdGlvblZh
bHVlRnJvbUtleWZyYW1lVmFsdWUocHJvcGVydGllcy5rZXlWYWx1ZXNbMF0pXTsKKyAgICAgICAg
ICAgIFtiYXNpY0FuaW1hdGlvbiBzZXRUb1ZhbHVlOmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1l
VmFsdWUocHJvcGVydGllcy5rZXlWYWx1ZXNbMV0pXTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKHByb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zLnNpemUoKSkKKyAgICAgICAgICAg
IFtiYXNpY0FuaW1hdGlvbiBzZXRUaW1pbmdGdW5jdGlvbjp0b0NBTWVkaWFUaW1pbmdGdW5jdGlv
bihwcm9wZXJ0aWVzLnRpbWluZ0Z1bmN0aW9uc1swXS5nZXQoKSwgcHJvcGVydGllcy5yZXZlcnNl
VGltaW5nRnVuY3Rpb25zKV07CisgICAgICAgIAorICAgICAgICBjYUFuaW1hdGlvbiA9IGJhc2lj
QW5pbWF0aW9uOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQbGF0Zm9ybUNBQW5p
bWF0aW9uOjpLZXlmcmFtZTogeworICAgICAgICBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlv
bj4ga2V5ZnJhbWVBbmltYXRpb247CisgICAgICAgIGtleWZyYW1lQW5pbWF0aW9uID0gW0NBS2V5
ZnJhbWVBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsK
KworICAgICAgICBpZiAocHJvcGVydGllcy5rZXlWYWx1ZXMuc2l6ZSgpKSB7CisgICAgICAgICAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGtleWZyYW1lcyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpwcm9wZXJ0aWVzLmtleVZhbHVlcy5zaXpl
KCldKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiBwcm9wZXJ0aWVzLmtl
eVZhbHVlcykKKyAgICAgICAgICAgICAgICBba2V5ZnJhbWVzIGFkZE9iamVjdDphbmltYXRpb25W
YWx1ZUZyb21LZXlmcmFtZVZhbHVlKHZhbHVlKV07CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFtrZXlmcmFtZUFuaW1hdGlvbiBzZXRWYWx1ZXM6a2V5ZnJhbWVzLmdldCgpXTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChwcm9wZXJ0aWVzLmtleVRpbWVzLnNpemUoKSkgeworICAgICAgICAg
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBrZXlUaW1lcyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpwcm9wZXJ0aWVzLmtleVRpbWVzLnNpemUo
KV0pOworICAgICAgICAgICAgZm9yIChhdXRvIGtleVRpbWUgOiBwcm9wZXJ0aWVzLmtleVRpbWVz
KQorICAgICAgICAgICAgICAgIFtrZXlUaW1lcyBhZGRPYmplY3Q6QChrZXlUaW1lKV07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFtrZXlmcmFtZUFuaW1hdGlvbiBzZXRLZXlUaW1lczprZXlU
aW1lcy5nZXQoKV07CisgICAgICAgIH0KKworICAgICAgICBpZiAocHJvcGVydGllcy50aW1pbmdG
dW5jdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+
IHRpbWluZ0Z1bmN0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhDYXBhY2l0eTpwcm9wZXJ0aWVzLnRpbWluZ0Z1bmN0aW9ucy5zaXplKCldKTsKKyAgICAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgdGltaW5nRnVuY3Rpb24gOiBwcm9wZXJ0aWVzLnRpbWluZ0Z1
bmN0aW9ucykKKyAgICAgICAgICAgICAgICBbdGltaW5nRnVuY3Rpb25zIGFkZE9iamVjdDp0b0NB
TWVkaWFUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbi5nZXQoKSwgcHJvcGVydGllcy5yZXZl
cnNlVGltaW5nRnVuY3Rpb25zKV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFtrZXlmcmFt
ZUFuaW1hdGlvbiBzZXRUaW1pbmdGdW5jdGlvbnM6dGltaW5nRnVuY3Rpb25zLmdldCgpXTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FBbmltYXRpb24gPSBrZXlmcmFtZUFuaW1hdGlv
bjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6
U3ByaW5nOiB7CisgICAgICAgIFJldGFpblB0cjxDQVNwcmluZ0FuaW1hdGlvbj4gc3ByaW5nQW5p
bWF0aW9uOworICAgICAgICBzcHJpbmdBbmltYXRpb24gPSBbQ0FTcHJpbmdBbmltYXRpb24gYW5p
bWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKKyAgICAgICAgCisgICAgICAg
IGlmIChwcm9wZXJ0aWVzLmtleVZhbHVlcy5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICBbc3By
aW5nQW5pbWF0aW9uIHNldEZyb21WYWx1ZTphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVl
KHByb3BlcnRpZXMua2V5VmFsdWVzWzBdKV07CisgICAgICAgICAgICBbc3ByaW5nQW5pbWF0aW9u
IHNldFRvVmFsdWU6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShwcm9wZXJ0aWVzLmtl
eVZhbHVlc1sxXSldOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocHJvcGVydGll
cy50aW1pbmdGdW5jdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBhdXRvJiB0aW1pbmdGdW5j
dGlvbiA9IHByb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zWzBdOworICAgICAgICAgICAgaWYgKHRp
bWluZ0Z1bmN0aW9uLT5pc1NwcmluZ1RpbWluZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBmdW5jdGlvbiA9ICpzdGF0aWNfY2FzdDxjb25zdCBTcHJpbmdUaW1pbmdGdW5jdGlv
bio+KHRpbWluZ0Z1bmN0aW9uLmdldCgpKTsKKyAgICAgICAgICAgICAgICBbc3ByaW5nQW5pbWF0
aW9uIHNldE1hc3M6ZnVuY3Rpb24ubWFzcygpXTsKKyAgICAgICAgICAgICAgICBbc3ByaW5nQW5p
bWF0aW9uIHNldFN0aWZmbmVzczpmdW5jdGlvbi5zdGlmZm5lc3MoKV07CisgICAgICAgICAgICAg
ICAgW3NwcmluZ0FuaW1hdGlvbiBzZXREYW1waW5nOmZ1bmN0aW9uLmRhbXBpbmcoKV07CisgICAg
ICAgICAgICAgICAgW3NwcmluZ0FuaW1hdGlvbiBzZXRJbml0aWFsVmVsb2NpdHk6ZnVuY3Rpb24u
aW5pdGlhbFZlbG9jaXR5KCldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNh
QW5pbWF0aW9uID0gc3ByaW5nQW5pbWF0aW9uOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
fQorICAgIAorICAgIFtjYUFuaW1hdGlvbiBzZXRCZWdpblRpbWU6cHJvcGVydGllcy5iZWdpblRp
bWVdOworICAgIFtjYUFuaW1hdGlvbiBzZXREdXJhdGlvbjpwcm9wZXJ0aWVzLmR1cmF0aW9uXTsK
KyAgICBbY2FBbmltYXRpb24gc2V0VGltZU9mZnNldDpwcm9wZXJ0aWVzLnRpbWVPZmZzZXRdOwor
ICAgIFtjYUFuaW1hdGlvbiBzZXRSZXBlYXRDb3VudDpwcm9wZXJ0aWVzLnJlcGVhdENvdW50XTsK
KyAgICBbY2FBbmltYXRpb24gc2V0U3BlZWQ6cHJvcGVydGllcy5zcGVlZF07CisgICAgW2NhQW5p
bWF0aW9uIHNldEF1dG9yZXZlcnNlczpwcm9wZXJ0aWVzLmF1dG9SZXZlcnNlc107CisgICAgW2Nh
QW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246cHJvcGVydGllcy5yZW1vdmVkT25Db21w
bGV0aW9uXTsKKyAgICBbY2FBbmltYXRpb24gc2V0QWRkaXRpdmU6cHJvcGVydGllcy5hZGRpdGl2
ZV07CisgICAgCisgICAgaWYgKHByb3BlcnRpZXMuZmlsbE1vZGUgIT0gUGxhdGZvcm1DQUFuaW1h
dGlvbjo6Tm9GaWxsTW9kZSkKKyAgICAgICAgW2NhQW5pbWF0aW9uIHNldEZpbGxNb2RlOnRvQ0FG
aWxsTW9kZVR5cGUocHJvcGVydGllcy5maWxsTW9kZSldOworCisgICAgaWYgKHByb3BlcnRpZXMu
dmFsdWVGdW5jdGlvbiAhPSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpOb1ZhbHVlRnVuY3Rpb24pCisg
ICAgICAgIFtjYUFuaW1hdGlvbiBzZXRWYWx1ZUZ1bmN0aW9uOltDQVZhbHVlRnVuY3Rpb24gZnVu
Y3Rpb25XaXRoTmFtZTp0b0NBVmFsdWVGdW5jdGlvblR5cGUocHJvcGVydGllcy52YWx1ZUZ1bmN0
aW9uKV1dOworICAgIAorICAgIGlmIChwcm9wZXJ0aWVzLmhhc0V4cGxpY2l0QmVnaW5UaW1lKQor
ICAgICAgICBbY2FBbmltYXRpb24gc2V0VmFsdWU6QFlFUyBmb3JLZXk6V0tFeHBsaWNpdEJlZ2lu
VGltZUZsYWddOworICAgIAorICAgIGlmIChsYXllclRyZWVIb3N0KSB7CisgICAgICAgIEdyYXBo
aWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklEID0gUmVtb3RlTGF5ZXJUcmVlSG9zdDo6
bGF5ZXJJRChsYXllcik7CisgICAgCisgICAgICAgIFJldGFpblB0cjxXS0FuaW1hdGlvbkRlbGVn
YXRlPiYgZGVsZWdhdGUgPSBsYXllclRyZWVIb3N0LT5hbmltYXRpb25EZWxlZ2F0ZXMoKS5hZGQo
bGF5ZXJJRCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICBpZiAoIWRlbGVnYXRl
KQorICAgICAgICAgICAgZGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tBbmltYXRpb25EZWxlZ2F0ZSBh
bGxvY10gaW5pdFdpdGhMYXllcklEOmxheWVySUQgbGF5ZXJUcmVlSG9zdDpsYXllclRyZWVIb3N0
XSk7CisKKyAgICAgICAgW2NhQW5pbWF0aW9uIHNldERlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsK
KyAgICB9CisgICAgCisgICAgW2xheWVyIGFkZEFuaW1hdGlvbjpjYUFuaW1hdGlvbi5nZXQoKSBm
b3JLZXk6a2V5XTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjp1cGRhdGVM
YXllckFuaW1hdGlvbnMoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvc3QsIGNvbnN0IEFuaW1hdGlvbnNMaXN0JiBhbmltYXRpb25zVG9BZGQsIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgYW5pbWF0aW9uc1RvUmVtb3ZlKQoreworICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKworICAgIGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiBhbmltYXRpb25z
VG9SZW1vdmUpCisgICAgICAgIFtsYXllciByZW1vdmVBbmltYXRpb25Gb3JLZXk6dmFsdWVdOwor
CisgICAgZm9yIChjb25zdCBhdXRvJiBrZXlBbmltYXRpb25QYWlyIDogYW5pbWF0aW9uc1RvQWRk
KQorICAgICAgICBhZGRBbmltYXRpb25Ub0xheWVyKGxheWVyLCBsYXllclRyZWVIb3N0LCBrZXlB
bmltYXRpb25QYWlyLmZpcnN0LCBrZXlBbmltYXRpb25QYWlyLnNlY29uZCk7CisKKyAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mdHMsIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWUm
IHZhbHVlKQoreworICAgIHN3aXRjaCAodmFsdWUua2V5ZnJhbWVUeXBlKCkpIHsKKyAgICBjYXNl
IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWU6Ok51bWJlcktleVR5cGU6
CisgICAgICAgIHRzIDw8ICJudW1iZXI9IiA8PCB2YWx1ZS5udW1iZXJWYWx1ZSgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFs
dWU6OkNvbG9yS2V5VHlwZToKKyAgICAgICAgdHMgPDwgImNvbG9yPSI7CisgICAgICAgIHRzIDw8
IHZhbHVlLmNvbG9yVmFsdWUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUNB
QW5pbWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlOjpQb2ludEtleVR5cGU6CisgICAgICAgIHRz
IDw8ICJwb2ludD0iOworICAgICAgICB0cyA8PCB2YWx1ZS5wb2ludFZhbHVlKCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1
ZTo6VHJhbnNmb3JtS2V5VHlwZToKKyAgICAgICAgdHMgPDwgInRyYW5zZm9ybT0iOworICAgICAg
ICB0cyA8PCB2YWx1ZS50cmFuc2Zvcm1WYWx1ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWU6OkZpbHRlcktleVR5cGU6
CisgICAgICAgIHRzIDw8ICJmaWx0ZXI9IjsKKyAgICAgICAgaWYgKHZhbHVlLmZpbHRlclZhbHVl
KCkpCisgICAgICAgICAgICB0cyA8PCAqdmFsdWUuZmlsdGVyVmFsdWUoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdHMgPDwgIm51bGwiOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzJiBhbmltYXRpb24pCit7
CisgICAgdHMgPDwgInR5cGU9IjsKKyAgICB0cyA8PCBhbmltYXRpb24uYW5pbWF0aW9uVHlwZTsK
KyAgICB0cyA8PCAiIGtleVBhdGg9IjsKKyAgICB0cyA8PCBhbmltYXRpb24ua2V5UGF0aDsKKwor
ICAgIGlmIChhbmltYXRpb24uYmVnaW5UaW1lKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJl
Z2luVGltZSIsIGFuaW1hdGlvbi5iZWdpblRpbWUpOworCisgICAgaWYgKGFuaW1hdGlvbi5kdXJh
dGlvbikKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJkdXJhdGlvbiIsIGFuaW1hdGlvbi5kdXJh
dGlvbik7CisKKyAgICBpZiAoYW5pbWF0aW9uLnRpbWVPZmZzZXQpCisgICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgidGltZU9mZnNldCIsIGFuaW1hdGlvbi50aW1lT2Zmc2V0KTsKKworICAgIHRzLmR1
bXBQcm9wZXJ0eSgicmVwZWF0Q291bnQiLCBhbmltYXRpb24ucmVwZWF0Q291bnQpOworCisgICAg
aWYgKGFuaW1hdGlvbi5zcGVlZCAhPSAxKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNwZWVk
IiwgYW5pbWF0aW9uLnNwZWVkKTsKKworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbE1vZGUiLCBh
bmltYXRpb24uZmlsbE1vZGUpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgidmFsdWVGdW5jdGlvbiIs
IGFuaW1hdGlvbi52YWx1ZUZ1bmN0aW9uKTsKKworICAgIGlmIChhbmltYXRpb24uYXV0b1JldmVy
c2VzKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoImF1dG9SZXZlcnNlcyIsIGFuaW1hdGlvbi5h
dXRvUmV2ZXJzZXMpOworCisgICAgaWYgKCFhbmltYXRpb24ucmVtb3ZlZE9uQ29tcGxldGlvbikK
KyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJyZW1vdmVkT25Db21wbGV0aW9uIiwgYW5pbWF0aW9u
LnJlbW92ZWRPbkNvbXBsZXRpb24pOworCisgICAgaWYgKGFuaW1hdGlvbi5hZGRpdGl2ZSkKKyAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJhZGRpdGl2ZSIsIGFuaW1hdGlvbi5hZGRpdGl2ZSk7CisK
KyAgICBpZiAoYW5pbWF0aW9uLnJldmVyc2VUaW1pbmdGdW5jdGlvbnMpCisgICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgicmV2ZXJzZVRpbWluZ0Z1bmN0aW9ucyIsIGFuaW1hdGlvbi5yZXZlcnNlVGlt
aW5nRnVuY3Rpb25zKTsKKworICAgIGlmIChhbmltYXRpb24uaGFzRXhwbGljaXRCZWdpblRpbWUp
CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiaGFzRXhwbGljaXRCZWdpblRpbWUiLCBhbmltYXRp
b24uaGFzRXhwbGljaXRCZWdpblRpbWUpOworCisgICAgdHMgPDwgIlxuIjsKKyAgICB0cy5pbmNy
ZWFzZUluZGVudCgpOworICAgIHRzLndyaXRlSW5kZW50KCk7CisgICAgdHMgPDwgIigiIDw8ICJr
ZXlmcmFtZXMiOworICAgIHRzLmluY3JlYXNlSW5kZW50KCk7CisKKyAgICBzaXplX3QgbWF4RnJh
bWVzID0gc3RkOjptYXgoYW5pbWF0aW9uLmtleVZhbHVlcy5zaXplKCksIGFuaW1hdGlvbi5rZXlU
aW1lcy5zaXplKCkpOworICAgIG1heEZyYW1lcyA9IHN0ZDo6bWF4KG1heEZyYW1lcywgYW5pbWF0
aW9uLnRpbWluZ0Z1bmN0aW9ucy5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtYXhGcmFtZXM7ICsraSkgeworICAgICAgICB0cyA8PCAiXG4iOworICAgICAgICB0cy53cml0
ZUluZGVudCgpOworICAgICAgICB0cyA8PCAiKGtleWZyYW1lICIgPDwgdW5zaWduZWQoaSk7Cisg
ICAgICAgIGlmIChpIDwgYW5pbWF0aW9uLmtleVRpbWVzLnNpemUoKSkKKyAgICAgICAgICAgIHRz
LmR1bXBQcm9wZXJ0eSgidGltZSIsIGFuaW1hdGlvbi5rZXlUaW1lc1tpXSk7CisKKyAgICAgICAg
aWYgKGkgPCBhbmltYXRpb24udGltaW5nRnVuY3Rpb25zLnNpemUoKSAmJiBhbmltYXRpb24udGlt
aW5nRnVuY3Rpb25zW2ldKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5PGNvbnN0IFRpbWlu
Z0Z1bmN0aW9uJj4oInRpbWluZyBmdW5jdGlvbiIsICphbmltYXRpb24udGltaW5nRnVuY3Rpb25z
W2ldKTsKKworICAgICAgICBpZiAoaSA8IGFuaW1hdGlvbi5rZXlWYWx1ZXMuc2l6ZSgpKQorICAg
ICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ2YWx1ZSIsIGFuaW1hdGlvbi5rZXlWYWx1ZXNbaV0p
OworCisgICAgICAgIHRzIDw8ICIpIjsKKyAgICB9CisKKyAgICB0cy5kZWNyZWFzZUluZGVudCgp
OworICAgIHRzLmRlY3JlYXNlSW5kZW50KCk7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVy
UmVtb3RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDE0ZWVkODExNzcwZmZkMDQ5NTFlOTJiMDEyMTM1NjZj
NWUwYmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAKQEAgLTAsMCArMSw4
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCIKKworI2lt
cG9ydCAiUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmcuaCIKKyNpbXBvcnQgIlJlbW90ZUxheWVyQmFja2luZ1N0
b3JlLmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVDb250ZXh0LmgiCisjaW1wb3J0ICJSZW1v
dGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQW5pbWF0aW9u
VXRpbGl0aWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ0EuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTGVuZ3RoRnVu
Y3Rpb25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FGaWx0ZXJzLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllckNvY29hLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RpbGVk
QmFja2luZy5oPgorI2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPFBsYXRmb3JtQ0FMYXllclJl
bW90ZT4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwg
UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29u
dGV4dCkKK3sKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBsYXllcjsKKworICAg
IGlmIChsYXllclR5cGUgPT0gTGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXIgfHwgIGxheWVyVHlw
ZSA9PSBMYXllclR5cGVQYWdlVGlsZWRCYWNraW5nTGF5ZXIpCisgICAgICAgIGxheWVyID0gYWRv
cHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2luZyhsYXllclR5cGUsIG93
bmVyLCBjb250ZXh0KSk7CisgICAgZWxzZQorICAgICAgICBsYXllciA9IGFkb3B0UmVmKG5ldyBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGUobGF5ZXJUeXBlLCBvd25lciwgY29udGV4dCkpOworCisgICAg
Y29udGV4dC5sYXllcldhc0NyZWF0ZWQoKmxheWVyLCBsYXllclR5cGUpOworCisgICAgcmV0dXJu
IGxheWVyLnJlbGVhc2VOb25OdWxsKCk7Cit9CisKK1JlZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+
IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRlKFBsYXRmb3JtTGF5ZXIgKnBsYXRmb3JtTGF5
ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQm
IGNvbnRleHQpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y3Jl
YXRlKHBsYXRmb3JtTGF5ZXIsIG93bmVyLCBjb250ZXh0KTsKK30KKworUmVmPFBsYXRmb3JtQ0FM
YXllclJlbW90ZT4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoY29uc3QgUGxhdGZvcm1D
QUxheWVyUmVtb3RlJiBvdGhlciwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25l
ciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBhdXRvIGxheWVyID0g
YWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUob3RoZXIsIG93bmVyLCBjb250ZXh0
KSk7CisKKyAgICBjb250ZXh0LmxheWVyV2FzQ3JlYXRlZChsYXllci5nZXQoKSwgb3RoZXIubGF5
ZXJUeXBlKCkpOworCisgICAgcmV0dXJuIGxheWVyOworfQorCitQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGU6OlBsYXRmb3JtQ0FMYXllclJlbW90ZShMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0KQorICAg
IDogUGxhdGZvcm1DQUxheWVyKGxheWVyVHlwZSwgb3duZXIpCisgICAgLCBtX2NvbnRleHQoJmNv
bnRleHQpCit7CisgICAgaWYgKG93bmVyICYmIGxheWVyVHlwZSAhPSBMYXllclR5cGVDb250ZW50
c1Byb3ZpZGVkTGF5ZXIgJiYgbGF5ZXJUeXBlICE9IExheWVyVHlwZVRyYW5zZm9ybUxheWVyKSB7
CisgICAgICAgIG1fcHJvcGVydGllcy5jb250ZW50c1NjYWxlID0gb3duZXItPnBsYXRmb3JtQ0FM
YXllckRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVy
dGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNvbnRlbnRzU2NhbGVDaGFu
Z2VkKTsKKyAgICB9Cit9CisKK1BsYXRmb3JtQ0FMYXllclJlbW90ZTo6UGxhdGZvcm1DQUxheWVy
UmVtb3RlKGNvbnN0IFBsYXRmb3JtQ0FMYXllclJlbW90ZSYgb3RoZXIsIFBsYXRmb3JtQ0FMYXll
ckNsaWVudCogb3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCisgICAgOiBQ
bGF0Zm9ybUNBTGF5ZXIob3RoZXIubGF5ZXJUeXBlKCksIG93bmVyKQorICAgICwgbV9hY2NlbGVy
YXRlc0RyYXdpbmcob3RoZXIuYWNjZWxlcmF0ZXNEcmF3aW5nKCkpCisgICAgLCBtX2NvbnRleHQo
JmNvbnRleHQpCit7Cit9CisKK1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllclJl
bW90ZTo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKK3sKKyAgICBh
dXRvIGNsb25lID0gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoKnRoaXMsIG93bmVyLCAq
bV9jb250ZXh0KTsKKworICAgIHVwZGF0ZUNsb25lZExheWVyUHJvcGVydGllcyhjbG9uZSk7CisK
KyAgICBjbG9uZS0+c2V0Q2xvbmVkTGF5ZXIodGhpcyk7CisgICAgcmV0dXJuIFdURk1vdmUoY2xv
bmUpOworfQorCitQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6On5QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUo
KQoreworICAgIGZvciAoY29uc3QgYXV0byYgbGF5ZXIgOiBtX2NoaWxkcmVuKQorICAgICAgICBk
b3duY2FzdDxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+KCpsYXllcikubV9zdXBlcmxheWVyID0gbnVs
bHB0cjsKKworICAgIGlmIChtX2NvbnRleHQpCisgICAgICAgIG1fY29udGV4dC0+bGF5ZXJXaWxs
QmVEZXN0cm95ZWQoKnRoaXMpOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6dXBk
YXRlQ2xvbmVkTGF5ZXJQcm9wZXJ0aWVzKFBsYXRmb3JtQ0FMYXllclJlbW90ZSYgY2xvbmUsIGJv
b2wgY29weUNvbnRlbnRzKSBjb25zdAoreworICAgIGNsb25lLnNldFBvc2l0aW9uKHBvc2l0aW9u
KCkpOworICAgIGNsb25lLnNldEJvdW5kcyhib3VuZHMoKSk7CisgICAgY2xvbmUuc2V0QW5jaG9y
UG9pbnQoYW5jaG9yUG9pbnQoKSk7CisKKyAgICBpZiAobV9wcm9wZXJ0aWVzLnRyYW5zZm9ybSkK
KyAgICAgICAgY2xvbmUuc2V0VHJhbnNmb3JtKCptX3Byb3BlcnRpZXMudHJhbnNmb3JtKTsKKwor
ICAgIGlmIChtX3Byb3BlcnRpZXMuc3VibGF5ZXJUcmFuc2Zvcm0pCisgICAgICAgIGNsb25lLnNl
dFN1YmxheWVyVHJhbnNmb3JtKCptX3Byb3BlcnRpZXMuc3VibGF5ZXJUcmFuc2Zvcm0pOworCisg
ICAgaWYgKGNvcHlDb250ZW50cykKKyAgICAgICAgY2xvbmUuc2V0Q29udGVudHMoY29udGVudHMo
KSk7CisKKyAgICBjbG9uZS5zZXRNYXNrc1RvQm91bmRzKG1hc2tzVG9Cb3VuZHMoKSk7CisgICAg
Y2xvbmUuc2V0RG91YmxlU2lkZWQoaXNEb3VibGVTaWRlZCgpKTsKKyAgICBjbG9uZS5zZXRPcGFx
dWUoaXNPcGFxdWUoKSk7CisgICAgY2xvbmUuc2V0QmFja2dyb3VuZENvbG9yKGJhY2tncm91bmRD
b2xvcigpKTsKKyAgICBjbG9uZS5zZXRDb250ZW50c1NjYWxlKGNvbnRlbnRzU2NhbGUoKSk7Cisg
ICAgY2xvbmUuc2V0Q29ybmVyUmFkaXVzKGNvcm5lclJhZGl1cygpKTsKKworICAgIGlmICghbV9w
cm9wZXJ0aWVzLnNoYXBlUGF0aC5pc051bGwoKSkKKyAgICAgICAgY2xvbmUuc2V0U2hhcGVQYXRo
KG1fcHJvcGVydGllcy5zaGFwZVBhdGgpOworCisgICAgaWYgKG1fcHJvcGVydGllcy5zaGFwZVJv
dW5kZWRSZWN0KQorICAgICAgICBjbG9uZS5zZXRTaGFwZVJvdW5kZWRSZWN0KCptX3Byb3BlcnRp
ZXMuc2hhcGVSb3VuZGVkUmVjdCk7CisKKyAgICBpZiAobV9wcm9wZXJ0aWVzLmZpbHRlcnMpCisg
ICAgICAgIGNsb25lLmNvcHlGaWx0ZXJzRnJvbSgqdGhpcyk7CisKKyAgICBjbG9uZS51cGRhdGVD
dXN0b21BcHBlYXJhbmNlKGN1c3RvbUFwcGVhcmFuY2UoKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyUmVtb3RlOjpyZWN1cnNpdmVCdWlsZFRyYW5zYWN0aW9uKFJlbW90ZUxheWVyVHJlZUNv
bnRleHQmIGNvbnRleHQsIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikK
K3sKKyAgICBBU1NFUlQoIW1fcHJvcGVydGllcy5iYWNraW5nU3RvcmUgfHwgb3duZXIoKSk7Cisg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oJmNvbnRleHQgPT0gbV9jb250ZXh0
KTsKKyAgICAKKyAgICBpZiAobV9wcm9wZXJ0aWVzLmJhY2tpbmdTdG9yZSAmJiAoIW93bmVyKCkg
fHwgIW93bmVyKCktPnBsYXRmb3JtQ0FMYXllckRyYXdzQ29udGVudCgpKSkgeworICAgICAgICBt
X3Byb3BlcnRpZXMuYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICAgICAgbV9wcm9wZXJ0aWVz
Lm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6QmFja2lu
Z1N0b3JlQ2hhbmdlZCk7CisgICAgfQorCisgICAgaWYgKG1fcHJvcGVydGllcy5iYWNraW5nU3Rv
cmUgJiYgbV9wcm9wZXJ0aWVzLmJhY2tpbmdTdG9yZUF0dGFjaGVkICYmIG1fcHJvcGVydGllcy5i
YWNraW5nU3RvcmUtPmRpc3BsYXkoKSkKKyAgICAgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0
aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6QmFja2luZ1N0b3JlQ2hhbmdl
ZCk7CisKKyAgICBpZiAobV9wcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICE9IFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpOb0NoYW5nZSkgeworICAgICAgICBpZiAobV9wcm9wZXJ0aWVz
LmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNoaWxkcmVu
Q2hhbmdlZCkgeworICAgICAgICAgICAgbV9wcm9wZXJ0aWVzLmNoaWxkcmVuLnJlc2l6ZShtX2No
aWxkcmVuLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hp
bGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgbV9wcm9wZXJ0aWVzLmNoaWxkcmVu
W2ldID0gbV9jaGlsZHJlbltpXS0+bGF5ZXJJRCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGlzUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKCkpIHsKKyAgICAgICAgICAgIFJlbW90ZUxh
eWVyVHJlZVByb3BlcnR5QXBwbGllcjo6YXBwbHlQcm9wZXJ0aWVzKHBsYXRmb3JtTGF5ZXIoKSwg
bnVsbHB0ciwgbV9wcm9wZXJ0aWVzLCBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXI6OlJl
bGF0ZWRMYXllck1hcCgpLCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6TGF5ZXJDb250ZW50c1R5
cGU6OkNBTWFjaFBvcnQpOworICAgICAgICAgICAgZGlkQ29tbWl0KCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0cmFuc2FjdGlvbi5sYXllclByb3BlcnRpZXND
aGFuZ2VkKCp0aGlzKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hp
bGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlJiBjaGls
ZCA9IGRvd25jYXN0PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4oKm1fY2hpbGRyZW5baV0pOworICAg
ICAgICBBU1NFUlQoY2hpbGQuc3VwZXJsYXllcigpID09IHRoaXMpOworICAgICAgICBjaGlsZC5y
ZWN1cnNpdmVCdWlsZFRyYW5zYWN0aW9uKGNvbnRleHQsIHRyYW5zYWN0aW9uKTsKKyAgICB9CisK
KyAgICBpZiAobV9tYXNrTGF5ZXIpCisgICAgICAgIG1fbWFza0xheWVyLT5yZWN1cnNpdmVCdWls
ZFRyYW5zYWN0aW9uKGNvbnRleHQsIHRyYW5zYWN0aW9uKTsKK30KKwordm9pZCBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGU6OmRpZENvbW1pdCgpCit7CisgICAgbV9wcm9wZXJ0aWVzLmFkZGVkQW5pbWF0
aW9ucy5jbGVhcigpOworICAgIG1fcHJvcGVydGllcy5rZXlQYXRoc09mQW5pbWF0aW9uc1RvUmVt
b3ZlLmNsZWFyKCk7CisgICAgbV9wcm9wZXJ0aWVzLnJlc2V0Q2hhbmdlZFByb3BlcnRpZXMoKTsK
K30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmVuc3VyZUJhY2tpbmdTdG9yZSgpCit7
CisgICAgQVNTRVJUKG93bmVyKCkpOworICAgIAorICAgIGlmICghbV9wcm9wZXJ0aWVzLmJhY2tp
bmdTdG9yZSkKKyAgICAgICAgbV9wcm9wZXJ0aWVzLmJhY2tpbmdTdG9yZSA9IHN0ZDo6bWFrZV91
bmlxdWU8UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU+KHRoaXMpOworCisgICAgdXBkYXRlQmFja2lu
Z1N0b3JlKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjp1cGRhdGVCYWNraW5n
U3RvcmUoKQoreworICAgIGlmICghbV9wcm9wZXJ0aWVzLmJhY2tpbmdTdG9yZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9wcm9wZXJ0aWVzLmJhY2tpbmdTdG9yZS0+ZW5zdXJlQmFja2luZ1N0
b3JlKG1fcHJvcGVydGllcy5ib3VuZHMuc2l6ZSgpLCBtX3Byb3BlcnRpZXMuY29udGVudHNTY2Fs
ZSwgbV9hY2NlbGVyYXRlc0RyYXdpbmcsIG1fd2FudHNEZWVwQ29sb3JCYWNraW5nU3RvcmUsIG1f
cHJvcGVydGllcy5vcGFxdWUpOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBlbnN1cmVC
YWNraW5nU3RvcmUoKTsKKworICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1hcCB0aGlzIHRocm91Z2gg
Y29udGVudHNSZWN0L2V0Yy4KKyAgICBtX3Byb3BlcnRpZXMuYmFja2luZ1N0b3JlLT5zZXROZWVk
c0Rpc3BsYXkoZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxh
eWVyUmVtb3RlOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIGVuc3VyZUJhY2tpbmdTdG9yZSgp
OworCisgICAgbV9wcm9wZXJ0aWVzLmJhY2tpbmdTdG9yZS0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9
CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjb3B5Q29udGVudHNGcm9tTGF5ZXIoUGxh
dGZvcm1DQUxheWVyKiBsYXllcikKK3sKKyAgICBBU1NFUlQobV9wcm9wZXJ0aWVzLmNsb25lZExh
eWVySUQgPT0gbGF5ZXItPmxheWVySUQoKSk7CisgICAgCisgICAgaWYgKCFtX3Byb3BlcnRpZXMu
Y2hhbmdlZFByb3BlcnRpZXMpCisgICAgICAgIG1fY29udGV4dC0+bGF5ZXJQcm9wZXJ0eUNoYW5n
ZWRXaGlsZUJ1aWxkaW5nVHJhbnNhY3Rpb24oKnRoaXMpOworCisgICAgbV9wcm9wZXJ0aWVzLm5v
dGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q2xvbmVkQ29u
dGVudHNDaGFuZ2VkKTsKK30KKworUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGU6OnN1cGVybGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cGVybGF5ZXI7Cit9CisK
K3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpyZW1vdmVGcm9tU3VwZXJsYXllcigpCit7Cisg
ICAgaWYgKCFtX3N1cGVybGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3VwZXJsYXll
ci0+cmVtb3ZlU3VibGF5ZXIodGhpcyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3Rl
OjpyZW1vdmVTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqIGxheWVyKQoreworICAgIHNp
emVfdCBjaGlsZEluZGV4ID0gbV9jaGlsZHJlbi5maW5kKGxheWVyKTsKKyAgICBpZiAoY2hpbGRJ
bmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgbV9jaGlsZHJlbi5yZW1vdmUoY2hpbGRJbmRleCk7
CisgICAgbGF5ZXItPm1fc3VwZXJsYXllciA9IG51bGxwdHI7CisgICAgbV9wcm9wZXJ0aWVzLm5v
dGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q2hpbGRyZW5D
aGFuZ2VkKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldFN1YmxheWVycyhj
b25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0JiBsaXN0KQoreworICAgIHJlbW92ZUFsbFN1YmxheWVy
cygpOworICAgIG1fY2hpbGRyZW4gPSBsaXN0OworCisgICAgZm9yIChjb25zdCBhdXRvJiBsYXll
ciA6IGxpc3QpIHsKKyAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CisgICAg
ICAgIGRvd25jYXN0PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4oKmxheWVyKS5tX3N1cGVybGF5ZXIg
PSB0aGlzOworICAgIH0KKworICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQo
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNoaWxkcmVuQ2hhbmdlZCk7Cit9CisKK3ZvaWQg
UGxhdGZvcm1DQUxheWVyUmVtb3RlOjpyZW1vdmVBbGxTdWJsYXllcnMoKQoreworICAgIFBsYXRm
b3JtQ0FMYXllckxpc3QgbGF5ZXJzVG9SZW1vdmUgPSBtX2NoaWxkcmVuOworICAgIGZvciAoY29u
c3QgYXV0byYgbGF5ZXIgOiBsYXllcnNUb1JlbW92ZSkKKyAgICAgICAgbGF5ZXItPnJlbW92ZUZy
b21TdXBlcmxheWVyKCk7CisgICAgQVNTRVJUKG1fY2hpbGRyZW4uaXNFbXB0eSgpKTsKKyAgICBt
X3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uOjpDaGlsZHJlbkNoYW5nZWQpOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6
YXBwZW5kU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyJiBsYXllcikKK3sKKyAgICBSZWY8UGxhdGZv
cm1DQUxheWVyPiBsYXllclByb3RlY3RvcihsYXllcik7CisKKyAgICBsYXllci5yZW1vdmVGcm9t
U3VwZXJsYXllcigpOworICAgIG1fY2hpbGRyZW4uYXBwZW5kKCZsYXllcik7CisgICAgZG93bmNh
c3Q8UGxhdGZvcm1DQUxheWVyUmVtb3RlPihsYXllcikubV9zdXBlcmxheWVyID0gdGhpczsKKyAg
ICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uOjpDaGlsZHJlbkNoYW5nZWQpOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90
ZTo6aW5zZXJ0U3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyJiBsYXllciwgc2l6ZV90IGluZGV4KQor
eworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGxheWVyUHJvdGVjdG9yKGxheWVyKTsKKworICAg
IGxheWVyLnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CisgICAgbV9jaGlsZHJlbi5pbnNlcnQoaW5k
ZXgsICZsYXllcik7CisgICAgZG93bmNhc3Q8UGxhdGZvcm1DQUxheWVyUmVtb3RlPihsYXllciku
bV9zdXBlcmxheWVyID0gdGhpczsKKyAgICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFu
Z2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpDaGlsZHJlbkNoYW5nZWQpOworfQorCit2
b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6cmVwbGFjZVN1YmxheWVyKFBsYXRmb3JtQ0FMYXll
ciYgcmVmZXJlbmNlLCBQbGF0Zm9ybUNBTGF5ZXImIGxheWVyKQoreworICAgIEFTU0VSVChyZWZl
cmVuY2Uuc3VwZXJsYXllcigpID09IHRoaXMpOworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGxh
eWVyUHJvdGVjdG9yKGxheWVyKTsKKworICAgIGxheWVyLnJlbW92ZUZyb21TdXBlcmxheWVyKCk7
CisgICAgc2l6ZV90IHJlZmVyZW5jZUluZGV4ID0gbV9jaGlsZHJlbi5maW5kKCZyZWZlcmVuY2Up
OworICAgIGlmIChyZWZlcmVuY2VJbmRleCAhPSBub3RGb3VuZCkgeworICAgICAgICBtX2NoaWxk
cmVuW3JlZmVyZW5jZUluZGV4XS0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKKyAgICAgICAgbV9j
aGlsZHJlbi5pbnNlcnQocmVmZXJlbmNlSW5kZXgsICZsYXllcik7CisgICAgICAgIGRvd25jYXN0
PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4obGF5ZXIpLm1fc3VwZXJsYXllciA9IHRoaXM7CisgICAg
fQorCisgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6Q2hpbGRyZW5DaGFuZ2VkKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGU6OmFkb3B0U3VibGF5ZXJzKFBsYXRmb3JtQ0FMYXllciYgc291cmNlKQoreworICAg
IFBsYXRmb3JtQ0FMYXllckxpc3QgbGF5ZXJzVG9Nb3ZlID0gZG93bmNhc3Q8UGxhdGZvcm1DQUxh
eWVyUmVtb3RlPihzb3VyY2UpLm1fY2hpbGRyZW47CisKKyAgICBpZiAoY29uc3QgUGxhdGZvcm1D
QUxheWVyTGlzdCogY3VzdG9tTGF5ZXJzID0gc291cmNlLmN1c3RvbVN1YmxheWVycygpKSB7Cisg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgbGF5ZXIgOiAqY3VzdG9tTGF5ZXJzKSB7CisgICAgICAg
ICAgICBzaXplX3QgbGF5ZXJJbmRleCA9IGxheWVyc1RvTW92ZS5maW5kKGxheWVyKTsKKyAgICAg
ICAgICAgIGlmIChsYXllckluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgIGxheWVy
c1RvTW92ZS5yZW1vdmUobGF5ZXJJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzZXRT
dWJsYXllcnMobGF5ZXJzVG9Nb3ZlKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6
OmFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgUGxhdGZvcm1DQUFuaW1hdGlv
biYgYW5pbWF0aW9uKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hbmltYXRpb25zLnNldChr
ZXksICZhbmltYXRpb24pOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAg
bV9wcm9wZXJ0aWVzLmFkZGVkQW5pbWF0aW9ucy5hcHBlbmQoc3RkOjpwYWlyPFN0cmluZywgUGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6UHJvcGVydGllcz4oa2V5LCBkb3duY2FzdDxQbGF0Zm9y
bUNBQW5pbWF0aW9uUmVtb3RlPihhbmltYXRpb24pLnByb3BlcnRpZXMoKSkpOworICAgIGVsc2Ug
eworICAgICAgICBmb3IgKGF1dG8mIGtleUFuaW1hdGlvblBhaXIgOiBtX3Byb3BlcnRpZXMuYWRk
ZWRBbmltYXRpb25zKSB7CisgICAgICAgICAgICBpZiAoa2V5QW5pbWF0aW9uUGFpci5maXJzdCA9
PSBrZXkpIHsKKyAgICAgICAgICAgICAgICBrZXlBbmltYXRpb25QYWlyLnNlY29uZCA9IGRvd25j
YXN0PFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU+KGFuaW1hdGlvbikucHJvcGVydGllcygpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb246OkFuaW1hdGlvbnNDaGFuZ2VkKTsKKworICAgIGlmIChtX2NvbnRleHQp
CisgICAgICAgIG1fY29udGV4dC0+d2lsbFN0YXJ0QW5pbWF0aW9uT25MYXllcigqdGhpcyk7Cit9
CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoY29u
c3QgU3RyaW5nJiBrZXkpCit7CisgICAgaWYgKG1fYW5pbWF0aW9ucy5yZW1vdmUoa2V5KSkgewor
ICAgICAgICBtX3Byb3BlcnRpZXMuYWRkZWRBbmltYXRpb25zLnJlbW92ZUZpcnN0TWF0Y2hpbmco
WyZrZXldKGF1dG8mIHBhaXIpIHsKKyAgICAgICAgICAgIHJldHVybiBwYWlyLmZpcnN0ID09IGtl
eTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIG1fcHJvcGVydGllcy5rZXlQYXRoc09mQW5pbWF0
aW9uc1RvUmVtb3ZlLmFkZChrZXkpOworICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0No
YW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkFuaW1hdGlvbnNDaGFuZ2VkKTsKK30K
KworUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6YW5p
bWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIHJldHVybiBtX2FuaW1hdGlv
bnMuZ2V0KGtleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0VxdWl2YWxlbnRMYXllcihj
b25zdCBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQgbGF5ZXJJRCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbmV3TGF5
ZXJJRCA9IGxheWVyID8gbGF5ZXItPmxheWVySUQoKSA6IDA7CisgICAgcmV0dXJuIGxheWVySUQg
PT0gbmV3TGF5ZXJJRDsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlv
blN0YXJ0ZWQoY29uc3QgU3RyaW5nJiBrZXksIENGVGltZUludGVydmFsIGJlZ2luVGltZSkKK3sK
KyAgICBhdXRvIGl0ID0gbV9hbmltYXRpb25zLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgIT0gbV9h
bmltYXRpb25zLmVuZCgpKQorICAgICAgICBkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uUmVt
b3RlPigqaXQtPnZhbHVlKS5kaWRTdGFydChiZWdpblRpbWUpOworICAgIAorICAgIGlmIChtX293
bmVyKQorICAgICAgICBtX293bmVyLT5wbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGtl
eSwgYmVnaW5UaW1lKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlv
bkVuZGVkKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmIChtX293bmVyKQorICAgICAgICBt
X293bmVyLT5wbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25FbmRlZChrZXkpOworfQorCit2b2lkIFBs
YXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0TWFzayhQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQorewor
ICAgIGlmIChpc0VxdWl2YWxlbnRMYXllcihsYXllciwgbV9wcm9wZXJ0aWVzLm1hc2tMYXllcklE
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChsYXllcikgeworICAgICAgICBtX21h
c2tMYXllciA9IGRvd25jYXN0PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4obGF5ZXIpOworICAgICAg
ICBtX3Byb3BlcnRpZXMubWFza0xheWVySUQgPSBtX21hc2tMYXllci0+bGF5ZXJJRCgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1fbWFza0xheWVyID0gbnVsbHB0cjsKKyAgICAgICAgbV9wcm9w
ZXJ0aWVzLm1hc2tMYXllcklEID0gMDsKKyAgICB9CisKKyAgICBtX3Byb3BlcnRpZXMubm90ZVBy
b3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpNYXNrTGF5ZXJDaGFu
Z2VkKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldENsb25lZExheWVyKGNv
bnN0IFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCit7CisgICAgaWYgKGlzRXF1aXZhbGVudExheWVy
KGxheWVyLCBtX3Byb3BlcnRpZXMuY2xvbmVkTGF5ZXJJRCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChsYXllcikKKyAgICAgICAgbV9wcm9wZXJ0aWVzLmNsb25lZExheWVySUQgPSBsYXll
ci0+bGF5ZXJJRCgpOworICAgIGVsc2UKKyAgICAgICAgbV9wcm9wZXJ0aWVzLmNsb25lZExheWVy
SUQgPSAwOworCisgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbjo6Q2xvbmVkQ29udGVudHNDaGFuZ2VkKTsKK30KKworYm9vbCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmlzT3BhcXVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cm9wZXJ0aWVzLm9wYXF1ZTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldE9w
YXF1ZShib29sIHZhbHVlKQoreworICAgIG1fcHJvcGVydGllcy5vcGFxdWUgPSB2YWx1ZTsKKyAg
ICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uOjpPcGFxdWVDaGFuZ2VkKTsKKworICAgIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOworfQor
CitGbG9hdFJlY3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpib3VuZHMoKSBjb25zdAoreworICAg
IHJldHVybiBtX3Byb3BlcnRpZXMuYm91bmRzOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJl
bW90ZTo6c2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
ID09IG1fcHJvcGVydGllcy5ib3VuZHMpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJvcGVy
dGllcy5ib3VuZHMgPSB2YWx1ZTsKKyAgICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFu
Z2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpCb3VuZHNDaGFuZ2VkKTsKKyAgICAKKyAg
ICBpZiAocmVxdWlyZXNDdXN0b21BcHBlYXJhbmNlVXBkYXRlT25Cb3VuZHNDaGFuZ2UoKSkKKyAg
ICAgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6Q3VzdG9tQXBwZWFyYW5jZUNoYW5nZWQpOworCisgICAgdXBkYXRlQmFja2lu
Z1N0b3JlKCk7Cit9CisKK0Zsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnBvc2l0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLnBvc2l0aW9uOworfQorCit2
b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludDNE
JiB2YWx1ZSkKK3sKKyAgICAvLyBXZSBjYW4ndCBlYXJseSByZXR1cm4gaGVyZSBpZiB0aGUgcG9z
aXRpb24gaGFzIG5vdCBjaGFuZ2VkLCBzaW5jZSBHcmFwaGljc0xheWVyQ0E6OnN5bmNQb3NpdGlv
bigpIG1heSBoYXZlIGNoYW5nZWQKKyAgICAvLyB0aGUgR3JhcGhpY3NMYXllciBwb3NpdGlvbiAo
d2hpY2ggZG9lc24ndCBmb3JjZSBhIGdlb21ldHJ5IHVwZGF0ZSkgYnV0IHdlIHdhbnQgYSBzdWJz
ZXF1ZW50IEdyYXBoaWNzTGF5ZXJDQTo6c2V0UG9zaXRpb24oKQorICAgIC8vIHRvIHB1c2ggYSBu
ZXcgcG9zaXRpb24gdG8gdGhlIFVJIHByb2Nlc3MsIGV2ZW4gdGhvdWdoIG91ciBtX3Byb3BlcnRp
ZXMucG9zaXRpb24gaGFzbid0IGNoYW5nZWQuCisgICAgbV9wcm9wZXJ0aWVzLnBvc2l0aW9uID0g
dmFsdWU7CisgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbjo6UG9zaXRpb25DaGFuZ2VkKTsKK30KKworRmxvYXRQb2ludDNEIFBs
YXRmb3JtQ0FMYXllclJlbW90ZTo6YW5jaG9yUG9pbnQoKSBjb25zdAoreworICAgIHJldHVybiBt
X3Byb3BlcnRpZXMuYW5jaG9yUG9pbnQ7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3Rl
OjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZSA9PSBtX3Byb3BlcnRpZXMuYW5jaG9yUG9pbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fcHJvcGVydGllcy5hbmNob3JQb2ludCA9IHZhbHVlOworICAgIG1fcHJvcGVydGllcy5ub3Rl
UHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkFuY2hvclBvaW50
Q2hhbmdlZCk7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFBsYXRmb3JtQ0FMYXllclJlbW90
ZTo6dHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLnRyYW5zZm9y
bSA/ICptX3Byb3BlcnRpZXMudHJhbnNmb3JtIDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKK30K
Kwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdmFsdWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLnRyYW5zZm9ybSA9IHN0
ZDo6bWFrZV91bmlxdWU8VHJhbnNmb3JtYXRpb25NYXRyaXg+KHZhbHVlKTsKKyAgICBtX3Byb3Bl
cnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpU
cmFuc2Zvcm1DaGFuZ2VkKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggUGxhdGZvcm1DQUxh
eWVyUmVtb3RlOjpzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJv
cGVydGllcy5zdWJsYXllclRyYW5zZm9ybSA/ICptX3Byb3BlcnRpZXMuc3VibGF5ZXJUcmFuc2Zv
cm0gOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJl
bW90ZTo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZh
bHVlKQoreworICAgIG1fcHJvcGVydGllcy5zdWJsYXllclRyYW5zZm9ybSA9IHN0ZDo6bWFrZV91
bmlxdWU8VHJhbnNmb3JtYXRpb25NYXRyaXg+KHZhbHVlKTsKKyAgICBtX3Byb3BlcnRpZXMubm90
ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpTdWJsYXllclRy
YW5zZm9ybUNoYW5nZWQpOworfQorCitib29sIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6aXNIaWRk
ZW4oKSBjb25zdAoreworICAgIHJldHVybiBtX3Byb3BlcnRpZXMuaGlkZGVuOworfQorCit2b2lk
IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0SGlkZGVuKGJvb2wgdmFsdWUpCit7CisgICAgaWYg
KG1fcHJvcGVydGllcy5oaWRkZW4gPT0gdmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cHJvcGVydGllcy5oaWRkZW4gPSB2YWx1ZTsKKyAgICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRp
ZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpIaWRkZW5DaGFuZ2VkKTsKK30K
KworYm9vbCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNvbnRlbnRzSGlkZGVuKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmNvbnRlbnRzSGlkZGVuOworfQorCit2b2lkIFBsYXRm
b3JtQ0FMYXllclJlbW90ZTo6c2V0Q29udGVudHNIaWRkZW4oYm9vbCB2YWx1ZSkKK3sKKyAgICBp
ZiAobV9wcm9wZXJ0aWVzLmNvbnRlbnRzSGlkZGVuID09IHZhbHVlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3Byb3BlcnRpZXMuY29udGVudHNIaWRkZW4gPSB2YWx1ZTsKKyAgICBtX3Byb3Bl
cnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpD
b250ZW50c0hpZGRlbkNoYW5nZWQpOworfQorCitib29sIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6
dXNlckludGVyYWN0aW9uRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJvcGVydGll
cy51c2VySW50ZXJhY3Rpb25FbmFibGVkOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90
ZTo6c2V0VXNlckludGVyYWN0aW9uRW5hYmxlZChib29sIHZhbHVlKQoreworICAgIGlmIChtX3By
b3BlcnRpZXMudXNlckludGVyYWN0aW9uRW5hYmxlZCA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIG1fcHJvcGVydGllcy51c2VySW50ZXJhY3Rpb25FbmFibGVkID0gdmFsdWU7
CisgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6VXNlckludGVyYWN0aW9uRW5hYmxlZENoYW5nZWQpOworfQorCit2b2lkIFBs
YXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0QmFja2luZ1N0b3JlQXR0YWNoZWQoYm9vbCB2YWx1ZSkK
K3sKKyAgICBpZiAobV9wcm9wZXJ0aWVzLmJhY2tpbmdTdG9yZUF0dGFjaGVkID09IHZhbHVlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3Byb3BlcnRpZXMuYmFja2luZ1N0b3JlQXR0YWNoZWQg
PSB2YWx1ZTsKKyAgICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpCYWNraW5nU3RvcmVBdHRhY2htZW50Q2hhbmdlZCk7Cit9CisK
K2Jvb2wgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpiYWNraW5nU3RvcmVBdHRhY2hlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJvcGVydGllcy5iYWNraW5nU3RvcmVBdHRhY2hlZDsKK30KKwor
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldEdlb21ldHJ5RmxpcHBlZChib29sIHZhbHVl
KQoreworICAgIG1fcHJvcGVydGllcy5nZW9tZXRyeUZsaXBwZWQgPSB2YWx1ZTsKKyAgICBtX3By
b3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
OjpHZW9tZXRyeUZsaXBwZWRDaGFuZ2VkKTsKK30KKworYm9vbCBQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGU6Omdlb21ldHJ5RmxpcHBlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJvcGVydGllcy5n
ZW9tZXRyeUZsaXBwZWQ7Cit9CisKK2Jvb2wgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjppc0RvdWJs
ZVNpZGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmRvdWJsZVNpZGVkOwor
fQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0RG91YmxlU2lkZWQoYm9vbCB2YWx1
ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuZG91YmxlU2lkZWQgPSB2YWx1ZTsKKyAgICBtX3Byb3Bl
cnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpE
b3VibGVTaWRlZENoYW5nZWQpOworfQorCitib29sIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6bWFz
a3NUb0JvdW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJvcGVydGllcy5tYXNrc1RvQm91
bmRzOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0TWFza3NUb0JvdW5kcyhi
b29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSBtX3Byb3BlcnRpZXMubWFza3NUb0JvdW5k
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcm9wZXJ0aWVzLm1hc2tzVG9Cb3VuZHMgPSB2
YWx1ZTsKKyAgICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uOjpNYXNrc1RvQm91bmRzQ2hhbmdlZCk7Cit9CisKK2Jvb2wgUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjphY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdAoreworICAgIHJldHVy
biBtX2FjY2VsZXJhdGVzRHJhd2luZzsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6
OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sIGFjY2VsZXJhdGVzRHJhd2luZykKK3sKKyAgICBt
X2FjY2VsZXJhdGVzRHJhd2luZyA9IGFjY2VsZXJhdGVzRHJhd2luZzsKKyAgICB1cGRhdGVCYWNr
aW5nU3RvcmUoKTsKK30KKworYm9vbCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OndhbnRzRGVlcENv
bG9yQmFja2luZ1N0b3JlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93YW50c0RlZXBDb2xvckJh
Y2tpbmdTdG9yZTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldFdhbnRzRGVl
cENvbG9yQmFja2luZ1N0b3JlKGJvb2wgd2FudHNEZWVwQ29sb3JCYWNraW5nU3RvcmUpCit7Cisg
ICAgbV93YW50c0RlZXBDb2xvckJhY2tpbmdTdG9yZSA9IHdhbnRzRGVlcENvbG9yQmFja2luZ1N0
b3JlOworICAgIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOworfQorCitib29sIFBsYXRmb3JtQ0FMYXll
clJlbW90ZTo6c3VwcG9ydHNTdWJwaXhlbEFudGlhbGlhc2VkVGV4dCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0U3VwcG9y
dHNTdWJwaXhlbEFudGlhbGlhc2VkVGV4dChib29sKQoreworfQorCitDRlR5cGVSZWYgUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpjb250ZW50cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRDb250ZW50cyhDRlR5cGVSZWYg
dmFsdWUpCit7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRDb250ZW50c1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuY29udGVudHNS
ZWN0ID0gdmFsdWU7CisgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q29udGVudHNSZWN0Q2hhbmdlZCk7Cit9CisKK3ZvaWQg
UGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRNaW5pZmljYXRpb25GaWx0ZXIoRmlsdGVyVHlwZSB2
YWx1ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMubWluaWZpY2F0aW9uRmlsdGVyID0gdmFsdWU7Cisg
ICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbjo6TWluaWZpY2F0aW9uRmlsdGVyQ2hhbmdlZCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyUmVtb3RlOjpzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUgdmFsdWUpCit7
CisgICAgbV9wcm9wZXJ0aWVzLm1hZ25pZmljYXRpb25GaWx0ZXIgPSB2YWx1ZTsKKyAgICBtX3By
b3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
OjpNYWduaWZpY2F0aW9uRmlsdGVyQ2hhbmdlZCk7Cit9CisKK0NvbG9yIFBsYXRmb3JtQ0FMYXll
clJlbW90ZTo6YmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0
aWVzLmJhY2tncm91bmRDb2xvcjsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNl
dEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCit7CisgICAgbV9wcm9wZXJ0aWVz
LmJhY2tncm91bmRDb2xvciA9IHZhbHVlOworICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGll
c0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkJhY2tncm91bmRDb2xvckNoYW5n
ZWQpOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0Qm9yZGVyV2lkdGgoZmxv
YXQgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09IG1fcHJvcGVydGllcy5ib3JkZXJXaWR0aCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcm9wZXJ0aWVzLmJvcmRlcldpZHRoID0gdmFsdWU7
CisgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6Qm9yZGVyV2lkdGhDaGFuZ2VkKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGU6OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKK3sKKyAgICBpZiAo
dmFsdWUgPT0gbV9wcm9wZXJ0aWVzLmJvcmRlckNvbG9yKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3Byb3BlcnRpZXMuYm9yZGVyQ29sb3IgPSB2YWx1ZTsKKyAgICBtX3Byb3BlcnRpZXMubm90
ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpCb3JkZXJDb2xv
ckNoYW5nZWQpOworfQorCitmbG9hdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6Om9wYWNpdHkoKSBj
b25zdAoreworICAgIHJldHVybiBtX3Byb3BlcnRpZXMub3BhY2l0eTsKK30KKwordm9pZCBQbGF0
Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCit7CisgICAgbV9wcm9w
ZXJ0aWVzLm9wYWNpdHkgPSB2YWx1ZTsKKyAgICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXND
aGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpPcGFjaXR5Q2hhbmdlZCk7Cit9CisK
K3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCit7CisgICAgbV9wcm9wZXJ0aWVzLmZpbHRlcnMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEZpbHRlck9wZXJhdGlvbnM+KGZpbHRlcnMpOworICAgIG1fcHJvcGVydGllcy5ub3Rl
UHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkZpbHRlcnNDaGFu
Z2VkKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNvcHlGaWx0ZXJzRnJvbShj
b25zdCBQbGF0Zm9ybUNBTGF5ZXImIHNvdXJjZUxheWVyKQoreworICAgIGlmIChjb25zdCBGaWx0
ZXJPcGVyYXRpb25zKiBmaWx0ZXJzID0gZG93bmNhc3Q8UGxhdGZvcm1DQUxheWVyUmVtb3RlPihz
b3VyY2VMYXllcikubV9wcm9wZXJ0aWVzLmZpbHRlcnMuZ2V0KCkpCisgICAgICAgIHNldEZpbHRl
cnMoKmZpbHRlcnMpOworICAgIGVsc2UgaWYgKG1fcHJvcGVydGllcy5maWx0ZXJzKQorICAgICAg
ICBtX3Byb3BlcnRpZXMuZmlsdGVycyA9IG51bGxwdHI7CisKKyAgICBtX3Byb3BlcnRpZXMubm90
ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpGaWx0ZXJzQ2hh
bmdlZCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQordm9pZCBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGU6OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIG1f
cHJvcGVydGllcy5ibGVuZE1vZGUgPSBibGVuZE1vZGU7CisgICAgbV9wcm9wZXJ0aWVzLm5vdGVQ
cm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6QmxlbmRNb2RlQ2hh
bmdlZCk7Cit9CisjZW5kaWYKKworYm9vbCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmZpbHRlcnND
YW5CZUNvbXBvc2l0ZWQoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBy
ZXR1cm4gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoZmlsdGVy
cyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXROYW1lKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLm5hbWUgPSB2YWx1ZTsKKyAgICBtX3Byb3Bl
cnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpO
YW1lQ2hhbmdlZCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRTcGVlZChm
bG9hdCB2YWx1ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMuc3BlZWQgPSB2YWx1ZTsKKyAgICBtX3By
b3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
OjpTcGVlZENoYW5nZWQpOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0VGlt
ZU9mZnNldChDRlRpbWVJbnRlcnZhbCB2YWx1ZSkKK3sKKyAgICBtX3Byb3BlcnRpZXMudGltZU9m
ZnNldCA9IHZhbHVlOworICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVt
b3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlRpbWVPZmZzZXRDaGFuZ2VkKTsKK30KKworZmxvYXQg
UGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjb250ZW50c1NjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcm9wZXJ0aWVzLmNvbnRlbnRzU2NhbGU7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVy
UmVtb3RlOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHZhbHVlKQoreworICAgIG1fcHJvcGVydGll
cy5jb250ZW50c1NjYWxlID0gdmFsdWU7CisgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVz
Q2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q29udGVudHNTY2FsZUNoYW5nZWQp
OworCisgICAgdXBkYXRlQmFja2luZ1N0b3JlKCk7Cit9CisKK2Zsb2F0IFBsYXRmb3JtQ0FMYXll
clJlbW90ZTo6Y29ybmVyUmFkaXVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVz
LmNvcm5lclJhZGl1czsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldENvcm5l
clJhZGl1cyhmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAobV9wcm9wZXJ0aWVzLmNvcm5lclJhZGl1
cyA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcm9wZXJ0aWVzLmNvcm5lclJh
ZGl1cyA9IHZhbHVlOworICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVt
b3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNvcm5lclJhZGl1c0NoYW5nZWQpOworfQorCit2b2lk
IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0RWRnZUFudGlhbGlhc2luZ01hc2sodW5zaWduZWQg
dmFsdWUpCit7CisgICAgbV9wcm9wZXJ0aWVzLmVkZ2VBbnRpYWxpYXNpbmdNYXNrID0gdmFsdWU7
CisgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6RWRnZUFudGlhbGlhc2luZ01hc2tDaGFuZ2VkKTsKK30KKworRmxvYXRSb3Vu
ZGVkUmVjdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNoYXBlUm91bmRlZFJlY3QoKSBjb25zdAor
eworICAgIHJldHVybiBtX3Byb3BlcnRpZXMuc2hhcGVSb3VuZGVkUmVjdCA/ICptX3Byb3BlcnRp
ZXMuc2hhcGVSb3VuZGVkUmVjdCA6IEZsb2F0Um91bmRlZFJlY3QoRmxvYXRSZWN0KCkpOworfQor
Cit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0U2hhcGVSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCkKK3sKKyAgICBpZiAobV9wcm9wZXJ0aWVzLnNo
YXBlUm91bmRlZFJlY3QgJiYgKm1fcHJvcGVydGllcy5zaGFwZVJvdW5kZWRSZWN0ID09IHJvdW5k
ZWRSZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Byb3BlcnRpZXMuc2hhcGVSb3VuZGVk
UmVjdCA9IHN0ZDo6bWFrZV91bmlxdWU8RmxvYXRSb3VuZGVkUmVjdD4ocm91bmRlZFJlY3QpOwor
ICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb246OlNoYXBlUm91bmRlZFJlY3RDaGFuZ2VkKTsKK30KKworUGF0aCBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGU6OnNoYXBlUGF0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXJUeXBl
ID09IExheWVyVHlwZVNoYXBlTGF5ZXIpOworICAgIHJldHVybiBtX3Byb3BlcnRpZXMuc2hhcGVQ
YXRoOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0U2hhcGVQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCit7CisgICAgQVNTRVJUKG1fbGF5ZXJUeXBlID09IExheWVyVHlwZVNoYXBl
TGF5ZXIpOworICAgIG1fcHJvcGVydGllcy5zaGFwZVBhdGggPSBwYXRoOworICAgIG1fcHJvcGVy
dGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlNo
YXBlUGF0aENoYW5nZWQpOworfQorCitXaW5kUnVsZSBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNo
YXBlV2luZFJ1bGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2xheWVyVHlwZSA9PSBMYXllclR5
cGVTaGFwZUxheWVyKTsKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLndpbmRSdWxlOworfQorCit2
b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0U2hhcGVXaW5kUnVsZShXaW5kUnVsZSB3aW5k
UnVsZSkKK3sKKyAgICBBU1NFUlQobV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlU2hhcGVMYXllcik7
CisgICAgbV9wcm9wZXJ0aWVzLndpbmRSdWxlID0gd2luZFJ1bGU7CisgICAgbV9wcm9wZXJ0aWVz
Lm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6V2luZFJ1
bGVDaGFuZ2VkKTsKK30KKworYm9vbCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnJlcXVpcmVzQ3Vz
dG9tQXBwZWFyYW5jZVVwZGF0ZU9uQm91bmRzQ2hhbmdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcm9wZXJ0aWVzLmN1c3RvbUFwcGVhcmFuY2UgPT0gR3JhcGhpY3NMYXllcjo6U2Nyb2xsaW5n
U2hhZG93OworfQorCitHcmFwaGljc0xheWVyOjpDdXN0b21BcHBlYXJhbmNlIFBsYXRmb3JtQ0FM
YXllclJlbW90ZTo6Y3VzdG9tQXBwZWFyYW5jZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJv
cGVydGllcy5jdXN0b21BcHBlYXJhbmNlOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90
ZTo6dXBkYXRlQ3VzdG9tQXBwZWFyYW5jZShHcmFwaGljc0xheWVyOjpDdXN0b21BcHBlYXJhbmNl
IGN1c3RvbUFwcGVhcmFuY2UpCit7CisgICAgbV9wcm9wZXJ0aWVzLmN1c3RvbUFwcGVhcmFuY2Ug
PSBjdXN0b21BcHBlYXJhbmNlOworICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5n
ZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkN1c3RvbUFwcGVhcmFuY2VDaGFuZ2VkKTsK
K30KKworUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGVD
b21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1D
QUxheWVyUmVtb3RlOjpjcmVhdGUobGF5ZXJUeXBlLCBjbGllbnQsICptX2NvbnRleHQpOworfQor
Cit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6ZW51bWVyYXRlUmVjdHNCZWluZ0RyYXduKENH
Q29udGV4dFJlZiBjb250ZXh0LCB2b2lkICheYmxvY2spKENHUmVjdCkpCit7CisgICAgbV9wcm9w
ZXJ0aWVzLmJhY2tpbmdTdG9yZS0+ZW51bWVyYXRlUmVjdHNCZWluZ0RyYXduKGNvbnRleHQsIGJs
b2NrKTsKK30KKwordWludDMyX3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpob3N0aW5nQ29udGV4
dElEKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
dW5zaWduZWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpiYWNraW5nU3RvcmVCeXRlc1BlclBpeGVs
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJvcGVydGllcy5iYWNraW5nU3RvcmUpCisgICAgICAg
IHJldHVybiA0OworCisgICAgcmV0dXJuIG1fcHJvcGVydGllcy5iYWNraW5nU3RvcmUtPmJ5dGVz
UGVyUGl4ZWwoKTsKK30KKworTGF5ZXJQb29sJiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmxheWVy
UG9vbCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+bGF5ZXJQb29sKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJl
bW90ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE5NjM1ZWY5MWYzMTljNzI3ZGVjYzIyY2IxYTg4ZmMwNzY4MDA4
MGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgKQEAgLTAsMCArMSwyMjcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5
ZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgTGF5ZXJQb29sOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDsKKworY2xhc3Mg
UGxhdGZvcm1DQUxheWVyUmVtb3RlIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IGNyZWF0ZShX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DQUxh
eWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOworICAgIHN0YXRpYyBSZWY8UGxh
dGZvcm1DQUxheWVyUmVtb3RlPiBjcmVhdGUoUGxhdGZvcm1MYXllciAqLCBXZWJDb3JlOjpQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7CisgICAgc3RhdGlj
IFJlZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IGNyZWF0ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGUmLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRyZWVD
b250ZXh0Jik7CisKKyAgICB2aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUoKTsKKworICAg
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBu
dWxscHRyOyB9CisKKyAgICB2b2lkIHJlY3Vyc2l2ZUJ1aWxkVHJhbnNhY3Rpb24oUmVtb3RlTGF5
ZXJUcmVlQ29udGV4dCYsIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJik7CisKKyAgICB2b2lk
IHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRpcnR5UmVj
dCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKKworICAg
IHZvaWQgY29weUNvbnRlbnRzRnJvbUxheWVyKFBsYXRmb3JtQ0FMYXllciopIG92ZXJyaWRlOwor
CisgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBzdXBlcmxheWVyKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCByZW1vdmVGcm9tU3VwZXJsYXllcigpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0U3VibGF5ZXJzKGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckxpc3QmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHJlbW92ZUFsbFN1YmxheWVycygpIG92ZXJyaWRlOworICAgIHZvaWQgYXBw
ZW5kU3VibGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBpbnNlcnRTdWJsYXllcihXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXImLCBzaXplX3QgaW5kZXgp
IG92ZXJyaWRlOworICAgIHZvaWQgcmVwbGFjZVN1YmxheWVyKFdlYkNvcmU6OlBsYXRmb3JtQ0FM
YXllciYgcmVmZXJlbmNlLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXImKSBvdmVycmlkZTsKKyAg
ICBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJMaXN0KiBjdXN0b21TdWJsYXllcnMoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdm9pZCBhZG9wdFN1YmxheWVy
cyhXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXImIHNvdXJjZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IGFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgV2ViQ29yZTo6UGxhdGZvcm1D
QUFuaW1hdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGNv
bnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1D
QUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsK
KyAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgU3RyaW5nJiBrZXksIENGVGltZUludGVy
dmFsIGJlZ2luVGltZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBT
dHJpbmcmIGtleSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldE1hc2soV2ViQ29yZTo6UGxhdGZv
cm1DQUxheWVyKikgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRPcGFxdWUoYm9vbCkgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpG
bG9hdFJlY3QgYm91bmRzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRCb3VuZHMoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBv
aW50M0QgcG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQzRCYpIG92ZXJyaWRlOworCisgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludDNEIGFuY2hvclBvaW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRBbmNo
b3JQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKSBvdmVycmlkZTsKKworICAgIFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
Jikgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXll
clRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zv
cm0oY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsKKworICAg
IGJvb2wgaXNIaWRkZW4oKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldEhpZGRlbihib29s
KSBvdmVycmlkZTsKKworICAgIGJvb2wgY29udGVudHNIaWRkZW4oKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIHNldENvbnRlbnRzSGlkZGVuKGJvb2wpIG92ZXJyaWRlOworCisgICAgYm9vbCB1
c2VySW50ZXJhY3Rpb25FbmFibGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRVc2Vy
SW50ZXJhY3Rpb25FbmFibGVkKGJvb2wpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRCYWNraW5n
U3RvcmVBdHRhY2hlZChib29sKSBvdmVycmlkZTsKKyAgICBib29sIGJhY2tpbmdTdG9yZUF0dGFj
aGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGdlb21ldHJ5RmxpcHBlZCgpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgc2V0R2VvbWV0cnlGbGlwcGVkKGJvb2wpIG92ZXJyaWRlOwor
CisgICAgYm9vbCBpc0RvdWJsZVNpZGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRE
b3VibGVTaWRlZChib29sKSBvdmVycmlkZTsKKworICAgIGJvb2wgbWFza3NUb0JvdW5kcygpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSBvdmVycmlkZTsK
KworICAgIGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCkgb3ZlcnJpZGU7CisKKyAgICBib29sIHdhbnRz
RGVlcENvbG9yQmFja2luZ1N0b3JlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRXYW50
c0RlZXBDb2xvckJhY2tpbmdTdG9yZShib29sKSBvdmVycmlkZTsKKworICAgIGJvb2wgc3VwcG9y
dHNTdWJwaXhlbEFudGlhbGlhc2VkVGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0
U3VwcG9ydHNTdWJwaXhlbEFudGlhbGlhc2VkVGV4dChib29sKSBvdmVycmlkZTsKKworICAgIENG
VHlwZVJlZiBjb250ZW50cygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHMo
Q0ZUeXBlUmVmKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRNaW5pZmljYXRpb25G
aWx0ZXIoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpGaWx0ZXJUeXBlKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldE1hZ25pZmljYXRpb25GaWx0ZXIoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpG
aWx0ZXJUeXBlKSBvdmVycmlkZTsKKworICAgIFdlYkNvcmU6OkNvbG9yIGJhY2tncm91bmRDb2xv
cigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEJvcmRlcldpZHRoKGZsb2F0
KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9y
Jikgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRPcGFjaXR5KGZsb2F0KSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0RmlsdGVycyhj
b25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJikgb3ZlcnJpZGU7CisgICAgc3RhdGljIGJv
b2wgZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
Jik7CisgICAgdm9pZCBjb3B5RmlsdGVyc0Zyb20oY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1DQUxh
eWVyJikgb3ZlcnJpZGU7CisKKyNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQorICAgIHZvaWQg
c2V0QmxlbmRNb2RlKFdlYkNvcmU6OkJsZW5kTW9kZSkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAg
IHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0U3Bl
ZWQoZmxvYXQpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRUaW1lT2Zmc2V0KENGVGltZUludGVy
dmFsKSBvdmVycmlkZTsKKworICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpIG92ZXJyaWRlOworCisgICAgZmxv
YXQgY29ybmVyUmFkaXVzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDb3JuZXJSYWRp
dXMoZmxvYXQpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1
bnNpZ25lZCkgb3ZlcnJpZGU7CisKKyAgICAvLyBGSVhNRTogSGF2aW5nIGJvdGggc2hhcGVSb3Vu
ZGVkUmVjdCBhbmQgc2hhcGVQYXRoIGlzIHJlZHVuZGFudC4gV2UgY291bGQgdXNlIHNoYXBlUGF0
aCBmb3IgZXZlcnl0aGluZy4KKyAgICBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHNoYXBlUm91
bmRlZFJlY3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFNoYXBlUm91bmRlZFJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYpIG92ZXJyaWRlOworCisgICAgV2ViQ29y
ZTo6UGF0aCBzaGFwZVBhdGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFNoYXBlUGF0
aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpXaW5kUnVs
ZSBzaGFwZVdpbmRSdWxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTaGFwZVdpbmRS
dWxlKFdlYkNvcmU6OldpbmRSdWxlKSBvdmVycmlkZTsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OkN1c3RvbUFwcGVhcmFuY2UgY3VzdG9tQXBwZWFyYW5jZSgpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgdXBkYXRlQ3VzdG9tQXBwZWFyYW5jZShXZWJDb3JlOjpHcmFwaGljc0xheWVy
OjpDdXN0b21BcHBlYXJhbmNlKSBvdmVycmlkZTsKKworICAgIFdlYkNvcmU6OlRpbGVkQmFja2lu
ZyogdGlsZWRCYWNraW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorCisgICAgUmVm
PFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lcikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWY8UGxhdGZvcm1DQUxheWVy
PiBjcmVhdGVDb21wYXRpYmxlTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpMYXllclR5
cGUsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCopIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgdm9pZCBlbnVtZXJhdGVSZWN0c0JlaW5nRHJhd24oQ0dDb250ZXh0UmVmLCB2b2lkICheYmxv
Y2spKENHUmVjdCkpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB1aW50MzJfdCBob3N0aW5nQ29u
dGV4dElEKCk7CisKKyAgICB1bnNpZ25lZCBiYWNraW5nU3RvcmVCeXRlc1BlclBpeGVsKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldENsb25lZExheWVyKGNvbnN0IFBsYXRmb3JtQ0FM
YXllciopOworCisgICAgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGll
cyYgcHJvcGVydGllcygpIHsgcmV0dXJuIG1fcHJvcGVydGllczsgfQorICAgIGNvbnN0IFJlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXMmIHByb3BlcnRpZXMoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnRpZXM7IH0KKworICAgIHZvaWQgZGlkQ29tbWl0KCk7CisKKyAg
ICB2b2lkIGNsZWFyQ29udGV4dCgpIHsgbV9jb250ZXh0ID0gbnVsbHB0cjsgfQorICAgIFJlbW90
ZUxheWVyVHJlZUNvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0K
KworcHJvdGVjdGVkOgorICAgIFBsYXRmb3JtQ0FMYXllclJlbW90ZShXZWJDb3JlOjpQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25l
ciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCk7CisgICAgUGxhdGZvcm1DQUxheWVy
UmVtb3RlKGNvbnN0IFBsYXRmb3JtQ0FMYXllclJlbW90ZSYsIFdlYkNvcmU6OlBsYXRmb3JtQ0FM
YXllckNsaWVudCosIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmKTsKKworICAgIHZvaWQgdXBkYXRl
Q2xvbmVkTGF5ZXJQcm9wZXJ0aWVzKFBsYXRmb3JtQ0FMYXllclJlbW90ZSYgY2xvbmUsIGJvb2wg
Y29weUNvbnRlbnRzID0gdHJ1ZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1BsYXRm
b3JtQ0FMYXllclJlbW90ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
b2lkIGVuc3VyZUJhY2tpbmdTdG9yZSgpOworICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKCk7
CisgICAgdm9pZCByZW1vdmVTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqKTsKKworICAg
IGJvb2wgcmVxdWlyZXNDdXN0b21BcHBlYXJhbmNlVXBkYXRlT25Cb3VuZHNDaGFuZ2UoKSBjb25z
dDsKKworICAgIFdlYkNvcmU6OkxheWVyUG9vbCYgbGF5ZXJQb29sKCkgb3ZlcnJpZGU7CisKKyAg
ICBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzIG1fcHJvcGVydGll
czsKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJMaXN0IG1fY2hpbGRyZW47CisgICAgUGxh
dGZvcm1DQUxheWVyUmVtb3RlKiBtX3N1cGVybGF5ZXIgeyBudWxscHRyIH07CisgICAgUGxhdGZv
cm1DQUxheWVyUmVtb3RlKiBtX21hc2tMYXllciB7IG51bGxwdHIgfTsKKyAgICBIYXNoTWFwPFN0
cmluZywgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb24+PiBtX2FuaW1hdGlvbnM7
CisKKyAgICBib29sIG1fYWNjZWxlcmF0ZXNEcmF3aW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
d2FudHNEZWVwQ29sb3JCYWNraW5nU3RvcmUgeyBmYWxzZSB9OworCisgICAgUmVtb3RlTGF5ZXJU
cmVlQ29udGV4dCogbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfUExBVEZPUk1fQ0FMQVlFUihXZWJLaXQ6OlBsYXRmb3JtQ0FM
YXllclJlbW90ZSwgaXNQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5
ZXJSZW1vdGVDdXN0b20uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYWQ2
NGNmMGNmYjQwMWYwYjdjZTNmMTZiNGMwYWI0ZDA4ZDI2NjQxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3Jt
Q0FMYXllclJlbW90ZUN1c3RvbS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlBs
YXRmb3JtQ0FMYXllclJlbW90ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTGF5
ZXJIb3N0aW5nQ29udGV4dDsKKworLy8gUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tIGlzIHVz
ZWQgZm9yIENBTGF5ZXJzIHRoYXQgbGl2ZSBpbiB0aGUgd2ViIHByb2Nlc3MgYW5kIGFyZSBob3N0
ZWQgaW50byB0aGUgVUkgcHJvY2VzcyB2aWEgcmVtb3RlIGNvbnRleHQuCitjbGFzcyBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGVDdXN0b20gZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1DQUxheWVyUmVtb3Rl
IHsKKyAgICBmcmllbmQgY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3RlOworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBjcmVhdGUoUGxhdGZvcm1MYXllciAq
LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0
Jik7CisKKyAgICB2aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oKTsKKworICAg
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3BsYXRmb3JtTGF5ZXIuZ2V0KCk7IH0KKworICAgIHVpbnQzMl90IGhvc3RpbmdDb250ZXh0SUQo
KSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlz
cGxheSgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1
c3RvbShXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgUGxhdGZvcm1MYXllciAq
LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVD
b250ZXh0Jik7CisKKyAgICBSZWY8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBjbG9uZShXZWJD
b3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdCBvdmVycmlkZTsKKworICAg
IGJvb2wgaXNQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICBDRlR5cGVSZWYgY29udGVudHMoKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIHNldENvbnRlbnRzKENGVHlwZVJlZikgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4gbV9sYXllckhvc3RpbmdDb250ZXh0OworICAg
IFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3BsYXRmb3JtTGF5ZXI7CisgICAgYm9vbCBtX3By
b3ZpZGVzQ29udGVudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19QTEFURk9STV9DQUxBWUVSKFdlYktpdDo6UGxhdGZvcm1DQUxheWVyUmVt
b3RlQ3VzdG9tLCBpc1BsYXRmb3JtQ0FMYXllclJlbW90ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXll
clJlbW90ZUN1c3RvbS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzY5
YjliMzE1YWM4M2RiNmQ3ODhjOGYxMzYzMjJlODY3NzYyYzYwMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9y
bUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0KQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW1w
b3J0ICJQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20uaCIKKworI2ltcG9ydCAiTGF5ZXJIb3N0
aW5nQ29udGV4dC5oIgorI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oIgorI2ltcG9y
dCAiUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNz
LmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXJDQS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXJD
b2NvYS5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlQ0FMYXllckV4dHJhcy5oPgorI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisKK1NPRlRf
TElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0NMQVNTX09Q
VElPTkFMKEFWRm91bmRhdGlvbiwgQVZQbGF5ZXJMYXllcikKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBw
bGF0Zm9ybUNBTGF5ZXJQb2ludGVyID0gQCJXS1BsYXRmb3JtQ0FMYXllciI7CisKK1JlZjxQbGF0
Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y3JlYXRlKFBs
YXRmb3JtTGF5ZXIgKnBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIs
IFJlbW90ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCit7CisgICAgYXV0byBsYXllciA9IGFk
b3B0UmVmKCpuZXcgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKFBsYXRmb3JtQ0FMYXllckNv
Y29hOjpsYXllclR5cGVGb3JQbGF0Zm9ybUxheWVyKHBsYXRmb3JtTGF5ZXIpLCBwbGF0Zm9ybUxh
eWVyLCBvd25lciwgY29udGV4dCkpOworICAgIGNvbnRleHQubGF5ZXJXYXNDcmVhdGVkKGxheWVy
LmdldCgpLCBsYXllci0+bGF5ZXJUeXBlKCkpOworICAgIHJldHVybiBXVEZNb3ZlKGxheWVyKTsK
K30KKworUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tOjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVD
dXN0b20oTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1MYXllciAqIGN1c3RvbUxheWVyLCBQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250
ZXh0KQorICAgIDogUGxhdGZvcm1DQUxheWVyUmVtb3RlKGxheWVyVHlwZSwgb3duZXIsIGNvbnRl
eHQpCit7CisgICAgc3dpdGNoIChjb250ZXh0LmxheWVySG9zdGluZ01vZGUoKSkgeworICAgIGNh
c2UgTGF5ZXJIb3N0aW5nTW9kZTo6SW5Qcm9jZXNzOgorICAgICAgICBtX2xheWVySG9zdGluZ0Nv
bnRleHQgPSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JQb3J0KFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpKTsKKyAgICAgICAgYnJlYWs7
CisjaWYgSEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQorICAgIGNhc2UgTGF5ZXJI
b3N0aW5nTW9kZTo6T3V0T2ZQcm9jZXNzOgorICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQg
PSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCk7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBpZiAobGF5ZXJUeXBlID09IExheWVyVHlwZUFW
UGxheWVyTGF5ZXIpIHsKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gY29udGV4dC5k
ZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICAgICAgLy8gU2V0IGEgc2NhbGUgZmFjdG9yIGhl
cmUgdG8gbWFrZSBjb252ZXJ0UmVjdDp0b0xheWVyOm5pbCB0YWtlIHNjYWxlIGZhY3RvciBpbnRv
IGFjY291bnQuIDxyZGFyOi8vcHJvYmxlbS8xODMxNjU0Mj4uCisgICAgICAgICAgICAvLyBUaGlz
IHNjYWxlIGZhY3RvciBpcyBpbnZlcnRlZCBpbiB0aGUgaG9zdGluZyBwcm9jZXNzLgorICAgICAg
ICAgICAgW2N1c3RvbUxheWVyIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKHNj
YWxlRmFjdG9yLCBzY2FsZUZhY3RvciwgMSldOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAg
YnJlYWs7CisjZW5kaWYKKyAgICB9CisKKyAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPnNldFJv
b3RMYXllcihjdXN0b21MYXllcik7CisgICAgW2N1c3RvbUxheWVyIHNldFZhbHVlOltOU1ZhbHVl
IHZhbHVlV2l0aFBvaW50ZXI6dGhpc10gZm9yS2V5OnBsYXRmb3JtQ0FMYXllclBvaW50ZXJdOwor
CisgICAgbV9wbGF0Zm9ybUxheWVyID0gY3VzdG9tTGF5ZXI7CisgICAgW2N1c3RvbUxheWVyIHdl
Yl9kaXNhYmxlQWxsQWN0aW9uc107CisKKyAgICBtX3Byb3ZpZGVzQ29udGVudHMgPSBsYXllclR5
cGUgPT0gTGF5ZXJUeXBlQ29udGVudHNQcm92aWRlZExheWVyOworCisgICAgcHJvcGVydGllcygp
LnBvc2l0aW9uID0gRmxvYXRQb2ludDNEKGN1c3RvbUxheWVyLnBvc2l0aW9uLngsIGN1c3RvbUxh
eWVyLnBvc2l0aW9uLnksIGN1c3RvbUxheWVyLnpQb3NpdGlvbik7CisgICAgcHJvcGVydGllcygp
LmFuY2hvclBvaW50ID0gRmxvYXRQb2ludDNEKGN1c3RvbUxheWVyLmFuY2hvclBvaW50LngsIGN1
c3RvbUxheWVyLmFuY2hvclBvaW50LnksIGN1c3RvbUxheWVyLmFuY2hvclBvaW50Wik7CisgICAg
cHJvcGVydGllcygpLmJvdW5kcyA9IGN1c3RvbUxheWVyLmJvdW5kczsKKyAgICBwcm9wZXJ0aWVz
KCkuY29udGVudHNSZWN0ID0gY3VzdG9tTGF5ZXIuY29udGVudHNSZWN0OworfQorCitQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGVDdXN0b206On5QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oKQorewor
ICAgIFttX3BsYXRmb3JtTGF5ZXIgc2V0VmFsdWU6bmlsIGZvcktleTpwbGF0Zm9ybUNBTGF5ZXJQ
b2ludGVyXTsKK30KKwordWludDMyX3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tOjpob3N0
aW5nQ29udGV4dElEKCkKK3sKKyAgICByZXR1cm4gbV9sYXllckhvc3RpbmdDb250ZXh0LT5jb250
ZXh0SUQoKTsKK30KKworUmVmPFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxh
eWVyUmVtb3RlQ3VzdG9tOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25z
dAoreworICAgIFJldGFpblB0cjxDQUxheWVyICo+IGNsb25lZExheWVyOworICAgIGJvb2wgY29w
eUNvbnRlbnRzID0gdHJ1ZTsKKworICAgIGlmIChsYXllclR5cGUoKSA9PSBMYXllclR5cGVBVlBs
YXllckxheWVyKSB7CisgICAgICAgIAorICAgICAgICBpZiAoW3BsYXRmb3JtTGF5ZXIoKSBpc0tp
bmRPZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSkgeworICAgICAgICAgICAgY2xvbmVk
TGF5ZXIgPSBhZG9wdE5TKFthbGxvY0FWUGxheWVyTGF5ZXJJbnN0YW5jZSgpIGluaXRdKTsKKwor
ICAgICAgICAgICAgQVZQbGF5ZXJMYXllciogZGVzdGluYXRpb25QbGF5ZXJMYXllciA9IHN0YXRp
Y19jYXN0PEFWUGxheWVyTGF5ZXIgKj4oY2xvbmVkTGF5ZXIuZ2V0KCkpOworICAgICAgICAgICAg
QVZQbGF5ZXJMYXllciogc291cmNlUGxheWVyTGF5ZXIgPSBzdGF0aWNfY2FzdDxBVlBsYXllckxh
eWVyICo+KHBsYXRmb3JtTGF5ZXIoKSk7CisgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICAgICAgICAgIFtkZXN0aW5hdGlvblBs
YXllckxheWVyIHNldFBsYXllcjpbc291cmNlUGxheWVyTGF5ZXIgcGxheWVyXV07CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9uIGlPUywgdGhlIEFW
UGxheWVyTGF5ZXIgaXMgaW5zaWRlIGEgV2ViVmlkZW9Db250YWluZXJMYXllci4gVGhpcyBjb2Rl
IG5lZWRzIHRvIHNoYXJlIGxvZ2ljIHdpdGggTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzo6Y3JlYXRlQVZQbGF5ZXJMYXllcigpLgorICAgICAgICAgICAgY2xvbmVkTGF5ZXIgPSBh
ZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgICAgICB9CisKKyAgICAgICAgY29w
eUNvbnRlbnRzID0gZmFsc2U7CisgICAgfSBlbHNlIGlmIChsYXllclR5cGUoKSA9PSBMYXllclR5
cGVDb250ZW50c1Byb3ZpZGVkTGF5ZXIpIHsKKyAgICAgICAgY2xvbmVkTGF5ZXIgPSBhZG9wdE5T
KFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgICAgICAvLyBGSVhNRTogY3VycmVudGx5IGNv
cHlpbmcgV2ViR0wgY29udGVudHMgYnJlYWtzIHRoZSBvcmlnaW5hbCBsYXllci4KKyAgICAgICAg
Y29weUNvbnRlbnRzID0gZmFsc2U7CisgICAgfQorCisgICAgYXV0byBjbG9uZSA9IGFkb3B0UmVm
KCpuZXcgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKGxheWVyVHlwZSgpLCBjbG9uZWRMYXll
ci5nZXQoKSwgb3duZXIsICpjb250ZXh0KCkpKTsKKyAgICBjb250ZXh0KCktPmxheWVyV2FzQ3Jl
YXRlZChjbG9uZS5nZXQoKSwgY2xvbmUtPmxheWVyVHlwZSgpKTsKKworICAgIHVwZGF0ZUNsb25l
ZExheWVyUHJvcGVydGllcyhjbG9uZS5nZXQoKSwgY29weUNvbnRlbnRzKTsKKworICAgIGNsb25l
LT5zZXRDbG9uZWRMYXllcih0aGlzKTsKKyAgICByZXR1cm4gV1RGTW92ZShjbG9uZSk7Cit9CisK
K0NGVHlwZVJlZiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OmNvbnRlbnRzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gW21fcGxhdGZvcm1MYXllciBjb250ZW50c107Cit9CisKK3ZvaWQgUGxh
dGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tOjpzZXRDb250ZW50cyhDRlR5cGVSZWYgY29udGVudHMp
Cit7CisgICAgW21fcGxhdGZvcm1MYXllciBzZXRDb250ZW50czooaWQpY29udGVudHNdOworfQor
Cit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9wcm92aWRlc0NvbnRlbnRzKQor
ICAgICAgICBbbV9wbGF0Zm9ybUxheWVyIHNldE5lZWRzRGlzcGxheUluUmVjdDpyZWN0XTsKKyAg
ICBlbHNlCisgICAgICAgIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6c2V0TmVl
ZHNEaXNwbGF5KCkKK3sKKyAgICBpZiAobV9wcm92aWRlc0NvbnRlbnRzKQorICAgICAgICBbbV9w
bGF0Zm9ybUxheWVyIHNldE5lZWRzRGlzcGxheV07CisgICAgZWxzZQorICAgICAgICBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGU6OnNldE5lZWRzRGlzcGxheSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmcuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXll
clJlbW90ZVRpbGVkQmFja2luZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmVjMzBjMmQyMTZlN2E0OWIyYzJm
ZjEzZWU2OWYwOWVhNzg1YTI4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxl
ZEJhY2tpbmcuY3BwCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9ydCAiUGxhdGZv
cm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nLmgiCisKKyNpbXBvcnQgIlJlbW90ZUxheWVyVHJl
ZUNvbnRleHQuaCIKKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNBLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllckNvY29hLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
UGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nOjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVU
aWxlZEJhY2tpbmcoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBv
d25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKKyAgICA6IFBsYXRmb3JtQ0FM
YXllclJlbW90ZShsYXllclR5cGUsIG93bmVyLCBjb250ZXh0KQorICAgICwgbV90aWxlQ29udHJv
bGxlcihzdGQ6Om1ha2VfdW5pcXVlPFRpbGVDb250cm9sbGVyPih0aGlzKSkKK3sKK30KKworUGxh
dGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nOjp+UGxhdGZvcm1DQUxheWVyUmVtb3RlVGls
ZWRCYWNraW5nKCkKK3sKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tp
bmc6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKK3sK
KyAgICBtX3RpbGVDb250cm9sbGVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoZW5jbG9zaW5nSW50
UmVjdChkaXJ0eVJlY3QpKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJh
Y2tpbmc6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgbV90aWxlQ29udHJvbGxlci0+c2V0TmVl
ZHNEaXNwbGF5KCk7Cit9CisKK2NvbnN0IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckxpc3QqIFBs
YXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2luZzo6Y3VzdG9tU3VibGF5ZXJzKCkgY29uc3QK
K3sKKyAgICBtX2N1c3RvbVN1YmxheWVycyA9IG1fdGlsZUNvbnRyb2xsZXItPmNvbnRhaW5lckxh
eWVycygpOworICAgIHJldHVybiAmbV9jdXN0b21TdWJsYXllcnM7Cit9CisKK3ZvaWQgUGxhdGZv
cm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nOjpzZXRCb3VuZHMoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBib3VuZHMpCit7CisgICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRCb3VuZHMo
Ym91bmRzKTsKKyAgICBtX3RpbGVDb250cm9sbGVyLT50aWxlQ2FjaGVMYXllckJvdW5kc0NoYW5n
ZWQoKTsKK30KKworYm9vbCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmc6OmlzT3Bh
cXVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci0+dGlsZXNBcmVPcGFx
dWUoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmc6OnNldE9w
YXF1ZShib29sIG9wYXF1ZSkKK3sKKyAgICBtX3RpbGVDb250cm9sbGVyLT5zZXRUaWxlc09wYXF1
ZShvcGFxdWUpOworfQorCitib29sIFBsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2luZzo6
YWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlQ29udHJvbGxl
ci0+YWNjZWxlcmF0ZXNEcmF3aW5nKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3Rl
VGlsZWRCYWNraW5nOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdp
bmcpCit7CisgICAgbV90aWxlQ29udHJvbGxlci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGFjY2Vs
ZXJhdGVzRHJhd2luZyk7Cit9CisKK2Jvb2wgUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNr
aW5nOjp3YW50c0RlZXBDb2xvckJhY2tpbmdTdG9yZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
dGlsZUNvbnRyb2xsZXItPndhbnRzRGVlcENvbG9yQmFja2luZ1N0b3JlKCk7Cit9CisKK3ZvaWQg
UGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nOjpzZXRXYW50c0RlZXBDb2xvckJhY2tp
bmdTdG9yZShib29sIHdhbnRzRGVlcENvbG9yQmFja2luZ1N0b3JlKQoreworICAgIG1fdGlsZUNv
bnRyb2xsZXItPnNldFdhbnRzRGVlcENvbG9yQmFja2luZ1N0b3JlKHdhbnRzRGVlcENvbG9yQmFj
a2luZ1N0b3JlKTsKK30KKworYm9vbCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmc6
OnN1cHBvcnRzU3VicGl4ZWxBbnRpYWxpYXNlZFRleHQoKSBjb25zdAoreworICAgIHJldHVybiBt
X3RpbGVDb250cm9sbGVyLT5zdXBwb3J0c1N1YnBpeGVsQW50aWFsaWFzZWRUZXh0KCk7Cit9CisK
K3ZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nOjpzZXRTdXBwb3J0c1N1YnBp
eGVsQW50aWFsaWFzZWRUZXh0KGJvb2wgc3VwcG9ydHNTdWJwaXhlbEFudGlhbGlhc2VkVGV4dCkK
K3sKKyAgICBtX3RpbGVDb250cm9sbGVyLT5zZXRTdXBwb3J0c1N1YnBpeGVsQW50aWFsaWFzZWRU
ZXh0KHN1cHBvcnRzU3VicGl4ZWxBbnRpYWxpYXNlZFRleHQpOworfQorCitmbG9hdCBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmc6OmNvbnRlbnRzU2NhbGUoKSBjb25zdAoreworICAg
IHJldHVybiBtX3RpbGVDb250cm9sbGVyLT5jb250ZW50c1NjYWxlKCk7Cit9CisKK3ZvaWQgUGxh
dGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNj
YWxlKQoreworICAgIG1fdGlsZUNvbnRyb2xsZXItPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOwor
fQorCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2luZzo6c2V0Qm9yZGVyV2lk
dGgoZmxvYXQgYm9yZGVyV2lkdGgpCit7CisgICAgbV90aWxlQ29udHJvbGxlci0+c2V0VGlsZURl
YnVnQm9yZGVyV2lkdGgoYm9yZGVyV2lkdGggLyAyKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGVUaWxlZEJhY2tpbmc6OnNldEJvcmRlckNvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9y
JiBjb2xvcikKK3sKKyAgICBtX3RpbGVDb250cm9sbGVyLT5zZXRUaWxlRGVidWdCb3JkZXJDb2xv
cihjb2xvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXll
clJlbW90ZVRpbGVkQmFja2luZy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2luZy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjBkZGZjZTg1MmQ1MTI3MDNkMzRmNDM1MmEzOWY0NWEzZTVkMTVhNTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRy
ZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nLmgKQEAgLTAsMCArMSw3NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxh
dGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nX2gKKyNkZWZpbmUgUGxhdGZvcm1DQUxheWVy
UmVtb3RlVGlsZWRCYWNraW5nX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllclJlbW90ZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvVGlsZUNvbnRyb2xsZXIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFBsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2luZyBmaW5hbCA6IHB1
YmxpYyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUgeworICAgIGZyaWVuZCBjbGFzcyBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGU7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UGxhdGZvcm1DQUxheWVyUmVtb3Rl
VGlsZWRCYWNraW5nKCk7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlVGls
ZWRCYWNraW5nKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBXZWJDb3JlOjpQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7CisK
KyAgICBXZWJDb3JlOjpUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpIG92ZXJyaWRlIHsgcmV0
dXJuIG1fdGlsZUNvbnRyb2xsZXIuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOworCisgICAgY29uc3QgV2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyTGlzdCogY3VzdG9tU3VibGF5ZXJzKCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsK
KyAgICAKKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRP
cGFxdWUoYm9vbCkgb3ZlcnJpZGU7CisgICAgCisgICAgYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmco
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sKSBv
dmVycmlkZTsKKworICAgIGJvb2wgd2FudHNEZWVwQ29sb3JCYWNraW5nU3RvcmUoKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIHNldFdhbnRzRGVlcENvbG9yQmFja2luZ1N0b3JlKGJvb2wpIG92
ZXJyaWRlOworCisgICAgYm9vbCBzdXBwb3J0c1N1YnBpeGVsQW50aWFsaWFzZWRUZXh0KCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTdXBwb3J0c1N1YnBpeGVsQW50aWFsaWFzZWRUZXh0
KGJvb2wpIG92ZXJyaWRlOworCisgICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCkgb3ZlcnJpZGU7CisgICAgCisg
ICAgdm9pZCBzZXRCb3JkZXJXaWR0aChmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRCb3Jk
ZXJDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlRpbGVDb250cm9sbGVyPiBtX3RpbGVDb250cm9sbGVyOworICAgIG11
dGFibGUgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyTGlzdCBtX2N1c3RvbVN1YmxheWVyczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUGxhdGZvcm1DQUxheWVyUmVt
b3RlVGlsZWRCYWNraW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVl
Q29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1NTQ4ZWExYzk0NTAzYWU5YTBiMDVkMzYyYjQ3MWIxZDAw
YTBjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oCkBAIC0wLDAgKzEsOTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbW90ZUxheWVyVHJlZUNvbnRleHRfaAorI2RlZmlu
ZSBSZW1vdGVMYXllclRyZWVDb250ZXh0X2gKKworI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQu
aCIKKyNpbmNsdWRlICJSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaCIKKyNpbmNs
dWRlICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllckZhY3RvcnkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xheWVyUG9vbC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3RlOwor
Y2xhc3MgV2ViUGFnZTsKKworLy8gRklYTUU6IFRoaXMgY2xhc3MgZG9lc24ndCBkbyBtdWNoIG5v
dy4gUm9sbCBpbnRvIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhPworY2xhc3MgUmVtb3RlTGF5
ZXJUcmVlQ29udGV4dCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSB7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dChXZWJQYWdlJik7Cisg
ICAgflJlbW90ZUxheWVyVHJlZUNvbnRleHQoKTsKKworICAgIHZvaWQgbGF5ZXJXYXNDcmVhdGVk
KFBsYXRmb3JtQ0FMYXllclJlbW90ZSYsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlKTsKKyAgICB2b2lkIGxheWVyV2lsbEJlRGVzdHJveWVkKFBsYXRmb3JtQ0FMYXllclJlbW90
ZSYpOworCisgICAgdm9pZCBiYWNraW5nU3RvcmVXYXNDcmVhdGVkKFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlJik7CisgICAgdm9pZCBiYWNraW5nU3RvcmVXaWxsQmVEZXN0cm95ZWQoUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmUmKTsKKyAgICBib29sIGJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXllZChS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZSYpOworCisgICAgV2ViQ29yZTo6TGF5ZXJQb29sJiBsYXll
clBvb2woKSB7IHJldHVybiBtX2xheWVyUG9vbDsgfQorCisgICAgZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IoKSBjb25zdDsKKworICAgIExheWVySG9zdGluZ01vZGUgbGF5ZXJIb3N0aW5nTW9kZSgp
IGNvbnN0OworCisgICAgdm9pZCBidWlsZFRyYW5zYWN0aW9uKFJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uJiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyJiByb290TGF5ZXIpOworCisgICAgdm9p
ZCBsYXllclByb3BlcnR5Q2hhbmdlZFdoaWxlQnVpbGRpbmdUcmFuc2FjdGlvbihQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGUmKTsKKworICAgIC8vIEZyb20gdGhlIFVJIHByb2Nlc3MKKyAgICB2b2lkIGFu
aW1hdGlvbkRpZFN0YXJ0KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwg
Y29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSBzdGFydFRpbWUpOworICAgIHZvaWQgYW5pbWF0aW9u
RGlkRW5kKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgY29uc3QgU3Ry
aW5nJiBrZXkpOworCisgICAgdm9pZCB3aWxsU3RhcnRBbmltYXRpb25PbkxheWVyKFBsYXRmb3Jt
Q0FMYXllclJlbW90ZSYpOworCisgICAgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9u
JiBiYWNraW5nU3RvcmVDb2xsZWN0aW9uKCkgeyByZXR1cm4gbV9iYWNraW5nU3RvcmVDb2xsZWN0
aW9uOyB9CisgICAgCisgICAgdm9pZCBzZXROZXh0Rmx1c2hJc0ZvckltbWVkaWF0ZVBhaW50KGJv
b2wgbmV4dEZsdXNoSXNGb3JJbW1lZGlhdGVQYWludCkgeyBtX25leHRGbHVzaElzRm9ySW1tZWRp
YXRlUGFpbnQgPSBuZXh0Rmx1c2hJc0ZvckltbWVkaWF0ZVBhaW50OyB9CisgICAgYm9vbCBuZXh0
Rmx1c2hJc0ZvckltbWVkaWF0ZVBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0Rmx1c2hJc0Zv
ckltbWVkaWF0ZVBhaW50OyB9CisKK3ByaXZhdGU6CisgICAgLy8gV2ViQ29yZTo6R3JhcGhpY3NM
YXllckZhY3RvcnkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
Y3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpUeXBlLCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2xpZW50Jikgb3ZlcnJpZGU7CisKKyAgICBXZWJQYWdlJiBtX3dlYlBh
Z2U7CisKKyAgICBIYXNoTWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJ
RCwgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyQ3JlYXRpb25Qcm9wZXJ0aWVzPiBt
X2NyZWF0ZWRMYXllcnM7CisgICAgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRm
b3JtTGF5ZXJJRD4gbV9kZXN0cm95ZWRMYXllcnM7CisKKyAgICBIYXNoTWFwPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgUGxhdGZvcm1DQUxheWVyUmVtb3RlKj4gbV9s
aXZlTGF5ZXJzOworICAgIEhhc2hNYXA8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1M
YXllcklELCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqPiBtX2xheWVyc1dpdGhBbmltYXRpb25zOwor
CisgICAgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uIG1fYmFja2luZ1N0b3JlQ29s
bGVjdGlvbjsKKyAgICAKKyAgICBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiogbV9jdXJyZW50
VHJhbnNhY3Rpb247CisKKyAgICBXZWJDb3JlOjpMYXllclBvb2wgbV9sYXllclBvb2w7CisgICAg
CisgICAgYm9vbCBtX25leHRGbHVzaElzRm9ySW1tZWRpYXRlUGFpbnQgeyBmYWxzZSB9OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBSZW1vdGVMYXllclRyZWVDb250
ZXh0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTBjNDg2YjU4MmIwZDE1ODcwNTZhNDhkMTgxMmRiMzlmN2I1MmIwMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxh
eWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tCkBAIC0wLDAgKzEsMTYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVDb250
ZXh0LmgiCisKKyNpbXBvcnQgIkdlbmVyaWNDYWxsYmFjay5oIgorI2ltcG9ydCAiR3JhcGhpY3NM
YXllckNBUmVtb3RlLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCIKKyNpbXBv
cnQgIlJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5oIgorI2ltcG9ydCAiUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb24uaCIKKyNpbXBvcnQgIldlYlBhZ2UuaCIKKyNpbXBvcnQgPFdl
YkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgorI2ltcG9y
dCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDx3dGYvU2V0Rm9yU2NvcGUuaD4KKyNpbXBvcnQg
PHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6UmVtb3RlTGF5ZXJUcmVl
Q29udGV4dChXZWJQYWdlJiB3ZWJQYWdlKQorICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCisgICAg
LCBtX2N1cnJlbnRUcmFuc2FjdGlvbihudWxscHRyKQoreworfQorCitSZW1vdGVMYXllclRyZWVD
b250ZXh0Ojp+UmVtb3RlTGF5ZXJUcmVlQ29udGV4dCgpCit7CisgICAgZm9yIChhdXRvJiBsYXll
ciA6IG1fbGl2ZUxheWVycy52YWx1ZXMoKSkKKyAgICAgICAgbGF5ZXItPmNsZWFyQ29udGV4dCgp
OworfQorCitmbG9hdCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjpkZXZpY2VTY2FsZUZhY3Rvcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpOworfQor
CitMYXllckhvc3RpbmdNb2RlIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmxheWVySG9zdGluZ01v
ZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UubGF5ZXJIb3N0aW5nTW9kZSgpOwor
fQorCit2b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmxheWVyV2FzQ3JlYXRlZChQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGUmIGxheWVyLCBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlKQor
eworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklEID0gbGF5ZXIubGF5
ZXJJRCgpOworCisgICAgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyQ3JlYXRpb25Q
cm9wZXJ0aWVzIGNyZWF0aW9uUHJvcGVydGllczsKKyAgICBjcmVhdGlvblByb3BlcnRpZXMubGF5
ZXJJRCA9IGxheWVySUQ7CisgICAgY3JlYXRpb25Qcm9wZXJ0aWVzLnR5cGUgPSB0eXBlOworCisg
ICAgaWYgKGxheWVyLmlzUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKCkpIHsKKyAgICAgICAg
Y3JlYXRpb25Qcm9wZXJ0aWVzLmhvc3RpbmdDb250ZXh0SUQgPSBsYXllci5ob3N0aW5nQ29udGV4
dElEKCk7CisgICAgICAgIGNyZWF0aW9uUHJvcGVydGllcy5ob3N0aW5nRGV2aWNlU2NhbGVGYWN0
b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIH0KKworICAgIG1fY3JlYXRlZExheWVycy5h
ZGQobGF5ZXJJRCwgV1RGTW92ZShjcmVhdGlvblByb3BlcnRpZXMpKTsKKyAgICBtX2xpdmVMYXll
cnMuYWRkKGxheWVySUQsICZsYXllcik7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4
dDo6bGF5ZXJXaWxsQmVEZXN0cm95ZWQoUGxhdGZvcm1DQUxheWVyUmVtb3RlJiBsYXllcikKK3sK
KyAgICBBU1NFUlQobGF5ZXIubGF5ZXJJRCgpKTsKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9y
bUxheWVySUQgbGF5ZXJJRCA9IGxheWVyLmxheWVySUQoKTsKKworICAgIG1fY3JlYXRlZExheWVy
cy5yZW1vdmUobGF5ZXJJRCk7CisgICAgbV9saXZlTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKKwor
ICAgIEFTU0VSVCghbV9kZXN0cm95ZWRMYXllcnMuY29udGFpbnMobGF5ZXJJRCkpOworICAgIG1f
ZGVzdHJveWVkTGF5ZXJzLmFwcGVuZChsYXllcklEKTsKKyAgICAKKyAgICBtX2xheWVyc1dpdGhB
bmltYXRpb25zLnJlbW92ZShsYXllcklEKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVDb250
ZXh0OjpiYWNraW5nU3RvcmVXYXNDcmVhdGVkKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlJiBiYWNr
aW5nU3RvcmUpCit7CisgICAgbV9iYWNraW5nU3RvcmVDb2xsZWN0aW9uLmJhY2tpbmdTdG9yZVdh
c0NyZWF0ZWQoYmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0
OjpiYWNraW5nU3RvcmVXaWxsQmVEZXN0cm95ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmIGJh
Y2tpbmdTdG9yZSkKK3sKKyAgICBtX2JhY2tpbmdTdG9yZUNvbGxlY3Rpb24uYmFja2luZ1N0b3Jl
V2lsbEJlRGVzdHJveWVkKGJhY2tpbmdTdG9yZSk7Cit9CisKK2Jvb2wgUmVtb3RlTGF5ZXJUcmVl
Q29udGV4dDo6YmFja2luZ1N0b3JlV2lsbEJlRGlzcGxheWVkKFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlJiBiYWNraW5nU3RvcmUpCit7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlQ29sbGVjdGlv
bi5iYWNraW5nU3RvcmVXaWxsQmVEaXNwbGF5ZWQoYmFja2luZ1N0b3JlKTsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmNyZWF0ZUdy
YXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6VHlwZSBsYXllclR5cGUsIEdyYXBo
aWNzTGF5ZXJDbGllbnQmIGNsaWVudCkKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxH
cmFwaGljc0xheWVyQ0FSZW1vdGU+KGxheWVyVHlwZSwgY2xpZW50LCAqdGhpcyk7Cit9CisKK3Zv
aWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6YnVpbGRUcmFuc2FjdGlvbihSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFBsYXRmb3JtQ0FMYXllciYgcm9vdExheWVyKQor
eworICAgIFRyYWNlU2NvcGUgdHJhY2luZ1Njb3BlKEJ1aWxkVHJhbnNhY3Rpb25TdGFydCwgQnVp
bGRUcmFuc2FjdGlvbkVuZCk7CisKKyAgICBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmIHJvb3RMYXll
clJlbW90ZSA9IGRvd25jYXN0PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4ocm9vdExheWVyKTsKKyAg
ICB0cmFuc2FjdGlvbi5zZXRSb290TGF5ZXJJRChyb290TGF5ZXJSZW1vdGUubGF5ZXJJRCgpKTsK
KworICAgIG1fY3VycmVudFRyYW5zYWN0aW9uID0gJnRyYW5zYWN0aW9uOworICAgIHJvb3RMYXll
clJlbW90ZS5yZWN1cnNpdmVCdWlsZFRyYW5zYWN0aW9uKCp0aGlzLCB0cmFuc2FjdGlvbik7Cisg
ICAgbV9jdXJyZW50VHJhbnNhY3Rpb24gPSBudWxscHRyOworCisgICAgVmVjdG9yPFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllckNyZWF0aW9uUHJvcGVydGllcz4gY3JlYXRlZExheWVy
UHJvcGVydGllczsKKyAgICBjb3B5VmFsdWVzVG9WZWN0b3IobV9jcmVhdGVkTGF5ZXJzLCBjcmVh
dGVkTGF5ZXJQcm9wZXJ0aWVzKTsKKyAgICB0cmFuc2FjdGlvbi5zZXRDcmVhdGVkTGF5ZXJzKFdU
Rk1vdmUoY3JlYXRlZExheWVyUHJvcGVydGllcykpOworICAgIHRyYW5zYWN0aW9uLnNldERlc3Ry
b3llZExheWVySURzKFdURk1vdmUobV9kZXN0cm95ZWRMYXllcnMpKTsKKyAgICAKKyAgICBtX2Ny
ZWF0ZWRMYXllcnMuY2xlYXIoKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0Ojps
YXllclByb3BlcnR5Q2hhbmdlZFdoaWxlQnVpbGRpbmdUcmFuc2FjdGlvbihQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGUmIGxheWVyKQoreworICAgIGlmIChtX2N1cnJlbnRUcmFuc2FjdGlvbikKKyAgICAg
ICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPmxheWVyUHJvcGVydGllc0NoYW5nZWQobGF5ZXIpOwor
fQorCit2b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OndpbGxTdGFydEFuaW1hdGlvbk9uTGF5
ZXIoUGxhdGZvcm1DQUxheWVyUmVtb3RlJiBsYXllcikKK3sKKyAgICBtX2xheWVyc1dpdGhBbmlt
YXRpb25zLmFkZChsYXllci5sYXllcklEKCksICZsYXllcik7Cit9CisKK3ZvaWQgUmVtb3RlTGF5
ZXJUcmVlQ29udGV4dDo6YW5pbWF0aW9uRGlkU3RhcnQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6
UGxhdGZvcm1MYXllcklEIGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUgc3RhcnRU
aW1lKQoreworICAgIGF1dG8gaXQgPSBtX2xheWVyc1dpdGhBbmltYXRpb25zLmZpbmQobGF5ZXJJ
RCk7CisgICAgaWYgKGl0ICE9IG1fbGF5ZXJzV2l0aEFuaW1hdGlvbnMuZW5kKCkpCisgICAgICAg
IGl0LT52YWx1ZS0+YW5pbWF0aW9uU3RhcnRlZChrZXksIHN0YXJ0VGltZSk7Cit9CisKK3ZvaWQg
UmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6YW5pbWF0aW9uRGlkRW5kKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAg
ICBhdXRvIGl0ID0gbV9sYXllcnNXaXRoQW5pbWF0aW9ucy5maW5kKGxheWVySUQpOworICAgIGlm
IChpdCAhPSBtX2xheWVyc1dpdGhBbmltYXRpb25zLmVuZCgpKQorICAgICAgICBpdC0+dmFsdWUt
PmFuaW1hdGlvbkVuZGVkKGtleSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvci5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZy
ZXNoTW9uaXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyYjdmNWFhMTdhMzA2MzhjMmJkMGIwODE0OGNjZmQw
N2Q4NjhkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9y
LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RV9ESVNQTEFZX01PTklUT1IpCisKKyNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheVJlZnJlc2hNb25pdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0
b3IgOiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRl
KFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCwgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWEmIGRyYXdpbmdBcmVhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCwgZHJhd2lu
Z0FyZWEpKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+UmVtb3RlTGF5ZXJUcmVlRGlzcGxh
eVJlZnJlc2hNb25pdG9yKCk7CisKKyAgICBib29sIHJlcXVlc3RSZWZyZXNoQ2FsbGJhY2soKSBv
dmVycmlkZTsKKworICAgIHZvaWQgZGlkVXBkYXRlTGF5ZXJzKCk7CisKK3ByaXZhdGU6CisgICAg
ZXhwbGljaXQgUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBs
YXRmb3JtRGlzcGxheUlELCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSYpOworCisgICAgV2Vh
a1B0cjxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYT4gbV9kcmF3aW5nQXJlYTsKK307CisKK30K
KworI2VuZGlmIC8vIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXll
clRyZWUvUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yLm1tIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURp
c3BsYXlSZWZyZXNoTW9uaXRvci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTJkNjU3MTU1OThmNzc0YWJmOWUz
NDQ5MDc1NzE2M2NjNDQ1MDgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZy
ZXNoTW9uaXRvci5tbQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUmVtb3Rl
TGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yLmgiCisKKyNpZiBVU0UoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQorCisjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitS
ZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3I6OlJlbW90ZUxheWVyVHJlZURpc3Bs
YXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIFJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhJiBkcmF3aW5nQXJlYSkKKyAgICA6IERpc3BsYXlSZWZyZXNoTW9uaXRv
cihkaXNwbGF5SUQpCisgICAgLCBtX2RyYXdpbmdBcmVhKGRyYXdpbmdBcmVhLmNyZWF0ZVdlYWtQ
dHIoKSkKK3sKK30KKworUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yOjp+UmVt
b3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yKCkKK3sKKyAgICBpZiAobV9kcmF3aW5n
QXJlYSkKKyAgICAgICAgbV9kcmF3aW5nQXJlYS0+d2lsbERlc3Ryb3lEaXNwbGF5UmVmcmVzaE1v
bml0b3IodGhpcyk7Cit9CisKK2Jvb2wgUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25p
dG9yOjpyZXF1ZXN0UmVmcmVzaENhbGxiYWNrKCkKK3sKKyAgICBpZiAoIW1fZHJhd2luZ0FyZWEg
fHwgIWlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghaXNTY2hl
ZHVsZWQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWEmPigqbV9kcmF3aW5nQXJl
YS5nZXQoKSkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKKworICAgIHNldElzQWN0
aXZlKHRydWUpOworICAgIHNldElzU2NoZWR1bGVkKHRydWUpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcjo6ZGlkVXBkYXRl
TGF5ZXJzKCkKK3sKKyAgICBzZXRJc1NjaGVkdWxlZChmYWxzZSk7CisKKyAgICBpZiAoIWlzUHJl
dmlvdXNGcmFtZURvbmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0SXNQcmV2aW91c0Zy
YW1lRG9uZShmYWxzZSk7CisgICAgaGFuZGxlRGlzcGxheVJlZnJlc2hlZE5vdGlmaWNhdGlvbk9u
TWFpblRocmVhZCh0aGlzKTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDI3NWFlMzExNWE2ZDI1MTg0
YmMyYmRkZDgyZDA0YTU1YTk5OTdiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYS5oCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkNhbGxiYWNrSUQuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXJDQVJlbW90ZS5oIgorI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPGF0b21pYz4KKyNpbmNsdWRl
IDxkaXNwYXRjaC9kaXNwYXRjaC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUGxhdGZvcm1D
QUxheWVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlTGF5ZXJUcmVl
Q29udGV4dDsKK2NsYXNzIFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcjsKKwor
Y2xhc3MgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEgOiBwdWJsaWMgRHJhd2luZ0FyZWEsIHB1
YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKKyAgICBmcmllbmQgY2xhc3MgUmVt
b3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yOworcHVibGljOgorICAgIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhKFdlYlBhZ2UmLCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzJik7CisgICAgdmlydHVhbCB+UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEoKTsKKworICAg
IHVpbnQ2NF90IG5leHRUcmFuc2FjdGlvbklEKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VHJh
bnNhY3Rpb25JRCArIDE7IH0KKyAgICB1aW50NjRfdCBsYXN0Q29tbWl0dGVkVHJhbnNhY3Rpb25J
RCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRyYW5zYWN0aW9uSUQ7IH0KKworICAgIFdlYWtQ
dHI8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBt
X3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQorCitwcml2YXRlOgorICAgIC8vIERy
YXdpbmdBcmVhCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBzY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEpIG92ZXJyaWRlOworICAgIHZvaWQgdXBk
YXRlR2VvbWV0cnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdmlld1NpemUsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIGxheWVyUG9zaXRpb24sIGJvb2wgZmx1c2hTeW5jaHJvbm91c2x5LCBjb25z
dCBXZWJDb3JlOjpNYWNoU2VuZFJpZ2h0JiBmZW5jZVBvcnQpIG92ZXJyaWRlOworCisgICAgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKikgb3ZlcnJpZGU7CisgICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgp
IG92ZXJyaWRlOworICAgIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2hJbW1lZGlh
dGVseSgpIG92ZXJyaWRlOworICAgIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVy
KFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworCisg
ICAgdm9pZCBhZGRUcmFuc2FjdGlvbkNhbGxiYWNrSUQoQ2FsbGJhY2tJRCkgb3ZlcnJpZGU7CisK
KyAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5
UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIG92ZXJyaWRlOworICAg
IHZvaWQgd2lsbERlc3Ryb3lEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yKik7CisKKyAgICBib29sIHNob3VsZFVzZVRpbGVkQmFja2luZ0ZvckZyYW1l
Vmlldyhjb25zdCBXZWJDb3JlOjpGcmFtZVZpZXcmKSBvdmVycmlkZTsKKworICAgIHZvaWQgdXBk
YXRlUHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpIG92ZXJyaWRlOworCisg
ICAgYm9vbCBzdXBwb3J0c0FzeW5jU2Nyb2xsaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgdm9pZCBzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wpIG92ZXJyaWRlOwor
CisgICAgdm9pZCBmb3JjZVJlcGFpbnQoKSBvdmVycmlkZTsKKyAgICBib29sIGZvcmNlUmVwYWlu
dEFzeW5jKENhbGxiYWNrSUQpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lk
IHNldFZpZXdFeHBvc2VkUmVjdChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UmVjdD4pIG92
ZXJyaWRlOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRSZWN0PiB2aWV3RXhwb3Nl
ZFJlY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Njcm9sbGVkVmlld0V4cG9zZWRSZWN0
OyB9CisKKyAgICB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkU3RhcnQodWludDY0X3QgbGF5
ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSBzdGFydFRpbWUpIG92ZXJyaWRlOworICAg
IHZvaWQgYWNjZWxlcmF0ZWRBbmltYXRpb25EaWRFbmQodWludDY0X3QgbGF5ZXJJRCwgY29uc3Qg
U3RyaW5nJiBrZXkpIG92ZXJyaWRlOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdlYkNvcmU6
OkZsb2F0UmVjdCBleHBvc2VkQ29udGVudFJlY3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IHNldEV4cG9zZWRDb250ZW50UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlk
ZTsKKyNlbmRpZgorCisgICAgdm9pZCBkaWRVcGRhdGUoKSBvdmVycmlkZTsKKworI2lmIFBMQVRG
T1JNKElPUykKKyAgICB2b2lkIHNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsK
KyNlbmRpZgorCisgICAgdm9pZCBtYWluRnJhbWVDb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpIG92ZXJyaWRlOworCisgICAgdm9pZCBhY3Rpdml0eVN0YXRlRGlkQ2hh
bmdlKFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OkZsYWdzIGNoYW5nZWQsIGJvb2wgd2FudHNEaWRV
cGRhdGVBY3Rpdml0eVN0YXRlLCBjb25zdCBWZWN0b3I8Q2FsbGJhY2tJRD4mIGNhbGxiYWNrSURz
KSBvdmVycmlkZTsKKworICAgIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29y
ZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSBvdmVycmlkZTsKKworICAgIGJvb2wg
ZGlzcGF0Y2hEaWRSZWFjaExheW91dE1pbGVzdG9uZShXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmVz
KSBvdmVycmlkZTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVjdCgpOworICAg
IHZvaWQgdXBkYXRlUm9vdExheWVycygpOworCisgICAgdm9pZCBmbHVzaExheWVycygpOworCisg
ICAgV2ViQ29yZTo6VGlsZWRCYWNraW5nKiBtYWluRnJhbWVUaWxlZEJhY2tpbmcoKSBjb25zdDsK
KworICAgIHVpbnQ2NF90IHRha2VOZXh0VHJhbnNhY3Rpb25JRCgpIHsgcmV0dXJuICsrbV9jdXJy
ZW50VHJhbnNhY3Rpb25JRDsgfQorCisgICAgYm9vbCBtYXJrTGF5ZXJzVm9sYXRpbGVJbW1lZGlh
dGVseUlmUG9zc2libGUoKSBvdmVycmlkZTsKKworICAgIGNsYXNzIEJhY2tpbmdTdG9yZUZsdXNo
ZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmFja2luZ1N0b3JlRmx1c2hlcj4gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZjxCYWNraW5nU3RvcmVGbHVzaGVyPiBjcmVh
dGUoSVBDOjpDb25uZWN0aW9uKiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4sIFZlY3Rv
cjxSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPj4pOworCisgICAgICAgIHZvaWQgZmx1c2goKTsKKyAg
ICAgICAgYm9vbCBoYXNGbHVzaGVkKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGbHVzaGVkOyB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBCYWNraW5nU3RvcmVGbHVzaGVyKElQQzo6Q29ubmVjdGlv
biosIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+LCBWZWN0b3I8UmV0YWluUHRyPENHQ29u
dGV4dFJlZj4+KTsKKworICAgICAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rp
b247CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+IG1fY29tbWl0RW5jb2Rl
cjsKKyAgICAgICAgVmVjdG9yPFJldGFpblB0cjxDR0NvbnRleHRSZWY+PiBtX2NvbnRleHRzVG9G
bHVzaDsKKworICAgICAgICBzdGQ6OmF0b21pYzxib29sPiBtX2hhc0ZsdXNoZWQ7CisgICAgfTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVMYXllclRyZWVDb250ZXh0PiBtX3JlbW90ZUxh
eWVyVHJlZUNvbnRleHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI+IG1fcm9vdExheWVyOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3ZpZXdTaXplOworCisg
ICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFJlY3Q+IG1fdmlld0V4cG9zZWRSZWN0Owor
ICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRSZWN0PiBtX3Njcm9sbGVkVmlld0V4cG9z
ZWRSZWN0OworCisgICAgV2ViQ29yZTo6VGltZXIgbV9sYXllckZsdXNoVGltZXI7CisgICAgYm9v
bCBtX2lzRmx1c2hpbmdTdXNwZW5kZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNEZWZlcnJl
ZEZsdXNoIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1faXNMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlz
YWJsZWRGb3JJbnRlcmFjdGlvbiB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzSW5pdGlhbFRocm90
dGxlZExheWVyRmx1c2ggeyBmYWxzZSB9OworCisgICAgYm9vbCBtX3dhaXRpbmdGb3JCYWNraW5n
U3RvcmVTd2FwIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFkRmx1c2hEZWZlcnJlZFdoaWxlV2Fp
dGluZ0ZvckJhY2tpbmdTdG9yZVN3YXAgeyBmYWxzZSB9OworICAgIGJvb2wgbV9uZXh0Rmx1c2hJ
c0ZvckltbWVkaWF0ZVBhaW50IHsgZmFsc2UgfTsKKworICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9j
b21taXRRdWV1ZTsKKyAgICBSZWZQdHI8QmFja2luZ1N0b3JlRmx1c2hlcj4gbV9wZW5kaW5nQmFj
a2luZ1N0b3JlRmx1c2hlcjsKKworICAgIEhhc2hTZXQ8UmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJl
ZnJlc2hNb25pdG9yKj4gbV9kaXNwbGF5UmVmcmVzaE1vbml0b3JzOworICAgIEhhc2hTZXQ8UmVt
b3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yKj4qIG1fZGlzcGxheVJlZnJlc2hNb25p
dG9yc1RvTm90aWZ5IHsgbnVsbHB0ciB9OworCisgICAgdWludDY0X3QgbV9jdXJyZW50VHJhbnNh
Y3Rpb25JRCB7IDAgfTsKKyAgICBWZWN0b3I8UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlRy
YW5zYWN0aW9uQ2FsbGJhY2tJRD4gbV9wZW5kaW5nQ2FsbGJhY2tJRHM7CisKKyAgICBXZWJDb3Jl
OjpMYXlvdXRNaWxlc3RvbmVzIG1fcGVuZGluZ05ld2x5UmVhY2hlZExheW91dE1pbGVzdG9uZXMg
eyAwIH07CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX2NvbnRlbnRMYXllciB7IG51
bGxwdHIgfTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3ZpZXdPdmVybGF5Um9vdExh
eWVyIHsgbnVsbHB0ciB9OworICAgIAorICAgIFdlYWtQdHJGYWN0b3J5PFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhPiBtX3dlYWtQdHJGYWN0b3J5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRFJBV0lOR19BUkVBKFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhLCBEcmF3aW5nQXJlYVR5cGVSZW1vdGVMYXllclRyZWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjE0NmZhMGYwYjg2NjVjOWQyNDA2MDhkZWQ3MWVjYjgzNTYzYTE2MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQpAQCAtMCwwICsxLDUxNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYS5oIgorCisjaW1wb3J0ICJEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCIKKyNpbXBv
cnQgIkdyYXBoaWNzTGF5ZXJDQVJlbW90ZS5oIgorI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyUmVt
b3RlLmgiCisjaW1wb3J0ICJSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaCIKKyNp
bXBvcnQgIlJlbW90ZUxheWVyVHJlZUNvbnRleHQuaCIKKyNpbXBvcnQgIlJlbW90ZUxheWVyVHJl
ZURpc3BsYXlSZWZyZXNoTW9uaXRvci5oIgorI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
ci5oIgorI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oIgor
I2ltcG9ydCAiV2ViUGFnZS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgorI2ltcG9ydCA8UXVh
cnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RlYnVnUGFnZU92ZXJsYXlz
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmll
dy5oPgorI2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL01haW5GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvVGlsZWRCYWNraW5nLmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1
YXJ0ekNvcmVTUEkuaD4KKyNpbXBvcnQgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKFdlYlBhZ2UmIHdlYlBhZ2Us
IGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKQorICAgIDogRHJhd2luZ0FyZWEoRHJh
d2luZ0FyZWFUeXBlUmVtb3RlTGF5ZXJUcmVlLCB3ZWJQYWdlKQorICAgICwgbV9yZW1vdGVMYXll
clRyZWVDb250ZXh0KHN0ZDo6bWFrZV91bmlxdWU8UmVtb3RlTGF5ZXJUcmVlQ29udGV4dD4od2Vi
UGFnZSkpCisgICAgLCBtX3Jvb3RMYXllcihHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NM
YXllckZhY3RvcnkoKSwgKnRoaXMpKQorICAgICwgbV9sYXllckZsdXNoVGltZXIoKnRoaXMsICZS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMpCisgICAgLCBtX3dlYWtQdHJG
YWN0b3J5KHRoaXMpCit7CisgICAgd2ViUGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLnNldEZv
cmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB3ZWJQYWdl
LmNvcmVQYWdlKCktPnNldHRpbmdzKCkuc2V0RGVsZWdhdGVzUGFnZVNjYWxpbmcodHJ1ZSk7Cisj
ZW5kaWYKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiZHJhd2luZyBhcmVhIHJvb3QiKTsKKwor
ICAgIG1fY29tbWl0UXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoImNvbS5hcHBsZS5XZWJL
aXQuV2ViQ29udGVudC5SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5Db21taXRRdWV1ZSIsIG51
bGxwdHIpOworCisgICAgLy8gSW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgd2UgZ2V0IGEgdW5pcXVl
IERpc3BsYXlSZWZyZXNoTW9uaXRvciBwZXItRHJhd2luZ0FyZWEgKG5lY2Vzc2FyeSBiZWNhdXNl
IERpc3BsYXlSZWZyZXNoTW9uaXRvcgorICAgIC8vIGlzIGRyaXZlbiBieSB0aGlzIGNsYXNzKSwg
Z2l2ZSBlYWNoIHBhZ2UgYSB1bmlxdWUgRGlzcGxheUlEIGRlcml2ZWQgZnJvbSBXZWJQYWdlJ3Mg
dW5pcXVlIElELgorICAgIC8vIEZJWE1FOiBXaGlsZSB1c2luZyB0aGUgaGlnaCBlbmQgb2YgdGhl
IHJhbmdlIG9mIERpc3BsYXlJRHMgbWFrZXMgYSBjb2xsaXNpb24gd2l0aCByZWFsLCBub24tUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEKKyAgICAvLyBEaXNwbGF5SURzIGxlc3MgbGlrZWx5LCBp
dCBpcyBub3QgZW50aXJlbHkgc2FmZSB0byBoYXZlIGEgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWEgYW5kIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhCisgICAgLy8gY29lZXhpc3QgaW4g
dGhlIHNhbWUgcHJvY2Vzcy4KKyAgICB3ZWJQYWdlLndpbmRvd1NjcmVlbkRpZENoYW5nZShzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkgLSB3ZWJQYWdlLnBhZ2VJRCgpKTsKK30K
KworUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6On5SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YSgpCit7CisgICAgZGlzcGF0Y2hfcmVsZWFzZShtX2NvbW1pdFF1ZXVlKTsKK30KKwordm9pZCBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKK30KKwordm9p
ZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IEludFJlY3QmKQoreworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzY3Jv
bGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEp
Cit7Cit9CisKK0dyYXBoaWNzTGF5ZXJGYWN0b3J5KiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YTo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQoreworICAgIHJldHVybiBtX3JlbW90ZUxheWVyVHJl
ZUNvbnRleHQuZ2V0KCk7Cit9CisKK1JlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZv
cm1EaXNwbGF5SUQgZGlzcGxheUlEKQoreworICAgIGF1dG8gbW9uaXRvciA9IFJlbW90ZUxheWVy
VHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcjo6Y3JlYXRlKGRpc3BsYXlJRCwgKnRoaXMpOworICAg
IG1fZGlzcGxheVJlZnJlc2hNb25pdG9ycy5hZGQobW9uaXRvci5wdHIoKSk7CisgICAgcmV0dXJu
IFdURk1vdmUobW9uaXRvcik7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6
OndpbGxEZXN0cm95RGlzcGxheVJlZnJlc2hNb25pdG9yKERpc3BsYXlSZWZyZXNoTW9uaXRvciog
bW9uaXRvcikKK3sKKyAgICBhdXRvIHJlbW90ZU1vbml0b3IgPSBzdGF0aWNfY2FzdDxSZW1vdGVM
YXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IqPihtb25pdG9yKTsKKyAgICBtX2Rpc3BsYXlS
ZWZyZXNoTW9uaXRvcnMucmVtb3ZlKHJlbW90ZU1vbml0b3IpOworCisgICAgaWYgKG1fZGlzcGxh
eVJlZnJlc2hNb25pdG9yc1RvTm90aWZ5KQorICAgICAgICBtX2Rpc3BsYXlSZWZyZXNoTW9uaXRv
cnNUb05vdGlmeS0+cmVtb3ZlKHJlbW90ZU1vbml0b3IpOworfQorCit2b2lkIFJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhOjp1cGRhdGVSb290TGF5ZXJzKCkKK3sKKyAgICBWZWN0b3I8R3JhcGhp
Y3NMYXllcio+IGNoaWxkcmVuOworICAgIGlmIChtX2NvbnRlbnRMYXllcikgeworICAgICAgICBj
aGlsZHJlbi5hcHBlbmQobV9jb250ZW50TGF5ZXIpOworICAgICAgICBpZiAobV92aWV3T3Zlcmxh
eVJvb3RMYXllcikKKyAgICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX3ZpZXdPdmVybGF5Um9v
dExheWVyKTsKKyAgICB9CisKKyAgICBtX3Jvb3RMYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4p
OworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphdHRhY2hWaWV3T3Zlcmxh
eUdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJv
b3RMYXllcikKK3sKKyAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7
CisgICAgdXBkYXRlUm9vdExheWVycygpOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiByb290TGF5ZXIp
Cit7CisgICAgbV9jb250ZW50TGF5ZXIgPSByb290TGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVy
cygpOworICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IEludFNpemUmIHZp
ZXdTaXplLCBjb25zdCBJbnRTaXplJiBsYXllclBvc2l0aW9uLCBib29sIGZsdXNoU3luY2hyb25v
dXNseSwgY29uc3QgV2ViQ29yZTo6TWFjaFNlbmRSaWdodCYpCit7CisgICAgbV92aWV3U2l6ZSA9
IHZpZXdTaXplOworICAgIG1fd2ViUGFnZS5zZXRTaXplKHZpZXdTaXplKTsKKworICAgIHNjaGVk
dWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7CisKKyAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdl
czo6RHJhd2luZ0FyZWFQcm94eTo6RGlkVXBkYXRlR2VvbWV0cnkoKSk7Cit9CisKK2Jvb2wgUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNob3VsZFVzZVRpbGVkQmFja2luZ0ZvckZyYW1lVmll
dyhjb25zdCBGcmFtZVZpZXcmIGZyYW1lVmlldykKK3sKKyAgICByZXR1cm4gZnJhbWVWaWV3LmZy
YW1lKCkuaXNNYWluRnJhbWUoKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YTo6dXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpCit7CisgICAg
U2V0dGluZ3MmIHNldHRpbmdzID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCk7CisK
KyAgICAvLyBGaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBuZWVkIHRvIGJlIGNvbXBvc2l0ZWQgYW5k
IGNyZWF0ZSBzdGFja2luZyBjb250ZXh0cworICAgIC8vIGluIG9yZGVyIHRvIGJlIHNjcm9sbGVk
IGJ5IHRoZSBTY3JvbGxpbmdDb29yZGluYXRvci4KKyAgICBzZXR0aW5ncy5zZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQodHJ1ZSk7CisKKyAgICBtX3Jvb3RM
YXllci0+c2V0U2hvd0RlYnVnQm9yZGVyKHNldHRpbmdzLnNob3dEZWJ1Z0JvcmRlcnMoKSk7CisK
KyAgICBpZiAoTWFpbkZyYW1lKiBtYWluRnJhbWUgPSBtX3dlYlBhZ2UubWFpbkZyYW1lKCkpCisg
ICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpzZXR0aW5nc0NoYW5nZWQoKm1haW5GcmFtZSk7Cit9
CisKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpz
ZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAgICBtX3dl
YlBhZ2Uuc2V0RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOworfQorI2VuZGlm
CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNldExheWVyVHJlZVN0YXRlSXNG
cm96ZW4oYm9vbCBpc0Zyb3plbikKK3sKKyAgICBpZiAobV9pc0ZsdXNoaW5nU3VzcGVuZGVkID09
IGlzRnJvemVuKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzRmx1c2hpbmdTdXNwZW5kZWQg
PSBpc0Zyb3plbjsKKworICAgIGlmICghbV9pc0ZsdXNoaW5nU3VzcGVuZGVkICYmIG1faGFzRGVm
ZXJyZWRGbHVzaCkgeworICAgICAgICBtX2hhc0RlZmVycmVkRmx1c2ggPSBmYWxzZTsKKyAgICAg
ICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmZvcmNlUmVwYWludCgpCit7CisgICAgaWYgKG1faXNG
bHVzaGluZ1N1c3BlbmRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICAgICAgaWYgKCFmcmFtZVZpZXcgfHwgIWZyYW1lVmll
dy0+dGlsZWRCYWNraW5nKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmcmFt
ZVZpZXctPnRpbGVkQmFja2luZygpLT5mb3JjZVJlcGFpbnQoKTsKKyAgICB9CisKKyAgICBmbHVz
aExheWVycygpOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphY2NlbGVy
YXRlZEFuaW1hdGlvbkRpZFN0YXJ0KHVpbnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5
LCBkb3VibGUgc3RhcnRUaW1lKQoreworICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+YW5p
bWF0aW9uRGlkU3RhcnQobGF5ZXJJRCwga2V5LCBzdGFydFRpbWUpOworfQorCit2b2lkIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1aW50NjRf
dCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICBtX3JlbW90ZUxheWVyVHJlZUNv
bnRleHQtPmFuaW1hdGlvbkRpZEVuZChsYXllcklELCBrZXkpOworfQorCit2b2lkIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhOjpzZXRWaWV3RXhwb3NlZFJlY3Qoc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpGbG9hdFJlY3Q+IHZpZXdFeHBvc2VkUmVjdCkKK3sKKyAgICBtX3ZpZXdFeHBvc2VkUmVj
dCA9IHZpZXdFeHBvc2VkUmVjdDsKKyAgICB1cGRhdGVTY3JvbGxlZEV4cG9zZWRSZWN0KCk7Cit9
CisKKyNpZiBQTEFURk9STShJT1MpCitXZWJDb3JlOjpGbG9hdFJlY3QgUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6OmV4cG9zZWRDb250ZW50UmVjdCgpIGNvbnN0Cit7CisgICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2UubWFpbkZyYW1lVmlldygpOworICAgIGlmICghZnJhbWVW
aWV3KQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICByZXR1cm4gZnJhbWVWaWV3
LT5leHBvc2VkQ29udGVudFJlY3QoKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYTo6c2V0RXhwb3NlZENvbnRlbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZXhwb3NlZENvbnRl
bnRSZWN0KQoreworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdlLm1haW5GcmFt
ZVZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChm
cmFtZVZpZXctPmV4cG9zZWRDb250ZW50UmVjdCgpID09IGV4cG9zZWRDb250ZW50UmVjdCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZnJhbWVWaWV3LT5zZXRFeHBvc2VkQ29udGVudFJlY3QoZXhw
b3NlZENvbnRlbnRSZWN0KTsKKyAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwor
fQorI2VuZGlmCisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9s
bGVkRXhwb3NlZFJlY3QoKQoreworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdl
Lm1haW5GcmFtZVZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9zY3JvbGxlZFZpZXdFeHBvc2VkUmVjdCA9IG1fdmlld0V4cG9zZWRSZWN0OworCisj
aWYgIVBMQVRGT1JNKElPUykKKyAgICBpZiAobV92aWV3RXhwb3NlZFJlY3QpIHsKKyAgICAgICAg
U2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGZyYW1lVmlldy0+c2Nyb2xsT2Zmc2V0RnJvbVBv
c2l0aW9uKGZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIG1fc2Nyb2xsZWRW
aWV3RXhwb3NlZFJlY3QudmFsdWUoKS5tb3ZlQnkoc2Nyb2xsT2Zmc2V0KTsKKyAgICB9CisjZW5k
aWYKKworICAgIGZyYW1lVmlldy0+c2V0Vmlld0V4cG9zZWRSZWN0KG1fc2Nyb2xsZWRWaWV3RXhw
b3NlZFJlY3QpOworfQorCitUaWxlZEJhY2tpbmcqIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
OjptYWluRnJhbWVUaWxlZEJhY2tpbmcoKSBjb25zdAoreworICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKTsKKyAgICByZXR1cm4gZnJhbWVWaWV3ID8g
ZnJhbWVWaWV3LT50aWxlZEJhY2tpbmcoKSA6IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWE6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoSW1tZWRpYXRl
bHkoKQoreworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQorCit2
b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJG
bHVzaCgpCit7CisgICAgaWYgKG1faXNGbHVzaGluZ1N1c3BlbmRlZCkgeworICAgICAgICBtX2lz
TGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb24gPSBm
YWxzZTsKKyAgICAgICAgbV9oYXNEZWZlcnJlZEZsdXNoID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAobV9pc0xheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlEaXNh
YmxlZEZvckludGVyYWN0aW9uKSB7CisgICAgICAgIG1faXNMYXllckZsdXNoVGhyb3R0bGluZ1Rl
bXBvcmFyaWx5RGlzYWJsZWRGb3JJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgICAgICBzY2hlZHVs
ZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaEltbWVkaWF0ZWx5KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY29uc3QgU2Vjb25kcyBpbml0aWFsRmx1c2hEZWxheSA9IDUwMF9tczsKKyAg
ICBjb25zdCBTZWNvbmRzIGZsdXNoRGVsYXkgPSAxNTAwX21zOworICAgIFNlY29uZHMgdGhyb3R0
bGVEZWxheSA9IG1faXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzID8gKG1faXNJbml0aWFsVGhyb3R0
bGVkTGF5ZXJGbHVzaCA/IGluaXRpYWxGbHVzaERlbGF5IDogZmx1c2hEZWxheSkgOiAwX3M7Cisg
ICAgbV9pc0luaXRpYWxUaHJvdHRsZWRMYXllckZsdXNoID0gZmFsc2U7CisKKyAgICBtX2xheWVy
Rmx1c2hUaW1lci5zdGFydE9uZVNob3QodGhyb3R0bGVEZWxheSk7Cit9CisKK2Jvb2wgUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKFdlYkNvcmU6
OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncyBmbGFncykKK3sKKyAgICBpZiAoZmxhZ3Mg
JiBXZWJDb3JlOjpMYXllckZsdXNoVGhyb3R0bGVTdGF0ZTo6VXNlcklzSW50ZXJhY3RpbmcpCisg
ICAgICAgIG1faXNMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlzYWJsZWRGb3JJbnRl
cmFjdGlvbiA9IHRydWU7CisKKyAgICBib29sIHdhc1Rocm90dGxpbmdMYXllckZsdXNoZXMgPSBt
X2lzVGhyb3R0bGluZ0xheWVyRmx1c2hlczsKKyAgICBtX2lzVGhyb3R0bGluZ0xheWVyRmx1c2hl
cyA9IGZsYWdzICYgV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkVuYWJsZWQ7CisK
KyAgICBpZiAoIXdhc1Rocm90dGxpbmdMYXllckZsdXNoZXMgJiYgbV9pc1Rocm90dGxpbmdMYXll
ckZsdXNoZXMpCisgICAgICAgIG1faXNJbml0aWFsVGhyb3R0bGVkTGF5ZXJGbHVzaCA9IHRydWU7
CisKKyAgICAvLyBSZS1zY2hlZHVsZSB0aGUgZmx1c2ggaWYgd2Ugc3RvcHBlZCB0aHJvdHRsaW5n
LgorICAgIGlmICh3YXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzICYmICFtX2lzVGhyb3R0bGluZ0xh
eWVyRmx1c2hlcyAmJiBtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIG1f
bGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKKyAgICAgICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVy
Rmx1c2goKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKCkKK3sKKyAgICBpZiAoIW1fcm9vdExheWVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc0ZsdXNoaW5nU3VzcGVuZGVkKSB7CisgICAg
ICAgIG1faGFzRGVmZXJyZWRGbHVzaCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV93YWl0aW5nRm9yQmFja2luZ1N0b3JlU3dhcCkgeworICAgICAgICBtX2hhZEZs
dXNoRGVmZXJyZWRXaGlsZVdhaXRpbmdGb3JCYWNraW5nU3RvcmVTd2FwID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BlbmRpbmdCYWNraW5n
U3RvcmVGbHVzaGVyIHx8IG1fcGVuZGluZ0JhY2tpbmdTdG9yZUZsdXNoZXItPmhhc0ZsdXNoZWQo
KSk7CisKKyAgICBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24mIGJhY2tpbmdTdG9y
ZUNvbGxlY3Rpb24gPSBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQtPmJhY2tpbmdTdG9yZUNvbGxl
Y3Rpb24oKTsKKyAgICBiYWNraW5nU3RvcmVDb2xsZWN0aW9uLndpbGxGbHVzaExheWVycygpOwor
CisgICAgbV93ZWJQYWdlLmxheW91dElmTmVlZGVkKCk7CisKKyAgICBGbG9hdFJlY3QgdmlzaWJs
ZVJlY3QoRmxvYXRQb2ludCgpLCBtX3ZpZXdTaXplKTsKKyAgICBpZiAobV9zY3JvbGxlZFZpZXdF
eHBvc2VkUmVjdCkKKyAgICAgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRWaWV3
RXhwb3NlZFJlY3QudmFsdWUoKSk7CisKKyAgICBSZWZQdHI8V2ViUGFnZT4gcmV0YWluZWRQYWdl
ID0gJm1fd2ViUGFnZTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBhZGRDb21taXRIYW5kbGVyOltyZXRh
aW5lZFBhZ2VdIHsKKyAgICAgICAgaWYgKFBhZ2UqIGNvcmVQYWdlID0gcmV0YWluZWRQYWdlLT5j
b3JlUGFnZSgpKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IHJldGFpbmVk
UGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgY29yZVBhZ2UtPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5kaWRDb21wb3NpdGUoKmNvcmVGcmFtZSk7CisgICAgICAgIH0KKyAgICB9IGZv
clBoYXNlOmtDQVRyYW5zYWN0aW9uUGhhc2VQb3N0Q29tbWl0XTsKKworICAgIG1fd2ViUGFnZS5t
YWluRnJhbWVWaWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygp
OworCisgICAgLy8gQmVjYXVzZSBvdXIgdmlldy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIg
aXMgbm90IGF0dGFjaGVkIHRvIHRoZSBGcmFtZVZpZXcncyBHcmFwaGljc0xheWVyIHRyZWUsIHdl
IG5lZWQgdG8gZmx1c2ggaXQgbWFudWFsbHkuCisgICAgaWYgKG1fdmlld092ZXJsYXlSb290TGF5
ZXIpCisgICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0
ZSh2aXNpYmxlUmVjdCk7CisKKyAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOworCisgICAgLy8gRklYTUU6IE1pbmltaXplIHRoZXNlIHRyYW5z
YWN0aW9ucyBpZiBub3RoaW5nIGNoYW5nZWQuCisgICAgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b24gbGF5ZXJUcmFuc2FjdGlvbjsKKyAgICBsYXllclRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9u
SUQodGFrZU5leHRUcmFuc2FjdGlvbklEKCkpOworICAgIGxheWVyVHJhbnNhY3Rpb24uc2V0Q2Fs
bGJhY2tJRHMoV1RGTW92ZShtX3BlbmRpbmdDYWxsYmFja0lEcykpOworICAgIG1fcmVtb3RlTGF5
ZXJUcmVlQ29udGV4dC0+c2V0TmV4dEZsdXNoSXNGb3JJbW1lZGlhdGVQYWludChtX25leHRGbHVz
aElzRm9ySW1tZWRpYXRlUGFpbnQpOworICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+YnVp
bGRUcmFuc2FjdGlvbihsYXllclRyYW5zYWN0aW9uLCAqZG93bmNhc3Q8R3JhcGhpY3NMYXllckNB
UmVtb3RlPigqbV9yb290TGF5ZXIpLnBsYXRmb3JtQ0FMYXllcigpKTsKKyAgICBtX3JlbW90ZUxh
eWVyVHJlZUNvbnRleHQtPnNldE5leHRGbHVzaElzRm9ySW1tZWRpYXRlUGFpbnQoZmFsc2UpOwor
ICAgIGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ud2lsbENvbW1pdExheWVyVHJlZShsYXllclRyYW5z
YWN0aW9uKTsKKyAgICBtX3dlYlBhZ2Uud2lsbENvbW1pdExheWVyVHJlZShsYXllclRyYW5zYWN0
aW9uKTsKKworICAgIGxheWVyVHJhbnNhY3Rpb24uc2V0TmV3bHlSZWFjaGVkTGF5b3V0TWlsZXN0
b25lcyhtX3BlbmRpbmdOZXdseVJlYWNoZWRMYXlvdXRNaWxlc3RvbmVzKTsKKyAgICBtX3BlbmRp
bmdOZXdseVJlYWNoZWRMYXlvdXRNaWxlc3RvbmVzID0gMDsKKworICAgIFJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24gc2Nyb2xsaW5nVHJhbnNhY3Rpb247CisjaWYgRU5BQkxF
KEFTWU5DX1NDUk9MTElORykKKyAgICBpZiAobV93ZWJQYWdlLnNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCkpCisgICAgICAgIGRvd25jYXN0PFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yPigqbV93ZWJQ
YWdlLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpLmJ1aWxkVHJhbnNhY3Rpb24oc2Nyb2xsaW5nVHJh
bnNhY3Rpb24pOworI2VuZGlmCisKKyAgICBtX25leHRGbHVzaElzRm9ySW1tZWRpYXRlUGFpbnQg
PSBmYWxzZTsKKyAgICBtX3dhaXRpbmdGb3JCYWNraW5nU3RvcmVTd2FwID0gdHJ1ZTsKKworICAg
IG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
OjpXaWxsQ29tbWl0TGF5ZXJUcmVlKGxheWVyVHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JRCgpKSk7
CisKKyAgICBNZXNzYWdlczo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6Q29tbWl0
TGF5ZXJUcmVlIG1lc3NhZ2UobGF5ZXJUcmFuc2FjdGlvbiwgc2Nyb2xsaW5nVHJhbnNhY3Rpb24p
OworICAgIGF1dG8gY29tbWl0RW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8SVBDOjpFbmNvZGVy
PihNZXNzYWdlczo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6Q29tbWl0TGF5ZXJU
cmVlOjpyZWNlaXZlck5hbWUoKSwgTWVzc2FnZXM6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHk6OkNvbW1pdExheWVyVHJlZTo6bmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCkpOworICAg
IGNvbW1pdEVuY29kZXItPmVuY29kZShtZXNzYWdlLmFyZ3VtZW50cygpKTsKKworICAgIC8vIEZJ
WE1FOiBNb3ZlIGFsbCBiYWNraW5nIHN0b3JlIGZsdXNoaW5nIG1hbmFnZW1lbnQgdG8gUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLgorICAgIGJvb2wgaGFkQW55Q2hhbmdlZEJhY2tp
bmdTdG9yZSA9IGZhbHNlOworICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPj4gY29u
dGV4dHNUb0ZsdXNoOworICAgIGZvciAoYXV0byYgbGF5ZXIgOiBsYXllclRyYW5zYWN0aW9uLmNo
YW5nZWRMYXllcnMoKSkgeworICAgICAgICBpZiAobGF5ZXItPnByb3BlcnRpZXMoKS5jaGFuZ2Vk
UHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllckNoYW5nZXM6OkJh
Y2tpbmdTdG9yZUNoYW5nZWQpIHsKKyAgICAgICAgICAgIGhhZEFueUNoYW5nZWRCYWNraW5nU3Rv
cmUgPSB0cnVlOworICAgICAgICAgICAgaWYgKGxheWVyLT5wcm9wZXJ0aWVzKCkuYmFja2luZ1N0
b3JlKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29udGV4dFBlbmRpbmdGbHVzaCA9IGxh
eWVyLT5wcm9wZXJ0aWVzKCkuYmFja2luZ1N0b3JlLT50YWtlRnJvbnRDb250ZXh0UGVuZGluZ0Zs
dXNoKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRzVG9GbHVzaC5hcHBlbmQoY29udGV4
dFBlbmRpbmdGbHVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsYXll
ci0+ZGlkQ29tbWl0KCk7CisgICAgfQorCisgICAgYmFja2luZ1N0b3JlQ29sbGVjdGlvbi5kaWRG
bHVzaExheWVycygpOworCisgICAgaWYgKGhhZEFueUNoYW5nZWRCYWNraW5nU3RvcmUpCisgICAg
ICAgIGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uc2NoZWR1bGVWb2xhdGlsaXR5VGltZXIoKTsKKwor
ICAgIFJlZlB0cjxCYWNraW5nU3RvcmVGbHVzaGVyPiBiYWNraW5nU3RvcmVGbHVzaGVyID0gQmFj
a2luZ1N0b3JlRmx1c2hlcjo6Y3JlYXRlKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCksIFdURk1vdmUoY29tbWl0RW5jb2RlciksIFdURk1vdmUoY29udGV4
dHNUb0ZsdXNoKSk7CisgICAgbV9wZW5kaW5nQmFja2luZ1N0b3JlRmx1c2hlciA9IGJhY2tpbmdT
dG9yZUZsdXNoZXI7CisKKyAgICB1aW50NjRfdCBwYWdlSUQgPSBtX3dlYlBhZ2UucGFnZUlEKCk7
CisgICAgZGlzcGF0Y2hfYXN5bmMobV9jb21taXRRdWV1ZSwgW2JhY2tpbmdTdG9yZUZsdXNoZXIs
IHBhZ2VJRF0geworICAgICAgICBiYWNraW5nU3RvcmVGbHVzaGVyLT5mbHVzaCgpOworCisgICAg
ICAgIE1vbm90b25pY1RpbWUgdGltZXN0YW1wID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwYWdlSUQsIHRp
bWVzdGFtcF0geworICAgICAgICAgICAgaWYgKFdlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS53ZWJQYWdlKHBhZ2VJRCkpCisgICAgICAgICAgICAgICAgd2ViUGFnZS0+
ZGlkRmx1c2hMYXllclRyZWVBdFRpbWUodGltZXN0YW1wKTsKKyAgICAgICAgfSk7CisgICAgfSk7
Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZSgpCit7Cisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhIGNvdW50ZWQgcmVwbGFjZW1lbnQgZm9yIHNl
dExheWVyVHJlZVN0YXRlSXNGcm96ZW4sIGJ1dAorICAgIC8vIHRoZSBjYWxsZXJzIG9mIHRoYXQg
ZnVuY3Rpb24gYXJlIG5vdCBzdHJpY3RseSBwYWlyZWQuCisKKyAgICBtX3dhaXRpbmdGb3JCYWNr
aW5nU3RvcmVTd2FwID0gZmFsc2U7CisKKyAgICBpZiAobV9oYWRGbHVzaERlZmVycmVkV2hpbGVX
YWl0aW5nRm9yQmFja2luZ1N0b3JlU3dhcCkgeworICAgICAgICBzY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJGbHVzaCgpOworICAgICAgICBtX2hhZEZsdXNoRGVmZXJyZWRXaGlsZVdhaXRpbmdGb3JC
YWNraW5nU3RvcmVTd2FwID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhpcyBlbXB0eSB0cmFu
c2FjdGlvbiBzZXJ2ZXMgdG8gdHJpZ2dlciBDQSdzIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiBJT1N1
cmZhY2VzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE2MTEwNjg3PgorICAgIFtDQVRyYW5zYWN0aW9u
IGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgSGFzaFNldDxSZW1v
dGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IqPiBtb25pdG9yc1RvTm90aWZ5ID0gbV9k
aXNwbGF5UmVmcmVzaE1vbml0b3JzOworICAgIEFTU0VSVCghbV9kaXNwbGF5UmVmcmVzaE1vbml0
b3JzVG9Ob3RpZnkpOworICAgIG1fZGlzcGxheVJlZnJlc2hNb25pdG9yc1RvTm90aWZ5ID0gJm1v
bml0b3JzVG9Ob3RpZnk7CisgICAgd2hpbGUgKCFtb25pdG9yc1RvTm90aWZ5LmlzRW1wdHkoKSkK
KyAgICAgICAgbW9uaXRvcnNUb05vdGlmeS50YWtlQW55KCktPmRpZFVwZGF0ZUxheWVycygpOwor
ICAgIG1fZGlzcGxheVJlZnJlc2hNb25pdG9yc1RvTm90aWZ5ID0gbnVsbHB0cjsKK30KKwordm9p
ZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2Vk
KGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSkKK3sKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6
ZShjb250ZW50c1NpemUpOworfQorCitib29sIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpt
YXJrTGF5ZXJzVm9sYXRpbGVJbW1lZGlhdGVseUlmUG9zc2libGUoKQoreworICAgIHJldHVybiBt
X3JlbW90ZUxheWVyVHJlZUNvbnRleHQtPmJhY2tpbmdTdG9yZUNvbGxlY3Rpb24oKS5tYXJrQWxs
QmFja2luZ1N0b3JlVm9sYXRpbGVJbW1lZGlhdGVseUlmUG9zc2libGUoKTsKK30KKworUmVmPFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpCYWNraW5nU3RvcmVGbHVzaGVyPiBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYTo6QmFja2luZ1N0b3JlRmx1c2hlcjo6Y3JlYXRlKElQQzo6Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4gZW5jb2Rlciwg
VmVjdG9yPFJldGFpblB0cjxDR0NvbnRleHRSZWY+PiBjb250ZXh0c1RvRmx1c2gpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OkJhY2tpbmdT
dG9yZUZsdXNoZXIoY29ubmVjdGlvbiwgV1RGTW92ZShlbmNvZGVyKSwgV1RGTW92ZShjb250ZXh0
c1RvRmx1c2gpKSk7Cit9CisKK1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpCYWNraW5nU3Rv
cmVGbHVzaGVyOjpCYWNraW5nU3RvcmVGbHVzaGVyKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlv
biwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4gZW5jb2RlciwgVmVjdG9yPFJldGFpblB0
cjxDR0NvbnRleHRSZWY+PiBjb250ZXh0c1RvRmx1c2gpCisgICAgOiBtX2Nvbm5lY3Rpb24oY29u
bmVjdGlvbikKKyAgICAsIG1fY29tbWl0RW5jb2RlcihXVEZNb3ZlKGVuY29kZXIpKQorICAgICwg
bV9jb250ZXh0c1RvRmx1c2goV1RGTW92ZShjb250ZXh0c1RvRmx1c2gpKQorICAgICwgbV9oYXNG
bHVzaGVkKGZhbHNlKQoreworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpC
YWNraW5nU3RvcmVGbHVzaGVyOjpmbHVzaCgpCit7CisgICAgQVNTRVJUKCFtX2hhc0ZsdXNoZWQp
OworCisgICAgVHJhY2VTY29wZSB0cmFjaW5nU2NvcGUoQmFja2luZ1N0b3JlRmx1c2hTdGFydCwg
QmFja2luZ1N0b3JlRmx1c2hFbmQpOworICAgIAorICAgIGZvciAoYXV0byYgY29udGV4dCA6IG1f
Y29udGV4dHNUb0ZsdXNoKQorICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0LmdldCgpKTsK
KyAgICBtX2hhc0ZsdXNoZWQgPSB0cnVlOworCisgICAgbV9jb25uZWN0aW9uLT5zZW5kTWVzc2Fn
ZShXVEZNb3ZlKG1fY29tbWl0RW5jb2RlciksIHsgfSk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWE6OmFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UoQWN0aXZpdHlTdGF0ZTo6Rmxh
Z3MsIGJvb2wgd2FudHNEaWRVcGRhdGVBY3Rpdml0eVN0YXRlLCBjb25zdCBWZWN0b3I8Q2FsbGJh
Y2tJRD4mKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ugc3VzcGVuZCBwYWludGluZyB3aGls
ZSBub3QgdmlzaWJsZSwgbGlrZSBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYT8gUHJvYmFi
bHkuCisKKyAgICBpZiAod2FudHNEaWRVcGRhdGVBY3Rpdml0eVN0YXRlKSB7CisgICAgICAgIG1f
bmV4dEZsdXNoSXNGb3JJbW1lZGlhdGVQYWludCA9IHRydWU7CisgICAgICAgIHNjaGVkdWxlQ29t
cG9zaXRpbmdMYXllckZsdXNoSW1tZWRpYXRlbHkoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRChDYWxsYmFja0lE
IGNhbGxiYWNrSUQpCit7CisgICAgLy8gQXNzdW1lIHRoYXQgaWYgc29tZW9uZSBpcyBsaXN0ZW5p
bmcgZm9yIHRoaXMgdHJhbnNhY3Rpb24ncyBjb21wbGV0aW9uLCB0aGF0IHRoZXkgd2FudCBpdCB0
bworICAgIC8vIGJlIGEgImNvbXBsZXRlIiBwYWludCAoaW5jbHVkaW5nIGltYWdlcyB0aGF0IHdv
dWxkIG5vcm1hbGx5IGJlIGFzeW5jaHJvbm91c2x5IGRlY29kaW5nKS4KKyAgICBtX25leHRGbHVz
aElzRm9ySW1tZWRpYXRlUGFpbnQgPSB0cnVlOworCisgICAgbV9wZW5kaW5nQ2FsbGJhY2tJRHMu
YXBwZW5kKHN0YXRpY19jYXN0PFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpUcmFuc2FjdGlv
bkNhbGxiYWNrSUQ+KGNhbGxiYWNrSUQpKTsKKyAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJG
bHVzaCgpOworfQorCitib29sIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpkaXNwYXRjaERp
ZFJlYWNoTGF5b3V0TWlsZXN0b25lKFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZXMgbGF5b3V0TWls
ZXN0b25lcykKK3sKKyAgICBtX3BlbmRpbmdOZXdseVJlYWNoZWRMYXlvdXRNaWxlc3RvbmVzIHw9
IGxheW91dE1pbGVzdG9uZXM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jZjVkY2VkM2I0Yzc0MmJiMDkzNmNmM2U4ZTNiZWM0M2QyZDIw
MTcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgKQEAgLTAsMCArMSw4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
cl9oCisjZGVmaW5lIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yX2gKKworI2lmIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1Njcm9sbFR5cGVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdDb25zdHJhaW50cy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBE
ZWNvZGVyOworY2xhc3MgRW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYlBhZ2U7CitjbGFzcyBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uOwor
CitjbGFzcyBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpBc3lu
Y1Njcm9sbGluZ0Nvb3JkaW5hdG9yLCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I+IGNyZWF0ZShX
ZWJQYWdlKiBwYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkpOworICAgIH0KKworICAgIHZvaWQgYnVpbGRUcmFu
c2FjdGlvbihSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uJik7CisKK3ByaXZh
dGU6CisgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IoV2ViUGFnZSopOworICAgIHZpcnR1
YWwgflJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisKKyAgICBib29sIGlzUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAg
CisgICAgLy8gU2Nyb2xsaW5nQ29vcmRpbmF0b3IKKyAgICBib29sIGNvb3JkaW5hdGVzU2Nyb2xs
aW5nRm9yRnJhbWVWaWV3KGNvbnN0IFdlYkNvcmU6OkZyYW1lVmlldyYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKSBvdmVycmlkZTsKKworICAgIGJv
b2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0
U2Nyb2xsUGlubmluZ0JlaGF2aW9yKFdlYkNvcmU6OlNjcm9sbFBpbm5pbmdCZWhhdmlvcikgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgCisgICAg
Ly8gUmVzcG9uZCB0byBVSSBwcm9jZXNzIGNoYW5nZXMuCisgICAgdm9pZCBzY3JvbGxQb3NpdGlv
bkNoYW5nZWRGb3JOb2RlKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGJvb2wgc3luY0xheWVyUG9zaXRpb24pOworICAg
IHZvaWQgY3VycmVudFNuYXBQb2ludEluZGljZXNDaGFuZ2VkRm9yTm9kZShXZWJDb3JlOjpTY3Jv
bGxpbmdOb2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKTsKKwor
ICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX1NDUk9MTElOR19DT09SRElOQVRPUihXZWJLaXQ6OlJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLCBpc1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpOwor
CisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2VuZGlmIC8vIFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzA5
OGExMDk3MDIzNjdjMzgzMzcxZTg4ZTVhNzYxZDQ1ZTE5OWFkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKworbWVzc2FnZXMgLT4gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IgeworICAg
IFNjcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUodWludDY0X3Qgbm9kZUlELCBXZWJDb3JlOjpG
bG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uLCBib29sIHN5bmNMYXllclBvc2l0aW9uKTsKKyAgICBD
dXJyZW50U25hcFBvaW50SW5kaWNlc0NoYW5nZWRGb3JOb2RlKHVpbnQ2NF90IG5vZGVJRCwgdW5z
aWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQgdmVydGljYWwpOworfQorCisjZW5kaWYgLy8gRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ODY0MTUyNWU1MmI5NzlkZTQwM2E2
ZTZhNzEwMmNkM2EyNWQzMjUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
Lm1tCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisKKyNpZiBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQorCisjaW1wb3J0ICJBcmd1bWVudENvZGVycy5oIgorI2ltcG9ydCAi
R3JhcGhpY3NMYXllckNBUmVtb3RlLmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYS5oIgorI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oIgor
I2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oIgorI2ltcG9y
dCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0ICJXZWJQYWdlLmgiCisjaW1wb3J0
ICJXZWJQcm9jZXNzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1JlbmRlckxheWVyQ29tcG9zaXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9S
ZW5kZXJWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvcjo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IoV2ViUGFnZSogcGFnZSkKKyAg
ICA6IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAsIG1f
d2ViUGFnZShwYWdlKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV93ZWJQYWdlLT5wYWdlSUQoKSwgKnRoaXMpOworfQorCitSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvcjo6flJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkKK3sKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFn
ZS0+cGFnZUlEKCkpOworfQorCit2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY2hl
ZHVsZVRyZWVTdGF0ZUNvbW1pdCgpCit7CisgICAgbV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpLT5z
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworfQorCitib29sIFJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhjb25zdCBGcmFt
ZVZpZXcmIGZyYW1lVmlldykgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0g
ZnJhbWVWaWV3LnJlbmRlclZpZXcoKTsKKyAgICByZXR1cm4gcmVuZGVyVmlldyAmJiByZW5kZXJW
aWV3LT51c2VzQ29tcG9zaXRpbmcoKTsKK30KKworYm9vbCBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IG5l
ZWQgdG8gbWFpbnRhaW4gc3RhdGUgaW4gdGhlIHdlYiBwcm9jZXNzPworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcjo6aXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gbWFpbnRhaW4gc3RhdGUg
aW4gdGhlIHdlYiBwcm9jZXNzPworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKFNjcm9sbFBpbm5p
bmdCZWhhdmlvcikKK3sKKyAgICAvLyBGSVhNRTogc2VuZCB0byB0aGUgVUkgcHJvY2Vzcy4KK30K
Kwordm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcjo6YnVpbGRUcmFuc2FjdGlvbihSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICB3
aWxsQ29tbWl0VHJlZSgpOworICAgIHRyYW5zYWN0aW9uLnNldFN0YXRlVHJlZVRvRW5jb2RlKHNj
cm9sbGluZ1N0YXRlVHJlZSgpLT5jb21taXQoTGF5ZXJSZXByZXNlbnRhdGlvbjo6UGxhdGZvcm1M
YXllcklEUmVwcmVzZW50YXRpb24pKTsKK30KKworLy8gTm90aWZpY2F0aW9uIGZyb20gdGhlIFVJ
IHByb2Nlc3MgdGhhdCB3ZSBzY3JvbGxlZC4KK3ZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwg
Y29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGJvb2wgc3luY0xheWVyUG9zaXRpb24p
Cit7CisgICAgc2NoZWR1bGVVcGRhdGVTY3JvbGxQb3NpdGlvbkFmdGVyQXN5bmNTY3JvbGwobm9k
ZUlELCBzY3JvbGxQb3NpdGlvbiwgc3RkOjpudWxsb3B0LCBmYWxzZSAvKiBGSVhNRSAqLywgc3lu
Y0xheWVyUG9zaXRpb24gPyBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTeW5jIDogU2Ny
b2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U2V0KTsKK30KKwordm9pZCBSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvcjo6Y3VycmVudFNuYXBQb2ludEluZGljZXNDaGFuZ2VkRm9yTm9kZShTY3Jv
bGxpbmdOb2RlSUQgbm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNh
bCkKK3sKKyAgICBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlcyhub2RlSUQsIGhvcml6b250YWws
IHZlcnRpY2FsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL0dyYXBoaWNzTGF5ZXJDQVJlbW90ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMmRmNDJlOTQ3MzBmMTYzODNmOWI1YTczMmU4Mjk2Y2I1YzFh
MjVmMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvR3JhcGhpY3NMYXllckNBUmVtb3RlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NMYXllckNBUmVtb3RlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllclJlbW90ZS5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1TY3JlZW4uaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1HcmFwaGljc0xheWVyQ0FSZW1vdGU6On5HcmFwaGljc0xheWVyQ0FS
ZW1vdGUoKQotewotfQotCi1ib29sIEdyYXBoaWNzTGF5ZXJDQVJlbW90ZTo6ZmlsdGVyc0NhbkJl
Q29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIHJldHVy
biBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoZmlsdGVycyk7
Ci19Ci0KLVJlZjxQbGF0Zm9ybUNBTGF5ZXI+IEdyYXBoaWNzTGF5ZXJDQVJlbW90ZTo6Y3JlYXRl
UGxhdGZvcm1DQUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKLXsKLSAgICBhdXRvIHJlc3VsdCA9IFBsYXRmb3Jt
Q0FMYXllclJlbW90ZTo6Y3JlYXRlKGxheWVyVHlwZSwgb3duZXIsIG1fY29udGV4dCk7Ci0KLSAg
ICBpZiAocmVzdWx0LT5jYW5IYXZlQmFja2luZ1N0b3JlKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0
V2FudHNEZWVwQ29sb3JCYWNraW5nU3RvcmUoc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKCkp
OwotCi0gICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKLX0KLQotUmVmPFBsYXRmb3JtQ0FMYXll
cj4gR3JhcGhpY3NMYXllckNBUmVtb3RlOjpjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKLXsKLSAg
ICByZXR1cm4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUocGxhdGZvcm1MYXllciwgb3du
ZXIsIG1fY29udGV4dCk7Ci19Ci0KLVJlZjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBHcmFwaGljc0xh
eWVyQ0FSZW1vdGU6OmNyZWF0ZVBsYXRmb3JtQ0FBbmltYXRpb24oUGxhdGZvcm1DQUFuaW1hdGlv
bjo6QW5pbWF0aW9uVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCi17Ci0gICAgcmV0
dXJuIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OmNyZWF0ZSh0eXBlLCBrZXlQYXRoKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvR3JhcGhpY3NMYXllckNBUmVtb3RlLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvR3JhcGhpY3NMYXllckNBUmVtb3RlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YTkyNTdhNjlhYjJhZWZkMWVhODZkMGM4YmM1NmM4NTY3
OGE3NmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0dyYXBoaWNzTGF5ZXJDQVJlbW90ZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyQ0EuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ7Ci0KLWNs
YXNzIEdyYXBoaWNzTGF5ZXJDQVJlbW90ZSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ0EgewotcHVibGljOgotICAgIEdyYXBoaWNzTGF5ZXJDQVJlbW90ZShUeXBlIGxheWVy
VHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCYgY2xpZW50LCBSZW1vdGVMYXllclRy
ZWVDb250ZXh0JiBjb250ZXh0KQotICAgICAgICA6IEdyYXBoaWNzTGF5ZXJDQShsYXllclR5cGUs
IGNsaWVudCkKLSAgICAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB+R3JhcGhpY3NMYXllckNBUmVtb3RlKCk7Ci0KLSAgICBib29sIGZpbHRlcnND
YW5CZUNvbXBvc2l0ZWQoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykg
b3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc0dyYXBoaWNzTGF5ZXJDQVJlbW90ZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFJlZjxXZWJDb3JlOjpQbGF0
Zm9ybUNBTGF5ZXI+IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgb3Zl
cnJpZGU7Ci0gICAgUmVmPFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlUGxhdGZvcm1D
QUxheWVyKFBsYXRmb3JtTGF5ZXIqLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93
bmVyKSBvdmVycmlkZTsKLSAgICBSZWY8V2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbj4gY3Jl
YXRlUGxhdGZvcm1DQUFuaW1hdGlvbihXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmlt
YXRpb25UeXBlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpIG92ZXJyaWRlOwotCi0gICAgLy8gUGxh
dGZvcm1DQUxheWVyUmVtb3RlIGNhbid0IGN1cnJlbnRseSBwcm94eSBkaXJlY3RseSBjb21wb3Np
dGVkIGltYWdlIGNvbnRlbnRzLCBzbyBvcHQgb3V0IG9mIHRoaXMgb3B0aW1pemF0aW9uLgotICAg
IGJvb2wgc2hvdWxkRGlyZWN0bHlDb21wb3NpdGVJbWFnZShXZWJDb3JlOjpJbWFnZSopIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgUmVtb3RlTGF5ZXJUcmVlQ29u
dGV4dCYgbV9jb250ZXh0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfR1JBUEhJQ1NMQVlFUihXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJDQVJlbW90
ZSwgaXNHcmFwaGljc0xheWVyQ0FSZW1vdGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmQ2OGRlODUyNDFhMzJlNTgyMWQ4
ZTdmM2JjZDBkZTczNWE4NzlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNB
QW5pbWF0aW9uUmVtb3RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGxhdGZvcm1D
QUFuaW1hdGlvblJlbW90ZV9oCi0jZGVmaW5lIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGVfaAot
Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3BhY2UgSVBDIHsK
LWNsYXNzIEVuY29kZXI7Ci1jbGFzcyBEZWNvZGVyOwotfTsKLQotbmFtZXNwYWNlIFdURiB7Ci1j
bGFzcyBUZXh0U3RyZWFtOwotfTsKLQotT0JKQ19DTEFTUyBDQUxheWVyOwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgUmVtb3RlTGF5ZXJUcmVlSG9zdDsKLQotY2xhc3MgUGxhdGZvcm1D
QUFuaW1hdGlvblJlbW90ZSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0
aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFBsYXRmb3JtQ0FBbmltYXRpb24+IGNyZWF0
ZShBbmltYXRpb25UeXBlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpOwotCi0gICAgdmlydHVhbCB+
UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZSgpIHsgfQotCi0gICAgYm9vbCBpc1BsYXRmb3JtQ0FB
bmltYXRpb25SZW1vdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBS
ZWY8UGxhdGZvcm1DQUFuaW1hdGlvbj4gY29weSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgU3Ry
aW5nIGtleVBhdGgoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIENGVGltZUludGVydmFsIGJlZ2lu
VGltZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QmVnaW5UaW1lKENGVGltZUludGVy
dmFsKSBvdmVycmlkZTsKLQotICAgIENGVGltZUludGVydmFsIGR1cmF0aW9uKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzZXREdXJhdGlvbihDRlRpbWVJbnRlcnZhbCkgb3ZlcnJpZGU7Ci0K
LSAgICBmbG9hdCBzcGVlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U3BlZWQoZmxv
YXQpIG92ZXJyaWRlOwotCi0gICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZU9mZnNldCgpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0VGltZU9mZnNldChDRlRpbWVJbnRlcnZhbCkgb3ZlcnJpZGU7
Ci0KLSAgICBmbG9hdCByZXBlYXRDb3VudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
UmVwZWF0Q291bnQoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBhdXRvcmV2ZXJzZXMoKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNldEF1dG9yZXZlcnNlcyhib29sKSBvdmVycmlkZTsK
LQotICAgIEZpbGxNb2RlVHlwZSBmaWxsTW9kZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQg
c2V0RmlsbE1vZGUoRmlsbE1vZGVUeXBlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0VGltaW5n
RnVuY3Rpb24oY29uc3QgV2ViQ29yZTo6VGltaW5nRnVuY3Rpb24qLCBib29sIHJldmVyc2UgPSBm
YWxzZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb3B5VGltaW5nRnVuY3Rpb25Gcm9tKGNvbnN0IFdl
YkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVycmlkZTsKLQotICAgIGJvb2wgaXNSZW1v
dmVkT25Db21wbGV0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSZW1vdmVkT25D
b21wbGV0aW9uKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc0FkZGl0aXZlKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRBZGRpdGl2ZShib29sKSBvdmVycmlkZTsKLQotICAgIFZh
bHVlRnVuY3Rpb25UeXBlIHZhbHVlRnVuY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFZhbHVlRnVuY3Rpb24oVmFsdWVGdW5jdGlvblR5cGUpIG92ZXJyaWRlOwotCi0gICAgLy8g
QmFzaWMtYW5pbWF0aW9uIHByb3BlcnRpZXMuCi0gICAgdm9pZCBzZXRGcm9tVmFsdWUoZmxvYXQp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRGcm9tVmFsdWUoY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludDNEJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRGcm9tVmFsdWUoY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEZyb21WYWx1ZShjb25z
dCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb24qLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUlu
ZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGNvcHlGcm9tVmFsdWVGcm9tKGNvbnN0IFdlYkNvcmU6
OlBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0VG9WYWx1ZShm
bG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRUb1ZhbHVlKGNvbnN0IFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRUb1ZhbHVlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQzRCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VG9WYWx1ZShjb25z
dCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VG9WYWx1ZShjb25zdCBX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb24qLCBpbnQgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNvcHlUb1ZhbHVlRnJvbShjb25zdCBXZWJDb3JlOjpQbGF0
Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBLZXlmcmFtZS1hbmltYXRpb24g
cHJvcGVydGllcy4KLSAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpGbG9hdFBvaW50M0Q+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWYWx1ZXMo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbG9yPiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmFs
dWVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uPj4mLCBpbnQg
aW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGNvcHlWYWx1
ZXNGcm9tKGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgc2V0S2V5VGltZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgY29weUtleVRpbWVzRnJvbShjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9u
Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldFRpbWluZ0Z1bmN0aW9ucyhjb25zdCBWZWN0b3I8
Y29uc3QgV2ViQ29yZTo6VGltaW5nRnVuY3Rpb24qPiYsIGJvb2wgcmV2ZXJzZSA9IGZhbHNlKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKGNvbnN0IFdlYkNvcmU6
OlBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVycmlkZTsKLQotICAgIEFuaW1hdGlvblR5cGUgYW5p
bWF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5hbmltYXRpb25UeXBlOyB9
Ci0gICAgdm9pZCBzZXRIYXNFeHBsaWNpdEJlZ2luVGltZShib29sIGhhc0V4cGxpY2l0QmVnaW5U
aW1lKSB7IG1fcHJvcGVydGllcy5oYXNFeHBsaWNpdEJlZ2luVGltZSA9IGhhc0V4cGxpY2l0QmVn
aW5UaW1lOyB9Ci0gICAgYm9vbCBoYXNFeHBsaWNpdEJlZ2luVGltZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvcGVydGllcy5oYXNFeHBsaWNpdEJlZ2luVGltZTsgfQotCi0gICAgdm9pZCBkaWRTdGFy
dChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpIHsgbV9wcm9wZXJ0aWVzLmJlZ2luVGltZSA9IGJl
Z2luVGltZTsgfQotCi0gICAgY2xhc3MgS2V5ZnJhbWVWYWx1ZSB7Ci0gICAgcHVibGljOgotICAg
ICAgICBlbnVtIEtleWZyYW1lVHlwZSB7Ci0gICAgICAgICAgICBOdW1iZXJLZXlUeXBlLAotICAg
ICAgICAgICAgQ29sb3JLZXlUeXBlLAotICAgICAgICAgICAgUG9pbnRLZXlUeXBlLAotICAgICAg
ICAgICAgVHJhbnNmb3JtS2V5VHlwZSwKLSAgICAgICAgICAgIEZpbHRlcktleVR5cGUsCi0gICAg
ICAgIH07Ci0KLSAgICAgICAgfktleWZyYW1lVmFsdWUoKQotICAgICAgICB7Ci0gICAgICAgIH0K
LQotICAgICAgICBLZXlmcmFtZVZhbHVlKGZsb2F0IHZhbHVlID0gMCkKLSAgICAgICAgICAgIDog
a2V5VHlwZShOdW1iZXJLZXlUeXBlKQotICAgICAgICAgICAgLCBudW1iZXIodmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIEtleWZyYW1lVmFsdWUoV2ViQ29yZTo6Q29sb3Ig
dmFsdWUpCi0gICAgICAgICAgICA6IGtleVR5cGUoQ29sb3JLZXlUeXBlKQotICAgICAgICAgICAg
LCBjb2xvcih2YWx1ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgS2V5ZnJhbWVW
YWx1ZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmIHZhbHVlKQotICAgICAgICAgICAgOiBr
ZXlUeXBlKFBvaW50S2V5VHlwZSkKLSAgICAgICAgICAgICwgcG9pbnQodmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIEtleWZyYW1lVmFsdWUoY29uc3QgV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQotICAgICAgICAgICAgOiBrZXlUeXBlKFRyYW5zZm9y
bUtleVR5cGUpCi0gICAgICAgICAgICAsIHRyYW5zZm9ybSh2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgS2V5ZnJhbWVWYWx1ZShSZWZQdHI8V2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9uPiYmIHZhbHVlKQotICAgICAgICAgICAgOiBrZXlUeXBlKEZpbHRlcktleVR5cGUpCi0g
ICAgICAgICAgICAsIGZpbHRlcihXVEZNb3ZlKHZhbHVlKSkKLSAgICAgICAgewotICAgICAgICB9
Ci0KLSAgICAgICAgS2V5ZnJhbWVWYWx1ZShjb25zdCBLZXlmcmFtZVZhbHVlJiBvdGhlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgKnRoaXMgPSBvdGhlcjsKLSAgICAgICAgfQotCi0gICAgICAg
IEtleWZyYW1lVmFsdWUmIG9wZXJhdG9yPShjb25zdCBLZXlmcmFtZVZhbHVlJiBvdGhlcikKLSAg
ICAgICAgewotICAgICAgICAgICAga2V5VHlwZSA9IG90aGVyLmtleVR5cGU7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGtleVR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgTnVtYmVyS2V5VHlwZToKLSAg
ICAgICAgICAgICAgICBudW1iZXIgPSBvdGhlci5udW1iZXI7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIENvbG9yS2V5VHlwZToKLSAgICAgICAgICAgICAgICBjb2xv
ciA9IG90aGVyLmNvbG9yOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBQb2ludEtleVR5cGU6Ci0gICAgICAgICAgICAgICAgcG9pbnQgPSBvdGhlci5wb2ludDsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtS2V5VHlwZToK
LSAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gPSBvdGhlci50cmFuc2Zvcm07Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZpbHRlcktleVR5cGU6Ci0gICAgICAgICAg
ICAgICAgZmlsdGVyID0gb3RoZXIuZmlsdGVyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLQotICAg
ICAgICBLZXlmcmFtZVR5cGUga2V5ZnJhbWVUeXBlKCkgY29uc3QgeyByZXR1cm4ga2V5VHlwZTsg
fQotCi0gICAgICAgIGZsb2F0IG51bWJlclZhbHVlKCkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKGtleVR5cGUgPT0gTnVtYmVyS2V5VHlwZSk7Ci0gICAgICAgICAgICByZXR1
cm4gbnVtYmVyOwotICAgICAgICB9Ci0KLSAgICAgICAgV2ViQ29yZTo6Q29sb3IgY29sb3JWYWx1
ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChrZXlUeXBlID09IENvbG9y
S2V5VHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmIHBvaW50VmFsdWUoKSBjb25zdAotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoa2V5VHlwZSA9PSBQb2ludEtleVR5cGUpOwotICAgICAg
ICAgICAgcmV0dXJuIHBvaW50OwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVZhbHVlKCkgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKGtleVR5cGUgPT0gVHJhbnNmb3JtS2V5VHlwZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJhbnNmb3JtOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgV2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9uKiBmaWx0ZXJWYWx1ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVChrZXlUeXBlID09IEZpbHRlcktleVR5cGUpOwotICAgICAgICAgICAgcmV0
dXJuIGZpbHRlci5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZW5jb2RlKElQQzo6
RW5jb2RlciYpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpEZWNvZGVy
JiwgS2V5ZnJhbWVWYWx1ZSYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgS2V5ZnJhbWVUeXBl
IGtleVR5cGU7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIGZsb2F0IG51bWJlcjsKLSAg
ICAgICAgICAgIFdlYkNvcmU6OkNvbG9yIGNvbG9yOwotICAgICAgICAgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludDNEIHBvaW50OwotICAgICAgICAgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNmb3JtOwotICAgICAgICB9OwotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6RmlsdGVy
T3BlcmF0aW9uPiBmaWx0ZXI7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQcm9wZXJ0aWVzIHsKLSAg
ICAgICAgUHJvcGVydGllcygpCi0gICAgICAgICAgICA6IGFuaW1hdGlvblR5cGUoQmFzaWMpCi0g
ICAgICAgICAgICAsIGJlZ2luVGltZSgwKQotICAgICAgICAgICAgLCBkdXJhdGlvbigwKQotICAg
ICAgICAgICAgLCB0aW1lT2Zmc2V0KDApCi0gICAgICAgICAgICAsIHJlcGVhdENvdW50KDEpCi0g
ICAgICAgICAgICAsIHNwZWVkKDEpCi0gICAgICAgICAgICAsIGZpbGxNb2RlKE5vRmlsbE1vZGUp
Ci0gICAgICAgICAgICAsIHZhbHVlRnVuY3Rpb24oTm9WYWx1ZUZ1bmN0aW9uKQotICAgICAgICAg
ICAgLCBhdXRvUmV2ZXJzZXMoZmFsc2UpCi0gICAgICAgICAgICAsIHJlbW92ZWRPbkNvbXBsZXRp
b24odHJ1ZSkKLSAgICAgICAgICAgICwgYWRkaXRpdmUoZmFsc2UpCi0gICAgICAgICAgICAsIHJl
dmVyc2VUaW1pbmdGdW5jdGlvbnMoZmFsc2UpCi0gICAgICAgICAgICAsIGhhc0V4cGxpY2l0QmVn
aW5UaW1lKGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGVuY29k
ZShJUEM6OkVuY29kZXImKSBjb25zdDsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6
RGVjb2RlciYsIFByb3BlcnRpZXMmKTsKLQotICAgICAgICBTdHJpbmcga2V5UGF0aDsKLSAgICAg
ICAgUGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZSBhbmltYXRpb25UeXBlOwotCi0g
ICAgICAgIGRvdWJsZSBiZWdpblRpbWU7Ci0gICAgICAgIGRvdWJsZSBkdXJhdGlvbjsKLSAgICAg
ICAgZG91YmxlIHRpbWVPZmZzZXQ7Ci0gICAgICAgIGZsb2F0IHJlcGVhdENvdW50OwotICAgICAg
ICBmbG9hdCBzcGVlZDsKLQotICAgICAgICBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpGaWxsTW9kZVR5
cGUgZmlsbE1vZGU7Ci0gICAgICAgIFBsYXRmb3JtQ0FBbmltYXRpb246OlZhbHVlRnVuY3Rpb25U
eXBlIHZhbHVlRnVuY3Rpb247Ci0KLSAgICAgICAgYm9vbCBhdXRvUmV2ZXJzZXM7Ci0gICAgICAg
IGJvb2wgcmVtb3ZlZE9uQ29tcGxldGlvbjsKLSAgICAgICAgYm9vbCBhZGRpdGl2ZTsKLSAgICAg
ICAgYm9vbCByZXZlcnNlVGltaW5nRnVuY3Rpb25zOwotICAgICAgICBib29sIGhhc0V4cGxpY2l0
QmVnaW5UaW1lOwotCi0gICAgICAgIC8vIEZvciBiYXNpYyBhbmltYXRpb25zLCB0aGVzZSB2ZWN0
b3JzIGhhdmUgdHdvIGVudHJpZXMuIEZvciBrZXlmcmFtZSBhbmltYXRpb25zLCB0d28gb3IgbW9y
ZS4KLSAgICAgICAgLy8gdGltaW5nRnVuY3Rpb25zIGhhcyBuLTEgZW50cmllcy4KLSAgICAgICAg
VmVjdG9yPEtleWZyYW1lVmFsdWU+IGtleVZhbHVlczsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBr
ZXlUaW1lczsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbj4+
IHRpbWluZ0Z1bmN0aW9uczsKLSAgICB9OwotCi0gICAgY29uc3QgUHJvcGVydGllcyYgcHJvcGVy
dGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllczsgfQotCi0gICAgdHlwZWRlZiBWZWN0
b3I8c3RkOjpwYWlyPFN0cmluZywgUHJvcGVydGllcz4+IEFuaW1hdGlvbnNMaXN0OwotICAgIHN0
YXRpYyB2b2lkIHVwZGF0ZUxheWVyQW5pbWF0aW9ucyhDQUxheWVyICosIFJlbW90ZUxheWVyVHJl
ZUhvc3QqLCBjb25zdCBBbmltYXRpb25zTGlzdCYgYW5pbWF0aW9uc1RvQWRkLCBjb25zdCBIYXNo
U2V0PFN0cmluZz4mIGFuaW1hdGlvbnNUb1JlbW92ZSk7Ci0KLXByaXZhdGU6Ci0gICAgUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZShBbmltYXRpb25UeXBlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgp
OwotCi0gICAgUHJvcGVydGllcyBtX3Byb3BlcnRpZXM7Ci19OwotCi1XVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZTo6S2V5ZnJhbWVWYWx1ZSYpOwotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXMm
KTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FB
TklNQVRJT04oV2ViS2l0OjpQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLCBpc1BsYXRmb3JtQ0FB
bmltYXRpb25SZW1vdGUoKSkKLQotI2VuZGlmIC8vIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRm
b3JtQ0FBbmltYXRpb25SZW1vdGUubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDZlMjczYzNhNzE5ZTY5MTAwZDE1ZjVhMzFhMWEyZDQ1ZmY2ZmY0Mi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQorKysgL2Rl
di9udWxsCkBAIC0xLDkzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2ltcG9ydCAiUGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZS5oIgotCi0jaW1wb3J0ICJBcmd1bWVudENvZGVycy5oIgotI2ltcG9ydCAi
UmVtb3RlTGF5ZXJUcmVlSG9zdC5oIgotI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgi
Ci0jaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllci5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2Eu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUZpbHRlcnMuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvVGltaW5nRnVuY3Rpb24uaD4KLSNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQ
SS5oPgotI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9D
dXJyZW50VGltZS5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLXN0YXRpYyBkb3VibGUgbWVkaWFUaW1lVG9DdXJyZW50VGltZShDRlRpbWVJ
bnRlcnZhbCB0KQotewotICAgIHJldHVybiBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAr
IHQgLSBDQUN1cnJlbnRNZWRpYVRpbWUoKTsKLX0KLQotc3RhdGljIE5TU3RyaW5nICogY29uc3Qg
V0tFeHBsaWNpdEJlZ2luVGltZUZsYWcgPSBAIldLUGxhdGZvcm1DQUFuaW1hdGlvbkV4cGxpY2l0
QmVnaW5UaW1lRmxhZyI7Ci0KLUBpbnRlcmZhY2UgV0tBbmltYXRpb25EZWxlZ2F0ZSA6IE5TT2Jq
ZWN0IDxDQUFuaW1hdGlvbkRlbGVnYXRlPiB7Ci0gICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1M
YXllcklEIF9sYXllcklEOwotICAgIFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlSG9zdCogX2xheWVy
VHJlZUhvc3Q7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aExheWVySUQ6KEdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRClsYXllcklEIGxheWVyVHJlZUhvc3Q6KFdlYktpdDo6UmVt
b3RlTGF5ZXJUcmVlSG9zdCopbGF5ZXJUcmVlSG9zdDsKLS0gKHZvaWQpaW52YWxpZGF0ZTsKLUBl
bmQKLQotQGltcGxlbWVudGF0aW9uIFdLQW5pbWF0aW9uRGVsZWdhdGUKLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoTGF5ZXJJRDooR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEKWxheWVy
SUQgbGF5ZXJUcmVlSG9zdDooV2ViS2l0OjpSZW1vdGVMYXllclRyZWVIb3N0KilsYXllclRyZWVI
b3N0Ci17Ci0gICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewotICAgICAgICBfbGF5ZXJJ
RCA9IGxheWVySUQ7Ci0gICAgICAgIF9sYXllclRyZWVIb3N0ID0gbGF5ZXJUcmVlSG9zdDsKLSAg
ICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZQotewotICAgIF9s
YXllclRyZWVIb3N0ID0gbnVsbHB0cjsKLX0KLQotLSAodm9pZClhbmltYXRpb25EaWRTdGFydDoo
Q0FBbmltYXRpb24gKilhbmltYXRpb24KLXsKLSAgICBpZiAoIV9sYXllclRyZWVIb3N0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBib29sIGhhc0V4cGxpY2l0QmVnaW5UaW1lID0gW1thbmltYXRp
b24gdmFsdWVGb3JLZXk6V0tFeHBsaWNpdEJlZ2luVGltZUZsYWddIGJvb2xWYWx1ZV07Ci0gICAg
Q0ZUaW1lSW50ZXJ2YWwgc3RhcnRUaW1lOwotCi0gICAgaWYgKGhhc0V4cGxpY2l0QmVnaW5UaW1l
KSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hhdCB0aW1lIENBIHVzZWQgdG8gY29tbWl0
IHRoZSBhbmltYXRpb24sIHNvIGp1c3QgdXNlIHRoZSBjdXJyZW50IHRpbWUKLSAgICAgICAgLy8g
KGV2ZW4gdGhvdWdoIHRoaXMgd2lsbCBiZSBzbGlnaHRseSBvZmYpLgotICAgICAgICBzdGFydFRp
bWUgPSBtZWRpYVRpbWVUb0N1cnJlbnRUaW1lKENBQ3VycmVudE1lZGlhVGltZSgpKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgc3RhcnRUaW1lID0gbWVkaWFUaW1lVG9DdXJyZW50VGltZShbYW5pbWF0
aW9uIGJlZ2luVGltZV0pOwotCi0gICAgX2xheWVyVHJlZUhvc3QtPmFuaW1hdGlvbkRpZFN0YXJ0
KF9sYXllcklELCBhbmltYXRpb24sIHN0YXJ0VGltZSk7Ci19Ci0KLS0gKHZvaWQpYW5pbWF0aW9u
RGlkU3RvcDooQ0FBbmltYXRpb24gKilhbmltYXRpb24gZmluaXNoZWQ6KEJPT0wpZmluaXNoZWQK
LXsKLSAgICBpZiAoIV9sYXllclRyZWVIb3N0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBfbGF5
ZXJUcmVlSG9zdC0+YW5pbWF0aW9uRGlkRW5kKF9sYXllcklELCBhbmltYXRpb24pOwotfQotCi1A
ZW5kCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1v
dGU6OktleWZyYW1lVmFsdWU6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17
Ci0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKGtleVR5cGUpOwotCi0gICAgc3dpdGNoIChrZXlUeXBl
KSB7Ci0gICAgY2FzZSBOdW1iZXJLZXlUeXBlOgotICAgICAgICBlbmNvZGVyIDw8IG51bWJlcjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2xvcktleVR5cGU6Ci0gICAgICAgIGVuY29kZXIg
PDwgY29sb3I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUG9pbnRLZXlUeXBlOgotICAgICAg
ICBlbmNvZGVyIDw8IHBvaW50OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyYW5zZm9ybUtl
eVR5cGU6Ci0gICAgICAgIGVuY29kZXIgPDwgdHJhbnNmb3JtOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZpbHRlcktleVR5cGU6Ci0gICAgICAgIGVuY29kZXIgPDwgKmZpbHRlci5nZXQoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1ib29sIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1v
dGU6OktleWZyYW1lVmFsdWU6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWUmIHZhbHVlKQotewotICAgIGlmICghZGVj
b2Rlci5kZWNvZGVFbnVtKHZhbHVlLmtleVR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBzd2l0Y2ggKHZhbHVlLmtleVR5cGUpIHsKLSAgICBjYXNlIE51bWJlcktleVR5cGU6Ci0g
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUubnVtYmVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2xvcktleVR5cGU6Ci0gICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUuY29sb3IpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBvaW50S2V5VHlwZToKLSAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZS5wb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJhbnNmb3JtS2V5VHlwZToKLSAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZS50cmFuc2Zvcm0pKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlcktleVR5cGU6Ci0gICAgICAg
IGlmICghZGVjb2RlRmlsdGVyT3BlcmF0aW9uKGRlY29kZXIsIHZhbHVlLmZpbHRlcikpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXM6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBr
ZXlQYXRoOwotICAgIGVuY29kZXIuZW5jb2RlRW51bShhbmltYXRpb25UeXBlKTsKLQotICAgIGVu
Y29kZXIgPDwgYmVnaW5UaW1lOwotICAgIGVuY29kZXIgPDwgZHVyYXRpb247Ci0gICAgZW5jb2Rl
ciA8PCB0aW1lT2Zmc2V0OwotICAgIGVuY29kZXIgPDwgcmVwZWF0Q291bnQ7Ci0gICAgZW5jb2Rl
ciA8PCBzcGVlZDsKLQotICAgIGVuY29kZXIuZW5jb2RlRW51bShmaWxsTW9kZSk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVFbnVtKHZhbHVlRnVuY3Rpb24pOwotCi0gICAgZW5jb2RlciA8PCBhdXRvUmV2
ZXJzZXM7Ci0gICAgZW5jb2RlciA8PCByZW1vdmVkT25Db21wbGV0aW9uOwotICAgIGVuY29kZXIg
PDwgYWRkaXRpdmU7Ci0gICAgZW5jb2RlciA8PCByZXZlcnNlVGltaW5nRnVuY3Rpb25zOwotICAg
IGVuY29kZXIgPDwgaGFzRXhwbGljaXRCZWdpblRpbWU7Ci0gICAgCi0gICAgZW5jb2RlciA8PCBr
ZXlWYWx1ZXM7Ci0gICAgZW5jb2RlciA8PCBrZXlUaW1lczsKLSAgICAKLSAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0aW1pbmdGdW5jdGlvbnMuc2l6ZSgpKTsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIHRpbWluZ0Z1bmN0aW9uIDogdGltaW5nRnVuY3Rpb25zKSB7Ci0gICAgICAg
IHN3aXRjaCAodGltaW5nRnVuY3Rpb24tPnR5cGUoKSkgewotICAgICAgICBjYXNlIFRpbWluZ0Z1
bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKLSAgICAgICAgICAgIGVuY29kZXIgPDwgKnN0YXRpY19j
YXN0PExpbmVhclRpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24uZ2V0KCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6
Q3ViaWNCZXppZXJGdW5jdGlvbjoKLSAgICAgICAgICAgIGVuY29kZXIgPDwgKnN0YXRpY19jYXN0
PEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbi5nZXQoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OlN0
ZXBzRnVuY3Rpb246Ci0gICAgICAgICAgICBlbmNvZGVyIDw8ICpzdGF0aWNfY2FzdDxTdGVwc1Rp
bWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24uZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3ByaW5nRnVuY3Rpb246Ci0gICAgICAg
ICAgICBlbmNvZGVyIDw8ICpzdGF0aWNfY2FzdDxTcHJpbmdUaW1pbmdGdW5jdGlvbio+KHRpbWlu
Z0Z1bmN0aW9uLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
fQotCi1ib29sIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXM6OmRlY29kZShJ
UEM6OkRlY29kZXImIGRlY29kZXIsIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRp
ZXMmIHByb3BlcnRpZXMpCi17Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9wZXJ0aWVzLmtl
eVBhdGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
RW51bShwcm9wZXJ0aWVzLmFuaW1hdGlvblR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHByb3BlcnRpZXMuYmVnaW5UaW1lKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9wZXJ0aWVzLmR1cmF0
aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShw
cm9wZXJ0aWVzLnRpbWVPZmZzZXQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHByb3BlcnRpZXMucmVwZWF0Q291bnQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHByb3BlcnRpZXMuc3BlZWQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShwcm9wZXJ0
aWVzLmZpbGxNb2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUVudW0ocHJvcGVydGllcy52YWx1ZUZ1bmN0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9wZXJ0aWVzLmF1dG9SZXZlcnNlcykp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocHJvcGVy
dGllcy5yZW1vdmVkT25Db21wbGV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShwcm9wZXJ0aWVzLmFkZGl0aXZlKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9wZXJ0aWVzLnJldmVyc2VUaW1p
bmdGdW5jdGlvbnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHByb3BlcnRpZXMuaGFzRXhwbGljaXRCZWdpblRpbWUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHByb3BlcnRpZXMua2V5VmFsdWVzKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9wZXJ0
aWVzLmtleVRpbWVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdWludDY0X3QgbnVt
VGltaW5nRnVuY3Rpb25zOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobnVtVGltaW5nRnVuY3Rp
b25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChudW1UaW1pbmdGdW5j
dGlvbnMpIHsKLSAgICAgICAgcHJvcGVydGllcy50aW1pbmdGdW5jdGlvbnMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShudW1UaW1pbmdGdW5jdGlvbnMpOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtVGltaW5nRnVuY3Rpb25zOyArK2kpIHsKLSAgICAgICAgCi0gICAgICAgICAg
ICBUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25UeXBlIHR5cGU7Ci0gICAgICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRW51bSh0eXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb247
Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVGltaW5nRnVu
Y3Rpb246OkxpbmVhckZ1bmN0aW9uOgotICAgICAgICAgICAgICAgIHRpbWluZ0Z1bmN0aW9uID0g
TGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoKnN0YXRpY19jYXN0PExpbmVhclRpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVu
Y3Rpb24uZ2V0KCkpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBUaW1p
bmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjoKLSAgICAgICAgICAgICAgICB0aW1pbmdG
dW5jdGlvbiA9IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOwotICAgICAgICAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoKnN0YXRpY19jYXN0PEN1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbi5nZXQoKSkpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246Ci0gICAgICAgICAgICAg
ICAgdGltaW5nRnVuY3Rpb24gPSBTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKCpzdGF0aWNfY2FzdDxTdGVwc1RpbWluZ0Z1
bmN0aW9uKj4odGltaW5nRnVuY3Rpb24uZ2V0KCkpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFRp
bWluZ0Z1bmN0aW9uOjpTcHJpbmdGdW5jdGlvbjoKLSAgICAgICAgICAgICAgICB0aW1pbmdGdW5j
dGlvbiA9IFNwcmluZ1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKCpzdGF0aWNfY2FzdDxTcHJpbmdUaW1pbmdGdW5jdGlvbio+KHRp
bWluZ0Z1bmN0aW9uLmdldCgpKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgcHJvcGVydGllcy50aW1pbmdGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUodGltaW5nRnVuY3Rpb24pKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotICAgIAotUmVmPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGU6OmNyZWF0ZShQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF0Zm9y
bUNBQW5pbWF0aW9uUmVtb3RlKHR5cGUsIGtleVBhdGgpKTsKLX0KLQotUmVmPFBsYXRmb3JtQ0FB
bmltYXRpb24+IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OmNvcHkoKSBjb25zdAotewotICAg
IGF1dG8gYW5pbWF0aW9uID0gY3JlYXRlKGFuaW1hdGlvblR5cGUoKSwga2V5UGF0aCgpKTsKLSAg
ICAKLSAgICBhbmltYXRpb24tPnNldEJlZ2luVGltZShiZWdpblRpbWUoKSk7Ci0gICAgYW5pbWF0
aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbigpKTsKLSAgICBhbmltYXRpb24tPnNldFNwZWVkKHNw
ZWVkKCkpOwotICAgIGFuaW1hdGlvbi0+c2V0VGltZU9mZnNldCh0aW1lT2Zmc2V0KCkpOwotICAg
IGFuaW1hdGlvbi0+c2V0UmVwZWF0Q291bnQocmVwZWF0Q291bnQoKSk7Ci0gICAgYW5pbWF0aW9u
LT5zZXRBdXRvcmV2ZXJzZXMoYXV0b3JldmVyc2VzKCkpOwotICAgIGFuaW1hdGlvbi0+c2V0Rmls
bE1vZGUoZmlsbE1vZGUoKSk7Ci0gICAgYW5pbWF0aW9uLT5zZXRSZW1vdmVkT25Db21wbGV0aW9u
KGlzUmVtb3ZlZE9uQ29tcGxldGlvbigpKTsKLSAgICBhbmltYXRpb24tPnNldEFkZGl0aXZlKGlz
QWRkaXRpdmUoKSk7Ci0gICAgYW5pbWF0aW9uLT5jb3B5VGltaW5nRnVuY3Rpb25Gcm9tKCp0aGlz
KTsKLSAgICBhbmltYXRpb24tPnNldFZhbHVlRnVuY3Rpb24odmFsdWVGdW5jdGlvbigpKTsKLQot
ICAgIGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU+KGFuaW1hdGlvbi5nZXQoKSku
c2V0SGFzRXhwbGljaXRCZWdpblRpbWUoaGFzRXhwbGljaXRCZWdpblRpbWUoKSk7Ci0gICAgCi0g
ICAgLy8gQ29weSB0aGUgc3BlY2lmaWMgQmFzaWMgb3IgS2V5ZnJhbWUgdmFsdWVzLgotICAgIGlm
IChhbmltYXRpb25UeXBlKCkgPT0gS2V5ZnJhbWUpIHsKLSAgICAgICAgYW5pbWF0aW9uLT5jb3B5
VmFsdWVzRnJvbSgqdGhpcyk7Ci0gICAgICAgIGFuaW1hdGlvbi0+Y29weUtleVRpbWVzRnJvbSgq
dGhpcyk7Ci0gICAgICAgIGFuaW1hdGlvbi0+Y29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oKnRoaXMp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFuaW1hdGlvbi0+Y29weUZyb21WYWx1ZUZyb20oKnRo
aXMpOwotICAgICAgICBhbmltYXRpb24tPmNvcHlUb1ZhbHVlRnJvbSgqdGhpcyk7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBhbmltYXRpb247Ci19Ci0KLVBsYXRmb3JtQ0FBbmltYXRpb25SZW1v
dGU6OlBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUoQW5pbWF0aW9uVHlwZSB0eXBlLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgpCi0gICAgOiBQbGF0Zm9ybUNBQW5pbWF0aW9uKHR5cGUpCi17Ci0gICAg
bV9wcm9wZXJ0aWVzLmtleVBhdGggPSBrZXlQYXRoOwotICAgIG1fcHJvcGVydGllcy5hbmltYXRp
b25UeXBlID0gdHlwZTsKLX0KLQotU3RyaW5nIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6Omtl
eVBhdGgoKSBjb25zdAotewotICAgIHJldHVybiBtX3Byb3BlcnRpZXMua2V5UGF0aDsKLX0KLQot
Q0ZUaW1lSW50ZXJ2YWwgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6YmVnaW5UaW1lKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmJlZ2luVGltZTsKLX0KLQotdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRCZWdpblRpbWUoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUp
Ci17Ci0gICAgbV9wcm9wZXJ0aWVzLmJlZ2luVGltZSA9IHZhbHVlOwotICAgIAotICAgIC8vIEFs
c28gc2V0IGEgZmxhZyB0byB0ZWxsIHVzIGlmIHdlJ3ZlIHBhc3NlZCBpbiBhIDAgdmFsdWUuIAot
ICAgIC8vIFRoZSBmbGFnIGlzIG5lZWRlZCBiZWNhdXNlIGxhdGVyIGJlZ2luVGltZSB3aWxsIGdl
dCBjaGFuZ2VkCi0gICAgLy8gdG8gdGhlIHRpbWUgYXQgd2hpY2ggaXQgZmlyZWQgYW5kIHdlIG5l
ZWQgdG8ga25vdyB3aGV0aGVyCi0gICAgLy8gb3Igbm90IGl0IHdhcyAwIHRvIGJlZ2luIHdpdGgu
Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICBtX3Byb3BlcnRpZXMuaGFzRXhwbGljaXRCZWdpblRp
bWUgPSB2YWx1ZTsKLX0KLQotQ0ZUaW1lSW50ZXJ2YWwgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZTo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3Byb3BlcnRpZXMuZHVyYXRpb247
Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0RHVyYXRpb24oQ0ZUaW1l
SW50ZXJ2YWwgdmFsdWUpCi17Ci0gICAgbV9wcm9wZXJ0aWVzLmR1cmF0aW9uID0gdmFsdWU7Ci19
Ci0KLWZsb2F0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OnNwZWVkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9wcm9wZXJ0aWVzLnNwZWVkOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGU6OnNldFNwZWVkKGZsb2F0IHZhbHVlKQotewotICAgIG1fcHJvcGVydGllcy5zcGVl
ZCA9IHZhbHVlOwotfQotCi1DRlRpbWVJbnRlcnZhbCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
Ojp0aW1lT2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLnRpbWVPZmZz
ZXQ7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VGltZU9mZnNldChD
RlRpbWVJbnRlcnZhbCB2YWx1ZSkKLXsKLSAgICBtX3Byb3BlcnRpZXMudGltZU9mZnNldCA9IHZh
bHVlOwotfQotCi1mbG9hdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpyZXBlYXRDb3VudCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvcGVydGllcy5yZXBlYXRDb3VudDsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRSZXBlYXRDb3VudChmbG9hdCB2YWx1ZSkK
LXsKLSAgICBtX3Byb3BlcnRpZXMucmVwZWF0Q291bnQgPSB2YWx1ZTsKLX0KLQotYm9vbCBQbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjphdXRvcmV2ZXJzZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtX3Byb3BlcnRpZXMuYXV0b1JldmVyc2VzOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGU6OnNldEF1dG9yZXZlcnNlcyhib29sIHZhbHVlKQotewotICAgIG1fcHJvcGVydGll
cy5hdXRvUmV2ZXJzZXMgPSB2YWx1ZTsKLX0KLQotUGxhdGZvcm1DQUFuaW1hdGlvbjo6RmlsbE1v
ZGVUeXBlIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OmZpbGxNb2RlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9wcm9wZXJ0aWVzLmZpbGxNb2RlOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmlt
YXRpb25SZW1vdGU6OnNldEZpbGxNb2RlKEZpbGxNb2RlVHlwZSB2YWx1ZSkKLXsKLSAgICBtX3By
b3BlcnRpZXMuZmlsbE1vZGUgPSB2YWx1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
UmVtb3RlOjpzZXRUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiogdmFsdWUsIGJv
b2wgcmV2ZXJzZSkKLXsKLSAgICBWZWN0b3I8UmVmUHRyPFRpbWluZ0Z1bmN0aW9uPj4gdGltaW5n
RnVuY3Rpb25zOwotICAgIHRpbWluZ0Z1bmN0aW9ucy5hcHBlbmQodmFsdWUtPmNsb25lKCkpOwot
Ci0gICAgbV9wcm9wZXJ0aWVzLnRpbWluZ0Z1bmN0aW9ucyA9IFdURk1vdmUodGltaW5nRnVuY3Rp
b25zKTsKLSAgICBtX3Byb3BlcnRpZXMucmV2ZXJzZVRpbWluZ0Z1bmN0aW9ucyA9IHJldmVyc2U7
Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weVRpbWluZ0Z1bmN0aW9u
RnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKLXsKLSAgICBjb3B5VGltaW5n
RnVuY3Rpb25zRnJvbSh2YWx1ZSk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZTo6aXNSZW1vdmVkT25Db21wbGV0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0
aWVzLnJlbW92ZWRPbkNvbXBsZXRpb247Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZTo6c2V0UmVtb3ZlZE9uQ29tcGxldGlvbihib29sIHZhbHVlKQotewotICAgIG1fcHJvcGVy
dGllcy5yZW1vdmVkT25Db21wbGV0aW9uID0gdmFsdWU7Ci19Ci0KLWJvb2wgUGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZTo6aXNBZGRpdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvcGVy
dGllcy5hZGRpdGl2ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRB
ZGRpdGl2ZShib29sIHZhbHVlKQotewotICAgIG1fcHJvcGVydGllcy5hZGRpdGl2ZSA9IHZhbHVl
OwotfQotCi1QbGF0Zm9ybUNBQW5pbWF0aW9uOjpWYWx1ZUZ1bmN0aW9uVHlwZSBQbGF0Zm9ybUNB
QW5pbWF0aW9uUmVtb3RlOjp2YWx1ZUZ1bmN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9w
cm9wZXJ0aWVzLnZhbHVlRnVuY3Rpb247Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZTo6c2V0VmFsdWVGdW5jdGlvbihWYWx1ZUZ1bmN0aW9uVHlwZSB2YWx1ZSkKLXsKLSAgICBt
X3Byb3BlcnRpZXMudmFsdWVGdW5jdGlvbiA9IHZhbHVlOwotfQotCi12b2lkIFBsYXRmb3JtQ0FB
bmltYXRpb25SZW1vdGU6OnNldEZyb21WYWx1ZShmbG9hdCB2YWx1ZSkKLXsKLSAgICBpZiAoYW5p
bWF0aW9uVHlwZSgpICE9IEJhc2ljKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Byb3BlcnRp
ZXMua2V5VmFsdWVzLnJlc2l6ZSgyKTsKLSAgICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzWzBdID0g
S2V5ZnJhbWVWYWx1ZSh2YWx1ZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZTo6c2V0RnJvbVZhbHVlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKLXsKLSAg
ICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3Byb3BlcnRpZXMua2V5VmFsdWVzLnJlc2l6ZSgyKTsKLSAgICBtX3Byb3BlcnRpZXMua2V5VmFs
dWVzWzBdID0gS2V5ZnJhbWVWYWx1ZSh2YWx1ZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvblJlbW90ZTo6c2V0RnJvbVZhbHVlKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCi17Ci0g
ICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9wcm9wZXJ0aWVzLmtleVZhbHVlcy5yZXNpemUoMik7Ci0gICAgbV9wcm9wZXJ0aWVzLmtleVZh
bHVlc1swXSA9IEtleWZyYW1lVmFsdWUodmFsdWUpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmlt
YXRpb25SZW1vdGU6OnNldEZyb21WYWx1ZShjb25zdCBDb2xvciYgdmFsdWUpCi17Ci0gICAgaWYg
KGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcm9w
ZXJ0aWVzLmtleVZhbHVlcy5yZXNpemUoMik7Ci0gICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlc1sw
XSA9IEtleWZyYW1lVmFsdWUodmFsdWUpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGU6OnNldEZyb21WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiwgaW50
IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKLXsKLSAgICBpZiAoYW5pbWF0aW9uVHlwZSgp
ICE9IEJhc2ljKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Byb3BlcnRpZXMua2V5VmFsdWVz
LnJlc2l6ZSgyKTsKLSAgICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzWzBdID0gS2V5ZnJhbWVWYWx1
ZShvcGVyYXRpb24tPmNsb25lKCkpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1v
dGU6OmNvcHlGcm9tVmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQot
ewotICAgIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUmIG90aGVyID0gZG93bmNhc3Q8
UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZT4odmFsdWUpOwotCi0gICAgaWYgKG90aGVyLm1fcHJv
cGVydGllcy5rZXlWYWx1ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
bV9wcm9wZXJ0aWVzLmtleVZhbHVlcy5yZXNpemUoMik7Ci0gICAgbV9wcm9wZXJ0aWVzLmtleVZh
bHVlc1swXSA9IG90aGVyLm1fcHJvcGVydGllcy5rZXlWYWx1ZXNbMF07Ci19Ci0KLXZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VG9WYWx1ZShmbG9hdCB2YWx1ZSkKLXsKLSAgICBp
ZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3By
b3BlcnRpZXMua2V5VmFsdWVzLnJlc2l6ZSgyKTsKLSAgICBtX3Byb3BlcnRpZXMua2V5VmFsdWVz
WzFdID0gS2V5ZnJhbWVWYWx1ZSh2YWx1ZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
blJlbW90ZTo6c2V0VG9WYWx1ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCi17
Ci0gICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcy5yZXNpemUoMik7Ci0gICAgbV9wcm9wZXJ0aWVzLmtl
eVZhbHVlc1sxXSA9IEtleWZyYW1lVmFsdWUodmFsdWUpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FB
bmltYXRpb25SZW1vdGU6OnNldFRvVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKLXsK
LSAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzLnJlc2l6ZSgyKTsKLSAgICBtX3Byb3BlcnRpZXMua2V5
VmFsdWVzWzFdID0gS2V5ZnJhbWVWYWx1ZSh2YWx1ZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZTo6c2V0VG9WYWx1ZShjb25zdCBDb2xvciYgdmFsdWUpCi17Ci0gICAgaWYg
KGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcm9w
ZXJ0aWVzLmtleVZhbHVlcy5yZXNpemUoMik7Ci0gICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlc1sx
XSA9IEtleWZyYW1lVmFsdWUodmFsdWUpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGU6OnNldFRvVmFsdWUoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRpb24sIGludCBp
bnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCi17Ci0gICAgaWYgKGFuaW1hdGlvblR5cGUoKSAh
PSBCYXNpYykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5h
bEZpbHRlclByb3BlcnR5SW5kZXgpOwotICAgIEFTU0VSVChvcGVyYXRpb24pOwotICAgIG1fcHJv
cGVydGllcy5rZXlWYWx1ZXMucmVzaXplKDIpOwotICAgIG1fcHJvcGVydGllcy5rZXlWYWx1ZXNb
MV0gPSBLZXlmcmFtZVZhbHVlKG9wZXJhdGlvbi0+Y2xvbmUoKSk7Ci19Ci0KLXZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weVRvVmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmlt
YXRpb24mIHZhbHVlKQotewotICAgIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUmIG90
aGVyID0gZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZT4odmFsdWUpOwotCi0gICAg
aWYgKG90aGVyLm1fcHJvcGVydGllcy5rZXlWYWx1ZXMuc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fcHJvcGVydGllcy5rZXlWYWx1ZXMucmVzaXplKDIpOwotICAgIG1fcHJvcGVy
dGllcy5rZXlWYWx1ZXNbMV0gPSBvdGhlci5tX3Byb3BlcnRpZXMua2V5VmFsdWVzWzFdOwotfQot
Ci0vLyBLZXlmcmFtZS1hbmltYXRpb24gcHJvcGVydGllcy4KLXZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKLXsKLSAg
ICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT4ga2V5ZnJhbWVzOwotICAgIGtleWZyYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICBrZXlmcmFtZXMudW5jaGVja2Vk
QXBwZW5kKEtleWZyYW1lVmFsdWUodmFsdWVzW2ldKSk7Ci0gICAgCi0gICAgbV9wcm9wZXJ0aWVz
LmtleVZhbHVlcyA9IFdURk1vdmUoa2V5ZnJhbWVzKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBQW5p
bWF0aW9uUmVtb3RlOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFRyYW5zZm9ybWF0aW9uTWF0cml4
PiYgdmFsdWVzKQotewotICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCi0gICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IGtleWZyYW1l
czsKLSAgICBrZXlmcmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2YWx1ZXMuc2l6ZSgpKTsK
LSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAga2V5ZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChLZXlmcmFtZVZhbHVlKHZhbHVlc1tpXSkp
OwotICAgIAotICAgIG1fcHJvcGVydGllcy5rZXlWYWx1ZXMgPSBXVEZNb3ZlKGtleWZyYW1lcyk7
Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZl
Y3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZXMpCi17Ci0gICAgaWYgKGFuaW1hdGlvblR5cGUoKSAh
PSBLZXlmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBWZWN0b3I8S2V5ZnJh
bWVWYWx1ZT4ga2V5ZnJhbWVzOwotICAgIGtleWZyYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVz
LnNpemUoKTsgKytpKQotICAgICAgICBrZXlmcmFtZXMudW5jaGVja2VkQXBwZW5kKEtleWZyYW1l
VmFsdWUodmFsdWVzW2ldKSk7Ci0gICAgCi0gICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9IFdU
Rk1vdmUoa2V5ZnJhbWVzKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpz
ZXRWYWx1ZXMoY29uc3QgVmVjdG9yPENvbG9yPiYgdmFsdWVzKQotewotICAgIGlmIChhbmltYXRp
b25UeXBlKCkgIT0gS2V5ZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgVmVj
dG9yPEtleWZyYW1lVmFsdWU+IGtleWZyYW1lczsKLSAgICBrZXlmcmFtZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAga2V5ZnJhbWVzLnVuY2hlY2tlZEFwcGVu
ZChLZXlmcmFtZVZhbHVlKHZhbHVlc1tpXSkpOwotICAgIAotICAgIG1fcHJvcGVydGllcy5rZXlW
YWx1ZXMgPSBXVEZNb3ZlKGtleWZyYW1lcyk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
blJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPj4m
IHZhbHVlcywgaW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKLXsKLSAgICBVTlVTRURf
UEFSQU0oaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKLSAgICAKLSAgICBpZiAoYW5pbWF0
aW9uVHlwZSgpICE9IEtleWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIFZl
Y3RvcjxLZXlmcmFtZVZhbHVlPiBrZXlmcmFtZXM7Ci0gICAga2V5ZnJhbWVzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiB2YWx1ZSA6
IHZhbHVlcykKLSAgICAgICAga2V5ZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChLZXlmcmFtZVZhbHVl
IHsgdmFsdWUuY29weVJlZigpIH0pOwotICAgIAotICAgIG1fcHJvcGVydGllcy5rZXlWYWx1ZXMg
PSBXVEZNb3ZlKGtleWZyYW1lcyk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZTo6Y29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCi17Ci0g
ICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9IGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGU+KHZhbHVlKS5tX3Byb3BlcnRpZXMua2V5VmFsdWVzOwotfQotCi12b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGU6OnNldEtleVRpbWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtleVRp
bWVzKQotewotICAgIG1fcHJvcGVydGllcy5rZXlUaW1lcyA9IGtleVRpbWVzOwotfQotCi12b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OmNvcHlLZXlUaW1lc0Zyb20oY29uc3QgUGxhdGZv
cm1DQUFuaW1hdGlvbiYgdmFsdWUpCi17Ci0gICAgbV9wcm9wZXJ0aWVzLmtleVRpbWVzID0gZG93
bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZT4odmFsdWUpLm1fcHJvcGVydGllcy5rZXlU
aW1lczsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRUaW1pbmdGdW5j
dGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9uKj4mIHZhbHVlcywgYm9vbCBy
ZXZlcnNlKQotewotICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb24+PiB0
aW1pbmdGdW5jdGlvbnM7Ci0gICAgdGltaW5nRnVuY3Rpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHRpbWluZ0Z1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQo
dmFsdWVzW2ldLT5jbG9uZSgpKTsKLSAgICAKLSAgICBtX3Byb3BlcnRpZXMudGltaW5nRnVuY3Rp
b25zID0gV1RGTW92ZSh0aW1pbmdGdW5jdGlvbnMpOwotICAgIG1fcHJvcGVydGllcy5yZXZlcnNl
VGltaW5nRnVuY3Rpb25zID0gcmV2ZXJzZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
UmVtb3RlOjpjb3B5VGltaW5nRnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9u
JiB2YWx1ZSkKLXsKLSAgICBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlJiBvdGhlciA9
IGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU+KHZhbHVlKTsKLQotICAgIG1fcHJv
cGVydGllcy50aW1pbmdGdW5jdGlvbnMgPSBvdGhlci5tX3Byb3BlcnRpZXMudGltaW5nRnVuY3Rp
b25zOwotICAgIG1fcHJvcGVydGllcy5yZXZlcnNlVGltaW5nRnVuY3Rpb25zID0gb3RoZXIubV9w
cm9wZXJ0aWVzLnJldmVyc2VUaW1pbmdGdW5jdGlvbnM7Ci19Ci0KLXN0YXRpYyBOU09iamVjdCog
YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9u
UmVtb3RlOjpLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQotewotICAgIHN3aXRjaCAoa2V5
ZnJhbWVWYWx1ZS5rZXlmcmFtZVR5cGUoKSkgewotICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlv
blJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6TnVtYmVyS2V5VHlwZToKLSAgICAgICAgcmV0dXJuIEAo
a2V5ZnJhbWVWYWx1ZS5udW1iZXJWYWx1ZSgpKTsKLSAgICAgICAgICAgIAotICAgIGNhc2UgUGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6Q29sb3JLZXlUeXBlOiB7Ci0g
ICAgICAgIENvbG9yIGNvbG9yID0ga2V5ZnJhbWVWYWx1ZS5jb2xvclZhbHVlKCk7Ci0gICAgICAg
IHJldHVybiBAWyBAKGNvbG9yLnJlZCgpKSwgQChjb2xvci5ncmVlbigpKSwgQChjb2xvci5ibHVl
KCkpLCBAKGNvbG9yLmFscGhhKCkpIF07Ci0gICAgfQotCi0gICAgY2FzZSBQbGF0Zm9ybUNBQW5p
bWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlOjpQb2ludEtleVR5cGU6IHsKLSAgICAgICAgRmxv
YXRQb2ludDNEIHBvaW50ID0ga2V5ZnJhbWVWYWx1ZS5wb2ludFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybiBAWyBAKHBvaW50LngoKSksIEAocG9pbnQueSgpKSwgQChwb2ludC56KCkpIF07Ci0gICAg
fQotICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6VHJh
bnNmb3JtS2V5VHlwZToKLSAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNm
b3JtM0Q6a2V5ZnJhbWVWYWx1ZS50cmFuc2Zvcm1WYWx1ZSgpXTsKLSAgICAgICAgICAgIAotICAg
IGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6RmlsdGVyS2V5
VHlwZToKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9w
ZXJhdGlvbihrZXlmcmFtZVZhbHVlLmZpbHRlclZhbHVlKCksIDAgLyogdW51c2VkICovKS5hdXRv
cmVsZWFzZSgpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgYWRkQW5pbWF0aW9uVG9MYXllcihD
QUxheWVyICpsYXllciwgUmVtb3RlTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXMm
IHByb3BlcnRpZXMpCi17Ci0gICAgUmV0YWluUHRyPENBUHJvcGVydHlBbmltYXRpb24+IGNhQW5p
bWF0aW9uOwotICAgIHN3aXRjaCAocHJvcGVydGllcy5hbmltYXRpb25UeXBlKSB7Ci0gICAgY2Fz
ZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpCYXNpYzogewotICAgICAgICBSZXRhaW5QdHI8Q0FCYXNp
Y0FuaW1hdGlvbj4gYmFzaWNBbmltYXRpb247Ci0gICAgICAgIGJhc2ljQW5pbWF0aW9uID0gW0NB
QmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChwcm9wZXJ0aWVzLmtleVZhbHVlcy5zaXplKCkgPiAxKSB7
Ci0gICAgICAgICAgICBbYmFzaWNBbmltYXRpb24gc2V0RnJvbVZhbHVlOmFuaW1hdGlvblZhbHVl
RnJvbUtleWZyYW1lVmFsdWUocHJvcGVydGllcy5rZXlWYWx1ZXNbMF0pXTsKLSAgICAgICAgICAg
IFtiYXNpY0FuaW1hdGlvbiBzZXRUb1ZhbHVlOmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFs
dWUocHJvcGVydGllcy5rZXlWYWx1ZXNbMV0pXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKHByb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zLnNpemUoKSkKLSAgICAgICAgICAgIFti
YXNpY0FuaW1hdGlvbiBzZXRUaW1pbmdGdW5jdGlvbjp0b0NBTWVkaWFUaW1pbmdGdW5jdGlvbihw
cm9wZXJ0aWVzLnRpbWluZ0Z1bmN0aW9uc1swXS5nZXQoKSwgcHJvcGVydGllcy5yZXZlcnNlVGlt
aW5nRnVuY3Rpb25zKV07Ci0gICAgICAgIAotICAgICAgICBjYUFuaW1hdGlvbiA9IGJhc2ljQW5p
bWF0aW9uOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0
aW9uOjpLZXlmcmFtZTogewotICAgICAgICBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4g
a2V5ZnJhbWVBbmltYXRpb247Ci0gICAgICAgIGtleWZyYW1lQW5pbWF0aW9uID0gW0NBS2V5ZnJh
bWVBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKLQot
ICAgICAgICBpZiAocHJvcGVydGllcy5rZXlWYWx1ZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGtleWZyYW1lcyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpwcm9wZXJ0aWVzLmtleVZhbHVlcy5zaXplKCld
KTsKLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiBwcm9wZXJ0aWVzLmtleVZh
bHVlcykKLSAgICAgICAgICAgICAgICBba2V5ZnJhbWVzIGFkZE9iamVjdDphbmltYXRpb25WYWx1
ZUZyb21LZXlmcmFtZVZhbHVlKHZhbHVlKV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFtr
ZXlmcmFtZUFuaW1hdGlvbiBzZXRWYWx1ZXM6a2V5ZnJhbWVzLmdldCgpXTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChwcm9wZXJ0aWVzLmtleVRpbWVzLnNpemUoKSkgewotICAgICAgICAgICAg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBrZXlUaW1lcyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpwcm9wZXJ0aWVzLmtleVRpbWVzLnNpemUoKV0p
OwotICAgICAgICAgICAgZm9yIChhdXRvIGtleVRpbWUgOiBwcm9wZXJ0aWVzLmtleVRpbWVzKQot
ICAgICAgICAgICAgICAgIFtrZXlUaW1lcyBhZGRPYmplY3Q6QChrZXlUaW1lKV07Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFtrZXlmcmFtZUFuaW1hdGlvbiBzZXRLZXlUaW1lczprZXlUaW1l
cy5nZXQoKV07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocHJvcGVydGllcy50aW1pbmdGdW5j
dGlvbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHRp
bWluZ0Z1bmN0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpwcm9wZXJ0aWVzLnRpbWluZ0Z1bmN0aW9ucy5zaXplKCldKTsKLSAgICAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgdGltaW5nRnVuY3Rpb24gOiBwcm9wZXJ0aWVzLnRpbWluZ0Z1bmN0
aW9ucykKLSAgICAgICAgICAgICAgICBbdGltaW5nRnVuY3Rpb25zIGFkZE9iamVjdDp0b0NBTWVk
aWFUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbi5nZXQoKSwgcHJvcGVydGllcy5yZXZlcnNl
VGltaW5nRnVuY3Rpb25zKV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFtrZXlmcmFtZUFu
aW1hdGlvbiBzZXRUaW1pbmdGdW5jdGlvbnM6dGltaW5nRnVuY3Rpb25zLmdldCgpXTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgY2FBbmltYXRpb24gPSBrZXlmcmFtZUFuaW1hdGlvbjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6U3By
aW5nOiB7Ci0gICAgICAgIFJldGFpblB0cjxDQVNwcmluZ0FuaW1hdGlvbj4gc3ByaW5nQW5pbWF0
aW9uOwotICAgICAgICBzcHJpbmdBbmltYXRpb24gPSBbQ0FTcHJpbmdBbmltYXRpb24gYW5pbWF0
aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChwcm9wZXJ0aWVzLmtleVZhbHVlcy5zaXplKCkgPiAxKSB7Ci0gICAgICAgICAgICBbc3ByaW5n
QW5pbWF0aW9uIHNldEZyb21WYWx1ZTphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKHBy
b3BlcnRpZXMua2V5VmFsdWVzWzBdKV07Ci0gICAgICAgICAgICBbc3ByaW5nQW5pbWF0aW9uIHNl
dFRvVmFsdWU6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShwcm9wZXJ0aWVzLmtleVZh
bHVlc1sxXSldOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocHJvcGVydGllcy50
aW1pbmdGdW5jdGlvbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBhdXRvJiB0aW1pbmdGdW5jdGlv
biA9IHByb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zWzBdOwotICAgICAgICAgICAgaWYgKHRpbWlu
Z0Z1bmN0aW9uLT5pc1NwcmluZ1RpbWluZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBh
dXRvJiBmdW5jdGlvbiA9ICpzdGF0aWNfY2FzdDxjb25zdCBTcHJpbmdUaW1pbmdGdW5jdGlvbio+
KHRpbWluZ0Z1bmN0aW9uLmdldCgpKTsKLSAgICAgICAgICAgICAgICBbc3ByaW5nQW5pbWF0aW9u
IHNldE1hc3M6ZnVuY3Rpb24ubWFzcygpXTsKLSAgICAgICAgICAgICAgICBbc3ByaW5nQW5pbWF0
aW9uIHNldFN0aWZmbmVzczpmdW5jdGlvbi5zdGlmZm5lc3MoKV07Ci0gICAgICAgICAgICAgICAg
W3NwcmluZ0FuaW1hdGlvbiBzZXREYW1waW5nOmZ1bmN0aW9uLmRhbXBpbmcoKV07Ci0gICAgICAg
ICAgICAgICAgW3NwcmluZ0FuaW1hdGlvbiBzZXRJbml0aWFsVmVsb2NpdHk6ZnVuY3Rpb24uaW5p
dGlhbFZlbG9jaXR5KCldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhQW5p
bWF0aW9uID0gc3ByaW5nQW5pbWF0aW9uOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQot
ICAgIAotICAgIFtjYUFuaW1hdGlvbiBzZXRCZWdpblRpbWU6cHJvcGVydGllcy5iZWdpblRpbWVd
OwotICAgIFtjYUFuaW1hdGlvbiBzZXREdXJhdGlvbjpwcm9wZXJ0aWVzLmR1cmF0aW9uXTsKLSAg
ICBbY2FBbmltYXRpb24gc2V0VGltZU9mZnNldDpwcm9wZXJ0aWVzLnRpbWVPZmZzZXRdOwotICAg
IFtjYUFuaW1hdGlvbiBzZXRSZXBlYXRDb3VudDpwcm9wZXJ0aWVzLnJlcGVhdENvdW50XTsKLSAg
ICBbY2FBbmltYXRpb24gc2V0U3BlZWQ6cHJvcGVydGllcy5zcGVlZF07Ci0gICAgW2NhQW5pbWF0
aW9uIHNldEF1dG9yZXZlcnNlczpwcm9wZXJ0aWVzLmF1dG9SZXZlcnNlc107Ci0gICAgW2NhQW5p
bWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246cHJvcGVydGllcy5yZW1vdmVkT25Db21wbGV0
aW9uXTsKLSAgICBbY2FBbmltYXRpb24gc2V0QWRkaXRpdmU6cHJvcGVydGllcy5hZGRpdGl2ZV07
Ci0gICAgCi0gICAgaWYgKHByb3BlcnRpZXMuZmlsbE1vZGUgIT0gUGxhdGZvcm1DQUFuaW1hdGlv
bjo6Tm9GaWxsTW9kZSkKLSAgICAgICAgW2NhQW5pbWF0aW9uIHNldEZpbGxNb2RlOnRvQ0FGaWxs
TW9kZVR5cGUocHJvcGVydGllcy5maWxsTW9kZSldOwotCi0gICAgaWYgKHByb3BlcnRpZXMudmFs
dWVGdW5jdGlvbiAhPSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpOb1ZhbHVlRnVuY3Rpb24pCi0gICAg
ICAgIFtjYUFuaW1hdGlvbiBzZXRWYWx1ZUZ1bmN0aW9uOltDQVZhbHVlRnVuY3Rpb24gZnVuY3Rp
b25XaXRoTmFtZTp0b0NBVmFsdWVGdW5jdGlvblR5cGUocHJvcGVydGllcy52YWx1ZUZ1bmN0aW9u
KV1dOwotICAgIAotICAgIGlmIChwcm9wZXJ0aWVzLmhhc0V4cGxpY2l0QmVnaW5UaW1lKQotICAg
ICAgICBbY2FBbmltYXRpb24gc2V0VmFsdWU6QFlFUyBmb3JLZXk6V0tFeHBsaWNpdEJlZ2luVGlt
ZUZsYWddOwotICAgIAotICAgIGlmIChsYXllclRyZWVIb3N0KSB7Ci0gICAgICAgIEdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklEID0gUmVtb3RlTGF5ZXJUcmVlSG9zdDo6bGF5
ZXJJRChsYXllcik7Ci0gICAgCi0gICAgICAgIFJldGFpblB0cjxXS0FuaW1hdGlvbkRlbGVnYXRl
PiYgZGVsZWdhdGUgPSBsYXllclRyZWVIb3N0LT5hbmltYXRpb25EZWxlZ2F0ZXMoKS5hZGQobGF5
ZXJJRCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICBpZiAoIWRlbGVnYXRlKQot
ICAgICAgICAgICAgZGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tBbmltYXRpb25EZWxlZ2F0ZSBhbGxv
Y10gaW5pdFdpdGhMYXllcklEOmxheWVySUQgbGF5ZXJUcmVlSG9zdDpsYXllclRyZWVIb3N0XSk7
Ci0KLSAgICAgICAgW2NhQW5pbWF0aW9uIHNldERlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKLSAg
ICB9Ci0gICAgCi0gICAgW2xheWVyIGFkZEFuaW1hdGlvbjpjYUFuaW1hdGlvbi5nZXQoKSBmb3JL
ZXk6a2V5XTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjp1cGRhdGVMYXll
ckFuaW1hdGlvbnMoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJl
ZUhvc3QsIGNvbnN0IEFuaW1hdGlvbnNMaXN0JiBhbmltYXRpb25zVG9BZGQsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYW5pbWF0aW9uc1RvUmVtb3ZlKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLQotICAgIGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiBhbmltYXRpb25zVG9S
ZW1vdmUpCi0gICAgICAgIFtsYXllciByZW1vdmVBbmltYXRpb25Gb3JLZXk6dmFsdWVdOwotCi0g
ICAgZm9yIChjb25zdCBhdXRvJiBrZXlBbmltYXRpb25QYWlyIDogYW5pbWF0aW9uc1RvQWRkKQot
ICAgICAgICBhZGRBbmltYXRpb25Ub0xheWVyKGxheWVyLCBsYXllclRyZWVIb3N0LCBrZXlBbmlt
YXRpb25QYWlyLmZpcnN0LCBrZXlBbmltYXRpb25QYWlyLnNlY29uZCk7Ci0KLSAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mdHMsIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWUmIHZh
bHVlKQotewotICAgIHN3aXRjaCAodmFsdWUua2V5ZnJhbWVUeXBlKCkpIHsKLSAgICBjYXNlIFBs
YXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWU6Ok51bWJlcktleVR5cGU6Ci0g
ICAgICAgIHRzIDw8ICJudW1iZXI9IiA8PCB2YWx1ZS5udW1iZXJWYWx1ZSgpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWU6
OkNvbG9yS2V5VHlwZToKLSAgICAgICAgdHMgPDwgImNvbG9yPSI7Ci0gICAgICAgIHRzIDw8IHZh
bHVlLmNvbG9yVmFsdWUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBQW5p
bWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlOjpQb2ludEtleVR5cGU6Ci0gICAgICAgIHRzIDw8
ICJwb2ludD0iOwotICAgICAgICB0cyA8PCB2YWx1ZS5wb2ludFZhbHVlKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6
VHJhbnNmb3JtS2V5VHlwZToKLSAgICAgICAgdHMgPDwgInRyYW5zZm9ybT0iOwotICAgICAgICB0
cyA8PCB2YWx1ZS50cmFuc2Zvcm1WYWx1ZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBs
YXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWU6OkZpbHRlcktleVR5cGU6Ci0g
ICAgICAgIHRzIDw8ICJmaWx0ZXI9IjsKLSAgICAgICAgaWYgKHZhbHVlLmZpbHRlclZhbHVlKCkp
Ci0gICAgICAgICAgICB0cyA8PCAqdmFsdWUuZmlsdGVyVmFsdWUoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdHMgPDwgIm51bGwiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0
dXJuIHRzOwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzJiBhbmltYXRpb24pCi17Ci0g
ICAgdHMgPDwgInR5cGU9IjsKLSAgICB0cyA8PCBhbmltYXRpb24uYW5pbWF0aW9uVHlwZTsKLSAg
ICB0cyA8PCAiIGtleVBhdGg9IjsKLSAgICB0cyA8PCBhbmltYXRpb24ua2V5UGF0aDsKLQotICAg
IGlmIChhbmltYXRpb24uYmVnaW5UaW1lKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJlZ2lu
VGltZSIsIGFuaW1hdGlvbi5iZWdpblRpbWUpOwotCi0gICAgaWYgKGFuaW1hdGlvbi5kdXJhdGlv
bikKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJkdXJhdGlvbiIsIGFuaW1hdGlvbi5kdXJhdGlv
bik7Ci0KLSAgICBpZiAoYW5pbWF0aW9uLnRpbWVPZmZzZXQpCi0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgidGltZU9mZnNldCIsIGFuaW1hdGlvbi50aW1lT2Zmc2V0KTsKLQotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgicmVwZWF0Q291bnQiLCBhbmltYXRpb24ucmVwZWF0Q291bnQpOwotCi0gICAgaWYg
KGFuaW1hdGlvbi5zcGVlZCAhPSAxKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNwZWVkIiwg
YW5pbWF0aW9uLnNwZWVkKTsKLQotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbE1vZGUiLCBhbmlt
YXRpb24uZmlsbE1vZGUpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgidmFsdWVGdW5jdGlvbiIsIGFu
aW1hdGlvbi52YWx1ZUZ1bmN0aW9uKTsKLQotICAgIGlmIChhbmltYXRpb24uYXV0b1JldmVyc2Vz
KQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImF1dG9SZXZlcnNlcyIsIGFuaW1hdGlvbi5hdXRv
UmV2ZXJzZXMpOwotCi0gICAgaWYgKCFhbmltYXRpb24ucmVtb3ZlZE9uQ29tcGxldGlvbikKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJyZW1vdmVkT25Db21wbGV0aW9uIiwgYW5pbWF0aW9uLnJl
bW92ZWRPbkNvbXBsZXRpb24pOwotCi0gICAgaWYgKGFuaW1hdGlvbi5hZGRpdGl2ZSkKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJhZGRpdGl2ZSIsIGFuaW1hdGlvbi5hZGRpdGl2ZSk7Ci0KLSAg
ICBpZiAoYW5pbWF0aW9uLnJldmVyc2VUaW1pbmdGdW5jdGlvbnMpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgicmV2ZXJzZVRpbWluZ0Z1bmN0aW9ucyIsIGFuaW1hdGlvbi5yZXZlcnNlVGltaW5n
RnVuY3Rpb25zKTsKLQotICAgIGlmIChhbmltYXRpb24uaGFzRXhwbGljaXRCZWdpblRpbWUpCi0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiaGFzRXhwbGljaXRCZWdpblRpbWUiLCBhbmltYXRpb24u
aGFzRXhwbGljaXRCZWdpblRpbWUpOwotCi0gICAgdHMgPDwgIlxuIjsKLSAgICB0cy5pbmNyZWFz
ZUluZGVudCgpOwotICAgIHRzLndyaXRlSW5kZW50KCk7Ci0gICAgdHMgPDwgIigiIDw8ICJrZXlm
cmFtZXMiOwotICAgIHRzLmluY3JlYXNlSW5kZW50KCk7Ci0KLSAgICBzaXplX3QgbWF4RnJhbWVz
ID0gc3RkOjptYXgoYW5pbWF0aW9uLmtleVZhbHVlcy5zaXplKCksIGFuaW1hdGlvbi5rZXlUaW1l
cy5zaXplKCkpOwotICAgIG1heEZyYW1lcyA9IHN0ZDo6bWF4KG1heEZyYW1lcywgYW5pbWF0aW9u
LnRpbWluZ0Z1bmN0aW9ucy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
YXhGcmFtZXM7ICsraSkgewotICAgICAgICB0cyA8PCAiXG4iOwotICAgICAgICB0cy53cml0ZUlu
ZGVudCgpOwotICAgICAgICB0cyA8PCAiKGtleWZyYW1lICIgPDwgdW5zaWduZWQoaSk7Ci0gICAg
ICAgIGlmIChpIDwgYW5pbWF0aW9uLmtleVRpbWVzLnNpemUoKSkKLSAgICAgICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgidGltZSIsIGFuaW1hdGlvbi5rZXlUaW1lc1tpXSk7Ci0KLSAgICAgICAgaWYg
KGkgPCBhbmltYXRpb24udGltaW5nRnVuY3Rpb25zLnNpemUoKSAmJiBhbmltYXRpb24udGltaW5n
RnVuY3Rpb25zW2ldKQotICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5PGNvbnN0IFRpbWluZ0Z1
bmN0aW9uJj4oInRpbWluZyBmdW5jdGlvbiIsICphbmltYXRpb24udGltaW5nRnVuY3Rpb25zW2ld
KTsKLQotICAgICAgICBpZiAoaSA8IGFuaW1hdGlvbi5rZXlWYWx1ZXMuc2l6ZSgpKQotICAgICAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJ2YWx1ZSIsIGFuaW1hdGlvbi5rZXlWYWx1ZXNbaV0pOwot
Ci0gICAgICAgIHRzIDw8ICIpIjsKLSAgICB9Ci0KLSAgICB0cy5kZWNyZWFzZUluZGVudCgpOwot
ICAgIHRzLmRlY3JlYXNlSW5kZW50KCk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMGQxNGVlZDgxMTc3MGZmZDA0OTUxZTkyYjAxMjEzNTY2YzVlMGJkZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDg1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2ltcG9ydCAiUGxhdGZvcm1D
QUxheWVyUmVtb3RlLmgiCi0KLSNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5o
IgotI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nLmgiCi0jaW1wb3J0
ICJSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlQ29u
dGV4dC5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLmgiCi0jaW1w
b3J0IDxXZWJDb3JlL0FuaW1hdGlvblV0aWxpdGllcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNBLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0xlbmd0aEZ1bmN0aW9ucy5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9y
bUNBRmlsdGVycy5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oPgot
I2ltcG9ydCA8V2ViQ29yZS9UaWxlZEJhY2tpbmcuaD4KLSNpbXBvcnQgPHd0Zi9DdXJyZW50VGlt
ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LVJlZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRl
KExheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90
ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXll
clJlbW90ZT4gbGF5ZXI7Ci0KLSAgICBpZiAobGF5ZXJUeXBlID09IExheWVyVHlwZVRpbGVkQmFj
a2luZ0xheWVyIHx8ICBsYXllclR5cGUgPT0gTGF5ZXJUeXBlUGFnZVRpbGVkQmFja2luZ0xheWVy
KQotICAgICAgICBsYXllciA9IGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxl
ZEJhY2tpbmcobGF5ZXJUeXBlLCBvd25lciwgY29udGV4dCkpOwotICAgIGVsc2UKLSAgICAgICAg
bGF5ZXIgPSBhZG9wdFJlZihuZXcgUGxhdGZvcm1DQUxheWVyUmVtb3RlKGxheWVyVHlwZSwgb3du
ZXIsIGNvbnRleHQpKTsKLQotICAgIGNvbnRleHQubGF5ZXJXYXNDcmVhdGVkKCpsYXllciwgbGF5
ZXJUeXBlKTsKLQotICAgIHJldHVybiBsYXllci5yZWxlYXNlTm9uTnVsbCgpOwotfQotCi1SZWY8
UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZShQbGF0
Zm9ybUxheWVyICpwbGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBS
ZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0KQotewotICAgIHJldHVybiBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGVDdXN0b206OmNyZWF0ZShwbGF0Zm9ybUxheWVyLCBvd25lciwgY29udGV4dCk7
Ci19Ci0KLVJlZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6
Y3JlYXRlKGNvbnN0IFBsYXRmb3JtQ0FMYXllclJlbW90ZSYgb3RoZXIsIFdlYkNvcmU6OlBsYXRm
b3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgYXV0byBsYXllciA9IGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1DQUxheWVyUmVtb3Rl
KG90aGVyLCBvd25lciwgY29udGV4dCkpOwotCi0gICAgY29udGV4dC5sYXllcldhc0NyZWF0ZWQo
bGF5ZXIuZ2V0KCksIG90aGVyLmxheWVyVHlwZSgpKTsKLQotICAgIHJldHVybiBsYXllcjsKLX0K
LQotUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUoTGF5ZXJUeXBl
IGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVl
Q29udGV4dCYgY29udGV4dCkKLSAgICA6IFBsYXRmb3JtQ0FMYXllcihsYXllclR5cGUsIG93bmVy
KQotICAgICwgbV9jb250ZXh0KCZjb250ZXh0KQotewotICAgIGlmIChvd25lciAmJiBsYXllclR5
cGUgIT0gTGF5ZXJUeXBlQ29udGVudHNQcm92aWRlZExheWVyICYmIGxheWVyVHlwZSAhPSBMYXll
clR5cGVUcmFuc2Zvcm1MYXllcikgewotICAgICAgICBtX3Byb3BlcnRpZXMuY29udGVudHNTY2Fs
ZSA9IG93bmVyLT5wbGF0Zm9ybUNBTGF5ZXJEZXZpY2VTY2FsZUZhY3RvcigpOwotICAgICAgICBt
X3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uOjpDb250ZW50c1NjYWxlQ2hhbmdlZCk7Ci0gICAgfQotfQotCi1QbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGU6OlBsYXRmb3JtQ0FMYXllclJlbW90ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUm
IG90aGVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250
ZXh0JiBjb250ZXh0KQotICAgIDogUGxhdGZvcm1DQUxheWVyKG90aGVyLmxheWVyVHlwZSgpLCBv
d25lcikKLSAgICAsIG1fYWNjZWxlcmF0ZXNEcmF3aW5nKG90aGVyLmFjY2VsZXJhdGVzRHJhd2lu
ZygpKQotICAgICwgbV9jb250ZXh0KCZjb250ZXh0KQotewotfQotCi1SZWY8UGxhdGZvcm1DQUxh
eWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCog
b3duZXIpIGNvbnN0Ci17Ci0gICAgYXV0byBjbG9uZSA9IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6
Y3JlYXRlKCp0aGlzLCBvd25lciwgKm1fY29udGV4dCk7Ci0KLSAgICB1cGRhdGVDbG9uZWRMYXll
clByb3BlcnRpZXMoY2xvbmUpOwotCi0gICAgY2xvbmUtPnNldENsb25lZExheWVyKHRoaXMpOwot
ICAgIHJldHVybiBXVEZNb3ZlKGNsb25lKTsKLX0KLQotUGxhdGZvcm1DQUxheWVyUmVtb3RlOjp+
UGxhdGZvcm1DQUxheWVyUmVtb3RlKCkKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGxheWVyIDog
bV9jaGlsZHJlbikKLSAgICAgICAgZG93bmNhc3Q8UGxhdGZvcm1DQUxheWVyUmVtb3RlPigqbGF5
ZXIpLm1fc3VwZXJsYXllciA9IG51bGxwdHI7Ci0KLSAgICBpZiAobV9jb250ZXh0KQotICAgICAg
ICBtX2NvbnRleHQtPmxheWVyV2lsbEJlRGVzdHJveWVkKCp0aGlzKTsKLX0KLQotdm9pZCBQbGF0
Zm9ybUNBTGF5ZXJSZW1vdGU6OnVwZGF0ZUNsb25lZExheWVyUHJvcGVydGllcyhQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGUmIGNsb25lLCBib29sIGNvcHlDb250ZW50cykgY29uc3QKLXsKLSAgICBjbG9u
ZS5zZXRQb3NpdGlvbihwb3NpdGlvbigpKTsKLSAgICBjbG9uZS5zZXRCb3VuZHMoYm91bmRzKCkp
OwotICAgIGNsb25lLnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KCkpOwotCi0gICAgaWYgKG1f
cHJvcGVydGllcy50cmFuc2Zvcm0pCi0gICAgICAgIGNsb25lLnNldFRyYW5zZm9ybSgqbV9wcm9w
ZXJ0aWVzLnRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9wcm9wZXJ0aWVzLnN1YmxheWVyVHJhbnNm
b3JtKQotICAgICAgICBjbG9uZS5zZXRTdWJsYXllclRyYW5zZm9ybSgqbV9wcm9wZXJ0aWVzLnN1
YmxheWVyVHJhbnNmb3JtKTsKLQotICAgIGlmIChjb3B5Q29udGVudHMpCi0gICAgICAgIGNsb25l
LnNldENvbnRlbnRzKGNvbnRlbnRzKCkpOwotCi0gICAgY2xvbmUuc2V0TWFza3NUb0JvdW5kcyht
YXNrc1RvQm91bmRzKCkpOwotICAgIGNsb25lLnNldERvdWJsZVNpZGVkKGlzRG91YmxlU2lkZWQo
KSk7Ci0gICAgY2xvbmUuc2V0T3BhcXVlKGlzT3BhcXVlKCkpOwotICAgIGNsb25lLnNldEJhY2tn
cm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3IoKSk7Ci0gICAgY2xvbmUuc2V0Q29udGVudHNTY2Fs
ZShjb250ZW50c1NjYWxlKCkpOwotICAgIGNsb25lLnNldENvcm5lclJhZGl1cyhjb3JuZXJSYWRp
dXMoKSk7Ci0KLSAgICBpZiAoIW1fcHJvcGVydGllcy5zaGFwZVBhdGguaXNOdWxsKCkpCi0gICAg
ICAgIGNsb25lLnNldFNoYXBlUGF0aChtX3Byb3BlcnRpZXMuc2hhcGVQYXRoKTsKLQotICAgIGlm
IChtX3Byb3BlcnRpZXMuc2hhcGVSb3VuZGVkUmVjdCkKLSAgICAgICAgY2xvbmUuc2V0U2hhcGVS
b3VuZGVkUmVjdCgqbV9wcm9wZXJ0aWVzLnNoYXBlUm91bmRlZFJlY3QpOwotCi0gICAgaWYgKG1f
cHJvcGVydGllcy5maWx0ZXJzKQotICAgICAgICBjbG9uZS5jb3B5RmlsdGVyc0Zyb20oKnRoaXMp
OwotCi0gICAgY2xvbmUudXBkYXRlQ3VzdG9tQXBwZWFyYW5jZShjdXN0b21BcHBlYXJhbmNlKCkp
OwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6cmVjdXJzaXZlQnVpbGRUcmFuc2Fj
dGlvbihSZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0LCBSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKCFtX3Byb3BlcnRpZXMuYmFja2lu
Z1N0b3JlIHx8IG93bmVyKCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KCZjb250ZXh0ID09IG1fY29udGV4dCk7Ci0gICAgCi0gICAgaWYgKG1fcHJvcGVydGllcy5iYWNr
aW5nU3RvcmUgJiYgKCFvd25lcigpIHx8ICFvd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJEcmF3c0Nv
bnRlbnQoKSkpIHsKLSAgICAgICAgbV9wcm9wZXJ0aWVzLmJhY2tpbmdTdG9yZSA9IG51bGxwdHI7
Ci0gICAgICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb246OkJhY2tpbmdTdG9yZUNoYW5nZWQpOwotICAgIH0KLQotICAgIGlmICht
X3Byb3BlcnRpZXMuYmFja2luZ1N0b3JlICYmIG1fcHJvcGVydGllcy5iYWNraW5nU3RvcmVBdHRh
Y2hlZCAmJiBtX3Byb3BlcnRpZXMuYmFja2luZ1N0b3JlLT5kaXNwbGF5KCkpCi0gICAgICAgIG1f
cHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b246OkJhY2tpbmdTdG9yZUNoYW5nZWQpOwotCi0gICAgaWYgKG1fcHJvcGVydGllcy5jaGFuZ2Vk
UHJvcGVydGllcyAhPSBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Tm9DaGFuZ2UpIHsKLSAg
ICAgICAgaWYgKG1fcHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uOjpDaGlsZHJlbkNoYW5nZWQpIHsKLSAgICAgICAgICAgIG1fcHJvcGVydGll
cy5jaGlsZHJlbi5yZXNpemUobV9jaGlsZHJlbi5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAg
IG1fcHJvcGVydGllcy5jaGlsZHJlbltpXSA9IG1fY2hpbGRyZW5baV0tPmxheWVySUQoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChpc1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbSgpKSB7
Ci0gICAgICAgICAgICBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXI6OmFwcGx5UHJvcGVy
dGllcyhwbGF0Zm9ybUxheWVyKCksIG51bGxwdHIsIG1fcHJvcGVydGllcywgUmVtb3RlTGF5ZXJU
cmVlUHJvcGVydHlBcHBsaWVyOjpSZWxhdGVkTGF5ZXJNYXAoKSwgUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmU6OkxheWVyQ29udGVudHNUeXBlOjpDQU1hY2hQb3J0KTsKLSAgICAgICAgICAgIGRpZENv
bW1pdCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJhbnNh
Y3Rpb24ubGF5ZXJQcm9wZXJ0aWVzQ2hhbmdlZCgqdGhpcyk7Ci0gICAgfQotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFBsYXRm
b3JtQ0FMYXllclJlbW90ZSYgY2hpbGQgPSBkb3duY2FzdDxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+
KCptX2NoaWxkcmVuW2ldKTsKLSAgICAgICAgQVNTRVJUKGNoaWxkLnN1cGVybGF5ZXIoKSA9PSB0
aGlzKTsKLSAgICAgICAgY2hpbGQucmVjdXJzaXZlQnVpbGRUcmFuc2FjdGlvbihjb250ZXh0LCB0
cmFuc2FjdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKG1fbWFza0xheWVyKQotICAgICAgICBtX21h
c2tMYXllci0+cmVjdXJzaXZlQnVpbGRUcmFuc2FjdGlvbihjb250ZXh0LCB0cmFuc2FjdGlvbik7
Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpkaWRDb21taXQoKQotewotICAgIG1f
cHJvcGVydGllcy5hZGRlZEFuaW1hdGlvbnMuY2xlYXIoKTsKLSAgICBtX3Byb3BlcnRpZXMua2V5
UGF0aHNPZkFuaW1hdGlvbnNUb1JlbW92ZS5jbGVhcigpOwotICAgIG1fcHJvcGVydGllcy5yZXNl
dENoYW5nZWRQcm9wZXJ0aWVzKCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpl
bnN1cmVCYWNraW5nU3RvcmUoKQotewotICAgIEFTU0VSVChvd25lcigpKTsKLSAgICAKLSAgICBp
ZiAoIW1fcHJvcGVydGllcy5iYWNraW5nU3RvcmUpCi0gICAgICAgIG1fcHJvcGVydGllcy5iYWNr
aW5nU3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbW90ZUxheWVyQmFja2luZ1N0b3JlPih0aGlz
KTsKLQotICAgIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXll
clJlbW90ZTo6dXBkYXRlQmFja2luZ1N0b3JlKCkKLXsKLSAgICBpZiAoIW1fcHJvcGVydGllcy5i
YWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJvcGVydGllcy5iYWNraW5n
U3RvcmUtPmVuc3VyZUJhY2tpbmdTdG9yZShtX3Byb3BlcnRpZXMuYm91bmRzLnNpemUoKSwgbV9w
cm9wZXJ0aWVzLmNvbnRlbnRzU2NhbGUsIG1fYWNjZWxlcmF0ZXNEcmF3aW5nLCBtX3dhbnRzRGVl
cENvbG9yQmFja2luZ1N0b3JlLCBtX3Byb3BlcnRpZXMub3BhcXVlKTsKLX0KLQotdm9pZCBQbGF0
Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgZW5zdXJlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICAvLyBGSVhNRTogTmVl
ZCB0byBtYXAgdGhpcyB0aHJvdWdoIGNvbnRlbnRzUmVjdC9ldGMuCi0gICAgbV9wcm9wZXJ0aWVz
LmJhY2tpbmdTdG9yZS0+c2V0TmVlZHNEaXNwbGF5KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOwot
fQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAg
ICBlbnN1cmVCYWNraW5nU3RvcmUoKTsKLQotICAgIG1fcHJvcGVydGllcy5iYWNraW5nU3RvcmUt
PnNldE5lZWRzRGlzcGxheSgpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y29w
eUNvbnRlbnRzRnJvbUxheWVyKFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCi17Ci0gICAgQVNTRVJU
KG1fcHJvcGVydGllcy5jbG9uZWRMYXllcklEID09IGxheWVyLT5sYXllcklEKCkpOwotICAgIAot
ICAgIGlmICghbV9wcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzKQotICAgICAgICBtX2NvbnRl
eHQtPmxheWVyUHJvcGVydHlDaGFuZ2VkV2hpbGVCdWlsZGluZ1RyYW5zYWN0aW9uKCp0aGlzKTsK
LQotICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb246OkNsb25lZENvbnRlbnRzQ2hhbmdlZCk7Ci19Ci0KLVBsYXRmb3JtQ0FMYXll
ciogUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzdXBlcmxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9zdXBlcmxheWVyOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6cmVtb3Zl
RnJvbVN1cGVybGF5ZXIoKQotewotICAgIGlmICghbV9zdXBlcmxheWVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3N1cGVybGF5ZXItPnJlbW92ZVN1YmxheWVyKHRoaXMpOwotfQotCi12b2lk
IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6cmVtb3ZlU3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyUmVt
b3RlKiBsYXllcikKLXsKLSAgICBzaXplX3QgY2hpbGRJbmRleCA9IG1fY2hpbGRyZW4uZmluZChs
YXllcik7Ci0gICAgaWYgKGNoaWxkSW5kZXggIT0gbm90Rm91bmQpCi0gICAgICAgIG1fY2hpbGRy
ZW4ucmVtb3ZlKGNoaWxkSW5kZXgpOwotICAgIGxheWVyLT5tX3N1cGVybGF5ZXIgPSBudWxscHRy
OwotICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb246OkNoaWxkcmVuQ2hhbmdlZCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVy
UmVtb3RlOjpzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCYgbGlzdCkKLXsK
LSAgICByZW1vdmVBbGxTdWJsYXllcnMoKTsKLSAgICBtX2NoaWxkcmVuID0gbGlzdDsKLQotICAg
IGZvciAoY29uc3QgYXV0byYgbGF5ZXIgOiBsaXN0KSB7Ci0gICAgICAgIGxheWVyLT5yZW1vdmVG
cm9tU3VwZXJsYXllcigpOwotICAgICAgICBkb3duY2FzdDxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+
KCpsYXllcikubV9zdXBlcmxheWVyID0gdGhpczsKLSAgICB9Ci0KLSAgICBtX3Byb3BlcnRpZXMu
bm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpDaGlsZHJl
bkNoYW5nZWQpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6cmVtb3ZlQWxsU3Vi
bGF5ZXJzKCkKLXsKLSAgICBQbGF0Zm9ybUNBTGF5ZXJMaXN0IGxheWVyc1RvUmVtb3ZlID0gbV9j
aGlsZHJlbjsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGxheWVyIDogbGF5ZXJzVG9SZW1vdmUpCi0g
ICAgICAgIGxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwotICAgIEFTU0VSVChtX2NoaWxk
cmVuLmlzRW1wdHkoKSk7Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q2hpbGRyZW5DaGFuZ2VkKTsKLX0KLQotdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFwcGVuZFN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciYgbGF5
ZXIpCi17Ci0gICAgUmVmPFBsYXRmb3JtQ0FMYXllcj4gbGF5ZXJQcm90ZWN0b3IobGF5ZXIpOwot
Ci0gICAgbGF5ZXIucmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLSAgICBtX2NoaWxkcmVuLmFwcGVu
ZCgmbGF5ZXIpOwotICAgIGRvd25jYXN0PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4obGF5ZXIpLm1f
c3VwZXJsYXllciA9IHRoaXM7Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdl
ZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q2hpbGRyZW5DaGFuZ2VkKTsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6Omluc2VydFN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciYg
bGF5ZXIsIHNpemVfdCBpbmRleCkKLXsKLSAgICBSZWY8UGxhdGZvcm1DQUxheWVyPiBsYXllclBy
b3RlY3RvcihsYXllcik7Ci0KLSAgICBsYXllci5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwotICAg
IG1fY2hpbGRyZW4uaW5zZXJ0KGluZGV4LCAmbGF5ZXIpOwotICAgIGRvd25jYXN0PFBsYXRmb3Jt
Q0FMYXllclJlbW90ZT4obGF5ZXIpLm1fc3VwZXJsYXllciA9IHRoaXM7Ci0gICAgbV9wcm9wZXJ0
aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q2hp
bGRyZW5DaGFuZ2VkKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnJlcGxhY2VT
dWJsYXllcihQbGF0Zm9ybUNBTGF5ZXImIHJlZmVyZW5jZSwgUGxhdGZvcm1DQUxheWVyJiBsYXll
cikKLXsKLSAgICBBU1NFUlQocmVmZXJlbmNlLnN1cGVybGF5ZXIoKSA9PSB0aGlzKTsKLSAgICBS
ZWY8UGxhdGZvcm1DQUxheWVyPiBsYXllclByb3RlY3RvcihsYXllcik7Ci0KLSAgICBsYXllci5y
ZW1vdmVGcm9tU3VwZXJsYXllcigpOwotICAgIHNpemVfdCByZWZlcmVuY2VJbmRleCA9IG1fY2hp
bGRyZW4uZmluZCgmcmVmZXJlbmNlKTsKLSAgICBpZiAocmVmZXJlbmNlSW5kZXggIT0gbm90Rm91
bmQpIHsKLSAgICAgICAgbV9jaGlsZHJlbltyZWZlcmVuY2VJbmRleF0tPnJlbW92ZUZyb21TdXBl
cmxheWVyKCk7Ci0gICAgICAgIG1fY2hpbGRyZW4uaW5zZXJ0KHJlZmVyZW5jZUluZGV4LCAmbGF5
ZXIpOwotICAgICAgICBkb3duY2FzdDxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+KGxheWVyKS5tX3N1
cGVybGF5ZXIgPSB0aGlzOwotICAgIH0KLQotICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGll
c0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNoaWxkcmVuQ2hhbmdlZCk7Ci19
Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjphZG9wdFN1YmxheWVycyhQbGF0Zm9ybUNB
TGF5ZXImIHNvdXJjZSkKLXsKLSAgICBQbGF0Zm9ybUNBTGF5ZXJMaXN0IGxheWVyc1RvTW92ZSA9
IGRvd25jYXN0PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4oc291cmNlKS5tX2NoaWxkcmVuOwotCi0g
ICAgaWYgKGNvbnN0IFBsYXRmb3JtQ0FMYXllckxpc3QqIGN1c3RvbUxheWVycyA9IHNvdXJjZS5j
dXN0b21TdWJsYXllcnMoKSkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGxheWVyIDogKmN1
c3RvbUxheWVycykgewotICAgICAgICAgICAgc2l6ZV90IGxheWVySW5kZXggPSBsYXllcnNUb01v
dmUuZmluZChsYXllcik7Ci0gICAgICAgICAgICBpZiAobGF5ZXJJbmRleCAhPSBub3RGb3VuZCkK
LSAgICAgICAgICAgICAgICBsYXllcnNUb01vdmUucmVtb3ZlKGxheWVySW5kZXgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgc2V0U3VibGF5ZXJzKGxheWVyc1RvTW92ZSk7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1DQUxheWVyUmVtb3RlOjphZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBr
ZXksIFBsYXRmb3JtQ0FBbmltYXRpb24mIGFuaW1hdGlvbikKLXsKLSAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fYW5pbWF0aW9ucy5zZXQoa2V5LCAmYW5pbWF0aW9uKTsKLSAgICBpZiAoYWRkUmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIG1fcHJvcGVydGllcy5hZGRlZEFuaW1hdGlvbnMuYXBwZW5k
KHN0ZDo6cGFpcjxTdHJpbmcsIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXM+
KGtleSwgZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZT4oYW5pbWF0aW9uKS5wcm9w
ZXJ0aWVzKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXlBbmltYXRpb25Q
YWlyIDogbV9wcm9wZXJ0aWVzLmFkZGVkQW5pbWF0aW9ucykgewotICAgICAgICAgICAgaWYgKGtl
eUFuaW1hdGlvblBhaXIuZmlyc3QgPT0ga2V5KSB7Ci0gICAgICAgICAgICAgICAga2V5QW5pbWF0
aW9uUGFpci5zZWNvbmQgPSBkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlPihhbmlt
YXRpb24pLnByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRp
ZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpBbmltYXRpb25zQ2hhbmdlZCk7
Ci0KLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2NvbnRleHQtPndpbGxTdGFydEFuaW1h
dGlvbk9uTGF5ZXIoKnRoaXMpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6cmVt
b3ZlQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KQotewotICAgIGlmIChtX2FuaW1h
dGlvbnMucmVtb3ZlKGtleSkpIHsKLSAgICAgICAgbV9wcm9wZXJ0aWVzLmFkZGVkQW5pbWF0aW9u
cy5yZW1vdmVGaXJzdE1hdGNoaW5nKFsma2V5XShhdXRvJiBwYWlyKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gcGFpci5maXJzdCA9PSBrZXk7Ci0gICAgICAgIH0pOwotICAgIH0KLSAgICBtX3Byb3Bl
cnRpZXMua2V5UGF0aHNPZkFuaW1hdGlvbnNUb1JlbW92ZS5hZGQoa2V5KTsKLSAgICBtX3Byb3Bl
cnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpB
bmltYXRpb25zQ2hhbmdlZCk7Ci19Ci0KLVJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0
Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKLXsK
LSAgICByZXR1cm4gbV9hbmltYXRpb25zLmdldChrZXkpOwotfQotCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNFcXVpdmFsZW50TGF5ZXIoY29uc3QgUGxhdGZvcm1DQUxheWVyKiBsYXllciwgR3JhcGhp
Y3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6
UGxhdGZvcm1MYXllcklEIG5ld0xheWVySUQgPSBsYXllciA/IGxheWVyLT5sYXllcklEKCkgOiAw
OwotICAgIHJldHVybiBsYXllcklEID09IG5ld0xheWVySUQ7Ci19Ci0KLXZvaWQgUGxhdGZvcm1D
QUxheWVyUmVtb3RlOjphbmltYXRpb25TdGFydGVkKGNvbnN0IFN0cmluZyYga2V5LCBDRlRpbWVJ
bnRlcnZhbCBiZWdpblRpbWUpCi17Ci0gICAgYXV0byBpdCA9IG1fYW5pbWF0aW9ucy5maW5kKGtl
eSk7Ci0gICAgaWYgKGl0ICE9IG1fYW5pbWF0aW9ucy5lbmQoKSkKLSAgICAgICAgZG93bmNhc3Q8
UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZT4oKml0LT52YWx1ZSkuZGlkU3RhcnQoYmVnaW5UaW1l
KTsKLSAgICAKLSAgICBpZiAobV9vd25lcikKLSAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxh
eWVyQW5pbWF0aW9uU3RhcnRlZChrZXksIGJlZ2luVGltZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1D
QUxheWVyUmVtb3RlOjphbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBp
ZiAobV9vd25lcikKLSAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uRW5k
ZWQoa2V5KTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldE1hc2soUGxhdGZv
cm1DQUxheWVyKiBsYXllcikKLXsKLSAgICBpZiAoaXNFcXVpdmFsZW50TGF5ZXIobGF5ZXIsIG1f
cHJvcGVydGllcy5tYXNrTGF5ZXJJRCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAo
bGF5ZXIpIHsKLSAgICAgICAgbV9tYXNrTGF5ZXIgPSBkb3duY2FzdDxQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGU+KGxheWVyKTsKLSAgICAgICAgbV9wcm9wZXJ0aWVzLm1hc2tMYXllcklEID0gbV9tYXNr
TGF5ZXItPmxheWVySUQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX21hc2tMYXllciA9IG51
bGxwdHI7Ci0gICAgICAgIG1fcHJvcGVydGllcy5tYXNrTGF5ZXJJRCA9IDA7Ci0gICAgfQotCi0g
ICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbjo6TWFza0xheWVyQ2hhbmdlZCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyUmVt
b3RlOjpzZXRDbG9uZWRMYXllcihjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyKQotewotICAg
IGlmIChpc0VxdWl2YWxlbnRMYXllcihsYXllciwgbV9wcm9wZXJ0aWVzLmNsb25lZExheWVySUQp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobGF5ZXIpCi0gICAgICAgIG1fcHJvcGVydGll
cy5jbG9uZWRMYXllcklEID0gbGF5ZXItPmxheWVySUQoKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
cHJvcGVydGllcy5jbG9uZWRMYXllcklEID0gMDsKLQotICAgIG1fcHJvcGVydGllcy5ub3RlUHJv
cGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNsb25lZENvbnRlbnRz
Q2hhbmdlZCk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjppc09wYXF1ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvcGVydGllcy5vcGFxdWU7Ci19Ci0KLXZvaWQgUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpzZXRPcGFxdWUoYm9vbCB2YWx1ZSkKLXsKLSAgICBtX3Byb3BlcnRp
ZXMub3BhcXVlID0gdmFsdWU7Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdl
ZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6T3BhcXVlQ2hhbmdlZCk7Ci0KLSAgICB1cGRh
dGVCYWNraW5nU3RvcmUoKTsKLX0KLQotRmxvYXRSZWN0IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6
Ym91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmJvdW5kczsKLX0KLQot
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSA9PSBtX3Byb3BlcnRpZXMuYm91bmRzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3Byb3BlcnRpZXMuYm91bmRzID0gdmFsdWU7Ci0gICAgbV9wcm9wZXJ0
aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Qm91
bmRzQ2hhbmdlZCk7Ci0gICAgCi0gICAgaWYgKHJlcXVpcmVzQ3VzdG9tQXBwZWFyYW5jZVVwZGF0
ZU9uQm91bmRzQ2hhbmdlKCkpCi0gICAgICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0No
YW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkN1c3RvbUFwcGVhcmFuY2VDaGFuZ2Vk
KTsKLQotICAgIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotfQotCi1GbG9hdFBvaW50M0QgUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpwb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvcGVy
dGllcy5wb3NpdGlvbjsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldFBvc2l0
aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCi17Ci0gICAgLy8gV2UgY2FuJ3QgZWFybHkg
cmV0dXJuIGhlcmUgaWYgdGhlIHBvc2l0aW9uIGhhcyBub3QgY2hhbmdlZCwgc2luY2UgR3JhcGhp
Y3NMYXllckNBOjpzeW5jUG9zaXRpb24oKSBtYXkgaGF2ZSBjaGFuZ2VkCi0gICAgLy8gdGhlIEdy
YXBoaWNzTGF5ZXIgcG9zaXRpb24gKHdoaWNoIGRvZXNuJ3QgZm9yY2UgYSBnZW9tZXRyeSB1cGRh
dGUpIGJ1dCB3ZSB3YW50IGEgc3Vic2VxdWVudCBHcmFwaGljc0xheWVyQ0E6OnNldFBvc2l0aW9u
KCkKLSAgICAvLyB0byBwdXNoIGEgbmV3IHBvc2l0aW9uIHRvIHRoZSBVSSBwcm9jZXNzLCBldmVu
IHRob3VnaCBvdXIgbV9wcm9wZXJ0aWVzLnBvc2l0aW9uIGhhc24ndCBjaGFuZ2VkLgotICAgIG1f
cHJvcGVydGllcy5wb3NpdGlvbiA9IHZhbHVlOwotICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVy
dGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlBvc2l0aW9uQ2hhbmdlZCk7
Ci19Ci0KLUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuY2hvclBvaW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmFuY2hvclBvaW50OwotfQotCi12b2lk
IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNE
JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gbV9wcm9wZXJ0aWVzLmFuY2hvclBvaW50KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Byb3BlcnRpZXMuYW5jaG9yUG9pbnQgPSB2YWx1ZTsK
LSAgICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uOjpBbmNob3JQb2ludENoYW5nZWQpOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJp
eCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcHJvcGVydGllcy50cmFuc2Zvcm0gPyAqbV9wcm9wZXJ0aWVzLnRyYW5zZm9ybSA6IFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRU
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQotewotICAgIG1fcHJv
cGVydGllcy50cmFuc2Zvcm0gPSBzdGQ6Om1ha2VfdW5pcXVlPFRyYW5zZm9ybWF0aW9uTWF0cml4
Pih2YWx1ZSk7Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbjo6VHJhbnNmb3JtQ2hhbmdlZCk7Ci19Ci0KLVRyYW5zZm9ybWF0
aW9uTWF0cml4IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25z
dAotewotICAgIHJldHVybiBtX3Byb3BlcnRpZXMuc3VibGF5ZXJUcmFuc2Zvcm0gPyAqbV9wcm9w
ZXJ0aWVzLnN1YmxheWVyVHJhbnNmb3JtIDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKLX0KLQot
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKLXsKLSAgICBtX3Byb3BlcnRpZXMuc3VibGF5ZXJU
cmFuc2Zvcm0gPSBzdGQ6Om1ha2VfdW5pcXVlPFRyYW5zZm9ybWF0aW9uTWF0cml4Pih2YWx1ZSk7
Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6U3VibGF5ZXJUcmFuc2Zvcm1DaGFuZ2VkKTsKLX0KLQotYm9vbCBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGU6OmlzSGlkZGVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0
aWVzLmhpZGRlbjsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldEhpZGRlbihi
b29sIHZhbHVlKQotewotICAgIGlmIChtX3Byb3BlcnRpZXMuaGlkZGVuID09IHZhbHVlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3Byb3BlcnRpZXMuaGlkZGVuID0gdmFsdWU7Ci0gICAgbV9w
cm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
bjo6SGlkZGVuQ2hhbmdlZCk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjb250
ZW50c0hpZGRlbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvcGVydGllcy5jb250ZW50c0hp
ZGRlbjsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldENvbnRlbnRzSGlkZGVu
KGJvb2wgdmFsdWUpCi17Ci0gICAgaWYgKG1fcHJvcGVydGllcy5jb250ZW50c0hpZGRlbiA9PSB2
YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcm9wZXJ0aWVzLmNvbnRlbnRzSGlkZGVu
ID0gdmFsdWU7Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbjo6Q29udGVudHNIaWRkZW5DaGFuZ2VkKTsKLX0KLQotYm9vbCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnVzZXJJbnRlcmFjdGlvbkVuYWJsZWQoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3Byb3BlcnRpZXMudXNlckludGVyYWN0aW9uRW5hYmxlZDsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldFVzZXJJbnRlcmFjdGlvbkVuYWJsZWQoYm9vbCB2
YWx1ZSkKLXsKLSAgICBpZiAobV9wcm9wZXJ0aWVzLnVzZXJJbnRlcmFjdGlvbkVuYWJsZWQgPT0g
dmFsdWUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX3Byb3BlcnRpZXMudXNlckludGVy
YWN0aW9uRW5hYmxlZCA9IHZhbHVlOwotICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0No
YW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlVzZXJJbnRlcmFjdGlvbkVuYWJsZWRD
aGFuZ2VkKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldEJhY2tpbmdTdG9y
ZUF0dGFjaGVkKGJvb2wgdmFsdWUpCi17Ci0gICAgaWYgKG1fcHJvcGVydGllcy5iYWNraW5nU3Rv
cmVBdHRhY2hlZCA9PSB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcm9wZXJ0aWVz
LmJhY2tpbmdTdG9yZUF0dGFjaGVkID0gdmFsdWU7Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9w
ZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6QmFja2luZ1N0b3JlQXR0
YWNobWVudENoYW5nZWQpOwotfQotCi1ib29sIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6YmFja2lu
Z1N0b3JlQXR0YWNoZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX3Byb3BlcnRpZXMuYmFja2lu
Z1N0b3JlQXR0YWNoZWQ7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRHZW9t
ZXRyeUZsaXBwZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBtX3Byb3BlcnRpZXMuZ2VvbWV0cnlGbGlw
cGVkID0gdmFsdWU7Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbjo6R2VvbWV0cnlGbGlwcGVkQ2hhbmdlZCk7Ci19Ci0KLWJv
b2wgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpnZW9tZXRyeUZsaXBwZWQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3Byb3BlcnRpZXMuZ2VvbWV0cnlGbGlwcGVkOwotfQotCi1ib29sIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZTo6aXNEb3VibGVTaWRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJv
cGVydGllcy5kb3VibGVTaWRlZDsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNl
dERvdWJsZVNpZGVkKGJvb2wgdmFsdWUpCi17Ci0gICAgbV9wcm9wZXJ0aWVzLmRvdWJsZVNpZGVk
ID0gdmFsdWU7Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbjo6RG91YmxlU2lkZWRDaGFuZ2VkKTsKLX0KLQotYm9vbCBQbGF0
Zm9ybUNBTGF5ZXJSZW1vdGU6Om1hc2tzVG9Cb3VuZHMoKSBjb25zdAotewotICAgIHJldHVybiBt
X3Byb3BlcnRpZXMubWFza3NUb0JvdW5kczsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGU6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gbV9w
cm9wZXJ0aWVzLm1hc2tzVG9Cb3VuZHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJvcGVy
dGllcy5tYXNrc1RvQm91bmRzID0gdmFsdWU7Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0
aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TWFza3NUb0JvdW5kc0NoYW5n
ZWQpOwotfQotCi1ib29sIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6YWNjZWxlcmF0ZXNEcmF3aW5n
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hY2NlbGVyYXRlc0RyYXdpbmc7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVy
YXRlc0RyYXdpbmcpCi17Ci0gICAgbV9hY2NlbGVyYXRlc0RyYXdpbmcgPSBhY2NlbGVyYXRlc0Ry
YXdpbmc7Ci0gICAgdXBkYXRlQmFja2luZ1N0b3JlKCk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1DQUxh
eWVyUmVtb3RlOjp3YW50c0RlZXBDb2xvckJhY2tpbmdTdG9yZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fd2FudHNEZWVwQ29sb3JCYWNraW5nU3RvcmU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxh
eWVyUmVtb3RlOjpzZXRXYW50c0RlZXBDb2xvckJhY2tpbmdTdG9yZShib29sIHdhbnRzRGVlcENv
bG9yQmFja2luZ1N0b3JlKQotewotICAgIG1fd2FudHNEZWVwQ29sb3JCYWNraW5nU3RvcmUgPSB3
YW50c0RlZXBDb2xvckJhY2tpbmdTdG9yZTsKLSAgICB1cGRhdGVCYWNraW5nU3RvcmUoKTsKLX0K
LQotYm9vbCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnN1cHBvcnRzU3VicGl4ZWxBbnRpYWxpYXNl
ZFRleHQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGU6OnNldFN1cHBvcnRzU3VicGl4ZWxBbnRpYWxpYXNlZFRleHQoYm9vbCkKLXsK
LX0KLQotQ0ZUeXBlUmVmIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y29udGVudHMoKSBjb25zdAot
ewotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6
c2V0Q29udGVudHMoQ0ZUeXBlUmVmIHZhbHVlKQotewotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXll
clJlbW90ZTo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCi17Ci0gICAg
bV9wcm9wZXJ0aWVzLmNvbnRlbnRzUmVjdCA9IHZhbHVlOwotICAgIG1fcHJvcGVydGllcy5ub3Rl
UHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNvbnRlbnRzUmVj
dENoYW5nZWQpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0TWluaWZpY2F0
aW9uRmlsdGVyKEZpbHRlclR5cGUgdmFsdWUpCi17Ci0gICAgbV9wcm9wZXJ0aWVzLm1pbmlmaWNh
dGlvbkZpbHRlciA9IHZhbHVlOwotICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5n
ZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246Ok1pbmlmaWNhdGlvbkZpbHRlckNoYW5nZWQp
OwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0TWFnbmlmaWNhdGlvbkZpbHRl
cihGaWx0ZXJUeXBlIHZhbHVlKQotewotICAgIG1fcHJvcGVydGllcy5tYWduaWZpY2F0aW9uRmls
dGVyID0gdmFsdWU7Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TWFnbmlmaWNhdGlvbkZpbHRlckNoYW5nZWQpOwotfQot
Ci1Db2xvciBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcHJvcGVydGllcy5iYWNrZ3JvdW5kQ29sb3I7Ci19Ci0KLXZvaWQgUGxh
dGZvcm1DQUxheWVyUmVtb3RlOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVl
KQotewotICAgIG1fcHJvcGVydGllcy5iYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZTsKLSAgICBtX3By
b3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
OjpCYWNrZ3JvdW5kQ29sb3JDaGFuZ2VkKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGU6OnNldEJvcmRlcldpZHRoKGZsb2F0IHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSBtX3By
b3BlcnRpZXMuYm9yZGVyV2lkdGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJvcGVydGll
cy5ib3JkZXJXaWR0aCA9IHZhbHVlOwotICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0No
YW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkJvcmRlcldpZHRoQ2hhbmdlZCk7Ci19
Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xv
ciYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09IG1fcHJvcGVydGllcy5ib3JkZXJDb2xvcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcm9wZXJ0aWVzLmJvcmRlckNvbG9yID0gdmFsdWU7
Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6Qm9yZGVyQ29sb3JDaGFuZ2VkKTsKLX0KLQotZmxvYXQgUGxhdGZvcm1DQUxh
eWVyUmVtb3RlOjpvcGFjaXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLm9w
YWNpdHk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRPcGFjaXR5KGZsb2F0
IHZhbHVlKQotewotICAgIG1fcHJvcGVydGllcy5vcGFjaXR5ID0gdmFsdWU7Ci0gICAgbV9wcm9w
ZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6
T3BhY2l0eUNoYW5nZWQpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0Rmls
dGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIG1fcHJvcGVydGll
cy5maWx0ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJPcGVyYXRpb25zPihmaWx0ZXJzKTsK
LSAgICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uOjpGaWx0ZXJzQ2hhbmdlZCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyUmVt
b3RlOjpjb3B5RmlsdGVyc0Zyb20oY29uc3QgUGxhdGZvcm1DQUxheWVyJiBzb3VyY2VMYXllcikK
LXsKLSAgICBpZiAoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyogZmlsdGVycyA9IGRvd25jYXN0PFBs
YXRmb3JtQ0FMYXllclJlbW90ZT4oc291cmNlTGF5ZXIpLm1fcHJvcGVydGllcy5maWx0ZXJzLmdl
dCgpKQotICAgICAgICBzZXRGaWx0ZXJzKCpmaWx0ZXJzKTsKLSAgICBlbHNlIGlmIChtX3Byb3Bl
cnRpZXMuZmlsdGVycykKLSAgICAgICAgbV9wcm9wZXJ0aWVzLmZpbHRlcnMgPSBudWxscHRyOwot
Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6RmlsdGVyc0NoYW5nZWQpOwotfQotCi0jaWYgRU5BQkxFKENTU19DT01QT1NJ
VElORykKLXZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKLXsKLSAgICBtX3Byb3BlcnRpZXMuYmxlbmRNb2RlID0gYmxlbmRNb2RlOwot
ICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb246OkJsZW5kTW9kZUNoYW5nZWQpOwotfQotI2VuZGlmCi0KLWJvb2wgUGxhdGZvcm1D
QUxheWVyUmVtb3RlOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllckNvY29hOjpmaWx0ZXJz
Q2FuQmVDb21wb3NpdGVkKGZpbHRlcnMpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90
ZTo6c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIG1fcHJvcGVydGllcy5uYW1l
ID0gdmFsdWU7Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbjo6TmFtZUNoYW5nZWQpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FM
YXllclJlbW90ZTo6c2V0U3BlZWQoZmxvYXQgdmFsdWUpCi17Ci0gICAgbV9wcm9wZXJ0aWVzLnNw
ZWVkID0gdmFsdWU7Ci0gICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbjo6U3BlZWRDaGFuZ2VkKTsKLX0KLQotdm9pZCBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGU6OnNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwgdmFsdWUpCi17Ci0g
ICAgbV9wcm9wZXJ0aWVzLnRpbWVPZmZzZXQgPSB2YWx1ZTsKLSAgICBtX3Byb3BlcnRpZXMubm90
ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpUaW1lT2Zmc2V0
Q2hhbmdlZCk7Ci19Ci0KLWZsb2F0IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y29udGVudHNTY2Fs
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvcGVydGllcy5jb250ZW50c1NjYWxlOwotfQot
Ci12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0Q29udGVudHNTY2FsZShmbG9hdCB2YWx1
ZSkKLXsKLSAgICBtX3Byb3BlcnRpZXMuY29udGVudHNTY2FsZSA9IHZhbHVlOwotICAgIG1fcHJv
cGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OkNvbnRlbnRzU2NhbGVDaGFuZ2VkKTsKLQotICAgIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotfQot
Ci1mbG9hdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNvcm5lclJhZGl1cygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcHJvcGVydGllcy5jb3JuZXJSYWRpdXM7Ci19Ci0KLXZvaWQgUGxhdGZvcm1D
QUxheWVyUmVtb3RlOjpzZXRDb3JuZXJSYWRpdXMoZmxvYXQgdmFsdWUpCi17Ci0gICAgaWYgKG1f
cHJvcGVydGllcy5jb3JuZXJSYWRpdXMgPT0gdmFsdWUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fcHJvcGVydGllcy5jb3JuZXJSYWRpdXMgPSB2YWx1ZTsKLSAgICBtX3Byb3BlcnRpZXMubm90
ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpDb3JuZXJSYWRp
dXNDaGFuZ2VkKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldEVkZ2VBbnRp
YWxpYXNpbmdNYXNrKHVuc2lnbmVkIHZhbHVlKQotewotICAgIG1fcHJvcGVydGllcy5lZGdlQW50
aWFsaWFzaW5nTWFzayA9IHZhbHVlOwotICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0No
YW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkVkZ2VBbnRpYWxpYXNpbmdNYXNrQ2hh
bmdlZCk7Ci19Ci0KLUZsb2F0Um91bmRlZFJlY3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzaGFw
ZVJvdW5kZWRSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLnNoYXBlUm91
bmRlZFJlY3QgPyAqbV9wcm9wZXJ0aWVzLnNoYXBlUm91bmRlZFJlY3QgOiBGbG9hdFJvdW5kZWRS
ZWN0KEZsb2F0UmVjdCgpKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldFNo
YXBlUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QpCi17Ci0g
ICAgaWYgKG1fcHJvcGVydGllcy5zaGFwZVJvdW5kZWRSZWN0ICYmICptX3Byb3BlcnRpZXMuc2hh
cGVSb3VuZGVkUmVjdCA9PSByb3VuZGVkUmVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9w
cm9wZXJ0aWVzLnNoYXBlUm91bmRlZFJlY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0Um91bmRl
ZFJlY3Q+KHJvdW5kZWRSZWN0KTsKLSAgICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFu
Z2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpTaGFwZVJvdW5kZWRSZWN0Q2hhbmdlZCk7
Ci19Ci0KLVBhdGggUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzaGFwZVBhdGgoKSBjb25zdAotewot
ICAgIEFTU0VSVChtX2xheWVyVHlwZSA9PSBMYXllclR5cGVTaGFwZUxheWVyKTsKLSAgICByZXR1
cm4gbV9wcm9wZXJ0aWVzLnNoYXBlUGF0aDsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGU6OnNldFNoYXBlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIEFTU0VSVChtX2xheWVy
VHlwZSA9PSBMYXllclR5cGVTaGFwZUxheWVyKTsKLSAgICBtX3Byb3BlcnRpZXMuc2hhcGVQYXRo
ID0gcGF0aDsKLSAgICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpTaGFwZVBhdGhDaGFuZ2VkKTsKLX0KLQotV2luZFJ1bGUgUGxh
dGZvcm1DQUxheWVyUmVtb3RlOjpzaGFwZVdpbmRSdWxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
bV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlU2hhcGVMYXllcik7Ci0gICAgcmV0dXJuIG1fcHJvcGVy
dGllcy53aW5kUnVsZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldFNoYXBl
V2luZFJ1bGUoV2luZFJ1bGUgd2luZFJ1bGUpCi17Ci0gICAgQVNTRVJUKG1fbGF5ZXJUeXBlID09
IExheWVyVHlwZVNoYXBlTGF5ZXIpOwotICAgIG1fcHJvcGVydGllcy53aW5kUnVsZSA9IHdpbmRS
dWxlOwotICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb246OldpbmRSdWxlQ2hhbmdlZCk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1DQUxh
eWVyUmVtb3RlOjpyZXF1aXJlc0N1c3RvbUFwcGVhcmFuY2VVcGRhdGVPbkJvdW5kc0NoYW5nZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvcGVydGllcy5jdXN0b21BcHBlYXJhbmNlID09IEdy
YXBoaWNzTGF5ZXI6OlNjcm9sbGluZ1NoYWRvdzsKLX0KLQotR3JhcGhpY3NMYXllcjo6Q3VzdG9t
QXBwZWFyYW5jZSBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmN1c3RvbUFwcGVhcmFuY2UoKSBjb25z
dAotewotICAgIHJldHVybiBtX3Byb3BlcnRpZXMuY3VzdG9tQXBwZWFyYW5jZTsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnVwZGF0ZUN1c3RvbUFwcGVhcmFuY2UoR3JhcGhpY3NM
YXllcjo6Q3VzdG9tQXBwZWFyYW5jZSBjdXN0b21BcHBlYXJhbmNlKQotewotICAgIG1fcHJvcGVy
dGllcy5jdXN0b21BcHBlYXJhbmNlID0gY3VzdG9tQXBwZWFyYW5jZTsKLSAgICBtX3Byb3BlcnRp
ZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpDdXN0
b21BcHBlYXJhbmNlQ2hhbmdlZCk7Ci19Ci0KLVJlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3Jt
Q0FMYXllclJlbW90ZTo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGllbnQpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRlKGxheWVyVHlwZSwgY2xp
ZW50LCAqbV9jb250ZXh0KTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmVudW1l
cmF0ZVJlY3RzQmVpbmdEcmF3bihDR0NvbnRleHRSZWYgY29udGV4dCwgdm9pZCAoXmJsb2NrKShD
R1JlY3QpKQotewotICAgIG1fcHJvcGVydGllcy5iYWNraW5nU3RvcmUtPmVudW1lcmF0ZVJlY3Rz
QmVpbmdEcmF3bihjb250ZXh0LCBibG9jayk7Ci19Ci0KLXVpbnQzMl90IFBsYXRmb3JtQ0FMYXll
clJlbW90ZTo6aG9zdGluZ0NvbnRleHRJRCgpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6YmFj
a2luZ1N0b3JlQnl0ZXNQZXJQaXhlbCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3Byb3BlcnRpZXMu
YmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm4gNDsKLQotICAgIHJldHVybiBtX3Byb3BlcnRp
ZXMuYmFja2luZ1N0b3JlLT5ieXRlc1BlclBpeGVsKCk7Ci19Ci0KLUxheWVyUG9vbCYgUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpsYXllclBvb2woKQotewotICAgIHJldHVybiBtX2NvbnRleHQtPmxh
eWVyUG9vbCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1v
dGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk2MzVlZjkxZjMxOWM3MjdkZWNj
MjJjYjFhODhmYzA3NjgwMDgwZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1D
QUxheWVyUmVtb3RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Bs
YXRmb3JtQ0FMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBMYXllclBvb2w7Ci19Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jbGFzcyBSZW1vdGVMYXllclRyZWVDb250ZXh0OwotCi1jbGFzcyBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGUgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gY3JlYXRlKFdlYkNvcmU6OlBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQq
LCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7Ci0gICAgc3RhdGljIFJlZjxQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGU+IGNyZWF0ZShQbGF0Zm9ybUxheWVyICosIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXll
ckNsaWVudCosIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmKTsKLSAgICBzdGF0aWMgUmVmPFBsYXRm
b3JtQ0FMYXllclJlbW90ZT4gY3JlYXRlKGNvbnN0IFBsYXRmb3JtQ0FMYXllclJlbW90ZSYsIFdl
YkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmKTsK
LQotICAgIHZpcnR1YWwgflBsYXRmb3JtQ0FMYXllclJlbW90ZSgpOwotCi0gICAgUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0K
LQotICAgIHZvaWQgcmVjdXJzaXZlQnVpbGRUcmFuc2FjdGlvbihSZW1vdGVMYXllclRyZWVDb250
ZXh0JiwgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKTsKLQotICAgIHZvaWQgc2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGlydHlSZWN0KSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjb3B5
Q29udGVudHNGcm9tTGF5ZXIoUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGU7Ci0KLSAgICBXZWJD
b3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHN1cGVybGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
b2lkIHJlbW92ZUZyb21TdXBlcmxheWVyKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdWJsYXll
cnMoY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyTGlzdCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVtb3ZlQWxsU3VibGF5ZXJzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhcHBlbmRTdWJsYXll
cihXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXImKSBvdmVycmlkZTsKLSAgICB2b2lkIGluc2VydFN1
YmxheWVyKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciYsIHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZXBsYWNlU3VibGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyJiByZWZl
cmVuY2UsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciYpIG92ZXJyaWRlOwotICAgIGNvbnN0IFdl
YkNvcmU6OlBsYXRmb3JtQ0FMYXllckxpc3QqIGN1c3RvbVN1YmxheWVycygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2b2lkIGFkb3B0U3VibGF5ZXJzKFdlYkNvcmU6
OlBsYXRmb3JtQ0FMYXllciYgc291cmNlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRkQW5pbWF0
aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9u
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5n
JiBrZXkpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9u
PiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZvaWQg
YW5pbWF0aW9uU3RhcnRlZChjb25zdCBTdHJpbmcmIGtleSwgQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5U
aW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIGFuaW1hdGlvbkVuZGVkKGNvbnN0IFN0cmluZyYga2V5
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TWFzayhXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIq
KSBvdmVycmlkZTsKLQotICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
b2lkIHNldE9wYXF1ZShib29sKSBvdmVycmlkZTsKLQotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBi
b3VuZHMoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQzRCBwb3Np
dGlvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludDNEJikgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50M0Qg
YW5jaG9yUG9pbnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNldEFuY2hvclBvaW50KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQzRCYpIG92ZXJyaWRlOwotCi0gICAgV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRUcmFuc2Zvcm0oY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlk
ZTsKLQotICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyVHJhbnNmb3Jt
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc0hp
ZGRlbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0SGlkZGVuKGJvb2wpIG92ZXJyaWRl
OwotCi0gICAgYm9vbCBjb250ZW50c0hpZGRlbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQg
c2V0Q29udGVudHNIaWRkZW4oYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIHVzZXJJbnRlcmFj
dGlvbkVuYWJsZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNldFVzZXJJbnRlcmFjdGlv
bkVuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldEJhY2tpbmdTdG9yZUF0dGFj
aGVkKGJvb2wpIG92ZXJyaWRlOwotICAgIGJvb2wgYmFja2luZ1N0b3JlQXR0YWNoZWQoKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIGJvb2wgZ2VvbWV0cnlGbGlwcGVkKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICBib29s
IGlzRG91YmxlU2lkZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNldERvdWJsZVNpZGVk
KGJvb2wpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBtYXNrc1RvQm91bmRzKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgYm9v
bCBhY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNldEFjY2Vs
ZXJhdGVzRHJhd2luZyhib29sKSBvdmVycmlkZTsKLQotICAgIGJvb2wgd2FudHNEZWVwQ29sb3JC
YWNraW5nU3RvcmUoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNldFdhbnRzRGVlcENvbG9y
QmFja2luZ1N0b3JlKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBzdXBwb3J0c1N1YnBpeGVs
QW50aWFsaWFzZWRUZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdXBwb3J0c1N1
YnBpeGVsQW50aWFsaWFzZWRUZXh0KGJvb2wpIG92ZXJyaWRlOwotCi0gICAgQ0ZUeXBlUmVmIGNv
bnRlbnRzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDb250ZW50cyhDRlR5cGVSZWYp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldE1pbmlmaWNhdGlvbkZpbHRlcihXZWJD
b3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OkZpbHRlclR5cGUpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
TWFnbmlmaWNhdGlvbkZpbHRlcihXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OkZpbHRlclR5cGUp
IG92ZXJyaWRlOwotCi0gICAgV2ViQ29yZTo6Q29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29s
b3ImKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpIG92ZXJyaWRl
OwotICAgIHZvaWQgc2V0Qm9yZGVyQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlk
ZTsKLQotICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNldE9w
YWNpdHkoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IFdlYkNv
cmU6OkZpbHRlck9wZXJhdGlvbnMmKSBvdmVycmlkZTsKLSAgICBzdGF0aWMgYm9vbCBmaWx0ZXJz
Q2FuQmVDb21wb3NpdGVkKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKLSAgICB2
b2lkIGNvcHlGaWx0ZXJzRnJvbShjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXImKSBvdmVy
cmlkZTsKLQotI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCi0gICAgdm9pZCBzZXRCbGVuZE1v
ZGUoV2ViQ29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXRO
YW1lKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRTcGVlZChmbG9hdCkg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldFRpbWVPZmZzZXQoQ0ZUaW1lSW50ZXJ2YWwpIG92ZXJy
aWRlOwotCi0gICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBjb3JuZXJS
YWRpdXMoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNldENvcm5lclJhZGl1cyhmbG9hdCkg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrKHVuc2lnbmVkKSBv
dmVycmlkZTsKLQotICAgIC8vIEZJWE1FOiBIYXZpbmcgYm90aCBzaGFwZVJvdW5kZWRSZWN0IGFu
ZCBzaGFwZVBhdGggaXMgcmVkdW5kYW50LiBXZSBjb3VsZCB1c2Ugc2hhcGVQYXRoIGZvciBldmVy
eXRoaW5nLgotICAgIFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Qgc2hhcGVSb3VuZGVkUmVjdCgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U2hhcGVSb3VuZGVkUmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJvdW5kZWRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpQYXRoIHNo
YXBlUGF0aCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U2hhcGVQYXRoKGNvbnN0IFdl
YkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKLQotICAgIFdlYkNvcmU6OldpbmRSdWxlIHNoYXBlV2lu
ZFJ1bGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNoYXBlV2luZFJ1bGUoV2ViQ29y
ZTo6V2luZFJ1bGUpIG92ZXJyaWRlOwotCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q3Vz
dG9tQXBwZWFyYW5jZSBjdXN0b21BcHBlYXJhbmNlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB1cGRhdGVDdXN0b21BcHBlYXJhbmNlKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkN1c3RvbUFw
cGVhcmFuY2UpIG92ZXJyaWRlOwotCi0gICAgV2ViQ29yZTo6VGlsZWRCYWNraW5nKiB0aWxlZEJh
Y2tpbmcoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9Ci0KLSAgICBSZWY8V2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyPiBjbG9uZShXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93
bmVyKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNv
bXBhdGlibGVMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGVu
dW1lcmF0ZVJlY3RzQmVpbmdEcmF3bihDR0NvbnRleHRSZWYsIHZvaWQgKF5ibG9jaykoQ0dSZWN0
KSkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHVpbnQzMl90IGhvc3RpbmdDb250ZXh0SUQoKTsK
LQotICAgIHVuc2lnbmVkIGJhY2tpbmdTdG9yZUJ5dGVzUGVyUGl4ZWwoKSBjb25zdCBvdmVycmlk
ZTsKLQotICAgIHZvaWQgc2V0Q2xvbmVkTGF5ZXIoY29uc3QgUGxhdGZvcm1DQUxheWVyKik7Ci0K
LSAgICBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzJiBwcm9wZXJ0
aWVzKCkgeyByZXR1cm4gbV9wcm9wZXJ0aWVzOyB9Ci0gICAgY29uc3QgUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyYgcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvcGVydGllczsgfQotCi0gICAgdm9pZCBkaWRDb21taXQoKTsKLQotICAgIHZvaWQgY2xl
YXJDb250ZXh0KCkgeyBtX2NvbnRleHQgPSBudWxscHRyOyB9Ci0gICAgUmVtb3RlTGF5ZXJUcmVl
Q29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQotCi1wcm90ZWN0
ZWQ6Ci0gICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6
TGF5ZXJUeXBlLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVM
YXllclRyZWVDb250ZXh0JiBjb250ZXh0KTsKLSAgICBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUoY29u
c3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlJiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50
KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOwotCi0gICAgdm9pZCB1cGRhdGVDbG9uZWRMYXll
clByb3BlcnRpZXMoUGxhdGZvcm1DQUxheWVyUmVtb3RlJiBjbG9uZSwgYm9vbCBjb3B5Q29udGVu
dHMgPSB0cnVlKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBib29sIGlzUGxhdGZvcm1DQUxheWVy
UmVtb3RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgZW5zdXJl
QmFja2luZ1N0b3JlKCk7Ci0gICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICB2b2lk
IHJlbW92ZVN1YmxheWVyKFBsYXRmb3JtQ0FMYXllclJlbW90ZSopOwotCi0gICAgYm9vbCByZXF1
aXJlc0N1c3RvbUFwcGVhcmFuY2VVcGRhdGVPbkJvdW5kc0NoYW5nZSgpIGNvbnN0OwotCi0gICAg
V2ViQ29yZTo6TGF5ZXJQb29sJiBsYXllclBvb2woKSBvdmVycmlkZTsKLQotICAgIFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXMgbV9wcm9wZXJ0aWVzOwotICAgIFdl
YkNvcmU6OlBsYXRmb3JtQ0FMYXllckxpc3QgbV9jaGlsZHJlbjsKLSAgICBQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGUqIG1fc3VwZXJsYXllciB7IG51bGxwdHIgfTsKLSAgICBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGUqIG1fbWFza0xheWVyIHsgbnVsbHB0ciB9OwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQ
dHI8V2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbj4+IG1fYW5pbWF0aW9uczsKLQotICAgIGJv
b2wgbV9hY2NlbGVyYXRlc0RyYXdpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgbV93YW50c0RlZXBD
b2xvckJhY2tpbmdTdG9yZSB7IGZhbHNlIH07Ci0KLSAgICBSZW1vdGVMYXllclRyZWVDb250ZXh0
KiBtX2NvbnRleHQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19QTEFURk9STV9DQUxBWUVSKFdlYktpdDo6UGxhdGZvcm1DQUxheWVyUmVtb3Rl
LCBpc1BsYXRmb3JtQ0FMYXllclJlbW90ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1
c3RvbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWQ2NGNmMGNmYjQwMWYwYjdj
ZTNmMTZiNGMwYWI0ZDA4ZDI2NjQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9y
bUNBTGF5ZXJSZW1vdGVDdXN0b20uaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllclJlbW90ZS5oIgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKLQotLy8gUGxhdGZvcm1DQUxheWVyUmVt
b3RlQ3VzdG9tIGlzIHVzZWQgZm9yIENBTGF5ZXJzIHRoYXQgbGl2ZSBpbiB0aGUgd2ViIHByb2Nl
c3MgYW5kIGFyZSBob3N0ZWQgaW50byB0aGUgVUkgcHJvY2VzcyB2aWEgcmVtb3RlIGNvbnRleHQu
Ci1jbGFzcyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20gZmluYWwgOiBwdWJsaWMgUGxhdGZv
cm1DQUxheWVyUmVtb3RlIHsKLSAgICBmcmllbmQgY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3Rl
OwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBjcmVhdGUo
UGxhdGZvcm1MYXllciAqLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqLCBSZW1vdGVM
YXllclRyZWVDb250ZXh0Jik7Ci0KLSAgICB2aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVD
dXN0b20oKTsKLQotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7IH0KLQotICAgIHVpbnQzMl90IGhv
c3RpbmdDb250ZXh0SUQoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKLSAgICB2
b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZUN1c3RvbShXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwg
UGxhdGZvcm1MYXllciAqLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBS
ZW1vdGVMYXllclRyZWVDb250ZXh0Jik7Ci0KLSAgICBSZWY8V2ViQ29yZTo6UGxhdGZvcm1DQUxh
eWVyPiBjbG9uZShXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdCBv
dmVycmlkZTsKLQotICAgIGJvb2wgaXNQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBDRlR5cGVSZWYgY29udGVudHMoKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNldENvbnRlbnRzKENGVHlwZVJlZikgb3ZlcnJpZGU7
Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4gbV9sYXllckhvc3Rp
bmdDb250ZXh0OwotICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3BsYXRmb3JtTGF5ZXI7
Ci0gICAgYm9vbCBtX3Byb3ZpZGVzQ29udGVudHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19QTEFURk9STV9DQUxBWUVSKFdlYktpdDo6UGxh
dGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLCBpc1BsYXRmb3JtQ0FMYXllclJlbW90ZSgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FM
YXllclJlbW90ZUN1c3RvbS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGM2OWI5YjMxNWFjODNkYjZkNzg4YzhmMTM2MzIyZTg2Nzc2MmM2MDAuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbQorKysgL2Rl
di9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2ltcG9ydCAiUGxhdGZvcm1DQUxh
eWVyUmVtb3RlQ3VzdG9tLmgiCi0KLSNpbXBvcnQgIkxheWVySG9zdGluZ0NvbnRleHQuaCIKLSNp
bXBvcnQgIlJlbW90ZUxheWVyVHJlZUNvbnRleHQuaCIKLSNpbXBvcnQgIlJlbW90ZUxheWVyVHJl
ZVByb3BlcnR5QXBwbGllci5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgotI2ltcG9ydCA8QVZG
b3VuZGF0aW9uL0FWRm91bmRhdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVy
Q0EuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyQ29jb2EuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvV2ViQ29yZUNBTGF5ZXJFeHRyYXMuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZUX0xJTktfRlJBTUVXT1JLX09Q
VElPTkFMKEFWRm91bmRhdGlvbikKLVNPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRp
b24sIEFWUGxheWVyTGF5ZXIpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotc3RhdGljIE5TU3RyaW5nICogY29uc3QgcGxhdGZvcm1DQUxheWVyUG9p
bnRlciA9IEAiV0tQbGF0Zm9ybUNBTGF5ZXIiOwotCi1SZWY8UGxhdGZvcm1DQUxheWVyUmVtb3Rl
PiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OmNyZWF0ZShQbGF0Zm9ybUxheWVyICpwbGF0
Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVD
b250ZXh0JiBjb250ZXh0KQotewotICAgIGF1dG8gbGF5ZXIgPSBhZG9wdFJlZigqbmV3IFBsYXRm
b3JtQ0FMYXllclJlbW90ZUN1c3RvbShQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6bGF5ZXJUeXBlRm9y
UGxhdGZvcm1MYXllcihwbGF0Zm9ybUxheWVyKSwgcGxhdGZvcm1MYXllciwgb3duZXIsIGNvbnRl
eHQpKTsKLSAgICBjb250ZXh0LmxheWVyV2FzQ3JlYXRlZChsYXllci5nZXQoKSwgbGF5ZXItPmxh
eWVyVHlwZSgpKTsKLSAgICByZXR1cm4gV1RGTW92ZShsYXllcik7Ci19Ci0KLVBsYXRmb3JtQ0FM
YXllclJlbW90ZUN1c3RvbTo6UGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKExheWVyVHlwZSBs
YXllclR5cGUsIFBsYXRmb3JtTGF5ZXIgKiBjdXN0b21MYXllciwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKLSAgICA6IFBsYXRm
b3JtQ0FMYXllclJlbW90ZShsYXllclR5cGUsIG93bmVyLCBjb250ZXh0KQotewotICAgIHN3aXRj
aCAoY29udGV4dC5sYXllckhvc3RpbmdNb2RlKCkpIHsKLSAgICBjYXNlIExheWVySG9zdGluZ01v
ZGU6OkluUHJvY2VzczoKLSAgICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0
aW5nQ29udGV4dDo6Y3JlYXRlRm9yUG9ydChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5jb21wb3Np
dGluZ1JlbmRlclNlcnZlclBvcnQoKSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEhBVkUoT1VUX09G
X1BST0NFU1NfTEFZRVJfSE9TVElORykKLSAgICBjYXNlIExheWVySG9zdGluZ01vZGU6Ok91dE9m
UHJvY2VzczoKLSAgICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29u
dGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2VzcygpOwotI2lmIFBMQVRGT1JNKElP
UykKLSAgICAgICAgaWYgKGxheWVyVHlwZSA9PSBMYXllclR5cGVBVlBsYXllckxheWVyKSB7Ci0g
ICAgICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGNvbnRleHQuZGV2aWNlU2NhbGVGYWN0b3Io
KTsKLSAgICAgICAgICAgIC8vIFNldCBhIHNjYWxlIGZhY3RvciBoZXJlIHRvIG1ha2UgY29udmVy
dFJlY3Q6dG9MYXllcjpuaWwgdGFrZSBzY2FsZSBmYWN0b3IgaW50byBhY2NvdW50LiA8cmRhcjov
L3Byb2JsZW0vMTgzMTY1NDI+LgotICAgICAgICAgICAgLy8gVGhpcyBzY2FsZSBmYWN0b3IgaXMg
aW52ZXJ0ZWQgaW4gdGhlIGhvc3RpbmcgcHJvY2Vzcy4KLSAgICAgICAgICAgIFtjdXN0b21MYXll
ciBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShzY2FsZUZhY3Rvciwgc2NhbGVG
YWN0b3IsIDEpXTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0g
ICAgfQotCi0gICAgbV9sYXllckhvc3RpbmdDb250ZXh0LT5zZXRSb290TGF5ZXIoY3VzdG9tTGF5
ZXIpOwotICAgIFtjdXN0b21MYXllciBzZXRWYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhQb2ludGVy
OnRoaXNdIGZvcktleTpwbGF0Zm9ybUNBTGF5ZXJQb2ludGVyXTsKLQotICAgIG1fcGxhdGZvcm1M
YXllciA9IGN1c3RvbUxheWVyOwotICAgIFtjdXN0b21MYXllciB3ZWJfZGlzYWJsZUFsbEFjdGlv
bnNdOwotCi0gICAgbV9wcm92aWRlc0NvbnRlbnRzID0gbGF5ZXJUeXBlID09IExheWVyVHlwZUNv
bnRlbnRzUHJvdmlkZWRMYXllcjsKLQotICAgIHByb3BlcnRpZXMoKS5wb3NpdGlvbiA9IEZsb2F0
UG9pbnQzRChjdXN0b21MYXllci5wb3NpdGlvbi54LCBjdXN0b21MYXllci5wb3NpdGlvbi55LCBj
dXN0b21MYXllci56UG9zaXRpb24pOwotICAgIHByb3BlcnRpZXMoKS5hbmNob3JQb2ludCA9IEZs
b2F0UG9pbnQzRChjdXN0b21MYXllci5hbmNob3JQb2ludC54LCBjdXN0b21MYXllci5hbmNob3JQ
b2ludC55LCBjdXN0b21MYXllci5hbmNob3JQb2ludFopOwotICAgIHByb3BlcnRpZXMoKS5ib3Vu
ZHMgPSBjdXN0b21MYXllci5ib3VuZHM7Ci0gICAgcHJvcGVydGllcygpLmNvbnRlbnRzUmVjdCA9
IGN1c3RvbUxheWVyLmNvbnRlbnRzUmVjdDsKLX0KLQotUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3Vz
dG9tOjp+UGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKCkKLXsKLSAgICBbbV9wbGF0Zm9ybUxh
eWVyIHNldFZhbHVlOm5pbCBmb3JLZXk6cGxhdGZvcm1DQUxheWVyUG9pbnRlcl07Ci19Ci0KLXVp
bnQzMl90IFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6aG9zdGluZ0NvbnRleHRJRCgpCi17
Ci0gICAgcmV0dXJuIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+Y29udGV4dElEKCk7Ci19Ci0KLVJl
ZjxXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6
Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKLXsKLSAgICBSZXRhaW5Q
dHI8Q0FMYXllciAqPiBjbG9uZWRMYXllcjsKLSAgICBib29sIGNvcHlDb250ZW50cyA9IHRydWU7
Ci0KLSAgICBpZiAobGF5ZXJUeXBlKCkgPT0gTGF5ZXJUeXBlQVZQbGF5ZXJMYXllcikgewotICAg
ICAgICAKLSAgICAgICAgaWYgKFtwbGF0Zm9ybUxheWVyKCkgaXNLaW5kT2ZDbGFzczpnZXRBVlBs
YXllckxheWVyQ2xhc3MoKV0pIHsKLSAgICAgICAgICAgIGNsb25lZExheWVyID0gYWRvcHROUyhb
YWxsb2NBVlBsYXllckxheWVySW5zdGFuY2UoKSBpbml0XSk7Ci0KLSAgICAgICAgICAgIEFWUGxh
eWVyTGF5ZXIqIGRlc3RpbmF0aW9uUGxheWVyTGF5ZXIgPSBzdGF0aWNfY2FzdDxBVlBsYXllckxh
eWVyICo+KGNsb25lZExheWVyLmdldCgpKTsKLSAgICAgICAgICAgIEFWUGxheWVyTGF5ZXIqIHNv
dXJjZVBsYXllckxheWVyID0gc3RhdGljX2Nhc3Q8QVZQbGF5ZXJMYXllciAqPihwbGF0Zm9ybUxh
eWVyKCkpOwotICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgXnsKLSAgICAgICAgICAgICAgICBbZGVzdGluYXRpb25QbGF5ZXJMYXllciBzZXRQbGF5
ZXI6W3NvdXJjZVBsYXllckxheWVyIHBsYXllcl1dOwotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBPbiBpT1MsIHRoZSBBVlBsYXllckxheWVyIGlzIGlu
c2lkZSBhIFdlYlZpZGVvQ29udGFpbmVyTGF5ZXIuIFRoaXMgY29kZSBuZWVkcyB0byBzaGFyZSBs
b2dpYyB3aXRoIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxh
eWVyTGF5ZXIoKS4KLSAgICAgICAgICAgIGNsb25lZExheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIg
YWxsb2NdIGluaXRdKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvcHlDb250ZW50cyA9IGZhbHNl
OwotICAgIH0gZWxzZSBpZiAobGF5ZXJUeXBlKCkgPT0gTGF5ZXJUeXBlQ29udGVudHNQcm92aWRl
ZExheWVyKSB7Ci0gICAgICAgIGNsb25lZExheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2Nd
IGluaXRdKTsKLSAgICAgICAgLy8gRklYTUU6IGN1cnJlbnRseSBjb3B5aW5nIFdlYkdMIGNvbnRl
bnRzIGJyZWFrcyB0aGUgb3JpZ2luYWwgbGF5ZXIuCi0gICAgICAgIGNvcHlDb250ZW50cyA9IGZh
bHNlOwotICAgIH0KLQotICAgIGF1dG8gY2xvbmUgPSBhZG9wdFJlZigqbmV3IFBsYXRmb3JtQ0FM
YXllclJlbW90ZUN1c3RvbShsYXllclR5cGUoKSwgY2xvbmVkTGF5ZXIuZ2V0KCksIG93bmVyLCAq
Y29udGV4dCgpKSk7Ci0gICAgY29udGV4dCgpLT5sYXllcldhc0NyZWF0ZWQoY2xvbmUuZ2V0KCks
IGNsb25lLT5sYXllclR5cGUoKSk7Ci0KLSAgICB1cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMo
Y2xvbmUuZ2V0KCksIGNvcHlDb250ZW50cyk7Ci0KLSAgICBjbG9uZS0+c2V0Q2xvbmVkTGF5ZXIo
dGhpcyk7Ci0gICAgcmV0dXJuIFdURk1vdmUoY2xvbmUpOwotfQotCi1DRlR5cGVSZWYgUGxhdGZv
cm1DQUxheWVyUmVtb3RlQ3VzdG9tOjpjb250ZW50cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFtt
X3BsYXRmb3JtTGF5ZXIgY29udGVudHNdOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90
ZUN1c3RvbTo6c2V0Q29udGVudHMoQ0ZUeXBlUmVmIGNvbnRlbnRzKQotewotICAgIFttX3BsYXRm
b3JtTGF5ZXIgc2V0Q29udGVudHM6KGlkKWNvbnRlbnRzXTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGVDdXN0b206OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgaWYgKG1fcHJvdmlkZXNDb250ZW50cykKLSAgICAgICAgW21fcGxhdGZv
cm1MYXllciBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6cmVjdF07Ci0gICAgZWxzZQotICAgICAgICBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLX0KLQot
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OnNldE5lZWRzRGlzcGxheSgpCi17Ci0g
ICAgaWYgKG1fcHJvdmlkZXNDb250ZW50cykKLSAgICAgICAgW21fcGxhdGZvcm1MYXllciBzZXRO
ZWVkc0Rpc3BsYXldOwotICAgIGVsc2UKLSAgICAgICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpz
ZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVt
b3RlVGlsZWRCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmZWMzMGMyZDIxNmU3YTQ5YjJjMmZmMTNlZTY5ZjA5ZWE3ODVhMjgxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tp
bmcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW1wb3J0
ICJQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmcuaCIKLQotI2ltcG9ydCAiUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dC5oIgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ0EuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyQ29jb2EuaD4KLSNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmc6OlBsYXRmb3JtQ0FMYXll
clJlbW90ZVRpbGVkQmFja2luZyhMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJD
bGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0KQotICAgIDogUGxh
dGZvcm1DQUxheWVyUmVtb3RlKGxheWVyVHlwZSwgb3duZXIsIGNvbnRleHQpCi0gICAgLCBtX3Rp
bGVDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8VGlsZUNvbnRyb2xsZXI+KHRoaXMpKQotewot
fQotCi1QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmc6On5QbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGVUaWxlZEJhY2tpbmcoKQotewotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZVRp
bGVkQmFja2luZzo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlS
ZWN0KQotewotICAgIG1fdGlsZUNvbnRyb2xsZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChlbmNs
b3NpbmdJbnRSZWN0KGRpcnR5UmVjdCkpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90
ZVRpbGVkQmFja2luZzo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBtX3RpbGVDb250cm9sbGVy
LT5zZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
TGlzdCogUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nOjpjdXN0b21TdWJsYXllcnMo
KSBjb25zdAotewotICAgIG1fY3VzdG9tU3VibGF5ZXJzID0gbV90aWxlQ29udHJvbGxlci0+Y29u
dGFpbmVyTGF5ZXJzKCk7Ci0gICAgcmV0dXJuICZtX2N1c3RvbVN1YmxheWVyczsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmc6OnNldEJvdW5kcyhjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGJvdW5kcykKLXsKLSAgICBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNl
dEJvdW5kcyhib3VuZHMpOwotICAgIG1fdGlsZUNvbnRyb2xsZXItPnRpbGVDYWNoZUxheWVyQm91
bmRzQ2hhbmdlZCgpOwotfQotCi1ib29sIFBsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2lu
Zzo6aXNPcGFxdWUoKSBjb25zdAotewotICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVyLT50aWxl
c0FyZU9wYXF1ZSgpOwotfQotCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2lu
Zzo6c2V0T3BhcXVlKGJvb2wgb3BhcXVlKQotewotICAgIG1fdGlsZUNvbnRyb2xsZXItPnNldFRp
bGVzT3BhcXVlKG9wYXF1ZSk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRC
YWNraW5nOjphY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX3RpbGVD
b250cm9sbGVyLT5hY2NlbGVyYXRlc0RyYXdpbmcoKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGVUaWxlZEJhY2tpbmc6OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sIGFjY2VsZXJh
dGVzRHJhd2luZykKLXsKLSAgICBtX3RpbGVDb250cm9sbGVyLT5zZXRBY2NlbGVyYXRlc0RyYXdp
bmcoYWNjZWxlcmF0ZXNEcmF3aW5nKTsKLX0KLQotYm9vbCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVU
aWxlZEJhY2tpbmc6OndhbnRzRGVlcENvbG9yQmFja2luZ1N0b3JlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV90aWxlQ29udHJvbGxlci0+d2FudHNEZWVwQ29sb3JCYWNraW5nU3RvcmUoKTsKLX0K
LQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmc6OnNldFdhbnRzRGVlcENv
bG9yQmFja2luZ1N0b3JlKGJvb2wgd2FudHNEZWVwQ29sb3JCYWNraW5nU3RvcmUpCi17Ci0gICAg
bV90aWxlQ29udHJvbGxlci0+c2V0V2FudHNEZWVwQ29sb3JCYWNraW5nU3RvcmUod2FudHNEZWVw
Q29sb3JCYWNraW5nU3RvcmUpOwotfQotCi1ib29sIFBsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVk
QmFja2luZzo6c3VwcG9ydHNTdWJwaXhlbEFudGlhbGlhc2VkVGV4dCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fdGlsZUNvbnRyb2xsZXItPnN1cHBvcnRzU3VicGl4ZWxBbnRpYWxpYXNlZFRleHQo
KTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmc6OnNldFN1cHBv
cnRzU3VicGl4ZWxBbnRpYWxpYXNlZFRleHQoYm9vbCBzdXBwb3J0c1N1YnBpeGVsQW50aWFsaWFz
ZWRUZXh0KQotewotICAgIG1fdGlsZUNvbnRyb2xsZXItPnNldFN1cHBvcnRzU3VicGl4ZWxBbnRp
YWxpYXNlZFRleHQoc3VwcG9ydHNTdWJwaXhlbEFudGlhbGlhc2VkVGV4dCk7Ci19Ci0KLWZsb2F0
IFBsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2luZzo6Y29udGVudHNTY2FsZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fdGlsZUNvbnRyb2xsZXItPmNvbnRlbnRzU2NhbGUoKTsKLX0KLQot
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmc6OnNldENvbnRlbnRzU2NhbGUo
ZmxvYXQgc2NhbGUpCi17Ci0gICAgbV90aWxlQ29udHJvbGxlci0+c2V0Q29udGVudHNTY2FsZShz
Y2FsZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nOjpzZXRC
b3JkZXJXaWR0aChmbG9hdCBib3JkZXJXaWR0aCkKLXsKLSAgICBtX3RpbGVDb250cm9sbGVyLT5z
ZXRUaWxlRGVidWdCb3JkZXJXaWR0aChib3JkZXJXaWR0aCAvIDIpOwotfQotCi12b2lkIFBsYXRm
b3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2luZzo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgV2ViQ29y
ZTo6Q29sb3ImIGNvbG9yKQotewotICAgIG1fdGlsZUNvbnRyb2xsZXItPnNldFRpbGVEZWJ1Z0Jv
cmRlckNvbG9yKGNvbG9yKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVt
b3RlVGlsZWRCYWNraW5nLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDBkZGZjZTg1MmQ1MTI3MDNkMzRmNDM1MmEzOWY0NWEzZTVkMTVhNTkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZVRpbGVkQmFja2luZy5o
CisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRC
YWNraW5nX2gKLSNkZWZpbmUgUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nX2gKLQot
I2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllclJlbW90ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvVGls
ZUNvbnRyb2xsZXIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBsYXRmb3JtQ0FM
YXllclJlbW90ZVRpbGVkQmFja2luZyBmaW5hbCA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGUgewotICAgIGZyaWVuZCBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+UGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nKCk7Ci0KLXByaXZh
dGU6Ci0gICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nKFdlYkNvcmU6OlBsYXRm
b3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93
bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7Ci0KLSAgICBXZWJDb3JlOjpUaWxlZEJhY2tp
bmcqIHRpbGVkQmFja2luZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdGlsZUNvbnRyb2xsZXIuZ2V0
KCk7IH0KLQotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgp
IG92ZXJyaWRlOwotCi0gICAgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyTGlzdCogY3Vz
dG9tU3VibGF5ZXJzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldEJvdW5kcyhjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICAKLSAgICBib29sIGlzT3BhcXVl
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRPcGFxdWUoYm9vbCkgb3ZlcnJpZGU7Ci0g
ICAgCi0gICAgYm9vbCBhY2NlbGVyYXRlc0RyYXdpbmcoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
b2lkIHNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sKSBvdmVycmlkZTsKLQotICAgIGJvb2wgd2Fu
dHNEZWVwQ29sb3JCYWNraW5nU3RvcmUoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNldFdh
bnRzRGVlcENvbG9yQmFja2luZ1N0b3JlKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBzdXBw
b3J0c1N1YnBpeGVsQW50aWFsaWFzZWRUZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRTdXBwb3J0c1N1YnBpeGVsQW50aWFsaWFzZWRUZXh0KGJvb2wpIG92ZXJyaWRlOwotCi0gICAg
ZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q29udGVu
dHNTY2FsZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgdm9pZCBzZXRCb3JkZXJXaWR0aChm
bG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRCb3JkZXJDb2xvcihjb25zdCBXZWJDb3JlOjpD
b2xvciYpIG92ZXJyaWRlOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRpbGVDb250
cm9sbGVyPiBtX3RpbGVDb250cm9sbGVyOwotICAgIG11dGFibGUgV2ViQ29yZTo6UGxhdGZvcm1D
QUxheWVyTGlzdCBtX2N1c3RvbVN1YmxheWVyczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gUGxhdGZvcm1DQUxheWVyUmVtb3RlVGlsZWRCYWNraW5nX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTU0OGVh
MWM5NDUwM2FlOWEwYjA1ZDM2MmI0NzFiMWQwMGEwY2I4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBSZW1vdGVMYXllclRyZWVDb250ZXh0X2gKLSNkZWZp
bmUgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dF9oCi0KLSNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0
LmgiCi0jaW5jbHVkZSAiUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLmgiCi0jaW5j
bHVkZSAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzTGF5ZXJGYWN0b3J5Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9MYXllclBvb2wuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBsYXRmb3JtQ0FMYXllclJlbW90ZTsK
LWNsYXNzIFdlYlBhZ2U7Ci0KLS8vIEZJWE1FOiBUaGlzIGNsYXNzIGRvZXNuJ3QgZG8gbXVjaCBu
b3cuIFJvbGwgaW50byBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYT8KLWNsYXNzIFJlbW90ZUxh
eWVyVHJlZUNvbnRleHQgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rvcnkgewot
cHVibGljOgotICAgIGV4cGxpY2l0IFJlbW90ZUxheWVyVHJlZUNvbnRleHQoV2ViUGFnZSYpOwot
ICAgIH5SZW1vdGVMYXllclRyZWVDb250ZXh0KCk7Ci0KLSAgICB2b2lkIGxheWVyV2FzQ3JlYXRl
ZChQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZSk7Ci0gICAgdm9pZCBsYXllcldpbGxCZURlc3Ryb3llZChQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGUmKTsKLQotICAgIHZvaWQgYmFja2luZ1N0b3JlV2FzQ3JlYXRlZChSZW1vdGVMYXllckJhY2tp
bmdTdG9yZSYpOwotICAgIHZvaWQgYmFja2luZ1N0b3JlV2lsbEJlRGVzdHJveWVkKFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlJik7Ci0gICAgYm9vbCBiYWNraW5nU3RvcmVXaWxsQmVEaXNwbGF5ZWQo
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmKTsKLQotICAgIFdlYkNvcmU6OkxheWVyUG9vbCYgbGF5
ZXJQb29sKCkgeyByZXR1cm4gbV9sYXllclBvb2w7IH0KLQotICAgIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKCkgY29uc3Q7Ci0KLSAgICBMYXllckhvc3RpbmdNb2RlIGxheWVySG9zdGluZ01vZGUo
KSBjb25zdDsKLQotICAgIHZvaWQgYnVpbGRUcmFuc2FjdGlvbihSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbiYsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciYgcm9vdExheWVyKTsKLQotICAgIHZv
aWQgbGF5ZXJQcm9wZXJ0eUNoYW5nZWRXaGlsZUJ1aWxkaW5nVHJhbnNhY3Rpb24oUGxhdGZvcm1D
QUxheWVyUmVtb3RlJik7Ci0KLSAgICAvLyBGcm9tIHRoZSBVSSBwcm9jZXNzCi0gICAgdm9pZCBh
bmltYXRpb25EaWRTdGFydChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQs
IGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUgc3RhcnRUaW1lKTsKLSAgICB2b2lkIGFuaW1hdGlv
bkRpZEVuZChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQsIGNvbnN0IFN0
cmluZyYga2V5KTsKLQotICAgIHZvaWQgd2lsbFN0YXJ0QW5pbWF0aW9uT25MYXllcihQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGUmKTsKLQotICAgIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlv
biYgYmFja2luZ1N0b3JlQ29sbGVjdGlvbigpIHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlQ29sbGVj
dGlvbjsgfQotICAgIAotICAgIHZvaWQgc2V0TmV4dEZsdXNoSXNGb3JJbW1lZGlhdGVQYWludChi
b29sIG5leHRGbHVzaElzRm9ySW1tZWRpYXRlUGFpbnQpIHsgbV9uZXh0Rmx1c2hJc0ZvckltbWVk
aWF0ZVBhaW50ID0gbmV4dEZsdXNoSXNGb3JJbW1lZGlhdGVQYWludDsgfQotICAgIGJvb2wgbmV4
dEZsdXNoSXNGb3JJbW1lZGlhdGVQYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEZsdXNoSXNG
b3JJbW1lZGlhdGVQYWludDsgfQotCi1wcml2YXRlOgotICAgIC8vIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJGYWN0b3J5Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+
IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6VHlwZSwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsaWVudCYpIG92ZXJyaWRlOwotCi0gICAgV2ViUGFnZSYgbV93ZWJQ
YWdlOwotCi0gICAgSGFzaE1hcDxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQsIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllckNyZWF0aW9uUHJvcGVydGllcz4g
bV9jcmVhdGVkTGF5ZXJzOwotICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0
Zm9ybUxheWVySUQ+IG1fZGVzdHJveWVkTGF5ZXJzOwotCi0gICAgSGFzaE1hcDxXZWJDb3JlOjpH
cmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQsIFBsYXRmb3JtQ0FMYXllclJlbW90ZSo+IG1f
bGl2ZUxheWVyczsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3Jt
TGF5ZXJJRCwgUGxhdGZvcm1DQUxheWVyUmVtb3RlKj4gbV9sYXllcnNXaXRoQW5pbWF0aW9uczsK
LQotICAgIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbiBtX2JhY2tpbmdTdG9yZUNv
bGxlY3Rpb247Ci0gICAgCi0gICAgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24qIG1fY3VycmVu
dFRyYW5zYWN0aW9uOwotCi0gICAgV2ViQ29yZTo6TGF5ZXJQb29sIG1fbGF5ZXJQb29sOwotICAg
IAotICAgIGJvb2wgbV9uZXh0Rmx1c2hJc0ZvckltbWVkaWF0ZVBhaW50IHsgZmFsc2UgfTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUmVtb3RlTGF5ZXJUcmVlQ29u
dGV4dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5MGM0ODZiNTgyYjBkMTU4NzA1NmE0OGQxODEyZGIzOWY3YjUyYjAyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tCisrKyAvZGV2L251
bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlJlbW90ZUxheWVyVHJlZUNvbnRleHQuaCIKLQotI2ltcG9ydCAiR2VuZXJpY0NhbGxi
YWNrLmgiCi0jaW1wb3J0ICJHcmFwaGljc0xheWVyQ0FSZW1vdGUuaCIKLSNpbXBvcnQgIlBsYXRm
b3JtQ0FMYXllclJlbW90ZS5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xs
ZWN0aW9uLmgiCi0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIgotI2ltcG9y
dCAiV2ViUGFnZS5oIgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvTWFpbkZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KLSNpbXBvcnQgPHd0
Zi9TZXRGb3JTY29wZS5oPgotI2ltcG9ydCA8d3RmL1N5c3RlbVRyYWNpbmcuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1SZW1vdGVMYXllclRy
ZWVDb250ZXh0OjpSZW1vdGVMYXllclRyZWVDb250ZXh0KFdlYlBhZ2UmIHdlYlBhZ2UpCi0gICAg
OiBtX3dlYlBhZ2Uod2ViUGFnZSkKLSAgICAsIG1fY3VycmVudFRyYW5zYWN0aW9uKG51bGxwdHIp
Ci17Ci19Ci0KLVJlbW90ZUxheWVyVHJlZUNvbnRleHQ6On5SZW1vdGVMYXllclRyZWVDb250ZXh0
KCkKLXsKLSAgICBmb3IgKGF1dG8mIGxheWVyIDogbV9saXZlTGF5ZXJzLnZhbHVlcygpKQotICAg
ICAgICBsYXllci0+Y2xlYXJDb250ZXh0KCk7Ci19Ci0KLWZsb2F0IFJlbW90ZUxheWVyVHJlZUNv
bnRleHQ6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdl
LmRldmljZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLUxheWVySG9zdGluZ01vZGUgUmVtb3RlTGF5ZXJU
cmVlQ29udGV4dDo6bGF5ZXJIb3N0aW5nTW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2Vi
UGFnZS5sYXllckhvc3RpbmdNb2RlKCk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4
dDo6bGF5ZXJXYXNDcmVhdGVkKFBsYXRmb3JtQ0FMYXllclJlbW90ZSYgbGF5ZXIsIFBsYXRmb3Jt
Q0FMYXllcjo6TGF5ZXJUeXBlIHR5cGUpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1M
YXllcklEIGxheWVySUQgPSBsYXllci5sYXllcklEKCk7Ci0KLSAgICBSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6TGF5ZXJDcmVhdGlvblByb3BlcnRpZXMgY3JlYXRpb25Qcm9wZXJ0aWVzOwot
ICAgIGNyZWF0aW9uUHJvcGVydGllcy5sYXllcklEID0gbGF5ZXJJRDsKLSAgICBjcmVhdGlvblBy
b3BlcnRpZXMudHlwZSA9IHR5cGU7Ci0KLSAgICBpZiAobGF5ZXIuaXNQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGVDdXN0b20oKSkgewotICAgICAgICBjcmVhdGlvblByb3BlcnRpZXMuaG9zdGluZ0NvbnRl
eHRJRCA9IGxheWVyLmhvc3RpbmdDb250ZXh0SUQoKTsKLSAgICAgICAgY3JlYXRpb25Qcm9wZXJ0
aWVzLmhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAg
fQotCi0gICAgbV9jcmVhdGVkTGF5ZXJzLmFkZChsYXllcklELCBXVEZNb3ZlKGNyZWF0aW9uUHJv
cGVydGllcykpOwotICAgIG1fbGl2ZUxheWVycy5hZGQobGF5ZXJJRCwgJmxheWVyKTsKLX0KLQot
dm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjpsYXllcldpbGxCZURlc3Ryb3llZChQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGUmIGxheWVyKQotewotICAgIEFTU0VSVChsYXllci5sYXllcklEKCkpOwot
ICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklEID0gbGF5ZXIubGF5ZXJJ
RCgpOwotCi0gICAgbV9jcmVhdGVkTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKLSAgICBtX2xpdmVM
YXllcnMucmVtb3ZlKGxheWVySUQpOwotCi0gICAgQVNTRVJUKCFtX2Rlc3Ryb3llZExheWVycy5j
b250YWlucyhsYXllcklEKSk7Ci0gICAgbV9kZXN0cm95ZWRMYXllcnMuYXBwZW5kKGxheWVySUQp
OwotICAgIAotICAgIG1fbGF5ZXJzV2l0aEFuaW1hdGlvbnMucmVtb3ZlKGxheWVySUQpOwotfQot
Ci12b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmJhY2tpbmdTdG9yZVdhc0NyZWF0ZWQoUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKLXsKLSAgICBtX2JhY2tpbmdTdG9y
ZUNvbGxlY3Rpb24uYmFja2luZ1N0b3JlV2FzQ3JlYXRlZChiYWNraW5nU3RvcmUpOwotfQotCi12
b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmJhY2tpbmdTdG9yZVdpbGxCZURlc3Ryb3llZChS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlKQotewotICAgIG1fYmFja2luZ1N0
b3JlQ29sbGVjdGlvbi5iYWNraW5nU3RvcmVXaWxsQmVEZXN0cm95ZWQoYmFja2luZ1N0b3JlKTsK
LX0KLQotYm9vbCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjpiYWNraW5nU3RvcmVXaWxsQmVEaXNw
bGF5ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKLXsKLSAgICByZXR1
cm4gbV9iYWNraW5nU3RvcmVDb2xsZWN0aW9uLmJhY2tpbmdTdG9yZVdpbGxCZURpc3BsYXllZChi
YWNraW5nU3RvcmUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dDo6Y3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xh
eWVyOjpUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllckNsaWVudCYgY2xpZW50KQotewotICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdyYXBoaWNzTGF5ZXJDQVJlbW90ZT4obGF5ZXJUeXBl
LCBjbGllbnQsICp0aGlzKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjpidWls
ZFRyYW5zYWN0aW9uKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgUGxh
dGZvcm1DQUxheWVyJiByb290TGF5ZXIpCi17Ci0gICAgVHJhY2VTY29wZSB0cmFjaW5nU2NvcGUo
QnVpbGRUcmFuc2FjdGlvblN0YXJ0LCBCdWlsZFRyYW5zYWN0aW9uRW5kKTsKLQotICAgIFBsYXRm
b3JtQ0FMYXllclJlbW90ZSYgcm9vdExheWVyUmVtb3RlID0gZG93bmNhc3Q8UGxhdGZvcm1DQUxh
eWVyUmVtb3RlPihyb290TGF5ZXIpOwotICAgIHRyYW5zYWN0aW9uLnNldFJvb3RMYXllcklEKHJv
b3RMYXllclJlbW90ZS5sYXllcklEKCkpOwotCi0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24gPSAm
dHJhbnNhY3Rpb247Ci0gICAgcm9vdExheWVyUmVtb3RlLnJlY3Vyc2l2ZUJ1aWxkVHJhbnNhY3Rp
b24oKnRoaXMsIHRyYW5zYWN0aW9uKTsKLSAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbiA9IG51bGxw
dHI7Ci0KLSAgICBWZWN0b3I8UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyQ3JlYXRp
b25Qcm9wZXJ0aWVzPiBjcmVhdGVkTGF5ZXJQcm9wZXJ0aWVzOwotICAgIGNvcHlWYWx1ZXNUb1Zl
Y3RvcihtX2NyZWF0ZWRMYXllcnMsIGNyZWF0ZWRMYXllclByb3BlcnRpZXMpOwotICAgIHRyYW5z
YWN0aW9uLnNldENyZWF0ZWRMYXllcnMoV1RGTW92ZShjcmVhdGVkTGF5ZXJQcm9wZXJ0aWVzKSk7
Ci0gICAgdHJhbnNhY3Rpb24uc2V0RGVzdHJveWVkTGF5ZXJJRHMoV1RGTW92ZShtX2Rlc3Ryb3ll
ZExheWVycykpOwotICAgIAotICAgIG1fY3JlYXRlZExheWVycy5jbGVhcigpOwotfQotCi12b2lk
IFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmxheWVyUHJvcGVydHlDaGFuZ2VkV2hpbGVCdWlsZGlu
Z1RyYW5zYWN0aW9uKFBsYXRmb3JtQ0FMYXllclJlbW90ZSYgbGF5ZXIpCi17Ci0gICAgaWYgKG1f
Y3VycmVudFRyYW5zYWN0aW9uKQotICAgICAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+bGF5ZXJQ
cm9wZXJ0aWVzQ2hhbmdlZChsYXllcik7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4
dDo6d2lsbFN0YXJ0QW5pbWF0aW9uT25MYXllcihQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmIGxheWVy
KQotewotICAgIG1fbGF5ZXJzV2l0aEFuaW1hdGlvbnMuYWRkKGxheWVyLmxheWVySUQoKSwgJmxh
eWVyKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjphbmltYXRpb25EaWRTdGFy
dChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbGF5ZXJJRCwgY29uc3Qg
U3RyaW5nJiBrZXksIGRvdWJsZSBzdGFydFRpbWUpCi17Ci0gICAgYXV0byBpdCA9IG1fbGF5ZXJz
V2l0aEFuaW1hdGlvbnMuZmluZChsYXllcklEKTsKLSAgICBpZiAoaXQgIT0gbV9sYXllcnNXaXRo
QW5pbWF0aW9ucy5lbmQoKSkKLSAgICAgICAgaXQtPnZhbHVlLT5hbmltYXRpb25TdGFydGVkKGtl
eSwgc3RhcnRUaW1lKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjphbmltYXRp
b25EaWRFbmQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQs
IGNvbnN0IFN0cmluZyYga2V5KQotewotICAgIGF1dG8gaXQgPSBtX2xheWVyc1dpdGhBbmltYXRp
b25zLmZpbmQobGF5ZXJJRCk7Ci0gICAgaWYgKGl0ICE9IG1fbGF5ZXJzV2l0aEFuaW1hdGlvbnMu
ZW5kKCkpCi0gICAgICAgIGl0LT52YWx1ZS0+YW5pbWF0aW9uRW5kZWQoa2V5KTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjc1YWUzMTE1YTZkMjUxODRiYzJiZGRkODJkMDRh
NTVhOTk5N2JmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ2FsbGJhY2tJRC5oIgotI2luY2x1ZGUgIkRy
YXdpbmdBcmVhLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllckNBUmVtb3RlLmgiCi0jaW5jbHVk
ZSAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8
YXRvbWljPgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBQbGF0Zm9ybUNBTGF5ZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFz
cyBSZW1vdGVMYXllclRyZWVDb250ZXh0OwotY2xhc3MgUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJl
ZnJlc2hNb25pdG9yOwotCi1jbGFzcyBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSA6IHB1Ymxp
YyBEcmF3aW5nQXJlYSwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgewotICAg
IGZyaWVuZCBjbGFzcyBSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3I7Ci1wdWJs
aWM6Ci0gICAgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEoV2ViUGFnZSYsIGNvbnN0IFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICB2aXJ0dWFsIH5SZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYSgpOwotCi0gICAgdWludDY0X3QgbmV4dFRyYW5zYWN0aW9uSUQoKSBjb25zdCB7IHJl
dHVybiBtX2N1cnJlbnRUcmFuc2FjdGlvbklEICsgMTsgfQotICAgIHVpbnQ2NF90IGxhc3RDb21t
aXR0ZWRUcmFuc2FjdGlvbklEKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VHJhbnNhY3Rpb25J
RDsgfQotCi0gICAgV2Vha1B0cjxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYT4gY3JlYXRlV2Vh
a1B0cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgLy8gRHJhd2luZ0FyZWEKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCB1cGRhdGVHZW9tZXRyeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3
U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbGF5ZXJQb3NpdGlvbiwgYm9vbCBmbHVzaFN5
bmNocm9ub3VzbHksIGNvbnN0IFdlYkNvcmU6Ok1hY2hTZW5kUmlnaHQmIGZlbmNlUG9ydCkgb3Zl
cnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXll
ckZhY3RvcnkoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHNjaGVkdWxlQ29tcG9z
aXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJGbHVzaEltbWVkaWF0ZWx5KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhdHRhY2hWaWV3T3Zl
cmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
Kikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRChDYWxsYmFj
a0lEKSBvdmVycmlkZTsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0
b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJ
RCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveURpc3BsYXlSZWZyZXNoTW9uaXRvcihX
ZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3IqKTsKLQotICAgIGJvb2wgc2hvdWxkVXNlVGls
ZWRCYWNraW5nRm9yRnJhbWVWaWV3KGNvbnN0IFdlYkNvcmU6OkZyYW1lVmlldyYpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCB1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3Jl
Jikgb3ZlcnJpZGU7Ci0KLSAgICBib29sIHN1cHBvcnRzQXN5bmNTY3JvbGxpbmcoKSBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2b2lkIHNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4o
Ym9vbCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZvcmNlUmVwYWludCgpIG92ZXJyaWRlOwotICAg
IGJvb2wgZm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KLQotICAgIHZvaWQgc2V0Vmlld0V4cG9zZWRSZWN0KHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6RmxvYXRSZWN0Pikgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9h
dFJlY3Q+IHZpZXdFeHBvc2VkUmVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2Nyb2xs
ZWRWaWV3RXhwb3NlZFJlY3Q7IH0KLQotICAgIHZvaWQgYWNjZWxlcmF0ZWRBbmltYXRpb25EaWRT
dGFydCh1aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlIHN0YXJ0VGlt
ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1aW50NjRf
dCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0KLSNpZiBQTEFURk9STShJ
T1MpCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGV4cG9zZWRDb250ZW50UmVjdCgpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0RXhwb3NlZENvbnRlbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2b2lkIGRpZFVwZGF0ZSgpIG92ZXJy
aWRlOwotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIHZvaWQgc2V0RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2b2lkIG1haW5GcmFtZUNvbnRlbnRTaXpl
Q2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFj
dGl2aXR5U3RhdGVEaWRDaGFuZ2UoV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6RmxhZ3MgY2hhbmdl
ZCwgYm9vbCB3YW50c0RpZFVwZGF0ZUFjdGl2aXR5U3RhdGUsIGNvbnN0IFZlY3RvcjxDYWxsYmFj
a0lEPiYgY2FsbGJhY2tJRHMpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBhZGp1c3RMYXllckZsdXNo
VGhyb3R0bGluZyhXZWJDb3JlOjpMYXllckZsdXNoVGhyb3R0bGVTdGF0ZTo6RmxhZ3MpIG92ZXJy
aWRlOwotCi0gICAgYm9vbCBkaXNwYXRjaERpZFJlYWNoTGF5b3V0TWlsZXN0b25lKFdlYkNvcmU6
OkxheW91dE1pbGVzdG9uZXMpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxlZEV4
cG9zZWRSZWN0KCk7Ci0gICAgdm9pZCB1cGRhdGVSb290TGF5ZXJzKCk7Ci0KLSAgICB2b2lkIGZs
dXNoTGF5ZXJzKCk7Ci0KLSAgICBXZWJDb3JlOjpUaWxlZEJhY2tpbmcqIG1haW5GcmFtZVRpbGVk
QmFja2luZygpIGNvbnN0OwotCi0gICAgdWludDY0X3QgdGFrZU5leHRUcmFuc2FjdGlvbklEKCkg
eyByZXR1cm4gKyttX2N1cnJlbnRUcmFuc2FjdGlvbklEOyB9Ci0KLSAgICBib29sIG1hcmtMYXll
cnNWb2xhdGlsZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSgpIG92ZXJyaWRlOwotCi0gICAgY2xhc3Mg
QmFja2luZ1N0b3JlRmx1c2hlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCYWNraW5n
U3RvcmVGbHVzaGVyPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUmVmPEJhY2tpbmdT
dG9yZUZsdXNoZXI+IGNyZWF0ZShJUEM6OkNvbm5lY3Rpb24qLCBzdGQ6OnVuaXF1ZV9wdHI8SVBD
OjpFbmNvZGVyPiwgVmVjdG9yPFJldGFpblB0cjxDR0NvbnRleHRSZWY+Pik7Ci0KLSAgICAgICAg
dm9pZCBmbHVzaCgpOwotICAgICAgICBib29sIGhhc0ZsdXNoZWQoKSBjb25zdCB7IHJldHVybiBt
X2hhc0ZsdXNoZWQ7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEJhY2tpbmdTdG9yZUZsdXNo
ZXIoSVBDOjpDb25uZWN0aW9uKiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4sIFZlY3Rv
cjxSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPj4pOwotCi0gICAgICAgIFJlZlB0cjxJUEM6OkNvbm5l
Y3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rl
cj4gbV9jb21taXRFbmNvZGVyOwotICAgICAgICBWZWN0b3I8UmV0YWluUHRyPENHQ29udGV4dFJl
Zj4+IG1fY29udGV4dHNUb0ZsdXNoOwotCi0gICAgICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1faGFz
Rmx1c2hlZDsKLSAgICB9OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUxheWVyVHJlZUNv
bnRleHQ+IG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXpl
IG1fdmlld1NpemU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UmVjdD4gbV92
aWV3RXhwb3NlZFJlY3Q7Ci0gICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFJlY3Q+IG1f
c2Nyb2xsZWRWaWV3RXhwb3NlZFJlY3Q7Ci0KLSAgICBXZWJDb3JlOjpUaW1lciBtX2xheWVyRmx1
c2hUaW1lcjsKLSAgICBib29sIG1faXNGbHVzaGluZ1N1c3BlbmRlZCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBtX2hhc0RlZmVycmVkRmx1c2ggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Rocm90dGxp
bmdMYXllckZsdXNoZXMgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc0xheWVyRmx1c2hUaHJvdHRs
aW5nVGVtcG9yYXJpbHlEaXNhYmxlZEZvckludGVyYWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29s
IG1faXNJbml0aWFsVGhyb3R0bGVkTGF5ZXJGbHVzaCB7IGZhbHNlIH07Ci0KLSAgICBib29sIG1f
d2FpdGluZ0ZvckJhY2tpbmdTdG9yZVN3YXAgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYWRGbHVz
aERlZmVycmVkV2hpbGVXYWl0aW5nRm9yQmFja2luZ1N0b3JlU3dhcCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBtX25leHRGbHVzaElzRm9ySW1tZWRpYXRlUGFpbnQgeyBmYWxzZSB9OwotCi0gICAgZGlz
cGF0Y2hfcXVldWVfdCBtX2NvbW1pdFF1ZXVlOwotICAgIFJlZlB0cjxCYWNraW5nU3RvcmVGbHVz
aGVyPiBtX3BlbmRpbmdCYWNraW5nU3RvcmVGbHVzaGVyOwotCi0gICAgSGFzaFNldDxSZW1vdGVM
YXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IqPiBtX2Rpc3BsYXlSZWZyZXNoTW9uaXRvcnM7
Ci0gICAgSGFzaFNldDxSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IqPiogbV9k
aXNwbGF5UmVmcmVzaE1vbml0b3JzVG9Ob3RpZnkgeyBudWxscHRyIH07Ci0KLSAgICB1aW50NjRf
dCBtX2N1cnJlbnRUcmFuc2FjdGlvbklEIHsgMCB9OwotICAgIFZlY3RvcjxSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25DYWxsYmFja0lEPiBtX3BlbmRpbmdDYWxsYmFja0lE
czsKLQotICAgIFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZXMgbV9wZW5kaW5nTmV3bHlSZWFjaGVk
TGF5b3V0TWlsZXN0b25lcyB7IDAgfTsKLQotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1f
Y29udGVudExheWVyIHsgbnVsbHB0ciB9OwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1f
dmlld092ZXJsYXlSb290TGF5ZXIgeyBudWxscHRyIH07Ci0gICAgCi0gICAgV2Vha1B0ckZhY3Rv
cnk8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE+IG1fd2Vha1B0ckZhY3Rvcnk7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19EUkFXSU5HX0FS
RUEoUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEsIERyYXdpbmdBcmVhVHlwZVJlbW90ZUxheWVy
VHJlZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjE0NmZhMGYwYjg2NjVjOWQyNDA2MDhkZWQ3MWVjYjgzNTYzYTE2My4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0K
KysrIC9kZXYvbnVsbApAQCAtMSw1MTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oIgotCi0j
aW1wb3J0ICJEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIkdyYXBoaWNzTGF5
ZXJDQVJlbW90ZS5oIgotI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgiCi0jaW1wb3J0
ICJSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaCIKLSNpbXBvcnQgIlJlbW90ZUxh
eWVyVHJlZUNvbnRleHQuaCIKLSNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNo
TW9uaXRvci5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3Nh
Z2VzLmgiCi0jaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIgotI2ltcG9ydCAi
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oIgotI2ltcG9ydCAiV2ViUGFn
ZS5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpD
b3JlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RlYnVnUGFnZU92ZXJsYXlzLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8
V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL01haW5GcmFt
ZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRl
clZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
VGlsZWRCYWNraW5nLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4K
LSNpbXBvcnQgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OlJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKFdlYlBhZ2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMmKQotICAgIDogRHJhd2luZ0FyZWEoRHJhd2luZ0FyZWFUeXBlUmVt
b3RlTGF5ZXJUcmVlLCB3ZWJQYWdlKQotICAgICwgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0KHN0
ZDo6bWFrZV91bmlxdWU8UmVtb3RlTGF5ZXJUcmVlQ29udGV4dD4od2ViUGFnZSkpCi0gICAgLCBt
X3Jvb3RMYXllcihHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwg
KnRoaXMpKQotICAgICwgbV9sYXllckZsdXNoVGltZXIoKnRoaXMsICZSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMpCi0gICAgLCBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCi17
Ci0gICAgd2ViUGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLnNldEZvcmNlQ29tcG9zaXRpbmdN
b2RlKHRydWUpOwotI2lmIFBMQVRGT1JNKElPUykKLSAgICB3ZWJQYWdlLmNvcmVQYWdlKCktPnNl
dHRpbmdzKCkuc2V0RGVsZWdhdGVzUGFnZVNjYWxpbmcodHJ1ZSk7Ci0jZW5kaWYKLSAgICBtX3Jv
b3RMYXllci0+c2V0TmFtZSgiZHJhd2luZyBhcmVhIHJvb3QiKTsKLQotICAgIG1fY29tbWl0UXVl
dWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5Db21taXRRdWV1ZSIsIG51bGxwdHIpOwotCi0gICAg
Ly8gSW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgd2UgZ2V0IGEgdW5pcXVlIERpc3BsYXlSZWZyZXNo
TW9uaXRvciBwZXItRHJhd2luZ0FyZWEgKG5lY2Vzc2FyeSBiZWNhdXNlIERpc3BsYXlSZWZyZXNo
TW9uaXRvcgotICAgIC8vIGlzIGRyaXZlbiBieSB0aGlzIGNsYXNzKSwgZ2l2ZSBlYWNoIHBhZ2Ug
YSB1bmlxdWUgRGlzcGxheUlEIGRlcml2ZWQgZnJvbSBXZWJQYWdlJ3MgdW5pcXVlIElELgotICAg
IC8vIEZJWE1FOiBXaGlsZSB1c2luZyB0aGUgaGlnaCBlbmQgb2YgdGhlIHJhbmdlIG9mIERpc3Bs
YXlJRHMgbWFrZXMgYSBjb2xsaXNpb24gd2l0aCByZWFsLCBub24tUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWEKLSAgICAvLyBEaXNwbGF5SURzIGxlc3MgbGlrZWx5LCBpdCBpcyBub3QgZW50aXJl
bHkgc2FmZSB0byBoYXZlIGEgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEgYW5kIFRpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhCi0gICAgLy8gY29lZXhpc3QgaW4gdGhlIHNhbWUgcHJvY2Vz
cy4KLSAgICB3ZWJQYWdlLndpbmRvd1NjcmVlbkRpZENoYW5nZShzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCkgLSB3ZWJQYWdlLnBhZ2VJRCgpKTsKLX0KLQotUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWE6On5SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSgpCi17Ci0gICAgZGlz
cGF0Y2hfcmVsZWFzZShtX2NvbW1pdFF1ZXVlKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmKQotewot
fQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzY3JvbGwoY29uc3QgSW50UmVj
dCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCi17Ci19Ci0KLUdyYXBo
aWNzTGF5ZXJGYWN0b3J5KiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Z3JhcGhpY3NMYXll
ckZhY3RvcnkoKQotewotICAgIHJldHVybiBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQuZ2V0KCk7
Ci19Ci0KLVJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhOjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlz
cGxheUlEKQotewotICAgIGF1dG8gbW9uaXRvciA9IFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZy
ZXNoTW9uaXRvcjo6Y3JlYXRlKGRpc3BsYXlJRCwgKnRoaXMpOwotICAgIG1fZGlzcGxheVJlZnJl
c2hNb25pdG9ycy5hZGQobW9uaXRvci5wdHIoKSk7Ci0gICAgcmV0dXJuIFdURk1vdmUobW9uaXRv
cik7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OndpbGxEZXN0cm95RGlz
cGxheVJlZnJlc2hNb25pdG9yKERpc3BsYXlSZWZyZXNoTW9uaXRvciogbW9uaXRvcikKLXsKLSAg
ICBhdXRvIHJlbW90ZU1vbml0b3IgPSBzdGF0aWNfY2FzdDxSZW1vdGVMYXllclRyZWVEaXNwbGF5
UmVmcmVzaE1vbml0b3IqPihtb25pdG9yKTsKLSAgICBtX2Rpc3BsYXlSZWZyZXNoTW9uaXRvcnMu
cmVtb3ZlKHJlbW90ZU1vbml0b3IpOwotCi0gICAgaWYgKG1fZGlzcGxheVJlZnJlc2hNb25pdG9y
c1RvTm90aWZ5KQotICAgICAgICBtX2Rpc3BsYXlSZWZyZXNoTW9uaXRvcnNUb05vdGlmeS0+cmVt
b3ZlKHJlbW90ZU1vbml0b3IpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
Ojp1cGRhdGVSb290TGF5ZXJzKCkKLXsKLSAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxk
cmVuOwotICAgIGlmIChtX2NvbnRlbnRMYXllcikgewotICAgICAgICBjaGlsZHJlbi5hcHBlbmQo
bV9jb250ZW50TGF5ZXIpOwotICAgICAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKLSAg
ICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX3ZpZXdPdmVybGF5Um9vdExheWVyKTsKLSAgICB9
Ci0KLSAgICBtX3Jvb3RMYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwotfQotCi12b2lkIFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIo
RnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikKLXsKLSAg
ICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Zp
ZXdPdmVybGF5Um9vdExheWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7Ci0gICAgdXBkYXRlUm9v
dExheWVycygpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzZXRSb290
Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCi17Ci0gICAgbV9jb250
ZW50TGF5ZXIgPSByb290TGF5ZXI7Ci0gICAgdXBkYXRlUm9vdExheWVycygpOwotICAgIHNjaGVk
dWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWE6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IEludFNpemUmIHZpZXdTaXplLCBjb25zdCBJ
bnRTaXplJiBsYXllclBvc2l0aW9uLCBib29sIGZsdXNoU3luY2hyb25vdXNseSwgY29uc3QgV2Vi
Q29yZTo6TWFjaFNlbmRSaWdodCYpCi17Ci0gICAgbV92aWV3U2l6ZSA9IHZpZXdTaXplOwotICAg
IG1fd2ViUGFnZS5zZXRTaXplKHZpZXdTaXplKTsKLQotICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllckZsdXNoKCk7Ci0KLSAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQ
cm94eTo6RGlkVXBkYXRlR2VvbWV0cnkoKSk7Ci19Ci0KLWJvb2wgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWE6OnNob3VsZFVzZVRpbGVkQmFja2luZ0ZvckZyYW1lVmlldyhjb25zdCBGcmFtZVZp
ZXcmIGZyYW1lVmlldykKLXsKLSAgICByZXR1cm4gZnJhbWVWaWV3LmZyYW1lKCkuaXNNYWluRnJh
bWUoKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6dXBkYXRlUHJlZmVy
ZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpCi17Ci0gICAgU2V0dGluZ3MmIHNldHRp
bmdzID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCk7Ci0KLSAgICAvLyBGaXhlZCBw
b3NpdGlvbiBlbGVtZW50cyBuZWVkIHRvIGJlIGNvbXBvc2l0ZWQgYW5kIGNyZWF0ZSBzdGFja2lu
ZyBjb250ZXh0cwotICAgIC8vIGluIG9yZGVyIHRvIGJlIHNjcm9sbGVkIGJ5IHRoZSBTY3JvbGxp
bmdDb29yZGluYXRvci4KLSAgICBzZXR0aW5ncy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
Rml4ZWRQb3NpdGlvbkVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBtX3Jvb3RMYXllci0+c2V0U2hvd0Rl
YnVnQm9yZGVyKHNldHRpbmdzLnNob3dEZWJ1Z0JvcmRlcnMoKSk7Ci0KLSAgICBpZiAoTWFpbkZy
YW1lKiBtYWluRnJhbWUgPSBtX3dlYlBhZ2UubWFpbkZyYW1lKCkpCi0gICAgICAgIERlYnVnUGFn
ZU92ZXJsYXlzOjpzZXR0aW5nc0NoYW5nZWQoKm1haW5GcmFtZSk7Ci19Ci0KLSNpZiBQTEFURk9S
TShJT1MpCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzZXREZXZpY2VTY2FsZUZh
Y3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKLXsKLSAgICBtX3dlYlBhZ2Uuc2V0RGV2aWNl
U2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwotfQotI2VuZGlmCi0KLXZvaWQgUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4oYm9vbCBpc0Zy
b3plbikKLXsKLSAgICBpZiAobV9pc0ZsdXNoaW5nU3VzcGVuZGVkID09IGlzRnJvemVuKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2lzRmx1c2hpbmdTdXNwZW5kZWQgPSBpc0Zyb3plbjsKLQot
ICAgIGlmICghbV9pc0ZsdXNoaW5nU3VzcGVuZGVkICYmIG1faGFzRGVmZXJyZWRGbHVzaCkgewot
ICAgICAgICBtX2hhc0RlZmVycmVkRmx1c2ggPSBmYWxzZTsKLSAgICAgICAgc2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyRmx1c2goKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWE6OmZvcmNlUmVwYWludCgpCi17Ci0gICAgaWYgKG1faXNGbHVzaGluZ1N1c3BlbmRl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV93ZWJQYWdl
LmNvcmVQYWdlKCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZp
ZXcoKTsKLSAgICAgICAgaWYgKCFmcmFtZVZpZXcgfHwgIWZyYW1lVmlldy0+dGlsZWRCYWNraW5n
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmcmFtZVZpZXctPnRpbGVkQmFj
a2luZygpLT5mb3JjZVJlcGFpbnQoKTsKLSAgICB9Ci0KLSAgICBmbHVzaExheWVycygpOwotfQot
Ci12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRp
ZFN0YXJ0KHVpbnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUgc3RhcnRU
aW1lKQotewotICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+YW5pbWF0aW9uRGlkU3RhcnQo
bGF5ZXJJRCwga2V5LCBzdGFydFRpbWUpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1aW50NjRfdCBsYXllcklELCBjb25z
dCBTdHJpbmcmIGtleSkKLXsKLSAgICBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQtPmFuaW1hdGlv
bkRpZEVuZChsYXllcklELCBrZXkpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhOjpzZXRWaWV3RXhwb3NlZFJlY3Qoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFJlY3Q+
IHZpZXdFeHBvc2VkUmVjdCkKLXsKLSAgICBtX3ZpZXdFeHBvc2VkUmVjdCA9IHZpZXdFeHBvc2Vk
UmVjdDsKLSAgICB1cGRhdGVTY3JvbGxlZEV4cG9zZWRSZWN0KCk7Ci19Ci0KLSNpZiBQTEFURk9S
TShJT1MpCi1XZWJDb3JlOjpGbG9hdFJlY3QgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmV4
cG9zZWRDb250ZW50UmVjdCgpIGNvbnN0Ci17Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBt
X3dlYlBhZ2UubWFpbkZyYW1lVmlldygpOwotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICByZXR1cm4gZnJhbWVWaWV3LT5leHBvc2VkQ29udGVu
dFJlY3QoKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6c2V0RXhwb3Nl
ZENvbnRlbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZXhwb3NlZENvbnRlbnRSZWN0KQotewotICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKTsKLSAgICBp
ZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChmcmFtZVZpZXctPmV4cG9z
ZWRDb250ZW50UmVjdCgpID09IGV4cG9zZWRDb250ZW50UmVjdCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZnJhbWVWaWV3LT5zZXRFeHBvc2VkQ29udGVudFJlY3QoZXhwb3NlZENvbnRlbnRSZWN0
KTsKLSAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotI2VuZGlmCi0KLXZv
aWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3Qo
KQotewotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdlLm1haW5GcmFtZVZpZXco
KTsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY3JvbGxl
ZFZpZXdFeHBvc2VkUmVjdCA9IG1fdmlld0V4cG9zZWRSZWN0OwotCi0jaWYgIVBMQVRGT1JNKElP
UykKLSAgICBpZiAobV92aWV3RXhwb3NlZFJlY3QpIHsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNj
cm9sbE9mZnNldCA9IGZyYW1lVmlldy0+c2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKGZyYW1lVmll
dy0+c2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgICAgIG1fc2Nyb2xsZWRWaWV3RXhwb3NlZFJlY3Qu
dmFsdWUoKS5tb3ZlQnkoc2Nyb2xsT2Zmc2V0KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGZyYW1l
Vmlldy0+c2V0Vmlld0V4cG9zZWRSZWN0KG1fc2Nyb2xsZWRWaWV3RXhwb3NlZFJlY3QpOwotfQot
Ci1UaWxlZEJhY2tpbmcqIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjptYWluRnJhbWVUaWxl
ZEJhY2tpbmcoKSBjb25zdAotewotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdl
Lm1haW5GcmFtZVZpZXcoKTsKLSAgICByZXR1cm4gZnJhbWVWaWV3ID8gZnJhbWVWaWV3LT50aWxl
ZEJhY2tpbmcoKSA6IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWE6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoSW1tZWRpYXRlbHkoKQotewotICAgIG1f
bGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12b2lkIFJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpCi17Ci0gICAg
aWYgKG1faXNGbHVzaGluZ1N1c3BlbmRlZCkgewotICAgICAgICBtX2lzTGF5ZXJGbHVzaFRocm90
dGxpbmdUZW1wb3JhcmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb24gPSBmYWxzZTsKLSAgICAgICAg
bV9oYXNEZWZlcnJlZEZsdXNoID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAobV9pc0xheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlEaXNhYmxlZEZvckludGVyYWN0
aW9uKSB7Ci0gICAgICAgIG1faXNMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlzYWJs
ZWRGb3JJbnRlcmFjdGlvbiA9IGZhbHNlOwotICAgICAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5
ZXJGbHVzaEltbWVkaWF0ZWx5KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
bV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29u
c3QgU2Vjb25kcyBpbml0aWFsRmx1c2hEZWxheSA9IDUwMF9tczsKLSAgICBjb25zdCBTZWNvbmRz
IGZsdXNoRGVsYXkgPSAxNTAwX21zOwotICAgIFNlY29uZHMgdGhyb3R0bGVEZWxheSA9IG1faXNU
aHJvdHRsaW5nTGF5ZXJGbHVzaGVzID8gKG1faXNJbml0aWFsVGhyb3R0bGVkTGF5ZXJGbHVzaCA/
IGluaXRpYWxGbHVzaERlbGF5IDogZmx1c2hEZWxheSkgOiAwX3M7Ci0gICAgbV9pc0luaXRpYWxU
aHJvdHRsZWRMYXllckZsdXNoID0gZmFsc2U7Ci0KLSAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFy
dE9uZVNob3QodGhyb3R0bGVEZWxheSk7Ci19Ci0KLWJvb2wgUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWE6OmFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKFdlYkNvcmU6OkxheWVyRmx1c2hUaHJv
dHRsZVN0YXRlOjpGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxhZ3MgJiBXZWJDb3JlOjpMYXll
ckZsdXNoVGhyb3R0bGVTdGF0ZTo6VXNlcklzSW50ZXJhY3RpbmcpCi0gICAgICAgIG1faXNMYXll
ckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlzYWJsZWRGb3JJbnRlcmFjdGlvbiA9IHRydWU7
Ci0KLSAgICBib29sIHdhc1Rocm90dGxpbmdMYXllckZsdXNoZXMgPSBtX2lzVGhyb3R0bGluZ0xh
eWVyRmx1c2hlczsKLSAgICBtX2lzVGhyb3R0bGluZ0xheWVyRmx1c2hlcyA9IGZsYWdzICYgV2Vi
Q29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkVuYWJsZWQ7Ci0KLSAgICBpZiAoIXdhc1Ro
cm90dGxpbmdMYXllckZsdXNoZXMgJiYgbV9pc1Rocm90dGxpbmdMYXllckZsdXNoZXMpCi0gICAg
ICAgIG1faXNJbml0aWFsVGhyb3R0bGVkTGF5ZXJGbHVzaCA9IHRydWU7Ci0KLSAgICAvLyBSZS1z
Y2hlZHVsZSB0aGUgZmx1c2ggaWYgd2Ugc3RvcHBlZCB0aHJvdHRsaW5nLgotICAgIGlmICh3YXNU
aHJvdHRsaW5nTGF5ZXJGbHVzaGVzICYmICFtX2lzVGhyb3R0bGluZ0xheWVyRmx1c2hlcyAmJiBt
X2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVy
LnN0b3AoKTsKLSAgICAgICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6
OmZsdXNoTGF5ZXJzKCkKLXsKLSAgICBpZiAoIW1fcm9vdExheWVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pc0ZsdXNoaW5nU3VzcGVuZGVkKSB7Ci0gICAgICAgIG1faGFzRGVmZXJy
ZWRGbHVzaCA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV93YWl0
aW5nRm9yQmFja2luZ1N0b3JlU3dhcCkgewotICAgICAgICBtX2hhZEZsdXNoRGVmZXJyZWRXaGls
ZVdhaXRpbmdGb3JCYWNraW5nU3RvcmVTd2FwID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BlbmRpbmdCYWNraW5nU3RvcmVGbHVzaGVyIHx8
IG1fcGVuZGluZ0JhY2tpbmdTdG9yZUZsdXNoZXItPmhhc0ZsdXNoZWQoKSk7Ci0KLSAgICBSZW1v
dGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24mIGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24gPSBt
X3JlbW90ZUxheWVyVHJlZUNvbnRleHQtPmJhY2tpbmdTdG9yZUNvbGxlY3Rpb24oKTsKLSAgICBi
YWNraW5nU3RvcmVDb2xsZWN0aW9uLndpbGxGbHVzaExheWVycygpOwotCi0gICAgbV93ZWJQYWdl
LmxheW91dElmTmVlZGVkKCk7Ci0KLSAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QoRmxvYXRQb2lu
dCgpLCBtX3ZpZXdTaXplKTsKLSAgICBpZiAobV9zY3JvbGxlZFZpZXdFeHBvc2VkUmVjdCkKLSAg
ICAgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRWaWV3RXhwb3NlZFJlY3QudmFs
dWUoKSk7Ci0KLSAgICBSZWZQdHI8V2ViUGFnZT4gcmV0YWluZWRQYWdlID0gJm1fd2ViUGFnZTsK
LSAgICBbQ0FUcmFuc2FjdGlvbiBhZGRDb21taXRIYW5kbGVyOltyZXRhaW5lZFBhZ2VdIHsKLSAg
ICAgICAgaWYgKFBhZ2UqIGNvcmVQYWdlID0gcmV0YWluZWRQYWdlLT5jb3JlUGFnZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IHJldGFpbmVkUGFnZS0+bWFpbkZyYW1l
KCkpCi0gICAgICAgICAgICAgICAgY29yZVBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaWRD
b21wb3NpdGUoKmNvcmVGcmFtZSk7Ci0gICAgICAgIH0KLSAgICB9IGZvclBoYXNlOmtDQVRyYW5z
YWN0aW9uUGhhc2VQb3N0Q29tbWl0XTsKLQotICAgIG1fd2ViUGFnZS5tYWluRnJhbWVWaWV3KCkt
PmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwotCi0gICAgLy8gQmVj
YXVzZSBvdXIgdmlldy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMgbm90IGF0dGFjaGVk
IHRvIHRoZSBGcmFtZVZpZXcncyBHcmFwaGljc0xheWVyIHRyZWUsIHdlIG5lZWQgdG8gZmx1c2gg
aXQgbWFudWFsbHkuCi0gICAgaWYgKG1fdmlld092ZXJsYXlSb290TGF5ZXIpCi0gICAgICAgIG1f
dmlld092ZXJsYXlSb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh2aXNpYmxlUmVjdCk7
Ci0KLSAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpOwotCi0gICAgLy8gRklYTUU6IE1pbmltaXplIHRoZXNlIHRyYW5zYWN0aW9ucyBpZiBub3Ro
aW5nIGNoYW5nZWQuCi0gICAgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24gbGF5ZXJUcmFuc2Fj
dGlvbjsKLSAgICBsYXllclRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uSUQodGFrZU5leHRUcmFu
c2FjdGlvbklEKCkpOwotICAgIGxheWVyVHJhbnNhY3Rpb24uc2V0Q2FsbGJhY2tJRHMoV1RGTW92
ZShtX3BlbmRpbmdDYWxsYmFja0lEcykpOwotICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+
c2V0TmV4dEZsdXNoSXNGb3JJbW1lZGlhdGVQYWludChtX25leHRGbHVzaElzRm9ySW1tZWRpYXRl
UGFpbnQpOwotICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+YnVpbGRUcmFuc2FjdGlvbihs
YXllclRyYW5zYWN0aW9uLCAqZG93bmNhc3Q8R3JhcGhpY3NMYXllckNBUmVtb3RlPigqbV9yb290
TGF5ZXIpLnBsYXRmb3JtQ0FMYXllcigpKTsKLSAgICBtX3JlbW90ZUxheWVyVHJlZUNvbnRleHQt
PnNldE5leHRGbHVzaElzRm9ySW1tZWRpYXRlUGFpbnQoZmFsc2UpOwotICAgIGJhY2tpbmdTdG9y
ZUNvbGxlY3Rpb24ud2lsbENvbW1pdExheWVyVHJlZShsYXllclRyYW5zYWN0aW9uKTsKLSAgICBt
X3dlYlBhZ2Uud2lsbENvbW1pdExheWVyVHJlZShsYXllclRyYW5zYWN0aW9uKTsKLQotICAgIGxh
eWVyVHJhbnNhY3Rpb24uc2V0TmV3bHlSZWFjaGVkTGF5b3V0TWlsZXN0b25lcyhtX3BlbmRpbmdO
ZXdseVJlYWNoZWRMYXlvdXRNaWxlc3RvbmVzKTsKLSAgICBtX3BlbmRpbmdOZXdseVJlYWNoZWRM
YXlvdXRNaWxlc3RvbmVzID0gMDsKLQotICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJh
bnNhY3Rpb24gc2Nyb2xsaW5nVHJhbnNhY3Rpb247Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElO
RykKLSAgICBpZiAobV93ZWJQYWdlLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgIGRv
d25jYXN0PFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yPigqbV93ZWJQYWdlLnNjcm9sbGluZ0Nv
b3JkaW5hdG9yKCkpLmJ1aWxkVHJhbnNhY3Rpb24oc2Nyb2xsaW5nVHJhbnNhY3Rpb24pOwotI2Vu
ZGlmCi0KLSAgICBtX25leHRGbHVzaElzRm9ySW1tZWRpYXRlUGFpbnQgPSBmYWxzZTsKLSAgICBt
X3dhaXRpbmdGb3JCYWNraW5nU3RvcmVTd2FwID0gdHJ1ZTsKLQotICAgIG1fd2ViUGFnZS5zZW5k
KE1lc3NhZ2VzOjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpXaWxsQ29tbWl0TGF5
ZXJUcmVlKGxheWVyVHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JRCgpKSk7Ci0KLSAgICBNZXNzYWdl
czo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6Q29tbWl0TGF5ZXJUcmVlIG1lc3Nh
Z2UobGF5ZXJUcmFuc2FjdGlvbiwgc2Nyb2xsaW5nVHJhbnNhY3Rpb24pOwotICAgIGF1dG8gY29t
bWl0RW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8SVBDOjpFbmNvZGVyPihNZXNzYWdlczo6UmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6Q29tbWl0TGF5ZXJUcmVlOjpyZWNlaXZlck5h
bWUoKSwgTWVzc2FnZXM6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OkNvbW1pdExh
eWVyVHJlZTo6bmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCkpOwotICAgIGNvbW1pdEVuY29kZXIt
PmVuY29kZShtZXNzYWdlLmFyZ3VtZW50cygpKTsKLQotICAgIC8vIEZJWE1FOiBNb3ZlIGFsbCBi
YWNraW5nIHN0b3JlIGZsdXNoaW5nIG1hbmFnZW1lbnQgdG8gUmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmVDb2xsZWN0aW9uLgotICAgIGJvb2wgaGFkQW55Q2hhbmdlZEJhY2tpbmdTdG9yZSA9IGZhbHNl
OwotICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPj4gY29udGV4dHNUb0ZsdXNoOwot
ICAgIGZvciAoYXV0byYgbGF5ZXIgOiBsYXllclRyYW5zYWN0aW9uLmNoYW5nZWRMYXllcnMoKSkg
ewotICAgICAgICBpZiAobGF5ZXItPnByb3BlcnRpZXMoKS5jaGFuZ2VkUHJvcGVydGllcyAmIFJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllckNoYW5nZXM6OkJhY2tpbmdTdG9yZUNoYW5n
ZWQpIHsKLSAgICAgICAgICAgIGhhZEFueUNoYW5nZWRCYWNraW5nU3RvcmUgPSB0cnVlOwotICAg
ICAgICAgICAgaWYgKGxheWVyLT5wcm9wZXJ0aWVzKCkuYmFja2luZ1N0b3JlKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGF1dG8gY29udGV4dFBlbmRpbmdGbHVzaCA9IGxheWVyLT5wcm9wZXJ0aWVz
KCkuYmFja2luZ1N0b3JlLT50YWtlRnJvbnRDb250ZXh0UGVuZGluZ0ZsdXNoKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRleHRzVG9GbHVzaC5hcHBlbmQoY29udGV4dFBlbmRpbmdGbHVzaCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBsYXllci0+ZGlkQ29tbWl0KCk7
Ci0gICAgfQotCi0gICAgYmFja2luZ1N0b3JlQ29sbGVjdGlvbi5kaWRGbHVzaExheWVycygpOwot
Ci0gICAgaWYgKGhhZEFueUNoYW5nZWRCYWNraW5nU3RvcmUpCi0gICAgICAgIGJhY2tpbmdTdG9y
ZUNvbGxlY3Rpb24uc2NoZWR1bGVWb2xhdGlsaXR5VGltZXIoKTsKLQotICAgIFJlZlB0cjxCYWNr
aW5nU3RvcmVGbHVzaGVyPiBiYWNraW5nU3RvcmVGbHVzaGVyID0gQmFja2luZ1N0b3JlRmx1c2hl
cjo6Y3JlYXRlKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCksIFdURk1vdmUoY29tbWl0RW5jb2RlciksIFdURk1vdmUoY29udGV4dHNUb0ZsdXNoKSk7Ci0g
ICAgbV9wZW5kaW5nQmFja2luZ1N0b3JlRmx1c2hlciA9IGJhY2tpbmdTdG9yZUZsdXNoZXI7Ci0K
LSAgICB1aW50NjRfdCBwYWdlSUQgPSBtX3dlYlBhZ2UucGFnZUlEKCk7Ci0gICAgZGlzcGF0Y2hf
YXN5bmMobV9jb21taXRRdWV1ZSwgW2JhY2tpbmdTdG9yZUZsdXNoZXIsIHBhZ2VJRF0gewotICAg
ICAgICBiYWNraW5nU3RvcmVGbHVzaGVyLT5mbHVzaCgpOwotCi0gICAgICAgIE1vbm90b25pY1Rp
bWUgdGltZXN0YW1wID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtwYWdlSUQsIHRpbWVzdGFtcF0gewotICAg
ICAgICAgICAgaWYgKFdlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53
ZWJQYWdlKHBhZ2VJRCkpCi0gICAgICAgICAgICAgICAgd2ViUGFnZS0+ZGlkRmx1c2hMYXllclRy
ZWVBdFRpbWUodGltZXN0YW1wKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZSgpCi17Ci0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHVzZSBhIGNvdW50ZWQgcmVwbGFjZW1lbnQgZm9yIHNldExheWVyVHJlZVN0YXRl
SXNGcm96ZW4sIGJ1dAotICAgIC8vIHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24gYXJlIG5v
dCBzdHJpY3RseSBwYWlyZWQuCi0KLSAgICBtX3dhaXRpbmdGb3JCYWNraW5nU3RvcmVTd2FwID0g
ZmFsc2U7Ci0KLSAgICBpZiAobV9oYWRGbHVzaERlZmVycmVkV2hpbGVXYWl0aW5nRm9yQmFja2lu
Z1N0b3JlU3dhcCkgewotICAgICAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwot
ICAgICAgICBtX2hhZEZsdXNoRGVmZXJyZWRXaGlsZVdhaXRpbmdGb3JCYWNraW5nU3RvcmVTd2Fw
ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBlbXB0eSB0cmFuc2FjdGlvbiBzZXJ2ZXMg
dG8gdHJpZ2dlciBDQSdzIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiBJT1N1cmZhY2VzLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzE2MTEwNjg3PgotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBb
Q0FUcmFuc2FjdGlvbiBjb21taXRdOwotCi0gICAgSGFzaFNldDxSZW1vdGVMYXllclRyZWVEaXNw
bGF5UmVmcmVzaE1vbml0b3IqPiBtb25pdG9yc1RvTm90aWZ5ID0gbV9kaXNwbGF5UmVmcmVzaE1v
bml0b3JzOwotICAgIEFTU0VSVCghbV9kaXNwbGF5UmVmcmVzaE1vbml0b3JzVG9Ob3RpZnkpOwot
ICAgIG1fZGlzcGxheVJlZnJlc2hNb25pdG9yc1RvTm90aWZ5ID0gJm1vbml0b3JzVG9Ob3RpZnk7
Ci0gICAgd2hpbGUgKCFtb25pdG9yc1RvTm90aWZ5LmlzRW1wdHkoKSkKLSAgICAgICAgbW9uaXRv
cnNUb05vdGlmeS50YWtlQW55KCktPmRpZFVwZGF0ZUxheWVycygpOwotICAgIG1fZGlzcGxheVJl
ZnJlc2hNb25pdG9yc1RvTm90aWZ5ID0gbnVsbHB0cjsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYTo6bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUm
IGNvbnRlbnRzU2l6ZSkKLXsKLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShjb250ZW50c1NpemUp
OwotfQotCi1ib29sIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjptYXJrTGF5ZXJzVm9sYXRp
bGVJbW1lZGlhdGVseUlmUG9zc2libGUoKQotewotICAgIHJldHVybiBtX3JlbW90ZUxheWVyVHJl
ZUNvbnRleHQtPmJhY2tpbmdTdG9yZUNvbGxlY3Rpb24oKS5tYXJrQWxsQmFja2luZ1N0b3JlVm9s
YXRpbGVJbW1lZGlhdGVseUlmUG9zc2libGUoKTsKLX0KLQotUmVmPFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhOjpCYWNraW5nU3RvcmVGbHVzaGVyPiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YTo6QmFja2luZ1N0b3JlRmx1c2hlcjo6Y3JlYXRlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlv
biwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4gZW5jb2RlciwgVmVjdG9yPFJldGFpblB0
cjxDR0NvbnRleHRSZWY+PiBjb250ZXh0c1RvRmx1c2gpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OkJhY2tpbmdTdG9yZUZsdXNoZXIoY29u
bmVjdGlvbiwgV1RGTW92ZShlbmNvZGVyKSwgV1RGTW92ZShjb250ZXh0c1RvRmx1c2gpKSk7Ci19
Ci0KLVJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpCYWNraW5nU3RvcmVGbHVzaGVyOjpCYWNr
aW5nU3RvcmVGbHVzaGVyKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4gZW5jb2RlciwgVmVjdG9yPFJldGFpblB0cjxDR0NvbnRleHRSZWY+
PiBjb250ZXh0c1RvRmx1c2gpCi0gICAgOiBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikKLSAgICAs
IG1fY29tbWl0RW5jb2RlcihXVEZNb3ZlKGVuY29kZXIpKQotICAgICwgbV9jb250ZXh0c1RvRmx1
c2goV1RGTW92ZShjb250ZXh0c1RvRmx1c2gpKQotICAgICwgbV9oYXNGbHVzaGVkKGZhbHNlKQot
ewotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpCYWNraW5nU3RvcmVGbHVz
aGVyOjpmbHVzaCgpCi17Ci0gICAgQVNTRVJUKCFtX2hhc0ZsdXNoZWQpOwotCi0gICAgVHJhY2VT
Y29wZSB0cmFjaW5nU2NvcGUoQmFja2luZ1N0b3JlRmx1c2hTdGFydCwgQmFja2luZ1N0b3JlRmx1
c2hFbmQpOwotICAgIAotICAgIGZvciAoYXV0byYgY29udGV4dCA6IG1fY29udGV4dHNUb0ZsdXNo
KQotICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0LmdldCgpKTsKLSAgICBtX2hhc0ZsdXNo
ZWQgPSB0cnVlOwotCi0gICAgbV9jb25uZWN0aW9uLT5zZW5kTWVzc2FnZShXVEZNb3ZlKG1fY29t
bWl0RW5jb2RlciksIHsgfSk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6
OmFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UoQWN0aXZpdHlTdGF0ZTo6RmxhZ3MsIGJvb2wgd2FudHNE
aWRVcGRhdGVBY3Rpdml0eVN0YXRlLCBjb25zdCBWZWN0b3I8Q2FsbGJhY2tJRD4mKQotewotICAg
IC8vIEZJWE1FOiBTaG91bGQgd2Ugc3VzcGVuZCBwYWludGluZyB3aGlsZSBub3QgdmlzaWJsZSwg
bGlrZSBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYT8gUHJvYmFibHkuCi0KLSAgICBpZiAo
d2FudHNEaWRVcGRhdGVBY3Rpdml0eVN0YXRlKSB7Ci0gICAgICAgIG1fbmV4dEZsdXNoSXNGb3JJ
bW1lZGlhdGVQYWludCA9IHRydWU7Ci0gICAgICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZs
dXNoSW1tZWRpYXRlbHkoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWE6OmFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRChDYWxsYmFja0lEIGNhbGxiYWNrSUQpCi17
Ci0gICAgLy8gQXNzdW1lIHRoYXQgaWYgc29tZW9uZSBpcyBsaXN0ZW5pbmcgZm9yIHRoaXMgdHJh
bnNhY3Rpb24ncyBjb21wbGV0aW9uLCB0aGF0IHRoZXkgd2FudCBpdCB0bwotICAgIC8vIGJlIGEg
ImNvbXBsZXRlIiBwYWludCAoaW5jbHVkaW5nIGltYWdlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJl
IGFzeW5jaHJvbm91c2x5IGRlY29kaW5nKS4KLSAgICBtX25leHRGbHVzaElzRm9ySW1tZWRpYXRl
UGFpbnQgPSB0cnVlOwotCi0gICAgbV9wZW5kaW5nQ2FsbGJhY2tJRHMuYXBwZW5kKHN0YXRpY19j
YXN0PFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkNhbGxiYWNrSUQ+KGNh
bGxiYWNrSUQpKTsKLSAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOwotfQotCi1i
b29sIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpkaXNwYXRjaERpZFJlYWNoTGF5b3V0TWls
ZXN0b25lKFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZXMgbGF5b3V0TWlsZXN0b25lcykKLXsKLSAg
ICBtX3BlbmRpbmdOZXdseVJlYWNoZWRMYXlvdXRNaWxlc3RvbmVzIHw9IGxheW91dE1pbGVzdG9u
ZXM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319711</attachid>
            <date>2017-09-02 01:42:49 -0700</date>
            <delta_ts>2017-09-02 15:53:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176273-20170902014248.patch</filename>
            <type>text/plain</type>
            <size>248856</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDU2YjAxMzkwZjEwYTdkZWU0
ODA3ZDU5NGU3ZDRiNzE1YmU2ODA5YmYuLjA4YTFkYTkwNTdiNTY1OTk0ZDU4OGJmMmUxZWM5N2Fj
MjhiOTYyNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzMgQEAKIDIwMTctMDktMDIgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSBVSSBQcm9jZXNz
IHBhcnQgb2YgdGhlIFJlbW90ZSBMYXllciBUcmVlIGNvZGUgb3V0IG9mIGEgTWFjLXNwZWNpZmlj
IGRpcmVjdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc2MjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVUktc2lkZSBjb21wb3NpdGluZyB3b3JrcyBvbiBhbGwgQ29jb2EgcGxhdGZvcm1zLCBzbyB0
aGUgY29kZSBzaG91bGQKKyAgICAgICAgbm90IGxpdmUgaW5zaWRlIE1hYy8uIEFsc28gbWVyZ2Ug
dGhlIFNjcm9sbGluZyBkaXJlY3RvcnkgaW4gaGVyZSwKKyAgICAgICAgc2luY2UgdGhvc2UgZmls
ZXMgYXJlIHZlcnkgcmVsYXRlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNl
ZWJLaXQvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmguCisg
ICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gVUlQcm9jZXNzL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJUHJvY2Vz
cy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbTogUmVu
YW1lZCBmcm9tIFVJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5t
bS4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUhv
c3QuaDogUmVuYW1lZCBmcm9tIFVJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlSG9zdC5oLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5t
bTogUmVuYW1lZCBmcm9tIFVJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlSG9zdC5tbS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVNjcm9sbGlu
Z1BlcmZvcm1hbmNlRGF0YS5oOiBSZW5hbWVkIGZyb20gVUlQcm9jZXNzL0NvY29hL1JlbW90ZUxh
eWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9S
ZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLm1t
OiBSZW5hbWVkIGZyb20gVUlQcm9jZXNzL0NvY29hL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1Bl
cmZvcm1hbmNlRGF0YS5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gVUlQcm9jZXNz
L1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJv
eHkuaDogUmVuYW1lZCBmcm9tIFVJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVt
b3RlU2Nyb2xsaW5nVHJlZS5jcHA6IFJlbmFtZWQgZnJvbSBVSVByb2Nlc3MvU2Nyb2xsaW5nL1Jl
bW90ZVNjcm9sbGluZ1RyZWUuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlU2Nyb2xsaW5nVHJlZS5oOiBSZW5hbWVkIGZyb20gVUlQcm9jZXNzL1Njcm9sbGlu
Zy9SZW1vdGVTY3JvbGxpbmdUcmVlLmguCisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVy
VHJlZS9pb3MvUmVtb3RlTGF5ZXJUcmVlSG9zdElPUy5tbTogUmVuYW1lZCBmcm9tIFVJUHJvY2Vz
cy9pb3MvUmVtb3RlTGF5ZXJUcmVlSG9zdElPUy5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVt
b3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tOiBS
ZW5hbWVkIGZyb20gVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5
SU9TLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGlu
Z1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaDogUmVuYW1lZCBmcm9tIFVJUHJvY2Vzcy9T
Y3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlSU9TLm1tOiBSZW5hbWVkIGZyb20gVUlQcm9jZXNzL1Njcm9sbGluZy9p
b3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbS4KKyAgICAgICAgKiBX
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworMjAxNy0wOS0wMiAgVGltIEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKwogICAgICAgICBGaXggc29tZSBzdHlsZSBp
c3N1ZXMgaW4gdGhlIFdlYiBQcm9jZXNzIHBhcnQgb2YgdGhlIFJlbW90ZSBMYXllciBUcmVlIGNv
ZGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjI3
MgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMTdlNzZkN2MyOThjYWI4M2FiMTIx
NThhMzJjMTcwYmZhMmNjOGQzZC4uYmE0NGNiYTJjYmJkOGQ2NzliNGRiNDI0NDk1ZGY4Mzg1MWM1
NDhjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNzUsNiArNzUsNyBAQCBWUEFU
SCA9IFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scyBc
CiAgICAgJChXZWJLaXQyKS9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucyBcCiAgICAgJChXZWJLaXQy
KS9VSVByb2Nlc3MvUGx1Z2lucyBcCisgICAgJChXZWJLaXQyKS9VSVByb2Nlc3MvUmVtb3RlTGF5
ZXJUcmVlIFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9TdG9yYWdlIFwKICAgICAkKFdlYktp
dDIpL1VJUHJvY2Vzcy9Vc2VyQ29udGVudCBcCiAgICAgJChXZWJLaXQyKS9VSVByb2Nlc3MvV2Vi
U3RvcmFnZSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCA3ZjlhODk1M2Y0M2M0NzQxYzVm
YzM3OGRjN2E0Njk2OTgyZmYyODYyLi40NGE5MDQwOTY2NDM3ZjZhZjU2NmYxMzdhODQyMDc4ODE3
YWVmNzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTI1Myw3ICsyNTMsNiBAQCBsaXN0
KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQ29jb2EvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lm1tCiAgICAgVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25T
dGF0ZS5tbQogICAgIFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tCi0gICAg
VUlQcm9jZXNzL0NvY29hL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5t
bQogICAgIFVJUHJvY2Vzcy9Db2NvYS9TZXNzaW9uU3RhdGVDb2RpbmcubW0KICAgICBVSVByb2Nl
c3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQogICAgIFVJUHJvY2Vzcy9Db2NvYS9WZXJzaW9uQ2hlY2tz
Lm1tCkBAIC0yNzYsOCArMjc1LDExIEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAg
IFVJUHJvY2Vzcy9QbHVnaW5zL21hYy9QbHVnaW5Qcm9jZXNzTWFuYWdlck1hYy5tbQogICAgIFVJ
UHJvY2Vzcy9QbHVnaW5zL21hYy9QbHVnaW5Qcm9jZXNzUHJveHlNYWMubW0KIAotICAgIFVJUHJv
Y2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHAKLSAgICBV
SVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ1RyZWUuY3BwCisgICAgVUlQcm9jZXNz
L1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEu
bW0KKyAgICBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHkuY3BwCisgICAgVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxp
bmdUcmVlLmNwcAorICAgIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eS5tbQorICAgIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJUcmVlSG9zdC5tbQogCiAgICAgVUlQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFn
ZXIuY3BwCiAKQEAgLTI4Niw4ICsyODgsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMK
ICAgICBVSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5tbQogICAgIFVJUHJvY2Vzcy9tYWMv
TGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAogICAgIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGwubW0KLSAgICBVSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHkubW0KLSAgICBVSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZUhvc3QubW0KICAgICBVSVBy
b2Nlc3MvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCiAgICAgVUlQcm9jZXNzL21h
Yy9TZWNJdGVtU2hpbVByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9tYWMvU2VydmljZXNDb250cm9s
bGVyLm1tCkBAIC0zOTUsNyArMzk1LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvbWFjIgogICAgICIk
e1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQ29jb2EiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJv
Y2Vzcy9MYXVuY2hlci9tYWMiCi0gICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9TY3JvbGxp
bmciCisgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUiCisgICAg
IiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zIgogICAgICIke1dF
QktJVDJfRElSfS9VSVByb2Nlc3MvaW9zIgogICAgICIke1dFQktJVDJfRElSfS9QbGF0Zm9ybS9j
ZyIKICAgICAiJHtXRUJLSVQyX0RJUn0vUGxhdGZvcm0vY2xhc3NpZmllciIKQEAgLTQ3NSw3ICs0
NzYsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCiAgICAgVUlQcm9j
ZXNzL0NvY29hL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vz
cy9Db2NvYS9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KIAotICAg
IFVJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5p
bgorICAgIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eS5tZXNzYWdlcy5pbgorCiAgICAgVUlQcm9jZXNzL21hYy9TZWNJdGVtU2hpbVByb3h5
Lm1lc3NhZ2VzLmluCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5j
ZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1JlbW90ZUxheWVyVHJlZVNj
cm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
N2Y1MjFkNGUwMzU1MDRiZTk1NGQ1NWE1ZWI2M2ZiMmExNzkyOTYzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBSZW1vdGVMYXllclRy
ZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGFfaAotI2RlZmluZSBSZW1vdGVMYXllclRyZWVTY3Jv
bGxpbmdQZXJmb3JtYW5jZURhdGFfaAotCi0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgot
I2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTsKLQotY2xhc3MgUmVtb3RlTGF5ZXJUcmVlU2Ny
b2xsaW5nUGVyZm9ybWFuY2VEYXRhIHsKLXB1YmxpYzoKLSAgICBSZW1vdGVMYXllclRyZWVTY3Jv
bGxpbmdQZXJmb3JtYW5jZURhdGEoUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSYpOwot
ICAgIH5SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEoKTsKLQotICAgIHZv
aWQgZGlkQ29tbWl0TGF5ZXJUcmVlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZVJl
Y3QpOwotICAgIHZvaWQgZGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJs
ZVJlY3QpOwotCi0gICAgTlNBcnJheSAqZGF0YSgpOyAvLyBBcnJheSBvZiBbIHRpbWUsIGV2ZW50
IHR5cGUsIHVuZmlsbGVkIHBpeGVsIGNvdW50IF0KLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBi
bGFua1BpeGVsQ291bnQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkgY29u
c3Q7Ci0gICAgCi0gICAgc3RydWN0IEJsYW5rUGl4ZWxDb3VudCB7Ci0gICAgICAgIGVudW0gRXZl
bnRUeXBlIHsgRmlsbGVkLCBFeHBvc2VkIH07Ci0KLSAgICAgICAgZG91YmxlIHN0YXJ0VGltZTsK
LSAgICAgICAgZG91YmxlIGVuZFRpbWU7Ci0gICAgICAgIEV2ZW50VHlwZSBldmVudFR5cGU7Ci0g
ICAgICAgIHVuc2lnbmVkIGJsYW5rUGl4ZWxDb3VudDsKLSAgICAgICAgCi0gICAgICAgIEJsYW5r
UGl4ZWxDb3VudChkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIEV2ZW50VHlwZSB0eXBlLCB1bnNp
Z25lZCBjb3VudCkKLSAgICAgICAgICAgIDogc3RhcnRUaW1lKHN0YXJ0KQotICAgICAgICAgICAg
LCBlbmRUaW1lKGVuZCkKLSAgICAgICAgICAgICwgZXZlbnRUeXBlKHR5cGUpCi0gICAgICAgICAg
ICAsIGJsYW5rUGl4ZWxDb3VudChjb3VudCkKLSAgICAgICAgeyB9Ci0gICAgICAgIAotICAgICAg
ICBib29sIGNhbkNvYWxlc2NlKEJsYW5rUGl4ZWxDb3VudDo6RXZlbnRUeXBlLCB1bnNpZ25lZCBi
bGFua1BpeGVsQ291bnQpIGNvbnN0OwotICAgIH07Ci0gICAgCi0gICAgdm9pZCBhcHBlbmRCbGFu
a1BpeGVsQ291bnQoQmxhbmtQaXhlbENvdW50OjpFdmVudFR5cGUsIHVuc2lnbmVkIGJsYW5rUGl4
ZWxDb3VudCk7Ci0KLSAgICBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5JiBtX2RyYXdp
bmdBcmVhOwotICAgIFZlY3RvcjxCbGFua1BpeGVsQ291bnQ+IG1fYmxhbmtQaXhlbENvdW50czsK
LX07Ci0KLX0KLQotI2VuZGlmIC8vIFJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNl
RGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZW1vdGVM
YXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjOTMwN2Y4YmVkNmE3YTUwMDY3NWMyOTNlNjAx
MDkyY2RkNTM3MmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5n
UGVyZm9ybWFuY2VEYXRhLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZVNjcm9s
bGluZ1BlcmZvcm1hbmNlRGF0YS5oIgotCi0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5LmgiCi0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVIb3N0LmgiCi0jaW1wb3J0IDxR
dWFydHpDb3JlL0NBTGF5ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGlsZUNvbnRyb2xsZXIuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0KLVJl
bW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YTo6UmVtb3RlTGF5ZXJUcmVlU2Ny
b2xsaW5nUGVyZm9ybWFuY2VEYXRhKFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkmIGRy
YXdpbmdBcmVhKQotICAgIDogbV9kcmF3aW5nQXJlYShkcmF3aW5nQXJlYSkKLXsKLX0KLQotUmVt
b3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhOjp+UmVtb3RlTGF5ZXJUcmVlU2Ny
b2xsaW5nUGVyZm9ybWFuY2VEYXRhKCkKLXsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVTY3Jv
bGxpbmdQZXJmb3JtYW5jZURhdGE6OmRpZENvbW1pdExheWVyVHJlZShjb25zdCBGbG9hdFJlY3Qm
IHZpc2libGVSZWN0KQotewotICAgIC8vIEZJWE1FOiBtYXliZSB3ZSBvbmx5IGNhcmUgYWJvdXQg
bmV3bHkgY3JlYXRlZCB0aWxlcz8KLSAgICBhcHBlbmRCbGFua1BpeGVsQ291bnQoQmxhbmtQaXhl
bENvdW50OjpGaWxsZWQsIGJsYW5rUGl4ZWxDb3VudCh2aXNpYmxlUmVjdCkpOwotfQotCi12b2lk
IFJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YTo6ZGlkU2Nyb2xsKGNvbnN0
IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpCi17Ci0gICAgYXBwZW5kQmxhbmtQaXhlbENvdW50KEJs
YW5rUGl4ZWxDb3VudDo6RXhwb3NlZCwgYmxhbmtQaXhlbENvdW50KHZpc2libGVSZWN0KSk7Ci19
Ci0KLWJvb2wgUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhOjpCbGFua1Bp
eGVsQ291bnQ6OmNhbkNvYWxlc2NlKEJsYW5rUGl4ZWxDb3VudDo6RXZlbnRUeXBlIHR5cGUsIHVu
c2lnbmVkIHBpeGVsQ291bnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2ZW50VHlwZSA9PSB0eXBl
ICYmIGJsYW5rUGl4ZWxDb3VudCA9PSBwaXhlbENvdW50OwotfQotCi12b2lkIFJlbW90ZUxheWVy
VHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YTo6YXBwZW5kQmxhbmtQaXhlbENvdW50KEJsYW5r
UGl4ZWxDb3VudDo6RXZlbnRUeXBlIGV2ZW50VHlwZSwgdW5zaWduZWQgYmxhbmtQaXhlbENvdW50
KQotewotICAgIGRvdWJsZSBub3cgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKLSAgICBp
ZiAoIW1fYmxhbmtQaXhlbENvdW50cy5pc0VtcHR5KCkgJiYgbV9ibGFua1BpeGVsQ291bnRzLmxh
c3QoKS5jYW5Db2FsZXNjZShldmVudFR5cGUsIGJsYW5rUGl4ZWxDb3VudCkpIHsKLSAgICAgICAg
bV9ibGFua1BpeGVsQ291bnRzLmxhc3QoKS5lbmRUaW1lID0gbm93OwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9ibGFua1BpeGVsQ291bnRzLmFwcGVuZChCbGFua1BpeGVsQ291bnQo
bm93LCBub3csIGV2ZW50VHlwZSwgYmxhbmtQaXhlbENvdW50KSk7Ci19Ci0KLU5TQXJyYXkgKlJl
bW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YTo6ZGF0YSgpCi17Ci0gICAgTlNN
dXRhYmxlQXJyYXkqIGRhdGFBcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0
eTptX2JsYW5rUGl4ZWxDb3VudHMuc2l6ZSgpXTsKLSAgICAKLSAgICBmb3IgKGF1dG8gcGl4ZWxE
YXRhIDogbV9ibGFua1BpeGVsQ291bnRzKSB7Ci0gICAgICAgIFtkYXRhQXJyYXkgYWRkT2JqZWN0
OkBbCi0gICAgICAgICAgICBAKHBpeGVsRGF0YS5zdGFydFRpbWUpLAotICAgICAgICAgICAgKHBp
eGVsRGF0YS5ldmVudFR5cGUgPT0gQmxhbmtQaXhlbENvdW50OjpGaWxsZWQpID8gQCJmaWxsZWQi
IDogQCJleHBvc2VkIiwKLSAgICAgICAgICAgIEAocGl4ZWxEYXRhLmJsYW5rUGl4ZWxDb3VudCkK
LSAgICAgICAgXV07Ci0gICAgfQotICAgIHJldHVybiBkYXRhQXJyYXk7Ci19Ci0KLXN0YXRpYyBD
QUxheWVyICpmaW5kVGlsZUdyaWRDb250YWluZXJMYXllcihDQUxheWVyICpsYXllcikKLXsKLSAg
ICBmb3IgKENBTGF5ZXIgKmN1cnJMYXllciA6IFtsYXllciBzdWJsYXllcnNdKSB7Ci0gICAgICAg
IFN0cmluZyBsYXllck5hbWUgPSBbY3VyckxheWVyIG5hbWVdOwotICAgICAgICBpZiAobGF5ZXJO
YW1lID09IFRpbGVDb250cm9sbGVyOjp0aWxlR3JpZENvbnRhaW5lckxheWVyTmFtZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGN1cnJMYXllcjsKLQotICAgICAgICBpZiAoQ0FMYXllciAqZm91bmRM
YXllciA9IGZpbmRUaWxlR3JpZENvbnRhaW5lckxheWVyKGN1cnJMYXllcikpCi0gICAgICAgICAg
ICByZXR1cm4gZm91bmRMYXllcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmlsOwotfQotCi11bnNp
Z25lZCBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGE6OmJsYW5rUGl4ZWxD
b3VudChjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0KSBjb25zdAotewotICAgIENBTGF5ZXIg
KnJvb3RMYXllciA9IGFzTGF5ZXIobV9kcmF3aW5nQXJlYS5yZW1vdGVMYXllclRyZWVIb3N0KCku
cm9vdExheWVyKCkpOwotCi0gICAgQ0FMYXllciAqdGlsZUdyaWRDb250YWluZXIgPSBmaW5kVGls
ZUdyaWRDb250YWluZXJMYXllcihyb290TGF5ZXIpOwotICAgIGlmICghdGlsZUdyaWRDb250YWlu
ZXIpIHsKLSAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gZmluZCBUaWxlR3JpZCBDb250YWluZXIg
TGF5ZXIiKTsKLSAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwotICAgIH0KLQotICAgIEZsb2F0UmVj
dCB2aXNpYmxlUmVjdEV4Y2x1ZGluZ1Rvb2xiYXIgPSB2aXNpYmxlUmVjdDsKLSAgICBpZiAodmlz
aWJsZVJlY3RFeGNsdWRpbmdUb29sYmFyLnkoKSA8IDApCi0gICAgICAgIHZpc2libGVSZWN0RXhj
bHVkaW5nVG9vbGJhci5zZXRZKDApOwotCi0gICAgUmVnaW9uIHBhaW50ZWRWaXNpYmxlVGlsZVJl
Z2lvbjsKLQotICAgIGZvciAoQ0FMYXllciAqdGlsZUxheWVyIDogW3RpbGVHcmlkQ29udGFpbmVy
IHN1YmxheWVyc10pIHsKLSAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gW3RpbGVMYXllciBj
b252ZXJ0UmVjdDpbdGlsZUxheWVyIGJvdW5kc10gdG9MYXllcjp0aWxlR3JpZENvbnRhaW5lcl07
Ci0gICAgCi0gICAgICAgIHRpbGVSZWN0LmludGVyc2VjdCh2aXNpYmxlUmVjdEV4Y2x1ZGluZ1Rv
b2xiYXIpOwotICAgICAgICAKLSAgICAgICAgaWYgKCF0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBwYWludGVkVmlzaWJsZVRpbGVSZWdpb24udW5pdGUoZW5jbG9zaW5nSW50UmVjdCh0
aWxlUmVjdCkpOwotICAgIH0KLQotICAgIFJlZ2lvbiB1bmNvdmVyZWRSZWdpb24oZW5jbG9zaW5n
SW50UmVjdCh2aXNpYmxlUmVjdEV4Y2x1ZGluZ1Rvb2xiYXIpKTsKLSAgICB1bmNvdmVyZWRSZWdp
b24uc3VidHJhY3QocGFpbnRlZFZpc2libGVUaWxlUmVnaW9uKTsKLQotICAgIHJldHVybiB1bmNv
dmVyZWRSZWdpb24udG90YWxBcmVhKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlZDIzMmQxN2ZiZTlkOTcyMzk0
YmRlMTU5ZTZjYmI5Y2Q1ZWUzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5o
CkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVIb3N0
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRQb2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorCitPQkpDX0NMQVNTIFdL
T25lU2hvdERpc3BsYXlMaW5rSGFuZGxlcjsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOworY2xhc3MgUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JUcmFuc2FjdGlvbjsKKworY2xhc3MgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eSBmaW5hbCA6IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5IHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5KFdlYlBhZ2VQcm94eSYpOworICAgIHZp
cnR1YWwgflJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkoKTsKKworICAgIGNvbnN0IFJl
bW90ZUxheWVyVHJlZUhvc3QmIHJlbW90ZUxheWVyVHJlZUhvc3QoKSBjb25zdCB7IHJldHVybiBt
X3JlbW90ZUxheWVyVHJlZUhvc3Q7IH0KKworICAgIHZvaWQgYWNjZWxlcmF0ZWRBbmltYXRpb25E
aWRTdGFydCh1aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlIHN0YXJ0
VGltZSk7CisgICAgdm9pZCBhY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1aW50NjRfdCBsYXll
cklELCBjb25zdCBTdHJpbmcmIGtleSk7CisKKyAgICB1aW50NjRfdCBuZXh0TGF5ZXJUcmVlVHJh
bnNhY3Rpb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ0xheWVyVHJlZVRyYW5zYWN0aW9u
SUQgKyAxOyB9CisgICAgdWludDY0X3QgbGFzdENvbW1pdHRlZExheWVyVHJlZVRyYW5zYWN0aW9u
SUQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSURGb3JQZW5kaW5nQ0FDb21taXQ7IH0K
KworICAgIHZvaWQgZGlkUmVmcmVzaERpc3BsYXkoKTsKKyAgICAKKyAgICBib29sIGhhc0RlYnVn
SW5kaWNhdG9yKCkgY29uc3QgeyByZXR1cm4gISFtX2RlYnVnSW5kaWNhdG9yTGF5ZXJUcmVlSG9z
dDsgfQorCisgICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKKworICAg
IExheWVyT3JWaWV3KiBsYXllcldpdGhJREZvclRlc3RpbmcodWludDY0X3QpIGNvbnN0OworCitw
cml2YXRlOgorICAgIHZvaWQgc2l6ZURpZENoYW5nZSgpIG92ZXJyaWRlOworICAgIHZvaWQgZGV2
aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFVwZGF0ZUdl
b21ldHJ5KCkgb3ZlcnJpZGU7CisgICAgCisgICAgLy8gRm9yIG5vdywgYWxsIGNhbGxiYWNrcyBh
cmUgY2FsbGVkIGJlZm9yZSBjb21taXR0aW5nIGNoYW5nZXMsIGJlY2F1c2UgdGhhdCdzIHdoYXQg
dGhlIG9ubHkgY2xpZW50IHJlcXVpcmVzLgorICAgIC8vIE9uY2Ugd2UgaGF2ZSBvdGhlciBjYWxs
YmFja3MsIGl0IG1heSBtYWtlIHNlbnNlIHRvIGhhdmUgYSBiZWZvcmUtY29tbWl0L2FmdGVyLWNv
bW1pdCBvcHRpb24uCisgICAgdm9pZCBkaXNwYXRjaEFmdGVyRW5zdXJpbmdEcmF3aW5nKFdURjo6
RnVuY3Rpb248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpIG92ZXJyaWRlOworCisjaWYg
UExBVEZPUk0oTUFDKQorICAgIHZvaWQgc2V0Vmlld0V4cG9zZWRSZWN0KHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6RmxvYXRSZWN0Pikgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIGZsb2F0IGluZGlj
YXRvclNjYWxlKFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplKSBjb25zdDsKKyAgICB2b2lk
IHVwZGF0ZURlYnVnSW5kaWNhdG9yKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVEZWJ1Z0lu
ZGljYXRvcihXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwgYm9vbCByb290TGF5ZXJDaGFu
Z2VkLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9u
KTsKKyAgICB2b2lkIHVwZGF0ZURlYnVnSW5kaWNhdG9yUG9zaXRpb24oKTsKKyAgICB2b2lkIGlu
aXRpYWxpemVEZWJ1Z0luZGljYXRvcigpOworCisgICAgdm9pZCB3YWl0Rm9yRGlkVXBkYXRlQWN0
aXZpdHlTdGF0ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgaGlkZUNvbnRlbnRVbnRpbFBlbmRpbmdV
cGRhdGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGhpZGVDb250ZW50VW50aWxBbnlVcGRhdGUoKSBv
dmVycmlkZTsKKyAgICBib29sIGhhc1Zpc2libGVDb250ZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIHByZXBhcmVGb3JBcHBTdXNwZW5zaW9uKCkgZmluYWw7CisgICAgCisgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCBpbmRpY2F0b3JMb2NhdGlvbigpIGNvbnN0OworCisgICAgLy8gSVBD
OjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgLy8gTWVzc2FnZSBoYW5kbGVy
cworICAgIHZvaWQgd2lsbENvbW1pdExheWVyVHJlZSh1aW50NjRfdCB0cmFuc2FjdGlvbklEKTsK
KyAgICB2b2lkIGNvbW1pdExheWVyVHJlZShjb25zdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
biYsIGNvbnN0IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24mKTsKKyAgICAK
KyAgICB2b2lkIHNlbmRVcGRhdGVHZW9tZXRyeSgpOworCisgICAgUmVtb3RlTGF5ZXJUcmVlSG9z
dCBtX3JlbW90ZUxheWVyVHJlZUhvc3Q7CisgICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0
ZUdlb21ldHJ5IHsgZmFsc2UgfTsKKyAgICBlbnVtIERpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSB7IERv
ZXNOb3ROZWVkRGlkVXBkYXRlLCBOZWVkc0RpZFVwZGF0ZSwgTWlzc2VkQ29tbWl0IH07CisgICAg
RGlkVXBkYXRlTWVzc2FnZVN0YXRlIG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlIHsgRG9lc05vdE5l
ZWREaWRVcGRhdGUgfTsKKworICAgIFdlYkNvcmU6OkludFNpemUgbV9sYXN0U2VudFNpemU7CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTGF5ZXJUcmVlSG9zdD4gbV9kZWJ1Z0luZGljYXRv
ckxheWVyVHJlZUhvc3Q7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fdGlsZU1hcEhvc3RMYXll
cjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9leHBvc2VkUmVjdEluZGljYXRvckxheWVyOwor
CisgICAgdWludDY0X3QgbV9wZW5kaW5nTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCB7IDAgfTsKKyAg
ICB1aW50NjRfdCBtX2xhc3RWaXNpYmxlVHJhbnNhY3Rpb25JRCB7IDAgfTsKKyAgICB1aW50NjRf
dCBtX3RyYW5zYWN0aW9uSURGb3JQZW5kaW5nQ0FDb21taXQgeyAwIH07CisgICAgdWludDY0X3Qg
bV90cmFuc2FjdGlvbklERm9yVW5oaWRpbmdDb250ZW50IHsgMCB9OworCisgICAgQ2FsbGJhY2tN
YXAgbV9jYWxsYmFja3M7CisKKyAgICBSZXRhaW5QdHI8V0tPbmVTaG90RGlzcGxheUxpbmtIYW5k
bGVyPiBtX2Rpc3BsYXlMaW5rSGFuZGxlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RSQVdJTkdfQVJFQV9QUk9YWShSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5LCBEcmF3aW5nQXJlYVR5cGVSZW1vdGVMYXllclRyZWUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1lc3Nh
Z2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRmNmY1YWE5MDkzOTY5OWIwNDQzMDIxZmI4NGNhNjUyNjQ3YTY4
Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXll
clRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCww
ICsxLDI2IEBACisjIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21lc3Nh
Z2VzIC0+IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkgOiBEcmF3aW5nQXJlYVByb3h5
IHsKKyAgICB2b2lkIFdpbGxDb21taXRMYXllclRyZWUodWludDY0X3QgdHJhbnNhY3Rpb25JRCkK
KyAgICB2b2lkIENvbW1pdExheWVyVHJlZShXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uIGxheWVyVHJlZVRyYW5zYWN0aW9uLCBXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yVHJhbnNhY3Rpb24gc2Nyb2xsaW5nVHJlZVRyYW5zYWN0aW9uKQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NGIxN2Qx
ZjBkNjlhM2YxNGEzYjU0ZWEzYjI5OGM5MzNhNTMyNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHkubW0KQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5o
IgorCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIkRyYXdpbmdBcmVhTWVzc2FnZXMuaCIKKyNp
bXBvcnQgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCIKKyNpbXBvcnQgIlJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94
eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1
YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvSU9TdXJmYWNlUG9vbC5oPgorI2ltcG9ydCA8V2ViQ29yZS9NYWNoU2VuZFJp
Z2h0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0
ZS5oPgorI2ltcG9ydCA8d3RmL1N5c3RlbVRyYWNpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIElQ
QzsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBGSVhNRTogTWFjIHdpbGwgbmVlZCBz
b21ldGhpbmcgc2ltaWxhcjsgd2Ugc2hvdWxkIGZpZ3VyZSBvdXQgaG93IHRvIHNoYXJlIHRoaXMg
d2l0aCBEaXNwbGF5UmVmcmVzaE1vbml0b3Igd2l0aG91dAorLy8gYnJlYWtpbmcgV2ViS2l0MSBi
ZWhhdmlvciBvciBXZWJLaXQyLVdlYktpdDEgY29leGlzdGVuY2UuCisjaWYgUExBVEZPUk0oSU9T
KQorQGludGVyZmFjZSBXS09uZVNob3REaXNwbGF5TGlua0hhbmRsZXIgOiBOU09iamVjdCB7Cisg
ICAgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5KiBfZHJhd2luZ0FyZWFQ
cm94eTsKKyAgICBDQURpc3BsYXlMaW5rICpfZGlzcGxheUxpbms7Cit9CisKKy0gKGlkKWluaXRX
aXRoRHJhd2luZ0FyZWFQcm94eTooV2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5KilkcmF3aW5nQXJlYVByb3h5OworLSAodm9pZClkaXNwbGF5TGlua0ZpcmVkOihDQURpc3Bs
YXlMaW5rICopc2VuZGVyOworLSAodm9pZClpbnZhbGlkYXRlOworLSAodm9pZClzY2hlZHVsZTsK
KworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tPbmVTaG90RGlzcGxheUxpbmtIYW5kbGVyCisK
Ky0gKGlkKWluaXRXaXRoRHJhd2luZ0FyZWFQcm94eTooV2ViS2l0OjpSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5KilkcmF3aW5nQXJlYVByb3h5Cit7CisgICAgaWYgKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pIHsKKyAgICAgICAgX2RyYXdpbmdBcmVhUHJveHkgPSBkcmF3aW5nQXJlYVByb3h5
OworICAgICAgICAvLyBOb3RlIHRoYXQgQ0FEaXNwbGF5TGluayByZXRhaW5zIGl0cyB0YXJnZXQg
KHNlbGYpLCBzbyBhIGNhbGwgdG8gLWludmFsaWRhdGUgaXMgbmVlZGVkIG9uIHRlYXJkb3duLgor
ICAgICAgICBfZGlzcGxheUxpbmsgPSBbQ0FEaXNwbGF5TGluayBkaXNwbGF5TGlua1dpdGhUYXJn
ZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZGlzcGxheUxpbmtGaXJlZDopXTsKKyAgICAgICAg
W19kaXNwbGF5TGluayBhZGRUb1J1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9k
ZTpOU1J1bkxvb3BDb21tb25Nb2Rlc107CisgICAgICAgIF9kaXNwbGF5TGluay5wYXVzZWQgPSBZ
RVM7CisgICAgICAgIF9kaXNwbGF5TGluay5wcmVmZXJyZWRGcmFtZXNQZXJTZWNvbmQgPSA2MDsK
KyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEFT
U0VSVCghX2Rpc3BsYXlMaW5rKTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQp
ZGlzcGxheUxpbmtGaXJlZDooQ0FEaXNwbGF5TGluayAqKXNlbmRlcgoreworICAgIEFTU0VSVChp
c1VJVGhyZWFkKCkpOworICAgIF9kcmF3aW5nQXJlYVByb3h5LT5kaWRSZWZyZXNoRGlzcGxheSgp
OworfQorCistICh2b2lkKWludmFsaWRhdGUKK3sKKyAgICBbX2Rpc3BsYXlMaW5rIGludmFsaWRh
dGVdOworICAgIF9kaXNwbGF5TGluayA9IG51bGxwdHI7Cit9CisKKy0gKHZvaWQpc2NoZWR1bGUK
K3sKKyAgICBfZGlzcGxheUxpbmsucGF1c2VkID0gTk87Cit9CisKKy0gKHZvaWQpcGF1c2UKK3sK
KyAgICBfZGlzcGxheUxpbmsucGF1c2VkID0gWUVTOworfQorCitAZW5kCisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OlJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCisg
ICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZVJlbW90ZUxheWVyVHJlZSwgd2Vi
UGFnZVByb3h5KQorICAgICwgbV9yZW1vdGVMYXllclRyZWVIb3N0KCp0aGlzKQorI2lmIFBMQVRG
T1JNKElPUykKKyAgICAsIG1fZGlzcGxheUxpbmtIYW5kbGVyKGFkb3B0TlMoW1tXS09uZVNob3RE
aXNwbGF5TGlua0hhbmRsZXIgYWxsb2NdIGluaXRXaXRoRHJhd2luZ0FyZWFQcm94eTp0aGlzXSkp
CisjZW5kaWYKK3sKKyNpZiBVU0UoSU9TVVJGQUNFKQorICAgIC8vIFdlIGRvbid0IHdhbnQgdG8g
cG9vbCBzdXJmYWNlcyBpbiB0aGUgVUkgcHJvY2Vzcy4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGRvIHRoaXMgc29tZXdoZXJlIGVsc2UuCisgICAgSU9TdXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgp
LnNldFBvb2xTaXplKDApOworI2VuZGlmCisKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCku
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpLCAqdGhp
cyk7CisKKyAgICBpZiAobV93ZWJQYWdlUHJveHkucHJlZmVyZW5jZXMoKS50aWxlZFNjcm9sbGlu
Z0luZGljYXRvclZpc2libGUoKSkKKyAgICAgICAgaW5pdGlhbGl6ZURlYnVnSW5kaWNhdG9yKCk7
Cit9CisKK1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6On5SZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5KCkKK3sKKyAgICBtX2NhbGxiYWNrcy5pbnZhbGlkYXRlKENhbGxiYWNr
QmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOworICAgIG1fd2ViUGFnZVByb3h5LnBy
b2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFn
ZUlEKCkpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFttX2Rpc3BsYXlMaW5rSGFuZGxlciBp
bnZhbGlkYXRlXTsKKyNlbmRpZgorfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHk6OnNpemVEaWRDaGFuZ2UoKQoreworICAgIGlmICghbV93ZWJQYWdlUHJveHkuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVH
ZW9tZXRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2VuZFVwZGF0ZUdlb21ldHJ5KCk7Cit9
CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6ZGV2aWNlU2NhbGVGYWN0
b3JEaWRDaGFuZ2UoKQoreworICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpEcmF3aW5nQXJlYTo6U2V0RGV2aWNlU2NhbGVGYWN0b3IobV93ZWJQYWdlUHJveHkuZGV2
aWNlU2NhbGVGYWN0b3IoKSksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKK30KKwordm9pZCBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpkaWRVcGRhdGVHZW9tZXRyeSgpCit7Cisg
ICAgQVNTRVJUKG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlR2VvbWV0cnkpOworCisgICAgbV9pc1dh
aXRpbmdGb3JEaWRVcGRhdGVHZW9tZXRyeSA9IGZhbHNlOworCisgICAgLy8gSWYgdGhlIFdLVmll
dyB3YXMgcmVzaXplZCB3aGlsZSB3ZSB3ZXJlIHdhaXRpbmcgZm9yIGEgRGlkVXBkYXRlR2VvbWV0
cnkgcmVwbHkgZnJvbSB0aGUgd2ViIHByb2Nlc3MsCisgICAgLy8gd2UgbmVlZCB0byByZXNlbmQg
dGhlIG5ldyBzaXplIGhlcmUuCisgICAgaWYgKG1fbGFzdFNlbnRTaXplICE9IG1fc2l6ZSkKKyAg
ICAgICAgc2VuZFVwZGF0ZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eTo6c2VuZFVwZGF0ZUdlb21ldHJ5KCkKK3sKKyAgICBtX2xhc3RTZW50U2l6
ZSA9IG1fc2l6ZTsKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
RHJhd2luZ0FyZWE6OlVwZGF0ZUdlb21ldHJ5KG1fc2l6ZSwgSW50U2l6ZSgpLCBmYWxzZSwgTWFj
aFNlbmRSaWdodCgpKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOworICAgIG1faXNXYWl0aW5n
Rm9yRGlkVXBkYXRlR2VvbWV0cnkgPSB0cnVlOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHk6OndpbGxDb21taXRMYXllclRyZWUodWludDY0X3QgdHJhbnNhY3Rpb25J
RCkKK3sKKyAgICBtX3BlbmRpbmdMYXllclRyZWVUcmFuc2FjdGlvbklEID0gdHJhbnNhY3Rpb25J
RDsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojpjb21taXRMYXll
clRyZWUoY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mIGxheWVyVHJlZVRyYW5zYWN0
aW9uLCBjb25zdCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uJiBzY3JvbGxp
bmdUcmVlVHJhbnNhY3Rpb24pCit7CisgICAgVHJhY2VTY29wZSB0cmFjaW5nU2NvcGUoQ29tbWl0
TGF5ZXJUcmVlU3RhcnQsIENvbW1pdExheWVyVHJlZUVuZCk7CisKKyAgICBMT0coUmVtb3RlTGF5
ZXJUcmVlLCAiJXMiLCBsYXllclRyZWVUcmFuc2FjdGlvbi5kZXNjcmlwdGlvbigpLmRhdGEoKSk7
CisgICAgTE9HKFJlbW90ZUxheWVyVHJlZSwgIiVzIiwgc2Nyb2xsaW5nVHJlZVRyYW5zYWN0aW9u
LmRlc2NyaXB0aW9uKCkuZGF0YSgpKTsKKworICAgIEFTU0VSVChsYXllclRyZWVUcmFuc2FjdGlv
bi50cmFuc2FjdGlvbklEKCkgPT0gbV9sYXN0VmlzaWJsZVRyYW5zYWN0aW9uSUQgKyAxKTsKKyAg
ICBtX3RyYW5zYWN0aW9uSURGb3JQZW5kaW5nQ0FDb21taXQgPSBsYXllclRyZWVUcmFuc2FjdGlv
bi50cmFuc2FjdGlvbklEKCk7CisKKyAgICBpZiAobGF5ZXJUcmVlVHJhbnNhY3Rpb24uaGFzRWRp
dG9yU3RhdGUoKSkKKyAgICAgICAgbV93ZWJQYWdlUHJveHkuZWRpdG9yU3RhdGVDaGFuZ2VkKGxh
eWVyVHJlZVRyYW5zYWN0aW9uLmVkaXRvclN0YXRlKCkpOworCisgICAgaWYgKG1fcmVtb3RlTGF5
ZXJUcmVlSG9zdC51cGRhdGVMYXllclRyZWUobGF5ZXJUcmVlVHJhbnNhY3Rpb24pKSB7CisgICAg
ICAgIGlmIChsYXllclRyZWVUcmFuc2FjdGlvbi50cmFuc2FjdGlvbklEKCkgPj0gbV90cmFuc2Fj
dGlvbklERm9yVW5oaWRpbmdDb250ZW50KQorICAgICAgICAgICAgbV93ZWJQYWdlUHJveHkuc2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihtX3JlbW90ZUxheWVyVHJlZUhvc3Qucm9v
dExheWVyKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3JlbW90ZUxheWVyVHJlZUhv
c3QuZGV0YWNoUm9vdExheWVyKCk7CisgICAgfQorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElO
RykKKyAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpSZXF1ZXN0ZWRTY3JvbGxJ
bmZvIHJlcXVlc3RlZFNjcm9sbEluZm87CisgICAgbV93ZWJQYWdlUHJveHkuc2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eSgpLT5jb21taXRTY3JvbGxpbmdUcmVlU3RhdGUoc2Nyb2xsaW5nVHJlZVRy
YW5zYWN0aW9uLCByZXF1ZXN0ZWRTY3JvbGxJbmZvKTsKKyNlbmRpZgorCisgICAgbV93ZWJQYWdl
UHJveHkuZGlkQ29tbWl0TGF5ZXJUcmVlKGxheWVyVHJlZVRyYW5zYWN0aW9uKTsKKworI2lmIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChtX3dlYlBh
Z2VQcm94eS5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCktPmhhc0ZpeGVkT3JTdGlja3koKSkg
eworICAgICAgICAvLyBJZiB3ZSBnb3QgYSBuZXcgbGF5ZXIgZm9yIGEgZml4ZWQgb3Igc3RpY2t5
IG5vZGUsIGl0cyBwb3NpdGlvbiBmcm9tIHRoZSBXZWJQcm9jZXNzIGlzIHByb2JhYmx5IHN0YWxl
LiBXZSBuZWVkIHRvIHJlLXJ1biB0aGUgInZpZXdwb3J0IiBjaGFuZ2VkIGxvZ2ljIHRvIHVkcGF0
ZSBpdCB3aXRoIG91ciBVSS1zaWRlIHN0YXRlLgorICAgICAgICBGbG9hdFJlY3QgY3VzdG9tRml4
ZWRQb3NpdGlvblJlY3QgPSBtX3dlYlBhZ2VQcm94eS5jb21wdXRlQ3VzdG9tRml4ZWRQb3NpdGlv
blJlY3QobV93ZWJQYWdlUHJveHkudW5vYnNjdXJlZENvbnRlbnRSZWN0KCksIG1fd2ViUGFnZVBy
b3h5LnVub2JzY3VyZWRDb250ZW50UmVjdFJlc3BlY3RpbmdJbnB1dFZpZXdCb3VuZHMoKSwgbV93
ZWJQYWdlUHJveHkuY3VzdG9tRml4ZWRQb3NpdGlvblJlY3QoKSwgbV93ZWJQYWdlUHJveHkuZGlz
cGxheWVkQ29udGVudFNjYWxlKCksIEZyYW1lVmlldzo6TGF5b3V0Vmlld3BvcnRDb25zdHJhaW50
OjpVbmNvbnN0cmFpbmVkLCBtX3dlYlBhZ2VQcm94eS5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5
KCktPnZpc3VhbFZpZXdwb3J0RW5hYmxlZCgpKTsKKyAgICAgICAgbV93ZWJQYWdlUHJveHkuc2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eSgpLT52aWV3cG9ydENoYW5nZWRWaWFEZWxlZ2F0ZWRTY3Jv
bGxpbmcobV93ZWJQYWdlUHJveHkuc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSgpLT5yb290U2Ny
b2xsaW5nTm9kZUlEKCksIGN1c3RvbUZpeGVkUG9zaXRpb25SZWN0LCBtX3dlYlBhZ2VQcm94eS5k
aXNwbGF5ZWRDb250ZW50U2NhbGUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBIYW5kbGUg
cmVxdWVzdGVkIHNjcm9sbCBwb3NpdGlvbiB1cGRhdGVzIGZyb20gdGhlIHNjcm9sbGluZyB0cmVl
IHRyYW5zYWN0aW9uIGFmdGVyIGRpZENvbW1pdExheWVyVHJlZSgpCisgICAgLy8gaGFzIHVwZGF0
ZWQgdGhlIHZpZXcgc2l6ZSBiYXNlZCBvbiB0aGUgY29udGVudCBzaXplLgorICAgIGlmIChyZXF1
ZXN0ZWRTY3JvbGxJbmZvLnJlcXVlc3RzU2Nyb2xsUG9zaXRpb25VcGRhdGUpCisgICAgICAgIG1f
d2ViUGFnZVByb3h5LnJlcXVlc3RTY3JvbGwocmVxdWVzdGVkU2Nyb2xsSW5mby5yZXF1ZXN0ZWRT
Y3JvbGxQb3NpdGlvbiwgbGF5ZXJUcmVlVHJhbnNhY3Rpb24uc2Nyb2xsT3JpZ2luKCksIHJlcXVl
c3RlZFNjcm9sbEluZm8ucmVxdWVzdElzUHJvZ3JhbW1hdGljU2Nyb2xsKTsKKyNlbmRpZiAvLyBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisgICAgaWYgKG1fZGVidWdJbmRpY2F0b3JMYXllclRy
ZWVIb3N0KSB7CisgICAgICAgIGZsb2F0IHNjYWxlID0gaW5kaWNhdG9yU2NhbGUobGF5ZXJUcmVl
VHJhbnNhY3Rpb24uY29udGVudHNTaXplKCkpOworICAgICAgICBib29sIHJvb3RMYXllckNoYW5n
ZWQgPSBtX2RlYnVnSW5kaWNhdG9yTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJUcmVlKGxheWVy
VHJlZVRyYW5zYWN0aW9uLCBzY2FsZSk7CisgICAgICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9u
OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSBsYXllclRyZWVU
cmFuc2FjdGlvbi5zY3JvbGxQb3NpdGlvbigpOworI2VuZGlmCisgICAgICAgIHVwZGF0ZURlYnVn
SW5kaWNhdG9yKGxheWVyVHJlZVRyYW5zYWN0aW9uLmNvbnRlbnRzU2l6ZSgpLCByb290TGF5ZXJD
aGFuZ2VkLCBzY2FsZSwgc2Nyb2xsUG9zaXRpb24pOworICAgICAgICBhc0xheWVyKG1fZGVidWdJ
bmRpY2F0b3JMYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSkubmFtZSA9IEAiSW5kaWNhdG9yIGhv
c3Qgcm9vdCI7CisgICAgfQorCisgICAgbV93ZWJQYWdlUHJveHkubGF5ZXJUcmVlQ29tbWl0Q29t
cGxldGUoKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoc3RkOjpleGNoYW5nZShtX2Rp
ZFVwZGF0ZU1lc3NhZ2VTdGF0ZSwgTmVlZHNEaWRVcGRhdGUpID09IE1pc3NlZENvbW1pdCkKKyAg
ICAgICAgZGlkUmVmcmVzaERpc3BsYXkoKTsKKyAgICBbbV9kaXNwbGF5TGlua0hhbmRsZXIgc2No
ZWR1bGVdOworI2Vsc2UKKyAgICBtX2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSA9IE5lZWRzRGlkVXBk
YXRlOworICAgIGRpZFJlZnJlc2hEaXNwbGF5KCk7CisjZW5kaWYKKworICAgIGlmIChhdXRvIG1p
bGVzdG9uZXMgPSBsYXllclRyZWVUcmFuc2FjdGlvbi5uZXdseVJlYWNoZWRMYXlvdXRNaWxlc3Rv
bmVzKCkpCisgICAgICAgIG1fd2ViUGFnZVByb3h5LmRpZFJlYWNoTGF5b3V0TWlsZXN0b25lKG1p
bGVzdG9uZXMpOworCisgICAgZm9yIChhdXRvJiBjYWxsYmFja0lEIDogbGF5ZXJUcmVlVHJhbnNh
Y3Rpb24uY2FsbGJhY2tJRHMoKSkgeworICAgICAgICBpZiAoYXV0byBjYWxsYmFjayA9IG1fY2Fs
bGJhY2tzLnRha2U8Vm9pZENhbGxiYWNrPihjYWxsYmFja0lEKSkKKyAgICAgICAgICAgIGNhbGxi
YWNrLT5wZXJmb3JtQ2FsbGJhY2soKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eTo6YWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCh1aW50NjRfdCBs
YXllcklELCBjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlIHN0YXJ0VGltZSkKK3sKKyAgICBtX3dl
YlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OkFjY2VsZXJh
dGVkQW5pbWF0aW9uRGlkU3RhcnQobGF5ZXJJRCwga2V5LCBzdGFydFRpbWUpLCBtX3dlYlBhZ2VQ
cm94eS5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eTo6YWNjZWxlcmF0ZWRBbmltYXRpb25EaWRFbmQodWludDY0X3QgbGF5ZXJJRCwgY29uc3QgU3Ry
aW5nJiBrZXkpCit7CisgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
OkRyYXdpbmdBcmVhOjpBY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZChsYXllcklELCBrZXkpLCBt
X3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7Cit9CisKK3N0YXRpYyBjb25zdCBmbG9hdCBpbmRpY2F0
b3JJbnNldCA9IDEwOworCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5OjpzZXRWaWV3RXhwb3NlZFJlY3Qoc3RkOjpvcHRpb25hbDxXZWJDb3Jl
OjpGbG9hdFJlY3Q+IHZpZXdFeHBvc2VkUmVjdCkKK3sKKyAgICBEcmF3aW5nQXJlYVByb3h5Ojpz
ZXRWaWV3RXhwb3NlZFJlY3Qodmlld0V4cG9zZWRSZWN0KTsKKyAgICB1cGRhdGVEZWJ1Z0luZGlj
YXRvclBvc2l0aW9uKCk7Cit9CisjZW5kaWYKKworRmxvYXRQb2ludCBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5OjppbmRpY2F0b3JMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKG1f
d2ViUGFnZVByb3h5LmRlbGVnYXRlc1Njcm9sbGluZygpKSB7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICAgICBGbG9hdFBvaW50IHRpbGVkTWFwTG9jYXRpb24gPSBtX3dlYlBhZ2VQcm94eS51bm9i
c2N1cmVkQ29udGVudFJlY3QoKS5sb2NhdGlvbigpLmV4cGFuZGVkVG8oRmxvYXRQb2ludCgpKTsK
KyAgICAgICAgdGlsZWRNYXBMb2NhdGlvbiA9IHRpbGVkTWFwTG9jYXRpb24uZXhwYW5kZWRUbyht
X3dlYlBhZ2VQcm94eS5leHBvc2VkQ29udGVudFJlY3QoKS5sb2NhdGlvbigpKTsKKworICAgICAg
ICBmbG9hdCBhYnNvbHV0ZUluc2V0ID0gaW5kaWNhdG9ySW5zZXQgLyBtX3dlYlBhZ2VQcm94eS5k
aXNwbGF5ZWRDb250ZW50U2NhbGUoKTsKKyAgICAgICAgdGlsZWRNYXBMb2NhdGlvbiArPSBGbG9h
dFNpemUoYWJzb2x1dGVJbnNldCwgYWJzb2x1dGVJbnNldCk7CisjZWxzZQorICAgICAgICBGbG9h
dFBvaW50IHRpbGVkTWFwTG9jYXRpb247CisgICAgICAgIGlmICh2aWV3RXhwb3NlZFJlY3QoKSkK
KyAgICAgICAgICAgIHRpbGVkTWFwTG9jYXRpb24gPSB2aWV3RXhwb3NlZFJlY3QoKS52YWx1ZSgp
LmxvY2F0aW9uKCk7CisKKyAgICAgICAgdGlsZWRNYXBMb2NhdGlvbiArPSBGbG9hdFNpemUoaW5k
aWNhdG9ySW5zZXQsIGluZGljYXRvckluc2V0KTsKKyAgICAgICAgZmxvYXQgc2NhbGUgPSAxIC8g
bV93ZWJQYWdlUHJveHkucGFnZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIHRpbGVkTWFwTG9jYXRp
b24uc2NhbGUoc2NhbGUpOworI2VuZGlmCisgICAgICAgIHJldHVybiB0aWxlZE1hcExvY2F0aW9u
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gRmxvYXRQb2ludChpbmRpY2F0b3JJbnNldCwgaW5k
aWNhdG9ySW5zZXQgKyBtX3dlYlBhZ2VQcm94eS50b3BDb250ZW50SW5zZXQoKSk7Cit9CisKK3Zv
aWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlRGVidWdJbmRpY2F0b3JQ
b3NpdGlvbigpCit7CisgICAgaWYgKCFtX3RpbGVNYXBIb3N0TGF5ZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0UG9zaXRpb246aW5kaWNhdG9yTG9jYXRp
b24oKV07Cit9CisKK2Zsb2F0IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmluZGlj
YXRvclNjYWxlKEludFNpemUgY29udGVudHNTaXplKSBjb25zdAoreworICAgIC8vIFBpY2sgYSBn
b29kIHNjYWxlLgorICAgIEludFNpemUgdmlld1NpemUgPSBtX3dlYlBhZ2VQcm94eS52aWV3U2l6
ZSgpOworCisgICAgZmxvYXQgc2NhbGUgPSAxOworICAgIGlmICghY29udGVudHNTaXplLmlzRW1w
dHkoKSkgeworICAgICAgICBmbG9hdCB3aWR0aFNjYWxlID0gc3RkOjptaW48ZmxvYXQ+KCh2aWV3
U2l6ZS53aWR0aCgpIC0gMiAqIGluZGljYXRvckluc2V0KSAvIGNvbnRlbnRzU2l6ZS53aWR0aCgp
LCAwLjA1KTsKKyAgICAgICAgc2NhbGUgPSBzdGQ6Om1pbih3aWR0aFNjYWxlLCBzdGF0aWNfY2Fz
dDxmbG9hdD4odmlld1NpemUuaGVpZ2h0KCkgLSAyICogaW5kaWNhdG9ySW5zZXQpIC8gY29udGVu
dHNTaXplLmhlaWdodCgpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHNjYWxlOworfQorCit2
b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZURlYnVnSW5kaWNhdG9y
KCkKK3sKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFsc28gdXBkYXRlIGxpdmUgaW5mb3JtYXRp
b24gZHVyaW5nIHNjYWxlLgorICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9yUG9zaXRpb24oKTsKK30K
Kwordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVEZWJ1Z0luZGlj
YXRvcihJbnRTaXplIGNvbnRlbnRzU2l6ZSwgYm9vbCByb290TGF5ZXJDaGFuZ2VkLCBmbG9hdCBz
Y2FsZSwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQoreworICAgIC8vIE1ha2Ugc3Vy
ZSB3ZSdyZSB0aGUgbGFzdCBzdWJsYXllci4KKyAgICBDQUxheWVyICpyb290TGF5ZXIgPSBhc0xh
eWVyKG1fcmVtb3RlTGF5ZXJUcmVlSG9zdC5yb290TGF5ZXIoKSk7CisgICAgW21fdGlsZU1hcEhv
c3RMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgW3Jvb3RMYXllciBhZGRTdWJsYXll
cjptX3RpbGVNYXBIb3N0TGF5ZXIuZ2V0KCldOworCisgICAgLy8gUGljayBhIGdvb2Qgc2NhbGUu
CisgICAgSW50U2l6ZSB2aWV3U2l6ZSA9IG1fd2ViUGFnZVByb3h5LnZpZXdTaXplKCk7CisKKyAg
ICBbbV90aWxlTWFwSG9zdExheWVyIHNldEJvdW5kczpGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBj
b250ZW50c1NpemUpXTsKKyAgICBbbV90aWxlTWFwSG9zdExheWVyIHNldFBvc2l0aW9uOmluZGlj
YXRvckxvY2F0aW9uKCldOworICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0VHJhbnNmb3JtOkNB
VHJhbnNmb3JtM0RNYWtlU2NhbGUoc2NhbGUsIHNjYWxlLCAxKV07CisKKyAgICBpZiAocm9vdExh
eWVyQ2hhbmdlZCkgeworICAgICAgICBbbV90aWxlTWFwSG9zdExheWVyIHNldFN1YmxheWVyczpA
W11dOworICAgICAgICBbbV90aWxlTWFwSG9zdExheWVyIGFkZFN1YmxheWVyOmFzTGF5ZXIobV9k
ZWJ1Z0luZGljYXRvckxheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpKV07CisgICAgICAgIFttX3Rp
bGVNYXBIb3N0TGF5ZXIgYWRkU3VibGF5ZXI6bV9leHBvc2VkUmVjdEluZGljYXRvckxheWVyLmdl
dCgpXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgZmxvYXQgaW5kaWNhdG9yQm9yZGVyV2lkdGgg
PSAxOworICAgIGZsb2F0IGNvdW50ZXJTY2FsZWRCb3JkZXIgPSBpbmRpY2F0b3JCb3JkZXJXaWR0
aCAvIHNjYWxlOworCisgICAgW21fZXhwb3NlZFJlY3RJbmRpY2F0b3JMYXllciBzZXRCb3JkZXJX
aWR0aDpjb3VudGVyU2NhbGVkQm9yZGVyXTsKKworICAgIGlmIChtX3dlYlBhZ2VQcm94eS5kZWxl
Z2F0ZXNTY3JvbGxpbmcoKSkgeworICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkRXhwb3NlZFJlY3Q7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICBzY2FsZWRFeHBvc2VkUmVjdCA9IG1fd2ViUGFn
ZVByb3h5LmV4cG9zZWRDb250ZW50UmVjdCgpOworI2Vsc2UKKyAgICAgICAgaWYgKHZpZXdFeHBv
c2VkUmVjdCgpKQorICAgICAgICAgICAgc2NhbGVkRXhwb3NlZFJlY3QgPSB2aWV3RXhwb3NlZFJl
Y3QoKS52YWx1ZSgpOworICAgICAgICBmbG9hdCBzY2FsZSA9IDEgLyBtX3dlYlBhZ2VQcm94eS5w
YWdlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgc2NhbGVkRXhwb3NlZFJlY3Quc2NhbGUoc2NhbGUp
OworI2VuZGlmCisgICAgICAgIFttX2V4cG9zZWRSZWN0SW5kaWNhdG9yTGF5ZXIgc2V0UG9zaXRp
b246c2NhbGVkRXhwb3NlZFJlY3QubG9jYXRpb24oKV07CisgICAgICAgIFttX2V4cG9zZWRSZWN0
SW5kaWNhdG9yTGF5ZXIgc2V0Qm91bmRzOkZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNjYWxlZEV4
cG9zZWRSZWN0LnNpemUoKSldOworICAgIH0gZWxzZSB7CisgICAgICAgIFttX2V4cG9zZWRSZWN0
SW5kaWNhdG9yTGF5ZXIgc2V0UG9zaXRpb246c2Nyb2xsUG9zaXRpb25dOworICAgICAgICBbbV9l
eHBvc2VkUmVjdEluZGljYXRvckxheWVyIHNldEJvdW5kczpGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCB2aWV3U2l6ZSldOworICAgIH0KK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5Ojppbml0aWFsaXplRGVidWdJbmRpY2F0b3IoKQoreworICAgIG1fZGVidWdJbmRpY2F0
b3JMYXllclRyZWVIb3N0ID0gc3RkOjptYWtlX3VuaXF1ZTxSZW1vdGVMYXllclRyZWVIb3N0Pigq
dGhpcyk7CisgICAgbV9kZWJ1Z0luZGljYXRvckxheWVyVHJlZUhvc3QtPnNldElzRGVidWdMYXll
clRyZWVIb3N0KHRydWUpOworCisgICAgbV90aWxlTWFwSG9zdExheWVyID0gYWRvcHROUyhbW0NB
TGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbbV90aWxlTWFwSG9zdExheWVyIHNldE5hbWU6QCJU
aWxlIG1hcCBob3N0Il07CisgICAgW21fdGlsZU1hcEhvc3RMYXllciBzZXREZWxlZ2F0ZTpbV2Vi
QWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOworICAgIFttX3RpbGVNYXBI
b3N0TGF5ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludFplcm9dOworICAgIFttX3RpbGVNYXBIb3N0
TGF5ZXIgc2V0T3BhY2l0eTowLjhdOworICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0TWFza3NU
b0JvdW5kczpZRVNdOworICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0Qm9yZGVyV2lkdGg6Ml07
CisKKyAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7
CisgICAgeworICAgICAgICBjb25zdCBDR0Zsb2F0IGNvbXBvbmVudHNbXSA9IHsgMSwgMSwgMSwg
MC42IH07CisgICAgICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0YoQ0dD
b2xvckNyZWF0ZShjb2xvclNwYWNlLCBjb21wb25lbnRzKSk7CisgICAgICAgIFttX3RpbGVNYXBI
b3N0TGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNvbG9yLmdldCgpXTsKKworICAgICAgICBjb25z
dCBDR0Zsb2F0IGJvcmRlckNvbXBvbmVudHNbXSA9IHsgMCwgMCwgMCwgMSB9OworICAgICAgICBS
ZXRhaW5QdHI8Q0dDb2xvclJlZj4gYm9yZGVyQ29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUo
Y29sb3JTcGFjZSwgYm9yZGVyQ29tcG9uZW50cykpOworICAgICAgICBbbV90aWxlTWFwSG9zdExh
eWVyIHNldEJvcmRlckNvbG9yOmJvcmRlckNvbG9yLmdldCgpXTsKKyAgICB9CisgICAgCisgICAg
bV9leHBvc2VkUmVjdEluZGljYXRvckxheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGlu
aXRdKTsKKyAgICBbbV9leHBvc2VkUmVjdEluZGljYXRvckxheWVyIHNldERlbGVnYXRlOltXZWJB
Y3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07CisgICAgW21fZXhwb3NlZFJl
Y3RJbmRpY2F0b3JMYXllciBzZXRBbmNob3JQb2ludDpDR1BvaW50WmVyb107CisKKyAgICB7Cisg
ICAgICAgIGNvbnN0IENHRmxvYXQgY29tcG9uZW50c1tdID0geyAwLCAxLCAwLCAxIH07CisgICAg
ICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShj
b2xvclNwYWNlLCBjb21wb25lbnRzKSk7CisgICAgICAgIFttX2V4cG9zZWRSZWN0SW5kaWNhdG9y
TGF5ZXIgc2V0Qm9yZGVyQ29sb3I6Y29sb3IuZ2V0KCldOworICAgIH0KK30KKwordm9pZCBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpkaWRSZWZyZXNoRGlzcGxheSgpCit7CisgICAg
aWYgKCFtX3dlYlBhZ2VQcm94eS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSAhPSBOZWVkc0RpZFVwZGF0ZSkgeworICAgICAgICBt
X2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSA9IE1pc3NlZENvbW1pdDsKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIFttX2Rpc3BsYXlMaW5rSGFuZGxlciBwYXVzZV07CisjZW5kaWYKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSA9IERvZXNO
b3ROZWVkRGlkVXBkYXRlOworCisgICAgLy8gV2FpdGluZyBmb3IgQ0EgdG8gY29tbWl0IGlzIGlu
c3VmZmljaWVudCwgYmVjYXVzZSB0aGUgcmVuZGVyIHNlcnZlciBjYW4gc3RpbGwgYmUKKyAgICAv
LyB1c2luZyBvdXIgYmFja2luZyBzdG9yZS4gV2UgY2FuIGltcHJvdmUgdGhpcyBieSB3YWl0aW5n
IGZvciB0aGUgcmVuZGVyIHNlcnZlciB0byBjb21taXQKKyAgICAvLyBpZiB3ZSBmaW5kIEFQSSB0
byBkbyBzbywgYnV0IGZvciBub3cgd2Ugd2lsbCBtYWtlIGV4dHJhIGJ1ZmZlcnMgaWYgbmVlZCBi
ZS4KKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6RHJhd2luZ0Fy
ZWE6OkRpZFVwZGF0ZSgpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7CisKKyAgICBtX2xhc3RW
aXNpYmxlVHJhbnNhY3Rpb25JRCA9IG1fdHJhbnNhY3Rpb25JREZvclBlbmRpbmdDQUNvbW1pdDsK
KworICAgIG1fd2ViUGFnZVByb3h5LmRpZFVwZGF0ZUFjdGl2aXR5U3RhdGUoKTsKK30KKwordm9p
ZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojp3YWl0Rm9yRGlkVXBkYXRlQWN0aXZp
dHlTdGF0ZSgpCit7CisgICAgLy8gV2UgbXVzdCBzZW5kIHRoZSBkaWRVcGRhdGUgbWVzc2FnZSBi
ZWZvcmUgYmxvY2tpbmcgb24gdGhlIG5leHQgY29tbWl0LCBvdGhlcndpc2UKKyAgICAvLyB3ZSBj
YW4gYmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBuZXh0IGNvbW1pdCB3b24ndCBjb21lIHVudGlsIGFm
dGVyIHRoZSB3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseSB0aW1lcyBvdXQuCisgICAgaWYg
KG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlICE9IERvZXNOb3ROZWVkRGlkVXBkYXRlKQorICAgICAg
ICBkaWRSZWZyZXNoRGlzcGxheSgpOworCisgICAgc3RhdGljIFNlY29uZHMgYWN0aXZpdHlTdGF0
ZVVwZGF0ZVRpbWVvdXQgPSBbXSB7CisgICAgICAgIGlmIChpZCB2YWx1ZSA9IFtbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIG9iamVjdEZvcktleTpAIldlYktpdE92ZXJyaWRl
QWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQiXSkKKyAgICAgICAgICAgIHJldHVybiBTZWNvbmRz
KFt2YWx1ZSBkb3VibGVWYWx1ZV0pOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICByZXR1
cm4gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyg1MDApOworI2Vsc2UKKyAgICAgICAgcmV0dXJu
IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoMjUwKTsKKyNlbmRpZgorICAgIH0oKTsKKyAgICBt
X3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuY29ubmVjdGlvbigpLT53YWl0Rm9yQW5kRGlzcGF0Y2hJ
bW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6Q29t
bWl0TGF5ZXJUcmVlPihtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSwgYWN0aXZpdHlTdGF0ZVVwZGF0
ZVRpbWVvdXQsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3Nh
Z2VBcnJpdmVzKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojpk
aXNwYXRjaEFmdGVyRW5zdXJpbmdEcmF3aW5nKFdURjo6RnVuY3Rpb248dm9pZCAoQ2FsbGJhY2tC
YXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3sKKyAgICBpZiAoIW1fd2ViUGFnZVBy
b3h5LmlzVmFsaWQoKSkgeworICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6
RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpB
ZGRUcmFuc2FjdGlvbkNhbGxiYWNrSUQobV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tG
dW5jdGlvbiksIG51bGxwdHIpKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOworfQorCit2b2lk
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmhpZGVDb250ZW50VW50aWxQZW5kaW5n
VXBkYXRlKCkKK3sKKyAgICBtX3RyYW5zYWN0aW9uSURGb3JVbmhpZGluZ0NvbnRlbnQgPSBuZXh0
TGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCgpOworICAgIG1fcmVtb3RlTGF5ZXJUcmVlSG9zdC5kZXRh
Y2hSb290TGF5ZXIoKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
OjpoaWRlQ29udGVudFVudGlsQW55VXBkYXRlKCkKK3sKKyAgICBtX3JlbW90ZUxheWVyVHJlZUhv
c3QuZGV0YWNoUm9vdExheWVyKCk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eTo6cHJlcGFyZUZvckFwcFN1c3BlbnNpb24oKQoreworICAgIG1fcmVtb3RlTGF5ZXJU
cmVlSG9zdC5tYXBBbGxJT1N1cmZhY2VCYWNraW5nU3RvcmUoKTsKK30KKworYm9vbCBSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpoYXNWaXNpYmxlQ29udGVudCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcmVtb3RlTGF5ZXJUcmVlSG9zdC5yb290TGF5ZXIoKTsKK30KKworYm9vbCBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojppc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQo
KSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2VQcm94eS5pc0Fsd2F5c09uTG9nZ2luZ0Fs
bG93ZWQoKTsKK30KKworTGF5ZXJPclZpZXcqIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHk6OmxheWVyV2l0aElERm9yVGVzdGluZyh1aW50NjRfdCBsYXllcklEKSBjb25zdAoreworICAg
IHJldHVybiBtX3JlbW90ZUxheWVyVHJlZUhvc3QubGF5ZXJXaXRoSURGb3JUZXN0aW5nKGxheWVy
SUQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRhNzExZjhiNTY3ZWY3YmE5YWRiMWRhOTBmNjU2MjFlMjM3OTk3MzgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUv
UmVtb3RlTGF5ZXJUcmVlSG9zdC5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkxheWVyUmVwcmVzZW50YXRpb24uaCIKKyNpbmNsdWRlICJS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1D
QUxheWVyLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisKK09CSkNfQ0xBU1MgQ0FBbmltYXRpb247CitPQkpDX0NMQVNTIFdLQW5pbWF0aW9u
RGVsZWdhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5OworY2xhc3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBSZW1vdGVMYXll
clRyZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW1vdGVMYXllclRyZWVIb3N0KFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5SZW1vdGVMYXll
clRyZWVIb3N0KCk7CisKKyAgICBMYXllck9yVmlldyAqZ2V0TGF5ZXIoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllcjo6UGxhdGZvcm1MYXllcklEKSBjb25zdDsKKyAgICBMYXllck9yVmlldyAqcm9vdExh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXI7IH0KKworICAgIHN0YXRpYyBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbGF5ZXJJRChDQUxheWVyKik7CisKKyAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3QgbGF5ZXIgY2hhbmdlZC4KKyAgICBib29sIHVw
ZGF0ZUxheWVyVHJlZShjb25zdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYsIGZsb2F0IGlu
ZGljYXRvclNjYWxlRmFjdG9yICA9IDEpOworCisgICAgdm9pZCBzZXRJc0RlYnVnTGF5ZXJUcmVl
SG9zdChib29sIGZsYWcpIHsgbV9pc0RlYnVnTGF5ZXJUcmVlSG9zdCA9IGZsYWc7IH0KKyAgICBi
b29sIGlzRGVidWdMYXllclRyZWVIb3N0KCkgY29uc3QgeyByZXR1cm4gbV9pc0RlYnVnTGF5ZXJU
cmVlSG9zdDsgfQorCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6
OlBsYXRmb3JtTGF5ZXJJRCwgUmV0YWluUHRyPFdLQW5pbWF0aW9uRGVsZWdhdGU+PiBMYXllckFu
aW1hdGlvbkRlbGVnYXRlTWFwOworICAgIExheWVyQW5pbWF0aW9uRGVsZWdhdGVNYXAmIGFuaW1h
dGlvbkRlbGVnYXRlcygpIHsgcmV0dXJuIG1fYW5pbWF0aW9uRGVsZWdhdGVzOyB9CisKKyAgICB2
b2lkIGFuaW1hdGlvbkRpZFN0YXJ0KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5
ZXJJRCwgQ0FBbmltYXRpb24gKiwgZG91YmxlIHN0YXJ0VGltZSk7CisgICAgdm9pZCBhbmltYXRp
b25EaWRFbmQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklELCBDQUFuaW1h
dGlvbiAqKTsKKworICAgIHZvaWQgY2xlYXJMYXllcnMoKTsKKworICAgIC8vIERldGFjaCB0aGUg
cm9vdCBsYXllcjsgaXQgd2lsbCBiZSByZWF0dGFjaGVkIHVwb24gdGhlIG5leHQgaW5jb21pbmcg
Y29tbWl0LgorICAgIHZvaWQgZGV0YWNoUm9vdExheWVyKCk7CisKKyAgICAvLyBUdXJuIGFsbCBD
QU1hY2hQb3J0IG9iamVjdHMgaW4gbGF5ZXIgY29udGVudHMgaW50byBhY3R1YWwgSU9TdXJmYWNl
cy4KKyAgICAvLyBUaGlzIGF2b2lkcyBrZWVwaW5nIGFuIG91dHN0YW5kaW5nIEluVXNlIHJlZmVy
ZW5jZSB3aGVuIHN1c3BlbmRlZC4KKyAgICB2b2lkIG1hcEFsbElPU3VyZmFjZUJhY2tpbmdTdG9y
ZSgpOworCisgICAgTGF5ZXJPclZpZXcqIGxheWVyV2l0aElERm9yVGVzdGluZyh1aW50NjRfdCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgTGF5ZXJPclZpZXcgKmNyZWF0ZUxheWVyKGNvbnN0IFJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllckNyZWF0aW9uUHJvcGVydGllcyYsIGNvbnN0
IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXMqKTsKKyAgICBzdGF0
aWMgdm9pZCBzZXRMYXllcklEKENBTGF5ZXIgKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxh
dGZvcm1MYXllcklEKTsKKworICAgIHZvaWQgbGF5ZXJXaWxsQmVSZW1vdmVkKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCk7CisKKyAgICBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5JiBtX2RyYXdpbmdBcmVhOworICAgIExheWVyT3JWaWV3ICptX3Jvb3RMYXll
cjsKKyAgICBIYXNoTWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwg
UmV0YWluUHRyPExheWVyT3JWaWV3Pj4gbV9sYXllcnM7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpH
cmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQsIFJldGFpblB0cjxXS0FuaW1hdGlvbkRlbGVn
YXRlPj4gbV9hbmltYXRpb25EZWxlZ2F0ZXM7CisgICAgYm9vbCBtX2lzRGVidWdMYXllclRyZWVI
b3N0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ3M2Y0ZGM5OWJmNDQzYTA5MDk4N2Q1OTFiMzg5NDg0OWJkNzE2YjUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5tbQpAQCAtMCwwICsxLDMxMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlSG9zdC5oIgorCisj
aW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5LmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaCIKKyNpbXBv
cnQgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCisjaW1wb3J0ICJTaGFyZWFibGVCaXRt
YXAuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5
LmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSU9TdXJmYWNlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQWN0aW9u
RGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmg+CisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZh
Y2UuaD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgorCisjaWYgUExB
VEZPUk0oSU9TKQorI2ltcG9ydCA8VUlLaXQvVUlWaWV3Lmg+CisjZW5kaWYKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjZGVmaW5lIFJFTEVBU0Vf
TE9HX0lGX0FMTE9XRUQoLi4uKSBSRUxFQVNFX0xPR19JRihtX2RyYXdpbmdBcmVhLmlzQWx3YXlz
T25Mb2dnaW5nQWxsb3dlZCgpLCBWaWV3U3RhdGUsIF9fVkFfQVJHU19fKQorCitSZW1vdGVMYXll
clRyZWVIb3N0OjpSZW1vdGVMYXllclRyZWVIb3N0KFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkmIGRyYXdpbmdBcmVhKQorICAgIDogbV9kcmF3aW5nQXJlYShkcmF3aW5nQXJlYSkKKyAg
ICAsIG1fcm9vdExheWVyKG51bGxwdHIpCisgICAgLCBtX2lzRGVidWdMYXllclRyZWVIb3N0KGZh
bHNlKQoreworfQorCitSZW1vdGVMYXllclRyZWVIb3N0Ojp+UmVtb3RlTGF5ZXJUcmVlSG9zdCgp
Cit7CisgICAgZm9yIChhdXRvJiBkZWxlZ2F0ZSA6IG1fYW5pbWF0aW9uRGVsZWdhdGVzLnZhbHVl
cygpKQorICAgICAgICBbZGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07CisKKyAgICBjbGVhckxh
eWVycygpOworfQorCitib29sIFJlbW90ZUxheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVyVHJlZShj
b25zdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGZsb2F0IGluZGlj
YXRvclNjYWxlRmFjdG9yKQoreworICAgIGZvciAoY29uc3QgYXV0byYgY3JlYXRlZExheWVyIDog
dHJhbnNhY3Rpb24uY3JlYXRlZExheWVycygpKSB7CisgICAgICAgIGNvbnN0IFJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXMqIHByb3BlcnRpZXMgPSB0cmFuc2FjdGlv
bi5jaGFuZ2VkTGF5ZXJQcm9wZXJ0aWVzKCkuZ2V0KGNyZWF0ZWRMYXllci5sYXllcklEKTsKKyAg
ICAgICAgY3JlYXRlTGF5ZXIoY3JlYXRlZExheWVyLCBwcm9wZXJ0aWVzKTsKKyAgICB9CisKKyAg
ICBib29sIHJvb3RMYXllckNoYW5nZWQgPSBmYWxzZTsKKyAgICBMYXllck9yVmlldyAqcm9vdExh
eWVyID0gZ2V0TGF5ZXIodHJhbnNhY3Rpb24ucm9vdExheWVySUQoKSk7CisgICAgCisgICAgaWYg
KCFyb290TGF5ZXIpCisgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIFJlbW90ZUxh
eWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVyVHJlZSAtIGZhaWxlZCB0byBmaW5kIHJvb3QgbGF5ZXIg
d2l0aCBJRCAlbGx1IiwgdGhpcywgdHJhbnNhY3Rpb24ucm9vdExheWVySUQoKSk7CisKKyAgICBp
ZiAobV9yb290TGF5ZXIgIT0gcm9vdExheWVyKSB7CisgICAgICAgIG1fcm9vdExheWVyID0gcm9v
dExheWVyOworICAgICAgICByb290TGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB0
eXBlZGVmIHN0ZDo6cGFpcjxHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQsIEdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gTGF5ZXJJRFBhaXI7CisgICAgVmVjdG9yPExheWVySURQ
YWlyPiBjbG9uZXNUb1VwZGF0ZTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBDYW4ndCB1
c2UgdGhlIGlPUyBjb2RlIG9uIG1hY09TIHlldDogcmRhcjovL3Byb2JsZW0vMzEyNDc3MzAKKyAg
ICBhdXRvIGxheWVyQ29udGVudHNUeXBlID0gUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OkxheWVy
Q29udGVudHNUeXBlOjpJT1N1cmZhY2U7CisjZWxzZQorICAgIGF1dG8gbGF5ZXJDb250ZW50c1R5
cGUgPSBtX2RyYXdpbmdBcmVhLmhhc0RlYnVnSW5kaWNhdG9yKCkgPyBSZW1vdGVMYXllckJhY2tp
bmdTdG9yZTo6TGF5ZXJDb250ZW50c1R5cGU6OklPU3VyZmFjZSA6IFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlOjpMYXllckNvbnRlbnRzVHlwZTo6Q0FNYWNoUG9ydDsKKyNlbmRpZgorICAgIAorICAg
IGZvciAoYXV0byYgY2hhbmdlZExheWVyIDogdHJhbnNhY3Rpb24uY2hhbmdlZExheWVyUHJvcGVy
dGllcygpKSB7CisgICAgICAgIGF1dG8gbGF5ZXJJRCA9IGNoYW5nZWRMYXllci5rZXk7CisgICAg
ICAgIGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXMmIHBy
b3BlcnRpZXMgPSAqY2hhbmdlZExheWVyLnZhbHVlOworCisgICAgICAgIExheWVyT3JWaWV3ICps
YXllciA9IGdldExheWVyKGxheWVySUQpOworICAgICAgICBBU1NFUlQobGF5ZXIpOworCisgICAg
ICAgIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllcjo6UmVsYXRlZExheWVyTWFwIHJlbGF0
ZWRMYXllcnM7CisgICAgICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVt
b3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNoaWxkcmVuQ2hhbmdlZCkgeworICAgICAgICAgICAg
Zm9yIChhdXRvJiBjaGlsZCA6IHByb3BlcnRpZXMuY2hpbGRyZW4pCisgICAgICAgICAgICAgICAg
cmVsYXRlZExheWVycy5zZXQoY2hpbGQsIGdldExheWVyKGNoaWxkKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uOjpNYXNrTGF5ZXJDaGFuZ2VkICYmIHByb3BlcnRpZXMubWFza0xheWVySUQp
CisgICAgICAgICAgICByZWxhdGVkTGF5ZXJzLnNldChwcm9wZXJ0aWVzLm1hc2tMYXllcklELCBn
ZXRMYXllcihwcm9wZXJ0aWVzLm1hc2tMYXllcklEKSk7CisKKyAgICAgICAgaWYgKHByb3BlcnRp
ZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q2xvbmVk
Q29udGVudHNDaGFuZ2VkICYmIHByb3BlcnRpZXMuY2xvbmVkTGF5ZXJJRCkKKyAgICAgICAgICAg
IGNsb25lc1RvVXBkYXRlLmFwcGVuZChMYXllcklEUGFpcihsYXllcklELCBwcm9wZXJ0aWVzLmNs
b25lZExheWVySUQpKTsKKworICAgICAgICBpZiAobV9pc0RlYnVnTGF5ZXJUcmVlSG9zdCkgewor
ICAgICAgICAgICAgUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyOjphcHBseVByb3BlcnRp
ZXMobGF5ZXIsIHRoaXMsIHByb3BlcnRpZXMsIHJlbGF0ZWRMYXllcnMsIGxheWVyQ29udGVudHNU
eXBlKTsKKworICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Qm9yZGVyV2lkdGhDaGFuZ2VkKQorICAgICAgICAg
ICAgICAgIGFzTGF5ZXIobGF5ZXIpLmJvcmRlcldpZHRoID0gcHJvcGVydGllcy5ib3JkZXJXaWR0
aCAvIGluZGljYXRvclNjYWxlRmFjdG9yOworICAgICAgICAgICAgYXNMYXllcihsYXllcikubWFz
a3NUb0JvdW5kcyA9IGZhbHNlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFJlbW90ZUxh
eWVyVHJlZVByb3BlcnR5QXBwbGllcjo6YXBwbHlQcm9wZXJ0aWVzKGxheWVyLCB0aGlzLCBwcm9w
ZXJ0aWVzLCByZWxhdGVkTGF5ZXJzLCBsYXllckNvbnRlbnRzVHlwZSk7CisgICAgfQorICAgIAor
ICAgIGZvciAoY29uc3QgYXV0byYgbGF5ZXJQYWlyIDogY2xvbmVzVG9VcGRhdGUpIHsKKyAgICAg
ICAgTGF5ZXJPclZpZXcgKmxheWVyID0gZ2V0TGF5ZXIobGF5ZXJQYWlyLmZpcnN0KTsKKyAgICAg
ICAgTGF5ZXJPclZpZXcgKmNsb25lZExheWVyID0gZ2V0TGF5ZXIobGF5ZXJQYWlyLnNlY29uZCk7
CisgICAgICAgIGFzTGF5ZXIobGF5ZXIpLmNvbnRlbnRzID0gYXNMYXllcihjbG9uZWRMYXllciku
Y29udGVudHM7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBkZXN0cm95ZWRMYXllciA6IHRyYW5z
YWN0aW9uLmRlc3Ryb3llZExheWVycygpKQorICAgICAgICBsYXllcldpbGxCZVJlbW92ZWQoZGVz
dHJveWVkTGF5ZXIpOworCisgICAgLy8gRHJvcCB0aGUgY29udGVudHMgb2YgYW55IGxheWVycyB3
aGljaCB3ZXJlIHVucGFyZW50ZWQ7IHRoZSBXZWIgcHJvY2VzcyB3aWxsIHJlLXNlbmQKKyAgICAv
LyB0aGUgYmFja2luZyBzdG9yZSBpbiB0aGUgY29tbWl0IHRoYXQgcmVwYXJlbnRzIHRoZW0uCisg
ICAgZm9yIChhdXRvJiBuZXdseVVucmVhY2hhYmxlTGF5ZXJJRCA6IHRyYW5zYWN0aW9uLmxheWVy
SURzV2l0aE5ld2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmUoKSkKKyAgICAgICAgYXNMYXllcihn
ZXRMYXllcihuZXdseVVucmVhY2hhYmxlTGF5ZXJJRCkpLmNvbnRlbnRzID0gbnVsbHB0cjsKKwor
ICAgIHJldHVybiByb290TGF5ZXJDaGFuZ2VkOworfQorCitMYXllck9yVmlldyAqUmVtb3RlTGF5
ZXJUcmVlSG9zdDo6Z2V0TGF5ZXIoR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVy
SUQpIGNvbnN0Cit7CisgICAgaWYgKCFsYXllcklEKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgcmV0dXJuIG1fbGF5ZXJzLmdldChsYXllcklEKS5nZXQoKTsKK30KKwordm9pZCBSZW1vdGVM
YXllclRyZWVIb3N0OjpsYXllcldpbGxCZVJlbW92ZWQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6
UGxhdGZvcm1MYXllcklEIGxheWVySUQpCit7CisgICAgYXV0byBpdGVyID0gbV9hbmltYXRpb25E
ZWxlZ2F0ZXMuZmluZChsYXllcklEKTsKKyAgICBpZiAoaXRlciAhPSBtX2FuaW1hdGlvbkRlbGVn
YXRlcy5lbmQoKSkgeworICAgICAgICBbaXRlci0+dmFsdWUgaW52YWxpZGF0ZV07CisgICAgICAg
IG1fYW5pbWF0aW9uRGVsZWdhdGVzLnJlbW92ZShpdGVyKTsKKyAgICB9CisgICAgbV9sYXllcnMu
cmVtb3ZlKGxheWVySUQpOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZUhvc3Q6OmFuaW1hdGlv
bkRpZFN0YXJ0KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklE
LCBDQUFuaW1hdGlvbiAqYW5pbWF0aW9uLCBkb3VibGUgc3RhcnRUaW1lKQoreworICAgIENBTGF5
ZXIgKmxheWVyID0gYXNMYXllcihnZXRMYXllcihsYXllcklEKSk7CisgICAgaWYgKCFsYXllcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGFuaW1hdGlvbktleTsKKyAgICBmb3IgKE5T
U3RyaW5nICprZXkgaW4gW2xheWVyIGFuaW1hdGlvbktleXNdKSB7CisgICAgICAgIGlmIChbbGF5
ZXIgYW5pbWF0aW9uRm9yS2V5OmtleV0gPT0gYW5pbWF0aW9uKSB7CisgICAgICAgICAgICBhbmlt
YXRpb25LZXkgPSBrZXk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghYW5pbWF0aW9uS2V5LmlzRW1wdHkoKSkKKyAgICAgICAgbV9kcmF3aW5nQXJlYS5h
Y2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KGxheWVySUQsIGFuaW1hdGlvbktleSwgc3RhcnRU
aW1lKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVIb3N0OjphbmltYXRpb25EaWRFbmQoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQsIENBQW5pbWF0aW9u
ICphbmltYXRpb24pCit7CisgICAgQ0FMYXllciAqbGF5ZXIgPSBhc0xheWVyKGdldExheWVyKGxh
eWVySUQpKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcg
YW5pbWF0aW9uS2V5OworICAgIGZvciAoTlNTdHJpbmcgKmtleSBpbiBbbGF5ZXIgYW5pbWF0aW9u
S2V5c10pIHsKKyAgICAgICAgaWYgKFtsYXllciBhbmltYXRpb25Gb3JLZXk6a2V5XSA9PSBhbmlt
YXRpb24pIHsKKyAgICAgICAgICAgIGFuaW1hdGlvbktleSA9IGtleTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFhbmltYXRpb25LZXkuaXNFbXB0eSgp
KQorICAgICAgICBtX2RyYXdpbmdBcmVhLmFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKGxheWVy
SUQsIGFuaW1hdGlvbktleSk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlSG9zdDo6Y2xlYXJM
YXllcnMoKQoreworICAgIGZvciAoYXV0byYgaWRMYXllciA6IG1fbGF5ZXJzKSB7CisgICAgICAg
IG1fYW5pbWF0aW9uRGVsZWdhdGVzLnJlbW92ZShpZExheWVyLmtleSk7CisjaWYgUExBVEZPUk0o
SU9TKQorICAgICAgICBbaWRMYXllci52YWx1ZS5nZXQoKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsK
KyNlbHNlCisgICAgICAgIFthc0xheWVyKGlkTGF5ZXIudmFsdWUuZ2V0KCkpIHJlbW92ZUZyb21T
dXBlcmxheWVyXTsKKyNlbmRpZgorICAgIH0KKworICAgIG1fbGF5ZXJzLmNsZWFyKCk7CisgICAg
bV9yb290TGF5ZXIgPSBudWxscHRyOworfQorCitMYXllck9yVmlldyogUmVtb3RlTGF5ZXJUcmVl
SG9zdDo6bGF5ZXJXaXRoSURGb3JUZXN0aW5nKHVpbnQ2NF90IGxheWVySUQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGdldExheWVyKGxheWVySUQpOworfQorCitzdGF0aWMgTlNTdHJpbmcqIGNvbnN0
IFdLTGF5ZXJJRFByb3BlcnR5S2V5ID0gQCJXS0xheWVySUQiOworCit2b2lkIFJlbW90ZUxheWVy
VHJlZUhvc3Q6OnNldExheWVySUQoQ0FMYXllciAqbGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklEKQoreworICAgIFtsYXllciBzZXRWYWx1ZTpbTlNO
dW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkTG9uZ0xvbmc6bGF5ZXJJRF0gZm9yS2V5OldLTGF5ZXJJ
RFByb3BlcnR5S2V5XTsKK30KKworV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEIFJlbW90ZUxheWVyVHJlZUhvc3Q6OmxheWVySUQoQ0FMYXllciogbGF5ZXIpCit7CisgICAg
cmV0dXJuIFtbbGF5ZXIgdmFsdWVGb3JLZXk6V0tMYXllcklEUHJvcGVydHlLZXldIHVuc2lnbmVk
TG9uZ0xvbmdWYWx1ZV07Cit9CisKKyNpZiAhUExBVEZPUk0oSU9TKQorTGF5ZXJPclZpZXcgKlJl
bW90ZUxheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyKGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uOjpMYXllckNyZWF0aW9uUHJvcGVydGllcyYgcHJvcGVydGllcywgY29uc3QgUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyopCit7CisgICAgUmV0YWluUHRy
PENBTGF5ZXI+JiBsYXllciA9IG1fbGF5ZXJzLmFkZChwcm9wZXJ0aWVzLmxheWVySUQsIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKKworICAgIEFTU0VSVCghbGF5ZXIpOworCisgICAgc3dpdGNo
IChwcm9wZXJ0aWVzLnR5cGUpIHsKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
TGF5ZXI6CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVdlYkxheWVyOgorICAg
IGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVSb290TGF5ZXI6CisgICAgY2FzZSBQbGF0
Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVNpbXBsZUxheWVyOgorICAgIGNhc2UgUGxhdGZvcm1DQUxh
eWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdMYXllcjoKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlUGFnZVRpbGVkQmFja2luZ0xheWVyOgorICAgIGNhc2UgUGxhdGZvcm1DQUxh
eWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXI6CisgICAgY2FzZSBQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZVNjcm9sbGluZ0xheWVyOgorICAgICAgICBsYXllciA9IGFkb3B0TlMo
W1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZv
cm1DQUxheWVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllcjoKKyAgICAgICAgbGF5ZXIgPSBhZG9w
dE5TKFtbQ0FUcmFuc2Zvcm1MYXllciBhbGxvY10gaW5pdF0pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlQmFja2Ryb3BMYXllcjoKKyAgICBjYXNl
IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGlnaHRTeXN0ZW1CYWNrZHJvcExheWVyOgorICAg
IGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVEYXJrU3lzdGVtQmFja2Ryb3BMYXllcjoK
KyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAgICAgICBsYXllciA9IGFkb3B0TlMoW1tD
QUJhY2tkcm9wTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBsYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0
XSk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6Okxh
eWVyVHlwZUN1c3RvbToKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlQVZQbGF5
ZXJMYXllcjoKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlQ29udGVudHNQcm92
aWRlZExheWVyOgorICAgICAgICBpZiAoIW1faXNEZWJ1Z0xheWVyVHJlZUhvc3QpCisgICAgICAg
ICAgICBsYXllciA9IFdLTWFrZVJlbmRlckxheWVyKHByb3BlcnRpZXMuaG9zdGluZ0NvbnRleHRJ
RCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIg
YWxsb2NdIGluaXRdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZVNoYXBlTGF5ZXI6CisgICAgICAgIGxheWVyID0gYWRvcHROUyhbW0NBU2hhcGVM
YXllciBhbGxvY10gaW5pdF0pOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBbbGF5ZXIgc2V0RGVsZWdhdGU6
W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKKyAgICBzZXRMYXll
cklEKGxheWVyLmdldCgpLCBwcm9wZXJ0aWVzLmxheWVySUQpOworCisgICAgcmV0dXJuIGxheWVy
LmdldCgpOworfQorI2VuZGlmCisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlSG9zdDo6ZGV0YWNoUm9v
dExheWVyKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgW21fcm9vdExheWVyIHJlbW92ZUZy
b21TdXBlcnZpZXddOworI2Vsc2UKKyAgICBbYXNMYXllcihtX3Jvb3RMYXllcikgcmVtb3ZlRnJv
bVN1cGVybGF5ZXJdOworI2VuZGlmCisgICAgbV9yb290TGF5ZXIgPSBudWxscHRyOworfQorCisj
aWYgVVNFKElPU1VSRkFDRSkKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5TWFwSU9TdXJmYWNlQmFj
a2luZ1N0b3JlKENBTGF5ZXIgKmxheWVyKQoreworICAgIGlmIChsYXllci5jb250ZW50cyAmJiBD
RkdldFR5cGVJRChsYXllci5jb250ZW50cykgPT0gQ0FNYWNoUG9ydEdldFR5cGVJRCgpKSB7Cisg
ICAgICAgIE1hY2hTZW5kUmlnaHQgcG9ydCA9IE1hY2hTZW5kUmlnaHQ6OmNyZWF0ZShDQU1hY2hQ
b3J0R2V0UG9ydCgoQ0FNYWNoUG9ydFJlZilsYXllci5jb250ZW50cykpOworICAgICAgICBhdXRv
IHN1cmZhY2UgPSBXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21TZW5kUmlnaHQoV1RGTW92
ZShwb3J0KSwgc1JHQkNvbG9yU3BhY2VSZWYoKSk7CisgICAgICAgIGxheWVyLmNvbnRlbnRzID0g
c3VyZmFjZSA/IHN1cmZhY2UtPmFzTGF5ZXJDb250ZW50cygpIDogbmlsOworICAgIH0KKworICAg
IGZvciAoQ0FMYXllciAqc3VibGF5ZXIgaW4gbGF5ZXIuc3VibGF5ZXJzKQorICAgICAgICByZWN1
cnNpdmVseU1hcElPU3VyZmFjZUJhY2tpbmdTdG9yZShzdWJsYXllcik7Cit9CisjZW5kaWYKKwor
dm9pZCBSZW1vdGVMYXllclRyZWVIb3N0OjptYXBBbGxJT1N1cmZhY2VCYWNraW5nU3RvcmUoKQor
eworI2lmIFVTRShJT1NVUkZBQ0UpCisgICAgcmVjdXJzaXZlbHlNYXBJT1N1cmZhY2VCYWNraW5n
U3RvcmUoYXNMYXllcihtX3Jvb3RMYXllcikpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1Bl
cmZvcm1hbmNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3ZjUyMWQ0ZTAzNTUwNGJlOTU0ZDU1YTVlYjYz
ZmIyYTE3OTI5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLmgK
QEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBSZW1vdGVMYXllclRyZWVT
Y3JvbGxpbmdQZXJmb3JtYW5jZURhdGFfaAorI2RlZmluZSBSZW1vdGVMYXllclRyZWVTY3JvbGxp
bmdQZXJmb3JtYW5jZURhdGFfaAorCisjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2lt
cG9ydCA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTsKKworY2xhc3MgUmVtb3RlTGF5ZXJUcmVlU2Nyb2xs
aW5nUGVyZm9ybWFuY2VEYXRhIHsKK3B1YmxpYzoKKyAgICBSZW1vdGVMYXllclRyZWVTY3JvbGxp
bmdQZXJmb3JtYW5jZURhdGEoUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSYpOworICAg
IH5SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEoKTsKKworICAgIHZvaWQg
ZGlkQ29tbWl0TGF5ZXJUcmVlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZVJlY3Qp
OworICAgIHZvaWQgZGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZVJl
Y3QpOworCisgICAgTlNBcnJheSAqZGF0YSgpOyAvLyBBcnJheSBvZiBbIHRpbWUsIGV2ZW50IHR5
cGUsIHVuZmlsbGVkIHBpeGVsIGNvdW50IF0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBibGFu
a1BpeGVsQ291bnQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkgY29uc3Q7
CisgICAgCisgICAgc3RydWN0IEJsYW5rUGl4ZWxDb3VudCB7CisgICAgICAgIGVudW0gRXZlbnRU
eXBlIHsgRmlsbGVkLCBFeHBvc2VkIH07CisKKyAgICAgICAgZG91YmxlIHN0YXJ0VGltZTsKKyAg
ICAgICAgZG91YmxlIGVuZFRpbWU7CisgICAgICAgIEV2ZW50VHlwZSBldmVudFR5cGU7CisgICAg
ICAgIHVuc2lnbmVkIGJsYW5rUGl4ZWxDb3VudDsKKyAgICAgICAgCisgICAgICAgIEJsYW5rUGl4
ZWxDb3VudChkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIEV2ZW50VHlwZSB0eXBlLCB1bnNpZ25l
ZCBjb3VudCkKKyAgICAgICAgICAgIDogc3RhcnRUaW1lKHN0YXJ0KQorICAgICAgICAgICAgLCBl
bmRUaW1lKGVuZCkKKyAgICAgICAgICAgICwgZXZlbnRUeXBlKHR5cGUpCisgICAgICAgICAgICAs
IGJsYW5rUGl4ZWxDb3VudChjb3VudCkKKyAgICAgICAgeyB9CisgICAgICAgIAorICAgICAgICBi
b29sIGNhbkNvYWxlc2NlKEJsYW5rUGl4ZWxDb3VudDo6RXZlbnRUeXBlLCB1bnNpZ25lZCBibGFu
a1BpeGVsQ291bnQpIGNvbnN0OworICAgIH07CisgICAgCisgICAgdm9pZCBhcHBlbmRCbGFua1Bp
eGVsQ291bnQoQmxhbmtQaXhlbENvdW50OjpFdmVudFR5cGUsIHVuc2lnbmVkIGJsYW5rUGl4ZWxD
b3VudCk7CisKKyAgICBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5JiBtX2RyYXdpbmdB
cmVhOworICAgIFZlY3RvcjxCbGFua1BpeGVsQ291bnQ+IG1fYmxhbmtQaXhlbENvdW50czsKK307
CisKK30KKworI2VuZGlmIC8vIFJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0
YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUv
UmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZv
cm1hbmNlRGF0YS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzkzMDdmOGJlZDZhN2E1MDA2NzVjMjkzZTYwMTA5
MmNkZDUzNzJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5tbQpA
QCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLmgiCisKKyNpbXBvcnQg
IlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCIKKyNpbXBvcnQgIlJlbW90ZUxheWVy
VHJlZUhvc3QuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FMYXllci5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9UaWxlQ29udHJvbGxlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKKworUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VE
YXRhOjpSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEoUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eSYgZHJhd2luZ0FyZWEpCisgICAgOiBtX2RyYXdpbmdBcmVhKGRy
YXdpbmdBcmVhKQoreworfQorCitSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURh
dGE6On5SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEoKQoreworfQorCit2
b2lkIFJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YTo6ZGlkQ29tbWl0TGF5
ZXJUcmVlKGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpCit7CisgICAgLy8gRklYTUU6IG1h
eWJlIHdlIG9ubHkgY2FyZSBhYm91dCBuZXdseSBjcmVhdGVkIHRpbGVzPworICAgIGFwcGVuZEJs
YW5rUGl4ZWxDb3VudChCbGFua1BpeGVsQ291bnQ6OkZpbGxlZCwgYmxhbmtQaXhlbENvdW50KHZp
c2libGVSZWN0KSk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFu
Y2VEYXRhOjpkaWRTY3JvbGwoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkKK3sKKyAgICBh
cHBlbmRCbGFua1BpeGVsQ291bnQoQmxhbmtQaXhlbENvdW50OjpFeHBvc2VkLCBibGFua1BpeGVs
Q291bnQodmlzaWJsZVJlY3QpKTsKK30KKworYm9vbCBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQ
ZXJmb3JtYW5jZURhdGE6OkJsYW5rUGl4ZWxDb3VudDo6Y2FuQ29hbGVzY2UoQmxhbmtQaXhlbENv
dW50OjpFdmVudFR5cGUgdHlwZSwgdW5zaWduZWQgcGl4ZWxDb3VudCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZXZlbnRUeXBlID09IHR5cGUgJiYgYmxhbmtQaXhlbENvdW50ID09IHBpeGVsQ291bnQ7
Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhOjphcHBl
bmRCbGFua1BpeGVsQ291bnQoQmxhbmtQaXhlbENvdW50OjpFdmVudFR5cGUgZXZlbnRUeXBlLCB1
bnNpZ25lZCBibGFua1BpeGVsQ291bnQpCit7CisgICAgZG91YmxlIG5vdyA9IENGQWJzb2x1dGVU
aW1lR2V0Q3VycmVudCgpOworICAgIGlmICghbV9ibGFua1BpeGVsQ291bnRzLmlzRW1wdHkoKSAm
JiBtX2JsYW5rUGl4ZWxDb3VudHMubGFzdCgpLmNhbkNvYWxlc2NlKGV2ZW50VHlwZSwgYmxhbmtQ
aXhlbENvdW50KSkgeworICAgICAgICBtX2JsYW5rUGl4ZWxDb3VudHMubGFzdCgpLmVuZFRpbWUg
PSBub3c7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JsYW5rUGl4ZWxDb3VudHMu
YXBwZW5kKEJsYW5rUGl4ZWxDb3VudChub3csIG5vdywgZXZlbnRUeXBlLCBibGFua1BpeGVsQ291
bnQpKTsKK30KKworTlNBcnJheSAqUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VE
YXRhOjpkYXRhKCkKK3sKKyAgICBOU011dGFibGVBcnJheSogZGF0YUFycmF5ID0gW05TTXV0YWJs
ZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Om1fYmxhbmtQaXhlbENvdW50cy5zaXplKCldOworICAg
IAorICAgIGZvciAoYXV0byBwaXhlbERhdGEgOiBtX2JsYW5rUGl4ZWxDb3VudHMpIHsKKyAgICAg
ICAgW2RhdGFBcnJheSBhZGRPYmplY3Q6QFsKKyAgICAgICAgICAgIEAocGl4ZWxEYXRhLnN0YXJ0
VGltZSksCisgICAgICAgICAgICAocGl4ZWxEYXRhLmV2ZW50VHlwZSA9PSBCbGFua1BpeGVsQ291
bnQ6OkZpbGxlZCkgPyBAImZpbGxlZCIgOiBAImV4cG9zZWQiLAorICAgICAgICAgICAgQChwaXhl
bERhdGEuYmxhbmtQaXhlbENvdW50KQorICAgICAgICBdXTsKKyAgICB9CisgICAgcmV0dXJuIGRh
dGFBcnJheTsKK30KKworc3RhdGljIENBTGF5ZXIgKmZpbmRUaWxlR3JpZENvbnRhaW5lckxheWVy
KENBTGF5ZXIgKmxheWVyKQoreworICAgIGZvciAoQ0FMYXllciAqY3VyckxheWVyIDogW2xheWVy
IHN1YmxheWVyc10pIHsKKyAgICAgICAgU3RyaW5nIGxheWVyTmFtZSA9IFtjdXJyTGF5ZXIgbmFt
ZV07CisgICAgICAgIGlmIChsYXllck5hbWUgPT0gVGlsZUNvbnRyb2xsZXI6OnRpbGVHcmlkQ29u
dGFpbmVyTGF5ZXJOYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gY3VyckxheWVyOworCisgICAg
ICAgIGlmIChDQUxheWVyICpmb3VuZExheWVyID0gZmluZFRpbGVHcmlkQ29udGFpbmVyTGF5ZXIo
Y3VyckxheWVyKSkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZExheWVyOworICAgIH0KKworICAg
IHJldHVybiBuaWw7Cit9CisKK3Vuc2lnbmVkIFJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZv
cm1hbmNlRGF0YTo6YmxhbmtQaXhlbENvdW50KGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3Qp
IGNvbnN0Cit7CisgICAgQ0FMYXllciAqcm9vdExheWVyID0gYXNMYXllcihtX2RyYXdpbmdBcmVh
LnJlbW90ZUxheWVyVHJlZUhvc3QoKS5yb290TGF5ZXIoKSk7CisKKyAgICBDQUxheWVyICp0aWxl
R3JpZENvbnRhaW5lciA9IGZpbmRUaWxlR3JpZENvbnRhaW5lckxheWVyKHJvb3RMYXllcik7Cisg
ICAgaWYgKCF0aWxlR3JpZENvbnRhaW5lcikgeworICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBm
aW5kIFRpbGVHcmlkIENvbnRhaW5lciBMYXllciIpOworICAgICAgICByZXR1cm4gVUlOVF9NQVg7
CisgICAgfQorCisgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0RXhjbHVkaW5nVG9vbGJhciA9IHZp
c2libGVSZWN0OworICAgIGlmICh2aXNpYmxlUmVjdEV4Y2x1ZGluZ1Rvb2xiYXIueSgpIDwgMCkK
KyAgICAgICAgdmlzaWJsZVJlY3RFeGNsdWRpbmdUb29sYmFyLnNldFkoMCk7CisKKyAgICBSZWdp
b24gcGFpbnRlZFZpc2libGVUaWxlUmVnaW9uOworCisgICAgZm9yIChDQUxheWVyICp0aWxlTGF5
ZXIgOiBbdGlsZUdyaWRDb250YWluZXIgc3VibGF5ZXJzXSkgeworICAgICAgICBGbG9hdFJlY3Qg
dGlsZVJlY3QgPSBbdGlsZUxheWVyIGNvbnZlcnRSZWN0Olt0aWxlTGF5ZXIgYm91bmRzXSB0b0xh
eWVyOnRpbGVHcmlkQ29udGFpbmVyXTsKKyAgICAKKyAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0
KHZpc2libGVSZWN0RXhjbHVkaW5nVG9vbGJhcik7CisgICAgICAgIAorICAgICAgICBpZiAoIXRp
bGVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHBhaW50ZWRWaXNpYmxlVGlsZVJlZ2lvbi51
bml0ZShlbmNsb3NpbmdJbnRSZWN0KHRpbGVSZWN0KSk7CisgICAgfQorCisgICAgUmVnaW9uIHVu
Y292ZXJlZFJlZ2lvbihlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVSZWN0RXhjbHVkaW5nVG9vbGJh
cikpOworICAgIHVuY292ZXJlZFJlZ2lvbi5zdWJ0cmFjdChwYWludGVkVmlzaWJsZVRpbGVSZWdp
b24pOworCisgICAgcmV0dXJuIHVuY292ZXJlZFJlZ2lvbi50b3RhbEFyZWEoKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU1ZDFlYjcxN2ZkOWEyNzM2YmJmYzExOGFmNDY1MGE1NzJiMGM3Y2UKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eS5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUg
IkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5oIgorI2luY2x1ZGUgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisjaW5jbHVk
ZSAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Nj
cm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3Jv
bGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsaW5nU3RhdGVUcmVlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OlJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHkoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCisgICAgOiBtX3dlYlBh
Z2VQcm94eSh3ZWJQYWdlUHJveHkpCisgICAgLCBtX3Njcm9sbGluZ1RyZWUoUmVtb3RlU2Nyb2xs
aW5nVHJlZTo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fcmVxdWVzdGVkU2Nyb2xsSW5mbyhudWxs
cHRyKQorICAgICwgbV9wcm9wYWdhdGVzTWFpbkZyYW1lU2Nyb2xscyh0cnVlKQoreworfQorCitS
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Ojp+UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eSgpCit7Cit9CisKK1Njcm9sbGluZ05vZGVJRCBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5Ojpyb290U2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Ny
b2xsaW5nVHJlZS0+cm9vdE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
bV9zY3JvbGxpbmdUcmVlLT5yb290Tm9kZSgpLT5zY3JvbGxpbmdOb2RlSUQoKTsKK30KKworY29u
c3QgUmVtb3RlTGF5ZXJUcmVlSG9zdCogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6
bGF5ZXJUcmVlSG9zdCgpIGNvbnN0Cit7CisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0Fy
ZWEgPSBtX3dlYlBhZ2VQcm94eS5kcmF3aW5nQXJlYSgpOworICAgIGlmICghaXM8UmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eT4oZHJhd2luZ0FyZWEpKSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5JiByZW1vdGVEcmF3aW5nQXJlYSA9IGRvd25jYXN0
PFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCpkcmF3aW5nQXJlYSk7CisgICAgcmV0
dXJuICZyZW1vdGVEcmF3aW5nQXJlYS5yZW1vdGVMYXllclRyZWVIb3N0KCk7Cit9CisKK3ZvaWQg
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y29tbWl0U2Nyb2xsaW5nVHJlZVN0YXRl
KGNvbnN0IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCBSZXF1ZXN0ZWRTY3JvbGxJbmZvJiByZXF1ZXN0ZWRTY3JvbGxJbmZvKQoreworICAgIG1fcmVx
dWVzdGVkU2Nyb2xsSW5mbyA9ICZyZXF1ZXN0ZWRTY3JvbGxJbmZvOworCisgICAgLy8gRklYTUU6
IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgaWRpb20gZm9yIHRoaXMuCisgICAgc3RkOjp1bmlxdWVf
cHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gc3RhdGVUcmVlKGNvbnN0X2Nhc3Q8UmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbiY+KHRyYW5zYWN0aW9uKS5zY3JvbGxpbmdTdGF0ZVRy
ZWUoKS5yZWxlYXNlKCkpOworCisgICAgY29uc3QgUmVtb3RlTGF5ZXJUcmVlSG9zdCogbGF5ZXJU
cmVlSG9zdCA9IHRoaXMtPmxheWVyVHJlZUhvc3QoKTsKKyAgICBpZiAoIWxheWVyVHJlZUhvc3Qp
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjb25uZWN0U3RhdGVOb2RlTGF5ZXJzKCpzdGF0ZVRyZWUsICpsYXllclRyZWVIb3N0
KTsKKyAgICBtX3Njcm9sbGluZ1RyZWUtPmNvbW1pdFRyZWVTdGF0ZShXVEZNb3ZlKHN0YXRlVHJl
ZSkpOworCisgICAgbV9yZXF1ZXN0ZWRTY3JvbGxJbmZvID0gbnVsbHB0cjsKK30KKworI2lmICFQ
TEFURk9STShJT1MpCit2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNvbm5l
Y3RTdGF0ZU5vZGVMYXllcnMoU2Nyb2xsaW5nU3RhdGVUcmVlJiBzdGF0ZVRyZWUsIGNvbnN0IFJl
bW90ZUxheWVyVHJlZUhvc3QmIGxheWVyVHJlZUhvc3QpCit7CisgICAgZm9yIChhdXRvJiBjdXJy
Tm9kZSA6IHN0YXRlVHJlZS5ub2RlTWFwKCkudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGN1cnJO
b2RlLT5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikp
CisgICAgICAgICAgICBjdXJyTm9kZS0+c2V0TGF5ZXIobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihj
dXJyTm9kZS0+bGF5ZXIoKSkpOworCisgICAgICAgIHN3aXRjaCAoY3Vyck5vZGUtPm5vZGVUeXBl
KCkpIHsKKyAgICAgICAgY2FzZSBGcmFtZVNjcm9sbGluZ05vZGU6IHsKKyAgICAgICAgICAgIFNj
cm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3du
Y2FzdDxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZT4oKmN1cnJOb2RlKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIp
KQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5zZXRTY3JvbGxlZENvbnRlbnRz
TGF5ZXIobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsZWRD
b250ZW50c0xheWVyKCkpKTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5o
YXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkNvdW50
ZXJTY3JvbGxpbmdMYXllcikpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNl
dENvdW50ZXJTY3JvbGxpbmdMYXllcihsYXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0
YXRlTm9kZS5jb3VudGVyU2Nyb2xsaW5nTGF5ZXIoKSkpOworCisgICAgICAgICAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Ny
b2xsaW5nTm9kZTo6SW5zZXRDbGlwTGF5ZXIpKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0
YXRlTm9kZS5zZXRJbnNldENsaXBMYXllcihsYXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGlu
Z1N0YXRlTm9kZS5pbnNldENsaXBMYXllcigpKSk7CisKKyAgICAgICAgICAgIGlmIChzY3JvbGxp
bmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxp
bmdOb2RlOjpDb250ZW50U2hhZG93TGF5ZXIpKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0
YXRlTm9kZS5zZXRDb250ZW50U2hhZG93TGF5ZXIobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3Jv
bGxpbmdTdGF0ZU5vZGUuY29udGVudFNoYWRvd0xheWVyKCkpKTsKKworICAgICAgICAgICAgLy8g
RklYTUU6IHdlIHNob3VsZCBuZXZlciBoYXZlIGhlYWRlciBhbmQgZm9vdGVyIGxheWVycyBjb21p
bmcgZnJvbSB0aGUgV2ViUHJvY2Vzcy4KKyAgICAgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpI
ZWFkZXJMYXllcikpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNldEhlYWRl
ckxheWVyKGxheWVyVHJlZUhvc3QuZ2V0TGF5ZXIoc2Nyb2xsaW5nU3RhdGVOb2RlLmhlYWRlckxh
eWVyKCkpKTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkZvb3RlckxheWVyKSkK
KyAgICAgICAgICAgICAgICBzY3JvbGxpbmdTdGF0ZU5vZGUuc2V0Rm9vdGVyTGF5ZXIobGF5ZXJU
cmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdTdGF0ZU5vZGUuZm9vdGVyTGF5ZXIoKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBPdmVyZmxvd1Njcm9sbGlu
Z05vZGU6IHsKKyAgICAgICAgICAgIFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
JiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZT4oKmN1cnJOb2RlKTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRl
Tm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3Jv
bGxlZENvbnRlbnRzTGF5ZXIpKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5z
ZXRTY3JvbGxlZENvbnRlbnRzTGF5ZXIobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdT
dGF0ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgRml4ZWROb2RlOgorICAgICAgICBjYXNlIFN0aWNreU5v
ZGU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZgorCiti
b29sIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBTY3JvbGxpbmdUcmVlOjpFdmVu
dFJlc3VsdCByZXN1bHQgPSBtX3Njcm9sbGluZ1RyZWUtPnRyeVRvSGFuZGxlV2hlZWxFdmVudChl
dmVudCk7CisgICAgcmV0dXJuIHJlc3VsdCA9PSBTY3JvbGxpbmdUcmVlOjpEaWRIYW5kbGVFdmVu
dDsgLy8gRklYTUU6IGhhbmRsZSBvdGhlciB2YWx1ZXMuCit9CisKK1RyYWNraW5nVHlwZSBSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpldmVudFRyYWNraW5nVHlwZUZvclBvaW50KGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBJbnRQb2ludCBwKSBjb25zdAoreworICAgIHJl
dHVybiBtX3Njcm9sbGluZ1RyZWUtPmV2ZW50VHJhY2tpbmdUeXBlRm9yUG9pbnQoZXZlbnROYW1l
LCBwKTsKK30KKwordm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Ojp2aWV3cG9y
dENoYW5nZWRWaWFEZWxlZ2F0ZWRTY3JvbGxpbmcoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgY29u
c3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgZG91YmxlIHNjYWxlKQoreworICAgIG1f
c2Nyb2xsaW5nVHJlZS0+dmlld3BvcnRDaGFuZ2VkVmlhRGVsZWdhdGVkU2Nyb2xsaW5nKG5vZGVJ
RCwgZml4ZWRQb3NpdGlvblJlY3QsIHNjYWxlKTsKK30KKwordm9pZCBSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvclByb3h5OjpjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShXZWJDb3Jl
OjpTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2
ZXJ0aWNhbCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvcjo6Q3VycmVudFNuYXBQb2ludEluZGljZXNDaGFuZ2VkRm9yTm9kZShu
b2RlSUQsIGhvcml6b250YWwsIHZlcnRpY2FsKSk7Cit9CisKKy8vIFRoaXMgY29tZXMgZnJvbSB0
aGUgc2Nyb2xsaW5nIHRyZWUuCit2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6
OnNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxlZE5vZGVJ
RCwgY29uc3QgRmxvYXRQb2ludCYgbmV3U2Nyb2xsUG9zaXRpb24sIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8RmxvYXRQb2ludD4mIGxheW91dFZpZXdwb3J0T3JpZ2luLCBTY3JvbGxpbmdMYXllclBvc2l0
aW9uQWN0aW9uIHNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24pCit7CisgICAgLy8gU2Nyb2xs
IHVwZGF0ZXMgZm9yIHRoZSBtYWluIGZyYW1lIGFyZSBzZW50IHZpYSBXZWJQYWdlUHJveHk6OnVw
ZGF0ZVZpc2libGVDb250ZW50UmVjdHMoKQorICAgIC8vIHNvIGRvbid0IHNlbmQgdGhlbSBoZXJl
LgorICAgIGlmICghbV9wcm9wYWdhdGVzTWFpbkZyYW1lU2Nyb2xscyAmJiBzY3JvbGxlZE5vZGVJ
RCA9PSByb290U2Nyb2xsaW5nTm9kZUlEKCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRG
T1JNKElPUykKKyAgICBtX3dlYlBhZ2VQcm94eS5vdmVyZmxvd1Njcm9sbFZpZXdEaWRTY3JvbGwo
KTsKKyNlbmRpZgorICAgIG1fd2ViUGFnZVByb3h5LnNlbmQoTWVzc2FnZXM6OlJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKHNjcm9sbGVkTm9k
ZUlELCBuZXdTY3JvbGxQb3NpdGlvbiwgc2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiA9PSBT
Y3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTeW5jKSk7Cit9CisKK3ZvaWQgUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2Nyb2xsaW5nVHJlZU5vZGVSZXF1ZXN0c1Njcm9sbChT
Y3JvbGxpbmdOb2RlSUQgc2Nyb2xsZWROb2RlSUQsIGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBv
c2l0aW9uLCBib29sIHJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwpCit7CisgICAgaWYgKHNj
cm9sbGVkTm9kZUlEID09IHJvb3RTY3JvbGxpbmdOb2RlSUQoKSAmJiBtX3JlcXVlc3RlZFNjcm9s
bEluZm8pIHsKKyAgICAgICAgbV9yZXF1ZXN0ZWRTY3JvbGxJbmZvLT5yZXF1ZXN0c1Njcm9sbFBv
c2l0aW9uVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgbV9yZXF1ZXN0ZWRTY3JvbGxJbmZvLT5yZXF1
ZXN0SXNQcm9ncmFtbWF0aWNTY3JvbGwgPSByZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsOwor
ICAgICAgICBtX3JlcXVlc3RlZFNjcm9sbEluZm8tPnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uID0g
c2Nyb2xsUG9zaXRpb247CisgICAgfQorfQorCitTdHJpbmcgUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eTo6c2Nyb2xsaW5nVHJlZUFzVGV4dCgpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Ny
b2xsaW5nVHJlZSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsaW5nVHJlZS0+c2Nyb2xsaW5nVHJl
ZUFzVGV4dCgpOworICAgIAorICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
ODdiYjJjMmU4NGM4NDliMDVmZTEzYmYwOTk2ZWMwZTM1ZTdkZGJiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHkuaApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5X2gKKyNkZWZpbmUgUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eV9oCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaCIKKyNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdUcmVlLmgiCisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgUGxhdGZvcm1XaGVlbEV2
ZW50OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlTGF5ZXJUcmVlSG9z
dDsKK2NsYXNzIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb247CitjbGFzcyBS
ZW1vdGVTY3JvbGxpbmdUcmVlOworY2xhc3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5KTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5KFdlYlBhZ2VQcm94eSYpOworICAgIHZpcnR1YWwg
flJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKTsKKworICAgIGJvb2wgdmlzdWFsVmll
d3BvcnRFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdUcmVlICYmIG1fc2Nyb2xs
aW5nVHJlZS0+dmlzdWFsVmlld3BvcnRFbmFibGVkKCk7IH0KKworICAgIC8vIEluZm9ybSB0aGUg
d2ViIHByb2Nlc3MgdGhhdCB0aGUgc2Nyb2xsIHBvc2l0aW9uIGNoYW5nZWQgKGNhbGxlZCBmcm9t
IHRoZSBzY3JvbGxpbmcgdHJlZSkKKyAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xs
KFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbmV3
U2Nyb2xsUG9zaXRpb24sIGNvbnN0IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRQb2ludD4m
IGxheW91dFZpZXdwb3J0T3JpZ2luLCBXZWJDb3JlOjpTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0
aW9uKTsKKyAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlUmVxdWVzdHNTY3JvbGwoV2ViQ29yZTo6
U2Nyb2xsaW5nTm9kZUlELCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlv
biwgYm9vbCByZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKTsKKworICAgIFdlYkNvcmU6OlRy
YWNraW5nVHlwZSBldmVudFRyYWNraW5nVHlwZUZvclBvaW50KGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnROYW1lLCBXZWJDb3JlOjpJbnRQb2ludCkgY29uc3Q7CisKKyAgICAvLyBDYWxsZWQgZXh0
ZXJuYWxseSB3aGVuIG5hdGl2ZSB2aWV3cyBtb3ZlIGFyb3VuZC4KKyAgICB2b2lkIHZpZXdwb3J0
Q2hhbmdlZFZpYURlbGVnYXRlZFNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGRvdWJsZSBzY2FsZSk7
CisKKyAgICB2b2lkIGN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKFdlYkNvcmU6OlNj
cm9sbGluZ05vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQgdmVydGljYWwpOwor
CisgICAgLy8gRklYTUU6IGV4cG9zZSB0aGUgdHJlZSBhbmQgcGFzcyB0aGlzIHRvIHRoYXQ/Cisg
ICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVu
dCYpOworICAgIAorICAgIFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCByb290U2Nyb2xsaW5nTm9k
ZUlEKCkgY29uc3Q7CisKKyAgICBjb25zdCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVI
b3N0KCkgY29uc3Q7CisKKyAgICBzdHJ1Y3QgUmVxdWVzdGVkU2Nyb2xsSW5mbyB7CisgICAgICAg
IGJvb2wgcmVxdWVzdHNTY3JvbGxQb3NpdGlvblVwZGF0ZSB7IH07CisgICAgICAgIGJvb2wgcmVx
dWVzdElzUHJvZ3JhbW1hdGljU2Nyb2xsIHsgfTsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKKyAgICB9OworICAgIHZvaWQgY29tbWl0U2Nyb2xs
aW5nVHJlZVN0YXRlKGNvbnN0IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24m
LCBSZXF1ZXN0ZWRTY3JvbGxJbmZvJik7CisKKyAgICB2b2lkIHNldFByb3BhZ2F0ZXNNYWluRnJh
bWVTY3JvbGxzKGJvb2wgcHJvcGFnYXRlc01haW5GcmFtZVNjcm9sbHMpIHsgbV9wcm9wYWdhdGVz
TWFpbkZyYW1lU2Nyb2xscyA9IHByb3BhZ2F0ZXNNYWluRnJhbWVTY3JvbGxzOyB9CisgICAgYm9v
bCBwcm9wYWdhdGVzTWFpbkZyYW1lU2Nyb2xscygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGFnYXRl
c01haW5GcmFtZVNjcm9sbHM7IH0KKyAgICBib29sIGhhc0ZpeGVkT3JTdGlja3koKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbGluZ1RyZWUtPmhhc0ZpeGVkT3JTdGlja3koKTsgfQorCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjdXN0b21GaXhlZFBvc2l0aW9uUmVj
dCgpIGNvbnN0OworICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRQYW5HZXN0dXJl
KCk7CisgICAgdm9pZCBzY3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFNjcm9sbCgpOworICAgIHZv
aWQgc2Nyb2xsaW5nVHJlZU5vZGVEaWRFbmRTY3JvbGwoKTsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorICAgIHZvaWQgYWRqdXN0VGFyZ2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKENH
U2l6ZSBtYXhTY3JvbGxEaW1lbnNpb25zLCBDR1BvaW50IHZlbG9jaXR5LCBDR0Zsb2F0IHRvcElu
c2V0LCBDR1BvaW50KiB0YXJnZXRDb250ZW50T2Zmc2V0KTsKKyAgICBib29sIGhhc0FjdGl2ZVNu
YXBQb2ludCgpIGNvbnN0OworICAgIENHUG9pbnQgbmVhcmVzdEFjdGl2ZUNvbnRlbnRJbnNldEFk
anVzdGVkU25hcFBvaW50KENHRmxvYXQgdG9wSW5zZXQsIGNvbnN0IENHUG9pbnQmKSBjb25zdDsK
KyAgICBib29sIHNob3VsZFNldFNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCgpIGNvbnN0
OworI2VuZGlmCisjZW5kaWYKKworICAgIFN0cmluZyBzY3JvbGxpbmdUcmVlQXNUZXh0KCkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb25uZWN0U3RhdGVOb2RlTGF5ZXJzKFdlYkNvcmU6
OlNjcm9sbGluZ1N0YXRlVHJlZSYsIGNvbnN0IFJlbW90ZUxheWVyVHJlZUhvc3QmKTsKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGJvb2wgc2hvdWxkU25hcEZvck1haW5GcmFtZVNj
cm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXMpIGNvbnN0OworICAgIGZsb2F0IGNsb3Nl
c3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhp
cywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgY2xv
c2VzdEluZGV4KSBjb25zdDsKKyNlbmRpZgorCisgICAgV2ViUGFnZVByb3h5JiBtX3dlYlBhZ2VQ
cm94eTsKKyAgICBSZWZQdHI8UmVtb3RlU2Nyb2xsaW5nVHJlZT4gbV9zY3JvbGxpbmdUcmVlOwor
ICAgIFJlcXVlc3RlZFNjcm9sbEluZm8qIG1fcmVxdWVzdGVkU2Nyb2xsSW5mbzsKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHVuc2lnbmVkIG1fY3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2lu
dEluZGV4IHsgMCB9OworI2VuZGlmCisgICAgYm9vbCBtX3Byb3BhZ2F0ZXNNYWluRnJhbWVTY3Jv
bGxzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQorCisjZW5kaWYgLy8gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUv
UmVtb3RlU2Nyb2xsaW5nVHJlZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVM
YXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nVHJlZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjVlYmI0YmUzMTE3
YzBjMGFjMjQyM2Y4N2NlZjcyMjE5ZGUzMzAxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdUcmVlLmNwcApA
QCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZW1vdGVTY3JvbGxpbmdUcmVlLmgiCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQorCisjaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgIlJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVTdGlja3lOb2Rl
Lmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU92ZXJmbG93
U2Nyb2xsaW5nTm9kZUlPUy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZUlPUy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1Ry
ZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1JlZjxSZW1vdGVTY3JvbGxpbmdUcmVlPiBS
ZW1vdGVTY3JvbGxpbmdUcmVlOjpjcmVhdGUoUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eSYgc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVt
b3RlU2Nyb2xsaW5nVHJlZShzY3JvbGxpbmdDb29yZGluYXRvcikpOworfQorCitSZW1vdGVTY3Jv
bGxpbmdUcmVlOjpSZW1vdGVTY3JvbGxpbmdUcmVlKFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHkmIHNjcm9sbGluZ0Nvb3JkaW5hdG9yKQorICAgIDogbV9zY3JvbGxpbmdDb29yZGluYXRv
clByb3h5KHNjcm9sbGluZ0Nvb3JkaW5hdG9yKQoreworfQorCitSZW1vdGVTY3JvbGxpbmdUcmVl
Ojp+UmVtb3RlU2Nyb2xsaW5nVHJlZSgpCit7Cit9CisKK1Njcm9sbGluZ1RyZWU6OkV2ZW50UmVz
dWx0IFJlbW90ZVNjcm9sbGluZ1RyZWU6OnRyeVRvSGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYgKHNob3VsZEhhbmRsZVdoZWVs
RXZlbnRTeW5jaHJvbm91c2x5KHdoZWVsRXZlbnQpKQorICAgICAgICByZXR1cm4gU2VuZFRvTWFp
blRocmVhZDsKKworICAgIGlmICh3aWxsV2hlZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKHdoZWVs
RXZlbnQpKQorICAgICAgICByZXR1cm4gRGlkTm90SGFuZGxlRXZlbnQ7CisKKyAgICBoYW5kbGVX
aGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgIHJldHVybiBEaWRIYW5kbGVFdmVudDsKK30KKwor
I2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgUmVtb3RlU2Nyb2xsaW5nVHJlZTo6aGFuZGxlV2hlZWxF
dmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlKQoreworICAgIC8vIEZJWE1F
OiBoYW5kIG9mZiB0byBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk/Cit9CisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKElPUykKK1dlYkNvcmU6OkZsb2F0UmVjdCBSZW1vdGVTY3JvbGxpbmdUcmVl
OjpmaXhlZFBvc2l0aW9uUmVjdCgpCit7CisgICAgcmV0dXJuIG1fc2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eS5jdXN0b21GaXhlZFBvc2l0aW9uUmVjdCgpOworfQorCit2b2lkIFJlbW90ZVNjcm9s
bGluZ1RyZWU6OnNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0YXJ0UGFuR2VzdHVyZSgpCit7CisgICAg
bV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5LnNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0YXJ0UGFu
R2VzdHVyZSgpOworfQorCit2b2lkIFJlbW90ZVNjcm9sbGluZ1RyZWU6OnNjcm9sbGluZ1RyZWVO
b2RlV2lsbFN0YXJ0U2Nyb2xsKCkKK3sKKyAgICBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHku
c2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRTY3JvbGwoKTsKK30KKwordm9pZCBSZW1vdGVTY3Jv
bGxpbmdUcmVlOjpzY3JvbGxpbmdUcmVlTm9kZURpZEVuZFNjcm9sbCgpCit7CisgICAgbV9zY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5LnNjcm9sbGluZ1RyZWVOb2RlRGlkRW5kU2Nyb2xsKCk7Cit9
CisKKyNlbmRpZgorCit2b2lkIFJlbW90ZVNjcm9sbGluZ1RyZWU6OnNjcm9sbGluZ1RyZWVOb2Rl
RGlkU2Nyb2xsKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9s
bFBvc2l0aW9uLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQ+JiBsYXlvdXRWaWV3cG9y
dE9yaWdpbiwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiBzY3JvbGxpbmdMYXllclBvc2l0
aW9uQWN0aW9uKQoreworICAgIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5zY3JvbGxpbmdU
cmVlTm9kZURpZFNjcm9sbChub2RlSUQsIHNjcm9sbFBvc2l0aW9uLCBsYXlvdXRWaWV3cG9ydE9y
aWdpbiwgc2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbik7Cit9CisKK3ZvaWQgUmVtb3RlU2Ny
b2xsaW5nVHJlZTo6c2Nyb2xsaW5nVHJlZU5vZGVSZXF1ZXN0c1Njcm9sbChTY3JvbGxpbmdOb2Rl
SUQgbm9kZUlELCBjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgYm9vbCByZXByZXNl
bnRzUHJvZ3JhbW1hdGljU2Nyb2xsKQoreworICAgIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eS5zY3JvbGxpbmdUcmVlTm9kZVJlcXVlc3RzU2Nyb2xsKG5vZGVJRCwgc2Nyb2xsUG9zaXRpb24s
IHJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwpOworfQorCitSZWY8U2Nyb2xsaW5nVHJlZU5v
ZGU+IFJlbW90ZVNjcm9sbGluZ1RyZWU6OmNyZWF0ZVNjcm9sbGluZ1RyZWVOb2RlKFNjcm9sbGlu
Z05vZGVUeXBlIG5vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQoreworICAgIHN3aXRj
aCAobm9kZVR5cGUpIHsKKyAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nTm9kZToKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgICAgIHJldHVybiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlSU9T
OjpjcmVhdGUoKnRoaXMsIG5vZGVJRCk7CisjZWxzZQorICAgICAgICByZXR1cm4gU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6Y3JlYXRlKCp0aGlzLCBub2RlSUQpOworI2VuZGlm
CisgICAgY2FzZSBPdmVyZmxvd1Njcm9sbGluZ05vZGU6CisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICByZXR1cm4gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y3JlYXRl
KCp0aGlzLCBub2RlSUQpOworI2Vsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBGaXhlZE5vZGU6CisgICAgICAgIHJldHVy
biBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjpjcmVhdGUoKnRoaXMsIG5vZGVJRCk7CisgICAgY2Fz
ZSBTdGlja3lOb2RlOgorICAgICAgICByZXR1cm4gU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OmNy
ZWF0ZSgqdGhpcywgbm9kZUlEKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmNyZWF0ZSgqdGhpcywgbm9kZUlEKTsK
K30KKwordm9pZCBSZW1vdGVTY3JvbGxpbmdUcmVlOjpjdXJyZW50U25hcFBvaW50SW5kaWNlc0Rp
ZENoYW5nZShTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNp
Z25lZCB2ZXJ0aWNhbCkKK3sKKyAgICBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3VycmVu
dFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2Uobm9kZUlELCBob3Jpem9udGFsLCB2ZXJ0aWNhbCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVTY3JvbGxpbmdUcmVlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1v
dGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nVHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczMThjY2M4MTRj
YTU3MTZkYzcwYzI0YjZjNDQxNzhkMjU2Y2RhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nVHJlZS5oCkBA
IC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbW90ZVNjcm9sbGluZ1RyZWVf
aAorI2RlZmluZSBSZW1vdGVTY3JvbGxpbmdUcmVlX2gKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JP
TExJTkcpCisKKyNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nQ29uc3RyYWludHMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Nj
cm9sbGluZ1RyZWUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHk7CisKK2NsYXNzIFJlbW90ZVNjcm9sbGluZ1RyZWUgZmluYWwg
OiBwdWJsaWMgV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxSZW1vdGVTY3JvbGxpbmdUcmVlPiBjcmVhdGUoUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eSYpOworICAgIHZpcnR1YWwgflJlbW90ZVNjcm9sbGluZ1RyZWUoKTsKKworICAgIGJvb2wg
aXNSZW1vdGVTY3JvbGxpbmdUcmVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIEV2ZW50UmVzdWx0IHRyeVRvSGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJDb3JlOjpQbGF0
Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKworICAgIGNvbnN0IFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHkmIHNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk7IH0KKworICAgIHZvaWQgc2Nyb2xsaW5nVHJl
ZU5vZGVEaWRTY3JvbGwoV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlELCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3Qgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpG
bG9hdFBvaW50PiYgbGF5b3V0Vmlld3BvcnRPcmlnaW4sIFdlYkNvcmU6OlNjcm9sbGluZ0xheWVy
UG9zaXRpb25BY3Rpb24gPSBXZWJDb3JlOjpTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpT
eW5jKSBvdmVycmlkZTsKKyAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlUmVxdWVzdHNTY3JvbGwo
V2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlELCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3Jv
bGxQb3NpdGlvbiwgYm9vbCByZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKSBvdmVycmlkZTsK
KworICAgIHZvaWQgY3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UoV2ViQ29yZTo6U2Ny
b2xsaW5nTm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCkgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUmVtb3RlU2Nyb2xsaW5nVHJlZShSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Jik7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
dm9pZCBoYW5kbGVXaGVlbEV2ZW50UGhhc2UoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2UpIG92ZXJyaWRlOworI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgV2ViQ29yZTo6
RmxvYXRSZWN0IGZpeGVkUG9zaXRpb25SZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzY3JvbGxp
bmdUcmVlTm9kZVdpbGxTdGFydFBhbkdlc3R1cmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNjcm9s
bGluZ1RyZWVOb2RlV2lsbFN0YXJ0U2Nyb2xsKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzY3JvbGxp
bmdUcmVlTm9kZURpZEVuZFNjcm9sbCgpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICBSZWY8V2Vi
Q29yZTo6U2Nyb2xsaW5nVHJlZU5vZGU+IGNyZWF0ZVNjcm9sbGluZ1RyZWVOb2RlKFdlYkNvcmU6
OlNjcm9sbGluZ05vZGVUeXBlLCBXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQpIG92ZXJyaWRlOwor
ICAgIAorICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkmIG1fc2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX1NDUk9MTElOR19UUkVFKFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nVHJlZSwg
aXNSZW1vdGVTY3JvbGxpbmdUcmVlKCkpOworCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKKworI2VuZGlmIC8vIFJlbW90ZVNjcm9sbGluZ1RyZWVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVMYXllclRyZWVI
b3N0SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9S
ZW1vdGVMYXllclRyZWVIb3N0SU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxNWNjMzAyMDMyNTc3OTI4MTc4
ZDA0ZGVjMjRmMjQxNDk1ZTEwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZUxheWVyVHJlZUhvc3RJT1MubW0KQEAg
LTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIFBM
QVRGT1JNKElPUykKKworI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlSG9zdC5oIgorI2ltcG9ydCA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVNjcm9sbFZpZXcuaD4K
KyNpbXBvcnQgPFVJS2l0U1BJLmg+CisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgQ0FMYXllcihXS0xheWVy
SW50ZXJuYWwpCistICh2b2lkKXNldENvbnRleHRJZDoodWludDMyX3QpY29udGV4dElEOworQGVu
ZAorCitAaW50ZXJmYWNlIENBQmFja2Ryb3BMYXllciA6IENBTGF5ZXIKK0BlbmQKKworQGludGVy
ZmFjZSBVSVZpZXcgKFdLSGl0VGVzdGluZykKKy0gKFVJVmlldyAqKV9maW5kRGVzY2VuZGFudFZp
ZXdBdFBvaW50OihDR1BvaW50KXBvaW50IHdpdGhFdmVudDooVUlFdmVudCAqKWV2ZW50OworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gVUlWaWV3IChXS0hpdFRlc3RpbmcpCisKKy8vIFVJVmlldyBo
aXQgdGVzdGluZyBhc3N1bWVzIHRoYXQgdmlld3Mgc2hvdWxkIG9ubHkgaGl0IHRlc3Qgc3Vidmll
d3MgdGhhdCBhcmUgZW50aXJlbHkgY29udGFpbmVkCisvLyBpbiB0aGUgdmlldy4gVGhpcyBpcyBu
b3QgdHJ1ZSBvZiB3ZWIgY29udGVudC4KKy8vIFdlIG9ubHkgd2FudCB0byBmaW5kIFVJU2Nyb2xs
Vmlld3MgaGVyZS4gT3RoZXIgdmlld3MgYXJlIGlnbm9yZWQuCistIChVSVZpZXcgKilfcmVjdXJz
aXZlRmluZERlc2NlbmRhbnRTY3JvbGxWaWV3QXRQb2ludDooQ0dQb2ludClwb2ludCB3aXRoRXZl
bnQ6KFVJRXZlbnQgKilldmVudAoreworICAgIGlmIChzZWxmLmNsaXBzVG9Cb3VuZHMgJiYgIVtz
ZWxmIHBvaW50SW5zaWRlOnBvaW50IHdpdGhFdmVudDpldmVudF0pCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBfX2Jsb2NrIFVJVmlldyAqZm91bmRWaWV3ID0gbmlsOworICAgIFtbc2VsZiBz
dWJ2aWV3c10gZW51bWVyYXRlT2JqZWN0c1VzaW5nQmxvY2s6XihVSVZpZXcgKnZpZXcsIE5TVUlu
dGVnZXIgaWR4LCBCT09MICpzdG9wKSB7CisgICAgICAgIENHUG9pbnQgc3Vidmlld1BvaW50ID0g
W3ZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3OnNlbGZdOworCisgICAgICAgIGlmIChb
dmlldyBwb2ludEluc2lkZTpzdWJ2aWV3UG9pbnQgd2l0aEV2ZW50OmV2ZW50XSAmJiBbdmlldyBp
c0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgY2xhc3NdXSAmJiB2aWV3LmlzVXNlckludGVyYWN0
aW9uRW5hYmxlZCkKKyAgICAgICAgICAgIGZvdW5kVmlldyA9IHZpZXc7CisKKyAgICAgICAgaWYg
KCFbdmlldyBzdWJ2aWV3c10pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKFVJ
VmlldyAqaGl0VmlldyA9IFt2aWV3IF9yZWN1cnNpdmVGaW5kRGVzY2VuZGFudFNjcm9sbFZpZXdB
dFBvaW50OnN1YnZpZXdQb2ludCB3aXRoRXZlbnQ6ZXZlbnRdKQorICAgICAgICAgICAgZm91bmRW
aWV3ID0gaGl0VmlldzsKKyAgICB9XTsKKworICAgIHJldHVybiBmb3VuZFZpZXc7Cit9CisKKy0g
KFVJVmlldyAqKV9maW5kRGVzY2VuZGFudFZpZXdBdFBvaW50OihDR1BvaW50KXBvaW50IHdpdGhF
dmVudDooVUlFdmVudCAqKWV2ZW50Cit7CisgICAgcmV0dXJuIFtzZWxmIF9yZWN1cnNpdmVGaW5k
RGVzY2VuZGFudFNjcm9sbFZpZXdBdFBvaW50OnBvaW50IHdpdGhFdmVudDpldmVudF07Cit9CisK
K0BlbmQKKworQGludGVyZmFjZSBXS0NvbXBvc2l0aW5nVmlldyA6IFVJVmlldworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gV0tDb21wb3NpdGluZ1ZpZXcKKworLSAoVUlWaWV3ICopaGl0VGVzdDoo
Q0dQb2ludClwb2ludCB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAoreworICAgIHJldHVybiBb
c2VsZiBfZmluZERlc2NlbmRhbnRWaWV3QXRQb2ludDpwb2ludCB3aXRoRXZlbnQ6ZXZlbnRdOwor
fQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCit7CisgICAgTlNTdHJpbmcgKnZpZXdEZXNj
cmlwdGlvbiA9IFtzdXBlciBkZXNjcmlwdGlvbl07CisgICAgTlNTdHJpbmcgKndlYktpdERldGFp
bHMgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiBsYXllcklEID0gJWxsdSBcIiVAXCIi
LCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZUhvc3Q6OmxheWVySUQoc2VsZi5sYXllciksIHNlbGYu
bGF5ZXIubmFtZSA/IHNlbGYubGF5ZXIubmFtZSA6IEAiIl07CisgICAgcmV0dXJuIFt2aWV3RGVz
Y3JpcHRpb24gc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6d2ViS2l0RGV0YWlsc107Cit9CisKK0Bl
bmQKKworQGludGVyZmFjZSBXS1RyYW5zZm9ybVZpZXcgOiBXS0NvbXBvc2l0aW5nVmlldworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gV0tUcmFuc2Zvcm1WaWV3CisKKysgKENsYXNzKWxheWVyQ2xh
c3MKK3sKKyAgICByZXR1cm4gW0NBVHJhbnNmb3JtTGF5ZXIgc2VsZl07Cit9CisKK0BlbmQKKwor
QGludGVyZmFjZSBXS1NpbXBsZUJhY2tkcm9wVmlldyA6IFdLQ29tcG9zaXRpbmdWaWV3CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBXS1NpbXBsZUJhY2tkcm9wVmlldworCisrIChDbGFzcylsYXll
ckNsYXNzCit7CisgICAgcmV0dXJuIFtDQUJhY2tkcm9wTGF5ZXIgc2VsZl07Cit9CisKK0BlbmQK
KworQGludGVyZmFjZSBXS1NoYXBlVmlldyA6IFdLQ29tcG9zaXRpbmdWaWV3CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBXS1NoYXBlVmlldworCisrIChDbGFzcylsYXllckNsYXNzCit7CisgICAg
cmV0dXJuIFtDQVNoYXBlTGF5ZXIgc2VsZl07Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBXS1Jl
bW90ZVZpZXcgOiBXS0NvbXBvc2l0aW5nVmlldworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tS
ZW1vdGVWaWV3CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUg
Y29udGV4dElEOih1aW50MzJfdCljb250ZXh0SUQKK3sKKyAgICBpZiAoKHNlbGYgPSBbc3VwZXIg
aW5pdFdpdGhGcmFtZTpmcmFtZV0pKQorICAgICAgICBbW3NlbGYgbGF5ZXJdIHNldENvbnRleHRJ
ZDpjb250ZXh0SURdOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCisrIChDbGFzcylsYXll
ckNsYXNzCit7CisgICAgcmV0dXJuIE5TQ2xhc3NGcm9tU3RyaW5nKEAiQ0FMYXllckhvc3QiKTsK
K30KKworQGVuZAorCitAaW50ZXJmYWNlIFdLQmFja2Ryb3BWaWV3IDogX1VJQmFja2Ryb3BWaWV3
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0JhY2tkcm9wVmlldworCistIChVSVZpZXcgKilo
aXRUZXN0OihDR1BvaW50KXBvaW50IHdpdGhFdmVudDooVUlFdmVudCAqKWV2ZW50Cit7CisgICAg
cmV0dXJuIFtzZWxmIF9maW5kRGVzY2VuZGFudFZpZXdBdFBvaW50OnBvaW50IHdpdGhFdmVudDpl
dmVudF07Cit9CisKKy0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KK3sKKyAgICBOU1N0cmluZyAq
dmlld0Rlc2NyaXB0aW9uID0gW3N1cGVyIGRlc2NyaXB0aW9uXTsKKyAgICBOU1N0cmluZyAqd2Vi
S2l0RGV0YWlscyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiIGxheWVySUQgPSAlbGx1
IFwiJUBcIiIsIFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlSG9zdDo6bGF5ZXJJRChzZWxmLmxheWVy
KSwgc2VsZi5sYXllci5uYW1lID8gc2VsZi5sYXllci5uYW1lIDogQCIiXTsKKyAgICByZXR1cm4g
W3ZpZXdEZXNjcmlwdGlvbiBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzp3ZWJLaXREZXRhaWxzXTsK
K30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworTGF5ZXJPclZpZXcgKlJlbW90ZUxh
eWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyKGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
OjpMYXllckNyZWF0aW9uUHJvcGVydGllcyYgcHJvcGVydGllcywgY29uc3QgUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyogbGF5ZXJQcm9wZXJ0aWVzKQoreworICAg
IFJldGFpblB0cjxMYXllck9yVmlldz4mIHZpZXcgPSBtX2xheWVycy5hZGQocHJvcGVydGllcy5s
YXllcklELCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisKKyAgICBBU1NFUlQoIXZpZXcpOwor
CisgICAgc3dpdGNoIChwcm9wZXJ0aWVzLnR5cGUpIHsKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlTGF5ZXI6CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVdl
YkxheWVyOgorICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVSb290TGF5ZXI6Cisg
ICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVNpbXBsZUxheWVyOgorICAgIGNhc2Ug
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdMYXllcjoKKyAgICBjYXNlIFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlUGFnZVRpbGVkQmFja2luZ0xheWVyOgorICAgIGNhc2Ug
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXI6CisgICAgICAg
IHZpZXcgPSBhZG9wdE5TKFtbV0tDb21wb3NpdGluZ1ZpZXcgYWxsb2NdIGluaXRdKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUJhY2tkcm9wTGF5
ZXI6CisgICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tTaW1wbGVCYWNrZHJvcFZpZXcgYWxsb2Nd
IGluaXRdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZUxpZ2h0U3lzdGVtQmFja2Ryb3BMYXllcjoKKyAgICAgICAgdmlldyA9IGFkb3B0TlMoW1tX
S0JhY2tkcm9wVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RaZXJvIHByaXZhdGVTdHls
ZTpfVUlCYWNrZHJvcFZpZXdTdHlsZV9MaWdodF0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlRGFya1N5c3RlbUJhY2tkcm9wTGF5ZXI6CisgICAg
ICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tCYWNrZHJvcFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
Q0dSZWN0WmVybyBwcml2YXRlU3R5bGU6X1VJQmFja2Ryb3BWaWV3U3R5bGVfRGFya10pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVHJhbnNmb3Jt
TGF5ZXI6CisgICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tUcmFuc2Zvcm1WaWV3IGFsbG9jXSBp
bml0XSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5
cGVDdXN0b206CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUFWUGxheWVyTGF5
ZXI6CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUNvbnRlbnRzUHJvdmlkZWRM
YXllcjoKKyAgICAgICAgaWYgKCFtX2lzRGVidWdMYXllclRyZWVIb3N0KSB7CisgICAgICAgICAg
ICB2aWV3ID0gYWRvcHROUyhbW1dLUmVtb3RlVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RaZXJvIGNvbnRleHRJRDpwcm9wZXJ0aWVzLmhvc3RpbmdDb250ZXh0SURdKTsKKyAgICAgICAg
ICAgIGlmIChwcm9wZXJ0aWVzLnR5cGUgPT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVBVlBs
YXllckxheWVyKSB7CisgICAgICAgICAgICAgICAgLy8gSW52ZXJ0IHRoZSBzY2FsZSB0cmFuc2Zv
cm0gYWRkZWQgaW4gdGhlIFdlYlByb2Nlc3MgdG8gZml4IDxyZGFyOi8vcHJvYmxlbS8xODMxNjU0
Mj4uCisgICAgICAgICAgICAgICAgZmxvYXQgaW52ZXJzZVNjYWxlID0gMSAvIHByb3BlcnRpZXMu
aG9zdGluZ0RldmljZVNjYWxlRmFjdG9yOworICAgICAgICAgICAgICAgIFtbdmlldyBsYXllcl0g
c2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUoaW52ZXJzZVNjYWxlLCBpbnZlcnNl
U2NhbGUsIDEpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB2
aWV3ID0gYWRvcHROUyhbW1dLQ29tcG9zaXRpbmdWaWV3IGFsbG9jXSBpbml0XSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVTaGFwZUxheWVyOgor
ICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLU2hhcGVWaWV3IGFsbG9jXSBpbml0XSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVTY3JvbGxpbmdM
YXllcjoKKyAgICAgICAgaWYgKCFtX2lzRGVidWdMYXllclRyZWVIb3N0KSB7CisgICAgICAgICAg
ICBhdXRvIHNjcm9sbFZpZXcgPSBhZG9wdE5TKFtbVUlTY3JvbGxWaWV3IGFsbG9jXSBpbml0XSk7
CisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwCisgICAgICAg
ICAgICBbc2Nyb2xsVmlldyBzZXRDb250ZW50SW5zZXRBZGp1c3RtZW50QmVoYXZpb3I6VUlTY3Jv
bGxWaWV3Q29udGVudEluc2V0QWRqdXN0bWVudE5ldmVyXTsKKyNlbmRpZgorICAgICAgICAgICAg
dmlldyA9IHNjcm9sbFZpZXc7CisgICAgICAgIH0gZWxzZSAvLyBUaGUgZGVidWcgaW5kaWNhdG9y
IHBhcmVudHMgdmlld3MgdW5kZXIgbGF5ZXJzLCB3aGljaCBjYW4gY2F1c2UgY3Jhc2hlcyB3aXRo
IFVJU2Nyb2xsVmlldy4KKyAgICAgICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9j
XSBpbml0XSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHNldExheWVySUQoW3ZpZXcgbGF5ZXJdLCBwcm9w
ZXJ0aWVzLmxheWVySUQpOworCisgICAgcmV0dXJuIHZpZXcuZ2V0KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvclByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5
ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjI4ZDM5NTkzNDU0ZTE4NWZiNjZmZTVkZjdkYWI4YjNhMjg2MjA0ZWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KQEAgLTAsMCArMSwyMjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JQcm94eS5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCisKKyNpbXBvcnQgIkxheWVyUmVwcmVzZW50YXRpb24uaCIKKyNpbXBvcnQg
IlJlbW90ZUxheWVyVHJlZUhvc3QuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9y
dCA8VUlLaXQvVUlWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlRnJhbWVT
Y3JvbGxpbmdOb2RlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlVHJlZS5oPgor
CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyNpbXBvcnQgPFdlYkNvcmUvQXhpc1Njcm9s
bFNuYXBPZmZzZXRzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5o
PgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxUeXBlcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgTGF5ZXJSZXByZXNlbnRh
dGlvbiBsYXllclJlcHJlc2VudGF0aW9uRnJvbUxheWVyT3JWaWV3KExheWVyT3JWaWV3ICpsYXll
ck9yVmlldykKK3sKKyAgICByZXR1cm4gTGF5ZXJSZXByZXNlbnRhdGlvbihsYXllck9yVmlldy5s
YXllcik7Cit9CisKK3ZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y29ubmVj
dFN0YXRlTm9kZUxheWVycyhTY3JvbGxpbmdTdGF0ZVRyZWUmIHN0YXRlVHJlZSwgY29uc3QgUmVt
b3RlTGF5ZXJUcmVlSG9zdCYgbGF5ZXJUcmVlSG9zdCkKK3sKKyAgICBmb3IgKGF1dG8mIGN1cnJO
b2RlIDogc3RhdGVUcmVlLm5vZGVNYXAoKS52YWx1ZXMoKSkgeworICAgICAgICBzd2l0Y2ggKGN1
cnJOb2RlLT5ub2RlVHlwZSgpKSB7CisgICAgICAgIGNhc2UgT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
OiB7CisgICAgICAgICAgICBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZSYgc2Ny
b2xsaW5nU3RhdGVOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGlu
Z05vZGU+KCpjdXJyTm9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzY3JvbGxp
bmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xs
TGF5ZXIpKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5zZXRMYXllcihsYXll
clJlcHJlc2VudGF0aW9uRnJvbUxheWVyT3JWaWV3KGxheWVyVHJlZUhvc3QuZ2V0TGF5ZXIoc2Ny
b2xsaW5nU3RhdGVOb2RlLmxheWVyKCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsZWRDb250ZW50c0xheWVyKSkKKyAgICAgICAgICAgICAgICBzY3Jv
bGxpbmdTdGF0ZU5vZGUuc2V0U2Nyb2xsZWRDb250ZW50c0xheWVyKGxheWVyUmVwcmVzZW50YXRp
b25Gcm9tTGF5ZXJPclZpZXcobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdTdGF0ZU5v
ZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfTsKKyAgICAgICAgY2FzZSBGcmFtZVNjcm9sbGluZ05vZGU6IHsKKyAgICAgICAgICAgIFNj
cm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3du
Y2FzdDxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZT4oKmN1cnJOb2RlKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpCisgICAgICAgICAgICAgICAg
c2Nyb2xsaW5nU3RhdGVOb2RlLnNldExheWVyKGxheWVyUmVwcmVzZW50YXRpb25Gcm9tTGF5ZXJP
clZpZXcobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKSkp
KTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkNvdW50ZXJTY3JvbGxpbmdMYXll
cikpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNldENvdW50ZXJTY3JvbGxp
bmdMYXllcihsYXllclJlcHJlc2VudGF0aW9uRnJvbUxheWVyT3JWaWV3KGxheWVyVHJlZUhvc3Qu
Z2V0TGF5ZXIoc2Nyb2xsaW5nU3RhdGVOb2RlLmNvdW50ZXJTY3JvbGxpbmdMYXllcigpKSkpOwor
CisgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIG5ldmVyIGhhdmUgaGVhZGVyIGFuZCBm
b290ZXIgbGF5ZXJzIGNvbWluZyBmcm9tIHRoZSBXZWJQcm9jZXNzLgorICAgICAgICAgICAgaWYg
KHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFt
ZVNjcm9sbGluZ05vZGU6OkhlYWRlckxheWVyKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdT
dGF0ZU5vZGUuc2V0SGVhZGVyTGF5ZXIobGF5ZXJSZXByZXNlbnRhdGlvbkZyb21MYXllck9yVmll
dyhsYXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5oZWFkZXJMYXllcigp
KSkpOworCisgICAgICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Rm9vdGVyTGF5ZXIpKQorICAg
ICAgICAgICAgICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5zZXRGb290ZXJMYXllcihsYXllclJlcHJl
c2VudGF0aW9uRnJvbUxheWVyT3JWaWV3KGxheWVyVHJlZUhvc3QuZ2V0TGF5ZXIoc2Nyb2xsaW5n
U3RhdGVOb2RlLmZvb3RlckxheWVyKCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEZpeGVkTm9kZToKKyAgICAgICAgY2FzZSBTdGlja3lOb2RlOgorICAg
ICAgICAgICAgaWYgKGN1cnJOb2RlLT5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVO
b2RlOjpTY3JvbGxMYXllcikpCisgICAgICAgICAgICAgICAgY3Vyck5vZGUtPnNldExheWVyKGxh
eWVyUmVwcmVzZW50YXRpb25Gcm9tTGF5ZXJPclZpZXcobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihj
dXJyTm9kZS0+bGF5ZXIoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorfQorCitGbG9hdFJlY3QgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y3VzdG9t
Rml4ZWRQb3NpdGlvblJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2VQcm94eS5j
b21wdXRlQ3VzdG9tRml4ZWRQb3NpdGlvblJlY3QobV93ZWJQYWdlUHJveHkudW5vYnNjdXJlZENv
bnRlbnRSZWN0KCksIG1fd2ViUGFnZVByb3h5LnVub2JzY3VyZWRDb250ZW50UmVjdFJlc3BlY3Rp
bmdJbnB1dFZpZXdCb3VuZHMoKSwgbV93ZWJQYWdlUHJveHkuY3VzdG9tRml4ZWRQb3NpdGlvblJl
Y3QoKSwKKyAgICAgICAgbV93ZWJQYWdlUHJveHkuZGlzcGxheWVkQ29udGVudFNjYWxlKCksIEZy
YW1lVmlldzo6TGF5b3V0Vmlld3BvcnRDb25zdHJhaW50OjpVbmNvbnN0cmFpbmVkLCB2aXN1YWxW
aWV3cG9ydEVuYWJsZWQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eTo6c2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRQYW5HZXN0dXJlKCkKK3sKKyAgICBtX3dl
YlBhZ2VQcm94eS5vdmVyZmxvd1Njcm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCk7Cit9CisK
K3ZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2Nyb2xsaW5nVHJlZU5vZGVX
aWxsU3RhcnRTY3JvbGwoKQoreworICAgIG1fd2ViUGFnZVByb3h5Lm92ZXJmbG93U2Nyb2xsV2ls
bFN0YXJ0U2Nyb2xsKCk7Cit9CisgICAgCit2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHk6OnNjcm9sbGluZ1RyZWVOb2RlRGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBtX3dlYlBhZ2VQ
cm94eS5vdmVyZmxvd1Njcm9sbERpZEVuZFNjcm9sbCgpOworfQorCisjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKK3ZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6YWRqdXN0
VGFyZ2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKENHU2l6ZSBtYXhTY3JvbGxPZmZzZXRzLCBD
R1BvaW50IHZlbG9jaXR5LCBDR0Zsb2F0IHRvcEluc2V0LCBDR1BvaW50KiB0YXJnZXRDb250ZW50
T2Zmc2V0KQoreworICAgIC8vIFRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCBtYXhTY3JvbGxPZmZz
ZXRzIGlzIHRvIGVuc3VyZSB0aGF0IHdlIHdvbid0IGludGVyZmVyZSB3aXRoIHJ1YmJlci1iYW5k
aW5nIHdoZW4gc2Nyb2xsaW5nIHRvIHRoZSBlZGdlIG9mIHRoZSBwYWdlLgorICAgIGlmIChzaG91
bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9y
aXpvbnRhbCkpIHsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gY2xvc2Vz
dFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsLCB0YXJnZXRDb250ZW50T2Zmc2V0LT54LCB2ZWxvY2l0eS54LCBtX2N1cnJl
bnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgpOworICAgICAgICBpZiAodGFyZ2V0Q29udGVudE9m
ZnNldC0+eCA+IDAgJiYgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA8IG1heFNjcm9sbE9mZnNldHMu
d2lkdGgpCisgICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gc3RkOjptaW48Zmxv
YXQ+KG1heFNjcm9sbE9mZnNldHMud2lkdGgsIHBvdGVudGlhbFNuYXBQb3NpdGlvbik7CisgICAg
fQorCisgICAgaWYgKHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpIHsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBv
c2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6
U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdGFyZ2V0Q29udGVudE9mZnNldC0+eSwgdmVsb2Np
dHkueSwgbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCk7CisgICAgICAgIGlmIChtX2N1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4ICE9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXgpCisg
ICAgICAgICAgICBwb3RlbnRpYWxTbmFwUG9zaXRpb24gLT0gdG9wSW5zZXQ7CisKKyAgICAgICAg
aWYgKHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPiAwICYmIHRhcmdldENvbnRlbnRPZmZzZXQtPnkg
PCBtYXhTY3JvbGxPZmZzZXRzLmhlaWdodCkKKyAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZz
ZXQtPnkgPSBzdGQ6Om1pbjxmbG9hdD4obWF4U2Nyb2xsT2Zmc2V0cy5oZWlnaHQsIHBvdGVudGlh
bFNuYXBQb3NpdGlvbik7CisgICAgfQorfQorCitib29sIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHk6OnNob3VsZFNldFNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsKSB8fCBzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFNj
cm9sbEV2ZW50QXhpczo6VmVydGljYWwpOworfQorCitib29sIFJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHk6OnNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoU2Nyb2xsRXZlbnRB
eGlzIGF4aXMpIGNvbnN0Cit7CisgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHJvb3QgPSBtX3Njcm9s
bGluZ1RyZWUtPnJvb3ROb2RlKCk7CisgICAgaWYgKHJvb3QgJiYgcm9vdC0+aXNGcmFtZVNjcm9s
bGluZ05vZGUoKSkgeworICAgICAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKiBy
b290RnJhbWUgPSBzdGF0aWNfY2FzdDxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKj4o
cm9vdCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzID0gYXhpcyA9
PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyByb290RnJhbWUtPmhvcml6b250YWxTbmFw
T2Zmc2V0cygpIDogcm9vdEZyYW1lLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7CisgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRJbmRleCA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
ID8gbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4IDogbV9jdXJyZW50VmVydGljYWxT
bmFwUG9pbnRJbmRleDsKKyAgICAgICAgcmV0dXJuIHNuYXBPZmZzZXRzLnNpemUoKSAmJiAoY3Vy
cmVudEluZGV4IDwgc25hcE9mZnNldHMuc2l6ZSgpIHx8IGN1cnJlbnRJbmRleCA9PSBpbnZhbGlk
U25hcE9mZnNldEluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBS
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9zZXN0U25hcE9mZnNldEZvck1haW5G
cmFtZVNjcm9sbGluZyhTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRp
b24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgY3VycmVudEluZGV4KSBjb25zdAoreworICAg
IFNjcm9sbGluZ1RyZWVOb2RlKiByb290ID0gbV9zY3JvbGxpbmdUcmVlLT5yb290Tm9kZSgpOwor
ICAgIEFTU0VSVChyb290ICYmIHJvb3QtPmlzRnJhbWVTY3JvbGxpbmdOb2RlKCkpOworICAgIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUqIHJvb3RGcmFtZSA9IHN0YXRpY19jYXN0PFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUqPihyb290KTsKKyAgICBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiBzbmFwT2Zmc2V0cyA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFs
ID8gcm9vdEZyYW1lLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKSA6IHJvb3RGcmFtZS0+dmVydGlj
YWxTbmFwT2Zmc2V0cygpOworICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxmbG9h
dD4+JiBzbmFwT2Zmc2V0UmFuZ2VzID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwgPyByb290RnJhbWUtPmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKCkgOiByb290RnJhbWUt
PnZlcnRpY2FsU25hcE9mZnNldFJhbmdlcygpOworCisgICAgZmxvYXQgc2NhbGVkU2Nyb2xsRGVz
dGluYXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbiAvIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENv
bnRlbnRTY2FsZSgpOworICAgIGZsb2F0IHJhd0Nsb3Nlc3RTbmFwT2Zmc2V0ID0gY2xvc2VzdFNu
YXBPZmZzZXQoc25hcE9mZnNldHMsIHNuYXBPZmZzZXRSYW5nZXMsIHNjYWxlZFNjcm9sbERlc3Rp
bmF0aW9uLCB2ZWxvY2l0eSwgY3VycmVudEluZGV4KTsKKyAgICByZXR1cm4gcmF3Q2xvc2VzdFNu
YXBPZmZzZXQgKiBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRDb250ZW50U2NhbGUoKTsKK30KKwor
Ym9vbCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpoYXNBY3RpdmVTbmFwUG9pbnQo
KSBjb25zdAoreworICAgIFNjcm9sbGluZ1RyZWVOb2RlKiByb290ID0gbV9zY3JvbGxpbmdUcmVl
LT5yb290Tm9kZSgpOworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFpczxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlPihyb290KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSYg
cm9vdEZyYW1lID0gZG93bmNhc3Q8U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZT4oKnJv
b3QpOworICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhvcml6b250YWwgPSByb290RnJhbWUuaG9y
aXpvbnRhbFNuYXBPZmZzZXRzKCk7CisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmVydGljYWwg
PSByb290RnJhbWUudmVydGljYWxTbmFwT2Zmc2V0cygpOworCisgICAgaWYgKGhvcml6b250YWwu
aXNFbXB0eSgpICYmIHZlcnRpY2FsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCghaG9yaXpvbnRhbC5pc0VtcHR5KCkgJiYgbV9jdXJyZW50SG9yaXpvbnRhbFNu
YXBQb2ludEluZGV4ID49IGhvcml6b250YWwuc2l6ZSgpKQorICAgICAgICB8fCAoIXZlcnRpY2Fs
LmlzRW1wdHkoKSAmJiBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4ID49IHZlcnRpY2Fs
LnNpemUoKSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKyAgICAKK0NHUG9pbnQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eTo6bmVhcmVzdEFjdGl2ZUNvbnRlbnRJbnNldEFkanVzdGVkU25hcFBvaW50KENHRmxvYXQgdG9w
SW5zZXQsIGNvbnN0IENHUG9pbnQmIGN1cnJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBDR1BvaW50
IGFjdGl2ZVBvaW50ID0gY3VycmVudFBvaW50OworCisgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHJv
b3QgPSBtX3Njcm9sbGluZ1RyZWUtPnJvb3ROb2RlKCk7CisgICAgQVNTRVJUKHJvb3QgJiYgaXM8
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZT4ocm9vdCkpOworICAgIFNjcm9sbGluZ1Ry
ZWVGcmFtZVNjcm9sbGluZ05vZGUmIHJvb3RGcmFtZSA9IGRvd25jYXN0PFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGU+KCpyb290KTsKKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBob3Jp
em9udGFsID0gcm9vdEZyYW1lLmhvcml6b250YWxTbmFwT2Zmc2V0cygpOworICAgIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIHZlcnRpY2FsID0gcm9vdEZyYW1lLnZlcnRpY2FsU25hcE9mZnNldHMoKTsK
KworICAgIC8vIFRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCBtYXhTY3JvbGxPZmZzZXRzIGlzIHRv
IGVuc3VyZSB0aGF0IHdlIHdvbid0IGludGVyZmVyZSB3aXRoIHJ1YmJlci1iYW5kaW5nIHdoZW4g
c2Nyb2xsaW5nIHRvIHRoZSBlZGdlIG9mIHRoZSBwYWdlLgorICAgIGlmICghaG9yaXpvbnRhbC5p
c0VtcHR5KCkgJiYgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4IDwgaG9yaXpvbnRh
bC5zaXplKCkpCisgICAgICAgIGFjdGl2ZVBvaW50LnggPSBob3Jpem9udGFsW21fY3VycmVudEhv
cml6b250YWxTbmFwUG9pbnRJbmRleF0gKiBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRDb250ZW50
U2NhbGUoKTsKKworICAgIGlmICghdmVydGljYWwuaXNFbXB0eSgpICYmIG1fY3VycmVudFZlcnRp
Y2FsU25hcFBvaW50SW5kZXggPCB2ZXJ0aWNhbC5zaXplKCkpIHsKKyAgICAgICAgZmxvYXQgcG90
ZW50aWFsU25hcFBvc2l0aW9uID0gdmVydGljYWxbbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJ
bmRleF0gKiBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRDb250ZW50U2NhbGUoKTsKKyAgICAgICAg
cG90ZW50aWFsU25hcFBvc2l0aW9uIC09IHRvcEluc2V0OworICAgICAgICBhY3RpdmVQb2ludC55
ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOworICAgIH0KKworICAgIHJldHVybiBhY3RpdmVQb2lu
dDsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisKKyNlbmRpZiAvLyBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjA3OWUwMDc3YjAwODQxZGQ1ZDA3N2IyZTEzNzdiMDZlYWExOGM3ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJl
ZS9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oCkBAIC0wLDAgKzEs
ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1NfaAorI2RlZmluZSBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
X2gKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKElPUykKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaD4KKworT0JKQ19DTEFTUyBDQUxh
eWVyOworT0JKQ19DTEFTUyBXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
UyA6IHB1YmxpYyBXZWJDb3JlOjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05v
ZGVJT1M+IGNyZWF0ZShXZWJDb3JlOjpTY3JvbGxpbmdUcmVlJiwgV2ViQ29yZTo6U2Nyb2xsaW5n
Tm9kZUlEKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TKCk7CisKKyAgICB2b2lkIG92ZXJmbG93U2Nyb2xsV2lsbFN0YXJ0KCk7CisgICAgdm9pZCBv
dmVyZmxvd1Njcm9sbERpZEVuZCgpOworICAgIHZvaWQgb3ZlcmZsb3dTY3JvbGxWaWV3V2lsbFN0
YXJ0UGFuR2VzdHVyZSgpOworICAgIHZvaWQgc2Nyb2xsVmlld0RpZFNjcm9sbChjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiwgYm9vbCBpblVzZXJJbnRlcmFjdGlvbik7CisgICAgdm9pZCBjdXJy
ZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZSh1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25l
ZCB2ZXJ0aWNhbCk7CisKKyAgICBDQUxheWVyICpzY3JvbGxMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsTGF5ZXIuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWUmLCBXZWJDb3JlOjpT
Y3JvbGxpbmdOb2RlSUQpOworCisgICAgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNv
bnN0IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOworICAgIHZvaWQgY29t
bWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZSYp
IG92ZXJyaWRlOworICAgIAorICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24o
KSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBsYXlvdXRW
aWV3cG9ydCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyVmlld3BvcnRD
aGFuZ2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgZG91Ymxl
IHNjYWxlKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyRGVsZWdhdGVk
U2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBXZWJD
b3JlOjpTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgY3VtdWxh
dGl2ZURlbHRhKSBvdmVycmlkZTsKKworICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVudChjb25zdCBX
ZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZSB7IH0KKworICAgIHZvaWQgdXBk
YXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAg
ICAKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKKyAgICBSZXRhaW5QdHI8
Q0FMYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7CisKKyAgICBSZXRhaW5QdHI8V0tPdmVy
Zmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZT4gbV9zY3JvbGxWaWV3RGVsZWdhdGU7CisgICAgYm9vbCBt
X3VwZGF0aW5nRnJvbVN0YXRlTm9kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oSU9TKQorCisjZW5k
aWYgLy8gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPU19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Mu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWMxY2NlNGYyMWJhODhmZGEwYzA2MjY1ZGUzYTU1MGYwZjlhNTNhNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJl
ZS9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQpAQCAtMCwwICsx
LDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiU2Nyb2xs
aW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oIgorCisjaWYgUExBVEZPUk0oSU9TKQor
I2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6
Q29yZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlQYW5HZXN0dXJlUmVjb2duaXplci5oPgorI2ltcG9y
dCA8VUlLaXQvVUlTY3JvbGxWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRl
T3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWUu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oPgor
I2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9TZXRGb3JT
Y29wZS5oPgorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyNpbXBvcnQgPFdlYkNvcmUv
QXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5oPgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitAaW50ZXJm
YWNlIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgOiBOU09iamVjdCA8VUlTY3JvbGxWaWV3
RGVsZWdhdGU+IHsKKyAgICBXZWJLaXQ6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05v
ZGVJT1MqIF9zY3JvbGxpbmdUcmVlTm9kZTsKK30KKworQHByb3BlcnR5IChub25hdG9taWMsIGdl
dHRlcj1faXNJblVzZXJJbnRlcmFjdGlvbikgQk9PTCBpblVzZXJJbnRlcmFjdGlvbjsKKworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsaW5nVHJlZU5vZGU6KFdlYktpdDo6U2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUyopbm9kZTsKKworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhTY3JvbGxpbmdUcmVlTm9kZTooV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TKilub2RlCit7CisgICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlID0gbm9kZTsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKXNjcm9sbFZpZXdEaWRTY3JvbGw6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcK
K3sKKyAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmll
dy5jb250ZW50T2Zmc2V0LCBfaW5Vc2VySW50ZXJhY3Rpb24pOworfQorCistICh2b2lkKXNjcm9s
bFZpZXdXaWxsQmVnaW5EcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldworeworICAg
IF9pblVzZXJJbnRlcmFjdGlvbiA9IFlFUzsKKworICAgIGlmIChzY3JvbGxWaWV3LnBhbkdlc3R1
cmVSZWNvZ25pemVyLnN0YXRlID09IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2FuKQorICAg
ICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPm92ZXJmbG93U2Nyb2xsVmlld1dpbGxTdGFydFBhbkdl
c3R1cmUoKTsKKyAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPm92ZXJmbG93U2Nyb2xsV2lsbFN0YXJ0
KCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorLSAodm9pZClzY3JvbGxWaWV3
V2lsbEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpdGhWZWxvY2l0eToo
Q0dQb2ludCl2ZWxvY2l0eSB0YXJnZXRDb250ZW50T2Zmc2V0Oihpbm91dCBDR1BvaW50ICopdGFy
Z2V0Q29udGVudE9mZnNldAoreworICAgIENHRmxvYXQgaG9yaXpvbnRhbFRhcmdldCA9IHRhcmdl
dENvbnRlbnRPZmZzZXQtPng7CisgICAgQ0dGbG9hdCB2ZXJ0aWNhbFRhcmdldCA9IHRhcmdldENv
bnRlbnRPZmZzZXQtPnk7CisKKyAgICB1bnNpZ25lZCBvcmlnaW5hbEhvcml6b250YWxTbmFwUG9z
aXRpb24gPSBfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5k
ZXgoKTsKKyAgICB1bnNpZ25lZCBvcmlnaW5hbFZlcnRpY2FsU25hcFBvc2l0aW9uID0gX3Njcm9s
bGluZ1RyZWVOb2RlLT5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpOworCisgICAgaWYg
KCFfc2Nyb2xsaW5nVHJlZU5vZGUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkg
eworICAgICAgICB1bnNpZ25lZCBpbmRleDsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBv
c2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXQoX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9udGFs
U25hcE9mZnNldHMoKSwgX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9udGFsU25hcE9mZnNldFJh
bmdlcygpLCBob3Jpem9udGFsVGFyZ2V0LCB2ZWxvY2l0eS54LCBpbmRleCk7CisgICAgICAgIF9z
Y3JvbGxpbmdUcmVlTm9kZS0+c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChpbmRl
eCk7CisgICAgICAgIGlmIChob3Jpem9udGFsVGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRhbFRhcmdl
dCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLndpZHRoKQorICAgICAgICAgICAgdGFyZ2V0Q29u
dGVudE9mZnNldC0+eCA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAo
IV9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkgewor
ICAgICAgICB1bnNpZ25lZCBpbmRleDsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0
aW9uID0gY2xvc2VzdFNuYXBPZmZzZXQoX3Njcm9sbGluZ1RyZWVOb2RlLT52ZXJ0aWNhbFNuYXBP
ZmZzZXRzKCksIF9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKCks
IHZlcnRpY2FsVGFyZ2V0LCB2ZWxvY2l0eS55LCBpbmRleCk7CisgICAgICAgIF9zY3JvbGxpbmdU
cmVlTm9kZS0+c2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoaW5kZXgpOworICAgICAg
ICBpZiAodmVydGljYWxUYXJnZXQgPj0gMCAmJiB2ZXJ0aWNhbFRhcmdldCA8PSBzY3JvbGxWaWV3
LmNvbnRlbnRTaXplLmhlaWdodCkKKyAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkg
PSBwb3RlbnRpYWxTbmFwUG9zaXRpb247CisgICAgfQorCisgICAgaWYgKG9yaWdpbmFsSG9yaXpv
bnRhbFNuYXBQb3NpdGlvbiAhPSBfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRIb3Jpem9udGFs
U25hcFBvaW50SW5kZXgoKQorICAgICAgICB8fCBvcmlnaW5hbFZlcnRpY2FsU25hcFBvc2l0aW9u
ICE9IF9zY3JvbGxpbmdUcmVlTm9kZS0+Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSkg
eworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlk
Q2hhbmdlKF9zY3JvbGxpbmdUcmVlTm9kZS0+Y3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRl
eCgpLCBfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkp
OworICAgIH0KK30KKyNlbmRpZgorCistICh2b2lkKXNjcm9sbFZpZXdEaWRFbmREcmFnZ2luZzoo
VUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aWxsRGVjZWxlcmF0ZTooQk9PTCl3aWxsRGVjZWxl
cmF0ZQoreworICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24gJiYgIXdpbGxEZWNlbGVyYXRlKSB7
CisgICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POworICAgICAgICBfc2Nyb2xsaW5nVHJl
ZU5vZGUtPnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5V
c2VySW50ZXJhY3Rpb24pOworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPm92ZXJmbG93U2Ny
b2xsRGlkRW5kKCk7CisgICAgfQorfQorCistICh2b2lkKXNjcm9sbFZpZXdEaWRFbmREZWNlbGVy
YXRpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKK3sKKyAgICBpZiAoX2luVXNlckludGVy
YWN0aW9uKSB7CisgICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POworICAgICAgICBfc2Ny
b2xsaW5nVHJlZU5vZGUtPnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmlldy5jb250ZW50T2Zm
c2V0LCBfaW5Vc2VySW50ZXJhY3Rpb24pOworICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPm92
ZXJmbG93U2Nyb2xsRGlkRW5kKCk7CisgICAgfQorfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitSZWY8U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUz4gU2Nyb2xs
aW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y3JlYXRlKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWUmIHNjcm9sbGluZ1RyZWUsIFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCBub2RlSUQpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPUyhzY3JvbGxpbmdUcmVlLCBub2RlSUQpKTsKK30KKworU2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUzo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
UyhXZWJDb3JlOjpTY3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBXZWJDb3JlOjpTY3JvbGxp
bmdOb2RlSUQgbm9kZUlEKQorICAgIDogU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZShzY3JvbGxpbmdUcmVlLCBub2RlSUQpCisgICAgLCBtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZShm
YWxzZSkKK3sKK30KKworU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6flNj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MoKQoreworICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUworICAgIGlmIChVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlT
Y3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7CisgICAgICAgIEFTU0VSVChb
c2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKKyAgICAgICAg
Ly8gVGhlIHNjcm9sbFZpZXcgbWF5IGhhdmUgYmVlbiBhZG9wdGVkIGJ5IGFub3RoZXIgbm9kZSwg
c28gb25seSBjbGVhciB0aGUgZGVsZWdhdGUgaWYgaXQncyBvdXJzLgorICAgICAgICBpZiAoc2Ny
b2xsVmlldy5kZWxlZ2F0ZSA9PSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQoKSkKKyAgICAgICAg
ICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlTm9kZSYgc3RhdGVOb2RlKQoreworICAgIGlmIChzdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIpKSB7CisgICAgICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICBpZiAoVUlTY3JvbGxWaWV3ICpz
Y3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVnYXRlXSkgewor
ICAgICAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmll
dyBzZWxmXV0pOworICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9IG5pbDsKKyAgICAg
ICAgfQorICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfQorCisgICAgU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJl
bihzdGF0ZU5vZGUpOworCisgICAgY29uc3QgYXV0byYgc2Nyb2xsaW5nU3RhdGVOb2RlID0gZG93
bmNhc3Q8U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KHN0YXRlTm9kZSk7Cisg
ICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3Rh
dGVOb2RlOjpTY3JvbGxMYXllcikpCisgICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBzY3JvbGxpbmdT
dGF0ZU5vZGUubGF5ZXIoKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsZWRDb250ZW50c0xh
eWVyKSkKKyAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5v
ZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9s
bGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQoreworICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGU6OmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihzdGF0ZU5vZGUpOworCisgICAg
U2V0Rm9yU2NvcGU8Ym9vbD4gdXBkYXRpbmdDaGFuZ2UobV91cGRhdGluZ0Zyb21TdGF0ZU5vZGUs
IHRydWUpOworCisgICAgY29uc3QgYXV0byYgc2Nyb2xsaW5nU3RhdGVOb2RlID0gZG93bmNhc3Q8
U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KHN0YXRlTm9kZSk7CisKKyAgICBp
ZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlNjcm9sbExheWVyKQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUu
aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VG90YWxDb250
ZW50c1NpemUpCisgICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUpCisg
ICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgfHwgc2Nyb2xsaW5n
U3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlNjcm9sbE9yaWdpbikpIHsKKyAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisg
ICAgICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xs
TGF5ZXIoKSBkZWxlZ2F0ZV07CisgICAgICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNs
YXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKKworICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVO
b2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9s
bExheWVyKSkgeworICAgICAgICAgICAgaWYgKCFtX3Njcm9sbFZpZXdEZWxlZ2F0ZSkKKyAgICAg
ICAgICAgICAgICBtX3Njcm9sbFZpZXdEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS092ZXJmbG93U2Ny
b2xsVmlld0RlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGluZ1RyZWVOb2RlOnRoaXNdKTsK
KworICAgICAgICAgICAgc2Nyb2xsVmlldy5zY3JvbGxzVG9Ub3AgPSBOTzsKKyAgICAgICAgICAg
IHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgcmVjb21wdXRlSW5zZXRzID0gc2Nyb2xsaW5nU3RhdGVOb2Rl
Lmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29u
dGVudHNTaXplKTsKKyAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUp
KSB7CisgICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRTaXplID0gc2Nyb2xsaW5nU3RhdGVO
b2RlLnJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpOworICAgICAgICAgICAgcmVjb21wdXRlSW5zZXRz
ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc2Nyb2xsaW5nU3RhdGVOb2RlLmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBvc2l0
aW9uKQorICAgICAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikpCisgICAgICAgICAg
ICAmJiAhW21fc2Nyb2xsVmlld0RlbGVnYXRlIF9pc0luVXNlckludGVyYWN0aW9uXSkgeworICAg
ICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0ID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnNj
cm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxPcmlnaW4oKTsKKyAgICAgICAgICAgIHJlY29tcHV0ZUlu
c2V0cyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVjb21wdXRlSW5zZXRzKSB7
CisgICAgICAgICAgICBVSUVkZ2VJbnNldHMgaW5zZXRzID0gVUlFZGdlSW5zZXRzTWFrZSgwLCAw
LCAwLCAwKTsKKyAgICAgICAgICAgIC8vIFdpdGggUlRMIG9yIGJvdHRvbS10by10b3Agc2Nyb2xs
aW5nIChub24temVybyBvcmlnaW4pLCB3ZSBuZWVkIGV4dHJhIHNwYWNlIG9uIHRoZSBsZWZ0IG9y
IHRvcC4KKyAgICAgICAgICAgIGlmIChzY3JvbGxPcmlnaW4oKS54KCkpCisgICAgICAgICAgICAg
ICAgaW5zZXRzLmxlZnQgPSByZWFjaGFibGVDb250ZW50c1NpemUoKS53aWR0aCgpIC0gdG90YWxD
b250ZW50c1NpemUoKS53aWR0aCgpOworCisgICAgICAgICAgICBpZiAoc2Nyb2xsT3JpZ2luKCku
eSgpKQorICAgICAgICAgICAgICAgIGluc2V0cy50b3AgPSByZWFjaGFibGVDb250ZW50c1NpemUo
KS5oZWlnaHQoKSAtIHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCk7CisKKyAgICAgICAgICAg
IHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gaW5zZXRzOworICAgICAgICB9CisKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICAgICAvLyBGSVhNRTogSWYgb25seSBvbmUgYXhpcyBz
bmFwcyBpbiAyRCBzY3JvbGxpbmcsIHRoZSBvdGhlciBheGlzIHdpbGwgZGVjZWxlcmF0ZSBmYXN0
IGFzIHdlbGwuIElzIHRoaXMgd2hhdCB3ZSB3YW50PworICAgICAgICBpZiAoc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhv
cml6b250YWxTbmFwT2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMpKQor
ICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWNlbGVyYXRpb25SYXRlID0gaG9yaXpvbnRhbFNuYXBP
ZmZzZXRzKCkuc2l6ZSgpIHx8IHZlcnRpY2FsU25hcE9mZnNldHMoKS5zaXplKCkgPyBVSVNjcm9s
bFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCA6IFVJU2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVO
b3JtYWw7CisjZW5kaWYKKyAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIH0K
K30KKwordm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp1cGRhdGVM
YXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2Vk
Tm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgRmxvYXRTaXpl
JiBjdW11bGF0aXZlRGVsdGEpCit7CisgICAgaWYgKCFtX2NoaWxkcmVuKQorICAgICAgICByZXR1
cm47CisKKyAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBsYXN0Q29tbWl0dGVkU2Nyb2xsUG9z
aXRpb24oKSAtIHNjcm9sbFBvc2l0aW9uKCk7CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogKm1f
Y2hpbGRyZW4pCisgICAgICAgIGNoaWxkLT51cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdl
KGNoYW5nZWROb2RlLCBmaXhlZFBvc2l0aW9uUmVjdCwgY3VtdWxhdGl2ZURlbHRhICsgc2Nyb2xs
RGVsdGEpOworfQorCitGbG9hdFBvaW50IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05v
ZGVJT1M6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKKyAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICop
W3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOworICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRP
ZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcgY29u
dGVudE9mZnNldF07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCit2b2lkIFNj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnNldFNjcm9sbExheWVyUG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEZsb2F0UmVjdCYpCit7
CisgICAgW21fc2Nyb2xsTGF5ZXIgc2V0UG9zaXRpb246Q0dQb2ludE1ha2UoLXNjcm9sbFBvc2l0
aW9uLngoKSArIHNjcm9sbE9yaWdpbigpLngoKSwgLXNjcm9sbFBvc2l0aW9uLnkoKSArIHNjcm9s
bE9yaWdpbigpLnkoKSldOworCisgICAgdXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKHNjcm9s
bFBvc2l0aW9uKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TOjp1cGRhdGVMYXllcnNBZnRlckRlbGVnYXRlZFNjcm9sbChjb25zdCBGbG9hdFBvaW50JiBz
Y3JvbGxQb3NpdGlvbikKK3sKKyAgICB1cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoc2Nyb2xs
UG9zaXRpb24pOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1M6OnVwZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9sbChjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQ
b3NpdGlvbikKK3sKKyAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgIHJldHVybjsKKworICAg
IEZsb2F0UmVjdCBmaXhlZFBvc2l0aW9uUmVjdDsKKyAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlKiBmcmFtZU5vZGUgPSBlbmNsb3NpbmdGcmFtZU5vZGUoKTsKKyAgICBpZiAoZnJh
bWVOb2RlICYmIGZyYW1lTm9kZS0+cGFyZW50KCkpCisgICAgICAgIGZpeGVkUG9zaXRpb25SZWN0
ID0gZnJhbWVOb2RlLT5maXhlZFBvc2l0aW9uUmVjdCgpOworICAgIGVsc2UKKyAgICAgICAgZml4
ZWRQb3NpdGlvblJlY3QgPSBzY3JvbGxpbmdUcmVlKCkuZml4ZWRQb3NpdGlvblJlY3QoKTsKKyAg
ICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBsYXN0Q29tbWl0dGVkU2Nyb2xsUG9zaXRpb24oKSAt
IHNjcm9sbFBvc2l0aW9uOworCisgICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQor
ICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZSgqdGhpcywgZml4
ZWRQb3NpdGlvblJlY3QsIHNjcm9sbERlbHRhKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpvdmVyZmxvd1Njcm9sbFdpbGxTdGFydCgpCit7CisgICAg
c2Nyb2xsaW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0YXJ0U2Nyb2xsKCk7Cit9CisK
K3ZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6b3ZlcmZsb3dTY3Jv
bGxEaWRFbmQoKQoreworICAgIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxpbmdUcmVlTm9kZURpZEVu
ZFNjcm9sbCgpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1M6Om92ZXJmbG93U2Nyb2xsVmlld1dpbGxTdGFydFBhbkdlc3R1cmUoKQoreworICAgIHNjcm9s
bGluZ1RyZWUoKS5zY3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFBhbkdlc3R1cmUoKTsKK30KKwor
dm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpzY3JvbGxWaWV3RGlk
U2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBib29sIGluVXNlckludGVy
YWN0aW9uKQoreworICAgIGlmIChtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbFBvc2l0aW9uQ2hhbmdlZFZpYURlbGVn
YXRlZFNjcm9sbGluZyhzY3JvbGxpbmdOb2RlSUQoKSwgc2Nyb2xsUG9zaXRpb24sIGluVXNlcklu
dGVyYWN0aW9uKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TOjpjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZSh1bnNpZ25lZCBob3Jpem9udGFs
LCB1bnNpZ25lZCB2ZXJ0aWNhbCkKK3sKKyAgICBpZiAobV91cGRhdGluZ0Zyb21TdGF0ZU5vZGUp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzY3JvbGxpbmdUcmVlKCkuY3VycmVudFNuYXBQ
b2ludEluZGljZXNEaWRDaGFuZ2Uoc2Nyb2xsaW5nTm9kZUlEKCksIGhvcml6b250YWwsIHZlcnRp
Y2FsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEFT
WU5DX1NDUk9MTElORykKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1
ZDFlYjcxN2ZkOWEyNzM2YmJmYzExOGFmNDY1MGE1NzJiMGM3Y2UuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Ny
b2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIgotCi0jaWYgRU5BQkxFKEFT
WU5DX1NDUk9MTElORykKLQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAi
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgIlJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
ZXNzYWdlcy5oIgotI2luY2x1ZGUgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rp
b24uaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJv
eHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2Rl
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVUcmVlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHk6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoV2ViUGFnZVByb3h5JiB3
ZWJQYWdlUHJveHkpCi0gICAgOiBtX3dlYlBhZ2VQcm94eSh3ZWJQYWdlUHJveHkpCi0gICAgLCBt
X3Njcm9sbGluZ1RyZWUoUmVtb3RlU2Nyb2xsaW5nVHJlZTo6Y3JlYXRlKCp0aGlzKSkKLSAgICAs
IG1fcmVxdWVzdGVkU2Nyb2xsSW5mbyhudWxscHRyKQotICAgICwgbV9wcm9wYWdhdGVzTWFpbkZy
YW1lU2Nyb2xscyh0cnVlKQotewotfQotCi1SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5
Ojp+UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSgpCi17Ci19Ci0KLVNjcm9sbGluZ05v
ZGVJRCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Ojpyb290U2Nyb2xsaW5nTm9kZUlE
KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fc2Nyb2xsaW5nVHJlZS0+cm9vdE5vZGUoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9zY3JvbGxpbmdUcmVlLT5yb290Tm9kZSgpLT5z
Y3JvbGxpbmdOb2RlSUQoKTsKLX0KLQotY29uc3QgUmVtb3RlTGF5ZXJUcmVlSG9zdCogUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6bGF5ZXJUcmVlSG9zdCgpIGNvbnN0Ci17Ci0gICAg
RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBtX3dlYlBhZ2VQcm94eS5kcmF3aW5nQXJl
YSgpOwotICAgIGlmICghaXM8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eT4oZHJhd2lu
Z0FyZWEpKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5JiBy
ZW1vdGVEcmF3aW5nQXJlYSA9IGRvd25jYXN0PFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHk+KCpkcmF3aW5nQXJlYSk7Ci0gICAgcmV0dXJuICZyZW1vdGVEcmF3aW5nQXJlYS5yZW1vdGVM
YXllclRyZWVIb3N0KCk7Ci19Ci0KLXZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eTo6Y29tbWl0U2Nyb2xsaW5nVHJlZVN0YXRlKGNvbnN0IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBSZXF1ZXN0ZWRTY3JvbGxJbmZvJiByZXF1ZXN0
ZWRTY3JvbGxJbmZvKQotewotICAgIG1fcmVxdWVzdGVkU2Nyb2xsSW5mbyA9ICZyZXF1ZXN0ZWRT
Y3JvbGxJbmZvOwotCi0gICAgLy8gRklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgaWRpb20g
Zm9yIHRoaXMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gc3RhdGVU
cmVlKGNvbnN0X2Nhc3Q8UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbiY+KHRy
YW5zYWN0aW9uKS5zY3JvbGxpbmdTdGF0ZVRyZWUoKS5yZWxlYXNlKCkpOwotCi0gICAgY29uc3Qg
UmVtb3RlTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCA9IHRoaXMtPmxheWVyVHJlZUhvc3Qo
KTsKLSAgICBpZiAoIWxheWVyVHJlZUhvc3QpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25uZWN0U3RhdGVOb2RlTGF5ZXJz
KCpzdGF0ZVRyZWUsICpsYXllclRyZWVIb3N0KTsKLSAgICBtX3Njcm9sbGluZ1RyZWUtPmNvbW1p
dFRyZWVTdGF0ZShXVEZNb3ZlKHN0YXRlVHJlZSkpOwotCi0gICAgbV9yZXF1ZXN0ZWRTY3JvbGxJ
bmZvID0gbnVsbHB0cjsKLX0KLQotI2lmICFQTEFURk9STShJT1MpCi12b2lkIFJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNvbm5lY3RTdGF0ZU5vZGVMYXllcnMoU2Nyb2xsaW5nU3Rh
dGVUcmVlJiBzdGF0ZVRyZWUsIGNvbnN0IFJlbW90ZUxheWVyVHJlZUhvc3QmIGxheWVyVHJlZUhv
c3QpCi17Ci0gICAgZm9yIChhdXRvJiBjdXJyTm9kZSA6IHN0YXRlVHJlZS5ub2RlTWFwKCkudmFs
dWVzKCkpIHsKLSAgICAgICAgaWYgKGN1cnJOb2RlLT5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xs
aW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpCi0gICAgICAgICAgICBjdXJyTm9kZS0+c2V0TGF5
ZXIobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihjdXJyTm9kZS0+bGF5ZXIoKSkpOwotCi0gICAgICAg
IHN3aXRjaCAoY3Vyck5vZGUtPm5vZGVUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBGcmFtZVNjcm9s
bGluZ05vZGU6IHsKLSAgICAgICAgICAgIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2Rl
JiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xs
aW5nTm9kZT4oKmN1cnJOb2RlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQotICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0
YXRlTm9kZS5zZXRTY3JvbGxlZENvbnRlbnRzTGF5ZXIobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihz
Y3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCkpKTsKLQotICAgICAgICAg
ICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3Rh
dGVGcmFtZVNjcm9sbGluZ05vZGU6OkNvdW50ZXJTY3JvbGxpbmdMYXllcikpCi0gICAgICAgICAg
ICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNldENvdW50ZXJTY3JvbGxpbmdMYXllcihsYXllclRy
ZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5jb3VudGVyU2Nyb2xsaW5nTGF5ZXIo
KSkpOwotCi0gICAgICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6SW5zZXRDbGlwTGF5ZXIpKQot
ICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5zZXRJbnNldENsaXBMYXllcihsYXll
clRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5pbnNldENsaXBMYXllcigpKSk7
Ci0KLSAgICAgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpDb250ZW50U2hhZG93TGF5ZXIpKQot
ICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5zZXRDb250ZW50U2hhZG93TGF5ZXIo
bGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdTdGF0ZU5vZGUuY29udGVudFNoYWRvd0xh
eWVyKCkpKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBuZXZlciBoYXZlIGhl
YWRlciBhbmQgZm9vdGVyIGxheWVycyBjb21pbmcgZnJvbSB0aGUgV2ViUHJvY2Vzcy4KLSAgICAg
ICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGlu
Z1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpIZWFkZXJMYXllcikpCi0gICAgICAgICAgICAgICAg
c2Nyb2xsaW5nU3RhdGVOb2RlLnNldEhlYWRlckxheWVyKGxheWVyVHJlZUhvc3QuZ2V0TGF5ZXIo
c2Nyb2xsaW5nU3RhdGVOb2RlLmhlYWRlckxheWVyKCkpKTsKLQotICAgICAgICAgICAgaWYgKHNj
cm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNj
cm9sbGluZ05vZGU6OkZvb3RlckxheWVyKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxpbmdTdGF0
ZU5vZGUuc2V0Rm9vdGVyTGF5ZXIobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdTdGF0
ZU5vZGUuZm9vdGVyTGF5ZXIoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBPdmVyZmxvd1Njcm9sbGluZ05vZGU6IHsKLSAgICAgICAgICAgIFNjcm9sbGlu
Z1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3duY2Fz
dDxTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4oKmN1cnJOb2RlKTsKLQotICAg
ICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQotICAgICAgICAg
ICAgICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5zZXRTY3JvbGxlZENvbnRlbnRzTGF5ZXIobGF5ZXJU
cmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVy
KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRml4ZWRO
b2RlOgotICAgICAgICBjYXNlIFN0aWNreU5vZGU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLX0KLSNlbmRpZgotCi1ib29sIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkK
LXsKLSAgICBTY3JvbGxpbmdUcmVlOjpFdmVudFJlc3VsdCByZXN1bHQgPSBtX3Njcm9sbGluZ1Ry
ZWUtPnRyeVRvSGFuZGxlV2hlZWxFdmVudChldmVudCk7Ci0gICAgcmV0dXJuIHJlc3VsdCA9PSBT
Y3JvbGxpbmdUcmVlOjpEaWRIYW5kbGVFdmVudDsgLy8gRklYTUU6IGhhbmRsZSBvdGhlciB2YWx1
ZXMuCi19Ci0KLVRyYWNraW5nVHlwZSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Ojpl
dmVudFRyYWNraW5nVHlwZUZvclBvaW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBJ
bnRQb2ludCBwKSBjb25zdAotewotICAgIHJldHVybiBtX3Njcm9sbGluZ1RyZWUtPmV2ZW50VHJh
Y2tpbmdUeXBlRm9yUG9pbnQoZXZlbnROYW1lLCBwKTsKLX0KLQotdm9pZCBSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclByb3h5Ojp2aWV3cG9ydENoYW5nZWRWaWFEZWxlZ2F0ZWRTY3JvbGxpbmco
U2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVj
dCwgZG91YmxlIHNjYWxlKQotewotICAgIG1fc2Nyb2xsaW5nVHJlZS0+dmlld3BvcnRDaGFuZ2Vk
VmlhRGVsZWdhdGVkU2Nyb2xsaW5nKG5vZGVJRCwgZml4ZWRQb3NpdGlvblJlY3QsIHNjYWxlKTsK
LX0KLQotdm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjdXJyZW50U25hcFBv
aW50SW5kaWNlc0RpZENoYW5nZShXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCB1bnNp
Z25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCkKLXsKLSAgICBtX3dlYlBhZ2VQcm94
eS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcjo6Q3VycmVudFNuYXBQ
b2ludEluZGljZXNDaGFuZ2VkRm9yTm9kZShub2RlSUQsIGhvcml6b250YWwsIHZlcnRpY2FsKSk7
Ci19Ci0KLS8vIFRoaXMgY29tZXMgZnJvbSB0aGUgc2Nyb2xsaW5nIHRyZWUuCi12b2lkIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKFNj
cm9sbGluZ05vZGVJRCBzY3JvbGxlZE5vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYgbmV3U2Nyb2xs
UG9zaXRpb24sIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludD4mIGxheW91dFZpZXdwb3J0
T3JpZ2luLCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uIHNjcm9sbGluZ0xheWVyUG9zaXRp
b25BY3Rpb24pCi17Ci0gICAgLy8gU2Nyb2xsIHVwZGF0ZXMgZm9yIHRoZSBtYWluIGZyYW1lIGFy
ZSBzZW50IHZpYSBXZWJQYWdlUHJveHk6OnVwZGF0ZVZpc2libGVDb250ZW50UmVjdHMoKQotICAg
IC8vIHNvIGRvbid0IHNlbmQgdGhlbSBoZXJlLgotICAgIGlmICghbV9wcm9wYWdhdGVzTWFpbkZy
YW1lU2Nyb2xscyAmJiBzY3JvbGxlZE5vZGVJRCA9PSByb290U2Nyb2xsaW5nTm9kZUlEKCkpCi0g
ICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBtX3dlYlBhZ2VQcm94eS5v
dmVyZmxvd1Njcm9sbFZpZXdEaWRTY3JvbGwoKTsKLSNlbmRpZgotICAgIG1fd2ViUGFnZVByb3h5
LnNlbmQoTWVzc2FnZXM6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpTY3JvbGxQb3NpdGlv
bkNoYW5nZWRGb3JOb2RlKHNjcm9sbGVkTm9kZUlELCBuZXdTY3JvbGxQb3NpdGlvbiwgc2Nyb2xs
aW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiA9PSBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpT
eW5jKSk7Ci19Ci0KLXZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2Nyb2xs
aW5nVHJlZU5vZGVSZXF1ZXN0c1Njcm9sbChTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsZWROb2RlSUQs
IGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBib29sIHJlcHJlc2VudHNQcm9ncmFt
bWF0aWNTY3JvbGwpCi17Ci0gICAgaWYgKHNjcm9sbGVkTm9kZUlEID09IHJvb3RTY3JvbGxpbmdO
b2RlSUQoKSAmJiBtX3JlcXVlc3RlZFNjcm9sbEluZm8pIHsKLSAgICAgICAgbV9yZXF1ZXN0ZWRT
Y3JvbGxJbmZvLT5yZXF1ZXN0c1Njcm9sbFBvc2l0aW9uVXBkYXRlID0gdHJ1ZTsKLSAgICAgICAg
bV9yZXF1ZXN0ZWRTY3JvbGxJbmZvLT5yZXF1ZXN0SXNQcm9ncmFtbWF0aWNTY3JvbGwgPSByZXBy
ZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsOwotICAgICAgICBtX3JlcXVlc3RlZFNjcm9sbEluZm8t
PnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247Ci0gICAgfQotfQotCi1T
dHJpbmcgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2Nyb2xsaW5nVHJlZUFzVGV4
dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc2Nyb2xsaW5nVHJlZSkKLSAgICAgICAgcmV0dXJuIG1f
c2Nyb2xsaW5nVHJlZS0+c2Nyb2xsaW5nVHJlZUFzVGV4dCgpOwotICAgIAotICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHku
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg3YmIyYzJlODRjODQ5YjA1ZmUxM2Jm
MDk5NmVjMGUzNWU3ZGRiYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eV9oCi0j
ZGVmaW5lIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlfaAotCi0jaWYgRU5BQkxFKEFT
WU5DX1NDUk9MTElORykKLQotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUg
IlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiUmVtb3RlU2Nyb2xsaW5n
VHJlZS5oIgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIFBs
YXRmb3JtV2hlZWxFdmVudDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJlbW90
ZUxheWVyVHJlZUhvc3Q7Ci1jbGFzcyBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0
aW9uOwotY2xhc3MgUmVtb3RlU2Nyb2xsaW5nVHJlZTsKLWNsYXNzIFdlYlBhZ2VQcm94eTsKLQot
Y2xhc3MgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSk7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eShXZWJQYWdlUHJveHkmKTsK
LSAgICB2aXJ0dWFsIH5SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCk7Ci0KLSAgICBi
b29sIHZpc3VhbFZpZXdwb3J0RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nVHJl
ZSAmJiBtX3Njcm9sbGluZ1RyZWUtPnZpc3VhbFZpZXdwb3J0RW5hYmxlZCgpOyB9Ci0KLSAgICAv
LyBJbmZvcm0gdGhlIHdlYiBwcm9jZXNzIHRoYXQgdGhlIHNjcm9sbCBwb3NpdGlvbiBjaGFuZ2Vk
IChjYWxsZWQgZnJvbSB0aGUgc2Nyb2xsaW5nIHRyZWUpCi0gICAgdm9pZCBzY3JvbGxpbmdUcmVl
Tm9kZURpZFNjcm9sbChXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIG5ld1Njcm9sbFBvc2l0aW9uLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OkZsb2F0UG9pbnQ+JiBsYXlvdXRWaWV3cG9ydE9yaWdpbiwgV2ViQ29yZTo6U2Nyb2xsaW5nTGF5
ZXJQb3NpdGlvbkFjdGlvbik7Ci0gICAgdm9pZCBzY3JvbGxpbmdUcmVlTm9kZVJlcXVlc3RzU2Ny
b2xsKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYg
c2Nyb2xsUG9zaXRpb24sIGJvb2wgcmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCk7Ci0KLSAg
ICBXZWJDb3JlOjpUcmFja2luZ1R5cGUgZXZlbnRUcmFja2luZ1R5cGVGb3JQb2ludChjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50TmFtZSwgV2ViQ29yZTo6SW50UG9pbnQpIGNvbnN0OwotCi0gICAg
Ly8gQ2FsbGVkIGV4dGVybmFsbHkgd2hlbiBuYXRpdmUgdmlld3MgbW92ZSBhcm91bmQuCi0gICAg
dm9pZCB2aWV3cG9ydENoYW5nZWRWaWFEZWxlZ2F0ZWRTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xs
aW5nTm9kZUlELCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBk
b3VibGUgc2NhbGUpOwotCi0gICAgdm9pZCBjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5n
ZShXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVk
IHZlcnRpY2FsKTsKLQotICAgIC8vIEZJWE1FOiBleHBvc2UgdGhlIHRyZWUgYW5kIHBhc3MgdGhp
cyB0byB0aGF0PwotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJDb3JlOjpQbGF0
Zm9ybVdoZWVsRXZlbnQmKTsKLSAgICAKLSAgICBXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQgcm9v
dFNjcm9sbGluZ05vZGVJRCgpIGNvbnN0OwotCi0gICAgY29uc3QgUmVtb3RlTGF5ZXJUcmVlSG9z
dCogbGF5ZXJUcmVlSG9zdCgpIGNvbnN0OwotCi0gICAgc3RydWN0IFJlcXVlc3RlZFNjcm9sbElu
Zm8gewotICAgICAgICBib29sIHJlcXVlc3RzU2Nyb2xsUG9zaXRpb25VcGRhdGUgeyB9OwotICAg
ICAgICBib29sIHJlcXVlc3RJc1Byb2dyYW1tYXRpY1Njcm9sbCB7IH07Ci0gICAgICAgIFdlYkNv
cmU6OkZsb2F0UG9pbnQgcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb247Ci0gICAgfTsKLSAgICB2b2lk
IGNvbW1pdFNjcm9sbGluZ1RyZWVTdGF0ZShjb25zdCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clRyYW5zYWN0aW9uJiwgUmVxdWVzdGVkU2Nyb2xsSW5mbyYpOwotCi0gICAgdm9pZCBzZXRQcm9w
YWdhdGVzTWFpbkZyYW1lU2Nyb2xscyhib29sIHByb3BhZ2F0ZXNNYWluRnJhbWVTY3JvbGxzKSB7
IG1fcHJvcGFnYXRlc01haW5GcmFtZVNjcm9sbHMgPSBwcm9wYWdhdGVzTWFpbkZyYW1lU2Nyb2xs
czsgfQotICAgIGJvb2wgcHJvcGFnYXRlc01haW5GcmFtZVNjcm9sbHMoKSBjb25zdCB7IHJldHVy
biBtX3Byb3BhZ2F0ZXNNYWluRnJhbWVTY3JvbGxzOyB9Ci0gICAgYm9vbCBoYXNGaXhlZE9yU3Rp
Y2t5KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdUcmVlLT5oYXNGaXhlZE9yU3RpY2t5KCk7
IH0KLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY3VzdG9tRml4
ZWRQb3NpdGlvblJlY3QoKSBjb25zdDsKLSAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0
YXJ0UGFuR2VzdHVyZSgpOwotICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRTY3Jv
bGwoKTsKLSAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlRGlkRW5kU2Nyb2xsKCk7Ci0jaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB2b2lkIGFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRG
b3JTbmFwcGluZyhDR1NpemUgbWF4U2Nyb2xsRGltZW5zaW9ucywgQ0dQb2ludCB2ZWxvY2l0eSwg
Q0dGbG9hdCB0b3BJbnNldCwgQ0dQb2ludCogdGFyZ2V0Q29udGVudE9mZnNldCk7Ci0gICAgYm9v
bCBoYXNBY3RpdmVTbmFwUG9pbnQoKSBjb25zdDsKLSAgICBDR1BvaW50IG5lYXJlc3RBY3RpdmVD
b250ZW50SW5zZXRBZGp1c3RlZFNuYXBQb2ludChDR0Zsb2F0IHRvcEluc2V0LCBjb25zdCBDR1Bv
aW50JikgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRTZXRTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0
ZUZhc3QoKSBjb25zdDsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBTdHJpbmcgc2Nyb2xsaW5nVHJl
ZUFzVGV4dCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZvaWQgY29ubmVjdFN0YXRlTm9kZUxh
eWVycyhXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWUmLCBjb25zdCBSZW1vdGVMYXllclRyZWVI
b3N0Jik7Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBib29sIHNob3VsZFNuYXBG
b3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKLSAg
ICBmbG9hdCBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpT
Y3JvbGxFdmVudEF4aXMsIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSwg
dW5zaWduZWQmIGNsb3Nlc3RJbmRleCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIFdlYlBhZ2VQcm94
eSYgbV93ZWJQYWdlUHJveHk7Ci0gICAgUmVmUHRyPFJlbW90ZVNjcm9sbGluZ1RyZWU+IG1fc2Ny
b2xsaW5nVHJlZTsKLSAgICBSZXF1ZXN0ZWRTY3JvbGxJbmZvKiBtX3JlcXVlc3RlZFNjcm9sbElu
Zm87Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRI
b3Jpem9udGFsU25hcFBvaW50SW5kZXggeyAwIH07Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50VmVy
dGljYWxTbmFwUG9pbnRJbmRleCB7IDAgfTsKLSNlbmRpZgotICAgIGJvb2wgbV9wcm9wYWdhdGVz
TWFpbkZyYW1lU2Nyb2xsczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLQotI2VuZGlmIC8vIFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Ny
b2xsaW5nL1JlbW90ZVNjcm9sbGluZ1RyZWUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
U2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ1RyZWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyNWViYjRiZTMxMTdjMGMwYWMyNDIzZjg3Y2VmNzIyMTlkZTMzMDE0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdUcmVlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlJlbW90ZVNjcm9sbGluZ1RyZWUuaCIKLQotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
Ci0KLSNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUu
aD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlICJTY3JvbGxpbmdUcmVlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlSU9TLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlSU9TLmg+Ci0jZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5oPgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUmVmPFJlbW90ZVNjcm9sbGluZ1RyZWU+IFJl
bW90ZVNjcm9sbGluZ1RyZWU6OmNyZWF0ZShSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5
JiBzY3JvbGxpbmdDb29yZGluYXRvcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1v
dGVTY3JvbGxpbmdUcmVlKHNjcm9sbGluZ0Nvb3JkaW5hdG9yKSk7Ci19Ci0KLVJlbW90ZVNjcm9s
bGluZ1RyZWU6OlJlbW90ZVNjcm9sbGluZ1RyZWUoUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eSYgc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCi0gICAgOiBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHkoc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCi17Ci19Ci0KLVJlbW90ZVNjcm9sbGluZ1RyZWU6
On5SZW1vdGVTY3JvbGxpbmdUcmVlKCkKLXsKLX0KLQotU2Nyb2xsaW5nVHJlZTo6RXZlbnRSZXN1
bHQgUmVtb3RlU2Nyb2xsaW5nVHJlZTo6dHJ5VG9IYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBpZiAoc2hvdWxkSGFuZGxlV2hlZWxF
dmVudFN5bmNocm9ub3VzbHkod2hlZWxFdmVudCkpCi0gICAgICAgIHJldHVybiBTZW5kVG9NYWlu
VGhyZWFkOwotCi0gICAgaWYgKHdpbGxXaGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUod2hlZWxF
dmVudCkpCi0gICAgICAgIHJldHVybiBEaWROb3RIYW5kbGVFdmVudDsKLQotICAgIGhhbmRsZVdo
ZWVsRXZlbnQod2hlZWxFdmVudCk7Ci0gICAgcmV0dXJuIERpZEhhbmRsZUV2ZW50OwotfQotCi0j
aWYgUExBVEZPUk0oTUFDKQotdm9pZCBSZW1vdGVTY3JvbGxpbmdUcmVlOjpoYW5kbGVXaGVlbEV2
ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UpCi17Ci0gICAgLy8gRklYTUU6
IGhhbmQgb2ZmIHRvIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eT8KLX0KLSNlbmRpZgotCi0j
aWYgUExBVEZPUk0oSU9TKQotV2ViQ29yZTo6RmxvYXRSZWN0IFJlbW90ZVNjcm9sbGluZ1RyZWU6
OmZpeGVkUG9zaXRpb25SZWN0KCkKLXsKLSAgICByZXR1cm4gbV9zY3JvbGxpbmdDb29yZGluYXRv
clByb3h5LmN1c3RvbUZpeGVkUG9zaXRpb25SZWN0KCk7Ci19Ci0KLXZvaWQgUmVtb3RlU2Nyb2xs
aW5nVHJlZTo6c2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRQYW5HZXN0dXJlKCkKLXsKLSAgICBt
X3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuc2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRQYW5H
ZXN0dXJlKCk7Ci19Ci0KLXZvaWQgUmVtb3RlU2Nyb2xsaW5nVHJlZTo6c2Nyb2xsaW5nVHJlZU5v
ZGVXaWxsU3RhcnRTY3JvbGwoKQotewotICAgIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5z
Y3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFNjcm9sbCgpOwotfQotCi12b2lkIFJlbW90ZVNjcm9s
bGluZ1RyZWU6OnNjcm9sbGluZ1RyZWVOb2RlRGlkRW5kU2Nyb2xsKCkKLXsKLSAgICBtX3Njcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHkuc2Nyb2xsaW5nVHJlZU5vZGVEaWRFbmRTY3JvbGwoKTsKLX0K
LQotI2VuZGlmCi0KLXZvaWQgUmVtb3RlU2Nyb2xsaW5nVHJlZTo6c2Nyb2xsaW5nVHJlZU5vZGVE
aWRTY3JvbGwoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xs
UG9zaXRpb24sIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludD4mIGxheW91dFZpZXdwb3J0
T3JpZ2luLCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uIHNjcm9sbGluZ0xheWVyUG9zaXRp
b25BY3Rpb24pCi17Ci0gICAgbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5LnNjcm9sbGluZ1Ry
ZWVOb2RlRGlkU2Nyb2xsKG5vZGVJRCwgc2Nyb2xsUG9zaXRpb24sIGxheW91dFZpZXdwb3J0T3Jp
Z2luLCBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uKTsKLX0KLQotdm9pZCBSZW1vdGVTY3Jv
bGxpbmdUcmVlOjpzY3JvbGxpbmdUcmVlTm9kZVJlcXVlc3RzU2Nyb2xsKFNjcm9sbGluZ05vZGVJ
RCBub2RlSUQsIGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBib29sIHJlcHJlc2Vu
dHNQcm9ncmFtbWF0aWNTY3JvbGwpCi17Ci0gICAgbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5
LnNjcm9sbGluZ1RyZWVOb2RlUmVxdWVzdHNTY3JvbGwobm9kZUlELCBzY3JvbGxQb3NpdGlvbiwg
cmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCk7Ci19Ci0KLVJlZjxTY3JvbGxpbmdUcmVlTm9k
ZT4gUmVtb3RlU2Nyb2xsaW5nVHJlZTo6Y3JlYXRlU2Nyb2xsaW5nVHJlZU5vZGUoU2Nyb2xsaW5n
Tm9kZVR5cGUgbm9kZVR5cGUsIFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCi17Ci0gICAgc3dpdGNo
IChub2RlVHlwZSkgewotICAgIGNhc2UgRnJhbWVTY3JvbGxpbmdOb2RlOgotI2lmIFBMQVRGT1JN
KElPUykKLSAgICAgICAgcmV0dXJuIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVJT1M6
OmNyZWF0ZSgqdGhpcywgbm9kZUlEKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBTY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpjcmVhdGUoKnRoaXMsIG5vZGVJRCk7Ci0jZW5kaWYK
LSAgICBjYXNlIE92ZXJmbG93U2Nyb2xsaW5nTm9kZToKLSNpZiBQTEFURk9STShJT1MpCi0gICAg
ICAgIHJldHVybiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpjcmVhdGUo
KnRoaXMsIG5vZGVJRCk7Ci0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEZpeGVkTm9kZToKLSAgICAgICAgcmV0dXJu
IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmNyZWF0ZSgqdGhpcywgbm9kZUlEKTsKLSAgICBjYXNl
IFN0aWNreU5vZGU6Ci0gICAgICAgIHJldHVybiBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6Y3Jl
YXRlKCp0aGlzLCBub2RlSUQpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y3JlYXRlKCp0aGlzLCBub2RlSUQpOwot
fQotCi12b2lkIFJlbW90ZVNjcm9sbGluZ1RyZWU6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlk
Q2hhbmdlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2ln
bmVkIHZlcnRpY2FsKQotewotICAgIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jdXJyZW50
U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShub2RlSUQsIGhvcml6b250YWwsIHZlcnRpY2FsKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL1Jl
bW90ZVNjcm9sbGluZ1RyZWUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Njcm9sbGluZy9S
ZW1vdGVTY3JvbGxpbmdUcmVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMThj
Y2M4MTRjYTU3MTZkYzcwYzI0YjZjNDQxNzhkMjU2Y2RhNzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Nyb2xs
aW5nL1JlbW90ZVNjcm9sbGluZ1RyZWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFJlbW90ZVNjcm9sbGluZ1RyZWVfaAotI2RlZmluZSBSZW1v
dGVTY3JvbGxpbmdUcmVlX2gKLQotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0KLSNpbmNs
dWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsaW5nQ29uc3RyYWludHMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWUuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHk7Ci0KLWNsYXNzIFJlbW90ZVNjcm9sbGluZ1RyZWUgZmluYWwgOiBwdWJsaWMgV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZW1vdGVTY3JvbGxp
bmdUcmVlPiBjcmVhdGUoUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSYpOwotICAgIHZp
cnR1YWwgflJlbW90ZVNjcm9sbGluZ1RyZWUoKTsKLQotICAgIGJvb2wgaXNSZW1vdGVTY3JvbGxp
bmdUcmVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIEV2ZW50UmVzdWx0
IHRyeVRvSGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQm
KSBvdmVycmlkZTsKLQotICAgIGNvbnN0IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkm
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHk7IH0KLQotICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwo
V2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlELCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3Jv
bGxQb3NpdGlvbiwgY29uc3Qgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50PiYgbGF5
b3V0Vmlld3BvcnRPcmlnaW4sIFdlYkNvcmU6OlNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24g
PSBXZWJDb3JlOjpTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTeW5jKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlUmVxdWVzdHNTY3JvbGwoV2ViQ29yZTo6U2Nyb2xs
aW5nTm9kZUlELCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgYm9v
bCByZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY3Vy
cmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UoV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlELCB1
bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCkgb3ZlcnJpZGU7Ci0KLXByaXZh
dGU6Ci0gICAgZXhwbGljaXQgUmVtb3RlU2Nyb2xsaW5nVHJlZShSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5Jik7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBoYW5kbGVXaGVl
bEV2ZW50UGhhc2UoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UpIG92ZXJyaWRlOwot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGZpeGVk
UG9zaXRpb25SZWN0KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY3JvbGxpbmdUcmVlTm9kZVdpbGxT
dGFydFBhbkdlc3R1cmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlV2ls
bFN0YXJ0U2Nyb2xsKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY3JvbGxpbmdUcmVlTm9kZURpZEVu
ZFNjcm9sbCgpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBSZWY8V2ViQ29yZTo6U2Nyb2xsaW5n
VHJlZU5vZGU+IGNyZWF0ZVNjcm9sbGluZ1RyZWVOb2RlKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVU
eXBlLCBXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQpIG92ZXJyaWRlOwotICAgIAotICAgIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkmIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1ND
Uk9MTElOR19UUkVFKFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nVHJlZSwgaXNSZW1vdGVTY3JvbGxp
bmdUcmVlKCkpOwotCi0jZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLQotI2VuZGlm
IC8vIFJlbW90ZVNjcm9sbGluZ1RyZWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MjA3OWUwMDc3YjAwODQxZGQ1ZDA3N2IyZTEzNzdiMDZlYWExOGM3ZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9T
Y3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaAorKysg
L2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNjcm9sbGlu
Z1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1NfaAotI2RlZmluZSBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TX2gKLQotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYm
IFBMQVRGT1JNKElPUykKLQotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGUu
aD4KLQotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXS092ZXJmbG93U2Nyb2xsVmll
d0RlbGVnYXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgU2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUyA6IHB1YmxpYyBXZWJDb3JlOjpTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNjcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M+IGNyZWF0ZShXZWJDb3JlOjpTY3JvbGxpbmdUcmVl
JiwgV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlEKTsKLSAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVl
T3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TKCk7Ci0KLSAgICB2b2lkIG92ZXJmbG93U2Nyb2xsV2ls
bFN0YXJ0KCk7Ci0gICAgdm9pZCBvdmVyZmxvd1Njcm9sbERpZEVuZCgpOwotICAgIHZvaWQgb3Zl
cmZsb3dTY3JvbGxWaWV3V2lsbFN0YXJ0UGFuR2VzdHVyZSgpOwotICAgIHZvaWQgc2Nyb2xsVmll
d0RpZFNjcm9sbChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgYm9vbCBpblVzZXJJbnRlcmFj
dGlvbik7Ci0gICAgdm9pZCBjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZSh1bnNpZ25l
ZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCk7Ci0KLSAgICBDQUxheWVyICpzY3JvbGxM
YXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXIuZ2V0KCk7IH0KLQotcHJpdmF0ZToK
LSAgICBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TKFdlYkNvcmU6OlNjcm9s
bGluZ1RyZWUmLCBXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQpOwotCi0gICAgdm9pZCBjb21taXRT
dGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZSYpIG92
ZXJyaWRlOwotICAgIHZvaWQgY29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFdlYkNvcmU6
OlNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOwotICAgIAotICAgIFdlYkNvcmU6OkZsb2F0
UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0U2Ny
b2xsTGF5ZXJQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBsYXlvdXRWaWV3cG9ydCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0
ZUxheWVyc0FmdGVyVmlld3BvcnRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBmaXhl
ZFBvc2l0aW9uUmVjdCwgZG91YmxlIHNjYWxlKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHVwZGF0
ZUxheWVyc0FmdGVyRGVsZWdhdGVkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNj
cm9sbFBvc2l0aW9uKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNl
c3RvckNoYW5nZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYgY3VtdWxhdGl2ZURlbHRhKSBvdmVycmlkZTsKLQotICAgIHZvaWQgaGFu
ZGxlV2hlZWxFdmVudChjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlk
ZSB7IH0KLQotICAgIHZvaWQgdXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxM
YXllcjsKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7Ci0K
LSAgICBSZXRhaW5QdHI8V0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZT4gbV9zY3JvbGxWaWV3
RGVsZWdhdGU7Ci0gICAgYm9vbCBtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYg
UExBVEZPUk0oSU9TKQotCi0jZW5kaWYgLy8gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcv
aW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1MubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMWNjZTRmMjFiYTg4
ZmRhMGMwNjI2NWRlM2E1NTBmMGY5YTUzYTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9T
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCisrKyAvZGV2L251bGwKQEAg
LTEsMzIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaCIKLQotI2lmIFBMQVRGT1JN
KElPUykKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotCi0jaW1wb3J0IDxRdWFydHpDb3Jl
L1F1YXJ0ekNvcmUuaD4KLSNpbXBvcnQgPFVJS2l0L1VJUGFuR2VzdHVyZVJlY29nbml6ZXIuaD4K
LSNpbXBvcnQgPFVJS2l0L1VJU2Nyb2xsVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxp
bmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxp
bmdUcmVlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGUuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+Ci0jaW1wb3J0IDx3dGYv
U2V0Rm9yU2NvcGUuaD4KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0jaW1wb3J0IDxX
ZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxT
bmFwT2Zmc2V0c0luZm8uaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
QGludGVyZmFjZSBXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlIDogTlNPYmplY3QgPFVJU2Ny
b2xsVmlld0RlbGVnYXRlPiB7Ci0gICAgV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TKiBfc2Nyb2xsaW5nVHJlZU5vZGU7Ci19Ci0KLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCBnZXR0ZXI9X2lzSW5Vc2VySW50ZXJhY3Rpb24pIEJPT0wgaW5Vc2VySW50ZXJhY3Rpb247
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFNjcm9sbGluZ1RyZWVOb2RlOihXZWJLaXQ6OlNj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MqKW5vZGU7Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUKLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoU2Nyb2xsaW5nVHJlZU5vZGU6KFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUyopbm9kZQotewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZSA9IG5vZGU7Ci0KLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLQotLSAodm9pZClzY3JvbGxWaWV3RGlkU2Nyb2xsOihVSVNjcm9sbFZpZXcgKilzY3Jv
bGxWaWV3Ci17Ci0gICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNj
cm9sbFZpZXcuY29udGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKLX0KLQotLSAodm9p
ZClzY3JvbGxWaWV3V2lsbEJlZ2luRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcK
LXsKLSAgICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBZRVM7Ci0KLSAgICBpZiAoc2Nyb2xsVmlldy5w
YW5HZXN0dXJlUmVjb2duaXplci5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdh
bikKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5vdmVyZmxvd1Njcm9sbFZpZXdXaWxsU3Rh
cnRQYW5HZXN0dXJlKCk7Ci0gICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5vdmVyZmxvd1Njcm9sbFdp
bGxTdGFydCgpOwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLS0gKHZvaWQpc2Ny
b2xsVmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aXRoVmVs
b2NpdHk6KENHUG9pbnQpdmVsb2NpdHkgdGFyZ2V0Q29udGVudE9mZnNldDooaW5vdXQgQ0dQb2lu
dCAqKXRhcmdldENvbnRlbnRPZmZzZXQKLXsKLSAgICBDR0Zsb2F0IGhvcml6b250YWxUYXJnZXQg
PSB0YXJnZXRDb250ZW50T2Zmc2V0LT54OwotICAgIENHRmxvYXQgdmVydGljYWxUYXJnZXQgPSB0
YXJnZXRDb250ZW50T2Zmc2V0LT55OwotCi0gICAgdW5zaWduZWQgb3JpZ2luYWxIb3Jpem9udGFs
U25hcFBvc2l0aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50SG9yaXpvbnRhbFNuYXBQ
b2ludEluZGV4KCk7Ci0gICAgdW5zaWduZWQgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQb3NpdGlvbiA9
IF9zY3JvbGxpbmdUcmVlTm9kZS0+Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKLQot
ICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZsb2F0IHBvdGVudGlh
bFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZS0+aG9y
aXpvbnRhbFNuYXBPZmZzZXRzKCksIF9zY3JvbGxpbmdUcmVlTm9kZS0+aG9yaXpvbnRhbFNuYXBP
ZmZzZXRSYW5nZXMoKSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCwgaW5kZXgpOwotICAg
ICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5k
ZXgoaW5kZXgpOwotICAgICAgICBpZiAoaG9yaXpvbnRhbFRhcmdldCA+PSAwICYmIGhvcml6b250
YWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS53aWR0aCkKLSAgICAgICAgICAgIHRh
cmdldENvbnRlbnRPZmZzZXQtPnggPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247Ci0gICAgfQotCi0g
ICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9mZnNldHMoKS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIGZsb2F0IHBvdGVudGlhbFNu
YXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0KF9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGlj
YWxTbmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9mZnNldFJh
bmdlcygpLCB2ZXJ0aWNhbFRhcmdldCwgdmVsb2NpdHkueSwgaW5kZXgpOwotICAgICAgICBfc2Ny
b2xsaW5nVHJlZU5vZGUtPnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KGluZGV4KTsK
LSAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAgJiYgdmVydGljYWxUYXJnZXQgPD0gc2Ny
b2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCi0gICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zm
c2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwotICAgIH0KLQotICAgIGlmIChvcmlnaW5h
bEhvcml6b250YWxTbmFwUG9zaXRpb24gIT0gX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50SG9y
aXpvbnRhbFNuYXBQb2ludEluZGV4KCkKLSAgICAgICAgfHwgb3JpZ2luYWxWZXJ0aWNhbFNuYXBQ
b3NpdGlvbiAhPSBfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludElu
ZGV4KCkpIHsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50U25hcFBvaW50SW5k
aWNlc0RpZENoYW5nZShfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRIb3Jpem9udGFsU25hcFBv
aW50SW5kZXgoKSwgX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJ
bmRleCgpKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotLSAodm9pZClzY3JvbGxWaWV3RGlkRW5kRHJh
Z2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2lsbERlY2VsZXJhdGU6KEJPT0wpd2ls
bERlY2VsZXJhdGUKLXsKLSAgICBpZiAoX2luVXNlckludGVyYWN0aW9uICYmICF3aWxsRGVjZWxl
cmF0ZSkgewotICAgICAgICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBOTzsKLSAgICAgICAgX3Njcm9s
bGluZ1RyZWVOb2RlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29udGVudE9mZnNl
dCwgX2luVXNlckludGVyYWN0aW9uKTsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5vdmVy
Zmxvd1Njcm9sbERpZEVuZCgpOwotICAgIH0KLX0KLQotLSAodm9pZClzY3JvbGxWaWV3RGlkRW5k
RGVjZWxlcmF0aW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Ci17Ci0gICAgaWYgKF9pblVz
ZXJJbnRlcmFjdGlvbikgewotICAgICAgICBfaW5Vc2VySW50ZXJhY3Rpb24gPSBOTzsKLSAgICAg
ICAgX3Njcm9sbGluZ1RyZWVOb2RlLT5zY3JvbGxWaWV3RGlkU2Nyb2xsKHNjcm9sbFZpZXcuY29u
dGVudE9mZnNldCwgX2luVXNlckludGVyYWN0aW9uKTsKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVO
b2RlLT5vdmVyZmxvd1Njcm9sbERpZEVuZCgpOwotICAgIH0KLX0KLQotQGVuZAotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotUmVmPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M+
IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OmNyZWF0ZShXZWJDb3JlOjpT
Y3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQgbm9k
ZUlEKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGVJT1Moc2Nyb2xsaW5nVHJlZSwgbm9kZUlEKSk7Ci19Ci0KLVNjcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1MoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZSYgc2Nyb2xsaW5nVHJlZSwgV2ViQ29yZTo6
U2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkKLSAgICA6IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGUoc2Nyb2xsaW5nVHJlZSwgbm9kZUlEKQotICAgICwgbV91cGRhdGluZ0Zyb21TdGF0
ZU5vZGUoZmFsc2UpCi17Ci19Ci0KLVNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1M6On5TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TKCkKLXsKLSAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICBpZiAoVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3
ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVnYXRlXSkgewotICAgICAgICBB
U1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0g
ICAgICAgIC8vIFRoZSBzY3JvbGxWaWV3IG1heSBoYXZlIGJlZW4gYWRvcHRlZCBieSBhbm90aGVy
IG5vZGUsIHNvIG9ubHkgY2xlYXIgdGhlIGRlbGVnYXRlIGlmIGl0J3Mgb3Vycy4KLSAgICAgICAg
aWYgKHNjcm9sbFZpZXcuZGVsZWdhdGUgPT0gbV9zY3JvbGxWaWV3RGVsZWdhdGUuZ2V0KCkpCi0g
ICAgICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0gbmlsOwotICAgIH0KLSAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCi19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUzo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBXZWJDb3JlOjpTY3Jv
bGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKLXsKLSAgICBpZiAoc3RhdGVOb2RlLmhhc0NoYW5n
ZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbExheWVyKSkgewot
ICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgaWYgKFVJU2Nyb2xs
VmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0
ZV0pIHsKLSAgICAgICAgICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNj
cm9sbFZpZXcgc2VsZl1dKTsKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7
Ci0gICAgICAgIH0KLSAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIH0KLQot
ICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGU6OmNvbW1pdFN0YXRlQmVmb3Jl
Q2hpbGRyZW4oc3RhdGVOb2RlKTsKLQotICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9k
ZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPihzdGF0ZU5v
ZGUpOwotICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5ZXIpKQotICAgICAgICBtX3Njcm9sbExheWVyID0gc2Ny
b2xsaW5nU3RhdGVOb2RlLmxheWVyKCk7Ci0KLSAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29u
dGVudHNMYXllcikpCi0gICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyID0gc2Nyb2xsaW5n
U3RhdGVOb2RlLnNjcm9sbGVkQ29udGVudHNMYXllcigpOwotfQotCi12b2lkIFNjcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihjb25z
dCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKLXsKLSAgICBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlOjpjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oc3RhdGVOb2RlKTsK
LQotICAgIFNldEZvclNjb3BlPGJvb2w+IHVwZGF0aW5nQ2hhbmdlKG1fdXBkYXRpbmdGcm9tU3Rh
dGVOb2RlLCB0cnVlKTsKLQotICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRv
d25jYXN0PFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOwot
Ci0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikKLSAgICAgICAgfHwgc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRv
dGFsQ29udGVudHNTaXplKQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNT
aXplKQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHx8IHNj
cm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpTY3JvbGxPcmlnaW4pKSB7Ci0gICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwotICAgICAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICop
W3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOwotICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNL
aW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpTY3JvbGxMYXllcikpIHsKLSAgICAgICAgICAgIGlmICghbV9zY3JvbGxWaWV3RGVsZWdhdGUp
Ci0gICAgICAgICAgICAgICAgbV9zY3JvbGxWaWV3RGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tPdmVy
Zmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZTp0
aGlzXSk7Ci0KLSAgICAgICAgICAgIHNjcm9sbFZpZXcuc2Nyb2xsc1RvVG9wID0gTk87Ci0gICAg
ICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0gbV9zY3JvbGxWaWV3RGVsZWdhdGUuZ2V0KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHJlY29tcHV0ZUluc2V0cyA9IHNjcm9sbGluZ1N0
YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpU
b3RhbENvbnRlbnRzU2l6ZSk7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVu
dHNTaXplKSkgewotICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50U2l6ZSA9IHNjcm9sbGlu
Z1N0YXRlTm9kZS5yZWFjaGFibGVDb250ZW50c1NpemUoKTsKLSAgICAgICAgICAgIHJlY29tcHV0
ZUluc2V0cyA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHNjcm9sbGluZ1N0YXRl
Tm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3Jv
bGxQb3NpdGlvbikKLSAgICAgICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4pKQotICAg
ICAgICAgICAgJiYgIVttX3Njcm9sbFZpZXdEZWxlZ2F0ZSBfaXNJblVzZXJJbnRlcmFjdGlvbl0p
IHsKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuY29udGVudE9mZnNldCA9IHNjcm9sbGluZ1N0YXRl
Tm9kZS5zY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsT3JpZ2luKCk7Ci0gICAgICAgICAgICByZWNv
bXB1dGVJbnNldHMgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY29tcHV0ZUlu
c2V0cykgewotICAgICAgICAgICAgVUlFZGdlSW5zZXRzIGluc2V0cyA9IFVJRWRnZUluc2V0c01h
a2UoMCwgMCwgMCwgMCk7Ci0gICAgICAgICAgICAvLyBXaXRoIFJUTCBvciBib3R0b20tdG8tdG9w
IHNjcm9sbGluZyAobm9uLXplcm8gb3JpZ2luKSwgd2UgbmVlZCBleHRyYSBzcGFjZSBvbiB0aGUg
bGVmdCBvciB0b3AuCi0gICAgICAgICAgICBpZiAoc2Nyb2xsT3JpZ2luKCkueCgpKQotICAgICAg
ICAgICAgICAgIGluc2V0cy5sZWZ0ID0gcmVhY2hhYmxlQ29udGVudHNTaXplKCkud2lkdGgoKSAt
IHRvdGFsQ29udGVudHNTaXplKCkud2lkdGgoKTsKLQotICAgICAgICAgICAgaWYgKHNjcm9sbE9y
aWdpbigpLnkoKSkKLSAgICAgICAgICAgICAgICBpbnNldHMudG9wID0gcmVhY2hhYmxlQ29udGVu
dHNTaXplKCkuaGVpZ2h0KCkgLSB0b3RhbENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpOwotCi0gICAg
ICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRJbnNldCA9IGluc2V0czsKLSAgICAgICAgfQotCi0j
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICAgICAgLy8gRklYTUU6IElmIG9ubHkgb25l
IGF4aXMgc25hcHMgaW4gMkQgc2Nyb2xsaW5nLCB0aGUgb3RoZXIgYXhpcyB3aWxsIGRlY2VsZXJh
dGUgZmFzdCBhcyB3ZWxsLiBJcyB0aGlzIHdoYXQgd2Ugd2FudD8KLSAgICAgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpIb3Jpem9udGFsU25hcE9mZnNldHMpIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZz
ZXRzKSkKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuZGVjZWxlcmF0aW9uUmF0ZSA9IGhvcml6b250
YWxTbmFwT2Zmc2V0cygpLnNpemUoKSB8fCB2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuc2l6ZSgpID8g
VUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZUZhc3QgOiBVSVNjcm9sbFZpZXdEZWNlbGVyYXRp
b25SYXRlTm9ybWFsOwotI2VuZGlmCi0gICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
LSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6
dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYg
Y2hhbmdlZE5vZGUsIGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IEZs
b2F0U2l6ZSYgY3VtdWxhdGl2ZURlbHRhKQotewotICAgIGlmICghbV9jaGlsZHJlbikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbGFzdENvbW1pdHRlZFNj
cm9sbFBvc2l0aW9uKCkgLSBzY3JvbGxQb3NpdGlvbigpOwotCi0gICAgZm9yIChhdXRvJiBjaGls
ZCA6ICptX2NoaWxkcmVuKQotICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3Rv
ckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlvblJlY3QsIGN1bXVsYXRpdmVEZWx0YSAr
IHNjcm9sbERlbHRhKTsKLX0KLQotRmxvYXRQb2ludCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCi0gICAgVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xs
VmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVnYXRlXTsKLSAgICBBU1NFUlQoW3Njcm9sbFZpZXcg
aXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IHNlbGZdXSk7Ci0gICAgcmV0dXJuIFtzY3JvbGxW
aWV3IGNvbnRlbnRPZmZzZXRdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLX0KLQot
dm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpzZXRTY3JvbGxMYXll
clBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmKQotewotICAgIFttX3Njcm9sbExheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKC1zY3Jv
bGxQb3NpdGlvbi54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1zY3JvbGxQb3NpdGlvbi55KCkg
KyBzY3JvbGxPcmlnaW4oKS55KCkpXTsKLQotICAgIHVwZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9s
bChzY3JvbGxQb3NpdGlvbik7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUzo6dXBkYXRlTGF5ZXJzQWZ0ZXJEZWxlZ2F0ZWRTY3JvbGwoY29uc3QgRmxvYXRQ
b2ludCYgc2Nyb2xsUG9zaXRpb24pCi17Ci0gICAgdXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xs
KHNjcm9sbFBvc2l0aW9uKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TOjp1cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoY29uc3QgRmxvYXRQb2ludCYg
c2Nyb2xsUG9zaXRpb24pCi17Ci0gICAgaWYgKCFtX2NoaWxkcmVuKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBGbG9hdFJlY3QgZml4ZWRQb3NpdGlvblJlY3Q7Ci0gICAgU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZSogZnJhbWVOb2RlID0gZW5jbG9zaW5nRnJhbWVOb2RlKCk7Ci0gICAg
aWYgKGZyYW1lTm9kZSAmJiBmcmFtZU5vZGUtPnBhcmVudCgpKQotICAgICAgICBmaXhlZFBvc2l0
aW9uUmVjdCA9IGZyYW1lTm9kZS0+Zml4ZWRQb3NpdGlvblJlY3QoKTsKLSAgICBlbHNlCi0gICAg
ICAgIGZpeGVkUG9zaXRpb25SZWN0ID0gc2Nyb2xsaW5nVHJlZSgpLmZpeGVkUG9zaXRpb25SZWN0
KCk7Ci0gICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbGFzdENvbW1pdHRlZFNjcm9sbFBvc2l0
aW9uKCkgLSBzY3JvbGxQb3NpdGlvbjsKLQotICAgIGZvciAoYXV0byYgY2hpbGQgOiAqbV9jaGls
ZHJlbikKLSAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoKnRo
aXMsIGZpeGVkUG9zaXRpb25SZWN0LCBzY3JvbGxEZWx0YSk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6b3ZlcmZsb3dTY3JvbGxXaWxsU3RhcnQoKQot
ewotICAgIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFNjcm9sbCgp
OwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6Om92ZXJm
bG93U2Nyb2xsRGlkRW5kKCkKLXsKLSAgICBzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5nVHJlZU5v
ZGVEaWRFbmRTY3JvbGwoKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TOjpvdmVyZmxvd1Njcm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCkKLXsKLSAg
ICBzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRQYW5HZXN0dXJlKCk7
Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2Nyb2xs
Vmlld0RpZFNjcm9sbChjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgYm9vbCBpblVz
ZXJJbnRlcmFjdGlvbikKLXsKLSAgICBpZiAobV91cGRhdGluZ0Zyb21TdGF0ZU5vZGUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxQb3NpdGlvbkNoYW5nZWRW
aWFEZWxlZ2F0ZWRTY3JvbGxpbmcoc2Nyb2xsaW5nTm9kZUlEKCksIHNjcm9sbFBvc2l0aW9uLCBp
blVzZXJJbnRlcmFjdGlvbik7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZUlPUzo6Y3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UodW5zaWduZWQgaG9y
aXpvbnRhbCwgdW5zaWduZWQgdmVydGljYWwpCi17Ci0gICAgaWYgKG1fdXBkYXRpbmdGcm9tU3Rh
dGVOb2RlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgc2Nyb2xsaW5nVHJlZSgpLmN1cnJl
bnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKHNjcm9sbGluZ05vZGVJRCgpLCBob3Jpem9udGFs
LCB2ZXJ0aWNhbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1JlbW90ZUxheWVyVHJlZUhvc3RJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUmVtb3RlTGF5ZXJUcmVlSG9zdElPUy5tbQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE1Y2MzMDIwMzI1Nzc5MjgxNzhkMDRkZWMy
NGYyNDE0OTVlMTA4Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUmVtb3RlTGF5ZXJUcmVlSG9zdElPUy5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNpbXBvcnQgIlJlbW90ZUxheWVyVHJl
ZUhvc3QuaCIKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2ltcG9ydCA8VUlL
aXQvVUlTY3JvbGxWaWV3Lmg+Ci0jaW1wb3J0IDxVSUtpdFNQSS5oPgotI2ltcG9ydCA8V2ViS2l0
U3lzdGVtSW50ZXJmYWNlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW50ZXJm
YWNlIENBTGF5ZXIoV0tMYXllckludGVybmFsKQotLSAodm9pZClzZXRDb250ZXh0SWQ6KHVpbnQz
Ml90KWNvbnRleHRJRDsKLUBlbmQKLQotQGludGVyZmFjZSBDQUJhY2tkcm9wTGF5ZXIgOiBDQUxh
eWVyCi1AZW5kCi0KLUBpbnRlcmZhY2UgVUlWaWV3IChXS0hpdFRlc3RpbmcpCi0tIChVSVZpZXcg
KilfZmluZERlc2NlbmRhbnRWaWV3QXRQb2ludDooQ0dQb2ludClwb2ludCB3aXRoRXZlbnQ6KFVJ
RXZlbnQgKilldmVudDsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFVJVmlldyAoV0tIaXRUZXN0
aW5nKQotCi0vLyBVSVZpZXcgaGl0IHRlc3RpbmcgYXNzdW1lcyB0aGF0IHZpZXdzIHNob3VsZCBv
bmx5IGhpdCB0ZXN0IHN1YnZpZXdzIHRoYXQgYXJlIGVudGlyZWx5IGNvbnRhaW5lZAotLy8gaW4g
dGhlIHZpZXcuIFRoaXMgaXMgbm90IHRydWUgb2Ygd2ViIGNvbnRlbnQuCi0vLyBXZSBvbmx5IHdh
bnQgdG8gZmluZCBVSVNjcm9sbFZpZXdzIGhlcmUuIE90aGVyIHZpZXdzIGFyZSBpZ25vcmVkLgot
LSAoVUlWaWV3ICopX3JlY3Vyc2l2ZUZpbmREZXNjZW5kYW50U2Nyb2xsVmlld0F0UG9pbnQ6KENH
UG9pbnQpcG9pbnQgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKLXsKLSAgICBpZiAoc2VsZi5j
bGlwc1RvQm91bmRzICYmICFbc2VsZiBwb2ludEluc2lkZTpwb2ludCB3aXRoRXZlbnQ6ZXZlbnRd
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgX19ibG9jayBVSVZpZXcgKmZvdW5kVmlldyA9
IG5pbDsKLSAgICBbW3NlbGYgc3Vidmlld3NdIGVudW1lcmF0ZU9iamVjdHNVc2luZ0Jsb2NrOl4o
VUlWaWV3ICp2aWV3LCBOU1VJbnRlZ2VyIGlkeCwgQk9PTCAqc3RvcCkgewotICAgICAgICBDR1Bv
aW50IHN1YnZpZXdQb2ludCA9IFt2aWV3IGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpzZWxm
XTsKLQotICAgICAgICBpZiAoW3ZpZXcgcG9pbnRJbnNpZGU6c3Vidmlld1BvaW50IHdpdGhFdmVu
dDpldmVudF0gJiYgW3ZpZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3IGNsYXNzXV0gJiYg
dmlldy5pc1VzZXJJbnRlcmFjdGlvbkVuYWJsZWQpCi0gICAgICAgICAgICBmb3VuZFZpZXcgPSB2
aWV3OwotCi0gICAgICAgIGlmICghW3ZpZXcgc3Vidmlld3NdKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmIChVSVZpZXcgKmhpdFZpZXcgPSBbdmlldyBfcmVjdXJzaXZlRmluZERl
c2NlbmRhbnRTY3JvbGxWaWV3QXRQb2ludDpzdWJ2aWV3UG9pbnQgd2l0aEV2ZW50OmV2ZW50XSkK
LSAgICAgICAgICAgIGZvdW5kVmlldyA9IGhpdFZpZXc7Ci0gICAgfV07Ci0KLSAgICByZXR1cm4g
Zm91bmRWaWV3OwotfQotCi0tIChVSVZpZXcgKilfZmluZERlc2NlbmRhbnRWaWV3QXRQb2ludDoo
Q0dQb2ludClwb2ludCB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAotewotICAgIHJldHVybiBb
c2VsZiBfcmVjdXJzaXZlRmluZERlc2NlbmRhbnRTY3JvbGxWaWV3QXRQb2ludDpwb2ludCB3aXRo
RXZlbnQ6ZXZlbnRdOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV0tDb21wb3NpdGluZ1ZpZXcg
OiBVSVZpZXcKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLQ29tcG9zaXRpbmdWaWV3Ci0KLS0g
KFVJVmlldyAqKWhpdFRlc3Q6KENHUG9pbnQpcG9pbnQgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZl
bnQKLXsKLSAgICByZXR1cm4gW3NlbGYgX2ZpbmREZXNjZW5kYW50Vmlld0F0UG9pbnQ6cG9pbnQg
d2l0aEV2ZW50OmV2ZW50XTsKLX0KLQotLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgotewotICAg
IE5TU3RyaW5nICp2aWV3RGVzY3JpcHRpb24gPSBbc3VwZXIgZGVzY3JpcHRpb25dOwotICAgIE5T
U3RyaW5nICp3ZWJLaXREZXRhaWxzID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIgbGF5
ZXJJRCA9ICVsbHUgXCIlQFwiIiwgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVIb3N0OjpsYXllcklE
KHNlbGYubGF5ZXIpLCBzZWxmLmxheWVyLm5hbWUgPyBzZWxmLmxheWVyLm5hbWUgOiBAIiJdOwot
ICAgIHJldHVybiBbdmlld0Rlc2NyaXB0aW9uIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOndlYktp
dERldGFpbHNdOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV0tUcmFuc2Zvcm1WaWV3IDogV0tD
b21wb3NpdGluZ1ZpZXcKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLVHJhbnNmb3JtVmlldwot
Ci0rIChDbGFzcylsYXllckNsYXNzCi17Ci0gICAgcmV0dXJuIFtDQVRyYW5zZm9ybUxheWVyIHNl
bGZdOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV0tTaW1wbGVCYWNrZHJvcFZpZXcgOiBXS0Nv
bXBvc2l0aW5nVmlldwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tTaW1wbGVCYWNrZHJvcFZp
ZXcKLQotKyAoQ2xhc3MpbGF5ZXJDbGFzcwotewotICAgIHJldHVybiBbQ0FCYWNrZHJvcExheWVy
IHNlbGZdOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV0tTaGFwZVZpZXcgOiBXS0NvbXBvc2l0
aW5nVmlldwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tTaGFwZVZpZXcKLQotKyAoQ2xhc3Mp
bGF5ZXJDbGFzcwotewotICAgIHJldHVybiBbQ0FTaGFwZUxheWVyIHNlbGZdOwotfQotCi1AZW5k
Ci0KLUBpbnRlcmZhY2UgV0tSZW1vdGVWaWV3IDogV0tDb21wb3NpdGluZ1ZpZXcKLUBlbmQKLQot
QGltcGxlbWVudGF0aW9uIFdLUmVtb3RlVmlldwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhG
cmFtZTooQ0dSZWN0KWZyYW1lIGNvbnRleHRJRDoodWludDMyX3QpY29udGV4dElECi17Ci0gICAg
aWYgKChzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdKSkKLSAgICAgICAgW1tzZWxm
IGxheWVyXSBzZXRDb250ZXh0SWQ6Y29udGV4dElEXTsKLSAgICAKLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotKyAoQ2xhc3MpbGF5ZXJDbGFzcwotewotICAgIHJldHVybiBOU0NsYXNzRnJvbVN0cmlu
ZyhAIkNBTGF5ZXJIb3N0Iik7Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXS0JhY2tkcm9wVmll
dyA6IF9VSUJhY2tkcm9wVmlldwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tCYWNrZHJvcFZp
ZXcKLQotLSAoVUlWaWV3ICopaGl0VGVzdDooQ0dQb2ludClwb2ludCB3aXRoRXZlbnQ6KFVJRXZl
bnQgKilldmVudAotewotICAgIHJldHVybiBbc2VsZiBfZmluZERlc2NlbmRhbnRWaWV3QXRQb2lu
dDpwb2ludCB3aXRoRXZlbnQ6ZXZlbnRdOwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9u
Ci17Ci0gICAgTlNTdHJpbmcgKnZpZXdEZXNjcmlwdGlvbiA9IFtzdXBlciBkZXNjcmlwdGlvbl07
Ci0gICAgTlNTdHJpbmcgKndlYktpdERldGFpbHMgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIiBsYXllcklEID0gJWxsdSBcIiVAXCIiLCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZUhvc3Q6
OmxheWVySUQoc2VsZi5sYXllciksIHNlbGYubGF5ZXIubmFtZSA/IHNlbGYubGF5ZXIubmFtZSA6
IEAiIl07Ci0gICAgcmV0dXJuIFt2aWV3RGVzY3JpcHRpb24gc3RyaW5nQnlBcHBlbmRpbmdTdHJp
bmc6d2ViS2l0RGV0YWlsc107Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUxh
eWVyT3JWaWV3ICpSZW1vdGVMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllcihjb25zdCBSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJDcmVhdGlvblByb3BlcnRpZXMmIHByb3BlcnRpZXMs
IGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXMqIGxheWVy
UHJvcGVydGllcykKLXsKLSAgICBSZXRhaW5QdHI8TGF5ZXJPclZpZXc+JiB2aWV3ID0gbV9sYXll
cnMuYWRkKHByb3BlcnRpZXMubGF5ZXJJRCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotCi0g
ICAgQVNTRVJUKCF2aWV3KTsKLQotICAgIHN3aXRjaCAocHJvcGVydGllcy50eXBlKSB7Ci0gICAg
Y2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyOgotICAgIGNhc2UgUGxhdGZvcm1D
QUxheWVyOjpMYXllclR5cGVXZWJMYXllcjoKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlUm9vdExheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVTaW1w
bGVMYXllcjoKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5n
TGF5ZXI6Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVBhZ2VUaWxlZEJhY2tp
bmdMYXllcjoKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5n
VGlsZUxheWVyOgotICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLQ29tcG9zaXRpbmdWaWV3IGFs
bG9jXSBpbml0XSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpM
YXllclR5cGVCYWNrZHJvcExheWVyOgotICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLU2ltcGxl
QmFja2Ryb3BWaWV3IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGVMaWdodFN5c3RlbUJhY2tkcm9wTGF5ZXI6Ci0gICAgICAg
IHZpZXcgPSBhZG9wdE5TKFtbV0tCYWNrZHJvcFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0WmVybyBwcml2YXRlU3R5bGU6X1VJQmFja2Ryb3BWaWV3U3R5bGVfTGlnaHRdKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZURhcmtTeXN0ZW1C
YWNrZHJvcExheWVyOgotICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLQmFja2Ryb3BWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm8gcHJpdmF0ZVN0eWxlOl9VSUJhY2tkcm9wVmll
d1N0eWxlX0RhcmtdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyOgotICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLVHJh
bnNmb3JtVmlldyBhbGxvY10gaW5pdF0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRm
b3JtQ0FMYXllcjo6TGF5ZXJUeXBlQ3VzdG9tOgotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpM
YXllclR5cGVBVlBsYXllckxheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5
cGVDb250ZW50c1Byb3ZpZGVkTGF5ZXI6Ci0gICAgICAgIGlmICghbV9pc0RlYnVnTGF5ZXJUcmVl
SG9zdCkgewotICAgICAgICAgICAgdmlldyA9IGFkb3B0TlMoW1tXS1JlbW90ZVZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVybyBjb250ZXh0SUQ6cHJvcGVydGllcy5ob3N0aW5nQ29u
dGV4dElEXSk7Ci0gICAgICAgICAgICBpZiAocHJvcGVydGllcy50eXBlID09IFBsYXRmb3JtQ0FM
YXllcjo6TGF5ZXJUeXBlQVZQbGF5ZXJMYXllcikgewotICAgICAgICAgICAgICAgIC8vIEludmVy
dCB0aGUgc2NhbGUgdHJhbnNmb3JtIGFkZGVkIGluIHRoZSBXZWJQcm9jZXNzIHRvIGZpeCA8cmRh
cjovL3Byb2JsZW0vMTgzMTY1NDI+LgotICAgICAgICAgICAgICAgIGZsb2F0IGludmVyc2VTY2Fs
ZSA9IDEgLyBwcm9wZXJ0aWVzLmhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvcjsKLSAgICAgICAgICAg
ICAgICBbW3ZpZXcgbGF5ZXJdIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGlu
dmVyc2VTY2FsZSwgaW52ZXJzZVNjYWxlLCAxKV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgdmlldyA9IGFkb3B0TlMoW1tXS0NvbXBvc2l0aW5nVmlldyBhbGxv
Y10gaW5pdF0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlU2hhcGVMYXllcjoKLSAgICAgICAgdmlldyA9IGFkb3B0TlMoW1tXS1NoYXBlVmlldyBh
bGxvY10gaW5pdF0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6
TGF5ZXJUeXBlU2Nyb2xsaW5nTGF5ZXI6Ci0gICAgICAgIGlmICghbV9pc0RlYnVnTGF5ZXJUcmVl
SG9zdCkgewotICAgICAgICAgICAgYXV0byBzY3JvbGxWaWV3ID0gYWRvcHROUyhbW1VJU2Nyb2xs
VmlldyBhbGxvY10gaW5pdF0pOwotI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDExMDAwMAotICAgICAgICAgICAgW3Njcm9sbFZpZXcgc2V0Q29udGVudEluc2V0QWRqdXN0
bWVudEJlaGF2aW9yOlVJU2Nyb2xsVmlld0NvbnRlbnRJbnNldEFkanVzdG1lbnROZXZlcl07Ci0j
ZW5kaWYKLSAgICAgICAgICAgIHZpZXcgPSBzY3JvbGxWaWV3OwotICAgICAgICB9IGVsc2UgLy8g
VGhlIGRlYnVnIGluZGljYXRvciBwYXJlbnRzIHZpZXdzIHVuZGVyIGxheWVycywgd2hpY2ggY2Fu
IGNhdXNlIGNyYXNoZXMgd2l0aCBVSVNjcm9sbFZpZXcuCi0gICAgICAgICAgICB2aWV3ID0gYWRv
cHROUyhbW1VJVmlldyBhbGxvY10gaW5pdF0pOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBzZXRMYXllcklE
KFt2aWV3IGxheWVyXSwgcHJvcGVydGllcy5sYXllcklEKTsKLQotICAgIHJldHVybiB2aWV3Lmdl
dCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9SZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDI4ZDM5NTkzNDU0ZTE4NWZiNjZmZTVkZjdkYWI4YjNhMjg2MjA0ZWMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KKysrIC9k
ZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCi0KLSNp
ZiBQTEFURk9STShJT1MpCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLQotI2ltcG9ydCAi
TGF5ZXJSZXByZXNlbnRhdGlvbi5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlSG9zdC5oIgot
I2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0IDxVSUtpdC9VSVZpZXcuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVUcmVlLmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQotI2ltcG9ydCA8V2ViQ29yZS9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Njcm9s
bFR5cGVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGUuaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLXN0YXRpYyBMYXllclJlcHJlc2VudGF0aW9uIGxheWVyUmVwcmVzZW50YXRpb25G
cm9tTGF5ZXJPclZpZXcoTGF5ZXJPclZpZXcgKmxheWVyT3JWaWV3KQotewotICAgIHJldHVybiBM
YXllclJlcHJlc2VudGF0aW9uKGxheWVyT3JWaWV3LmxheWVyKTsKLX0KLQotdm9pZCBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5Ojpjb25uZWN0U3RhdGVOb2RlTGF5ZXJzKFNjcm9sbGlu
Z1N0YXRlVHJlZSYgc3RhdGVUcmVlLCBjb25zdCBSZW1vdGVMYXllclRyZWVIb3N0JiBsYXllclRy
ZWVIb3N0KQotewotICAgIGZvciAoYXV0byYgY3Vyck5vZGUgOiBzdGF0ZVRyZWUubm9kZU1hcCgp
LnZhbHVlcygpKSB7Ci0gICAgICAgIHN3aXRjaCAoY3Vyck5vZGUtPm5vZGVUeXBlKCkpIHsKLSAg
ICAgICAgY2FzZSBPdmVyZmxvd1Njcm9sbGluZ05vZGU6IHsKLSAgICAgICAgICAgIFNjcm9sbGlu
Z1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlJiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3duY2Fz
dDxTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4oKmN1cnJOb2RlKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpCi0gICAgICAgICAgICAgICAg
c2Nyb2xsaW5nU3RhdGVOb2RlLnNldExheWVyKGxheWVyUmVwcmVzZW50YXRpb25Gcm9tTGF5ZXJP
clZpZXcobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKSkp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxlZENvbnRl
bnRzTGF5ZXIpKQotICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5zZXRTY3JvbGxl
ZENvbnRlbnRzTGF5ZXIobGF5ZXJSZXByZXNlbnRhdGlvbkZyb21MYXllck9yVmlldyhsYXllclRy
ZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIo
KSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9OwotICAgICAgICBjYXNlIEZyYW1l
U2Nyb2xsaW5nTm9kZTogewotICAgICAgICAgICAgU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGlu
Z05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVT
Y3JvbGxpbmdOb2RlPigqY3Vyck5vZGUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
c2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6
OlNjcm9sbExheWVyKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxpbmdTdGF0ZU5vZGUuc2V0TGF5
ZXIobGF5ZXJSZXByZXNlbnRhdGlvbkZyb21MYXllck9yVmlldyhsYXllclRyZWVIb3N0LmdldExh
eWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5sYXllcigpKSkpOwotCi0gICAgICAgICAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Ny
b2xsaW5nTm9kZTo6Q291bnRlclNjcm9sbGluZ0xheWVyKSkKLSAgICAgICAgICAgICAgICBzY3Jv
bGxpbmdTdGF0ZU5vZGUuc2V0Q291bnRlclNjcm9sbGluZ0xheWVyKGxheWVyUmVwcmVzZW50YXRp
b25Gcm9tTGF5ZXJPclZpZXcobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdTdGF0ZU5v
ZGUuY291bnRlclNjcm9sbGluZ0xheWVyKCkpKSk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiB3
ZSBzaG91bGQgbmV2ZXIgaGF2ZSBoZWFkZXIgYW5kIGZvb3RlciBsYXllcnMgY29taW5nIGZyb20g
dGhlIFdlYlByb2Nlc3MuCi0gICAgICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0No
YW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6SGVhZGVyTGF5
ZXIpKQotICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5zZXRIZWFkZXJMYXllcihs
YXllclJlcHJlc2VudGF0aW9uRnJvbUxheWVyT3JWaWV3KGxheWVyVHJlZUhvc3QuZ2V0TGF5ZXIo
c2Nyb2xsaW5nU3RhdGVOb2RlLmhlYWRlckxheWVyKCkpKSk7Ci0KLSAgICAgICAgICAgIGlmIChz
Y3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVT
Y3JvbGxpbmdOb2RlOjpGb290ZXJMYXllcikpCi0gICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3Rh
dGVOb2RlLnNldEZvb3RlckxheWVyKGxheWVyUmVwcmVzZW50YXRpb25Gcm9tTGF5ZXJPclZpZXco
bGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdTdGF0ZU5vZGUuZm9vdGVyTGF5ZXIoKSkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRml4ZWROb2Rl
OgotICAgICAgICBjYXNlIFN0aWNreU5vZGU6Ci0gICAgICAgICAgICBpZiAoY3Vyck5vZGUtPmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkKLSAgICAg
ICAgICAgICAgICBjdXJyTm9kZS0+c2V0TGF5ZXIobGF5ZXJSZXByZXNlbnRhdGlvbkZyb21MYXll
ck9yVmlldyhsYXllclRyZWVIb3N0LmdldExheWVyKGN1cnJOb2RlLT5sYXllcigpKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUZsb2F0UmVjdCBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjdXN0b21GaXhlZFBvc2l0aW9uUmVjdCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZVByb3h5LmNvbXB1dGVDdXN0b21GaXhlZFBvc2l0aW9u
UmVjdChtX3dlYlBhZ2VQcm94eS51bm9ic2N1cmVkQ29udGVudFJlY3QoKSwgbV93ZWJQYWdlUHJv
eHkudW5vYnNjdXJlZENvbnRlbnRSZWN0UmVzcGVjdGluZ0lucHV0Vmlld0JvdW5kcygpLCBtX3dl
YlBhZ2VQcm94eS5jdXN0b21GaXhlZFBvc2l0aW9uUmVjdCgpLAotICAgICAgICBtX3dlYlBhZ2VQ
cm94eS5kaXNwbGF5ZWRDb250ZW50U2NhbGUoKSwgRnJhbWVWaWV3OjpMYXlvdXRWaWV3cG9ydENv
bnN0cmFpbnQ6OlVuY29uc3RyYWluZWQsIHZpc3VhbFZpZXdwb3J0RW5hYmxlZCgpKTsKLX0KLQot
dm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpzY3JvbGxpbmdUcmVlTm9kZVdp
bGxTdGFydFBhbkdlc3R1cmUoKQotewotICAgIG1fd2ViUGFnZVByb3h5Lm92ZXJmbG93U2Nyb2xs
Vmlld1dpbGxTdGFydFBhbkdlc3R1cmUoKTsKLX0KLQotdm9pZCBSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5OjpzY3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFNjcm9sbCgpCi17Ci0gICAg
bV93ZWJQYWdlUHJveHkub3ZlcmZsb3dTY3JvbGxXaWxsU3RhcnRTY3JvbGwoKTsKLX0KLSAgICAK
LXZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2Nyb2xsaW5nVHJlZU5vZGVE
aWRFbmRTY3JvbGwoKQotewotICAgIG1fd2ViUGFnZVByb3h5Lm92ZXJmbG93U2Nyb2xsRGlkRW5k
U2Nyb2xsKCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotdm9pZCBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5OjphZGp1c3RUYXJnZXRDb250ZW50T2Zmc2V0Rm9yU25h
cHBpbmcoQ0dTaXplIG1heFNjcm9sbE9mZnNldHMsIENHUG9pbnQgdmVsb2NpdHksIENHRmxvYXQg
dG9wSW5zZXQsIENHUG9pbnQqIHRhcmdldENvbnRlbnRPZmZzZXQpCi17Ci0gICAgLy8gVGhlIGJv
dW5kcyBjaGVja2luZyB3aXRoIG1heFNjcm9sbE9mZnNldHMgaXMgdG8gZW5zdXJlIHRoYXQgd2Ug
d29uJ3QgaW50ZXJmZXJlIHdpdGggcnViYmVyLWJhbmRpbmcgd2hlbiBzY3JvbGxpbmcgdG8gdGhl
IGVkZ2Ugb2YgdGhlIHBhZ2UuCi0gICAgaWYgKHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxp
bmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSkgewotICAgICAgICBmbG9h
dCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNj
cm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHRhcmdldENvbnRl
bnRPZmZzZXQtPngsIHZlbG9jaXR5LngsIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRl
eCk7Ci0gICAgICAgIGlmICh0YXJnZXRDb250ZW50T2Zmc2V0LT54ID4gMCAmJiB0YXJnZXRDb250
ZW50T2Zmc2V0LT54IDwgbWF4U2Nyb2xsT2Zmc2V0cy53aWR0aCkKLSAgICAgICAgICAgIHRhcmdl
dENvbnRlbnRPZmZzZXQtPnggPSBzdGQ6Om1pbjxmbG9hdD4obWF4U2Nyb2xsT2Zmc2V0cy53aWR0
aCwgcG90ZW50aWFsU25hcFBvc2l0aW9uKTsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkU25hcEZv
ck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSkg
ewotICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSBjbG9zZXN0U25hcE9mZnNl
dEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2Fs
LCB0YXJnZXRDb250ZW50T2Zmc2V0LT55LCB2ZWxvY2l0eS55LCBtX2N1cnJlbnRWZXJ0aWNhbFNu
YXBQb2ludEluZGV4KTsKLSAgICAgICAgaWYgKG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5k
ZXggIT0gaW52YWxpZFNuYXBPZmZzZXRJbmRleCkKLSAgICAgICAgICAgIHBvdGVudGlhbFNuYXBQ
b3NpdGlvbiAtPSB0b3BJbnNldDsKLQotICAgICAgICBpZiAodGFyZ2V0Q29udGVudE9mZnNldC0+
eSA+IDAgJiYgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA8IG1heFNjcm9sbE9mZnNldHMuaGVpZ2h0
KQotICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA9IHN0ZDo6bWluPGZsb2F0Piht
YXhTY3JvbGxPZmZzZXRzLmhlaWdodCwgcG90ZW50aWFsU25hcFBvc2l0aW9uKTsKLSAgICB9Ci19
Ci0KLWJvb2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2hvdWxkU2V0U2Nyb2xs
Vmlld0RlY2VsZXJhdGlvblJhdGVGYXN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2hvdWxkU25h
cEZvck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpIHx8IHNo
b3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7
Ci19Ci0KLWJvb2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2hvdWxkU25hcEZv
ck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKLXsKLSAgICBT
Y3JvbGxpbmdUcmVlTm9kZSogcm9vdCA9IG1fc2Nyb2xsaW5nVHJlZS0+cm9vdE5vZGUoKTsKLSAg
ICBpZiAocm9vdCAmJiByb290LT5pc0ZyYW1lU2Nyb2xsaW5nTm9kZSgpKSB7Ci0gICAgICAgIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUqIHJvb3RGcmFtZSA9IHN0YXRpY19jYXN0PFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUqPihyb290KTsKLSAgICAgICAgY29uc3QgVmVj
dG9yPGZsb2F0PiYgc25hcE9mZnNldHMgPSBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbCA/IHJvb3RGcmFtZS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkgOiByb290RnJhbWUtPnZl
cnRpY2FsU25hcE9mZnNldHMoKTsKLSAgICAgICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gYXhp
cyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBtX2N1cnJlbnRIb3Jpem9udGFsU25h
cFBvaW50SW5kZXggOiBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4OwotICAgICAgICBy
ZXR1cm4gc25hcE9mZnNldHMuc2l6ZSgpICYmIChjdXJyZW50SW5kZXggPCBzbmFwT2Zmc2V0cy5z
aXplKCkgfHwgY3VycmVudEluZGV4ID09IGludmFsaWRTbmFwT2Zmc2V0SW5kZXgpOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWZsb2F0IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHk6OmNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFNjcm9sbEV2ZW50
QXhpcyBheGlzLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVuc2ln
bmVkJiBjdXJyZW50SW5kZXgpIGNvbnN0Ci17Ci0gICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHJvb3Qg
PSBtX3Njcm9sbGluZ1RyZWUtPnJvb3ROb2RlKCk7Ci0gICAgQVNTRVJUKHJvb3QgJiYgcm9vdC0+
aXNGcmFtZVNjcm9sbGluZ05vZGUoKSk7Ci0gICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZSogcm9vdEZyYW1lID0gc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZSo+KHJvb3QpOwotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzID0gYXhp
cyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyByb290RnJhbWUtPmhvcml6b250YWxT
bmFwT2Zmc2V0cygpIDogcm9vdEZyYW1lLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7Ci0gICAgY29u
c3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPGZsb2F0Pj4mIHNuYXBPZmZzZXRSYW5nZXMgPSBh
eGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IHJvb3RGcmFtZS0+aG9yaXpvbnRh
bFNuYXBPZmZzZXRSYW5nZXMoKSA6IHJvb3RGcmFtZS0+dmVydGljYWxTbmFwT2Zmc2V0UmFuZ2Vz
KCk7Ci0KLSAgICBmbG9hdCBzY2FsZWRTY3JvbGxEZXN0aW5hdGlvbiA9IHNjcm9sbERlc3RpbmF0
aW9uIC8gbV93ZWJQYWdlUHJveHkuZGlzcGxheWVkQ29udGVudFNjYWxlKCk7Ci0gICAgZmxvYXQg
cmF3Q2xvc2VzdFNuYXBPZmZzZXQgPSBjbG9zZXN0U25hcE9mZnNldChzbmFwT2Zmc2V0cywgc25h
cE9mZnNldFJhbmdlcywgc2NhbGVkU2Nyb2xsRGVzdGluYXRpb24sIHZlbG9jaXR5LCBjdXJyZW50
SW5kZXgpOwotICAgIHJldHVybiByYXdDbG9zZXN0U25hcE9mZnNldCAqIG1fd2ViUGFnZVByb3h5
LmRpc3BsYXllZENvbnRlbnRTY2FsZSgpOwotfQotCi1ib29sIFJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHk6Omhhc0FjdGl2ZVNuYXBQb2ludCgpIGNvbnN0Ci17Ci0gICAgU2Nyb2xsaW5n
VHJlZU5vZGUqIHJvb3QgPSBtX3Njcm9sbGluZ1RyZWUtPnJvb3ROb2RlKCk7Ci0gICAgaWYgKCFy
b290KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWlzPFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGU+KHJvb3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlJiByb290RnJhbWUgPSBkb3duY2FzdDxTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlPigqcm9vdCk7Ci0gICAgY29uc3QgVmVjdG9yPGZs
b2F0PiYgaG9yaXpvbnRhbCA9IHJvb3RGcmFtZS5ob3Jpem9udGFsU25hcE9mZnNldHMoKTsKLSAg
ICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2ZXJ0aWNhbCA9IHJvb3RGcmFtZS52ZXJ0aWNhbFNuYXBP
ZmZzZXRzKCk7Ci0KLSAgICBpZiAoaG9yaXpvbnRhbC5pc0VtcHR5KCkgJiYgdmVydGljYWwuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoKCFob3Jpem9udGFsLmlz
RW1wdHkoKSAmJiBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPj0gaG9yaXpvbnRh
bC5zaXplKCkpCi0gICAgICAgIHx8ICghdmVydGljYWwuaXNFbXB0eSgpICYmIG1fY3VycmVudFZl
cnRpY2FsU25hcFBvaW50SW5kZXggPj0gdmVydGljYWwuc2l6ZSgpKSkgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotICAgIAotQ0dQb2lu
dCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpuZWFyZXN0QWN0aXZlQ29udGVudElu
c2V0QWRqdXN0ZWRTbmFwUG9pbnQoQ0dGbG9hdCB0b3BJbnNldCwgY29uc3QgQ0dQb2ludCYgY3Vy
cmVudFBvaW50KSBjb25zdAotewotICAgIENHUG9pbnQgYWN0aXZlUG9pbnQgPSBjdXJyZW50UG9p
bnQ7Ci0KLSAgICBTY3JvbGxpbmdUcmVlTm9kZSogcm9vdCA9IG1fc2Nyb2xsaW5nVHJlZS0+cm9v
dE5vZGUoKTsKLSAgICBBU1NFUlQocm9vdCAmJiBpczxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlPihyb290KSk7Ci0gICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSYgcm9v
dEZyYW1lID0gZG93bmNhc3Q8U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZT4oKnJvb3Qp
OwotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhvcml6b250YWwgPSByb290RnJhbWUuaG9yaXpv
bnRhbFNuYXBPZmZzZXRzKCk7Ci0gICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmVydGljYWwgPSBy
b290RnJhbWUudmVydGljYWxTbmFwT2Zmc2V0cygpOwotCi0gICAgLy8gVGhlIGJvdW5kcyBjaGVj
a2luZyB3aXRoIG1heFNjcm9sbE9mZnNldHMgaXMgdG8gZW5zdXJlIHRoYXQgd2Ugd29uJ3QgaW50
ZXJmZXJlIHdpdGggcnViYmVyLWJhbmRpbmcgd2hlbiBzY3JvbGxpbmcgdG8gdGhlIGVkZ2Ugb2Yg
dGhlIHBhZ2UuCi0gICAgaWYgKCFob3Jpem9udGFsLmlzRW1wdHkoKSAmJiBtX2N1cnJlbnRIb3Jp
em9udGFsU25hcFBvaW50SW5kZXggPCBob3Jpem9udGFsLnNpemUoKSkKLSAgICAgICAgYWN0aXZl
UG9pbnQueCA9IGhvcml6b250YWxbbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4XSAq
IG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENvbnRlbnRTY2FsZSgpOwotCi0gICAgaWYgKCF2ZXJ0
aWNhbC5pc0VtcHR5KCkgJiYgbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCA8IHZlcnRp
Y2FsLnNpemUoKSkgewotICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSB2ZXJ0
aWNhbFttX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4XSAqIG1fd2ViUGFnZVByb3h5LmRp
c3BsYXllZENvbnRlbnRTY2FsZSgpOwotICAgICAgICBwb3RlbnRpYWxTbmFwUG9zaXRpb24gLT0g
dG9wSW5zZXQ7Ci0gICAgICAgIGFjdGl2ZVBvaW50LnkgPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247
Ci0gICAgfQotCi0gICAgcmV0dXJuIGFjdGl2ZVBvaW50OwotfQotCi0jZW5kaWYKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLQotI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0j
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZDIzMmQxN2ZiZTlkOTcyMzk0YmRlMTU5ZTZjYmI5Y2Q1
ZWUzZjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHku
aAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRlICJSZW1v
dGVMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgot
Ci1PQkpDX0NMQVNTIFdLT25lU2hvdERpc3BsYXlMaW5rSGFuZGxlcjsKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOwotY2xhc3MgUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbjsKLQotY2xhc3MgUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eSBmaW5hbCA6IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5IHsKLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5KFdlYlBhZ2VQ
cm94eSYpOwotICAgIHZpcnR1YWwgflJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkoKTsK
LQotICAgIGNvbnN0IFJlbW90ZUxheWVyVHJlZUhvc3QmIHJlbW90ZUxheWVyVHJlZUhvc3QoKSBj
b25zdCB7IHJldHVybiBtX3JlbW90ZUxheWVyVHJlZUhvc3Q7IH0KLQotICAgIHZvaWQgYWNjZWxl
cmF0ZWRBbmltYXRpb25EaWRTdGFydCh1aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtl
eSwgZG91YmxlIHN0YXJ0VGltZSk7Ci0gICAgdm9pZCBhY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVu
ZCh1aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSk7Ci0KLSAgICB1aW50NjRfdCBu
ZXh0TGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ0xheWVy
VHJlZVRyYW5zYWN0aW9uSUQgKyAxOyB9Ci0gICAgdWludDY0X3QgbGFzdENvbW1pdHRlZExheWVy
VHJlZVRyYW5zYWN0aW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSURGb3JQZW5k
aW5nQ0FDb21taXQ7IH0KLQotICAgIHZvaWQgZGlkUmVmcmVzaERpc3BsYXkoKTsKLSAgICAKLSAg
ICBib29sIGhhc0RlYnVnSW5kaWNhdG9yKCkgY29uc3QgeyByZXR1cm4gISFtX2RlYnVnSW5kaWNh
dG9yTGF5ZXJUcmVlSG9zdDsgfQotCi0gICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQo
KSBjb25zdDsKLQotICAgIExheWVyT3JWaWV3KiBsYXllcldpdGhJREZvclRlc3RpbmcodWludDY0
X3QpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZvaWQgc2l6ZURpZENoYW5nZSgpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpZFVwZGF0ZUdlb21ldHJ5KCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgLy8gRm9yIG5vdywg
YWxsIGNhbGxiYWNrcyBhcmUgY2FsbGVkIGJlZm9yZSBjb21taXR0aW5nIGNoYW5nZXMsIGJlY2F1
c2UgdGhhdCdzIHdoYXQgdGhlIG9ubHkgY2xpZW50IHJlcXVpcmVzLgotICAgIC8vIE9uY2Ugd2Ug
aGF2ZSBvdGhlciBjYWxsYmFja3MsIGl0IG1heSBtYWtlIHNlbnNlIHRvIGhhdmUgYSBiZWZvcmUt
Y29tbWl0L2FmdGVyLWNvbW1pdCBvcHRpb24uCi0gICAgdm9pZCBkaXNwYXRjaEFmdGVyRW5zdXJp
bmdEcmF3aW5nKFdURjo6RnVuY3Rpb248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpIG92
ZXJyaWRlOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgc2V0Vmlld0V4cG9zZWRSZWN0
KHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRSZWN0Pikgb3ZlcnJpZGU7Ci0jZW5kaWYKLQot
ICAgIGZsb2F0IGluZGljYXRvclNjYWxlKFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplKSBj
b25zdDsKLSAgICB2b2lkIHVwZGF0ZURlYnVnSW5kaWNhdG9yKCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB1cGRhdGVEZWJ1Z0luZGljYXRvcihXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwgYm9v
bCByb290TGF5ZXJDaGFuZ2VkLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IHNjcm9sbFBvc2l0aW9uKTsKLSAgICB2b2lkIHVwZGF0ZURlYnVnSW5kaWNhdG9yUG9zaXRpb24o
KTsKLSAgICB2b2lkIGluaXRpYWxpemVEZWJ1Z0luZGljYXRvcigpOwotCi0gICAgdm9pZCB3YWl0
Rm9yRGlkVXBkYXRlQWN0aXZpdHlTdGF0ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlkZUNvbnRl
bnRVbnRpbFBlbmRpbmdVcGRhdGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZGVDb250ZW50VW50
aWxBbnlVcGRhdGUoKSBvdmVycmlkZTsKLSAgICBib29sIGhhc1Zpc2libGVDb250ZW50KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHByZXBhcmVGb3JBcHBTdXNwZW5zaW9uKCkgZmluYWw7
Ci0gICAgCi0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBpbmRpY2F0b3JMb2NhdGlvbigpIGNvbnN0
OwotCi0gICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotCi0gICAgLy8g
TWVzc2FnZSBoYW5kbGVycwotICAgIHZvaWQgd2lsbENvbW1pdExheWVyVHJlZSh1aW50NjRfdCB0
cmFuc2FjdGlvbklEKTsKLSAgICB2b2lkIGNvbW1pdExheWVyVHJlZShjb25zdCBSZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbiYsIGNvbnN0IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNh
Y3Rpb24mKTsKLSAgICAKLSAgICB2b2lkIHNlbmRVcGRhdGVHZW9tZXRyeSgpOwotCi0gICAgUmVt
b3RlTGF5ZXJUcmVlSG9zdCBtX3JlbW90ZUxheWVyVHJlZUhvc3Q7Ci0gICAgYm9vbCBtX2lzV2Fp
dGluZ0ZvckRpZFVwZGF0ZUdlb21ldHJ5IHsgZmFsc2UgfTsKLSAgICBlbnVtIERpZFVwZGF0ZU1l
c3NhZ2VTdGF0ZSB7IERvZXNOb3ROZWVkRGlkVXBkYXRlLCBOZWVkc0RpZFVwZGF0ZSwgTWlzc2Vk
Q29tbWl0IH07Ci0gICAgRGlkVXBkYXRlTWVzc2FnZVN0YXRlIG1fZGlkVXBkYXRlTWVzc2FnZVN0
YXRlIHsgRG9lc05vdE5lZWREaWRVcGRhdGUgfTsKLQotICAgIFdlYkNvcmU6OkludFNpemUgbV9s
YXN0U2VudFNpemU7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTGF5ZXJUcmVlSG9zdD4g
bV9kZWJ1Z0luZGljYXRvckxheWVyVHJlZUhvc3Q7Ci0gICAgUmV0YWluUHRyPENBTGF5ZXI+IG1f
dGlsZU1hcEhvc3RMYXllcjsKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9leHBvc2VkUmVjdElu
ZGljYXRvckxheWVyOwotCi0gICAgdWludDY0X3QgbV9wZW5kaW5nTGF5ZXJUcmVlVHJhbnNhY3Rp
b25JRCB7IDAgfTsKLSAgICB1aW50NjRfdCBtX2xhc3RWaXNpYmxlVHJhbnNhY3Rpb25JRCB7IDAg
fTsKLSAgICB1aW50NjRfdCBtX3RyYW5zYWN0aW9uSURGb3JQZW5kaW5nQ0FDb21taXQgeyAwIH07
Ci0gICAgdWludDY0X3QgbV90cmFuc2FjdGlvbklERm9yVW5oaWRpbmdDb250ZW50IHsgMCB9Owot
Ci0gICAgQ2FsbGJhY2tNYXAgbV9jYWxsYmFja3M7Ci0KLSAgICBSZXRhaW5QdHI8V0tPbmVTaG90
RGlzcGxheUxpbmtIYW5kbGVyPiBtX2Rpc3BsYXlMaW5rSGFuZGxlcjsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RSQVdJTkdfQVJFQV9QUk9Y
WShSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LCBEcmF3aW5nQXJlYVR5cGVSZW1vdGVM
YXllclRyZWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjZmNWFhOTA5Mzk2OTliMDQ0MzAyMWZiODRj
YTY1MjY0N2E2OGNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5IDogRHJhd2luZ0FyZWFQcm94eSB7Ci0gICAgdm9pZCBXaWxs
Q29tbWl0TGF5ZXJUcmVlKHVpbnQ2NF90IHRyYW5zYWN0aW9uSUQpCi0gICAgdm9pZCBDb21taXRM
YXllclRyZWUoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiBsYXllclRyZWVUcmFu
c2FjdGlvbiwgV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uIHNj
cm9sbGluZ1RyZWVUcmFuc2FjdGlvbikKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YjE3ZDFmMGQ2OWEzZjE0YTNiNTRlYTNiMjk4
YzkzM2E1MzI1YjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkubW0KKysrIC9kZXYvbnVsbApAQCAtMSw0ODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5LmgiCi0KLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCAiRHJhd2luZ0FyZWFNZXNzYWdl
cy5oIgotI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIgotI2ltcG9y
dCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oIgotI2ltcG9ydCAiV2Vi
UGFnZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbXBvcnQgPFF1YXJ0
ekNvcmUvUXVhcnR6Q29yZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5o
PgotI2ltcG9ydCA8V2ViQ29yZS9JT1N1cmZhY2VQb29sLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL01h
Y2hTZW5kUmlnaHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXll
ckRlbGVnYXRlLmg+Ci0jaW1wb3J0IDx3dGYvU3lzdGVtVHJhY2luZy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSVBDOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIEZJWE1FOiBNYWMgd2ls
bCBuZWVkIHNvbWV0aGluZyBzaW1pbGFyOyB3ZSBzaG91bGQgZmlndXJlIG91dCBob3cgdG8gc2hh
cmUgdGhpcyB3aXRoIERpc3BsYXlSZWZyZXNoTW9uaXRvciB3aXRob3V0Ci0vLyBicmVha2luZyBX
ZWJLaXQxIGJlaGF2aW9yIG9yIFdlYktpdDItV2ViS2l0MSBjb2V4aXN0ZW5jZS4KLSNpZiBQTEFU
Rk9STShJT1MpCi1AaW50ZXJmYWNlIFdLT25lU2hvdERpc3BsYXlMaW5rSGFuZGxlciA6IE5TT2Jq
ZWN0IHsKLSAgICBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkqIF9kcmF3
aW5nQXJlYVByb3h5OwotICAgIENBRGlzcGxheUxpbmsgKl9kaXNwbGF5TGluazsKLX0KLQotLSAo
aWQpaW5pdFdpdGhEcmF3aW5nQXJlYVByb3h5OihXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHkqKWRyYXdpbmdBcmVhUHJveHk7Ci0tICh2b2lkKWRpc3BsYXlMaW5rRmlyZWQ6
KENBRGlzcGxheUxpbmsgKilzZW5kZXI7Ci0tICh2b2lkKWludmFsaWRhdGU7Ci0tICh2b2lkKXNj
aGVkdWxlOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS09uZVNob3REaXNwbGF5TGlua0hh
bmRsZXIKLQotLSAoaWQpaW5pdFdpdGhEcmF3aW5nQXJlYVByb3h5OihXZWJLaXQ6OlJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHkqKWRyYXdpbmdBcmVhUHJveHkKLXsKLSAgICBpZiAoc2Vs
ZiA9IFtzdXBlciBpbml0XSkgewotICAgICAgICBfZHJhd2luZ0FyZWFQcm94eSA9IGRyYXdpbmdB
cmVhUHJveHk7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCBDQURpc3BsYXlMaW5rIHJldGFpbnMgaXRz
IHRhcmdldCAoc2VsZiksIHNvIGEgY2FsbCB0byAtaW52YWxpZGF0ZSBpcyBuZWVkZWQgb24gdGVh
cmRvd24uCi0gICAgICAgIF9kaXNwbGF5TGluayA9IFtDQURpc3BsYXlMaW5rIGRpc3BsYXlMaW5r
V2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihkaXNwbGF5TGlua0ZpcmVkOildOwot
ICAgICAgICBbX2Rpc3BsYXlMaW5rIGFkZFRvUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29w
XSBmb3JNb2RlOk5TUnVuTG9vcENvbW1vbk1vZGVzXTsKLSAgICAgICAgX2Rpc3BsYXlMaW5rLnBh
dXNlZCA9IFlFUzsKLSAgICAgICAgX2Rpc3BsYXlMaW5rLnByZWZlcnJlZEZyYW1lc1BlclNlY29u
ZCA9IDYwOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17
Ci0gICAgQVNTRVJUKCFfZGlzcGxheUxpbmspOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQot
LSAodm9pZClkaXNwbGF5TGlua0ZpcmVkOihDQURpc3BsYXlMaW5rICopc2VuZGVyCi17Ci0gICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgX2RyYXdpbmdBcmVhUHJveHktPmRpZFJlZnJlc2hE
aXNwbGF5KCk7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZQotewotICAgIFtfZGlzcGxheUxpbmsg
aW52YWxpZGF0ZV07Ci0gICAgX2Rpc3BsYXlMaW5rID0gbnVsbHB0cjsKLX0KLQotLSAodm9pZClz
Y2hlZHVsZQotewotICAgIF9kaXNwbGF5TGluay5wYXVzZWQgPSBOTzsKLX0KLQotLSAodm9pZClw
YXVzZQotewotICAgIF9kaXNwbGF5TGluay5wYXVzZWQgPSBZRVM7Ci19Ci0KLUBlbmQKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eTo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eShXZWJQYWdlUHJveHkmIHdlYlBhZ2VQ
cm94eSkKLSAgICA6IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlUmVtb3RlTGF5ZXJU
cmVlLCB3ZWJQYWdlUHJveHkpCi0gICAgLCBtX3JlbW90ZUxheWVyVHJlZUhvc3QoKnRoaXMpCi0j
aWYgUExBVEZPUk0oSU9TKQotICAgICwgbV9kaXNwbGF5TGlua0hhbmRsZXIoYWRvcHROUyhbW1dL
T25lU2hvdERpc3BsYXlMaW5rSGFuZGxlciBhbGxvY10gaW5pdFdpdGhEcmF3aW5nQXJlYVByb3h5
OnRoaXNdKSkKLSNlbmRpZgotewotI2lmIFVTRShJT1NVUkZBQ0UpCi0gICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byBwb29sIHN1cmZhY2VzIGluIHRoZSBVSSBwcm9jZXNzLgotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgZG8gdGhpcyBzb21ld2hlcmUgZWxzZS4KLSAgICBJT1N1cmZhY2VQb29sOjpzaGFy
ZWRQb29sKCkuc2V0UG9vbFNpemUoMCk7Ci0jZW5kaWYKLQotICAgIG1fd2ViUGFnZVByb3h5LnBy
b2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlE
KCksICp0aGlzKTsKLQotICAgIGlmIChtX3dlYlBhZ2VQcm94eS5wcmVmZXJlbmNlcygpLnRpbGVk
U2Nyb2xsaW5nSW5kaWNhdG9yVmlzaWJsZSgpKQotICAgICAgICBpbml0aWFsaXplRGVidWdJbmRp
Y2F0b3IoKTsKLX0KLQotUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6flJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHkoKQotewotICAgIG1fY2FsbGJhY2tzLmludmFsaWRhdGUo
Q2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7Ci0gICAgbV93ZWJQYWdl
UHJveHkucHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2VQ
cm94eS5wYWdlSUQoKSk7Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgW21fZGlzcGxheUxpbmtI
YW5kbGVyIGludmFsaWRhdGVdOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eTo6c2l6ZURpZENoYW5nZSgpCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2VQcm94
eS5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzV2FpdGluZ0ZvckRp
ZFVwZGF0ZUdlb21ldHJ5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZW5kVXBkYXRlR2VvbWV0
cnkoKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpkZXZpY2VT
Y2FsZUZhY3RvckRpZENoYW5nZSgpCi17Ci0gICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpTZXREZXZpY2VTY2FsZUZhY3RvcihtX3dlYlBhZ2VQ
cm94eS5kZXZpY2VTY2FsZUZhY3RvcigpKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOwotfQot
Ci12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmRpZFVwZGF0ZUdlb21ldHJ5
KCkKLXsKLSAgICBBU1NFUlQobV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVHZW9tZXRyeSk7Ci0KLSAg
ICBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUdlb21ldHJ5ID0gZmFsc2U7Ci0KLSAgICAvLyBJZiB0
aGUgV0tWaWV3IHdhcyByZXNpemVkIHdoaWxlIHdlIHdlcmUgd2FpdGluZyBmb3IgYSBEaWRVcGRh
dGVHZW9tZXRyeSByZXBseSBmcm9tIHRoZSB3ZWIgcHJvY2VzcywKLSAgICAvLyB3ZSBuZWVkIHRv
IHJlc2VuZCB0aGUgbmV3IHNpemUgaGVyZS4KLSAgICBpZiAobV9sYXN0U2VudFNpemUgIT0gbV9z
aXplKQotICAgICAgICBzZW5kVXBkYXRlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5OjpzZW5kVXBkYXRlR2VvbWV0cnkoKQotewotICAgIG1fbGFz
dFNlbnRTaXplID0gbV9zaXplOwotICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpEcmF3aW5nQXJlYTo6VXBkYXRlR2VvbWV0cnkobV9zaXplLCBJbnRTaXplKCksIGZh
bHNlLCBNYWNoU2VuZFJpZ2h0KCkpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7Ci0gICAgbV9p
c1dhaXRpbmdGb3JEaWRVcGRhdGVHZW9tZXRyeSA9IHRydWU7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6d2lsbENvbW1pdExheWVyVHJlZSh1aW50NjRfdCB0cmFu
c2FjdGlvbklEKQotewotICAgIG1fcGVuZGluZ0xheWVyVHJlZVRyYW5zYWN0aW9uSUQgPSB0cmFu
c2FjdGlvbklEOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmNv
bW1pdExheWVyVHJlZShjb25zdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYgbGF5ZXJUcmVl
VHJhbnNhY3Rpb24sIGNvbnN0IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24m
IHNjcm9sbGluZ1RyZWVUcmFuc2FjdGlvbikKLXsKLSAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29w
ZShDb21taXRMYXllclRyZWVTdGFydCwgQ29tbWl0TGF5ZXJUcmVlRW5kKTsKLQotICAgIExPRyhS
ZW1vdGVMYXllclRyZWUsICIlcyIsIGxheWVyVHJlZVRyYW5zYWN0aW9uLmRlc2NyaXB0aW9uKCku
ZGF0YSgpKTsKLSAgICBMT0coUmVtb3RlTGF5ZXJUcmVlLCAiJXMiLCBzY3JvbGxpbmdUcmVlVHJh
bnNhY3Rpb24uZGVzY3JpcHRpb24oKS5kYXRhKCkpOwotCi0gICAgQVNTRVJUKGxheWVyVHJlZVRy
YW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQoKSA9PSBtX2xhc3RWaXNpYmxlVHJhbnNhY3Rpb25JRCAr
IDEpOwotICAgIG1fdHJhbnNhY3Rpb25JREZvclBlbmRpbmdDQUNvbW1pdCA9IGxheWVyVHJlZVRy
YW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQoKTsKLQotICAgIGlmIChsYXllclRyZWVUcmFuc2FjdGlv
bi5oYXNFZGl0b3JTdGF0ZSgpKQotICAgICAgICBtX3dlYlBhZ2VQcm94eS5lZGl0b3JTdGF0ZUNo
YW5nZWQobGF5ZXJUcmVlVHJhbnNhY3Rpb24uZWRpdG9yU3RhdGUoKSk7Ci0KLSAgICBpZiAobV9y
ZW1vdGVMYXllclRyZWVIb3N0LnVwZGF0ZUxheWVyVHJlZShsYXllclRyZWVUcmFuc2FjdGlvbikp
IHsKLSAgICAgICAgaWYgKGxheWVyVHJlZVRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQoKSA+PSBt
X3RyYW5zYWN0aW9uSURGb3JVbmhpZGluZ0NvbnRlbnQpCi0gICAgICAgICAgICBtX3dlYlBhZ2VQ
cm94eS5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKG1fcmVtb3RlTGF5ZXJUcmVl
SG9zdC5yb290TGF5ZXIoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcmVtb3RlTGF5
ZXJUcmVlSG9zdC5kZXRhY2hSb290TGF5ZXIoKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQotICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OlJlcXVlc3Rl
ZFNjcm9sbEluZm8gcmVxdWVzdGVkU2Nyb2xsSW5mbzsKLSAgICBtX3dlYlBhZ2VQcm94eS5zY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5KCktPmNvbW1pdFNjcm9sbGluZ1RyZWVTdGF0ZShzY3JvbGxp
bmdUcmVlVHJhbnNhY3Rpb24sIHJlcXVlc3RlZFNjcm9sbEluZm8pOwotI2VuZGlmCi0KLSAgICBt
X3dlYlBhZ2VQcm94eS5kaWRDb21taXRMYXllclRyZWUobGF5ZXJUcmVlVHJhbnNhY3Rpb24pOwot
Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSNpZiBQTEFURk9STShJT1MpCi0gICAgaWYg
KG1fd2ViUGFnZVByb3h5LnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKS0+aGFzRml4ZWRPclN0
aWNreSgpKSB7Ci0gICAgICAgIC8vIElmIHdlIGdvdCBhIG5ldyBsYXllciBmb3IgYSBmaXhlZCBv
ciBzdGlja3kgbm9kZSwgaXRzIHBvc2l0aW9uIGZyb20gdGhlIFdlYlByb2Nlc3MgaXMgcHJvYmFi
bHkgc3RhbGUuIFdlIG5lZWQgdG8gcmUtcnVuIHRoZSAidmlld3BvcnQiIGNoYW5nZWQgbG9naWMg
dG8gdWRwYXRlIGl0IHdpdGggb3VyIFVJLXNpZGUgc3RhdGUuCi0gICAgICAgIEZsb2F0UmVjdCBj
dXN0b21GaXhlZFBvc2l0aW9uUmVjdCA9IG1fd2ViUGFnZVByb3h5LmNvbXB1dGVDdXN0b21GaXhl
ZFBvc2l0aW9uUmVjdChtX3dlYlBhZ2VQcm94eS51bm9ic2N1cmVkQ29udGVudFJlY3QoKSwgbV93
ZWJQYWdlUHJveHkudW5vYnNjdXJlZENvbnRlbnRSZWN0UmVzcGVjdGluZ0lucHV0Vmlld0JvdW5k
cygpLCBtX3dlYlBhZ2VQcm94eS5jdXN0b21GaXhlZFBvc2l0aW9uUmVjdCgpLCBtX3dlYlBhZ2VQ
cm94eS5kaXNwbGF5ZWRDb250ZW50U2NhbGUoKSwgRnJhbWVWaWV3OjpMYXlvdXRWaWV3cG9ydENv
bnN0cmFpbnQ6OlVuY29uc3RyYWluZWQsIG1fd2ViUGFnZVByb3h5LnNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHkoKS0+dmlzdWFsVmlld3BvcnRFbmFibGVkKCkpOwotICAgICAgICBtX3dlYlBhZ2VQ
cm94eS5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCktPnZpZXdwb3J0Q2hhbmdlZFZpYURlbGVn
YXRlZFNjcm9sbGluZyhtX3dlYlBhZ2VQcm94eS5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCkt
PnJvb3RTY3JvbGxpbmdOb2RlSUQoKSwgY3VzdG9tRml4ZWRQb3NpdGlvblJlY3QsIG1fd2ViUGFn
ZVByb3h5LmRpc3BsYXllZENvbnRlbnRTY2FsZSgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8v
IEhhbmRsZSByZXF1ZXN0ZWQgc2Nyb2xsIHBvc2l0aW9uIHVwZGF0ZXMgZnJvbSB0aGUgc2Nyb2xs
aW5nIHRyZWUgdHJhbnNhY3Rpb24gYWZ0ZXIgZGlkQ29tbWl0TGF5ZXJUcmVlKCkKLSAgICAvLyBo
YXMgdXBkYXRlZCB0aGUgdmlldyBzaXplIGJhc2VkIG9uIHRoZSBjb250ZW50IHNpemUuCi0gICAg
aWYgKHJlcXVlc3RlZFNjcm9sbEluZm8ucmVxdWVzdHNTY3JvbGxQb3NpdGlvblVwZGF0ZSkKLSAg
ICAgICAgbV93ZWJQYWdlUHJveHkucmVxdWVzdFNjcm9sbChyZXF1ZXN0ZWRTY3JvbGxJbmZvLnJl
cXVlc3RlZFNjcm9sbFBvc2l0aW9uLCBsYXllclRyZWVUcmFuc2FjdGlvbi5zY3JvbGxPcmlnaW4o
KSwgcmVxdWVzdGVkU2Nyb2xsSW5mby5yZXF1ZXN0SXNQcm9ncmFtbWF0aWNTY3JvbGwpOwotI2Vu
ZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0KLSAgICBpZiAobV9kZWJ1Z0luZGljYXRv
ckxheWVyVHJlZUhvc3QpIHsKLSAgICAgICAgZmxvYXQgc2NhbGUgPSBpbmRpY2F0b3JTY2FsZShs
YXllclRyZWVUcmFuc2FjdGlvbi5jb250ZW50c1NpemUoKSk7Ci0gICAgICAgIGJvb2wgcm9vdExh
eWVyQ2hhbmdlZCA9IG1fZGVidWdJbmRpY2F0b3JMYXllclRyZWVIb3N0LT51cGRhdGVMYXllclRy
ZWUobGF5ZXJUcmVlVHJhbnNhY3Rpb24sIHNjYWxlKTsKLSAgICAgICAgSW50UG9pbnQgc2Nyb2xs
UG9zaXRpb247Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IGxh
eWVyVHJlZVRyYW5zYWN0aW9uLnNjcm9sbFBvc2l0aW9uKCk7Ci0jZW5kaWYKLSAgICAgICAgdXBk
YXRlRGVidWdJbmRpY2F0b3IobGF5ZXJUcmVlVHJhbnNhY3Rpb24uY29udGVudHNTaXplKCksIHJv
b3RMYXllckNoYW5nZWQsIHNjYWxlLCBzY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIGFzTGF5ZXIo
bV9kZWJ1Z0luZGljYXRvckxheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpKS5uYW1lID0gQCJJbmRp
Y2F0b3IgaG9zdCByb290IjsKLSAgICB9Ci0KLSAgICBtX3dlYlBhZ2VQcm94eS5sYXllclRyZWVD
b21taXRDb21wbGV0ZSgpOwotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIGlmIChzdGQ6OmV4Y2hh
bmdlKG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlLCBOZWVkc0RpZFVwZGF0ZSkgPT0gTWlzc2VkQ29t
bWl0KQotICAgICAgICBkaWRSZWZyZXNoRGlzcGxheSgpOwotICAgIFttX2Rpc3BsYXlMaW5rSGFu
ZGxlciBzY2hlZHVsZV07Ci0jZWxzZQotICAgIG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlID0gTmVl
ZHNEaWRVcGRhdGU7Ci0gICAgZGlkUmVmcmVzaERpc3BsYXkoKTsKLSNlbmRpZgotCi0gICAgaWYg
KGF1dG8gbWlsZXN0b25lcyA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLm5ld2x5UmVhY2hlZExheW91
dE1pbGVzdG9uZXMoKSkKLSAgICAgICAgbV93ZWJQYWdlUHJveHkuZGlkUmVhY2hMYXlvdXRNaWxl
c3RvbmUobWlsZXN0b25lcyk7Ci0KLSAgICBmb3IgKGF1dG8mIGNhbGxiYWNrSUQgOiBsYXllclRy
ZWVUcmFuc2FjdGlvbi5jYWxsYmFja0lEcygpKSB7Ci0gICAgICAgIGlmIChhdXRvIGNhbGxiYWNr
ID0gbV9jYWxsYmFja3MudGFrZTxWb2lkQ2FsbGJhY2s+KGNhbGxiYWNrSUQpKQotICAgICAgICAg
ICAgY2FsbGJhY2stPnBlcmZvcm1DYWxsYmFjaygpOwotICAgIH0KLX0KLQotdm9pZCBSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KHVp
bnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUgc3RhcnRUaW1lKQotewot
ICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6
QWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydChsYXllcklELCBrZXksIHN0YXJ0VGltZSksIG1f
d2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5OjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1aW50NjRfdCBsYXllcklELCBj
b25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6RHJhd2luZ0FyZWE6OkFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKGxheWVySUQs
IGtleSksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKLX0KLQotc3RhdGljIGNvbnN0IGZsb2F0
IGluZGljYXRvckluc2V0ID0gMTA7Ci0KLSNpZiBQTEFURk9STShNQUMpCi12b2lkIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OnNldFZpZXdFeHBvc2VkUmVjdChzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OkZsb2F0UmVjdD4gdmlld0V4cG9zZWRSZWN0KQotewotICAgIERyYXdpbmdBcmVh
UHJveHk6OnNldFZpZXdFeHBvc2VkUmVjdCh2aWV3RXhwb3NlZFJlY3QpOwotICAgIHVwZGF0ZURl
YnVnSW5kaWNhdG9yUG9zaXRpb24oKTsKLX0KLSNlbmRpZgotCi1GbG9hdFBvaW50IFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmluZGljYXRvckxvY2F0aW9uKCkgY29uc3QKLXsKLSAg
ICBpZiAobV93ZWJQYWdlUHJveHkuZGVsZWdhdGVzU2Nyb2xsaW5nKCkpIHsKLSNpZiBQTEFURk9S
TShJT1MpCi0gICAgICAgIEZsb2F0UG9pbnQgdGlsZWRNYXBMb2NhdGlvbiA9IG1fd2ViUGFnZVBy
b3h5LnVub2JzY3VyZWRDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkuZXhwYW5kZWRUbyhGbG9hdFBv
aW50KCkpOwotICAgICAgICB0aWxlZE1hcExvY2F0aW9uID0gdGlsZWRNYXBMb2NhdGlvbi5leHBh
bmRlZFRvKG1fd2ViUGFnZVByb3h5LmV4cG9zZWRDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkpOwot
Ci0gICAgICAgIGZsb2F0IGFic29sdXRlSW5zZXQgPSBpbmRpY2F0b3JJbnNldCAvIG1fd2ViUGFn
ZVByb3h5LmRpc3BsYXllZENvbnRlbnRTY2FsZSgpOwotICAgICAgICB0aWxlZE1hcExvY2F0aW9u
ICs9IEZsb2F0U2l6ZShhYnNvbHV0ZUluc2V0LCBhYnNvbHV0ZUluc2V0KTsKLSNlbHNlCi0gICAg
ICAgIEZsb2F0UG9pbnQgdGlsZWRNYXBMb2NhdGlvbjsKLSAgICAgICAgaWYgKHZpZXdFeHBvc2Vk
UmVjdCgpKQotICAgICAgICAgICAgdGlsZWRNYXBMb2NhdGlvbiA9IHZpZXdFeHBvc2VkUmVjdCgp
LnZhbHVlKCkubG9jYXRpb24oKTsKLQotICAgICAgICB0aWxlZE1hcExvY2F0aW9uICs9IEZsb2F0
U2l6ZShpbmRpY2F0b3JJbnNldCwgaW5kaWNhdG9ySW5zZXQpOwotICAgICAgICBmbG9hdCBzY2Fs
ZSA9IDEgLyBtX3dlYlBhZ2VQcm94eS5wYWdlU2NhbGVGYWN0b3IoKTsKLSAgICAgICAgdGlsZWRN
YXBMb2NhdGlvbi5zY2FsZShzY2FsZSk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHRpbGVkTWFw
TG9jYXRpb247Ci0gICAgfQotICAgIAotICAgIHJldHVybiBGbG9hdFBvaW50KGluZGljYXRvcklu
c2V0LCBpbmRpY2F0b3JJbnNldCArIG1fd2ViUGFnZVByb3h5LnRvcENvbnRlbnRJbnNldCgpKTsK
LX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVEZWJ1Z0lu
ZGljYXRvclBvc2l0aW9uKCkKLXsKLSAgICBpZiAoIW1fdGlsZU1hcEhvc3RMYXllcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgW21fdGlsZU1hcEhvc3RMYXllciBzZXRQb3NpdGlvbjppbmRpY2F0
b3JMb2NhdGlvbigpXTsKLX0KLQotZmxvYXQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eTo6aW5kaWNhdG9yU2NhbGUoSW50U2l6ZSBjb250ZW50c1NpemUpIGNvbnN0Ci17Ci0gICAgLy8g
UGljayBhIGdvb2Qgc2NhbGUuCi0gICAgSW50U2l6ZSB2aWV3U2l6ZSA9IG1fd2ViUGFnZVByb3h5
LnZpZXdTaXplKCk7Ci0KLSAgICBmbG9hdCBzY2FsZSA9IDE7Ci0gICAgaWYgKCFjb250ZW50c1Np
emUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZsb2F0IHdpZHRoU2NhbGUgPSBzdGQ6Om1pbjxmbG9h
dD4oKHZpZXdTaXplLndpZHRoKCkgLSAyICogaW5kaWNhdG9ySW5zZXQpIC8gY29udGVudHNTaXpl
LndpZHRoKCksIDAuMDUpOwotICAgICAgICBzY2FsZSA9IHN0ZDo6bWluKHdpZHRoU2NhbGUsIHN0
YXRpY19jYXN0PGZsb2F0Pih2aWV3U2l6ZS5oZWlnaHQoKSAtIDIgKiBpbmRpY2F0b3JJbnNldCkg
LyBjb250ZW50c1NpemUuaGVpZ2h0KCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2NhbGU7
Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlRGVidWdJ
bmRpY2F0b3IoKQotewotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgYWxzbyB1cGRhdGUgbGl2ZSBp
bmZvcm1hdGlvbiBkdXJpbmcgc2NhbGUuCi0gICAgdXBkYXRlRGVidWdJbmRpY2F0b3JQb3NpdGlv
bigpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZURl
YnVnSW5kaWNhdG9yKEludFNpemUgY29udGVudHNTaXplLCBib29sIHJvb3RMYXllckNoYW5nZWQs
IGZsb2F0IHNjYWxlLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCi17Ci0gICAgLy8g
TWFrZSBzdXJlIHdlJ3JlIHRoZSBsYXN0IHN1YmxheWVyLgotICAgIENBTGF5ZXIgKnJvb3RMYXll
ciA9IGFzTGF5ZXIobV9yZW1vdGVMYXllclRyZWVIb3N0LnJvb3RMYXllcigpKTsKLSAgICBbbV90
aWxlTWFwSG9zdExheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICBbcm9vdExheWVyIGFk
ZFN1YmxheWVyOm1fdGlsZU1hcEhvc3RMYXllci5nZXQoKV07Ci0KLSAgICAvLyBQaWNrIGEgZ29v
ZCBzY2FsZS4KLSAgICBJbnRTaXplIHZpZXdTaXplID0gbV93ZWJQYWdlUHJveHkudmlld1NpemUo
KTsKLQotICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0Qm91bmRzOkZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGNvbnRlbnRzU2l6ZSldOwotICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0UG9zaXRp
b246aW5kaWNhdG9yTG9jYXRpb24oKV07Ci0gICAgW21fdGlsZU1hcEhvc3RMYXllciBzZXRUcmFu
c2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShzY2FsZSwgc2NhbGUsIDEpXTsKLQotICAgIGlm
IChyb290TGF5ZXJDaGFuZ2VkKSB7Ci0gICAgICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0U3Vi
bGF5ZXJzOkBbXV07Ci0gICAgICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgYWRkU3VibGF5ZXI6YXNM
YXllcihtX2RlYnVnSW5kaWNhdG9yTGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpXTsKLSAgICAg
ICAgW21fdGlsZU1hcEhvc3RMYXllciBhZGRTdWJsYXllcjptX2V4cG9zZWRSZWN0SW5kaWNhdG9y
TGF5ZXIuZ2V0KCldOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBmbG9hdCBpbmRpY2F0b3JCb3Jk
ZXJXaWR0aCA9IDE7Ci0gICAgZmxvYXQgY291bnRlclNjYWxlZEJvcmRlciA9IGluZGljYXRvckJv
cmRlcldpZHRoIC8gc2NhbGU7Ci0KLSAgICBbbV9leHBvc2VkUmVjdEluZGljYXRvckxheWVyIHNl
dEJvcmRlcldpZHRoOmNvdW50ZXJTY2FsZWRCb3JkZXJdOwotCi0gICAgaWYgKG1fd2ViUGFnZVBy
b3h5LmRlbGVnYXRlc1Njcm9sbGluZygpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzY2FsZWRFeHBv
c2VkUmVjdDsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIHNjYWxlZEV4cG9zZWRSZWN0ID0g
bV93ZWJQYWdlUHJveHkuZXhwb3NlZENvbnRlbnRSZWN0KCk7Ci0jZWxzZQotICAgICAgICBpZiAo
dmlld0V4cG9zZWRSZWN0KCkpCi0gICAgICAgICAgICBzY2FsZWRFeHBvc2VkUmVjdCA9IHZpZXdF
eHBvc2VkUmVjdCgpLnZhbHVlKCk7Ci0gICAgICAgIGZsb2F0IHNjYWxlID0gMSAvIG1fd2ViUGFn
ZVByb3h5LnBhZ2VTY2FsZUZhY3RvcigpOwotICAgICAgICBzY2FsZWRFeHBvc2VkUmVjdC5zY2Fs
ZShzY2FsZSk7Ci0jZW5kaWYKLSAgICAgICAgW21fZXhwb3NlZFJlY3RJbmRpY2F0b3JMYXllciBz
ZXRQb3NpdGlvbjpzY2FsZWRFeHBvc2VkUmVjdC5sb2NhdGlvbigpXTsKLSAgICAgICAgW21fZXhw
b3NlZFJlY3RJbmRpY2F0b3JMYXllciBzZXRCb3VuZHM6RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
c2NhbGVkRXhwb3NlZFJlY3Quc2l6ZSgpKV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW21fZXhw
b3NlZFJlY3RJbmRpY2F0b3JMYXllciBzZXRQb3NpdGlvbjpzY3JvbGxQb3NpdGlvbl07Ci0gICAg
ICAgIFttX2V4cG9zZWRSZWN0SW5kaWNhdG9yTGF5ZXIgc2V0Qm91bmRzOkZsb2F0UmVjdChGbG9h
dFBvaW50KCksIHZpZXdTaXplKV07Ci0gICAgfQotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHk6OmluaXRpYWxpemVEZWJ1Z0luZGljYXRvcigpCi17Ci0gICAgbV9kZWJ1
Z0luZGljYXRvckxheWVyVHJlZUhvc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbW90ZUxheWVyVHJl
ZUhvc3Q+KCp0aGlzKTsKLSAgICBtX2RlYnVnSW5kaWNhdG9yTGF5ZXJUcmVlSG9zdC0+c2V0SXNE
ZWJ1Z0xheWVyVHJlZUhvc3QodHJ1ZSk7Ci0KLSAgICBtX3RpbGVNYXBIb3N0TGF5ZXIgPSBhZG9w
dE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOwotICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0
TmFtZTpAIlRpbGUgbWFwIGhvc3QiXTsKLSAgICBbbV90aWxlTWFwSG9zdExheWVyIHNldERlbGVn
YXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07Ci0gICAgW21f
dGlsZU1hcEhvc3RMYXllciBzZXRBbmNob3JQb2ludDpDR1BvaW50WmVyb107Ci0gICAgW21fdGls
ZU1hcEhvc3RMYXllciBzZXRPcGFjaXR5OjAuOF07Ci0gICAgW21fdGlsZU1hcEhvc3RMYXllciBz
ZXRNYXNrc1RvQm91bmRzOllFU107Ci0gICAgW21fdGlsZU1hcEhvc3RMYXllciBzZXRCb3JkZXJX
aWR0aDoyXTsKLQotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3Bh
Y2VSZWYoKTsKLSAgICB7Ci0gICAgICAgIGNvbnN0IENHRmxvYXQgY29tcG9uZW50c1tdID0geyAx
LCAxLCAxLCAwLjYgfTsKLSAgICAgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRv
cHRDRihDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UsIGNvbXBvbmVudHMpKTsKLSAgICAgICAgW21f
dGlsZU1hcEhvc3RMYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y29sb3IuZ2V0KCldOwotCi0gICAg
ICAgIGNvbnN0IENHRmxvYXQgYm9yZGVyQ29tcG9uZW50c1tdID0geyAwLCAwLCAwLCAxIH07Ci0g
ICAgICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBib3JkZXJDb2xvciA9IGFkb3B0Q0YoQ0dDb2xv
ckNyZWF0ZShjb2xvclNwYWNlLCBib3JkZXJDb21wb25lbnRzKSk7Ci0gICAgICAgIFttX3RpbGVN
YXBIb3N0TGF5ZXIgc2V0Qm9yZGVyQ29sb3I6Ym9yZGVyQ29sb3IuZ2V0KCldOwotICAgIH0KLSAg
ICAKLSAgICBtX2V4cG9zZWRSZWN0SW5kaWNhdG9yTGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBh
bGxvY10gaW5pdF0pOwotICAgIFttX2V4cG9zZWRSZWN0SW5kaWNhdG9yTGF5ZXIgc2V0RGVsZWdh
dGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKLSAgICBbbV9l
eHBvc2VkUmVjdEluZGljYXRvckxheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRaZXJvXTsKLQot
ICAgIHsKLSAgICAgICAgY29uc3QgQ0dGbG9hdCBjb21wb25lbnRzW10gPSB7IDAsIDEsIDAsIDEg
fTsKLSAgICAgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihDR0NvbG9y
Q3JlYXRlKGNvbG9yU3BhY2UsIGNvbXBvbmVudHMpKTsKLSAgICAgICAgW21fZXhwb3NlZFJlY3RJ
bmRpY2F0b3JMYXllciBzZXRCb3JkZXJDb2xvcjpjb2xvci5nZXQoKV07Ci0gICAgfQotfQotCi12
b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmRpZFJlZnJlc2hEaXNwbGF5KCkK
LXsKLSAgICBpZiAoIW1fd2ViUGFnZVByb3h5LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlICE9IE5lZWRzRGlkVXBkYXRlKSB7Ci0g
ICAgICAgIG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlID0gTWlzc2VkQ29tbWl0OwotI2lmIFBMQVRG
T1JNKElPUykKLSAgICAgICAgW21fZGlzcGxheUxpbmtIYW5kbGVyIHBhdXNlXTsKLSNlbmRpZgot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRl
ID0gRG9lc05vdE5lZWREaWRVcGRhdGU7Ci0KLSAgICAvLyBXYWl0aW5nIGZvciBDQSB0byBjb21t
aXQgaXMgaW5zdWZmaWNpZW50LCBiZWNhdXNlIHRoZSByZW5kZXIgc2VydmVyIGNhbiBzdGlsbCBi
ZQotICAgIC8vIHVzaW5nIG91ciBiYWNraW5nIHN0b3JlLiBXZSBjYW4gaW1wcm92ZSB0aGlzIGJ5
IHdhaXRpbmcgZm9yIHRoZSByZW5kZXIgc2VydmVyIHRvIGNvbW1pdAotICAgIC8vIGlmIHdlIGZp
bmQgQVBJIHRvIGRvIHNvLCBidXQgZm9yIG5vdyB3ZSB3aWxsIG1ha2UgZXh0cmEgYnVmZmVycyBp
ZiBuZWVkIGJlLgotICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpE
cmF3aW5nQXJlYTo6RGlkVXBkYXRlKCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKLQotICAg
IG1fbGFzdFZpc2libGVUcmFuc2FjdGlvbklEID0gbV90cmFuc2FjdGlvbklERm9yUGVuZGluZ0NB
Q29tbWl0OwotCi0gICAgbV93ZWJQYWdlUHJveHkuZGlkVXBkYXRlQWN0aXZpdHlTdGF0ZSgpOwot
fQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OndhaXRGb3JEaWRVcGRh
dGVBY3Rpdml0eVN0YXRlKCkKLXsKLSAgICAvLyBXZSBtdXN0IHNlbmQgdGhlIGRpZFVwZGF0ZSBt
ZXNzYWdlIGJlZm9yZSBibG9ja2luZyBvbiB0aGUgbmV4dCBjb21taXQsIG90aGVyd2lzZQotICAg
IC8vIHdlIGNhbiBiZSBndWFyYW50ZWVkIHRoYXQgdGhlIG5leHQgY29tbWl0IHdvbid0IGNvbWUg
dW50aWwgYWZ0ZXIgdGhlIHdhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5IHRpbWVzIG91dC4K
LSAgICBpZiAobV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUgIT0gRG9lc05vdE5lZWREaWRVcGRhdGUp
Ci0gICAgICAgIGRpZFJlZnJlc2hEaXNwbGF5KCk7Ci0KLSAgICBzdGF0aWMgU2Vjb25kcyBhY3Rp
dml0eVN0YXRlVXBkYXRlVGltZW91dCA9IFtdIHsKLSAgICAgICAgaWYgKGlkIHZhbHVlID0gW1tO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OkAiV2ViS2l0
T3ZlcnJpZGVBY3Rpdml0eVN0YXRlVXBkYXRlVGltZW91dCJdKQotICAgICAgICAgICAgcmV0dXJu
IFNlY29uZHMoW3ZhbHVlIGRvdWJsZVZhbHVlXSk7Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAg
ICAgIHJldHVybiBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKDUwMCk7Ci0jZWxzZQotICAgICAg
ICByZXR1cm4gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygyNTApOwotI2VuZGlmCi0gICAgfSgp
OwotICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmRE
aXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5OjpDb21taXRMYXllclRyZWU+KG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpLCBhY3Rpdml0eVN0
YXRlVXBkYXRlVGltZW91dCwgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZT
eW5jTWVzc2FnZUFycml2ZXMpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHk6OmRpc3BhdGNoQWZ0ZXJFbnN1cmluZ0RyYXdpbmcoV1RGOjpGdW5jdGlvbjx2b2lkIChD
YWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQotewotICAgIGlmICghbV93
ZWJQYWdlUHJveHkuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2FsbGJh
Y2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6RHJhd2lu
Z0FyZWE6OkFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRChtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSwgbnVsbHB0cikpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6aGlkZUNvbnRlbnRVbnRp
bFBlbmRpbmdVcGRhdGUoKQotewotICAgIG1fdHJhbnNhY3Rpb25JREZvclVuaGlkaW5nQ29udGVu
dCA9IG5leHRMYXllclRyZWVUcmFuc2FjdGlvbklEKCk7Ci0gICAgbV9yZW1vdGVMYXllclRyZWVI
b3N0LmRldGFjaFJvb3RMYXllcigpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHk6OmhpZGVDb250ZW50VW50aWxBbnlVcGRhdGUoKQotewotICAgIG1fcmVtb3RlTGF5
ZXJUcmVlSG9zdC5kZXRhY2hSb290TGF5ZXIoKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5OjpwcmVwYXJlRm9yQXBwU3VzcGVuc2lvbigpCi17Ci0gICAgbV9yZW1v
dGVMYXllclRyZWVIb3N0Lm1hcEFsbElPU3VyZmFjZUJhY2tpbmdTdG9yZSgpOwotfQotCi1ib29s
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6Omhhc1Zpc2libGVDb250ZW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9yZW1vdGVMYXllclRyZWVIb3N0LnJvb3RMYXllcigpOwotfQot
Ci1ib29sIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmlzQWx3YXlzT25Mb2dnaW5n
QWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZVByb3h5LmlzQWx3YXlzT25M
b2dnaW5nQWxsb3dlZCgpOwotfQotCi1MYXllck9yVmlldyogUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eTo6bGF5ZXJXaXRoSURGb3JUZXN0aW5nKHVpbnQ2NF90IGxheWVySUQpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcmVtb3RlTGF5ZXJUcmVlSG9zdC5sYXllcldpdGhJREZvclRlc3Rp
bmcobGF5ZXJJRCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVIb3N0LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRhNzExZjhiNTY3ZWY3YmE5YWRiMWRhOTBmNjU2MjFlMjM3OTk3Mzgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZUhvc3QuaAorKysgL2Rldi9udWxsCkBA
IC0xLDg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkxh
eWVyUmVwcmVzZW50YXRpb24uaCIKLSNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
bi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLU9CSkNfQ0xBU1MgQ0FB
bmltYXRpb247Ci1PQkpDX0NMQVNTIFdLQW5pbWF0aW9uRGVsZWdhdGU7Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OwotY2xhc3Mg
V2ViUGFnZVByb3h5OwotCi1jbGFzcyBSZW1vdGVMYXllclRyZWVIb3N0IHsKLXB1YmxpYzoKLSAg
ICBleHBsaWNpdCBSZW1vdGVMYXllclRyZWVIb3N0KFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkmKTsKLSAgICB2aXJ0dWFsIH5SZW1vdGVMYXllclRyZWVIb3N0KCk7Ci0KLSAgICBMYXll
ck9yVmlldyAqZ2V0TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklE
KSBjb25zdDsKLSAgICBMYXllck9yVmlldyAqcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9y
b290TGF5ZXI7IH0KLQotICAgIHN0YXRpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9y
bUxheWVySUQgbGF5ZXJJRChDQUxheWVyKik7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IHJvb3QgbGF5ZXIgY2hhbmdlZC4KLSAgICBib29sIHVwZGF0ZUxheWVyVHJlZShjb25zdCBSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbiYsIGZsb2F0IGluZGljYXRvclNjYWxlRmFjdG9yICA9IDEp
OwotCi0gICAgdm9pZCBzZXRJc0RlYnVnTGF5ZXJUcmVlSG9zdChib29sIGZsYWcpIHsgbV9pc0Rl
YnVnTGF5ZXJUcmVlSG9zdCA9IGZsYWc7IH0KLSAgICBib29sIGlzRGVidWdMYXllclRyZWVIb3N0
KCkgY29uc3QgeyByZXR1cm4gbV9pc0RlYnVnTGF5ZXJUcmVlSG9zdDsgfQotCi0gICAgdHlwZWRl
ZiBIYXNoTWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgUmV0YWlu
UHRyPFdLQW5pbWF0aW9uRGVsZWdhdGU+PiBMYXllckFuaW1hdGlvbkRlbGVnYXRlTWFwOwotICAg
IExheWVyQW5pbWF0aW9uRGVsZWdhdGVNYXAmIGFuaW1hdGlvbkRlbGVnYXRlcygpIHsgcmV0dXJu
IG1fYW5pbWF0aW9uRGVsZWdhdGVzOyB9Ci0KLSAgICB2b2lkIGFuaW1hdGlvbkRpZFN0YXJ0KFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgQ0FBbmltYXRpb24gKiwgZG91
YmxlIHN0YXJ0VGltZSk7Ci0gICAgdm9pZCBhbmltYXRpb25EaWRFbmQoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllcjo6UGxhdGZvcm1MYXllcklELCBDQUFuaW1hdGlvbiAqKTsKLQotICAgIHZvaWQgY2xl
YXJMYXllcnMoKTsKLQotICAgIC8vIERldGFjaCB0aGUgcm9vdCBsYXllcjsgaXQgd2lsbCBiZSBy
ZWF0dGFjaGVkIHVwb24gdGhlIG5leHQgaW5jb21pbmcgY29tbWl0LgotICAgIHZvaWQgZGV0YWNo
Um9vdExheWVyKCk7Ci0KLSAgICAvLyBUdXJuIGFsbCBDQU1hY2hQb3J0IG9iamVjdHMgaW4gbGF5
ZXIgY29udGVudHMgaW50byBhY3R1YWwgSU9TdXJmYWNlcy4KLSAgICAvLyBUaGlzIGF2b2lkcyBr
ZWVwaW5nIGFuIG91dHN0YW5kaW5nIEluVXNlIHJlZmVyZW5jZSB3aGVuIHN1c3BlbmRlZC4KLSAg
ICB2b2lkIG1hcEFsbElPU3VyZmFjZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgTGF5ZXJPclZpZXcq
IGxheWVyV2l0aElERm9yVGVzdGluZyh1aW50NjRfdCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
TGF5ZXJPclZpZXcgKmNyZWF0ZUxheWVyKGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
OjpMYXllckNyZWF0aW9uUHJvcGVydGllcyYsIGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uOjpMYXllclByb3BlcnRpZXMqKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRMYXllcklEKENBTGF5
ZXIgKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEKTsKLQotICAgIHZv
aWQgbGF5ZXJXaWxsQmVSZW1vdmVkKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5
ZXJJRCk7Ci0KLSAgICBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5JiBtX2RyYXdpbmdB
cmVhOwotICAgIExheWVyT3JWaWV3ICptX3Jvb3RMYXllcjsKLSAgICBIYXNoTWFwPFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgUmV0YWluUHRyPExheWVyT3JWaWV3Pj4g
bV9sYXllcnM7Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQsIFJldGFpblB0cjxXS0FuaW1hdGlvbkRlbGVnYXRlPj4gbV9hbmltYXRpb25EZWxlZ2F0
ZXM7Ci0gICAgYm9vbCBtX2lzRGVidWdMYXllclRyZWVIb3N0OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3Rl
TGF5ZXJUcmVlSG9zdC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXll
clRyZWVIb3N0Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzNmNGRjOTliZjQ0
M2EwOTA5ODdkNTkxYjM4OTQ4NDliZDcxNmI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXll
clRyZWVIb3N0Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzEzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZUhvc3QuaCIKLQot
I2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLmgiCi0jaW1w
b3J0ICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIgotI2ltcG9ydCAiU2hhcmVhYmxlQml0
bWFwLmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NQcm94
eS5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dENHLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0lPU3VyZmFjZS5oPgotI2lt
cG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUxheWVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkFjdGlv
bkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZS5oPgotI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJm
YWNlLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KLQotI2lmIFBM
QVRGT1JNKElPUykKLSNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgotI2VuZGlmCi0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI2RlZmluZSBSRUxFQVNF
X0xPR19JRl9BTExPV0VEKC4uLikgUkVMRUFTRV9MT0dfSUYobV9kcmF3aW5nQXJlYS5pc0Fsd2F5
c09uTG9nZ2luZ0FsbG93ZWQoKSwgVmlld1N0YXRlLCBfX1ZBX0FSR1NfXykKLQotUmVtb3RlTGF5
ZXJUcmVlSG9zdDo6UmVtb3RlTGF5ZXJUcmVlSG9zdChSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5JiBkcmF3aW5nQXJlYSkKLSAgICA6IG1fZHJhd2luZ0FyZWEoZHJhd2luZ0FyZWEpCi0g
ICAgLCBtX3Jvb3RMYXllcihudWxscHRyKQotICAgICwgbV9pc0RlYnVnTGF5ZXJUcmVlSG9zdChm
YWxzZSkKLXsKLX0KLQotUmVtb3RlTGF5ZXJUcmVlSG9zdDo6flJlbW90ZUxheWVyVHJlZUhvc3Qo
KQotewotICAgIGZvciAoYXV0byYgZGVsZWdhdGUgOiBtX2FuaW1hdGlvbkRlbGVnYXRlcy52YWx1
ZXMoKSkKLSAgICAgICAgW2RlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOwotCi0gICAgY2xlYXJM
YXllcnMoKTsKLX0KLQotYm9vbCBSZW1vdGVMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllclRyZWUo
Y29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBmbG9hdCBpbmRp
Y2F0b3JTY2FsZUZhY3RvcikKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNyZWF0ZWRMYXllciA6
IHRyYW5zYWN0aW9uLmNyZWF0ZWRMYXllcnMoKSkgewotICAgICAgICBjb25zdCBSZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzID0gdHJhbnNhY3Rp
b24uY2hhbmdlZExheWVyUHJvcGVydGllcygpLmdldChjcmVhdGVkTGF5ZXIubGF5ZXJJRCk7Ci0g
ICAgICAgIGNyZWF0ZUxheWVyKGNyZWF0ZWRMYXllciwgcHJvcGVydGllcyk7Ci0gICAgfQotCi0g
ICAgYm9vbCByb290TGF5ZXJDaGFuZ2VkID0gZmFsc2U7Ci0gICAgTGF5ZXJPclZpZXcgKnJvb3RM
YXllciA9IGdldExheWVyKHRyYW5zYWN0aW9uLnJvb3RMYXllcklEKCkpOwotICAgIAotICAgIGlm
ICghcm9vdExheWVyKQotICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCBSZW1vdGVM
YXllclRyZWVIb3N0Ojp1cGRhdGVMYXllclRyZWUgLSBmYWlsZWQgdG8gZmluZCByb290IGxheWVy
IHdpdGggSUQgJWxsdSIsIHRoaXMsIHRyYW5zYWN0aW9uLnJvb3RMYXllcklEKCkpOwotCi0gICAg
aWYgKG1fcm9vdExheWVyICE9IHJvb3RMYXllcikgewotICAgICAgICBtX3Jvb3RMYXllciA9IHJv
b3RMYXllcjsKLSAgICAgICAgcm9vdExheWVyQ2hhbmdlZCA9IHRydWU7Ci0gICAgfQotCi0gICAg
dHlwZWRlZiBzdGQ6OnBhaXI8R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklELCBHcmFwaGlj
c0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IExheWVySURQYWlyOwotICAgIFZlY3RvcjxMYXllcklE
UGFpcj4gY2xvbmVzVG9VcGRhdGU7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8gQ2FuJ3Qg
dXNlIHRoZSBpT1MgY29kZSBvbiBtYWNPUyB5ZXQ6IHJkYXI6Ly9wcm9ibGVtLzMxMjQ3NzMwCi0g
ICAgYXV0byBsYXllckNvbnRlbnRzVHlwZSA9IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpMYXll
ckNvbnRlbnRzVHlwZTo6SU9TdXJmYWNlOwotI2Vsc2UKLSAgICBhdXRvIGxheWVyQ29udGVudHNU
eXBlID0gbV9kcmF3aW5nQXJlYS5oYXNEZWJ1Z0luZGljYXRvcigpID8gUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmU6OkxheWVyQ29udGVudHNUeXBlOjpJT1N1cmZhY2UgOiBSZW1vdGVMYXllckJhY2tp
bmdTdG9yZTo6TGF5ZXJDb250ZW50c1R5cGU6OkNBTWFjaFBvcnQ7Ci0jZW5kaWYKLSAgICAKLSAg
ICBmb3IgKGF1dG8mIGNoYW5nZWRMYXllciA6IHRyYW5zYWN0aW9uLmNoYW5nZWRMYXllclByb3Bl
cnRpZXMoKSkgewotICAgICAgICBhdXRvIGxheWVySUQgPSBjaGFuZ2VkTGF5ZXIua2V5OwotICAg
ICAgICBjb25zdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzJiBw
cm9wZXJ0aWVzID0gKmNoYW5nZWRMYXllci52YWx1ZTsKLQotICAgICAgICBMYXllck9yVmlldyAq
bGF5ZXIgPSBnZXRMYXllcihsYXllcklEKTsKLSAgICAgICAgQVNTRVJUKGxheWVyKTsKLQotICAg
ICAgICBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXI6OlJlbGF0ZWRMYXllck1hcCByZWxh
dGVkTGF5ZXJzOwotICAgICAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpDaGlsZHJlbkNoYW5nZWQpIHsKLSAgICAgICAgICAg
IGZvciAoYXV0byYgY2hpbGQgOiBwcm9wZXJ0aWVzLmNoaWxkcmVuKQotICAgICAgICAgICAgICAg
IHJlbGF0ZWRMYXllcnMuc2V0KGNoaWxkLCBnZXRMYXllcihjaGlsZCkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6TWFza0xheWVyQ2hhbmdlZCAmJiBwcm9wZXJ0aWVzLm1hc2tMYXllcklE
KQotICAgICAgICAgICAgcmVsYXRlZExheWVycy5zZXQocHJvcGVydGllcy5tYXNrTGF5ZXJJRCwg
Z2V0TGF5ZXIocHJvcGVydGllcy5tYXNrTGF5ZXJJRCkpOwotCi0gICAgICAgIGlmIChwcm9wZXJ0
aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNsb25l
ZENvbnRlbnRzQ2hhbmdlZCAmJiBwcm9wZXJ0aWVzLmNsb25lZExheWVySUQpCi0gICAgICAgICAg
ICBjbG9uZXNUb1VwZGF0ZS5hcHBlbmQoTGF5ZXJJRFBhaXIobGF5ZXJJRCwgcHJvcGVydGllcy5j
bG9uZWRMYXllcklEKSk7Ci0KLSAgICAgICAgaWYgKG1faXNEZWJ1Z0xheWVyVHJlZUhvc3QpIHsK
LSAgICAgICAgICAgIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllcjo6YXBwbHlQcm9wZXJ0
aWVzKGxheWVyLCB0aGlzLCBwcm9wZXJ0aWVzLCByZWxhdGVkTGF5ZXJzLCBsYXllckNvbnRlbnRz
VHlwZSk7Ci0KLSAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYg
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkJvcmRlcldpZHRoQ2hhbmdlZCkKLSAgICAgICAg
ICAgICAgICBhc0xheWVyKGxheWVyKS5ib3JkZXJXaWR0aCA9IHByb3BlcnRpZXMuYm9yZGVyV2lk
dGggLyBpbmRpY2F0b3JTY2FsZUZhY3RvcjsKLSAgICAgICAgICAgIGFzTGF5ZXIobGF5ZXIpLm1h
c2tzVG9Cb3VuZHMgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBSZW1vdGVM
YXllclRyZWVQcm9wZXJ0eUFwcGxpZXI6OmFwcGx5UHJvcGVydGllcyhsYXllciwgdGhpcywgcHJv
cGVydGllcywgcmVsYXRlZExheWVycywgbGF5ZXJDb250ZW50c1R5cGUpOwotICAgIH0KLSAgICAK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGxheWVyUGFpciA6IGNsb25lc1RvVXBkYXRlKSB7Ci0gICAg
ICAgIExheWVyT3JWaWV3ICpsYXllciA9IGdldExheWVyKGxheWVyUGFpci5maXJzdCk7Ci0gICAg
ICAgIExheWVyT3JWaWV3ICpjbG9uZWRMYXllciA9IGdldExheWVyKGxheWVyUGFpci5zZWNvbmQp
OwotICAgICAgICBhc0xheWVyKGxheWVyKS5jb250ZW50cyA9IGFzTGF5ZXIoY2xvbmVkTGF5ZXIp
LmNvbnRlbnRzOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgZGVzdHJveWVkTGF5ZXIgOiB0cmFu
c2FjdGlvbi5kZXN0cm95ZWRMYXllcnMoKSkKLSAgICAgICAgbGF5ZXJXaWxsQmVSZW1vdmVkKGRl
c3Ryb3llZExheWVyKTsKLQotICAgIC8vIERyb3AgdGhlIGNvbnRlbnRzIG9mIGFueSBsYXllcnMg
d2hpY2ggd2VyZSB1bnBhcmVudGVkOyB0aGUgV2ViIHByb2Nlc3Mgd2lsbCByZS1zZW5kCi0gICAg
Ly8gdGhlIGJhY2tpbmcgc3RvcmUgaW4gdGhlIGNvbW1pdCB0aGF0IHJlcGFyZW50cyB0aGVtLgot
ICAgIGZvciAoYXV0byYgbmV3bHlVbnJlYWNoYWJsZUxheWVySUQgOiB0cmFuc2FjdGlvbi5sYXll
cklEc1dpdGhOZXdseVVucmVhY2hhYmxlQmFja2luZ1N0b3JlKCkpCi0gICAgICAgIGFzTGF5ZXIo
Z2V0TGF5ZXIobmV3bHlVbnJlYWNoYWJsZUxheWVySUQpKS5jb250ZW50cyA9IG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gcm9vdExheWVyQ2hhbmdlZDsKLX0KLQotTGF5ZXJPclZpZXcgKlJlbW90ZUxh
eWVyVHJlZUhvc3Q6OmdldExheWVyKEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXll
cklEKSBjb25zdAotewotICAgIGlmICghbGF5ZXJJRCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIHJldHVybiBtX2xheWVycy5nZXQobGF5ZXJJRCkuZ2V0KCk7Ci19Ci0KLXZvaWQgUmVtb3Rl
TGF5ZXJUcmVlSG9zdDo6bGF5ZXJXaWxsQmVSZW1vdmVkKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6
OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklEKQotewotICAgIGF1dG8gaXRlciA9IG1fYW5pbWF0aW9u
RGVsZWdhdGVzLmZpbmQobGF5ZXJJRCk7Ci0gICAgaWYgKGl0ZXIgIT0gbV9hbmltYXRpb25EZWxl
Z2F0ZXMuZW5kKCkpIHsKLSAgICAgICAgW2l0ZXItPnZhbHVlIGludmFsaWRhdGVdOwotICAgICAg
ICBtX2FuaW1hdGlvbkRlbGVnYXRlcy5yZW1vdmUoaXRlcik7Ci0gICAgfQotICAgIG1fbGF5ZXJz
LnJlbW92ZShsYXllcklEKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVIb3N0OjphbmltYXRp
b25EaWRTdGFydChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbGF5ZXJJ
RCwgQ0FBbmltYXRpb24gKmFuaW1hdGlvbiwgZG91YmxlIHN0YXJ0VGltZSkKLXsKLSAgICBDQUxh
eWVyICpsYXllciA9IGFzTGF5ZXIoZ2V0TGF5ZXIobGF5ZXJJRCkpOwotICAgIGlmICghbGF5ZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBhbmltYXRpb25LZXk7Ci0gICAgZm9yIChO
U1N0cmluZyAqa2V5IGluIFtsYXllciBhbmltYXRpb25LZXlzXSkgewotICAgICAgICBpZiAoW2xh
eWVyIGFuaW1hdGlvbkZvcktleTprZXldID09IGFuaW1hdGlvbikgewotICAgICAgICAgICAgYW5p
bWF0aW9uS2V5ID0ga2V5OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoIWFuaW1hdGlvbktleS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZHJhd2luZ0FyZWEu
YWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydChsYXllcklELCBhbmltYXRpb25LZXksIHN0YXJ0
VGltZSk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlSG9zdDo6YW5pbWF0aW9uRGlkRW5kKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklELCBDQUFuaW1hdGlv
biAqYW5pbWF0aW9uKQotewotICAgIENBTGF5ZXIgKmxheWVyID0gYXNMYXllcihnZXRMYXllcihs
YXllcklEKSk7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5n
IGFuaW1hdGlvbktleTsKLSAgICBmb3IgKE5TU3RyaW5nICprZXkgaW4gW2xheWVyIGFuaW1hdGlv
bktleXNdKSB7Ci0gICAgICAgIGlmIChbbGF5ZXIgYW5pbWF0aW9uRm9yS2V5OmtleV0gPT0gYW5p
bWF0aW9uKSB7Ci0gICAgICAgICAgICBhbmltYXRpb25LZXkgPSBrZXk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghYW5pbWF0aW9uS2V5LmlzRW1wdHko
KSkKLSAgICAgICAgbV9kcmF3aW5nQXJlYS5hY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZChsYXll
cklELCBhbmltYXRpb25LZXkpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZUhvc3Q6OmNsZWFy
TGF5ZXJzKCkKLXsKLSAgICBmb3IgKGF1dG8mIGlkTGF5ZXIgOiBtX2xheWVycykgewotICAgICAg
ICBtX2FuaW1hdGlvbkRlbGVnYXRlcy5yZW1vdmUoaWRMYXllci5rZXkpOwotI2lmIFBMQVRGT1JN
KElPUykKLSAgICAgICAgW2lkTGF5ZXIudmFsdWUuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVydmlld107
Ci0jZWxzZQotICAgICAgICBbYXNMYXllcihpZExheWVyLnZhbHVlLmdldCgpKSByZW1vdmVGcm9t
U3VwZXJsYXllcl07Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBtX2xheWVycy5jbGVhcigpOwotICAg
IG1fcm9vdExheWVyID0gbnVsbHB0cjsKLX0KLQotTGF5ZXJPclZpZXcqIFJlbW90ZUxheWVyVHJl
ZUhvc3Q6OmxheWVyV2l0aElERm9yVGVzdGluZyh1aW50NjRfdCBsYXllcklEKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRMYXllcihsYXllcklEKTsKLX0KLQotc3RhdGljIE5TU3RyaW5nKiBjb25z
dCBXS0xheWVySURQcm9wZXJ0eUtleSA9IEAiV0tMYXllcklEIjsKLQotdm9pZCBSZW1vdGVMYXll
clRyZWVIb3N0OjpzZXRMYXllcklEKENBTGF5ZXIgKmxheWVyLCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyOjpQbGF0Zm9ybUxheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBbbGF5ZXIgc2V0VmFsdWU6W05T
TnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZExvbmdMb25nOmxheWVySURdIGZvcktleTpXS0xheWVy
SURQcm9wZXJ0eUtleV07Ci19Ci0KLVdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5
ZXJJRCBSZW1vdGVMYXllclRyZWVIb3N0OjpsYXllcklEKENBTGF5ZXIqIGxheWVyKQotewotICAg
IHJldHVybiBbW2xheWVyIHZhbHVlRm9yS2V5OldLTGF5ZXJJRFByb3BlcnR5S2V5XSB1bnNpZ25l
ZExvbmdMb25nVmFsdWVdOwotfQotCi0jaWYgIVBMQVRGT1JNKElPUykKLUxheWVyT3JWaWV3ICpS
ZW1vdGVMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllcihjb25zdCBSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbjo6TGF5ZXJDcmVhdGlvblByb3BlcnRpZXMmIHByb3BlcnRpZXMsIGNvbnN0IFJlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXMqKQotewotICAgIFJldGFpblB0
cjxDQUxheWVyPiYgbGF5ZXIgPSBtX2xheWVycy5hZGQocHJvcGVydGllcy5sYXllcklELCBudWxs
cHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0KLSAgICBBU1NFUlQoIWxheWVyKTsKLQotICAgIHN3aXRj
aCAocHJvcGVydGllcy50eXBlKSB7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZUxheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVXZWJMYXllcjoKLSAg
ICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlUm9vdExheWVyOgotICAgIGNhc2UgUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGVTaW1wbGVMYXllcjoKLSAgICBjYXNlIFBsYXRmb3JtQ0FM
YXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXI6Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZVBhZ2VUaWxlZEJhY2tpbmdMYXllcjoKLSAgICBjYXNlIFBsYXRmb3JtQ0FM
YXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVyOgotICAgIGNhc2UgUGxhdGZvcm1D
QUxheWVyOjpMYXllclR5cGVTY3JvbGxpbmdMYXllcjoKLSAgICAgICAgbGF5ZXIgPSBhZG9wdE5T
KFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRm
b3JtQ0FMYXllcjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXI6Ci0gICAgICAgIGxheWVyID0gYWRv
cHROUyhbW0NBVHJhbnNmb3JtTGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUJhY2tkcm9wTGF5ZXI6Ci0gICAgY2Fz
ZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxpZ2h0U3lzdGVtQmFja2Ryb3BMYXllcjoKLSAg
ICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlRGFya1N5c3RlbUJhY2tkcm9wTGF5ZXI6
Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgbGF5ZXIgPSBhZG9wdE5TKFtb
Q0FCYWNrZHJvcExheWVyIGFsbG9jXSBpbml0XSk7Ci0jZWxzZQotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgbGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5p
dF0pOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpM
YXllclR5cGVDdXN0b206Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUFWUGxh
eWVyTGF5ZXI6Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUNvbnRlbnRzUHJv
dmlkZWRMYXllcjoKLSAgICAgICAgaWYgKCFtX2lzRGVidWdMYXllclRyZWVIb3N0KQotICAgICAg
ICAgICAgbGF5ZXIgPSBXS01ha2VSZW5kZXJMYXllcihwcm9wZXJ0aWVzLmhvc3RpbmdDb250ZXh0
SUQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsYXllciA9IGFkb3B0TlMoW1tDQUxheWVy
IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGVTaGFwZUxheWVyOgotICAgICAgICBsYXllciA9IGFkb3B0TlMoW1tDQVNoYXBl
TGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgW2xheWVyIHNldERlbGVnYXRl
OltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07Ci0gICAgc2V0TGF5
ZXJJRChsYXllci5nZXQoKSwgcHJvcGVydGllcy5sYXllcklEKTsKLQotICAgIHJldHVybiBsYXll
ci5nZXQoKTsKLX0KLSNlbmRpZgotCi12b2lkIFJlbW90ZUxheWVyVHJlZUhvc3Q6OmRldGFjaFJv
b3RMYXllcigpCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIFttX3Jvb3RMYXllciByZW1vdmVG
cm9tU3VwZXJ2aWV3XTsKLSNlbHNlCi0gICAgW2FzTGF5ZXIobV9yb290TGF5ZXIpIHJlbW92ZUZy
b21TdXBlcmxheWVyXTsKLSNlbmRpZgotICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKLX0KLQot
I2lmIFVTRShJT1NVUkZBQ0UpCi1zdGF0aWMgdm9pZCByZWN1cnNpdmVseU1hcElPU3VyZmFjZUJh
Y2tpbmdTdG9yZShDQUxheWVyICpsYXllcikKLXsKLSAgICBpZiAobGF5ZXIuY29udGVudHMgJiYg
Q0ZHZXRUeXBlSUQobGF5ZXIuY29udGVudHMpID09IENBTWFjaFBvcnRHZXRUeXBlSUQoKSkgewot
ICAgICAgICBNYWNoU2VuZFJpZ2h0IHBvcnQgPSBNYWNoU2VuZFJpZ2h0OjpjcmVhdGUoQ0FNYWNo
UG9ydEdldFBvcnQoKENBTWFjaFBvcnRSZWYpbGF5ZXIuY29udGVudHMpKTsKLSAgICAgICAgYXV0
byBzdXJmYWNlID0gV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGVGcm9tU2VuZFJpZ2h0KFdURk1v
dmUocG9ydCksIHNSR0JDb2xvclNwYWNlUmVmKCkpOwotICAgICAgICBsYXllci5jb250ZW50cyA9
IHN1cmZhY2UgPyBzdXJmYWNlLT5hc0xheWVyQ29udGVudHMoKSA6IG5pbDsKLSAgICB9Ci0KLSAg
ICBmb3IgKENBTGF5ZXIgKnN1YmxheWVyIGluIGxheWVyLnN1YmxheWVycykKLSAgICAgICAgcmVj
dXJzaXZlbHlNYXBJT1N1cmZhY2VCYWNraW5nU3RvcmUoc3VibGF5ZXIpOwotfQotI2VuZGlmCi0K
LXZvaWQgUmVtb3RlTGF5ZXJUcmVlSG9zdDo6bWFwQWxsSU9TdXJmYWNlQmFja2luZ1N0b3JlKCkK
LXsKLSNpZiBVU0UoSU9TVVJGQUNFKQotICAgIHJlY3Vyc2l2ZWx5TWFwSU9TdXJmYWNlQmFja2lu
Z1N0b3JlKGFzTGF5ZXIobV9yb290TGF5ZXIpKTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGRkZjMwOTMxZjc4N2JlYzI5MzEyMmZiNmRmNjAyODRkMjdmNGE5NjkuLjI2NzAz
MDkxMDQ4NWFhYzU0ZmRiMjY5OGIxN2JjY2MzMjllYTdmZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI2OSw5ICsyMjY5LDkgQEAK
IAkJMDg5QzE2NjdGRTg0MTE1OEMwMkFBQzA3IC8qIEVuZ2xpc2ggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBs
aXN0LnN0cmluZ3M7IG5hbWUgPSBFbmdsaXNoOyBwYXRoID0gRW5nbGlzaC5scHJvai9JbmZvUGxp
c3Quc3RyaW5nczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwOENGNTExRDYzQzEz
QTAwQjQ4REYxIC8qIFdLRm9ybVNlbGVjdFBpY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXS0Zvcm1TZWxlY3RQaWNrZXIuaDsgcGF0aCA9IGlvcy9mb3Jtcy9XS0Zvcm1T
ZWxlY3RQaWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwOENGNTMxRDYz
QzE0MDAwQjQ4REYxIC8qIFdLRm9ybVNlbGVjdFBvcG92ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV0tGb3JtU2VsZWN0UG9wb3Zlci5oOyBwYXRoID0gaW9zL2Zvcm1zL1dL
Rm9ybVNlbGVjdFBvcG92ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwQzM2
NTcxOEMwNTFCQTAwRjYwN0Q3IC8qIFJlbW90ZUxheWVyVHJlZUhvc3RJT1MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBSZW1vdGVMYXllclRyZWVIb3N0SU9TLm1t
OyBwYXRoID0gaW9zL1JlbW90ZUxheWVyVHJlZUhvc3RJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMEMzNjU3MThDMDUxQkEwMEY2MDdENyAvKiBSZW1vdGVMYXllclRyZWVI
b3N0SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVtb3Rl
TGF5ZXJUcmVlSG9zdElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQzM2
NTkxOEMwNTU1ODAwRjYwN0Q3IC8qIExheWVyUmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gTGF5ZXJSZXByZXNlbnRhdGlvbi5oOyBwYXRoID0gVUlQcm9j
ZXNzL0NvY29hL0xheWVyUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09U
OyB9OwotCQkwRjBDMzY1QjE4QzA1Q0ExMDBGNjA3RDcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW07IHBhdGggPSBpb3MvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQzM2NUIxOEMwNUNBMTAwRjYwN0Q3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHlJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBS
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjBDMzY1RDE4QzExMEE1MDBGNjA3RDcgLyogTGF5ZXJSZXByZXNlbnRhdGlv
bi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IExheWVyUmVwcmVz
ZW50YXRpb24ubW07IHBhdGggPSBpb3MvTGF5ZXJSZXByZXNlbnRhdGlvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNzRBQTIxNDJBNENCNjAwMzkyNTBGIC8qIEFQSUdlb21l
dHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUdlb21ldHJ5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTc0QUE2MTQyQUFDNjEwMDM5MjUwRiAvKiBX
S0dlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLR2Vv
bWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI4MCwxMCArMjI4MCwx
MCBAQAogCQkwRjU5NDc4RDE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1OTQ3OEUxODdC
M0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2VzLmluICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2Vz
LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDc4RjE4N0IzQjNBMDA0Mzc4
NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY1OTQ3OTQxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHA7IHBhdGggPSBT
Y3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGNTk0Nzk1MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaDsgcGF0aCA9IFNjcm9sbGluZy9SZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGNTk0Nzk2MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdUcmVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlbW90ZVNjcm9sbGluZ1RyZWUu
Y3BwOyBwYXRoID0gU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ1RyZWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjU5NDc5NzE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Ny
b2xsaW5nVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZW1vdGVTY3Jv
bGxpbmdUcmVlLmg7IHBhdGggPSBTY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nVHJlZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU5NDc5NDE4N0IzQjYwMDA0Mzc4NTcgLyogUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1OTQ3OTUxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjU5NDc5NjE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5n
VHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVTY3Jv
bGxpbmdUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1OTQ3OTcxODdC
M0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ1RyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3RlU2Nyb2xsaW5nVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjU5NDdBMTE4N0IzQjdEMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcDsgcGF0aCA9IFNj
cm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1OTQ3QTIxODdCM0I3RDAwNDM3ODU3IC8qIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oOyBwYXRo
ID0gU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1OTQ3QTUxODdCNTE3NjAwNDM3ODU3IC8qIFJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2Fn
ZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyOTQsOCArMjI5
NCw4IEBACiAJCTBGNzA3Qzc5MUExRkVFQTMwMERBN0E0NSAvKiBSZW1vdGVMYXllclRyZWVTY3Jv
bGxpbmdQZXJmb3JtYW5jZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGODUwRkU0MUVEN0MzOUYwMEZCNzdBNyAvKiBXZWJQZXJmb3JtYW5j
ZUxvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY4NTBGRTUxRUQ3QzM5RjAwRkI3N0E3IC8qIFdlYlBlcmZvcm1hbmNlTG9nZ2luZ0Ns
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQZXJmb3JtYW5jZUxv
Z2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzFDMUExOEM1
NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUy5oOyBwYXRoID0gU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTMx
QzFCMThDNTcxMTkwMERCQTdDMyAvKiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbTsgcGF0aCA9IFNjcm9sbGluZy9pb3MvU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY5MzFDMUExOEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjkzMUMxQjE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjY1OTIyMTIwOEI0REIwMDQ0ODE2QyAvKiBEcmF3
aW5nQXJlYUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhd2luZ0Fy
ZWFJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA4NTZFMTg3Q0UwQTkw
MDc4MEQ4NiAvKiBfX2luaXRfXy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IF9faW5pdF9fLnB5OyBw
YXRoID0gd2Via2l0L19faW5pdF9fLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkMwODU2RjE4N0NFMEE5MDA3ODBEODYgLyogbWVzc2FnZXMucHkgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUg
PSBtZXNzYWdlcy5weTsgcGF0aCA9IHdlYmtpdC9tZXNzYWdlcy5weTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQ2MzEsMTggKzQ2MzEsNiBAQAogCQkJdGFiV2lkdGggPSA4OwogCQkJ
dXNlc1RhYnMgPSAwOwogCQl9OwotCQkwRjU5NDc5MzE4N0IzQjRDMDA0Mzc4NTcgLyogU2Nyb2xs
aW5nICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkwRjkz
MUMxOTE4QzU3MTExMDBEQkE3QzMgLyogaW9zICovLAotCQkJCTBGNTk0Nzk0MTg3QjNCNjAwMDQz
Nzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcCAqLywKLQkJCQkwRjU5
NDc5NTE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5o
ICovLAotCQkJCTBGNTk0Nzk2MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdUcmVl
LmNwcCAqLywKLQkJCQkwRjU5NDc5NzE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5n
VHJlZS5oICovLAotCQkJKTsKLQkJCW5hbWUgPSBTY3JvbGxpbmc7Ci0JCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwotCQl9OwogCQkwRjU5NDdBMDE4N0IzQjcxMDA0Mzc4NTcgLyogU2Nyb2xsaW5n
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTQ2NTIsMTUg
KzQ2NDAsNiBAQAogCQkJbmFtZSA9IFNjcm9sbGluZzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CiAJCX07Ci0JCTBGOTMxQzE5MThDNTcxMTEwMERCQTdDMyAvKiBpb3MgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTBGOTMxQzFBMThDNTcxMTkwMERC
QTdDMyAvKiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmggKi8sCi0JCQkJ
MEY5MzFDMUIxOEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1MubW0gKi8sCi0JCQkpOwotCQkJbmFtZSA9IGlvczsKLQkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7Ci0JCX07CiAJCTEwNThDN0IwRkVBNTU4NUUxMUNBMkNCQiAvKiBMaW5rZWQgRnJh
bWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC01
MjcxLDggKzUyNTAsNiBAQAogCQkJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLywKIAkJCQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0Yg
LyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCUNEQTI5
QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8s
Ci0JCQkJMEY3MDdDNzkxQTFGRUVBMzAwREE3QTQ1IC8qIFJlbW90ZUxheWVyVHJlZVNjcm9sbGlu
Z1BlcmZvcm1hbmNlRGF0YS5oICovLAotCQkJCTBGNzA3Qzc3MUExRkVFODMwMERBN0E0NSAvKiBS
ZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEubW0gKi8sCiAJCQkJMUEwMDJE
NDcxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNlc3Npb25TdGF0ZUNvZGluZy5oICovLAogCQkJCTFBMDAy
RDQ2MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNzaW9uU3RhdGVDb2RpbmcubW0gKi8sCiAJCQkJMUFG
RTQzNjQxOEI2QzA4MTAwOUM3QTQ4IC8qIFVJRGVsZWdhdGUuaCAqLywKQEAgLTU0NDksNiArNTQy
NiwzNiBAQAogCQkJcGF0aCA9IFJlbW90ZUxheWVyVHJlZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTJEMTU1MUE5MUY1QTlCNDIwMDA2RTNGRSAvKiBSZW1vdGVMYXllclRy
ZWUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTJEMTU1
MUFBMUY1QTlCQTcwMDA2RTNGRSAvKiBpb3MgKi8sCisJCQkJMUFCMTZBRTAxNjQ4NjU2RDAwMjkw
RDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCAqLywKKwkJCQkwRkYyNEEy
RjE4NzlFNEZFMDAzQUJGMEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tZXNz
YWdlcy5pbiAqLywKKwkJCQkxQUIxNkFERjE2NDg2NTZEMDAyOTBENjIgLyogUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5tbSAqLywKKwkJCQkxQUEzRDc1QTE2NTFCNDRGMDA4NzEzRDAg
LyogUmVtb3RlTGF5ZXJUcmVlSG9zdC5oICovLAorCQkJCTFBQTNENzU5MTY1MUI0NEYwMDg3MTNE
MCAvKiBSZW1vdGVMYXllclRyZWVIb3N0Lm1tICovLAorCQkJCTBGNzA3Qzc5MUExRkVFQTMwMERB
N0E0NSAvKiBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEuaCAqLywKKwkJ
CQkwRjcwN0M3NzFBMUZFRTgzMDBEQTdBNDUgLyogUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVy
Zm9ybWFuY2VEYXRhLm1tICovLAorCQkJCTBGNTk0Nzk0MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcCAqLywKKwkJCQkwRjU5NDc5NTE4N0IzQjYw
MDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oICovLAorCQkJCTBG
NTk0Nzk2MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdUcmVlLmNwcCAqLywKKwkJ
CQkwRjU5NDc5NzE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nVHJlZS5oICovLAor
CQkJKTsKKwkJCXBhdGggPSBSZW1vdGVMYXllclRyZWU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OworCQkyRDE1NTFBQTFGNUE5QkE3MDAwNkUzRkUgLyogaW9zICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjBDMzY1NzE4QzA1MUJBMDBG
NjA3RDcgLyogUmVtb3RlTGF5ZXJUcmVlSG9zdElPUy5tbSAqLywKKwkJCQkwRjBDMzY1QjE4QzA1
Q0ExMDBGNjA3RDcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbSAqLywK
KwkJCQkwRjkzMUMxQTE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUy5oICovLAorCQkJCTBGOTMxQzFCMThDNTcxMTkwMERCQTdDMyAvKiBTY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tICovLAorCQkJKTsKKwkJCXBhdGgg
PSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkyRDI4RjNERjE4ODVD
Q0I0MDA0QjlFQUUgLyogaW9zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKQEAgLTU1MDcsOCArNTUxNCw2IEBACiAJCQkJMEZDQjRFMzYxOEJCRTA0NDAwMEZDRkM5
IC8qIFBhZ2VDbGllbnRJbXBsSU9TLmggKi8sCiAJCQkJMEZDQjRFMzcxOEJCRTA0NDAwMEZDRkM5
IC8qIFBhZ2VDbGllbnRJbXBsSU9TLm1tICovLAogCQkJCTg2Rjk1MzYyMThGRjU1MEIwMDFEQjJF
RiAvKiBQcm9jZXNzQXNzZXJ0aW9uSU9TLm1tICovLAotCQkJCTBGMEMzNjU3MThDMDUxQkEwMEY2
MDdENyAvKiBSZW1vdGVMYXllclRyZWVIb3N0SU9TLm1tICovLAotCQkJCTBGMEMzNjVCMThDMDVD
QTEwMEY2MDdENyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tICovLAog
CQkJCTUxRTZDMTVGMUYyOTM1NTEwMEZEMzQzNyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVy
c2lzdGVudFN0b3JhZ2VJT1MubW0gKi8sCiAJCQkJMkRBRjA2RDQxOEJEMUE0NzAwODFDRUIxIC8q
IFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIuaCAqLywKIAkJCQkyREFGMDZEODE4QkQyM0JB
MDA4MUNFQjEgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5tZXNzYWdlcy5pbiAqLywK
QEAgLTY4NTYsNyArNjg2MSw3IEBACiAJCQkJNTEwQ0M3RTcxNjEzOEU3MjAwRDAzRUQzIC8qIE5l
dHdvcmsgKi8sCiAJCQkJMzFBMkVDNDAxNDg5OTczNzAwODEwRDcxIC8qIE5vdGlmaWNhdGlvbnMg
Ki8sCiAJCQkJMUFFRkNDMDUxMUQwMUYzNDAwODIxOUQzIC8qIFBsdWdpbnMgKi8sCi0JCQkJMEY1
OTQ3OTMxODdCM0I0QzAwNDM3ODU3IC8qIFNjcm9sbGluZyAqLywKKwkJCQkyRDE1NTFBOTFGNUE5
QjQyMDAwNkUzRkUgLyogUmVtb3RlTGF5ZXJUcmVlICovLAogCQkJCTUxN0RENUJCMTgwREE3QzQw
MDgxNjYwQiAvKiBTdG9yYWdlICovLAogCQkJCTFBQUYwODlFMTkyNjgxQUMwMEI2MzkwQyAvKiBV
c2VyQ29udGVudCAqLywKIAkJCQkxQTUzQzJBMzFBMzI1NjkxMDA0RThDNzAgLyogV2Vic2l0ZURh
dGEgKi8sCkBAIC03NzAwLDExICs3NzA1LDYgQEAKIAkJCQkxQUZERTY1QjE5NTRFOEQ1MDBDNDhG
RkEgLyogTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcCAqLywKIAkJCQkwRkNCNEU1ODE4QkJF
M0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGxNYWMuaCAqLywKIAkJCQkwRkNCNEU1OTE4QkJF
M0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGxNYWMubW0gKi8sCi0JCQkJMUFCMTZBRTAxNjQ4
NjU2RDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCAqLywKLQkJ
CQkwRkYyNEEyRjE4NzlFNEZFMDAzQUJGMEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQkxQUIxNkFERjE2NDg2NTZEMDAyOTBENjIgLyogUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbSAqLywKLQkJCQkxQUEzRDc1QTE2NTFCNDRG
MDA4NzEzRDAgLyogUmVtb3RlTGF5ZXJUcmVlSG9zdC5oICovLAotCQkJCTFBQTNENzU5MTY1MUI0
NEYwMDg3MTNEMCAvKiBSZW1vdGVMYXllclRyZWVIb3N0Lm1tICovLAogCQkJCUE1RDM1MDREMUQ3
OEYwRDIwMDUxMjRBOSAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbSAqLywKIAkJCQlF
MThFNjkwOTE2OUI1NjNGMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eS5jcHAgKi8sCiAJCQkJ
RTE4RTY5MEExNjlCNTYzRjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkuaCAqLywK
</data>
<flag name="review"
          id="339934"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319743</attachid>
            <date>2017-09-02 15:53:45 -0700</date>
            <delta_ts>2017-09-02 16:52:38 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>bug-176273-20170902014248.patch</filename>
            <type>text/plain</type>
            <size>248855</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDU2YjAxMzkwZjEwYTdkZWU0
ODA3ZDU5NGU3ZDRiNzE1YmU2ODA5YmYuLjA4YTFkYTkwNTdiNTY1OTk0ZDU4OGJmMmUxZWM5N2Fj
MjhiOTYyNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzMgQEAKIDIwMTctMDktMDIgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSBVSSBQcm9jZXNz
IHBhcnQgb2YgdGhlIFJlbW90ZSBMYXllciBUcmVlIGNvZGUgb3V0IG9mIGEgTWFjLXNwZWNpZmlj
IGRpcmVjdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc2MjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KKworICAgICAg
ICBVSS1zaWRlIGNvbXBvc2l0aW5nIHdvcmtzIG9uIGFsbCBDb2NvYSBwbGF0Zm9ybXMsIHNvIHRo
ZSBjb2RlIHNob3VsZAorICAgICAgICBub3QgbGl2ZSBpbnNpZGUgTWFjLy4gQWxzbyBtZXJnZSB0
aGUgU2Nyb2xsaW5nIGRpcmVjdG9yeSBpbiBoZXJlLAorICAgICAgICBzaW5jZSB0aG9zZSBmaWxl
cyBhcmUgdmVyeSByZWxhdGVkLgorCisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJl
ZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Vl
YktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBVSVByb2Nlc3MvbWFjL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9jZXNz
L1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tOiBSZW5h
bWVkIGZyb20gVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1t
LgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlSG9z
dC5oOiBSZW5hbWVkIGZyb20gVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVIb3N0LmguCisg
ICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0Lm1t
OiBSZW5hbWVkIGZyb20gVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVIb3N0Lm1tLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5n
UGVyZm9ybWFuY2VEYXRhLmg6IFJlbmFtZWQgZnJvbSBVSVByb2Nlc3MvQ29jb2EvUmVtb3RlTGF5
ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLmguCisgICAgICAgICogVUlQcm9jZXNzL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEubW06
IFJlbmFtZWQgZnJvbSBVSVByb2Nlc3MvQ29jb2EvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVy
Zm9ybWFuY2VEYXRhLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHA6IFJlbmFtZWQgZnJvbSBVSVByb2Nlc3Mv
U2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3BwLgorICAgICAgICAq
IFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eS5oOiBSZW5hbWVkIGZyb20gVUlQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5LmguCisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVTY3JvbGxpbmdUcmVlLmNwcDogUmVuYW1lZCBmcm9tIFVJUHJvY2Vzcy9TY3JvbGxpbmcvUmVt
b3RlU2Nyb2xsaW5nVHJlZS5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJl
ZS9SZW1vdGVTY3JvbGxpbmdUcmVlLmg6IFJlbmFtZWQgZnJvbSBVSVByb2Nlc3MvU2Nyb2xsaW5n
L1JlbW90ZVNjcm9sbGluZ1RyZWUuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL2lvcy9SZW1vdGVMYXllclRyZWVIb3N0SU9TLm1tOiBSZW5hbWVkIGZyb20gVUlQcm9jZXNz
L2lvcy9SZW1vdGVMYXllclRyZWVIb3N0SU9TLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1v
dGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW06IFJl
bmFtZWQgZnJvbSBVSVByb2Nlc3MvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJ
T1MubW0uCisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oOiBSZW5hbWVkIGZyb20gVUlQcm9jZXNzL1Nj
cm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1MubW06IFJlbmFtZWQgZnJvbSBVSVByb2Nlc3MvU2Nyb2xsaW5nL2lv
cy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tLgorICAgICAgICAqIFdl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisyMDE3LTA5LTAyICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCiAgICAgICAgIEZpeCBzb21lIHN0eWxlIGlz
c3VlcyBpbiB0aGUgV2ViIFByb2Nlc3MgcGFydCBvZiB0aGUgUmVtb3RlIExheWVyIFRyZWUgY29k
ZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2Mjcy
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAxN2U3NmQ3YzI5OGNhYjgzYWIxMjE1
OGEzMmMxNzBiZmEyY2M4ZDNkLi5iYTQ0Y2JhMmNiYmQ4ZDY3OWI0ZGI0MjQ0OTVkZjgzODUxYzU0
OGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC03NSw2ICs3NSw3IEBAIFZQQVRI
ID0gXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzIFwK
ICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zIFwKICAgICAkKFdlYktpdDIp
L1VJUHJvY2Vzcy9QbHVnaW5zIFwKKyAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9SZW1vdGVMYXll
clRyZWUgXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL1N0b3JhZ2UgXAogICAgICQoV2ViS2l0
MikvVUlQcm9jZXNzL1VzZXJDb250ZW50IFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9XZWJT
dG9yYWdlIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDdmOWE4OTUzZjQzYzQ3NDFjNWZj
Mzc4ZGM3YTQ2OTY5ODJmZjI4NjIuLjQ0YTkwNDA5NjY0MzdmNmFmNTY2ZjEzN2E4NDIwNzg4MTdh
ZWY3NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMjUzLDcgKzI1Myw2IEBAIGxpc3Qo
QVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9Db2NvYS9MZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQubW0KICAgICBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0
YXRlLm1tCiAgICAgVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0KLSAgICBV
SVByb2Nlc3MvQ29jb2EvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLm1t
CiAgICAgVUlQcm9jZXNzL0NvY29hL1Nlc3Npb25TdGF0ZUNvZGluZy5tbQogICAgIFVJUHJvY2Vz
cy9Db2NvYS9VSURlbGVnYXRlLm1tCiAgICAgVUlQcm9jZXNzL0NvY29hL1ZlcnNpb25DaGVja3Mu
bW0KQEAgLTI3Niw4ICsyNzUsMTEgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
VUlQcm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tCiAgICAgVUlQ
cm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdpblByb2Nlc3NQcm94eU1hYy5tbQogCi0gICAgVUlQcm9j
ZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcAotICAgIFVJ
UHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nVHJlZS5jcHAKKyAgICBVSVByb2Nlc3Mv
UmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5t
bQorICAgIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eS5jcHAKKyAgICBVSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGlu
Z1RyZWUuY3BwCisgICAgVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5Lm1tCisgICAgVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVM
YXllclRyZWVIb3N0Lm1tCiAKICAgICBVSVByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdl
ci5jcHAKIApAQCAtMjg2LDggKzI4OCw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwog
ICAgIFVJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCiAgICAgVUlQcm9jZXNzL21hYy9M
ZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCiAgICAgVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbC5tbQotICAgIFVJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eS5tbQotICAgIFVJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlSG9zdC5tbQogICAgIFVJUHJv
Y2Vzcy9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KICAgICBVSVByb2Nlc3MvbWFj
L1NlY0l0ZW1TaGltUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xs
ZXIubW0KQEAgLTM5NSw3ICszOTUsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9tYWMiCiAgICAgIiR7
V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9Db2NvYSIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9j
ZXNzL0xhdW5jaGVyL21hYyIKLSAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL1Njcm9sbGlu
ZyIKKyAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZSIKKyAgICAi
JHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MiCiAgICAgIiR7V0VC
S0lUMl9ESVJ9L1VJUHJvY2Vzcy9pb3MiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1BsYXRmb3JtL2Nn
IgogICAgICIke1dFQktJVDJfRElSfS9QbGF0Zm9ybS9jbGFzc2lmaWVyIgpAQCAtNDc1LDcgKzQ3
Niw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfTUVTU0FHRVNfSU5fRklMRVMKICAgICBVSVByb2Nl
c3MvQ29jb2EvVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluCiAgICAgVUlQcm9jZXNz
L0NvY29hL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogCi0gICAg
VUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmlu
CisgICAgVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5Lm1lc3NhZ2VzLmluCisKICAgICBVSVByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltUHJveHku
bWVzc2FnZXMuaW4KIAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNl
RGF0YS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUmVtb3RlTGF5ZXJUcmVlU2Ny
b2xsaW5nUGVyZm9ybWFuY2VEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3
ZjUyMWQ0ZTAzNTUwNGJlOTU0ZDU1YTVlYjYzZmIyYTE3OTI5NjMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaWZuZGVmIFJlbW90ZUxheWVyVHJl
ZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YV9oCi0jZGVmaW5lIFJlbW90ZUxheWVyVHJlZVNjcm9s
bGluZ1BlcmZvcm1hbmNlRGF0YV9oCi0KLSNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0j
aW1wb3J0IDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OwotCi1jbGFzcyBSZW1vdGVMYXllclRyZWVTY3Jv
bGxpbmdQZXJmb3JtYW5jZURhdGEgewotcHVibGljOgotICAgIFJlbW90ZUxheWVyVHJlZVNjcm9s
bGluZ1BlcmZvcm1hbmNlRGF0YShSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Jik7Ci0g
ICAgflJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YSgpOwotCi0gICAgdm9p
ZCBkaWRDb21taXRMYXllclRyZWUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxlUmVj
dCk7Ci0gICAgdm9pZCBkaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxl
UmVjdCk7Ci0KLSAgICBOU0FycmF5ICpkYXRhKCk7IC8vIEFycmF5IG9mIFsgdGltZSwgZXZlbnQg
dHlwZSwgdW5maWxsZWQgcGl4ZWwgY291bnQgXQotCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIGJs
YW5rUGl4ZWxDb3VudChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVSZWN0KSBjb25z
dDsKLSAgICAKLSAgICBzdHJ1Y3QgQmxhbmtQaXhlbENvdW50IHsKLSAgICAgICAgZW51bSBFdmVu
dFR5cGUgeyBGaWxsZWQsIEV4cG9zZWQgfTsKLQotICAgICAgICBkb3VibGUgc3RhcnRUaW1lOwot
ICAgICAgICBkb3VibGUgZW5kVGltZTsKLSAgICAgICAgRXZlbnRUeXBlIGV2ZW50VHlwZTsKLSAg
ICAgICAgdW5zaWduZWQgYmxhbmtQaXhlbENvdW50OwotICAgICAgICAKLSAgICAgICAgQmxhbmtQ
aXhlbENvdW50KGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgRXZlbnRUeXBlIHR5cGUsIHVuc2ln
bmVkIGNvdW50KQotICAgICAgICAgICAgOiBzdGFydFRpbWUoc3RhcnQpCi0gICAgICAgICAgICAs
IGVuZFRpbWUoZW5kKQotICAgICAgICAgICAgLCBldmVudFR5cGUodHlwZSkKLSAgICAgICAgICAg
ICwgYmxhbmtQaXhlbENvdW50KGNvdW50KQotICAgICAgICB7IH0KLSAgICAgICAgCi0gICAgICAg
IGJvb2wgY2FuQ29hbGVzY2UoQmxhbmtQaXhlbENvdW50OjpFdmVudFR5cGUsIHVuc2lnbmVkIGJs
YW5rUGl4ZWxDb3VudCkgY29uc3Q7Ci0gICAgfTsKLSAgICAKLSAgICB2b2lkIGFwcGVuZEJsYW5r
UGl4ZWxDb3VudChCbGFua1BpeGVsQ291bnQ6OkV2ZW50VHlwZSwgdW5zaWduZWQgYmxhbmtQaXhl
bENvdW50KTsKLQotICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkmIG1fZHJhd2lu
Z0FyZWE7Ci0gICAgVmVjdG9yPEJsYW5rUGl4ZWxDb3VudD4gbV9ibGFua1BpeGVsQ291bnRzOwot
fTsKLQotfQotCi0jZW5kaWYgLy8gUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VE
YXRhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1JlbW90ZUxh
eWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5tbQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5MzA3ZjhiZWQ2YTdhNTAwNjc1YzI5M2U2MDEw
OTJjZGQ1MzcyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQ
ZXJmb3JtYW5jZURhdGEubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlU2Nyb2xs
aW5nUGVyZm9ybWFuY2VEYXRhLmgiCi0KLSNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHkuaCIKLSNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZUhvc3QuaCIKLSNpbXBvcnQgPFF1
YXJ0ekNvcmUvQ0FMYXllci5oPgotI2ltcG9ydCA8V2ViQ29yZS9UaWxlQ29udHJvbGxlci5oPgot
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLQotUmVt
b3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhOjpSZW1vdGVMYXllclRyZWVTY3Jv
bGxpbmdQZXJmb3JtYW5jZURhdGEoUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSYgZHJh
d2luZ0FyZWEpCi0gICAgOiBtX2RyYXdpbmdBcmVhKGRyYXdpbmdBcmVhKQotewotfQotCi1SZW1v
dGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGE6On5SZW1vdGVMYXllclRyZWVTY3Jv
bGxpbmdQZXJmb3JtYW5jZURhdGEoKQotewotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZVNjcm9s
bGluZ1BlcmZvcm1hbmNlRGF0YTo6ZGlkQ29tbWl0TGF5ZXJUcmVlKGNvbnN0IEZsb2F0UmVjdCYg
dmlzaWJsZVJlY3QpCi17Ci0gICAgLy8gRklYTUU6IG1heWJlIHdlIG9ubHkgY2FyZSBhYm91dCBu
ZXdseSBjcmVhdGVkIHRpbGVzPwotICAgIGFwcGVuZEJsYW5rUGl4ZWxDb3VudChCbGFua1BpeGVs
Q291bnQ6OkZpbGxlZCwgYmxhbmtQaXhlbENvdW50KHZpc2libGVSZWN0KSk7Ci19Ci0KLXZvaWQg
UmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhOjpkaWRTY3JvbGwoY29uc3Qg
RmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkKLXsKLSAgICBhcHBlbmRCbGFua1BpeGVsQ291bnQoQmxh
bmtQaXhlbENvdW50OjpFeHBvc2VkLCBibGFua1BpeGVsQ291bnQodmlzaWJsZVJlY3QpKTsKLX0K
LQotYm9vbCBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGE6OkJsYW5rUGl4
ZWxDb3VudDo6Y2FuQ29hbGVzY2UoQmxhbmtQaXhlbENvdW50OjpFdmVudFR5cGUgdHlwZSwgdW5z
aWduZWQgcGl4ZWxDb3VudCkgY29uc3QKLXsKLSAgICByZXR1cm4gZXZlbnRUeXBlID09IHR5cGUg
JiYgYmxhbmtQaXhlbENvdW50ID09IHBpeGVsQ291bnQ7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJU
cmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhOjphcHBlbmRCbGFua1BpeGVsQ291bnQoQmxhbmtQ
aXhlbENvdW50OjpFdmVudFR5cGUgZXZlbnRUeXBlLCB1bnNpZ25lZCBibGFua1BpeGVsQ291bnQp
Ci17Ci0gICAgZG91YmxlIG5vdyA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotICAgIGlm
ICghbV9ibGFua1BpeGVsQ291bnRzLmlzRW1wdHkoKSAmJiBtX2JsYW5rUGl4ZWxDb3VudHMubGFz
dCgpLmNhbkNvYWxlc2NlKGV2ZW50VHlwZSwgYmxhbmtQaXhlbENvdW50KSkgewotICAgICAgICBt
X2JsYW5rUGl4ZWxDb3VudHMubGFzdCgpLmVuZFRpbWUgPSBub3c7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2JsYW5rUGl4ZWxDb3VudHMuYXBwZW5kKEJsYW5rUGl4ZWxDb3VudChu
b3csIG5vdywgZXZlbnRUeXBlLCBibGFua1BpeGVsQ291bnQpKTsKLX0KLQotTlNBcnJheSAqUmVt
b3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhOjpkYXRhKCkKLXsKLSAgICBOU011
dGFibGVBcnJheSogZGF0YUFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5
Om1fYmxhbmtQaXhlbENvdW50cy5zaXplKCldOwotICAgIAotICAgIGZvciAoYXV0byBwaXhlbERh
dGEgOiBtX2JsYW5rUGl4ZWxDb3VudHMpIHsKLSAgICAgICAgW2RhdGFBcnJheSBhZGRPYmplY3Q6
QFsKLSAgICAgICAgICAgIEAocGl4ZWxEYXRhLnN0YXJ0VGltZSksCi0gICAgICAgICAgICAocGl4
ZWxEYXRhLmV2ZW50VHlwZSA9PSBCbGFua1BpeGVsQ291bnQ6OkZpbGxlZCkgPyBAImZpbGxlZCIg
OiBAImV4cG9zZWQiLAotICAgICAgICAgICAgQChwaXhlbERhdGEuYmxhbmtQaXhlbENvdW50KQot
ICAgICAgICBdXTsKLSAgICB9Ci0gICAgcmV0dXJuIGRhdGFBcnJheTsKLX0KLQotc3RhdGljIENB
TGF5ZXIgKmZpbmRUaWxlR3JpZENvbnRhaW5lckxheWVyKENBTGF5ZXIgKmxheWVyKQotewotICAg
IGZvciAoQ0FMYXllciAqY3VyckxheWVyIDogW2xheWVyIHN1YmxheWVyc10pIHsKLSAgICAgICAg
U3RyaW5nIGxheWVyTmFtZSA9IFtjdXJyTGF5ZXIgbmFtZV07Ci0gICAgICAgIGlmIChsYXllck5h
bWUgPT0gVGlsZUNvbnRyb2xsZXI6OnRpbGVHcmlkQ29udGFpbmVyTGF5ZXJOYW1lKCkpCi0gICAg
ICAgICAgICByZXR1cm4gY3VyckxheWVyOwotCi0gICAgICAgIGlmIChDQUxheWVyICpmb3VuZExh
eWVyID0gZmluZFRpbGVHcmlkQ29udGFpbmVyTGF5ZXIoY3VyckxheWVyKSkKLSAgICAgICAgICAg
IHJldHVybiBmb3VuZExheWVyOwotICAgIH0KLQotICAgIHJldHVybiBuaWw7Ci19Ci0KLXVuc2ln
bmVkIFJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YTo6YmxhbmtQaXhlbENv
dW50KGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpIGNvbnN0Ci17Ci0gICAgQ0FMYXllciAq
cm9vdExheWVyID0gYXNMYXllcihtX2RyYXdpbmdBcmVhLnJlbW90ZUxheWVyVHJlZUhvc3QoKS5y
b290TGF5ZXIoKSk7Ci0KLSAgICBDQUxheWVyICp0aWxlR3JpZENvbnRhaW5lciA9IGZpbmRUaWxl
R3JpZENvbnRhaW5lckxheWVyKHJvb3RMYXllcik7Ci0gICAgaWYgKCF0aWxlR3JpZENvbnRhaW5l
cikgewotICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBmaW5kIFRpbGVHcmlkIENvbnRhaW5lciBM
YXllciIpOwotICAgICAgICByZXR1cm4gVUlOVF9NQVg7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0
IHZpc2libGVSZWN0RXhjbHVkaW5nVG9vbGJhciA9IHZpc2libGVSZWN0OwotICAgIGlmICh2aXNp
YmxlUmVjdEV4Y2x1ZGluZ1Rvb2xiYXIueSgpIDwgMCkKLSAgICAgICAgdmlzaWJsZVJlY3RFeGNs
dWRpbmdUb29sYmFyLnNldFkoMCk7Ci0KLSAgICBSZWdpb24gcGFpbnRlZFZpc2libGVUaWxlUmVn
aW9uOwotCi0gICAgZm9yIChDQUxheWVyICp0aWxlTGF5ZXIgOiBbdGlsZUdyaWRDb250YWluZXIg
c3VibGF5ZXJzXSkgewotICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBbdGlsZUxheWVyIGNv
bnZlcnRSZWN0Olt0aWxlTGF5ZXIgYm91bmRzXSB0b0xheWVyOnRpbGVHcmlkQ29udGFpbmVyXTsK
LSAgICAKLSAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KHZpc2libGVSZWN0RXhjbHVkaW5nVG9v
bGJhcik7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXRpbGVSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIHBhaW50ZWRWaXNpYmxlVGlsZVJlZ2lvbi51bml0ZShlbmNsb3NpbmdJbnRSZWN0KHRp
bGVSZWN0KSk7Ci0gICAgfQotCi0gICAgUmVnaW9uIHVuY292ZXJlZFJlZ2lvbihlbmNsb3NpbmdJ
bnRSZWN0KHZpc2libGVSZWN0RXhjbHVkaW5nVG9vbGJhcikpOwotICAgIHVuY292ZXJlZFJlZ2lv
bi5zdWJ0cmFjdChwYWludGVkVmlzaWJsZVRpbGVSZWdpb24pOwotCi0gICAgcmV0dXJuIHVuY292
ZXJlZFJlZ2lvbi50b3RhbEFyZWEoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmVkMjMyZDE3ZmJlOWQ5NzIzOTRi
ZGUxNTllNmNiYjljZDVlZTNmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgK
QEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZUhvc3Qu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lu
dFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisKK09CSkNfQ0xBU1MgV0tP
bmVTaG90RGlzcGxheUxpbmtIYW5kbGVyOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb247CitjbGFzcyBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclRyYW5zYWN0aW9uOworCitjbGFzcyBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
IGZpbmFsIDogcHVibGljIERyYXdpbmdBcmVhUHJveHkgeworcHVibGljOgorICAgIGV4cGxpY2l0
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVByb3h5Jik7CisgICAgdmly
dHVhbCB+UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSgpOworCisgICAgY29uc3QgUmVt
b3RlTGF5ZXJUcmVlSG9zdCYgcmVtb3RlTGF5ZXJUcmVlSG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVtb3RlTGF5ZXJUcmVlSG9zdDsgfQorCisgICAgdm9pZCBhY2NlbGVyYXRlZEFuaW1hdGlvbkRp
ZFN0YXJ0KHVpbnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUgc3RhcnRU
aW1lKTsKKyAgICB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90IGxheWVy
SUQsIGNvbnN0IFN0cmluZyYga2V5KTsKKworICAgIHVpbnQ2NF90IG5leHRMYXllclRyZWVUcmFu
c2FjdGlvbklEKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nTGF5ZXJUcmVlVHJhbnNhY3Rpb25J
RCArIDE7IH0KKyAgICB1aW50NjRfdCBsYXN0Q29tbWl0dGVkTGF5ZXJUcmVlVHJhbnNhY3Rpb25J
RCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JREZvclBlbmRpbmdDQUNvbW1pdDsgfQor
CisgICAgdm9pZCBkaWRSZWZyZXNoRGlzcGxheSgpOworICAgIAorICAgIGJvb2wgaGFzRGVidWdJ
bmRpY2F0b3IoKSBjb25zdCB7IHJldHVybiAhIW1fZGVidWdJbmRpY2F0b3JMYXllclRyZWVIb3N0
OyB9CisKKyAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OworCisgICAg
TGF5ZXJPclZpZXcqIGxheWVyV2l0aElERm9yVGVzdGluZyh1aW50NjRfdCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgdm9pZCBzaXplRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXZp
Y2VTY2FsZUZhY3RvckRpZENoYW5nZSgpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkVXBkYXRlR2Vv
bWV0cnkoKSBvdmVycmlkZTsKKyAgICAKKyAgICAvLyBGb3Igbm93LCBhbGwgY2FsbGJhY2tzIGFy
ZSBjYWxsZWQgYmVmb3JlIGNvbW1pdHRpbmcgY2hhbmdlcywgYmVjYXVzZSB0aGF0J3Mgd2hhdCB0
aGUgb25seSBjbGllbnQgcmVxdWlyZXMuCisgICAgLy8gT25jZSB3ZSBoYXZlIG90aGVyIGNhbGxi
YWNrcywgaXQgbWF5IG1ha2Ugc2Vuc2UgdG8gaGF2ZSBhIGJlZm9yZS1jb21taXQvYWZ0ZXItY29t
bWl0IG9wdGlvbi4KKyAgICB2b2lkIGRpc3BhdGNoQWZ0ZXJFbnN1cmluZ0RyYXdpbmcoV1RGOjpG
dW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJikgb3ZlcnJpZGU7CisKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgdm9pZCBzZXRWaWV3RXhwb3NlZFJlY3Qoc3RkOjpvcHRpb25hbDxX
ZWJDb3JlOjpGbG9hdFJlY3Q+KSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgZmxvYXQgaW5kaWNh
dG9yU2NhbGUoV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUpIGNvbnN0OworICAgIHZvaWQg
dXBkYXRlRGVidWdJbmRpY2F0b3IoKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZURlYnVnSW5k
aWNhdG9yKFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplLCBib29sIHJvb3RMYXllckNoYW5n
ZWQsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24p
OworICAgIHZvaWQgdXBkYXRlRGVidWdJbmRpY2F0b3JQb3NpdGlvbigpOworICAgIHZvaWQgaW5p
dGlhbGl6ZURlYnVnSW5kaWNhdG9yKCk7CisKKyAgICB2b2lkIHdhaXRGb3JEaWRVcGRhdGVBY3Rp
dml0eVN0YXRlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBoaWRlQ29udGVudFVudGlsUGVuZGluZ1Vw
ZGF0ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgaGlkZUNvbnRlbnRVbnRpbEFueVVwZGF0ZSgpIG92
ZXJyaWRlOworICAgIGJvb2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIHZvaWQgcHJlcGFyZUZvckFwcFN1c3BlbnNpb24oKSBmaW5hbDsKKyAgICAKKyAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IGluZGljYXRvckxvY2F0aW9uKCkgY29uc3Q7CisKKyAgICAvLyBJUEM6
Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBNZXNzYWdlIGhhbmRsZXJz
CisgICAgdm9pZCB3aWxsQ29tbWl0TGF5ZXJUcmVlKHVpbnQ2NF90IHRyYW5zYWN0aW9uSUQpOwor
ICAgIHZvaWQgY29tbWl0TGF5ZXJUcmVlKGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
JiwgY29uc3QgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbiYpOworICAgIAor
ICAgIHZvaWQgc2VuZFVwZGF0ZUdlb21ldHJ5KCk7CisKKyAgICBSZW1vdGVMYXllclRyZWVIb3N0
IG1fcmVtb3RlTGF5ZXJUcmVlSG9zdDsKKyAgICBib29sIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRl
R2VvbWV0cnkgeyBmYWxzZSB9OworICAgIGVudW0gRGlkVXBkYXRlTWVzc2FnZVN0YXRlIHsgRG9l
c05vdE5lZWREaWRVcGRhdGUsIE5lZWRzRGlkVXBkYXRlLCBNaXNzZWRDb21taXQgfTsKKyAgICBE
aWRVcGRhdGVNZXNzYWdlU3RhdGUgbV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUgeyBEb2VzTm90TmVl
ZERpZFVwZGF0ZSB9OworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2xhc3RTZW50U2l6ZTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVMYXllclRyZWVIb3N0PiBtX2RlYnVnSW5kaWNhdG9y
TGF5ZXJUcmVlSG9zdDsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV90aWxlTWFwSG9zdExheWVy
OworICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2V4cG9zZWRSZWN0SW5kaWNhdG9yTGF5ZXI7CisK
KyAgICB1aW50NjRfdCBtX3BlbmRpbmdMYXllclRyZWVUcmFuc2FjdGlvbklEIHsgMCB9OworICAg
IHVpbnQ2NF90IG1fbGFzdFZpc2libGVUcmFuc2FjdGlvbklEIHsgMCB9OworICAgIHVpbnQ2NF90
IG1fdHJhbnNhY3Rpb25JREZvclBlbmRpbmdDQUNvbW1pdCB7IDAgfTsKKyAgICB1aW50NjRfdCBt
X3RyYW5zYWN0aW9uSURGb3JVbmhpZGluZ0NvbnRlbnQgeyAwIH07CisKKyAgICBDYWxsYmFja01h
cCBtX2NhbGxiYWNrczsKKworICAgIFJldGFpblB0cjxXS09uZVNob3REaXNwbGF5TGlua0hhbmRs
ZXI+IG1fZGlzcGxheUxpbmtIYW5kbGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRFJBV0lOR19BUkVBX1BST1hZKFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhUHJveHksIERyYXdpbmdBcmVhVHlwZVJlbW90ZUxheWVyVHJlZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubWVzc2Fn
ZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGY2ZjVhYTkwOTM5Njk5YjA0NDMwMjFmYjg0Y2E2NTI2NDdhNjhj
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAg
KzEsMjYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2Fn
ZXMgLT4gUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSA6IERyYXdpbmdBcmVhUHJveHkg
eworICAgIHZvaWQgV2lsbENvbW1pdExheWVyVHJlZSh1aW50NjRfdCB0cmFuc2FjdGlvbklEKQor
ICAgIHZvaWQgQ29tbWl0TGF5ZXJUcmVlKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b24gbGF5ZXJUcmVlVHJhbnNhY3Rpb24sIFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JUcmFuc2FjdGlvbiBzY3JvbGxpbmdUcmVlVHJhbnNhY3Rpb24pCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJl
ZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0YjE3ZDFm
MGQ2OWEzZjE0YTNiNTRlYTNiMjk4YzkzM2E1MzI1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eS5tbQpAQCAtMCwwICsxLDQ4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lmgi
CisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgorI2lt
cG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIgorI2ltcG9ydCAiUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5
LmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVh
cnR6Q29yZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9JT1N1cmZhY2VQb29sLmg+CisjaW1wb3J0IDxXZWJDb3JlL01hY2hTZW5kUmln
aHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRl
Lmg+CisjaW1wb3J0IDx3dGYvU3lzdGVtVHJhY2luZy5oPgorCit1c2luZyBuYW1lc3BhY2UgSVBD
OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIEZJWE1FOiBNYWMgd2lsbCBuZWVkIHNv
bWV0aGluZyBzaW1pbGFyOyB3ZSBzaG91bGQgZmlndXJlIG91dCBob3cgdG8gc2hhcmUgdGhpcyB3
aXRoIERpc3BsYXlSZWZyZXNoTW9uaXRvciB3aXRob3V0CisvLyBicmVha2luZyBXZWJLaXQxIGJl
aGF2aW9yIG9yIFdlYktpdDItV2ViS2l0MSBjb2V4aXN0ZW5jZS4KKyNpZiBQTEFURk9STShJT1Mp
CitAaW50ZXJmYWNlIFdLT25lU2hvdERpc3BsYXlMaW5rSGFuZGxlciA6IE5TT2JqZWN0IHsKKyAg
ICBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkqIF9kcmF3aW5nQXJlYVBy
b3h5OworICAgIENBRGlzcGxheUxpbmsgKl9kaXNwbGF5TGluazsKK30KKworLSAoaWQpaW5pdFdp
dGhEcmF3aW5nQXJlYVByb3h5OihXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHkqKWRyYXdpbmdBcmVhUHJveHk7CistICh2b2lkKWRpc3BsYXlMaW5rRmlyZWQ6KENBRGlzcGxh
eUxpbmsgKilzZW5kZXI7CistICh2b2lkKWludmFsaWRhdGU7CistICh2b2lkKXNjaGVkdWxlOwor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS09uZVNob3REaXNwbGF5TGlua0hhbmRsZXIKKwor
LSAoaWQpaW5pdFdpdGhEcmF3aW5nQXJlYVByb3h5OihXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHkqKWRyYXdpbmdBcmVhUHJveHkKK3sKKyAgICBpZiAoc2VsZiA9IFtzdXBl
ciBpbml0XSkgeworICAgICAgICBfZHJhd2luZ0FyZWFQcm94eSA9IGRyYXdpbmdBcmVhUHJveHk7
CisgICAgICAgIC8vIE5vdGUgdGhhdCBDQURpc3BsYXlMaW5rIHJldGFpbnMgaXRzIHRhcmdldCAo
c2VsZiksIHNvIGEgY2FsbCB0byAtaW52YWxpZGF0ZSBpcyBuZWVkZWQgb24gdGVhcmRvd24uCisg
ICAgICAgIF9kaXNwbGF5TGluayA9IFtDQURpc3BsYXlMaW5rIGRpc3BsYXlMaW5rV2l0aFRhcmdl
dDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihkaXNwbGF5TGlua0ZpcmVkOildOworICAgICAgICBb
X2Rpc3BsYXlMaW5rIGFkZFRvUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2Rl
Ok5TUnVuTG9vcENvbW1vbk1vZGVzXTsKKyAgICAgICAgX2Rpc3BsYXlMaW5rLnBhdXNlZCA9IFlF
UzsKKyAgICAgICAgX2Rpc3BsYXlMaW5rLnByZWZlcnJlZEZyYW1lc1BlclNlY29uZCA9IDYwOwor
ICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgQVNT
RVJUKCFfZGlzcGxheUxpbmspOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClk
aXNwbGF5TGlua0ZpcmVkOihDQURpc3BsYXlMaW5rICopc2VuZGVyCit7CisgICAgQVNTRVJUKGlz
VUlUaHJlYWQoKSk7CisgICAgX2RyYXdpbmdBcmVhUHJveHktPmRpZFJlZnJlc2hEaXNwbGF5KCk7
Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZQoreworICAgIFtfZGlzcGxheUxpbmsgaW52YWxpZGF0
ZV07CisgICAgX2Rpc3BsYXlMaW5rID0gbnVsbHB0cjsKK30KKworLSAodm9pZClzY2hlZHVsZQor
eworICAgIF9kaXNwbGF5TGluay5wYXVzZWQgPSBOTzsKK30KKworLSAodm9pZClwYXVzZQorewor
ICAgIF9kaXNwbGF5TGluay5wYXVzZWQgPSBZRVM7Cit9CisKK0BlbmQKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6UmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eShXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKKyAg
ICA6IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlUmVtb3RlTGF5ZXJUcmVlLCB3ZWJQ
YWdlUHJveHkpCisgICAgLCBtX3JlbW90ZUxheWVyVHJlZUhvc3QoKnRoaXMpCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgICwgbV9kaXNwbGF5TGlua0hhbmRsZXIoYWRvcHROUyhbW1dLT25lU2hvdERp
c3BsYXlMaW5rSGFuZGxlciBhbGxvY10gaW5pdFdpdGhEcmF3aW5nQXJlYVByb3h5OnRoaXNdKSkK
KyNlbmRpZgoreworI2lmIFVTRShJT1NVUkZBQ0UpCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBw
b29sIHN1cmZhY2VzIGluIHRoZSBVSSBwcm9jZXNzLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZG8gdGhpcyBzb21ld2hlcmUgZWxzZS4KKyAgICBJT1N1cmZhY2VQb29sOjpzaGFyZWRQb29sKCku
c2V0UG9vbFNpemUoMCk7CisjZW5kaWYKKworICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCksICp0aGlz
KTsKKworICAgIGlmIChtX3dlYlBhZ2VQcm94eS5wcmVmZXJlbmNlcygpLnRpbGVkU2Nyb2xsaW5n
SW5kaWNhdG9yVmlzaWJsZSgpKQorICAgICAgICBpbml0aWFsaXplRGVidWdJbmRpY2F0b3IoKTsK
K30KKworUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6flJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHkoKQoreworICAgIG1fY2FsbGJhY2tzLmludmFsaWRhdGUoQ2FsbGJhY2tC
YXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CisgICAgbV93ZWJQYWdlUHJveHkucHJv
Y2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2VQcm94eS5wYWdl
SUQoKSk7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgW21fZGlzcGxheUxpbmtIYW5kbGVyIGlu
dmFsaWRhdGVdOworI2VuZGlmCit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eTo6c2l6ZURpZENoYW5nZSgpCit7CisgICAgaWYgKCFtX3dlYlBhZ2VQcm94eS5pc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUdl
b21ldHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBzZW5kVXBkYXRlR2VvbWV0cnkoKTsKK30K
Kwordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpkZXZpY2VTY2FsZUZhY3Rv
ckRpZENoYW5nZSgpCit7CisgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6OkRyYXdpbmdBcmVhOjpTZXREZXZpY2VTY2FsZUZhY3RvcihtX3dlYlBhZ2VQcm94eS5kZXZp
Y2VTY2FsZUZhY3RvcigpKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOworfQorCit2b2lkIFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmRpZFVwZGF0ZUdlb21ldHJ5KCkKK3sKKyAg
ICBBU1NFUlQobV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVHZW9tZXRyeSk7CisKKyAgICBtX2lzV2Fp
dGluZ0ZvckRpZFVwZGF0ZUdlb21ldHJ5ID0gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUgV0tWaWV3
IHdhcyByZXNpemVkIHdoaWxlIHdlIHdlcmUgd2FpdGluZyBmb3IgYSBEaWRVcGRhdGVHZW9tZXRy
eSByZXBseSBmcm9tIHRoZSB3ZWIgcHJvY2VzcywKKyAgICAvLyB3ZSBuZWVkIHRvIHJlc2VuZCB0
aGUgbmV3IHNpemUgaGVyZS4KKyAgICBpZiAobV9sYXN0U2VudFNpemUgIT0gbV9zaXplKQorICAg
ICAgICBzZW5kVXBkYXRlR2VvbWV0cnkoKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5OjpzZW5kVXBkYXRlR2VvbWV0cnkoKQoreworICAgIG1fbGFzdFNlbnRTaXpl
ID0gbV9zaXplOworICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpE
cmF3aW5nQXJlYTo6VXBkYXRlR2VvbWV0cnkobV9zaXplLCBJbnRTaXplKCksIGZhbHNlLCBNYWNo
U2VuZFJpZ2h0KCkpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7CisgICAgbV9pc1dhaXRpbmdG
b3JEaWRVcGRhdGVHZW9tZXRyeSA9IHRydWU7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eTo6d2lsbENvbW1pdExheWVyVHJlZSh1aW50NjRfdCB0cmFuc2FjdGlvbklE
KQoreworICAgIG1fcGVuZGluZ0xheWVyVHJlZVRyYW5zYWN0aW9uSUQgPSB0cmFuc2FjdGlvbklE
OworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmNvbW1pdExheWVy
VHJlZShjb25zdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYgbGF5ZXJUcmVlVHJhbnNhY3Rp
b24sIGNvbnN0IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24mIHNjcm9sbGlu
Z1RyZWVUcmFuc2FjdGlvbikKK3sKKyAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShDb21taXRM
YXllclRyZWVTdGFydCwgQ29tbWl0TGF5ZXJUcmVlRW5kKTsKKworICAgIExPRyhSZW1vdGVMYXll
clRyZWUsICIlcyIsIGxheWVyVHJlZVRyYW5zYWN0aW9uLmRlc2NyaXB0aW9uKCkuZGF0YSgpKTsK
KyAgICBMT0coUmVtb3RlTGF5ZXJUcmVlLCAiJXMiLCBzY3JvbGxpbmdUcmVlVHJhbnNhY3Rpb24u
ZGVzY3JpcHRpb24oKS5kYXRhKCkpOworCisgICAgQVNTRVJUKGxheWVyVHJlZVRyYW5zYWN0aW9u
LnRyYW5zYWN0aW9uSUQoKSA9PSBtX2xhc3RWaXNpYmxlVHJhbnNhY3Rpb25JRCArIDEpOworICAg
IG1fdHJhbnNhY3Rpb25JREZvclBlbmRpbmdDQUNvbW1pdCA9IGxheWVyVHJlZVRyYW5zYWN0aW9u
LnRyYW5zYWN0aW9uSUQoKTsKKworICAgIGlmIChsYXllclRyZWVUcmFuc2FjdGlvbi5oYXNFZGl0
b3JTdGF0ZSgpKQorICAgICAgICBtX3dlYlBhZ2VQcm94eS5lZGl0b3JTdGF0ZUNoYW5nZWQobGF5
ZXJUcmVlVHJhbnNhY3Rpb24uZWRpdG9yU3RhdGUoKSk7CisKKyAgICBpZiAobV9yZW1vdGVMYXll
clRyZWVIb3N0LnVwZGF0ZUxheWVyVHJlZShsYXllclRyZWVUcmFuc2FjdGlvbikpIHsKKyAgICAg
ICAgaWYgKGxheWVyVHJlZVRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSUQoKSA+PSBtX3RyYW5zYWN0
aW9uSURGb3JVbmhpZGluZ0NvbnRlbnQpCisgICAgICAgICAgICBtX3dlYlBhZ2VQcm94eS5zZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKG1fcmVtb3RlTGF5ZXJUcmVlSG9zdC5yb290
TGF5ZXIoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcmVtb3RlTGF5ZXJUcmVlSG9z
dC5kZXRhY2hSb290TGF5ZXIoKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQorICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OlJlcXVlc3RlZFNjcm9sbElu
Zm8gcmVxdWVzdGVkU2Nyb2xsSW5mbzsKKyAgICBtX3dlYlBhZ2VQcm94eS5zY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5KCktPmNvbW1pdFNjcm9sbGluZ1RyZWVTdGF0ZShzY3JvbGxpbmdUcmVlVHJh
bnNhY3Rpb24sIHJlcXVlc3RlZFNjcm9sbEluZm8pOworI2VuZGlmCisKKyAgICBtX3dlYlBhZ2VQ
cm94eS5kaWRDb21taXRMYXllclRyZWUobGF5ZXJUcmVlVHJhbnNhY3Rpb24pOworCisjaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKG1fd2ViUGFn
ZVByb3h5LnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKS0+aGFzRml4ZWRPclN0aWNreSgpKSB7
CisgICAgICAgIC8vIElmIHdlIGdvdCBhIG5ldyBsYXllciBmb3IgYSBmaXhlZCBvciBzdGlja3kg
bm9kZSwgaXRzIHBvc2l0aW9uIGZyb20gdGhlIFdlYlByb2Nlc3MgaXMgcHJvYmFibHkgc3RhbGUu
IFdlIG5lZWQgdG8gcmUtcnVuIHRoZSAidmlld3BvcnQiIGNoYW5nZWQgbG9naWMgdG8gdWRwYXRl
IGl0IHdpdGggb3VyIFVJLXNpZGUgc3RhdGUuCisgICAgICAgIEZsb2F0UmVjdCBjdXN0b21GaXhl
ZFBvc2l0aW9uUmVjdCA9IG1fd2ViUGFnZVByb3h5LmNvbXB1dGVDdXN0b21GaXhlZFBvc2l0aW9u
UmVjdChtX3dlYlBhZ2VQcm94eS51bm9ic2N1cmVkQ29udGVudFJlY3QoKSwgbV93ZWJQYWdlUHJv
eHkudW5vYnNjdXJlZENvbnRlbnRSZWN0UmVzcGVjdGluZ0lucHV0Vmlld0JvdW5kcygpLCBtX3dl
YlBhZ2VQcm94eS5jdXN0b21GaXhlZFBvc2l0aW9uUmVjdCgpLCBtX3dlYlBhZ2VQcm94eS5kaXNw
bGF5ZWRDb250ZW50U2NhbGUoKSwgRnJhbWVWaWV3OjpMYXlvdXRWaWV3cG9ydENvbnN0cmFpbnQ6
OlVuY29uc3RyYWluZWQsIG1fd2ViUGFnZVByb3h5LnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHko
KS0+dmlzdWFsVmlld3BvcnRFbmFibGVkKCkpOworICAgICAgICBtX3dlYlBhZ2VQcm94eS5zY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5KCktPnZpZXdwb3J0Q2hhbmdlZFZpYURlbGVnYXRlZFNjcm9s
bGluZyhtX3dlYlBhZ2VQcm94eS5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCktPnJvb3RTY3Jv
bGxpbmdOb2RlSUQoKSwgY3VzdG9tRml4ZWRQb3NpdGlvblJlY3QsIG1fd2ViUGFnZVByb3h5LmRp
c3BsYXllZENvbnRlbnRTY2FsZSgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIEhhbmRsZSBy
ZXF1ZXN0ZWQgc2Nyb2xsIHBvc2l0aW9uIHVwZGF0ZXMgZnJvbSB0aGUgc2Nyb2xsaW5nIHRyZWUg
dHJhbnNhY3Rpb24gYWZ0ZXIgZGlkQ29tbWl0TGF5ZXJUcmVlKCkKKyAgICAvLyBoYXMgdXBkYXRl
ZCB0aGUgdmlldyBzaXplIGJhc2VkIG9uIHRoZSBjb250ZW50IHNpemUuCisgICAgaWYgKHJlcXVl
c3RlZFNjcm9sbEluZm8ucmVxdWVzdHNTY3JvbGxQb3NpdGlvblVwZGF0ZSkKKyAgICAgICAgbV93
ZWJQYWdlUHJveHkucmVxdWVzdFNjcm9sbChyZXF1ZXN0ZWRTY3JvbGxJbmZvLnJlcXVlc3RlZFNj
cm9sbFBvc2l0aW9uLCBsYXllclRyZWVUcmFuc2FjdGlvbi5zY3JvbGxPcmlnaW4oKSwgcmVxdWVz
dGVkU2Nyb2xsSW5mby5yZXF1ZXN0SXNQcm9ncmFtbWF0aWNTY3JvbGwpOworI2VuZGlmIC8vIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyAgICBpZiAobV9kZWJ1Z0luZGljYXRvckxheWVyVHJl
ZUhvc3QpIHsKKyAgICAgICAgZmxvYXQgc2NhbGUgPSBpbmRpY2F0b3JTY2FsZShsYXllclRyZWVU
cmFuc2FjdGlvbi5jb250ZW50c1NpemUoKSk7CisgICAgICAgIGJvb2wgcm9vdExheWVyQ2hhbmdl
ZCA9IG1fZGVidWdJbmRpY2F0b3JMYXllclRyZWVIb3N0LT51cGRhdGVMYXllclRyZWUobGF5ZXJU
cmVlVHJhbnNhY3Rpb24sIHNjYWxlKTsKKyAgICAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb247
CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IGxheWVyVHJlZVRy
YW5zYWN0aW9uLnNjcm9sbFBvc2l0aW9uKCk7CisjZW5kaWYKKyAgICAgICAgdXBkYXRlRGVidWdJ
bmRpY2F0b3IobGF5ZXJUcmVlVHJhbnNhY3Rpb24uY29udGVudHNTaXplKCksIHJvb3RMYXllckNo
YW5nZWQsIHNjYWxlLCBzY3JvbGxQb3NpdGlvbik7CisgICAgICAgIGFzTGF5ZXIobV9kZWJ1Z0lu
ZGljYXRvckxheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpKS5uYW1lID0gQCJJbmRpY2F0b3IgaG9z
dCByb290IjsKKyAgICB9CisKKyAgICBtX3dlYlBhZ2VQcm94eS5sYXllclRyZWVDb21taXRDb21w
bGV0ZSgpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChzdGQ6OmV4Y2hhbmdlKG1fZGlk
VXBkYXRlTWVzc2FnZVN0YXRlLCBOZWVkc0RpZFVwZGF0ZSkgPT0gTWlzc2VkQ29tbWl0KQorICAg
ICAgICBkaWRSZWZyZXNoRGlzcGxheSgpOworICAgIFttX2Rpc3BsYXlMaW5rSGFuZGxlciBzY2hl
ZHVsZV07CisjZWxzZQorICAgIG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlID0gTmVlZHNEaWRVcGRh
dGU7CisgICAgZGlkUmVmcmVzaERpc3BsYXkoKTsKKyNlbmRpZgorCisgICAgaWYgKGF1dG8gbWls
ZXN0b25lcyA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLm5ld2x5UmVhY2hlZExheW91dE1pbGVzdG9u
ZXMoKSkKKyAgICAgICAgbV93ZWJQYWdlUHJveHkuZGlkUmVhY2hMYXlvdXRNaWxlc3RvbmUobWls
ZXN0b25lcyk7CisKKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrSUQgOiBsYXllclRyZWVUcmFuc2Fj
dGlvbi5jYWxsYmFja0lEcygpKSB7CisgICAgICAgIGlmIChhdXRvIGNhbGxiYWNrID0gbV9jYWxs
YmFja3MudGFrZTxWb2lkQ2FsbGJhY2s+KGNhbGxiYWNrSUQpKQorICAgICAgICAgICAgY2FsbGJh
Y2stPnBlcmZvcm1DYWxsYmFjaygpOworICAgIH0KK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5OjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KHVpbnQ2NF90IGxh
eWVySUQsIGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUgc3RhcnRUaW1lKQoreworICAgIG1fd2Vi
UGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6QWNjZWxlcmF0
ZWRBbmltYXRpb25EaWRTdGFydChsYXllcklELCBrZXksIHN0YXJ0VGltZSksIG1fd2ViUGFnZVBy
b3h5LnBhZ2VJRCgpKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
OjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJp
bmcmIGtleSkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
RHJhd2luZ0FyZWE6OkFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKGxheWVySUQsIGtleSksIG1f
d2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKK30KKworc3RhdGljIGNvbnN0IGZsb2F0IGluZGljYXRv
ckluc2V0ID0gMTA7CisKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHk6OnNldFZpZXdFeHBvc2VkUmVjdChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OkZsb2F0UmVjdD4gdmlld0V4cG9zZWRSZWN0KQoreworICAgIERyYXdpbmdBcmVhUHJveHk6OnNl
dFZpZXdFeHBvc2VkUmVjdCh2aWV3RXhwb3NlZFJlY3QpOworICAgIHVwZGF0ZURlYnVnSW5kaWNh
dG9yUG9zaXRpb24oKTsKK30KKyNlbmRpZgorCitGbG9hdFBvaW50IFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHk6OmluZGljYXRvckxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV93
ZWJQYWdlUHJveHkuZGVsZWdhdGVzU2Nyb2xsaW5nKCkpIHsKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgICAgIEZsb2F0UG9pbnQgdGlsZWRNYXBMb2NhdGlvbiA9IG1fd2ViUGFnZVByb3h5LnVub2Jz
Y3VyZWRDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkuZXhwYW5kZWRUbyhGbG9hdFBvaW50KCkpOwor
ICAgICAgICB0aWxlZE1hcExvY2F0aW9uID0gdGlsZWRNYXBMb2NhdGlvbi5leHBhbmRlZFRvKG1f
d2ViUGFnZVByb3h5LmV4cG9zZWRDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkpOworCisgICAgICAg
IGZsb2F0IGFic29sdXRlSW5zZXQgPSBpbmRpY2F0b3JJbnNldCAvIG1fd2ViUGFnZVByb3h5LmRp
c3BsYXllZENvbnRlbnRTY2FsZSgpOworICAgICAgICB0aWxlZE1hcExvY2F0aW9uICs9IEZsb2F0
U2l6ZShhYnNvbHV0ZUluc2V0LCBhYnNvbHV0ZUluc2V0KTsKKyNlbHNlCisgICAgICAgIEZsb2F0
UG9pbnQgdGlsZWRNYXBMb2NhdGlvbjsKKyAgICAgICAgaWYgKHZpZXdFeHBvc2VkUmVjdCgpKQor
ICAgICAgICAgICAgdGlsZWRNYXBMb2NhdGlvbiA9IHZpZXdFeHBvc2VkUmVjdCgpLnZhbHVlKCku
bG9jYXRpb24oKTsKKworICAgICAgICB0aWxlZE1hcExvY2F0aW9uICs9IEZsb2F0U2l6ZShpbmRp
Y2F0b3JJbnNldCwgaW5kaWNhdG9ySW5zZXQpOworICAgICAgICBmbG9hdCBzY2FsZSA9IDEgLyBt
X3dlYlBhZ2VQcm94eS5wYWdlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgdGlsZWRNYXBMb2NhdGlv
bi5zY2FsZShzY2FsZSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHRpbGVkTWFwTG9jYXRpb247
CisgICAgfQorICAgIAorICAgIHJldHVybiBGbG9hdFBvaW50KGluZGljYXRvckluc2V0LCBpbmRp
Y2F0b3JJbnNldCArIG1fd2ViUGFnZVByb3h5LnRvcENvbnRlbnRJbnNldCgpKTsKK30KKwordm9p
ZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVEZWJ1Z0luZGljYXRvclBv
c2l0aW9uKCkKK3sKKyAgICBpZiAoIW1fdGlsZU1hcEhvc3RMYXllcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgW21fdGlsZU1hcEhvc3RMYXllciBzZXRQb3NpdGlvbjppbmRpY2F0b3JMb2NhdGlv
bigpXTsKK30KKworZmxvYXQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6aW5kaWNh
dG9yU2NhbGUoSW50U2l6ZSBjb250ZW50c1NpemUpIGNvbnN0Cit7CisgICAgLy8gUGljayBhIGdv
b2Qgc2NhbGUuCisgICAgSW50U2l6ZSB2aWV3U2l6ZSA9IG1fd2ViUGFnZVByb3h5LnZpZXdTaXpl
KCk7CisKKyAgICBmbG9hdCBzY2FsZSA9IDE7CisgICAgaWYgKCFjb250ZW50c1NpemUuaXNFbXB0
eSgpKSB7CisgICAgICAgIGZsb2F0IHdpZHRoU2NhbGUgPSBzdGQ6Om1pbjxmbG9hdD4oKHZpZXdT
aXplLndpZHRoKCkgLSAyICogaW5kaWNhdG9ySW5zZXQpIC8gY29udGVudHNTaXplLndpZHRoKCks
IDAuMDUpOworICAgICAgICBzY2FsZSA9IHN0ZDo6bWluKHdpZHRoU2NhbGUsIHN0YXRpY19jYXN0
PGZsb2F0Pih2aWV3U2l6ZS5oZWlnaHQoKSAtIDIgKiBpbmRpY2F0b3JJbnNldCkgLyBjb250ZW50
c1NpemUuaGVpZ2h0KCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gc2NhbGU7Cit9CisKK3Zv
aWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlRGVidWdJbmRpY2F0b3Io
KQoreworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgYWxzbyB1cGRhdGUgbGl2ZSBpbmZvcm1hdGlv
biBkdXJpbmcgc2NhbGUuCisgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JQb3NpdGlvbigpOworfQor
Cit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZURlYnVnSW5kaWNh
dG9yKEludFNpemUgY29udGVudHNTaXplLCBib29sIHJvb3RMYXllckNoYW5nZWQsIGZsb2F0IHNj
YWxlLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit7CisgICAgLy8gTWFrZSBzdXJl
IHdlJ3JlIHRoZSBsYXN0IHN1YmxheWVyLgorICAgIENBTGF5ZXIgKnJvb3RMYXllciA9IGFzTGF5
ZXIobV9yZW1vdGVMYXllclRyZWVIb3N0LnJvb3RMYXllcigpKTsKKyAgICBbbV90aWxlTWFwSG9z
dExheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbcm9vdExheWVyIGFkZFN1YmxheWVy
Om1fdGlsZU1hcEhvc3RMYXllci5nZXQoKV07CisKKyAgICAvLyBQaWNrIGEgZ29vZCBzY2FsZS4K
KyAgICBJbnRTaXplIHZpZXdTaXplID0gbV93ZWJQYWdlUHJveHkudmlld1NpemUoKTsKKworICAg
IFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0Qm91bmRzOkZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNv
bnRlbnRzU2l6ZSldOworICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0UG9zaXRpb246aW5kaWNh
dG9yTG9jYXRpb24oKV07CisgICAgW21fdGlsZU1hcEhvc3RMYXllciBzZXRUcmFuc2Zvcm06Q0FU
cmFuc2Zvcm0zRE1ha2VTY2FsZShzY2FsZSwgc2NhbGUsIDEpXTsKKworICAgIGlmIChyb290TGF5
ZXJDaGFuZ2VkKSB7CisgICAgICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0U3VibGF5ZXJzOkBb
XV07CisgICAgICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgYWRkU3VibGF5ZXI6YXNMYXllcihtX2Rl
YnVnSW5kaWNhdG9yTGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpXTsKKyAgICAgICAgW21fdGls
ZU1hcEhvc3RMYXllciBhZGRTdWJsYXllcjptX2V4cG9zZWRSZWN0SW5kaWNhdG9yTGF5ZXIuZ2V0
KCldOworICAgIH0KKyAgICAKKyAgICBjb25zdCBmbG9hdCBpbmRpY2F0b3JCb3JkZXJXaWR0aCA9
IDE7CisgICAgZmxvYXQgY291bnRlclNjYWxlZEJvcmRlciA9IGluZGljYXRvckJvcmRlcldpZHRo
IC8gc2NhbGU7CisKKyAgICBbbV9leHBvc2VkUmVjdEluZGljYXRvckxheWVyIHNldEJvcmRlcldp
ZHRoOmNvdW50ZXJTY2FsZWRCb3JkZXJdOworCisgICAgaWYgKG1fd2ViUGFnZVByb3h5LmRlbGVn
YXRlc1Njcm9sbGluZygpKSB7CisgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRFeHBvc2VkUmVjdDsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHNjYWxlZEV4cG9zZWRSZWN0ID0gbV93ZWJQYWdl
UHJveHkuZXhwb3NlZENvbnRlbnRSZWN0KCk7CisjZWxzZQorICAgICAgICBpZiAodmlld0V4cG9z
ZWRSZWN0KCkpCisgICAgICAgICAgICBzY2FsZWRFeHBvc2VkUmVjdCA9IHZpZXdFeHBvc2VkUmVj
dCgpLnZhbHVlKCk7CisgICAgICAgIGZsb2F0IHNjYWxlID0gMSAvIG1fd2ViUGFnZVByb3h5LnBh
Z2VTY2FsZUZhY3RvcigpOworICAgICAgICBzY2FsZWRFeHBvc2VkUmVjdC5zY2FsZShzY2FsZSk7
CisjZW5kaWYKKyAgICAgICAgW21fZXhwb3NlZFJlY3RJbmRpY2F0b3JMYXllciBzZXRQb3NpdGlv
bjpzY2FsZWRFeHBvc2VkUmVjdC5sb2NhdGlvbigpXTsKKyAgICAgICAgW21fZXhwb3NlZFJlY3RJ
bmRpY2F0b3JMYXllciBzZXRCb3VuZHM6RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2NhbGVkRXhw
b3NlZFJlY3Quc2l6ZSgpKV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgW21fZXhwb3NlZFJlY3RJ
bmRpY2F0b3JMYXllciBzZXRQb3NpdGlvbjpzY3JvbGxQb3NpdGlvbl07CisgICAgICAgIFttX2V4
cG9zZWRSZWN0SW5kaWNhdG9yTGF5ZXIgc2V0Qm91bmRzOkZsb2F0UmVjdChGbG9hdFBvaW50KCks
IHZpZXdTaXplKV07CisgICAgfQorfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHk6OmluaXRpYWxpemVEZWJ1Z0luZGljYXRvcigpCit7CisgICAgbV9kZWJ1Z0luZGljYXRv
ckxheWVyVHJlZUhvc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbW90ZUxheWVyVHJlZUhvc3Q+KCp0
aGlzKTsKKyAgICBtX2RlYnVnSW5kaWNhdG9yTGF5ZXJUcmVlSG9zdC0+c2V0SXNEZWJ1Z0xheWVy
VHJlZUhvc3QodHJ1ZSk7CisKKyAgICBtX3RpbGVNYXBIb3N0TGF5ZXIgPSBhZG9wdE5TKFtbQ0FM
YXllciBhbGxvY10gaW5pdF0pOworICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0TmFtZTpAIlRp
bGUgbWFwIGhvc3QiXTsKKyAgICBbbV90aWxlTWFwSG9zdExheWVyIHNldERlbGVnYXRlOltXZWJB
Y3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07CisgICAgW21fdGlsZU1hcEhv
c3RMYXllciBzZXRBbmNob3JQb2ludDpDR1BvaW50WmVyb107CisgICAgW21fdGlsZU1hcEhvc3RM
YXllciBzZXRPcGFjaXR5OjAuOF07CisgICAgW21fdGlsZU1hcEhvc3RMYXllciBzZXRNYXNrc1Rv
Qm91bmRzOllFU107CisgICAgW21fdGlsZU1hcEhvc3RMYXllciBzZXRCb3JkZXJXaWR0aDoyXTsK
KworICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsK
KyAgICB7CisgICAgICAgIGNvbnN0IENHRmxvYXQgY29tcG9uZW50c1tdID0geyAxLCAxLCAxLCAw
LjYgfTsKKyAgICAgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihDR0Nv
bG9yQ3JlYXRlKGNvbG9yU3BhY2UsIGNvbXBvbmVudHMpKTsKKyAgICAgICAgW21fdGlsZU1hcEhv
c3RMYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y29sb3IuZ2V0KCldOworCisgICAgICAgIGNvbnN0
IENHRmxvYXQgYm9yZGVyQ29tcG9uZW50c1tdID0geyAwLCAwLCAwLCAxIH07CisgICAgICAgIFJl
dGFpblB0cjxDR0NvbG9yUmVmPiBib3JkZXJDb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShj
b2xvclNwYWNlLCBib3JkZXJDb21wb25lbnRzKSk7CisgICAgICAgIFttX3RpbGVNYXBIb3N0TGF5
ZXIgc2V0Qm9yZGVyQ29sb3I6Ym9yZGVyQ29sb3IuZ2V0KCldOworICAgIH0KKyAgICAKKyAgICBt
X2V4cG9zZWRSZWN0SW5kaWNhdG9yTGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5p
dF0pOworICAgIFttX2V4cG9zZWRSZWN0SW5kaWNhdG9yTGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFj
dGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKKyAgICBbbV9leHBvc2VkUmVj
dEluZGljYXRvckxheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRaZXJvXTsKKworICAgIHsKKyAg
ICAgICAgY29uc3QgQ0dGbG9hdCBjb21wb25lbnRzW10gPSB7IDAsIDEsIDAsIDEgfTsKKyAgICAg
ICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKGNv
bG9yU3BhY2UsIGNvbXBvbmVudHMpKTsKKyAgICAgICAgW21fZXhwb3NlZFJlY3RJbmRpY2F0b3JM
YXllciBzZXRCb3JkZXJDb2xvcjpjb2xvci5nZXQoKV07CisgICAgfQorfQorCit2b2lkIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmRpZFJlZnJlc2hEaXNwbGF5KCkKK3sKKyAgICBp
ZiAoIW1fd2ViUGFnZVByb3h5LmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlICE9IE5lZWRzRGlkVXBkYXRlKSB7CisgICAgICAgIG1f
ZGlkVXBkYXRlTWVzc2FnZVN0YXRlID0gTWlzc2VkQ29tbWl0OworI2lmIFBMQVRGT1JNKElPUykK
KyAgICAgICAgW21fZGlzcGxheUxpbmtIYW5kbGVyIHBhdXNlXTsKKyNlbmRpZgorICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlID0gRG9lc05v
dE5lZWREaWRVcGRhdGU7CisKKyAgICAvLyBXYWl0aW5nIGZvciBDQSB0byBjb21taXQgaXMgaW5z
dWZmaWNpZW50LCBiZWNhdXNlIHRoZSByZW5kZXIgc2VydmVyIGNhbiBzdGlsbCBiZQorICAgIC8v
IHVzaW5nIG91ciBiYWNraW5nIHN0b3JlLiBXZSBjYW4gaW1wcm92ZSB0aGlzIGJ5IHdhaXRpbmcg
Zm9yIHRoZSByZW5kZXIgc2VydmVyIHRvIGNvbW1pdAorICAgIC8vIGlmIHdlIGZpbmQgQVBJIHRv
IGRvIHNvLCBidXQgZm9yIG5vdyB3ZSB3aWxsIG1ha2UgZXh0cmEgYnVmZmVycyBpZiBuZWVkIGJl
LgorICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJl
YTo6RGlkVXBkYXRlKCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKKworICAgIG1fbGFzdFZp
c2libGVUcmFuc2FjdGlvbklEID0gbV90cmFuc2FjdGlvbklERm9yUGVuZGluZ0NBQ29tbWl0Owor
CisgICAgbV93ZWJQYWdlUHJveHkuZGlkVXBkYXRlQWN0aXZpdHlTdGF0ZSgpOworfQorCit2b2lk
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OndhaXRGb3JEaWRVcGRhdGVBY3Rpdml0
eVN0YXRlKCkKK3sKKyAgICAvLyBXZSBtdXN0IHNlbmQgdGhlIGRpZFVwZGF0ZSBtZXNzYWdlIGJl
Zm9yZSBibG9ja2luZyBvbiB0aGUgbmV4dCBjb21taXQsIG90aGVyd2lzZQorICAgIC8vIHdlIGNh
biBiZSBndWFyYW50ZWVkIHRoYXQgdGhlIG5leHQgY29tbWl0IHdvbid0IGNvbWUgdW50aWwgYWZ0
ZXIgdGhlIHdhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5IHRpbWVzIG91dC4KKyAgICBpZiAo
bV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUgIT0gRG9lc05vdE5lZWREaWRVcGRhdGUpCisgICAgICAg
IGRpZFJlZnJlc2hEaXNwbGF5KCk7CisKKyAgICBzdGF0aWMgU2Vjb25kcyBhY3Rpdml0eVN0YXRl
VXBkYXRlVGltZW91dCA9IFtdIHsKKyAgICAgICAgaWYgKGlkIHZhbHVlID0gW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OkAiV2ViS2l0T3ZlcnJpZGVB
Y3Rpdml0eVN0YXRlVXBkYXRlVGltZW91dCJdKQorICAgICAgICAgICAgcmV0dXJuIFNlY29uZHMo
W3ZhbHVlIGRvdWJsZVZhbHVlXSk7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIHJldHVy
biBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKDUwMCk7CisjZWxzZQorICAgICAgICByZXR1cm4g
U2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygyNTApOworI2VuZGlmCisgICAgfSgpOworICAgIG1f
d2ViUGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNwYXRjaElt
bWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpDb21t
aXRMYXllclRyZWU+KG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpLCBhY3Rpdml0eVN0YXRlVXBkYXRl
VGltZW91dCwgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2Fn
ZUFycml2ZXMpOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmRp
c3BhdGNoQWZ0ZXJFbnN1cmluZ0RyYXdpbmcoV1RGOjpGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQoreworICAgIGlmICghbV93ZWJQYWdlUHJv
eHkuaXNWYWxpZCgpKSB7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2FsbGJhY2tCYXNlOjpF
cnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OkFk
ZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRChtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSwgbnVsbHB0cikpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7Cit9CisKK3ZvaWQg
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6aGlkZUNvbnRlbnRVbnRpbFBlbmRpbmdV
cGRhdGUoKQoreworICAgIG1fdHJhbnNhY3Rpb25JREZvclVuaGlkaW5nQ29udGVudCA9IG5leHRM
YXllclRyZWVUcmFuc2FjdGlvbklEKCk7CisgICAgbV9yZW1vdGVMYXllclRyZWVIb3N0LmRldGFj
aFJvb3RMYXllcigpOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6
OmhpZGVDb250ZW50VW50aWxBbnlVcGRhdGUoKQoreworICAgIG1fcmVtb3RlTGF5ZXJUcmVlSG9z
dC5kZXRhY2hSb290TGF5ZXIoKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5OjpwcmVwYXJlRm9yQXBwU3VzcGVuc2lvbigpCit7CisgICAgbV9yZW1vdGVMYXllclRy
ZWVIb3N0Lm1hcEFsbElPU3VyZmFjZUJhY2tpbmdTdG9yZSgpOworfQorCitib29sIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHk6Omhhc1Zpc2libGVDb250ZW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yZW1vdGVMYXllclRyZWVIb3N0LnJvb3RMYXllcigpOworfQorCitib29sIFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZVByb3h5LmlzQWx3YXlzT25Mb2dnaW5nQWxs
b3dlZCgpOworfQorCitMYXllck9yVmlldyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eTo6bGF5ZXJXaXRoSURGb3JUZXN0aW5nKHVpbnQ2NF90IGxheWVySUQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcmVtb3RlTGF5ZXJUcmVlSG9zdC5sYXllcldpdGhJREZvclRlc3RpbmcobGF5ZXJJ
RCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUhvc3QuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGE3MTFmOGI1NjdlZjdiYTlhZGIxZGE5MGY2NTYyMWUyMzc5OTczOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllclRyZWVIb3N0LmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiTGF5ZXJSZXByZXNlbnRhdGlvbi5oIgorI2luY2x1ZGUgIlJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNB
TGF5ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworT0JKQ19DTEFTUyBDQUFuaW1hdGlvbjsKK09CSkNfQ0xBU1MgV0tBbmltYXRpb25E
ZWxlZ2F0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHk7CitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFJlbW90ZUxheWVy
VHJlZUhvc3QgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbW90ZUxheWVyVHJlZUhvc3QoUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSYpOworICAgIHZpcnR1YWwgflJlbW90ZUxheWVy
VHJlZUhvc3QoKTsKKworICAgIExheWVyT3JWaWV3ICpnZXRMYXllcihXZWJDb3JlOjpHcmFwaGlj
c0xheWVyOjpQbGF0Zm9ybUxheWVySUQpIGNvbnN0OworICAgIExheWVyT3JWaWV3ICpyb290TGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllcjsgfQorCisgICAgc3RhdGljIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklEKENBTGF5ZXIqKTsKKworICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCBsYXllciBjaGFuZ2VkLgorICAgIGJvb2wgdXBk
YXRlTGF5ZXJUcmVlKGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiwgZmxvYXQgaW5k
aWNhdG9yU2NhbGVGYWN0b3IgID0gMSk7CisKKyAgICB2b2lkIHNldElzRGVidWdMYXllclRyZWVI
b3N0KGJvb2wgZmxhZykgeyBtX2lzRGVidWdMYXllclRyZWVIb3N0ID0gZmxhZzsgfQorICAgIGJv
b2wgaXNEZWJ1Z0xheWVyVHJlZUhvc3QoKSBjb25zdCB7IHJldHVybiBtX2lzRGVidWdMYXllclRy
ZWVIb3N0OyB9CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6
UGxhdGZvcm1MYXllcklELCBSZXRhaW5QdHI8V0tBbmltYXRpb25EZWxlZ2F0ZT4+IExheWVyQW5p
bWF0aW9uRGVsZWdhdGVNYXA7CisgICAgTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZU1hcCYgYW5pbWF0
aW9uRGVsZWdhdGVzKCkgeyByZXR1cm4gbV9hbmltYXRpb25EZWxlZ2F0ZXM7IH0KKworICAgIHZv
aWQgYW5pbWF0aW9uRGlkU3RhcnQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklELCBDQUFuaW1hdGlvbiAqLCBkb3VibGUgc3RhcnRUaW1lKTsKKyAgICB2b2lkIGFuaW1hdGlv
bkRpZEVuZChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQsIENBQW5pbWF0
aW9uICopOworCisgICAgdm9pZCBjbGVhckxheWVycygpOworCisgICAgLy8gRGV0YWNoIHRoZSBy
b290IGxheWVyOyBpdCB3aWxsIGJlIHJlYXR0YWNoZWQgdXBvbiB0aGUgbmV4dCBpbmNvbWluZyBj
b21taXQuCisgICAgdm9pZCBkZXRhY2hSb290TGF5ZXIoKTsKKworICAgIC8vIFR1cm4gYWxsIENB
TWFjaFBvcnQgb2JqZWN0cyBpbiBsYXllciBjb250ZW50cyBpbnRvIGFjdHVhbCBJT1N1cmZhY2Vz
LgorICAgIC8vIFRoaXMgYXZvaWRzIGtlZXBpbmcgYW4gb3V0c3RhbmRpbmcgSW5Vc2UgcmVmZXJl
bmNlIHdoZW4gc3VzcGVuZGVkLgorICAgIHZvaWQgbWFwQWxsSU9TdXJmYWNlQmFja2luZ1N0b3Jl
KCk7CisKKyAgICBMYXllck9yVmlldyogbGF5ZXJXaXRoSURGb3JUZXN0aW5nKHVpbnQ2NF90KSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBMYXllck9yVmlldyAqY3JlYXRlTGF5ZXIoY29uc3QgUmVt
b3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyQ3JlYXRpb25Qcm9wZXJ0aWVzJiwgY29uc3Qg
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyopOworICAgIHN0YXRp
YyB2b2lkIHNldExheWVySUQoQ0FMYXllciAqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0
Zm9ybUxheWVySUQpOworCisgICAgdm9pZCBsYXllcldpbGxCZVJlbW92ZWQoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEKTsKKworICAgIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHkmIG1fZHJhd2luZ0FyZWE7CisgICAgTGF5ZXJPclZpZXcgKm1fcm9vdExheWVy
OworICAgIEhhc2hNYXA8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklELCBS
ZXRhaW5QdHI8TGF5ZXJPclZpZXc+PiBtX2xheWVyczsKKyAgICBIYXNoTWFwPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgUmV0YWluUHRyPFdLQW5pbWF0aW9uRGVsZWdh
dGU+PiBtX2FuaW1hdGlvbkRlbGVnYXRlczsKKyAgICBib29sIG1faXNEZWJ1Z0xheWVyVHJlZUhv
c3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0Lm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUhvc3Qu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDczZjRkYzk5YmY0NDNhMDkwOTg3ZDU5MWIzODk0ODQ5YmQ3MTZiNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJl
ZS9SZW1vdGVMYXllclRyZWVIb3N0Lm1tCkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVIb3N0LmgiCisKKyNp
bXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHkuaCIKKyNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5oIgorI2ltcG9y
dCAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24uaCIKKyNpbXBvcnQgIlNoYXJlYWJsZUJpdG1h
cC5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHku
aCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHRDRy5oPgorI2ltcG9ydCA8V2ViQ29yZS9JT1N1cmZhY2UuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJBY3Rpb25E
aXNhYmxpbmdDQUxheWVyRGVsZWdhdGUuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CisKKyNpZiBQTEFU
Rk9STShJT1MpCisjaW1wb3J0IDxVSUtpdC9VSVZpZXcuaD4KKyNlbmRpZgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNkZWZpbmUgUkVMRUFTRV9M
T0dfSUZfQUxMT1dFRCguLi4pIFJFTEVBU0VfTE9HX0lGKG1fZHJhd2luZ0FyZWEuaXNBbHdheXNP
bkxvZ2dpbmdBbGxvd2VkKCksIFZpZXdTdGF0ZSwgX19WQV9BUkdTX18pCisKK1JlbW90ZUxheWVy
VHJlZUhvc3Q6OlJlbW90ZUxheWVyVHJlZUhvc3QoUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eSYgZHJhd2luZ0FyZWEpCisgICAgOiBtX2RyYXdpbmdBcmVhKGRyYXdpbmdBcmVhKQorICAg
ICwgbV9yb290TGF5ZXIobnVsbHB0cikKKyAgICAsIG1faXNEZWJ1Z0xheWVyVHJlZUhvc3QoZmFs
c2UpCit7Cit9CisKK1JlbW90ZUxheWVyVHJlZUhvc3Q6On5SZW1vdGVMYXllclRyZWVIb3N0KCkK
K3sKKyAgICBmb3IgKGF1dG8mIGRlbGVnYXRlIDogbV9hbmltYXRpb25EZWxlZ2F0ZXMudmFsdWVz
KCkpCisgICAgICAgIFtkZWxlZ2F0ZS5nZXQoKSBpbnZhbGlkYXRlXTsKKworICAgIGNsZWFyTGF5
ZXJzKCk7Cit9CisKK2Jvb2wgUmVtb3RlTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJUcmVlKGNv
bnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgZmxvYXQgaW5kaWNh
dG9yU2NhbGVGYWN0b3IpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBjcmVhdGVkTGF5ZXIgOiB0
cmFuc2FjdGlvbi5jcmVhdGVkTGF5ZXJzKCkpIHsKKyAgICAgICAgY29uc3QgUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyogcHJvcGVydGllcyA9IHRyYW5zYWN0aW9u
LmNoYW5nZWRMYXllclByb3BlcnRpZXMoKS5nZXQoY3JlYXRlZExheWVyLmxheWVySUQpOworICAg
ICAgICBjcmVhdGVMYXllcihjcmVhdGVkTGF5ZXIsIHByb3BlcnRpZXMpOworICAgIH0KKworICAg
IGJvb2wgcm9vdExheWVyQ2hhbmdlZCA9IGZhbHNlOworICAgIExheWVyT3JWaWV3ICpyb290TGF5
ZXIgPSBnZXRMYXllcih0cmFuc2FjdGlvbi5yb290TGF5ZXJJRCgpKTsKKyAgICAKKyAgICBpZiAo
IXJvb3RMYXllcikKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgUmVtb3RlTGF5
ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJUcmVlIC0gZmFpbGVkIHRvIGZpbmQgcm9vdCBsYXllciB3
aXRoIElEICVsbHUiLCB0aGlzLCB0cmFuc2FjdGlvbi5yb290TGF5ZXJJRCgpKTsKKworICAgIGlm
IChtX3Jvb3RMYXllciAhPSByb290TGF5ZXIpIHsKKyAgICAgICAgbV9yb290TGF5ZXIgPSByb290
TGF5ZXI7CisgICAgICAgIHJvb3RMYXllckNoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIHR5
cGVkZWYgc3RkOjpwYWlyPEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgR3JhcGhpY3NM
YXllcjo6UGxhdGZvcm1MYXllcklEPiBMYXllcklEUGFpcjsKKyAgICBWZWN0b3I8TGF5ZXJJRFBh
aXI+IGNsb25lc1RvVXBkYXRlOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIC8vIENhbid0IHVz
ZSB0aGUgaU9TIGNvZGUgb24gbWFjT1MgeWV0OiByZGFyOi8vcHJvYmxlbS8zMTI0NzczMAorICAg
IGF1dG8gbGF5ZXJDb250ZW50c1R5cGUgPSBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6TGF5ZXJD
b250ZW50c1R5cGU6OklPU3VyZmFjZTsKKyNlbHNlCisgICAgYXV0byBsYXllckNvbnRlbnRzVHlw
ZSA9IG1fZHJhd2luZ0FyZWEuaGFzRGVidWdJbmRpY2F0b3IoKSA/IFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlOjpMYXllckNvbnRlbnRzVHlwZTo6SU9TdXJmYWNlIDogUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmU6OkxheWVyQ29udGVudHNUeXBlOjpDQU1hY2hQb3J0OworI2VuZGlmCisgICAgCisgICAg
Zm9yIChhdXRvJiBjaGFuZ2VkTGF5ZXIgOiB0cmFuc2FjdGlvbi5jaGFuZ2VkTGF5ZXJQcm9wZXJ0
aWVzKCkpIHsKKyAgICAgICAgYXV0byBsYXllcklEID0gY2hhbmdlZExheWVyLmtleTsKKyAgICAg
ICAgY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyYgcHJv
cGVydGllcyA9ICpjaGFuZ2VkTGF5ZXIudmFsdWU7CisKKyAgICAgICAgTGF5ZXJPclZpZXcgKmxh
eWVyID0gZ2V0TGF5ZXIobGF5ZXJJRCk7CisgICAgICAgIEFTU0VSVChsYXllcik7CisKKyAgICAg
ICAgUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyOjpSZWxhdGVkTGF5ZXJNYXAgcmVsYXRl
ZExheWVyczsKKyAgICAgICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q2hpbGRyZW5DaGFuZ2VkKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8mIGNoaWxkIDogcHJvcGVydGllcy5jaGlsZHJlbikKKyAgICAgICAgICAgICAgICBy
ZWxhdGVkTGF5ZXJzLnNldChjaGlsZCwgZ2V0TGF5ZXIoY2hpbGQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb246Ok1hc2tMYXllckNoYW5nZWQgJiYgcHJvcGVydGllcy5tYXNrTGF5ZXJJRCkK
KyAgICAgICAgICAgIHJlbGF0ZWRMYXllcnMuc2V0KHByb3BlcnRpZXMubWFza0xheWVySUQsIGdl
dExheWVyKHByb3BlcnRpZXMubWFza0xheWVySUQpKTsKKworICAgICAgICBpZiAocHJvcGVydGll
cy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpDbG9uZWRD
b250ZW50c0NoYW5nZWQgJiYgcHJvcGVydGllcy5jbG9uZWRMYXllcklEKQorICAgICAgICAgICAg
Y2xvbmVzVG9VcGRhdGUuYXBwZW5kKExheWVySURQYWlyKGxheWVySUQsIHByb3BlcnRpZXMuY2xv
bmVkTGF5ZXJJRCkpOworCisgICAgICAgIGlmIChtX2lzRGVidWdMYXllclRyZWVIb3N0KSB7Cisg
ICAgICAgICAgICBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXI6OmFwcGx5UHJvcGVydGll
cyhsYXllciwgdGhpcywgcHJvcGVydGllcywgcmVsYXRlZExheWVycywgbGF5ZXJDb250ZW50c1R5
cGUpOworCisgICAgICAgICAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpCb3JkZXJXaWR0aENoYW5nZWQpCisgICAgICAgICAg
ICAgICAgYXNMYXllcihsYXllcikuYm9yZGVyV2lkdGggPSBwcm9wZXJ0aWVzLmJvcmRlcldpZHRo
IC8gaW5kaWNhdG9yU2NhbGVGYWN0b3I7CisgICAgICAgICAgICBhc0xheWVyKGxheWVyKS5tYXNr
c1RvQm91bmRzID0gZmFsc2U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgUmVtb3RlTGF5
ZXJUcmVlUHJvcGVydHlBcHBsaWVyOjphcHBseVByb3BlcnRpZXMobGF5ZXIsIHRoaXMsIHByb3Bl
cnRpZXMsIHJlbGF0ZWRMYXllcnMsIGxheWVyQ29udGVudHNUeXBlKTsKKyAgICB9CisgICAgCisg
ICAgZm9yIChjb25zdCBhdXRvJiBsYXllclBhaXIgOiBjbG9uZXNUb1VwZGF0ZSkgeworICAgICAg
ICBMYXllck9yVmlldyAqbGF5ZXIgPSBnZXRMYXllcihsYXllclBhaXIuZmlyc3QpOworICAgICAg
ICBMYXllck9yVmlldyAqY2xvbmVkTGF5ZXIgPSBnZXRMYXllcihsYXllclBhaXIuc2Vjb25kKTsK
KyAgICAgICAgYXNMYXllcihsYXllcikuY29udGVudHMgPSBhc0xheWVyKGNsb25lZExheWVyKS5j
b250ZW50czsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGRlc3Ryb3llZExheWVyIDogdHJhbnNh
Y3Rpb24uZGVzdHJveWVkTGF5ZXJzKCkpCisgICAgICAgIGxheWVyV2lsbEJlUmVtb3ZlZChkZXN0
cm95ZWRMYXllcik7CisKKyAgICAvLyBEcm9wIHRoZSBjb250ZW50cyBvZiBhbnkgbGF5ZXJzIHdo
aWNoIHdlcmUgdW5wYXJlbnRlZDsgdGhlIFdlYiBwcm9jZXNzIHdpbGwgcmUtc2VuZAorICAgIC8v
IHRoZSBiYWNraW5nIHN0b3JlIGluIHRoZSBjb21taXQgdGhhdCByZXBhcmVudHMgdGhlbS4KKyAg
ICBmb3IgKGF1dG8mIG5ld2x5VW5yZWFjaGFibGVMYXllcklEIDogdHJhbnNhY3Rpb24ubGF5ZXJJ
RHNXaXRoTmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZSgpKQorICAgICAgICBhc0xheWVyKGdl
dExheWVyKG5ld2x5VW5yZWFjaGFibGVMYXllcklEKSkuY29udGVudHMgPSBudWxscHRyOworCisg
ICAgcmV0dXJuIHJvb3RMYXllckNoYW5nZWQ7Cit9CisKK0xheWVyT3JWaWV3ICpSZW1vdGVMYXll
clRyZWVIb3N0OjpnZXRMYXllcihHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbGF5ZXJJ
RCkgY29uc3QKK3sKKyAgICBpZiAoIWxheWVySUQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICByZXR1cm4gbV9sYXllcnMuZ2V0KGxheWVySUQpLmdldCgpOworfQorCit2b2lkIFJlbW90ZUxh
eWVyVHJlZUhvc3Q6OmxheWVyV2lsbEJlUmVtb3ZlZChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX2FuaW1hdGlvbkRl
bGVnYXRlcy5maW5kKGxheWVySUQpOworICAgIGlmIChpdGVyICE9IG1fYW5pbWF0aW9uRGVsZWdh
dGVzLmVuZCgpKSB7CisgICAgICAgIFtpdGVyLT52YWx1ZSBpbnZhbGlkYXRlXTsKKyAgICAgICAg
bV9hbmltYXRpb25EZWxlZ2F0ZXMucmVtb3ZlKGl0ZXIpOworICAgIH0KKyAgICBtX2xheWVycy5y
ZW1vdmUobGF5ZXJJRCk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlSG9zdDo6YW5pbWF0aW9u
RGlkU3RhcnQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQs
IENBQW5pbWF0aW9uICphbmltYXRpb24sIGRvdWJsZSBzdGFydFRpbWUpCit7CisgICAgQ0FMYXll
ciAqbGF5ZXIgPSBhc0xheWVyKGdldExheWVyKGxheWVySUQpKTsKKyAgICBpZiAoIWxheWVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgYW5pbWF0aW9uS2V5OworICAgIGZvciAoTlNT
dHJpbmcgKmtleSBpbiBbbGF5ZXIgYW5pbWF0aW9uS2V5c10pIHsKKyAgICAgICAgaWYgKFtsYXll
ciBhbmltYXRpb25Gb3JLZXk6a2V5XSA9PSBhbmltYXRpb24pIHsKKyAgICAgICAgICAgIGFuaW1h
dGlvbktleSA9IGtleTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKCFhbmltYXRpb25LZXkuaXNFbXB0eSgpKQorICAgICAgICBtX2RyYXdpbmdBcmVhLmFj
Y2VsZXJhdGVkQW5pbWF0aW9uRGlkU3RhcnQobGF5ZXJJRCwgYW5pbWF0aW9uS2V5LCBzdGFydFRp
bWUpOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZUhvc3Q6OmFuaW1hdGlvbkRpZEVuZChXZWJD
b3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbGF5ZXJJRCwgQ0FBbmltYXRpb24g
KmFuaW1hdGlvbikKK3sKKyAgICBDQUxheWVyICpsYXllciA9IGFzTGF5ZXIoZ2V0TGF5ZXIobGF5
ZXJJRCkpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBh
bmltYXRpb25LZXk7CisgICAgZm9yIChOU1N0cmluZyAqa2V5IGluIFtsYXllciBhbmltYXRpb25L
ZXlzXSkgeworICAgICAgICBpZiAoW2xheWVyIGFuaW1hdGlvbkZvcktleTprZXldID09IGFuaW1h
dGlvbikgeworICAgICAgICAgICAgYW5pbWF0aW9uS2V5ID0ga2V5OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWFuaW1hdGlvbktleS5pc0VtcHR5KCkp
CisgICAgICAgIG1fZHJhd2luZ0FyZWEuYWNjZWxlcmF0ZWRBbmltYXRpb25EaWRFbmQobGF5ZXJJ
RCwgYW5pbWF0aW9uS2V5KTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVIb3N0OjpjbGVhckxh
eWVycygpCit7CisgICAgZm9yIChhdXRvJiBpZExheWVyIDogbV9sYXllcnMpIHsKKyAgICAgICAg
bV9hbmltYXRpb25EZWxlZ2F0ZXMucmVtb3ZlKGlkTGF5ZXIua2V5KTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgICAgIFtpZExheWVyLnZhbHVlLmdldCgpIHJlbW92ZUZyb21TdXBlcnZpZXddOwor
I2Vsc2UKKyAgICAgICAgW2FzTGF5ZXIoaWRMYXllci52YWx1ZS5nZXQoKSkgcmVtb3ZlRnJvbVN1
cGVybGF5ZXJdOworI2VuZGlmCisgICAgfQorCisgICAgbV9sYXllcnMuY2xlYXIoKTsKKyAgICBt
X3Jvb3RMYXllciA9IG51bGxwdHI7Cit9CisKK0xheWVyT3JWaWV3KiBSZW1vdGVMYXllclRyZWVI
b3N0OjpsYXllcldpdGhJREZvclRlc3RpbmcodWludDY0X3QgbGF5ZXJJRCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZ2V0TGF5ZXIobGF5ZXJJRCk7Cit9CisKK3N0YXRpYyBOU1N0cmluZyogY29uc3Qg
V0tMYXllcklEUHJvcGVydHlLZXkgPSBAIldLTGF5ZXJJRCI7CisKK3ZvaWQgUmVtb3RlTGF5ZXJU
cmVlSG9zdDo6c2V0TGF5ZXJJRChDQUxheWVyICpsYXllciwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
cjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQpCit7CisgICAgW2xheWVyIHNldFZhbHVlOltOU051
bWJlciBudW1iZXJXaXRoVW5zaWduZWRMb25nTG9uZzpsYXllcklEXSBmb3JLZXk6V0tMYXllcklE
UHJvcGVydHlLZXldOworfQorCitXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQgUmVtb3RlTGF5ZXJUcmVlSG9zdDo6bGF5ZXJJRChDQUxheWVyKiBsYXllcikKK3sKKyAgICBy
ZXR1cm4gW1tsYXllciB2YWx1ZUZvcktleTpXS0xheWVySURQcm9wZXJ0eUtleV0gdW5zaWduZWRM
b25nTG9uZ1ZhbHVlXTsKK30KKworI2lmICFQTEFURk9STShJT1MpCitMYXllck9yVmlldyAqUmVt
b3RlTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXIoY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246OkxheWVyQ3JlYXRpb25Qcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBjb25zdCBSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzKikKK3sKKyAgICBSZXRhaW5QdHI8
Q0FMYXllcj4mIGxheWVyID0gbV9sYXllcnMuYWRkKHByb3BlcnRpZXMubGF5ZXJJRCwgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOworCisgICAgQVNTRVJUKCFsYXllcik7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnRpZXMudHlwZSkgeworICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVM
YXllcjoKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlV2ViTGF5ZXI6CisgICAg
Y2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVJvb3RMYXllcjoKKyAgICBjYXNlIFBsYXRm
b3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxlTGF5ZXI6CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyOgorICAgIGNhc2UgUGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGVQYWdlVGlsZWRCYWNraW5nTGF5ZXI6CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVMYXllcjoKKyAgICBjYXNlIFBsYXRmb3JtQ0FM
YXllcjo6TGF5ZXJUeXBlU2Nyb2xsaW5nTGF5ZXI6CisgICAgICAgIGxheWVyID0gYWRvcHROUyhb
W0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyOgorICAgICAgICBsYXllciA9IGFkb3B0
TlMoW1tDQVRyYW5zZm9ybUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVCYWNrZHJvcExheWVyOgorICAgIGNhc2Ug
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMaWdodFN5c3RlbUJhY2tkcm9wTGF5ZXI6CisgICAg
Y2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZURhcmtTeXN0ZW1CYWNrZHJvcExheWVyOgor
I2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCisgICAgICAgIGxheWVyID0gYWRvcHROUyhbW0NB
QmFja2Ryb3BMYXllciBhbGxvY10gaW5pdF0pOworI2Vsc2UKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGxheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRd
KTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlQ3VzdG9tOgorICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVBVlBsYXll
ckxheWVyOgorICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVDb250ZW50c1Byb3Zp
ZGVkTGF5ZXI6CisgICAgICAgIGlmICghbV9pc0RlYnVnTGF5ZXJUcmVlSG9zdCkKKyAgICAgICAg
ICAgIGxheWVyID0gV0tNYWtlUmVuZGVyTGF5ZXIocHJvcGVydGllcy5ob3N0aW5nQ29udGV4dElE
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBh
bGxvY10gaW5pdF0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6
TGF5ZXJUeXBlU2hhcGVMYXllcjoKKyAgICAgICAgbGF5ZXIgPSBhZG9wdE5TKFtbQ0FTaGFwZUxh
eWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIFtsYXllciBzZXREZWxlZ2F0ZTpb
V2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOworICAgIHNldExheWVy
SUQobGF5ZXIuZ2V0KCksIHByb3BlcnRpZXMubGF5ZXJJRCk7CisKKyAgICByZXR1cm4gbGF5ZXIu
Z2V0KCk7Cit9CisjZW5kaWYKKwordm9pZCBSZW1vdGVMYXllclRyZWVIb3N0OjpkZXRhY2hSb290
TGF5ZXIoKQoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICBbbV9yb290TGF5ZXIgcmVtb3ZlRnJv
bVN1cGVydmlld107CisjZWxzZQorICAgIFthc0xheWVyKG1fcm9vdExheWVyKSByZW1vdmVGcm9t
U3VwZXJsYXllcl07CisjZW5kaWYKKyAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7Cit9CisKKyNp
ZiBVU0UoSU9TVVJGQUNFKQorc3RhdGljIHZvaWQgcmVjdXJzaXZlbHlNYXBJT1N1cmZhY2VCYWNr
aW5nU3RvcmUoQ0FMYXllciAqbGF5ZXIpCit7CisgICAgaWYgKGxheWVyLmNvbnRlbnRzICYmIENG
R2V0VHlwZUlEKGxheWVyLmNvbnRlbnRzKSA9PSBDQU1hY2hQb3J0R2V0VHlwZUlEKCkpIHsKKyAg
ICAgICAgTWFjaFNlbmRSaWdodCBwb3J0ID0gTWFjaFNlbmRSaWdodDo6Y3JlYXRlKENBTWFjaFBv
cnRHZXRQb3J0KChDQU1hY2hQb3J0UmVmKWxheWVyLmNvbnRlbnRzKSk7CisgICAgICAgIGF1dG8g
c3VyZmFjZSA9IFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3Zl
KHBvcnQpLCBzUkdCQ29sb3JTcGFjZVJlZigpKTsKKyAgICAgICAgbGF5ZXIuY29udGVudHMgPSBz
dXJmYWNlID8gc3VyZmFjZS0+YXNMYXllckNvbnRlbnRzKCkgOiBuaWw7CisgICAgfQorCisgICAg
Zm9yIChDQUxheWVyICpzdWJsYXllciBpbiBsYXllci5zdWJsYXllcnMpCisgICAgICAgIHJlY3Vy
c2l2ZWx5TWFwSU9TdXJmYWNlQmFja2luZ1N0b3JlKHN1YmxheWVyKTsKK30KKyNlbmRpZgorCit2
b2lkIFJlbW90ZUxheWVyVHJlZUhvc3Q6Om1hcEFsbElPU3VyZmFjZUJhY2tpbmdTdG9yZSgpCit7
CisjaWYgVVNFKElPU1VSRkFDRSkKKyAgICByZWN1cnNpdmVseU1hcElPU3VyZmFjZUJhY2tpbmdT
dG9yZShhc0xheWVyKG1fcm9vdExheWVyKSk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVy
Zm9ybWFuY2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzdmNTIxZDRlMDM1NTA0YmU5NTRkNTVhNWViNjNm
YjJhMTc5Mjk2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEuaApA
QCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFJlbW90ZUxheWVyVHJlZVNj
cm9sbGluZ1BlcmZvcm1hbmNlRGF0YV9oCisjZGVmaW5lIFJlbW90ZUxheWVyVHJlZVNjcm9sbGlu
Z1BlcmZvcm1hbmNlRGF0YV9oCisKKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW1w
b3J0IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5OworCitjbGFzcyBSZW1vdGVMYXllclRyZWVTY3JvbGxp
bmdQZXJmb3JtYW5jZURhdGEgeworcHVibGljOgorICAgIFJlbW90ZUxheWVyVHJlZVNjcm9sbGlu
Z1BlcmZvcm1hbmNlRGF0YShSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Jik7CisgICAg
flJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YSgpOworCisgICAgdm9pZCBk
aWRDb21taXRMYXllclRyZWUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxlUmVjdCk7
CisgICAgdm9pZCBkaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxlUmVj
dCk7CisKKyAgICBOU0FycmF5ICpkYXRhKCk7IC8vIEFycmF5IG9mIFsgdGltZSwgZXZlbnQgdHlw
ZSwgdW5maWxsZWQgcGl4ZWwgY291bnQgXQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIGJsYW5r
UGl4ZWxDb3VudChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVSZWN0KSBjb25zdDsK
KyAgICAKKyAgICBzdHJ1Y3QgQmxhbmtQaXhlbENvdW50IHsKKyAgICAgICAgZW51bSBFdmVudFR5
cGUgeyBGaWxsZWQsIEV4cG9zZWQgfTsKKworICAgICAgICBkb3VibGUgc3RhcnRUaW1lOworICAg
ICAgICBkb3VibGUgZW5kVGltZTsKKyAgICAgICAgRXZlbnRUeXBlIGV2ZW50VHlwZTsKKyAgICAg
ICAgdW5zaWduZWQgYmxhbmtQaXhlbENvdW50OworICAgICAgICAKKyAgICAgICAgQmxhbmtQaXhl
bENvdW50KGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgRXZlbnRUeXBlIHR5cGUsIHVuc2lnbmVk
IGNvdW50KQorICAgICAgICAgICAgOiBzdGFydFRpbWUoc3RhcnQpCisgICAgICAgICAgICAsIGVu
ZFRpbWUoZW5kKQorICAgICAgICAgICAgLCBldmVudFR5cGUodHlwZSkKKyAgICAgICAgICAgICwg
YmxhbmtQaXhlbENvdW50KGNvdW50KQorICAgICAgICB7IH0KKyAgICAgICAgCisgICAgICAgIGJv
b2wgY2FuQ29hbGVzY2UoQmxhbmtQaXhlbENvdW50OjpFdmVudFR5cGUsIHVuc2lnbmVkIGJsYW5r
UGl4ZWxDb3VudCkgY29uc3Q7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIGFwcGVuZEJsYW5rUGl4
ZWxDb3VudChCbGFua1BpeGVsQ291bnQ6OkV2ZW50VHlwZSwgdW5zaWduZWQgYmxhbmtQaXhlbENv
dW50KTsKKworICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkmIG1fZHJhd2luZ0Fy
ZWE7CisgICAgVmVjdG9yPEJsYW5rUGl4ZWxDb3VudD4gbV9ibGFua1BpeGVsQ291bnRzOworfTsK
KworfQorCisjZW5kaWYgLy8gUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRh
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9y
bWFuY2VEYXRhLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjOTMwN2Y4YmVkNmE3YTUwMDY3NWMyOTNlNjAxMDky
Y2RkNTM3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1v
dGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLm1tCkBA
IC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEuaCIKKworI2ltcG9ydCAi
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgorI2ltcG9ydCAiUmVtb3RlTGF5ZXJU
cmVlSG9zdC5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9DQUxheWVyLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1RpbGVDb250cm9sbGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworCitSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURh
dGE6OlJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YShSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5JiBkcmF3aW5nQXJlYSkKKyAgICA6IG1fZHJhd2luZ0FyZWEoZHJh
d2luZ0FyZWEpCit7Cit9CisKK1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0
YTo6flJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YSgpCit7Cit9CisKK3Zv
aWQgUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhOjpkaWRDb21taXRMYXll
clRyZWUoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkKK3sKKyAgICAvLyBGSVhNRTogbWF5
YmUgd2Ugb25seSBjYXJlIGFib3V0IG5ld2x5IGNyZWF0ZWQgdGlsZXM/CisgICAgYXBwZW5kQmxh
bmtQaXhlbENvdW50KEJsYW5rUGl4ZWxDb3VudDo6RmlsbGVkLCBibGFua1BpeGVsQ291bnQodmlz
aWJsZVJlY3QpKTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5j
ZURhdGE6OmRpZFNjcm9sbChjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0KQoreworICAgIGFw
cGVuZEJsYW5rUGl4ZWxDb3VudChCbGFua1BpeGVsQ291bnQ6OkV4cG9zZWQsIGJsYW5rUGl4ZWxD
b3VudCh2aXNpYmxlUmVjdCkpOworfQorCitib29sIFJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1Bl
cmZvcm1hbmNlRGF0YTo6QmxhbmtQaXhlbENvdW50OjpjYW5Db2FsZXNjZShCbGFua1BpeGVsQ291
bnQ6OkV2ZW50VHlwZSB0eXBlLCB1bnNpZ25lZCBwaXhlbENvdW50KSBjb25zdAoreworICAgIHJl
dHVybiBldmVudFR5cGUgPT0gdHlwZSAmJiBibGFua1BpeGVsQ291bnQgPT0gcGl4ZWxDb3VudDsK
K30KKwordm9pZCBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGE6OmFwcGVu
ZEJsYW5rUGl4ZWxDb3VudChCbGFua1BpeGVsQ291bnQ6OkV2ZW50VHlwZSBldmVudFR5cGUsIHVu
c2lnbmVkIGJsYW5rUGl4ZWxDb3VudCkKK3sKKyAgICBkb3VibGUgbm93ID0gQ0ZBYnNvbHV0ZVRp
bWVHZXRDdXJyZW50KCk7CisgICAgaWYgKCFtX2JsYW5rUGl4ZWxDb3VudHMuaXNFbXB0eSgpICYm
IG1fYmxhbmtQaXhlbENvdW50cy5sYXN0KCkuY2FuQ29hbGVzY2UoZXZlbnRUeXBlLCBibGFua1Bp
eGVsQ291bnQpKSB7CisgICAgICAgIG1fYmxhbmtQaXhlbENvdW50cy5sYXN0KCkuZW5kVGltZSA9
IG5vdzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmxhbmtQaXhlbENvdW50cy5h
cHBlbmQoQmxhbmtQaXhlbENvdW50KG5vdywgbm93LCBldmVudFR5cGUsIGJsYW5rUGl4ZWxDb3Vu
dCkpOworfQorCitOU0FycmF5ICpSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURh
dGE6OmRhdGEoKQoreworICAgIE5TTXV0YWJsZUFycmF5KiBkYXRhQXJyYXkgPSBbTlNNdXRhYmxl
QXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bV9ibGFua1BpeGVsQ291bnRzLnNpemUoKV07CisgICAg
CisgICAgZm9yIChhdXRvIHBpeGVsRGF0YSA6IG1fYmxhbmtQaXhlbENvdW50cykgeworICAgICAg
ICBbZGF0YUFycmF5IGFkZE9iamVjdDpAWworICAgICAgICAgICAgQChwaXhlbERhdGEuc3RhcnRU
aW1lKSwKKyAgICAgICAgICAgIChwaXhlbERhdGEuZXZlbnRUeXBlID09IEJsYW5rUGl4ZWxDb3Vu
dDo6RmlsbGVkKSA/IEAiZmlsbGVkIiA6IEAiZXhwb3NlZCIsCisgICAgICAgICAgICBAKHBpeGVs
RGF0YS5ibGFua1BpeGVsQ291bnQpCisgICAgICAgIF1dOworICAgIH0KKyAgICByZXR1cm4gZGF0
YUFycmF5OworfQorCitzdGF0aWMgQ0FMYXllciAqZmluZFRpbGVHcmlkQ29udGFpbmVyTGF5ZXIo
Q0FMYXllciAqbGF5ZXIpCit7CisgICAgZm9yIChDQUxheWVyICpjdXJyTGF5ZXIgOiBbbGF5ZXIg
c3VibGF5ZXJzXSkgeworICAgICAgICBTdHJpbmcgbGF5ZXJOYW1lID0gW2N1cnJMYXllciBuYW1l
XTsKKyAgICAgICAgaWYgKGxheWVyTmFtZSA9PSBUaWxlQ29udHJvbGxlcjo6dGlsZUdyaWRDb250
YWluZXJMYXllck5hbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJyTGF5ZXI7CisKKyAgICAg
ICAgaWYgKENBTGF5ZXIgKmZvdW5kTGF5ZXIgPSBmaW5kVGlsZUdyaWRDb250YWluZXJMYXllcihj
dXJyTGF5ZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kTGF5ZXI7CisgICAgfQorCisgICAg
cmV0dXJuIG5pbDsKK30KKwordW5zaWduZWQgUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9y
bWFuY2VEYXRhOjpibGFua1BpeGVsQ291bnQoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkg
Y29uc3QKK3sKKyAgICBDQUxheWVyICpyb290TGF5ZXIgPSBhc0xheWVyKG1fZHJhd2luZ0FyZWEu
cmVtb3RlTGF5ZXJUcmVlSG9zdCgpLnJvb3RMYXllcigpKTsKKworICAgIENBTGF5ZXIgKnRpbGVH
cmlkQ29udGFpbmVyID0gZmluZFRpbGVHcmlkQ29udGFpbmVyTGF5ZXIocm9vdExheWVyKTsKKyAg
ICBpZiAoIXRpbGVHcmlkQ29udGFpbmVyKSB7CisgICAgICAgIE5TTG9nKEAiRmFpbGVkIHRvIGZp
bmQgVGlsZUdyaWQgQ29udGFpbmVyIExheWVyIik7CisgICAgICAgIHJldHVybiBVSU5UX01BWDsK
KyAgICB9CisKKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3RFeGNsdWRpbmdUb29sYmFyID0gdmlz
aWJsZVJlY3Q7CisgICAgaWYgKHZpc2libGVSZWN0RXhjbHVkaW5nVG9vbGJhci55KCkgPCAwKQor
ICAgICAgICB2aXNpYmxlUmVjdEV4Y2x1ZGluZ1Rvb2xiYXIuc2V0WSgwKTsKKworICAgIFJlZ2lv
biBwYWludGVkVmlzaWJsZVRpbGVSZWdpb247CisKKyAgICBmb3IgKENBTGF5ZXIgKnRpbGVMYXll
ciA6IFt0aWxlR3JpZENvbnRhaW5lciBzdWJsYXllcnNdKSB7CisgICAgICAgIEZsb2F0UmVjdCB0
aWxlUmVjdCA9IFt0aWxlTGF5ZXIgY29udmVydFJlY3Q6W3RpbGVMYXllciBib3VuZHNdIHRvTGF5
ZXI6dGlsZUdyaWRDb250YWluZXJdOworICAgIAorICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3Qo
dmlzaWJsZVJlY3RFeGNsdWRpbmdUb29sYmFyKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdGls
ZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgcGFpbnRlZFZpc2libGVUaWxlUmVnaW9uLnVu
aXRlKGVuY2xvc2luZ0ludFJlY3QodGlsZVJlY3QpKTsKKyAgICB9CisKKyAgICBSZWdpb24gdW5j
b3ZlcmVkUmVnaW9uKGVuY2xvc2luZ0ludFJlY3QodmlzaWJsZVJlY3RFeGNsdWRpbmdUb29sYmFy
KSk7CisgICAgdW5jb3ZlcmVkUmVnaW9uLnN1YnRyYWN0KHBhaW50ZWRWaXNpYmxlVGlsZVJlZ2lv
bik7CisKKyAgICByZXR1cm4gdW5jb3ZlcmVkUmVnaW9uLnRvdGFsQXJlYSgpOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTVkMWViNzE3ZmQ5YTI3MzZiYmZjMTE4YWY0NjUwYTU3MmIwYzdjZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcApAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5LmgiCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAi
QXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5LmgiCisjaW5jbHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKKyNpbmNsdWRl
ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9s
bGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3Jv
bGxpbmdTdGF0ZVRyZWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6UmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eShXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKKyAgICA6IG1fd2ViUGFn
ZVByb3h5KHdlYlBhZ2VQcm94eSkKKyAgICAsIG1fc2Nyb2xsaW5nVHJlZShSZW1vdGVTY3JvbGxp
bmdUcmVlOjpjcmVhdGUoKnRoaXMpKQorICAgICwgbV9yZXF1ZXN0ZWRTY3JvbGxJbmZvKG51bGxw
dHIpCisgICAgLCBtX3Byb3BhZ2F0ZXNNYWluRnJhbWVTY3JvbGxzKHRydWUpCit7Cit9CisKK1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6On5SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5KCkKK3sKK30KKworU2Nyb2xsaW5nTm9kZUlEIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHk6OnJvb3RTY3JvbGxpbmdOb2RlSUQoKSBjb25zdAoreworICAgIGlmICghbV9zY3Jv
bGxpbmdUcmVlLT5yb290Tm9kZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBt
X3Njcm9sbGluZ1RyZWUtPnJvb3ROb2RlKCktPnNjcm9sbGluZ05vZGVJRCgpOworfQorCitjb25z
dCBSZW1vdGVMYXllclRyZWVIb3N0KiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Ojps
YXllclRyZWVIb3N0KCkgY29uc3QKK3sKKyAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJl
YSA9IG1fd2ViUGFnZVByb3h5LmRyYXdpbmdBcmVhKCk7CisgICAgaWYgKCFpczxSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5PihkcmF3aW5nQXJlYSkpIHsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkmIHJlbW90ZURyYXdpbmdBcmVhID0gZG93bmNhc3Q8
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eT4oKmRyYXdpbmdBcmVhKTsKKyAgICByZXR1
cm4gJnJlbW90ZURyYXdpbmdBcmVhLnJlbW90ZUxheWVyVHJlZUhvc3QoKTsKK30KKwordm9pZCBS
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Ojpjb21taXRTY3JvbGxpbmdUcmVlU3RhdGUo
Y29uc3QgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24s
IFJlcXVlc3RlZFNjcm9sbEluZm8mIHJlcXVlc3RlZFNjcm9sbEluZm8pCit7CisgICAgbV9yZXF1
ZXN0ZWRTY3JvbGxJbmZvID0gJnJlcXVlc3RlZFNjcm9sbEluZm87CisKKyAgICAvLyBGSVhNRTog
VGhlcmUgbXVzdCBiZSBhIGJldHRlciBpZGlvbSBmb3IgdGhpcy4KKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBzdGF0ZVRyZWUoY29uc3RfY2FzdDxSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclRyYW5zYWN0aW9uJj4odHJhbnNhY3Rpb24pLnNjcm9sbGluZ1N0YXRlVHJl
ZSgpLnJlbGVhc2UoKSk7CisKKyAgICBjb25zdCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRy
ZWVIb3N0ID0gdGhpcy0+bGF5ZXJUcmVlSG9zdCgpOworICAgIGlmICghbGF5ZXJUcmVlSG9zdCkg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNvbm5lY3RTdGF0ZU5vZGVMYXllcnMoKnN0YXRlVHJlZSwgKmxheWVyVHJlZUhvc3Qp
OworICAgIG1fc2Nyb2xsaW5nVHJlZS0+Y29tbWl0VHJlZVN0YXRlKFdURk1vdmUoc3RhdGVUcmVl
KSk7CisKKyAgICBtX3JlcXVlc3RlZFNjcm9sbEluZm8gPSBudWxscHRyOworfQorCisjaWYgIVBM
QVRGT1JNKElPUykKK3ZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y29ubmVj
dFN0YXRlTm9kZUxheWVycyhTY3JvbGxpbmdTdGF0ZVRyZWUmIHN0YXRlVHJlZSwgY29uc3QgUmVt
b3RlTGF5ZXJUcmVlSG9zdCYgbGF5ZXJUcmVlSG9zdCkKK3sKKyAgICBmb3IgKGF1dG8mIGN1cnJO
b2RlIDogc3RhdGVUcmVlLm5vZGVNYXAoKS52YWx1ZXMoKSkgeworICAgICAgICBpZiAoY3Vyck5v
ZGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkK
KyAgICAgICAgICAgIGN1cnJOb2RlLT5zZXRMYXllcihsYXllclRyZWVIb3N0LmdldExheWVyKGN1
cnJOb2RlLT5sYXllcigpKSk7CisKKyAgICAgICAgc3dpdGNoIChjdXJyTm9kZS0+bm9kZVR5cGUo
KSkgeworICAgICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nTm9kZTogeworICAgICAgICAgICAgU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25j
YXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPigqY3Vyck5vZGUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVudHNMYXllcikp
CisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNldFNjcm9sbGVkQ29udGVudHNM
YXllcihsYXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENv
bnRlbnRzTGF5ZXIoKSkpOworCisgICAgICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Q291bnRl
clNjcm9sbGluZ0xheWVyKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdTdGF0ZU5vZGUuc2V0
Q291bnRlclNjcm9sbGluZ0xheWVyKGxheWVyVHJlZUhvc3QuZ2V0TGF5ZXIoc2Nyb2xsaW5nU3Rh
dGVOb2RlLmNvdW50ZXJTY3JvbGxpbmdMYXllcigpKSk7CisKKyAgICAgICAgICAgIGlmIChzY3Jv
bGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3Jv
bGxpbmdOb2RlOjpJbnNldENsaXBMYXllcikpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3Rh
dGVOb2RlLnNldEluc2V0Q2xpcExheWVyKGxheWVyVHJlZUhvc3QuZ2V0TGF5ZXIoc2Nyb2xsaW5n
U3RhdGVOb2RlLmluc2V0Q2xpcExheWVyKCkpKTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGlu
Z05vZGU6OkNvbnRlbnRTaGFkb3dMYXllcikpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3Rh
dGVOb2RlLnNldENvbnRlbnRTaGFkb3dMYXllcihsYXllclRyZWVIb3N0LmdldExheWVyKHNjcm9s
bGluZ1N0YXRlTm9kZS5jb250ZW50U2hhZG93TGF5ZXIoKSkpOworCisgICAgICAgICAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkIG5ldmVyIGhhdmUgaGVhZGVyIGFuZCBmb290ZXIgbGF5ZXJzIGNvbWlu
ZyBmcm9tIHRoZSBXZWJQcm9jZXNzLgorICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9k
ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6Okhl
YWRlckxheWVyKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdTdGF0ZU5vZGUuc2V0SGVhZGVy
TGF5ZXIobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdTdGF0ZU5vZGUuaGVhZGVyTGF5
ZXIoKSkpOworCisgICAgICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Rm9vdGVyTGF5ZXIpKQor
ICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5zZXRGb290ZXJMYXllcihsYXllclRy
ZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5mb290ZXJMYXllcigpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE92ZXJmbG93U2Nyb2xsaW5n
Tm9kZTogeworICAgICAgICAgICAgU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUm
IHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlPigqY3Vyck5vZGUpOworCisgICAgICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVO
b2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9s
bGVkQ29udGVudHNMYXllcikpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNl
dFNjcm9sbGVkQ29udGVudHNMYXllcihsYXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0
YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBGaXhlZE5vZGU6CisgICAgICAgIGNhc2UgU3RpY2t5Tm9k
ZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlmCisKK2Jv
b2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6aGFuZGxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIFNjcm9sbGluZ1RyZWU6OkV2ZW50
UmVzdWx0IHJlc3VsdCA9IG1fc2Nyb2xsaW5nVHJlZS0+dHJ5VG9IYW5kbGVXaGVlbEV2ZW50KGV2
ZW50KTsKKyAgICByZXR1cm4gcmVzdWx0ID09IFNjcm9sbGluZ1RyZWU6OkRpZEhhbmRsZUV2ZW50
OyAvLyBGSVhNRTogaGFuZGxlIG90aGVyIHZhbHVlcy4KK30KKworVHJhY2tpbmdUeXBlIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmV2ZW50VHJhY2tpbmdUeXBlRm9yUG9pbnQoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIEludFBvaW50IHApIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc2Nyb2xsaW5nVHJlZS0+ZXZlbnRUcmFja2luZ1R5cGVGb3JQb2ludChldmVudE5hbWUs
IHApOworfQorCit2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnZpZXdwb3J0
Q2hhbmdlZFZpYURlbGVnYXRlZFNjcm9sbGluZyhTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCBjb25z
dCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBkb3VibGUgc2NhbGUpCit7CisgICAgbV9z
Y3JvbGxpbmdUcmVlLT52aWV3cG9ydENoYW5nZWRWaWFEZWxlZ2F0ZWRTY3JvbGxpbmcobm9kZUlE
LCBmaXhlZFBvc2l0aW9uUmVjdCwgc2NhbGUpOworfQorCit2b2lkIFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHk6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKFdlYkNvcmU6
OlNjcm9sbGluZ05vZGVJRCBub2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZl
cnRpY2FsKQoreworICAgIG1fd2ViUGFnZVByb3h5LnNlbmQoTWVzc2FnZXM6OlJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpDdXJyZW50U25hcFBvaW50SW5kaWNlc0NoYW5nZWRGb3JOb2RlKG5v
ZGVJRCwgaG9yaXpvbnRhbCwgdmVydGljYWwpKTsKK30KKworLy8gVGhpcyBjb21lcyBmcm9tIHRo
ZSBzY3JvbGxpbmcgdHJlZS4KK3ZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6
c2Nyb2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwoU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGVkTm9kZUlE
LCBjb25zdCBGbG9hdFBvaW50JiBuZXdTY3JvbGxQb3NpdGlvbiwgY29uc3Qgc3RkOjpvcHRpb25h
bDxGbG9hdFBvaW50PiYgbGF5b3V0Vmlld3BvcnRPcmlnaW4sIFNjcm9sbGluZ0xheWVyUG9zaXRp
b25BY3Rpb24gc2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbikKK3sKKyAgICAvLyBTY3JvbGwg
dXBkYXRlcyBmb3IgdGhlIG1haW4gZnJhbWUgYXJlIHNlbnQgdmlhIFdlYlBhZ2VQcm94eTo6dXBk
YXRlVmlzaWJsZUNvbnRlbnRSZWN0cygpCisgICAgLy8gc28gZG9uJ3Qgc2VuZCB0aGVtIGhlcmUu
CisgICAgaWYgKCFtX3Byb3BhZ2F0ZXNNYWluRnJhbWVTY3JvbGxzICYmIHNjcm9sbGVkTm9kZUlE
ID09IHJvb3RTY3JvbGxpbmdOb2RlSUQoKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIG1fd2ViUGFnZVByb3h5Lm92ZXJmbG93U2Nyb2xsVmlld0RpZFNjcm9sbCgp
OworI2VuZGlmCisgICAgbV93ZWJQYWdlUHJveHkuc2VuZChNZXNzYWdlczo6UmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OlNjcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUoc2Nyb2xsZWROb2Rl
SUQsIG5ld1Njcm9sbFBvc2l0aW9uLCBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uID09IFNj
cm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5bmMpKTsKK30KKwordm9pZCBSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5OjpzY3JvbGxpbmdUcmVlTm9kZVJlcXVlc3RzU2Nyb2xsKFNj
cm9sbGluZ05vZGVJRCBzY3JvbGxlZE5vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9z
aXRpb24sIGJvb2wgcmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCkKK3sKKyAgICBpZiAoc2Ny
b2xsZWROb2RlSUQgPT0gcm9vdFNjcm9sbGluZ05vZGVJRCgpICYmIG1fcmVxdWVzdGVkU2Nyb2xs
SW5mbykgeworICAgICAgICBtX3JlcXVlc3RlZFNjcm9sbEluZm8tPnJlcXVlc3RzU2Nyb2xsUG9z
aXRpb25VcGRhdGUgPSB0cnVlOworICAgICAgICBtX3JlcXVlc3RlZFNjcm9sbEluZm8tPnJlcXVl
c3RJc1Byb2dyYW1tYXRpY1Njcm9sbCA9IHJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGw7Cisg
ICAgICAgIG1fcmVxdWVzdGVkU2Nyb2xsSW5mby0+cmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24gPSBz
Y3JvbGxQb3NpdGlvbjsKKyAgICB9Cit9CisKK1N0cmluZyBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5OjpzY3JvbGxpbmdUcmVlQXNUZXh0KCkgY29uc3QKK3sKKyAgICBpZiAobV9zY3Jv
bGxpbmdUcmVlKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxpbmdUcmVlLT5zY3JvbGxpbmdUcmVl
QXNUZXh0KCk7CisgICAgCisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVM
YXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4
N2JiMmMyZTg0Yzg0OWIwNWZlMTNiZjA5OTZlYzBlMzVlN2RkYmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JQcm94eS5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlfaAorI2RlZmluZSBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5X2gKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CisKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvci5oIgorI2luY2x1ZGUgIlJlbW90ZVNjcm9sbGluZ1RyZWUuaCIKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZl
bnQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVMYXllclRyZWVIb3N0
OworY2xhc3MgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbjsKK2NsYXNzIFJl
bW90ZVNjcm9sbGluZ1RyZWU7CitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkpOworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoV2ViUGFnZVByb3h5Jik7CisgICAgdmlydHVhbCB+
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSgpOworCisgICAgYm9vbCB2aXN1YWxWaWV3
cG9ydEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZ1RyZWUgJiYgbV9zY3JvbGxp
bmdUcmVlLT52aXN1YWxWaWV3cG9ydEVuYWJsZWQoKTsgfQorCisgICAgLy8gSW5mb3JtIHRoZSB3
ZWIgcHJvY2VzcyB0aGF0IHRoZSBzY3JvbGwgcG9zaXRpb24gY2hhbmdlZCAoY2FsbGVkIGZyb20g
dGhlIHNjcm9sbGluZyB0cmVlKQorICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwo
V2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlELCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBuZXdT
Y3JvbGxQb3NpdGlvbiwgY29uc3Qgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50PiYg
bGF5b3V0Vmlld3BvcnRPcmlnaW4sIFdlYkNvcmU6OlNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rp
b24pOworICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVSZXF1ZXN0c1Njcm9sbChXZWJDb3JlOjpT
Y3JvbGxpbmdOb2RlSUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9u
LCBib29sIHJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwpOworCisgICAgV2ViQ29yZTo6VHJh
Y2tpbmdUeXBlIGV2ZW50VHJhY2tpbmdUeXBlRm9yUG9pbnQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudE5hbWUsIFdlYkNvcmU6OkludFBvaW50KSBjb25zdDsKKworICAgIC8vIENhbGxlZCBleHRl
cm5hbGx5IHdoZW4gbmF0aXZlIHZpZXdzIG1vdmUgYXJvdW5kLgorICAgIHZvaWQgdmlld3BvcnRD
aGFuZ2VkVmlhRGVsZWdhdGVkU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgZG91YmxlIHNjYWxlKTsK
KworICAgIHZvaWQgY3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2UoV2ViQ29yZTo6U2Ny
b2xsaW5nTm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCk7CisK
KyAgICAvLyBGSVhNRTogZXhwb3NlIHRoZSB0cmVlIGFuZCBwYXNzIHRoaXMgdG8gdGhhdD8KKyAg
ICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50
Jik7CisgICAgCisgICAgV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlEIHJvb3RTY3JvbGxpbmdOb2Rl
SUQoKSBjb25zdDsKKworICAgIGNvbnN0IFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhv
c3QoKSBjb25zdDsKKworICAgIHN0cnVjdCBSZXF1ZXN0ZWRTY3JvbGxJbmZvIHsKKyAgICAgICAg
Ym9vbCByZXF1ZXN0c1Njcm9sbFBvc2l0aW9uVXBkYXRlIHsgfTsKKyAgICAgICAgYm9vbCByZXF1
ZXN0SXNQcm9ncmFtbWF0aWNTY3JvbGwgeyB9OworICAgICAgICBXZWJDb3JlOjpGbG9hdFBvaW50
IHJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uOworICAgIH07CisgICAgdm9pZCBjb21taXRTY3JvbGxp
bmdUcmVlU3RhdGUoY29uc3QgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbiYs
IFJlcXVlc3RlZFNjcm9sbEluZm8mKTsKKworICAgIHZvaWQgc2V0UHJvcGFnYXRlc01haW5GcmFt
ZVNjcm9sbHMoYm9vbCBwcm9wYWdhdGVzTWFpbkZyYW1lU2Nyb2xscykgeyBtX3Byb3BhZ2F0ZXNN
YWluRnJhbWVTY3JvbGxzID0gcHJvcGFnYXRlc01haW5GcmFtZVNjcm9sbHM7IH0KKyAgICBib29s
IHByb3BhZ2F0ZXNNYWluRnJhbWVTY3JvbGxzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wYWdhdGVz
TWFpbkZyYW1lU2Nyb2xsczsgfQorICAgIGJvb2wgaGFzRml4ZWRPclN0aWNreSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2Nyb2xsaW5nVHJlZS0+aGFzRml4ZWRPclN0aWNreSgpOyB9CisKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGN1c3RvbUZpeGVkUG9zaXRpb25SZWN0
KCkgY29uc3Q7CisgICAgdm9pZCBzY3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFBhbkdlc3R1cmUo
KTsKKyAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0YXJ0U2Nyb2xsKCk7CisgICAgdm9p
ZCBzY3JvbGxpbmdUcmVlTm9kZURpZEVuZFNjcm9sbCgpOworI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCisgICAgdm9pZCBhZGp1c3RUYXJnZXRDb250ZW50T2Zmc2V0Rm9yU25hcHBpbmcoQ0dT
aXplIG1heFNjcm9sbERpbWVuc2lvbnMsIENHUG9pbnQgdmVsb2NpdHksIENHRmxvYXQgdG9wSW5z
ZXQsIENHUG9pbnQqIHRhcmdldENvbnRlbnRPZmZzZXQpOworICAgIGJvb2wgaGFzQWN0aXZlU25h
cFBvaW50KCkgY29uc3Q7CisgICAgQ0dQb2ludCBuZWFyZXN0QWN0aXZlQ29udGVudEluc2V0QWRq
dXN0ZWRTbmFwUG9pbnQoQ0dGbG9hdCB0b3BJbnNldCwgY29uc3QgQ0dQb2ludCYpIGNvbnN0Owor
ICAgIGJvb2wgc2hvdWxkU2V0U2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVGYXN0KCkgY29uc3Q7
CisjZW5kaWYKKyNlbmRpZgorCisgICAgU3RyaW5nIHNjcm9sbGluZ1RyZWVBc1RleHQoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNvbm5lY3RTdGF0ZU5vZGVMYXllcnMoV2ViQ29yZTo6
U2Nyb2xsaW5nU3RhdGVUcmVlJiwgY29uc3QgUmVtb3RlTGF5ZXJUcmVlSG9zdCYpOworI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgYm9vbCBzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Ny
b2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpcykgY29uc3Q7CisgICAgZmxvYXQgY2xvc2Vz
dFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlz
LCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBjbG9z
ZXN0SW5kZXgpIGNvbnN0OworI2VuZGlmCisKKyAgICBXZWJQYWdlUHJveHkmIG1fd2ViUGFnZVBy
b3h5OworICAgIFJlZlB0cjxSZW1vdGVTY3JvbGxpbmdUcmVlPiBtX3Njcm9sbGluZ1RyZWU7Cisg
ICAgUmVxdWVzdGVkU2Nyb2xsSW5mbyogbV9yZXF1ZXN0ZWRTY3JvbGxJbmZvOworI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCisgICAgdW5zaWduZWQgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQ
b2ludEluZGV4IHsgMCB9OworICAgIHVuc2lnbmVkIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50
SW5kZXggeyAwIH07CisjZW5kaWYKKyAgICBib29sIG1fcHJvcGFnYXRlc01haW5GcmFtZVNjcm9s
bHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVTY3JvbGxpbmdUcmVlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdUcmVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNWViYjRiZTMxMTdj
MGMwYWMyNDIzZjg3Y2VmNzIyMTlkZTMzMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ1RyZWUuY3BwCkBA
IC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbW90ZVNjcm9sbGluZ1RyZWUuaCIKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CisKKyNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUu
aD4KKworI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlSU9TLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlSU9TLmg+CisjZWxzZQorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5oPgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPFJlbW90ZVNjcm9sbGluZ1RyZWU+IFJl
bW90ZVNjcm9sbGluZ1RyZWU6OmNyZWF0ZShSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5
JiBzY3JvbGxpbmdDb29yZGluYXRvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1v
dGVTY3JvbGxpbmdUcmVlKHNjcm9sbGluZ0Nvb3JkaW5hdG9yKSk7Cit9CisKK1JlbW90ZVNjcm9s
bGluZ1RyZWU6OlJlbW90ZVNjcm9sbGluZ1RyZWUoUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eSYgc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCisgICAgOiBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHkoc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCit7Cit9CisKK1JlbW90ZVNjcm9sbGluZ1RyZWU6
On5SZW1vdGVTY3JvbGxpbmdUcmVlKCkKK3sKK30KKworU2Nyb2xsaW5nVHJlZTo6RXZlbnRSZXN1
bHQgUmVtb3RlU2Nyb2xsaW5nVHJlZTo6dHJ5VG9IYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICBpZiAoc2hvdWxkSGFuZGxlV2hlZWxF
dmVudFN5bmNocm9ub3VzbHkod2hlZWxFdmVudCkpCisgICAgICAgIHJldHVybiBTZW5kVG9NYWlu
VGhyZWFkOworCisgICAgaWYgKHdpbGxXaGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUod2hlZWxF
dmVudCkpCisgICAgICAgIHJldHVybiBEaWROb3RIYW5kbGVFdmVudDsKKworICAgIGhhbmRsZVdo
ZWVsRXZlbnQod2hlZWxFdmVudCk7CisgICAgcmV0dXJuIERpZEhhbmRsZUV2ZW50OworfQorCisj
aWYgUExBVEZPUk0oTUFDKQordm9pZCBSZW1vdGVTY3JvbGxpbmdUcmVlOjpoYW5kbGVXaGVlbEV2
ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UpCit7CisgICAgLy8gRklYTUU6
IGhhbmQgb2ZmIHRvIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eT8KK30KKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oSU9TKQorV2ViQ29yZTo6RmxvYXRSZWN0IFJlbW90ZVNjcm9sbGluZ1RyZWU6
OmZpeGVkUG9zaXRpb25SZWN0KCkKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxpbmdDb29yZGluYXRv
clByb3h5LmN1c3RvbUZpeGVkUG9zaXRpb25SZWN0KCk7Cit9CisKK3ZvaWQgUmVtb3RlU2Nyb2xs
aW5nVHJlZTo6c2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRQYW5HZXN0dXJlKCkKK3sKKyAgICBt
X3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuc2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRQYW5H
ZXN0dXJlKCk7Cit9CisKK3ZvaWQgUmVtb3RlU2Nyb2xsaW5nVHJlZTo6c2Nyb2xsaW5nVHJlZU5v
ZGVXaWxsU3RhcnRTY3JvbGwoKQoreworICAgIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5z
Y3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFNjcm9sbCgpOworfQorCit2b2lkIFJlbW90ZVNjcm9s
bGluZ1RyZWU6OnNjcm9sbGluZ1RyZWVOb2RlRGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBtX3Njcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHkuc2Nyb2xsaW5nVHJlZU5vZGVEaWRFbmRTY3JvbGwoKTsKK30K
KworI2VuZGlmCisKK3ZvaWQgUmVtb3RlU2Nyb2xsaW5nVHJlZTo6c2Nyb2xsaW5nVHJlZU5vZGVE
aWRTY3JvbGwoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xs
UG9zaXRpb24sIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludD4mIGxheW91dFZpZXdwb3J0
T3JpZ2luLCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uIHNjcm9sbGluZ0xheWVyUG9zaXRp
b25BY3Rpb24pCit7CisgICAgbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5LnNjcm9sbGluZ1Ry
ZWVOb2RlRGlkU2Nyb2xsKG5vZGVJRCwgc2Nyb2xsUG9zaXRpb24sIGxheW91dFZpZXdwb3J0T3Jp
Z2luLCBzY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uKTsKK30KKwordm9pZCBSZW1vdGVTY3Jv
bGxpbmdUcmVlOjpzY3JvbGxpbmdUcmVlTm9kZVJlcXVlc3RzU2Nyb2xsKFNjcm9sbGluZ05vZGVJ
RCBub2RlSUQsIGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBib29sIHJlcHJlc2Vu
dHNQcm9ncmFtbWF0aWNTY3JvbGwpCit7CisgICAgbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5
LnNjcm9sbGluZ1RyZWVOb2RlUmVxdWVzdHNTY3JvbGwobm9kZUlELCBzY3JvbGxQb3NpdGlvbiwg
cmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCk7Cit9CisKK1JlZjxTY3JvbGxpbmdUcmVlTm9k
ZT4gUmVtb3RlU2Nyb2xsaW5nVHJlZTo6Y3JlYXRlU2Nyb2xsaW5nVHJlZU5vZGUoU2Nyb2xsaW5n
Tm9kZVR5cGUgbm9kZVR5cGUsIFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCit7CisgICAgc3dpdGNo
IChub2RlVHlwZSkgeworICAgIGNhc2UgRnJhbWVTY3JvbGxpbmdOb2RlOgorI2lmIFBMQVRGT1JN
KElPUykKKyAgICAgICAgcmV0dXJuIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVJT1M6
OmNyZWF0ZSgqdGhpcywgbm9kZUlEKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBTY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpjcmVhdGUoKnRoaXMsIG5vZGVJRCk7CisjZW5kaWYK
KyAgICBjYXNlIE92ZXJmbG93U2Nyb2xsaW5nTm9kZToKKyNpZiBQTEFURk9STShJT1MpCisgICAg
ICAgIHJldHVybiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpjcmVhdGUo
KnRoaXMsIG5vZGVJRCk7CisjZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIEZpeGVkTm9kZToKKyAgICAgICAgcmV0dXJu
IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmNyZWF0ZSgqdGhpcywgbm9kZUlEKTsKKyAgICBjYXNl
IFN0aWNreU5vZGU6CisgICAgICAgIHJldHVybiBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6Y3Jl
YXRlKCp0aGlzLCBub2RlSUQpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y3JlYXRlKCp0aGlzLCBub2RlSUQpOwor
fQorCit2b2lkIFJlbW90ZVNjcm9sbGluZ1RyZWU6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlk
Q2hhbmdlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2ln
bmVkIHZlcnRpY2FsKQoreworICAgIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jdXJyZW50
U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShub2RlSUQsIGhvcml6b250YWwsIHZlcnRpY2FsKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL1JlbW90ZVNjcm9sbGluZ1RyZWUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdUcmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzMxOGNjYzgxNGNh
NTcxNmRjNzBjMjRiNmM0NDE3OGQyNTZjZGE3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdUcmVlLmgKQEAg
LTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVtb3RlU2Nyb2xsaW5nVHJlZV9o
CisjZGVmaW5lIFJlbW90ZVNjcm9sbGluZ1RyZWVfaAorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKKworI2luY2x1ZGUgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9TY3JvbGxpbmdDb25zdHJhaW50cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsaW5nVHJlZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcm94eTsKKworY2xhc3MgUmVtb3RlU2Nyb2xsaW5nVHJlZSBmaW5hbCA6
IHB1YmxpYyBXZWJDb3JlOjpTY3JvbGxpbmdUcmVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFJlbW90ZVNjcm9sbGluZ1RyZWU+IGNyZWF0ZShSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5Jik7CisgICAgdmlydHVhbCB+UmVtb3RlU2Nyb2xsaW5nVHJlZSgpOworCisgICAgYm9vbCBp
c1JlbW90ZVNjcm9sbGluZ1RyZWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgRXZlbnRSZXN1bHQgdHJ5VG9IYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6OlBsYXRm
b3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOworCisgICAgY29uc3QgUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eSYgc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTsgfQorCisgICAgdm9pZCBzY3JvbGxpbmdUcmVl
Tm9kZURpZFNjcm9sbChXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZs
b2F0UG9pbnQ+JiBsYXlvdXRWaWV3cG9ydE9yaWdpbiwgV2ViQ29yZTo6U2Nyb2xsaW5nTGF5ZXJQ
b3NpdGlvbkFjdGlvbiA9IFdlYkNvcmU6OlNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5
bmMpIG92ZXJyaWRlOworICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVSZXF1ZXN0c1Njcm9sbChX
ZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9s
bFBvc2l0aW9uLCBib29sIHJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwpIG92ZXJyaWRlOwor
CisgICAgdm9pZCBjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShXZWJDb3JlOjpTY3Jv
bGxpbmdOb2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKSBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBSZW1vdGVTY3JvbGxpbmdUcmVlKFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkmKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2
b2lkIGhhbmRsZVdoZWVsRXZlbnRQaGFzZShXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZSkgb3ZlcnJpZGU7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBXZWJDb3JlOjpG
bG9hdFJlY3QgZml4ZWRQb3NpdGlvblJlY3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNjcm9sbGlu
Z1RyZWVOb2RlV2lsbFN0YXJ0UGFuR2VzdHVyZSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2Nyb2xs
aW5nVHJlZU5vZGVXaWxsU3RhcnRTY3JvbGwoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNjcm9sbGlu
Z1RyZWVOb2RlRGlkRW5kU2Nyb2xsKCkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIFJlZjxXZWJD
b3JlOjpTY3JvbGxpbmdUcmVlTm9kZT4gY3JlYXRlU2Nyb2xsaW5nVHJlZU5vZGUoV2ViQ29yZTo6
U2Nyb2xsaW5nTm9kZVR5cGUsIFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCkgb3ZlcnJpZGU7Cisg
ICAgCisgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSYgbV9zY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfU0NST0xMSU5HX1RSRUUoV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdUcmVlLCBp
c1JlbW90ZVNjcm9sbGluZ1RyZWUoKSk7CisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQorCisjZW5kaWYgLy8gUmVtb3RlU2Nyb2xsaW5nVHJlZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZUxheWVyVHJlZUhv
c3RJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Jl
bW90ZUxheWVyVHJlZUhvc3RJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE1Y2MzMDIwMzI1Nzc5MjgxNzhk
MDRkZWMyNGYyNDE0OTVlMTA4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlTGF5ZXJUcmVlSG9zdElPUy5tbQpAQCAt
MCwwICsxLDI0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExB
VEZPUk0oSU9TKQorCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVIb3N0LmgiCisjaW1wb3J0IDxR
dWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJU2Nyb2xsVmlldy5oPgor
I2ltcG9ydCA8VUlLaXRTUEkuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQGludGVyZmFjZSBDQUxheWVyKFdLTGF5ZXJJ
bnRlcm5hbCkKKy0gKHZvaWQpc2V0Q29udGV4dElkOih1aW50MzJfdCljb250ZXh0SUQ7CitAZW5k
CisKK0BpbnRlcmZhY2UgQ0FCYWNrZHJvcExheWVyIDogQ0FMYXllcgorQGVuZAorCitAaW50ZXJm
YWNlIFVJVmlldyAoV0tIaXRUZXN0aW5nKQorLSAoVUlWaWV3ICopX2ZpbmREZXNjZW5kYW50Vmll
d0F0UG9pbnQ6KENHUG9pbnQpcG9pbnQgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQ7CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBVSVZpZXcgKFdLSGl0VGVzdGluZykKKworLy8gVUlWaWV3IGhp
dCB0ZXN0aW5nIGFzc3VtZXMgdGhhdCB2aWV3cyBzaG91bGQgb25seSBoaXQgdGVzdCBzdWJ2aWV3
cyB0aGF0IGFyZSBlbnRpcmVseSBjb250YWluZWQKKy8vIGluIHRoZSB2aWV3LiBUaGlzIGlzIG5v
dCB0cnVlIG9mIHdlYiBjb250ZW50LgorLy8gV2Ugb25seSB3YW50IHRvIGZpbmQgVUlTY3JvbGxW
aWV3cyBoZXJlLiBPdGhlciB2aWV3cyBhcmUgaWdub3JlZC4KKy0gKFVJVmlldyAqKV9yZWN1cnNp
dmVGaW5kRGVzY2VuZGFudFNjcm9sbFZpZXdBdFBvaW50OihDR1BvaW50KXBvaW50IHdpdGhFdmVu
dDooVUlFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKHNlbGYuY2xpcHNUb0JvdW5kcyAmJiAhW3Nl
bGYgcG9pbnRJbnNpZGU6cG9pbnQgd2l0aEV2ZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIF9fYmxvY2sgVUlWaWV3ICpmb3VuZFZpZXcgPSBuaWw7CisgICAgW1tzZWxmIHN1
YnZpZXdzXSBlbnVtZXJhdGVPYmplY3RzVXNpbmdCbG9jazpeKFVJVmlldyAqdmlldywgTlNVSW50
ZWdlciBpZHgsIEJPT0wgKnN0b3ApIHsKKyAgICAgICAgQ0dQb2ludCBzdWJ2aWV3UG9pbnQgPSBb
dmlldyBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6c2VsZl07CisKKyAgICAgICAgaWYgKFt2
aWV3IHBvaW50SW5zaWRlOnN1YnZpZXdQb2ludCB3aXRoRXZlbnQ6ZXZlbnRdICYmIFt2aWV3IGlz
S2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBjbGFzc11dICYmIHZpZXcuaXNVc2VySW50ZXJhY3Rp
b25FbmFibGVkKQorICAgICAgICAgICAgZm91bmRWaWV3ID0gdmlldzsKKworICAgICAgICBpZiAo
IVt2aWV3IHN1YnZpZXdzXSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoVUlW
aWV3ICpoaXRWaWV3ID0gW3ZpZXcgX3JlY3Vyc2l2ZUZpbmREZXNjZW5kYW50U2Nyb2xsVmlld0F0
UG9pbnQ6c3Vidmlld1BvaW50IHdpdGhFdmVudDpldmVudF0pCisgICAgICAgICAgICBmb3VuZFZp
ZXcgPSBoaXRWaWV3OworICAgIH1dOworCisgICAgcmV0dXJuIGZvdW5kVmlldzsKK30KKworLSAo
VUlWaWV3ICopX2ZpbmREZXNjZW5kYW50Vmlld0F0UG9pbnQ6KENHUG9pbnQpcG9pbnQgd2l0aEV2
ZW50OihVSUV2ZW50ICopZXZlbnQKK3sKKyAgICByZXR1cm4gW3NlbGYgX3JlY3Vyc2l2ZUZpbmRE
ZXNjZW5kYW50U2Nyb2xsVmlld0F0UG9pbnQ6cG9pbnQgd2l0aEV2ZW50OmV2ZW50XTsKK30KKwor
QGVuZAorCitAaW50ZXJmYWNlIFdLQ29tcG9zaXRpbmdWaWV3IDogVUlWaWV3CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBXS0NvbXBvc2l0aW5nVmlldworCistIChVSVZpZXcgKiloaXRUZXN0OihD
R1BvaW50KXBvaW50IHdpdGhFdmVudDooVUlFdmVudCAqKWV2ZW50Cit7CisgICAgcmV0dXJuIFtz
ZWxmIF9maW5kRGVzY2VuZGFudFZpZXdBdFBvaW50OnBvaW50IHdpdGhFdmVudDpldmVudF07Cit9
CisKKy0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KK3sKKyAgICBOU1N0cmluZyAqdmlld0Rlc2Ny
aXB0aW9uID0gW3N1cGVyIGRlc2NyaXB0aW9uXTsKKyAgICBOU1N0cmluZyAqd2ViS2l0RGV0YWls
cyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiIGxheWVySUQgPSAlbGx1IFwiJUBcIiIs
IFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlSG9zdDo6bGF5ZXJJRChzZWxmLmxheWVyKSwgc2VsZi5s
YXllci5uYW1lID8gc2VsZi5sYXllci5uYW1lIDogQCIiXTsKKyAgICByZXR1cm4gW3ZpZXdEZXNj
cmlwdGlvbiBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzp3ZWJLaXREZXRhaWxzXTsKK30KKworQGVu
ZAorCitAaW50ZXJmYWNlIFdLVHJhbnNmb3JtVmlldyA6IFdLQ29tcG9zaXRpbmdWaWV3CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBXS1RyYW5zZm9ybVZpZXcKKworKyAoQ2xhc3MpbGF5ZXJDbGFz
cworeworICAgIHJldHVybiBbQ0FUcmFuc2Zvcm1MYXllciBzZWxmXTsKK30KKworQGVuZAorCitA
aW50ZXJmYWNlIFdLU2ltcGxlQmFja2Ryb3BWaWV3IDogV0tDb21wb3NpdGluZ1ZpZXcKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFdLU2ltcGxlQmFja2Ryb3BWaWV3CisKKysgKENsYXNzKWxheWVy
Q2xhc3MKK3sKKyAgICByZXR1cm4gW0NBQmFja2Ryb3BMYXllciBzZWxmXTsKK30KKworQGVuZAor
CitAaW50ZXJmYWNlIFdLU2hhcGVWaWV3IDogV0tDb21wb3NpdGluZ1ZpZXcKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdLU2hhcGVWaWV3CisKKysgKENsYXNzKWxheWVyQ2xhc3MKK3sKKyAgICBy
ZXR1cm4gW0NBU2hhcGVMYXllciBzZWxmXTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFdLUmVt
b3RlVmlldyA6IFdLQ29tcG9zaXRpbmdWaWV3CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1Jl
bW90ZVZpZXcKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZSBj
b250ZXh0SUQ6KHVpbnQzMl90KWNvbnRleHRJRAoreworICAgIGlmICgoc2VsZiA9IFtzdXBlciBp
bml0V2l0aEZyYW1lOmZyYW1lXSkpCisgICAgICAgIFtbc2VsZiBsYXllcl0gc2V0Q29udGV4dElk
OmNvbnRleHRJRF07CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKysgKENsYXNzKWxheWVy
Q2xhc3MKK3sKKyAgICByZXR1cm4gTlNDbGFzc0Zyb21TdHJpbmcoQCJDQUxheWVySG9zdCIpOwor
fQorCitAZW5kCisKK0BpbnRlcmZhY2UgV0tCYWNrZHJvcFZpZXcgOiBfVUlCYWNrZHJvcFZpZXcK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLQmFja2Ryb3BWaWV3CisKKy0gKFVJVmlldyAqKWhp
dFRlc3Q6KENHUG9pbnQpcG9pbnQgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKK3sKKyAgICBy
ZXR1cm4gW3NlbGYgX2ZpbmREZXNjZW5kYW50Vmlld0F0UG9pbnQ6cG9pbnQgd2l0aEV2ZW50OmV2
ZW50XTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgoreworICAgIE5TU3RyaW5nICp2
aWV3RGVzY3JpcHRpb24gPSBbc3VwZXIgZGVzY3JpcHRpb25dOworICAgIE5TU3RyaW5nICp3ZWJL
aXREZXRhaWxzID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIgbGF5ZXJJRCA9ICVsbHUg
XCIlQFwiIiwgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVIb3N0OjpsYXllcklEKHNlbGYubGF5ZXIp
LCBzZWxmLmxheWVyLm5hbWUgPyBzZWxmLmxheWVyLm5hbWUgOiBAIiJdOworICAgIHJldHVybiBb
dmlld0Rlc2NyaXB0aW9uIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOndlYktpdERldGFpbHNdOwor
fQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitMYXllck9yVmlldyAqUmVtb3RlTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXIoY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OkxheWVyQ3JlYXRpb25Qcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBjb25zdCBSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzKiBsYXllclByb3BlcnRpZXMpCit7CisgICAg
UmV0YWluUHRyPExheWVyT3JWaWV3PiYgdmlldyA9IG1fbGF5ZXJzLmFkZChwcm9wZXJ0aWVzLmxh
eWVySUQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKworICAgIEFTU0VSVCghdmlldyk7CisK
KyAgICBzd2l0Y2ggKHByb3BlcnRpZXMudHlwZSkgeworICAgIGNhc2UgUGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGVMYXllcjoKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlV2Vi
TGF5ZXI6CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVJvb3RMYXllcjoKKyAg
ICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxlTGF5ZXI6CisgICAgY2FzZSBQ
bGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyOgorICAgIGNhc2UgUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGVQYWdlVGlsZWRCYWNraW5nTGF5ZXI6CisgICAgY2FzZSBQ
bGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVMYXllcjoKKyAgICAgICAg
dmlldyA9IGFkb3B0TlMoW1tXS0NvbXBvc2l0aW5nVmlldyBhbGxvY10gaW5pdF0pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlQmFja2Ryb3BMYXll
cjoKKyAgICAgICAgdmlldyA9IGFkb3B0TlMoW1tXS1NpbXBsZUJhY2tkcm9wVmlldyBhbGxvY10g
aW5pdF0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlTGlnaHRTeXN0ZW1CYWNrZHJvcExheWVyOgorICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dL
QmFja2Ryb3BWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm8gcHJpdmF0ZVN0eWxl
Ol9VSUJhY2tkcm9wVmlld1N0eWxlX0xpZ2h0XSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVEYXJrU3lzdGVtQmFja2Ryb3BMYXllcjoKKyAgICAg
ICAgdmlldyA9IGFkb3B0TlMoW1tXS0JhY2tkcm9wVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RaZXJvIHByaXZhdGVTdHlsZTpfVUlCYWNrZHJvcFZpZXdTdHlsZV9EYXJrXSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUcmFuc2Zvcm1M
YXllcjoKKyAgICAgICAgdmlldyA9IGFkb3B0TlMoW1tXS1RyYW5zZm9ybVZpZXcgYWxsb2NdIGlu
aXRdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZUN1c3RvbToKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlQVZQbGF5ZXJMYXll
cjoKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlQ29udGVudHNQcm92aWRlZExh
eWVyOgorICAgICAgICBpZiAoIW1faXNEZWJ1Z0xheWVyVHJlZUhvc3QpIHsKKyAgICAgICAgICAg
IHZpZXcgPSBhZG9wdE5TKFtbV0tSZW1vdGVWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dFplcm8gY29udGV4dElEOnByb3BlcnRpZXMuaG9zdGluZ0NvbnRleHRJRF0pOworICAgICAgICAg
ICAgaWYgKHByb3BlcnRpZXMudHlwZSA9PSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUFWUGxh
eWVyTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBJbnZlcnQgdGhlIHNjYWxlIHRyYW5zZm9y
bSBhZGRlZCBpbiB0aGUgV2ViUHJvY2VzcyB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzE4MzE2NTQy
Pi4KKyAgICAgICAgICAgICAgICBmbG9hdCBpbnZlcnNlU2NhbGUgPSAxIC8gcHJvcGVydGllcy5o
b3N0aW5nRGV2aWNlU2NhbGVGYWN0b3I7CisgICAgICAgICAgICAgICAgW1t2aWV3IGxheWVyXSBz
ZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShpbnZlcnNlU2NhbGUsIGludmVyc2VT
Y2FsZSwgMSldOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHZp
ZXcgPSBhZG9wdE5TKFtbV0tDb21wb3NpdGluZ1ZpZXcgYWxsb2NdIGluaXRdKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVNoYXBlTGF5ZXI6Cisg
ICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tTaGFwZVZpZXcgYWxsb2NdIGluaXRdKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVNjcm9sbGluZ0xh
eWVyOgorICAgICAgICBpZiAoIW1faXNEZWJ1Z0xheWVyVHJlZUhvc3QpIHsKKyAgICAgICAgICAg
IGF1dG8gc2Nyb2xsVmlldyA9IGFkb3B0TlMoW1tVSVNjcm9sbFZpZXcgYWxsb2NdIGluaXRdKTsK
KyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAKKyAgICAgICAg
ICAgIFtzY3JvbGxWaWV3IHNldENvbnRlbnRJbnNldEFkanVzdG1lbnRCZWhhdmlvcjpVSVNjcm9s
bFZpZXdDb250ZW50SW5zZXRBZGp1c3RtZW50TmV2ZXJdOworI2VuZGlmCisgICAgICAgICAgICB2
aWV3ID0gc2Nyb2xsVmlldzsKKyAgICAgICAgfSBlbHNlIC8vIFRoZSBkZWJ1ZyBpbmRpY2F0b3Ig
cGFyZW50cyB2aWV3cyB1bmRlciBsYXllcnMsIHdoaWNoIGNhbiBjYXVzZSBjcmFzaGVzIHdpdGgg
VUlTY3JvbGxWaWV3LgorICAgICAgICAgICAgdmlldyA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2Nd
IGluaXRdKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgc2V0TGF5ZXJJRChbdmlldyBsYXllcl0sIHByb3Bl
cnRpZXMubGF5ZXJJRCk7CisKKyAgICByZXR1cm4gdmlldy5nZXQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXll
clRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjhkMzk1OTM0NTRlMTg1ZmI2NmZlNWRmN2RhYjhiM2EyODYyMDRlYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvclByb3h5LmgiCisKKyNpZiBQTEFURk9STShJT1MpCisjaWYgRU5BQkxFKEFTWU5D
X1NDUk9MTElORykKKworI2ltcG9ydCAiTGF5ZXJSZXByZXNlbnRhdGlvbi5oIgorI2ltcG9ydCAi
UmVtb3RlTGF5ZXJUcmVlSG9zdC5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0
IDxVSUtpdC9VSVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVGcmFtZVNj
cm9sbGluZ05vZGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Nj
cm9sbGluZ05vZGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVUcmVlLmg+CisK
KyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorI2ltcG9ydCA8V2ViQ29yZS9BeGlzU2Nyb2xs
U25hcE9mZnNldHMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFR5cGVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBMYXllclJlcHJlc2VudGF0
aW9uIGxheWVyUmVwcmVzZW50YXRpb25Gcm9tTGF5ZXJPclZpZXcoTGF5ZXJPclZpZXcgKmxheWVy
T3JWaWV3KQoreworICAgIHJldHVybiBMYXllclJlcHJlc2VudGF0aW9uKGxheWVyT3JWaWV3Lmxh
eWVyKTsKK30KKwordm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Ojpjb25uZWN0
U3RhdGVOb2RlTGF5ZXJzKFNjcm9sbGluZ1N0YXRlVHJlZSYgc3RhdGVUcmVlLCBjb25zdCBSZW1v
dGVMYXllclRyZWVIb3N0JiBsYXllclRyZWVIb3N0KQoreworICAgIGZvciAoYXV0byYgY3Vyck5v
ZGUgOiBzdGF0ZVRyZWUubm9kZU1hcCgpLnZhbHVlcygpKSB7CisgICAgICAgIHN3aXRjaCAoY3Vy
ck5vZGUtPm5vZGVUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBPdmVyZmxvd1Njcm9sbGluZ05vZGU6
IHsKKyAgICAgICAgICAgIFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlJiBzY3Jv
bGxpbmdTdGF0ZU5vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZT4oKmN1cnJOb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxM
YXllcikpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNldExheWVyKGxheWVy
UmVwcmVzZW50YXRpb25Gcm9tTGF5ZXJPclZpZXcobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3Jv
bGxpbmdTdGF0ZU5vZGUubGF5ZXIoKSkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQorICAgICAgICAgICAgICAgIHNjcm9s
bGluZ1N0YXRlTm9kZS5zZXRTY3JvbGxlZENvbnRlbnRzTGF5ZXIobGF5ZXJSZXByZXNlbnRhdGlv
bkZyb21MYXllck9yVmlldyhsYXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9k
ZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9OworICAgICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nTm9kZTogeworICAgICAgICAgICAgU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25j
YXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPigqY3Vyck5vZGUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkKKyAgICAgICAgICAgICAgICBz
Y3JvbGxpbmdTdGF0ZU5vZGUuc2V0TGF5ZXIobGF5ZXJSZXByZXNlbnRhdGlvbkZyb21MYXllck9y
VmlldyhsYXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5sYXllcigpKSkp
OworCisgICAgICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Q291bnRlclNjcm9sbGluZ0xheWVy
KSkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdTdGF0ZU5vZGUuc2V0Q291bnRlclNjcm9sbGlu
Z0xheWVyKGxheWVyUmVwcmVzZW50YXRpb25Gcm9tTGF5ZXJPclZpZXcobGF5ZXJUcmVlSG9zdC5n
ZXRMYXllcihzY3JvbGxpbmdTdGF0ZU5vZGUuY291bnRlclNjcm9sbGluZ0xheWVyKCkpKSk7CisK
KyAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgbmV2ZXIgaGF2ZSBoZWFkZXIgYW5kIGZv
b3RlciBsYXllcnMgY29taW5nIGZyb20gdGhlIFdlYlByb2Nlc3MuCisgICAgICAgICAgICBpZiAo
c2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1l
U2Nyb2xsaW5nTm9kZTo6SGVhZGVyTGF5ZXIpKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0
YXRlTm9kZS5zZXRIZWFkZXJMYXllcihsYXllclJlcHJlc2VudGF0aW9uRnJvbUxheWVyT3JWaWV3
KGxheWVyVHJlZUhvc3QuZ2V0TGF5ZXIoc2Nyb2xsaW5nU3RhdGVOb2RlLmhlYWRlckxheWVyKCkp
KSk7CisKKyAgICAgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpGb290ZXJMYXllcikpCisgICAg
ICAgICAgICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNldEZvb3RlckxheWVyKGxheWVyUmVwcmVz
ZW50YXRpb25Gcm9tTGF5ZXJPclZpZXcobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihzY3JvbGxpbmdT
dGF0ZU5vZGUuZm9vdGVyTGF5ZXIoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgRml4ZWROb2RlOgorICAgICAgICBjYXNlIFN0aWNreU5vZGU6CisgICAg
ICAgICAgICBpZiAoY3Vyck5vZGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5v
ZGU6OlNjcm9sbExheWVyKSkKKyAgICAgICAgICAgICAgICBjdXJyTm9kZS0+c2V0TGF5ZXIobGF5
ZXJSZXByZXNlbnRhdGlvbkZyb21MYXllck9yVmlldyhsYXllclRyZWVIb3N0LmdldExheWVyKGN1
cnJOb2RlLT5sYXllcigpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK0Zsb2F0UmVjdCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjdXN0b21G
aXhlZFBvc2l0aW9uUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZVByb3h5LmNv
bXB1dGVDdXN0b21GaXhlZFBvc2l0aW9uUmVjdChtX3dlYlBhZ2VQcm94eS51bm9ic2N1cmVkQ29u
dGVudFJlY3QoKSwgbV93ZWJQYWdlUHJveHkudW5vYnNjdXJlZENvbnRlbnRSZWN0UmVzcGVjdGlu
Z0lucHV0Vmlld0JvdW5kcygpLCBtX3dlYlBhZ2VQcm94eS5jdXN0b21GaXhlZFBvc2l0aW9uUmVj
dCgpLAorICAgICAgICBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRDb250ZW50U2NhbGUoKSwgRnJh
bWVWaWV3OjpMYXlvdXRWaWV3cG9ydENvbnN0cmFpbnQ6OlVuY29uc3RyYWluZWQsIHZpc3VhbFZp
ZXdwb3J0RW5hYmxlZCgpKTsKK30KKwordm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5OjpzY3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFBhbkdlc3R1cmUoKQoreworICAgIG1fd2Vi
UGFnZVByb3h5Lm92ZXJmbG93U2Nyb2xsVmlld1dpbGxTdGFydFBhbkdlc3R1cmUoKTsKK30KKwor
dm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpzY3JvbGxpbmdUcmVlTm9kZVdp
bGxTdGFydFNjcm9sbCgpCit7CisgICAgbV93ZWJQYWdlUHJveHkub3ZlcmZsb3dTY3JvbGxXaWxs
U3RhcnRTY3JvbGwoKTsKK30KKyAgICAKK3ZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eTo6c2Nyb2xsaW5nVHJlZU5vZGVEaWRFbmRTY3JvbGwoKQoreworICAgIG1fd2ViUGFnZVBy
b3h5Lm92ZXJmbG93U2Nyb2xsRGlkRW5kU2Nyb2xsKCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQordm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjphZGp1c3RU
YXJnZXRDb250ZW50T2Zmc2V0Rm9yU25hcHBpbmcoQ0dTaXplIG1heFNjcm9sbE9mZnNldHMsIENH
UG9pbnQgdmVsb2NpdHksIENHRmxvYXQgdG9wSW5zZXQsIENHUG9pbnQqIHRhcmdldENvbnRlbnRP
ZmZzZXQpCit7CisgICAgLy8gVGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIG1heFNjcm9sbE9mZnNl
dHMgaXMgdG8gZW5zdXJlIHRoYXQgd2Ugd29uJ3QgaW50ZXJmZXJlIHdpdGggcnViYmVyLWJhbmRp
bmcgd2hlbiBzY3JvbGxpbmcgdG8gdGhlIGVkZ2Ugb2YgdGhlIHBhZ2UuCisgICAgaWYgKHNob3Vs
ZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpIb3Jp
em9udGFsKSkgeworICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRpb24gPSBjbG9zZXN0
U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWwsIHRhcmdldENvbnRlbnRPZmZzZXQtPngsIHZlbG9jaXR5LngsIG1fY3VycmVu
dEhvcml6b250YWxTbmFwUG9pbnRJbmRleCk7CisgICAgICAgIGlmICh0YXJnZXRDb250ZW50T2Zm
c2V0LT54ID4gMCAmJiB0YXJnZXRDb250ZW50T2Zmc2V0LT54IDwgbWF4U2Nyb2xsT2Zmc2V0cy53
aWR0aCkKKyAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPSBzdGQ6Om1pbjxmbG9h
dD4obWF4U2Nyb2xsT2Zmc2V0cy53aWR0aCwgcG90ZW50aWFsU25hcFBvc2l0aW9uKTsKKyAgICB9
CisKKyAgICBpZiAoc2hvdWxkU25hcEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3Jv
bGxFdmVudEF4aXM6OlZlcnRpY2FsKSkgeworICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9z
aXRpb24gPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpT
Y3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCB0YXJnZXRDb250ZW50T2Zmc2V0LT55LCB2ZWxvY2l0
eS55LCBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KTsKKyAgICAgICAgaWYgKG1fY3Vy
cmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXggIT0gaW52YWxpZFNuYXBPZmZzZXRJbmRleCkKKyAg
ICAgICAgICAgIHBvdGVudGlhbFNuYXBQb3NpdGlvbiAtPSB0b3BJbnNldDsKKworICAgICAgICBp
ZiAodGFyZ2V0Q29udGVudE9mZnNldC0+eSA+IDAgJiYgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA8
IG1heFNjcm9sbE9mZnNldHMuaGVpZ2h0KQorICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNl
dC0+eSA9IHN0ZDo6bWluPGZsb2F0PihtYXhTY3JvbGxPZmZzZXRzLmhlaWdodCwgcG90ZW50aWFs
U25hcFBvc2l0aW9uKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eTo6c2hvdWxkU2V0U2Nyb2xsVmlld0RlY2VsZXJhdGlvblJhdGVGYXN0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc2hvdWxkU25hcEZvck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwpIHx8IHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoU2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7Cit9CisKK2Jvb2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eTo6c2hvdWxkU25hcEZvck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxFdmVudEF4
aXMgYXhpcykgY29uc3QKK3sKKyAgICBTY3JvbGxpbmdUcmVlTm9kZSogcm9vdCA9IG1fc2Nyb2xs
aW5nVHJlZS0+cm9vdE5vZGUoKTsKKyAgICBpZiAocm9vdCAmJiByb290LT5pc0ZyYW1lU2Nyb2xs
aW5nTm9kZSgpKSB7CisgICAgICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUqIHJv
b3RGcmFtZSA9IHN0YXRpY19jYXN0PFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUqPihy
b290KTsKKyAgICAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgc25hcE9mZnNldHMgPSBheGlzID09
IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IHJvb3RGcmFtZS0+aG9yaXpvbnRhbFNuYXBP
ZmZzZXRzKCkgOiByb290RnJhbWUtPnZlcnRpY2FsU25hcE9mZnNldHMoKTsKKyAgICAgICAgdW5z
aWduZWQgY3VycmVudEluZGV4ID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwg
PyBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggOiBtX2N1cnJlbnRWZXJ0aWNhbFNu
YXBQb2ludEluZGV4OworICAgICAgICByZXR1cm4gc25hcE9mZnNldHMuc2l6ZSgpICYmIChjdXJy
ZW50SW5kZXggPCBzbmFwT2Zmc2V0cy5zaXplKCkgfHwgY3VycmVudEluZGV4ID09IGludmFsaWRT
bmFwT2Zmc2V0SW5kZXgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zsb2F0IFJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZy
YW1lU2Nyb2xsaW5nKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlv
biwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBjdXJyZW50SW5kZXgpIGNvbnN0Cit7CisgICAg
U2Nyb2xsaW5nVHJlZU5vZGUqIHJvb3QgPSBtX3Njcm9sbGluZ1RyZWUtPnJvb3ROb2RlKCk7Cisg
ICAgQVNTRVJUKHJvb3QgJiYgcm9vdC0+aXNGcmFtZVNjcm9sbGluZ05vZGUoKSk7CisgICAgU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSogcm9vdEZyYW1lID0gc3RhdGljX2Nhc3Q8U2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSo+KHJvb3QpOworICAgIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIHNuYXBPZmZzZXRzID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwg
PyByb290RnJhbWUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpIDogcm9vdEZyYW1lLT52ZXJ0aWNh
bFNuYXBPZmZzZXRzKCk7CisgICAgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPGZsb2F0
Pj4mIHNuYXBPZmZzZXRSYW5nZXMgPSBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCA/IHJvb3RGcmFtZS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMoKSA6IHJvb3RGcmFtZS0+
dmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKCk7CisKKyAgICBmbG9hdCBzY2FsZWRTY3JvbGxEZXN0
aW5hdGlvbiA9IHNjcm9sbERlc3RpbmF0aW9uIC8gbV93ZWJQYWdlUHJveHkuZGlzcGxheWVkQ29u
dGVudFNjYWxlKCk7CisgICAgZmxvYXQgcmF3Q2xvc2VzdFNuYXBPZmZzZXQgPSBjbG9zZXN0U25h
cE9mZnNldChzbmFwT2Zmc2V0cywgc25hcE9mZnNldFJhbmdlcywgc2NhbGVkU2Nyb2xsRGVzdGlu
YXRpb24sIHZlbG9jaXR5LCBjdXJyZW50SW5kZXgpOworICAgIHJldHVybiByYXdDbG9zZXN0U25h
cE9mZnNldCAqIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENvbnRlbnRTY2FsZSgpOworfQorCiti
b29sIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6Omhhc0FjdGl2ZVNuYXBQb2ludCgp
IGNvbnN0Cit7CisgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHJvb3QgPSBtX3Njcm9sbGluZ1RyZWUt
PnJvb3ROb2RlKCk7CisgICAgaWYgKCFyb290KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIWlzPFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+KHJvb3QpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlJiBy
b290RnJhbWUgPSBkb3duY2FzdDxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlPigqcm9v
dCk7CisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgaG9yaXpvbnRhbCA9IHJvb3RGcmFtZS5ob3Jp
em9udGFsU25hcE9mZnNldHMoKTsKKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2ZXJ0aWNhbCA9
IHJvb3RGcmFtZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7CisKKyAgICBpZiAoaG9yaXpvbnRhbC5p
c0VtcHR5KCkgJiYgdmVydGljYWwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoKCFob3Jpem9udGFsLmlzRW1wdHkoKSAmJiBtX2N1cnJlbnRIb3Jpem9udGFsU25h
cFBvaW50SW5kZXggPj0gaG9yaXpvbnRhbC5zaXplKCkpCisgICAgICAgIHx8ICghdmVydGljYWwu
aXNFbXB0eSgpICYmIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXggPj0gdmVydGljYWwu
c2l6ZSgpKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVy
biB0cnVlOworfQorICAgIAorQ0dQb2ludCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5
OjpuZWFyZXN0QWN0aXZlQ29udGVudEluc2V0QWRqdXN0ZWRTbmFwUG9pbnQoQ0dGbG9hdCB0b3BJ
bnNldCwgY29uc3QgQ0dQb2ludCYgY3VycmVudFBvaW50KSBjb25zdAoreworICAgIENHUG9pbnQg
YWN0aXZlUG9pbnQgPSBjdXJyZW50UG9pbnQ7CisKKyAgICBTY3JvbGxpbmdUcmVlTm9kZSogcm9v
dCA9IG1fc2Nyb2xsaW5nVHJlZS0+cm9vdE5vZGUoKTsKKyAgICBBU1NFUlQocm9vdCAmJiBpczxT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlPihyb290KSk7CisgICAgU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZSYgcm9vdEZyYW1lID0gZG93bmNhc3Q8U2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZT4oKnJvb3QpOworICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGhvcml6
b250YWwgPSByb290RnJhbWUuaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCk7CisgICAgY29uc3QgVmVj
dG9yPGZsb2F0PiYgdmVydGljYWwgPSByb290RnJhbWUudmVydGljYWxTbmFwT2Zmc2V0cygpOwor
CisgICAgLy8gVGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIG1heFNjcm9sbE9mZnNldHMgaXMgdG8g
ZW5zdXJlIHRoYXQgd2Ugd29uJ3QgaW50ZXJmZXJlIHdpdGggcnViYmVyLWJhbmRpbmcgd2hlbiBz
Y3JvbGxpbmcgdG8gdGhlIGVkZ2Ugb2YgdGhlIHBhZ2UuCisgICAgaWYgKCFob3Jpem9udGFsLmlz
RW1wdHkoKSAmJiBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPCBob3Jpem9udGFs
LnNpemUoKSkKKyAgICAgICAgYWN0aXZlUG9pbnQueCA9IGhvcml6b250YWxbbV9jdXJyZW50SG9y
aXpvbnRhbFNuYXBQb2ludEluZGV4XSAqIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENvbnRlbnRT
Y2FsZSgpOworCisgICAgaWYgKCF2ZXJ0aWNhbC5pc0VtcHR5KCkgJiYgbV9jdXJyZW50VmVydGlj
YWxTbmFwUG9pbnRJbmRleCA8IHZlcnRpY2FsLnNpemUoKSkgeworICAgICAgICBmbG9hdCBwb3Rl
bnRpYWxTbmFwUG9zaXRpb24gPSB2ZXJ0aWNhbFttX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludElu
ZGV4XSAqIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENvbnRlbnRTY2FsZSgpOworICAgICAgICBw
b3RlbnRpYWxTbmFwUG9zaXRpb24gLT0gdG9wSW5zZXQ7CisgICAgICAgIGFjdGl2ZVBvaW50Lnkg
PSBwb3RlbnRpYWxTbmFwUG9zaXRpb247CisgICAgfQorCisgICAgcmV0dXJuIGFjdGl2ZVBvaW50
OworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKworI2VuZGlmIC8vIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Mu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yMDc5ZTAwNzdiMDA4NDFkZDVkMDc3YjJlMTM3N2IwNmVhYTE4YzdkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVl
L2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgKQEAgLTAsMCArMSw4
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPU19oCisjZGVmaW5lIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Nf
aAorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oSU9TKQorCisjaW5j
bHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdDb29yZGluYXRvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oPgorCitPQkpDX0NMQVNTIENBTGF5
ZXI7CitPQkpDX0NMQVNTIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
IDogcHVibGljIFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGUgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUz4gY3JlYXRlKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWUmLCBXZWJDb3JlOjpTY3JvbGxpbmdO
b2RlSUQpOworICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1MoKTsKKworICAgIHZvaWQgb3ZlcmZsb3dTY3JvbGxXaWxsU3RhcnQoKTsKKyAgICB2b2lkIG92
ZXJmbG93U2Nyb2xsRGlkRW5kKCk7CisgICAgdm9pZCBvdmVyZmxvd1Njcm9sbFZpZXdXaWxsU3Rh
cnRQYW5HZXN0dXJlKCk7CisgICAgdm9pZCBzY3JvbGxWaWV3RGlkU2Nyb2xsKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmLCBib29sIGluVXNlckludGVyYWN0aW9uKTsKKyAgICB2b2lkIGN1cnJl
bnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVk
IHZlcnRpY2FsKTsKKworICAgIENBTGF5ZXIgKnNjcm9sbExheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxMYXllci5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFNjcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGVJT1MoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZSYsIFdlYkNvcmU6OlNj
cm9sbGluZ05vZGVJRCk7CisKKyAgICB2b2lkIGNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oY29u
c3QgV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjb21t
aXRTdGF0ZUFmdGVyQ2hpbGRyZW4oY29uc3QgV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlJikg
b3ZlcnJpZGU7CisgICAgCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbigp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxheW91dFZp
ZXdwb3J0KSBvdmVycmlkZTsKKworICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJWaWV3cG9ydENo
YW5nZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBkb3VibGUg
c2NhbGUpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJEZWxlZ2F0ZWRT
Y3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pIG92ZXJyaWRl
OworCisgICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBjdW11bGF0
aXZlRGVsdGEpIG92ZXJyaWRlOworCisgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdl
YkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlIHsgfQorCisgICAgdm9pZCB1cGRh
dGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworICAg
IAorICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3Njcm9sbExheWVyOworICAgIFJldGFpblB0cjxD
QUxheWVyPiBtX3Njcm9sbGVkQ29udGVudHNMYXllcjsKKworICAgIFJldGFpblB0cjxXS092ZXJm
bG93U2Nyb2xsVmlld0RlbGVnYXRlPiBtX3Njcm9sbFZpZXdEZWxlZ2F0ZTsKKyAgICBib29sIG1f
dXBkYXRpbmdGcm9tU3RhdGVOb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShJT1MpCisKKyNlbmRp
ZiAvLyBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jl
bW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hYzFjY2U0ZjIxYmE4OGZkYTBjMDYyNjVkZTNhNTUwZjBmOWE1M2E1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVl
L2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCkBAIC0wLDAgKzEs
MzIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisj
aWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpD
b3JlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVBhbkdlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0
IDxVSUtpdC9VSVNjcm9sbFZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVP
dmVyZmxvd1Njcm9sbGluZ05vZGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmg+Cisj
aW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1NldEZvclNj
b3BlLmg+CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorI2ltcG9ydCA8V2ViQ29yZS9B
eGlzU2Nyb2xsU25hcE9mZnNldHMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRlcmZh
Y2UgV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxVSVNjcm9sbFZpZXdE
ZWxlZ2F0ZT4geworICAgIFdlYktpdDo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUyogX3Njcm9sbGluZ1RyZWVOb2RlOworfQorCitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0
dGVyPV9pc0luVXNlckludGVyYWN0aW9uKSBCT09MIGluVXNlckludGVyYWN0aW9uOworCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZTooV2ViS2l0OjpTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TKilub2RlOworCitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlCisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFNjcm9sbGluZ1RyZWVOb2RlOihXZWJLaXQ6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1MqKW5vZGUKK3sKKyAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUgPSBub2RlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpc2Nyb2xsVmlld0RpZFNjcm9sbDooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldwor
eworICAgIF9zY3JvbGxpbmdUcmVlTm9kZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3
LmNvbnRlbnRPZmZzZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7Cit9CisKKy0gKHZvaWQpc2Nyb2xs
Vmlld1dpbGxCZWdpbkRyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3Cit7CisgICAg
X2luVXNlckludGVyYWN0aW9uID0gWUVTOworCisgICAgaWYgKHNjcm9sbFZpZXcucGFuR2VzdHVy
ZVJlY29nbml6ZXIuc3RhdGUgPT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW4pCisgICAg
ICAgIF9zY3JvbGxpbmdUcmVlTm9kZS0+b3ZlcmZsb3dTY3JvbGxWaWV3V2lsbFN0YXJ0UGFuR2Vz
dHVyZSgpOworICAgIF9zY3JvbGxpbmdUcmVlTm9kZS0+b3ZlcmZsb3dTY3JvbGxXaWxsU3RhcnQo
KTsKK30KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCistICh2b2lkKXNjcm9sbFZpZXdX
aWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZlbG9jaXR5OihD
R1BvaW50KXZlbG9jaXR5IHRhcmdldENvbnRlbnRPZmZzZXQ6KGlub3V0IENHUG9pbnQgKil0YXJn
ZXRDb250ZW50T2Zmc2V0Cit7CisgICAgQ0dGbG9hdCBob3Jpem9udGFsVGFyZ2V0ID0gdGFyZ2V0
Q29udGVudE9mZnNldC0+eDsKKyAgICBDR0Zsb2F0IHZlcnRpY2FsVGFyZ2V0ID0gdGFyZ2V0Q29u
dGVudE9mZnNldC0+eTsKKworICAgIHVuc2lnbmVkIG9yaWdpbmFsSG9yaXpvbnRhbFNuYXBQb3Np
dGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZS0+Y3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRl
eCgpOworICAgIHVuc2lnbmVkIG9yaWdpbmFsVmVydGljYWxTbmFwUG9zaXRpb24gPSBfc2Nyb2xs
aW5nVHJlZU5vZGUtPmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCk7CisKKyAgICBpZiAo
IV9zY3JvbGxpbmdUcmVlTm9kZS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkuaXNFbXB0eSgpKSB7
CisgICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9z
aXRpb24gPSBjbG9zZXN0U25hcE9mZnNldChfc2Nyb2xsaW5nVHJlZU5vZGUtPmhvcml6b250YWxT
bmFwT2Zmc2V0cygpLCBfc2Nyb2xsaW5nVHJlZU5vZGUtPmhvcml6b250YWxTbmFwT2Zmc2V0UmFu
Z2VzKCksIGhvcml6b250YWxUYXJnZXQsIHZlbG9jaXR5LngsIGluZGV4KTsKKyAgICAgICAgX3Nj
cm9sbGluZ1RyZWVOb2RlLT5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KGluZGV4
KTsKKyAgICAgICAgaWYgKGhvcml6b250YWxUYXJnZXQgPj0gMCAmJiBob3Jpem9udGFsVGFyZ2V0
IDw9IHNjcm9sbFZpZXcuY29udGVudFNpemUud2lkdGgpCisgICAgICAgICAgICB0YXJnZXRDb250
ZW50T2Zmc2V0LT54ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOworICAgIH0KKworICAgIGlmICgh
X3Njcm9sbGluZ1RyZWVOb2RlLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgICAgICBmbG9hdCBwb3RlbnRpYWxTbmFwUG9zaXRp
b24gPSBjbG9zZXN0U25hcE9mZnNldChfc2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9m
ZnNldHMoKSwgX3Njcm9sbGluZ1RyZWVOb2RlLT52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMoKSwg
dmVydGljYWxUYXJnZXQsIHZlbG9jaXR5LnksIGluZGV4KTsKKyAgICAgICAgX3Njcm9sbGluZ1Ry
ZWVOb2RlLT5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChpbmRleCk7CisgICAgICAg
IGlmICh2ZXJ0aWNhbFRhcmdldCA+PSAwICYmIHZlcnRpY2FsVGFyZ2V0IDw9IHNjcm9sbFZpZXcu
Y29udGVudFNpemUuaGVpZ2h0KQorICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eSA9
IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAob3JpZ2luYWxIb3Jpem9u
dGFsU25hcFBvc2l0aW9uICE9IF9zY3JvbGxpbmdUcmVlTm9kZS0+Y3VycmVudEhvcml6b250YWxT
bmFwUG9pbnRJbmRleCgpCisgICAgICAgIHx8IG9yaWdpbmFsVmVydGljYWxTbmFwUG9zaXRpb24g
IT0gX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKSB7
CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZS0+Y3VycmVudFNuYXBQb2ludEluZGljZXNEaWRD
aGFuZ2UoX3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4
KCksIF9zY3JvbGxpbmdUcmVlTm9kZS0+Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSk7
CisgICAgfQorfQorI2VuZGlmCisKKy0gKHZvaWQpc2Nyb2xsVmlld0RpZEVuZERyYWdnaW5nOihV
SVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpbGxEZWNlbGVyYXRlOihCT09MKXdpbGxEZWNlbGVy
YXRlCit7CisgICAgaWYgKF9pblVzZXJJbnRlcmFjdGlvbiAmJiAhd2lsbERlY2VsZXJhdGUpIHsK
KyAgICAgICAgX2luVXNlckludGVyYWN0aW9uID0gTk87CisgICAgICAgIF9zY3JvbGxpbmdUcmVl
Tm9kZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQsIF9pblVz
ZXJJbnRlcmFjdGlvbik7CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZS0+b3ZlcmZsb3dTY3Jv
bGxEaWRFbmQoKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2Nyb2xsVmlld0RpZEVuZERlY2VsZXJh
dGluZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldworeworICAgIGlmIChfaW5Vc2VySW50ZXJh
Y3Rpb24pIHsKKyAgICAgICAgX2luVXNlckludGVyYWN0aW9uID0gTk87CisgICAgICAgIF9zY3Jv
bGxpbmdUcmVlTm9kZS0+c2Nyb2xsVmlld0RpZFNjcm9sbChzY3JvbGxWaWV3LmNvbnRlbnRPZmZz
ZXQsIF9pblVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIF9zY3JvbGxpbmdUcmVlTm9kZS0+b3Zl
cmZsb3dTY3JvbGxEaWRFbmQoKTsKKyAgICB9Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1JlZjxTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TPiBTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpjcmVhdGUoV2ViQ29yZTo6U2Nyb2xsaW5n
VHJlZSYgc2Nyb2xsaW5nVHJlZSwgV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlSU9TKHNjcm9sbGluZ1RyZWUsIG5vZGVJRCkpOworfQorCitTY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlSU9TOjpTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9T
KFdlYkNvcmU6OlNjcm9sbGluZ1RyZWUmIHNjcm9sbGluZ1RyZWUsIFdlYkNvcmU6OlNjcm9sbGlu
Z05vZGVJRCBub2RlSUQpCisgICAgOiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
KHNjcm9sbGluZ1RyZWUsIG5vZGVJRCkKKyAgICAsIG1fdXBkYXRpbmdGcm9tU3RhdGVOb2RlKGZh
bHNlKQoreworfQorCitTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp+U2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUygpCit7CisgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TCisgICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNj
cm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV0pIHsKKyAgICAgICAgQVNTRVJUKFtz
Y3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOworICAgICAgICAv
LyBUaGUgc2Nyb2xsVmlldyBtYXkgaGF2ZSBiZWVuIGFkb3B0ZWQgYnkgYW5vdGhlciBub2RlLCBz
byBvbmx5IGNsZWFyIHRoZSBkZWxlZ2F0ZSBpZiBpdCdzIG91cnMuCisgICAgICAgIGlmIChzY3Jv
bGxWaWV3LmRlbGVnYXRlID09IG1fc2Nyb2xsVmlld0RlbGVnYXRlLmdldCgpKQorICAgICAgICAg
ICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9IG5pbDsKKyAgICB9CisgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1M6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgV2ViQ29yZTo6U2Nyb2xsaW5nU3Rh
dGVOb2RlJiBzdGF0ZU5vZGUpCit7CisgICAgaWYgKHN0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgICAgIGlmIChVSVNjcm9sbFZpZXcgKnNj
cm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoW3Njcm9sbFZpZXcgaXNLaW5kT2ZDbGFzczpbVUlTY3JvbGxWaWV3
IHNlbGZdXSk7CisgICAgICAgICAgICBzY3JvbGxWaWV3LmRlbGVnYXRlID0gbmlsOworICAgICAg
ICB9CisgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICB9CisKKyAgICBTY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVu
KHN0YXRlTm9kZSk7CisKKyAgICBjb25zdCBhdXRvJiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3du
Y2FzdDxTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2RlKTsKKyAg
ICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZU5vZGU6OlNjcm9sbExheWVyKSkKKyAgICAgICAgbV9zY3JvbGxMYXllciA9IHNjcm9sbGluZ1N0
YXRlTm9kZS5sYXllcigpOworCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5
ZXIpKQorICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9k
ZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlSU9TOjpjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oY29uc3QgU2Nyb2xs
aW5nU3RhdGVOb2RlJiBzdGF0ZU5vZGUpCit7CisgICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKHN0YXRlTm9kZSk7CisKKyAgICBT
ZXRGb3JTY29wZTxib29sPiB1cGRhdGluZ0NoYW5nZShtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZSwg
dHJ1ZSk7CisKKyAgICBjb25zdCBhdXRvJiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3duY2FzdDxT
Y3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2RlKTsKKworICAgIGlm
IChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIpCisgICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5o
YXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENvbnRl
bnRzU2l6ZSkKKyAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSkKKyAg
ICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBvc2l0aW9uKQorICAgICAgICB8fCBzY3JvbGxpbmdT
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
U2Nyb2xsT3JpZ2luKSkgeworICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAg
ICAgICAgVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxM
YXllcigpIGRlbGVnYXRlXTsKKyAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xh
c3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOworCisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xs
TGF5ZXIpKSB7CisgICAgICAgICAgICBpZiAoIW1fc2Nyb2xsVmlld0RlbGVnYXRlKQorICAgICAg
ICAgICAgICAgIG1fc2Nyb2xsVmlld0RlbGVnYXRlID0gYWRvcHROUyhbW1dLT3ZlcmZsb3dTY3Jv
bGxWaWV3RGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsaW5nVHJlZU5vZGU6dGhpc10pOwor
CisgICAgICAgICAgICBzY3JvbGxWaWV3LnNjcm9sbHNUb1RvcCA9IE5POworICAgICAgICAgICAg
c2Nyb2xsVmlldy5kZWxlZ2F0ZSA9IG1fc2Nyb2xsVmlld0RlbGVnYXRlLmdldCgpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCByZWNvbXB1dGVJbnNldHMgPSBzY3JvbGxpbmdTdGF0ZU5vZGUu
aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VG90YWxDb250
ZW50c1NpemUpOworICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSkp
IHsKKyAgICAgICAgICAgIHNjcm9sbFZpZXcuY29udGVudFNpemUgPSBzY3JvbGxpbmdTdGF0ZU5v
ZGUucmVhY2hhYmxlQ29udGVudHNTaXplKCk7CisgICAgICAgICAgICByZWNvbXB1dGVJbnNldHMg
PSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9zaXRp
b24pCisgICAgICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luKSkKKyAgICAgICAgICAg
ICYmICFbbV9zY3JvbGxWaWV3RGVsZWdhdGUgX2lzSW5Vc2VySW50ZXJhY3Rpb25dKSB7CisgICAg
ICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuc2Ny
b2xsUG9zaXRpb24oKSArIHNjcm9sbE9yaWdpbigpOworICAgICAgICAgICAgcmVjb21wdXRlSW5z
ZXRzID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZWNvbXB1dGVJbnNldHMpIHsK
KyAgICAgICAgICAgIFVJRWRnZUluc2V0cyBpbnNldHMgPSBVSUVkZ2VJbnNldHNNYWtlKDAsIDAs
IDAsIDApOworICAgICAgICAgICAgLy8gV2l0aCBSVEwgb3IgYm90dG9tLXRvLXRvcCBzY3JvbGxp
bmcgKG5vbi16ZXJvIG9yaWdpbiksIHdlIG5lZWQgZXh0cmEgc3BhY2Ugb24gdGhlIGxlZnQgb3Ig
dG9wLgorICAgICAgICAgICAgaWYgKHNjcm9sbE9yaWdpbigpLngoKSkKKyAgICAgICAgICAgICAg
ICBpbnNldHMubGVmdCA9IHJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSB0b3RhbENv
bnRlbnRzU2l6ZSgpLndpZHRoKCk7CisKKyAgICAgICAgICAgIGlmIChzY3JvbGxPcmlnaW4oKS55
KCkpCisgICAgICAgICAgICAgICAgaW5zZXRzLnRvcCA9IHJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgp
LmhlaWdodCgpIC0gdG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKTsKKworICAgICAgICAgICAg
c2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBpbnNldHM7CisgICAgICAgIH0KKworI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCisgICAgICAgIC8vIEZJWE1FOiBJZiBvbmx5IG9uZSBheGlzIHNu
YXBzIGluIDJEIHNjcm9sbGluZywgdGhlIG90aGVyIGF4aXMgd2lsbCBkZWNlbGVyYXRlIGZhc3Qg
YXMgd2VsbC4gSXMgdGhpcyB3aGF0IHdlIHdhbnQ/CisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9y
aXpvbnRhbFNuYXBPZmZzZXRzKSB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0cykpCisg
ICAgICAgICAgICBzY3JvbGxWaWV3LmRlY2VsZXJhdGlvblJhdGUgPSBob3Jpem9udGFsU25hcE9m
ZnNldHMoKS5zaXplKCkgfHwgdmVydGljYWxTbmFwT2Zmc2V0cygpLnNpemUoKSA/IFVJU2Nyb2xs
Vmlld0RlY2VsZXJhdGlvblJhdGVGYXN0IDogVUlTY3JvbGxWaWV3RGVjZWxlcmF0aW9uUmF0ZU5v
cm1hbDsKKyNlbmRpZgorICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgfQor
fQorCit2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUxh
eWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWRO
b2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUm
IGN1bXVsYXRpdmVEZWx0YSkKK3sKKyAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgIHJldHVy
bjsKKworICAgIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IGxhc3RDb21taXR0ZWRTY3JvbGxQb3Np
dGlvbigpIC0gc2Nyb2xsUG9zaXRpb24oKTsKKworICAgIGZvciAoYXV0byYgY2hpbGQgOiAqbV9j
aGlsZHJlbikKKyAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2Uo
Y2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBjdW11bGF0aXZlRGVsdGEgKyBzY3JvbGxE
ZWx0YSk7Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUworICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilb
c2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV07CisgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9m
Q2xhc3M6W1VJU2Nyb2xsVmlldyBzZWxmXV0pOworICAgIHJldHVybiBbc2Nyb2xsVmlldyBjb250
ZW50T2Zmc2V0XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK3ZvaWQgU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgRmxvYXRSZWN0JikKK3sK
KyAgICBbbV9zY3JvbGxMYXllciBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZSgtc2Nyb2xsUG9zaXRp
b24ueCgpICsgc2Nyb2xsT3JpZ2luKCkueCgpLCAtc2Nyb2xsUG9zaXRpb24ueSgpICsgc2Nyb2xs
T3JpZ2luKCkueSgpKV07CisKKyAgICB1cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoc2Nyb2xs
UG9zaXRpb24pOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1M6OnVwZGF0ZUxheWVyc0FmdGVyRGVsZWdhdGVkU2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQmIHNj
cm9sbFBvc2l0aW9uKQoreworICAgIHVwZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9sbChzY3JvbGxQ
b3NpdGlvbik7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
Uzo6dXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBv
c2l0aW9uKQoreworICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
RmxvYXRSZWN0IGZpeGVkUG9zaXRpb25SZWN0OworICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGUqIGZyYW1lTm9kZSA9IGVuY2xvc2luZ0ZyYW1lTm9kZSgpOworICAgIGlmIChmcmFt
ZU5vZGUgJiYgZnJhbWVOb2RlLT5wYXJlbnQoKSkKKyAgICAgICAgZml4ZWRQb3NpdGlvblJlY3Qg
PSBmcmFtZU5vZGUtPmZpeGVkUG9zaXRpb25SZWN0KCk7CisgICAgZWxzZQorICAgICAgICBmaXhl
ZFBvc2l0aW9uUmVjdCA9IHNjcm9sbGluZ1RyZWUoKS5maXhlZFBvc2l0aW9uUmVjdCgpOworICAg
IEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSA9IGxhc3RDb21taXR0ZWRTY3JvbGxQb3NpdGlvbigpIC0g
c2Nyb2xsUG9zaXRpb247CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogKm1fY2hpbGRyZW4pCisg
ICAgICAgIGNoaWxkLT51cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKCp0aGlzLCBmaXhl
ZFBvc2l0aW9uUmVjdCwgc2Nyb2xsRGVsdGEpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGVJT1M6Om92ZXJmbG93U2Nyb2xsV2lsbFN0YXJ0KCkKK3sKKyAgICBz
Y3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3RhcnRTY3JvbGwoKTsKK30KKwor
dm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpvdmVyZmxvd1Njcm9s
bERpZEVuZCgpCit7CisgICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlRGlkRW5k
U2Nyb2xsKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
Uzo6b3ZlcmZsb3dTY3JvbGxWaWV3V2lsbFN0YXJ0UGFuR2VzdHVyZSgpCit7CisgICAgc2Nyb2xs
aW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0YXJ0UGFuR2VzdHVyZSgpOworfQorCit2
b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnNjcm9sbFZpZXdEaWRT
Y3JvbGwoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGJvb2wgaW5Vc2VySW50ZXJh
Y3Rpb24pCit7CisgICAgaWYgKG1fdXBkYXRpbmdGcm9tU3RhdGVOb2RlKQorICAgICAgICByZXR1
cm47CisKKyAgICBzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsUG9zaXRpb25DaGFuZ2VkVmlhRGVsZWdh
dGVkU2Nyb2xsaW5nKHNjcm9sbGluZ05vZGVJRCgpLCBzY3JvbGxQb3NpdGlvbiwgaW5Vc2VySW50
ZXJhY3Rpb24pOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1M6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKHVuc2lnbmVkIGhvcml6b250YWws
IHVuc2lnbmVkIHZlcnRpY2FsKQoreworICAgIGlmIChtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHNjcm9sbGluZ1RyZWUoKS5jdXJyZW50U25hcFBv
aW50SW5kaWNlc0RpZENoYW5nZShzY3JvbGxpbmdOb2RlSUQoKSwgaG9yaXpvbnRhbCwgdmVydGlj
YWwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclByb3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVk
MWViNzE3ZmQ5YTI3MzZiYmZjMTE4YWY0NjUwYTU3MmIwYzdjZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3Jv
bGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCi0KLSNpZiBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQotCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgiCi0jaW5jbHVkZSAiUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1l
c3NhZ2VzLmgiCi0jaW5jbHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlv
bi5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94
eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZVRyZWUuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eTo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eShXZWJQYWdlUHJveHkmIHdl
YlBhZ2VQcm94eSkKLSAgICA6IG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKLSAgICAsIG1f
c2Nyb2xsaW5nVHJlZShSZW1vdGVTY3JvbGxpbmdUcmVlOjpjcmVhdGUoKnRoaXMpKQotICAgICwg
bV9yZXF1ZXN0ZWRTY3JvbGxJbmZvKG51bGxwdHIpCi0gICAgLCBtX3Byb3BhZ2F0ZXNNYWluRnJh
bWVTY3JvbGxzKHRydWUpCi17Ci19Ci0KLVJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6
On5SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCkKLXsKLX0KLQotU2Nyb2xsaW5nTm9k
ZUlEIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnJvb3RTY3JvbGxpbmdOb2RlSUQo
KSBjb25zdAotewotICAgIGlmICghbV9zY3JvbGxpbmdUcmVlLT5yb290Tm9kZSgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX3Njcm9sbGluZ1RyZWUtPnJvb3ROb2RlKCktPnNj
cm9sbGluZ05vZGVJRCgpOwotfQotCi1jb25zdCBSZW1vdGVMYXllclRyZWVIb3N0KiBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpsYXllclRyZWVIb3N0KCkgY29uc3QKLXsKLSAgICBE
cmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IG1fd2ViUGFnZVByb3h5LmRyYXdpbmdBcmVh
KCk7Ci0gICAgaWYgKCFpczxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PihkcmF3aW5n
QXJlYSkpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkmIHJl
bW90ZURyYXdpbmdBcmVhID0gZG93bmNhc3Q8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eT4oKmRyYXdpbmdBcmVhKTsKLSAgICByZXR1cm4gJnJlbW90ZURyYXdpbmdBcmVhLnJlbW90ZUxh
eWVyVHJlZUhvc3QoKTsKLX0KLQotdm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5
Ojpjb21taXRTY3JvbGxpbmdUcmVlU3RhdGUoY29uc3QgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFJlcXVlc3RlZFNjcm9sbEluZm8mIHJlcXVlc3Rl
ZFNjcm9sbEluZm8pCi17Ci0gICAgbV9yZXF1ZXN0ZWRTY3JvbGxJbmZvID0gJnJlcXVlc3RlZFNj
cm9sbEluZm87Ci0KLSAgICAvLyBGSVhNRTogVGhlcmUgbXVzdCBiZSBhIGJldHRlciBpZGlvbSBm
b3IgdGhpcy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBzdGF0ZVRy
ZWUoY29uc3RfY2FzdDxSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uJj4odHJh
bnNhY3Rpb24pLnNjcm9sbGluZ1N0YXRlVHJlZSgpLnJlbGVhc2UoKSk7Ci0KLSAgICBjb25zdCBS
ZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0ID0gdGhpcy0+bGF5ZXJUcmVlSG9zdCgp
OwotICAgIGlmICghbGF5ZXJUcmVlSG9zdCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbm5lY3RTdGF0ZU5vZGVMYXllcnMo
KnN0YXRlVHJlZSwgKmxheWVyVHJlZUhvc3QpOwotICAgIG1fc2Nyb2xsaW5nVHJlZS0+Y29tbWl0
VHJlZVN0YXRlKFdURk1vdmUoc3RhdGVUcmVlKSk7Ci0KLSAgICBtX3JlcXVlc3RlZFNjcm9sbElu
Zm8gPSBudWxscHRyOwotfQotCi0jaWYgIVBMQVRGT1JNKElPUykKLXZvaWQgUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcm94eTo6Y29ubmVjdFN0YXRlTm9kZUxheWVycyhTY3JvbGxpbmdTdGF0
ZVRyZWUmIHN0YXRlVHJlZSwgY29uc3QgUmVtb3RlTGF5ZXJUcmVlSG9zdCYgbGF5ZXJUcmVlSG9z
dCkKLXsKLSAgICBmb3IgKGF1dG8mIGN1cnJOb2RlIDogc3RhdGVUcmVlLm5vZGVNYXAoKS52YWx1
ZXMoKSkgewotICAgICAgICBpZiAoY3Vyck5vZGUtPmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkKLSAgICAgICAgICAgIGN1cnJOb2RlLT5zZXRMYXll
cihsYXllclRyZWVIb3N0LmdldExheWVyKGN1cnJOb2RlLT5sYXllcigpKSk7Ci0KLSAgICAgICAg
c3dpdGNoIChjdXJyTm9kZS0+bm9kZVR5cGUoKSkgewotICAgICAgICBjYXNlIEZyYW1lU2Nyb2xs
aW5nTm9kZTogewotICAgICAgICAgICAgU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUm
IHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxp
bmdOb2RlPigqY3Vyck5vZGUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2Nyb2xs
aW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OlNjcm9sbGVkQ29udGVudHNMYXllcikpCi0gICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3Rh
dGVOb2RlLnNldFNjcm9sbGVkQ29udGVudHNMYXllcihsYXllclRyZWVIb3N0LmdldExheWVyKHNj
cm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSkpOwotCi0gICAgICAgICAg
ICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Q291bnRlclNjcm9sbGluZ0xheWVyKSkKLSAgICAgICAgICAg
ICAgICBzY3JvbGxpbmdTdGF0ZU5vZGUuc2V0Q291bnRlclNjcm9sbGluZ0xheWVyKGxheWVyVHJl
ZUhvc3QuZ2V0TGF5ZXIoc2Nyb2xsaW5nU3RhdGVOb2RlLmNvdW50ZXJTY3JvbGxpbmdMYXllcigp
KSk7Ci0KLSAgICAgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpJbnNldENsaXBMYXllcikpCi0g
ICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNldEluc2V0Q2xpcExheWVyKGxheWVy
VHJlZUhvc3QuZ2V0TGF5ZXIoc2Nyb2xsaW5nU3RhdGVOb2RlLmluc2V0Q2xpcExheWVyKCkpKTsK
LQotICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHko
U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkNvbnRlbnRTaGFkb3dMYXllcikpCi0g
ICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNldENvbnRlbnRTaGFkb3dMYXllcihs
YXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5jb250ZW50U2hhZG93TGF5
ZXIoKSkpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIG5ldmVyIGhhdmUgaGVh
ZGVyIGFuZCBmb290ZXIgbGF5ZXJzIGNvbWluZyBmcm9tIHRoZSBXZWJQcm9jZXNzLgotICAgICAg
ICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkhlYWRlckxheWVyKSkKLSAgICAgICAgICAgICAgICBz
Y3JvbGxpbmdTdGF0ZU5vZGUuc2V0SGVhZGVyTGF5ZXIobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihz
Y3JvbGxpbmdTdGF0ZU5vZGUuaGVhZGVyTGF5ZXIoKSkpOwotCi0gICAgICAgICAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Ny
b2xsaW5nTm9kZTo6Rm9vdGVyTGF5ZXIpKQotICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0YXRl
Tm9kZS5zZXRGb290ZXJMYXllcihsYXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRl
Tm9kZS5mb290ZXJMYXllcigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIE92ZXJmbG93U2Nyb2xsaW5nTm9kZTogewotICAgICAgICAgICAgU2Nyb2xsaW5n
U3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0
PFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPigqY3Vyck5vZGUpOwotCi0gICAg
ICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVudHNMYXllcikpCi0gICAgICAgICAg
ICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNldFNjcm9sbGVkQ29udGVudHNMYXllcihsYXllclRy
ZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIo
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaXhlZE5v
ZGU6Ci0gICAgICAgIGNhc2UgU3RpY2t5Tm9kZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotfQotI2VuZGlmCi0KLWJvb2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eTo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQot
ewotICAgIFNjcm9sbGluZ1RyZWU6OkV2ZW50UmVzdWx0IHJlc3VsdCA9IG1fc2Nyb2xsaW5nVHJl
ZS0+dHJ5VG9IYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKLSAgICByZXR1cm4gcmVzdWx0ID09IFNj
cm9sbGluZ1RyZWU6OkRpZEhhbmRsZUV2ZW50OyAvLyBGSVhNRTogaGFuZGxlIG90aGVyIHZhbHVl
cy4KLX0KLQotVHJhY2tpbmdUeXBlIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmV2
ZW50VHJhY2tpbmdUeXBlRm9yUG9pbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIElu
dFBvaW50IHApIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Nyb2xsaW5nVHJlZS0+ZXZlbnRUcmFj
a2luZ1R5cGVGb3JQb2ludChldmVudE5hbWUsIHApOwotfQotCi12b2lkIFJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHk6OnZpZXdwb3J0Q2hhbmdlZFZpYURlbGVnYXRlZFNjcm9sbGluZyhT
Y3JvbGxpbmdOb2RlSUQgbm9kZUlELCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0
LCBkb3VibGUgc2NhbGUpCi17Ci0gICAgbV9zY3JvbGxpbmdUcmVlLT52aWV3cG9ydENoYW5nZWRW
aWFEZWxlZ2F0ZWRTY3JvbGxpbmcobm9kZUlELCBmaXhlZFBvc2l0aW9uUmVjdCwgc2NhbGUpOwot
fQotCi12b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmN1cnJlbnRTbmFwUG9p
bnRJbmRpY2VzRGlkQ2hhbmdlKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCBub2RlSUQsIHVuc2ln
bmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKQotewotICAgIG1fd2ViUGFnZVByb3h5
LnNlbmQoTWVzc2FnZXM6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpDdXJyZW50U25hcFBv
aW50SW5kaWNlc0NoYW5nZWRGb3JOb2RlKG5vZGVJRCwgaG9yaXpvbnRhbCwgdmVydGljYWwpKTsK
LX0KLQotLy8gVGhpcyBjb21lcyBmcm9tIHRoZSBzY3JvbGxpbmcgdHJlZS4KLXZvaWQgUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2Nyb2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwoU2Ny
b2xsaW5nTm9kZUlEIHNjcm9sbGVkTm9kZUlELCBjb25zdCBGbG9hdFBvaW50JiBuZXdTY3JvbGxQ
b3NpdGlvbiwgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFBvaW50PiYgbGF5b3V0Vmlld3BvcnRP
cmlnaW4sIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24gc2Nyb2xsaW5nTGF5ZXJQb3NpdGlv
bkFjdGlvbikKLXsKLSAgICAvLyBTY3JvbGwgdXBkYXRlcyBmb3IgdGhlIG1haW4gZnJhbWUgYXJl
IHNlbnQgdmlhIFdlYlBhZ2VQcm94eTo6dXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cygpCi0gICAg
Ly8gc28gZG9uJ3Qgc2VuZCB0aGVtIGhlcmUuCi0gICAgaWYgKCFtX3Byb3BhZ2F0ZXNNYWluRnJh
bWVTY3JvbGxzICYmIHNjcm9sbGVkTm9kZUlEID09IHJvb3RTY3JvbGxpbmdOb2RlSUQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIG1fd2ViUGFnZVByb3h5Lm92
ZXJmbG93U2Nyb2xsVmlld0RpZFNjcm9sbCgpOwotI2VuZGlmCi0gICAgbV93ZWJQYWdlUHJveHku
c2VuZChNZXNzYWdlczo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OlNjcm9sbFBvc2l0aW9u
Q2hhbmdlZEZvck5vZGUoc2Nyb2xsZWROb2RlSUQsIG5ld1Njcm9sbFBvc2l0aW9uLCBzY3JvbGxp
bmdMYXllclBvc2l0aW9uQWN0aW9uID09IFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5
bmMpKTsKLX0KLQotdm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpzY3JvbGxp
bmdUcmVlTm9kZVJlcXVlc3RzU2Nyb2xsKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxlZE5vZGVJRCwg
Y29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGJvb2wgcmVwcmVzZW50c1Byb2dyYW1t
YXRpY1Njcm9sbCkKLXsKLSAgICBpZiAoc2Nyb2xsZWROb2RlSUQgPT0gcm9vdFNjcm9sbGluZ05v
ZGVJRCgpICYmIG1fcmVxdWVzdGVkU2Nyb2xsSW5mbykgewotICAgICAgICBtX3JlcXVlc3RlZFNj
cm9sbEluZm8tPnJlcXVlc3RzU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0cnVlOwotICAgICAgICBt
X3JlcXVlc3RlZFNjcm9sbEluZm8tPnJlcXVlc3RJc1Byb2dyYW1tYXRpY1Njcm9sbCA9IHJlcHJl
c2VudHNQcm9ncmFtbWF0aWNTY3JvbGw7Ci0gICAgICAgIG1fcmVxdWVzdGVkU2Nyb2xsSW5mby0+
cmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKLSAgICB9Ci19Ci0KLVN0
cmluZyBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpzY3JvbGxpbmdUcmVlQXNUZXh0
KCkgY29uc3QKLXsKLSAgICBpZiAobV9zY3JvbGxpbmdUcmVlKQotICAgICAgICByZXR1cm4gbV9z
Y3JvbGxpbmdUcmVlLT5zY3JvbGxpbmdUcmVlQXNUZXh0KCk7Ci0gICAgCi0gICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODdiYjJjMmU4NGM4NDliMDVmZTEzYmYw
OTk2ZWMwZTM1ZTdkZGJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvclByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5X2gKLSNk
ZWZpbmUgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eV9oCi0KLSNpZiBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQotCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSAi
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdU
cmVlLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgUGxh
dGZvcm1XaGVlbEV2ZW50OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUmVtb3Rl
TGF5ZXJUcmVlSG9zdDsKLWNsYXNzIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rp
b247Ci1jbGFzcyBSZW1vdGVTY3JvbGxpbmdUcmVlOwotY2xhc3MgV2ViUGFnZVByb3h5OwotCi1j
bGFzcyBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5IHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5KTsKLXB1YmxpYzoKLSAgICBl
eHBsaWNpdCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5KFdlYlBhZ2VQcm94eSYpOwot
ICAgIHZpcnR1YWwgflJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKTsKLQotICAgIGJv
b2wgdmlzdWFsVmlld3BvcnRFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdUcmVl
ICYmIG1fc2Nyb2xsaW5nVHJlZS0+dmlzdWFsVmlld3BvcnRFbmFibGVkKCk7IH0KLQotICAgIC8v
IEluZm9ybSB0aGUgd2ViIHByb2Nlc3MgdGhhdCB0aGUgc2Nyb2xsIHBvc2l0aW9uIGNoYW5nZWQg
KGNhbGxlZCBmcm9tIHRoZSBzY3JvbGxpbmcgdHJlZSkKLSAgICB2b2lkIHNjcm9sbGluZ1RyZWVO
b2RlRGlkU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgbmV3U2Nyb2xsUG9zaXRpb24sIGNvbnN0IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
RmxvYXRQb2ludD4mIGxheW91dFZpZXdwb3J0T3JpZ2luLCBXZWJDb3JlOjpTY3JvbGxpbmdMYXll
clBvc2l0aW9uQWN0aW9uKTsKLSAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlUmVxdWVzdHNTY3Jv
bGwoV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZUlELCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBz
Y3JvbGxQb3NpdGlvbiwgYm9vbCByZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKTsKLQotICAg
IFdlYkNvcmU6OlRyYWNraW5nVHlwZSBldmVudFRyYWNraW5nVHlwZUZvclBvaW50KGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnROYW1lLCBXZWJDb3JlOjpJbnRQb2ludCkgY29uc3Q7Ci0KLSAgICAv
LyBDYWxsZWQgZXh0ZXJuYWxseSB3aGVuIG5hdGl2ZSB2aWV3cyBtb3ZlIGFyb3VuZC4KLSAgICB2
b2lkIHZpZXdwb3J0Q2hhbmdlZFZpYURlbGVnYXRlZFNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxp
bmdOb2RlSUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGRv
dWJsZSBzY2FsZSk7Ci0KLSAgICB2b2lkIGN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdl
KFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWduZWQg
dmVydGljYWwpOwotCi0gICAgLy8gRklYTUU6IGV4cG9zZSB0aGUgdHJlZSBhbmQgcGFzcyB0aGlz
IHRvIHRoYXQ/Ci0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6OlBsYXRm
b3JtV2hlZWxFdmVudCYpOwotICAgIAotICAgIFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCByb290
U2Nyb2xsaW5nTm9kZUlEKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBSZW1vdGVMYXllclRyZWVIb3N0
KiBsYXllclRyZWVIb3N0KCkgY29uc3Q7Ci0KLSAgICBzdHJ1Y3QgUmVxdWVzdGVkU2Nyb2xsSW5m
byB7Ci0gICAgICAgIGJvb2wgcmVxdWVzdHNTY3JvbGxQb3NpdGlvblVwZGF0ZSB7IH07Ci0gICAg
ICAgIGJvb2wgcmVxdWVzdElzUHJvZ3JhbW1hdGljU2Nyb2xsIHsgfTsKLSAgICAgICAgV2ViQ29y
ZTo6RmxvYXRQb2ludCByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKLSAgICB9OwotICAgIHZvaWQg
Y29tbWl0U2Nyb2xsaW5nVHJlZVN0YXRlKGNvbnN0IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
VHJhbnNhY3Rpb24mLCBSZXF1ZXN0ZWRTY3JvbGxJbmZvJik7Ci0KLSAgICB2b2lkIHNldFByb3Bh
Z2F0ZXNNYWluRnJhbWVTY3JvbGxzKGJvb2wgcHJvcGFnYXRlc01haW5GcmFtZVNjcm9sbHMpIHsg
bV9wcm9wYWdhdGVzTWFpbkZyYW1lU2Nyb2xscyA9IHByb3BhZ2F0ZXNNYWluRnJhbWVTY3JvbGxz
OyB9Ci0gICAgYm9vbCBwcm9wYWdhdGVzTWFpbkZyYW1lU2Nyb2xscygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvcGFnYXRlc01haW5GcmFtZVNjcm9sbHM7IH0KLSAgICBib29sIGhhc0ZpeGVkT3JTdGlj
a3koKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZ1RyZWUtPmhhc0ZpeGVkT3JTdGlja3koKTsg
fQotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjdXN0b21GaXhl
ZFBvc2l0aW9uUmVjdCgpIGNvbnN0OwotICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVXaWxsU3Rh
cnRQYW5HZXN0dXJlKCk7Ci0gICAgdm9pZCBzY3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFNjcm9s
bCgpOwotICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVEaWRFbmRTY3JvbGwoKTsKLSNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQgYWRqdXN0VGFyZ2V0Q29udGVudE9mZnNldEZv
clNuYXBwaW5nKENHU2l6ZSBtYXhTY3JvbGxEaW1lbnNpb25zLCBDR1BvaW50IHZlbG9jaXR5LCBD
R0Zsb2F0IHRvcEluc2V0LCBDR1BvaW50KiB0YXJnZXRDb250ZW50T2Zmc2V0KTsKLSAgICBib29s
IGhhc0FjdGl2ZVNuYXBQb2ludCgpIGNvbnN0OwotICAgIENHUG9pbnQgbmVhcmVzdEFjdGl2ZUNv
bnRlbnRJbnNldEFkanVzdGVkU25hcFBvaW50KENHRmxvYXQgdG9wSW5zZXQsIGNvbnN0IENHUG9p
bnQmKSBjb25zdDsKLSAgICBib29sIHNob3VsZFNldFNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRl
RmFzdCgpIGNvbnN0OwotI2VuZGlmCi0jZW5kaWYKLQotICAgIFN0cmluZyBzY3JvbGxpbmdUcmVl
QXNUZXh0KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjb25uZWN0U3RhdGVOb2RlTGF5
ZXJzKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZSYsIGNvbnN0IFJlbW90ZUxheWVyVHJlZUhv
c3QmKTsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wgc2hvdWxkU25hcEZv
ck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXMpIGNvbnN0OwotICAg
IGZsb2F0IGNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNj
cm9sbEV2ZW50QXhpcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1
bnNpZ25lZCYgY2xvc2VzdEluZGV4KSBjb25zdDsKLSNlbmRpZgotCi0gICAgV2ViUGFnZVByb3h5
JiBtX3dlYlBhZ2VQcm94eTsKLSAgICBSZWZQdHI8UmVtb3RlU2Nyb2xsaW5nVHJlZT4gbV9zY3Jv
bGxpbmdUcmVlOwotICAgIFJlcXVlc3RlZFNjcm9sbEluZm8qIG1fcmVxdWVzdGVkU2Nyb2xsSW5m
bzsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHVuc2lnbmVkIG1fY3VycmVudEhv
cml6b250YWxTbmFwUG9pbnRJbmRleCB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4IHsgMCB9OwotI2VuZGlmCi0gICAgYm9vbCBtX3Byb3BhZ2F0ZXNN
YWluRnJhbWVTY3JvbGxzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotCi0jZW5kaWYgLy8gUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3Jv
bGxpbmcvUmVtb3RlU2Nyb2xsaW5nVHJlZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9T
Y3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nVHJlZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDI1ZWJiNGJlMzExN2MwYzBhYzI0MjNmODdjZWY3MjIxOWRlMzMwMTQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ1RyZWUuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUmVtb3RlU2Nyb2xsaW5nVHJlZS5oIgotCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
LQotI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVl
Rml4ZWROb2RlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5o
PgotCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGVJT1MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1RyZWVGcmFtZVNj
cm9sbGluZ05vZGVJT1MuaD4KLSNlbHNlCi0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlTWFjLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1SZWY8UmVtb3RlU2Nyb2xsaW5nVHJlZT4gUmVt
b3RlU2Nyb2xsaW5nVHJlZTo6Y3JlYXRlKFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkm
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90
ZVNjcm9sbGluZ1RyZWUoc2Nyb2xsaW5nQ29vcmRpbmF0b3IpKTsKLX0KLQotUmVtb3RlU2Nyb2xs
aW5nVHJlZTo6UmVtb3RlU2Nyb2xsaW5nVHJlZShSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5JiBzY3JvbGxpbmdDb29yZGluYXRvcikKLSAgICA6IG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eShzY3JvbGxpbmdDb29yZGluYXRvcikKLXsKLX0KLQotUmVtb3RlU2Nyb2xsaW5nVHJlZTo6
flJlbW90ZVNjcm9sbGluZ1RyZWUoKQotewotfQotCi1TY3JvbGxpbmdUcmVlOjpFdmVudFJlc3Vs
dCBSZW1vdGVTY3JvbGxpbmdUcmVlOjp0cnlUb0hhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIGlmIChzaG91bGRIYW5kbGVXaGVlbEV2
ZW50U3luY2hyb25vdXNseSh3aGVlbEV2ZW50KSkKLSAgICAgICAgcmV0dXJuIFNlbmRUb01haW5U
aHJlYWQ7Ci0KLSAgICBpZiAod2lsbFdoZWVsRXZlbnRTdGFydFN3aXBlR2VzdHVyZSh3aGVlbEV2
ZW50KSkKLSAgICAgICAgcmV0dXJuIERpZE5vdEhhbmRsZUV2ZW50OwotCi0gICAgaGFuZGxlV2hl
ZWxFdmVudCh3aGVlbEV2ZW50KTsKLSAgICByZXR1cm4gRGlkSGFuZGxlRXZlbnQ7Ci19Ci0KLSNp
ZiBQTEFURk9STShNQUMpCi12b2lkIFJlbW90ZVNjcm9sbGluZ1RyZWU6OmhhbmRsZVdoZWVsRXZl
bnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSkKLXsKLSAgICAvLyBGSVhNRTog
aGFuZCBvZmYgdG8gbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5PwotfQotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShJT1MpCi1XZWJDb3JlOjpGbG9hdFJlY3QgUmVtb3RlU2Nyb2xsaW5nVHJlZTo6
Zml4ZWRQb3NpdGlvblJlY3QoKQotewotICAgIHJldHVybiBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHkuY3VzdG9tRml4ZWRQb3NpdGlvblJlY3QoKTsKLX0KLQotdm9pZCBSZW1vdGVTY3JvbGxp
bmdUcmVlOjpzY3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFBhbkdlc3R1cmUoKQotewotICAgIG1f
c2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5zY3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFBhbkdl
c3R1cmUoKTsKLX0KLQotdm9pZCBSZW1vdGVTY3JvbGxpbmdUcmVlOjpzY3JvbGxpbmdUcmVlTm9k
ZVdpbGxTdGFydFNjcm9sbCgpCi17Ci0gICAgbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5LnNj
cm9sbGluZ1RyZWVOb2RlV2lsbFN0YXJ0U2Nyb2xsKCk7Ci19Ci0KLXZvaWQgUmVtb3RlU2Nyb2xs
aW5nVHJlZTo6c2Nyb2xsaW5nVHJlZU5vZGVEaWRFbmRTY3JvbGwoKQotewotICAgIG1fc2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcm94eS5zY3JvbGxpbmdUcmVlTm9kZURpZEVuZFNjcm9sbCgpOwotfQot
Ci0jZW5kaWYKLQotdm9pZCBSZW1vdGVTY3JvbGxpbmdUcmVlOjpzY3JvbGxpbmdUcmVlTm9kZURp
ZFNjcm9sbChTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCBjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQ
b3NpdGlvbiwgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFBvaW50PiYgbGF5b3V0Vmlld3BvcnRP
cmlnaW4sIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24gc2Nyb2xsaW5nTGF5ZXJQb3NpdGlv
bkFjdGlvbikKLXsKLSAgICBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuc2Nyb2xsaW5nVHJl
ZU5vZGVEaWRTY3JvbGwobm9kZUlELCBzY3JvbGxQb3NpdGlvbiwgbGF5b3V0Vmlld3BvcnRPcmln
aW4sIHNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24pOwotfQotCi12b2lkIFJlbW90ZVNjcm9s
bGluZ1RyZWU6OnNjcm9sbGluZ1RyZWVOb2RlUmVxdWVzdHNTY3JvbGwoU2Nyb2xsaW5nTm9kZUlE
IG5vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGJvb2wgcmVwcmVzZW50
c1Byb2dyYW1tYXRpY1Njcm9sbCkKLXsKLSAgICBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHku
c2Nyb2xsaW5nVHJlZU5vZGVSZXF1ZXN0c1Njcm9sbChub2RlSUQsIHNjcm9sbFBvc2l0aW9uLCBy
ZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKTsKLX0KLQotUmVmPFNjcm9sbGluZ1RyZWVOb2Rl
PiBSZW1vdGVTY3JvbGxpbmdUcmVlOjpjcmVhdGVTY3JvbGxpbmdUcmVlTm9kZShTY3JvbGxpbmdO
b2RlVHlwZSBub2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkKLXsKLSAgICBzd2l0Y2gg
KG5vZGVUeXBlKSB7Ci0gICAgY2FzZSBGcmFtZVNjcm9sbGluZ05vZGU6Ci0jaWYgUExBVEZPUk0o
SU9TKQotICAgICAgICByZXR1cm4gU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUlPUzo6
Y3JlYXRlKCp0aGlzLCBub2RlSUQpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIFNjcm9sbGluZ1Ry
ZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmNyZWF0ZSgqdGhpcywgbm9kZUlEKTsKLSNlbmRpZgot
ICAgIGNhc2UgT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOgotI2lmIFBMQVRGT1JNKElPUykKLSAgICAg
ICAgcmV0dXJuIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OmNyZWF0ZSgq
dGhpcywgbm9kZUlEKTsKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgRml4ZWROb2RlOgotICAgICAgICByZXR1cm4g
U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y3JlYXRlKCp0aGlzLCBub2RlSUQpOwotICAgIGNhc2Ug
U3RpY2t5Tm9kZToKLSAgICAgICAgcmV0dXJuIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjpjcmVh
dGUoKnRoaXMsIG5vZGVJRCk7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjpjcmVhdGUoKnRoaXMsIG5vZGVJRCk7Ci19
Ci0KLXZvaWQgUmVtb3RlU2Nyb2xsaW5nVHJlZTo6Y3VycmVudFNuYXBQb2ludEluZGljZXNEaWRD
aGFuZ2UoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbCwgdW5zaWdu
ZWQgdmVydGljYWwpCi17Ci0gICAgbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmN1cnJlbnRT
bmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKG5vZGVJRCwgaG9yaXpvbnRhbCwgdmVydGljYWwpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JP
TExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvUmVt
b3RlU2Nyb2xsaW5nVHJlZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2Nyb2xsaW5nL1Jl
bW90ZVNjcm9sbGluZ1RyZWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMxOGNj
YzgxNGNhNTcxNmRjNzBjMjRiNmM0NDE3OGQyNTZjZGE3MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxp
bmcvUmVtb3RlU2Nyb2xsaW5nVHJlZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgUmVtb3RlU2Nyb2xsaW5nVHJlZV9oCi0jZGVmaW5lIFJlbW90
ZVNjcm9sbGluZ1RyZWVfaAotCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLQotI2luY2x1
ZGUgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TY3Jv
bGxpbmdDb25zdHJhaW50cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZS5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eTsKLQotY2xhc3MgUmVtb3RlU2Nyb2xsaW5nVHJlZSBmaW5hbCA6IHB1YmxpYyBXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlbW90ZVNjcm9sbGlu
Z1RyZWU+IGNyZWF0ZShSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Jik7Ci0gICAgdmly
dHVhbCB+UmVtb3RlU2Nyb2xsaW5nVHJlZSgpOwotCi0gICAgYm9vbCBpc1JlbW90ZVNjcm9sbGlu
Z1RyZWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgRXZlbnRSZXN1bHQg
dHJ5VG9IYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudCYp
IG92ZXJyaWRlOwotCi0gICAgY29uc3QgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSYg
c2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eTsgfQotCi0gICAgdm9pZCBzY3JvbGxpbmdUcmVlTm9kZURpZFNjcm9sbChX
ZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9s
bFBvc2l0aW9uLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+JiBsYXlv
dXRWaWV3cG9ydE9yaWdpbiwgV2ViQ29yZTo6U2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbiA9
IFdlYkNvcmU6OlNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5bmMpIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVSZXF1ZXN0c1Njcm9sbChXZWJDb3JlOjpTY3JvbGxp
bmdOb2RlSUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBib29s
IHJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGwpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjdXJy
ZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQsIHVu
c2lnbmVkIGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKSBvdmVycmlkZTsKLQotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBSZW1vdGVTY3JvbGxpbmdUcmVlKFJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHkmKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIGhhbmRsZVdoZWVs
RXZlbnRQaGFzZShXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSkgb3ZlcnJpZGU7Ci0j
ZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZml4ZWRQ
b3NpdGlvblJlY3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0
YXJ0UGFuR2VzdHVyZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2Nyb2xsaW5nVHJlZU5vZGVXaWxs
U3RhcnRTY3JvbGwoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlRGlkRW5k
U2Nyb2xsKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIFJlZjxXZWJDb3JlOjpTY3JvbGxpbmdU
cmVlTm9kZT4gY3JlYXRlU2Nyb2xsaW5nVHJlZU5vZGUoV2ViQ29yZTo6U2Nyb2xsaW5nTm9kZVR5
cGUsIFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSYgbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfU0NS
T0xMSU5HX1RSRUUoV2ViS2l0OjpSZW1vdGVTY3JvbGxpbmdUcmVlLCBpc1JlbW90ZVNjcm9sbGlu
Z1RyZWUoKSk7Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotCi0jZW5kaWYg
Ly8gUmVtb3RlU2Nyb2xsaW5nVHJlZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1Mu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
MDc5ZTAwNzdiMDA4NDFkZDVkMDc3YjJlMTM3N2IwNmVhYTE4YzdkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Nj
cm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPU19oCi0jZGVmaW5lIFNjcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGVJT1NfaAotCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYg
UExBVEZPUk0oSU9TKQotCi0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdDb29yZGluYXRvci5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5o
PgotCi1PQkpDX0NMQVNTIENBTGF5ZXI7Ci1PQkpDX0NMQVNTIFdLT3ZlcmZsb3dTY3JvbGxWaWV3
RGVsZWdhdGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TIDogcHVibGljIFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUz4gY3JlYXRlKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWUm
LCBXZWJDb3JlOjpTY3JvbGxpbmdOb2RlSUQpOwotICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbGluZ05vZGVJT1MoKTsKLQotICAgIHZvaWQgb3ZlcmZsb3dTY3JvbGxXaWxs
U3RhcnQoKTsKLSAgICB2b2lkIG92ZXJmbG93U2Nyb2xsRGlkRW5kKCk7Ci0gICAgdm9pZCBvdmVy
Zmxvd1Njcm9sbFZpZXdXaWxsU3RhcnRQYW5HZXN0dXJlKCk7Ci0gICAgdm9pZCBzY3JvbGxWaWV3
RGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBib29sIGluVXNlckludGVyYWN0
aW9uKTsKLSAgICB2b2lkIGN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKHVuc2lnbmVk
IGhvcml6b250YWwsIHVuc2lnbmVkIHZlcnRpY2FsKTsKLQotICAgIENBTGF5ZXIgKnNjcm9sbExh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxMYXllci5nZXQoKTsgfQotCi1wcml2YXRlOgot
ICAgIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZSYsIFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCk7Ci0KLSAgICB2b2lkIGNvbW1pdFN0
YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oY29uc3QgV2ViQ29yZTo6
U2Nyb2xsaW5nU3RhdGVOb2RlJikgb3ZlcnJpZGU7Ci0gICAgCi0gICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRTY3Jv
bGxMYXllclBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGxheW91dFZpZXdwb3J0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRl
TGF5ZXJzQWZ0ZXJWaWV3cG9ydENoYW5nZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGZpeGVk
UG9zaXRpb25SZWN0LCBkb3VibGUgc2NhbGUpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgdXBkYXRl
TGF5ZXJzQWZ0ZXJEZWxlZ2F0ZWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgc2Ny
b2xsUG9zaXRpb24pIG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlckFuY2Vz
dG9yQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBoYW5k
bGVXaGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRl
IHsgfQotCi0gICAgdm9pZCB1cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYpOwotICAgIAotICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3Njcm9sbExh
eWVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3Njcm9sbGVkQ29udGVudHNMYXllcjsKLQot
ICAgIFJldGFpblB0cjxXS092ZXJmbG93U2Nyb2xsVmlld0RlbGVnYXRlPiBtX3Njcm9sbFZpZXdE
ZWxlZ2F0ZTsKLSAgICBib29sIG1fdXBkYXRpbmdGcm9tU3RhdGVOb2RlOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQ
TEFURk9STShJT1MpCi0KLSNlbmRpZiAvLyBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlSU9TX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Njcm9sbGluZy9p
b3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPUy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMxY2NlNGYyMWJhODhm
ZGEwYzA2MjY1ZGUzYTU1MGYwZjlhNTNhNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Nj
cm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0KKysrIC9kZXYvbnVsbApAQCAt
MSwzMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oIgotCi0jaWYgUExBVEZPUk0o
SU9TKQotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0KLSNpbXBvcnQgPFF1YXJ0ekNvcmUv
UXVhcnR6Q29yZS5oPgotI2ltcG9ydCA8VUlLaXQvVUlQYW5HZXN0dXJlUmVjb2duaXplci5oPgot
I2ltcG9ydCA8VUlLaXQvVUlTY3JvbGxWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGlu
Z1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGlu
Z1RyZWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZS5oPgotI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9T
ZXRGb3JTY29wZS5oPgotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSNpbXBvcnQgPFdl
YkNvcmUvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFNu
YXBPZmZzZXRzSW5mby5oPgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1A
aW50ZXJmYWNlIFdLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgOiBOU09iamVjdCA8VUlTY3Jv
bGxWaWV3RGVsZWdhdGU+IHsKLSAgICBXZWJLaXQ6OlNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1MqIF9zY3JvbGxpbmdUcmVlTm9kZTsKLX0KLQotQHByb3BlcnR5IChub25hdG9t
aWMsIGdldHRlcj1faXNJblVzZXJJbnRlcmFjdGlvbikgQk9PTCBpblVzZXJJbnRlcmFjdGlvbjsK
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU2Nyb2xsaW5nVHJlZU5vZGU6KFdlYktpdDo6U2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUyopbm9kZTsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gV0tPdmVyZmxvd1Njcm9sbFZpZXdEZWxlZ2F0ZQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhTY3JvbGxpbmdUcmVlTm9kZTooV2ViS2l0OjpTY3JvbGxpbmdUcmVlT3ZlcmZs
b3dTY3JvbGxpbmdOb2RlSU9TKilub2RlCi17Ci0gICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRd
KSkKLSAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlID0gbm9kZTsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKXNjcm9sbFZpZXdEaWRTY3JvbGw6KFVJU2Nyb2xsVmlldyAqKXNjcm9s
bFZpZXcKLXsKLSAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Ny
b2xsVmlldy5jb250ZW50T2Zmc2V0LCBfaW5Vc2VySW50ZXJhY3Rpb24pOwotfQotCi0tICh2b2lk
KXNjcm9sbFZpZXdXaWxsQmVnaW5EcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldwot
ewotICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IFlFUzsKLQotICAgIGlmIChzY3JvbGxWaWV3LnBh
bkdlc3R1cmVSZWNvZ25pemVyLnN0YXRlID09IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2Fu
KQotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPm92ZXJmbG93U2Nyb2xsVmlld1dpbGxTdGFy
dFBhbkdlc3R1cmUoKTsKLSAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPm92ZXJmbG93U2Nyb2xsV2ls
bFN0YXJ0KCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotLSAodm9pZClzY3Jv
bGxWaWV3V2lsbEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpdGhWZWxv
Y2l0eTooQ0dQb2ludCl2ZWxvY2l0eSB0YXJnZXRDb250ZW50T2Zmc2V0Oihpbm91dCBDR1BvaW50
ICopdGFyZ2V0Q29udGVudE9mZnNldAotewotICAgIENHRmxvYXQgaG9yaXpvbnRhbFRhcmdldCA9
IHRhcmdldENvbnRlbnRPZmZzZXQtPng7Ci0gICAgQ0dGbG9hdCB2ZXJ0aWNhbFRhcmdldCA9IHRh
cmdldENvbnRlbnRPZmZzZXQtPnk7Ci0KLSAgICB1bnNpZ25lZCBvcmlnaW5hbEhvcml6b250YWxT
bmFwUG9zaXRpb24gPSBfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRIb3Jpem9udGFsU25hcFBv
aW50SW5kZXgoKTsKLSAgICB1bnNpZ25lZCBvcmlnaW5hbFZlcnRpY2FsU25hcFBvc2l0aW9uID0g
X3Njcm9sbGluZ1RyZWVOb2RlLT5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpOwotCi0g
ICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpLmlzRW1w
dHkoKSkgewotICAgICAgICB1bnNpZ25lZCBpbmRleDsKLSAgICAgICAgZmxvYXQgcG90ZW50aWFs
U25hcFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXQoX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jp
em9udGFsU25hcE9mZnNldHMoKSwgX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9udGFsU25hcE9m
ZnNldFJhbmdlcygpLCBob3Jpem9udGFsVGFyZ2V0LCB2ZWxvY2l0eS54LCBpbmRleCk7Ci0gICAg
ICAgIF9zY3JvbGxpbmdUcmVlTm9kZS0+c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRl
eChpbmRleCk7Ci0gICAgICAgIGlmIChob3Jpem9udGFsVGFyZ2V0ID49IDAgJiYgaG9yaXpvbnRh
bFRhcmdldCA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLndpZHRoKQotICAgICAgICAgICAgdGFy
Z2V0Q29udGVudE9mZnNldC0+eCA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKLSAgICB9Ci0KLSAg
ICBpZiAoIV9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zmc2V0cygpLmlzRW1wdHko
KSkgewotICAgICAgICB1bnNpZ25lZCBpbmRleDsKLSAgICAgICAgZmxvYXQgcG90ZW50aWFsU25h
cFBvc2l0aW9uID0gY2xvc2VzdFNuYXBPZmZzZXQoX3Njcm9sbGluZ1RyZWVOb2RlLT52ZXJ0aWNh
bFNuYXBPZmZzZXRzKCksIF9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zmc2V0UmFu
Z2VzKCksIHZlcnRpY2FsVGFyZ2V0LCB2ZWxvY2l0eS55LCBpbmRleCk7Ci0gICAgICAgIF9zY3Jv
bGxpbmdUcmVlTm9kZS0+c2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoaW5kZXgpOwot
ICAgICAgICBpZiAodmVydGljYWxUYXJnZXQgPj0gMCAmJiB2ZXJ0aWNhbFRhcmdldCA8PSBzY3Jv
bGxWaWV3LmNvbnRlbnRTaXplLmhlaWdodCkKLSAgICAgICAgICAgIHRhcmdldENvbnRlbnRPZmZz
ZXQtPnkgPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKG9yaWdpbmFs
SG9yaXpvbnRhbFNuYXBQb3NpdGlvbiAhPSBfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRIb3Jp
em9udGFsU25hcFBvaW50SW5kZXgoKQotICAgICAgICB8fCBvcmlnaW5hbFZlcnRpY2FsU25hcFBv
c2l0aW9uICE9IF9zY3JvbGxpbmdUcmVlTm9kZS0+Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5k
ZXgoKSkgewotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRTbmFwUG9pbnRJbmRp
Y2VzRGlkQ2hhbmdlKF9zY3JvbGxpbmdUcmVlTm9kZS0+Y3VycmVudEhvcml6b250YWxTbmFwUG9p
bnRJbmRleCgpLCBfc2Nyb2xsaW5nVHJlZU5vZGUtPmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludElu
ZGV4KCkpOwotICAgIH0KLX0KLSNlbmRpZgotCi0tICh2b2lkKXNjcm9sbFZpZXdEaWRFbmREcmFn
Z2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aWxsRGVjZWxlcmF0ZTooQk9PTCl3aWxs
RGVjZWxlcmF0ZQotewotICAgIGlmIChfaW5Vc2VySW50ZXJhY3Rpb24gJiYgIXdpbGxEZWNlbGVy
YXRlKSB7Ci0gICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POwotICAgICAgICBfc2Nyb2xs
aW5nVHJlZU5vZGUtPnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0
LCBfaW5Vc2VySW50ZXJhY3Rpb24pOwotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGUtPm92ZXJm
bG93U2Nyb2xsRGlkRW5kKCk7Ci0gICAgfQotfQotCi0tICh2b2lkKXNjcm9sbFZpZXdEaWRFbmRE
ZWNlbGVyYXRpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBpZiAoX2luVXNl
ckludGVyYWN0aW9uKSB7Ci0gICAgICAgIF9pblVzZXJJbnRlcmFjdGlvbiA9IE5POwotICAgICAg
ICBfc2Nyb2xsaW5nVHJlZU5vZGUtPnNjcm9sbFZpZXdEaWRTY3JvbGwoc2Nyb2xsVmlldy5jb250
ZW50T2Zmc2V0LCBfaW5Vc2VySW50ZXJhY3Rpb24pOwotICAgICAgICBfc2Nyb2xsaW5nVHJlZU5v
ZGUtPm92ZXJmbG93U2Nyb2xsRGlkRW5kKCk7Ci0gICAgfQotfQotCi1AZW5kCi0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1SZWY8U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUz4g
U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y3JlYXRlKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWUmIHNjcm9sbGluZ1RyZWUsIFdlYkNvcmU6OlNjcm9sbGluZ05vZGVJRCBub2Rl
SUQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZUlPUyhzY3JvbGxpbmdUcmVlLCBub2RlSUQpKTsKLX0KLQotU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPUyhXZWJDb3JlOjpTY3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBXZWJDb3JlOjpT
Y3JvbGxpbmdOb2RlSUQgbm9kZUlEKQotICAgIDogU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZShzY3JvbGxpbmdUcmVlLCBub2RlSUQpCi0gICAgLCBtX3VwZGF0aW5nRnJvbVN0YXRl
Tm9kZShmYWxzZSkKLXsKLX0KLQotU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
Uzo6flNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MoKQotewotICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIGlmIChVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcg
PSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdKSB7Ci0gICAgICAgIEFT
U0VSVChbc2Nyb2xsVmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKLSAg
ICAgICAgLy8gVGhlIHNjcm9sbFZpZXcgbWF5IGhhdmUgYmVlbiBhZG9wdGVkIGJ5IGFub3RoZXIg
bm9kZSwgc28gb25seSBjbGVhciB0aGUgZGVsZWdhdGUgaWYgaXQncyBvdXJzLgotICAgICAgICBp
ZiAoc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9PSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQoKSkKLSAg
ICAgICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBuaWw7Ci0gICAgfQotICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFdlYkNvcmU6OlNjcm9s
bGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQotewotICAgIGlmIChzdGF0ZU5vZGUuaGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsTGF5ZXIpKSB7Ci0g
ICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICBpZiAoVUlTY3JvbGxW
aWV3ICpzY3JvbGxWaWV3ID0gKFVJU2Nyb2xsVmlldyAqKVtzY3JvbGxMYXllcigpIGRlbGVnYXRl
XSkgewotICAgICAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1VJU2Ny
b2xsVmlldyBzZWxmXV0pOwotICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWxlZ2F0ZSA9IG5pbDsK
LSAgICAgICAgfQotICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgfQotCi0g
ICAgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVD
aGlsZHJlbihzdGF0ZU5vZGUpOwotCi0gICAgY29uc3QgYXV0byYgc2Nyb2xsaW5nU3RhdGVOb2Rl
ID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KHN0YXRlTm9k
ZSk7Ci0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xs
aW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpCi0gICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBzY3Jv
bGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsKLQotICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsZWRDb250
ZW50c0xheWVyKSkKLSAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgPSBzY3JvbGxpbmdT
dGF0ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0
IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQotewotICAgIFNjcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGU6OmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihzdGF0ZU5vZGUpOwot
Ci0gICAgU2V0Rm9yU2NvcGU8Ym9vbD4gdXBkYXRpbmdDaGFuZ2UobV91cGRhdGluZ0Zyb21TdGF0
ZU5vZGUsIHRydWUpOwotCi0gICAgY29uc3QgYXV0byYgc2Nyb2xsaW5nU3RhdGVOb2RlID0gZG93
bmNhc3Q8U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KHN0YXRlTm9kZSk7Ci0K
LSAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbExheWVyKQotICAgICAgICB8fCBzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VG90
YWxDb250ZW50c1NpemUpCi0gICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1Np
emUpCi0gICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgfHwgc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OlNjcm9sbE9yaWdpbikpIHsKLSAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCi0gICAgICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilb
c2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV07Ci0gICAgICAgIEFTU0VSVChbc2Nyb2xsVmlldyBpc0tp
bmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKLQotICAgICAgICBpZiAoc2Nyb2xsaW5n
U3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlNjcm9sbExheWVyKSkgewotICAgICAgICAgICAgaWYgKCFtX3Njcm9sbFZpZXdEZWxlZ2F0ZSkK
LSAgICAgICAgICAgICAgICBtX3Njcm9sbFZpZXdEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS092ZXJm
bG93U2Nyb2xsVmlld0RlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbGluZ1RyZWVOb2RlOnRo
aXNdKTsKLQotICAgICAgICAgICAgc2Nyb2xsVmlldy5zY3JvbGxzVG9Ub3AgPSBOTzsKLSAgICAg
ICAgICAgIHNjcm9sbFZpZXcuZGVsZWdhdGUgPSBtX3Njcm9sbFZpZXdEZWxlZ2F0ZS5nZXQoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgcmVjb21wdXRlSW5zZXRzID0gc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRv
dGFsQ29udGVudHNTaXplKTsKLSAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50
c1NpemUpKSB7Ci0gICAgICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRTaXplID0gc2Nyb2xsaW5n
U3RhdGVOb2RlLnJlYWNoYWJsZUNvbnRlbnRzU2l6ZSgpOwotICAgICAgICAgICAgcmVjb21wdXRl
SW5zZXRzID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoc2Nyb2xsaW5nU3RhdGVO
b2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9s
bFBvc2l0aW9uKQotICAgICAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikpCi0gICAg
ICAgICAgICAmJiAhW21fc2Nyb2xsVmlld0RlbGVnYXRlIF9pc0luVXNlckludGVyYWN0aW9uXSkg
ewotICAgICAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0ID0gc2Nyb2xsaW5nU3RhdGVO
b2RlLnNjcm9sbFBvc2l0aW9uKCkgKyBzY3JvbGxPcmlnaW4oKTsKLSAgICAgICAgICAgIHJlY29t
cHV0ZUluc2V0cyA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVjb21wdXRlSW5z
ZXRzKSB7Ci0gICAgICAgICAgICBVSUVkZ2VJbnNldHMgaW5zZXRzID0gVUlFZGdlSW5zZXRzTWFr
ZSgwLCAwLCAwLCAwKTsKLSAgICAgICAgICAgIC8vIFdpdGggUlRMIG9yIGJvdHRvbS10by10b3Ag
c2Nyb2xsaW5nIChub24temVybyBvcmlnaW4pLCB3ZSBuZWVkIGV4dHJhIHNwYWNlIG9uIHRoZSBs
ZWZ0IG9yIHRvcC4KLSAgICAgICAgICAgIGlmIChzY3JvbGxPcmlnaW4oKS54KCkpCi0gICAgICAg
ICAgICAgICAgaW5zZXRzLmxlZnQgPSByZWFjaGFibGVDb250ZW50c1NpemUoKS53aWR0aCgpIC0g
dG90YWxDb250ZW50c1NpemUoKS53aWR0aCgpOwotCi0gICAgICAgICAgICBpZiAoc2Nyb2xsT3Jp
Z2luKCkueSgpKQotICAgICAgICAgICAgICAgIGluc2V0cy50b3AgPSByZWFjaGFibGVDb250ZW50
c1NpemUoKS5oZWlnaHQoKSAtIHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCk7Ci0KLSAgICAg
ICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gaW5zZXRzOwotICAgICAgICB9Ci0KLSNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgICAgICAvLyBGSVhNRTogSWYgb25seSBvbmUg
YXhpcyBzbmFwcyBpbiAyRCBzY3JvbGxpbmcsIHRoZSBvdGhlciBheGlzIHdpbGwgZGVjZWxlcmF0
ZSBmYXN0IGFzIHdlbGwuIElzIHRoaXMgd2hhdCB3ZSB3YW50PwotICAgICAgICBpZiAoc2Nyb2xs
aW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0cykgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5n
ZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNl
dHMpKQotICAgICAgICAgICAgc2Nyb2xsVmlldy5kZWNlbGVyYXRpb25SYXRlID0gaG9yaXpvbnRh
bFNuYXBPZmZzZXRzKCkuc2l6ZSgpIHx8IHZlcnRpY2FsU25hcE9mZnNldHMoKS5zaXplKCkgPyBV
SVNjcm9sbFZpZXdEZWNlbGVyYXRpb25SYXRlRmFzdCA6IFVJU2Nyb2xsVmlld0RlY2VsZXJhdGlv
blJhdGVOb3JtYWw7Ci0jZW5kaWYKLSAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwot
ICAgIH0KLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjp1
cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBj
aGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgRmxv
YXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCi17Ci0gICAgaWYgKCFtX2NoaWxkcmVuKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBsYXN0Q29tbWl0dGVkU2Ny
b2xsUG9zaXRpb24oKSAtIHNjcm9sbFBvc2l0aW9uKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNoaWxk
IDogKm1fY2hpbGRyZW4pCi0gICAgICAgIGNoaWxkLT51cGRhdGVMYXllcnNBZnRlckFuY2VzdG9y
Q2hhbmdlKGNoYW5nZWROb2RlLCBmaXhlZFBvc2l0aW9uUmVjdCwgY3VtdWxhdGl2ZURlbHRhICsg
c2Nyb2xsRGVsdGEpOwotfQotCi1GbG9hdFBvaW50IFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1M6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKLSAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxW
aWV3ICopW3Njcm9sbExheWVyKCkgZGVsZWdhdGVdOwotICAgIEFTU0VSVChbc2Nyb2xsVmlldyBp
c0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgc2VsZl1dKTsKLSAgICByZXR1cm4gW3Njcm9sbFZp
ZXcgY29udGVudE9mZnNldF07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotfQotCi12
b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnNldFNjcm9sbExheWVy
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYpCi17Ci0gICAgW21fc2Nyb2xsTGF5ZXIgc2V0UG9zaXRpb246Q0dQb2ludE1ha2UoLXNjcm9s
bFBvc2l0aW9uLngoKSArIHNjcm9sbE9yaWdpbigpLngoKSwgLXNjcm9sbFBvc2l0aW9uLnkoKSAr
IHNjcm9sbE9yaWdpbigpLnkoKSldOwotCi0gICAgdXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xs
KHNjcm9sbFBvc2l0aW9uKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TOjp1cGRhdGVMYXllcnNBZnRlckRlbGVnYXRlZFNjcm9sbChjb25zdCBGbG9hdFBv
aW50JiBzY3JvbGxQb3NpdGlvbikKLXsKLSAgICB1cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwo
c2Nyb2xsUG9zaXRpb24pOwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1M6OnVwZGF0ZUNoaWxkTm9kZXNBZnRlclNjcm9sbChjb25zdCBGbG9hdFBvaW50JiBz
Y3JvbGxQb3NpdGlvbikKLXsKLSAgICBpZiAoIW1fY2hpbGRyZW4pCi0gICAgICAgIHJldHVybjsK
LQotICAgIEZsb2F0UmVjdCBmaXhlZFBvc2l0aW9uUmVjdDsKLSAgICBTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlKiBmcmFtZU5vZGUgPSBlbmNsb3NpbmdGcmFtZU5vZGUoKTsKLSAgICBp
ZiAoZnJhbWVOb2RlICYmIGZyYW1lTm9kZS0+cGFyZW50KCkpCi0gICAgICAgIGZpeGVkUG9zaXRp
b25SZWN0ID0gZnJhbWVOb2RlLT5maXhlZFBvc2l0aW9uUmVjdCgpOwotICAgIGVsc2UKLSAgICAg
ICAgZml4ZWRQb3NpdGlvblJlY3QgPSBzY3JvbGxpbmdUcmVlKCkuZml4ZWRQb3NpdGlvblJlY3Qo
KTsKLSAgICBGbG9hdFNpemUgc2Nyb2xsRGVsdGEgPSBsYXN0Q29tbWl0dGVkU2Nyb2xsUG9zaXRp
b24oKSAtIHNjcm9sbFBvc2l0aW9uOwotCi0gICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxk
cmVuKQotICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZSgqdGhp
cywgZml4ZWRQb3NpdGlvblJlY3QsIHNjcm9sbERlbHRhKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpvdmVyZmxvd1Njcm9sbFdpbGxTdGFydCgpCi17
Ci0gICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0YXJ0U2Nyb2xsKCk7
Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUzo6b3ZlcmZs
b3dTY3JvbGxEaWRFbmQoKQotewotICAgIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxpbmdUcmVlTm9k
ZURpZEVuZFNjcm9sbCgpOwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1M6Om92ZXJmbG93U2Nyb2xsVmlld1dpbGxTdGFydFBhbkdlc3R1cmUoKQotewotICAg
IHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxpbmdUcmVlTm9kZVdpbGxTdGFydFBhbkdlc3R1cmUoKTsK
LX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TOjpzY3JvbGxW
aWV3RGlkU2Nyb2xsKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBib29sIGluVXNl
ckludGVyYWN0aW9uKQotewotICAgIGlmIChtX3VwZGF0aW5nRnJvbVN0YXRlTm9kZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbFBvc2l0aW9uQ2hhbmdlZFZp
YURlbGVnYXRlZFNjcm9sbGluZyhzY3JvbGxpbmdOb2RlSUQoKSwgc2Nyb2xsUG9zaXRpb24sIGlu
VXNlckludGVyYWN0aW9uKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TOjpjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZSh1bnNpZ25lZCBob3Jp
em9udGFsLCB1bnNpZ25lZCB2ZXJ0aWNhbCkKLXsKLSAgICBpZiAobV91cGRhdGluZ0Zyb21TdGF0
ZU5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBzY3JvbGxpbmdUcmVlKCkuY3VycmVu
dFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2Uoc2Nyb2xsaW5nTm9kZUlEKCksIGhvcml6b250YWws
IHZlcnRpY2FsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUmVtb3RlTGF5ZXJUcmVlSG9zdElPUy5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9SZW1vdGVMYXllclRyZWVIb3N0SU9TLm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTVjYzMwMjAzMjU3NzkyODE3OGQwNGRlYzI0
ZjI0MTQ5NWUxMDhjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9SZW1vdGVMYXllclRyZWVIb3N0SU9TLm1t
CisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLQotI2lmIFBMQVRGT1JNKElPUykKLQotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVl
SG9zdC5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDxVSUtp
dC9VSVNjcm9sbFZpZXcuaD4KLSNpbXBvcnQgPFVJS2l0U1BJLmg+Ci0jaW1wb3J0IDxXZWJLaXRT
eXN0ZW1JbnRlcmZhY2UuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLUBpbnRlcmZh
Y2UgQ0FMYXllcihXS0xheWVySW50ZXJuYWwpCi0tICh2b2lkKXNldENvbnRleHRJZDoodWludDMy
X3QpY29udGV4dElEOwotQGVuZAotCi1AaW50ZXJmYWNlIENBQmFja2Ryb3BMYXllciA6IENBTGF5
ZXIKLUBlbmQKLQotQGludGVyZmFjZSBVSVZpZXcgKFdLSGl0VGVzdGluZykKLS0gKFVJVmlldyAq
KV9maW5kRGVzY2VuZGFudFZpZXdBdFBvaW50OihDR1BvaW50KXBvaW50IHdpdGhFdmVudDooVUlF
dmVudCAqKWV2ZW50OwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVUlWaWV3IChXS0hpdFRlc3Rp
bmcpCi0KLS8vIFVJVmlldyBoaXQgdGVzdGluZyBhc3N1bWVzIHRoYXQgdmlld3Mgc2hvdWxkIG9u
bHkgaGl0IHRlc3Qgc3Vidmlld3MgdGhhdCBhcmUgZW50aXJlbHkgY29udGFpbmVkCi0vLyBpbiB0
aGUgdmlldy4gVGhpcyBpcyBub3QgdHJ1ZSBvZiB3ZWIgY29udGVudC4KLS8vIFdlIG9ubHkgd2Fu
dCB0byBmaW5kIFVJU2Nyb2xsVmlld3MgaGVyZS4gT3RoZXIgdmlld3MgYXJlIGlnbm9yZWQuCi0t
IChVSVZpZXcgKilfcmVjdXJzaXZlRmluZERlc2NlbmRhbnRTY3JvbGxWaWV3QXRQb2ludDooQ0dQ
b2ludClwb2ludCB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAotewotICAgIGlmIChzZWxmLmNs
aXBzVG9Cb3VuZHMgJiYgIVtzZWxmIHBvaW50SW5zaWRlOnBvaW50IHdpdGhFdmVudDpldmVudF0p
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfX2Jsb2NrIFVJVmlldyAqZm91bmRWaWV3ID0g
bmlsOwotICAgIFtbc2VsZiBzdWJ2aWV3c10gZW51bWVyYXRlT2JqZWN0c1VzaW5nQmxvY2s6XihV
SVZpZXcgKnZpZXcsIE5TVUludGVnZXIgaWR4LCBCT09MICpzdG9wKSB7Ci0gICAgICAgIENHUG9p
bnQgc3Vidmlld1BvaW50ID0gW3ZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3OnNlbGZd
OwotCi0gICAgICAgIGlmIChbdmlldyBwb2ludEluc2lkZTpzdWJ2aWV3UG9pbnQgd2l0aEV2ZW50
OmV2ZW50XSAmJiBbdmlldyBpc0tpbmRPZkNsYXNzOltVSVNjcm9sbFZpZXcgY2xhc3NdXSAmJiB2
aWV3LmlzVXNlckludGVyYWN0aW9uRW5hYmxlZCkKLSAgICAgICAgICAgIGZvdW5kVmlldyA9IHZp
ZXc7Ci0KLSAgICAgICAgaWYgKCFbdmlldyBzdWJ2aWV3c10pCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgaWYgKFVJVmlldyAqaGl0VmlldyA9IFt2aWV3IF9yZWN1cnNpdmVGaW5kRGVz
Y2VuZGFudFNjcm9sbFZpZXdBdFBvaW50OnN1YnZpZXdQb2ludCB3aXRoRXZlbnQ6ZXZlbnRdKQot
ICAgICAgICAgICAgZm91bmRWaWV3ID0gaGl0VmlldzsKLSAgICB9XTsKLQotICAgIHJldHVybiBm
b3VuZFZpZXc7Ci19Ci0KLS0gKFVJVmlldyAqKV9maW5kRGVzY2VuZGFudFZpZXdBdFBvaW50OihD
R1BvaW50KXBvaW50IHdpdGhFdmVudDooVUlFdmVudCAqKWV2ZW50Ci17Ci0gICAgcmV0dXJuIFtz
ZWxmIF9yZWN1cnNpdmVGaW5kRGVzY2VuZGFudFNjcm9sbFZpZXdBdFBvaW50OnBvaW50IHdpdGhF
dmVudDpldmVudF07Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXS0NvbXBvc2l0aW5nVmlldyA6
IFVJVmlldwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tDb21wb3NpdGluZ1ZpZXcKLQotLSAo
VUlWaWV3ICopaGl0VGVzdDooQ0dQb2ludClwb2ludCB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVu
dAotewotICAgIHJldHVybiBbc2VsZiBfZmluZERlc2NlbmRhbnRWaWV3QXRQb2ludDpwb2ludCB3
aXRoRXZlbnQ6ZXZlbnRdOwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCi17Ci0gICAg
TlNTdHJpbmcgKnZpZXdEZXNjcmlwdGlvbiA9IFtzdXBlciBkZXNjcmlwdGlvbl07Ci0gICAgTlNT
dHJpbmcgKndlYktpdERldGFpbHMgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiBsYXll
cklEID0gJWxsdSBcIiVAXCIiLCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZUhvc3Q6OmxheWVySUQo
c2VsZi5sYXllciksIHNlbGYubGF5ZXIubmFtZSA/IHNlbGYubGF5ZXIubmFtZSA6IEAiIl07Ci0g
ICAgcmV0dXJuIFt2aWV3RGVzY3JpcHRpb24gc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6d2ViS2l0
RGV0YWlsc107Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXS1RyYW5zZm9ybVZpZXcgOiBXS0Nv
bXBvc2l0aW5nVmlldwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tUcmFuc2Zvcm1WaWV3Ci0K
LSsgKENsYXNzKWxheWVyQ2xhc3MKLXsKLSAgICByZXR1cm4gW0NBVHJhbnNmb3JtTGF5ZXIgc2Vs
Zl07Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXS1NpbXBsZUJhY2tkcm9wVmlldyA6IFdLQ29t
cG9zaXRpbmdWaWV3Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS1NpbXBsZUJhY2tkcm9wVmll
dwotCi0rIChDbGFzcylsYXllckNsYXNzCi17Ci0gICAgcmV0dXJuIFtDQUJhY2tkcm9wTGF5ZXIg
c2VsZl07Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXS1NoYXBlVmlldyA6IFdLQ29tcG9zaXRp
bmdWaWV3Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS1NoYXBlVmlldwotCi0rIChDbGFzcyls
YXllckNsYXNzCi17Ci0gICAgcmV0dXJuIFtDQVNoYXBlTGF5ZXIgc2VsZl07Ci19Ci0KLUBlbmQK
LQotQGludGVyZmFjZSBXS1JlbW90ZVZpZXcgOiBXS0NvbXBvc2l0aW5nVmlldwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gV0tSZW1vdGVWaWV3Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZy
YW1lOihDR1JlY3QpZnJhbWUgY29udGV4dElEOih1aW50MzJfdCljb250ZXh0SUQKLXsKLSAgICBp
ZiAoKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQotICAgICAgICBbW3NlbGYg
bGF5ZXJdIHNldENvbnRleHRJZDpjb250ZXh0SURdOwotICAgIAotICAgIHJldHVybiBzZWxmOwot
fQotCi0rIChDbGFzcylsYXllckNsYXNzCi17Ci0gICAgcmV0dXJuIE5TQ2xhc3NGcm9tU3RyaW5n
KEAiQ0FMYXllckhvc3QiKTsKLX0KLQotQGVuZAotCi1AaW50ZXJmYWNlIFdLQmFja2Ryb3BWaWV3
IDogX1VJQmFja2Ryb3BWaWV3Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0JhY2tkcm9wVmll
dwotCi0tIChVSVZpZXcgKiloaXRUZXN0OihDR1BvaW50KXBvaW50IHdpdGhFdmVudDooVUlFdmVu
dCAqKWV2ZW50Ci17Ci0gICAgcmV0dXJuIFtzZWxmIF9maW5kRGVzY2VuZGFudFZpZXdBdFBvaW50
OnBvaW50IHdpdGhFdmVudDpldmVudF07Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24K
LXsKLSAgICBOU1N0cmluZyAqdmlld0Rlc2NyaXB0aW9uID0gW3N1cGVyIGRlc2NyaXB0aW9uXTsK
LSAgICBOU1N0cmluZyAqd2ViS2l0RGV0YWlscyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiIGxheWVySUQgPSAlbGx1IFwiJUBcIiIsIFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlSG9zdDo6
bGF5ZXJJRChzZWxmLmxheWVyKSwgc2VsZi5sYXllci5uYW1lID8gc2VsZi5sYXllci5uYW1lIDog
QCIiXTsKLSAgICByZXR1cm4gW3ZpZXdEZXNjcmlwdGlvbiBzdHJpbmdCeUFwcGVuZGluZ1N0cmlu
Zzp3ZWJLaXREZXRhaWxzXTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotTGF5
ZXJPclZpZXcgKlJlbW90ZUxheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyKGNvbnN0IFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllckNyZWF0aW9uUHJvcGVydGllcyYgcHJvcGVydGllcywg
Y29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyogbGF5ZXJQ
cm9wZXJ0aWVzKQotewotICAgIFJldGFpblB0cjxMYXllck9yVmlldz4mIHZpZXcgPSBtX2xheWVy
cy5hZGQocHJvcGVydGllcy5sYXllcklELCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0KLSAg
ICBBU1NFUlQoIXZpZXcpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0aWVzLnR5cGUpIHsKLSAgICBj
YXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXI6Ci0gICAgY2FzZSBQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZVdlYkxheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVSb290TGF5ZXI6Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVNpbXBs
ZUxheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdM
YXllcjoKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlUGFnZVRpbGVkQmFja2lu
Z0xheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdU
aWxlTGF5ZXI6Ci0gICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tDb21wb3NpdGluZ1ZpZXcgYWxs
b2NdIGluaXRdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6Okxh
eWVyVHlwZUJhY2tkcm9wTGF5ZXI6Ci0gICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tTaW1wbGVC
YWNrZHJvcFZpZXcgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0
Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxpZ2h0U3lzdGVtQmFja2Ryb3BMYXllcjoKLSAgICAgICAg
dmlldyA9IGFkb3B0TlMoW1tXS0JhY2tkcm9wVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RaZXJvIHByaXZhdGVTdHlsZTpfVUlCYWNrZHJvcFZpZXdTdHlsZV9MaWdodF0pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlRGFya1N5c3RlbUJh
Y2tkcm9wTGF5ZXI6Ci0gICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tCYWNrZHJvcFZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVybyBwcml2YXRlU3R5bGU6X1VJQmFja2Ryb3BWaWV3
U3R5bGVfRGFya10pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6
TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXI6Ci0gICAgICAgIHZpZXcgPSBhZG9wdE5TKFtbV0tUcmFu
c2Zvcm1WaWV3IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZv
cm1DQUxheWVyOjpMYXllclR5cGVDdXN0b206Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6Okxh
eWVyVHlwZUFWUGxheWVyTGF5ZXI6Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZUNvbnRlbnRzUHJvdmlkZWRMYXllcjoKLSAgICAgICAgaWYgKCFtX2lzRGVidWdMYXllclRyZWVI
b3N0KSB7Ci0gICAgICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLUmVtb3RlVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RaZXJvIGNvbnRleHRJRDpwcm9wZXJ0aWVzLmhvc3RpbmdDb250
ZXh0SURdKTsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnR5cGUgPT0gUGxhdGZvcm1DQUxh
eWVyOjpMYXllclR5cGVBVlBsYXllckxheWVyKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW52ZXJ0
IHRoZSBzY2FsZSB0cmFuc2Zvcm0gYWRkZWQgaW4gdGhlIFdlYlByb2Nlc3MgdG8gZml4IDxyZGFy
Oi8vcHJvYmxlbS8xODMxNjU0Mj4uCi0gICAgICAgICAgICAgICAgZmxvYXQgaW52ZXJzZVNjYWxl
ID0gMSAvIHByb3BlcnRpZXMuaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yOwotICAgICAgICAgICAg
ICAgIFtbdmlldyBsYXllcl0gc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUoaW52
ZXJzZVNjYWxlLCBpbnZlcnNlU2NhbGUsIDEpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLQ29tcG9zaXRpbmdWaWV3IGFsbG9j
XSBpbml0XSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVTaGFwZUxheWVyOgotICAgICAgICB2aWV3ID0gYWRvcHROUyhbW1dLU2hhcGVWaWV3IGFs
bG9jXSBpbml0XSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpM
YXllclR5cGVTY3JvbGxpbmdMYXllcjoKLSAgICAgICAgaWYgKCFtX2lzRGVidWdMYXllclRyZWVI
b3N0KSB7Ci0gICAgICAgICAgICBhdXRvIHNjcm9sbFZpZXcgPSBhZG9wdE5TKFtbVUlTY3JvbGxW
aWV3IGFsbG9jXSBpbml0XSk7Ci0jaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTEwMDAwCi0gICAgICAgICAgICBbc2Nyb2xsVmlldyBzZXRDb250ZW50SW5zZXRBZGp1c3Rt
ZW50QmVoYXZpb3I6VUlTY3JvbGxWaWV3Q29udGVudEluc2V0QWRqdXN0bWVudE5ldmVyXTsKLSNl
bmRpZgotICAgICAgICAgICAgdmlldyA9IHNjcm9sbFZpZXc7Ci0gICAgICAgIH0gZWxzZSAvLyBU
aGUgZGVidWcgaW5kaWNhdG9yIHBhcmVudHMgdmlld3MgdW5kZXIgbGF5ZXJzLCB3aGljaCBjYW4g
Y2F1c2UgY3Jhc2hlcyB3aXRoIFVJU2Nyb2xsVmlldy4KLSAgICAgICAgICAgIHZpZXcgPSBhZG9w
dE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHNldExheWVySUQo
W3ZpZXcgbGF5ZXJdLCBwcm9wZXJ0aWVzLmxheWVySUQpOwotCi0gICAgcmV0dXJuIHZpZXcuZ2V0
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9T
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1JlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMjhkMzk1OTM0NTRlMTg1ZmI2NmZlNWRmN2RhYjhiM2EyODYyMDRlYy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQorKysgL2Rl
di9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCIKLQotI2lm
IFBMQVRGT1JNKElPUykKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotCi0jaW1wb3J0ICJM
YXllclJlcHJlc2VudGF0aW9uLmgiCi0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVIb3N0LmgiCi0j
aW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgotI2ltcG9y
dCA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZVRyZWUuaD4KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCi0jaW1wb3J0IDxXZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgotI2ltcG9ydCA8
V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xs
VHlwZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZS5oPgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotc3RhdGljIExheWVyUmVwcmVzZW50YXRpb24gbGF5ZXJSZXByZXNlbnRhdGlvbkZy
b21MYXllck9yVmlldyhMYXllck9yVmlldyAqbGF5ZXJPclZpZXcpCi17Ci0gICAgcmV0dXJuIExh
eWVyUmVwcmVzZW50YXRpb24obGF5ZXJPclZpZXcubGF5ZXIpOwotfQotCi12b2lkIFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNvbm5lY3RTdGF0ZU5vZGVMYXllcnMoU2Nyb2xsaW5n
U3RhdGVUcmVlJiBzdGF0ZVRyZWUsIGNvbnN0IFJlbW90ZUxheWVyVHJlZUhvc3QmIGxheWVyVHJl
ZUhvc3QpCi17Ci0gICAgZm9yIChhdXRvJiBjdXJyTm9kZSA6IHN0YXRlVHJlZS5ub2RlTWFwKCku
dmFsdWVzKCkpIHsKLSAgICAgICAgc3dpdGNoIChjdXJyTm9kZS0+bm9kZVR5cGUoKSkgewotICAg
ICAgICBjYXNlIE92ZXJmbG93U2Nyb2xsaW5nTm9kZTogewotICAgICAgICAgICAgU2Nyb2xsaW5n
U3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUmIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0
PFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPigqY3Vyck5vZGUpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkKLSAgICAgICAgICAgICAgICBz
Y3JvbGxpbmdTdGF0ZU5vZGUuc2V0TGF5ZXIobGF5ZXJSZXByZXNlbnRhdGlvbkZyb21MYXllck9y
VmlldyhsYXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5sYXllcigpKSkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0No
YW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVu
dHNMYXllcikpCi0gICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNldFNjcm9sbGVk
Q29udGVudHNMYXllcihsYXllclJlcHJlc2VudGF0aW9uRnJvbUxheWVyT3JWaWV3KGxheWVyVHJl
ZUhvc3QuZ2V0TGF5ZXIoc2Nyb2xsaW5nU3RhdGVOb2RlLnNjcm9sbGVkQ29udGVudHNMYXllcigp
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH07Ci0gICAgICAgIGNhc2UgRnJhbWVT
Y3JvbGxpbmdOb2RlOiB7Ci0gICAgICAgICAgICBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5n
Tm9kZSYgc2Nyb2xsaW5nU3RhdGVOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVGcmFtZVNj
cm9sbGluZ05vZGU+KCpjdXJyTm9kZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChz
Y3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6
U2Nyb2xsTGF5ZXIpKQotICAgICAgICAgICAgICAgIHNjcm9sbGluZ1N0YXRlTm9kZS5zZXRMYXll
cihsYXllclJlcHJlc2VudGF0aW9uRnJvbUxheWVyT3JWaWV3KGxheWVyVHJlZUhvc3QuZ2V0TGF5
ZXIoc2Nyb2xsaW5nU3RhdGVOb2RlLmxheWVyKCkpKSk7Ci0KLSAgICAgICAgICAgIGlmIChzY3Jv
bGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3Jv
bGxpbmdOb2RlOjpDb3VudGVyU2Nyb2xsaW5nTGF5ZXIpKQotICAgICAgICAgICAgICAgIHNjcm9s
bGluZ1N0YXRlTm9kZS5zZXRDb3VudGVyU2Nyb2xsaW5nTGF5ZXIobGF5ZXJSZXByZXNlbnRhdGlv
bkZyb21MYXllck9yVmlldyhsYXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9k
ZS5jb3VudGVyU2Nyb2xsaW5nTGF5ZXIoKSkpKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IHdl
IHNob3VsZCBuZXZlciBoYXZlIGhlYWRlciBhbmQgZm9vdGVyIGxheWVycyBjb21pbmcgZnJvbSB0
aGUgV2ViUHJvY2Vzcy4KLSAgICAgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpIZWFkZXJMYXll
cikpCi0gICAgICAgICAgICAgICAgc2Nyb2xsaW5nU3RhdGVOb2RlLnNldEhlYWRlckxheWVyKGxh
eWVyUmVwcmVzZW50YXRpb25Gcm9tTGF5ZXJPclZpZXcobGF5ZXJUcmVlSG9zdC5nZXRMYXllcihz
Y3JvbGxpbmdTdGF0ZU5vZGUuaGVhZGVyTGF5ZXIoKSkpKTsKLQotICAgICAgICAgICAgaWYgKHNj
cm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNj
cm9sbGluZ05vZGU6OkZvb3RlckxheWVyKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxpbmdTdGF0
ZU5vZGUuc2V0Rm9vdGVyTGF5ZXIobGF5ZXJSZXByZXNlbnRhdGlvbkZyb21MYXllck9yVmlldyhs
YXllclRyZWVIb3N0LmdldExheWVyKHNjcm9sbGluZ1N0YXRlTm9kZS5mb290ZXJMYXllcigpKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaXhlZE5vZGU6
Ci0gICAgICAgIGNhc2UgU3RpY2t5Tm9kZToKLSAgICAgICAgICAgIGlmIChjdXJyTm9kZS0+aGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5ZXIpKQotICAgICAg
ICAgICAgICAgIGN1cnJOb2RlLT5zZXRMYXllcihsYXllclJlcHJlc2VudGF0aW9uRnJvbUxheWVy
T3JWaWV3KGxheWVyVHJlZUhvc3QuZ2V0TGF5ZXIoY3Vyck5vZGUtPmxheWVyKCkpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRmxvYXRSZWN0IFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmN1c3RvbUZpeGVkUG9zaXRpb25SZWN0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV93ZWJQYWdlUHJveHkuY29tcHV0ZUN1c3RvbUZpeGVkUG9zaXRpb25S
ZWN0KG1fd2ViUGFnZVByb3h5LnVub2JzY3VyZWRDb250ZW50UmVjdCgpLCBtX3dlYlBhZ2VQcm94
eS51bm9ic2N1cmVkQ29udGVudFJlY3RSZXNwZWN0aW5nSW5wdXRWaWV3Qm91bmRzKCksIG1fd2Vi
UGFnZVByb3h5LmN1c3RvbUZpeGVkUG9zaXRpb25SZWN0KCksCi0gICAgICAgIG1fd2ViUGFnZVBy
b3h5LmRpc3BsYXllZENvbnRlbnRTY2FsZSgpLCBGcmFtZVZpZXc6OkxheW91dFZpZXdwb3J0Q29u
c3RyYWludDo6VW5jb25zdHJhaW5lZCwgdmlzdWFsVmlld3BvcnRFbmFibGVkKCkpOwotfQotCi12
b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OnNjcm9sbGluZ1RyZWVOb2RlV2ls
bFN0YXJ0UGFuR2VzdHVyZSgpCi17Ci0gICAgbV93ZWJQYWdlUHJveHkub3ZlcmZsb3dTY3JvbGxW
aWV3V2lsbFN0YXJ0UGFuR2VzdHVyZSgpOwotfQotCi12b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHk6OnNjcm9sbGluZ1RyZWVOb2RlV2lsbFN0YXJ0U2Nyb2xsKCkKLXsKLSAgICBt
X3dlYlBhZ2VQcm94eS5vdmVyZmxvd1Njcm9sbFdpbGxTdGFydFNjcm9sbCgpOwotfQotICAgIAot
dm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpzY3JvbGxpbmdUcmVlTm9kZURp
ZEVuZFNjcm9sbCgpCi17Ci0gICAgbV93ZWJQYWdlUHJveHkub3ZlcmZsb3dTY3JvbGxEaWRFbmRT
Y3JvbGwoKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFw
cGluZyhDR1NpemUgbWF4U2Nyb2xsT2Zmc2V0cywgQ0dQb2ludCB2ZWxvY2l0eSwgQ0dGbG9hdCB0
b3BJbnNldCwgQ0dQb2ludCogdGFyZ2V0Q29udGVudE9mZnNldCkKLXsKLSAgICAvLyBUaGUgYm91
bmRzIGNoZWNraW5nIHdpdGggbWF4U2Nyb2xsT2Zmc2V0cyBpcyB0byBlbnN1cmUgdGhhdCB3ZSB3
b24ndCBpbnRlcmZlcmUgd2l0aCBydWJiZXItYmFuZGluZyB3aGVuIHNjcm9sbGluZyB0byB0aGUg
ZWRnZSBvZiB0aGUgcGFnZS4KLSAgICBpZiAoc2hvdWxkU25hcEZvck1haW5GcmFtZVNjcm9sbGlu
ZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKSB7Ci0gICAgICAgIGZsb2F0
IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Ny
b2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgdGFyZ2V0Q29udGVu
dE9mZnNldC0+eCwgdmVsb2NpdHkueCwgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4
KTsKLSAgICAgICAgaWYgKHRhcmdldENvbnRlbnRPZmZzZXQtPnggPiAwICYmIHRhcmdldENvbnRl
bnRPZmZzZXQtPnggPCBtYXhTY3JvbGxPZmZzZXRzLndpZHRoKQotICAgICAgICAgICAgdGFyZ2V0
Q29udGVudE9mZnNldC0+eCA9IHN0ZDo6bWluPGZsb2F0PihtYXhTY3JvbGxPZmZzZXRzLndpZHRo
LCBwb3RlbnRpYWxTbmFwUG9zaXRpb24pOwotICAgIH0KLQotICAgIGlmIChzaG91bGRTbmFwRm9y
TWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKSB7
Ci0gICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IGNsb3Nlc3RTbmFwT2Zmc2V0
Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6VmVydGljYWws
IHRhcmdldENvbnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5LnksIG1fY3VycmVudFZlcnRpY2FsU25h
cFBvaW50SW5kZXgpOwotICAgICAgICBpZiAobV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRl
eCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4KQotICAgICAgICAgICAgcG90ZW50aWFsU25hcFBv
c2l0aW9uIC09IHRvcEluc2V0OwotCi0gICAgICAgIGlmICh0YXJnZXRDb250ZW50T2Zmc2V0LT55
ID4gMCAmJiB0YXJnZXRDb250ZW50T2Zmc2V0LT55IDwgbWF4U2Nyb2xsT2Zmc2V0cy5oZWlnaHQp
Ci0gICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gc3RkOjptaW48ZmxvYXQ+KG1h
eFNjcm9sbE9mZnNldHMuaGVpZ2h0LCBwb3RlbnRpYWxTbmFwUG9zaXRpb24pOwotICAgIH0KLX0K
LQotYm9vbCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpzaG91bGRTZXRTY3JvbGxW
aWV3RGVjZWxlcmF0aW9uUmF0ZUZhc3QoKSBjb25zdAotewotICAgIHJldHVybiBzaG91bGRTbmFw
Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkgfHwgc2hv
dWxkU25hcEZvck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsK
LX0KLQotYm9vbCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpzaG91bGRTbmFwRm9y
TWFpbkZyYW1lU2Nyb2xsaW5nKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAotewotICAgIFNj
cm9sbGluZ1RyZWVOb2RlKiByb290ID0gbV9zY3JvbGxpbmdUcmVlLT5yb290Tm9kZSgpOwotICAg
IGlmIChyb290ICYmIHJvb3QtPmlzRnJhbWVTY3JvbGxpbmdOb2RlKCkpIHsKLSAgICAgICAgU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSogcm9vdEZyYW1lID0gc3RhdGljX2Nhc3Q8U2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSo+KHJvb3QpOwotICAgICAgICBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiBzbmFwT2Zmc2V0cyA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9u
dGFsID8gcm9vdEZyYW1lLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKSA6IHJvb3RGcmFtZS0+dmVy
dGljYWxTbmFwT2Zmc2V0cygpOwotICAgICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBheGlz
ID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IG1fY3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleCA6IG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXg7Ci0gICAgICAgIHJl
dHVybiBzbmFwT2Zmc2V0cy5zaXplKCkgJiYgKGN1cnJlbnRJbmRleCA8IHNuYXBPZmZzZXRzLnNp
emUoKSB8fCBjdXJyZW50SW5kZXggPT0gaW52YWxpZFNuYXBPZmZzZXRJbmRleCk7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotZmxvYXQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eTo6Y2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoU2Nyb2xsRXZlbnRB
eGlzIGF4aXMsIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWdu
ZWQmIGN1cnJlbnRJbmRleCkgY29uc3QKLXsKLSAgICBTY3JvbGxpbmdUcmVlTm9kZSogcm9vdCA9
IG1fc2Nyb2xsaW5nVHJlZS0+cm9vdE5vZGUoKTsKLSAgICBBU1NFUlQocm9vdCAmJiByb290LT5p
c0ZyYW1lU2Nyb2xsaW5nTm9kZSgpKTsKLSAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlKiByb290RnJhbWUgPSBzdGF0aWNfY2FzdDxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlKj4ocm9vdCk7Ci0gICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgc25hcE9mZnNldHMgPSBheGlz
ID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IHJvb3RGcmFtZS0+aG9yaXpvbnRhbFNu
YXBPZmZzZXRzKCkgOiByb290RnJhbWUtPnZlcnRpY2FsU25hcE9mZnNldHMoKTsKLSAgICBjb25z
dCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8ZmxvYXQ+PiYgc25hcE9mZnNldFJhbmdlcyA9IGF4
aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gcm9vdEZyYW1lLT5ob3Jpem9udGFs
U25hcE9mZnNldFJhbmdlcygpIDogcm9vdEZyYW1lLT52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMo
KTsKLQotICAgIGZsb2F0IHNjYWxlZFNjcm9sbERlc3RpbmF0aW9uID0gc2Nyb2xsRGVzdGluYXRp
b24gLyBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRDb250ZW50U2NhbGUoKTsKLSAgICBmbG9hdCBy
YXdDbG9zZXN0U25hcE9mZnNldCA9IGNsb3Nlc3RTbmFwT2Zmc2V0KHNuYXBPZmZzZXRzLCBzbmFw
T2Zmc2V0UmFuZ2VzLCBzY2FsZWRTY3JvbGxEZXN0aW5hdGlvbiwgdmVsb2NpdHksIGN1cnJlbnRJ
bmRleCk7Ci0gICAgcmV0dXJuIHJhd0Nsb3Nlc3RTbmFwT2Zmc2V0ICogbV93ZWJQYWdlUHJveHku
ZGlzcGxheWVkQ29udGVudFNjYWxlKCk7Ci19Ci0KLWJvb2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eTo6aGFzQWN0aXZlU25hcFBvaW50KCkgY29uc3QKLXsKLSAgICBTY3JvbGxpbmdU
cmVlTm9kZSogcm9vdCA9IG1fc2Nyb2xsaW5nVHJlZS0+cm9vdE5vZGUoKTsKLSAgICBpZiAoIXJv
b3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghaXM8U2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZT4ocm9vdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUmIHJvb3RGcmFtZSA9IGRvd25jYXN0PFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+KCpyb290KTsKLSAgICBjb25zdCBWZWN0b3I8Zmxv
YXQ+JiBob3Jpem9udGFsID0gcm9vdEZyYW1lLmhvcml6b250YWxTbmFwT2Zmc2V0cygpOwotICAg
IGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZlcnRpY2FsID0gcm9vdEZyYW1lLnZlcnRpY2FsU25hcE9m
ZnNldHMoKTsKLQotICAgIGlmIChob3Jpem9udGFsLmlzRW1wdHkoKSAmJiB2ZXJ0aWNhbC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgoIWhvcml6b250YWwuaXNF
bXB0eSgpICYmIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCA+PSBob3Jpem9udGFs
LnNpemUoKSkKLSAgICAgICAgfHwgKCF2ZXJ0aWNhbC5pc0VtcHR5KCkgJiYgbV9jdXJyZW50VmVy
dGljYWxTbmFwUG9pbnRJbmRleCA+PSB2ZXJ0aWNhbC5zaXplKCkpKSB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCi1DR1BvaW50
IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6Om5lYXJlc3RBY3RpdmVDb250ZW50SW5z
ZXRBZGp1c3RlZFNuYXBQb2ludChDR0Zsb2F0IHRvcEluc2V0LCBjb25zdCBDR1BvaW50JiBjdXJy
ZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgQ0dQb2ludCBhY3RpdmVQb2ludCA9IGN1cnJlbnRQb2lu
dDsKLQotICAgIFNjcm9sbGluZ1RyZWVOb2RlKiByb290ID0gbV9zY3JvbGxpbmdUcmVlLT5yb290
Tm9kZSgpOwotICAgIEFTU0VSVChyb290ICYmIGlzPFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGU+KHJvb3QpKTsKLSAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlJiByb290
RnJhbWUgPSBkb3duY2FzdDxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlPigqcm9vdCk7
Ci0gICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgaG9yaXpvbnRhbCA9IHJvb3RGcmFtZS5ob3Jpem9u
dGFsU25hcE9mZnNldHMoKTsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2ZXJ0aWNhbCA9IHJv
b3RGcmFtZS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7Ci0KLSAgICAvLyBUaGUgYm91bmRzIGNoZWNr
aW5nIHdpdGggbWF4U2Nyb2xsT2Zmc2V0cyBpcyB0byBlbnN1cmUgdGhhdCB3ZSB3b24ndCBpbnRl
cmZlcmUgd2l0aCBydWJiZXItYmFuZGluZyB3aGVuIHNjcm9sbGluZyB0byB0aGUgZWRnZSBvZiB0
aGUgcGFnZS4KLSAgICBpZiAoIWhvcml6b250YWwuaXNFbXB0eSgpICYmIG1fY3VycmVudEhvcml6
b250YWxTbmFwUG9pbnRJbmRleCA8IGhvcml6b250YWwuc2l6ZSgpKQotICAgICAgICBhY3RpdmVQ
b2ludC54ID0gaG9yaXpvbnRhbFttX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXhdICog
bV93ZWJQYWdlUHJveHkuZGlzcGxheWVkQ29udGVudFNjYWxlKCk7Ci0KLSAgICBpZiAoIXZlcnRp
Y2FsLmlzRW1wdHkoKSAmJiBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4IDwgdmVydGlj
YWwuc2l6ZSgpKSB7Ci0gICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbiA9IHZlcnRp
Y2FsW21fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXhdICogbV93ZWJQYWdlUHJveHkuZGlz
cGxheWVkQ29udGVudFNjYWxlKCk7Ci0gICAgICAgIHBvdGVudGlhbFNuYXBQb3NpdGlvbiAtPSB0
b3BJbnNldDsKLSAgICAgICAgYWN0aXZlUG9pbnQueSA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsK
LSAgICB9Ci0KLSAgICByZXR1cm4gYWN0aXZlUG9pbnQ7Ci19Ci0KLSNlbmRpZgotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotCi0jZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSNl
bmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZmVkMjMyZDE3ZmJlOWQ5NzIzOTRiZGUxNTllNmNiYjljZDVl
ZTNmMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgIlJlbW90
ZUxheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0K
LU9CSkNfQ0xBU1MgV0tPbmVTaG90RGlzcGxheUxpbmtIYW5kbGVyOwotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb247Ci1jbGFzcyBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uOwotCi1jbGFzcyBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5IGZpbmFsIDogcHVibGljIERyYXdpbmdBcmVhUHJveHkgewotcHVibGlj
OgotICAgIGV4cGxpY2l0IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVBy
b3h5Jik7Ci0gICAgdmlydHVhbCB+UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSgpOwot
Ci0gICAgY29uc3QgUmVtb3RlTGF5ZXJUcmVlSG9zdCYgcmVtb3RlTGF5ZXJUcmVlSG9zdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVtb3RlTGF5ZXJUcmVlSG9zdDsgfQotCi0gICAgdm9pZCBhY2NlbGVy
YXRlZEFuaW1hdGlvbkRpZFN0YXJ0KHVpbnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5
LCBkb3VibGUgc3RhcnRUaW1lKTsKLSAgICB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5k
KHVpbnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5KTsKLQotICAgIHVpbnQ2NF90IG5l
eHRMYXllclRyZWVUcmFuc2FjdGlvbklEKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nTGF5ZXJU
cmVlVHJhbnNhY3Rpb25JRCArIDE7IH0KLSAgICB1aW50NjRfdCBsYXN0Q29tbWl0dGVkTGF5ZXJU
cmVlVHJhbnNhY3Rpb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JREZvclBlbmRp
bmdDQUNvbW1pdDsgfQotCi0gICAgdm9pZCBkaWRSZWZyZXNoRGlzcGxheSgpOwotICAgIAotICAg
IGJvb2wgaGFzRGVidWdJbmRpY2F0b3IoKSBjb25zdCB7IHJldHVybiAhIW1fZGVidWdJbmRpY2F0
b3JMYXllclRyZWVIb3N0OyB9Ci0KLSAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
IGNvbnN0OwotCi0gICAgTGF5ZXJPclZpZXcqIGxheWVyV2l0aElERm9yVGVzdGluZyh1aW50NjRf
dCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzaXplRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGlkVXBkYXRlR2VvbWV0cnkoKSBvdmVycmlkZTsKLSAgICAKLSAgICAvLyBGb3Igbm93LCBh
bGwgY2FsbGJhY2tzIGFyZSBjYWxsZWQgYmVmb3JlIGNvbW1pdHRpbmcgY2hhbmdlcywgYmVjYXVz
ZSB0aGF0J3Mgd2hhdCB0aGUgb25seSBjbGllbnQgcmVxdWlyZXMuCi0gICAgLy8gT25jZSB3ZSBo
YXZlIG90aGVyIGNhbGxiYWNrcywgaXQgbWF5IG1ha2Ugc2Vuc2UgdG8gaGF2ZSBhIGJlZm9yZS1j
b21taXQvYWZ0ZXItY29tbWl0IG9wdGlvbi4KLSAgICB2b2lkIGRpc3BhdGNoQWZ0ZXJFbnN1cmlu
Z0RyYXdpbmcoV1RGOjpGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJikgb3Zl
cnJpZGU7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBzZXRWaWV3RXhwb3NlZFJlY3Qo
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFJlY3Q+KSBvdmVycmlkZTsKLSNlbmRpZgotCi0g
ICAgZmxvYXQgaW5kaWNhdG9yU2NhbGUoV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUpIGNv
bnN0OwotICAgIHZvaWQgdXBkYXRlRGVidWdJbmRpY2F0b3IoKSBvdmVycmlkZTsKLSAgICB2b2lk
IHVwZGF0ZURlYnVnSW5kaWNhdG9yKFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplLCBib29s
IHJvb3RMYXllckNoYW5nZWQsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24pOwotICAgIHZvaWQgdXBkYXRlRGVidWdJbmRpY2F0b3JQb3NpdGlvbigp
OwotICAgIHZvaWQgaW5pdGlhbGl6ZURlYnVnSW5kaWNhdG9yKCk7Ci0KLSAgICB2b2lkIHdhaXRG
b3JEaWRVcGRhdGVBY3Rpdml0eVN0YXRlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWRlQ29udGVu
dFVudGlsUGVuZGluZ1VwZGF0ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlkZUNvbnRlbnRVbnRp
bEFueVVwZGF0ZSgpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIHZvaWQgcHJlcGFyZUZvckFwcFN1c3BlbnNpb24oKSBmaW5hbDsK
LSAgICAKLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGluZGljYXRvckxvY2F0aW9uKCkgY29uc3Q7
Ci0KLSAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBN
ZXNzYWdlIGhhbmRsZXJzCi0gICAgdm9pZCB3aWxsQ29tbWl0TGF5ZXJUcmVlKHVpbnQ2NF90IHRy
YW5zYWN0aW9uSUQpOwotICAgIHZvaWQgY29tbWl0TGF5ZXJUcmVlKGNvbnN0IFJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uJiwgY29uc3QgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2Fj
dGlvbiYpOwotICAgIAotICAgIHZvaWQgc2VuZFVwZGF0ZUdlb21ldHJ5KCk7Ci0KLSAgICBSZW1v
dGVMYXllclRyZWVIb3N0IG1fcmVtb3RlTGF5ZXJUcmVlSG9zdDsKLSAgICBib29sIG1faXNXYWl0
aW5nRm9yRGlkVXBkYXRlR2VvbWV0cnkgeyBmYWxzZSB9OwotICAgIGVudW0gRGlkVXBkYXRlTWVz
c2FnZVN0YXRlIHsgRG9lc05vdE5lZWREaWRVcGRhdGUsIE5lZWRzRGlkVXBkYXRlLCBNaXNzZWRD
b21taXQgfTsKLSAgICBEaWRVcGRhdGVNZXNzYWdlU3RhdGUgbV9kaWRVcGRhdGVNZXNzYWdlU3Rh
dGUgeyBEb2VzTm90TmVlZERpZFVwZGF0ZSB9OwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX2xh
c3RTZW50U2l6ZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVMYXllclRyZWVIb3N0PiBt
X2RlYnVnSW5kaWNhdG9yTGF5ZXJUcmVlSG9zdDsKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV90
aWxlTWFwSG9zdExheWVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2V4cG9zZWRSZWN0SW5k
aWNhdG9yTGF5ZXI7Ci0KLSAgICB1aW50NjRfdCBtX3BlbmRpbmdMYXllclRyZWVUcmFuc2FjdGlv
bklEIHsgMCB9OwotICAgIHVpbnQ2NF90IG1fbGFzdFZpc2libGVUcmFuc2FjdGlvbklEIHsgMCB9
OwotICAgIHVpbnQ2NF90IG1fdHJhbnNhY3Rpb25JREZvclBlbmRpbmdDQUNvbW1pdCB7IDAgfTsK
LSAgICB1aW50NjRfdCBtX3RyYW5zYWN0aW9uSURGb3JVbmhpZGluZ0NvbnRlbnQgeyAwIH07Ci0K
LSAgICBDYWxsYmFja01hcCBtX2NhbGxiYWNrczsKLQotICAgIFJldGFpblB0cjxXS09uZVNob3RE
aXNwbGF5TGlua0hhbmRsZXI+IG1fZGlzcGxheUxpbmtIYW5kbGVyOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRFJBV0lOR19BUkVBX1BST1hZ
KFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHksIERyYXdpbmdBcmVhVHlwZVJlbW90ZUxh
eWVyVHJlZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmNmY1YWE5MDkzOTY5OWIwNDQzMDIxZmI4NGNh
NjUyNjQ3YTY4Y2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHkgOiBEcmF3aW5nQXJlYVByb3h5IHsKLSAgICB2b2lkIFdpbGxD
b21taXRMYXllclRyZWUodWludDY0X3QgdHJhbnNhY3Rpb25JRCkKLSAgICB2b2lkIENvbW1pdExh
eWVyVHJlZShXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uIGxheWVyVHJlZVRyYW5z
YWN0aW9uLCBXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24gc2Ny
b2xsaW5nVHJlZVRyYW5zYWN0aW9uKQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRiMTdkMWYwZDY5YTNmMTRhM2I1NGVhM2IyOThj
OTMzYTUzMjViOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDQ4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkuaCIKLQotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJEcmF3aW5nQXJlYU1lc3NhZ2Vz
LmgiCi0jaW1wb3J0ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCi0jaW1wb3J0
ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmgiCi0jaW1wb3J0ICJXZWJQ
YWdlUHJveHkuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgotI2ltcG9ydCA8UXVhcnR6
Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0lPU3VyZmFjZVBvb2wuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTWFj
aFNlbmRSaWdodC5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVy
RGVsZWdhdGUuaD4KLSNpbXBvcnQgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJUEM7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotLy8gRklYTUU6IE1hYyB3aWxs
IG5lZWQgc29tZXRoaW5nIHNpbWlsYXI7IHdlIHNob3VsZCBmaWd1cmUgb3V0IGhvdyB0byBzaGFy
ZSB0aGlzIHdpdGggRGlzcGxheVJlZnJlc2hNb25pdG9yIHdpdGhvdXQKLS8vIGJyZWFraW5nIFdl
YktpdDEgYmVoYXZpb3Igb3IgV2ViS2l0Mi1XZWJLaXQxIGNvZXhpc3RlbmNlLgotI2lmIFBMQVRG
T1JNKElPUykKLUBpbnRlcmZhY2UgV0tPbmVTaG90RGlzcGxheUxpbmtIYW5kbGVyIDogTlNPYmpl
Y3QgewotICAgIFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSogX2RyYXdp
bmdBcmVhUHJveHk7Ci0gICAgQ0FEaXNwbGF5TGluayAqX2Rpc3BsYXlMaW5rOwotfQotCi0tIChp
ZClpbml0V2l0aERyYXdpbmdBcmVhUHJveHk6KFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eSopZHJhd2luZ0FyZWFQcm94eTsKLS0gKHZvaWQpZGlzcGxheUxpbmtGaXJlZDoo
Q0FEaXNwbGF5TGluayAqKXNlbmRlcjsKLS0gKHZvaWQpaW52YWxpZGF0ZTsKLS0gKHZvaWQpc2No
ZWR1bGU7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLT25lU2hvdERpc3BsYXlMaW5rSGFu
ZGxlcgotCi0tIChpZClpbml0V2l0aERyYXdpbmdBcmVhUHJveHk6KFdlYktpdDo6UmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSopZHJhd2luZ0FyZWFQcm94eQotewotICAgIGlmIChzZWxm
ID0gW3N1cGVyIGluaXRdKSB7Ci0gICAgICAgIF9kcmF3aW5nQXJlYVByb3h5ID0gZHJhd2luZ0Fy
ZWFQcm94eTsKLSAgICAgICAgLy8gTm90ZSB0aGF0IENBRGlzcGxheUxpbmsgcmV0YWlucyBpdHMg
dGFyZ2V0IChzZWxmKSwgc28gYSBjYWxsIHRvIC1pbnZhbGlkYXRlIGlzIG5lZWRlZCBvbiB0ZWFy
ZG93bi4KLSAgICAgICAgX2Rpc3BsYXlMaW5rID0gW0NBRGlzcGxheUxpbmsgZGlzcGxheUxpbmtX
aXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGRpc3BsYXlMaW5rRmlyZWQ6KV07Ci0g
ICAgICAgIFtfZGlzcGxheUxpbmsgYWRkVG9SdW5Mb29wOltOU1J1bkxvb3AgbWFpblJ1bkxvb3Bd
IGZvck1vZGU6TlNSdW5Mb29wQ29tbW9uTW9kZXNdOwotICAgICAgICBfZGlzcGxheUxpbmsucGF1
c2VkID0gWUVTOwotICAgICAgICBfZGlzcGxheUxpbmsucHJlZmVycmVkRnJhbWVzUGVyU2Vjb25k
ID0gNjA7Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsK
LSAgICBBU1NFUlQoIV9kaXNwbGF5TGluayk7Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0t
ICh2b2lkKWRpc3BsYXlMaW5rRmlyZWQ6KENBRGlzcGxheUxpbmsgKilzZW5kZXIKLXsKLSAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBfZHJhd2luZ0FyZWFQcm94eS0+ZGlkUmVmcmVzaERp
c3BsYXkoKTsKLX0KLQotLSAodm9pZClpbnZhbGlkYXRlCi17Ci0gICAgW19kaXNwbGF5TGluayBp
bnZhbGlkYXRlXTsKLSAgICBfZGlzcGxheUxpbmsgPSBudWxscHRyOwotfQotCi0tICh2b2lkKXNj
aGVkdWxlCi17Ci0gICAgX2Rpc3BsYXlMaW5rLnBhdXNlZCA9IE5POwotfQotCi0tICh2b2lkKXBh
dXNlCi17Ci0gICAgX2Rpc3BsYXlMaW5rLnBhdXNlZCA9IFlFUzsKLX0KLQotQGVuZAotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5KFdlYlBhZ2VQcm94eSYgd2ViUGFnZVBy
b3h5KQotICAgIDogRHJhd2luZ0FyZWFQcm94eShEcmF3aW5nQXJlYVR5cGVSZW1vdGVMYXllclRy
ZWUsIHdlYlBhZ2VQcm94eSkKLSAgICAsIG1fcmVtb3RlTGF5ZXJUcmVlSG9zdCgqdGhpcykKLSNp
ZiBQTEFURk9STShJT1MpCi0gICAgLCBtX2Rpc3BsYXlMaW5rSGFuZGxlcihhZG9wdE5TKFtbV0tP
bmVTaG90RGlzcGxheUxpbmtIYW5kbGVyIGFsbG9jXSBpbml0V2l0aERyYXdpbmdBcmVhUHJveHk6
dGhpc10pKQotI2VuZGlmCi17Ci0jaWYgVVNFKElPU1VSRkFDRSkKLSAgICAvLyBXZSBkb24ndCB3
YW50IHRvIHBvb2wgc3VyZmFjZXMgaW4gdGhlIFVJIHByb2Nlc3MuCi0gICAgLy8gRklYTUU6IFdl
IHNob3VsZCBkbyB0aGlzIHNvbWV3aGVyZSBlbHNlLgotICAgIElPU3VyZmFjZVBvb2w6OnNoYXJl
ZFBvb2woKS5zZXRQb29sU2l6ZSgwKTsKLSNlbmRpZgotCi0gICAgbV93ZWJQYWdlUHJveHkucHJv
Y2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQo
KSwgKnRoaXMpOwotCi0gICAgaWYgKG1fd2ViUGFnZVByb3h5LnByZWZlcmVuY2VzKCkudGlsZWRT
Y3JvbGxpbmdJbmRpY2F0b3JWaXNpYmxlKCkpCi0gICAgICAgIGluaXRpYWxpemVEZWJ1Z0luZGlj
YXRvcigpOwotfQotCi1SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojp+UmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSgpCi17Ci0gICAgbV9jYWxsYmFja3MuaW52YWxpZGF0ZShD
YWxsYmFja0Jhc2U6OkVycm9yOjpPd25lcldhc0ludmFsaWRhdGVkKTsKLSAgICBtX3dlYlBhZ2VQ
cm94eS5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZVBy
b3h5LnBhZ2VJRCgpKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBbbV9kaXNwbGF5TGlua0hh
bmRsZXIgaW52YWxpZGF0ZV07Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5OjpzaXplRGlkQ2hhbmdlKCkKLXsKLSAgICBpZiAoIW1fd2ViUGFnZVByb3h5
LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faXNXYWl0aW5nRm9yRGlk
VXBkYXRlR2VvbWV0cnkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNlbmRVcGRhdGVHZW9tZXRy
eSgpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmRldmljZVNj
YWxlRmFjdG9yRGlkQ2hhbmdlKCkKLXsKLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlNldERldmljZVNjYWxlRmFjdG9yKG1fd2ViUGFnZVBy
b3h5LmRldmljZVNjYWxlRmFjdG9yKCkpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6ZGlkVXBkYXRlR2VvbWV0cnko
KQotewotICAgIEFTU0VSVChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUdlb21ldHJ5KTsKLQotICAg
IG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlR2VvbWV0cnkgPSBmYWxzZTsKLQotICAgIC8vIElmIHRo
ZSBXS1ZpZXcgd2FzIHJlc2l6ZWQgd2hpbGUgd2Ugd2VyZSB3YWl0aW5nIGZvciBhIERpZFVwZGF0
ZUdlb21ldHJ5IHJlcGx5IGZyb20gdGhlIHdlYiBwcm9jZXNzLAotICAgIC8vIHdlIG5lZWQgdG8g
cmVzZW5kIHRoZSBuZXcgc2l6ZSBoZXJlLgotICAgIGlmIChtX2xhc3RTZW50U2l6ZSAhPSBtX3Np
emUpCi0gICAgICAgIHNlbmRVcGRhdGVHZW9tZXRyeSgpOwotfQotCi12b2lkIFJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHk6OnNlbmRVcGRhdGVHZW9tZXRyeSgpCi17Ci0gICAgbV9sYXN0
U2VudFNpemUgPSBtX3NpemU7Ci0gICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OkRyYXdpbmdBcmVhOjpVcGRhdGVHZW9tZXRyeShtX3NpemUsIEludFNpemUoKSwgZmFs
c2UsIE1hY2hTZW5kUmlnaHQoKSksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKLSAgICBtX2lz
V2FpdGluZ0ZvckRpZFVwZGF0ZUdlb21ldHJ5ID0gdHJ1ZTsKLX0KLQotdm9pZCBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5Ojp3aWxsQ29tbWl0TGF5ZXJUcmVlKHVpbnQ2NF90IHRyYW5z
YWN0aW9uSUQpCi17Ci0gICAgbV9wZW5kaW5nTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCA9IHRyYW5z
YWN0aW9uSUQ7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6Y29t
bWl0TGF5ZXJUcmVlKGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiBsYXllclRyZWVU
cmFuc2FjdGlvbiwgY29uc3QgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbiYg
c2Nyb2xsaW5nVHJlZVRyYW5zYWN0aW9uKQotewotICAgIFRyYWNlU2NvcGUgdHJhY2luZ1Njb3Bl
KENvbW1pdExheWVyVHJlZVN0YXJ0LCBDb21taXRMYXllclRyZWVFbmQpOwotCi0gICAgTE9HKFJl
bW90ZUxheWVyVHJlZSwgIiVzIiwgbGF5ZXJUcmVlVHJhbnNhY3Rpb24uZGVzY3JpcHRpb24oKS5k
YXRhKCkpOwotICAgIExPRyhSZW1vdGVMYXllclRyZWUsICIlcyIsIHNjcm9sbGluZ1RyZWVUcmFu
c2FjdGlvbi5kZXNjcmlwdGlvbigpLmRhdGEoKSk7Ci0KLSAgICBBU1NFUlQobGF5ZXJUcmVlVHJh
bnNhY3Rpb24udHJhbnNhY3Rpb25JRCgpID09IG1fbGFzdFZpc2libGVUcmFuc2FjdGlvbklEICsg
MSk7Ci0gICAgbV90cmFuc2FjdGlvbklERm9yUGVuZGluZ0NBQ29tbWl0ID0gbGF5ZXJUcmVlVHJh
bnNhY3Rpb24udHJhbnNhY3Rpb25JRCgpOwotCi0gICAgaWYgKGxheWVyVHJlZVRyYW5zYWN0aW9u
Lmhhc0VkaXRvclN0YXRlKCkpCi0gICAgICAgIG1fd2ViUGFnZVByb3h5LmVkaXRvclN0YXRlQ2hh
bmdlZChsYXllclRyZWVUcmFuc2FjdGlvbi5lZGl0b3JTdGF0ZSgpKTsKLQotICAgIGlmIChtX3Jl
bW90ZUxheWVyVHJlZUhvc3QudXBkYXRlTGF5ZXJUcmVlKGxheWVyVHJlZVRyYW5zYWN0aW9uKSkg
ewotICAgICAgICBpZiAobGF5ZXJUcmVlVHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JRCgpID49IG1f
dHJhbnNhY3Rpb25JREZvclVuaGlkaW5nQ29udGVudCkKLSAgICAgICAgICAgIG1fd2ViUGFnZVBy
b3h5LnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIobV9yZW1vdGVMYXllclRyZWVI
b3N0LnJvb3RMYXllcigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9yZW1vdGVMYXll
clRyZWVIb3N0LmRldGFjaFJvb3RMYXllcigpOwotICAgIH0KLQotI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCi0gICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6UmVxdWVzdGVk
U2Nyb2xsSW5mbyByZXF1ZXN0ZWRTY3JvbGxJbmZvOwotICAgIG1fd2ViUGFnZVByb3h5LnNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHkoKS0+Y29tbWl0U2Nyb2xsaW5nVHJlZVN0YXRlKHNjcm9sbGlu
Z1RyZWVUcmFuc2FjdGlvbiwgcmVxdWVzdGVkU2Nyb2xsSW5mbyk7Ci0jZW5kaWYKLQotICAgIG1f
d2ViUGFnZVByb3h5LmRpZENvbW1pdExheWVyVHJlZShsYXllclRyZWVUcmFuc2FjdGlvbik7Ci0K
LSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBpZiAo
bV93ZWJQYWdlUHJveHkuc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSgpLT5oYXNGaXhlZE9yU3Rp
Y2t5KCkpIHsKLSAgICAgICAgLy8gSWYgd2UgZ290IGEgbmV3IGxheWVyIGZvciBhIGZpeGVkIG9y
IHN0aWNreSBub2RlLCBpdHMgcG9zaXRpb24gZnJvbSB0aGUgV2ViUHJvY2VzcyBpcyBwcm9iYWJs
eSBzdGFsZS4gV2UgbmVlZCB0byByZS1ydW4gdGhlICJ2aWV3cG9ydCIgY2hhbmdlZCBsb2dpYyB0
byB1ZHBhdGUgaXQgd2l0aCBvdXIgVUktc2lkZSBzdGF0ZS4KLSAgICAgICAgRmxvYXRSZWN0IGN1
c3RvbUZpeGVkUG9zaXRpb25SZWN0ID0gbV93ZWJQYWdlUHJveHkuY29tcHV0ZUN1c3RvbUZpeGVk
UG9zaXRpb25SZWN0KG1fd2ViUGFnZVByb3h5LnVub2JzY3VyZWRDb250ZW50UmVjdCgpLCBtX3dl
YlBhZ2VQcm94eS51bm9ic2N1cmVkQ29udGVudFJlY3RSZXNwZWN0aW5nSW5wdXRWaWV3Qm91bmRz
KCksIG1fd2ViUGFnZVByb3h5LmN1c3RvbUZpeGVkUG9zaXRpb25SZWN0KCksIG1fd2ViUGFnZVBy
b3h5LmRpc3BsYXllZENvbnRlbnRTY2FsZSgpLCBGcmFtZVZpZXc6OkxheW91dFZpZXdwb3J0Q29u
c3RyYWludDo6VW5jb25zdHJhaW5lZCwgbV93ZWJQYWdlUHJveHkuc2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eSgpLT52aXN1YWxWaWV3cG9ydEVuYWJsZWQoKSk7Ci0gICAgICAgIG1fd2ViUGFnZVBy
b3h5LnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKS0+dmlld3BvcnRDaGFuZ2VkVmlhRGVsZWdh
dGVkU2Nyb2xsaW5nKG1fd2ViUGFnZVByb3h5LnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKS0+
cm9vdFNjcm9sbGluZ05vZGVJRCgpLCBjdXN0b21GaXhlZFBvc2l0aW9uUmVjdCwgbV93ZWJQYWdl
UHJveHkuZGlzcGxheWVkQ29udGVudFNjYWxlKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8g
SGFuZGxlIHJlcXVlc3RlZCBzY3JvbGwgcG9zaXRpb24gdXBkYXRlcyBmcm9tIHRoZSBzY3JvbGxp
bmcgdHJlZSB0cmFuc2FjdGlvbiBhZnRlciBkaWRDb21taXRMYXllclRyZWUoKQotICAgIC8vIGhh
cyB1cGRhdGVkIHRoZSB2aWV3IHNpemUgYmFzZWQgb24gdGhlIGNvbnRlbnQgc2l6ZS4KLSAgICBp
ZiAocmVxdWVzdGVkU2Nyb2xsSW5mby5yZXF1ZXN0c1Njcm9sbFBvc2l0aW9uVXBkYXRlKQotICAg
ICAgICBtX3dlYlBhZ2VQcm94eS5yZXF1ZXN0U2Nyb2xsKHJlcXVlc3RlZFNjcm9sbEluZm8ucmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb24sIGxheWVyVHJlZVRyYW5zYWN0aW9uLnNjcm9sbE9yaWdpbigp
LCByZXF1ZXN0ZWRTY3JvbGxJbmZvLnJlcXVlc3RJc1Byb2dyYW1tYXRpY1Njcm9sbCk7Ci0jZW5k
aWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLQotICAgIGlmIChtX2RlYnVnSW5kaWNhdG9y
TGF5ZXJUcmVlSG9zdCkgewotICAgICAgICBmbG9hdCBzY2FsZSA9IGluZGljYXRvclNjYWxlKGxh
eWVyVHJlZVRyYW5zYWN0aW9uLmNvbnRlbnRzU2l6ZSgpKTsKLSAgICAgICAgYm9vbCByb290TGF5
ZXJDaGFuZ2VkID0gbV9kZWJ1Z0luZGljYXRvckxheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVyVHJl
ZShsYXllclRyZWVUcmFuc2FjdGlvbiwgc2NhbGUpOwotICAgICAgICBJbnRQb2ludCBzY3JvbGxQ
b3NpdGlvbjsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gbGF5
ZXJUcmVlVHJhbnNhY3Rpb24uc2Nyb2xsUG9zaXRpb24oKTsKLSNlbmRpZgotICAgICAgICB1cGRh
dGVEZWJ1Z0luZGljYXRvcihsYXllclRyZWVUcmFuc2FjdGlvbi5jb250ZW50c1NpemUoKSwgcm9v
dExheWVyQ2hhbmdlZCwgc2NhbGUsIHNjcm9sbFBvc2l0aW9uKTsKLSAgICAgICAgYXNMYXllciht
X2RlYnVnSW5kaWNhdG9yTGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpLm5hbWUgPSBAIkluZGlj
YXRvciBob3N0IHJvb3QiOwotICAgIH0KLQotICAgIG1fd2ViUGFnZVByb3h5LmxheWVyVHJlZUNv
bW1pdENvbXBsZXRlKCk7Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgaWYgKHN0ZDo6ZXhjaGFu
Z2UobV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUsIE5lZWRzRGlkVXBkYXRlKSA9PSBNaXNzZWRDb21t
aXQpCi0gICAgICAgIGRpZFJlZnJlc2hEaXNwbGF5KCk7Ci0gICAgW21fZGlzcGxheUxpbmtIYW5k
bGVyIHNjaGVkdWxlXTsKLSNlbHNlCi0gICAgbV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUgPSBOZWVk
c0RpZFVwZGF0ZTsKLSAgICBkaWRSZWZyZXNoRGlzcGxheSgpOwotI2VuZGlmCi0KLSAgICBpZiAo
YXV0byBtaWxlc3RvbmVzID0gbGF5ZXJUcmVlVHJhbnNhY3Rpb24ubmV3bHlSZWFjaGVkTGF5b3V0
TWlsZXN0b25lcygpKQotICAgICAgICBtX3dlYlBhZ2VQcm94eS5kaWRSZWFjaExheW91dE1pbGVz
dG9uZShtaWxlc3RvbmVzKTsKLQotICAgIGZvciAoYXV0byYgY2FsbGJhY2tJRCA6IGxheWVyVHJl
ZVRyYW5zYWN0aW9uLmNhbGxiYWNrSURzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gY2FsbGJhY2sg
PSBtX2NhbGxiYWNrcy50YWtlPFZvaWRDYWxsYmFjaz4oY2FsbGJhY2tJRCkpCi0gICAgICAgICAg
ICBjYWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrKCk7Ci0gICAgfQotfQotCi12b2lkIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkU3RhcnQodWlu
dDY0X3QgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSBzdGFydFRpbWUpCi17Ci0g
ICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpB
Y2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KGxheWVySUQsIGtleSwgc3RhcnRUaW1lKSwgbV93
ZWJQYWdlUHJveHkucGFnZUlEKCkpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHk6OmFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90IGxheWVySUQsIGNv
bnN0IFN0cmluZyYga2V5KQotewotICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpEcmF3aW5nQXJlYTo6QWNjZWxlcmF0ZWRBbmltYXRpb25EaWRFbmQobGF5ZXJJRCwg
a2V5KSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOwotfQotCi1zdGF0aWMgY29uc3QgZmxvYXQg
aW5kaWNhdG9ySW5zZXQgPSAxMDsKLQotI2lmIFBMQVRGT1JNKE1BQykKLXZvaWQgUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6c2V0Vmlld0V4cG9zZWRSZWN0KHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6RmxvYXRSZWN0PiB2aWV3RXhwb3NlZFJlY3QpCi17Ci0gICAgRHJhd2luZ0FyZWFQ
cm94eTo6c2V0Vmlld0V4cG9zZWRSZWN0KHZpZXdFeHBvc2VkUmVjdCk7Ci0gICAgdXBkYXRlRGVi
dWdJbmRpY2F0b3JQb3NpdGlvbigpOwotfQotI2VuZGlmCi0KLUZsb2F0UG9pbnQgUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6aW5kaWNhdG9yTG9jYXRpb24oKSBjb25zdAotewotICAg
IGlmIChtX3dlYlBhZ2VQcm94eS5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkgewotI2lmIFBMQVRGT1JN
KElPUykKLSAgICAgICAgRmxvYXRQb2ludCB0aWxlZE1hcExvY2F0aW9uID0gbV93ZWJQYWdlUHJv
eHkudW5vYnNjdXJlZENvbnRlbnRSZWN0KCkubG9jYXRpb24oKS5leHBhbmRlZFRvKEZsb2F0UG9p
bnQoKSk7Ci0gICAgICAgIHRpbGVkTWFwTG9jYXRpb24gPSB0aWxlZE1hcExvY2F0aW9uLmV4cGFu
ZGVkVG8obV93ZWJQYWdlUHJveHkuZXhwb3NlZENvbnRlbnRSZWN0KCkubG9jYXRpb24oKSk7Ci0K
LSAgICAgICAgZmxvYXQgYWJzb2x1dGVJbnNldCA9IGluZGljYXRvckluc2V0IC8gbV93ZWJQYWdl
UHJveHkuZGlzcGxheWVkQ29udGVudFNjYWxlKCk7Ci0gICAgICAgIHRpbGVkTWFwTG9jYXRpb24g
Kz0gRmxvYXRTaXplKGFic29sdXRlSW5zZXQsIGFic29sdXRlSW5zZXQpOwotI2Vsc2UKLSAgICAg
ICAgRmxvYXRQb2ludCB0aWxlZE1hcExvY2F0aW9uOwotICAgICAgICBpZiAodmlld0V4cG9zZWRS
ZWN0KCkpCi0gICAgICAgICAgICB0aWxlZE1hcExvY2F0aW9uID0gdmlld0V4cG9zZWRSZWN0KCku
dmFsdWUoKS5sb2NhdGlvbigpOwotCi0gICAgICAgIHRpbGVkTWFwTG9jYXRpb24gKz0gRmxvYXRT
aXplKGluZGljYXRvckluc2V0LCBpbmRpY2F0b3JJbnNldCk7Ci0gICAgICAgIGZsb2F0IHNjYWxl
ID0gMSAvIG1fd2ViUGFnZVByb3h5LnBhZ2VTY2FsZUZhY3RvcigpOwotICAgICAgICB0aWxlZE1h
cExvY2F0aW9uLnNjYWxlKHNjYWxlKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gdGlsZWRNYXBM
b2NhdGlvbjsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEZsb2F0UG9pbnQoaW5kaWNhdG9ySW5z
ZXQsIGluZGljYXRvckluc2V0ICsgbV93ZWJQYWdlUHJveHkudG9wQ29udGVudEluc2V0KCkpOwot
fQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZURlYnVnSW5k
aWNhdG9yUG9zaXRpb24oKQotewotICAgIGlmICghbV90aWxlTWFwSG9zdExheWVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBbbV90aWxlTWFwSG9zdExheWVyIHNldFBvc2l0aW9uOmluZGljYXRv
ckxvY2F0aW9uKCldOwotfQotCi1mbG9hdCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
OjppbmRpY2F0b3JTY2FsZShJbnRTaXplIGNvbnRlbnRzU2l6ZSkgY29uc3QKLXsKLSAgICAvLyBQ
aWNrIGEgZ29vZCBzY2FsZS4KLSAgICBJbnRTaXplIHZpZXdTaXplID0gbV93ZWJQYWdlUHJveHku
dmlld1NpemUoKTsKLQotICAgIGZsb2F0IHNjYWxlID0gMTsKLSAgICBpZiAoIWNvbnRlbnRzU2l6
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZmxvYXQgd2lkdGhTY2FsZSA9IHN0ZDo6bWluPGZsb2F0
Pigodmlld1NpemUud2lkdGgoKSAtIDIgKiBpbmRpY2F0b3JJbnNldCkgLyBjb250ZW50c1NpemUu
d2lkdGgoKSwgMC4wNSk7Ci0gICAgICAgIHNjYWxlID0gc3RkOjptaW4od2lkdGhTY2FsZSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHZpZXdTaXplLmhlaWdodCgpIC0gMiAqIGluZGljYXRvckluc2V0KSAv
IGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzY2FsZTsK
LX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVEZWJ1Z0lu
ZGljYXRvcigpCi17Ci0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBhbHNvIHVwZGF0ZSBsaXZlIGlu
Zm9ybWF0aW9uIGR1cmluZyBzY2FsZS4KLSAgICB1cGRhdGVEZWJ1Z0luZGljYXRvclBvc2l0aW9u
KCk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlRGVi
dWdJbmRpY2F0b3IoSW50U2l6ZSBjb250ZW50c1NpemUsIGJvb2wgcm9vdExheWVyQ2hhbmdlZCwg
ZmxvYXQgc2NhbGUsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKLXsKLSAgICAvLyBN
YWtlIHN1cmUgd2UncmUgdGhlIGxhc3Qgc3VibGF5ZXIuCi0gICAgQ0FMYXllciAqcm9vdExheWVy
ID0gYXNMYXllcihtX3JlbW90ZUxheWVyVHJlZUhvc3Qucm9vdExheWVyKCkpOwotICAgIFttX3Rp
bGVNYXBIb3N0TGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIFtyb290TGF5ZXIgYWRk
U3VibGF5ZXI6bV90aWxlTWFwSG9zdExheWVyLmdldCgpXTsKLQotICAgIC8vIFBpY2sgYSBnb29k
IHNjYWxlLgotICAgIEludFNpemUgdmlld1NpemUgPSBtX3dlYlBhZ2VQcm94eS52aWV3U2l6ZSgp
OwotCi0gICAgW21fdGlsZU1hcEhvc3RMYXllciBzZXRCb3VuZHM6RmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgY29udGVudHNTaXplKV07Ci0gICAgW21fdGlsZU1hcEhvc3RMYXllciBzZXRQb3NpdGlv
bjppbmRpY2F0b3JMb2NhdGlvbigpXTsKLSAgICBbbV90aWxlTWFwSG9zdExheWVyIHNldFRyYW5z
Zm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKHNjYWxlLCBzY2FsZSwgMSldOwotCi0gICAgaWYg
KHJvb3RMYXllckNoYW5nZWQpIHsKLSAgICAgICAgW21fdGlsZU1hcEhvc3RMYXllciBzZXRTdWJs
YXllcnM6QFtdXTsKLSAgICAgICAgW21fdGlsZU1hcEhvc3RMYXllciBhZGRTdWJsYXllcjphc0xh
eWVyKG1fZGVidWdJbmRpY2F0b3JMYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSldOwotICAgICAg
ICBbbV90aWxlTWFwSG9zdExheWVyIGFkZFN1YmxheWVyOm1fZXhwb3NlZFJlY3RJbmRpY2F0b3JM
YXllci5nZXQoKV07Ci0gICAgfQotICAgIAotICAgIGNvbnN0IGZsb2F0IGluZGljYXRvckJvcmRl
cldpZHRoID0gMTsKLSAgICBmbG9hdCBjb3VudGVyU2NhbGVkQm9yZGVyID0gaW5kaWNhdG9yQm9y
ZGVyV2lkdGggLyBzY2FsZTsKLQotICAgIFttX2V4cG9zZWRSZWN0SW5kaWNhdG9yTGF5ZXIgc2V0
Qm9yZGVyV2lkdGg6Y291bnRlclNjYWxlZEJvcmRlcl07Ci0KLSAgICBpZiAobV93ZWJQYWdlUHJv
eHkuZGVsZWdhdGVzU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IHNjYWxlZEV4cG9z
ZWRSZWN0OwotI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgc2NhbGVkRXhwb3NlZFJlY3QgPSBt
X3dlYlBhZ2VQcm94eS5leHBvc2VkQ29udGVudFJlY3QoKTsKLSNlbHNlCi0gICAgICAgIGlmICh2
aWV3RXhwb3NlZFJlY3QoKSkKLSAgICAgICAgICAgIHNjYWxlZEV4cG9zZWRSZWN0ID0gdmlld0V4
cG9zZWRSZWN0KCkudmFsdWUoKTsKLSAgICAgICAgZmxvYXQgc2NhbGUgPSAxIC8gbV93ZWJQYWdl
UHJveHkucGFnZVNjYWxlRmFjdG9yKCk7Ci0gICAgICAgIHNjYWxlZEV4cG9zZWRSZWN0LnNjYWxl
KHNjYWxlKTsKLSNlbmRpZgotICAgICAgICBbbV9leHBvc2VkUmVjdEluZGljYXRvckxheWVyIHNl
dFBvc2l0aW9uOnNjYWxlZEV4cG9zZWRSZWN0LmxvY2F0aW9uKCldOwotICAgICAgICBbbV9leHBv
c2VkUmVjdEluZGljYXRvckxheWVyIHNldEJvdW5kczpGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBz
Y2FsZWRFeHBvc2VkUmVjdC5zaXplKCkpXTsKLSAgICB9IGVsc2UgewotICAgICAgICBbbV9leHBv
c2VkUmVjdEluZGljYXRvckxheWVyIHNldFBvc2l0aW9uOnNjcm9sbFBvc2l0aW9uXTsKLSAgICAg
ICAgW21fZXhwb3NlZFJlY3RJbmRpY2F0b3JMYXllciBzZXRCb3VuZHM6RmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgdmlld1NpemUpXTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eTo6aW5pdGlhbGl6ZURlYnVnSW5kaWNhdG9yKCkKLXsKLSAgICBtX2RlYnVn
SW5kaWNhdG9yTGF5ZXJUcmVlSG9zdCA9IHN0ZDo6bWFrZV91bmlxdWU8UmVtb3RlTGF5ZXJUcmVl
SG9zdD4oKnRoaXMpOwotICAgIG1fZGVidWdJbmRpY2F0b3JMYXllclRyZWVIb3N0LT5zZXRJc0Rl
YnVnTGF5ZXJUcmVlSG9zdCh0cnVlKTsKLQotICAgIG1fdGlsZU1hcEhvc3RMYXllciA9IGFkb3B0
TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW21fdGlsZU1hcEhvc3RMYXllciBzZXRO
YW1lOkAiVGlsZSBtYXAgaG9zdCJdOwotICAgIFttX3RpbGVNYXBIb3N0TGF5ZXIgc2V0RGVsZWdh
dGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKLSAgICBbbV90
aWxlTWFwSG9zdExheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRaZXJvXTsKLSAgICBbbV90aWxl
TWFwSG9zdExheWVyIHNldE9wYWNpdHk6MC44XTsKLSAgICBbbV90aWxlTWFwSG9zdExheWVyIHNl
dE1hc2tzVG9Cb3VuZHM6WUVTXTsKLSAgICBbbV90aWxlTWFwSG9zdExheWVyIHNldEJvcmRlcldp
ZHRoOjJdOwotCi0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFj
ZVJlZigpOwotICAgIHsKLSAgICAgICAgY29uc3QgQ0dGbG9hdCBjb21wb25lbnRzW10gPSB7IDEs
IDEsIDEsIDAuNiB9OwotICAgICAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29sb3IgPSBhZG9w
dENGKENHQ29sb3JDcmVhdGUoY29sb3JTcGFjZSwgY29tcG9uZW50cykpOwotICAgICAgICBbbV90
aWxlTWFwSG9zdExheWVyIHNldEJhY2tncm91bmRDb2xvcjpjb2xvci5nZXQoKV07Ci0KLSAgICAg
ICAgY29uc3QgQ0dGbG9hdCBib3JkZXJDb21wb25lbnRzW10gPSB7IDAsIDAsIDAsIDEgfTsKLSAg
ICAgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGJvcmRlckNvbG9yID0gYWRvcHRDRihDR0NvbG9y
Q3JlYXRlKGNvbG9yU3BhY2UsIGJvcmRlckNvbXBvbmVudHMpKTsKLSAgICAgICAgW21fdGlsZU1h
cEhvc3RMYXllciBzZXRCb3JkZXJDb2xvcjpib3JkZXJDb2xvci5nZXQoKV07Ci0gICAgfQotICAg
IAotICAgIG1fZXhwb3NlZFJlY3RJbmRpY2F0b3JMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFs
bG9jXSBpbml0XSk7Ci0gICAgW21fZXhwb3NlZFJlY3RJbmRpY2F0b3JMYXllciBzZXREZWxlZ2F0
ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOwotICAgIFttX2V4
cG9zZWRSZWN0SW5kaWNhdG9yTGF5ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludFplcm9dOwotCi0g
ICAgewotICAgICAgICBjb25zdCBDR0Zsb2F0IGNvbXBvbmVudHNbXSA9IHsgMCwgMSwgMCwgMSB9
OwotICAgICAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29sb3IgPSBhZG9wdENGKENHQ29sb3JD
cmVhdGUoY29sb3JTcGFjZSwgY29tcG9uZW50cykpOwotICAgICAgICBbbV9leHBvc2VkUmVjdElu
ZGljYXRvckxheWVyIHNldEJvcmRlckNvbG9yOmNvbG9yLmdldCgpXTsKLSAgICB9Ci19Ci0KLXZv
aWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVmcmVzaERpc3BsYXkoKQot
ewotICAgIGlmICghbV93ZWJQYWdlUHJveHkuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUgIT0gTmVlZHNEaWRVcGRhdGUpIHsKLSAg
ICAgICAgbV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUgPSBNaXNzZWRDb21taXQ7Ci0jaWYgUExBVEZP
Uk0oSU9TKQotICAgICAgICBbbV9kaXNwbGF5TGlua0hhbmRsZXIgcGF1c2VdOwotI2VuZGlmCi0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUg
PSBEb2VzTm90TmVlZERpZFVwZGF0ZTsKLQotICAgIC8vIFdhaXRpbmcgZm9yIENBIHRvIGNvbW1p
dCBpcyBpbnN1ZmZpY2llbnQsIGJlY2F1c2UgdGhlIHJlbmRlciBzZXJ2ZXIgY2FuIHN0aWxsIGJl
Ci0gICAgLy8gdXNpbmcgb3VyIGJhY2tpbmcgc3RvcmUuIFdlIGNhbiBpbXByb3ZlIHRoaXMgYnkg
d2FpdGluZyBmb3IgdGhlIHJlbmRlciBzZXJ2ZXIgdG8gY29tbWl0Ci0gICAgLy8gaWYgd2UgZmlu
ZCBBUEkgdG8gZG8gc28sIGJ1dCBmb3Igbm93IHdlIHdpbGwgbWFrZSBleHRyYSBidWZmZXJzIGlm
IG5lZWQgYmUuCi0gICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OkRy
YXdpbmdBcmVhOjpEaWRVcGRhdGUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOwotCi0gICAg
bV9sYXN0VmlzaWJsZVRyYW5zYWN0aW9uSUQgPSBtX3RyYW5zYWN0aW9uSURGb3JQZW5kaW5nQ0FD
b21taXQ7Ci0KLSAgICBtX3dlYlBhZ2VQcm94eS5kaWRVcGRhdGVBY3Rpdml0eVN0YXRlKCk7Ci19
Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvckRpZFVwZGF0
ZUFjdGl2aXR5U3RhdGUoKQotewotICAgIC8vIFdlIG11c3Qgc2VuZCB0aGUgZGlkVXBkYXRlIG1l
c3NhZ2UgYmVmb3JlIGJsb2NraW5nIG9uIHRoZSBuZXh0IGNvbW1pdCwgb3RoZXJ3aXNlCi0gICAg
Ly8gd2UgY2FuIGJlIGd1YXJhbnRlZWQgdGhhdCB0aGUgbmV4dCBjb21taXQgd29uJ3QgY29tZSB1
bnRpbCBhZnRlciB0aGUgd2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHkgdGltZXMgb3V0Lgot
ICAgIGlmIChtX2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSAhPSBEb2VzTm90TmVlZERpZFVwZGF0ZSkK
LSAgICAgICAgZGlkUmVmcmVzaERpc3BsYXkoKTsKLQotICAgIHN0YXRpYyBTZWNvbmRzIGFjdGl2
aXR5U3RhdGVVcGRhdGVUaW1lb3V0ID0gW10gewotICAgICAgICBpZiAoaWQgdmFsdWUgPSBbW05T
VXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBvYmplY3RGb3JLZXk6QCJXZWJLaXRP
dmVycmlkZUFjdGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0Il0pCi0gICAgICAgICAgICByZXR1cm4g
U2Vjb25kcyhbdmFsdWUgZG91YmxlVmFsdWVdKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAg
ICAgcmV0dXJuIFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoNTAwKTsKLSNlbHNlCi0gICAgICAg
IHJldHVybiBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKDI1MCk7Ci0jZW5kaWYKLSAgICB9KCk7
Ci0gICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+d2FpdEZvckFuZERp
c3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHk6OkNvbW1pdExheWVyVHJlZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIGFjdGl2aXR5U3Rh
dGVVcGRhdGVUaW1lb3V0LCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5
bmNNZXNzYWdlQXJyaXZlcyk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eTo6ZGlzcGF0Y2hBZnRlckVuc3VyaW5nRHJhd2luZyhXVEY6OkZ1bmN0aW9uPHZvaWQgKENh
bGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCi17Ci0gICAgaWYgKCFtX3dl
YlBhZ2VQcm94eS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFj
a0Jhc2U6OkVycm9yOjpPd25lcldhc0ludmFsaWRhdGVkKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5n
QXJlYTo6QWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pLCBudWxscHRyKSksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKLX0K
LQotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpoaWRlQ29udGVudFVudGls
UGVuZGluZ1VwZGF0ZSgpCi17Ci0gICAgbV90cmFuc2FjdGlvbklERm9yVW5oaWRpbmdDb250ZW50
ID0gbmV4dExheWVyVHJlZVRyYW5zYWN0aW9uSUQoKTsKLSAgICBtX3JlbW90ZUxheWVyVHJlZUhv
c3QuZGV0YWNoUm9vdExheWVyKCk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eTo6aGlkZUNvbnRlbnRVbnRpbEFueVVwZGF0ZSgpCi17Ci0gICAgbV9yZW1vdGVMYXll
clRyZWVIb3N0LmRldGFjaFJvb3RMYXllcigpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHk6OnByZXBhcmVGb3JBcHBTdXNwZW5zaW9uKCkKLXsKLSAgICBtX3JlbW90
ZUxheWVyVHJlZUhvc3QubWFwQWxsSU9TdXJmYWNlQmFja2luZ1N0b3JlKCk7Ci19Ci0KLWJvb2wg
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6aGFzVmlzaWJsZUNvbnRlbnQoKSBjb25z
dAotewotICAgIHJldHVybiBtX3JlbW90ZUxheWVyVHJlZUhvc3Qucm9vdExheWVyKCk7Ci19Ci0K
LWJvb2wgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6aXNBbHdheXNPbkxvZ2dpbmdB
bGxvd2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlUHJveHkuaXNBbHdheXNPbkxv
Z2dpbmdBbGxvd2VkKCk7Ci19Ci0KLUxheWVyT3JWaWV3KiBSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5OjpsYXllcldpdGhJREZvclRlc3RpbmcodWludDY0X3QgbGF5ZXJJRCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9yZW1vdGVMYXllclRyZWVIb3N0LmxheWVyV2l0aElERm9yVGVzdGlu
ZyhsYXllcklEKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZUhvc3QuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNGE3MTFmOGI1NjdlZjdiYTlhZGIxZGE5MGY2NTYyMWUyMzc5OTczOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlSG9zdC5oCisrKyAvZGV2L251bGwKQEAg
LTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTGF5
ZXJSZXByZXNlbnRhdGlvbi5oIgotI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotT0JKQ19DTEFTUyBDQUFu
aW1hdGlvbjsKLU9CSkNfQ0xBU1MgV0tBbmltYXRpb25EZWxlZ2F0ZTsKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk7Ci1jbGFzcyBX
ZWJQYWdlUHJveHk7Ci0KLWNsYXNzIFJlbW90ZUxheWVyVHJlZUhvc3QgewotcHVibGljOgotICAg
IGV4cGxpY2l0IFJlbW90ZUxheWVyVHJlZUhvc3QoUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eSYpOwotICAgIHZpcnR1YWwgflJlbW90ZUxheWVyVHJlZUhvc3QoKTsKLQotICAgIExheWVy
T3JWaWV3ICpnZXRMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQp
IGNvbnN0OwotICAgIExheWVyT3JWaWV3ICpyb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jv
b3RMYXllcjsgfQotCi0gICAgc3RhdGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3Jt
TGF5ZXJJRCBsYXllcklEKENBTGF5ZXIqKTsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
cm9vdCBsYXllciBjaGFuZ2VkLgotICAgIGJvb2wgdXBkYXRlTGF5ZXJUcmVlKGNvbnN0IFJlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiwgZmxvYXQgaW5kaWNhdG9yU2NhbGVGYWN0b3IgID0gMSk7
Ci0KLSAgICB2b2lkIHNldElzRGVidWdMYXllclRyZWVIb3N0KGJvb2wgZmxhZykgeyBtX2lzRGVi
dWdMYXllclRyZWVIb3N0ID0gZmxhZzsgfQotICAgIGJvb2wgaXNEZWJ1Z0xheWVyVHJlZUhvc3Qo
KSBjb25zdCB7IHJldHVybiBtX2lzRGVidWdMYXllclRyZWVIb3N0OyB9Ci0KLSAgICB0eXBlZGVm
IEhhc2hNYXA8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklELCBSZXRhaW5Q
dHI8V0tBbmltYXRpb25EZWxlZ2F0ZT4+IExheWVyQW5pbWF0aW9uRGVsZWdhdGVNYXA7Ci0gICAg
TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZU1hcCYgYW5pbWF0aW9uRGVsZWdhdGVzKCkgeyByZXR1cm4g
bV9hbmltYXRpb25EZWxlZ2F0ZXM7IH0KLQotICAgIHZvaWQgYW5pbWF0aW9uRGlkU3RhcnQoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklELCBDQUFuaW1hdGlvbiAqLCBkb3Vi
bGUgc3RhcnRUaW1lKTsKLSAgICB2b2lkIGFuaW1hdGlvbkRpZEVuZChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyOjpQbGF0Zm9ybUxheWVySUQsIENBQW5pbWF0aW9uICopOwotCi0gICAgdm9pZCBjbGVh
ckxheWVycygpOwotCi0gICAgLy8gRGV0YWNoIHRoZSByb290IGxheWVyOyBpdCB3aWxsIGJlIHJl
YXR0YWNoZWQgdXBvbiB0aGUgbmV4dCBpbmNvbWluZyBjb21taXQuCi0gICAgdm9pZCBkZXRhY2hS
b290TGF5ZXIoKTsKLQotICAgIC8vIFR1cm4gYWxsIENBTWFjaFBvcnQgb2JqZWN0cyBpbiBsYXll
ciBjb250ZW50cyBpbnRvIGFjdHVhbCBJT1N1cmZhY2VzLgotICAgIC8vIFRoaXMgYXZvaWRzIGtl
ZXBpbmcgYW4gb3V0c3RhbmRpbmcgSW5Vc2UgcmVmZXJlbmNlIHdoZW4gc3VzcGVuZGVkLgotICAg
IHZvaWQgbWFwQWxsSU9TdXJmYWNlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICBMYXllck9yVmlldyog
bGF5ZXJXaXRoSURGb3JUZXN0aW5nKHVpbnQ2NF90KSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBM
YXllck9yVmlldyAqY3JlYXRlTGF5ZXIoY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OkxheWVyQ3JlYXRpb25Qcm9wZXJ0aWVzJiwgY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b246OkxheWVyUHJvcGVydGllcyopOwotICAgIHN0YXRpYyB2b2lkIHNldExheWVySUQoQ0FMYXll
ciAqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQpOwotCi0gICAgdm9p
ZCBsYXllcldpbGxCZVJlbW92ZWQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEKTsKLQotICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkmIG1fZHJhd2luZ0Fy
ZWE7Ci0gICAgTGF5ZXJPclZpZXcgKm1fcm9vdExheWVyOwotICAgIEhhc2hNYXA8V2ViQ29yZTo6
R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklELCBSZXRhaW5QdHI8TGF5ZXJPclZpZXc+PiBt
X2xheWVyczsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5
ZXJJRCwgUmV0YWluUHRyPFdLQW5pbWF0aW9uRGVsZWdhdGU+PiBtX2FuaW1hdGlvbkRlbGVnYXRl
czsKLSAgICBib29sIG1faXNEZWJ1Z0xheWVyVHJlZUhvc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9SZW1vdGVM
YXllclRyZWVIb3N0Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVy
VHJlZUhvc3QubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3M2Y0ZGM5OWJmNDQz
YTA5MDk4N2Q1OTFiMzg5NDg0OWJkNzE2YjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVy
VHJlZUhvc3QubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMTMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlSG9zdC5oIgotCi0j
aW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5LmgiCi0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaCIKLSNpbXBv
cnQgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCi0jaW1wb3J0ICJTaGFyZWFibGVCaXRt
YXAuaCIKLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5
LmgiCi0jaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Q0cuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSU9TdXJmYWNlLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQWN0aW9u
RGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZh
Y2UuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgotCi0jaWYgUExB
VEZPUk0oSU9TKQotI2ltcG9ydCA8VUlLaXQvVUlWaWV3Lmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0jZGVmaW5lIFJFTEVBU0Vf
TE9HX0lGX0FMTE9XRUQoLi4uKSBSRUxFQVNFX0xPR19JRihtX2RyYXdpbmdBcmVhLmlzQWx3YXlz
T25Mb2dnaW5nQWxsb3dlZCgpLCBWaWV3U3RhdGUsIF9fVkFfQVJHU19fKQotCi1SZW1vdGVMYXll
clRyZWVIb3N0OjpSZW1vdGVMYXllclRyZWVIb3N0KFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkmIGRyYXdpbmdBcmVhKQotICAgIDogbV9kcmF3aW5nQXJlYShkcmF3aW5nQXJlYSkKLSAg
ICAsIG1fcm9vdExheWVyKG51bGxwdHIpCi0gICAgLCBtX2lzRGVidWdMYXllclRyZWVIb3N0KGZh
bHNlKQotewotfQotCi1SZW1vdGVMYXllclRyZWVIb3N0Ojp+UmVtb3RlTGF5ZXJUcmVlSG9zdCgp
Ci17Ci0gICAgZm9yIChhdXRvJiBkZWxlZ2F0ZSA6IG1fYW5pbWF0aW9uRGVsZWdhdGVzLnZhbHVl
cygpKQotICAgICAgICBbZGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07Ci0KLSAgICBjbGVhckxh
eWVycygpOwotfQotCi1ib29sIFJlbW90ZUxheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVyVHJlZShj
b25zdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGZsb2F0IGluZGlj
YXRvclNjYWxlRmFjdG9yKQotewotICAgIGZvciAoY29uc3QgYXV0byYgY3JlYXRlZExheWVyIDog
dHJhbnNhY3Rpb24uY3JlYXRlZExheWVycygpKSB7Ci0gICAgICAgIGNvbnN0IFJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXMqIHByb3BlcnRpZXMgPSB0cmFuc2FjdGlv
bi5jaGFuZ2VkTGF5ZXJQcm9wZXJ0aWVzKCkuZ2V0KGNyZWF0ZWRMYXllci5sYXllcklEKTsKLSAg
ICAgICAgY3JlYXRlTGF5ZXIoY3JlYXRlZExheWVyLCBwcm9wZXJ0aWVzKTsKLSAgICB9Ci0KLSAg
ICBib29sIHJvb3RMYXllckNoYW5nZWQgPSBmYWxzZTsKLSAgICBMYXllck9yVmlldyAqcm9vdExh
eWVyID0gZ2V0TGF5ZXIodHJhbnNhY3Rpb24ucm9vdExheWVySUQoKSk7Ci0gICAgCi0gICAgaWYg
KCFyb290TGF5ZXIpCi0gICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIFJlbW90ZUxh
eWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVyVHJlZSAtIGZhaWxlZCB0byBmaW5kIHJvb3QgbGF5ZXIg
d2l0aCBJRCAlbGx1IiwgdGhpcywgdHJhbnNhY3Rpb24ucm9vdExheWVySUQoKSk7Ci0KLSAgICBp
ZiAobV9yb290TGF5ZXIgIT0gcm9vdExheWVyKSB7Ci0gICAgICAgIG1fcm9vdExheWVyID0gcm9v
dExheWVyOwotICAgICAgICByb290TGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB0
eXBlZGVmIHN0ZDo6cGFpcjxHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQsIEdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gTGF5ZXJJRFBhaXI7Ci0gICAgVmVjdG9yPExheWVySURQ
YWlyPiBjbG9uZXNUb1VwZGF0ZTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAvLyBDYW4ndCB1
c2UgdGhlIGlPUyBjb2RlIG9uIG1hY09TIHlldDogcmRhcjovL3Byb2JsZW0vMzEyNDc3MzAKLSAg
ICBhdXRvIGxheWVyQ29udGVudHNUeXBlID0gUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OkxheWVy
Q29udGVudHNUeXBlOjpJT1N1cmZhY2U7Ci0jZWxzZQotICAgIGF1dG8gbGF5ZXJDb250ZW50c1R5
cGUgPSBtX2RyYXdpbmdBcmVhLmhhc0RlYnVnSW5kaWNhdG9yKCkgPyBSZW1vdGVMYXllckJhY2tp
bmdTdG9yZTo6TGF5ZXJDb250ZW50c1R5cGU6OklPU3VyZmFjZSA6IFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlOjpMYXllckNvbnRlbnRzVHlwZTo6Q0FNYWNoUG9ydDsKLSNlbmRpZgotICAgIAotICAg
IGZvciAoYXV0byYgY2hhbmdlZExheWVyIDogdHJhbnNhY3Rpb24uY2hhbmdlZExheWVyUHJvcGVy
dGllcygpKSB7Ci0gICAgICAgIGF1dG8gbGF5ZXJJRCA9IGNoYW5nZWRMYXllci5rZXk7Ci0gICAg
ICAgIGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXMmIHBy
b3BlcnRpZXMgPSAqY2hhbmdlZExheWVyLnZhbHVlOwotCi0gICAgICAgIExheWVyT3JWaWV3ICps
YXllciA9IGdldExheWVyKGxheWVySUQpOwotICAgICAgICBBU1NFUlQobGF5ZXIpOwotCi0gICAg
ICAgIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllcjo6UmVsYXRlZExheWVyTWFwIHJlbGF0
ZWRMYXllcnM7Ci0gICAgICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVt
b3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNoaWxkcmVuQ2hhbmdlZCkgewotICAgICAgICAgICAg
Zm9yIChhdXRvJiBjaGlsZCA6IHByb3BlcnRpZXMuY2hpbGRyZW4pCi0gICAgICAgICAgICAgICAg
cmVsYXRlZExheWVycy5zZXQoY2hpbGQsIGdldExheWVyKGNoaWxkKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uOjpNYXNrTGF5ZXJDaGFuZ2VkICYmIHByb3BlcnRpZXMubWFza0xheWVySUQp
Ci0gICAgICAgICAgICByZWxhdGVkTGF5ZXJzLnNldChwcm9wZXJ0aWVzLm1hc2tMYXllcklELCBn
ZXRMYXllcihwcm9wZXJ0aWVzLm1hc2tMYXllcklEKSk7Ci0KLSAgICAgICAgaWYgKHByb3BlcnRp
ZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q2xvbmVk
Q29udGVudHNDaGFuZ2VkICYmIHByb3BlcnRpZXMuY2xvbmVkTGF5ZXJJRCkKLSAgICAgICAgICAg
IGNsb25lc1RvVXBkYXRlLmFwcGVuZChMYXllcklEUGFpcihsYXllcklELCBwcm9wZXJ0aWVzLmNs
b25lZExheWVySUQpKTsKLQotICAgICAgICBpZiAobV9pc0RlYnVnTGF5ZXJUcmVlSG9zdCkgewot
ICAgICAgICAgICAgUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyOjphcHBseVByb3BlcnRp
ZXMobGF5ZXIsIHRoaXMsIHByb3BlcnRpZXMsIHJlbGF0ZWRMYXllcnMsIGxheWVyQ29udGVudHNU
eXBlKTsKLQotICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Qm9yZGVyV2lkdGhDaGFuZ2VkKQotICAgICAgICAg
ICAgICAgIGFzTGF5ZXIobGF5ZXIpLmJvcmRlcldpZHRoID0gcHJvcGVydGllcy5ib3JkZXJXaWR0
aCAvIGluZGljYXRvclNjYWxlRmFjdG9yOwotICAgICAgICAgICAgYXNMYXllcihsYXllcikubWFz
a3NUb0JvdW5kcyA9IGZhbHNlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFJlbW90ZUxh
eWVyVHJlZVByb3BlcnR5QXBwbGllcjo6YXBwbHlQcm9wZXJ0aWVzKGxheWVyLCB0aGlzLCBwcm9w
ZXJ0aWVzLCByZWxhdGVkTGF5ZXJzLCBsYXllckNvbnRlbnRzVHlwZSk7Ci0gICAgfQotICAgIAot
ICAgIGZvciAoY29uc3QgYXV0byYgbGF5ZXJQYWlyIDogY2xvbmVzVG9VcGRhdGUpIHsKLSAgICAg
ICAgTGF5ZXJPclZpZXcgKmxheWVyID0gZ2V0TGF5ZXIobGF5ZXJQYWlyLmZpcnN0KTsKLSAgICAg
ICAgTGF5ZXJPclZpZXcgKmNsb25lZExheWVyID0gZ2V0TGF5ZXIobGF5ZXJQYWlyLnNlY29uZCk7
Ci0gICAgICAgIGFzTGF5ZXIobGF5ZXIpLmNvbnRlbnRzID0gYXNMYXllcihjbG9uZWRMYXllciku
Y29udGVudHM7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiBkZXN0cm95ZWRMYXllciA6IHRyYW5z
YWN0aW9uLmRlc3Ryb3llZExheWVycygpKQotICAgICAgICBsYXllcldpbGxCZVJlbW92ZWQoZGVz
dHJveWVkTGF5ZXIpOwotCi0gICAgLy8gRHJvcCB0aGUgY29udGVudHMgb2YgYW55IGxheWVycyB3
aGljaCB3ZXJlIHVucGFyZW50ZWQ7IHRoZSBXZWIgcHJvY2VzcyB3aWxsIHJlLXNlbmQKLSAgICAv
LyB0aGUgYmFja2luZyBzdG9yZSBpbiB0aGUgY29tbWl0IHRoYXQgcmVwYXJlbnRzIHRoZW0uCi0g
ICAgZm9yIChhdXRvJiBuZXdseVVucmVhY2hhYmxlTGF5ZXJJRCA6IHRyYW5zYWN0aW9uLmxheWVy
SURzV2l0aE5ld2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmUoKSkKLSAgICAgICAgYXNMYXllcihn
ZXRMYXllcihuZXdseVVucmVhY2hhYmxlTGF5ZXJJRCkpLmNvbnRlbnRzID0gbnVsbHB0cjsKLQot
ICAgIHJldHVybiByb290TGF5ZXJDaGFuZ2VkOwotfQotCi1MYXllck9yVmlldyAqUmVtb3RlTGF5
ZXJUcmVlSG9zdDo6Z2V0TGF5ZXIoR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVy
SUQpIGNvbnN0Ci17Ci0gICAgaWYgKCFsYXllcklEKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgcmV0dXJuIG1fbGF5ZXJzLmdldChsYXllcklEKS5nZXQoKTsKLX0KLQotdm9pZCBSZW1vdGVM
YXllclRyZWVIb3N0OjpsYXllcldpbGxCZVJlbW92ZWQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6
UGxhdGZvcm1MYXllcklEIGxheWVySUQpCi17Ci0gICAgYXV0byBpdGVyID0gbV9hbmltYXRpb25E
ZWxlZ2F0ZXMuZmluZChsYXllcklEKTsKLSAgICBpZiAoaXRlciAhPSBtX2FuaW1hdGlvbkRlbGVn
YXRlcy5lbmQoKSkgewotICAgICAgICBbaXRlci0+dmFsdWUgaW52YWxpZGF0ZV07Ci0gICAgICAg
IG1fYW5pbWF0aW9uRGVsZWdhdGVzLnJlbW92ZShpdGVyKTsKLSAgICB9Ci0gICAgbV9sYXllcnMu
cmVtb3ZlKGxheWVySUQpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZUhvc3Q6OmFuaW1hdGlv
bkRpZFN0YXJ0KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklE
LCBDQUFuaW1hdGlvbiAqYW5pbWF0aW9uLCBkb3VibGUgc3RhcnRUaW1lKQotewotICAgIENBTGF5
ZXIgKmxheWVyID0gYXNMYXllcihnZXRMYXllcihsYXllcklEKSk7Ci0gICAgaWYgKCFsYXllcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGFuaW1hdGlvbktleTsKLSAgICBmb3IgKE5T
U3RyaW5nICprZXkgaW4gW2xheWVyIGFuaW1hdGlvbktleXNdKSB7Ci0gICAgICAgIGlmIChbbGF5
ZXIgYW5pbWF0aW9uRm9yS2V5OmtleV0gPT0gYW5pbWF0aW9uKSB7Ci0gICAgICAgICAgICBhbmlt
YXRpb25LZXkgPSBrZXk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmICghYW5pbWF0aW9uS2V5LmlzRW1wdHkoKSkKLSAgICAgICAgbV9kcmF3aW5nQXJlYS5h
Y2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KGxheWVySUQsIGFuaW1hdGlvbktleSwgc3RhcnRU
aW1lKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVIb3N0OjphbmltYXRpb25EaWRFbmQoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQsIENBQW5pbWF0aW9u
ICphbmltYXRpb24pCi17Ci0gICAgQ0FMYXllciAqbGF5ZXIgPSBhc0xheWVyKGdldExheWVyKGxh
eWVySUQpKTsKLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcg
YW5pbWF0aW9uS2V5OwotICAgIGZvciAoTlNTdHJpbmcgKmtleSBpbiBbbGF5ZXIgYW5pbWF0aW9u
S2V5c10pIHsKLSAgICAgICAgaWYgKFtsYXllciBhbmltYXRpb25Gb3JLZXk6a2V5XSA9PSBhbmlt
YXRpb24pIHsKLSAgICAgICAgICAgIGFuaW1hdGlvbktleSA9IGtleTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFhbmltYXRpb25LZXkuaXNFbXB0eSgp
KQotICAgICAgICBtX2RyYXdpbmdBcmVhLmFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKGxheWVy
SUQsIGFuaW1hdGlvbktleSk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlSG9zdDo6Y2xlYXJM
YXllcnMoKQotewotICAgIGZvciAoYXV0byYgaWRMYXllciA6IG1fbGF5ZXJzKSB7Ci0gICAgICAg
IG1fYW5pbWF0aW9uRGVsZWdhdGVzLnJlbW92ZShpZExheWVyLmtleSk7Ci0jaWYgUExBVEZPUk0o
SU9TKQotICAgICAgICBbaWRMYXllci52YWx1ZS5nZXQoKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsK
LSNlbHNlCi0gICAgICAgIFthc0xheWVyKGlkTGF5ZXIudmFsdWUuZ2V0KCkpIHJlbW92ZUZyb21T
dXBlcmxheWVyXTsKLSNlbmRpZgotICAgIH0KLQotICAgIG1fbGF5ZXJzLmNsZWFyKCk7Ci0gICAg
bV9yb290TGF5ZXIgPSBudWxscHRyOwotfQotCi1MYXllck9yVmlldyogUmVtb3RlTGF5ZXJUcmVl
SG9zdDo6bGF5ZXJXaXRoSURGb3JUZXN0aW5nKHVpbnQ2NF90IGxheWVySUQpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldExheWVyKGxheWVySUQpOwotfQotCi1zdGF0aWMgTlNTdHJpbmcqIGNvbnN0
IFdLTGF5ZXJJRFByb3BlcnR5S2V5ID0gQCJXS0xheWVySUQiOwotCi12b2lkIFJlbW90ZUxheWVy
VHJlZUhvc3Q6OnNldExheWVySUQoQ0FMYXllciAqbGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklEKQotewotICAgIFtsYXllciBzZXRWYWx1ZTpbTlNO
dW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkTG9uZ0xvbmc6bGF5ZXJJRF0gZm9yS2V5OldLTGF5ZXJJ
RFByb3BlcnR5S2V5XTsKLX0KLQotV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEIFJlbW90ZUxheWVyVHJlZUhvc3Q6OmxheWVySUQoQ0FMYXllciogbGF5ZXIpCi17Ci0gICAg
cmV0dXJuIFtbbGF5ZXIgdmFsdWVGb3JLZXk6V0tMYXllcklEUHJvcGVydHlLZXldIHVuc2lnbmVk
TG9uZ0xvbmdWYWx1ZV07Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9TKQotTGF5ZXJPclZpZXcgKlJl
bW90ZUxheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyKGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uOjpMYXllckNyZWF0aW9uUHJvcGVydGllcyYgcHJvcGVydGllcywgY29uc3QgUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyopCi17Ci0gICAgUmV0YWluUHRy
PENBTGF5ZXI+JiBsYXllciA9IG1fbGF5ZXJzLmFkZChwcm9wZXJ0aWVzLmxheWVySUQsIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIEFTU0VSVCghbGF5ZXIpOwotCi0gICAgc3dpdGNo
IChwcm9wZXJ0aWVzLnR5cGUpIHsKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
TGF5ZXI6Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVdlYkxheWVyOgotICAg
IGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVSb290TGF5ZXI6Ci0gICAgY2FzZSBQbGF0
Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVNpbXBsZUxheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxh
eWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdMYXllcjoKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlUGFnZVRpbGVkQmFja2luZ0xheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxh
eWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXI6Ci0gICAgY2FzZSBQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZVNjcm9sbGluZ0xheWVyOgotICAgICAgICBsYXllciA9IGFkb3B0TlMo
W1tDQUxheWVyIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZv
cm1DQUxheWVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllcjoKLSAgICAgICAgbGF5ZXIgPSBhZG9w
dE5TKFtbQ0FUcmFuc2Zvcm1MYXllciBhbGxvY10gaW5pdF0pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlQmFja2Ryb3BMYXllcjoKLSAgICBjYXNl
IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGlnaHRTeXN0ZW1CYWNrZHJvcExheWVyOgotICAg
IGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVEYXJrU3lzdGVtQmFja2Ryb3BMYXllcjoK
LSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAgICBsYXllciA9IGFkb3B0TlMoW1tD
QUJhY2tkcm9wTGF5ZXIgYWxsb2NdIGluaXRdKTsKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBsYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0
XSk7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6Okxh
eWVyVHlwZUN1c3RvbToKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlQVZQbGF5
ZXJMYXllcjoKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlQ29udGVudHNQcm92
aWRlZExheWVyOgotICAgICAgICBpZiAoIW1faXNEZWJ1Z0xheWVyVHJlZUhvc3QpCi0gICAgICAg
ICAgICBsYXllciA9IFdLTWFrZVJlbmRlckxheWVyKHByb3BlcnRpZXMuaG9zdGluZ0NvbnRleHRJ
RCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIg
YWxsb2NdIGluaXRdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZVNoYXBlTGF5ZXI6Ci0gICAgICAgIGxheWVyID0gYWRvcHROUyhbW0NBU2hhcGVM
YXllciBhbGxvY10gaW5pdF0pOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBbbGF5ZXIgc2V0RGVsZWdhdGU6
W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKLSAgICBzZXRMYXll
cklEKGxheWVyLmdldCgpLCBwcm9wZXJ0aWVzLmxheWVySUQpOwotCi0gICAgcmV0dXJuIGxheWVy
LmdldCgpOwotfQotI2VuZGlmCi0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlSG9zdDo6ZGV0YWNoUm9v
dExheWVyKCkKLXsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgW21fcm9vdExheWVyIHJlbW92ZUZy
b21TdXBlcnZpZXddOwotI2Vsc2UKLSAgICBbYXNMYXllcihtX3Jvb3RMYXllcikgcmVtb3ZlRnJv
bVN1cGVybGF5ZXJdOwotI2VuZGlmCi0gICAgbV9yb290TGF5ZXIgPSBudWxscHRyOwotfQotCi0j
aWYgVVNFKElPU1VSRkFDRSkKLXN0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5TWFwSU9TdXJmYWNlQmFj
a2luZ1N0b3JlKENBTGF5ZXIgKmxheWVyKQotewotICAgIGlmIChsYXllci5jb250ZW50cyAmJiBD
RkdldFR5cGVJRChsYXllci5jb250ZW50cykgPT0gQ0FNYWNoUG9ydEdldFR5cGVJRCgpKSB7Ci0g
ICAgICAgIE1hY2hTZW5kUmlnaHQgcG9ydCA9IE1hY2hTZW5kUmlnaHQ6OmNyZWF0ZShDQU1hY2hQ
b3J0R2V0UG9ydCgoQ0FNYWNoUG9ydFJlZilsYXllci5jb250ZW50cykpOwotICAgICAgICBhdXRv
IHN1cmZhY2UgPSBXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21TZW5kUmlnaHQoV1RGTW92
ZShwb3J0KSwgc1JHQkNvbG9yU3BhY2VSZWYoKSk7Ci0gICAgICAgIGxheWVyLmNvbnRlbnRzID0g
c3VyZmFjZSA/IHN1cmZhY2UtPmFzTGF5ZXJDb250ZW50cygpIDogbmlsOwotICAgIH0KLQotICAg
IGZvciAoQ0FMYXllciAqc3VibGF5ZXIgaW4gbGF5ZXIuc3VibGF5ZXJzKQotICAgICAgICByZWN1
cnNpdmVseU1hcElPU3VyZmFjZUJhY2tpbmdTdG9yZShzdWJsYXllcik7Ci19Ci0jZW5kaWYKLQot
dm9pZCBSZW1vdGVMYXllclRyZWVIb3N0OjptYXBBbGxJT1N1cmZhY2VCYWNraW5nU3RvcmUoKQot
ewotI2lmIFVTRShJT1NVUkZBQ0UpCi0gICAgcmVjdXJzaXZlbHlNYXBJT1N1cmZhY2VCYWNraW5n
U3RvcmUoYXNMYXllcihtX3Jvb3RMYXllcikpOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggZGRmMzA5MzFmNzg3YmVjMjkzMTIyZmI2ZGY2MDI4NGQyN2Y0YTk2OS4uMjY3MDMw
OTEwNDg1YWFjNTRmZGIyNjk4YjE3YmNjYzMyOWVhN2ZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjY5LDkgKzIyNjksOSBAQAog
CQkwODlDMTY2N0ZFODQxMTU4QzAyQUFDMDcgLyogRW5nbGlzaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxp
c3Quc3RyaW5nczsgbmFtZSA9IEVuZ2xpc2g7IHBhdGggPSBFbmdsaXNoLmxwcm9qL0luZm9QbGlz
dC5zdHJpbmdzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA4Q0Y1MTFENjNDMTNB
MDBCNDhERjEgLyogV0tGb3JtU2VsZWN0UGlja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdLRm9ybVNlbGVjdFBpY2tlci5oOyBwYXRoID0gaW9zL2Zvcm1zL1dLRm9ybVNl
bGVjdFBpY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA4Q0Y1MzFENjND
MTQwMDBCNDhERjEgLyogV0tGb3JtU2VsZWN0UG9wb3Zlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXS0Zvcm1TZWxlY3RQb3BvdmVyLmg7IHBhdGggPSBpb3MvZm9ybXMvV0tG
b3JtU2VsZWN0UG9wb3Zlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjBDMzY1
NzE4QzA1MUJBMDBGNjA3RDcgLyogUmVtb3RlTGF5ZXJUcmVlSG9zdElPUy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFJlbW90ZUxheWVyVHJlZUhvc3RJT1MubW07
IHBhdGggPSBpb3MvUmVtb3RlTGF5ZXJUcmVlSG9zdElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYwQzM2NTcxOEMwNTFCQTAwRjYwN0Q3IC8qIFJlbW90ZUxheWVyVHJlZUhv
c3RJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVM
YXllclRyZWVIb3N0SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDMzY1
OTE4QzA1NTU4MDBGNjA3RDcgLyogTGF5ZXJSZXByZXNlbnRhdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBMYXllclJlcHJlc2VudGF0aW9uLmg7IHBhdGggPSBVSVByb2Nl
c3MvQ29jb2EvTGF5ZXJSZXByZXNlbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7
IH07Ci0JCTBGMEMzNjVCMThDMDVDQTEwMEY2MDdENyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbTsgcGF0aCA9IGlvcy9SZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjBDMzY1QjE4QzA1Q0ExMDBGNjA3RDcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMEMzNjVEMThDMTEwQTUwMEY2MDdENyAvKiBMYXllclJlcHJlc2VudGF0aW9u
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTGF5ZXJSZXByZXNl
bnRhdGlvbi5tbTsgcGF0aCA9IGlvcy9MYXllclJlcHJlc2VudGF0aW9uLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjE3NEFBMjE0MkE0Q0I2MDAzOTI1MEYgLyogQVBJR2VvbWV0
cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJR2VvbWV0cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNzRBQTYxNDJBQUM2MTAwMzkyNTBGIC8qIFdL
R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tHZW9t
ZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjgwLDEwICsyMjgwLDEw
IEBACiAJCTBGNTk0NzhEMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDc4RTE4N0Iz
QjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubWVzc2FnZXMu
aW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTk0NzhGMTg3QjNCM0EwMDQzNzg1
NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRjU5NDc5NDE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcDsgcGF0aCA9IFNj
cm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMEY1OTQ3OTUxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oOyBwYXRoID0gU2Nyb2xsaW5nL1JlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEY1OTQ3OTYxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ1RyZWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVtb3RlU2Nyb2xsaW5nVHJlZS5j
cHA7IHBhdGggPSBTY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nVHJlZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGNTk0Nzk3MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3Jv
bGxpbmdUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbW90ZVNjcm9s
bGluZ1RyZWUuaDsgcGF0aCA9IFNjcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdUcmVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTk0Nzk0MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjU5NDc5NTE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNTk0Nzk2MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdU
cmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVNjcm9s
bGluZ1RyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU5NDc5NzE4N0Iz
QjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNTk0N0ExMTg3QjNCN0QwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclRyYW5zYWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwOyBwYXRoID0gU2Ny
b2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDdBMjE4N0IzQjdEMDA0Mzc4NTcgLyogUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmg7IHBhdGgg
PSBTY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDdBNTE4N0I1MTc2MDA0Mzc4NTcgLyogUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdl
UmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5NCw4ICsyMjk0
LDggQEAKIAkJMEY3MDdDNzkxQTFGRUVBMzAwREE3QTQ1IC8qIFJlbW90ZUxheWVyVHJlZVNjcm9s
bGluZ1BlcmZvcm1hbmNlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY4NTBGRTQxRUQ3QzM5RjAwRkI3N0E3IC8qIFdlYlBlcmZvcm1hbmNl
TG9nZ2luZ0NsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjg1MEZFNTFFRDdDMzlGMDBGQjc3QTcgLyogV2ViUGVyZm9ybWFuY2VMb2dnaW5nQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBlcmZvcm1hbmNlTG9n
Z2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkzMUMxQTE4QzU3
MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TLmg7IHBhdGggPSBTY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5MzFD
MUIxOEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJ
T1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tOyBwYXRoID0gU2Nyb2xsaW5nL2lvcy9TY3Jv
bGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjkzMUMxQTE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOTMxQzFCMThDNTcxMTkwMERCQTdDMyAvKiBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNjU5MjIxMjA4QjREQjAwNDQ4MTZDIC8qIERyYXdp
bmdBcmVhSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEcmF3aW5nQXJl
YUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDg1NkUxODdDRTBBOTAw
NzgwRDg2IC8qIF9faW5pdF9fLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gX19pbml0X18ucHk7IHBh
dGggPSB3ZWJraXQvX19pbml0X18ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QzA4NTZGMTg3Q0UwQTkwMDc4MEQ4NiAvKiBtZXNzYWdlcy5weSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9
IG1lc3NhZ2VzLnB5OyBwYXRoID0gd2Via2l0L21lc3NhZ2VzLnB5OyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDYzMSwxOCArNDYzMSw2IEBACiAJCQl0YWJXaWR0aCA9IDg7CiAJCQl1
c2VzVGFicyA9IDA7CiAJCX07Ci0JCTBGNTk0NzkzMTg3QjNCNEMwMDQzNzg1NyAvKiBTY3JvbGxp
bmcgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTBGOTMx
QzE5MThDNTcxMTEwMERCQTdDMyAvKiBpb3MgKi8sCi0JCQkJMEY1OTQ3OTQxODdCM0I2MDAwNDM3
ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3BwICovLAotCQkJCTBGNTk0
Nzk1MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Lmgg
Ki8sCi0JCQkJMEY1OTQ3OTYxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ1RyZWUu
Y3BwICovLAotCQkJCTBGNTk0Nzk3MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdU
cmVlLmggKi8sCi0JCQkpOwotCQkJbmFtZSA9IFNjcm9sbGluZzsKLQkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7Ci0JCX07CiAJCTBGNTk0N0EwMTg3QjNCNzEwMDQzNzg1NyAvKiBTY3JvbGxpbmcg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNDY1MiwxNSAr
NDY0MCw2IEBACiAJCQluYW1lID0gU2Nyb2xsaW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKIAkJfTsKLQkJMEY5MzFDMTkxOEM1NzExMTAwREJBN0MzIC8qIGlvcyAqLyA9IHsKLQkJCWlz
YSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMEY5MzFDMUExOEM1NzExOTAwREJB
N0MzIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaCAqLywKLQkJCQkw
RjkzMUMxQjE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5n
Tm9kZUlPUy5tbSAqLywKLQkJCSk7Ci0JCQluYW1lID0gaW9zOwotCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKLQkJfTsKIAkJMTA1OEM3QjBGRUE1NTg1RTExQ0EyQ0JCIC8qIExpbmtlZCBGcmFt
ZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTUy
NzEsOCArNTI1MCw2IEBACiAJCQkJQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5oICovLAogCQkJCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCiAJCQkJQ0RBMjlB
MUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLywK
LQkJCQkwRjcwN0M3OTFBMUZFRUEzMDBEQTdBNDUgLyogUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5n
UGVyZm9ybWFuY2VEYXRhLmggKi8sCi0JCQkJMEY3MDdDNzcxQTFGRUU4MzAwREE3QTQ1IC8qIFJl
bW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5tbSAqLywKIAkJCQkxQTAwMkQ0
NzE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lvblN0YXRlQ29kaW5nLmggKi8sCiAJCQkJMUEwMDJE
NDYxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNlc3Npb25TdGF0ZUNvZGluZy5tbSAqLywKIAkJCQkxQUZF
NDM2NDE4QjZDMDgxMDA5QzdBNDggLyogVUlEZWxlZ2F0ZS5oICovLApAQCAtNTQ0OSw2ICs1NDI2
LDM2IEBACiAJCQlwYXRoID0gUmVtb3RlTGF5ZXJUcmVlOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKIAkJfTsKKwkJMkQxNTUxQTkxRjVBOUI0MjAwMDZFM0ZFIC8qIFJlbW90ZUxheWVyVHJl
ZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMkQxNTUx
QUExRjVBOUJBNzAwMDZFM0ZFIC8qIGlvcyAqLywKKwkJCQkxQUIxNkFFMDE2NDg2NTZEMDAyOTBE
NjIgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oICovLAorCQkJCTBGRjI0QTJG
MTg3OUU0RkUwMDNBQkYwQyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1lc3Nh
Z2VzLmluICovLAorCQkJCTFBQjE2QURGMTY0ODY1NkQwMDI5MEQ2MiAvKiBSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5Lm1tICovLAorCQkJCTFBQTNENzVBMTY1MUI0NEYwMDg3MTNEMCAv
KiBSZW1vdGVMYXllclRyZWVIb3N0LmggKi8sCisJCQkJMUFBM0Q3NTkxNjUxQjQ0RjAwODcxM0Qw
IC8qIFJlbW90ZUxheWVyVHJlZUhvc3QubW0gKi8sCisJCQkJMEY3MDdDNzkxQTFGRUVBMzAwREE3
QTQ1IC8qIFJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5oICovLAorCQkJ
CTBGNzA3Qzc3MUExRkVFODMwMERBN0E0NSAvKiBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJm
b3JtYW5jZURhdGEubW0gKi8sCisJCQkJMEY1OTQ3OTQxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuY3BwICovLAorCQkJCTBGNTk0Nzk1MTg3QjNCNjAw
MDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmggKi8sCisJCQkJMEY1
OTQ3OTYxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ1RyZWUuY3BwICovLAorCQkJ
CTBGNTk0Nzk3MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdUcmVlLmggKi8sCisJ
CQkpOworCQkJcGF0aCA9IFJlbW90ZUxheWVyVHJlZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CisJCTJEMTU1MUFBMUY1QTlCQTcwMDA2RTNGRSAvKiBpb3MgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBGMEMzNjU3MThDMDUxQkEwMEY2
MDdENyAvKiBSZW1vdGVMYXllclRyZWVIb3N0SU9TLm1tICovLAorCQkJCTBGMEMzNjVCMThDMDVD
QTEwMEY2MDdENyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tICovLAor
CQkJCTBGOTMxQzFBMThDNTcxMTkwMERCQTdDMyAvKiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TLmggKi8sCisJCQkJMEY5MzFDMUIxOEM1NzExOTAwREJBN0MzIC8qIFNjcm9s
bGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0gKi8sCisJCQkpOworCQkJcGF0aCA9
IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTJEMjhGM0RGMTg4NUND
QjQwMDRCOUVBRSAvKiBpb3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKApAQCAtNTUwNyw4ICs1NTE0LDYgQEAKIAkJCQkwRkNCNEUzNjE4QkJFMDQ0MDAwRkNGQzkg
LyogUGFnZUNsaWVudEltcGxJT1MuaCAqLywKIAkJCQkwRkNCNEUzNzE4QkJFMDQ0MDAwRkNGQzkg
LyogUGFnZUNsaWVudEltcGxJT1MubW0gKi8sCiAJCQkJODZGOTUzNjIxOEZGNTUwQjAwMURCMkVG
IC8qIFByb2Nlc3NBc3NlcnRpb25JT1MubW0gKi8sCi0JCQkJMEYwQzM2NTcxOEMwNTFCQTAwRjYw
N0Q3IC8qIFJlbW90ZUxheWVyVHJlZUhvc3RJT1MubW0gKi8sCi0JCQkJMEYwQzM2NUIxOEMwNUNB
MTAwRjYwN0Q3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0gKi8sCiAJ
CQkJNTFFNkMxNUYxRjI5MzU1MTAwRkQzNDM3IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJz
aXN0ZW50U3RvcmFnZUlPUy5tbSAqLywKIAkJCQkyREFGMDZENDE4QkQxQTQ3MDA4MUNFQjEgLyog
U21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5oICovLAogCQkJCTJEQUYwNkQ4MThCRDIzQkEw
MDgxQ0VCMSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLm1lc3NhZ2VzLmluICovLApA
QCAtNjg1Niw3ICs2ODYxLDcgQEAKIAkJCQk1MTBDQzdFNzE2MTM4RTcyMDBEMDNFRDMgLyogTmV0
d29yayAqLywKIAkJCQkzMUEyRUM0MDE0ODk5NzM3MDA4MTBENzEgLyogTm90aWZpY2F0aW9ucyAq
LywKIAkJCQkxQUVGQ0MwNTExRDAxRjM0MDA4MjE5RDMgLyogUGx1Z2lucyAqLywKLQkJCQkwRjU5
NDc5MzE4N0IzQjRDMDA0Mzc4NTcgLyogU2Nyb2xsaW5nICovLAorCQkJCTJEMTU1MUE5MUY1QTlC
NDIwMDA2RTNGRSAvKiBSZW1vdGVMYXllclRyZWUgKi8sCiAJCQkJNTE3REQ1QkIxODBEQTdDNDAw
ODE2NjBCIC8qIFN0b3JhZ2UgKi8sCiAJCQkJMUFBRjA4OUUxOTI2ODFBQzAwQjYzOTBDIC8qIFVz
ZXJDb250ZW50ICovLAogCQkJCTFBNTNDMkEzMUEzMjU2OTEwMDRFOEM3MCAvKiBXZWJzaXRlRGF0
YSAqLywKQEAgLTc3MDAsMTEgKzc3MDUsNiBAQAogCQkJCTFBRkRFNjVCMTk1NEU4RDUwMEM0OEZG
QSAvKiBMZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwICovLAogCQkJCTBGQ0I0RTU4MThCQkUz
RDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5oICovLAogCQkJCTBGQ0I0RTU5MThCQkUz
RDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5tbSAqLywKLQkJCQkxQUIxNkFFMDE2NDg2
NTZEMDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oICovLAotCQkJ
CTBGRjI0QTJGMTg3OUU0RkUwMDNBQkYwQyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5Lm1lc3NhZ2VzLmluICovLAotCQkJCTFBQjE2QURGMTY0ODY1NkQwMDI5MEQ2MiAvKiBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tICovLAotCQkJCTFBQTNENzVBMTY1MUI0NEYw
MDg3MTNEMCAvKiBSZW1vdGVMYXllclRyZWVIb3N0LmggKi8sCi0JCQkJMUFBM0Q3NTkxNjUxQjQ0
RjAwODcxM0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3QubW0gKi8sCiAJCQkJQTVEMzUwNEQxRDc4
RjBEMjAwNTEyNEE5IC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tICovLAogCQkJCUUx
OEU2OTA5MTY5QjU2M0YwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5LmNwcCAqLywKIAkJCQlF
MThFNjkwQTE2OUI1NjNGMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eS5oICovLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>