<?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>24123</bug_id>
          
          <creation_ts>2009-02-24 08:46:38 -0800</creation_ts>
          <short_desc>Move worker related files from dom directory to worker directory under WebCore.</short_desc>
          <delta_ts>2009-02-24 15:21:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>ap</cc>
    
    <cc>dimich</cc>
    
    <cc>jianli</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>110743</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-02-24 08:46:38 -0800</bug_when>
    <thetext>Need to move all worker related files from dom directory to worker directory under WebCore. This is in preparation to add platform specific files for workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110744</commentid>
    <comment_count>1</comment_count>
      <attachid>27919</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-02-24 08:54:02 -0800</bug_when>
    <thetext>Created attachment 27919
Proposed Patch

This patch only moves  all worker related files from dom directory to worker directory, plus changes to build files in all affected platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110748</commentid>
    <comment_count>2</comment_count>
      <attachid>27919</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-24 09:09:32 -0800</bug_when>
    <thetext>Comment on attachment 27919
Proposed Patch

Should it be &quot;workers&quot;, not &quot;worker&quot;? That would match the name of the spec, and the name of tests directory.

There is no need to keep automatically generated function names in ChangeLog

CrossThreadCopier looks like something more suitable for WebCore/platform (and it should not be wrapped in ENABLE(WORKERS) if we agree about that).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110757</commentid>
    <comment_count>3</comment_count>
      <attachid>27920</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-02-24 10:10:51 -0800</bug_when>
    <thetext>Created attachment 27920
Proposed Patch

Fixed all issues except that I still keep ENABLE(WORKERS) in CrossThreadCopier.*. I will remove it in next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110761</commentid>
    <comment_count>4</comment_count>
      <attachid>27920</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-24 10:28:03 -0800</bug_when>
    <thetext>Comment on attachment 27920
Proposed Patch

&gt; +        WARNING: NO TEST CASES ADDED OR CHANGED

Please remove this line from ChangeLog.

&gt; -		&lt;/Filter&gt;
&gt; +		&lt;/Filer&gt;

Please don&apos;t do this.

r=me otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110762</commentid>
    <comment_count>5</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-24 10:33:58 -0800</bug_when>
    <thetext>Assigned to me for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110837</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-24 15:18:05 -0800</bug_when>
    <thetext>Committed as r41193.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110840</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-24 15:21:17 -0800</bug_when>
    <thetext>fyi, we had to do one line addition for workers to DerivedSources.make when landing this (otherwise a clean build would not work).
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27919</attachid>
            <date>2009-02-24 08:54:02 -0800</date>
            <delta_ts>2009-02-24 10:10:51 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>MoveWorkerFiles</filename>
            <type>text/plain</type>
            <size>272282</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTIxNGIzNi4uZTNjM2FiNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMDkgQEAKKzIwMDktMDItMjQgIEppYW4gTGkgIDxq
aWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEJ1ZyAyNDEyMzogTW92ZSB3b3JrZXIgcmVsYXRlZCBmaWxlcyBmcm9tIGRv
bSBkaXJlY3RvcnkgdG8gd29ya2VyIGRpcmVjdG9yeSB1bmRlciBXZWJDb3JlLgorCWh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDEyMworCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS5zY29u
czoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9NaWdyYXRlSURMQW5kU2NyaXB0czoKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd29ya2VyL0Nyb3NzVGhyZWFkQ29w
aWVyLmNwcDogUmVuYW1lZCBmcm9tIFdlYkNvcmUvZG9tL0Nyb3NzVGhyZWFkQ29waWVyLmNwcC4K
KyAgICAgICAgKFdlYkNvcmU6Ojo6Y29weSk6CisgICAgICAgICogd29ya2VyL0Nyb3NzVGhyZWFk
Q29waWVyLmg6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2RvbS9Dcm9zc1RocmVhZENvcGllci5oLgor
ICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3VnaDo6Y29weSk6Cisg
ICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHdvcmtlci9HZW5lcmljV29ya2VyVGFzay5o
OiBSZW5hbWVkIGZyb20gV2ViQ29yZS9kb20vR2VuZXJpY1dvcmtlclRhc2suaC4KKyAgICAgICAg
KFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2VyVGFzazE6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2VyVGFzazE6OkdlbmVyaWNXb3JrZXJU
YXNrMSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2VyVGFzazE6OnBlcmZvcm1UYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyaWNXb3JrZXJUYXNrMjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdlbmVyaWNXb3JrZXJUYXNrMjo6R2VuZXJpY1dvcmtlclRhc2syKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdlbmVyaWNXb3JrZXJUYXNrMjo6cGVyZm9ybVRhc2spOgorICAgICAg
ICAoV2ViQ29yZTo6R2VuZXJpY1dvcmtlclRhc2szOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R2VuZXJpY1dvcmtlclRhc2szOjpHZW5lcmljV29ya2VyVGFzazMpOgorICAgICAgICAoV2Vi
Q29yZTo6R2VuZXJpY1dvcmtlclRhc2szOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpHZW5lcmljV29ya2VyVGFzazQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmlj
V29ya2VyVGFzazQ6OkdlbmVyaWNXb3JrZXJUYXNrNCk6CisgICAgICAgIChXZWJDb3JlOjpHZW5l
cmljV29ya2VyVGFzazQ6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyaWNX
b3JrZXJUYXNrNTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyaWNXb3JrZXJUYXNr
NTo6R2VuZXJpY1dvcmtlclRhc2s1KToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyaWNXb3JrZXJU
YXNrNTo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJpY1dvcmtlclRhc2s2
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJpY1dvcmtlclRhc2s2OjpHZW5lcmlj
V29ya2VyVGFzazYpOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJpY1dvcmtlclRhc2s2OjpwZXJm
b3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2VyVGFzazc6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2VyVGFzazc6OkdlbmVyaWNXb3JrZXJUYXNr
Nyk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2VyVGFzazc6OnBlcmZvcm1UYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNhbGxiYWNrVGFzayk6CisgICAgICAgICogd29ya2Vy
L1dvcmtlci5jcHA6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2RvbS9Xb3JrZXIuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyOjpXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjp+
V29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6cG9zdE1lc3NhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyOjp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
OjpjYW5TdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6c3RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6ZGlz
cGF0Y2hFcnJvckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6YWRkRXZlbnRMaXN0
ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Oldvcmtlcjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKiB3b3JrZXIvV29ya2VyLmg6
IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2RvbS9Xb3JrZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6OnRvV29ya2VyKToKKyAgICAgICAg
KFdlYkNvcmU6Oldvcmtlcjo6ZXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyOjpzZXRPbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpvbm1lc3NhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpzZXRPbmVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6Oldvcmtlcjo6b25lcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6OnJlZkV2ZW50
VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6ZGVyZWZFdmVudFRhcmdldCk6Cisg
ICAgICAgICogd29ya2VyL1dvcmtlci5pZGw6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2RvbS9Xb3Jr
ZXIuaWRsLgorICAgICAgICAqIHdvcmtlci9Xb3JrZXJDb250ZXh0LmNwcDogUmVuYW1lZCBmcm9t
IFdlYkNvcmUvZG9tL1dvcmtlckNvbnRleHQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Q29udGV4dDo6V29ya2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0
Ojp+V29ya2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OnZp
cnR1YWxVUkwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6dmlydHVhbENvbXBs
ZXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmNvbXBsZXRlVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OnVzZXJBZ2VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpuYXZpZ2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
ckNvbnRleHQ6OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250
ZXh0OjphZGRNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OnJlc291
cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojph
ZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OnJlbW92
ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6ZGlzcGF0
Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojpwb3N0VGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjppbnN0YWxsVGltZW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpyZW1vdmVUaW1lb3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgICogd29ya2VyL1dv
cmtlckNvbnRleHQuaDogUmVuYW1lZCBmcm9tIFdlYkNvcmUvZG9tL1dvcmtlckNvbnRleHQuaC4K
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJDb250ZXh0Ojppc1dvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyQ29udGV4dDo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6Omxv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OnNjcmlwdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpjbGVhclNjcmlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJDb250ZXh0Ojp0aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29u
dGV4dDo6dG9Xb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6
OnNldE9ubWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojpvbm1lc3Nh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6ZXZlbnRMaXN0ZW5lcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6cmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpkZXJlZlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6cmVmRXZlbnRUYXJn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6ZGVyZWZFdmVudFRhcmdldCk6
CisgICAgICAgICogd29ya2VyL1dvcmtlckNvbnRleHQuaWRsOiBSZW5hbWVkIGZyb20gV2ViQ29y
ZS9kb20vV29ya2VyQ29udGV4dC5pZGwuCisgICAgICAgICogd29ya2VyL1dvcmtlckNvbnRleHRQ
cm94eS5oOiBSZW5hbWVkIGZyb20gV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dFByb3h5LmguCisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHk6On5Xb3JrZXJDb250ZXh0UHJveHkp
OgorICAgICAgICAqIHdvcmtlci9Xb3JrZXJMb2NhdGlvbi5jcHA6IFJlbmFtZWQgZnJvbSBXZWJD
b3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJMb2Nh
dGlvbjo6aHJlZik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJMb2NhdGlvbjo6cHJvdG9jb2wp
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTG9jYXRpb246Omhvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyTG9jYXRpb246Omhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
ckxvY2F0aW9uOjpwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckxvY2F0aW9uOjpwYXRo
bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJMb2NhdGlvbjo6c2VhcmNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlckxvY2F0aW9uOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckxvY2F0aW9uOjp0b1N0cmluZyk6CisgICAgICAgICogd29ya2VyL1dvcmtlckxvY2F0aW9u
Lmg6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5oLgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyTG9jYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJMb2NhdGlvbjo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckxvY2F0aW9uOjpXb3Jr
ZXJMb2NhdGlvbik6CisgICAgICAgICogd29ya2VyL1dvcmtlckxvY2F0aW9uLmlkbDogUmVuYW1l
ZCBmcm9tIFdlYkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmlkbC4KKyAgICAgICAgKiB3b3JrZXIv
V29ya2VyTWVzc2FnaW5nUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gV2ViQ29yZS9kb20vV29ya2Vy
TWVzc2FnaW5nUHJveHkuY3BwLgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlckNvbnRl
eHRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlckNvbnRleHRU
YXNrOjpNZXNzYWdlV29ya2VyQ29udGV4dFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVdvcmtlckNvbnRleHRUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpNZXNz
YWdlV29ya2VyVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VXb3JrZXJU
YXNrOjpNZXNzYWdlV29ya2VyVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlV29ya2Vy
VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXhjZXB0aW9uVGFz
azo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV4Y2VwdGlvblRhc2s6Oldvcmtl
ckV4Y2VwdGlvblRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXhjZXB0aW9uVGFzazo6
cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dERlc3Ryb3llZFRh
c2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFz
azo6V29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Q29udGV4dERlc3Ryb3llZFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzazo6V29ya2VyVGhyZWFkQWN0aXZpdHlSZXBv
cnRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFz
azo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6Oldvcmtlck1l
c3NhZ2luZ1Byb3h5KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojp+
V29ya2VyTWVzc2FnaW5nUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5n
UHJveHk6OnN0YXJ0V29ya2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNz
YWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RUYXNrVG9Xb3JrZXJDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza1Rv
V29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojpw
b3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6cG9zdENvbnNv
bGVNZXNzYWdlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6
cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyTWVzc2FnaW5nUHJveHk6OndvcmtlclRocmVhZENyZWF0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6Ondvcmtlck9iamVjdERlc3Ryb3llZCk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyQ29udGV4dERlc3Ryb3llZCk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyQ29udGV4dERl
c3Ryb3llZEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5
Ojp0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3Nh
Z2luZ1Byb3h5Ojpjb25maXJtV29ya2VyVGhyZWFkTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAg
KFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5OjpyZXBvcnRQZW5kaW5nQWN0aXZpdHlJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6aGFzUGVuZGlu
Z0FjdGl2aXR5KToKKyAgICAgICAgKiB3b3JrZXIvV29ya2VyTWVzc2FnaW5nUHJveHkuaDogUmVu
YW1lZCBmcm9tIFdlYkNvcmUvZG9tL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmguCisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6YXNrZWRUb1Rlcm1pbmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyT2JqZWN0KToKKyAgICAgICAg
KiB3b3JrZXIvV29ya2VyT2JqZWN0UHJveHkuaDogUmVuYW1lZCBmcm9tIFdlYkNvcmUvZG9tL1dv
cmtlck9iamVjdFByb3h5LmguCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJPYmplY3RQcm94eTo6
fldvcmtlck9iamVjdFByb3h5KToKKyAgICAgICAgKiB3b3JrZXIvV29ya2VyUnVuTG9vcC5jcHA6
IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2RvbS9Xb3JrZXJSdW5Mb29wLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlclNoYXJlZFRpbWVyOjpXb3JrZXJTaGFyZWRUaW1lcik6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJTaGFyZWRUaW1lcjo6c2V0RmlyZWRGdW5jdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJTaGFyZWRUaW1lcjo6c2V0RmlyZVRpbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyU2hhcmVkVGltZXI6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2hh
cmVkVGltZXI6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNoYXJlZFRpbWVy
OjpmaXJlVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTaGFyZWRUaW1lcjo6ZmlyZSk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjpUYXNrOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6VGFzazo6bW9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJSdW5Mb29wOjpUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJSdW5Mb29wOjpUYXNrOjpUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vZGVQcmVkaWNh
dGU6Ok1vZGVQcmVkaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TW9kZVByZWRpY2F0ZTo6aXNE
ZWZhdWx0TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlUHJlZGljYXRlOjpvcGVyYXRvcigp
KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclJ1bkxvb3A6OldvcmtlclJ1bkxvb3ApOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6fldvcmtlclJ1bkxvb3ApOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6ZGVmYXVsdE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UnVuTG9vcFNldHVwOjpSdW5Mb29wU2V0dXApOgorICAgICAgICAoV2ViQ29yZTo6UnVuTG9vcFNl
dHVwOjp+UnVuTG9vcFNldHVwKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclJ1bkxvb3A6OnJ1
bik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjpydW5Jbk1vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6dGVybWluYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclJ1bkxvb3A6OnBvc3RUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclJ1bkxv
b3A6OnBvc3RUYXNrRm9yTW9kZSk6CisgICAgICAgICogd29ya2VyL1dvcmtlclJ1bkxvb3AuaDog
UmVuYW1lZCBmcm9tIFdlYkNvcmUvZG9tL1dvcmtlclJ1bkxvb3AuaC4KKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclJ1bkxvb3A6OnRlcm1pbmF0ZWQpOgorICAgICAgICAqIHdvcmtlci9Xb3JrZXJU
aHJlYWQuY3BwOiBSZW5hbWVkIGZyb20gV2ViQ29yZS9kb20vV29ya2VyVGhyZWFkLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZFN0YXJ0dXBEYXRhOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OldvcmtlclRocmVhZFN0YXJ0dXBE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclRocmVhZDo6fldvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJU
aHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29ya2VyVGhy
ZWFkU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpzdG9wKToKKyAgICAgICAgKiB3b3Jr
ZXIvV29ya2VyVGhyZWFkLmg6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2RvbS9Xb3JrZXJUaHJlYWQu
aC4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyVGhyZWFkOjpydW5Mb29wKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZDo6d29ya2VyT2JqZWN0UHJveHkpOgorCiAyMDA5LTAyLTI0ICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IGU1N2UwODUuLjZmYzQyN2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTQzLDkgKzE0Myw2IEBA
IElETF9CSU5ESU5HUyArPSBcCiAJV2ViQ29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuaWRs
IFwKIAlXZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsIFwKIAlXZWJDb3JlL2Rv
bS9XaGVlbEV2ZW50LmlkbCBcCi0JV2ViQ29yZS9kb20vV29ya2VyLmlkbCBcCi0JV2ViQ29yZS9k
b20vV29ya2VyQ29udGV4dC5pZGwgXAotCVdlYkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmlkbCBc
CiAJV2ViQ29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmlkbCBcCiAJV2ViQ29yZS9odG1sL0NhbnZh
c1BhdHRlcm4uaWRsIFwKIAlXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlk
bCBcCkBAIC0yMzAsNiArMjI3LDkgQEAgSURMX0JJTkRJTkdTICs9IFwKIAlXZWJDb3JlL3BsdWdp
bnMvTWltZVR5cGVBcnJheS5pZGwgXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsIFwKIAlX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuaWRsIFwKKwlXZWJDb3JlL3dvcmtlci9Xb3JrZXIu
aWRsIFwKKwlXZWJDb3JlL3dvcmtlci9Xb3JrZXJDb250ZXh0LmlkbCBcCisJV2ViQ29yZS93b3Jr
ZXIvV29ya2VyTG9jYXRpb24uaWRsIFwKIAlXZWJDb3JlL3htbC9ET01QYXJzZXIuaWRsIFwKIAlX
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5pZGwgXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0RXhjZXB0aW9uLmlkbCBcCkBAIC0yMTc0LDI1ICsyMTc0LDI1IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAgXAogCVdlYkNv
cmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgXAogCVdlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIFwKLQlXZWJDb3JlL2RvbS9Dcm9zc1Ro
cmVhZENvcGllci5jcHAgXAotCVdlYkNvcmUvZG9tL0Nyb3NzVGhyZWFkQ29waWVyLmggXAotCVdl
YkNvcmUvZG9tL0dlbmVyaWNXb3JrZXJUYXNrLmggXAotCVdlYkNvcmUvZG9tL1dvcmtlci5jcHAg
XAotCVdlYkNvcmUvZG9tL1dvcmtlci5oIFwKLQlXZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmNw
cCBcCi0JV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5oIFwKLQlXZWJDb3JlL2RvbS9Xb3JrZXJD
b250ZXh0UHJveHkuaCBcCi0JV2ViQ29yZS9kb20vV29ya2VyTG9jYXRpb24uY3BwIFwKLQlXZWJD
b3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5oIFwKLQlXZWJDb3JlL2RvbS9Xb3JrZXJNZXNzYWdpbmdQ
cm94eS5jcHAgXAotCVdlYkNvcmUvZG9tL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmggXAotCVdlYkNv
cmUvZG9tL1dvcmtlck9iamVjdFByb3h5LmggXAotCVdlYkNvcmUvZG9tL1dvcmtlclJ1bkxvb3Au
Y3BwIFwKLQlXZWJDb3JlL2RvbS9Xb3JrZXJSdW5Mb29wLmggXAotCVdlYkNvcmUvZG9tL1dvcmtl
clRocmVhZC5jcHAgXAotCVdlYkNvcmUvZG9tL1dvcmtlclRocmVhZC5oIFwKIAlXZWJDb3JlL3Bh
Z2UvV29ya2VyTmF2aWdhdG9yLmNwcCBcCiAJV2ViQ29yZS9wYWdlL1dvcmtlck5hdmlnYXRvci5o
CisJV2ViQ29yZS93b3JrZXIvQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKKwlXZWJDb3JlL3dvcmtl
ci9Dcm9zc1RocmVhZENvcGllci5oIFwKKwlXZWJDb3JlL3dvcmtlci9HZW5lcmljV29ya2VyVGFz
ay5oIFwKKwlXZWJDb3JlL3dvcmtlci9Xb3JrZXIuY3BwIFwKKwlXZWJDb3JlL3dvcmtlci9Xb3Jr
ZXIuaCBcCisJV2ViQ29yZS93b3JrZXIvV29ya2VyQ29udGV4dC5jcHAgXAorCVdlYkNvcmUvd29y
a2VyL1dvcmtlckNvbnRleHQuaCBcCisJV2ViQ29yZS93b3JrZXIvV29ya2VyQ29udGV4dFByb3h5
LmggXAorCVdlYkNvcmUvd29ya2VyL1dvcmtlckxvY2F0aW9uLmNwcCBcCisJV2ViQ29yZS93b3Jr
ZXIvV29ya2VyTG9jYXRpb24uaCBcCisJV2ViQ29yZS93b3JrZXIvV29ya2VyTWVzc2FnaW5nUHJv
eHkuY3BwIFwKKwlXZWJDb3JlL3dvcmtlci9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oIFwKKwlXZWJD
b3JlL3dvcmtlci9Xb3JrZXJPYmplY3RQcm94eS5oIFwKKwlXZWJDb3JlL3dvcmtlci9Xb3JrZXJS
dW5Mb29wLmNwcCBcCisJV2ViQ29yZS93b3JrZXIvV29ya2VyUnVuTG9vcC5oIFwKKwlXZWJDb3Jl
L3dvcmtlci9Xb3JrZXJUaHJlYWQuY3BwIFwKKwlXZWJDb3JlL3dvcmtlci9Xb3JrZXJUaHJlYWQu
aCBcCiBlbmRpZgogCiAjIC0tLS0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9X
ZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDQ5Nzc1NGUuLmNlNmY2MmEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMzA3LDkgKzMw
Nyw2IEBAIElETF9CSU5ESU5HUyArPSBcCiAgICAgZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50Lmlk
bCBcCiAgICAgZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5pZGwgXAogICAgIGRvbS9XaGVlbEV2
ZW50LmlkbCBcCi0gICAgZG9tL1dvcmtlci5pZGwgXAotICAgIGRvbS9Xb3JrZXJDb250ZXh0Lmlk
bCBcCi0gICAgZG9tL1dvcmtlckxvY2F0aW9uLmlkbCBcCiAgICAgaHRtbC9DYW52YXNHcmFkaWVu
dC5pZGwgXAogICAgIGh0bWwvQ2FudmFzUGF0dGVybi5pZGwgXAogICAgIGh0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmlkbCBcCkBAIC0zOTQsNiArMzkxLDkgQEAgSURMX0JJTkRJTkdTICs9
IFwKICAgICBwbHVnaW5zL01pbWVUeXBlLmlkbCBcCiAgICAgcGx1Z2lucy9QbHVnaW5BcnJheS5p
ZGwgXAogICAgIHBsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwgXAorICAgIHdvcmtlci9Xb3JrZXIu
aWRsIFwKKyAgICB3b3JrZXIvV29ya2VyQ29udGV4dC5pZGwgXAorICAgIHdvcmtlci9Xb3JrZXJM
b2NhdGlvbi5pZGwgXAogICAgIHhtbC9ET01QYXJzZXIuaWRsIFwKICAgICB4bWwvWE1MSHR0cFJl
cXVlc3QuaWRsIFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaWRsIFwKQEAgLTU3
MSw3ICs1NzEsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vQ2xpcGJvYXJkRXZlbnQuY3BwIFwK
ICAgICBkb20vQ29tbWVudC5jcHAgXAogICAgIGRvbS9Db250YWluZXJOb2RlLmNwcCBcCi0gICAg
ZG9tL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBcCiAgICAgZG9tL0NTU01hcHBlZEF0dHJpYnV0ZURl
Y2xhcmF0aW9uLmNwcCBcCiAgICAgZG9tL0RvY3VtZW50LmNwcCBcCiAgICAgZG9tL0RvY3VtZW50
RnJhZ21lbnQuY3BwIFwKQEAgLTEwNDAsNiArMTAzOSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJl
bmRlcmluZy9zdHlsZS9TdHlsZVN1cnJvdW5kRGF0YS5jcHAgXAogICAgIHJlbmRlcmluZy9zdHls
ZS9TdHlsZVRyYW5zZm9ybURhdGEuY3BwIFwKICAgICByZW5kZXJpbmcvc3R5bGUvU3R5bGVWaXN1
YWxEYXRhLmNwcCBcCisgICAgd29ya2VyL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBcCiAgICAgeG1s
L0RPTVBhcnNlci5jcHAgXAogICAgIHhtbC9OYXRpdmVYUGF0aE5TUmVzb2x2ZXIuY3BwIFwKICAg
ICB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5z
Y29ucyBiL1dlYkNvcmUvV2ViQ29yZS5zY29ucwppbmRleCBhNjUxMDBmLi40OWU4NGIzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuc2NvbnMKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnNjb25z
CkBAIC03OCw3ICs3OCw2IEBAIHNvdXJjZXNbJ2RvbSddID0gWwogICAgICdkb20vQ2xpcGJvYXJk
RXZlbnQuY3BwJywKICAgICAnZG9tL0NvbW1lbnQuY3BwJywKICAgICAnZG9tL0NvbnRhaW5lck5v
ZGUuY3BwJywKLSAgICAnZG9tL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCcsCiAgICAgJ2RvbS9DU1NN
YXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5jcHAnLAogICAgICdkb20vRG9jdW1lbnQuY3BwJywK
ICAgICAnZG9tL0RvY3VtZW50RnJhZ21lbnQuY3BwJywKQEAgLTE0MSw5ICsxNDAsNiBAQCBzb3Vy
Y2VzWydkb20nXSA9IFsKICAgICAnZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmNwcCcsCiAgICAg
J2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwJywKICAgICAnZG9tL1doZWVsRXZlbnQuY3Bw
JywKLSAgICAnZG9tL1dvcmtlci5jcHAnLAotICAgICdkb20vV29ya2VyQ29udGV4dC5jcHAnLAot
ICAgICdkb20vV29ya2VyTG9jYXRpb24uY3BwJywKICAgICAnZG9tL1hNTFRva2VuaXplci5jcHAn
LAogICAgICdkb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAnLAogXQpAQCAtNTY1LDYgKzU2MSwx
MiBAQCBzb3VyY2VzWydzdG9yYWdlJ10gPSBbCiAgICAgJ3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmNw
cCcsCiAgICAgJ3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAnCiBdCitzb3VyY2VzWyd3b3JrZXInXSA9
IFsKKyAgICAnd29ya2VyL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCcsCisgICAgJ3dvcmtlci9Xb3Jr
ZXIuY3BwJywKKyAgICAnd29ya2VyL1dvcmtlckNvbnRleHQuY3BwJywKKyAgICAnd29ya2VyL1dv
cmtlckxvY2F0aW9uLmNwcCcsCitdCiBzb3VyY2VzWyd4bWwnXSA9IFsKICAgICAneG1sL0RPTVBh
cnNlci5jcHAnLAogICAgICd4bWwvTmF0aXZlWFBhdGhOU1Jlc29sdmVyLmNwcCcsCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL01pZ3JhdGVJRExBbmRTY3JpcHRzIGIvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9NaWdyYXRlSURMQW5kU2NyaXB0cwppbmRleCA0ZmY5MDAyLi5mMDk4
Y2M3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL01pZ3JhdGVJRExBbmRTY3Jp
cHRzCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovTWlncmF0ZUlETEFuZFNjcmlwdHMKQEAg
LTE1NSw2ICsxNTUsMTEgQEAgJChXRUJLSVRfT1VUUFVUKS8lIDogJChXRUJDT1JFKS9odG1sLyUK
ICQoV0VCS0lUX09VVFBVVCkvJSA6ICQoV0VCQ09SRSkvY3NzLyUKIAkkKE1JR1JBVEVfQ01EKQog
CisjIE1pZ3JhdGUgd29ya2VyIElETHMKKyQoV0VCS0lUX09VVFBVVCkvJSA6ICQoV0VCQ09SRSkv
d29ya2VyLyUKKwkkKE1JR1JBVEVfQ01EKQorCisKICMgTWlncmF0ZSBnZW5lcmF0aW9uIHNjcmlw
dHMKICQoV0VCS0lUX09VVFBVVCkvJSA6ICQoV0VCQ09SRSkvYmluZGluZ3Mvc2NyaXB0cy8lCiAJ
JChNSUdSQVRFX0NNRCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDFj
ZDMxMjcuLmM3OTY0NDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAt
MTA4NzgsMjIgKzEwODc4LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZG9tXENyb3NzVGhyZWFkQ29waWVyLmNwcCINCi0JCQkJPg0KLQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2VfUEdPfFdpbjMyIg0KLQkJ
CQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJ
CVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZG9tXENyb3NzVGhyZWFkQ29waWVyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRp
b24uY3BwIg0KIAkJCQk+DQogCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KQEAgLTExMjAyLDEwICsx
MTE4Niw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGRvbVxHZW5lcmljV29ya2VyVGFzay5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJ
CTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXElucHV0RWxlbWVudC5jcHAiDQogCQkJ
CT4NCiAJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpAQCAtMTE5MTQsOTAgKzExODk0LDExNCBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21c
V29ya2VyLmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MVG9rZW5pemVyLmNwcCIN
CisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VfUEdP
fFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KKwkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCisJCQkJCS8+DQor
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cZG9tXFhNTFRva2VuaXplci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhNTFRva2VuaXplckxpYnhtbDIu
Y3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFz
ZV9QR098V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiDQorCQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIg0KKwkJCQkJ
Lz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4N
CisJCTxGaWx0ZXINCisJCQlOYW1lPSJ3b3JrZXIiDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cd29ya2VyXENyb3NzVGhyZWFkQ29waWVyLmNwcCINCiAJCQkJPg0KKwkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VfUEdPfFdpbjMyIg0KKwkJ
CQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJ
CVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZG9tXFdvcmtlci5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdvcmtlclxDcm9zc1RocmVh
ZENvcGllci5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZG9tXFdvcmtlckNvbnRleHQuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdv
cmtlclxHZW5lcmljV29ya2VyVGFzay5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxl
DQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFdvcmtlckNvbnRleHQuaCINCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlx3b3JrZXJcV29ya2VyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxXb3JrZXJDb250ZXh0UHJveHkuaCINCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlx3b3JrZXJcV29ya2VyLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cV29ya2VyTG9jYXRpb24uY3Bw
Ig0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdvcmtlclxXb3JrZXJDb250ZXh0LmNwcCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxXb3Jr
ZXJMb2NhdGlvbi5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdvcmtlclxXb3JrZXJDb250ZXh0
LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIu
Llxkb21cV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdv
cmtlclxXb3JrZXJDb250ZXh0UHJveHkuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxXb3JrZXJNZXNzYWdpbmdQcm94eS5oIg0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHdvcmtlclxXb3JrZXJMb2NhdGlvbi5jcHAiDQogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cV29ya2VyT2Jq
ZWN0UHJveHkuaCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3b3JrZXJcV29ya2VyTG9jYXRpb24u
aCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGRvbVxXb3JrZXJSdW5Mb29wLmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3b3JrZXJcV29y
a2VyTWVzc2FnaW5nUHJveHkuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFdvcmtlclJ1bkxvb3AuaCINCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlx3b3JrZXJcV29ya2VyTWVzc2FnaW5nUHJveHkuaCINCiAJCQkJPg0KIAkJCTwvRmls
ZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxXb3JrZXJUaHJlYWQuY3Bw
Ig0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdvcmtlclxXb3JrZXJPYmplY3RQcm94eS5oIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFdv
cmtlclRocmVhZC5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdvcmtlclxXb3JrZXJSdW5Mb29w
LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGRvbVxYTUxUb2tlbml6ZXIuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdvcmtlclxX
b3JrZXJSdW5Mb29wLmgiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlO
YW1lPSJSZWxlYXNlX1BHT3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249InRy
dWUiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJ
CQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxYTUxUb2tlbml6ZXIuaCINCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlx3b3JrZXJcV29ya2VyVGhyZWFkLmNwcCINCiAJCQkJPg0KIAkJCTwv
RmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxYTUxUb2tlbml6ZXJM
aWJ4bWwyLmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3b3JrZXJcV29ya2VyVGhyZWFkLmgi
DQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlX1BH
T3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCINCi0JCQkJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249InRydWUiDQotCQkJCQkvPg0K
LQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KKwkJ
PC9GaWxlcj4NCiAJCTxGaWx0ZXINCiAJCQlOYW1lPSJlZGl0aW5nIg0KIAkJCT4NCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY0MDhhNGIuLmU1MGUyNjUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzMsNyAr
MTMzLDYgQEAKIAkJMDhFNkUwRjEwRUZGNDJCQTAwMDI5RkJGIC8qIFdNTEZpZWxkU2V0RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEU2
RTBFRjBFRkY0MkJBMDAwMjlGQkYgLyogV01MRmllbGRTZXRFbGVtZW50LmNwcCAqLzsgfTsKIAkJ
MDhFNkUwRjIwRUZGNDJCQTAwMDI5RkJGIC8qIFdNTEZpZWxkU2V0RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhFNkUwRjAwRUZGNDJCQTAw
MDI5RkJGIC8qIFdNTEZpZWxkU2V0RWxlbWVudC5oICovOyB9OwogCQkwQTQ4NDQ5OTBDQTQ0Q0Iy
MDBCN0JENDggLyogU29mdExpbmtpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBBNDg0NDk4MENBNDRDQjIwMEI3QkQ0OCAvKiBTb2Z0TGlua2luZy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBCNENF
N0RCMEYyRTRCREUwMEY2RUMwNCAvKiBDcm9zc1RocmVhZENvcGllci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI0Q0U3REEwRjJFNEJERTAwRjZFQzA0
IC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi87IH07CiAJCTBCOEM1NkQ0MEYyODYyN0YwMDA1MDJF
MSAvKiBIVFRQSGVhZGVyTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBCOEM1NkQzMEYyODYyN0YwMDA1MDJFMSAvKiBIVFRQSGVhZGVyTWFwLmNw
cCAqLzsgfTsKIAkJMEI5MDU2MTkwRjI1NzhCRTAwOTVGRjZBIC8qIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwQjkwNTYxNTBGMjU3OEJFMDA5NUZGNkEgLyogRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNw
cCAqLzsgfTsKIAkJMEI5MDU2MUEwRjI1NzhCRjAwOTVGRjZBIC8qIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEI5MDU2MTYwRjI1NzhCRTAwOTVGRjZBIC8qIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CkBAIC0xNDIsOCArMTQxLDYgQEAK
IAkJMEI5MDU2MUUwRjI1N0U5MzAwOTVGRjZBIC8qIFRocmVhZGFibGVMb2FkZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI5MDU2MUQwRjI1N0U5
MzAwOTVGRjZBIC8qIFRocmVhZGFibGVMb2FkZXIuY3BwICovOyB9OwogCQkwQjkwNTZGODBGMjY4
NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjkwNTZGNjBGMjY4NUYzMDA5NUZGNkEg
LyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAgKi87IH07CiAJCTBCOTA1NkY5MEYyNjg1RjMw
MDk1RkY2QSAvKiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjkwNTZGNzBGMjY4NUYzMDA5NUZGNkEgLyogV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07
IH07Ci0JCTBCQTVEMzg2MEYyNDBGQjQwMDlCODcwQiAvKiBHZW5lcmljV29ya2VyVGFzay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJBNUQzODUwRjI0
MEZCNDAwOUI4NzBCIC8qIEdlbmVyaWNXb3JrZXJUYXNrLmggKi87IH07Ci0JCTBCQjREQkUyMEYy
RUUyOTgwMDM1NDYxOSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkI0REJFMTBGMkVFMjk4MDAzNTQ2MTkgLyog
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwICovOyB9OwogCQkwQkUwMzBBMjBGMzExMkZCMDAzQzFBNDYg
LyogUmVuZGVyTGluZUJveExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBCRTAzMEExMEYzMTEyRkIwMDNDMUE0NiAvKiBSZW5kZXJMaW5lQm94TGlz
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjExQTU0RTBGMzkyMzMxMDBD
Mzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovOyB9OwogCQkwRjE1REE4QTBGM0FBRUU3
MDAwMENFNDcgLyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAv
KiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovOyB9OwpAQCAtMjA1LDggKzIwMiw2IEBA
CiAJCTE4NUJDRjI5MEYzMjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4NUJDRjI3MEYzMjc5Q0UwMDBF
QTI2MiAvKiBUaHJlYWRUaW1lcnMuaCAqLzsgfTsKIAkJMTg4NjA0QjMwRjJFNjU0QTAwMEI2NDQz
IC8qIERPTVRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE4ODYwNEIxMEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5jcHAgKi87IH07CiAJ
CTE4ODYwNEI0MEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTg4NjA0QjIwRjJFNjU0QTAwMEI2NDQzIC8q
IERPTVRpbWVyLmggKi87IH07Ci0JCTE4QTA1MzdDMEYyNjg1OUMwMEE1MTcwNSAvKiBXb3JrZXJS
dW5Mb29wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE4QTA1MzdBMEYyNjg1OUMwMEE1MTcwNSAvKiBXb3JrZXJSdW5Mb29wLmNwcCAqLzsgfTsKLQkJ
MThBMDUzN0QwRjI2ODU5QzAwQTUxNzA1IC8qIFdvcmtlclJ1bkxvb3AuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4QTA1MzdCMEYyNjg1OUMwMEE1MTcw
NSAvKiBXb3JrZXJSdW5Mb29wLmggKi87IH07CiAJCTFBMEQ1NzM2MEE1Qzc3RkUwMDdFREQ0QyAv
KiBPdmVyZmxvd0V2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBMEQ1NzM0MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCAq
LzsgfTsKIAkJMUEwRDU3MzcwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEQ1NzM1MEE1Qzc3
RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmggKi87IH07CiAJCTFBMEQ1NzQwMEE1Qzc4Njcw
MDdFREQ0QyAvKiBKU092ZXJmbG93RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRDU3M0UwQTVDNzg2NzAwN0VERDRDIC8qIEpTT3ZlcmZs
b3dFdmVudC5jcHAgKi87IH07CkBAIC01NTIsOCArNTQ3LDI2IEBACiAJCTI5RkZCQjgzMEU3QzVB
M0QwMDQwNzczMCAvKiBBY2Nlc3NpYmlsaXR5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlGRkJCODEwRTdDNUEzRDAwNDA3NzMwIC8qIEFjY2Vz
c2liaWxpdHlMaXN0LmggKi87IH07CiAJCTJEOTA2NjA2MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlv
dXRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovOyB9OwogCQky
RDkwNjYwNzBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAv
KiBMYXlvdXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTJFM0FDODRFMEYzRDA2RDEwMDYzM0YwNCAvKiBXb3JrZXJDb250ZXh0UHJveHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFM0FDODRE
MEYzRDA2RDEwMDYzM0YwNCAvKiBXb3JrZXJDb250ZXh0UHJveHkuaCAqLzsgfTsKLQkJMkUzQUM4
NTAwRjNEMDZGNzAwNjMzRjA0IC8qIFdvcmtlck9iamVjdFByb3h5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTNBQzg0RjBGM0QwNkY3MDA2MzNGMDQg
LyogV29ya2VyT2JqZWN0UHJveHkuaCAqLzsgfTsKKwkJMkU0MzQ1RTAwRjU0NTVCNjAwQjBGMUJB
IC8qIENyb3NzVGhyZWFkQ29waWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFNDM0NUNDMEY1NDU1QjYwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENv
cGllci5jcHAgKi87IH07CisJCTJFNDM0NUUxMEY1NDU1QjYwMEIwRjFCQSAvKiBDcm9zc1RocmVh
ZENvcGllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkU0MzQ1Q0QwRjU0NTVCNjAwQjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi87IH07CisJ
CTJFNDM0NUUyMEY1NDU1QjYwMEIwRjFCQSAvKiBHZW5lcmljV29ya2VyVGFzay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ1Q0UwRjU0NTVCNjAw
QjBGMUJBIC8qIEdlbmVyaWNXb3JrZXJUYXNrLmggKi87IH07CisJCTJFNDM0NUUzMEY1NDU1QjYw
MEIwRjFCQSAvKiBXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkU0MzQ1Q0YwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlci5jcHAgKi87IH07
CisJCTJFNDM0NUU0MEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NUQwMEY1NDU1QjYwMEIwRjFCQSAv
KiBXb3JrZXIuaCAqLzsgfTsKKwkJMkU0MzQ1RTUwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlci5p
ZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0
NUQxMEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXIuaWRsICovOyB9OworCQkyRTQzNDVFNjBGNTQ1
NUI2MDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQzNDVEMjBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2Vy
Q29udGV4dC5jcHAgKi87IH07CisJCTJFNDM0NUU3MEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RTQzNDVEMzBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5oICovOyB9OworCQkyRTQz
NDVFODBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5pZGwgaW4gUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NUQ0MEY1NDU1QjYwMEIwRjFC
QSAvKiBXb3JrZXJDb250ZXh0LmlkbCAqLzsgfTsKKwkJMkU0MzQ1RTkwRjU0NTVCNjAwQjBGMUJB
IC8qIFdvcmtlckNvbnRleHRQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkU0MzQ1RDUwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlckNvbnRleHRQ
cm94eS5oICovOyB9OworCQkyRTQzNDVFQTBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyTG9jYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0
MzQ1RDYwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmNwcCAqLzsgfTsKKwkJMkU0
MzQ1RUIwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQzNDVENzBGNTQ1NUI2MDBCMEYxQkEg
LyogV29ya2VyTG9jYXRpb24uaCAqLzsgfTsKKwkJMkU0MzQ1RUMwRjU0NTVCNjAwQjBGMUJBIC8q
IFdvcmtlckxvY2F0aW9uLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkU0MzQ1RDgwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmlk
bCAqLzsgfTsKKwkJMkU0MzQ1RUQwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlck1lc3NhZ2luZ1By
b3h5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
NDM0NUQ5MEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgKi87IH07
CisJCTJFNDM0NUVFMEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJNZXNzYWdpbmdQcm94eS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ1REEwRjU0
NTVCNjAwQjBGMUJBIC8qIFdvcmtlck1lc3NhZ2luZ1Byb3h5LmggKi87IH07CisJCTJFNDM0NUVG
MEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJPYmplY3RQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ1REIwRjU0NTVCNjAwQjBGMUJBIC8q
IFdvcmtlck9iamVjdFByb3h5LmggKi87IH07CisJCTJFNDM0NUYwMEY1NDU1QjYwMEIwRjFCQSAv
KiBXb3JrZXJSdW5Mb29wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFNDM0NURDMEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJSdW5Mb29wLmNwcCAq
LzsgfTsKKwkJMkU0MzQ1RjEwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlclJ1bkxvb3AuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NUREMEY1NDU1
QjYwMEIwRjFCQSAvKiBXb3JrZXJSdW5Mb29wLmggKi87IH07CisJCTJFNDM0NUYyMEY1NDU1QjYw
MEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ1REUwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlclRocmVh
ZC5jcHAgKi87IH07CisJCTJFNDM0NUYzMEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NURG
MEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCAqLzsgfTsKIAkJMzEyODhFNzIwRTMw
MDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTI4OEU2RTBFMzAwNUQ2MDAzNjE5QUUg
LyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCAqLzsgfTsKIAkJMzEyODhFNzMwRTMwMDVENjAw
MzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyODhFNkYwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktp
dENTU0tleWZyYW1lUnVsZS5oICovOyB9OwogCQkzMTI4OEU3NDBFMzAwNUQ2MDAzNjE5QUUgLyog
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTI4OEU3MDBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZS5jcHAgKi87IH07CkBAIC00MzEwLDggKzQzMjMsNiBAQAogCQlFMTI3MUE1OTBF
RUVDREU0MDBGNjEyMTMgLyogSlNXb3JrZXJOYXZpZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNzFBNTcwRUVFQ0RFNDAwRjYxMjEzIC8q
IEpTV29ya2VyTmF2aWdhdG9yLmNwcCAqLzsgfTsKIAkJRTEyRURCN0IwQjMwOEE3ODAwMjcwNEI2
IC8qIEV2ZW50VGFyZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTJFREI3QTBCMzA4QTc4MDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTJFREJFQTBCMzA4
RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyRURCRTkwQjMwOEUwQjAwMjcwNEI2IC8qIEV2ZW50VGFy
Z2V0LmNwcCAqLzsgfTsKLQkJRTE0Nzk5QTcwRUNERTNBNDAwMjkyQkYzIC8qIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTQ3OTlBNjBFQ0RFM0E0MDAyOTJCRjMgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuaCAqLzsg
fTsKLQkJRTE0Nzk5QjQwRUNERTlEODAwMjkyQkYzIC8qIFdvcmtlck1lc3NhZ2luZ1Byb3h5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDc5OUIz
MEVDREU5RDgwMDI5MkJGMyAvKiBXb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgKi87IH07CiAJCUUx
N0E0QTFCMEQ5Nzk5MUQwMEZDMTBDNiAvKiBET01TVkdBbHRHbHlwaEVsZW1lbnQuaCBpbiBDb3B5
IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
QUE2QkFDMEQ5NzRBMDAwMDA1NDFBRSAvKiBET01TVkdBbHRHbHlwaEVsZW1lbnQuaCAqLzsgfTsK
IAkJRTE3QTRBMUMwRDk3OTkxRDAwRkMxMEM2IC8qIERPTVNWR0FsdEdseXBoRWxlbWVudEludGVy
bmFsLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NUFBNkJBRTBEOTc0QTAwMDAwNTQxQUUgLyogRE9NU1ZHQWx0R2x5cGhFbGVt
ZW50SW50ZXJuYWwuaCAqLzsgfTsKIAkJRTE4MUIyNTcwRjE0QzFBNjAwRkI3ODQ3IC8qIEpTRE9N
U3RyaW5nTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTgxQjI1NjBGMTRDMUE2MDBGQjc4NDcgLyogSlNET01TdHJpbmdMaXN0Q3Vz
dG9tLmNwcCAqLzsgfTsKQEAgLTQzMzgsMTQgKzQzNDksOCBAQAogCQlFMUFERUREQjBFNzZCRDkz
MDA0QTFBNUUgLyogSlNNZXNzYWdlUG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMUFERUREOTBFNzZCRDkzMDA0QTFBNUUgLyogSlNNZXNzYWdl
UG9ydC5jcHAgKi87IH07CiAJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29k
ZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFCRTUxMkIwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgKi87IH07CiAJ
CUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkU1MTJDMENGNkM1MTIwMDJF
QTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCAqLzsgfTsKLQkJRTFDMkM0MjQwRUFDRTBCQzAwN0U2
MUZCIC8qIFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFDMkM0MjMwRUFDRTBCQzAwN0U2MUZCIC8qIFdvcmtlclRocmVhZC5oICov
OyB9OwotCQlFMUMyQzQyOTBFQUNFMEUwMDA3RTYxRkIgLyogV29ya2VyVGhyZWFkLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzJDNDI4MEVBQ0Uw
RTAwMDdFNjFGQiAvKiBXb3JrZXJUaHJlYWQuY3BwICovOyB9OwotCQlFMUMyQzQzRTBFQUQwMTMz
MDA3RTYxRkIgLyogV29ya2VyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTFDMkM0M0QwRUFEMDEzMzAwN0U2MUZCIC8qIFdvcmtlckNvbnRl
eHQuaCAqLzsgfTsKLQkJRTFDMkM0NDIwRUFEMDE3QjAwN0U2MUZCIC8qIFdvcmtlckNvbnRleHQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMkM0
NDEwRUFEMDE3QjAwN0U2MUZCIC8qIFdvcmtlckNvbnRleHQuY3BwICovOyB9OwogCQlFMUMzNjJF
RjBFQUYyQUE5MDA3NDEwQkMgLyogSlNXb3JrZXJMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMzYyRUQwRUFGMkFBOTAwNzQxMEJDIC8q
IEpTV29ya2VyTG9jYXRpb24uaCAqLzsgfTsKIAkJRTFDMzYyRjAwRUFGMkFBOTAwNzQxMEJDIC8q
IEpTV29ya2VyTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFDMzYyRUUwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2VyTG9jYXRpb24u
Y3BwICovOyB9OwotCQlFMUMzNjMwMTBFQUYyQ0M2MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzM2MzAw
MEVBRjJDQzYwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5oICovOyB9OwotCQlFMUMzNjMwNjBF
QUYyRDA3MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMzYzMDUwRUFGMkQwNzAwNzQxMEJDIC8qIFdv
cmtlckxvY2F0aW9uLmNwcCAqLzsgfTsKIAkJRTFDMzZDMDMwRUIwNzZENjAwNzQxMEJDIC8qIEpT
RE9NR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUMzNkMwMjBFQjA3NkQ2MDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMUMzNkNC
RDBFQjA4MDYyMDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMzZDQkMwRUIwODA2MjAwNzQxMEJD
IC8qIEpTRE9NR2xvYmFsT2JqZWN0LmNwcCAqLzsgfTsKIAkJRTFDMzZEMzQwRUIwQTA5NDAwNzQx
MEJDIC8qIEpTV29ya2VyQ29udGV4dEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMzZEMzIwRUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2Vy
Q29udGV4dEJhc2UuY3BwICovOyB9OwpAQCAtNDM1Myw4ICs0MzU4LDYgQEAKIAkJRTFDNERFNjkw
RUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDNERFNjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFj
dGl2ZURPTU9iamVjdC5oICovOyB9OwogCQlFMUM0REU2RTBFQTc1QzY1MDAyM0NDRDYgLyogQWN0
aXZlRE9NT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxQzRERTZEMEVBNzVDNjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwICov
OyB9OwogCQlFMUM4QkU1RDBFOEJEMTVBMDA2NENCN0QgLyogSlNXb3JrZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDOEJFNUMwRThCRDE1QTAw
NjRDQjdEIC8qIEpTV29ya2VyLmNwcCAqLzsgfTsKLQkJRTFDQTVDQTAwRThDRDczQjAwRThFRjkw
IC8qIFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFDQTVDOUYwRThDRDczQjAwRThFRjkwIC8qIFdvcmtlci5oICovOyB9OwotCQlFMUNBNUNB
NTBFOENENzg1MDBFOEVGOTAgLyogV29ya2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0E1Q0E0MEU4Q0Q3ODUwMEU4RUY5MCAvKiBXb3JrZXIu
Y3BwICovOyB9OwogCQlFMUNBNUNCQzBFOENEQ0FGMDBFOEVGOTAgLyogSlNXb3JrZXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDQTVD
QkIwRThDRENBRjAwRThFRjkwIC8qIEpTV29ya2VyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJRTFDQTVD
RDMwRThDREU4MDAwRThFRjkwIC8qIEpTV29ya2VyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0E1Q0QyMEU4Q0RFODAwMEU4RUY5
MCAvKiBKU1dvcmtlckNvbnN0cnVjdG9yLmggKi87IH07CiAJCUUxQ0E1Q0Q2MEU4Q0RFRTkwMEU4
RUY5MCAvKiBKU1dvcmtlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0E1Q0Q1MEU4Q0RFRTkwMEU4RUY5MCAvKiBKU1dvcmtl
ckNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKQEAgLTUwMTIsNyArNTAxNSw2IEBACiAJCTA4RkI4NEIw
MEVDRTM3MzMwMERDMDY0RSAvKiBXTUxFbGVtZW50RmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA4RkI4NEIxMEVDRTM3MzMwMERDMDY0RSAvKiBXTUxFbGVtZW50
RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxFbGVtZW50RmFj
dG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQTQ4NDQ5ODBDQTQ0Q0IyMDBC
N0JENDggLyogU29mdExpbmtpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U29mdExpbmtpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEI0Q0U3REEwRjJF
NEJERTAwRjZFQzA0IC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkQ29waWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBCOEM1NkQzMEYyODYyN0YwMDA1MDJFMSAvKiBIVFRQSGVhZGVyTWFwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUVFBIZWFkZXJNYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQjkwNTYxNTBGMjU3OEJFMDA5NUZGNkEgLyogRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBCOTA1NjE2MEYyNTc4QkUwMDk1RkY2QSAvKiBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MDIxLDggKzUwMjMs
NiBAQAogCQkwQjkwNTYxRDBGMjU3RTkzMDA5NUZGNkEgLyogVGhyZWFkYWJsZUxvYWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRhYmxlTG9hZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEI5MDU2RjYwRjI2ODVGMzAwOTVGRjZB
IC8qIFdvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBCOTA1NkY3MEYyNjg1RjMwMDk1RkY2QSAvKiBXb3JrZXJUaHJlYWRhYmxl
TG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlclRocmVhZGFi
bGVMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEJBNUQzODUwRjI0MEZC
NDAwOUI4NzBCIC8qIEdlbmVyaWNXb3JrZXJUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdlbmVyaWNXb3JrZXJUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBCQjREQkUxMEYyRUUyOTgwMDM1NDYxOSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcm9zc1RocmVhZENvcGllci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCRTAzMEExMEYzMTEyRkIwMDNDMUE0NiAv
KiBSZW5kZXJMaW5lQm94TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJMaW5lQm94TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjExQTU0
RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZS5oOyBwYXRoID0gYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MDk1LDggKzUwOTUs
NiBAQAogCQkxODVCQ0YyNzBGMzI3OUNFMDAwRUEyNjIgLyogVGhyZWFkVGltZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZFRpbWVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxODg2MDRCMTBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NVGltZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxODg2MDRCMjBGMkU2NTRBMDAwQjY0NDMgLyogRE9N
VGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGltZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMThBMDUzN0EwRjI2ODU5QzAwQTUxNzA1IC8qIFdv
cmtlclJ1bkxvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29y
a2VyUnVuTG9vcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE4QTA1MzdCMEYy
Njg1OUMwMEE1MTcwNSAvKiBXb3JrZXJSdW5Mb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdvcmtlclJ1bkxvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUEwRDU3MzQwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE92ZXJmbG93RXZlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQTBENTczNTBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dF
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3ZlcmZsb3dFdmVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTBENTczODBBNUM3ODEyMDA3RURENEMg
LyogT3ZlcmZsb3dFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE92ZXJmbG93RXZl
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ3NSw4ICs1NDczLDI2IEBA
CiAJCTJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkQ5MDY2MEIwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9h
cmRNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCTJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAvKiBDbGlwYm9hcmRNYWMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBD
bGlwYm9hcmRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwotCQkyRTNBQzg0RDBGM0QwNkQxMDA2MzNGMDQgLyogV29ya2VyQ29udGV4
dFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlckNvbnRleHRQ
cm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTNBQzg0RjBGM0QwNkY3MDA2
MzNGMDQgLyogV29ya2VyT2JqZWN0UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV29ya2VyT2JqZWN0UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MkU0MzQ1Q0MwRjU0NTVCNjAwQjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENyb3NzVGhyZWFkQ29waWVyLmNwcDsgcGF0
aCA9IHdvcmtlci9Dcm9zc1RocmVhZENvcGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTJFNDM0NUNEMEY1NDU1QjYwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDcm9zc1RocmVhZENvcGllci5oOyBwYXRo
ID0gd29ya2VyL0Nyb3NzVGhyZWFkQ29waWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTJFNDM0NUNFMEY1NDU1QjYwMEIwRjFCQSAvKiBHZW5lcmljV29ya2VyVGFzay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW5lcmljV29ya2VyVGFzay5oOyBwYXRoID0g
d29ya2VyL0dlbmVyaWNXb3JrZXJUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTJFNDM0NUNGMEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV29ya2VyLmNwcDsgcGF0aCA9IHdvcmtlci9Xb3JrZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTQzNDVEMDBGNTQ1NUI2MDBCMEYxQkEg
LyogV29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlci5oOyBw
YXRoID0gd29ya2VyL1dvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTQz
NDVEMTBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUg
PSBXb3JrZXIuaWRsOyBwYXRoID0gd29ya2VyL1dvcmtlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTJFNDM0NUQyMEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdvcmtlckNvbnRleHQuY3Bw
OyBwYXRoID0gd29ya2VyL1dvcmtlckNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyRTQzNDVEMzBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3JrZXJDb250ZXh0Lmg7IHBhdGggPSB3b3Jr
ZXIvV29ya2VyQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTQzNDVE
NDBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gV29ya2VyQ29udGV4dC5pZGw7IHBhdGggPSB3b3JrZXIvV29ya2VyQ29udGV4dC5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFNDM0NUQ1MEY1NDU1QjYwMEIwRjFCQSAv
KiBXb3JrZXJDb250ZXh0UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V29ya2VyQ29udGV4dFByb3h5Lmg7IHBhdGggPSB3b3JrZXIvV29ya2VyQ29udGV4dFByb3h5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFNDM0NUQ2MEY1NDU1QjYwMEIwRjFCQSAv
KiBXb3JrZXJMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBXb3JrZXJMb2NhdGlvbi5jcHA7IHBhdGggPSB3b3JrZXIvV29ya2VyTG9jYXRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTQzNDVENzBGNTQ1NUI2MDBCMEYxQkEgLyog
V29ya2VyTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV29ya2Vy
TG9jYXRpb24uaDsgcGF0aCA9IHdvcmtlci9Xb3JrZXJMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyRTQzNDVEODBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyTG9jYXRp
b24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdvcmtlckxvY2F0aW9uLmlkbDsgcGF0aCA9
IHdvcmtlci9Xb3JrZXJMb2NhdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTJFNDM0NUQ5MEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXb3JrZXJNZXNzYWdpbmdQcm94eS5j
cHA7IHBhdGggPSB3b3JrZXIvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyRTQzNDVEQTBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyTWVzc2Fn
aW5nUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV29ya2VyTWVzc2Fn
aW5nUHJveHkuaDsgcGF0aCA9IHdvcmtlci9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyRTQzNDVEQjBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2Vy
T2JqZWN0UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV29ya2VyT2Jq
ZWN0UHJveHkuaDsgcGF0aCA9IHdvcmtlci9Xb3JrZXJPYmplY3RQcm94eS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkyRTQzNDVEQzBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyUnVu
TG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXb3JrZXJSdW5M
b29wLmNwcDsgcGF0aCA9IHdvcmtlci9Xb3JrZXJSdW5Mb29wLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMkU0MzQ1REQwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlclJ1bkxvb3Au
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV29ya2VyUnVuTG9vcC5oOyBwYXRo
ID0gd29ya2VyL1dvcmtlclJ1bkxvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MkU0MzQ1REUwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXb3JrZXJUaHJlYWQuY3BwOyBwYXRoID0gd29ya2Vy
L1dvcmtlclRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFNDM0NURG
MEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV29ya2VyVGhyZWFkLmg7IHBhdGggPSB3b3JrZXIvV29ya2VyVGhyZWFkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMjg4RTZFMEUzMDA1RDYwMDM2MTlBRSAv
KiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzEyODhFNkYwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZVJ1
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEyODhFNzAwRTMwMDVENjAwMzYx
OUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05MTIyLDEyICs5MTM4LDkgQEAKIAkJRTEyNzFBNTcwRUVFQ0RFNDAw
RjYxMjEzIC8qIEpTV29ya2VyTmF2aWdhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTV29ya2VyTmF2aWdhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTEyRURCN0EwQjMwOEE3ODAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50VGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxMkVEQkU5MEIzMDhFMEIwMDI3MDRCNiAvKiBFdmVudFRhcmdldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudFRhcmdldC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxNDc5OUE2MEVDREUzQTQwMDI5MkJGMyAv
KiBXb3JrZXJNZXNzYWdpbmdQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXb3JrZXJNZXNzYWdpbmdQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlF
MTQ3OTlCMzBFQ0RFOUQ4MDAyOTJCRjMgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya2VyTWVzc2FnaW5nUHJveHkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTgxQjI1NjBGMTRDMUE2MDBGQjc4NDcg
LyogSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxODFCMzUwMEYxNTAwOEEwMEZCNzg0NyAvKiBTdGF0aWNTdHJpbmdMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY1N0cmluZ0xpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4MUIzNTUwRjE1MDBENzAwRkI3ODQ3IC8qIFN0
YXRpY1N0cmluZ0xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RhdGljU3RyaW5nTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxODI1
NjRGMEVGMkFDRTYwMDkzMzI0MiAvKiBXb3JrZXJDb250ZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXb3JrZXJDb250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTE4MjU2OEQwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyQ29udGV4dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dvcmtlckNvbnRleHQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTgyNTY4RTBFRjJCMDJEMDA5MzMyNDIgLyogSlNXb3Jr
ZXJDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV29ya2VyQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTgyNThBQjBFRjNDRDcwMDA5
MzMyNDIgLyogSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05MTUxLDI1ICs5MTY0LDE1IEBACiAJCUUxQURFREQ5MEU3NkJEOTMw
MDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTTWVzc2FnZVBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMUJFNTEyQjBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhTTFRVbmljb2RlU29ydC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQkU1MTJDMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xU
VW5pY29kZVNvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNMVFVuaWNv
ZGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxQzJDNDIzMEVBQ0UwQkMw
MDdFNjFGQiAvKiBXb3JrZXJUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV29ya2VyVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxQzJDNDI4
MEVBQ0UwRTAwMDdFNjFGQiAvKiBXb3JrZXJUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV29ya2VyVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRTFDMkM0M0QwRUFEMDEzMzAwN0U2MUZCIC8qIFdvcmtlckNvbnRleHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya2VyQ29udGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlFMUMyQzQ0MTBFQUQwMTdCMDA3RTYxRkIgLyogV29ya2VyQ29u
dGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrZXJDb250
ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTFDMzYyQkIwRUFGMjlGQjAw
NzQxMEJDIC8qIFdvcmtlckxvY2F0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXb3Jr
ZXJMb2NhdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQzM2MkVEMEVB
RjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTV29ya2VyTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTFDMzYyRUUwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2VyTG9jYXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXb3JrZXJMb2NhdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxQzM2MzAwMEVBRjJDQzYwMDc0MTBCQyAv
KiBXb3JrZXJMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3Jr
ZXJMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMUMzNjMwNTBFQUYy
RDA3MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV29ya2VyTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMUMzNkMwMjBFQjA3NkQ2MDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01HbG9iYWxPYmplY3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDMzZDQkMwRUIwODA2MjAwNzQxMEJDIC8qIEpT
RE9NR2xvYmFsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRE9NR2xvYmFsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFD
MzZEMzIwRUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2VyQ29udGV4dEJhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXb3JrZXJDb250ZXh0QmFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQzM2RDMzMEVCMEEwOTQwMDc0MTBCQyAvKiBK
U1dvcmtlckNvbnRleHRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
V29ya2VyQ29udGV4dEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDNERF
NjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBY3RpdmVET01PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTFDNERFNkQwRUE3NUM2NTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY3RpdmVET01PYmplY3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMUM4QkU0NDBFOEJDQ0JCMDA2NENCN0Qg
LyogV29ya2VyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXb3JrZXIuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMUM4QkU1QzBFOEJEMTVBMDA2NENCN0QgLyogSlNXb3Jr
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXb3JrZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMUNBNUM5RjBFOENENzNCMDBFOEVGOTAg
LyogV29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMUNBNUNBNDBFOENENzg1MDBFOEVGOTAgLyog
V29ya2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQ0E1Q0JCMEU4Q0RDQUYwMEU4RUY5
MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1dvcmtlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
Q0E1Q0QyMEU4Q0RFODAwMEU4RUY5MCAvKiBKU1dvcmtlckNvbnN0cnVjdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV29ya2VyQ29uc3RydWN0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDQTVDRDUwRThDREVFOTAwRThFRjkwIC8qIEpTV29ya2Vy
Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNX
b3JrZXJDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Mzcy
LDYgKzkzNzUsNyBAQAogCQkJCTFBRTgyRUM5MENBQUUxNzcwMDIyMzdBRSAvKiBzdG9yYWdlICov
LAogCQkJCUIyMjI3N0NBMEQwMEJGMUUwMDcxQjc4MiAvKiBzdmcgKi8sCiAJCQkJNEM2Qjk5MTUw
RTUyRTM3MzAwNDg3QkI3IC8qIHdtbCAqLywKKwkJCQkyRTQzNDVDQjBGNTQ1NTcxMDBCMEYxQkEg
Lyogd29ya2VyICovLAogCQkJCUUxRjA0MjQzMDk4MzkzODkwMDY2OTRFQSAvKiB4bWwgKi8sCiAJ
CQkJNjU2NTgwRUMwOUQxMkIyMDAwMEU2MUQ3IC8qIERlcml2ZWQgU291cmNlcyAqLywKIAkJCQkw
ODlDMTY2NUZFODQxMTU4QzAyQUFDMDcgLyogUmVzb3VyY2VzICovLApAQCAtOTcyMiw2ICs5NzI2
LDMzIEBACiAJCQl0YWJXaWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTJFNDM0
NUNCMEY1NDU1NzEwMEIwRjFCQSAvKiB3b3JrZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTJFNDM0NUNDMEY1NDU1QjYwMEIwRjFCQSAvKiBDcm9zc1Ro
cmVhZENvcGllci5jcHAgKi8sCisJCQkJMkU0MzQ1Q0QwRjU0NTVCNjAwQjBGMUJBIC8qIENyb3Nz
VGhyZWFkQ29waWVyLmggKi8sCisJCQkJMkU0MzQ1Q0UwRjU0NTVCNjAwQjBGMUJBIC8qIEdlbmVy
aWNXb3JrZXJUYXNrLmggKi8sCisJCQkJMkU0MzQ1Q0YwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtl
ci5jcHAgKi8sCisJCQkJMkU0MzQ1RDAwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlci5oICovLAor
CQkJCTJFNDM0NUQxMEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXIuaWRsICovLAorCQkJCTJFNDM0
NUQyMEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmNwcCAqLywKKwkJCQkyRTQzNDVE
MzBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5oICovLAorCQkJCTJFNDM0NUQ0MEY1
NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmlkbCAqLywKKwkJCQkyRTQzNDVENTBGNTQ1
NUI2MDBCMEYxQkEgLyogV29ya2VyQ29udGV4dFByb3h5LmggKi8sCisJCQkJMkU0MzQ1RDYwRjU0
NTVCNjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmNwcCAqLywKKwkJCQkyRTQzNDVENzBGNTQ1
NUI2MDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24uaCAqLywKKwkJCQkyRTQzNDVEODBGNTQ1NUI2
MDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24uaWRsICovLAorCQkJCTJFNDM0NUQ5MEY1NDU1QjYw
MEIwRjFCQSAvKiBXb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgKi8sCisJCQkJMkU0MzQ1REEwRjU0
NTVCNjAwQjBGMUJBIC8qIFdvcmtlck1lc3NhZ2luZ1Byb3h5LmggKi8sCisJCQkJMkU0MzQ1REIw
RjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlck9iamVjdFByb3h5LmggKi8sCisJCQkJMkU0MzQ1REMw
RjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlclJ1bkxvb3AuY3BwICovLAorCQkJCTJFNDM0NUREMEY1
NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJSdW5Mb29wLmggKi8sCisJCQkJMkU0MzQ1REUwRjU0NTVC
NjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5jcHAgKi8sCisJCQkJMkU0MzQ1REYwRjU0NTVCNjAw
QjBGMUJBIC8qIFdvcmtlclRocmVhZC5oICovLAorCQkJKTsKKwkJCW5hbWUgPSB3b3JrZXI7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkzMTZGRTEwNjBFNkUxRDg0MDBCRjYw
ODggLyogYW5pbWF0aW9uICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKQEAgLTE0MzM2LDggKzE0MzY3LDYgQEAKIAkJCQk4NTA4OUNDNzBBOThDMjI2MDBBMjc1QUEg
LyogQ29tbWVudC5pZGwgKi8sCiAJCQkJQTgxODcyMTQwOTc3RDNDMDAwNTgyNkQ5IC8qIENvbnRh
aW5lck5vZGUuY3BwICovLAogCQkJCUE4MTg3MjExMDk3N0QzQzAwMDU4MjZEOSAvKiBDb250YWlu
ZXJOb2RlLmggKi8sCi0JCQkJMEJCNERCRTEwRjJFRTI5ODAwMzU0NjE5IC8qIENyb3NzVGhyZWFk
Q29waWVyLmNwcCAqLywKLQkJCQkwQjRDRTdEQTBGMkU0QkRFMDBGNkVDMDQgLyogQ3Jvc3NUaHJl
YWRDb3BpZXIuaCAqLywKIAkJCQlCQzYwRDZFODBEMjhEODM0MDBCOTkxOEYgLyogRE9NQ29yZUV4
Y2VwdGlvbi5oICovLAogCQkJCUJDNjBENkVCMEQyOEQ5OTkwMEI5OTE4RiAvKiBET01Db3JlRXhj
ZXB0aW9uLmlkbCAqLywKIAkJCQlBODE4NUYzNjA5NzY1NzY1MDA1ODI2RDkgLyogRE9NSW1wbGVt
ZW50YXRpb24uY3BwICovLApAQCAtMTQzOTEsNyArMTQ0MjAsNiBAQAogCQkJCTA4NTc3MzM0MEYw
ODQ2MDEwMDgwNTgzRSAvKiBGb3JtQ29udHJvbEVsZW1lbnQuaCAqLywKIAkJCQkwOEI5M0Y3MzBG
MjkzNDgxMDAwNzIwQzIgLyogRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCAqLywKIAkJ
CQkwOEI5M0Y3NDBGMjkzNDgxMDAwNzIwQzIgLyogRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
LmggKi8sCi0JCQkJMEJBNUQzODUwRjI0MEZCNDAwOUI4NzBCIC8qIEdlbmVyaWNXb3JrZXJUYXNr
LmggKi8sCiAJCQkJMDg3MDBCRTYwRjA4NkM1MzAwOTE5NDE5IC8qIElucHV0RWxlbWVudC5jcHAg
Ki8sCiAJCQkJMDg1OTFBQTQwRjA4NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVudC5oICovLAog
CQkJCTg1MDMxQjJEMEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50LmNwcCAqLywKQEAg
LTE0NTEzLDIzICsxNDU0MSw2IEBACiAJCQkJODUwMzFCM0EwQTQ0RUZDNzAwRjk5MkUwIC8qIFdo
ZWVsRXZlbnQuY3BwICovLAogCQkJCTg1MDMxQjNCMEE0NEVGQzcwMEY5OTJFMCAvKiBXaGVlbEV2
ZW50LmggKi8sCiAJCQkJOTNFRUMxRjcwOUMyODc3NzAwQzUxNUQxIC8qIFdoZWVsRXZlbnQuaWRs
ICovLAotCQkJCUUxQ0E1Q0E0MEU4Q0Q3ODUwMEU4RUY5MCAvKiBXb3JrZXIuY3BwICovLAotCQkJ
CUUxQ0E1QzlGMEU4Q0Q3M0IwMEU4RUY5MCAvKiBXb3JrZXIuaCAqLywKLQkJCQlFMUM4QkU0NDBF
OEJDQ0JCMDA2NENCN0QgLyogV29ya2VyLmlkbCAqLywKLQkJCQlFMUMyQzQ0MTBFQUQwMTdCMDA3
RTYxRkIgLyogV29ya2VyQ29udGV4dC5jcHAgKi8sCi0JCQkJRTFDMkM0M0QwRUFEMDEzMzAwN0U2
MUZCIC8qIFdvcmtlckNvbnRleHQuaCAqLywKLQkJCQlFMTgyNTY0RjBFRjJBQ0U2MDA5MzMyNDIg
LyogV29ya2VyQ29udGV4dC5pZGwgKi8sCi0JCQkJMkUzQUM4NEQwRjNEMDZEMTAwNjMzRjA0IC8q
IFdvcmtlckNvbnRleHRQcm94eS5oICovLAotCQkJCUUxQzM2MzA1MEVBRjJEMDcwMDc0MTBCQyAv
KiBXb3JrZXJMb2NhdGlvbi5jcHAgKi8sCi0JCQkJRTFDMzYzMDAwRUFGMkNDNjAwNzQxMEJDIC8q
IFdvcmtlckxvY2F0aW9uLmggKi8sCi0JCQkJRTFDMzYyQkIwRUFGMjlGQjAwNzQxMEJDIC8qIFdv
cmtlckxvY2F0aW9uLmlkbCAqLywKLQkJCQlFMTQ3OTlCMzBFQ0RFOUQ4MDAyOTJCRjMgLyogV29y
a2VyTWVzc2FnaW5nUHJveHkuY3BwICovLAotCQkJCUUxNDc5OUE2MEVDREUzQTQwMDI5MkJGMyAv
KiBXb3JrZXJNZXNzYWdpbmdQcm94eS5oICovLAotCQkJCTJFM0FDODRGMEYzRDA2RjcwMDYzM0Yw
NCAvKiBXb3JrZXJPYmplY3RQcm94eS5oICovLAotCQkJCTE4QTA1MzdBMEYyNjg1OUMwMEE1MTcw
NSAvKiBXb3JrZXJSdW5Mb29wLmNwcCAqLywKLQkJCQkxOEEwNTM3QjBGMjY4NTlDMDBBNTE3MDUg
LyogV29ya2VyUnVuTG9vcC5oICovLAotCQkJCUUxQzJDNDI4MEVBQ0UwRTAwMDdFNjFGQiAvKiBX
b3JrZXJUaHJlYWQuY3BwICovLAotCQkJCUUxQzJDNDIzMEVBQ0UwQkMwMDdFNjFGQiAvKiBXb3Jr
ZXJUaHJlYWQuaCAqLywKIAkJCQlGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0EgLyogWE1MVG9rZW5p
emVyLmNwcCAqLywKIAkJCQlGNTIzRDMwQTAyREU0NDc2MDE4NjM1Q0EgLyogWE1MVG9rZW5pemVy
LmggKi8sCiAJCQkJNTRDNTBGN0EwRTgwMURGMzAwOTgzMkEwIC8qIFhNTFRva2VuaXplckxpYnht
bDIuY3BwICovLApAQCAtMTQ3MTEsNyArMTQ3MjIsNiBAQAogCQkJCTkzOTJGMTRDMEFEMTg2MUIw
MDY5MUJENCAvKiBDb3VudGVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDBCMDU1NjgwOUM2
NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTRDNzY2RTBDRTkyM0ExMDA3RUYzQ0QgLyogQ3JlZGVudGlhbC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMEI0Q0U3REIwRjJFNEJERTAwRjZFQzA0IC8qIENyb3NzVGhyZWFkQ29waWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMgLyogQ3Vyc29yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzIyNzJBMjBFODJFODdDMDBFN0Y5NzUgLyogQ3Vyc29yRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMyMjcyQUQwRTgyRThGMzAwRTdGOTc1IC8qIEN1cnNvckxpc3Qu
aCBpbiBIZWFkZXJzICovLApAQCAtMTU1NjMsNyArMTU1NzMsNiBAQAogCQkJCTkzNUM0Nzc1MDlB
QzREOEUwMEE2QUFCNCAvKiBHYXBSZWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyM0YwREIw
REFGRjRBNDAwOUZEQzkxIC8qIEdlbmVyYXRlZEltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0UwNEM4QTBEQUZGN0EwMDA3QTBGNDEgLyogR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwQkE1RDM4NjBGMjQwRkI0MDA5Qjg3MEIgLyogR2VuZXJpY1dvcmtlclRhc2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZFODBEN0M2MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9sb2NhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVBQjkwMTMwRUE1MUI5QzAwNjM0OEMzIC8qIEdlb2xvY2F0aW9u
U2VydmljZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU4MEQ3QzkwRTlDMUYyNTAwMEQ2Rjc1IC8q
IEdlb3Bvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTE2NzAxLDE2ICsxNjcxMCw4IEBACiAJ
CQkJOTM4MEY0NzQwOUExMUFCNDAwMUZEQjM0IC8qIFdpZGdldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTM5QjAyRUYwRUEyREJDNDAwQzU0NTcwIC8qIFdpZHRoSXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDODI0M0U5MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJlcy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJRTFDQTVDQTAwRThDRDczQjAwRThFRjkwIC8qIFdvcmtlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJRTFDMkM0M0UwRUFEMDEzMzAwN0U2MUZCIC8qIFdvcmtlckNvbnRl
eHQuaCBpbiBIZWFkZXJzICovLAotCQkJCTJFM0FDODRFMEYzRDA2RDEwMDYzM0YwNCAvKiBXb3Jr
ZXJDb250ZXh0UHJveHkuaCBpbiBIZWFkZXJzICovLAotCQkJCUUxQzM2MzAxMEVBRjJDQzYwMDc0
MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTE0Nzk5QTcwRUNE
RTNBNDAwMjkyQkYzIC8qIFdvcmtlck1lc3NhZ2luZ1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMTI3MUEwQjBFRUVDNzdBMDBGNjEyMTMgLyogV29ya2VyTmF2aWdhdG9yLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkyRTNBQzg1MDBGM0QwNkY3MDA2MzNGMDQgLyogV29ya2VyT2JqZWN0UHJveHku
aCBpbiBIZWFkZXJzICovLAotCQkJCTE4QTA1MzdEMEYyNjg1OUMwMEE1MTcwNSAvKiBXb3JrZXJS
dW5Mb29wLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUE2NDNGMjBFQzA5NzI1MDA3Nzk2NjggLyog
V29ya2VyU2NyaXB0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTFDMkM0MjQwRUFD
RTBCQzAwN0U2MUZCIC8qIFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEI5MDU2
RjkwRjI2ODVGMzAwOTVGRjZBIC8qIFdvcmtlclRocmVhZGFibGVMb2FkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMzA5RTI0MDk5RTY0OTIwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15
U3BhbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NjU4MjAyMDlEMTUwOEQwMDBFNjFE
NyAvKiBYTGlua05hbWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTE2Nzc3LDYgKzE2Nzc4LDE2IEBA
CiAJCQkJOTMzMDlFMUUwOTlFNjQ5MjAwNTZFNTgxIC8qIHZpc2libGVfdW5pdHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUExN0M4MTIzMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRDAxNUNBMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250
ZW50VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkU0MzQ1RTEwRjU0NTVCNjAwQjBGMUJBIC8q
IENyb3NzVGhyZWFkQ29waWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRTQzNDVFMjBGNTQ1NUI2
MDBCMEYxQkEgLyogR2VuZXJpY1dvcmtlclRhc2suaCBpbiBIZWFkZXJzICovLAorCQkJCTJFNDM0
NUU0MEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTJFNDM0
NUU3MEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkyRTQzNDVFOTBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyQ29udGV4dFByb3h5LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkyRTQzNDVFQjBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTJFNDM0NUVFMEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJN
ZXNzYWdpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkU0MzQ1RUYwRjU0NTVCNjAwQjBG
MUJBIC8qIFdvcmtlck9iamVjdFByb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQkyRTQzNDVGMTBG
NTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyUnVuTG9vcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkU0
MzQ1RjMwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0xNjg5NCw2ICsxNjkwNSw5IEBACiAJCQkJODUxMzZDQTgwQUVENjY1OTAwRjkwQTNEIC8qIHdl
c3RSZXNpemVDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIxQUU3QTBDMDUxRkRF
MDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFF
N0IwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21PdXRDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywK
KwkJCQkyRTQzNDVFNTBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyLmlkbCBpbiBSZXNvdXJjZXMg
Ki8sCisJCQkJMkU0MzQ1RTgwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlckNvbnRleHQuaWRsIGlu
IFJlc291cmNlcyAqLywKKwkJCQkyRTQzNDVFQzBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyTG9j
YXRpb24uaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3MTg3LDcgKzE3MjAxLDYgQEAKIAkJCQk5
MzkyRjE1MDBBRDE4NjIzMDA2OTFCRDQgLyogQ291bnRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRDBCMDU1NjkwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUxNEM3NjZEMENFOTIzQTEwMDdFRjNDRCAvKiBDcmVkZW50aWFs
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBCQjREQkUyMEYyRUUyOTgwMDM1NDYxOSAvKiBDcm9z
c1RocmVhZENvcGllci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUEyNjA4MjQ1RTU5MDAx
RTlBQkMgLyogQ3Vyc29yTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGMzRGRTkwRTgyRjgy
NzAwRjYyN0NEIC8qIEROU0NGTmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMUEzN0FFMDk3
QzcxNUYwMDE5RjNEOCAvKiBET00ubW0gaW4gU291cmNlcyAqLywKQEAgLTE4Njk5LDE0ICsxODcx
Miw4IEBACiAJCQkJOTM4MEY0NzgwOUExMUFDQzAwMUZEQjM0IC8qIFdpZGdldE1hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTkzOUIwMkVFMEVBMkRCQzQwMEM1NDU3MCAvKiBXaWR0aEl0ZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDODI0M0U4MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5k
b3dGZWF0dXJlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMUNBNUNBNTBFOENENzg1MDBFOEVG
OTAgLyogV29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQzJDNDQyMEVBRDAxN0IwMDdF
NjFGQiAvKiBXb3JrZXJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQzM2MzA2MEVB
RjJEMDcwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlF
MTQ3OTlCNDBFQ0RFOUQ4MDAyOTJCRjMgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTEyNzFBMTQwRUVFQzgwNDAwRjYxMjEzIC8qIFdvcmtlck5hdmlnYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxOEEwNTM3QzBGMjY4NTlDMDBBNTE3MDUgLyogV29y
a2VyUnVuTG9vcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUE2NDNGRDBFQzA5N0EwMDA3Nzk2
NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMUMy
QzQyOTBFQUNFMEUwMDA3RTYxRkIgLyogV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBCOTA1NkY4MEYyNjg1RjMwMDk1RkY2QSAvKiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTIzMDk5RTY0OTIwMDU2RTU4MSAvKiBXcmFwQ29u
dGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M3Q0Mw
QTJDRjA3NDAwRDU3NjY0IC8qIFhMaW5rTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xODc2
NSw2ICsxODc3MiwxMyBAQAogCQkJCTkzMzA5RTFEMDk5RTY0OTIwMDU2RTU4MSAvKiB2aXNpYmxl
X3VuaXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExN0M4MTIyMEYyQTVDRjcwMDVEQUFFQiAv
KiBIVE1MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFEMDE1Q0IwRjRC
NUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJFNDM0
NUUwMEY1NDU1QjYwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkyRTQzNDVFMzBGNTQ1NUI2MDBCMEYxQkEgLyogV29ya2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTJFNDM0NUU2MEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTJFNDM0NUVBMEY1NDU1QjYwMEIwRjFCQSAvKiBXb3JrZXJMb2Nh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRTQzNDVFRDBGNTQ1NUI2MDBCMEYxQkEgLyog
V29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkU0MzQ1RjAwRjU0
NTVCNjAwQjBGMUJBIC8qIFdvcmtlclJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkU0
MzQ1RjIwRjU0NTVCNjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBiL1dlYkNvcmUv
ZG9tL0Nyb3NzVGhyZWFkQ29waWVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MjdhZGYzYi4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2RvbS9Dcm9zc1RocmVhZENvcGllci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYg
RU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJDcm9zc1RocmVhZENvcGllci5oIgotCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgU3Ry
aW5nPjo6VHlwZSBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFN0cmluZz46OmNvcHkoY29u
c3QgU3RyaW5nJiBzdHIpCi17Ci0gICAgcmV0dXJuIHN0ci5jb3B5KCk7Ci19Ci0KLUNyb3NzVGhy
ZWFkQ29waWVyQmFzZTxmYWxzZSwgUmVzb3VyY2VFcnJvcj46OlR5cGUgQ3Jvc3NUaHJlYWRDb3Bp
ZXJCYXNlPGZhbHNlLCBSZXNvdXJjZUVycm9yPjo6Y29weShjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKLXsKLSAgICByZXR1cm4gZXJyb3IuY29weSgpOwotfQotCi1Dcm9zc1RocmVhZENvcGll
ckJhc2U8ZmFsc2UsIFJlc291cmNlUmVxdWVzdD46OlR5cGUgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNl
PGZhbHNlLCBSZXNvdXJjZVJlcXVlc3Q+Ojpjb3B5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdC5jb3B5RGF0YSgpOwotfQotCi1Dcm9zc1RocmVh
ZENvcGllckJhc2U8ZmFsc2UsIFJlc291cmNlUmVzcG9uc2U+OjpUeXBlIENyb3NzVGhyZWFkQ29w
aWVyQmFzZTxmYWxzZSwgUmVzb3VyY2VSZXNwb25zZT46OmNvcHkoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCi17Ci0gICAgcmV0dXJuIHJlc3BvbnNlLmNvcHlEYXRhKCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1dlYkNvcmUvZG9tL0Ny
b3NzVGhyZWFkQ29waWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YzFjMjUu
LjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9kb20vQ3Jvc3NUaHJlYWRDb3BpZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDcm9zc1RocmVhZENvcGllcl9oCi0jZGVmaW5l
IENyb3NzVGhyZWFkQ29waWVyX2gKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSA8
bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0
cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBSZXNvdXJjZUVycm9yOwot
ICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKLSAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwot
ICAgIGNsYXNzIFN0cmluZzsKLSAgICBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNl
RGF0YTsKLSAgICBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2gg
ewotICAgICAgICB0eXBlZGVmIFQgVHlwZTsKLSAgICAgICAgc3RhdGljIFR5cGUgY29weShjb25z
dCBUJiBwYXJhbWV0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8Ym9vbCBpc0NvbnZlcnRpYmxlVG9J
bnRlZ2VyLCB0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlOwotCi0gICAg
Ly8gSW50ZWdlcnMgZ2V0IHBhc3NlZCB0aHJvdWdoIHdpdGhvdXQgYW55IGNoYW5nZXMuCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTx0cnVlLCBU
PiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBhc3NUaHJvdWdoPFQ+IHsKLSAgICB9OwotCi0g
ICAgLy8gUG9pbnRlcnMgZ2V0IHBhc3NlZCB0aHJvdWdoIHdpdGhvdXQgYW55IHNpZ25pZmljYW50
IGNoYW5nZXMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29w
aWVyQmFzZTxmYWxzZSwgVCo+IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2g8
VCo+IHsKLSAgICB9OwotCi0gICAgLy8gQ3VzdG9tIGNvcHkgbWV0aG9kcy4KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBSZWZQdHI8
VGhyZWFkU2FmZVNoYXJlZDxUPiA+ID4gewotICAgICAgICB0eXBlZGVmIFBhc3NSZWZQdHI8VD4g
VHlwZTsKLSAgICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBSZWZQdHI8VGhyZWFkU2FmZVNo
YXJlZDxUPiA+JiByZWZQdHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBQYXNzUmVm
UHRyPFQ+KHN0YXRpY19jYXN0PFQqPihyZWZQdHIuZ2V0KCkpKTsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNl
PGZhbHNlLCBzdGQ6OmF1dG9fcHRyPFQ+ID4gewotICAgICAgICB0eXBlZGVmIHN0ZDo6YXV0b19w
dHI8VD4gVHlwZTsKLSAgICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBzdGQ6OmF1dG9fcHRy
PFQ+JiBhdXRvUHRyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjphdXRvX3B0
cjxUPigqY29uc3RfY2FzdDxzdGQ6OmF1dG9fcHRyPFQ+Kj4oJmF1dG9QdHIpKTsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8
ZmFsc2UsIFN0cmluZz4gewotICAgICAgICB0eXBlZGVmIFN0cmluZyBUeXBlOwotICAgICAgICBz
dGF0aWMgVHlwZSBjb3B5KGNvbnN0IFN0cmluZyYpOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFJlc291cmNlRXJyb3I+IHsKLSAg
ICAgICAgdHlwZWRlZiBSZXNvdXJjZUVycm9yIFR5cGU7Ci0gICAgICAgIHN0YXRpYyBUeXBlIGNv
cHkoY29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFJlc291cmNlUmVxdWVzdD4gewotICAgICAg
ICB0eXBlZGVmIHN0ZDo6YXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiBU
eXBlOwotICAgICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFs
c2UsIFJlc291cmNlUmVzcG9uc2U+IHsKLSAgICAgICAgdHlwZWRlZiBzdGQ6OmF1dG9fcHRyPENy
b3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+IFR5cGU7Ci0gICAgICAgIHN0YXRpYyBUeXBl
IGNvcHkoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXIgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRD
b3BpZXJCYXNlPFdURjo6SXNDb252ZXJ0aWJsZVRvSW50ZWdlcjxUPjo6dmFsdWUsIFQ+IHsKLSAg
ICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VS
UykKLQotI2VuZGlmIC8vIENyb3NzVGhyZWFkQ29waWVyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL0dlbmVyaWNXb3JrZXJUYXNrLmggYi9XZWJDb3JlL2RvbS9HZW5lcmljV29ya2VyVGFzay5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmIwZTcwLi4wMDAwMDAwCi0tLSBhL1dl
YkNvcmUvZG9tL0dlbmVyaWNXb3JrZXJUYXNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MTUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgR2VuZXJpY1dvcmtlclRhc2tfaAotI2RlZmluZSBHZW5lcmljV29ya2VyVGFz
a19oCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVy
LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgPG1lbW9y
eT4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRz
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIC8vIFRyYWl0cyBmb3IgdGhlIEdlbmVy
aWNXb3JrZXJUYXNrLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljV29y
a2VyVGFza1RyYWl0cyB7Ci0gICAgICAgIHR5cGVkZWYgY29uc3QgVCYgUGFyYW1UeXBlOwotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgR2VuZXJpY1dvcmtlclRhc2tU
cmFpdHM8VCo+IHsKLSAgICAgICAgdHlwZWRlZiBUKiBQYXJhbVR5cGU7Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljV29ya2VyVGFza1RyYWl0czxzdGQ6
OmF1dG9fcHRyPFQ+ID4gewotICAgICAgICB0eXBlZGVmIHN0ZDo6YXV0b19wdHI8VD4gUGFyYW1U
eXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgR2VuZXJpY1dv
cmtlclRhc2tUcmFpdHM8UGFzc1JlZlB0cjxUPiA+IHsKLSAgICAgICAgdHlwZWRlZiBQYXNzUmVm
UHRyPFQ+IFBhcmFtVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5
cGVuYW1lIE1QMT4KLSAgICBjbGFzcyBHZW5lcmljV29ya2VyVGFzazEgOiBwdWJsaWMgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIHZv
aWQgKCpNZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEpOwotICAgICAgICB0eXBl
ZGVmIEdlbmVyaWNXb3JrZXJUYXNrMTxQMSwgTVAxPiBHZW5lcmljV29ya2VyVGFzazsKLSAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMT46OlBhcmFtVHlw
ZSBQYXJhbTE7Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+
IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljV29ya2VyVGFzayhtZXRob2QsIHBh
cmFtZXRlcjEpKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgR2VuZXJpY1dv
cmtlclRhc2sxKE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQotICAgICAgICAgICAg
OiBtX21ldGhvZChtZXRob2QpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIx
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRh
c2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgKCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJhbWV0ZXIxKTsKLSAgICAgICAgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgTWV0aG9kIG1fbWV0aG9kOwotICAgICAgICBQMSBtX3BhcmFtZXRl
cjE7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5
cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+Ci0gICAgY2xhc3MgR2VuZXJpY1dvcmtlclRhc2syIDog
cHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgdHlwZWRlZiB2b2lkICgqTWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBN
UDIpOwotICAgICAgICB0eXBlZGVmIEdlbmVyaWNXb3JrZXJUYXNrMjxQMSwgTVAxLCBQMiwgTVAy
PiBHZW5lcmljV29ya2VyVGFzazsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29y
a2VyVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7Ci0gICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOwotCi0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNXb3JrZXJUYXNrPiBjcmVhdGUoTWV0aG9k
IG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhv
ZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMikpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICBHZW5lcmljV29ya2VyVGFzazIoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRl
cjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQotICAgICAgICAgICAgOiBtX21ldGhvZChtZXRob2QpCi0g
ICAgICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQotICAgICAgICAgICAgLCBtX3Bh
cmFtZXRlcjIocGFyYW1ldGVyMikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQsIG1fcGFyYW1ldGVyMSwg
bV9wYXJhbWV0ZXIyKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWV0aG9k
IG1fbWV0aG9kOwotICAgICAgICBQMSBtX3BhcmFtZXRlcjE7Ci0gICAgICAgIFAyIG1fcGFyYW1l
dGVyMjsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwg
dHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMz4KLSAg
ICBjbGFzcyBHZW5lcmljV29ya2VyVGFzazMgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzayB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIHZvaWQgKCpNZXRob2QpKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzKTsKLSAgICAgICAgdHlwZWRlZiBH
ZW5lcmljV29ya2VyVGFzazM8UDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMz4gR2VuZXJpY1dvcmtl
clRhc2s7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8
UDE+OjpQYXJhbVR5cGUgUGFyYW0xOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNX
b3JrZXJUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKLSAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7Ci0K
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRo
b2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBw
YXJhbWV0ZXIzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdl
bmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVy
MykpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBHZW5lcmljV29ya2VyVGFz
azMoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQ
YXJhbTMgcGFyYW1ldGVyMykKLSAgICAgICAgICAgIDogbV9tZXRob2QobWV0aG9kKQotICAgICAg
ICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKLSAgICAgICAgICAgICwgbV9wYXJhbWV0
ZXIyKHBhcmFtZXRlcjIpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
KCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1l
dGVyMyk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1ldGhvZCBtX21ldGhv
ZDsKLSAgICAgICAgUDEgbV9wYXJhbWV0ZXIxOwotICAgICAgICBQMiBtX3BhcmFtZXRlcjI7Ci0g
ICAgICAgIFAzIG1fcGFyYW1ldGVyMzsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
UDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMs
IHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QND4KLSAgICBjbGFzcyBHZW5l
cmljV29ya2VyVGFzazQgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci0g
ICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIHZvaWQgKCpNZXRob2QpKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQpOwotICAgICAgICB0eXBlZGVmIEdlbmVyaWNX
b3JrZXJUYXNrNDxQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0PiBHZW5lcmljV29y
a2VyVGFzazsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0
czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJp
Y1dvcmtlclRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOwotICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsK
LSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQND46OlBh
cmFtVHlwZSBQYXJhbTQ7Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtl
clRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBh
cmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljV29ya2VyVGFzayhtZXRo
b2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQpKTsKLSAg
ICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgR2VuZXJpY1dvcmtlclRhc2s0KE1ldGhv
ZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBh
cmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0KQotICAgICAgICAgICAgOiBtX21ldGhvZChtZXRo
b2QpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQotICAgICAgICAgICAg
LCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKLSAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBh
cmFtZXRlcjMpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0ZXI0KQotICAgICAg
ICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgKCptX21l
dGhvZCkoY29udGV4dCwgbV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywg
bV9wYXJhbWV0ZXI0KTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWV0aG9k
IG1fbWV0aG9kOwotICAgICAgICBQMSBtX3BhcmFtZXRlcjE7Ci0gICAgICAgIFAyIG1fcGFyYW1l
dGVyMjsKLSAgICAgICAgUDMgbV9wYXJhbWV0ZXIzOwotICAgICAgICBQNCBtX3BhcmFtZXRlcjQ7
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVu
YW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1l
IFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+Ci0gICAgY2xhc3Mg
R2VuZXJpY1dvcmtlclRhc2s1IDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiB2b2lkICgqTWV0aG9kKShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpOwotICAgICAgICB0eXBlZGVm
IEdlbmVyaWNXb3JrZXJUYXNrNTxQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQ
NSwgTVA1PiBHZW5lcmljV29ya2VyVGFzazsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5l
cmljV29ya2VyVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7Ci0gICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0y
OwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAzPjo6
UGFyYW1UeXBlIFBhcmFtMzsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2Vy
VGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDU+OjpQYXJhbVR5cGUgUGFyYW01OwotCi0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNXb3JrZXJUYXNrPiBjcmVhdGUoTWV0aG9kIG1l
dGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1l
dGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1KQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwg
cGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCwgcGFyYW1ldGVy
NSkpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBHZW5lcmljV29ya2VyVGFz
azUoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQ
YXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1KQot
ICAgICAgICAgICAgOiBtX21ldGhvZChtZXRob2QpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVy
MShwYXJhbWV0ZXIxKQotICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKLSAg
ICAgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCi0gICAgICAgICAgICAsIG1fcGFy
YW1ldGVyNChwYXJhbWV0ZXI0KQotICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjUocGFyYW1ldGVy
NSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1U
YXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICgqbV9tZXRob2QpKGNvbnRleHQsIG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3Bh
cmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1KTsKLSAgICAgICAgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgTWV0aG9kIG1fbWV0aG9kOwotICAgICAgICBQMSBtX3BhcmFtZXRl
cjE7Ci0gICAgICAgIFAyIG1fcGFyYW1ldGVyMjsKLSAgICAgICAgUDMgbV9wYXJhbWV0ZXIzOwot
ICAgICAgICBQNCBtX3BhcmFtZXRlcjQ7Ci0gICAgICAgIFA1IG1fcGFyYW1ldGVyNTsKLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIs
IHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5
cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNSwgdHlwZW5hbWUgUDYsIHR5cGVu
YW1lIE1QNj4KLSAgICBjbGFzcyBHZW5lcmljV29ya2VyVGFzazYgOiBwdWJsaWMgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzayB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIHZvaWQg
KCpNZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQsIE1Q
NSwgTVA2KTsKLSAgICAgICAgdHlwZWRlZiBHZW5lcmljV29ya2VyVGFzazY8UDEsIE1QMSwgUDIs
IE1QMiwgUDMsIE1QMywgUDQsIE1QNCwgUDUsIE1QNSwgUDYsIE1QNj4gR2VuZXJpY1dvcmtlclRh
c2s7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDE+
OjpQYXJhbVR5cGUgUGFyYW0xOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3Jr
ZXJUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKLSAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7Ci0gICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5
cGUgUGFyYW00OwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJh
aXRzPFA1Pjo6UGFyYW1UeXBlIFBhcmFtNTsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5l
cmljV29ya2VyVGFza1RyYWl0czxQNj46OlBhcmFtVHlwZSBQYXJhbTY7Ci0KLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQ
YXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQ
YXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUsIFBhcmFtNiBwYXJhbWV0ZXI2KQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlbmVyaWNXb3JrZXJU
YXNrKG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVy
NCwgcGFyYW1ldGVyNSwgcGFyYW1ldGVyNikpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICBHZW5lcmljV29ya2VyVGFzazYoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRl
cjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRl
cjQsIFBhcmFtNSBwYXJhbWV0ZXI1LCBQYXJhbTYgcGFyYW1ldGVyNikKLSAgICAgICAgICAgIDog
bV9tZXRob2QobWV0aG9kKQotICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkK
LSAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCi0gICAgICAgICAgICAsIG1f
cGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQotICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1l
dGVyNCkKLSAgICAgICAgICAgICwgbV9wYXJhbWV0ZXI1KHBhcmFtZXRlcjUpCi0gICAgICAgICAg
ICAsIG1fcGFyYW1ldGVyNihwYXJhbWV0ZXI2KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgKCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJh
bWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0LCBtX3BhcmFt
ZXRlcjUsIG1fcGFyYW1ldGVyNik7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IE1ldGhvZCBtX21ldGhvZDsKLSAgICAgICAgUDEgbV9wYXJhbWV0ZXIxOwotICAgICAgICBQMiBt
X3BhcmFtZXRlcjI7Ci0gICAgICAgIFAzIG1fcGFyYW1ldGVyMzsKLSAgICAgICAgUDQgbV9wYXJh
bWV0ZXI0OwotICAgICAgICBQNSBtX3BhcmFtZXRlcjU7Ci0gICAgICAgIFA2IG1fcGFyYW1ldGVy
NjsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlw
ZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5h
bWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNSwgdHlwZW5hbWUg
UDYsIHR5cGVuYW1lIE1QNiwgdHlwZW5hbWUgUDcsIHR5cGVuYW1lIE1QNz4KLSAgICBjbGFzcyBH
ZW5lcmljV29ya2VyVGFzazcgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7
Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIHZvaWQgKCpNZXRob2QpKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSwgTVA2LCBNUDcpOwotICAgICAg
ICB0eXBlZGVmIEdlbmVyaWNXb3JrZXJUYXNrNzxQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQ
NCwgTVA0LCBQNSwgTVA1LCBQNiwgTVA2LCBQNywgTVA3PiBHZW5lcmljV29ya2VyVGFzazsKLSAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMT46OlBhcmFt
VHlwZSBQYXJhbTE7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tU
cmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdl
bmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKLSAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJh
bTQ7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDU+
OjpQYXJhbVR5cGUgUGFyYW01OwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3Jr
ZXJUYXNrVHJhaXRzPFA2Pjo6UGFyYW1UeXBlIFBhcmFtNjsKLSAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQNz46OlBhcmFtVHlwZSBQYXJhbTc7Ci0KLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUsIFBhcmFtNiBwYXJh
bWV0ZXI2LCBQYXJhbTcgcGFyYW1ldGVyNykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBHZW5lcmljV29ya2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFt
ZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQsIHBhcmFtZXRlcjUsIHBhcmFtZXRlcjYsIHBh
cmFtZXRlcjcpKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgR2VuZXJpY1dv
cmtlclRhc2s3KE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1l
dGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1l
dGVyNSwgUGFyYW02IHBhcmFtZXRlcjYsIFBhcmFtNyBwYXJhbWV0ZXI3KQotICAgICAgICAgICAg
OiBtX21ldGhvZChtZXRob2QpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIx
KQotICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKLSAgICAgICAgICAgICwg
bV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJh
bWV0ZXI0KQotICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjUocGFyYW1ldGVyNSkKLSAgICAgICAg
ICAgICwgbV9wYXJhbWV0ZXI2KHBhcmFtZXRlcjYpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVy
NyhwYXJhbWV0ZXI3KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgKCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJhbWV0ZXIxLCBtX3BhcmFt
ZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUsIG1fcGFyYW1l
dGVyNiwgbV9wYXJhbWV0ZXI3KTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
TWV0aG9kIG1fbWV0aG9kOwotICAgICAgICBQMSBtX3BhcmFtZXRlcjE7Ci0gICAgICAgIFAyIG1f
cGFyYW1ldGVyMjsKLSAgICAgICAgUDMgbV9wYXJhbWV0ZXIzOwotICAgICAgICBQNCBtX3BhcmFt
ZXRlcjQ7Ci0gICAgICAgIFA1IG1fcGFyYW1ldGVyNTsKLSAgICAgICAgUDYgbV9wYXJhbWV0ZXI2
OwotICAgICAgICBQNyBtX3BhcmFtZXRlcjc7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDE+Ci0gICAgUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrPiBjcmVhdGVDYWxsYmFja1Rhc2soCi0gICAgICAgIHZvaWQgKCptZXRob2QpKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEpLAotICAgICAgICBjb25zdCBQMSYgcGFyYW1ldGVy
MSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBHZW5lcmljV29ya2VyVGFzazE8dHlwZW5hbWUgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDE+OjpjcmVhdGUoCi0gICAgICAgICAgICBtZXRo
b2QsCi0gICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSkp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVu
YW1lIFAyLCB0eXBlbmFtZSBNUDI+Ci0gICAgUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrPiBjcmVhdGVDYWxsYmFja1Rhc2soCi0gICAgICAgIHZvaWQgKCptZXRob2QpKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiksCi0gICAgICAgIGNvbnN0IFAxJiBwYXJh
bWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHZW5l
cmljV29ya2VyVGFzazI8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEs
IHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyPjo6Y3JlYXRlKAotICAg
ICAgICAgICAgbWV0aG9kLAotICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5
KHBhcmFtZXRlcjEpLCBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMikpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1l
IFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+Ci0gICAgUGFzc1Jl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGVDYWxsYmFja1Rhc2soCi0g
ICAgICAgIHZvaWQgKCptZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwg
TVAzKSwKLSAgICAgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIy
LCBjb25zdCBQMyYgcGFyYW1ldGVyMykKLSAgICB7Ci0gICAgICAgIHJldHVybiBHZW5lcmljV29y
a2VyVGFzazM8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVu
YW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVh
ZENvcGllcjxQMz46OlR5cGUsIE1QMz46OmNyZWF0ZSgKLSAgICAgICAgICAgIG1ldGhvZCwKLSAg
ICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwgQ3Jvc3NU
aHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAotICAgICAgICAgICAgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBl
bmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0PgotICAgIFBh
c3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlQ2FsbGJhY2tUYXNr
KAotICAgICAgICB2b2lkICgqbWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBN
UDIsIE1QMywgTVA0KSwKLSAgICAgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsIGNvbnN0IFAyJiBw
YXJhbWV0ZXIyLCBjb25zdCBQMyYgcGFyYW1ldGVyMywgY29uc3QgUDQmIHBhcmFtZXRlcjQpCi0g
ICAgewotICAgICAgICByZXR1cm4gR2VuZXJpY1dvcmtlclRhc2s0PHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46
OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMsCi0g
ICAgICAgICAgICB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QND46OmNy
ZWF0ZSgKLSAgICAgICAgICAgICAgICBtZXRob2QsCi0gICAgICAgICAgICAgICAgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLCBDcm9zc1RocmVhZENvcGllcjxQMj46OmNv
cHkocGFyYW1ldGVyMiksCi0gICAgICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpj
b3B5KHBhcmFtZXRlcjMpLCBDcm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1ldGVyNCkp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVu
YW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1l
IFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+Ci0gICAgUGFzc1Jl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGVDYWxsYmFja1Rhc2soCi0g
ICAgICAgIHZvaWQgKCptZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwg
TVAzLCBNUDQsIE1QNSksCi0gICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLCBjb25zdCBQMiYg
cGFyYW1ldGVyMiwgY29uc3QgUDMmIHBhcmFtZXRlcjMsIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LCBj
b25zdCBQNSYgcGFyYW1ldGVyNSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBHZW5lcmljV29ya2Vy
VGFzazU8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1l
IENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQMz46OlR5cGUsIE1QMywKLSAgICAgICAgICAgIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29w
aWVyPFA0Pjo6VHlwZSwgTVA0LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNT46OlR5cGUs
IE1QNT46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBtZXRob2QsCi0gICAgICAgICAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLCBDcm9zc1RocmVhZENvcGll
cjxQMj46OmNvcHkocGFyYW1ldGVyMiksCi0gICAgICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLCBDcm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFy
YW1ldGVyNCksCi0gICAgICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+Ojpjb3B5KHBh
cmFtZXRlcjUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUg
TVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAz
LCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1LCB0
eXBlbmFtZSBQNiwgdHlwZW5hbWUgTVA2PgotICAgIFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gY3JlYXRlQ2FsbGJhY2tUYXNrKAotICAgICAgICB2b2lkICgqbWV0aG9k
KShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUsIE1QNiks
Ci0gICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29u
c3QgUDMmIHBhcmFtZXRlcjMsIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LCBjb25zdCBQNSYgcGFyYW1l
dGVyNSwgY29uc3QgUDYmIHBhcmFtZXRlcjYpCi0gICAgewotICAgICAgICByZXR1cm4gR2VuZXJp
Y1dvcmtlclRhc2s2PHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0
eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NU
aHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMsCi0gICAgICAgICAgICB0eXBlbmFtZSBDcm9zc1Ro
cmVhZENvcGllcjxQND46OlR5cGUsIE1QNCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+
OjpUeXBlLCBNUDUsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA2Pjo6VHlwZSwgTVA2Pjo6
Y3JlYXRlKAotICAgICAgICAgICAgICAgIG1ldGhvZCwKLSAgICAgICAgICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6
Y29weShwYXJhbWV0ZXIyKSwKLSAgICAgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46
OmNvcHkocGFyYW1ldGVyMyksIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0
KSwKLSAgICAgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVy
NSksIENyb3NzVGhyZWFkQ29waWVyPFA2Pjo6Y29weShwYXJhbWV0ZXI2KSk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVu
YW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1l
IE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNSwgdHlwZW5hbWUgUDYsIHR5cGVuYW1lIE1Q
NiwgdHlwZW5hbWUgUDcsIHR5cGVuYW1lIE1QNz4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKLSAgICAgICAgdm9pZCAoKm1l
dGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1LCBN
UDYsIE1QNyksCi0gICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1l
dGVyMiwgY29uc3QgUDMmIHBhcmFtZXRlcjMsIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LCBjb25zdCBQ
NSYgcGFyYW1ldGVyNSwgY29uc3QgUDYmIHBhcmFtZXRlcjYsIGNvbnN0IFA3JiBwYXJhbWV0ZXI3
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdlbmVyaWNXb3JrZXJUYXNrNzx0eXBlbmFtZSBDcm9z
c1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAz
LAotICAgICAgICAgICAgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQs
IHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwgTVA1LCB0eXBlbmFtZSBDcm9z
c1RocmVhZENvcGllcjxQNj46OlR5cGUsIE1QNiwKLSAgICAgICAgICAgIHR5cGVuYW1lIENyb3Nz
VGhyZWFkQ29waWVyPFA3Pjo6VHlwZSwgTVA3Pjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIG1l
dGhvZCwKLSAgICAgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1l
dGVyMSksIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKLSAgICAgICAg
ICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksIENyb3NzVGhy
ZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwKLSAgICAgICAgICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVyNSksIENyb3NzVGhyZWFkQ29waWVyPFA2Pjo6
Y29weShwYXJhbWV0ZXI2KSwKLSAgICAgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQNz46
OmNvcHkocGFyYW1ldGVyNykpOwotICAgIH0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCi0KLSNlbmRpZiAvLyBHZW5lcmljV29ya2VyVGFza19o
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Xb3JrZXIuY3BwIGIvV2ViQ29yZS9kb20vV29ya2Vy
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJjOWRhMi4uMDAwMDAwMAotLS0g
YS9XZWJDb3JlL2RvbS9Xb3JrZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV09SS0VSUykK
LQotI2luY2x1ZGUgIldvcmtlci5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5j
bHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNs
dWRlICJNZXNzYWdlRXZlbnQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1
ZGUgIldvcmtlckNvbnRleHRQcm94eS5oIgotI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgotI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotV29ya2Vy
OjpXb3JrZXIoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRo
aXMpCi0gICAgLCBtX2NvbnRleHRQcm94eShXb3JrZXJDb250ZXh0UHJveHk6OmNyZWF0ZSh0aGlz
KSkKLXsKLSAgICBtX3NjcmlwdFVSTCA9IGNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCk7Ci0gICAg
aWYgKHVybC5pc0VtcHR5KCkgfHwgIW1fc2NyaXB0VVJMLmlzVmFsaWQoKSkgewotICAgICAgICBl
YyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbnRl
eHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1f
c2NyaXB0VVJMKS5nZXQoKSkpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogJ2luaGVyaXQnIGNoYXJzZXQgYW5kIGFj
dHVhbCBsb2FkaW5nIHN1cHBvcnQgZnJvbSBvcmlnaW5hbCBkb2N1bWVudCB0byBlbmFibGUgbmVz
dGVkIHdvcmtlcnMuCi0gICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1
bWVudCgpKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0KLSAgICBtX2NhY2hlZFNjcmlwdCA9IGRvY3Vt
ZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChtX3NjcmlwdFVSTCwgZG9jdW1lbnQtPmNo
YXJzZXQoKSk7Ci0gICAgaWYgKCFtX2NhY2hlZFNjcmlwdCkgewotICAgICAgICBkaXNwYXRjaEVy
cm9yRXZlbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBlbmRpbmdBY3Rp
dml0eSh0aGlzKTsgIC8vIFRoZSB3b3JrZXIgY29udGV4dCBkb2VzIG5vdCBleGlzdCB3aGlsZSBs
b2FkaW5nLCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHRoZSB3b3JrZXIgb2JqZWN0IGlzIG5vdCBj
b2xsZWN0ZWQsIGFzIHdlbGwgYXMgaXRzIGV2ZW50IGxpc3RlbmVycy4KLSAgICBtX2NhY2hlZFNj
cmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotfQotCi1Xb3JrZXI6On5Xb3JrZXIoKQotewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7IC8vIFRoZSBjb250ZXh0IGlzIHByb3RlY3RlZCBieSB3b3JrZXIgY29udGV4dCBwcm94eSwg
c28gaXQgY2Fubm90IGJlIGRlc3Ryb3llZCB3aGlsZSBhIFdvcmtlciBleGlzdHMuCi0gICAgbV9j
b250ZXh0UHJveHktPndvcmtlck9iamVjdERlc3Ryb3llZCgpOwotfQotCi12b2lkIFdvcmtlcjo6
cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fY29udGV4dFByb3h5
LT5wb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChtZXNzYWdlKTsKLX0KLQotdm9pZCBXb3JrZXI6
OnRlcm1pbmF0ZSgpCi17Ci0gICAgbV9jb250ZXh0UHJveHktPnRlcm1pbmF0ZVdvcmtlckNvbnRl
eHQoKTsKLX0KLQotYm9vbCBXb3JrZXI6OmNhblN1c3BlbmQoKSBjb25zdAotewotICAgIC8vIEZJ
WE1FOiBJdCBpcyBub3QgY3VycmVudGx5IHBvc3NpYmxlIHRvIHN1c3BlbmQgYSB3b3JrZXIsIHNv
IHBhZ2VzIHdpdGggd29ya2VycyBjYW4gbm90IGdvIGludG8gcGFnZSBjYWNoZS4KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV29ya2VyOjpzdG9wKCkKLXsKLSAgICB0ZXJtaW5hdGUoKTsK
LX0KLQotYm9vbCBXb3JrZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fY29udGV4dFByb3h5LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSB8fCBBY3RpdmVET01PYmpl
Y3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOwotfQotCi12b2lkIFdvcmtlcjo6bm90aWZ5RmluaXNo
ZWQoQ2FjaGVkUmVzb3VyY2UqIHVudXNlZFJlc291cmNlKQotewotICAgIEFTU0VSVF9VTlVTRUQo
dW51c2VkUmVzb3VyY2UsIHVudXNlZFJlc291cmNlID09IG1fY2FjaGVkU2NyaXB0KTsKLQotICAg
IGlmIChtX2NhY2hlZFNjcmlwdC0+ZXJyb3JPY2N1cnJlZCgpKQotICAgICAgICBkaXNwYXRjaEVy
cm9yRXZlbnQoKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dFByb3h5LT5zdGFydFdvcmtl
ckNvbnRleHQobV9zY3JpcHRVUkwsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFnZW50
KG1fc2NyaXB0VVJMKSwgbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpKTsKLQotICAgIG1fY2FjaGVk
U2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAgbV9jYWNoZWRTY3JpcHQgPSAwOwotCi0g
ICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7Ci19Ci0KLXZvaWQgV29ya2VyOjpkaXNwYXRj
aEVycm9yRXZlbnQoKQotewotICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIHRydWUpOwotICAgIGlmIChtX29uRXJyb3JM
aXN0ZW5lcikgewotICAgICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICAgICAgZXZ0LT5z
ZXRDdXJyZW50VGFyZ2V0KHRoaXMpOwotICAgICAgICBtX29uRXJyb3JMaXN0ZW5lci0+aGFuZGxl
RXZlbnQoZXZ0LmdldCgpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsKLSAgICBBU1NFUlQoIWVj
KTsKLX0KLQotdm9pZCBXb3JrZXI6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9v
bCkKLXsKLSAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0
ZW5lcnMuZmluZChldmVudFR5cGUpOwotICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMu
ZW5kKCkpIHsKLSAgICAgICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzOwotICAgICAgICBsaXN0
ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFk
ZChldmVudFR5cGUsIGxpc3RlbmVycyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTGlzdGVuZXJW
ZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgZm9yIChMaXN0ZW5lclZl
Y3Rvcjo6aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3RlbmVy
SXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7Ci0gICAgICAgICAgICBp
ZiAoKmxpc3RlbmVySXRlciA9PSBldmVudExpc3RlbmVyKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExp
c3RlbmVyKTsKLSAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5l
cnMpOwotICAgIH0gICAgCi19Ci0KLXZvaWQgV29ya2VyOjpyZW1vdmVFdmVudExpc3RlbmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVy
LCBib29sKQotewotICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVu
dExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3Rl
bmVycy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIExpc3RlbmVyVmVjdG9yJiBs
aXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7Ci0gICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3RlbmVySXRlciAh
PSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7Ci0gICAgICAgIGlmICgqbGlzdGVu
ZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGxpc3RlbmVycy5yZW1vdmUo
bGlzdGVuZXJJdGVyIC0gbGlzdGVuZXJzLmJlZ2luKCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFdvcmtlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFldmVudCB8
fCBldmVudC0+dHlwZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBlYyA9IEV2ZW50RXhjZXB0aW9u
OjpVTlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMu
Z2V0KGV2ZW50LT50eXBlKCkpOwotICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9
IGxpc3RlbmVyc0NvcHkuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7Ci0gICAgICAgIGV2ZW50LT5z
ZXRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOwot
ICAgICAgICBsaXN0ZW5lckl0ZXItPmdldCgpLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFs
c2UpOwotICAgIH0KLQotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKLX0K
LQotdm9pZCBXb3JrZXI6OmRpc3BhdGNoTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17
Ci0gICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShtZXNzYWdlLCAi
IiwgIiIsIDAsIDApOwotCi0gICAgaWYgKG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0KCkpIHsKLSAg
ICAgICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdl
dCh0aGlzKTsKLSAgICAgICAgbV9vbk1lc3NhZ2VMaXN0ZW5lci0+aGFuZGxlRXZlbnQoZXZ0Lmdl
dCgpLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlz
cGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vV29ya2VyLmggYi9XZWJDb3JlL2RvbS9Xb3JrZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA1ZjlkNS4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2Rv
bS9Xb3JrZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICovCi0K
LSNpZm5kZWYgV29ya2VyX2gKLSNkZWZpbmUgV29ya2VyX2gKLQotI2lmIEVOQUJMRShXT1JLRVJT
KQotCi0jaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgotI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVk
ZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKLSAgICBjbGFzcyBDYWNoZWRT
Y3JpcHQ7Ci0gICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICBjbGFzcyBTdHJp
bmc7Ci0gICAgY2xhc3MgV29ya2VyQ29udGV4dFByb3h5OwotCi0gICAgdHlwZWRlZiBpbnQgRXhj
ZXB0aW9uQ29kZTsKLQotICAgIGNsYXNzIFdvcmtlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtl
cj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQs
IHB1YmxpYyBFdmVudFRhcmdldCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXb3JrZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
b3JrZXIodXJsLCBjb250ZXh0LCBlYykpOyB9Ci0gICAgICAgIH5Xb3JrZXIoKTsKLQotICAgICAg
ICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsgfQotCi0gICAgICAgIHZpcnR1YWwgV29ya2VyKiB0b1dvcmtlcigpIHsgcmV0dXJuIHRoaXM7
IH0KLQotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0K
LSAgICAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKLQotICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2Fn
ZShjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgdm9pZCBkaXNwYXRjaEVycm9yRXZlbnQoKTsKLQot
ICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RvcCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNl
Q2FwdHVyZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJl
KTsKLSAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4s
IEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21p
Y1N0cmluZywgTGlzdGVuZXJWZWN0b3I+IEV2ZW50TGlzdGVuZXJzTWFwOwotICAgICAgICBFdmVu
dExpc3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50TGlzdGVuZXJz
OyB9Ci0KLSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXI+OjpyZWY7Ci0gICAgICAgIHVz
aW5nIFJlZkNvdW50ZWQ8V29ya2VyPjo6ZGVyZWY7Ci0KLSAgICAgICAgdm9pZCBzZXRPbm1lc3Nh
Z2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25NZXNzYWdl
TGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVz
c2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0KCk7IH0KLQotICAg
ICAgICB2b2lkIHNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3Rl
bmVyKSB7IG1fb25FcnJvckxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgICAgICBFdmVu
dExpc3RlbmVyKiBvbmVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9vbkVycm9yTGlzdGVuZXIuZ2V0
KCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFdvcmtlcihjb25zdCBTdHJpbmcmLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOwotCi0gICAgICAgIHZpcnR1YWwg
dm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRl
cmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KLQotICAgICAgICBLVVJMIG1fc2NyaXB0VVJM
OwotICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2Ny
aXB0OwotCi0gICAgICAgIFdvcmtlckNvbnRleHRQcm94eSogbV9jb250ZXh0UHJveHk7IC8vIFRo
ZSBwcm94eSBvdXRsaXZlcyB0aGUgd29ya2VyIHRvIHBlcmZvcm0gdGhyZWFkIHNodXRkb3duLgot
Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uTWVzc2FnZUxpc3RlbmVyOwotICAg
ICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkVycm9yTGlzdGVuZXI7Ci0gICAgICAgIEV2
ZW50TGlzdGVuZXJzTWFwIG1fZXZlbnRMaXN0ZW5lcnM7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCi0KLSNlbmRpZiAvLyBXb3Jr
ZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vV29ya2VyLmlkbCBiL1dlYkNvcmUvZG9tL1dv
cmtlci5pZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZjliNjIuLjAwMDAwMDAK
LS0tIGEvV2ViQ29yZS9kb20vV29ya2VyLmlkbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqCi0gKi8KLQotbW9kdWxlIHRocmVhZHMgewotCi0gICAgaW50ZXJmYWNlIFtDdXN0
b21NYXJrRnVuY3Rpb24sIENvbmRpdGlvbmFsPVdPUktFUlNdIFdvcmtlciB7Ci0KLSAgICAgICAg
YXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKLSAgICAgICAgYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb25tZXNzYWdlOwotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGluIERPTVN0cmlu
ZyBtZXNzYWdlKTsKLQotICAgICAgICB2b2lkIHRlcm1pbmF0ZSgpOwotCi0gICAgICAgIC8vIEV2
ZW50VGFyZ2V0IGludGVyZmFjZQotICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVu
ZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOwotICAgICAgICBbQ3VzdG9t
XSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5l
ciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFu
IHVzZUNhcHR1cmUpOwotICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0
KQotICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKLSAgICB9OwotCi19CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmNwcCBiL1dlYkNvcmUvZG9tL1dvcmtl
ckNvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjlhOGU0Li4wMDAw
MDAwCi0tLSBhL1dlYkNvcmUvZG9tL1dvcmtlckNvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKLQotI2luY2x1ZGUg
IkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTVRpbWVyLmgiCi0jaW5jbHVkZSAiRE9N
V2luZG93LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5o
IgotI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJXb3JrZXJMb2NhdGlvbi5o
IgotI2luY2x1ZGUgIldvcmtlck5hdmlnYXRvci5oIgotI2luY2x1ZGUgIldvcmtlck9iamVjdFBy
b3h5LmgiCi0jaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdvcmtlckNvbnRleHQ6OldvcmtlckNvbnRleHQo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgV29ya2VyVGhyZWFkKiB0
aHJlYWQpCi0gICAgOiBtX3VybCh1cmwpCi0gICAgLCBtX3VzZXJBZ2VudCh1c2VyQWdlbnQpCi0g
ICAgLCBtX2xvY2F0aW9uKFdvcmtlckxvY2F0aW9uOjpjcmVhdGUodXJsKSkKLSAgICAsIG1fc2Ny
aXB0KG5ldyBXb3JrZXJTY3JpcHRDb250cm9sbGVyKHRoaXMpKQotICAgICwgbV90aHJlYWQodGhy
ZWFkKQotewotICAgIHNldFNlY3VyaXR5T3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJs
KSk7Ci19Ci0KLVdvcmtlckNvbnRleHQ6On5Xb3JrZXJDb250ZXh0KCkKLXsKLSAgICBBU1NFUlQo
Y3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkLT50aHJlYWRJRCgpKTsKLQotICAgIG1fdGhyZWFk
LT53b3JrZXJPYmplY3RQcm94eSgpLT53b3JrZXJDb250ZXh0RGVzdHJveWVkKCk7Ci19Ci0KLVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdvcmtlckNvbnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdAotewotICAgIHJldHVybiBjb25zdF9jYXN0PFdvcmtlckNvbnRleHQqPih0aGlz
KTsKLX0KLQotY29uc3QgS1VSTCYgV29ya2VyQ29udGV4dDo6dmlydHVhbFVSTCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fdXJsOwotfQotCi1LVVJMIFdvcmtlckNvbnRleHQ6OnZpcnR1YWxDb21w
bGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcGxldGVV
UkwodXJsKTsKLX0KLQotS1VSTCBXb3JrZXJDb250ZXh0Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJp
bmcmIHVybCkgY29uc3QKLXsKLSAgICAvLyBBbHdheXMgcmV0dXJuIGEgbnVsbCBVUkwgd2hlbiBw
YXNzZWQgYSBudWxsIHN0cmluZy4KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNoYW5nZSB0aGUg
S1VSTCBjb25zdHJ1Y3RvciB0byBoYXZlIHRoaXMgYmVoYXZpb3I/Ci0gICAgaWYgKHVybC5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIEtVUkwoKTsKLSAgICAvLyBGSVhNRTogZG9lcyB0aGlzIG5l
ZWQgdG8gcHJvdmlkZSBhIGNoYXJzZXQsIGxpa2UgRG9jdW1lbnQ6OmNvbXBsZXRlVVJMIGRvZXM/
Ci0gICAgcmV0dXJuIEtVUkwobV9sb2NhdGlvbi0+dXJsKCksIHVybCk7Ci19Ci0KLVN0cmluZyBX
b3JrZXJDb250ZXh0Ojp1c2VyQWdlbnQoY29uc3QgS1VSTCYpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fdXNlckFnZW50OwotfQotCi1Xb3JrZXJOYXZpZ2F0b3IqIFdvcmtlckNvbnRleHQ6Om5hdmln
YXRvcigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hdmlnYXRvcikKLSAgICAgICAgbV9uYXZpZ2F0
b3IgPSBXb3JrZXJOYXZpZ2F0b3I6OmNyZWF0ZShtX3VzZXJBZ2VudCk7Ci0gICAgcmV0dXJuIG1f
bmF2aWdhdG9yLmdldCgpOwotfQotCi1ib29sIFdvcmtlckNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rp
dml0eSgpIGNvbnN0Ci17Ci0gICAgQWN0aXZlRE9NT2JqZWN0c01hcCYgYWN0aXZlT2JqZWN0cyA9
IGFjdGl2ZURPTU9iamVjdHMoKTsKLSAgICBBY3RpdmVET01PYmplY3RzTWFwOjpjb25zdF9pdGVy
YXRvciBhY3RpdmVPYmplY3RzRW5kID0gYWN0aXZlT2JqZWN0cy5lbmQoKTsKLSAgICBmb3IgKEFj
dGl2ZURPTU9iamVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhY3RpdmVPYmplY3RzLmJl
Z2luKCk7IGl0ZXIgIT0gYWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChp
dGVyLT5maXJzdC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdvcmtlckNvbnRleHQ6OnJl
cG9ydEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIG1fdGhyZWFkLT53b3JrZXJPYmplY3RQ
cm94eSgpLT5wb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoZXJyb3JNZXNzYWdlLCBsaW5lTnVt
YmVyLCBzb3VyY2VVUkwpOwotfQotCi12b2lkIFdvcmtlckNvbnRleHQ6OmFkZE1lc3NhZ2UoTWVz
c2FnZURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIG1fdGhyZWFkLT53b3JrZXJPYmplY3RQ
cm94eSgpLT5wb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChkZXN0aW5hdGlvbiwgc291
cmNlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKLX0KLQotdm9pZCBX
b3JrZXJDb250ZXh0OjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQg
bG9uZywgY29uc3QgU2NyaXB0U3RyaW5nJikKLXsKLSAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVu
dGF0aW9uIGlzIHBlbmRpbmcgdGhlIGZpeGVzIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzE3NQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV29y
a2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1f
dGhyZWFkLT53b3JrZXJPYmplY3RQcm94eSgpLT5wb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KG1l
c3NhZ2UpOwotfQotCi12b2lkIFdvcmtlckNvbnRleHQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lciwgYm9vbCkKLXsKLSAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9
IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwotICAgIGlmIChpdGVyID09IG1fZXZl
bnRMaXN0ZW5lcnMuZW5kKCkpIHsKLSAgICAgICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzOwot
ICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAgICBtX2V2ZW50
TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgZm9y
IChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2lu
KCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7Ci0g
ICAgICAgICAgICBpZiAoKmxpc3RlbmVySXRlciA9PSBldmVudExpc3RlbmVyKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbGlzdGVuZXJzLmFw
cGVuZChldmVudExpc3RlbmVyKTsKLSAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRU
eXBlLCBsaXN0ZW5lcnMpOwotICAgIH0gICAgCi19Ci0KLXZvaWQgV29ya2VyQ29udGV4dDo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lciogZXZlbnRMaXN0ZW5lciwgYm9vbCkKLXsKLSAgICBFdmVudExpc3RlbmVyc01hcDo6aXRl
cmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwotICAgIGlmIChp
dGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOwotICAgIGZvciAoTGlz
dGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdp
bigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgewot
ICAgICAgICBpZiAoKmxpc3RlbmVySXRlciA9PSBldmVudExpc3RlbmVyKSB7Ci0gICAgICAgICAg
ICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVySXRlciAtIGxpc3RlbmVycy5iZWdpbigpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBXb3JrZXJDb250
ZXh0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246OlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgTGlzdGVuZXJWZWN0b3IgbGlz
dGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2ZW50LT50eXBlKCkpOwotICAgIGZv
ciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVy
c0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVyc0NvcHkuZW5kKCk7ICsrbGlz
dGVuZXJJdGVyKSB7Ci0gICAgICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGV2
ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOwotICAgICAgICBsaXN0ZW5lckl0ZXItPmdldCgp
LT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Ci19Ci0KLXZvaWQgV29ya2VyQ29udGV4dDo6
cG9zdFRhc2soUGFzc1JlZlB0cjxUYXNrPiB0YXNrKQotewotICAgIHRocmVhZCgpLT5ydW5Mb29w
KCkucG9zdFRhc2sodGFzayk7Ci19Ci0KLWludCBXb3JrZXJDb250ZXh0OjppbnN0YWxsVGltZW91
dChTY2hlZHVsZWRBY3Rpb24qIGFjdGlvbiwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCkK
LXsKLSAgICByZXR1cm4gRE9NVGltZXI6Omluc3RhbGwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCBhY3Rpb24sIHRpbWVvdXQsIHNpbmdsZVNob3QpOwotfQotCi12b2lkIFdvcmtlckNvbnRleHQ6
OnJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCkKLXsKLSAgICBET01UaW1lcjo6cmVtb3ZlQnlJ
ZChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRpbWVvdXRJZCk7Ci19Ci0KLXZvaWQgV29ya2Vy
Q29udGV4dDo6ZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBS
ZWZQdHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsICIiLCAiIiwg
MCwgMCk7Ci0KLSAgICBpZiAobV9vbm1lc3NhZ2VMaXN0ZW5lci5nZXQoKSkgewotICAgICAgICBl
dnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMp
OwotICAgICAgICBtX29ubWVzc2FnZUxpc3RlbmVyLT5oYW5kbGVFdmVudChldnQuZ2V0KCksIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkaXNwYXRjaEV2
ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmggYi9XZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNGUxM2EuLjAwMDAwMDAKLS0tIGEvV2Vi
Q29yZS9kb20vV29ya2VyQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqCi0gKi8KLQotI2lmbmRlZiBXb3JrZXJDb250ZXh0X2gKLSNkZWZpbmUgV29ya2VyQ29u
dGV4dF9oCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hh
c2guaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZlbnRUYXJnZXQu
aCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV29ya2Vy
U2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBTY2hlZHVs
ZWRBY3Rpb247Ci0gICAgY2xhc3MgV29ya2VyTG9jYXRpb247Ci0gICAgY2xhc3MgV29ya2VyTmF2
aWdhdG9yOwotICAgIGNsYXNzIFdvcmtlclRocmVhZDsKLQotICAgIGNsYXNzIFdvcmtlckNvbnRl
eHQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJDb250ZXh0PiwgcHVibGljIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIHB1YmxpYyBFdmVudFRhcmdldCB7Ci0gICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiBjcmVhdGUoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgV29ya2VyVGhyZWFkKiB0aHJlYWQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyQ29udGV4dCh1cmwsIHVzZXJB
Z2VudCwgdGhyZWFkKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIH5Xb3JrZXJDb250
ZXh0KCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGlzV29ya2VyQ29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KLQotICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKLQotICAgICAgICBjb25zdCBLVVJMJiB1
cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQotICAgICAgICBLVVJMIGNvbXBsZXRlVVJMKGNv
bnN0IFN0cmluZyYpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2VudChj
b25zdCBLVVJMJikgY29uc3Q7Ci0KLSAgICAgICAgV29ya2VyTG9jYXRpb24qIGxvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi5nZXQoKTsgfQotICAgICAgICBXb3JrZXJOYXZpZ2F0
b3IqIG5hdmlnYXRvcigpIGNvbnN0OwotCi0gICAgICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIq
IHNjcmlwdCgpIHsgcmV0dXJuIG1fc2NyaXB0LmdldCgpOyB9Ci0gICAgICAgIHZvaWQgY2xlYXJT
Y3JpcHQoKSB7IHJldHVybiBtX3NjcmlwdC5jbGVhcigpOyB9Ci0gICAgICAgIFdvcmtlclRocmVh
ZCogdGhyZWFkKCkgeyByZXR1cm4gbV90aHJlYWQ7IH0KLQotICAgICAgICBib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFeGNlcHRp
b24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VE
ZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFNjcmlwdFN0cmluZyYgc291cmNlU3RyaW5nKTsK
LQotICAgICAgICB2aXJ0dWFsIFdvcmtlckNvbnRleHQqIHRvV29ya2VyQ29udGV4dCgpIHsgcmV0
dXJuIHRoaXM7IH0KLQotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFzayhQYXNzUmVmUHRyPFRhc2s+KTsg
Ly8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gY29udGV4dCdzIHRocmVhZCBhc3luY2hyb25vdXNseS4K
LQotICAgICAgICBpbnQgaW5zdGFsbFRpbWVvdXQoU2NoZWR1bGVkQWN0aW9uKiwgaW50IHRpbWVv
dXQsIGJvb2wgc2luZ2xlU2hvdCk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlVGltZW91dChpbnQgdGlt
ZW91dElkKTsKLQotICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZShjb25zdCBTdHJpbmcmKTsK
LQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJl
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOwotICAg
ICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0
aW9uQ29kZSYpOwotCi0gICAgICAgIHZvaWQgc2V0T25tZXNzYWdlKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29ubWVzc2FnZUxpc3RlbmVyID0gZXZlbnRMaXN0
ZW5lcjsgfQotICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1lc3NhZ2UoKSBjb25zdCB7IHJldHVy
biBtX29ubWVzc2FnZUxpc3RlbmVyLmdldCgpOyB9Ci0KLSAgICAgICAgdHlwZWRlZiBWZWN0b3I8
UmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4gTGlzdGVuZXJWZWN0b3I7Ci0gICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3RlbmVyVmVjdG9yPiBFdmVudExpc3RlbmVyc01hcDsK
LSAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9l
dmVudExpc3RlbmVyczsgfQotCi0gICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8V29ya2VyQ29udGV4
dD46OnJlZjsKLSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXJDb250ZXh0Pjo6ZGVyZWY7
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIHsgcmVmKCk7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIHsgZGVyZWYoKTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZl
bnRUYXJnZXQoKSB7IHJlZigpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFy
Z2V0KCkgeyBkZXJlZigpOyB9Ci0KLSAgICAgICAgV29ya2VyQ29udGV4dChjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJiwgV29ya2VyVGhyZWFkKik7Ci0KLSAgICAgICAgdmlydHVhbCBjb25zdCBL
VVJMJiB2aXJ0dWFsVVJMKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgS1VSTCB2aXJ0dWFsQ29t
cGxldGVVUkwoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0KLSAgICAgICAgS1VSTCBtX3VybDsKLSAg
ICAgICAgU3RyaW5nIG1fdXNlckFnZW50OwotICAgICAgICBSZWZQdHI8V29ya2VyTG9jYXRpb24+
IG1fbG9jYXRpb247Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFdvcmtlck5hdmlnYXRvcj4gbV9u
YXZpZ2F0b3I7Ci0KLSAgICAgICAgT3duUHRyPFdvcmtlclNjcmlwdENvbnRyb2xsZXI+IG1fc2Ny
aXB0OwotICAgICAgICBXb3JrZXJUaHJlYWQqIG1fdGhyZWFkOwotCi0gICAgICAgIFJlZlB0cjxF
dmVudExpc3RlbmVyPiBtX29ubWVzc2FnZUxpc3RlbmVyOwotICAgICAgICBFdmVudExpc3RlbmVy
c01hcCBtX2V2ZW50TGlzdGVuZXJzOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi0jZW5kaWYgLy8gV29ya2VyQ29udGV4dF9o
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmlkbCBiL1dlYkNvcmUvZG9t
L1dvcmtlckNvbnRleHQuaWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWZmZjUx
Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvZG9tL1dvcmtlckNvbnRleHQuaWRsCisrKyAvZGV2L251
bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICoKLSAqLwotCi1tb2R1bGUgdGhyZWFkcyB7Ci0KLSAg
ICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XT1JLRVJTLAotICAgICAgICBDdXN0
b21HZXRPd25Qcm9wZXJ0eVNsb3QsCi0gICAgICAgIEN1c3RvbU1hcmtGdW5jdGlvbiwKLSAgICAg
ICAgRXh0ZW5kc0RPTUdsb2JhbE9iamVjdCwKLSAgICAgICAgTGVnYWN5UGFyZW50PUpTV29ya2Vy
Q29udGV4dEJhc2UsCi0gICAgICAgIE5vU3RhdGljVGFibGVzCi0gICAgXSBXb3JrZXJDb250ZXh0
IHsKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCi0gICAgICAgIGF0dHJpYnV0ZSBb
Q3VzdG9tXSBXb3JrZXJDb250ZXh0IHNlbGY7Ci0jZW5kaWYKLQotICAgICAgICBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7Ci0gICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9N
U3RyaW5nIG1lc3NhZ2UpOwotCi0gICAgICAgIGF0dHJpYnV0ZSBbUmVwbGFjZWFibGVdIFdvcmtl
ckxvY2F0aW9uIGxvY2F0aW9uOwotICAgICAgICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBXb3Jr
ZXJOYXZpZ2F0b3IgbmF2aWdhdG9yOwotICAgICAgICAKLSAgICAgICAgYXR0cmlidXRlIE1lc3Nh
Z2VFdmVudENvbnN0cnVjdG9yIE1lc3NhZ2VFdmVudDsKLSAgICAgICAgYXR0cmlidXRlIFdvcmtl
ckxvY2F0aW9uQ29uc3RydWN0b3IgV29ya2VyTG9jYXRpb247Ci0KLSAgICAgICAgLy8gVGltZXJz
Ci0gICAgICAgIFtDdXN0b21dIGxvbmcgc2V0VGltZW91dChpbiBUaW1lb3V0SGFuZGxlciBoYW5k
bGVyLCBpbiBsb25nIHRpbWVvdXQpOwotICAgICAgICAvLyBbQ3VzdG9tXSBsb25nIHNldFRpbWVv
dXQoaW4gRE9NU3RyaW5nIGNvZGUsIGluIGxvbmcgdGltZW91dCk7Ci0gICAgICAgIFtDdXN0b21d
IHZvaWQgY2xlYXJUaW1lb3V0KGluIGxvbmcgaGFuZGxlKTsKLQotICAgICAgICBbQ3VzdG9tXSBs
b25nIHNldEludGVydmFsKGluIFRpbWVvdXRIYW5kbGVyIGhhbmRsZXIsIGluIGxvbmcgdGltZW91
dCk7Ci0gICAgICAgIC8vIFtDdXN0b21dIGxvbmcgc2V0SW50ZXJ2YWwoaW4gRE9NU3RyaW5nIGNv
ZGUsIGluIGxvbmcgdGltZW91dCk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgY2xlYXJJbnRlcnZh
bChpbiBsb25nIGhhbmRsZSk7Ci0KLSAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0g
ICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVy
IGxpc3RlbmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJv
b2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0
ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAg
IGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCi0gICAgICAgICAgICByYWlzZXMo
RXZlbnRFeGNlcHRpb24pOwotICAgIH07Ci0KLX0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1dv
cmtlckNvbnRleHRQcm94eS5oIGIvV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dFByb3h5LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZjU3NjEuLjAwMDAwMDAKLS0tIGEvV2ViQ29y
ZS9kb20vV29ya2VyQ29udGV4dFByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBXb3JrZXJDb250ZXh0UHJveHlfaAotI2RlZmluZSBXb3JrZXJDb250ZXh0UHJveHlf
aAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNs
YXNzIEtVUkw7Ci0gICAgY2xhc3MgU3RyaW5nOwotICAgIGNsYXNzIFdvcmtlcjsKLQotICAgIC8v
IEEgcHJveHkgdG8gdGFsayB0byB0aGUgd29ya2VyIGNvbnRleHQuCi0gICAgY2xhc3MgV29ya2Vy
Q29udGV4dFByb3h5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBXb3JrZXJDb250ZXh0
UHJveHkqIGNyZWF0ZShXb3JrZXIqKTsKLQotICAgICAgICB2aXJ0dWFsIH5Xb3JrZXJDb250ZXh0
UHJveHkoKSB7fQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydFdvcmtlckNvbnRleHQoY29u
c3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5n
JiBzb3VyY2VDb2RlKSA9IDA7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZVdvcmtl
ckNvbnRleHQoKSA9IDA7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3Jr
ZXJDb250ZXh0KGNvbnN0IFN0cmluZyYpID0gMDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgPSAwOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCB3b3Jr
ZXJPYmplY3REZXN0cm95ZWQoKSA9IDA7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCi0KLSNlbmRpZiAvLyBXb3JrZXJDb250ZXh0
UHJveHlfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vV29ya2VyTG9jYXRpb24uY3BwIGIvV2Vi
Q29yZS9kb20vV29ya2VyTG9jYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBlODRiZjkzLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJXb3JrZXJMb2NhdGlv
bi5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1TdHJpbmcgV29ya2VyTG9jYXRpb246OmhyZWYoKSBjb25zdAotewotICAgIHJldHVybiBt
X3VybC5oYXNQYXRoKCkgPyBtX3VybC5wcmV0dHlVUkwoKSA6IG1fdXJsLnByZXR0eVVSTCgpICsg
Ii8iOwotfQotCi1TdHJpbmcgV29ya2VyTG9jYXRpb246OnByb3RvY29sKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV91cmwucHJvdG9jb2woKSArICI6IjsKLX0KLQotU3RyaW5nIFdvcmtlckxvY2F0
aW9uOjpob3N0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV91cmwucG9ydCgpID8gbV91cmwuaG9z
dCgpICsgIjoiICsgU3RyaW5nOjpudW1iZXIoKHN0YXRpY19jYXN0PGludD4obV91cmwucG9ydCgp
KSkpIDogbV91cmwuaG9zdCgpOwotfQotCi1TdHJpbmcgV29ya2VyTG9jYXRpb246Omhvc3RuYW1l
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV91cmwuaG9zdCgpOwotfQotCi1TdHJpbmcgV29ya2Vy
TG9jYXRpb246OnBvcnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3VybC5wb3J0KCkgPyBTdHJp
bmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KG1fdXJsLnBvcnQoKSkpIDogIiI7Ci19Ci0KLVN0
cmluZyBXb3JrZXJMb2NhdGlvbjo6cGF0aG5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX3Vy
bC5wYXRoKCkuaXNFbXB0eSgpID8gIi8iIDogbV91cmwucGF0aCgpOwotfQotCi1TdHJpbmcgV29y
a2VyTG9jYXRpb246OnNlYXJjaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdXJsLnF1ZXJ5KCku
aXNFbXB0eSgpID8gIiIgOiAiPyIgKyBtX3VybC5xdWVyeSgpOwotfQotCi1TdHJpbmcgV29ya2Vy
TG9jYXRpb246Omhhc2goKSBjb25zdAotewotICAgIHJldHVybiBtX3VybC5yZWYoKS5pc0VtcHR5
KCkgPyAiIiA6ICIjIiArIG1fdXJsLnJlZigpOwotfQotCi1TdHJpbmcgV29ya2VyTG9jYXRpb246
OnRvU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV91cmwuaGFzUGF0aCgpID8gbV91cmwu
cHJldHR5VVJMKCkgOiBtX3VybC5wcmV0dHlVUkwoKSArICIvIjsKLX0KLQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmggYi9XZWJDb3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmMzMWFkLi4wMDAwMDAwCi0tLSBhL1dl
YkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKgotICovCi0KLSNpZm5kZWYgV29ya2VyTG9jYXRpb25faAotI2RlZmluZSBXb3JrZXJM
b2NhdGlvbl9oCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIktVUkwuaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFz
cyBTdHJpbmc7Ci0KLSAgICBjbGFzcyBXb3JrZXJMb2NhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVk
PFdvcmtlckxvY2F0aW9uPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxXb3JrZXJMb2NhdGlvbj4gY3JlYXRlKGNvbnN0IEtVUkwmIHVybCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJMb2NhdGlvbih1cmwpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9
Ci0KLSAgICAgICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKLQotICAgICAgICAvLyBVUkkgZGVjb21w
b3NpdGlvbiBhdHRyaWJ1dGVzCi0gICAgICAgIFN0cmluZyBwcm90b2NvbCgpIGNvbnN0OwotICAg
ICAgICBTdHJpbmcgaG9zdCgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgaG9zdG5hbWUoKSBjb25z
dDsKLSAgICAgICAgU3RyaW5nIHBvcnQoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIHBhdGhuYW1l
KCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBzZWFyY2goKSBjb25zdDsKLSAgICAgICAgU3RyaW5n
IGhhc2goKSBjb25zdDsKLQotICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIFdvcmtlckxvY2F0aW9uKGNvbnN0IEtVUkwmIHVybCkgOiBtX3Vy
bCh1cmwpIHsgfQotCi0gICAgICAgIEtVUkwgbV91cmw7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCi0KLSNlbmRpZiAvLyBXb3Jr
ZXJMb2NhdGlvbl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5pZGwg
Yi9XZWJDb3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5pZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDU1NTFmMTguLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9kb20vV29ya2VyTG9jYXRpb24u
aWRsCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4g
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSB0aHJlYWRzIHsK
LQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdPUktFUlMsCi0gICAgICAg
IEdlbmVyYXRlQ29uc3RydWN0b3IsCi0gICAgICAgIE5vU3RhdGljVGFibGVzCi0gICAgXSBXb3Jr
ZXJMb2NhdGlvbiB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgaHJlZjsK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwcm90b2NvbDsKLSAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBob3N0OwotICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIGhvc3RuYW1lOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIHBvcnQ7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgcGF0aG5h
bWU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2VhcmNoOwotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGhhc2g7Ci0KLSAgICAgICAgW0RvbnRFbnVt
XSBET01TdHJpbmcgdG9TdHJpbmcoKTsKLSAgICB9OwotCi19CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgYi9XZWJDb3JlL2RvbS9Xb3JrZXJNZXNzYWdp
bmdQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNjI2MDcuLjAwMDAw
MDAKLS0tIGEvV2ViQ29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIldvcmtlck1lc3NhZ2luZ1Byb3h5Lmgi
Ci0KLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkdlbmVyaWNXb3JrZXJUYXNrLmgiCi0jaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCi0jaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIldvcmtlci5oIgotI2lu
Y2x1ZGUgIldvcmtlckNvbnRleHQuaCIKLSNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZXNzYWdlV29ya2VyQ29udGV4dFRhc2sgOiBwdWJs
aWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8TWVzc2FnZVdvcmtlckNvbnRleHRUYXNrPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlV29ya2Vy
Q29udGV4dFRhc2sobWVzc2FnZSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNZXNzYWdlV29y
a2VyQ29udGV4dFRhc2soY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgICAgICA6IG1fbWVzc2Fn
ZShtZXNzYWdlLmNvcHkoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZv
cm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQpCi0gICAgewotICAg
ICAgICBBU1NFUlQoc2NyaXB0Q29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwotICAgICAgICBX
b3JrZXJDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlw
dENvbnRleHQpOwotCi0gICAgICAgIGNvbnRleHQtPmRpc3BhdGNoTWVzc2FnZShtX21lc3NhZ2Up
OwotCi0gICAgICAgIHN0YXRpY19jYXN0PFdvcmtlck1lc3NhZ2luZ1Byb3h5Kj4oY29udGV4dC0+
dGhyZWFkKCktPndvcmtlck9iamVjdFByb3h5KCkpLT5jb25maXJtV29ya2VyVGhyZWFkTWVzc2Fn
ZShjb250ZXh0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IFN0cmluZyBtX21lc3NhZ2U7Ci19OwotCi1jbGFzcyBNZXNzYWdlV29ya2VyVGFzayA6IHB1Ymxp
YyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxNZXNzYWdlV29ya2VyVGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
V29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlV29ya2VyVGFzayhtZXNzYWdlLCBtZXNzYWdpbmdQcm94
eSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNZXNzYWdlV29ya2VyVGFzayhjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKLSAgICAg
ICAgOiBtX21lc3NhZ2UobWVzc2FnZS5jb3B5KCkpCi0gICAgICAgICwgbV9tZXNzYWdpbmdQcm94
eShtZXNzYWdpbmdQcm94eSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZv
cm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQotICAgIHsKLSAgICAgICAgV29ya2VyKiB3
b3JrZXJPYmplY3QgPSBtX21lc3NhZ2luZ1Byb3h5LT53b3JrZXJPYmplY3QoKTsKLSAgICAgICAg
aWYgKCF3b3JrZXJPYmplY3QgfHwgbV9tZXNzYWdpbmdQcm94eS0+YXNrZWRUb1Rlcm1pbmF0ZSgp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHdvcmtlck9iamVjdC0+ZGlzcGF0Y2hN
ZXNzYWdlKG1fbWVzc2FnZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFN0cmluZyBtX21lc3Nh
Z2U7Ci0gICAgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7Ci19OwotCi1j
bGFzcyBXb3JrZXJFeGNlcHRpb25UYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckV4Y2VwdGlvblRh
c2s+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJv
eHkpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlckV4Y2VwdGlvblRh
c2soZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwsIG1lc3NhZ2luZ1Byb3h5KSk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFdvcmtlckV4Y2VwdGlvblRhc2soY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwg
V29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQotICAgICAgICA6IG1fZXJyb3JN
ZXNzYWdlKGVycm9yTWVzc2FnZS5jb3B5KCkpCi0gICAgICAgICwgbV9saW5lTnVtYmVyKGxpbmVO
dW1iZXIpCi0gICAgICAgICwgbV9zb3VyY2VVUkwoc291cmNlVVJMLmNvcHkoKSkKLSAgICAgICAg
LCBtX21lc3NhZ2luZ1Byb3h5KG1lc3NhZ2luZ1Byb3h5KQotICAgIHsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
LSAgICB7Ci0gICAgICAgIGlmICghbV9tZXNzYWdpbmdQcm94eS0+YXNrZWRUb1Rlcm1pbmF0ZSgp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKG1fZXJyb3JNZXNzYWdlLCBt
X2xpbmVOdW1iZXIsIG1fc291cmNlVVJMKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbV9lcnJvck1l
c3NhZ2U7Ci0gICAgaW50IG1fbGluZU51bWJlcjsKLSAgICBTdHJpbmcgbV9zb3VyY2VVUkw7Ci0g
ICAgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7Ci19OwotCi1jbGFzcyBX
b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0RGVz
dHJveWVkVGFzaz4gY3JlYXRlKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyQ29udGV4dERlc3Ryb3ll
ZFRhc2sobWVzc2FnaW5nUHJveHkpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV29ya2VyQ29u
dGV4dERlc3Ryb3llZFRhc2soV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQot
ICAgICAgICA6IG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5nUHJveHkpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikK
LSAgICB7Ci0gICAgICAgIG1fbWVzc2FnaW5nUHJveHktPndvcmtlckNvbnRleHREZXN0cm95ZWRJ
bnRlcm5hbCgpOwotICAgIH0KLQotICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2lu
Z1Byb3h5OwotfTsKLQotY2xhc3MgV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrIDogcHVi
bGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzaz4gY3JlYXRlKFdvcmtlck1l
c3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSwgYm9vbCBjb25maXJtaW5nTWVzc2FnZSwgYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzayhtZXNzYWdpbmdQcm94eSwgY29uZmlybWlu
Z01lc3NhZ2UsIGhhc1BlbmRpbmdBY3Rpdml0eSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBX
b3JrZXJUaHJlYWRBY3Rpdml0eVJlcG9ydFRhc2soV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3Nh
Z2luZ1Byb3h5LCBib29sIGNvbmZpcm1pbmdNZXNzYWdlLCBib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSkKLSAgICAgICAgOiBtX21lc3NhZ2luZ1Byb3h5KG1lc3NhZ2luZ1Byb3h5KQotICAgICAgICAs
IG1fY29uZmlybWluZ01lc3NhZ2UoY29uZmlybWluZ01lc3NhZ2UpCi0gICAgICAgICwgbV9oYXNQ
ZW5kaW5nQWN0aXZpdHkoaGFzUGVuZGluZ0FjdGl2aXR5KQotICAgIHsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCi0gICAgewot
ICAgICAgICBtX21lc3NhZ2luZ1Byb3h5LT5yZXBvcnRQZW5kaW5nQWN0aXZpdHlJbnRlcm5hbCht
X2NvbmZpcm1pbmdNZXNzYWdlLCBtX2hhc1BlbmRpbmdBY3Rpdml0eSk7Ci0gICAgfQotCi0gICAg
V29ya2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7Ci0gICAgYm9vbCBtX2NvbmZp
cm1pbmdNZXNzYWdlOwotICAgIGJvb2wgbV9oYXNQZW5kaW5nQWN0aXZpdHk7Ci19OwotCi0KLVdv
cmtlckNvbnRleHRQcm94eSogV29ya2VyQ29udGV4dFByb3h5OjpjcmVhdGUoV29ya2VyKiB3b3Jr
ZXIpCi17Ci0gICAgcmV0dXJuIG5ldyBXb3JrZXJNZXNzYWdpbmdQcm94eSh3b3JrZXIpOwotfQot
Ci1Xb3JrZXJNZXNzYWdpbmdQcm94eTo6V29ya2VyTWVzc2FnaW5nUHJveHkoV29ya2VyKiB3b3Jr
ZXJPYmplY3QpCi0gICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQod29ya2VyT2JqZWN0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgLCBtX3dvcmtlck9iamVjdCh3b3JrZXJPYmpl
Y3QpCi0gICAgLCBtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50KDApCi0gICAgLCBtX3dvcmtlclRo
cmVhZEhhZFBlbmRpbmdBY3Rpdml0eShmYWxzZSkKLSAgICAsIG1fYXNrZWRUb1Rlcm1pbmF0ZShm
YWxzZSkKLXsKLSAgICBBU1NFUlQobV93b3JrZXJPYmplY3QpOwotICAgIEFTU0VSVCgobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkgJiYgaXNNYWluVGhyZWFkKCkpCi0gICAg
ICAgICAgIHx8IChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpICYm
IGN1cnJlbnRUaHJlYWQoKSA9PSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4obV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LmdldCgpKS0+dGhyZWFkKCktPnRocmVhZElEKCkpKTsKLX0KLQotV29y
a2VyTWVzc2FnaW5nUHJveHk6On5Xb3JrZXJNZXNzYWdpbmdQcm94eSgpCi17Ci0gICAgQVNTRVJU
KCFtX3dvcmtlck9iamVjdCk7Ci0gICAgQVNTRVJUKChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmlzRG9jdW1lbnQoKSAmJiBpc01haW5UaHJlYWQoKSkKLSAgICAgICAgICAgfHwgKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkgJiYgY3VycmVudFRocmVhZCgpID09
IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0
KCkpLT50aHJlYWQoKS0+dGhyZWFkSUQoKSkpOwotfQotCi12b2lkIFdvcmtlck1lc3NhZ2luZ1By
b3h5OjpzdGFydFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKQotewotICAgIFJlZlB0cjxX
b3JrZXJUaHJlYWQ+IHRocmVhZCA9IFdvcmtlclRocmVhZDo6Y3JlYXRlKHNjcmlwdFVSTCwgdXNl
ckFnZW50LCBzb3VyY2VDb2RlLCB0aGlzKTsKLSAgICB3b3JrZXJUaHJlYWRDcmVhdGVkKHRocmVh
ZCk7Ci0gICAgdGhyZWFkLT5zdGFydCgpOwotfQotCi12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5
Ojpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKE1lc3NhZ2VXb3JrZXJUYXNrOjpj
cmVhdGUobWVzc2FnZSwgdGhpcykpOwotfQotCi12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpw
b3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAg
cG9zdFRhc2tUb1dvcmtlckNvbnRleHQoTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUo
bWVzc2FnZSkpOwotfQotCi12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza1RvV29y
a2VyQ29udGV4dChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2sp
Ci17Ci0gICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1fd29ya2VyVGhyZWFkKSB7Ci0gICAgICAgICsrbV91bmNvbmZpcm1lZE1lc3NhZ2VDb3Vu
dDsKLSAgICAgICAgbV93b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFzayh0YXNrKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmFwcGVuZCh0YXNrKTsKLX0KLQot
dm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdFRhc2tUb1dvcmtlck9iamVjdChQYXNzUmVm
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCi17Ci0gICAgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayh0YXNrKTsKLX0KLQotdm9pZCBXb3JrZXJNZXNzYWdp
bmdQcm94eTo6cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17Ci0gICAg
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhXb3JrZXJFeGNlcHRpb25UYXNrOjpj
cmVhdGUoZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwsIHRoaXMpKTsKLX0KLSAg
ICAKLXN0YXRpYyB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5LCBNZXNz
YWdlRGVzdGluYXRpb24gZGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdl
TGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17Ci0gICAgaWYgKG1lc3NhZ2luZ1Byb3h5LT5hc2tl
ZFRvVGVybWluYXRlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBjb250ZXh0LT5hZGRNZXNzYWdl
KGRlc3RpbmF0aW9uLCBzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VV
UkwpOwotfQotCi12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0Q29uc29sZU1lc3NhZ2VU
b1dvcmtlck9iamVjdChNZXNzYWdlRGVzdGluYXRpb24gZGVzdGluYXRpb24sIE1lc3NhZ2VTb3Vy
Y2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50
IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0Q29uc29sZU1l
c3NhZ2VUYXNrLCB0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgbGlu
ZU51bWJlciwgc291cmNlVVJMKSk7Ci19Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6Ondv
cmtlclRocmVhZENyZWF0ZWQoUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IHdvcmtlclRocmVhZCkK
LXsKLSAgICBtX3dvcmtlclRocmVhZCA9IHdvcmtlclRocmVhZDsKLQotICAgIGlmIChtX2Fza2Vk
VG9UZXJtaW5hdGUpIHsKLSAgICAgICAgLy8gV29ya2VyLnRlcm1pbmF0ZSgpIGNvdWxkIGJlIGNh
bGxlZCBmcm9tIEpTIGJlZm9yZSB0aGUgdGhyZWFkIHdhcyBjcmVhdGVkLgotICAgICAgICBtX3dv
cmtlclRocmVhZC0+c3RvcCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIHRhc2tD
b3VudCA9IG1fcXVldWVkRWFybHlUYXNrcy5zaXplKCk7Ci0gICAgICAgIEFTU0VSVCghbV91bmNv
bmZpcm1lZE1lc3NhZ2VDb3VudCk7Ci0gICAgICAgIG1fdW5jb25maXJtZWRNZXNzYWdlQ291bnQg
PSB0YXNrQ291bnQ7Ci0gICAgICAgIG1fd29ya2VyVGhyZWFkSGFkUGVuZGluZ0FjdGl2aXR5ID0g
dHJ1ZTsgLy8gV29ya2VyIGluaXRpYWxpemF0aW9uIG1lYW5zIGEgcGVuZGluZyBhY3Rpdml0eS4K
LQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFza0NvdW50OyArK2kpCi0gICAg
ICAgICAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrKG1fcXVldWVkRWFybHlU
YXNrc1tpXSk7Ci0gICAgICAgIG1fcXVldWVkRWFybHlUYXNrcy5jbGVhcigpOwotICAgIH0KLX0K
LQotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyT2JqZWN0RGVzdHJveWVkKCkKLXsK
LSAgICBtX3dvcmtlck9iamVjdCA9IDA7Ci0gICAgaWYgKG1fd29ya2VyVGhyZWFkKQotICAgICAg
ICB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCk7Ci0gICAgZWxzZQotICAgICAgICB3b3JrZXJDb250
ZXh0RGVzdHJveWVkSW50ZXJuYWwoKTsKLX0KLQotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6
d29ya2VyQ29udGV4dERlc3Ryb3llZCgpCi17Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5wb3N0VGFzayhXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzazo6Y3JlYXRlKHRoaXMpKTsKLSAg
ICAvLyBXaWxsIGV4ZWN1dGUgd29ya2VyQ29udGV4dERlc3Ryb3llZEludGVybmFsKCkgb24gY29u
dGV4dCdzIHRocmVhZC4KLX0KLQotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyQ29u
dGV4dERlc3Ryb3llZEludGVybmFsKCkKLXsKLSAgICAvLyBXb3JrZXJDb250ZXh0RGVzdHJveWVk
VGFzayBpcyBhbHdheXMgdGhlIGxhc3QgdG8gYmUgcGVyZm9ybWVkLCBzbyB0aGUgcHJveHkgaXMg
bm90IG5lZWRlZCBmb3IgY29tbXVuaWNhdGlvbgotICAgIC8vIGluIGVpdGhlciBzaWRlIGFueSBt
b3JlLiBIb3dldmVyLCB0aGUgV29ya2VyIG9iamVjdCBtYXkgc3RpbGwgZXhpc3QsIGFuZCBpdCBh
c3N1bWVzIHRoYXQgdGhlIHByb3h5IGV4aXN0cywgdG9vLgotICAgIG1fd29ya2VyVGhyZWFkID0g
MDsKLSAgICBpZiAoIW1fd29ya2VyT2JqZWN0KQotICAgICAgICBkZWxldGUgdGhpczsKLX0KLQot
dm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6dGVybWluYXRlV29ya2VyQ29udGV4dCgpCi17Ci0g
ICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fYXNrZWRU
b1Rlcm1pbmF0ZSA9IHRydWU7Ci0KLSAgICBpZiAobV93b3JrZXJUaHJlYWQpCi0gICAgICAgIG1f
d29ya2VyVGhyZWFkLT5zdG9wKCk7Ci19Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OmNv
bmZpcm1Xb3JrZXJUaHJlYWRNZXNzYWdlKGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQotewotICAg
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soV29ya2VyVGhyZWFkQWN0aXZpdHlS
ZXBvcnRUYXNrOjpjcmVhdGUodGhpcywgdHJ1ZSwgaGFzUGVuZGluZ0FjdGl2aXR5KSk7Ci0gICAg
Ly8gV2lsbCBleGVjdXRlIHJlcG9ydFBlbmRpbmdBY3Rpdml0eUludGVybmFsKCkgb24gY29udGV4
dCdzIHRocmVhZC4KLX0KLQotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cmVwb3J0UGVuZGlu
Z0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQotewotICAgIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+cG9zdFRhc2soV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrOjpjcmVh
dGUodGhpcywgZmFsc2UsIGhhc1BlbmRpbmdBY3Rpdml0eSkpOwotICAgIC8vIFdpbGwgZXhlY3V0
ZSByZXBvcnRQZW5kaW5nQWN0aXZpdHlJbnRlcm5hbCgpIG9uIGNvbnRleHQncyB0aHJlYWQuCi19
Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnJlcG9ydFBlbmRpbmdBY3Rpdml0eUludGVy
bmFsKGJvb2wgY29uZmlybWluZ01lc3NhZ2UsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQotewot
ICAgIGlmIChjb25maXJtaW5nTWVzc2FnZSAmJiAhbV9hc2tlZFRvVGVybWluYXRlKSB7Ci0gICAg
ICAgIEFTU0VSVChtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50KTsKLSAgICAgICAgLS1tX3VuY29u
ZmlybWVkTWVzc2FnZUNvdW50OwotICAgIH0KLQotICAgIG1fd29ya2VyVGhyZWFkSGFkUGVuZGlu
Z0FjdGl2aXR5ID0gaGFzUGVuZGluZ0FjdGl2aXR5OwotfQotCi1ib29sIFdvcmtlck1lc3NhZ2lu
Z1Byb3h5OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiAobV91bmNv
bmZpcm1lZE1lc3NhZ2VDb3VudCB8fCBtX3dvcmtlclRocmVhZEhhZFBlbmRpbmdBY3Rpdml0eSkg
JiYgIW1fYXNrZWRUb1Rlcm1pbmF0ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Xb3JrZXJN
ZXNzYWdpbmdQcm94eS5oIGIvV2ViQ29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYwMjE3MS4uMDAwMDAwMAotLS0gYS9XZWJDb3Jl
L2RvbS9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqCi0gKi8KLQotI2lmbmRlZiBXb3JrZXJNZXNzYWdpbmdQcm94eV9oCi0jZGVmaW5l
IFdvcmtlck1lc3NhZ2luZ1Byb3h5X2gKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIldvcmtlckNvbnRleHRQcm94
eS5oIgotI2luY2x1ZGUgIldvcmtlck9iamVjdFByb3h5LmgiCi0jaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIGNsYXNzIFN0cmluZzsKLSAg
ICBjbGFzcyBXb3JrZXI7Ci0gICAgY2xhc3MgV29ya2VyVGhyZWFkOwotCi0gICAgY2xhc3MgV29y
a2VyTWVzc2FnaW5nUHJveHkgOiBwdWJsaWMgV29ya2VyQ29udGV4dFByb3h5LCBwdWJsaWMgV29y
a2VyT2JqZWN0UHJveHksIE5vbmNvcHlhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFdvcmtl
ck1lc3NhZ2luZ1Byb3h5KFdvcmtlciopOwotCi0gICAgICAgIC8vIEltcGxlbWVudGF0aW9ucyBv
ZiBXb3JrZXJDb250ZXh0UHJveHkuCi0gICAgICAgIC8vIChPbmx5IHVzZSB0aGVzZSBtZXRob2Rz
IGluIHRoZSB3b3JrZXIgb2JqZWN0IHRocmVhZC4pCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdGFy
dFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJB
Z2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHRl
cm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdl
VG9Xb3JrZXJDb250ZXh0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdv
cmtlck9iamVjdERlc3Ryb3llZCgpOwotCi0gICAgICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBX
b3JrZXJPYmplY3RQcm94eS4KLSAgICAgICAgLy8gKE9ubHkgdXNlIHRoZXNlIG1ldGhvZHMgaW4g
dGhlIHdvcmtlciBjb250ZXh0IHRocmVhZC4pCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVz
c2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlRGVz
dGluYXRpb24sIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKLQotICAg
ICAgICB2b2lkIHBvc3RUYXNrVG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPik7Ci0gICAgICAgIHZvaWQgcG9zdFRhc2tUb1dvcmtlckNvbnRleHQo
UGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7Ci0KLSAgICAgICAgdm9p
ZCB3b3JrZXJUaHJlYWRDcmVhdGVkKFBhc3NSZWZQdHI8V29ya2VyVGhyZWFkPik7Ci0KLSAgICAg
ICAgdm9pZCBjb25maXJtV29ya2VyVGhyZWFkTWVzc2FnZShib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSk7Ci0KLSAgICAgICAgLy8gT25seSB1c2UgdGhpcyBtZXRob2Qgb24gdGhlIHdvcmtlciBvYmpl
Y3QgdGhyZWFkLgotICAgICAgICBib29sIGFza2VkVG9UZXJtaW5hdGUoKSBjb25zdCB7IHJldHVy
biBtX2Fza2VkVG9UZXJtaW5hdGU7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBNZXNzYWdlV29ya2VyVGFzazsKLSAgICAgICAgZnJpZW5kIGNsYXNzIFdvcmtlckNvbnRl
eHREZXN0cm95ZWRUYXNrOwotICAgICAgICBmcmllbmQgY2xhc3MgV29ya2VyVGhyZWFkQWN0aXZp
dHlSZXBvcnRUYXNrOwotCi0gICAgICAgIHZpcnR1YWwgfldvcmtlck1lc3NhZ2luZ1Byb3h5KCk7
Ci0KLSAgICAgICAgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkSW50ZXJuYWwoKTsKLSAgICAg
ICAgdm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHlJbnRlcm5hbChib29sIGNvbmZpcm1pbmdNZXNz
YWdlLCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSk7Ci0gICAgICAgIFdvcmtlciogd29ya2VyT2Jq
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJPYmplY3Q7IH0KLQotICAgICAgICBSZWZQdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgICAg
ICBXb3JrZXIqIG1fd29ya2VyT2JqZWN0OwotICAgICAgICBSZWZQdHI8V29ya2VyVGhyZWFkPiBt
X3dvcmtlclRocmVhZDsKLQotICAgICAgICB1bnNpZ25lZCBtX3VuY29uZmlybWVkTWVzc2FnZUNv
dW50OyAvLyBVbmNvbmZpcm1lZCBtZXNzYWdlcyBmcm9tIHdvcmtlciBvYmplY3QgdG8gd29ya2Vy
IHRocmVhZC4KLSAgICAgICAgYm9vbCBtX3dvcmtlclRocmVhZEhhZFBlbmRpbmdBY3Rpdml0eTsg
Ly8gVGhlIGxhdGVzdCBjb25maXJtYXRpb24gZnJvbSB3b3JrZXIgdGhyZWFkIHJlcG9ydGVkIHRo
YXQgaXQgd2FzIHN0aWxsIGFjdGl2ZS4KLQotICAgICAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0
ZTsKLQotICAgICAgICBWZWN0b3I8UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
ID4gbV9xdWV1ZWRFYXJseVRhc2tzOyAvLyBUYXNrcyBhcmUgcXVldWVkIGhlcmUgdW50aWwgdGhl
cmUncyBhIHRocmVhZCBvYmplY3QgY3JlYXRlZC4KLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKLQotI2VuZGlmIC8vIFdvcmtlck1l
c3NhZ2luZ1Byb3h5X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1dvcmtlck9iamVjdFByb3h5
LmggYi9XZWJDb3JlL2RvbS9Xb3JrZXJPYmplY3RQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2MWFiYTczLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvZG9tL1dvcmtlck9iamVj
dFByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXb3JrZXJPYmpl
Y3RQcm94eV9oCi0jZGVmaW5lIFdvcmtlck9iamVjdFByb3h5X2gKLQotI2lmIEVOQUJMRShXT1JL
RVJTKQotCi0jaW5jbHVkZSAiQ29uc29sZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAg
ICBjbGFzcyBTdHJpbmc7Ci0KLSAgICAvLyBBIHByb3h5IHRvIHRhbGsgdG8gdGhlIHdvcmtlciBv
YmplY3QuCi0gICAgY2xhc3MgV29ya2VyT2JqZWN0UHJveHkgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgdmlydHVhbCB+V29ya2VyT2JqZWN0UHJveHkoKSB7fQotCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYpID0gMDsKLQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYg
ZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpID0g
MDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmpl
Y3QoTWVzc2FnZURlc3RpbmF0aW9uLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
KSA9IDA7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSkgPSAwOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJD
b250ZXh0RGVzdHJveWVkKCkgPSAwOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi0jZW5kaWYgLy8gV29ya2VyT2JqZWN0UHJv
eHlfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vV29ya2VyUnVuTG9vcC5jcHAgYi9XZWJDb3Jl
L2RvbS9Xb3JrZXJSdW5Mb29wLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU4
NzdmNy4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2RvbS9Xb3JrZXJSdW5Mb29wLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSAKLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVO
QUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlNoYXJlZFRpbWVyLmgiCi0jaW5jbHVkZSAiVGhyZWFkR2xvYmFsRGF0YS5oIgotI2lu
Y2x1ZGUgIlRocmVhZFRpbWVycy5oIgotI2luY2x1ZGUgIldvcmtlclJ1bkxvb3AuaCIKLSNpbmNs
dWRlICJXb3JrZXJDb250ZXh0LmgiCi0jaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV29ya2VyU2hhcmVkVGltZXIgOiBwdWJsaWMgU2hhcmVk
VGltZXIgewotcHVibGljOgotICAgIFdvcmtlclNoYXJlZFRpbWVyKCkKLSAgICAgICAgOiBtX3No
YXJlZFRpbWVyRnVuY3Rpb24oMCkKLSAgICAgICAgLCBtX25leHRGaXJlVGltZSgwKQotICAgIHsK
LSAgICB9Ci0KLSAgICAvLyBTaGFyZWRUaW1lciBpbnRlcmZhY2UuCi0gICAgdmlydHVhbCB2b2lk
IHNldEZpcmVkRnVuY3Rpb24odm9pZCAoKmZ1bmN0aW9uKSgpKSB7IG1fc2hhcmVkVGltZXJGdW5j
dGlvbiA9IGZ1bmN0aW9uOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEZpcmVUaW1lKGRvdWJsZSBm
aXJlVGltZSkgeyBtX25leHRGaXJlVGltZSA9IGZpcmVUaW1lOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHN0b3AoKSB7IG1fbmV4dEZpcmVUaW1lID0gMDsgfQotCi0gICAgYm9vbCBpc0FjdGl2ZSgpIHsg
cmV0dXJuIG1fc2hhcmVkVGltZXJGdW5jdGlvbiAmJiBtX25leHRGaXJlVGltZTsgfQotICAgIGRv
dWJsZSBmaXJlVGltZSgpIHsgcmV0dXJuIG1fbmV4dEZpcmVUaW1lOyB9Ci0gICAgdm9pZCBmaXJl
KCkgeyBtX3NoYXJlZFRpbWVyRnVuY3Rpb24oKTsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgKCpt
X3NoYXJlZFRpbWVyRnVuY3Rpb24pKCk7Ci0gICAgZG91YmxlIG1fbmV4dEZpcmVUaW1lOwotfTsK
LQotY2xhc3MgV29ya2VyUnVuTG9vcDo6VGFzayA6IHB1YmxpYyBSZWZDb3VudGVkPFRhc2s+IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2sodGFzaywgbW9kZSkpOwotICAg
IH0KLQotICAgIGNvbnN0IFN0cmluZyYgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQot
ICAgIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgeyBt
X3Rhc2stPnBlcmZvcm1UYXNrKGNvbnRleHQpOyB9Ci0KLXByaXZhdGU6Ci0gICAgVGFzayhQYXNz
UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYg
bW9kZSkKLSAgICAgICAgOiBtX3Rhc2sodGFzaykKLSAgICAgICAgLCBtX21vZGUobW9kZS5jb3B5
KCkpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBtX3Rhc2s7Ci0gICAgU3RyaW5nIG1fbW9kZTsKLX07Ci0KLWNsYXNzIE1vZGVQcmVkaWNh
dGUgewotcHVibGljOgotICAgIE1vZGVQcmVkaWNhdGUoY29uc3QgU3RyaW5nJiBtb2RlKQotICAg
ICAgICA6IG1fbW9kZShtb2RlKQotICAgICAgICAsIG1fZGVmYXVsdE1vZGUobW9kZSA9PSBXb3Jr
ZXJSdW5Mb29wOjpkZWZhdWx0TW9kZSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGlzRGVm
YXVsdE1vZGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGVmYXVsdE1vZGU7Ci0g
ICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcigpKFBhc3NSZWZQdHI8V29ya2VyUnVuTG9vcDo6VGFz
az4gdGFzaykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RlZmF1bHRNb2RlIHx8IG1f
bW9kZSA9PSB0YXNrLT5tb2RlKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFN0cmluZyBtX21v
ZGU7Ci0gICAgYm9vbCBtX2RlZmF1bHRNb2RlOwotfTsKLQotV29ya2VyUnVuTG9vcDo6V29ya2Vy
UnVuTG9vcCgpCi0gICAgOiBtX3NoYXJlZFRpbWVyKG5ldyBXb3JrZXJTaGFyZWRUaW1lcikKLSAg
ICAsIG1fbmVzdGVkQ291bnQoMCkKLXsKLX0KLQotV29ya2VyUnVuTG9vcDo6fldvcmtlclJ1bkxv
b3AoKQotewotICAgIEFTU0VSVCghbV9uZXN0ZWRDb3VudCk7Ci19Ci0KLVN0cmluZyBXb3JrZXJS
dW5Mb29wOjpkZWZhdWx0TW9kZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1jbGFz
cyBSdW5Mb29wU2V0dXAgOiBOb25jb3B5YWJsZQotewotcHVibGljOgotICAgIFJ1bkxvb3BTZXR1
cChXb3JrZXJSdW5Mb29wJiBydW5Mb29wKQotICAgICAgICA6IG1fcnVuTG9vcChydW5Mb29wKQot
ICAgIHsKLSAgICAgICAgaWYgKCFtX3J1bkxvb3AubV9uZXN0ZWRDb3VudCkKLSAgICAgICAgICAg
IHRocmVhZEdsb2JhbERhdGEoKS50aHJlYWRUaW1lcnMoKS5zZXRTaGFyZWRUaW1lcihtX3J1bkxv
b3AubV9zaGFyZWRUaW1lci5nZXQoKSk7Ci0gICAgICAgIG1fcnVuTG9vcC5tX25lc3RlZENvdW50
Kys7Ci0gICAgfQotCi0gICAgflJ1bkxvb3BTZXR1cCgpCi0gICAgewotICAgICAgICBtX3J1bkxv
b3AubV9uZXN0ZWRDb3VudC0tOwotICAgICAgICBpZiAoIW1fcnVuTG9vcC5tX25lc3RlZENvdW50
KQotICAgICAgICAgICAgdGhyZWFkR2xvYmFsRGF0YSgpLnRocmVhZFRpbWVycygpLnNldFNoYXJl
ZFRpbWVyKDApOwotICAgIH0KLXByaXZhdGU6Ci0gICAgV29ya2VyUnVuTG9vcCYgbV9ydW5Mb29w
OwotfTsKLQotdm9pZCBXb3JrZXJSdW5Mb29wOjpydW4oV29ya2VyQ29udGV4dCogY29udGV4dCkK
LXsKLSAgICBSdW5Mb29wU2V0dXAgc2V0dXAoKnRoaXMpOwotICAgIE1vZGVQcmVkaWNhdGUgbW9k
ZVByZWRpY2F0ZShkZWZhdWx0TW9kZSgpKTsKLSAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IHJl
c3VsdDsKLSAgICBkbyB7Ci0gICAgICAgIHJlc3VsdCA9IHJ1bkluTW9kZShjb250ZXh0LCBtb2Rl
UHJlZGljYXRlKTsKLSAgICB9IHdoaWxlIChyZXN1bHQgIT0gTWVzc2FnZVF1ZXVlVGVybWluYXRl
ZCk7Ci19Ci0KLU1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgV29ya2VyUnVuTG9vcDo6cnVuSW5Nb2Rl
KFdvcmtlckNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbW9kZSkKLXsKLSAgICBSdW5M
b29wU2V0dXAgc2V0dXAoKnRoaXMpOwotICAgIE1vZGVQcmVkaWNhdGUgbW9kZVByZWRpY2F0ZSht
b2RlKTsKLSAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IHJlc3VsdCA9IHJ1bkluTW9kZShjb250
ZXh0LCBtb2RlUHJlZGljYXRlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1NZXNzYWdlUXVl
dWVXYWl0UmVzdWx0IFdvcmtlclJ1bkxvb3A6OnJ1bkluTW9kZShXb3JrZXJDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBNb2RlUHJlZGljYXRlJiBwcmVkaWNhdGUpCi17Ci0gICAgQVNTRVJUKGNvbnRl
eHQpOwotICAgIEFTU0VSVChjb250ZXh0LT50aHJlYWQoKSk7Ci0gICAgQVNTRVJUKGNvbnRleHQt
PnRocmVhZCgpLT50aHJlYWRJRCgpID09IGN1cnJlbnRUaHJlYWQoKSk7Ci0KLSAgICBkb3VibGUg
YWJzb2x1dGVUaW1lID0gKHByZWRpY2F0ZS5pc0RlZmF1bHRNb2RlKCkgJiYgbV9zaGFyZWRUaW1l
ci0+aXNBY3RpdmUoKSkgPyBtX3NoYXJlZFRpbWVyLT5maXJlVGltZSgpIDogTWVzc2FnZVF1ZXVl
PFJlZlB0cjxUYXNrPiA+OjppbmZpbml0ZVRpbWUoKTsKLSAgICBSZWZQdHI8VGFzaz4gdGFzazsK
LSAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IHJlc3VsdCA9IG1fbWVzc2FnZVF1ZXVlLndhaXRG
b3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dCh0YXNrLCBwcmVkaWNhdGUsIGFic29sdXRlVGlt
ZSk7Ci0KLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgTWVzc2FnZVF1ZXVlVGVybWlu
YXRlZDoKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNl
aXZlZDoKLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soY29udGV4dCk7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBNZXNzYWdlUXVldWVUaW1lb3V0OgotICAgICAgICBtX3NoYXJlZFRpbWVy
LT5maXJlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXZvaWQgV29ya2VyUnVuTG9vcDo6dGVybWluYXRlKCkKLXsKLSAgICBtX21lc3NhZ2VRdWV1
ZS5raWxsKCk7Ci19Ci0KLXZvaWQgV29ya2VyUnVuTG9vcDo6cG9zdFRhc2soUGFzc1JlZlB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQotewotICAgIHBvc3RUYXNrRm9yTW9k
ZSh0YXNrLCBkZWZhdWx0TW9kZSgpKTsKLX0KLQotdm9pZCBXb3JrZXJSdW5Mb29wOjpwb3N0VGFz
a0Zvck1vZGUoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBj
b25zdCBTdHJpbmcmIG1vZGUpCi17Ci0gICAgbV9tZXNzYWdlUXVldWUuYXBwZW5kKFRhc2s6OmNy
ZWF0ZSh0YXNrLCBtb2RlLmNvcHkoKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1dvcmtl
clJ1bkxvb3AuaCBiL1dlYkNvcmUvZG9tL1dvcmtlclJ1bkxvb3AuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNGQxZWFhMy4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2RvbS9Xb3JrZXJS
dW5Mb29wLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXb3JrZXJS
dW5Mb29wX2gKLSNkZWZpbmUgV29ya2VyUnVuTG9vcF9oCi0KLSNpZiBFTkFCTEUoV09SS0VSUykK
LQotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTWVz
c2FnZVF1ZXVlLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIE1vZGVQcmVkaWNh
dGU7Ci0gICAgY2xhc3MgV29ya2VyQ29udGV4dDsKLSAgICBjbGFzcyBXb3JrZXJTaGFyZWRUaW1l
cjsKLQotICAgIGNsYXNzIFdvcmtlclJ1bkxvb3AgewotICAgIHB1YmxpYzoKLSAgICAgICAgV29y
a2VyUnVuTG9vcCgpOwotICAgICAgICB+V29ya2VyUnVuTG9vcCgpOwotICAgICAgICAKLSAgICAg
ICAgLy8gQmxvY2tpbmcgY2FsbC4gV2FpdHMgZm9yIHRhc2tzIGFuZCB0aW1lcnMsIGludm9rZXMg
dGhlIGNhbGxiYWNrcy4KLSAgICAgICAgdm9pZCBydW4oV29ya2VyQ29udGV4dCopOwotCi0gICAg
ICAgIC8vIFdhaXRzIGZvciBhIHNpbmdsZSB0YXNrIGFuZCByZXR1cm5zLgotICAgICAgICBNZXNz
YWdlUXVldWVXYWl0UmVzdWx0IHJ1bkluTW9kZShXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5n
JiBtb2RlKTsKLQotICAgICAgICB2b2lkIHRlcm1pbmF0ZSgpOwotICAgICAgICBib29sIHRlcm1p
bmF0ZWQoKSB7IHJldHVybiBtX21lc3NhZ2VRdWV1ZS5raWxsZWQoKTsgfQotCi0gICAgICAgIHZv
aWQgcG9zdFRhc2soUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7Ci0g
ICAgICAgIHZvaWQgcG9zdFRhc2tGb3JNb2RlKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4sIGNvbnN0IFN0cmluZyYgbW9kZSk7Ci0KLSAgICAgICAgc3RhdGljIFN0cmlu
ZyBkZWZhdWx0TW9kZSgpOwotICAgICAgICBjbGFzcyBUYXNrOwotICAgIHByaXZhdGU6Ci0gICAg
ICAgIGZyaWVuZCBjbGFzcyBSdW5Mb29wU2V0dXA7Ci0gICAgICAgIE1lc3NhZ2VRdWV1ZVdhaXRS
ZXN1bHQgcnVuSW5Nb2RlKFdvcmtlckNvbnRleHQqLCBjb25zdCBNb2RlUHJlZGljYXRlJik7Ci0K
LSAgICAgICAgTWVzc2FnZVF1ZXVlPFJlZlB0cjxUYXNrPiA+IG1fbWVzc2FnZVF1ZXVlOwotICAg
ICAgICBPd25QdHI8V29ya2VyU2hhcmVkVGltZXI+IG1fc2hhcmVkVGltZXI7Ci0gICAgICAgIGlu
dCBtX25lc3RlZENvdW50OwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi0jZW5kaWYgLy8gV29ya2VyUnVuTG9vcF9oCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9Xb3JrZXJUaHJlYWQuY3BwIGIvV2ViQ29yZS9kb20vV29ya2Vy
VGhyZWFkLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q2NTg2Zi4uMDAwMDAw
MAotLS0gYS9XZWJDb3JlL2RvbS9Xb3JrZXJUaHJlYWQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5B
QkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKLQotI2luY2x1ZGUgIktV
UkwuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNjcmlwdFNvdXJj
ZUNvZGUuaCIKLSNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIldvcmtlckNvbnRl
eHQuaCIKLSNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94eS5oIgotCi0jaW5jbHVkZSA8dXRpbGl0
eT4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
c3RydWN0IFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhIDogTm9uY29weWFibGUgewotcHVibGljOgot
ICAgIHN0YXRpYyBzdGQ6OmF1dG9fcHRyPFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhPiBjcmVhdGUo
Y29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6YXV0b19wdHI8V29y
a2VyVGhyZWFkU3RhcnR1cERhdGE+KG5ldyBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShzY3JpcHRV
UkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSkpOwotICAgIH0KLQotICAgIEtVUkwgbV9zY3JpcHRV
Ukw7Ci0gICAgU3RyaW5nIG1fdXNlckFnZW50OwotICAgIFN0cmluZyBtX3NvdXJjZUNvZGU7Ci1w
cml2YXRlOgotICAgIFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhKGNvbnN0IEtVUkwmIHNjcmlwdFVS
TCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSk7Ci19
OwotCi1Xb3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhyZWFkU3RhcnR1cERhdGEoY29u
c3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5n
JiBzb3VyY2VDb2RlKQotICAgIDogbV9zY3JpcHRVUkwoc2NyaXB0VVJMLmNvcHkoKSkKLSAgICAs
IG1fdXNlckFnZW50KHVzZXJBZ2VudC5jb3B5KCkpCi0gICAgLCBtX3NvdXJjZUNvZGUoc291cmNl
Q29kZS5jb3B5KCkpCi17Ci19Ci0KLVBhc3NSZWZQdHI8V29ya2VyVGhyZWFkPiBXb3JrZXJUaHJl
YWQ6OmNyZWF0ZShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50
LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlck9iamVjdFByb3h5KiB3b3JrZXJPYmpl
Y3RQcm94eSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlclRocmVhZChzY3JpcHRV
UkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSwgd29ya2VyT2JqZWN0UHJveHkpKTsKLX0KLQotV29y
a2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94
eSogd29ya2VyT2JqZWN0UHJveHkpCi0gICAgOiBtX3RocmVhZElEKDApCi0gICAgLCBtX3dvcmtl
ck9iamVjdFByb3h5KHdvcmtlck9iamVjdFByb3h5KQotICAgICwgbV9zdGFydHVwRGF0YShXb3Jr
ZXJUaHJlYWRTdGFydHVwRGF0YTo6Y3JlYXRlKHNjcmlwdFVSTCwgdXNlckFnZW50LCBzb3VyY2VD
b2RlKSkKLXsKLX0KLQotV29ya2VyVGhyZWFkOjp+V29ya2VyVGhyZWFkKCkKLXsKLX0KLQotYm9v
bCBXb3JrZXJUaHJlYWQ6OnN0YXJ0KCkKLXsKLSAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5l
Y2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBtX3RocmVhZElEIGlzIGluaXRpYWxpemVkIHdoZW4gdGhl
IHRocmVhZCBzdGFydHMuCi0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0
ZXgpOwotCi0gICAgaWYgKG1fdGhyZWFkSUQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
bV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0
LCB0aGlzLCAiV2ViQ29yZTo6V29ya2VyIik7Ci0KLSAgICByZXR1cm4gbV90aHJlYWRJRDsKLX0K
LQotdm9pZCogV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCh2b2lkKiB0aHJlYWQpCi17
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdvcmtlclRocmVhZCo+KHRocmVhZCktPndvcmtlclRo
cmVhZCgpOwotfQotCi12b2lkKiBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCgpCi17Ci0gICAg
ewotICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7Ci0gICAg
ICAgIG1fd29ya2VyQ29udGV4dCA9IFdvcmtlckNvbnRleHQ6OmNyZWF0ZShtX3N0YXJ0dXBEYXRh
LT5tX3NjcmlwdFVSTCwgbV9zdGFydHVwRGF0YS0+bV91c2VyQWdlbnQsIHRoaXMpOwotICAgICAg
ICBpZiAobV9ydW5Mb29wLnRlcm1pbmF0ZWQoKSkgewotICAgICAgICAgICAgLy8gVGhlIHdvcmtl
ciB3YXMgdGVybWluYXRlZCBiZWZvcmUgdGhlIHRocmVhZCBoYWQgYSBjaGFuY2UgdG8gcnVuLiBT
aW5jZSB0aGUgY29udGV4dCBkaWRuJ3QgZXhpc3QgeWV0LCAKLSAgICAgICAgICAgIC8vIGZvcmJp
ZEV4ZWN1dGlvbigpIGNvdWxkbid0IGJlIGNhbGxlZCBmcm9tIHN0b3AoKS4KLSAgICAgICAgICAg
bV93b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+Zm9yYmlkRXhlY3V0aW9uKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBzY3JpcHQgPSBtX3dvcmtlckNv
bnRleHQtPnNjcmlwdCgpOwotICAgIHNjcmlwdC0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZSht
X3N0YXJ0dXBEYXRhLT5tX3NvdXJjZUNvZGUsIG1fc3RhcnR1cERhdGEtPm1fc2NyaXB0VVJMKSk7
Ci0gICAgLy8gRnJlZSB0aGUgc3RhcnR1cCBkYXRhIHRvIGNhdXNlIGl0cyBtZW1iZXIgdmFyaWFi
bGUgZGVyZWYncyBoYXBwZW4gb24gdGhlIHdvcmtlcidzIHRocmVhZCAoc2luY2UKLSAgICAvLyBh
bGwgcmVmL2RlcmVmcyBvZiB0aGVzZSBvYmplY3RzIGFyZSBoYXBwZW5pbmcgb24gdGhlIHRocmVh
ZCBhdCB0aGlzIHBvaW50KS4gTm90ZSB0aGF0Ci0gICAgLy8gV29ya2VyVGhyZWFkOjp+V29ya2Vy
VGhyZWFkIGhhcHBlbnMgb24gYSBkaWZmZXJlbnQgdGhyZWFkIHdoZXJlIGl0IHdhcyBjcmVhdGVk
LgotICAgIG1fc3RhcnR1cERhdGEuY2xlYXIoKTsKLQotICAgIG1fd29ya2VyT2JqZWN0UHJveHkt
PnJlcG9ydFBlbmRpbmdBY3Rpdml0eShtX3dvcmtlckNvbnRleHQtPmhhc1BlbmRpbmdBY3Rpdml0
eSgpKTsKLQotICAgIC8vIEJsb2NrcyB1bnRpbCB0ZXJtaW5hdGVkLgotICAgIG1fcnVuTG9vcC5y
dW4obV93b3JrZXJDb250ZXh0LmdldCgpKTsKLQotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFk
SUQgPSBtX3RocmVhZElEOwotCi0gICAgbV93b3JrZXJDb250ZXh0LT5jbGVhclNjcmlwdCgpOwot
ICAgIEFTU0VSVChtX3dvcmtlckNvbnRleHQtPmhhc09uZVJlZigpKTsKLSAgICAvLyBUaGUgYmVs
b3cgYXNzaWdubWVudCB3aWxsIGRlc3Ryb3kgdGhlIGNvbnRleHQsIHdoaWNoIHdpbGwgaW4gdHVy
biBub3RpZnkgbWVzc2FnaW5nIHByb3h5LgotICAgIC8vIFdlIGNhbm5vdCBsZXQgYW55IG9iamVj
dHMgc3Vydml2ZSBwYXN0IHRocmVhZCBleGl0LCBiZWNhdXNlIG5vIG90aGVyIHRocmVhZCB3aWxs
IHJ1biBHQyBvciBvdGhlcndpc2UgZGVzdHJveSB0aGVtLgotICAgIG1fd29ya2VyQ29udGV4dCA9
IDA7Ci0gICAgCi0gICAgLy8gVGhlIHRocmVhZCBvYmplY3QgbWF5IGJlIGFscmVhZHkgZGVzdHJv
eWVkIGZyb20gbm90aWZpY2F0aW9uIG5vdywgZG9uJ3QgdHJ5IHRvIGFjY2VzcyAidGhpcyIuCi0g
ICAgZGV0YWNoVGhyZWFkKHRocmVhZElEKTsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdv
cmtlclRocmVhZDo6c3RvcCgpCi17Ci0gICAgLy8gTXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3Nh
cnkgYmVjYXVzZSBzdG9wKCkgY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRleHQgaXMgZnVs
bHkgY3JlYXRlZC4KLSAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7
Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB0YXNrcyBhcmUgYmVpbmcgaGFuZGxlZCBieSB0aHJlYWQg
ZXZlbnQgbG9vcC4gSWYgc2NyaXB0IGV4ZWN1dGlvbiB3ZXJlbid0IGZvcmJpZGRlbiwgYSB3aGls
ZSgxKSBsb29wIGluIEpTIGNvdWxkIGtlZXAgdGhlIHRocmVhZCBhbGl2ZSBmb3JldmVyLgotICAg
IGlmIChtX3dvcmtlckNvbnRleHQpCi0gICAgICAgIG1fd29ya2VyQ29udGV4dC0+c2NyaXB0KCkt
PmZvcmJpZEV4ZWN1dGlvbigpOwotCi0gICAgLy8gRklYTUU6IFJ1ZGVseSBraWxsaW5nIHRoZSB0
aHJlYWQgd29uJ3Qgd29yayB3aGVuIHdlIGFsbG93IG5lc3RlZCB3b3JrZXJzLCBiZWNhdXNlIHRo
ZXkgd2lsbCB0cnkgdG8gcG9zdCBub3RpZmljYXRpb25zIG9mIHRoZWlyIGRlc3RydWN0aW9uLgot
ICAgIG1fcnVuTG9vcC50ZXJtaW5hdGUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Xb3Jr
ZXJUaHJlYWQuaCBiL1dlYkNvcmUvZG9tL1dvcmtlclRocmVhZC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiMWVmNWY1Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvZG9tL1dvcmtlclRo
cmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICoKLSAqLwotCi0jaWZu
ZGVmIFdvcmtlclRocmVhZF9oCi0jZGVmaW5lIFdvcmtlclRocmVhZF9oCi0KLSNpZiBFTkFCTEUo
V09SS0VSUykKLQotI2luY2x1ZGUgPFdvcmtlclJ1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBLVVJMOwotICAgIGNs
YXNzIFN0cmluZzsKLSAgICBjbGFzcyBXb3JrZXJDb250ZXh0OwotICAgIGNsYXNzIFdvcmtlck9i
amVjdFByb3h5OwotICAgIHN0cnVjdCBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YTsKLQotICAgIGNs
YXNzIFdvcmtlclRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZD4gewotICAg
IHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyVGhyZWFkPiBjcmVhdGUo
Y29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSopOwotICAgICAgICB+V29ya2VyVGhy
ZWFkKCk7Ci0KLSAgICAgICAgYm9vbCBzdGFydCgpOwotICAgICAgICB2b2lkIHN0b3AoKTsKLQot
ICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJl
YWRJRDsgfQotICAgICAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wKCkgeyByZXR1cm4gbV9ydW5M
b29wOyB9Ci0gICAgICAgIFdvcmtlck9iamVjdFByb3h5KiB3b3JrZXJPYmplY3RQcm94eSgpIGNv
bnN0IHsgcmV0dXJuIG1fd29ya2VyT2JqZWN0UHJveHk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFdvcmtlclRocmVhZChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNv
bnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyT2JqZWN0UHJveHkqKTsKLQotICAgICAgICBz
dGF0aWMgdm9pZCogd29ya2VyVGhyZWFkU3RhcnQodm9pZCopOwotICAgICAgICB2b2lkKiB3b3Jr
ZXJUaHJlYWQoKTsKLQotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7Ci0gICAg
ICAgIFdvcmtlclJ1bkxvb3AgbV9ydW5Mb29wOwotICAgICAgICBXb3JrZXJPYmplY3RQcm94eSog
bV93b3JrZXJPYmplY3RQcm94eTsKLQotICAgICAgICBSZWZQdHI8V29ya2VyQ29udGV4dD4gbV93
b3JrZXJDb250ZXh0OwotICAgICAgICBNdXRleCBtX3RocmVhZENyZWF0aW9uTXV0ZXg7Ci0KLSAg
ICAgICAgT3duUHRyPFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhPiBtX3N0YXJ0dXBEYXRhOwotICAg
IH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJT
KQotCi0jZW5kaWYgLy8gV29ya2VyVGhyZWFkX2gKLQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3Jr
ZXIvQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGIvV2ViQ29yZS93b3JrZXIvQ3Jvc3NUaHJlYWRDb3Bp
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YWRmM2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3dvcmtlci9Dcm9zc1RocmVhZENvcGllci5jcHAKQEAgLTAs
MCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisj
aW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFN0cmluZz46OlR5cGUgQ3Jvc3NUaHJl
YWRDb3BpZXJCYXNlPGZhbHNlLCBTdHJpbmc+Ojpjb3B5KGNvbnN0IFN0cmluZyYgc3RyKQorewor
ICAgIHJldHVybiBzdHIuY29weSgpOworfQorCitDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2Us
IFJlc291cmNlRXJyb3I+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgUmVzb3Vy
Y2VFcnJvcj46OmNvcHkoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgcmV0dXJu
IGVycm9yLmNvcHkoKTsKK30KKworQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBSZXNvdXJj
ZVJlcXVlc3Q+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgUmVzb3VyY2VSZXF1
ZXN0Pjo6Y29weShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IHJlcXVlc3QuY29weURhdGEoKTsKK30KKworQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBS
ZXNvdXJjZVJlc3BvbnNlPjo6VHlwZSBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFJlc291
cmNlUmVzcG9uc2U+Ojpjb3B5KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorewor
ICAgIHJldHVybiByZXNwb25zZS5jb3B5RGF0YSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29y
a2VyL0Nyb3NzVGhyZWFkQ29waWVyLmggYi9XZWJDb3JlL3dvcmtlci9Dcm9zc1RocmVhZENvcGll
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YzFjMjUKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3dvcmtlci9Dcm9zc1RocmVhZENvcGllci5oCkBAIC0wLDAgKzEs
MTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDcm9zc1RocmVhZENvcGllcl9oCisjZGVmaW5lIENyb3NzVGhyZWFkQ29w
aWVyX2gKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBSZXNvdXJjZUVycm9yOworICAgIGNsYXNzIFJlc291
cmNlUmVxdWVzdDsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIGNsYXNzIFN0cmlu
ZzsKKyAgICBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YTsKKyAgICBzdHJ1
Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2ggeworICAgICAgICB0eXBl
ZGVmIFQgVHlwZTsKKyAgICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBUJiBwYXJhbWV0ZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgdGVtcGxhdGU8Ym9vbCBpc0NvbnZlcnRpYmxlVG9JbnRlZ2VyLCB0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlOworCisgICAgLy8gSW50ZWdlcnMgZ2V0
IHBhc3NlZCB0aHJvdWdoIHdpdGhvdXQgYW55IGNoYW5nZXMuCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTx0cnVlLCBUPiA6IHB1YmxpYyBDcm9z
c1RocmVhZENvcGllclBhc3NUaHJvdWdoPFQ+IHsKKyAgICB9OworCisgICAgLy8gUG9pbnRlcnMg
Z2V0IHBhc3NlZCB0aHJvdWdoIHdpdGhvdXQgYW55IHNpZ25pZmljYW50IGNoYW5nZXMuCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwg
VCo+IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2g8VCo+IHsKKyAgICB9Owor
CisgICAgLy8gQ3VzdG9tIGNvcHkgbWV0aG9kcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJl
ZDxUPiA+ID4geworICAgICAgICB0eXBlZGVmIFBhc3NSZWZQdHI8VD4gVHlwZTsKKyAgICAgICAg
c3RhdGljIFR5cGUgY29weShjb25zdCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxUPiA+JiByZWZQ
dHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPFQ+KHN0YXRpY19j
YXN0PFQqPihyZWZQdHIuZ2V0KCkpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBzdGQ6OmF1
dG9fcHRyPFQ+ID4geworICAgICAgICB0eXBlZGVmIHN0ZDo6YXV0b19wdHI8VD4gVHlwZTsKKyAg
ICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBzdGQ6OmF1dG9fcHRyPFQ+JiBhdXRvUHRyKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjphdXRvX3B0cjxUPigqY29uc3RfY2Fz
dDxzdGQ6OmF1dG9fcHRyPFQ+Kj4oJmF1dG9QdHIpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFN0cmluZz4g
eworICAgICAgICB0eXBlZGVmIFN0cmluZyBUeXBlOworICAgICAgICBzdGF0aWMgVHlwZSBjb3B5
KGNvbnN0IFN0cmluZyYpOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1Ro
cmVhZENvcGllckJhc2U8ZmFsc2UsIFJlc291cmNlRXJyb3I+IHsKKyAgICAgICAgdHlwZWRlZiBS
ZXNvdXJjZUVycm9yIFR5cGU7CisgICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIFJlc291cmNlUmVxdWVzdD4geworICAgICAgICB0eXBlZGVmIHN0ZDo6
YXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiBUeXBlOworICAgICAgICBz
dGF0aWMgVHlwZSBjb3B5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgIH07CisKKyAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFJlc291cmNlUmVz
cG9uc2U+IHsKKyAgICAgICAgdHlwZWRlZiBzdGQ6OmF1dG9fcHRyPENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXNwb25zZURhdGE+IFR5cGU7CisgICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ3Jvc3NUaHJlYWRDb3BpZXIgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPFdURjo6
SXNDb252ZXJ0aWJsZVRvSW50ZWdlcjxUPjo6dmFsdWUsIFQ+IHsKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8v
IENyb3NzVGhyZWFkQ29waWVyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2VyL0dlbmVyaWNX
b3JrZXJUYXNrLmggYi9XZWJDb3JlL3dvcmtlci9HZW5lcmljV29ya2VyVGFzay5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjBlNzAKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3dvcmtlci9HZW5lcmljV29ya2VyVGFzay5oCkBAIC0wLDAgKzEsNDE1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBHZW5lcmljV29ya2VyVGFza19oCisjZGVmaW5lIEdlbmVyaWNXb3JrZXJUYXNrX2gKKworI2lm
IEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKKyNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gVHJhaXRzIGZvciB0aGUgR2VuZXJpY1dvcmtlclRh
c2suCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEdlbmVyaWNXb3JrZXJUYXNrVHJh
aXRzIHsKKyAgICAgICAgdHlwZWRlZiBjb25zdCBUJiBQYXJhbVR5cGU7CisgICAgfTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljV29ya2VyVGFza1RyYWl0czxUKj4g
eworICAgICAgICB0eXBlZGVmIFQqIFBhcmFtVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPHN0ZDo6YXV0b19wdHI8
VD4gPiB7CisgICAgICAgIHR5cGVkZWYgc3RkOjphdXRvX3B0cjxUPiBQYXJhbVR5cGU7CisgICAg
fTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljV29ya2VyVGFza1Ry
YWl0czxQYXNzUmVmUHRyPFQ+ID4geworICAgICAgICB0eXBlZGVmIFBhc3NSZWZQdHI8VD4gUGFy
YW1UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAx
PgorICAgIGNsYXNzIEdlbmVyaWNXb3JrZXJUYXNrMSA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgdm9pZCAoKk1ldGhv
ZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSk7CisgICAgICAgIHR5cGVkZWYgR2VuZXJp
Y1dvcmtlclRhc2sxPFAxLCBNUDE+IEdlbmVyaWNXb3JrZXJUYXNrOworICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsK
KworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3JlYXRlKE1l
dGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwgcGFyYW1ldGVyMSkp
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBHZW5lcmljV29ya2VyVGFzazEo
TWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEpCisgICAgICAgICAgICA6IG1fbWV0aG9k
KG1ldGhvZCkKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICAoKm1fbWV0
aG9kKShjb250ZXh0LCBtX3BhcmFtZXRlcjEpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICB9
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIs
IHR5cGVuYW1lIE1QMj4KKyAgICBjbGFzcyBHZW5lcmljV29ya2VyVGFzazIgOiBwdWJsaWMgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVm
IHZvaWQgKCpNZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMik7CisgICAg
ICAgIHR5cGVkZWYgR2VuZXJpY1dvcmtlclRhc2syPFAxLCBNUDEsIFAyLCBNUDI+IEdlbmVyaWNX
b3JrZXJUYXNrOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJh
aXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5l
cmljV29ya2VyVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQ
YXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0
ZXIxLCBwYXJhbWV0ZXIyKSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEdl
bmVyaWNXb3JrZXJUYXNrMihNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0y
IHBhcmFtZXRlcjIpCisgICAgICAgICAgICA6IG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgICAg
ICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICAgICAsIG1fcGFyYW1ldGVyMihw
YXJhbWV0ZXIyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgKCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRl
cjIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBNZXRob2QgbV9tZXRob2Q7
CisgICAgICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICAgICAgUDIgbV9wYXJhbWV0ZXIyOworICAg
IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQ
MiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzPgorICAgIGNsYXNzIEdl
bmVyaWNXb3JrZXJUYXNrMyA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgdm9pZCAoKk1ldGhvZCkoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMpOworICAgICAgICB0eXBlZGVmIEdlbmVyaWNXb3Jr
ZXJUYXNrMzxQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzPiBHZW5lcmljV29ya2VyVGFzazsKKyAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMT46OlBhcmFt
VHlwZSBQYXJhbTE7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tU
cmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdl
bmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKworICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3JlYXRlKE1ldGhvZCBtZXRob2Qs
IFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1dvcmtl
clRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzKSk7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEdlbmVyaWNXb3JrZXJUYXNrMyhNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzKQorICAgICAgICAgICAgOiBtX21ldGhvZChtZXRob2QpCisgICAgICAgICAgICAsIG1f
cGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1l
dGVyMikKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICAoKm1fbWV0aG9k
KShjb250ZXh0LCBtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzKTsKKyAg
ICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWV0aG9kIG1fbWV0aG9kOworICAgICAg
ICBQMSBtX3BhcmFtZXRlcjE7CisgICAgICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICAgICAgUDMg
bV9wYXJhbWV0ZXIzOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5h
bWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUg
TVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0PgorICAgIGNsYXNzIEdlbmVyaWNXb3JrZXJU
YXNrNCA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHR5cGVkZWYgdm9pZCAoKk1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IE1QMSwgTVAyLCBNUDMsIE1QNCk7CisgICAgICAgIHR5cGVkZWYgR2VuZXJpY1dvcmtlclRhc2s0
PFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQ+IEdlbmVyaWNXb3JrZXJUYXNrOwor
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAxPjo6UGFy
YW1UeXBlIFBhcmFtMTsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFz
a1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
R2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBh
cmFtNDsKKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3Jl
YXRlKE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwg
UGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0KQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwgcGFyYW1l
dGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCkpOworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBHZW5lcmljV29ya2VyVGFzazQoTWV0aG9kIG1ldGhvZCwg
UGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywg
UGFyYW00IHBhcmFtZXRlcjQpCisgICAgICAgICAgICA6IG1fbWV0aG9kKG1ldGhvZCkKKyAgICAg
ICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICAgICAsIG1fcGFyYW1l
dGVyMihwYXJhbWV0ZXIyKQorICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykK
KyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICAoKm1fbWV0aG9kKShjb250
ZXh0LCBtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRl
cjQpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBNZXRob2QgbV9tZXRob2Q7
CisgICAgICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICAgICAgUDIgbV9wYXJhbWV0ZXIyOworICAg
ICAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAgICAgIFA0IG1fcGFyYW1ldGVyNDsKKyAgICB9Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5
cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVu
YW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KKyAgICBjbGFzcyBHZW5lcmljV29y
a2VyVGFzazUgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CisgICAgcHVi
bGljOgorICAgICAgICB0eXBlZGVmIHZvaWQgKCpNZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSk7CisgICAgICAgIHR5cGVkZWYgR2VuZXJpY1dv
cmtlclRhc2s1PFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQsIFA1LCBNUDU+IEdl
bmVyaWNXb3JrZXJUYXNrOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJU
YXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUg
UGFyYW0zOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRz
PFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmlj
V29ya2VyVGFza1RyYWl0czxQNT46OlBhcmFtVHlwZSBQYXJhbTU7CisKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJh
bTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJh
bTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIx
LCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJhbWV0ZXI1KSk7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEdlbmVyaWNXb3JrZXJUYXNrNShNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgICAgICAg
ICA6IG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRl
cjEpCisgICAgICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAgICAgICAgICAg
LCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXI0KHBh
cmFtZXRlcjQpCisgICAgICAgICAgICAsIG1fcGFyYW1ldGVyNShwYXJhbWV0ZXI1KQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgKCptX21l
dGhvZCkoY29udGV4dCwgbV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywg
bV9wYXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICAg
ICAgUDIgbV9wYXJhbWV0ZXIyOworICAgICAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAgICAgIFA0
IG1fcGFyYW1ldGVyNDsKKyAgICAgICAgUDUgbV9wYXJhbWV0ZXI1OworICAgIH07CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUg
TVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0
LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1LCB0eXBlbmFtZSBQNiwgdHlwZW5hbWUgTVA2Pgor
ICAgIGNsYXNzIEdlbmVyaWNXb3JrZXJUYXNrNiA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgdm9pZCAoKk1ldGhvZCko
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1LCBNUDYpOwor
ICAgICAgICB0eXBlZGVmIEdlbmVyaWNXb3JrZXJUYXNrNjxQMSwgTVAxLCBQMiwgTVAyLCBQMywg
TVAzLCBQNCwgTVA0LCBQNSwgTVA1LCBQNiwgTVA2PiBHZW5lcmljV29ya2VyVGFzazsKKyAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMT46OlBhcmFtVHlw
ZSBQYXJhbTE7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFp
dHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVy
aWNXb3JrZXJUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7
CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDU+OjpQ
YXJhbVR5cGUgUGFyYW01OworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJU
YXNrVHJhaXRzPFA2Pjo6UGFyYW1UeXBlIFBhcmFtNjsKKworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3JlYXRlKE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJh
bWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJh
bWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSwgUGFyYW02IHBhcmFtZXRlcjYpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1dvcmtlclRhc2sobWV0aG9k
LCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJhbWV0
ZXI1LCBwYXJhbWV0ZXI2KSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEdl
bmVyaWNXb3JrZXJUYXNrNihNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0y
IHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01
IHBhcmFtZXRlcjUsIFBhcmFtNiBwYXJhbWV0ZXI2KQorICAgICAgICAgICAgOiBtX21ldGhvZCht
ZXRob2QpCisgICAgICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAg
ICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIz
KHBhcmFtZXRlcjMpCisgICAgICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0ZXI0KQorICAg
ICAgICAgICAgLCBtX3BhcmFtZXRlcjUocGFyYW1ldGVyNSkKKyAgICAgICAgICAgICwgbV9wYXJh
bWV0ZXI2KHBhcmFtZXRlcjYpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICAoKm1fbWV0aG9kKShjb250ZXh0LCBtX3BhcmFtZXRlcjEsIG1f
cGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQsIG1fcGFyYW1ldGVyNSwgbV9w
YXJhbWV0ZXI2KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWV0aG9kIG1f
bWV0aG9kOworICAgICAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgICAgIFAyIG1fcGFyYW1ldGVy
MjsKKyAgICAgICAgUDMgbV9wYXJhbWV0ZXIzOworICAgICAgICBQNCBtX3BhcmFtZXRlcjQ7Cisg
ICAgICAgIFA1IG1fcGFyYW1ldGVyNTsKKyAgICAgICAgUDYgbV9wYXJhbWV0ZXI2OworICAgIH07
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwg
dHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlw
ZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1LCB0eXBlbmFtZSBQNiwgdHlwZW5h
bWUgTVA2LCB0eXBlbmFtZSBQNywgdHlwZW5hbWUgTVA3PgorICAgIGNsYXNzIEdlbmVyaWNXb3Jr
ZXJUYXNrNyA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHR5cGVkZWYgdm9pZCAoKk1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1LCBNUDYsIE1QNyk7CisgICAgICAgIHR5cGVkZWYg
R2VuZXJpY1dvcmtlclRhc2s3PFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQsIFA1
LCBNUDUsIFA2LCBNUDYsIFA3LCBNUDc+IEdlbmVyaWNXb3JrZXJUYXNrOworICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFt
MTsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMj46
OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtl
clRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKKyAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQNT46OlBhcmFtVHlw
ZSBQYXJhbTU7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFp
dHM8UDY+OjpQYXJhbVR5cGUgUGFyYW02OworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVy
aWNXb3JrZXJUYXNrVHJhaXRzPFA3Pjo6UGFyYW1UeXBlIFBhcmFtNzsKKworICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3JlYXRlKE1ldGhvZCBtZXRob2QsIFBh
cmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBh
cmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSwgUGFyYW02IHBhcmFtZXRlcjYsIFBh
cmFtNyBwYXJhbWV0ZXI3KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFy
YW1ldGVyMywgcGFyYW1ldGVyNCwgcGFyYW1ldGVyNSwgcGFyYW1ldGVyNiwgcGFyYW1ldGVyNykp
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBHZW5lcmljV29ya2VyVGFzazco
TWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJh
bTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1LCBQYXJh
bTYgcGFyYW1ldGVyNiwgUGFyYW03IHBhcmFtZXRlcjcpCisgICAgICAgICAgICA6IG1fbWV0aG9k
KG1ldGhvZCkKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAg
ICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAgICAgICAgICAgLCBtX3BhcmFtZXRl
cjMocGFyYW1ldGVyMykKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCisg
ICAgICAgICAgICAsIG1fcGFyYW1ldGVyNShwYXJhbWV0ZXI1KQorICAgICAgICAgICAgLCBtX3Bh
cmFtZXRlcjYocGFyYW1ldGVyNikKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXI3KHBhcmFtZXRl
cjcpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICAoKm1fbWV0aG9kKShjb250ZXh0LCBtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9w
YXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQsIG1fcGFyYW1ldGVyNSwgbV9wYXJhbWV0ZXI2LCBtX3Bh
cmFtZXRlcjcpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBNZXRob2QgbV9t
ZXRob2Q7CisgICAgICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICAgICAgUDIgbV9wYXJhbWV0ZXIy
OworICAgICAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAgICAgIFA0IG1fcGFyYW1ldGVyNDsKKyAg
ICAgICAgUDUgbV9wYXJhbWV0ZXI1OworICAgICAgICBQNiBtX3BhcmFtZXRlcjY7CisgICAgICAg
IFA3IG1fcGFyYW1ldGVyNzsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5
cGVuYW1lIE1QMT4KKyAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIE1QMSksCisgICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEdlbmVyaWNXb3JrZXJUYXNrMTx0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQMT46OlR5cGUsIE1QMT46OmNyZWF0ZSgKKyAgICAgICAgICAgIG1ldGhvZCwKKyAgICAg
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5
cGVuYW1lIE1QMj4KKyAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIE1QMSwgTVAyKSwKKyAgICAgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsIGNv
bnN0IFAyJiBwYXJhbWV0ZXIyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyaWNXb3JrZXJU
YXNrMjx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDI+OjpjcmVhdGUoCisgICAgICAgICAgICBt
ZXRob2QsCisgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVy
MSksIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVu
YW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMz4KKyAgICBQYXNzUmVmUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICAgICAgdm9p
ZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMpLAorICAg
ICAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwgY29uc3QgUDImIHBhcmFtZXRlcjIsIGNvbnN0IFAz
JiBwYXJhbWV0ZXIzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyaWNXb3JrZXJUYXNrMzx0
eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NU
aHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAz
Pjo6VHlwZSwgTVAzPjo6Y3JlYXRlKAorICAgICAgICAgICAgbWV0aG9kLAorICAgICAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLCBDcm9zc1RocmVhZENvcGll
cjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQ
Mz46OmNvcHkocGFyYW1ldGVyMykpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAx
LCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0
eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQ+CisgICAgUGFzc1JlZlB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGVDYWxsYmFja1Rhc2soCisgICAgICAg
IHZvaWQgKCptZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBN
UDQpLAorICAgICAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwgY29uc3QgUDImIHBhcmFtZXRlcjIs
IGNvbnN0IFAzJiBwYXJhbWV0ZXIzLCBjb25zdCBQNCYgcGFyYW1ldGVyNCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBHZW5lcmljV29ya2VyVGFzazQ8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAy
LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywKKyAgICAgICAgICAg
IHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0Pjo6Y3JlYXRlKAorICAg
ICAgICAgICAgICAgIG1ldGhvZCwKKyAgICAgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQ
MT46OmNvcHkocGFyYW1ldGVyMSksIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0
ZXIyKSwKKyAgICAgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1l
dGVyMyksIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5
cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVu
YW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KKyAgICBQYXNzUmVmUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICAgICAgdm9p
ZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwg
TVA1KSwKKyAgICAgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIy
LCBjb25zdCBQMyYgcGFyYW1ldGVyMywgY29uc3QgUDQmIHBhcmFtZXRlcjQsIGNvbnN0IFA1JiBw
YXJhbWV0ZXI1KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyaWNXb3JrZXJUYXNrNTx0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6
VHlwZSwgTVAzLAorICAgICAgICAgICAgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpU
eXBlLCBNUDQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwgTVA1Pjo6Y3Jl
YXRlKAorICAgICAgICAgICAgICAgIG1ldGhvZCwKKyAgICAgICAgICAgICAgICBDcm9zc1RocmVh
ZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29w
eShwYXJhbWV0ZXIyKSwKKyAgICAgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNv
cHkocGFyYW1ldGVyMyksIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwK
KyAgICAgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVyNSkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVu
YW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1l
IFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDUsIHR5cGVuYW1lIFA2
LCB0eXBlbmFtZSBNUDY+CisgICAgUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBjcmVhdGVDYWxsYmFja1Rhc2soCisgICAgICAgIHZvaWQgKCptZXRob2QpKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSwgTVA2KSwKKyAgICAgICAg
Y29uc3QgUDEmIHBhcmFtZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLCBjb25zdCBQMyYgcGFy
YW1ldGVyMywgY29uc3QgUDQmIHBhcmFtZXRlcjQsIGNvbnN0IFA1JiBwYXJhbWV0ZXI1LCBjb25z
dCBQNiYgcGFyYW1ldGVyNikKKyAgICB7CisgICAgICAgIHJldHVybiBHZW5lcmljV29ya2VyVGFz
azY8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENy
b3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGll
cjxQMz46OlR5cGUsIE1QMywKKyAgICAgICAgICAgIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVy
PFA0Pjo6VHlwZSwgTVA0LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNT46OlR5cGUsIE1Q
NSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDY+OjpUeXBlLCBNUDY+OjpjcmVhdGUoCisg
ICAgICAgICAgICAgICAgbWV0aG9kLAorICAgICAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVy
PFAxPjo6Y29weShwYXJhbWV0ZXIxKSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFt
ZXRlcjIpLAorICAgICAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJh
bWV0ZXIzKSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAorICAgICAg
ICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6Y29weShwYXJhbWV0ZXI1KSwgQ3Jvc3NU
aHJlYWRDb3BpZXI8UDY+Ojpjb3B5KHBhcmFtZXRlcjYpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0
eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBl
bmFtZSBQNSwgdHlwZW5hbWUgTVA1LCB0eXBlbmFtZSBQNiwgdHlwZW5hbWUgTVA2LCB0eXBlbmFt
ZSBQNywgdHlwZW5hbWUgTVA3PgorICAgIFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gY3JlYXRlQ2FsbGJhY2tUYXNrKAorICAgICAgICB2b2lkICgqbWV0aG9kKShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUsIE1QNiwgTVA3KSwK
KyAgICAgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLCBjb25z
dCBQMyYgcGFyYW1ldGVyMywgY29uc3QgUDQmIHBhcmFtZXRlcjQsIGNvbnN0IFA1JiBwYXJhbWV0
ZXI1LCBjb25zdCBQNiYgcGFyYW1ldGVyNiwgY29uc3QgUDcmIHBhcmFtZXRlcjcpCisgICAgewor
ICAgICAgICByZXR1cm4gR2VuZXJpY1dvcmtlclRhc2s3PHR5cGVuYW1lIENyb3NzVGhyZWFkQ29w
aWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUs
IE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMsCisgICAgICAg
ICAgICB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QNCwgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDU+OjpUeXBlLCBNUDUsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29w
aWVyPFA2Pjo6VHlwZSwgTVA2LAorICAgICAgICAgICAgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDc+OjpUeXBlLCBNUDc+OjpjcmVhdGUoCisgICAgICAgICAgICAgICAgbWV0aG9kLAorICAg
ICAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICAgICAgICAgIENy
b3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAorICAgICAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVy
PFA1Pjo6Y29weShwYXJhbWV0ZXI1KSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDY+Ojpjb3B5KHBhcmFt
ZXRlcjYpLAorICAgICAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA3Pjo6Y29weShwYXJh
bWV0ZXI3KSk7CisgICAgfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIEdlbmVyaWNXb3JrZXJUYXNrX2gKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvd29ya2VyL1dvcmtlci5jcHAgYi9XZWJDb3JlL3dvcmtlci9Xb3JrZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYzlkYTIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3dvcmtlci9Xb3JrZXIuY3BwCkBAIC0wLDAgKzEsMjExIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNp
bmNsdWRlICJXb3JrZXIuaCIKKworI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUg
IkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVy
LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAi
TWVzc2FnZUV2ZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJX
b3JrZXJDb250ZXh0UHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dvcmtlcjo6V29y
a2VyKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBF
eGNlcHRpb25Db2RlJiBlYykKKyAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQor
ICAgICwgbV9jb250ZXh0UHJveHkoV29ya2VyQ29udGV4dFByb3h5OjpjcmVhdGUodGhpcykpCit7
CisgICAgbV9zY3JpcHRVUkwgPSBjb250ZXh0LT5jb21wbGV0ZVVSTCh1cmwpOworICAgIGlmICh1
cmwuaXNFbXB0eSgpIHx8ICFtX3NjcmlwdFVSTC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMgPSBT
WU5UQVhfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjb250ZXh0LT5z
ZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3MoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtX3Njcmlw
dFVSTCkuZ2V0KCkpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gRklYTUU6ICdpbmhlcml0JyBjaGFyc2V0IGFuZCBhY3R1YWwg
bG9hZGluZyBzdXBwb3J0IGZyb20gb3JpZ2luYWwgZG9jdW1lbnQgdG8gZW5hYmxlIG5lc3RlZCB3
b3JrZXJzLgorICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQo
KSk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpOworCisgICAgbV9jYWNoZWRTY3JpcHQgPSBkb2N1bWVudC0+
ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQobV9zY3JpcHRVUkwsIGRvY3VtZW50LT5jaGFyc2V0
KCkpOworICAgIGlmICghbV9jYWNoZWRTY3JpcHQpIHsKKyAgICAgICAgZGlzcGF0Y2hFcnJvckV2
ZW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHko
dGhpcyk7ICAvLyBUaGUgd29ya2VyIGNvbnRleHQgZG9lcyBub3QgZXhpc3Qgd2hpbGUgbG9hZGlu
Zywgc28gd2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgd29ya2VyIG9iamVjdCBpcyBub3QgY29sbGVj
dGVkLCBhcyB3ZWxsIGFzIGl0cyBldmVudCBsaXN0ZW5lcnMuCisgICAgbV9jYWNoZWRTY3JpcHQt
PmFkZENsaWVudCh0aGlzKTsKK30KKworV29ya2VyOjp+V29ya2VyKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOyAv
LyBUaGUgY29udGV4dCBpcyBwcm90ZWN0ZWQgYnkgd29ya2VyIGNvbnRleHQgcHJveHksIHNvIGl0
IGNhbm5vdCBiZSBkZXN0cm95ZWQgd2hpbGUgYSBXb3JrZXIgZXhpc3RzLgorICAgIG1fY29udGV4
dFByb3h5LT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKK30KKwordm9pZCBXb3JrZXI6OnBvc3RN
ZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX2NvbnRleHRQcm94eS0+cG9z
dE1lc3NhZ2VUb1dvcmtlckNvbnRleHQobWVzc2FnZSk7Cit9CisKK3ZvaWQgV29ya2VyOjp0ZXJt
aW5hdGUoKQoreworICAgIG1fY29udGV4dFByb3h5LT50ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCk7
Cit9CisKK2Jvb2wgV29ya2VyOjpjYW5TdXNwZW5kKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTog
SXQgaXMgbm90IGN1cnJlbnRseSBwb3NzaWJsZSB0byBzdXNwZW5kIGEgd29ya2VyLCBzbyBwYWdl
cyB3aXRoIHdvcmtlcnMgY2FuIG5vdCBnbyBpbnRvIHBhZ2UgY2FjaGUuCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFdvcmtlcjo6c3RvcCgpCit7CisgICAgdGVybWluYXRlKCk7Cit9CisK
K2Jvb2wgV29ya2VyOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBt
X2NvbnRleHRQcm94eS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkgfHwgQWN0aXZlRE9NT2JqZWN0Ojpo
YXNQZW5kaW5nQWN0aXZpdHkoKTsKK30KKwordm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKENh
Y2hlZFJlc291cmNlKiB1bnVzZWRSZXNvdXJjZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHVudXNl
ZFJlc291cmNlLCB1bnVzZWRSZXNvdXJjZSA9PSBtX2NhY2hlZFNjcmlwdCk7CisKKyAgICBpZiAo
bV9jYWNoZWRTY3JpcHQtPmVycm9yT2NjdXJyZWQoKSkKKyAgICAgICAgZGlzcGF0Y2hFcnJvckV2
ZW50KCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHRQcm94eS0+c3RhcnRXb3JrZXJDb250
ZXh0KG1fc2NyaXB0VVJMLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVzZXJBZ2VudChtX3Nj
cmlwdFVSTCksIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKSk7CisKKyAgICBtX2NhY2hlZFNjcmlw
dC0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsKKworICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworfQorCit2b2lkIFdvcmtlcjo6ZGlzcGF0Y2hFcnJv
ckV2ZW50KCkKK3sKKyAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAgICBpZiAobV9vbkVycm9yTGlzdGVu
ZXIpIHsKKyAgICAgICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7CisgICAgICAgIGV2dC0+c2V0Q3Vy
cmVudFRhcmdldCh0aGlzKTsKKyAgICAgICAgbV9vbkVycm9yTGlzdGVuZXItPmhhbmRsZUV2ZW50
KGV2dC5nZXQoKSwgdHJ1ZSk7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBlYyk7CisgICAgQVNTRVJUKCFlYyk7Cit9
CisKK3ZvaWQgV29ya2VyOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCit7
CisgICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJz
LmZpbmQoZXZlbnRUeXBlKTsKKyAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgp
KSB7CisgICAgICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyczsKKyAgICAgICAgbGlzdGVuZXJz
LmFwcGVuZChldmVudExpc3RlbmVyKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZl
bnRUeXBlLCBsaXN0ZW5lcnMpOworICAgIH0gZWxzZSB7CisgICAgICAgIExpc3RlbmVyVmVjdG9y
JiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6
Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIg
IT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgeworICAgICAgICAgICAgaWYgKCps
aXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5l
cik7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsK
KyAgICB9ICAgIAorfQorCit2b2lkIFdvcmtlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lciwgYm9v
bCkKK3sKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0
ZW5lcnMuZmluZChldmVudFR5cGUpOworICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVu
ZXJzID0gaXRlci0+c2Vjb25kOworICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlz
dGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgeworICAgICAgICBpZiAoKmxpc3RlbmVySXRl
ciA9PSBldmVudExpc3RlbmVyKSB7CisgICAgICAgICAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3Rl
bmVySXRlciAtIGxpc3RlbmVycy5iZWdpbigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KK30KKworYm9vbCBXb3JrZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZXZlbnQgfHwgZXZl
bnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBFdmVudEV4Y2VwdGlvbjo6VU5T
UEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChl
dmVudC0+dHlwZSgpKTsKKyAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBs
aXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0
ZW5lcnNDb3B5LmVuZCgpOyArK2xpc3RlbmVySXRlcikgeworICAgICAgICBldmVudC0+c2V0VGFy
Z2V0KHRoaXMpOworICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICAg
ICAgbGlzdGVuZXJJdGVyLT5nZXQoKS0+aGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsK
KyAgICB9CisKKyAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Cit9CisKK3Zv
aWQgV29ya2VyOjpkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgIiIsICIi
LCAwLCAwKTsKKworICAgIGlmIChtX29uTWVzc2FnZUxpc3RlbmVyLmdldCgpKSB7CisgICAgICAg
IGV2dC0+c2V0VGFyZ2V0KHRoaXMpOworICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQodGhp
cyk7CisgICAgICAgIG1fb25NZXNzYWdlTGlzdGVuZXItPmhhbmRsZUV2ZW50KGV2dC5nZXQoKSwg
ZmFsc2UpOworICAgIH0KKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGRpc3BhdGNo
RXZlbnQoZXZ0LnJlbGVhc2UoKSwgZWMpOworICAgIEFTU0VSVCghZWMpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd29ya2VyL1dvcmtlci5oIGIvV2ViQ29yZS93b3JrZXIvV29ya2VyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1ZjlkNQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvd29ya2VyL1dvcmtlci5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisK
KyNpZm5kZWYgV29ya2VyX2gKKyNkZWZpbmUgV29ya2VyX2gKKworI2lmIEVOQUJMRShXT1JLRVJT
KQorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKKyAgICBjbGFzcyBDYWNoZWRT
Y3JpcHQ7CisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBjbGFzcyBTdHJp
bmc7CisgICAgY2xhc3MgV29ya2VyQ29udGV4dFByb3h5OworCisgICAgdHlwZWRlZiBpbnQgRXhj
ZXB0aW9uQ29kZTsKKworICAgIGNsYXNzIFdvcmtlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtl
cj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQs
IHB1YmxpYyBFdmVudFRhcmdldCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXb3JrZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
b3JrZXIodXJsLCBjb250ZXh0LCBlYykpOyB9CisgICAgICAgIH5Xb3JrZXIoKTsKKworICAgICAg
ICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsgfQorCisgICAgICAgIHZpcnR1YWwgV29ya2VyKiB0b1dvcmtlcigpIHsgcmV0dXJuIHRoaXM7
IH0KKworICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisK
KyAgICAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKKworICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2Fn
ZShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgdm9pZCBkaXNwYXRjaEVycm9yRXZlbnQoKTsKKwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RvcCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNl
Q2FwdHVyZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJl
KTsKKyAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4s
IEV4Y2VwdGlvbkNvZGUmKTsKKworICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21p
Y1N0cmluZywgTGlzdGVuZXJWZWN0b3I+IEV2ZW50TGlzdGVuZXJzTWFwOworICAgICAgICBFdmVu
dExpc3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50TGlzdGVuZXJz
OyB9CisKKyAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXI+OjpyZWY7CisgICAgICAgIHVz
aW5nIFJlZkNvdW50ZWQ8V29ya2VyPjo6ZGVyZWY7CisKKyAgICAgICAgdm9pZCBzZXRPbm1lc3Nh
Z2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25NZXNzYWdl
TGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9CisgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVz
c2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0KCk7IH0KKworICAg
ICAgICB2b2lkIHNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3Rl
bmVyKSB7IG1fb25FcnJvckxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgICAgICBFdmVu
dExpc3RlbmVyKiBvbmVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9vbkVycm9yTGlzdGVuZXIuZ2V0
KCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFdvcmtlcihjb25zdCBTdHJpbmcmLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOworCisgICAgICAgIHZpcnR1YWwg
dm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRl
cmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKworICAgICAgICBLVVJMIG1fc2NyaXB0VVJM
OworICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2Ny
aXB0OworCisgICAgICAgIFdvcmtlckNvbnRleHRQcm94eSogbV9jb250ZXh0UHJveHk7IC8vIFRo
ZSBwcm94eSBvdXRsaXZlcyB0aGUgd29ya2VyIHRvIHBlcmZvcm0gdGhyZWFkIHNodXRkb3duLgor
CisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uTWVzc2FnZUxpc3RlbmVyOworICAg
ICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkVycm9yTGlzdGVuZXI7CisgICAgICAgIEV2
ZW50TGlzdGVuZXJzTWFwIG1fZXZlbnRMaXN0ZW5lcnM7CisgICAgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNlbmRpZiAvLyBXb3Jr
ZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXIvV29ya2VyLmlkbCBiL1dlYkNvcmUvd29y
a2VyL1dvcmtlci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmOWI2
MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd29ya2VyL1dvcmtlci5pZGwKQEAgLTAsMCAr
MSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICoKKyAqLworCittb2R1bGUgdGhyZWFkcyB7CisKKyAgICBpbnRlcmZhY2Ug
W0N1c3RvbU1hcmtGdW5jdGlvbiwgQ29uZGl0aW9uYWw9V09SS0VSU10gV29ya2VyIHsKKworICAg
ICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOworICAgICAgICBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9N
U3RyaW5nIG1lc3NhZ2UpOworCisgICAgICAgIHZvaWQgdGVybWluYXRlKCk7CisKKyAgICAgICAg
Ly8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCisgICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRM
aXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIFtD
dXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxp
c3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJv
b2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVu
dCBldnQpCisgICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOworICAgIH07CisKK30K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2VyL1dvcmtlckNvbnRleHQuY3BwIGIvV2ViQ29yZS93
b3JrZXIvV29ya2VyQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTI5YThlNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd29ya2VyL1dvcmtlckNvbnRl
eHQuY3BwCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisK
KyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01UaW1lci5oIgorI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRF
eGNlcHRpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiV29ya2Vy
TG9jYXRpb24uaCIKKyNpbmNsdWRlICJXb3JrZXJOYXZpZ2F0b3IuaCIKKyNpbmNsdWRlICJXb3Jr
ZXJPYmplY3RQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXb3JrZXJDb250ZXh0OjpXb3Jr
ZXJDb250ZXh0KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdvcmtl
clRocmVhZCogdGhyZWFkKQorICAgIDogbV91cmwodXJsKQorICAgICwgbV91c2VyQWdlbnQodXNl
ckFnZW50KQorICAgICwgbV9sb2NhdGlvbihXb3JrZXJMb2NhdGlvbjo6Y3JlYXRlKHVybCkpCisg
ICAgLCBtX3NjcmlwdChuZXcgV29ya2VyU2NyaXB0Q29udHJvbGxlcih0aGlzKSkKKyAgICAsIG1f
dGhyZWFkKHRocmVhZCkKK3sKKyAgICBzZXRTZWN1cml0eU9yaWdpbihTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKHVybCkpOworfQorCitXb3JrZXJDb250ZXh0Ojp+V29ya2VyQ29udGV4dCgpCit7Cisg
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZC0+dGhyZWFkSUQoKSk7CisKKyAg
ICBtX3RocmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKS0+d29ya2VyQ29udGV4dERlc3Ryb3llZCgp
OworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBXb3JrZXJDb250ZXh0OjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXb3JrZXJDb250
ZXh0Kj4odGhpcyk7Cit9CisKK2NvbnN0IEtVUkwmIFdvcmtlckNvbnRleHQ6OnZpcnR1YWxVUkwo
KSBjb25zdAoreworICAgIHJldHVybiBtX3VybDsKK30KKworS1VSTCBXb3JrZXJDb250ZXh0Ojp2
aXJ0dWFsQ29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGNvbXBsZXRlVVJMKHVybCk7Cit9CisKK0tVUkwgV29ya2VyQ29udGV4dDo6Y29tcGxldGVVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0Cit7CisgICAgLy8gQWx3YXlzIHJldHVybiBhIG51bGwg
VVJMIHdoZW4gcGFzc2VkIGEgbnVsbCBzdHJpbmcuCisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBj
aGFuZ2UgdGhlIEtVUkwgY29uc3RydWN0b3IgdG8gaGF2ZSB0aGlzIGJlaGF2aW9yPworICAgIGlm
ICh1cmwuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisgICAgLy8gRklYTUU6IGRv
ZXMgdGhpcyBuZWVkIHRvIHByb3ZpZGUgYSBjaGFyc2V0LCBsaWtlIERvY3VtZW50Ojpjb21wbGV0
ZVVSTCBkb2VzPworICAgIHJldHVybiBLVVJMKG1fbG9jYXRpb24tPnVybCgpLCB1cmwpOworfQor
CitTdHJpbmcgV29ya2VyQ29udGV4dDo6dXNlckFnZW50KGNvbnN0IEtVUkwmKSBjb25zdAorewor
ICAgIHJldHVybiBtX3VzZXJBZ2VudDsKK30KKworV29ya2VyTmF2aWdhdG9yKiBXb3JrZXJDb250
ZXh0OjpuYXZpZ2F0b3IoKSBjb25zdAoreworICAgIGlmICghbV9uYXZpZ2F0b3IpCisgICAgICAg
IG1fbmF2aWdhdG9yID0gV29ya2VyTmF2aWdhdG9yOjpjcmVhdGUobV91c2VyQWdlbnQpOworICAg
IHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsKK30KKworYm9vbCBXb3JrZXJDb250ZXh0OjpoYXNQ
ZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIEFjdGl2ZURPTU9iamVjdHNNYXAmIGFjdGl2
ZU9iamVjdHMgPSBhY3RpdmVET01PYmplY3RzKCk7CisgICAgQWN0aXZlRE9NT2JqZWN0c01hcDo6
Y29uc3RfaXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IGFjdGl2ZU9iamVjdHMuZW5kKCk7Cisg
ICAgZm9yIChBY3RpdmVET01PYmplY3RzTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gYWN0aXZl
T2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsraXRlcikgeworICAg
ICAgICBpZiAoaXRlci0+Zmlyc3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXb3JrZXJD
b250ZXh0OjpyZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBs
aW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBtX3RocmVhZC0+d29y
a2VyT2JqZWN0UHJveHkoKS0+cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVycm9yTWVzc2Fn
ZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKK30KKwordm9pZCBXb3JrZXJDb250ZXh0OjphZGRN
ZXNzYWdlKE1lc3NhZ2VEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSBzb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBtX3RocmVhZC0+d29y
a2VyT2JqZWN0UHJveHkoKS0+cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoZGVzdGlu
YXRpb24sIHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7Cit9
CisKK3ZvaWQgV29ya2VyQ29udGV4dDo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcsIGNvbnN0IFNjcmlwdFN0cmluZyYpCit7CisgICAgLy8gRklYTUU6IFRo
ZSBpbXBsZW1lbnRhdGlvbiBpcyBwZW5kaW5nIHRoZSBmaXhlcyBpbiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNzUKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdvcmtlckNvbnRleHQ6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICBtX3RocmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKS0+cG9zdE1lc3NhZ2VUb1dvcmtl
ck9iamVjdChtZXNzYWdlKTsKK30KKwordm9pZCBXb3JrZXJDb250ZXh0OjphZGRFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCit7CisgICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKKyAgICBpZiAoaXRl
ciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7CisgICAgICAgIExpc3RlbmVyVmVjdG9yIGxp
c3RlbmVyczsKKyAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKKyAgICAg
ICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7Cisg
ICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3Rl
bmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVy
SXRlcikgeworICAgICAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxp
c3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMu
YWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKKyAgICB9ICAgIAorfQorCit2b2lkIFdvcmtlckNv
bnRleHQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCit7CisgICAgRXZlbnRMaXN0ZW5l
cnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsK
KyAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKKyAg
ICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0
ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5l
ckl0ZXIpIHsKKyAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikgewor
ICAgICAgICAgICAgbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lckl0ZXIgLSBsaXN0ZW5lcnMuYmVn
aW4oKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wg
V29ya2VyQ29udGV4dDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFldmVudCB8fCBldmVudC0+dHlwZSgpLmlzRW1w
dHkoKSkgeworICAgICAgICBlYyA9IEV2ZW50RXhjZXB0aW9uOjpVTlNQRUNJRklFRF9FVkVOVF9U
WVBFX0VSUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIExpc3RlbmVy
VmVjdG9yIGxpc3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgp
KTsKKyAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIg
PSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnNDb3B5LmVu
ZCgpOyArK2xpc3RlbmVySXRlcikgeworICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwor
ICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICAgICAgbGlzdGVuZXJJ
dGVyLT5nZXQoKS0+aGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworfQorCit2b2lkIFdvcmtl
ckNvbnRleHQ6OnBvc3RUYXNrKFBhc3NSZWZQdHI8VGFzaz4gdGFzaykKK3sKKyAgICB0aHJlYWQo
KS0+cnVuTG9vcCgpLnBvc3RUYXNrKHRhc2spOworfQorCitpbnQgV29ya2VyQ29udGV4dDo6aW5z
dGFsbFRpbWVvdXQoU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24sIGludCB0aW1lb3V0LCBib29sIHNp
bmdsZVNob3QpCit7CisgICAgcmV0dXJuIERPTVRpbWVyOjppbnN0YWxsKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSwgYWN0aW9uLCB0aW1lb3V0LCBzaW5nbGVTaG90KTsKK30KKwordm9pZCBXb3Jr
ZXJDb250ZXh0OjpyZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpCit7CisgICAgRE9NVGltZXI6
OnJlbW92ZUJ5SWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aW1lb3V0SWQpOworfQorCit2
b2lkIFdvcmtlckNvbnRleHQ6OmRpc3BhdGNoTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Cit7CisgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShtZXNzYWdl
LCAiIiwgIiIsIDAsIDApOworCisgICAgaWYgKG1fb25tZXNzYWdlTGlzdGVuZXIuZ2V0KCkpIHsK
KyAgICAgICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7CisgICAgICAgIGV2dC0+c2V0Q3VycmVudFRh
cmdldCh0aGlzKTsKKyAgICAgICAgbV9vbm1lc3NhZ2VMaXN0ZW5lci0+aGFuZGxlRXZlbnQoZXZ0
LmdldCgpLCBmYWxzZSk7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
ZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBlYyk7CisgICAgQVNTRVJUKCFlYyk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS93b3JrZXIvV29ya2VyQ29udGV4dC5oIGIvV2ViQ29yZS93b3JrZXIv
V29ya2VyQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNGUx
M2EKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dvcmtlci9Xb3JrZXJDb250ZXh0LmgKQEAg
LTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBXb3JrZXJDb250ZXh0X2gKKyNk
ZWZpbmUgV29ya2VyQ29udGV4dF9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUg
IkF0b21pY1N0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisj
aW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAg
ICBjbGFzcyBTY2hlZHVsZWRBY3Rpb247CisgICAgY2xhc3MgV29ya2VyTG9jYXRpb247CisgICAg
Y2xhc3MgV29ya2VyTmF2aWdhdG9yOworICAgIGNsYXNzIFdvcmtlclRocmVhZDsKKworICAgIGNs
YXNzIFdvcmtlckNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJDb250ZXh0PiwgcHVi
bGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHB1YmxpYyBFdmVudFRhcmdldCB7CisgICAgcHVi
bGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiBjcmVhdGUoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgV29ya2VyVGhyZWFkKiB0aHJl
YWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyQ29u
dGV4dCh1cmwsIHVzZXJBZ2VudCwgdGhyZWFkKSk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0
dWFsIH5Xb3JrZXJDb250ZXh0KCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzV29ya2VyQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKworICAgICAg
ICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQorICAgICAgICBLVVJM
IGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgU3Ry
aW5nIHVzZXJBZ2VudChjb25zdCBLVVJMJikgY29uc3Q7CisKKyAgICAgICAgV29ya2VyTG9jYXRp
b24qIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi5nZXQoKTsgfQorICAgICAg
ICBXb3JrZXJOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIGNvbnN0OworCisgICAgICAgIFdvcmtlclNj
cmlwdENvbnRyb2xsZXIqIHNjcmlwdCgpIHsgcmV0dXJuIG1fc2NyaXB0LmdldCgpOyB9CisgICAg
ICAgIHZvaWQgY2xlYXJTY3JpcHQoKSB7IHJldHVybiBtX3NjcmlwdC5jbGVhcigpOyB9CisgICAg
ICAgIFdvcmtlclRocmVhZCogdGhyZWFkKCkgeyByZXR1cm4gbV90aHJlYWQ7IH0KKworICAgICAg
ICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRN
ZXNzYWdlKE1lc3NhZ2VEZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlc291cmNlUmV0cmlldmVkQnlYTUxI
dHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFNjcmlwdFN0cmluZyYg
c291cmNlU3RyaW5nKTsKKworICAgICAgICB2aXJ0dWFsIFdvcmtlckNvbnRleHQqIHRvV29ya2Vy
Q29udGV4dCgpIHsgcmV0dXJuIHRoaXM7IH0KKworICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFzayhQYXNz
UmVmUHRyPFRhc2s+KTsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gY29udGV4dCdzIHRocmVhZCBh
c3luY2hyb25vdXNseS4KKworICAgICAgICBpbnQgaW5zdGFsbFRpbWVvdXQoU2NoZWR1bGVkQWN0
aW9uKiwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCk7CisgICAgICAgIHZvaWQgcmVtb3Zl
VGltZW91dChpbnQgdGltZW91dElkKTsKKworICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZShj
b25zdCBTdHJpbmcmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwg
Ym9vbCB1c2VDYXB0dXJlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVz
ZUNhcHR1cmUpOworICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgICAgIHZvaWQgc2V0T25tZXNzYWdlKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29ubWVzc2FnZUxpc3Rl
bmVyID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1lc3NhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX29ubWVzc2FnZUxpc3RlbmVyLmdldCgpOyB9CisKKyAgICAgICAg
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4gTGlzdGVuZXJWZWN0b3I7Cisg
ICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3RlbmVyVmVjdG9yPiBFdmVu
dExpc3RlbmVyc01hcDsKKyAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJz
KCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQorCisgICAgICAgIHVzaW5nIFJlZkNvdW50
ZWQ8V29ya2VyQ29udGV4dD46OnJlZjsKKyAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXJD
b250ZXh0Pjo6ZGVyZWY7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVm
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHsgcmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCB2b2lk
IGRlcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHsgZGVyZWYoKTsgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisKKyAgICAgICAgV29ya2VyQ29udGV4
dChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgV29ya2VyVGhyZWFkKik7CisKKyAgICAgICAg
dmlydHVhbCBjb25zdCBLVVJMJiB2aXJ0dWFsVVJMKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
S1VSTCB2aXJ0dWFsQ29tcGxldGVVUkwoY29uc3QgU3RyaW5nJikgY29uc3Q7CisKKyAgICAgICAg
S1VSTCBtX3VybDsKKyAgICAgICAgU3RyaW5nIG1fdXNlckFnZW50OworICAgICAgICBSZWZQdHI8
V29ya2VyTG9jYXRpb24+IG1fbG9jYXRpb247CisgICAgICAgIG11dGFibGUgUmVmUHRyPFdvcmtl
ck5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CisKKyAgICAgICAgT3duUHRyPFdvcmtlclNjcmlwdENv
bnRyb2xsZXI+IG1fc2NyaXB0OworICAgICAgICBXb3JrZXJUaHJlYWQqIG1fdGhyZWFkOworCisg
ICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29ubWVzc2FnZUxpc3RlbmVyOworICAgICAg
ICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVuZXJzOworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQorCisjZW5kaWYgLy8g
V29ya2VyQ29udGV4dF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlci9Xb3JrZXJDb250ZXh0
LmlkbCBiL1dlYkNvcmUvd29ya2VyL1dvcmtlckNvbnRleHQuaWRsCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmUxZmZmNTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dv
cmtlci9Xb3JrZXJDb250ZXh0LmlkbApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKK21v
ZHVsZSB0aHJlYWRzIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdP
UktFUlMsCisgICAgICAgIEN1c3RvbUdldE93blByb3BlcnR5U2xvdCwKKyAgICAgICAgQ3VzdG9t
TWFya0Z1bmN0aW9uLAorICAgICAgICBFeHRlbmRzRE9NR2xvYmFsT2JqZWN0LAorICAgICAgICBM
ZWdhY3lQYXJlbnQ9SlNXb3JrZXJDb250ZXh0QmFzZSwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMK
KyAgICBdIFdvcmtlckNvbnRleHQgeworI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkK
KyAgICAgICAgYXR0cmlidXRlIFtDdXN0b21dIFdvcmtlckNvbnRleHQgc2VsZjsKKyNlbmRpZgor
CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubWVzc2FnZTsKKyAgICAgICAgdm9p
ZCBwb3N0TWVzc2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSk7CisKKyAgICAgICAgYXR0cmlidXRl
IFtSZXBsYWNlYWJsZV0gV29ya2VyTG9jYXRpb24gbG9jYXRpb247CisgICAgICAgIGF0dHJpYnV0
ZSBbUmVwbGFjZWFibGVdIFdvcmtlck5hdmlnYXRvciBuYXZpZ2F0b3I7CisgICAgICAgIAorICAg
ICAgICBhdHRyaWJ1dGUgTWVzc2FnZUV2ZW50Q29uc3RydWN0b3IgTWVzc2FnZUV2ZW50OworICAg
ICAgICBhdHRyaWJ1dGUgV29ya2VyTG9jYXRpb25Db25zdHJ1Y3RvciBXb3JrZXJMb2NhdGlvbjsK
KworICAgICAgICAvLyBUaW1lcnMKKyAgICAgICAgW0N1c3RvbV0gbG9uZyBzZXRUaW1lb3V0KGlu
IFRpbWVvdXRIYW5kbGVyIGhhbmRsZXIsIGluIGxvbmcgdGltZW91dCk7CisgICAgICAgIC8vIFtD
dXN0b21dIGxvbmcgc2V0VGltZW91dChpbiBET01TdHJpbmcgY29kZSwgaW4gbG9uZyB0aW1lb3V0
KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBjbGVhclRpbWVvdXQoaW4gbG9uZyBoYW5kbGUpOwor
CisgICAgICAgIFtDdXN0b21dIGxvbmcgc2V0SW50ZXJ2YWwoaW4gVGltZW91dEhhbmRsZXIgaGFu
ZGxlciwgaW4gbG9uZyB0aW1lb3V0KTsKKyAgICAgICAgLy8gW0N1c3RvbV0gbG9uZyBzZXRJbnRl
cnZhbChpbiBET01TdHJpbmcgY29kZSwgaW4gbG9uZyB0aW1lb3V0KTsKKyAgICAgICAgW0N1c3Rv
bV0gdm9pZCBjbGVhckludGVydmFsKGluIGxvbmcgaGFuZGxlKTsKKworICAgICAgICAvLyBFdmVu
dFRhcmdldCBpbnRlcmZhY2UKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRFdmVudExpc3RlbmVy
KGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgW0N1c3RvbV0g
dm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1
c2VDYXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkK
KyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisgICAgfTsKKworfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS93b3JrZXIvV29ya2VyQ29udGV4dFByb3h5LmggYi9XZWJDb3JlL3dvcmtl
ci9Xb3JrZXJDb250ZXh0UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5jOGY1NzYxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93b3JrZXIvV29ya2VyQ29udGV4
dFByb3h5LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV29ya2VyQ29udGV4dFByb3h5X2gKKyNk
ZWZpbmUgV29ya2VyQ29udGV4dFByb3h5X2gKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFN0cmluZzsKKyAg
ICBjbGFzcyBXb3JrZXI7CisKKyAgICAvLyBBIHByb3h5IHRvIHRhbGsgdG8gdGhlIHdvcmtlciBj
b250ZXh0LgorICAgIGNsYXNzIFdvcmtlckNvbnRleHRQcm94eSB7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgV29ya2VyQ29udGV4dFByb3h5KiBjcmVhdGUoV29ya2VyKik7CisKKyAgICAg
ICAgdmlydHVhbCB+V29ya2VyQ29udGV4dFByb3h5KCkge30KKworICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5n
JiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkgPSAwOworCisgICAgICAgIHZp
cnR1YWwgdm9pZCB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCkgPSAwOworCisgICAgICAgIHZpcnR1
YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmKSA9IDA7CisK
KyAgICAgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0ID0gMDsKKwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyT2JqZWN0RGVzdHJveWVkKCkgPSAwOworICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQor
CisjZW5kaWYgLy8gV29ya2VyQ29udGV4dFByb3h5X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29y
a2VyL1dvcmtlckxvY2F0aW9uLmNwcCBiL1dlYkNvcmUvd29ya2VyL1dvcmtlckxvY2F0aW9uLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODRiZjkzCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS93b3JrZXIvV29ya2VyTG9jYXRpb24uY3BwCkBAIC0wLDAgKzEsODUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdPUktF
UlMpCisKKyNpbmNsdWRlICJXb3JrZXJMb2NhdGlvbi5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgV29ya2VyTG9jYXRpb246
OmhyZWYoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybC5oYXNQYXRoKCkgPyBtX3VybC5wcmV0
dHlVUkwoKSA6IG1fdXJsLnByZXR0eVVSTCgpICsgIi8iOworfQorCitTdHJpbmcgV29ya2VyTG9j
YXRpb246OnByb3RvY29sKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91cmwucHJvdG9jb2woKSAr
ICI6IjsKK30KKworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpob3N0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV91cmwucG9ydCgpID8gbV91cmwuaG9zdCgpICsgIjoiICsgU3RyaW5nOjpudW1iZXIo
KHN0YXRpY19jYXN0PGludD4obV91cmwucG9ydCgpKSkpIDogbV91cmwuaG9zdCgpOworfQorCitT
dHJpbmcgV29ya2VyTG9jYXRpb246Omhvc3RuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91
cmwuaG9zdCgpOworfQorCitTdHJpbmcgV29ya2VyTG9jYXRpb246OnBvcnQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3VybC5wb3J0KCkgPyBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+
KG1fdXJsLnBvcnQoKSkpIDogIiI7Cit9CisKK1N0cmluZyBXb3JrZXJMb2NhdGlvbjo6cGF0aG5h
bWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybC5wYXRoKCkuaXNFbXB0eSgpID8gIi8iIDog
bV91cmwucGF0aCgpOworfQorCitTdHJpbmcgV29ya2VyTG9jYXRpb246OnNlYXJjaCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdXJsLnF1ZXJ5KCkuaXNFbXB0eSgpID8gIiIgOiAiPyIgKyBtX3Vy
bC5xdWVyeSgpOworfQorCitTdHJpbmcgV29ya2VyTG9jYXRpb246Omhhc2goKSBjb25zdAorewor
ICAgIHJldHVybiBtX3VybC5yZWYoKS5pc0VtcHR5KCkgPyAiIiA6ICIjIiArIG1fdXJsLnJlZigp
OworfQorCitTdHJpbmcgV29ya2VyTG9jYXRpb246OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV91cmwuaGFzUGF0aCgpID8gbV91cmwucHJldHR5VVJMKCkgOiBtX3VybC5wcmV0dHlV
UkwoKSArICIvIjsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2VyL1dvcmtlckxvY2F0aW9u
LmggYi9XZWJDb3JlL3dvcmtlci9Xb3JrZXJMb2NhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjUyYzMxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dvcmtl
ci9Xb3JrZXJMb2NhdGlvbi5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lmbmRl
ZiBXb3JrZXJMb2NhdGlvbl9oCisjZGVmaW5lIFdvcmtlckxvY2F0aW9uX2gKKworI2lmIEVOQUJM
RShXT1JLRVJTKQorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFN0cmluZzsKKworICAgIGNsYXNz
IFdvcmtlckxvY2F0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyTG9jYXRpb24+IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckxvY2F0aW9uPiBjcmVh
dGUoY29uc3QgS1VSTCYgdXJsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdvcmtlckxvY2F0aW9uKHVybCkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qg
S1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKworICAgICAgICBTdHJpbmcgaHJl
ZigpIGNvbnN0OworCisgICAgICAgIC8vIFVSSSBkZWNvbXBvc2l0aW9uIGF0dHJpYnV0ZXMKKyAg
ICAgICAgU3RyaW5nIHByb3RvY29sKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBob3N0KCkgY29u
c3Q7CisgICAgICAgIFN0cmluZyBob3N0bmFtZSgpIGNvbnN0OworICAgICAgICBTdHJpbmcgcG9y
dCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgcGF0aG5hbWUoKSBjb25zdDsKKyAgICAgICAgU3Ry
aW5nIHNlYXJjaCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgaGFzaCgpIGNvbnN0OworCisgICAg
ICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgV29y
a2VyTG9jYXRpb24oY29uc3QgS1VSTCYgdXJsKSA6IG1fdXJsKHVybCkgeyB9CisKKyAgICAgICAg
S1VSTCBtX3VybDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIFdvcmtlckxvY2F0aW9uX2gKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvd29ya2VyL1dvcmtlckxvY2F0aW9uLmlkbCBiL1dlYkNvcmUvd29ya2VyL1dv
cmtlckxvY2F0aW9uLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTUx
ZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93b3JrZXIvV29ya2VyTG9jYXRpb24uaWRs
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgdGhyZWFkcyB7CisKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBDb25kaXRpb25hbD1XT1JLRVJTLAorICAgICAgICBHZW5lcmF0ZUNvbnN0cnVj
dG9yLAorICAgICAgICBOb1N0YXRpY1RhYmxlcworICAgIF0gV29ya2VyTG9jYXRpb24geworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGhyZWY7CisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgcHJvdG9jb2w7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgaG9zdDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBo
b3N0bmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwb3J0OworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHBhdGhuYW1lOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNlYXJjaDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyBoYXNoOworCisgICAgICAgIFtEb250RW51bV0gRE9NU3RyaW5nIHRvU3Ry
aW5nKCk7CisgICAgfTsKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXIvV29ya2VyTWVz
c2FnaW5nUHJveHkuY3BwIGIvV2ViQ29yZS93b3JrZXIvV29ya2VyTWVzc2FnaW5nUHJveHkuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNjI2MDcKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3dvcmtlci9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKQEAgLTAsMCAr
MSwzMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
V09SS0VSUykKKworI2luY2x1ZGUgIldvcmtlck1lc3NhZ2luZ1Byb3h5LmgiCisKKyNpbmNsdWRl
ICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkdlbmVyaWNX
b3JrZXJUYXNrLmgiCisjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlci5oIgorI2luY2x1ZGUgIldvcmtl
ckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBNZXNzYWdlV29ya2VyQ29udGV4dFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVz
c2FnZVdvcmtlckNvbnRleHRUYXNrPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlV29ya2VyQ29udGV4dFRhc2so
bWVzc2FnZSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXNzYWdlV29ya2VyQ29udGV4dFRh
c2soY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgICAgICA6IG1fbWVzc2FnZShtZXNzYWdlLmNv
cHkoKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQpCisgICAgeworICAgICAgICBBU1NFUlQo
c2NyaXB0Q29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgICAgICBXb3JrZXJDb250ZXh0
KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdENvbnRleHQpOwor
CisgICAgICAgIGNvbnRleHQtPmRpc3BhdGNoTWVzc2FnZShtX21lc3NhZ2UpOworCisgICAgICAg
IHN0YXRpY19jYXN0PFdvcmtlck1lc3NhZ2luZ1Byb3h5Kj4oY29udGV4dC0+dGhyZWFkKCktPndv
cmtlck9iamVjdFByb3h5KCkpLT5jb25maXJtV29ya2VyVGhyZWFkTWVzc2FnZShjb250ZXh0LT5o
YXNQZW5kaW5nQWN0aXZpdHkoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBtX21l
c3NhZ2U7Cit9OworCitjbGFzcyBNZXNzYWdlV29ya2VyVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNz
YWdlV29ya2VyVGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgV29ya2VyTWVzc2Fn
aW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBNZXNzYWdlV29ya2VyVGFzayhtZXNzYWdlLCBtZXNzYWdpbmdQcm94eSkpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBNZXNzYWdlV29ya2VyVGFzayhjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKKyAgICAgICAgOiBtX21lc3Nh
Z2UobWVzc2FnZS5jb3B5KCkpCisgICAgICAgICwgbV9tZXNzYWdpbmdQcm94eShtZXNzYWdpbmdQ
cm94eSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKQorICAgIHsKKyAgICAgICAgV29ya2VyKiB3b3JrZXJPYmplY3Qg
PSBtX21lc3NhZ2luZ1Byb3h5LT53b3JrZXJPYmplY3QoKTsKKyAgICAgICAgaWYgKCF3b3JrZXJP
YmplY3QgfHwgbV9tZXNzYWdpbmdQcm94eS0+YXNrZWRUb1Rlcm1pbmF0ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHdvcmtlck9iamVjdC0+ZGlzcGF0Y2hNZXNzYWdlKG1fbWVz
c2FnZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBtX21lc3NhZ2U7CisgICAgV29y
a2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7Cit9OworCitjbGFzcyBXb3JrZXJF
eGNlcHRpb25UYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckV4Y2VwdGlvblRhc2s+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlckV4Y2VwdGlvblRhc2soZXJyb3JNZXNz
YWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwsIG1lc3NhZ2luZ1Byb3h5KSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIFdvcmtlckV4Y2VwdGlvblRhc2soY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgV29ya2VyTWVzc2Fn
aW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQorICAgICAgICA6IG1fZXJyb3JNZXNzYWdlKGVycm9y
TWVzc2FnZS5jb3B5KCkpCisgICAgICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCisgICAg
ICAgICwgbV9zb3VyY2VVUkwoc291cmNlVVJMLmNvcHkoKSkKKyAgICAgICAgLCBtX21lc3NhZ2lu
Z1Byb3h5KG1lc3NhZ2luZ1Byb3h5KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAg
ICAgIGlmICghbV9tZXNzYWdpbmdQcm94eS0+YXNrZWRUb1Rlcm1pbmF0ZSgpKQorICAgICAgICAg
ICAgY29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKG1fZXJyb3JNZXNzYWdlLCBtX2xpbmVOdW1iZXIs
IG1fc291cmNlVVJMKTsKKyAgICB9CisKKyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CisgICAg
aW50IG1fbGluZU51bWJlcjsKKyAgICBTdHJpbmcgbV9zb3VyY2VVUkw7CisgICAgV29ya2VyTWVz
c2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7Cit9OworCitjbGFzcyBXb3JrZXJDb250ZXh0
RGVzdHJveWVkVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzaz4g
Y3JlYXRlKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2sobWVzc2Fn
aW5nUHJveHkpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV29ya2VyQ29udGV4dERlc3Ryb3ll
ZFRhc2soV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQorICAgICAgICA6IG1f
bWVzc2FnaW5nUHJveHkobWVzc2FnaW5nUHJveHkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKKyAgICB7CisgICAg
ICAgIG1fbWVzc2FnaW5nUHJveHktPndvcmtlckNvbnRleHREZXN0cm95ZWRJbnRlcm5hbCgpOwor
ICAgIH0KKworICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5OworfTsK
KworY2xhc3MgV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrIDogcHVibGljIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdv
cmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzaz4gY3JlYXRlKFdvcmtlck1lc3NhZ2luZ1Byb3h5
KiBtZXNzYWdpbmdQcm94eSwgYm9vbCBjb25maXJtaW5nTWVzc2FnZSwgYm9vbCBoYXNQZW5kaW5n
QWN0aXZpdHkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlclRocmVh
ZEFjdGl2aXR5UmVwb3J0VGFzayhtZXNzYWdpbmdQcm94eSwgY29uZmlybWluZ01lc3NhZ2UsIGhh
c1BlbmRpbmdBY3Rpdml0eSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXb3JrZXJUaHJlYWRB
Y3Rpdml0eVJlcG9ydFRhc2soV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5LCBi
b29sIGNvbmZpcm1pbmdNZXNzYWdlLCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKKyAgICAgICAg
OiBtX21lc3NhZ2luZ1Byb3h5KG1lc3NhZ2luZ1Byb3h5KQorICAgICAgICAsIG1fY29uZmlybWlu
Z01lc3NhZ2UoY29uZmlybWluZ01lc3NhZ2UpCisgICAgICAgICwgbV9oYXNQZW5kaW5nQWN0aXZp
dHkoaGFzUGVuZGluZ0FjdGl2aXR5KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCisgICAgeworICAgICAgICBtX21l
c3NhZ2luZ1Byb3h5LT5yZXBvcnRQZW5kaW5nQWN0aXZpdHlJbnRlcm5hbChtX2NvbmZpcm1pbmdN
ZXNzYWdlLCBtX2hhc1BlbmRpbmdBY3Rpdml0eSk7CisgICAgfQorCisgICAgV29ya2VyTWVzc2Fn
aW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7CisgICAgYm9vbCBtX2NvbmZpcm1pbmdNZXNzYWdl
OworICAgIGJvb2wgbV9oYXNQZW5kaW5nQWN0aXZpdHk7Cit9OworCisKK1dvcmtlckNvbnRleHRQ
cm94eSogV29ya2VyQ29udGV4dFByb3h5OjpjcmVhdGUoV29ya2VyKiB3b3JrZXIpCit7CisgICAg
cmV0dXJuIG5ldyBXb3JrZXJNZXNzYWdpbmdQcm94eSh3b3JrZXIpOworfQorCitXb3JrZXJNZXNz
YWdpbmdQcm94eTo6V29ya2VyTWVzc2FnaW5nUHJveHkoV29ya2VyKiB3b3JrZXJPYmplY3QpCisg
ICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQod29ya2VyT2JqZWN0LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpCisgICAgLCBtX3dvcmtlck9iamVjdCh3b3JrZXJPYmplY3QpCisgICAgLCBt
X3VuY29uZmlybWVkTWVzc2FnZUNvdW50KDApCisgICAgLCBtX3dvcmtlclRocmVhZEhhZFBlbmRp
bmdBY3Rpdml0eShmYWxzZSkKKyAgICAsIG1fYXNrZWRUb1Rlcm1pbmF0ZShmYWxzZSkKK3sKKyAg
ICBBU1NFUlQobV93b3JrZXJPYmplY3QpOworICAgIEFTU0VSVCgobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc0RvY3VtZW50KCkgJiYgaXNNYWluVGhyZWFkKCkpCisgICAgICAgICAgIHx8ICht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpICYmIGN1cnJlbnRUaHJl
YWQoKSA9PSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4obV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LmdldCgpKS0+dGhyZWFkKCktPnRocmVhZElEKCkpKTsKK30KKworV29ya2VyTWVzc2FnaW5n
UHJveHk6On5Xb3JrZXJNZXNzYWdpbmdQcm94eSgpCit7CisgICAgQVNTRVJUKCFtX3dvcmtlck9i
amVjdCk7CisgICAgQVNTRVJUKChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQo
KSAmJiBpc01haW5UaHJlYWQoKSkKKyAgICAgICAgICAgfHwgKG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+aXNXb3JrZXJDb250ZXh0KCkgJiYgY3VycmVudFRocmVhZCgpID09IHN0YXRpY19jYXN0
PFdvcmtlckNvbnRleHQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCkpLT50aHJlYWQo
KS0+dGhyZWFkSUQoKSkpOworfQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpzdGFydFdv
cmtlckNvbnRleHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKQoreworICAgIFJlZlB0cjxXb3JrZXJUaHJlYWQ+
IHRocmVhZCA9IFdvcmtlclRocmVhZDo6Y3JlYXRlKHNjcmlwdFVSTCwgdXNlckFnZW50LCBzb3Vy
Y2VDb2RlLCB0aGlzKTsKKyAgICB3b3JrZXJUaHJlYWRDcmVhdGVkKHRocmVhZCk7CisgICAgdGhy
ZWFkLT5zdGFydCgpOworfQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2Fn
ZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKE1lc3NhZ2VXb3JrZXJUYXNrOjpjcmVhdGUobWVzc2Fn
ZSwgdGhpcykpOworfQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2FnZVRv
V29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgcG9zdFRhc2tUb1dv
cmtlckNvbnRleHQoTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUobWVzc2FnZSkpOwor
fQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza1RvV29ya2VyQ29udGV4dChQ
YXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCit7CisgICAgaWYg
KG1fYXNrZWRUb1Rlcm1pbmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fd29ya2Vy
VGhyZWFkKSB7CisgICAgICAgICsrbV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudDsKKyAgICAgICAg
bV93b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFzayh0YXNrKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmFwcGVuZCh0YXNrKTsKK30KKwordm9pZCBXb3JrZXJN
ZXNzYWdpbmdQcm94eTo6cG9zdFRhc2tUb1dvcmtlck9iamVjdChQYXNzUmVmUHRyPFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCit7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5wb3N0VGFzayh0YXNrKTsKK30KKwordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9z
dEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5wb3N0VGFzayhXb3JrZXJFeGNlcHRpb25UYXNrOjpjcmVhdGUoZXJyb3JN
ZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwsIHRoaXMpKTsKK30KKyAgICAKK3N0YXRpYyB2
b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5LCBNZXNzYWdlRGVzdGluYXRp
b24gZGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpCit7CisgICAgaWYgKG1lc3NhZ2luZ1Byb3h5LT5hc2tlZFRvVGVybWluYXRl
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBjb250ZXh0LT5hZGRNZXNzYWdlKGRlc3RpbmF0aW9u
LCBzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworfQorCit2
b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVj
dChNZXNzYWdlRGVzdGluYXRpb24gZGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBN
ZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0Q29uc29sZU1lc3NhZ2VUYXNrLCB0
aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291
cmNlVVJMKSk7Cit9CisKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OndvcmtlclRocmVhZENy
ZWF0ZWQoUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IHdvcmtlclRocmVhZCkKK3sKKyAgICBtX3dv
cmtlclRocmVhZCA9IHdvcmtlclRocmVhZDsKKworICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUp
IHsKKyAgICAgICAgLy8gV29ya2VyLnRlcm1pbmF0ZSgpIGNvdWxkIGJlIGNhbGxlZCBmcm9tIEpT
IGJlZm9yZSB0aGUgdGhyZWFkIHdhcyBjcmVhdGVkLgorICAgICAgICBtX3dvcmtlclRocmVhZC0+
c3RvcCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIHRhc2tDb3VudCA9IG1fcXVl
dWVkRWFybHlUYXNrcy5zaXplKCk7CisgICAgICAgIEFTU0VSVCghbV91bmNvbmZpcm1lZE1lc3Nh
Z2VDb3VudCk7CisgICAgICAgIG1fdW5jb25maXJtZWRNZXNzYWdlQ291bnQgPSB0YXNrQ291bnQ7
CisgICAgICAgIG1fd29ya2VyVGhyZWFkSGFkUGVuZGluZ0FjdGl2aXR5ID0gdHJ1ZTsgLy8gV29y
a2VyIGluaXRpYWxpemF0aW9uIG1lYW5zIGEgcGVuZGluZyBhY3Rpdml0eS4KKworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFza0NvdW50OyArK2kpCisgICAgICAgICAgICBtX3dv
cmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrKG1fcXVldWVkRWFybHlUYXNrc1tpXSk7Cisg
ICAgICAgIG1fcXVldWVkRWFybHlUYXNrcy5jbGVhcigpOworICAgIH0KK30KKwordm9pZCBXb3Jr
ZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyT2JqZWN0RGVzdHJveWVkKCkKK3sKKyAgICBtX3dvcmtl
ck9iamVjdCA9IDA7CisgICAgaWYgKG1fd29ya2VyVGhyZWFkKQorICAgICAgICB0ZXJtaW5hdGVX
b3JrZXJDb250ZXh0KCk7CisgICAgZWxzZQorICAgICAgICB3b3JrZXJDb250ZXh0RGVzdHJveWVk
SW50ZXJuYWwoKTsKK30KKwordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyQ29udGV4
dERlc3Ryb3llZCgpCit7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhX
b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzazo6Y3JlYXRlKHRoaXMpKTsKKyAgICAvLyBXaWxsIGV4
ZWN1dGUgd29ya2VyQ29udGV4dERlc3Ryb3llZEludGVybmFsKCkgb24gY29udGV4dCdzIHRocmVh
ZC4KK30KKwordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyQ29udGV4dERlc3Ryb3ll
ZEludGVybmFsKCkKK3sKKyAgICAvLyBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayBpcyBhbHdh
eXMgdGhlIGxhc3QgdG8gYmUgcGVyZm9ybWVkLCBzbyB0aGUgcHJveHkgaXMgbm90IG5lZWRlZCBm
b3IgY29tbXVuaWNhdGlvbgorICAgIC8vIGluIGVpdGhlciBzaWRlIGFueSBtb3JlLiBIb3dldmVy
LCB0aGUgV29ya2VyIG9iamVjdCBtYXkgc3RpbGwgZXhpc3QsIGFuZCBpdCBhc3N1bWVzIHRoYXQg
dGhlIHByb3h5IGV4aXN0cywgdG9vLgorICAgIG1fd29ya2VyVGhyZWFkID0gMDsKKyAgICBpZiAo
IW1fd29ya2VyT2JqZWN0KQorICAgICAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBXb3JrZXJN
ZXNzYWdpbmdQcm94eTo6dGVybWluYXRlV29ya2VyQ29udGV4dCgpCit7CisgICAgaWYgKG1fYXNr
ZWRUb1Rlcm1pbmF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYXNrZWRUb1Rlcm1pbmF0ZSA9
IHRydWU7CisKKyAgICBpZiAobV93b3JrZXJUaHJlYWQpCisgICAgICAgIG1fd29ya2VyVGhyZWFk
LT5zdG9wKCk7Cit9CisKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OmNvbmZpcm1Xb3JrZXJU
aHJlYWRNZXNzYWdlKGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+cG9zdFRhc2soV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrOjpj
cmVhdGUodGhpcywgdHJ1ZSwgaGFzUGVuZGluZ0FjdGl2aXR5KSk7CisgICAgLy8gV2lsbCBleGVj
dXRlIHJlcG9ydFBlbmRpbmdBY3Rpdml0eUludGVybmFsKCkgb24gY29udGV4dCdzIHRocmVhZC4K
K30KKwordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJv
b2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrOjpjcmVhdGUodGhpcywgZmFs
c2UsIGhhc1BlbmRpbmdBY3Rpdml0eSkpOworICAgIC8vIFdpbGwgZXhlY3V0ZSByZXBvcnRQZW5k
aW5nQWN0aXZpdHlJbnRlcm5hbCgpIG9uIGNvbnRleHQncyB0aHJlYWQuCit9CisKK3ZvaWQgV29y
a2VyTWVzc2FnaW5nUHJveHk6OnJlcG9ydFBlbmRpbmdBY3Rpdml0eUludGVybmFsKGJvb2wgY29u
ZmlybWluZ01lc3NhZ2UsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIGlmIChjb25m
aXJtaW5nTWVzc2FnZSAmJiAhbV9hc2tlZFRvVGVybWluYXRlKSB7CisgICAgICAgIEFTU0VSVCht
X3VuY29uZmlybWVkTWVzc2FnZUNvdW50KTsKKyAgICAgICAgLS1tX3VuY29uZmlybWVkTWVzc2Fn
ZUNvdW50OworICAgIH0KKworICAgIG1fd29ya2VyVGhyZWFkSGFkUGVuZGluZ0FjdGl2aXR5ID0g
aGFzUGVuZGluZ0FjdGl2aXR5OworfQorCitib29sIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpoYXNQ
ZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiAobV91bmNvbmZpcm1lZE1lc3Nh
Z2VDb3VudCB8fCBtX3dvcmtlclRocmVhZEhhZFBlbmRpbmdBY3Rpdml0eSkgJiYgIW1fYXNrZWRU
b1Rlcm1pbmF0ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlci9Xb3JrZXJNZXNzYWdpbmdQ
cm94eS5oIGIvV2ViQ29yZS93b3JrZXIvV29ya2VyTWVzc2FnaW5nUHJveHkuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjAyMTcxCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS93b3JrZXIvV29ya2VyTWVzc2FnaW5nUHJveHkuaApAQCAtMCwwICsxLDEwNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICoKKyAqLworCisjaWZuZGVmIFdvcmtlck1lc3NhZ2luZ1Byb3h5X2gKKyNkZWZpbmUgV29ya2Vy
TWVzc2FnaW5nUHJveHlfaAorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dFByb3h5LmgiCisj
aW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgY2xhc3MgU3RyaW5nOworICAgIGNsYXNz
IFdvcmtlcjsKKyAgICBjbGFzcyBXb3JrZXJUaHJlYWQ7CisKKyAgICBjbGFzcyBXb3JrZXJNZXNz
YWdpbmdQcm94eSA6IHB1YmxpYyBXb3JrZXJDb250ZXh0UHJveHksIHB1YmxpYyBXb3JrZXJPYmpl
Y3RQcm94eSwgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgV29ya2VyTWVzc2Fn
aW5nUHJveHkoV29ya2VyKik7CisKKyAgICAgICAgLy8gSW1wbGVtZW50YXRpb25zIG9mIFdvcmtl
ckNvbnRleHRQcm94eS4KKyAgICAgICAgLy8gKE9ubHkgdXNlIHRoZXNlIG1ldGhvZHMgaW4gdGhl
IHdvcmtlciBvYmplY3QgdGhyZWFkLikKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0V29ya2Vy
Q29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBj
b25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRl
V29ya2VyQ29udGV4dCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtl
ckNvbnRleHQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAgICAgdmlydHVhbCBib29sIGhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyT2Jq
ZWN0RGVzdHJveWVkKCk7CisKKyAgICAgICAgLy8gSW1wbGVtZW50YXRpb25zIG9mIFdvcmtlck9i
amVjdFByb3h5LgorICAgICAgICAvLyAoT25seSB1c2UgdGhlc2UgbWV0aG9kcyBpbiB0aGUgd29y
a2VyIGNvbnRleHQgdGhyZWFkLikKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9X
b3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwg
aW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KE1lc3NhZ2VEZXN0aW5hdGlv
biwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZCgpOworCisgICAgICAgIHZv
aWQgcG9zdFRhc2tUb1dvcmtlck9iamVjdChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s+KTsKKyAgICAgICAgdm9pZCBwb3N0VGFza1RvV29ya2VyQ29udGV4dChQYXNzUmVm
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKKworICAgICAgICB2b2lkIHdvcmtl
clRocmVhZENyZWF0ZWQoUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+KTsKKworICAgICAgICB2b2lk
IGNvbmZpcm1Xb3JrZXJUaHJlYWRNZXNzYWdlKGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKKwor
ICAgICAgICAvLyBPbmx5IHVzZSB0aGlzIG1ldGhvZCBvbiB0aGUgd29ya2VyIG9iamVjdCB0aHJl
YWQuCisgICAgICAgIGJvb2wgYXNrZWRUb1Rlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXNr
ZWRUb1Rlcm1pbmF0ZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIE1l
c3NhZ2VXb3JrZXJUYXNrOworICAgICAgICBmcmllbmQgY2xhc3MgV29ya2VyQ29udGV4dERlc3Ry
b3llZFRhc2s7CisgICAgICAgIGZyaWVuZCBjbGFzcyBXb3JrZXJUaHJlYWRBY3Rpdml0eVJlcG9y
dFRhc2s7CisKKyAgICAgICAgdmlydHVhbCB+V29ya2VyTWVzc2FnaW5nUHJveHkoKTsKKworICAg
ICAgICB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWRJbnRlcm5hbCgpOworICAgICAgICB2b2lk
IHJlcG9ydFBlbmRpbmdBY3Rpdml0eUludGVybmFsKGJvb2wgY29uZmlybWluZ01lc3NhZ2UsIGJv
b2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKKyAgICAgICAgV29ya2VyKiB3b3JrZXJPYmplY3QoKSBj
b25zdCB7IHJldHVybiBtX3dvcmtlck9iamVjdDsgfQorCisgICAgICAgIFJlZlB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgICAgIFdvcmtl
ciogbV93b3JrZXJPYmplY3Q7CisgICAgICAgIFJlZlB0cjxXb3JrZXJUaHJlYWQ+IG1fd29ya2Vy
VGhyZWFkOworCisgICAgICAgIHVuc2lnbmVkIG1fdW5jb25maXJtZWRNZXNzYWdlQ291bnQ7IC8v
IFVuY29uZmlybWVkIG1lc3NhZ2VzIGZyb20gd29ya2VyIG9iamVjdCB0byB3b3JrZXIgdGhyZWFk
LgorICAgICAgICBib29sIG1fd29ya2VyVGhyZWFkSGFkUGVuZGluZ0FjdGl2aXR5OyAvLyBUaGUg
bGF0ZXN0IGNvbmZpcm1hdGlvbiBmcm9tIHdvcmtlciB0aHJlYWQgcmVwb3J0ZWQgdGhhdCBpdCB3
YXMgc3RpbGwgYWN0aXZlLgorCisgICAgICAgIGJvb2wgbV9hc2tlZFRvVGVybWluYXRlOworCisg
ICAgICAgIFZlY3RvcjxSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gPiBtX3F1
ZXVlZEVhcmx5VGFza3M7IC8vIFRhc2tzIGFyZSBxdWV1ZWQgaGVyZSB1bnRpbCB0aGVyZSdzIGEg
dGhyZWFkIG9iamVjdCBjcmVhdGVkLgorICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQorCisjZW5kaWYgLy8gV29ya2VyTWVzc2FnaW5n
UHJveHlfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXIvV29ya2VyT2JqZWN0UHJveHkuaCBi
L1dlYkNvcmUvd29ya2VyL1dvcmtlck9iamVjdFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjFhYmE3MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd29ya2Vy
L1dvcmtlck9iamVjdFByb3h5LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV29ya2VyT2JqZWN0
UHJveHlfaAorI2RlZmluZSBXb3JrZXJPYmplY3RQcm94eV9oCisKKyNpZiBFTkFCTEUoV09SS0VS
UykKKworI2luY2x1ZGUgIkNvbnNvbGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
Y2xhc3MgU3RyaW5nOworCisgICAgLy8gQSBwcm94eSB0byB0YWxrIHRvIHRoZSB3b3JrZXIgb2Jq
ZWN0LgorICAgIGNsYXNzIFdvcmtlck9iamVjdFByb3h5IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHZpcnR1YWwgfldvcmtlck9iamVjdFByb3h5KCkge30KKworICAgICAgICB2aXJ0dWFsIHZvaWQg
cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmKSA9IDA7CisKKyAgICAgICAg
dmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKSA9IDA7
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0
KE1lc3NhZ2VEZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkg
PSAwOworCisgICAgICAgIHZpcnR1YWwgdm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHkoYm9vbCBo
YXNQZW5kaW5nQWN0aXZpdHkpID0gMDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29u
dGV4dERlc3Ryb3llZCgpID0gMDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIFdvcmtlck9iamVjdFByb3h5
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2VyL1dvcmtlclJ1bkxvb3AuY3BwIGIvV2ViQ29y
ZS93b3JrZXIvV29ya2VyUnVuTG9vcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNjU4NzdmNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd29ya2VyL1dvcmtlclJ1
bkxvb3AuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgor
I2luY2x1ZGUgIlNoYXJlZFRpbWVyLmgiCisjaW5jbHVkZSAiVGhyZWFkR2xvYmFsRGF0YS5oIgor
I2luY2x1ZGUgIlRocmVhZFRpbWVycy5oIgorI2luY2x1ZGUgIldvcmtlclJ1bkxvb3AuaCIKKyNp
bmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV29ya2VyU2hhcmVkVGltZXIgOiBwdWJsaWMgU2hh
cmVkVGltZXIgeworcHVibGljOgorICAgIFdvcmtlclNoYXJlZFRpbWVyKCkKKyAgICAgICAgOiBt
X3NoYXJlZFRpbWVyRnVuY3Rpb24oMCkKKyAgICAgICAgLCBtX25leHRGaXJlVGltZSgwKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBTaGFyZWRUaW1lciBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2
b2lkIHNldEZpcmVkRnVuY3Rpb24odm9pZCAoKmZ1bmN0aW9uKSgpKSB7IG1fc2hhcmVkVGltZXJG
dW5jdGlvbiA9IGZ1bmN0aW9uOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZpcmVUaW1lKGRvdWJs
ZSBmaXJlVGltZSkgeyBtX25leHRGaXJlVGltZSA9IGZpcmVUaW1lOyB9CisgICAgdmlydHVhbCB2
b2lkIHN0b3AoKSB7IG1fbmV4dEZpcmVUaW1lID0gMDsgfQorCisgICAgYm9vbCBpc0FjdGl2ZSgp
IHsgcmV0dXJuIG1fc2hhcmVkVGltZXJGdW5jdGlvbiAmJiBtX25leHRGaXJlVGltZTsgfQorICAg
IGRvdWJsZSBmaXJlVGltZSgpIHsgcmV0dXJuIG1fbmV4dEZpcmVUaW1lOyB9CisgICAgdm9pZCBm
aXJlKCkgeyBtX3NoYXJlZFRpbWVyRnVuY3Rpb24oKTsgfQorCitwcml2YXRlOgorICAgIHZvaWQg
KCptX3NoYXJlZFRpbWVyRnVuY3Rpb24pKCk7CisgICAgZG91YmxlIG1fbmV4dEZpcmVUaW1lOwor
fTsKKworY2xhc3MgV29ya2VyUnVuTG9vcDo6VGFzayA6IHB1YmxpYyBSZWZDb3VudGVkPFRhc2s+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUYXNrPiBjcmVhdGUoUGFzc1JlZlB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2sodGFzaywgbW9kZSkpOwor
ICAgIH0KKworICAgIGNvbnN0IFN0cmluZyYgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsg
fQorICAgIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkg
eyBtX3Rhc2stPnBlcmZvcm1UYXNrKGNvbnRleHQpOyB9CisKK3ByaXZhdGU6CisgICAgVGFzayhQ
YXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmlu
ZyYgbW9kZSkKKyAgICAgICAgOiBtX3Rhc2sodGFzaykKKyAgICAgICAgLCBtX21vZGUobW9kZS5j
b3B5KCkpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPiBtX3Rhc2s7CisgICAgU3RyaW5nIG1fbW9kZTsKK307CisKK2NsYXNzIE1vZGVQcmVk
aWNhdGUgeworcHVibGljOgorICAgIE1vZGVQcmVkaWNhdGUoY29uc3QgU3RyaW5nJiBtb2RlKQor
ICAgICAgICA6IG1fbW9kZShtb2RlKQorICAgICAgICAsIG1fZGVmYXVsdE1vZGUobW9kZSA9PSBX
b3JrZXJSdW5Mb29wOjpkZWZhdWx0TW9kZSgpKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlz
RGVmYXVsdE1vZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGVmYXVsdE1vZGU7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcigpKFBhc3NSZWZQdHI8V29ya2VyUnVuTG9vcDo6
VGFzaz4gdGFzaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RlZmF1bHRNb2RlIHx8
IG1fbW9kZSA9PSB0YXNrLT5tb2RlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBt
X21vZGU7CisgICAgYm9vbCBtX2RlZmF1bHRNb2RlOworfTsKKworV29ya2VyUnVuTG9vcDo6V29y
a2VyUnVuTG9vcCgpCisgICAgOiBtX3NoYXJlZFRpbWVyKG5ldyBXb3JrZXJTaGFyZWRUaW1lcikK
KyAgICAsIG1fbmVzdGVkQ291bnQoMCkKK3sKK30KKworV29ya2VyUnVuTG9vcDo6fldvcmtlclJ1
bkxvb3AoKQoreworICAgIEFTU0VSVCghbV9uZXN0ZWRDb3VudCk7Cit9CisKK1N0cmluZyBXb3Jr
ZXJSdW5Mb29wOjpkZWZhdWx0TW9kZSgpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitj
bGFzcyBSdW5Mb29wU2V0dXAgOiBOb25jb3B5YWJsZQoreworcHVibGljOgorICAgIFJ1bkxvb3BT
ZXR1cChXb3JrZXJSdW5Mb29wJiBydW5Mb29wKQorICAgICAgICA6IG1fcnVuTG9vcChydW5Mb29w
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3J1bkxvb3AubV9uZXN0ZWRDb3VudCkKKyAgICAgICAg
ICAgIHRocmVhZEdsb2JhbERhdGEoKS50aHJlYWRUaW1lcnMoKS5zZXRTaGFyZWRUaW1lcihtX3J1
bkxvb3AubV9zaGFyZWRUaW1lci5nZXQoKSk7CisgICAgICAgIG1fcnVuTG9vcC5tX25lc3RlZENv
dW50Kys7CisgICAgfQorCisgICAgflJ1bkxvb3BTZXR1cCgpCisgICAgeworICAgICAgICBtX3J1
bkxvb3AubV9uZXN0ZWRDb3VudC0tOworICAgICAgICBpZiAoIW1fcnVuTG9vcC5tX25lc3RlZENv
dW50KQorICAgICAgICAgICAgdGhyZWFkR2xvYmFsRGF0YSgpLnRocmVhZFRpbWVycygpLnNldFNo
YXJlZFRpbWVyKDApOworICAgIH0KK3ByaXZhdGU6CisgICAgV29ya2VyUnVuTG9vcCYgbV9ydW5M
b29wOworfTsKKwordm9pZCBXb3JrZXJSdW5Mb29wOjpydW4oV29ya2VyQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBSdW5Mb29wU2V0dXAgc2V0dXAoKnRoaXMpOworICAgIE1vZGVQcmVkaWNhdGUg
bW9kZVByZWRpY2F0ZShkZWZhdWx0TW9kZSgpKTsKKyAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0
IHJlc3VsdDsKKyAgICBkbyB7CisgICAgICAgIHJlc3VsdCA9IHJ1bkluTW9kZShjb250ZXh0LCBt
b2RlUHJlZGljYXRlKTsKKyAgICB9IHdoaWxlIChyZXN1bHQgIT0gTWVzc2FnZVF1ZXVlVGVybWlu
YXRlZCk7Cit9CisKK01lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgV29ya2VyUnVuTG9vcDo6cnVuSW5N
b2RlKFdvcmtlckNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAgICBS
dW5Mb29wU2V0dXAgc2V0dXAoKnRoaXMpOworICAgIE1vZGVQcmVkaWNhdGUgbW9kZVByZWRpY2F0
ZShtb2RlKTsKKyAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IHJlc3VsdCA9IHJ1bkluTW9kZShj
b250ZXh0LCBtb2RlUHJlZGljYXRlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitNZXNzYWdl
UXVldWVXYWl0UmVzdWx0IFdvcmtlclJ1bkxvb3A6OnJ1bkluTW9kZShXb3JrZXJDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBNb2RlUHJlZGljYXRlJiBwcmVkaWNhdGUpCit7CisgICAgQVNTRVJUKGNv
bnRleHQpOworICAgIEFTU0VSVChjb250ZXh0LT50aHJlYWQoKSk7CisgICAgQVNTRVJUKGNvbnRl
eHQtPnRocmVhZCgpLT50aHJlYWRJRCgpID09IGN1cnJlbnRUaHJlYWQoKSk7CisKKyAgICBkb3Vi
bGUgYWJzb2x1dGVUaW1lID0gKHByZWRpY2F0ZS5pc0RlZmF1bHRNb2RlKCkgJiYgbV9zaGFyZWRU
aW1lci0+aXNBY3RpdmUoKSkgPyBtX3NoYXJlZFRpbWVyLT5maXJlVGltZSgpIDogTWVzc2FnZVF1
ZXVlPFJlZlB0cjxUYXNrPiA+OjppbmZpbml0ZVRpbWUoKTsKKyAgICBSZWZQdHI8VGFzaz4gdGFz
azsKKyAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IHJlc3VsdCA9IG1fbWVzc2FnZVF1ZXVlLndh
aXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dCh0YXNrLCBwcmVkaWNhdGUsIGFic29sdXRl
VGltZSk7CisKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgTWVzc2FnZVF1ZXVlVGVy
bWluYXRlZDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lc3NhZ2VRdWV1ZU1lc3NhZ2VS
ZWNlaXZlZDoKKyAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soY29udGV4dCk7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBNZXNzYWdlUXVldWVUaW1lb3V0OgorICAgICAgICBtX3NoYXJlZFRp
bWVyLT5maXJlKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgV29ya2VyUnVuTG9vcDo6dGVybWluYXRlKCkKK3sKKyAgICBtX21lc3NhZ2VR
dWV1ZS5raWxsKCk7Cit9CisKK3ZvaWQgV29ya2VyUnVuTG9vcDo6cG9zdFRhc2soUGFzc1JlZlB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQoreworICAgIHBvc3RUYXNrRm9y
TW9kZSh0YXNrLCBkZWZhdWx0TW9kZSgpKTsKK30KKwordm9pZCBXb3JrZXJSdW5Mb29wOjpwb3N0
VGFza0Zvck1vZGUoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNr
LCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgbV9tZXNzYWdlUXVldWUuYXBwZW5kKFRhc2s6
OmNyZWF0ZSh0YXNrLCBtb2RlLmNvcHkoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vy
L1dvcmtlclJ1bkxvb3AuaCBiL1dlYkNvcmUvd29ya2VyL1dvcmtlclJ1bkxvb3AuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDFlYWEzCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS93b3JrZXIvV29ya2VyUnVuTG9vcC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdvcmtlclJ1bkxvb3BfaAorI2RlZmluZSBXb3JrZXJSdW5Mb29wX2gKKworI2lmIEVOQUJMRShX
T1JLRVJTKQorCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUg
PHd0Zi9NZXNzYWdlUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgTW9k
ZVByZWRpY2F0ZTsKKyAgICBjbGFzcyBXb3JrZXJDb250ZXh0OworICAgIGNsYXNzIFdvcmtlclNo
YXJlZFRpbWVyOworCisgICAgY2xhc3MgV29ya2VyUnVuTG9vcCB7CisgICAgcHVibGljOgorICAg
ICAgICBXb3JrZXJSdW5Mb29wKCk7CisgICAgICAgIH5Xb3JrZXJSdW5Mb29wKCk7CisgICAgICAg
IAorICAgICAgICAvLyBCbG9ja2luZyBjYWxsLiBXYWl0cyBmb3IgdGFza3MgYW5kIHRpbWVycywg
aW52b2tlcyB0aGUgY2FsbGJhY2tzLgorICAgICAgICB2b2lkIHJ1bihXb3JrZXJDb250ZXh0Kik7
CisKKyAgICAgICAgLy8gV2FpdHMgZm9yIGEgc2luZ2xlIHRhc2sgYW5kIHJldHVybnMuCisgICAg
ICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcnVuSW5Nb2RlKFdvcmtlckNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIG1vZGUpOworCisgICAgICAgIHZvaWQgdGVybWluYXRlKCk7CisgICAgICAgIGJv
b2wgdGVybWluYXRlZCgpIHsgcmV0dXJuIG1fbWVzc2FnZVF1ZXVlLmtpbGxlZCgpOyB9CisKKyAg
ICAgICAgdm9pZCBwb3N0VGFzayhQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+KTsKKyAgICAgICAgdm9pZCBwb3N0VGFza0Zvck1vZGUoUGFzc1JlZlB0cjxTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKworICAgICAgICBzdGF0
aWMgU3RyaW5nIGRlZmF1bHRNb2RlKCk7CisgICAgICAgIGNsYXNzIFRhc2s7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFJ1bkxvb3BTZXR1cDsKKyAgICAgICAgTWVzc2FnZVF1
ZXVlV2FpdFJlc3VsdCBydW5Jbk1vZGUoV29ya2VyQ29udGV4dCosIGNvbnN0IE1vZGVQcmVkaWNh
dGUmKTsKKworICAgICAgICBNZXNzYWdlUXVldWU8UmVmUHRyPFRhc2s+ID4gbV9tZXNzYWdlUXVl
dWU7CisgICAgICAgIE93blB0cjxXb3JrZXJTaGFyZWRUaW1lcj4gbV9zaGFyZWRUaW1lcjsKKyAg
ICAgICAgaW50IG1fbmVzdGVkQ291bnQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNlbmRpZiAvLyBXb3JrZXJSdW5Mb29w
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2VyL1dvcmtlclRocmVhZC5jcHAgYi9XZWJDb3Jl
L3dvcmtlci9Xb3JrZXJUaHJlYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjNkNjU4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dvcmtlci9Xb3JrZXJUaHJl
YWQuY3BwCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisK
KyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRl
ICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIKKworI2lu
Y2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK3N0cnVjdCBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YSA6IE5vbmNvcHlhYmxl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjphdXRvX3B0cjxXb3JrZXJUaHJlYWRTdGFydHVw
RGF0YT4gY3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6
OmF1dG9fcHRyPFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhPihuZXcgV29ya2VyVGhyZWFkU3RhcnR1
cERhdGEoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUpKTsKKyAgICB9CisKKyAgICBL
VVJMIG1fc2NyaXB0VVJMOworICAgIFN0cmluZyBtX3VzZXJBZ2VudDsKKyAgICBTdHJpbmcgbV9z
b3VyY2VDb2RlOworcHJpdmF0ZToKKyAgICBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBL
VVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNv
dXJjZUNvZGUpOworfTsKKworV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OldvcmtlclRocmVhZFN0
YXJ0dXBEYXRhKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQs
IGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKKyAgICA6IG1fc2NyaXB0VVJMKHNjcmlwdFVSTC5j
b3B5KCkpCisgICAgLCBtX3VzZXJBZ2VudCh1c2VyQWdlbnQuY29weSgpKQorICAgICwgbV9zb3Vy
Y2VDb2RlKHNvdXJjZUNvZGUuY29weSgpKQoreworfQorCitQYXNzUmVmUHRyPFdvcmtlclRocmVh
ZD4gV29ya2VyVGhyZWFkOjpjcmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94
eSogd29ya2VyT2JqZWN0UHJveHkpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJU
aHJlYWQoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUsIHdvcmtlck9iamVjdFByb3h5
KSk7Cit9CisKK1dvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmIHNjcmlwdFVS
TCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29y
a2VyT2JqZWN0UHJveHkqIHdvcmtlck9iamVjdFByb3h5KQorICAgIDogbV90aHJlYWRJRCgwKQor
ICAgICwgbV93b3JrZXJPYmplY3RQcm94eSh3b3JrZXJPYmplY3RQcm94eSkKKyAgICAsIG1fc3Rh
cnR1cERhdGEoV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OmNyZWF0ZShzY3JpcHRVUkwsIHVzZXJB
Z2VudCwgc291cmNlQ29kZSkpCit7Cit9CisKK1dvcmtlclRocmVhZDo6fldvcmtlclRocmVhZCgp
Cit7Cit9CisKK2Jvb2wgV29ya2VyVGhyZWFkOjpzdGFydCgpCit7CisgICAgLy8gTXV0ZXggcHJv
dGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgbV90aHJlYWRJRCBpcyBpbml0aWFs
aXplZCB3aGVuIHRoZSB0aHJlYWQgc3RhcnRzLgorICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJl
YWRDcmVhdGlvbk11dGV4KTsKKworICAgIGlmIChtX3RocmVhZElEKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoV29ya2VyVGhyZWFkOjp3b3Jr
ZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6OldvcmtlciIpOworCisgICAgcmV0dXJuIG1f
dGhyZWFkSUQ7Cit9CisKK3ZvaWQqIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQodm9p
ZCogdGhyZWFkKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXb3JrZXJUaHJlYWQqPih0aHJl
YWQpLT53b3JrZXJUaHJlYWQoKTsKK30KKwordm9pZCogV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJl
YWQoKQoreworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENyZWF0aW9u
TXV0ZXgpOworICAgICAgICBtX3dvcmtlckNvbnRleHQgPSBXb3JrZXJDb250ZXh0OjpjcmVhdGUo
bV9zdGFydHVwRGF0YS0+bV9zY3JpcHRVUkwsIG1fc3RhcnR1cERhdGEtPm1fdXNlckFnZW50LCB0
aGlzKTsKKyAgICAgICAgaWYgKG1fcnVuTG9vcC50ZXJtaW5hdGVkKCkpIHsKKyAgICAgICAgICAg
IC8vIFRoZSB3b3JrZXIgd2FzIHRlcm1pbmF0ZWQgYmVmb3JlIHRoZSB0aHJlYWQgaGFkIGEgY2hh
bmNlIHRvIHJ1bi4gU2luY2UgdGhlIGNvbnRleHQgZGlkbid0IGV4aXN0IHlldCwgCisgICAgICAg
ICAgICAvLyBmb3JiaWRFeGVjdXRpb24oKSBjb3VsZG4ndCBiZSBjYWxsZWQgZnJvbSBzdG9wKCku
CisgICAgICAgICAgIG1fd29ya2VyQ29udGV4dC0+c2NyaXB0KCktPmZvcmJpZEV4ZWN1dGlvbigp
OworICAgICAgICB9CisgICAgfQorCisgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogc2NyaXB0
ID0gbV93b3JrZXJDb250ZXh0LT5zY3JpcHQoKTsKKyAgICBzY3JpcHQtPmV2YWx1YXRlKFNjcmlw
dFNvdXJjZUNvZGUobV9zdGFydHVwRGF0YS0+bV9zb3VyY2VDb2RlLCBtX3N0YXJ0dXBEYXRhLT5t
X3NjcmlwdFVSTCkpOworICAgIC8vIEZyZWUgdGhlIHN0YXJ0dXAgZGF0YSB0byBjYXVzZSBpdHMg
bWVtYmVyIHZhcmlhYmxlIGRlcmVmJ3MgaGFwcGVuIG9uIHRoZSB3b3JrZXIncyB0aHJlYWQgKHNp
bmNlCisgICAgLy8gYWxsIHJlZi9kZXJlZnMgb2YgdGhlc2Ugb2JqZWN0cyBhcmUgaGFwcGVuaW5n
IG9uIHRoZSB0aHJlYWQgYXQgdGhpcyBwb2ludCkuIE5vdGUgdGhhdAorICAgIC8vIFdvcmtlclRo
cmVhZDo6fldvcmtlclRocmVhZCBoYXBwZW5zIG9uIGEgZGlmZmVyZW50IHRocmVhZCB3aGVyZSBp
dCB3YXMgY3JlYXRlZC4KKyAgICBtX3N0YXJ0dXBEYXRhLmNsZWFyKCk7CisKKyAgICBtX3dvcmtl
ck9iamVjdFByb3h5LT5yZXBvcnRQZW5kaW5nQWN0aXZpdHkobV93b3JrZXJDb250ZXh0LT5oYXNQ
ZW5kaW5nQWN0aXZpdHkoKSk7CisKKyAgICAvLyBCbG9ja3MgdW50aWwgdGVybWluYXRlZC4KKyAg
ICBtX3J1bkxvb3AucnVuKG1fd29ya2VyQ29udGV4dC5nZXQoKSk7CisKKyAgICBUaHJlYWRJZGVu
dGlmaWVyIHRocmVhZElEID0gbV90aHJlYWRJRDsKKworICAgIG1fd29ya2VyQ29udGV4dC0+Y2xl
YXJTY3JpcHQoKTsKKyAgICBBU1NFUlQobV93b3JrZXJDb250ZXh0LT5oYXNPbmVSZWYoKSk7Cisg
ICAgLy8gVGhlIGJlbG93IGFzc2lnbm1lbnQgd2lsbCBkZXN0cm95IHRoZSBjb250ZXh0LCB3aGlj
aCB3aWxsIGluIHR1cm4gbm90aWZ5IG1lc3NhZ2luZyBwcm94eS4KKyAgICAvLyBXZSBjYW5ub3Qg
bGV0IGFueSBvYmplY3RzIHN1cnZpdmUgcGFzdCB0aHJlYWQgZXhpdCwgYmVjYXVzZSBubyBvdGhl
ciB0aHJlYWQgd2lsbCBydW4gR0Mgb3Igb3RoZXJ3aXNlIGRlc3Ryb3kgdGhlbS4KKyAgICBtX3dv
cmtlckNvbnRleHQgPSAwOworICAgIAorICAgIC8vIFRoZSB0aHJlYWQgb2JqZWN0IG1heSBiZSBh
bHJlYWR5IGRlc3Ryb3llZCBmcm9tIG5vdGlmaWNhdGlvbiBub3csIGRvbid0IHRyeSB0byBhY2Nl
c3MgInRoaXMiLgorICAgIGRldGFjaFRocmVhZCh0aHJlYWRJRCk7CisKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBXb3JrZXJUaHJlYWQ6OnN0b3AoKQoreworICAgIC8vIE11dGV4IHByb3RlY3Rp
b24gaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc3RvcCgpIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBj
b250ZXh0IGlzIGZ1bGx5IGNyZWF0ZWQuCisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENy
ZWF0aW9uTXV0ZXgpOworCisgICAgLy8gRW5zdXJlIHRoYXQgdGFza3MgYXJlIGJlaW5nIGhhbmRs
ZWQgYnkgdGhyZWFkIGV2ZW50IGxvb3AuIElmIHNjcmlwdCBleGVjdXRpb24gd2VyZW4ndCBmb3Ji
aWRkZW4sIGEgd2hpbGUoMSkgbG9vcCBpbiBKUyBjb3VsZCBrZWVwIHRoZSB0aHJlYWQgYWxpdmUg
Zm9yZXZlci4KKyAgICBpZiAobV93b3JrZXJDb250ZXh0KQorICAgICAgICBtX3dvcmtlckNvbnRl
eHQtPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oKTsKKworICAgIC8vIEZJWE1FOiBSdWRlbHkg
a2lsbGluZyB0aGUgdGhyZWFkIHdvbid0IHdvcmsgd2hlbiB3ZSBhbGxvdyBuZXN0ZWQgd29ya2Vy
cywgYmVjYXVzZSB0aGV5IHdpbGwgdHJ5IHRvIHBvc3Qgbm90aWZpY2F0aW9ucyBvZiB0aGVpciBk
ZXN0cnVjdGlvbi4KKyAgICBtX3J1bkxvb3AudGVybWluYXRlKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS93b3JrZXIvV29ya2VyVGhyZWFkLmggYi9XZWJDb3JlL3dvcmtlci9Xb3JrZXJUaHJlYWQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWVmNWY1Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS93b3JrZXIvV29ya2VyVGhyZWFkLmgKQEAgLTAsMCArMSw3OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICoKKyAqLworCisjaWZuZGVmIFdvcmtlclRocmVhZF9oCisjZGVmaW5lIFdvcmtlclRocmVh
ZF9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgPFdvcmtlclJ1bkxvb3AuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBj
bGFzcyBLVVJMOworICAgIGNsYXNzIFN0cmluZzsKKyAgICBjbGFzcyBXb3JrZXJDb250ZXh0Owor
ICAgIGNsYXNzIFdvcmtlck9iamVjdFByb3h5OworICAgIHN0cnVjdCBXb3JrZXJUaHJlYWRTdGFy
dHVwRGF0YTsKKworICAgIGNsYXNzIFdvcmtlclRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdv
cmtlclRocmVhZD4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29y
a2VyVGhyZWFkPiBjcmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVz
ZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSopOwor
ICAgICAgICB+V29ya2VyVGhyZWFkKCk7CisKKyAgICAgICAgYm9vbCBzdGFydCgpOworICAgICAg
ICB2b2lkIHN0b3AoKTsKKworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29u
c3QgeyByZXR1cm4gbV90aHJlYWRJRDsgfQorICAgICAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29w
KCkgeyByZXR1cm4gbV9ydW5Mb29wOyB9CisgICAgICAgIFdvcmtlck9iamVjdFByb3h5KiB3b3Jr
ZXJPYmplY3RQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2VyT2JqZWN0UHJveHk7IH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIFdvcmtlclRocmVhZChjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyT2JqZWN0UHJv
eHkqKTsKKworICAgICAgICBzdGF0aWMgdm9pZCogd29ya2VyVGhyZWFkU3RhcnQodm9pZCopOwor
ICAgICAgICB2b2lkKiB3b3JrZXJUaHJlYWQoKTsKKworICAgICAgICBUaHJlYWRJZGVudGlmaWVy
IG1fdGhyZWFkSUQ7CisgICAgICAgIFdvcmtlclJ1bkxvb3AgbV9ydW5Mb29wOworICAgICAgICBX
b3JrZXJPYmplY3RQcm94eSogbV93b3JrZXJPYmplY3RQcm94eTsKKworICAgICAgICBSZWZQdHI8
V29ya2VyQ29udGV4dD4gbV93b3JrZXJDb250ZXh0OworICAgICAgICBNdXRleCBtX3RocmVhZENy
ZWF0aW9uTXV0ZXg7CisKKyAgICAgICAgT3duUHRyPFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhPiBt
X3N0YXJ0dXBEYXRhOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShXT1JLRVJTKQorCisjZW5kaWYgLy8gV29ya2VyVGhyZWFkX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27920</attachid>
            <date>2009-02-24 10:10:51 -0800</date>
            <delta_ts>2009-02-24 10:28:03 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>MoveWorkerFiles2</filename>
            <type>text/plain</type>
            <size>264504</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTIxNGIzNi4uNTllNGJiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAwOS0wMi0yNCAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTW92ZSB3b3JrZXIgcmVsYXRlZCBmaWxlcyBm
cm9tIGRvbSBkaXJlY3RvcnkgdG8gd29ya2VyIGRpcmVjdG9yeSB1bmRlciBXZWJDb3JlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxMjMKKworICAg
ICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNv
cmUuc2NvbnM6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovTWlncmF0ZUlETEFuZFNjcmlwdHM6
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0Nyb3Nz
VGhyZWFkQ29waWVyLmNwcDogUmVuYW1lZCBmcm9tIFdlYkNvcmUvZG9tL0Nyb3NzVGhyZWFkQ29w
aWVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oOiBSZW5hbWVk
IGZyb20gV2ViQ29yZS9kb20vQ3Jvc3NUaHJlYWRDb3BpZXIuaC4KKyAgICAgICAgKiB3b3JrZXJz
L0dlbmVyaWNXb3JrZXJUYXNrLmg6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2RvbS9HZW5lcmljV29y
a2VyVGFzay5oLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmNwcDogUmVuYW1lZCBmcm9tIFdl
YkNvcmUvZG9tL1dvcmtlci5jcHAuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXIuaDogUmVuYW1l
ZCBmcm9tIFdlYkNvcmUvZG9tL1dvcmtlci5oLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmlk
bDogUmVuYW1lZCBmcm9tIFdlYkNvcmUvZG9tL1dvcmtlci5pZGwuCisgICAgICAgICogd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmNwcDogUmVuYW1lZCBmcm9tIFdlYkNvcmUvZG9tL1dvcmtlckNvbnRl
eHQuY3BwLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5oOiBSZW5hbWVkIGZyb20g
V2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5oLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29u
dGV4dC5pZGw6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmlkbC4KKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oOiBSZW5hbWVkIGZyb20gV2ViQ29y
ZS9kb20vV29ya2VyQ29udGV4dFByb3h5LmguCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJMb2Nh
dGlvbi5jcHA6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5jcHAuCisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5oOiBSZW5hbWVkIGZyb20gV2ViQ29yZS9k
b20vV29ya2VyTG9jYXRpb24uaC4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckxvY2F0aW9uLmlk
bDogUmVuYW1lZCBmcm9tIFdlYkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmlkbC4KKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcDogUmVuYW1lZCBmcm9tIFdlYkNvcmUv
ZG9tL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcC4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlck1l
c3NhZ2luZ1Byb3h5Lmg6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2RvbS9Xb3JrZXJNZXNzYWdpbmdQ
cm94eS5oLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyT2JqZWN0UHJveHkuaDogUmVuYW1lZCBm
cm9tIFdlYkNvcmUvZG9tL1dvcmtlck9iamVjdFByb3h5LmguCisgICAgICAgICogd29ya2Vycy9X
b3JrZXJSdW5Mb29wLmNwcDogUmVuYW1lZCBmcm9tIFdlYkNvcmUvZG9tL1dvcmtlclJ1bkxvb3Au
Y3BwLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyUnVuTG9vcC5oOiBSZW5hbWVkIGZyb20gV2Vi
Q29yZS9kb20vV29ya2VyUnVuTG9vcC5oLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFk
LmNwcDogUmVuYW1lZCBmcm9tIFdlYkNvcmUvZG9tL1dvcmtlclRocmVhZC5jcHAuCisgICAgICAg
ICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuaDogUmVuYW1lZCBmcm9tIFdlYkNvcmUvZG9tL1dvcmtl
clRocmVhZC5oLgorCiAyMDA5LTAyLTI0ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGU1N2Uw
ODUuLjZlYTdiZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTQzLDkgKzE0Myw2IEBAIElETF9CSU5ESU5HUyArPSBc
CiAJV2ViQ29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuaWRsIFwKIAlXZWJDb3JlL2RvbS9X
ZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsIFwKIAlXZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmlkbCBc
Ci0JV2ViQ29yZS9kb20vV29ya2VyLmlkbCBcCi0JV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5p
ZGwgXAotCVdlYkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmlkbCBcCiAJV2ViQ29yZS9odG1sL0Nh
bnZhc0dyYWRpZW50LmlkbCBcCiAJV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uaWRsIFwKIAlX
ZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCkBAIC0yMzAsNiArMjI3
LDkgQEAgSURMX0JJTkRJTkdTICs9IFwKIAlXZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5p
ZGwgXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsIFwKIAlXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luQXJyYXkuaWRsIFwKKwlXZWJDb3JlL3dvcmtlcnMvV29ya2VyLmlkbCBcCisJV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsIFwKKwlXZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9jYXRp
b24uaWRsIFwKIAlXZWJDb3JlL3htbC9ET01QYXJzZXIuaWRsIFwKIAlXZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5pZGwgXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmlk
bCBcCkBAIC0xMjE4LDYgKzEyMTgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUv
cGxhdGZvcm0vQ29udGV4dE1lbnUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0
ZW0uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9Dcm9zc1RocmVhZENvcGllci5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRD
b3BpZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9EZXByZWNhdGVkUHRyTGlzdC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRQdHJM
aXN0SW1wbC5jcHAgXApAQCAtMjE3NCwyNSArMjE3NiwyMyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdz
L2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaCBcCi0JV2ViQ29yZS9kb20vQ3Jvc3NUaHJlYWRD
b3BpZXIuY3BwIFwKLQlXZWJDb3JlL2RvbS9Dcm9zc1RocmVhZENvcGllci5oIFwKLQlXZWJDb3Jl
L2RvbS9HZW5lcmljV29ya2VyVGFzay5oIFwKLQlXZWJDb3JlL2RvbS9Xb3JrZXIuY3BwIFwKLQlX
ZWJDb3JlL2RvbS9Xb3JrZXIuaCBcCi0JV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5jcHAgXAot
CVdlYkNvcmUvZG9tL1dvcmtlckNvbnRleHQuaCBcCi0JV2ViQ29yZS9kb20vV29ya2VyQ29udGV4
dFByb3h5LmggXAotCVdlYkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmNwcCBcCi0JV2ViQ29yZS9k
b20vV29ya2VyTG9jYXRpb24uaCBcCi0JV2ViQ29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHku
Y3BwIFwKLQlXZWJDb3JlL2RvbS9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oIFwKLQlXZWJDb3JlL2Rv
bS9Xb3JrZXJPYmplY3RQcm94eS5oIFwKLQlXZWJDb3JlL2RvbS9Xb3JrZXJSdW5Mb29wLmNwcCBc
Ci0JV2ViQ29yZS9kb20vV29ya2VyUnVuTG9vcC5oIFwKLQlXZWJDb3JlL2RvbS9Xb3JrZXJUaHJl
YWQuY3BwIFwKLQlXZWJDb3JlL2RvbS9Xb3JrZXJUaHJlYWQuaCBcCiAJV2ViQ29yZS9wYWdlL1dv
cmtlck5hdmlnYXRvci5jcHAgXAogCVdlYkNvcmUvcGFnZS9Xb3JrZXJOYXZpZ2F0b3IuaAorCVdl
YkNvcmUvd29ya2Vycy9HZW5lcmljV29ya2VyVGFzay5oIFwKKwlXZWJDb3JlL3dvcmtlcnMvV29y
a2VyLmNwcCBcCisJV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oIFwKKwlXZWJDb3JlL3dvcmtlcnMv
V29ya2VyQ29udGV4dC5jcHAgXAorCVdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmggXAor
CVdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaCBcCisJV2ViQ29yZS93b3JrZXJz
L1dvcmtlckxvY2F0aW9uLmNwcCBcCisJV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmgg
XAorCVdlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgXAorCVdlYkNvcmUv
d29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oIFwKKwlXZWJDb3JlL3dvcmtlcnMvV29ya2Vy
T2JqZWN0UHJveHkuaCBcCisJV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwIFwKKwlX
ZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5oIFwKKwlXZWJDb3JlL3dvcmtlcnMvV29ya2Vy
VGhyZWFkLmNwcCBcCisJV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oIFwKIGVuZGlmCiAK
ICMgLS0tLQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KaW5kZXggNDk3NzU0ZS4uY2VkNGNiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
LnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0zMDcsOSArMzA3LDYgQEAgSURMX0JJ
TkRJTkdTICs9IFwKICAgICBkb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuaWRsIFwKICAgICBkb20v
V2ViS2l0VHJhbnNpdGlvbkV2ZW50LmlkbCBcCiAgICAgZG9tL1doZWVsRXZlbnQuaWRsIFwKLSAg
ICBkb20vV29ya2VyLmlkbCBcCi0gICAgZG9tL1dvcmtlckNvbnRleHQuaWRsIFwKLSAgICBkb20v
V29ya2VyTG9jYXRpb24uaWRsIFwKICAgICBodG1sL0NhbnZhc0dyYWRpZW50LmlkbCBcCiAgICAg
aHRtbC9DYW52YXNQYXR0ZXJuLmlkbCBcCiAgICAgaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaWRsIFwKQEAgLTM5NCw2ICszOTEsOSBAQCBJRExfQklORElOR1MgKz0gXAogICAgIHBsdWdp
bnMvTWltZVR5cGUuaWRsIFwKICAgICBwbHVnaW5zL1BsdWdpbkFycmF5LmlkbCBcCiAgICAgcGx1
Z2lucy9NaW1lVHlwZUFycmF5LmlkbCBcCisgICAgd29ya2Vycy9Xb3JrZXIuaWRsIFwKKyAgICB3
b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsIFwKKyAgICB3b3JrZXJzL1dvcmtlckxvY2F0aW9uLmlk
bCBcCiAgICAgeG1sL0RPTVBhcnNlci5pZGwgXAogICAgIHhtbC9YTUxIdHRwUmVxdWVzdC5pZGwg
XAogICAgIHhtbC9YTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5pZGwgXApAQCAtNTcxLDcgKzU3MSw2
IEBAIFNPVVJDRVMgKz0gXAogICAgIGRvbS9DbGlwYm9hcmRFdmVudC5jcHAgXAogICAgIGRvbS9D
b21tZW50LmNwcCBcCiAgICAgZG9tL0NvbnRhaW5lck5vZGUuY3BwIFwKLSAgICBkb20vQ3Jvc3NU
aHJlYWRDb3BpZXIuY3BwIFwKICAgICBkb20vQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24u
Y3BwIFwKICAgICBkb20vRG9jdW1lbnQuY3BwIFwKICAgICBkb20vRG9jdW1lbnRGcmFnbWVudC5j
cHAgXApAQCAtODcyLDYgKzg3MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL3RleHQv
QmlkaUNvbnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXAogICAgIHBs
YXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCisgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIu
Y3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0NTdHJpbmcuY3BwIFwKICAgICBwbGF0Zm9ybS9EZXBy
ZWNhdGVkUHRyTGlzdEltcGwuY3BwIFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAgXApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnNjb25zIGIvV2ViQ29yZS9XZWJDb3JlLnNjb25zCmlu
ZGV4IGE2NTEwMGYuLmM2NDdkYjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5zY29ucwor
KysgYi9XZWJDb3JlL1dlYkNvcmUuc2NvbnMKQEAgLTc4LDcgKzc4LDYgQEAgc291cmNlc1snZG9t
J10gPSBbCiAgICAgJ2RvbS9DbGlwYm9hcmRFdmVudC5jcHAnLAogICAgICdkb20vQ29tbWVudC5j
cHAnLAogICAgICdkb20vQ29udGFpbmVyTm9kZS5jcHAnLAotICAgICdkb20vQ3Jvc3NUaHJlYWRD
b3BpZXIuY3BwJywKICAgICAnZG9tL0NTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLmNwcCcs
CiAgICAgJ2RvbS9Eb2N1bWVudC5jcHAnLAogICAgICdkb20vRG9jdW1lbnRGcmFnbWVudC5jcHAn
LApAQCAtMTQxLDkgKzE0MCw2IEBAIHNvdXJjZXNbJ2RvbSddID0gWwogICAgICdkb20vV2ViS2l0
QW5pbWF0aW9uRXZlbnQuY3BwJywKICAgICAnZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHAn
LAogICAgICdkb20vV2hlZWxFdmVudC5jcHAnLAotICAgICdkb20vV29ya2VyLmNwcCcsCi0gICAg
J2RvbS9Xb3JrZXJDb250ZXh0LmNwcCcsCi0gICAgJ2RvbS9Xb3JrZXJMb2NhdGlvbi5jcHAnLAog
ICAgICdkb20vWE1MVG9rZW5pemVyLmNwcCcsCiAgICAgJ2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwy
LmNwcCcsCiBdCkBAIC01NjUsNiArNTYxLDExIEBAIHNvdXJjZXNbJ3N0b3JhZ2UnXSA9IFsKICAg
ICAnc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwJywKICAgICAnc3RvcmFnZS9TdG9yYWdlTWFwLmNw
cCcKIF0KK3NvdXJjZXNbJ3dvcmtlcnMnXSA9IFsKKyAgICAnd29ya2Vycy9Xb3JrZXIuY3BwJywK
KyAgICAnd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCcsCisgICAgJ3dvcmtlcnMvV29ya2VyTG9j
YXRpb24uY3BwJywKK10KIHNvdXJjZXNbJ3htbCddID0gWwogICAgICd4bWwvRE9NUGFyc2VyLmNw
cCcsCiAgICAgJ3htbC9OYXRpdmVYUGF0aE5TUmVzb2x2ZXIuY3BwJywKQEAgLTcyMCw2ICs3MjEs
NyBAQCBzb3VyY2VzWydwbGF0Zm9ybSddID0gWwogICAgICdwbGF0Zm9ybS9BcmVuYS5jcHAnLAog
ICAgICdwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAnLAogICAgICdwbGF0Zm9ybS9Db250ZXh0TWVu
dS5jcHAnLAorICAgICdwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAnLAogICAgICdwbGF0
Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuY3BwJywKICAgICAncGxhdGZvcm0vRHJhZ0RhdGEu
Y3BwJywKICAgICAncGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL01pZ3JhdGVJRExBbmRTY3JpcHRzIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9NaWdyYXRlSURMQW5kU2NyaXB0cwppbmRleCA0ZmY5MDAyLi45MTIzNjFkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL01pZ3JhdGVJRExBbmRTY3JpcHRzCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovTWlncmF0ZUlETEFuZFNjcmlwdHMKQEAgLTE1NSw2ICsxNTUs
MTEgQEAgJChXRUJLSVRfT1VUUFVUKS8lIDogJChXRUJDT1JFKS9odG1sLyUKICQoV0VCS0lUX09V
VFBVVCkvJSA6ICQoV0VCQ09SRSkvY3NzLyUKIAkkKE1JR1JBVEVfQ01EKQogCisjIE1pZ3JhdGUg
d29ya2VycyBJRExzCiskKFdFQktJVF9PVVRQVVQpLyUgOiAkKFdFQkNPUkUpL3dvcmtlcnMvJQor
CSQoTUlHUkFURV9DTUQpCisKKwogIyBNaWdyYXRlIGdlbmVyYXRpb24gc2NyaXB0cwogJChXRUJL
SVRfT1VUUFVUKS8lIDogJChXRUJDT1JFKS9iaW5kaW5ncy9zY3JpcHRzLyUKIAkkKE1JR1JBVEVf
Q01EKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBi
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMWNkMzEyNy4uYzAy
YmU1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagor
KysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0zMTU2LDYgKzMx
NTYsMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZV9QR098V2luMzIiDQorCQkJCQk+DQor
CQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJV2hvbGVQ
cm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxDcm9zc1RocmVhZENvcGllci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ3Vyc29yLmgiDQogCQkJCT4NCiAJCQk8
L0ZpbGU+DQpAQCAtMTA4NzgsMjIgKzEwODk0LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXENyb3NzVGhyZWFkQ29waWVyLmNwcCIN
Ci0JCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2VfUEdP
fFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KLQkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCi0JCQkJCS8+DQot
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cZG9tXENyb3NzVGhyZWFkQ29waWVyLmgiDQotCQkJCT4NCi0JCQk8L0Zp
bGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cQ1NTTWFwcGVkQXR0cmli
dXRlRGVjbGFyYXRpb24uY3BwIg0KIAkJCQk+DQogCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KQEAg
LTExMjAyLDEwICsxMTIwMiw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxHZW5lcmljV29ya2VyVGFzay5oIg0KLQkJCQk+DQotCQkJ
PC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXElucHV0RWxlbWVu
dC5jcHAiDQogCQkJCT4NCiAJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpAQCAtMTE5MTQsOTAgKzEx
OTEwLDk4IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGRvbVxXb3JrZXIuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxYTUxUb2tl
bml6ZXIuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0i
UmVsZWFzZV9QR098V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiDQorCQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIg0K
KwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cWE1MVG9rZW5pemVyLmgiDQogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cV29ya2VyLmgi
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhNTFRva2VuaXplckxpYnhtbDIuY3BwIg0KIAkJ
CQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZV9QR098V2lu
MzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
DQorCQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIg0KKwkJCQkJLz4NCisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0
ZXINCisJCQlOYW1lPSJ3b3JrZXJzIg0KKwkJCT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGRvbVxXb3JrZXJDb250ZXh0LmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3b3Jr
ZXJzXEdlbmVyaWNXb3JrZXJUYXNrLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUN
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cV29ya2VyQ29udGV4dC5oIg0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHdvcmtlcnNcV29ya2VyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxXb3JrZXJDb250ZXh0UHJveHkuaCINCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlx3b3JrZXJzXFdvcmtlci5oIg0KIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFdvcmtlckxvY2F0aW9uLmNw
cCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3b3JrZXJzXFdvcmtlckNvbnRleHQuY3BwIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFdv
cmtlckxvY2F0aW9uLmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cd29ya2Vyc1xXb3JrZXJDb250
ZXh0LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxkb21cV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHdvcmtlcnNcV29ya2VyQ29udGV4dFByb3h5LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cV29ya2VyTWVzc2FnaW5nUHJveHkuaCIN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3b3JrZXJzXFdvcmtlckxvY2F0aW9uLmNwcCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxXb3Jr
ZXJPYmplY3RQcm94eS5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdvcmtlcnNcV29ya2VyTG9j
YXRpb24uaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGRvbVxXb3JrZXJSdW5Mb29wLmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3b3Jr
ZXJzXFdvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxXb3JrZXJSdW5Mb29wLmgiDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cd29ya2Vyc1xXb3JrZXJNZXNzYWdpbmdQcm94eS5oIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFdvcmtlclRo
cmVhZC5jcHAiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cd29ya2Vyc1xXb3JrZXJPYmplY3RQcm94
eS5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZG9tXFdvcmtlclRocmVhZC5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdvcmtlcnNcV29y
a2VyUnVuTG9vcC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxkb21cWE1MVG9rZW5pemVyLmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIu
Llx3b3JrZXJzXFdvcmtlclJ1bkxvb3AuaCINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24NCi0JCQkJCU5hbWU9IlJlbGVhc2VfUEdPfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wN
Ci0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCVdob2xlUHJvZ3JhbU9wdGlt
aXphdGlvbj0idHJ1ZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFhNTFRva2VuaXpl
ci5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdvcmtlcnNcV29ya2VyVGhyZWFkLmNwcCINCiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxY
TUxUb2tlbml6ZXJMaWJ4bWwyLmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3b3JrZXJzXFdv
cmtlclRocmVhZC5oIg0KIAkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFt
ZT0iUmVsZWFzZV9QR098V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVl
Ig0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQotCQk8
L0ZpbHRlcj4NCisJCTwvRmlsZXI+DQogCQk8RmlsdGVyDQogCQkJTmFtZT0iZWRpdGluZyINCiAJ
CQk+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNDA4
YTRiLi4yNDM1MTBiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTMzLDcgKzEzMyw2IEBACiAJCTA4RTZFMEYxMEVGRjQyQkEwMDAyOUZCRiAvKiBXTUxG
aWVsZFNldEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDhFNkUwRUYwRUZGNDJCQTAwMDI5RkJGIC8qIFdNTEZpZWxkU2V0RWxlbWVudC5j
cHAgKi87IH07CiAJCTA4RTZFMEYyMEVGRjQyQkEwMDAyOUZCRiAvKiBXTUxGaWVsZFNldEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4RTZF
MEYwMEVGRjQyQkEwMDAyOUZCRiAvKiBXTUxGaWVsZFNldEVsZW1lbnQuaCAqLzsgfTsKIAkJMEE0
ODQ0OTkwQ0E0NENCMjAwQjdCRDQ4IC8qIFNvZnRMaW5raW5nLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTQ4NDQ5ODBDQTQ0Q0IyMDBCN0JENDggLyog
U29mdExpbmtpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkwQjRDRTdEQjBGMkU0QkRFMDBGNkVDMDQgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCNENFN0RBMEYy
RTRCREUwMEY2RUMwNCAvKiBDcm9zc1RocmVhZENvcGllci5oICovOyB9OwogCQkwQjhDNTZENDBG
Mjg2MjdGMDAwNTAyRTEgLyogSFRUUEhlYWRlck1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjhDNTZEMzBGMjg2MjdGMDAwNTAyRTEgLyogSFRU
UEhlYWRlck1hcC5jcHAgKi87IH07CiAJCTBCOTA1NjE5MEYyNTc4QkUwMDk1RkY2QSAvKiBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEI5MDU2MTUwRjI1NzhCRTAwOTVGRjZBIC8qIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlci5jcHAgKi87IH07CiAJCTBCOTA1NjFBMEYyNTc4QkYwMDk1RkY2QSAvKiBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBCOTA1NjE2MEYyNTc4QkUwMDk1RkY2QSAvKiBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwpAQCAtMTQy
LDggKzE0MSw2IEBACiAJCTBCOTA1NjFFMEYyNTdFOTMwMDk1RkY2QSAvKiBUaHJlYWRhYmxlTG9h
ZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBC
OTA1NjFEMEYyNTdFOTMwMDk1RkY2QSAvKiBUaHJlYWRhYmxlTG9hZGVyLmNwcCAqLzsgfTsKIAkJ
MEI5MDU2RjgwRjI2ODVGMzAwOTVGRjZBIC8qIFdvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI5MDU2RjYwRjI2
ODVGMzAwOTVGRjZBIC8qIFdvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwICovOyB9OwogCQkwQjkw
NTZGOTBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI5MDU2RjcwRjI2ODVGMzAw
OTVGRjZBIC8qIFdvcmtlclRocmVhZGFibGVMb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9ICgpOyB9OyB9OwotCQkwQkE1RDM4NjBGMjQwRkI0MDA5Qjg3MEIgLyogR2VuZXJpY1dv
cmtlclRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBCQTVEMzg1MEYyNDBGQjQwMDlCODcwQiAvKiBHZW5lcmljV29ya2VyVGFzay5oICovOyB9Owot
CQkwQkI0REJFMjBGMkVFMjk4MDAzNTQ2MTkgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJCNERCRTEwRjJFRTI5
ODAwMzU0NjE5IC8qIENyb3NzVGhyZWFkQ29waWVyLmNwcCAqLzsgfTsKIAkJMEJFMDMwQTIwRjMx
MTJGQjAwM0MxQTQ2IC8qIFJlbmRlckxpbmVCb3hMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkUwMzBBMTBGMzExMkZCMDAzQzFBNDYgLyogUmVu
ZGVyTGluZUJveExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMUE1
NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgfTsKIAkJMEYx
NURBOEEwRjNBQUVFNzAwMDBDRTQ3IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1REE4OTBGM0FB
RUU3MDAwMENFNDcgLyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLzsgfTsKQEAgLTIw
NSw4ICsyMDIsNiBAQAogCQkxODVCQ0YyOTBGMzI3OUNFMDAwRUEyNjIgLyogVGhyZWFkVGltZXJz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxODVCQ0Yy
NzBGMzI3OUNFMDAwRUEyNjIgLyogVGhyZWFkVGltZXJzLmggKi87IH07CiAJCTE4ODYwNEIzMEYy
RTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxODg2MDRCMTBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIu
Y3BwICovOyB9OwogCQkxODg2MDRCNDBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4ODYwNEIyMEYyRTY1
NEEwMDBCNjQ0MyAvKiBET01UaW1lci5oICovOyB9OwotCQkxOEEwNTM3QzBGMjY4NTlDMDBBNTE3
MDUgLyogV29ya2VyUnVuTG9vcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxOEEwNTM3QTBGMjY4NTlDMDBBNTE3MDUgLyogV29ya2VyUnVuTG9vcC5j
cHAgKi87IH07Ci0JCTE4QTA1MzdEMEYyNjg1OUMwMEE1MTcwNSAvKiBXb3JrZXJSdW5Mb29wLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOEEwNTM3QjBG
MjY4NTlDMDBBNTE3MDUgLyogV29ya2VyUnVuTG9vcC5oICovOyB9OwogCQkxQTBENTczNjBBNUM3
N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTBENTczNDBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZs
b3dFdmVudC5jcHAgKi87IH07CiAJCTFBMEQ1NzM3MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxv
d0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTBENTczNTBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5oICovOyB9OwogCQkxQTBE
NTc0MDBBNUM3ODY3MDA3RURENEMgLyogSlNPdmVyZmxvd0V2ZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEQ1NzNFMEE1Qzc4NjcwMDdFREQ0
QyAvKiBKU092ZXJmbG93RXZlbnQuY3BwICovOyB9OwpAQCAtNTUyLDggKzU0NywyNiBAQAogCQky
OUZGQkI4MzBFN0M1QTNEMDA0MDc3MzAgLyogQWNjZXNzaWJpbGl0eUxpc3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5RkZCQjgxMEU3QzVBM0QwMDQw
NzczMCAvKiBBY2Nlc3NpYmlsaXR5TGlzdC5oICovOyB9OwogCQkyRDkwNjYwNjBCRTE0MUQ0MDA5
NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQ5MDY2MDQwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmNw
cCAqLzsgfTsKIAkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDkwNjYwNTBCRTE0
MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkyRTNBQzg0RTBGM0QwNkQxMDA2MzNGMDQgLyogV29ya2Vy
Q29udGV4dFByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRTNBQzg0RDBGM0QwNkQxMDA2MzNGMDQgLyogV29ya2VyQ29udGV4dFByb3h5LmggKi87
IH07Ci0JCTJFM0FDODUwMEYzRDA2RjcwMDYzM0YwNCAvKiBXb3JrZXJPYmplY3RQcm94eS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkUzQUM4NEYwRjNE
MDZGNzAwNjMzRjA0IC8qIFdvcmtlck9iamVjdFByb3h5LmggKi87IH07CisJCTJFNDM0NjQ0MEY1
NDZBODIwMEIwRjFCQSAvKiBHZW5lcmljV29ya2VyVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2MzIwRjU0NkE4MjAwQjBGMUJBIC8qIEdl
bmVyaWNXb3JrZXJUYXNrLmggKi87IH07CisJCTJFNDM0NjQ1MEY1NDZBODIwMEIwRjFCQSAvKiBX
b3JrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkU0MzQ2MzMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlci5jcHAgKi87IH07CisJCTJFNDM0NjQ2
MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NjM0MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXIuaCAq
LzsgfTsKKwkJMkU0MzQ2NDcwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlci5pZGwgaW4gUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NjM1MEY1NDZBODIw
MEIwRjFCQSAvKiBXb3JrZXIuaWRsICovOyB9OworCQkyRTQzNDY0ODBGNTQ2QTgyMDBCMEYxQkEg
LyogV29ya2VyQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRTQzNDYzNjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5jcHAg
Ki87IH07CisJCTJFNDM0NjQ5MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQzNDYzNzBGNTQ2
QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5oICovOyB9OworCQkyRTQzNDY0QTBGNTQ2QTgy
MDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NjM4MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJD
b250ZXh0LmlkbCAqLzsgfTsKKwkJMkU0MzQ2NEIwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckNv
bnRleHRQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkU0MzQ2MzkwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckNvbnRleHRQcm94eS5oICovOyB9
OworCQkyRTQzNDY0QzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2M0EwRjU0NkE4
MjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmNwcCAqLzsgfTsKKwkJMkU0MzQ2NEQwRjU0NkE4
MjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQzNDYzQjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTG9j
YXRpb24uaCAqLzsgfTsKKwkJMkU0MzQ2NEUwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0
aW9uLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkU0MzQ2M0MwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmlkbCAqLzsgfTsKKwkJ
MkU0MzQ2NEYwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NjNEMEY1NDZB
ODIwMEIwRjFCQSAvKiBXb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgKi87IH07CisJCTJFNDM0NjUw
MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJNZXNzYWdpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2M0UwRjU0NkE4MjAwQjBGMUJB
IC8qIFdvcmtlck1lc3NhZ2luZ1Byb3h5LmggKi87IH07CisJCTJFNDM0NjUxMEY1NDZBODIwMEIw
RjFCQSAvKiBXb3JrZXJPYmplY3RQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2M0YwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlck9iamVj
dFByb3h5LmggKi87IH07CisJCTJFNDM0NjUyMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJSdW5M
b29wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
NDM0NjQwMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJSdW5Mb29wLmNwcCAqLzsgfTsKKwkJMkU0
MzQ2NTMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclJ1bkxvb3AuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NjQxMEY1NDZBODIwMEIwRjFCQSAv
KiBXb3JrZXJSdW5Mb29wLmggKi87IH07CisJCTJFNDM0NjU0MEY1NDZBODIwMEIwRjFCQSAvKiBX
b3JrZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkU0MzQ2NDIwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5jcHAgKi87IH07
CisJCTJFNDM0NjU1MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NjQzMEY1NDZBODIwMEIw
RjFCQSAvKiBXb3JrZXJUaHJlYWQuaCAqLzsgfTsKKwkJMkU0MzQ2NTgwRjU0NkE5OTAwQjBGMUJB
IC8qIENyb3NzVGhyZWFkQ29waWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFNDM0NjU2MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENv
cGllci5jcHAgKi87IH07CisJCTJFNDM0NjU5MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVh
ZENvcGllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkU0MzQ2NTcwRjU0NkE5OTAwQjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi87IH07CiAJ
CTMxMjg4RTcyMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyODhFNkUwRTMw
MDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgKi87IH07CiAJCTMxMjg4
RTczMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTZGMEUzMDA1RDYwMDM2
MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLzsgfTsKIAkJMzEyODhFNzQwRTMwMDVE
NjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyODhFNzAwRTMwMDVENjAwMzYxOUFFIC8q
IFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovOyB9OwpAQCAtNDMxMCw4ICs0MzIzLDYgQEAK
IAkJRTEyNzFBNTkwRUVFQ0RFNDAwRjYxMjEzIC8qIEpTV29ya2VyTmF2aWdhdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjcxQTU3MEVFRUNE
RTQwMEY2MTIxMyAvKiBKU1dvcmtlck5hdmlnYXRvci5jcHAgKi87IH07CiAJCUUxMkVEQjdCMEIz
MDhBNzgwMDI3MDRCNiAvKiBFdmVudFRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyRURCN0EwQjMwOEE3ODAwMjcwNEI2IC8qIEV2ZW50VGFy
Z2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RTEyRURCRUEwQjMwOEUwQjAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMkVEQkU5MEIzMDhFMEIwMDI3MDRC
NiAvKiBFdmVudFRhcmdldC5jcHAgKi87IH07Ci0JCUUxNDc5OUE3MEVDREUzQTQwMDI5MkJGMyAv
KiBXb3JrZXJNZXNzYWdpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTE0Nzk5QTYwRUNERTNBNDAwMjkyQkYzIC8qIFdvcmtlck1lc3NhZ2lu
Z1Byb3h5LmggKi87IH07Ci0JCUUxNDc5OUI0MEVDREU5RDgwMDI5MkJGMyAvKiBXb3JrZXJNZXNz
YWdpbmdQcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTQ3OTlCMzBFQ0RFOUQ4MDAyOTJCRjMgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuY3Bw
ICovOyB9OwogCQlFMTdBNEExQjBEOTc5OTFEMDBGQzEwQzYgLyogRE9NU1ZHQWx0R2x5cGhFbGVt
ZW50LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NUFBNkJBQzBEOTc0QTAwMDAwNTQxQUUgLyogRE9NU1ZHQWx0R2x5cGhFbGVt
ZW50LmggKi87IH07CiAJCUUxN0E0QTFDMEQ5Nzk5MUQwMEZDMTBDNiAvKiBET01TVkdBbHRHbHlw
aEVsZW1lbnRJbnRlcm5hbC5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVBQTZCQUUwRDk3NEEwMDAwMDU0MUFFIC8qIERPTVNW
R0FsdEdseXBoRWxlbWVudEludGVybmFsLmggKi87IH07CiAJCUUxODFCMjU3MEYxNEMxQTYwMEZC
Nzg0NyAvKiBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4MUIyNTYwRjE0QzFBNjAwRkI3ODQ3IC8qIEpTRE9N
U3RyaW5nTGlzdEN1c3RvbS5jcHAgKi87IH07CkBAIC00MzM4LDE0ICs0MzQ5LDggQEAKIAkJRTFB
REVEREIwRTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBREVERDkwRTc2QkQ5MzAwNEExQTVF
IC8qIEpTTWVzc2FnZVBvcnQuY3BwICovOyB9OwogCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkg
LyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxQkU1MTJCMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQu
Y3BwICovOyB9OwogCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJFNTEy
QzBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggKi87IH07Ci0JCUUxQzJDNDI0
MEVBQ0UwQkMwMDdFNjFGQiAvKiBXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzJDNDIzMEVBQ0UwQkMwMDdFNjFGQiAvKiBXb3Jr
ZXJUaHJlYWQuaCAqLzsgfTsKLQkJRTFDMkM0MjkwRUFDRTBFMDAwN0U2MUZCIC8qIFdvcmtlclRo
cmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MUMyQzQyODBFQUNFMEUwMDA3RTYxRkIgLyogV29ya2VyVGhyZWFkLmNwcCAqLzsgfTsKLQkJRTFD
MkM0M0UwRUFEMDEzMzAwN0U2MUZCIC8qIFdvcmtlckNvbnRleHQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzJDNDNEMEVBRDAxMzMwMDdFNjFGQiAv
KiBXb3JrZXJDb250ZXh0LmggKi87IH07Ci0JCUUxQzJDNDQyMEVBRDAxN0IwMDdFNjFGQiAvKiBX
b3JrZXJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxQzJDNDQxMEVBRDAxN0IwMDdFNjFGQiAvKiBXb3JrZXJDb250ZXh0LmNwcCAqLzsg
fTsKIAkJRTFDMzYyRUYwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2VyTG9jYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzM2MkVEMEVBRjJB
QTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmggKi87IH07CiAJCUUxQzM2MkYwMEVBRjJB
QTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzM2MkVFMEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dv
cmtlckxvY2F0aW9uLmNwcCAqLzsgfTsKLQkJRTFDMzYzMDEwRUFGMkNDNjAwNzQxMEJDIC8qIFdv
cmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMUMzNjMwMDBFQUYyQ0M2MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uaCAqLzsgfTsK
LQkJRTFDMzYzMDYwRUFGMkQwNzAwNzQxMEJDIC8qIFdvcmtlckxvY2F0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzM2MzA1MEVBRjJEMDcw
MDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5jcHAgKi87IH07CiAJCUUxQzM2QzAzMEVCMDc2RDYw
MDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMzZDMDIwRUIwNzZENjAwNzQxMEJDIC8qIEpTRE9NR2xv
YmFsT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTFDMzZDQkQwRUIwODA2MjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzM2Q0JDMEVC
MDgwNjIwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5jcHAgKi87IH07CiAJCUUxQzM2RDM0
MEVCMEEwOTQwMDc0MTBCQyAvKiBKU1dvcmtlckNvbnRleHRCYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzM2RDMyMEVCMEEwOTQwMDc0MTBC
QyAvKiBKU1dvcmtlckNvbnRleHRCYXNlLmNwcCAqLzsgfTsKQEAgLTQzNTMsOCArNDM1OCw2IEBA
CiAJCUUxQzRERTY5MEVBNzVDMUUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzRERTY4MEVBNzVDMUUw
MDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuaCAqLzsgfTsKIAkJRTFDNERFNkUwRUE3NUM2NTAw
MjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMUM0REU2RDBFQTc1QzY1MDAyM0NDRDYgLyogQWN0aXZlRE9N
T2JqZWN0LmNwcCAqLzsgfTsKIAkJRTFDOEJFNUQwRThCRDE1QTAwNjRDQjdEIC8qIEpTV29ya2Vy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzhC
RTVDMEU4QkQxNUEwMDY0Q0I3RCAvKiBKU1dvcmtlci5jcHAgKi87IH07Ci0JCUUxQ0E1Q0EwMEU4
Q0Q3M0IwMEU4RUY5MCAvKiBXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxQ0E1QzlGMEU4Q0Q3M0IwMEU4RUY5MCAvKiBXb3JrZXIuaCAqLzsg
fTsKLQkJRTFDQTVDQTUwRThDRDc4NTAwRThFRjkwIC8qIFdvcmtlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNBNUNBNDBFOENENzg1MDBFOEVG
OTAgLyogV29ya2VyLmNwcCAqLzsgfTsKIAkJRTFDQTVDQkMwRThDRENBRjAwRThFRjkwIC8qIEpT
V29ya2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxQ0E1Q0JCMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAgKi87
IH07CiAJCUUxQ0E1Q0QzMEU4Q0RFODAwMEU4RUY5MCAvKiBKU1dvcmtlckNvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNBNUNEMjBF
OENERTgwMDBFOEVGOTAgLyogSlNXb3JrZXJDb25zdHJ1Y3Rvci5oICovOyB9OwogCQlFMUNBNUNE
NjBFOENERUU5MDBFOEVGOTAgLyogSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNBNUNENTBFOENERUU5MDBFOEVG
OTAgLyogSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAgKi87IH07CkBAIC01MDEyLDcgKzUwMTUsNiBA
QAogCQkwOEZCODRCMDBFQ0UzNzMzMDBEQzA2NEUgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MRWxlbWVudEZhY3RvcnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEZCODRCMTBFQ0UzNzMzMDBEQzA2NEUg
LyogV01MRWxlbWVudEZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V01MRWxlbWVudEZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEE0ODQ0
OTgwQ0E0NENCMjAwQjdCRDQ4IC8qIFNvZnRMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNvZnRMaW5raW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBCNENFN0RBMEYyRTRCREUwMEY2RUMwNCAvKiBDcm9zc1RocmVhZENvcGllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZENvcGllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwQjhDNTZEMzBGMjg2MjdGMDAwNTAyRTEgLyogSFRUUEhlYWRl
ck1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVFRQSGVhZGVy
TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEI5MDU2MTUwRjI1NzhCRTAw
OTVGRjZBIC8qIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwQjkwNTYxNjBGMjU3OEJFMDA5NUZGNkEgLyogRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NTAyMSw4ICs1MDIzLDYgQEAKIAkJMEI5MDU2MUQwRjI1N0U5MzAwOTVGRjZBIC8qIFRocmVhZGFi
bGVMb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFk
YWJsZUxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCOTA1NkY2MEYy
Njg1RjMwMDk1RkY2QSAvKiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQjkwNTZGNzBGMjY4NUYzMDA5NUZGNkEgLyogV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
b3JrZXJUaHJlYWRhYmxlTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBC
QTVEMzg1MEYyNDBGQjQwMDlCODcwQiAvKiBHZW5lcmljV29ya2VyVGFzay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljV29ya2VyVGFzay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwQkI0REJFMTBGMkVFMjk4MDAzNTQ2MTkgLyogQ3Jvc3NUaHJlYWRD
b3BpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3Jvc3NUaHJl
YWRDb3BpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQkUwMzBBMTBGMzEx
MkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyTGluZUJveExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU2VsZWN0aW9uSW5mby5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1REE4OTBGM0FBRUU3MDAwMENFNDcgLyog
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDsgcGF0aCA9IGFuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NTA5NSw4ICs1MDk1LDYgQEAKIAkJMTg1QkNGMjcwRjMyNzlDRTAwMEVBMjYyIC8qIFRocmVhZFRp
bWVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRUaW1lcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTg4NjA0QjEwRjJFNjU0QTAwMEI2NDQzIC8q
IERPTVRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVRp
bWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTg4NjA0QjIwRjJFNjU0QTAw
MEI2NDQzIC8qIERPTVRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERP
TVRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE4QTA1MzdBMEYyNjg1OUMw
MEE1MTcwNSAvKiBXb3JrZXJSdW5Mb29wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdvcmtlclJ1bkxvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxOEEwNTM3QjBGMjY4NTlDMDBBNTE3MDUgLyogV29ya2VyUnVuTG9vcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrZXJSdW5Mb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBMEQ1NzM0MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdmVyZmxvd0V2ZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRDU3MzUwQTVDNzdGRTAwN0VERDRD
IC8qIE92ZXJmbG93RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE92
ZXJmbG93RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRDU3MzgwQTVD
NzgxMjAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBPdmVyZmxvd0V2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NzUs
OCArNTQ3MywyNiBAQAogCQkyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFN0YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOTA2NjBCMDY2NUQ5MzcwMDZCNkYxQSAvKiBDbGlw
Ym9hcmRNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2xpcGJvYXJkTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwogCQkyRDkwNjYwQzA2NjVEOTM3MDA2QjZGMUEgLyogQ2xpcGJv
YXJkTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQ2xpcGJvYXJkTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJMkUzQUM4NEQwRjNEMDZEMTAwNjMzRjA0IC8q
IFdvcmtlckNvbnRleHRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
b3JrZXJDb250ZXh0UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkUzQUM4
NEYwRjNEMDZGNzAwNjMzRjA0IC8qIFdvcmtlck9iamVjdFByb3h5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlck9iamVjdFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTJFNDM0NjMyMEY1NDZBODIwMEIwRjFCQSAvKiBHZW5lcmljV29ya2VyVGFz
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW5lcmljV29ya2VyVGFzay5o
OyBwYXRoID0gd29ya2Vycy9HZW5lcmljV29ya2VyVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyRTQzNDYzMzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdvcmtlci5jcHA7IHBhdGggPSB3b3JrZXJz
L1dvcmtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFNDM0NjM0MEY1NDZB
ODIwMEIwRjFCQSAvKiBXb3JrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V29ya2VyLmg7IHBhdGggPSB3b3JrZXJzL1dvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyRTQzNDYzNTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBXb3JrZXIuaWRsOyBwYXRoID0gd29ya2Vycy9Xb3JrZXIuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTQzNDYzNjBGNTQ2QTgyMDBCMEYxQkEgLyogV29y
a2VyQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXb3Jr
ZXJDb250ZXh0LmNwcDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFNDM0NjM3MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlckNvbnRleHQu
aDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyRTQzNDYzODBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gV29ya2VyQ29udGV4dC5pZGw7IHBhdGggPSB3b3JrZXJzL1dv
cmtlckNvbnRleHQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTQzNDYzOTBG
NTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFdvcmtlckNvbnRleHRQcm94eS5oOyBwYXRoID0gd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkU0MzQ2M0Ew
RjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFdvcmtlckxvY2F0aW9uLmNwcDsgcGF0aCA9IHdvcmtlcnMvV29y
a2VyTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTQzNDYzQjBG
NTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV29ya2VyTG9jYXRpb24uaDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyTG9jYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkU0MzQ2M0MwRjU0NkE4MjAwQjBG
MUJBIC8qIFdvcmtlckxvY2F0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXb3JrZXJM
b2NhdGlvbi5pZGw7IHBhdGggPSB3b3JrZXJzL1dvcmtlckxvY2F0aW9uLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkU0MzQ2M0QwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlck1l
c3NhZ2luZ1Byb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdv
cmtlck1lc3NhZ2luZ1Byb3h5LmNwcDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJv
eHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTQzNDYzRTBGNTQ2QTgyMDBC
MEYxQkEgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV29ya2VyTWVzc2FnaW5nUHJveHkuaDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyTWVz
c2FnaW5nUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkU0MzQ2M0YwRjU0
NkE4MjAwQjBGMUJBIC8qIFdvcmtlck9iamVjdFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdvcmtlck9iamVjdFByb3h5Lmg7IHBhdGggPSB3b3JrZXJzL1dvcmtlck9i
amVjdFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFNDM0NjQwMEY1NDZB
ODIwMEIwRjFCQSAvKiBXb3JrZXJSdW5Mb29wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFdvcmtlclJ1bkxvb3AuY3BwOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJSdW5M
b29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkU0MzQ2NDEwRjU0NkE4MjAw
QjBGMUJBIC8qIFdvcmtlclJ1bkxvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV29ya2VyUnVuTG9vcC5oOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFNDM0NjQyMEY1NDZBODIwMEIwRjFCQSAvKiBXb3Jr
ZXJUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV29ya2Vy
VGhyZWFkLmNwcDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMkU0MzQ2NDMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVh
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3JrZXJUaHJlYWQuaDsgcGF0
aCA9IHdvcmtlcnMvV29ya2VyVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTJFNDM0NjU2MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcm9zc1RocmVhZENvcGllci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFNDM0NjU3MEY1NDZBOTkwMEIwRjFCQSAvKiBD
cm9zc1RocmVhZENvcGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9z
c1RocmVhZENvcGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTI4OEU2RTBF
MzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMjg4RTZGMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJL
aXRDU1NLZXlmcmFtZVJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMjg4
RTcwMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTEyMiwxMiArOTEzOCw5IEBACiAJCUUx
MjcxQTU3MEVFRUNERTQwMEY2MTIxMyAvKiBKU1dvcmtlck5hdmlnYXRvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dvcmtlck5hdmlnYXRvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMkVEQjdBMEIzMDhBNzgwMDI3MDRCNiAvKiBFdmVu
dFRhcmdldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudFRhcmdldC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTJFREJFOTBCMzA4RTBCMDAyNzA0QjYg
LyogRXZlbnRUYXJnZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RXZlbnRUYXJnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTQ3OTlBNjBF
Q0RFM0E0MDAyOTJCRjMgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV29ya2VyTWVzc2FnaW5nUHJveHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRTE0Nzk5QjMwRUNERTlEODAwMjkyQkYzIC8qIFdvcmtlck1lc3NhZ2lu
Z1Byb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtlck1l
c3NhZ2luZ1Byb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4MUIyNTYw
RjE0QzFBNjAwRkI3ODQ3IC8qIEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTgxQjM1MDBGMTUwMDhBMDBGQjc4NDcgLyogU3Rh
dGljU3RyaW5nTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNT
dHJpbmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxODFCMzU1MEYxNTAw
RDcwMEZCNzg0NyAvKiBTdGF0aWNTdHJpbmdMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN0YXRpY1N0cmluZ0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlFMTgyNTY0RjBFRjJBQ0U2MDA5MzMyNDIgLyogV29ya2VyQ29udGV4dC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV29ya2VyQ29udGV4dC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxODI1NjhEMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtlckNvbnRl
eHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXb3JrZXJDb250
ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4MjU2OEUwRUYyQjAyRDAw
OTMzMjQyIC8qIEpTV29ya2VyQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1dvcmtlckNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4
MjU4QUIwRUYzQ0Q3MDAwOTMzMjQyIC8qIEpTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dvcmtlckNvbnRleHRDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTE1MSwyNSArOTE2NCwxNSBAQAogCQlF
MUFERUREOTBFNzZCRDkzMDA0QTFBNUUgLyogSlNNZXNzYWdlUG9ydC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lc3NhZ2VQb3J0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTFCRTUxMkIwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2Rl
U29ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYU0xUVW5pY29k
ZVNvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUJFNTEyQzBDRjZDNTEy
MDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFhTTFRVbmljb2RlU29ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlF
MUMyQzQyMzBFQUNFMEJDMDA3RTYxRkIgLyogV29ya2VyVGhyZWFkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlclRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlFMUMyQzQyODBFQUNFMEUwMDA3RTYxRkIgLyogV29ya2VyVGhyZWFkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtlclRocmVhZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxQzJDNDNEMEVBRDAxMzMwMDdFNjFGQiAvKiBXb3Jr
ZXJDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlckNvbnRl
eHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTFDMkM0NDEwRUFEMDE3QjAwN0U2
MUZCIC8qIFdvcmtlckNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV29ya2VyQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUx
QzM2MkJCMEVBRjI5RkIwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gV29ya2VyTG9jYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUMzNjJFRDBFQUYyQUE5MDA3NDEwQkMgLyogSlNXb3JrZXJMb2NhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dvcmtlckxvY2F0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQzM2MkVFMEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtl
ckxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV29y
a2VyTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMUMzNjMwMDBF
QUYyQ0M2MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV29ya2VyTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRTFDMzYzMDUwRUFGMkQwNzAwNzQxMEJDIC8qIFdvcmtlckxvY2F0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtlckxvY2F0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDMzZDMDIwRUIwNzZENjAwNzQxMEJDIC8qIEpTRE9N
R2xvYmFsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NR2xv
YmFsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQzM2Q0JDMEVCMDgw
NjIwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0RPTUdsb2JhbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUxQzM2RDMyMEVCMEEwOTQwMDc0MTBCQyAvKiBKU1dvcmtlckNvbnRleHRC
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV29ya2VyQ29u
dGV4dEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUMzNkQzMzBFQjBB
MDk0MDA3NDEwQkMgLyogSlNXb3JrZXJDb250ZXh0QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1dvcmtlckNvbnRleHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxQzRERTY4MEVBNzVDMUUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZlRE9NT2JqZWN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQzRERTZEMEVBNzVDNjUwMDIzQ0NENiAvKiBBY3Rp
dmVET01PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWN0
aXZlRE9NT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTFDOEJFNDQw
RThCQ0NCQjAwNjRDQjdEIC8qIFdvcmtlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV29y
a2VyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDOEJFNUMwRThCRDE1QTAw
NjRDQjdEIC8qIEpTV29ya2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTV29ya2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTFDQTVDOUYw
RThDRDczQjAwRThFRjkwIC8qIFdvcmtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXb3JrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTFDQTVDQTQwRThD
RDc4NTAwRThFRjkwIC8qIFdvcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXb3JrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUNBNUNC
QjBFOENEQ0FGMDBFOEVGOTAgLyogSlNXb3JrZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNXb3JrZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMUNBNUNEMjBFOENERTgwMDBFOEVGOTAgLyogSlNXb3JrZXJDb25zdHJ1
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dvcmtlckNvbnN0cnVj
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQ0E1Q0Q1MEU4Q0RFRTkwMEU4
RUY5MCAvKiBKU1dvcmtlckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTV29ya2VyQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTM3Miw2ICs5Mzc1LDcgQEAKIAkJCQkxQUU4MkVDOTBDQUFFMTc3MDAyMjM3
QUUgLyogc3RvcmFnZSAqLywKIAkJCQlCMjIyNzdDQTBEMDBCRjFFMDA3MUI3ODIgLyogc3ZnICov
LAogCQkJCTRDNkI5OTE1MEU1MkUzNzMwMDQ4N0JCNyAvKiB3bWwgKi8sCisJCQkJMkU0MzQ2MzEw
RjU0NkE2ODAwQjBGMUJBIC8qIHdvcmtlcnMgKi8sCiAJCQkJRTFGMDQyNDMwOTgzOTM4OTAwNjY5
NEVBIC8qIHhtbCAqLywKIAkJCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBT
b3VyY2VzICovLAogCQkJCTA4OUMxNjY1RkU4NDExNThDMDJBQUMwNyAvKiBSZXNvdXJjZXMgKi8s
CkBAIC05NzIyLDYgKzk3MjYsMzEgQEAKIAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNUYWJzID0g
MDsKIAkJfTsKKwkJMkU0MzQ2MzEwRjU0NkE2ODAwQjBGMUJBIC8qIHdvcmtlcnMgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTJFNDM0NjMyMEY1NDZBODIw
MEIwRjFCQSAvKiBHZW5lcmljV29ya2VyVGFzay5oICovLAorCQkJCTJFNDM0NjMzMEY1NDZBODIw
MEIwRjFCQSAvKiBXb3JrZXIuY3BwICovLAorCQkJCTJFNDM0NjM0MEY1NDZBODIwMEIwRjFCQSAv
KiBXb3JrZXIuaCAqLywKKwkJCQkyRTQzNDYzNTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmlk
bCAqLywKKwkJCQkyRTQzNDYzNjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5jcHAg
Ki8sCisJCQkJMkU0MzQ2MzcwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckNvbnRleHQuaCAqLywK
KwkJCQkyRTQzNDYzODBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5pZGwgKi8sCisJ
CQkJMkU0MzQ2MzkwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckNvbnRleHRQcm94eS5oICovLAor
CQkJCTJFNDM0NjNBMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJMb2NhdGlvbi5jcHAgKi8sCisJ
CQkJMkU0MzQ2M0IwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmggKi8sCisJCQkJ
MkU0MzQ2M0MwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmlkbCAqLywKKwkJCQky
RTQzNDYzRDBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwICovLAor
CQkJCTJFNDM0NjNFMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJNZXNzYWdpbmdQcm94eS5oICov
LAorCQkJCTJFNDM0NjNGMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJPYmplY3RQcm94eS5oICov
LAorCQkJCTJFNDM0NjQwMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJSdW5Mb29wLmNwcCAqLywK
KwkJCQkyRTQzNDY0MTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyUnVuTG9vcC5oICovLAorCQkJ
CTJFNDM0NjQyMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuY3BwICovLAorCQkJCTJF
NDM0NjQzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCAqLywKKwkJCSk7CisJCQlu
YW1lID0gd29ya2VyczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTMxNkZF
MTA2MEU2RTFEODQwMEJGNjA4OCAvKiBhbmltYXRpb24gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTM3MjIsNiArMTM3NTEsOCBAQAogCQkJCTkzQjZBMEU1
MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovLAogCQkJCTA2MDI3Q0FDMEIxQ0JG
QzAwMDg4NEIyRCAvKiBDb250ZXh0TWVudUl0ZW0uaCAqLywKIAkJCQk5MzUyMDg4MTA5QkQ0NUU5
MDBGMjAzOEQgLyogQ29va2llSmFyLmggKi8sCisJCQkJMkU0MzQ2NTYwRjU0NkE5OTAwQjBGMUJB
IC8qIENyb3NzVGhyZWFkQ29waWVyLmNwcCAqLywKKwkJCQkyRTQzNDY1NzBGNTQ2QTk5MDBCMEYx
QkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLywKIAkJCQlGNTg3ODY4NDAyREUzQjg2MDFFQTQx
MjIgLyogQ3Vyc29yLmggKi8sCiAJCQkJRjU4Nzg2OTkwMkRFM0I4NjAxRUE0MTIyIC8qIERlcHJl
Y2F0ZWRQdHJMaXN0LmggKi8sCiAJCQkJRjU4Nzg1MTYwMkRFMzc1OTAxRUE0MTIyIC8qIERlcHJl
Y2F0ZWRQdHJMaXN0SW1wbC5jcHAgKi8sCkBAIC0xNDMzNiw4ICsxNDM2Nyw2IEBACiAJCQkJODUw
ODlDQzcwQTk4QzIyNjAwQTI3NUFBIC8qIENvbW1lbnQuaWRsICovLAogCQkJCUE4MTg3MjE0MDk3
N0QzQzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCAqLywKIAkJCQlBODE4NzIxMTA5NzdE
M0MwMDA1ODI2RDkgLyogQ29udGFpbmVyTm9kZS5oICovLAotCQkJCTBCQjREQkUxMEYyRUUyOTgw
MDM1NDYxOSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgKi8sCi0JCQkJMEI0Q0U3REEwRjJFNEJE
RTAwRjZFQzA0IC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi8sCiAJCQkJQkM2MEQ2RTgwRDI4RDgz
NDAwQjk5MThGIC8qIERPTUNvcmVFeGNlcHRpb24uaCAqLywKIAkJCQlCQzYwRDZFQjBEMjhEOTk5
MDBCOTkxOEYgLyogRE9NQ29yZUV4Y2VwdGlvbi5pZGwgKi8sCiAJCQkJQTgxODVGMzYwOTc2NTc2
NTAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmNwcCAqLywKQEAgLTE0MzkxLDcgKzE0NDIw
LDYgQEAKIAkJCQkwODU3NzMzNDBGMDg0NjAxMDA4MDU4M0UgLyogRm9ybUNvbnRyb2xFbGVtZW50
LmggKi8sCiAJCQkJMDhCOTNGNzMwRjI5MzQ4MTAwMDcyMEMyIC8qIEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZS5jcHAgKi8sCiAJCQkJMDhCOTNGNzQwRjI5MzQ4MTAwMDcyMEMyIC8qIEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZS5oICovLAotCQkJCTBCQTVEMzg1MEYyNDBGQjQwMDlCODcw
QiAvKiBHZW5lcmljV29ya2VyVGFzay5oICovLAogCQkJCTA4NzAwQkU2MEYwODZDNTMwMDkxOTQx
OSAvKiBJbnB1dEVsZW1lbnQuY3BwICovLAogCQkJCTA4NTkxQUE0MEYwODVDNEUwMDlCQUNCMSAv
KiBJbnB1dEVsZW1lbnQuaCAqLywKIAkJCQk4NTAzMUIyRDBBNDRFRkM3MDBGOTkyRTAgLyogS2V5
Ym9hcmRFdmVudC5jcHAgKi8sCkBAIC0xNDUxMywyMyArMTQ1NDEsNiBAQAogCQkJCTg1MDMxQjNB
MEE0NEVGQzcwMEY5OTJFMCAvKiBXaGVlbEV2ZW50LmNwcCAqLywKIAkJCQk4NTAzMUIzQjBBNDRF
RkM3MDBGOTkyRTAgLyogV2hlZWxFdmVudC5oICovLAogCQkJCTkzRUVDMUY3MDlDMjg3NzcwMEM1
MTVEMSAvKiBXaGVlbEV2ZW50LmlkbCAqLywKLQkJCQlFMUNBNUNBNDBFOENENzg1MDBFOEVGOTAg
LyogV29ya2VyLmNwcCAqLywKLQkJCQlFMUNBNUM5RjBFOENENzNCMDBFOEVGOTAgLyogV29ya2Vy
LmggKi8sCi0JCQkJRTFDOEJFNDQwRThCQ0NCQjAwNjRDQjdEIC8qIFdvcmtlci5pZGwgKi8sCi0J
CQkJRTFDMkM0NDEwRUFEMDE3QjAwN0U2MUZCIC8qIFdvcmtlckNvbnRleHQuY3BwICovLAotCQkJ
CUUxQzJDNDNEMEVBRDAxMzMwMDdFNjFGQiAvKiBXb3JrZXJDb250ZXh0LmggKi8sCi0JCQkJRTE4
MjU2NEYwRUYyQUNFNjAwOTMzMjQyIC8qIFdvcmtlckNvbnRleHQuaWRsICovLAotCQkJCTJFM0FD
ODREMEYzRDA2RDEwMDYzM0YwNCAvKiBXb3JrZXJDb250ZXh0UHJveHkuaCAqLywKLQkJCQlFMUMz
NjMwNTBFQUYyRDA3MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uY3BwICovLAotCQkJCUUxQzM2
MzAwMEVBRjJDQzYwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5oICovLAotCQkJCUUxQzM2MkJC
MEVBRjI5RkIwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5pZGwgKi8sCi0JCQkJRTE0Nzk5QjMw
RUNERTlEODAwMjkyQkYzIC8qIFdvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCAqLywKLQkJCQlFMTQ3
OTlBNjBFQ0RFM0E0MDAyOTJCRjMgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuaCAqLywKLQkJCQky
RTNBQzg0RjBGM0QwNkY3MDA2MzNGMDQgLyogV29ya2VyT2JqZWN0UHJveHkuaCAqLywKLQkJCQkx
OEEwNTM3QTBGMjY4NTlDMDBBNTE3MDUgLyogV29ya2VyUnVuTG9vcC5jcHAgKi8sCi0JCQkJMThB
MDUzN0IwRjI2ODU5QzAwQTUxNzA1IC8qIFdvcmtlclJ1bkxvb3AuaCAqLywKLQkJCQlFMUMyQzQy
ODBFQUNFMEUwMDA3RTYxRkIgLyogV29ya2VyVGhyZWFkLmNwcCAqLywKLQkJCQlFMUMyQzQyMzBF
QUNFMEJDMDA3RTYxRkIgLyogV29ya2VyVGhyZWFkLmggKi8sCiAJCQkJRjUyM0QzMDkwMkRFNDQ3
NjAxODYzNUNBIC8qIFhNTFRva2VuaXplci5jcHAgKi8sCiAJCQkJRjUyM0QzMEEwMkRFNDQ3NjAx
ODYzNUNBIC8qIFhNTFRva2VuaXplci5oICovLAogCQkJCTU0QzUwRjdBMEU4MDFERjMwMDk4MzJB
MCAvKiBYTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcCAqLywKQEAgLTE0NzExLDcgKzE0NzIyLDYgQEAK
IAkJCQk5MzkyRjE0QzBBRDE4NjFCMDA2OTFCRDQgLyogQ291bnRlck5vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUQwQjA1NTY4MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2NkUwQ0U5MjNBMTAwN0VGM0NEIC8qIENyZWRlbnRp
YWwuaCBpbiBIZWFkZXJzICovLAotCQkJCTBCNENFN0RCMEYyRTRCREUwMEY2RUMwNCAvKiBDcm9z
c1RocmVhZENvcGllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5MkYwODI0NUU1OTAwMUU5
QUJDIC8qIEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyMjcyQTIwRTgyRTg3QzAwRTdG
OTc1IC8qIEN1cnNvckRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjI3MkFEMEU4MkU4RjMw
MEU3Rjk3NSAvKiBDdXJzb3JMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTE1NTYzLDcgKzE1NTcz
LDYgQEAKIAkJCQk5MzVDNDc3NTA5QUM0RDhFMDBBNkFBQjQgLyogR2FwUmVjdHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMjNGMERCMERBRkY0QTQwMDlGREM5MSAvKiBHZW5lcmF0ZWRJbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFMDRDOEEwREFGRjdBMDAwN0EwRjQxIC8qIEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEJBNUQzODYwRjI0MEZCNDAwOUI4NzBCIC8qIEdlbmVy
aWNXb3JrZXJUYXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTgwRDdDNjBFOUMxRjI1MDAwRDZG
NzUgLyogR2VvbG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQUI5MDEzMEVBNTFCOUMw
MDYzNDhDMyAvKiBHZW9sb2NhdGlvblNlcnZpY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFODBE
N0M5MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
NjcwMSwxNiArMTY3MTAsOCBAQAogCQkJCTkzODBGNDc0MDlBMTFBQjQwMDFGREIzNCAvKiBXaWRn
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOUIwMkVGMEVBMkRCQzQwMEM1NDU3MCAvKiBXaWR0
aEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzgyNDNFOTBEMENGRDc1MDA0NjBDOEYg
LyogV2luZG93RmVhdHVyZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUUxQ0E1Q0EwMEU4Q0Q3M0Iw
MEU4RUY5MCAvKiBXb3JrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUUxQzJDNDNFMEVBRDAxMzMw
MDdFNjFGQiAvKiBXb3JrZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRTNBQzg0RTBG
M0QwNkQxMDA2MzNGMDQgLyogV29ya2VyQ29udGV4dFByb3h5LmggaW4gSGVhZGVycyAqLywKLQkJ
CQlFMUMzNjMwMTBFQUYyQ0M2MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCUUxNDc5OUE3MEVDREUzQTQwMDI5MkJGMyAvKiBXb3JrZXJNZXNzYWdpbmdQcm94
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNzFBMEIwRUVFQzc3QTAwRjYxMjEzIC8qIFdvcmtl
ck5hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkUzQUM4NTAwRjNEMDZGNzAwNjMzRjA0
IC8qIFdvcmtlck9iamVjdFByb3h5LmggaW4gSGVhZGVycyAqLywKLQkJCQkxOEEwNTM3RDBGMjY4
NTlDMDBBNTE3MDUgLyogV29ya2VyUnVuTG9vcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBNjQz
RjIwRUMwOTcyNTAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUUxQzJDNDI0MEVBQ0UwQkMwMDdFNjFGQiAvKiBXb3JrZXJUaHJlYWQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBCOTA1NkY5MEYyNjg1RjMwMDk1RkY2QSAvKiBXb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUyNDA5OUU2NDkyMDA1NkU1ODEg
LyogV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
NTY1ODIwMjA5RDE1MDhEMDAwRTYxRDcgLyogWExpbmtOYW1lcy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xNjc3Nyw2ICsxNjc3OCwxNiBAQAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2
aXNpYmxlX3VuaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTdDODEyMzBGMkE1Q0Y3MDA1REFB
RUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUQwMTVDQTBG
NEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTJFNDM0
NjQ0MEY1NDZBODIwMEIwRjFCQSAvKiBHZW5lcmljV29ya2VyVGFzay5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMkU0MzQ2NDYwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMkU0MzQ2NDkwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckNvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTJFNDM0NjRCMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0UHJv
eHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTJFNDM0NjREMEY1NDZBODIwMEIwRjFCQSAvKiBXb3Jr
ZXJMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkU0MzQ2NTAwRjU0NkE4MjAwQjBGMUJB
IC8qIFdvcmtlck1lc3NhZ2luZ1Byb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQkyRTQzNDY1MTBG
NTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyT2JqZWN0UHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTJFNDM0NjUzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJSdW5Mb29wLmggaW4gSGVhZGVycyAq
LywKKwkJCQkyRTQzNDY1NTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkyRTQzNDY1OTBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3Bp
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTY4OTQsNiArMTY5MDUsOSBAQAogCQkJCTg1MTM2Q0E4
MEFFRDY2NTkwMEY5MEEzRCAvKiB3ZXN0UmVzaXplQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8s
CiAJCQkJMUFCMUFFN0EwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21JbkN1cnNvci5wbmcgaW4gUmVz
b3VyY2VzICovLAogCQkJCTFBQjFBRTdCMEMwNTFGREUwMDEzOUY0RiAvKiB6b29tT3V0Q3Vyc29y
LnBuZyBpbiBSZXNvdXJjZXMgKi8sCisJCQkJMkU0MzQ2NDcwRjU0NkE4MjAwQjBGMUJBIC8qIFdv
cmtlci5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTJFNDM0NjRBMEY1NDZBODIwMEIwRjFCQSAv
KiBXb3JrZXJDb250ZXh0LmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJMkU0MzQ2NEUwRjU0NkE4
MjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzE4
Nyw3ICsxNzIwMSw2IEBACiAJCQkJOTM5MkYxNTAwQUQxODYyMzAwNjkxQkQ0IC8qIENvdW50ZXJO
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQwQjA1NTY5MDlDNjcwMDEwMDMwN0U0MyAvKiBD
cmVhdGVMaW5rQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzY2RDBDRTkyM0Ex
MDA3RUYzQ0QgLyogQ3JlZGVudGlhbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwQkI0REJFMjBG
MkVFMjk4MDAzNTQ2MTkgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTNGMTlBMjYwODI0NUU1OTAwMUU5QUJDIC8qIEN1cnNvck1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUIyRjM0RkU5MEU4MkY4MjcwMEY2MjdDRCAvKiBETlNDRk5ldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzFBMzdBRTA5N0M3MTVGMDAxOUYzRDggLyogRE9NLm1tIGluIFNvdXJjZXMg
Ki8sCkBAIC0xODY5OSwxNCArMTg3MTIsOCBAQAogCQkJCTkzODBGNDc4MDlBMTFBQ0MwMDFGREIz
NCAvKiBXaWRnZXRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzlCMDJFRTBFQTJEQkM0MDBD
NTQ1NzAgLyogV2lkdGhJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzgyNDNFODBE
MENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
RTFDQTVDQTUwRThDRDc4NTAwRThFRjkwIC8qIFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlFMUMyQzQ0MjBFQUQwMTdCMDA3RTYxRkIgLyogV29ya2VyQ29udGV4dC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlFMUMzNjMwNjBFQUYyRDA3MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJRTE0Nzk5QjQwRUNERTlEODAwMjkyQkYzIC8qIFdvcmtlck1l
c3NhZ2luZ1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMjcxQTE0MEVFRUM4MDQwMEY2
MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMThBMDUzN0Mw
RjI2ODU5QzAwQTUxNzA1IC8qIFdvcmtlclJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTFBNjQzRkQwRUMwOTdBMDAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJRTFDMkM0MjkwRUFDRTBFMDAwN0U2MUZCIC8qIFdvcmtlclRocmVh
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwQjkwNTZGODBGMjY4NUYzMDA5NUZGNkEgLyogV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUyMzA5OUU2
NDkyMDA1NkU1ODEgLyogV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4MzNDN0NDMEEyQ0YwNzQwMEQ1NzY2NCAvKiBYTGlua05hbWVzLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMTg3NjUsNiArMTg3NzIsMTMgQEAKIAkJCQk5MzMwOUUxRDA5OUU2
NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTdD
ODEyMjBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQxRDAxNUNCMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkyRTQzNDY0NTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTJFNDM0NjQ4MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJFNDM0NjRDMEY1NDZBODIwMEIwRjFCQSAvKiBX
b3JrZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRTQzNDY0RjBGNTQ2QTgyMDBC
MEYxQkEgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkU0
MzQ2NTIwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMkU0MzQ2NTQwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkyRTQzNDY1ODBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3Bp
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Dcm9zc1RocmVh
ZENvcGllci5jcHAgYi9XZWJDb3JlL2RvbS9Dcm9zc1RocmVhZENvcGllci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YWRmM2IuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9kb20v
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSAiQ3Jvc3NU
aHJlYWRDb3BpZXIuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAi
UmVzb3VyY2VFcnJvci5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Dcm9zc1RocmVh
ZENvcGllckJhc2U8ZmFsc2UsIFN0cmluZz46OlR5cGUgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZh
bHNlLCBTdHJpbmc+Ojpjb3B5KGNvbnN0IFN0cmluZyYgc3RyKQotewotICAgIHJldHVybiBzdHIu
Y29weSgpOwotfQotCi1Dcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFJlc291cmNlRXJyb3I+
OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgUmVzb3VyY2VFcnJvcj46OmNvcHko
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgcmV0dXJuIGVycm9yLmNvcHkoKTsK
LX0KLQotQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBSZXNvdXJjZVJlcXVlc3Q+OjpUeXBl
IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgUmVzb3VyY2VSZXF1ZXN0Pjo6Y29weShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3QuY29weURh
dGEoKTsKLX0KLQotQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBSZXNvdXJjZVJlc3BvbnNl
Pjo6VHlwZSBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFJlc291cmNlUmVzcG9uc2U+Ojpj
b3B5KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIHJldHVybiByZXNw
b25zZS5jb3B5RGF0YSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0Nyb3NzVGhyZWFkQ29w
aWVyLmggYi9XZWJDb3JlL2RvbS9Dcm9zc1RocmVhZENvcGllci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkOGMxYzI1Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvZG9tL0Nyb3NzVGhy
ZWFkQ29waWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ3Jvc3NU
aHJlYWRDb3BpZXJfaAotI2RlZmluZSBDcm9zc1RocmVhZENvcGllcl9oCi0KLSNpZiBFTkFCTEUo
V09SS0VSUykKLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0j
aW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAg
Y2xhc3MgUmVzb3VyY2VFcnJvcjsKLSAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci0gICAgY2xh
c3MgUmVzb3VyY2VSZXNwb25zZTsKLSAgICBjbGFzcyBTdHJpbmc7Ci0gICAgc3RydWN0IENyb3Nz
VGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE7Ci0gICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXF1ZXN0RGF0YTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1Ro
cmVhZENvcGllclBhc3NUaHJvdWdoIHsKLSAgICAgICAgdHlwZWRlZiBUIFR5cGU7Ci0gICAgICAg
IHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgVCYgcGFyYW1ldGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gcGFyYW1ldGVyOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRl
PGJvb2wgaXNDb252ZXJ0aWJsZVRvSW50ZWdlciwgdHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhy
ZWFkQ29waWVyQmFzZTsKLQotICAgIC8vIEludGVnZXJzIGdldCBwYXNzZWQgdGhyb3VnaCB3aXRo
b3V0IGFueSBjaGFuZ2VzLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1Ro
cmVhZENvcGllckJhc2U8dHJ1ZSwgVD4gOiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhy
b3VnaDxUPiB7Ci0gICAgfTsKLQotICAgIC8vIFBvaW50ZXJzIGdldCBwYXNzZWQgdGhyb3VnaCB3
aXRob3V0IGFueSBzaWduaWZpY2FudCBjaGFuZ2VzLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFQqPiA6IHB1YmxpYyBDcm9zc1Ro
cmVhZENvcGllclBhc3NUaHJvdWdoPFQqPiB7Ci0gICAgfTsKLQotICAgIC8vIEN1c3RvbSBjb3B5
IG1ldGhvZHMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29w
aWVyQmFzZTxmYWxzZSwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VD4gPiA+IHsKLSAgICAgICAg
dHlwZWRlZiBQYXNzUmVmUHRyPFQ+IFR5cGU7Ci0gICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29u
c3QgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VD4gPiYgcmVmUHRyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxUPihzdGF0aWNfY2FzdDxUKj4ocmVmUHRyLmdldCgp
KSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgc3RkOjphdXRvX3B0cjxUPiA+IHsKLSAgICAg
ICAgdHlwZWRlZiBzdGQ6OmF1dG9fcHRyPFQ+IFR5cGU7Ci0gICAgICAgIHN0YXRpYyBUeXBlIGNv
cHkoY29uc3Qgc3RkOjphdXRvX3B0cjxUPiYgYXV0b1B0cikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6YXV0b19wdHI8VD4oKmNvbnN0X2Nhc3Q8c3RkOjphdXRvX3B0cjxUPio+
KCZhdXRvUHRyKSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBTdHJpbmc+IHsKLSAgICAgICAgdHlwZWRlZiBT
dHJpbmcgVHlwZTsKLSAgICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBTdHJpbmcmKTsKLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNl
LCBSZXNvdXJjZUVycm9yPiB7Ci0gICAgICAgIHR5cGVkZWYgUmVzb3VyY2VFcnJvciBUeXBlOwot
ICAgICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAgICB9Owot
Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBSZXNv
dXJjZVJlcXVlc3Q+IHsKLSAgICAgICAgdHlwZWRlZiBzdGQ6OmF1dG9fcHRyPENyb3NzVGhyZWFk
UmVzb3VyY2VSZXF1ZXN0RGF0YT4gVHlwZTsKLSAgICAgICAgc3RhdGljIFR5cGUgY29weShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jv
c3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBSZXNvdXJjZVJlc3BvbnNlPiB7Ci0gICAgICAgIHR5
cGVkZWYgc3RkOjphdXRvX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPiBUeXBl
OwotICAgICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVy
IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyQmFzZTxXVEY6OklzQ29udmVydGlibGVUb0ludGVn
ZXI8VD46OnZhbHVlLCBUPiB7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCi0KLSNlbmRpZiAvLyBDcm9zc1RocmVhZENvcGllcl9o
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9HZW5lcmljV29ya2VyVGFzay5oIGIvV2ViQ29yZS9k
b20vR2VuZXJpY1dvcmtlclRhc2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZi
MGU3MC4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2RvbS9HZW5lcmljV29ya2VyVGFzay5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdlbmVyaWNXb3JrZXJUYXNrX2gKLSNk
ZWZpbmUgR2VuZXJpY1dvcmtlclRhc2tfaAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNs
dWRlICJDcm9zc1RocmVhZENvcGllci5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICAv
LyBUcmFpdHMgZm9yIHRoZSBHZW5lcmljV29ya2VyVGFzay4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHMgewotICAgICAgICB0eXBlZGVmIGNv
bnN0IFQmIFBhcmFtVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFQqPiB7Ci0gICAgICAgIHR5cGVkZWYgVCogUGFy
YW1UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgR2VuZXJp
Y1dvcmtlclRhc2tUcmFpdHM8c3RkOjphdXRvX3B0cjxUPiA+IHsKLSAgICAgICAgdHlwZWRlZiBz
dGQ6OmF1dG9fcHRyPFQ+IFBhcmFtVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFBhc3NSZWZQdHI8VD4gPiB7Ci0g
ICAgICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxUPiBQYXJhbVR5cGU7Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+Ci0gICAgY2xhc3MgR2VuZXJpY1dvcmtl
clRhc2sxIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgdHlwZWRlZiB2b2lkICgqTWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgTVAxKTsKLSAgICAgICAgdHlwZWRlZiBHZW5lcmljV29ya2VyVGFzazE8UDEsIE1QMT4gR2Vu
ZXJpY1dvcmtlclRhc2s7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRh
c2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOwotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEdlbmVyaWNXb3JrZXJUYXNrPiBjcmVhdGUoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFt
ZXRlcjEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJp
Y1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxKSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIEdlbmVyaWNXb3JrZXJUYXNrMShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFy
YW1ldGVyMSkKLSAgICAgICAgICAgIDogbV9tZXRob2QobWV0aG9kKQotICAgICAgICAgICAgLCBt
X3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQsIG1fcGFyYW1ldGVy
MSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1ldGhvZCBtX21ldGhvZDsK
LSAgICAgICAgUDEgbV9wYXJhbWV0ZXIxOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgotICAgIGNsYXNz
IEdlbmVyaWNXb3JrZXJUYXNrMiA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgdm9pZCAoKk1ldGhvZCkoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIE1QMSwgTVAyKTsKLSAgICAgICAgdHlwZWRlZiBHZW5lcmljV29ya2Vy
VGFzazI8UDEsIE1QMSwgUDIsIE1QMj4gR2VuZXJpY1dvcmtlclRhc2s7Ci0gICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0x
OwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAyPjo6
UGFyYW1UeXBlIFBhcmFtMjsKLQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljV29y
a2VyVGFzaz4gY3JlYXRlKE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIg
cGFyYW1ldGVyMikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBH
ZW5lcmljV29ya2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIpKTsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgR2VuZXJpY1dvcmtlclRhc2syKE1ldGhvZCBt
ZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKLSAgICAgICAgICAg
IDogbV9tZXRob2QobWV0aG9kKQotICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVy
MSkKLSAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCi0gICAgICAgIHsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICAoKm1fbWV0aG9kKShj
b250ZXh0LCBtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMik7Ci0gICAgICAgIH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIE1ldGhvZCBtX21ldGhvZDsKLSAgICAgICAgUDEgbV9wYXJhbWV0ZXIx
OwotICAgICAgICBQMiBtX3BhcmFtZXRlcjI7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1l
IFAzLCB0eXBlbmFtZSBNUDM+Ci0gICAgY2xhc3MgR2VuZXJpY1dvcmtlclRhc2szIDogcHVibGlj
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlw
ZWRlZiB2b2lkICgqTWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1Q
Myk7Ci0gICAgICAgIHR5cGVkZWYgR2VuZXJpY1dvcmtlclRhc2szPFAxLCBNUDEsIFAyLCBNUDIs
IFAzLCBNUDM+IEdlbmVyaWNXb3JrZXJUYXNrOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdl
bmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKLSAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJh
bTI7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDM+
OjpQYXJhbVR5cGUgUGFyYW0zOwotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNX
b3JrZXJUYXNrPiBjcmVhdGUoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFt
MiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljV29ya2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEs
IHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMpKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgR2VuZXJpY1dvcmtlclRhc2szKE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIx
LCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMpCi0gICAgICAgICAgICA6IG1f
bWV0aG9kKG1ldGhvZCkKLSAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCi0g
ICAgICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQotICAgICAgICAgICAgLCBtX3Bh
cmFtZXRlcjMocGFyYW1ldGVyMykKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQsIG1fcGFyYW1ldGVyMSwg
bV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICBNZXRob2QgbV9tZXRob2Q7Ci0gICAgICAgIFAxIG1fcGFyYW1ldGVyMTsKLSAgICAg
ICAgUDIgbV9wYXJhbWV0ZXIyOwotICAgICAgICBQMyBtX3BhcmFtZXRlcjM7Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBl
bmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFt
ZSBNUDQ+Ci0gICAgY2xhc3MgR2VuZXJpY1dvcmtlclRhc2s0IDogcHVibGljIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiB2b2lkICgq
TWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0KTsKLSAg
ICAgICAgdHlwZWRlZiBHZW5lcmljV29ya2VyVGFzazQ8UDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1Q
MywgUDQsIE1QND4gR2VuZXJpY1dvcmtlclRhc2s7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
R2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOwotICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBh
cmFtMjsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQ
Mz46OlBhcmFtVHlwZSBQYXJhbTM7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dv
cmtlclRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OwotCi0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEdlbmVyaWNXb3JrZXJUYXNrPiBjcmVhdGUoTWV0aG9kIG1ldGhvZCwgUGFyYW0x
IHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00
IHBhcmFtZXRlcjQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
R2VuZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0
ZXIzLCBwYXJhbWV0ZXI0KSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEdl
bmVyaWNXb3JrZXJUYXNrNChNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0y
IHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKLSAgICAg
ICAgICAgIDogbV9tZXRob2QobWV0aG9kKQotICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFy
YW1ldGVyMSkKLSAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCi0gICAgICAg
ICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQotICAgICAgICAgICAgLCBtX3BhcmFtZXRl
cjQocGFyYW1ldGVyNCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQsIG1fcGFyYW1ldGVyMSwgbV9wYXJh
bWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCk7Ci0gICAgICAgIH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIE1ldGhvZCBtX21ldGhvZDsKLSAgICAgICAgUDEgbV9wYXJhbWV0ZXIx
OwotICAgICAgICBQMiBtX3BhcmFtZXRlcjI7Ci0gICAgICAgIFAzIG1fcGFyYW1ldGVyMzsKLSAg
ICAgICAgUDQgbV9wYXJhbWV0ZXI0OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywg
dHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlw
ZW5hbWUgTVA1PgotICAgIGNsYXNzIEdlbmVyaWNXb3JrZXJUYXNrNSA6IHB1YmxpYyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgdm9p
ZCAoKk1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwg
TVA1KTsKLSAgICAgICAgdHlwZWRlZiBHZW5lcmljV29ya2VyVGFzazU8UDEsIE1QMSwgUDIsIE1Q
MiwgUDMsIE1QMywgUDQsIE1QNCwgUDUsIE1QNT4gR2VuZXJpY1dvcmtlclRhc2s7Ci0gICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUg
UGFyYW0xOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRz
PFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmlj
V29ya2VyVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7Ci0gICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00Owot
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFA1Pjo6UGFy
YW1UeXBlIFBhcmFtNTsKLQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljV29ya2Vy
VGFzaz4gY3JlYXRlKE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFy
YW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFy
YW1ldGVyNSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5l
cmljV29ya2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMs
IHBhcmFtZXRlcjQsIHBhcmFtZXRlcjUpKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgR2VuZXJpY1dvcmtlclRhc2s1KE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIx
LCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0
LCBQYXJhbTUgcGFyYW1ldGVyNSkKLSAgICAgICAgICAgIDogbV9tZXRob2QobWV0aG9kKQotICAg
ICAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKLSAgICAgICAgICAgICwgbV9wYXJh
bWV0ZXIyKHBhcmFtZXRlcjIpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIz
KQotICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKLSAgICAgICAgICAgICwg
bV9wYXJhbWV0ZXI1KHBhcmFtZXRlcjUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICAoKm1fbWV0aG9kKShjb250ZXh0LCBtX3BhcmFtZXRl
cjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQsIG1fcGFyYW1ldGVy
NSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1ldGhvZCBtX21ldGhvZDsK
LSAgICAgICAgUDEgbV9wYXJhbWV0ZXIxOwotICAgICAgICBQMiBtX3BhcmFtZXRlcjI7Ci0gICAg
ICAgIFAzIG1fcGFyYW1ldGVyMzsKLSAgICAgICAgUDQgbV9wYXJhbWV0ZXI0OwotICAgICAgICBQ
NSBtX3BhcmFtZXRlcjU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBl
bmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFt
ZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBN
UDUsIHR5cGVuYW1lIFA2LCB0eXBlbmFtZSBNUDY+Ci0gICAgY2xhc3MgR2VuZXJpY1dvcmtlclRh
c2s2IDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotICAgIHB1YmxpYzoK
LSAgICAgICAgdHlwZWRlZiB2b2lkICgqTWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
TVAxLCBNUDIsIE1QMywgTVA0LCBNUDUsIE1QNik7Ci0gICAgICAgIHR5cGVkZWYgR2VuZXJpY1dv
cmtlclRhc2s2PFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQsIFA1LCBNUDUsIFA2
LCBNUDY+IEdlbmVyaWNXb3JrZXJUYXNrOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVy
aWNXb3JrZXJUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKLSAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7
Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDM+OjpQ
YXJhbVR5cGUgUGFyYW0zOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJU
YXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQNT46OlBhcmFtVHlwZSBQYXJhbTU7Ci0gICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDY+OjpQYXJhbVR5cGUg
UGFyYW02OwotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNXb3JrZXJUYXNrPiBj
cmVhdGUoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIy
LCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1
LCBQYXJhbTYgcGFyYW1ldGVyNikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBHZW5lcmljV29ya2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIs
IHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQsIHBhcmFtZXRlcjUsIHBhcmFtZXRlcjYpKTsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgR2VuZXJpY1dvcmtlclRhc2s2KE1ldGhvZCBt
ZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFt
ZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSwgUGFyYW02IHBhcmFt
ZXRlcjYpCi0gICAgICAgICAgICA6IG1fbWV0aG9kKG1ldGhvZCkKLSAgICAgICAgICAgICwgbV9w
YXJhbWV0ZXIxKHBhcmFtZXRlcjEpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0
ZXIyKQotICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKLSAgICAgICAgICAg
ICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVyNShw
YXJhbWV0ZXI1KQotICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjYocGFyYW1ldGVyNikKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgICgqbV9t
ZXRob2QpKGNvbnRleHQsIG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMs
IG1fcGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1LCBtX3BhcmFtZXRlcjYpOwotICAgICAgICB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBNZXRob2QgbV9tZXRob2Q7Ci0gICAgICAgIFAxIG1fcGFy
YW1ldGVyMTsKLSAgICAgICAgUDIgbV9wYXJhbWV0ZXIyOwotICAgICAgICBQMyBtX3BhcmFtZXRl
cjM7Ci0gICAgICAgIFA0IG1fcGFyYW1ldGVyNDsKLSAgICAgICAgUDUgbV9wYXJhbWV0ZXI1Owot
ICAgICAgICBQNiBtX3BhcmFtZXRlcjY7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAz
LCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0
eXBlbmFtZSBNUDUsIHR5cGVuYW1lIFA2LCB0eXBlbmFtZSBNUDYsIHR5cGVuYW1lIFA3LCB0eXBl
bmFtZSBNUDc+Ci0gICAgY2xhc3MgR2VuZXJpY1dvcmtlclRhc2s3IDogcHVibGljIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiB2b2lk
ICgqTWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0LCBN
UDUsIE1QNiwgTVA3KTsKLSAgICAgICAgdHlwZWRlZiBHZW5lcmljV29ya2VyVGFzazc8UDEsIE1Q
MSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QNCwgUDUsIE1QNSwgUDYsIE1QNiwgUDcsIE1QNz4g
R2VuZXJpY1dvcmtlclRhc2s7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtl
clRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOwotICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKLSAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMz46OlBhcmFtVHlw
ZSBQYXJhbTM7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFp
dHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVy
aWNXb3JrZXJUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBhcmFtNTsKLSAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQNj46OlBhcmFtVHlwZSBQYXJhbTY7
Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDc+OjpQ
YXJhbVR5cGUgUGFyYW03OwotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNXb3Jr
ZXJUYXNrPiBjcmVhdGUoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBw
YXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBw
YXJhbWV0ZXI1LCBQYXJhbTYgcGFyYW1ldGVyNiwgUGFyYW03IHBhcmFtZXRlcjcpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1dvcmtlclRhc2sobWV0
aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJh
bWV0ZXI1LCBwYXJhbWV0ZXI2LCBwYXJhbWV0ZXI3KSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIEdlbmVyaWNXb3JrZXJUYXNrNyhNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFy
YW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFy
YW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUsIFBhcmFtNiBwYXJhbWV0ZXI2LCBQYXJhbTcgcGFy
YW1ldGVyNykKLSAgICAgICAgICAgIDogbV9tZXRob2QobWV0aG9kKQotICAgICAgICAgICAgLCBt
X3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKLSAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFt
ZXRlcjIpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQotICAgICAgICAg
ICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKLSAgICAgICAgICAgICwgbV9wYXJhbWV0ZXI1
KHBhcmFtZXRlcjUpCi0gICAgICAgICAgICAsIG1fcGFyYW1ldGVyNihwYXJhbWV0ZXI2KQotICAg
ICAgICAgICAgLCBtX3BhcmFtZXRlcjcocGFyYW1ldGVyNykKLSAgICAgICAgewotICAgICAgICB9
Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQs
IG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwg
bV9wYXJhbWV0ZXI1LCBtX3BhcmFtZXRlcjYsIG1fcGFyYW1ldGVyNyk7Ci0gICAgICAgIH0KLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIE1ldGhvZCBtX21ldGhvZDsKLSAgICAgICAgUDEgbV9wYXJh
bWV0ZXIxOwotICAgICAgICBQMiBtX3BhcmFtZXRlcjI7Ci0gICAgICAgIFAzIG1fcGFyYW1ldGVy
MzsKLSAgICAgICAgUDQgbV9wYXJhbWV0ZXI0OwotICAgICAgICBQNSBtX3BhcmFtZXRlcjU7Ci0g
ICAgICAgIFA2IG1fcGFyYW1ldGVyNjsKLSAgICAgICAgUDcgbV9wYXJhbWV0ZXI3OwotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgotICAgIFBhc3NSZWZQ
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlQ2FsbGJhY2tUYXNrKAotICAg
ICAgICB2b2lkICgqbWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxKSwKLSAgICAg
ICAgY29uc3QgUDEmIHBhcmFtZXRlcjEpCi0gICAgewotICAgICAgICByZXR1cm4gR2VuZXJpY1dv
cmtlclRhc2sxPHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxPjo6Y3Jl
YXRlKAotICAgICAgICAgICAgbWV0aG9kLAotICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDE+Ojpjb3B5KHBhcmFtZXRlcjEpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgotICAgIFBhc3NSZWZQ
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlQ2FsbGJhY2tUYXNrKAotICAg
ICAgICB2b2lkICgqbWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIpLAot
ICAgICAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwgY29uc3QgUDImIHBhcmFtZXRlcjIpCi0gICAg
ewotICAgICAgICByZXR1cm4gR2VuZXJpY1dvcmtlclRhc2syPHR5cGVuYW1lIENyb3NzVGhyZWFk
Q29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5
cGUsIE1QMj46OmNyZWF0ZSgKLSAgICAgICAgICAgIG1ldGhvZCwKLSAgICAgICAgICAgIENyb3Nz
VGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+
Ojpjb3B5KHBhcmFtZXRlcjIpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwg
dHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlw
ZW5hbWUgTVAzPgotICAgIFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4g
Y3JlYXRlQ2FsbGJhY2tUYXNrKAotICAgICAgICB2b2lkICgqbWV0aG9kKShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMyksCi0gICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIx
LCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29uc3QgUDMmIHBhcmFtZXRlcjMpCi0gICAgewotICAg
ICAgICByZXR1cm4gR2VuZXJpY1dvcmtlclRhc2szPHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVy
PFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1Q
MiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDM+OjpjcmVhdGUoCi0g
ICAgICAgICAgICBtZXRob2QsCi0gICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNv
cHkocGFyYW1ldGVyMSksIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwK
LSAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUg
UDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQs
IHR5cGVuYW1lIE1QND4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKLSAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCksCi0gICAgICAgIGNvbnN0IFAxJiBw
YXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29uc3QgUDMmIHBhcmFtZXRlcjMsIGNv
bnN0IFA0JiBwYXJhbWV0ZXI0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdlbmVyaWNXb3JrZXJU
YXNrNDx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29w
aWVyPFAzPjo6VHlwZSwgTVAzLAotICAgICAgICAgICAgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDQ+OjpUeXBlLCBNUDQ+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgbWV0aG9kLAotICAg
ICAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAotICAgICAgICAgICAgICAgIENy
b3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywg
dHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlw
ZW5hbWUgTVA1PgotICAgIFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4g
Y3JlYXRlQ2FsbGJhY2tUYXNrKAotICAgICAgICB2b2lkICgqbWV0aG9kKShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpLAotICAgICAgICBjb25zdCBQMSYg
cGFyYW1ldGVyMSwgY29uc3QgUDImIHBhcmFtZXRlcjIsIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLCBj
b25zdCBQNCYgcGFyYW1ldGVyNCwgY29uc3QgUDUmIHBhcmFtZXRlcjUpCi0gICAgewotICAgICAg
ICByZXR1cm4gR2VuZXJpY1dvcmtlclRhc2s1PHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAx
Pjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMsCi0gICAgICAgICAgICB0
eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QNCwgdHlwZW5hbWUgQ3Jvc3NU
aHJlYWRDb3BpZXI8UDU+OjpUeXBlLCBNUDU+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgbWV0
aG9kLAotICAgICAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0
ZXIxKSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAotICAgICAgICAg
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAotICAgICAgICAgICAgICAgIENyb3NzVGhy
ZWFkQ29waWVyPFA1Pjo6Y29weShwYXJhbWV0ZXI1KSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlw
ZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5h
bWUgUDUsIHR5cGVuYW1lIE1QNSwgdHlwZW5hbWUgUDYsIHR5cGVuYW1lIE1QNj4KLSAgICBQYXNz
UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygK
LSAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAy
LCBNUDMsIE1QNCwgTVA1LCBNUDYpLAotICAgICAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwgY29u
c3QgUDImIHBhcmFtZXRlcjIsIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLCBjb25zdCBQNCYgcGFyYW1l
dGVyNCwgY29uc3QgUDUmIHBhcmFtZXRlcjUsIGNvbnN0IFA2JiBwYXJhbWV0ZXI2KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEdlbmVyaWNXb3JrZXJUYXNrNjx0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBl
LCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzLAotICAgICAg
ICAgICAgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5cGVuYW1l
IENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwgTVA1LCB0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQNj46OlR5cGUsIE1QNj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBtZXRob2QsCi0g
ICAgICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLCBD
cm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCi0gICAgICAgICAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLCBDcm9zc1RocmVhZENvcGll
cjxQND46OmNvcHkocGFyYW1ldGVyNCksCi0gICAgICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDU+Ojpjb3B5KHBhcmFtZXRlcjUpLCBDcm9zc1RocmVhZENvcGllcjxQNj46OmNvcHkocGFy
YW1ldGVyNikpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBN
UDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMs
IHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDUsIHR5
cGVuYW1lIFA2LCB0eXBlbmFtZSBNUDYsIHR5cGVuYW1lIFA3LCB0eXBlbmFtZSBNUDc+Ci0gICAg
UGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGVDYWxsYmFja1Rh
c2soCi0gICAgICAgIHZvaWQgKCptZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEs
IE1QMiwgTVAzLCBNUDQsIE1QNSwgTVA2LCBNUDcpLAotICAgICAgICBjb25zdCBQMSYgcGFyYW1l
dGVyMSwgY29uc3QgUDImIHBhcmFtZXRlcjIsIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLCBjb25zdCBQ
NCYgcGFyYW1ldGVyNCwgY29uc3QgUDUmIHBhcmFtZXRlcjUsIGNvbnN0IFA2JiBwYXJhbWV0ZXI2
LCBjb25zdCBQNyYgcGFyYW1ldGVyNykKLSAgICB7Ci0gICAgICAgIHJldHVybiBHZW5lcmljV29y
a2VyVGFzazc8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVu
YW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVh
ZENvcGllcjxQMz46OlR5cGUsIE1QMywKLSAgICAgICAgICAgIHR5cGVuYW1lIENyb3NzVGhyZWFk
Q29waWVyPFA0Pjo6VHlwZSwgTVA0LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNT46OlR5
cGUsIE1QNSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDY+OjpUeXBlLCBNUDYsCi0gICAg
ICAgICAgICB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNz46OlR5cGUsIE1QNz46OmNyZWF0
ZSgKLSAgICAgICAgICAgICAgICBtZXRob2QsCi0gICAgICAgICAgICAgICAgQ3Jvc3NUaHJlYWRD
b3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLCBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHko
cGFyYW1ldGVyMiksCi0gICAgICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5
KHBhcmFtZXRlcjMpLCBDcm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1ldGVyNCksCi0g
ICAgICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+Ojpjb3B5KHBhcmFtZXRlcjUpLCBD
cm9zc1RocmVhZENvcGllcjxQNj46OmNvcHkocGFyYW1ldGVyNiksCi0gICAgICAgICAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDc+Ojpjb3B5KHBhcmFtZXRlcjcpKTsKLSAgICB9Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi0jZW5kaWYg
Ly8gR2VuZXJpY1dvcmtlclRhc2tfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vV29ya2VyLmNw
cCBiL1dlYkNvcmUvZG9tL1dvcmtlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDBiYzlkYTIuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9kb20vV29ya2VyLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDIxMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJXb3JrZXIuaCIKLQotI2luY2x1ZGUg
IkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRvY0xv
YWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24u
aCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgot
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCi0jaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJXb3JrZXJDb250ZXh0UHJveHkuaCIKLSNpbmNsdWRl
ICJXb3JrZXJUaHJlYWQuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLVdvcmtlcjo6V29ya2VyKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLSAgICA6IEFjdGl2
ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQotICAgICwgbV9jb250ZXh0UHJveHkoV29ya2VyQ29u
dGV4dFByb3h5OjpjcmVhdGUodGhpcykpCi17Ci0gICAgbV9zY3JpcHRVUkwgPSBjb250ZXh0LT5j
b21wbGV0ZVVSTCh1cmwpOwotICAgIGlmICh1cmwuaXNFbXB0eSgpIHx8ICFtX3NjcmlwdFVSTC5p
c1ZhbGlkKCkpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCFjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3MoU2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZShtX3NjcmlwdFVSTCkuZ2V0KCkpKSB7Ci0gICAgICAgIGVjID0g
U0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6ICdp
bmhlcml0JyBjaGFyc2V0IGFuZCBhY3R1YWwgbG9hZGluZyBzdXBwb3J0IGZyb20gb3JpZ2luYWwg
ZG9jdW1lbnQgdG8gZW5hYmxlIG5lc3RlZCB3b3JrZXJzLgotICAgIEFTU0VSVChzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotCi0gICAg
bV9jYWNoZWRTY3JpcHQgPSBkb2N1bWVudC0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQobV9z
Y3JpcHRVUkwsIGRvY3VtZW50LT5jaGFyc2V0KCkpOwotICAgIGlmICghbV9jYWNoZWRTY3JpcHQp
IHsKLSAgICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7ICAvLyBUaGUgd29ya2VyIGNvbnRleHQg
ZG9lcyBub3QgZXhpc3Qgd2hpbGUgbG9hZGluZywgc28gd2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUg
d29ya2VyIG9iamVjdCBpcyBub3QgY29sbGVjdGVkLCBhcyB3ZWxsIGFzIGl0cyBldmVudCBsaXN0
ZW5lcnMuCi0gICAgbV9jYWNoZWRTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsKLX0KLQotV29ya2Vy
Ojp+V29ya2VyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOyAvLyBUaGUgY29udGV4dCBpcyBwcm90ZWN0ZWQgYnkg
d29ya2VyIGNvbnRleHQgcHJveHksIHNvIGl0IGNhbm5vdCBiZSBkZXN0cm95ZWQgd2hpbGUgYSBX
b3JrZXIgZXhpc3RzLgotICAgIG1fY29udGV4dFByb3h5LT53b3JrZXJPYmplY3REZXN0cm95ZWQo
KTsKLX0KLQotdm9pZCBXb3JrZXI6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
LXsKLSAgICBtX2NvbnRleHRQcm94eS0+cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQobWVzc2Fn
ZSk7Ci19Ci0KLXZvaWQgV29ya2VyOjp0ZXJtaW5hdGUoKQotewotICAgIG1fY29udGV4dFByb3h5
LT50ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCk7Ci19Ci0KLWJvb2wgV29ya2VyOjpjYW5TdXNwZW5k
KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSXQgaXMgbm90IGN1cnJlbnRseSBwb3NzaWJsZSB0
byBzdXNwZW5kIGEgd29ya2VyLCBzbyBwYWdlcyB3aXRoIHdvcmtlcnMgY2FuIG5vdCBnbyBpbnRv
IHBhZ2UgY2FjaGUuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdvcmtlcjo6c3RvcCgp
Ci17Ci0gICAgdGVybWluYXRlKCk7Ci19Ci0KLWJvb2wgV29ya2VyOjpoYXNQZW5kaW5nQWN0aXZp
dHkoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRleHRQcm94eS0+aGFzUGVuZGluZ0FjdGl2
aXR5KCkgfHwgQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKTsKLX0KLQotdm9p
ZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiB1bnVzZWRSZXNvdXJjZSkK
LXsKLSAgICBBU1NFUlRfVU5VU0VEKHVudXNlZFJlc291cmNlLCB1bnVzZWRSZXNvdXJjZSA9PSBt
X2NhY2hlZFNjcmlwdCk7Ci0KLSAgICBpZiAobV9jYWNoZWRTY3JpcHQtPmVycm9yT2NjdXJyZWQo
KSkKLSAgICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2Nv
bnRleHRQcm94eS0+c3RhcnRXb3JrZXJDb250ZXh0KG1fc2NyaXB0VVJMLCBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPnVzZXJBZ2VudChtX3NjcmlwdFVSTCksIG1fY2FjaGVkU2NyaXB0LT5zY3Jp
cHQoKSk7Ci0KLSAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIG1f
Y2FjaGVkU2NyaXB0ID0gMDsKLQotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwotfQot
Ci12b2lkIFdvcmtlcjo6ZGlzcGF0Y2hFcnJvckV2ZW50KCkKLXsKLSAgICBSZWZQdHI8RXZlbnQ+
IGV2dCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCB0cnVl
KTsKLSAgICBpZiAobV9vbkVycm9yTGlzdGVuZXIpIHsKLSAgICAgICAgZXZ0LT5zZXRUYXJnZXQo
dGhpcyk7Ci0gICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICAgICAgbV9v
bkVycm9yTGlzdGVuZXItPmhhbmRsZUV2ZW50KGV2dC5nZXQoKSwgdHJ1ZSk7Ci0gICAgfQotCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgp
LCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KLXZvaWQgV29ya2VyOjphZGRFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKLSAgICBpZiAoaXRl
ciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7Ci0gICAgICAgIExpc3RlbmVyVmVjdG9yIGxp
c3RlbmVyczsKLSAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKLSAgICAg
ICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7Ci0g
ICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3Rl
bmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVy
SXRlcikgewotICAgICAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGxp
c3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMu
YWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKLSAgICB9ICAgIAotfQotCi12b2lkIFdvcmtlcjo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRM
aXN0ZW5lciogZXZlbnRMaXN0ZW5lciwgYm9vbCkKLXsKLSAgICBFdmVudExpc3RlbmVyc01hcDo6
aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwotICAgIGlm
IChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOwotICAgIGZvciAo
TGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5i
ZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikg
ewotICAgICAgICBpZiAoKmxpc3RlbmVySXRlciA9PSBldmVudExpc3RlbmVyKSB7Ci0gICAgICAg
ICAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVySXRlciAtIGxpc3RlbmVycy5iZWdpbigpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBXb3JrZXI6
OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIGlmICghZXZlbnQgfHwgZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgZWMgPSBFdmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyc0Nv
cHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgpKTsKLSAgICBmb3IgKExpc3Rl
bmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnNDb3B5LmJl
Z2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnNDb3B5LmVuZCgpOyArK2xpc3RlbmVySXRl
cikgewotICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgICAgICBldmVudC0+c2V0
Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICAgICAgbGlzdGVuZXJJdGVyLT5nZXQoKS0+aGFuZGxl
RXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gIWV2ZW50LT5k
ZWZhdWx0UHJldmVudGVkKCk7Ci19Ci0KLXZvaWQgV29ya2VyOjpkaXNwYXRjaE1lc3NhZ2UoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2
ZW50OjpjcmVhdGUobWVzc2FnZSwgIiIsICIiLCAwLCAwKTsKLQotICAgIGlmIChtX29uTWVzc2Fn
ZUxpc3RlbmVyLmdldCgpKSB7Ci0gICAgICAgIGV2dC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgICAg
ICBldnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAgICAgIG1fb25NZXNzYWdlTGlzdGVu
ZXItPmhhbmRsZUV2ZW50KGV2dC5nZXQoKSwgZmFsc2UpOwotICAgIH0KLQotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGRpc3BhdGNoRXZlbnQoZXZ0LnJlbGVhc2UoKSwgZWMpOwotICAg
IEFTU0VSVCghZWMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1dvcmtlci5oIGIvV2ViQ29y
ZS9kb20vV29ya2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNWY5ZDUuLjAw
MDAwMDAKLS0tIGEvV2ViQ29yZS9kb20vV29ya2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICoKLSAqLwotCi0jaWZuZGVmIFdvcmtlcl9oCi0jZGVmaW5lIFdvcmtlcl9o
Ci0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIK
LSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNs
aWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgQ2FjaGVkUmVzb3Vy
Y2U7Ci0gICAgY2xhc3MgQ2FjaGVkU2NyaXB0OwotICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7Ci0gICAgY2xhc3MgU3RyaW5nOwotICAgIGNsYXNzIFdvcmtlckNvbnRleHRQcm94eTsK
LQotICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLSAgICBjbGFzcyBXb3JrZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxXb3JrZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwcml2YXRl
IENhY2hlZFJlc291cmNlQ2xpZW50LCBwdWJsaWMgRXZlbnRUYXJnZXQgewotICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1
cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyKHVybCwgY29udGV4dCwgZWMpKTsgfQotICAgICAg
ICB+V29ya2VyKCk7Ci0KLSAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLQotICAgICAgICB2aXJ0dWFsIFdvcmtlciogdG9X
b3JrZXIoKSB7IHJldHVybiB0aGlzOyB9Ci0KLSAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpOwotCi0gICAgICAgIHZvaWQgdGVybWluYXRlKCk7Ci0KLSAgICAg
ICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHZvaWQgZGlz
cGF0Y2hFcnJvckV2ZW50KCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBj
b25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKLSAgICAgICAgdmlydHVhbCBib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGRF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICAgICAgdHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4gTGlzdGVuZXJWZWN0b3I7Ci0gICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3RlbmVyVmVjdG9yPiBFdmVudExpc3Rl
bmVyc01hcDsKLSAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyBy
ZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQotCi0gICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8V29y
a2VyPjo6cmVmOwotICAgICAgICB1c2luZyBSZWZDb3VudGVkPFdvcmtlcj46OmRlcmVmOwotCi0g
ICAgICAgIHZvaWQgc2V0T25tZXNzYWdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikgeyBtX29uTWVzc2FnZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgICAg
ICBFdmVudExpc3RlbmVyKiBvbm1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX29uTWVzc2FnZUxp
c3RlbmVyLmdldCgpOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRPbmVycm9yKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uRXJyb3JMaXN0ZW5lciA9IGV2ZW50TGlz
dGVuZXI7IH0KLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJu
IG1fb25FcnJvckxpc3RlbmVyLmdldCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBXb3Jr
ZXIoY29uc3QgU3RyaW5nJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2Uq
KTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9Ci0KLSAg
ICAgICAgS1VSTCBtX3NjcmlwdFVSTDsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
aGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKLQotICAgICAgICBXb3JrZXJDb250ZXh0UHJveHkq
IG1fY29udGV4dFByb3h5OyAvLyBUaGUgcHJveHkgb3V0bGl2ZXMgdGhlIHdvcmtlciB0byBwZXJm
b3JtIHRocmVhZCBzaHV0ZG93bi4KLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9v
bk1lc3NhZ2VMaXN0ZW5lcjsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25FcnJv
ckxpc3RlbmVyOwotICAgICAgICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVuZXJzOwot
ICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JL
RVJTKQotCi0jZW5kaWYgLy8gV29ya2VyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1dvcmtl
ci5pZGwgYi9XZWJDb3JlL2RvbS9Xb3JrZXIuaWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyZWY5YjYyLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvZG9tL1dvcmtlci5pZGwKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICovCi0KLW1vZHVsZSB0aHJlYWRzIHsK
LQotICAgIGludGVyZmFjZSBbQ3VzdG9tTWFya0Z1bmN0aW9uLCBDb25kaXRpb25hbD1XT1JLRVJT
XSBXb3JrZXIgewotCi0gICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7Ci0g
ICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubWVzc2FnZTsKLSAgICAgICAgdm9pZCBw
b3N0TWVzc2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSk7Ci0KLSAgICAgICAgdm9pZCB0ZXJtaW5h
dGUoKTsKLQotICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKLSAgICAgICAgW0N1c3Rv
bV0gdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0
dXJlKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0
cmluZyB0eXBlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKLSAgICAgICAgYm9vbGVhbiBkaXNw
YXRjaEV2ZW50KGluIEV2ZW50IGV2dCkKLSAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlv
bik7Ci0gICAgfTsKLQotfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5j
cHAgYi9XZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTI5YThlNC4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJXb3JrZXJD
b250ZXh0LmgiCi0KLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01U
aW1lci5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5j
bHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5j
bHVkZSAiV29ya2VyTG9jYXRpb24uaCIKLSNpbmNsdWRlICJXb3JrZXJOYXZpZ2F0b3IuaCIKLSNp
bmNsdWRlICJXb3JrZXJPYmplY3RQcm94eS5oIgotI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Xb3JrZXJD
b250ZXh0OjpXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2Vy
QWdlbnQsIFdvcmtlclRocmVhZCogdGhyZWFkKQotICAgIDogbV91cmwodXJsKQotICAgICwgbV91
c2VyQWdlbnQodXNlckFnZW50KQotICAgICwgbV9sb2NhdGlvbihXb3JrZXJMb2NhdGlvbjo6Y3Jl
YXRlKHVybCkpCi0gICAgLCBtX3NjcmlwdChuZXcgV29ya2VyU2NyaXB0Q29udHJvbGxlcih0aGlz
KSkKLSAgICAsIG1fdGhyZWFkKHRocmVhZCkKLXsKLSAgICBzZXRTZWN1cml0eU9yaWdpbihTZWN1
cml0eU9yaWdpbjo6Y3JlYXRlKHVybCkpOwotfQotCi1Xb3JrZXJDb250ZXh0Ojp+V29ya2VyQ29u
dGV4dCgpCi17Ci0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZC0+dGhyZWFk
SUQoKSk7Ci0KLSAgICBtX3RocmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKS0+d29ya2VyQ29udGV4
dERlc3Ryb3llZCgpOwotfQotCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBXb3JrZXJDb250ZXh0
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29uc3RfY2Fz
dDxXb3JrZXJDb250ZXh0Kj4odGhpcyk7Ci19Ci0KLWNvbnN0IEtVUkwmIFdvcmtlckNvbnRleHQ6
OnZpcnR1YWxVUkwoKSBjb25zdAotewotICAgIHJldHVybiBtX3VybDsKLX0KLQotS1VSTCBXb3Jr
ZXJDb250ZXh0Ojp2aXJ0dWFsQ29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGNvbXBsZXRlVVJMKHVybCk7Ci19Ci0KLUtVUkwgV29ya2VyQ29udGV4dDo6
Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0Ci17Ci0gICAgLy8gQWx3YXlzIHJl
dHVybiBhIG51bGwgVVJMIHdoZW4gcGFzc2VkIGEgbnVsbCBzdHJpbmcuCi0gICAgLy8gRklYTUU6
IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIEtVUkwgY29uc3RydWN0b3IgdG8gaGF2ZSB0aGlzIGJlaGF2
aW9yPwotICAgIGlmICh1cmwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBLVVJMKCk7Ci0gICAg
Ly8gRklYTUU6IGRvZXMgdGhpcyBuZWVkIHRvIHByb3ZpZGUgYSBjaGFyc2V0LCBsaWtlIERvY3Vt
ZW50Ojpjb21wbGV0ZVVSTCBkb2VzPwotICAgIHJldHVybiBLVVJMKG1fbG9jYXRpb24tPnVybCgp
LCB1cmwpOwotfQotCi1TdHJpbmcgV29ya2VyQ29udGV4dDo6dXNlckFnZW50KGNvbnN0IEtVUkwm
KSBjb25zdAotewotICAgIHJldHVybiBtX3VzZXJBZ2VudDsKLX0KLQotV29ya2VyTmF2aWdhdG9y
KiBXb3JrZXJDb250ZXh0OjpuYXZpZ2F0b3IoKSBjb25zdAotewotICAgIGlmICghbV9uYXZpZ2F0
b3IpCi0gICAgICAgIG1fbmF2aWdhdG9yID0gV29ya2VyTmF2aWdhdG9yOjpjcmVhdGUobV91c2Vy
QWdlbnQpOwotICAgIHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsKLX0KLQotYm9vbCBXb3JrZXJD
b250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIEFjdGl2ZURPTU9iamVj
dHNNYXAmIGFjdGl2ZU9iamVjdHMgPSBhY3RpdmVET01PYmplY3RzKCk7Ci0gICAgQWN0aXZlRE9N
T2JqZWN0c01hcDo6Y29uc3RfaXRlcmF0b3IgYWN0aXZlT2JqZWN0c0VuZCA9IGFjdGl2ZU9iamVj
dHMuZW5kKCk7Ci0gICAgZm9yIChBY3RpdmVET01PYmplY3RzTWFwOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gYWN0aXZlT2JqZWN0cy5iZWdpbigpOyBpdGVyICE9IGFjdGl2ZU9iamVjdHNFbmQ7ICsr
aXRlcikgewotICAgICAgICBpZiAoaXRlci0+Zmlyc3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBXb3JrZXJDb250ZXh0OjpyZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKLXsKLSAgICBt
X3RocmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKS0+cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0
KGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKLX0KLQotdm9pZCBXb3JrZXJD
b250ZXh0OjphZGRNZXNzYWdlKE1lc3NhZ2VEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgTWVzc2Fn
ZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKLXsKLSAgICBt
X3RocmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKS0+cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJP
YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNv
dXJjZVVSTCk7Ci19Ci0KLXZvaWQgV29ya2VyQ29udGV4dDo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhN
TEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIGNvbnN0IFNjcmlwdFN0cmluZyYpCi17Ci0gICAg
Ly8gRklYTUU6IFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBwZW5kaW5nIHRoZSBmaXhlcyBpbiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxNzUKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFdvcmtlckNvbnRleHQ6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICBtX3RocmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKS0+cG9zdE1l
c3NhZ2VUb1dvcmtlck9iamVjdChtZXNzYWdlKTsKLX0KLQotdm9pZCBXb3JrZXJDb250ZXh0Ojph
ZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAgRXZlbnRMaXN0ZW5l
cnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsK
LSAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7Ci0gICAgICAgIExpc3Rl
bmVyVmVjdG9yIGxpc3RlbmVyczsKLSAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3Rl
bmVyKTsKLSAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVy
LT5zZWNvbmQ7Ci0gICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVy
SXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgp
OyArK2xpc3RlbmVySXRlcikgewotICAgICAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZl
bnRMaXN0ZW5lcikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIG1fZXZl
bnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKLSAgICB9ICAgIAotfQotCi12
b2lkIFdvcmtlckNvbnRleHQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAg
RXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQo
ZXZlbnRUeXBlKTsKLSAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXIt
PnNlY29uZDsKLSAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5l
ckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQo
KTsgKytsaXN0ZW5lckl0ZXIpIHsKLSAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRM
aXN0ZW5lcikgewotICAgICAgICAgICAgbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lckl0ZXIgLSBs
aXN0ZW5lcnMuYmVnaW4oKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLWJvb2wgV29ya2VyQ29udGV4dDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFldmVudCB8fCBldmVudC0+
dHlwZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBlYyA9IEV2ZW50RXhjZXB0aW9uOjpVTlNQRUNJ
RklFRF9FVkVOVF9UWVBFX0VSUjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAot
ICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChl
dmVudC0+dHlwZSgpKTsKLSAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBs
aXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0
ZW5lcnNDb3B5LmVuZCgpOyArK2xpc3RlbmVySXRlcikgewotICAgICAgICBldmVudC0+c2V0VGFy
Z2V0KHRoaXMpOwotICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICAg
ICAgbGlzdGVuZXJJdGVyLT5nZXQoKS0+aGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwotfQot
Ci12b2lkIFdvcmtlckNvbnRleHQ6OnBvc3RUYXNrKFBhc3NSZWZQdHI8VGFzaz4gdGFzaykKLXsK
LSAgICB0aHJlYWQoKS0+cnVuTG9vcCgpLnBvc3RUYXNrKHRhc2spOwotfQotCi1pbnQgV29ya2Vy
Q29udGV4dDo6aW5zdGFsbFRpbWVvdXQoU2NoZWR1bGVkQWN0aW9uKiBhY3Rpb24sIGludCB0aW1l
b3V0LCBib29sIHNpbmdsZVNob3QpCi17Ci0gICAgcmV0dXJuIERPTVRpbWVyOjppbnN0YWxsKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYWN0aW9uLCB0aW1lb3V0LCBzaW5nbGVTaG90KTsKLX0K
LQotdm9pZCBXb3JrZXJDb250ZXh0OjpyZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpCi17Ci0g
ICAgRE9NVGltZXI6OnJlbW92ZUJ5SWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aW1lb3V0
SWQpOwotfQotCi12b2lkIFdvcmtlckNvbnRleHQ6OmRpc3BhdGNoTWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNy
ZWF0ZShtZXNzYWdlLCAiIiwgIiIsIDAsIDApOwotCi0gICAgaWYgKG1fb25tZXNzYWdlTGlzdGVu
ZXIuZ2V0KCkpIHsKLSAgICAgICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGV2dC0+
c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICAgICAgbV9vbm1lc3NhZ2VMaXN0ZW5lci0+aGFu
ZGxlRXZlbnQoZXZ0LmdldCgpLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBlYyk7Ci0gICAgQVNTRVJU
KCFlYyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShX
T1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5oIGIvV2ViQ29y
ZS9kb20vV29ya2VyQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTRl
MTNhLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvZG9tL1dvcmtlckNvbnRleHQuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICovCi0KLSNpZm5kZWYgV29ya2VyQ29udGV4
dF9oCi0jZGVmaW5lIFdvcmtlckNvbnRleHRfaAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNp
bmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgot
I2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgotI2luY2x1ZGUgIldvcmtlclNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0gICAgY2xhc3MgU2NoZWR1bGVkQWN0aW9uOwotICAgIGNsYXNzIFdvcmtlckxvY2F0aW9u
OwotICAgIGNsYXNzIFdvcmtlck5hdmlnYXRvcjsKLSAgICBjbGFzcyBXb3JrZXJUaHJlYWQ7Ci0K
LSAgICBjbGFzcyBXb3JrZXJDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyQ29udGV4
dD4sIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0LCBwdWJsaWMgRXZlbnRUYXJnZXQgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4gY3Jl
YXRlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdvcmtlclRocmVh
ZCogdGhyZWFkKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdv
cmtlckNvbnRleHQodXJsLCB1c2VyQWdlbnQsIHRocmVhZCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdmlydHVhbCB+V29ya2VyQ29udGV4dCgpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1dv
cmtlckNvbnRleHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgdmlydHVhbCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7Ci0K
LSAgICAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KLSAgICAg
ICAgS1VSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmKSBjb25zdDsKLQotICAgICAgICB2aXJ0
dWFsIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgS1VSTCYpIGNvbnN0OwotCi0gICAgICAgIFdvcmtl
ckxvY2F0aW9uKiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24uZ2V0KCk7IH0K
LSAgICAgICAgV29ya2VyTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSBjb25zdDsKLQotICAgICAgICBX
b3JrZXJTY3JpcHRDb250cm9sbGVyKiBzY3JpcHQoKSB7IHJldHVybiBtX3NjcmlwdC5nZXQoKTsg
fQotICAgICAgICB2b2lkIGNsZWFyU2NyaXB0KCkgeyByZXR1cm4gbV9zY3JpcHQuY2xlYXIoKTsg
fQotICAgICAgICBXb3JrZXJUaHJlYWQqIHRocmVhZCgpIHsgcmV0dXJuIG1fdGhyZWFkOyB9Ci0K
LSAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgYWRkTWVzc2FnZShNZXNzYWdlRGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VM
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVJldHJpZXZl
ZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRT
dHJpbmcmIHNvdXJjZVN0cmluZyk7Ci0KLSAgICAgICAgdmlydHVhbCBXb3JrZXJDb250ZXh0KiB0
b1dvcmtlckNvbnRleHQoKSB7IHJldHVybiB0aGlzOyB9Ci0KLSAgICAgICAgdm9pZCBwb3N0TWVz
c2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRh
c2soUGFzc1JlZlB0cjxUYXNrPik7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRleHQncyB0
aHJlYWQgYXN5bmNocm9ub3VzbHkuCi0KLSAgICAgICAgaW50IGluc3RhbGxUaW1lb3V0KFNjaGVk
dWxlZEFjdGlvbiosIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpOwotICAgICAgICB2b2lk
IHJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCk7Ci0KLSAgICAgICAgdm9pZCBkaXNwYXRjaE1l
c3NhZ2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVu
dExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwg
Ym9vbCB1c2VDYXB0dXJlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgICAgICB2b2lkIHNldE9ubWVz
c2FnZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbm1lc3Nh
Z2VMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25t
ZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9vbm1lc3NhZ2VMaXN0ZW5lci5nZXQoKTsgfQotCi0g
ICAgICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxFdmVudExpc3RlbmVyPiA+IExpc3RlbmVyVmVj
dG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5lclZlY3Rv
cj4gRXZlbnRMaXN0ZW5lcnNNYXA7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExp
c3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0KLQotICAgICAgICB1c2luZyBS
ZWZDb3VudGVkPFdvcmtlckNvbnRleHQ+OjpyZWY7Ci0gICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8
V29ya2VyQ29udGV4dD46OmRlcmVmOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2
b2lkIHJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IHJlZigpOyB9Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBkZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IGRlcmVmKCk7IH0KLSAgICAg
ICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQotCi0gICAgICAgIFdvcmtl
ckNvbnRleHQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIFdvcmtlclRocmVhZCopOwotCi0g
ICAgICAgIHZpcnR1YWwgY29uc3QgS1VSTCYgdmlydHVhbFVSTCgpIGNvbnN0OwotICAgICAgICB2
aXJ0dWFsIEtVUkwgdmlydHVhbENvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotCi0g
ICAgICAgIEtVUkwgbV91cmw7Ci0gICAgICAgIFN0cmluZyBtX3VzZXJBZ2VudDsKLSAgICAgICAg
UmVmUHRyPFdvcmtlckxvY2F0aW9uPiBtX2xvY2F0aW9uOwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxXb3JrZXJOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOwotCi0gICAgICAgIE93blB0cjxXb3JrZXJT
Y3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKLSAgICAgICAgV29ya2VyVGhyZWFkKiBtX3RocmVh
ZDsKLQotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbm1lc3NhZ2VMaXN0ZW5lcjsK
LSAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAgbV9ldmVudExpc3RlbmVyczsKLSAgICB9OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKLQotI2Vu
ZGlmIC8vIFdvcmtlckNvbnRleHRfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vV29ya2VyQ29u
dGV4dC5pZGwgYi9XZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmlkbApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTFmZmY1MS4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2RvbS9Xb3JrZXJD
b250ZXh0LmlkbAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0gKi8KLQot
bW9kdWxlIHRocmVhZHMgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9
V09SS0VSUywKLSAgICAgICAgQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90LAotICAgICAgICBDdXN0
b21NYXJrRnVuY3Rpb24sCi0gICAgICAgIEV4dGVuZHNET01HbG9iYWxPYmplY3QsCi0gICAgICAg
IExlZ2FjeVBhcmVudD1KU1dvcmtlckNvbnRleHRCYXNlLAotICAgICAgICBOb1N0YXRpY1RhYmxl
cwotICAgIF0gV29ya2VyQ29udGV4dCB7Ci0jaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBU
KQotICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbV0gV29ya2VyQ29udGV4dCBzZWxmOwotI2VuZGlm
Ci0KLSAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25tZXNzYWdlOwotICAgICAgICB2
b2lkIHBvc3RNZXNzYWdlKGluIERPTVN0cmluZyBtZXNzYWdlKTsKLQotICAgICAgICBhdHRyaWJ1
dGUgW1JlcGxhY2VhYmxlXSBXb3JrZXJMb2NhdGlvbiBsb2NhdGlvbjsKLSAgICAgICAgYXR0cmli
dXRlIFtSZXBsYWNlYWJsZV0gV29ya2VyTmF2aWdhdG9yIG5hdmlnYXRvcjsKLSAgICAgICAgCi0g
ICAgICAgIGF0dHJpYnV0ZSBNZXNzYWdlRXZlbnRDb25zdHJ1Y3RvciBNZXNzYWdlRXZlbnQ7Ci0g
ICAgICAgIGF0dHJpYnV0ZSBXb3JrZXJMb2NhdGlvbkNvbnN0cnVjdG9yIFdvcmtlckxvY2F0aW9u
OwotCi0gICAgICAgIC8vIFRpbWVycwotICAgICAgICBbQ3VzdG9tXSBsb25nIHNldFRpbWVvdXQo
aW4gVGltZW91dEhhbmRsZXIgaGFuZGxlciwgaW4gbG9uZyB0aW1lb3V0KTsKLSAgICAgICAgLy8g
W0N1c3RvbV0gbG9uZyBzZXRUaW1lb3V0KGluIERPTVN0cmluZyBjb2RlLCBpbiBsb25nIHRpbWVv
dXQpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIGNsZWFyVGltZW91dChpbiBsb25nIGhhbmRsZSk7
Ci0KLSAgICAgICAgW0N1c3RvbV0gbG9uZyBzZXRJbnRlcnZhbChpbiBUaW1lb3V0SGFuZGxlciBo
YW5kbGVyLCBpbiBsb25nIHRpbWVvdXQpOwotICAgICAgICAvLyBbQ3VzdG9tXSBsb25nIHNldElu
dGVydmFsKGluIERPTVN0cmluZyBjb2RlLCBpbiBsb25nIHRpbWVvdXQpOwotICAgICAgICBbQ3Vz
dG9tXSB2b2lkIGNsZWFySW50ZXJ2YWwoaW4gbG9uZyBoYW5kbGUpOwotCi0gICAgICAgIC8vIEV2
ZW50VGFyZ2V0IGludGVyZmFjZQotICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVu
ZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOwotICAgICAgICBbQ3VzdG9t
XSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5l
ciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFu
IHVzZUNhcHR1cmUpOwotICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0
KQotICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKLSAgICB9OwotCi19CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0UHJveHkuaCBiL1dlYkNvcmUvZG9tL1dv
cmtlckNvbnRleHRQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGY1NzYx
Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvZG9tL1dvcmtlckNvbnRleHRQcm94eS5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV29ya2VyQ29udGV4dFByb3h5X2gKLSNkZWZp
bmUgV29ya2VyQ29udGV4dFByb3h5X2gKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBLVVJMOwotICAgIGNsYXNzIFN0cmluZzsKLSAgICBj
bGFzcyBXb3JrZXI7Ci0KLSAgICAvLyBBIHByb3h5IHRvIHRhbGsgdG8gdGhlIHdvcmtlciBjb250
ZXh0LgotICAgIGNsYXNzIFdvcmtlckNvbnRleHRQcm94eSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgV29ya2VyQ29udGV4dFByb3h5KiBjcmVhdGUoV29ya2VyKik7Ci0KLSAgICAgICAg
dmlydHVhbCB+V29ya2VyQ29udGV4dFByb3h5KCkge30KLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1
c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkgPSAwOwotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCkgPSAwOwotCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmKSA9IDA7Ci0KLSAg
ICAgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0ID0gMDsKLQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyT2JqZWN0RGVzdHJveWVkKCkgPSAwOwotICAgIH07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi0j
ZW5kaWYgLy8gV29ya2VyQ29udGV4dFByb3h5X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1dv
cmtlckxvY2F0aW9uLmNwcCBiL1dlYkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg0YmY5My4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2Rv
bS9Xb3JrZXJMb2NhdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
KgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0j
aW5jbHVkZSAiV29ya2VyTG9jYXRpb24uaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpocmVmKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV91cmwuaGFzUGF0aCgpID8gbV91cmwucHJldHR5VVJMKCkg
OiBtX3VybC5wcmV0dHlVUkwoKSArICIvIjsKLX0KLQotU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpw
cm90b2NvbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdXJsLnByb3RvY29sKCkgKyAiOiI7Ci19
Ci0KLVN0cmluZyBXb3JrZXJMb2NhdGlvbjo6aG9zdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
dXJsLnBvcnQoKSA/IG1fdXJsLmhvc3QoKSArICI6IiArIFN0cmluZzo6bnVtYmVyKChzdGF0aWNf
Y2FzdDxpbnQ+KG1fdXJsLnBvcnQoKSkpKSA6IG1fdXJsLmhvc3QoKTsKLX0KLQotU3RyaW5nIFdv
cmtlckxvY2F0aW9uOjpob3N0bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdXJsLmhvc3Qo
KTsKLX0KLQotU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV91cmwucG9ydCgpID8gU3RyaW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50PihtX3VybC5w
b3J0KCkpKSA6ICIiOwotfQotCi1TdHJpbmcgV29ya2VyTG9jYXRpb246OnBhdGhuYW1lKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV91cmwucGF0aCgpLmlzRW1wdHkoKSA/ICIvIiA6IG1fdXJsLnBh
dGgoKTsKLX0KLQotU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpzZWFyY2goKSBjb25zdAotewotICAg
IHJldHVybiBtX3VybC5xdWVyeSgpLmlzRW1wdHkoKSA/ICIiIDogIj8iICsgbV91cmwucXVlcnko
KTsKLX0KLQotU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpoYXNoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV91cmwucmVmKCkuaXNFbXB0eSgpID8gIiIgOiAiIyIgKyBtX3VybC5yZWYoKTsKLX0KLQot
U3RyaW5nIFdvcmtlckxvY2F0aW9uOjp0b1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
dXJsLmhhc1BhdGgoKSA/IG1fdXJsLnByZXR0eVVSTCgpIDogbV91cmwucHJldHR5VVJMKCkgKyAi
LyI7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdP
UktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5oIGIvV2ViQ29y
ZS9kb20vV29ya2VyTG9jYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJj
MzFhZC4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5oCisrKyAvZGV2
L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICoKLSAqLwotCi0jaWZuZGVmIFdvcmtlckxvY2F0
aW9uX2gKLSNkZWZpbmUgV29ya2VyTG9jYXRpb25faAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0K
LSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0gICAgY2xhc3MgU3RyaW5nOwotCi0gICAgY2xhc3MgV29ya2VyTG9jYXRp
b24gOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJMb2NhdGlvbj4gewotICAgIHB1YmxpYzoKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyTG9jYXRpb24+IGNyZWF0ZShjb25zdCBLVVJM
JiB1cmwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2Vy
TG9jYXRpb24odXJsKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBLVVJMJiB1cmwoKSBj
b25zdCB7IHJldHVybiBtX3VybDsgfQotCi0gICAgICAgIFN0cmluZyBocmVmKCkgY29uc3Q7Ci0K
LSAgICAgICAgLy8gVVJJIGRlY29tcG9zaXRpb24gYXR0cmlidXRlcwotICAgICAgICBTdHJpbmcg
cHJvdG9jb2woKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGhvc3QoKSBjb25zdDsKLSAgICAgICAg
U3RyaW5nIGhvc3RuYW1lKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBwb3J0KCkgY29uc3Q7Ci0g
ICAgICAgIFN0cmluZyBwYXRobmFtZSgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgc2VhcmNoKCkg
Y29uc3Q7Ci0gICAgICAgIFN0cmluZyBoYXNoKCkgY29uc3Q7Ci0KLSAgICAgICAgU3RyaW5nIHRv
U3RyaW5nKCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBXb3JrZXJMb2NhdGlvbihj
b25zdCBLVVJMJiB1cmwpIDogbV91cmwodXJsKSB7IH0KLQotICAgICAgICBLVVJMIG1fdXJsOwot
ICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JL
RVJTKQotCi0jZW5kaWYgLy8gV29ya2VyTG9jYXRpb25faApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vV29ya2VyTG9jYXRpb24uaWRsIGIvV2ViQ29yZS9kb20vV29ya2VyTG9jYXRpb24uaWRsCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTUxZjE4Li4wMDAwMDAwCi0tLSBhL1dlYkNv
cmUvZG9tL1dvcmtlckxvY2F0aW9uLmlkbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi1tb2R1bGUgdGhyZWFkcyB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRp
b25hbD1XT1JLRVJTLAotICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yLAotICAgICAgICBOb1N0
YXRpY1RhYmxlcwotICAgIF0gV29ya2VyTG9jYXRpb24gewotICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIGhyZWY7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgcHJvdG9jb2w7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgaG9zdDsK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBob3N0bmFtZTsKLSAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwb3J0OwotICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHBhdGhuYW1lOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIHNlYXJjaDsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBoYXNo
OwotCi0gICAgICAgIFtEb250RW51bV0gRE9NU3RyaW5nIHRvU3RyaW5nKCk7Ci0gICAgfTsKLQot
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIGIvV2Vi
Q29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4ZDYyNjA3Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvZG9tL1dvcmtlck1lc3NhZ2lu
Z1Byb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJX
b3JrZXJNZXNzYWdpbmdQcm94eS5oIgotCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJHZW5lcmljV29ya2VyVGFzay5oIgotI2luY2x1ZGUg
Ik1lc3NhZ2VFdmVudC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNp
bmNsdWRlICJXb3JrZXIuaCIKLSNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCi0jaW5jbHVkZSAi
V29ya2VyVGhyZWFkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTWVzc2FnZVdv
cmtlckNvbnRleHRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzaz4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrKG1lc3NhZ2UpKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKLSAgICAgICAgOiBtX21lc3NhZ2UobWVzc2FnZS5jb3B5KCkpCi0gICAgewotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRDb250ZXh0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNjcmlwdENvbnRleHQtPmlzV29ya2Vy
Q29udGV4dCgpKTsKLSAgICAgICAgV29ya2VyQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0
PFdvcmtlckNvbnRleHQqPihzY3JpcHRDb250ZXh0KTsKLQotICAgICAgICBjb250ZXh0LT5kaXNw
YXRjaE1lc3NhZ2UobV9tZXNzYWdlKTsKLQotICAgICAgICBzdGF0aWNfY2FzdDxXb3JrZXJNZXNz
YWdpbmdQcm94eSo+KGNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJPYmplY3RQcm94eSgpKS0+Y29u
ZmlybVdvcmtlclRocmVhZE1lc3NhZ2UoY29udGV4dC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9tZXNzYWdlOwotfTsKLQotY2xhc3MgTWVz
c2FnZVdvcmtlclRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVzc2FnZVdvcmtlclRhc2s+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94
eSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVdvcmtlclRhc2so
bWVzc2FnZSwgbWVzc2FnaW5nUHJveHkpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTWVzc2Fn
ZVdvcmtlclRhc2soY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXb3JrZXJNZXNzYWdpbmdQcm94eSog
bWVzc2FnaW5nUHJveHkpCi0gICAgICAgIDogbV9tZXNzYWdlKG1lc3NhZ2UuY29weSgpKQotICAg
ICAgICAsIG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5nUHJveHkpCi0gICAgewotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKLSAg
ICB7Ci0gICAgICAgIFdvcmtlciogd29ya2VyT2JqZWN0ID0gbV9tZXNzYWdpbmdQcm94eS0+d29y
a2VyT2JqZWN0KCk7Ci0gICAgICAgIGlmICghd29ya2VyT2JqZWN0IHx8IG1fbWVzc2FnaW5nUHJv
eHktPmFza2VkVG9UZXJtaW5hdGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB3
b3JrZXJPYmplY3QtPmRpc3BhdGNoTWVzc2FnZShtX21lc3NhZ2UpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBTdHJpbmcgbV9tZXNzYWdlOwotICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21l
c3NhZ2luZ1Byb3h5OwotfTsKLQotY2xhc3MgV29ya2VyRXhjZXB0aW9uVGFzayA6IHB1YmxpYyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXb3JrZXJFeGNlcHRpb25UYXNrPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgV29ya2VyTWVzc2Fn
aW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXb3JrZXJFeGNlcHRpb25UYXNrKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNl
VVJMLCBtZXNzYWdpbmdQcm94eSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBXb3JrZXJFeGNl
cHRpb25UYXNrKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94
eSkKLSAgICAgICAgOiBtX2Vycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UuY29weSgpKQotICAgICAg
ICAsIG1fbGluZU51bWJlcihsaW5lTnVtYmVyKQotICAgICAgICAsIG1fc291cmNlVVJMKHNvdXJj
ZVVSTC5jb3B5KCkpCi0gICAgICAgICwgbV9tZXNzYWdpbmdQcm94eShtZXNzYWdpbmdQcm94eSkK
LSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgewotICAgICAgICBpZiAoIW1fbWVzc2FnaW5nUHJv
eHktPmFza2VkVG9UZXJtaW5hdGUoKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlcG9ydEV4Y2Vw
dGlvbihtX2Vycm9yTWVzc2FnZSwgbV9saW5lTnVtYmVyLCBtX3NvdXJjZVVSTCk7Ci0gICAgfQot
Ci0gICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwotICAgIGludCBtX2xpbmVOdW1iZXI7Ci0gICAg
U3RyaW5nIG1fc291cmNlVVJMOwotICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2lu
Z1Byb3h5OwotfTsKLQotY2xhc3MgV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2sgOiBwdWJsaWMg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8V29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2s+IGNyZWF0ZShXb3JrZXJNZXNzYWdpbmdQ
cm94eSogbWVzc2FnaW5nUHJveHkpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrKG1lc3NhZ2luZ1Byb3h5KSk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrKFdvcmtlck1lc3NhZ2luZ1By
b3h5KiBtZXNzYWdpbmdQcm94eSkKLSAgICAgICAgOiBtX21lc3NhZ2luZ1Byb3h5KG1lc3NhZ2lu
Z1Byb3h5KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCopCi0gICAgewotICAgICAgICBtX21lc3NhZ2luZ1Byb3h5LT53
b3JrZXJDb250ZXh0RGVzdHJveWVkSW50ZXJuYWwoKTsKLSAgICB9Ci0KLSAgICBXb3JrZXJNZXNz
YWdpbmdQcm94eSogbV9tZXNzYWdpbmdQcm94eTsKLX07Ci0KLWNsYXNzIFdvcmtlclRocmVhZEFj
dGl2aXR5UmVwb3J0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWRBY3Rpdml0eVJlcG9y
dFRhc2s+IGNyZWF0ZShXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHksIGJvb2wg
Y29uZmlybWluZ01lc3NhZ2UsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJlYWRBY3Rpdml0eVJlcG9ydFRhc2sobWVz
c2FnaW5nUHJveHksIGNvbmZpcm1pbmdNZXNzYWdlLCBoYXNQZW5kaW5nQWN0aXZpdHkpKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrKFdvcmtl
ck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSwgYm9vbCBjb25maXJtaW5nTWVzc2FnZSwg
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCi0gICAgICAgIDogbV9tZXNzYWdpbmdQcm94eShtZXNz
YWdpbmdQcm94eSkKLSAgICAgICAgLCBtX2NvbmZpcm1pbmdNZXNzYWdlKGNvbmZpcm1pbmdNZXNz
YWdlKQotICAgICAgICAsIG1faGFzUGVuZGluZ0FjdGl2aXR5KGhhc1BlbmRpbmdBY3Rpdml0eSkK
LSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqKQotICAgIHsKLSAgICAgICAgbV9tZXNzYWdpbmdQcm94eS0+cmVwb3J0UGVu
ZGluZ0FjdGl2aXR5SW50ZXJuYWwobV9jb25maXJtaW5nTWVzc2FnZSwgbV9oYXNQZW5kaW5nQWN0
aXZpdHkpOwotICAgIH0KLQotICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1By
b3h5OwotICAgIGJvb2wgbV9jb25maXJtaW5nTWVzc2FnZTsKLSAgICBib29sIG1faGFzUGVuZGlu
Z0FjdGl2aXR5OwotfTsKLQotCi1Xb3JrZXJDb250ZXh0UHJveHkqIFdvcmtlckNvbnRleHRQcm94
eTo6Y3JlYXRlKFdvcmtlciogd29ya2VyKQotewotICAgIHJldHVybiBuZXcgV29ya2VyTWVzc2Fn
aW5nUHJveHkod29ya2VyKTsKLX0KLQotV29ya2VyTWVzc2FnaW5nUHJveHk6Oldvcmtlck1lc3Nh
Z2luZ1Byb3h5KFdvcmtlciogd29ya2VyT2JqZWN0KQotICAgIDogbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0KHdvcmtlck9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICwgbV93
b3JrZXJPYmplY3Qod29ya2VyT2JqZWN0KQotICAgICwgbV91bmNvbmZpcm1lZE1lc3NhZ2VDb3Vu
dCgwKQotICAgICwgbV93b3JrZXJUaHJlYWRIYWRQZW5kaW5nQWN0aXZpdHkoZmFsc2UpCi0gICAg
LCBtX2Fza2VkVG9UZXJtaW5hdGUoZmFsc2UpCi17Ci0gICAgQVNTRVJUKG1fd29ya2VyT2JqZWN0
KTsKLSAgICBBU1NFUlQoKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpICYm
IGlzTWFpblRocmVhZCgpKQotICAgICAgICAgICB8fCAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc1dvcmtlckNvbnRleHQoKSAmJiBjdXJyZW50VGhyZWFkKCkgPT0gc3RhdGljX2Nhc3Q8V29y
a2VyQ29udGV4dCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSktPnRocmVhZCgpLT50
aHJlYWRJRCgpKSk7Ci19Ci0KLVdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp+V29ya2VyTWVzc2FnaW5n
UHJveHkoKQotewotICAgIEFTU0VSVCghbV93b3JrZXJPYmplY3QpOwotICAgIEFTU0VSVCgobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkgJiYgaXNNYWluVGhyZWFkKCkpCi0g
ICAgICAgICAgIHx8IChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgp
ICYmIGN1cnJlbnRUaHJlYWQoKSA9PSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4obV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmdldCgpKS0+dGhyZWFkKCktPnRocmVhZElEKCkpKTsKLX0KLQot
dm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6c3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwm
IHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNl
Q29kZSkKLXsKLSAgICBSZWZQdHI8V29ya2VyVGhyZWFkPiB0aHJlYWQgPSBXb3JrZXJUaHJlYWQ6
OmNyZWF0ZShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSwgdGhpcyk7Ci0gICAgd29y
a2VyVGhyZWFkQ3JlYXRlZCh0aHJlYWQpOwotICAgIHRocmVhZC0+c3RhcnQoKTsKLX0KLQotdm9p
ZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFz
ayhNZXNzYWdlV29ya2VyVGFzazo6Y3JlYXRlKG1lc3NhZ2UsIHRoaXMpKTsKLX0KLQotdm9pZCBX
b3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQotewotICAgIHBvc3RUYXNrVG9Xb3JrZXJDb250ZXh0KE1lc3NhZ2VXb3Jr
ZXJDb250ZXh0VGFzazo6Y3JlYXRlKG1lc3NhZ2UpKTsKLX0KLQotdm9pZCBXb3JrZXJNZXNzYWdp
bmdQcm94eTo6cG9zdFRhc2tUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPiB0YXNrKQotewotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3dvcmtlclRocmVhZCkgewotICAgICAgICArK21f
dW5jb25maXJtZWRNZXNzYWdlQ291bnQ7Ci0gICAgICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29w
KCkucG9zdFRhc2sodGFzayk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcXVldWVkRWFybHlUYXNr
cy5hcHBlbmQodGFzayk7Ci19Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RUYXNr
VG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0
YXNrKQotewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2sodGFzayk7Ci19
Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVj
dChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMKQotewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2so
V29ya2VyRXhjZXB0aW9uVGFzazo6Y3JlYXRlKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291
cmNlVVJMLCB0aGlzKSk7Ci19Ci0gICAgCi1zdGF0aWMgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VU
YXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdvcmtlck1lc3NhZ2luZ1Byb3h5
KiBtZXNzYWdpbmdQcm94eSwgTWVzc2FnZURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBNZXNzYWdl
U291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIGlm
IChtZXNzYWdpbmdQcm94eS0+YXNrZWRUb1Rlcm1pbmF0ZSgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgY29udGV4dC0+YWRkTWVzc2FnZShkZXN0aW5hdGlvbiwgc291cmNlLCBsZXZlbCwgbWVzc2Fn
ZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKLX0KLQotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94
eTo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZURlc3RpbmF0aW9uIGRl
c3RpbmF0aW9uLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCkKLXsKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxi
YWNrVGFzaygmcG9zdENvbnNvbGVNZXNzYWdlVGFzaywgdGhpcywgZGVzdGluYXRpb24sIHNvdXJj
ZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCkpOwotfQotCi12b2lkIFdv
cmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJUaHJlYWRDcmVhdGVkKFBhc3NSZWZQdHI8V29ya2Vy
VGhyZWFkPiB3b3JrZXJUaHJlYWQpCi17Ci0gICAgbV93b3JrZXJUaHJlYWQgPSB3b3JrZXJUaHJl
YWQ7Ci0KLSAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKSB7Ci0gICAgICAgIC8vIFdvcmtlci50
ZXJtaW5hdGUoKSBjb3VsZCBiZSBjYWxsZWQgZnJvbSBKUyBiZWZvcmUgdGhlIHRocmVhZCB3YXMg
Y3JlYXRlZC4KLSAgICAgICAgbV93b3JrZXJUaHJlYWQtPnN0b3AoKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICB1bnNpZ25lZCB0YXNrQ291bnQgPSBtX3F1ZXVlZEVhcmx5VGFza3Muc2l6ZSgpOwot
ICAgICAgICBBU1NFUlQoIW1fdW5jb25maXJtZWRNZXNzYWdlQ291bnQpOwotICAgICAgICBtX3Vu
Y29uZmlybWVkTWVzc2FnZUNvdW50ID0gdGFza0NvdW50OwotICAgICAgICBtX3dvcmtlclRocmVh
ZEhhZFBlbmRpbmdBY3Rpdml0eSA9IHRydWU7IC8vIFdvcmtlciBpbml0aWFsaXphdGlvbiBtZWFu
cyBhIHBlbmRpbmcgYWN0aXZpdHkuCi0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRhc2tDb3VudDsgKytpKQotICAgICAgICAgICAgbV93b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5w
b3N0VGFzayhtX3F1ZXVlZEVhcmx5VGFza3NbaV0pOwotICAgICAgICBtX3F1ZXVlZEVhcmx5VGFz
a3MuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6Ondvcmtl
ck9iamVjdERlc3Ryb3llZCgpCi17Ci0gICAgbV93b3JrZXJPYmplY3QgPSAwOwotICAgIGlmICht
X3dvcmtlclRocmVhZCkKLSAgICAgICAgdGVybWluYXRlV29ya2VyQ29udGV4dCgpOwotICAgIGVs
c2UKLSAgICAgICAgd29ya2VyQ29udGV4dERlc3Ryb3llZEludGVybmFsKCk7Ci19Ci0KLXZvaWQg
V29ya2VyTWVzc2FnaW5nUHJveHk6OndvcmtlckNvbnRleHREZXN0cm95ZWQoKQotewotICAgIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soV29ya2VyQ29udGV4dERlc3Ryb3llZFRh
c2s6OmNyZWF0ZSh0aGlzKSk7Ci0gICAgLy8gV2lsbCBleGVjdXRlIHdvcmtlckNvbnRleHREZXN0
cm95ZWRJbnRlcm5hbCgpIG9uIGNvbnRleHQncyB0aHJlYWQuCi19Ci0KLXZvaWQgV29ya2VyTWVz
c2FnaW5nUHJveHk6OndvcmtlckNvbnRleHREZXN0cm95ZWRJbnRlcm5hbCgpCi17Ci0gICAgLy8g
V29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2sgaXMgYWx3YXlzIHRoZSBsYXN0IHRvIGJlIHBlcmZv
cm1lZCwgc28gdGhlIHByb3h5IGlzIG5vdCBuZWVkZWQgZm9yIGNvbW11bmljYXRpb24KLSAgICAv
LyBpbiBlaXRoZXIgc2lkZSBhbnkgbW9yZS4gSG93ZXZlciwgdGhlIFdvcmtlciBvYmplY3QgbWF5
IHN0aWxsIGV4aXN0LCBhbmQgaXQgYXNzdW1lcyB0aGF0IHRoZSBwcm94eSBleGlzdHMsIHRvby4K
LSAgICBtX3dvcmtlclRocmVhZCA9IDA7Ci0gICAgaWYgKCFtX3dvcmtlck9iamVjdCkKLSAgICAg
ICAgZGVsZXRlIHRoaXM7Ci19Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnRlcm1pbmF0
ZVdvcmtlckNvbnRleHQoKQotewotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOwotCi0gICAgaWYgKG1fd29y
a2VyVGhyZWFkKQotICAgICAgICBtX3dvcmtlclRocmVhZC0+c3RvcCgpOwotfQotCi12b2lkIFdv
cmtlck1lc3NhZ2luZ1Byb3h5Ojpjb25maXJtV29ya2VyVGhyZWFkTWVzc2FnZShib29sIGhhc1Bl
bmRpbmdBY3Rpdml0eSkKLXsKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNr
KFdvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzazo6Y3JlYXRlKHRoaXMsIHRydWUsIGhhc1Bl
bmRpbmdBY3Rpdml0eSkpOwotICAgIC8vIFdpbGwgZXhlY3V0ZSByZXBvcnRQZW5kaW5nQWN0aXZp
dHlJbnRlcm5hbCgpIG9uIGNvbnRleHQncyB0aHJlYWQuCi19Ci0KLXZvaWQgV29ya2VyTWVzc2Fn
aW5nUHJveHk6OnJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkK
LXsKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFdvcmtlclRocmVhZEFj
dGl2aXR5UmVwb3J0VGFzazo6Y3JlYXRlKHRoaXMsIGZhbHNlLCBoYXNQZW5kaW5nQWN0aXZpdHkp
KTsKLSAgICAvLyBXaWxsIGV4ZWN1dGUgcmVwb3J0UGVuZGluZ0FjdGl2aXR5SW50ZXJuYWwoKSBv
biBjb250ZXh0J3MgdGhyZWFkLgotfQotCi12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpyZXBv
cnRQZW5kaW5nQWN0aXZpdHlJbnRlcm5hbChib29sIGNvbmZpcm1pbmdNZXNzYWdlLCBib29sIGhh
c1BlbmRpbmdBY3Rpdml0eSkKLXsKLSAgICBpZiAoY29uZmlybWluZ01lc3NhZ2UgJiYgIW1fYXNr
ZWRUb1Rlcm1pbmF0ZSkgewotICAgICAgICBBU1NFUlQobV91bmNvbmZpcm1lZE1lc3NhZ2VDb3Vu
dCk7Ci0gICAgICAgIC0tbV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudDsKLSAgICB9Ci0KLSAgICBt
X3dvcmtlclRocmVhZEhhZFBlbmRpbmdBY3Rpdml0eSA9IGhhc1BlbmRpbmdBY3Rpdml0eTsKLX0K
LQotYm9vbCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gKG1fdW5jb25maXJtZWRNZXNzYWdlQ291bnQgfHwgbV93b3JrZXJUaHJl
YWRIYWRQZW5kaW5nQWN0aXZpdHkpICYmICFtX2Fza2VkVG9UZXJtaW5hdGU7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuaCBiL1dlYkNvcmUvZG9tL1dvcmtl
ck1lc3NhZ2luZ1Byb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MDIxNzEu
LjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9kb20vV29ya2VyTWVzc2FnaW5nUHJveHkuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICovCi0KLSNpZm5kZWYgV29ya2VyTWVz
c2FnaW5nUHJveHlfaAotI2RlZmluZSBXb3JrZXJNZXNzYWdpbmdQcm94eV9oCi0KLSNpZiBFTkFC
TEUoV09SS0VSUykKLQotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNs
dWRlICJXb3JrZXJDb250ZXh0UHJveHkuaCIKLSNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94eS5o
IgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
LSAgICBjbGFzcyBTdHJpbmc7Ci0gICAgY2xhc3MgV29ya2VyOwotICAgIGNsYXNzIFdvcmtlclRo
cmVhZDsKLQotICAgIGNsYXNzIFdvcmtlck1lc3NhZ2luZ1Byb3h5IDogcHVibGljIFdvcmtlckNv
bnRleHRQcm94eSwgcHVibGljIFdvcmtlck9iamVjdFByb3h5LCBOb25jb3B5YWJsZSB7Ci0gICAg
cHVibGljOgotICAgICAgICBXb3JrZXJNZXNzYWdpbmdQcm94eShXb3JrZXIqKTsKLQotICAgICAg
ICAvLyBJbXBsZW1lbnRhdGlvbnMgb2YgV29ya2VyQ29udGV4dFByb3h5LgotICAgICAgICAvLyAo
T25seSB1c2UgdGhlc2UgbWV0aG9kcyBpbiB0aGUgd29ya2VyIG9iamVjdCB0aHJlYWQuKQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVS
TCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCk7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKLQotICAgICAgICAv
LyBJbXBsZW1lbnRhdGlvbnMgb2YgV29ya2VyT2JqZWN0UHJveHkuCi0gICAgICAgIC8vIChPbmx5
IHVzZSB0aGVzZSBtZXRob2RzIGluIHRoZSB3b3JrZXIgY29udGV4dCB0aHJlYWQuKQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0
KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9X
b3JrZXJPYmplY3QoTWVzc2FnZURlc3RpbmF0aW9uLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250
ZXh0RGVzdHJveWVkKCk7Ci0KLSAgICAgICAgdm9pZCBwb3N0VGFza1RvV29ya2VyT2JqZWN0KFBh
c3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOwotICAgICAgICB2b2lkIHBv
c3RUYXNrVG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzaz4pOwotCi0gICAgICAgIHZvaWQgd29ya2VyVGhyZWFkQ3JlYXRlZChQYXNzUmVmUHRyPFdv
cmtlclRocmVhZD4pOwotCi0gICAgICAgIHZvaWQgY29uZmlybVdvcmtlclRocmVhZE1lc3NhZ2Uo
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwotCi0gICAgICAgIC8vIE9ubHkgdXNlIHRoaXMgbWV0
aG9kIG9uIHRoZSB3b3JrZXIgb2JqZWN0IHRocmVhZC4KLSAgICAgICAgYm9vbCBhc2tlZFRvVGVy
bWluYXRlKCkgY29uc3QgeyByZXR1cm4gbV9hc2tlZFRvVGVybWluYXRlOyB9Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgTWVzc2FnZVdvcmtlclRhc2s7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzazsKLSAgICAgICAgZnJpZW5kIGNs
YXNzIFdvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzazsKLQotICAgICAgICB2aXJ0dWFsIH5X
b3JrZXJNZXNzYWdpbmdQcm94eSgpOwotCi0gICAgICAgIHZvaWQgd29ya2VyQ29udGV4dERlc3Ry
b3llZEludGVybmFsKCk7Ci0gICAgICAgIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5SW50ZXJu
YWwoYm9vbCBjb25maXJtaW5nTWVzc2FnZSwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwotICAg
ICAgICBXb3JrZXIqIHdvcmtlck9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2VyT2JqZWN0
OyB9Ci0KLSAgICAgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKLSAgICAgICAgV29ya2VyKiBtX3dvcmtlck9iamVjdDsKLSAgICAgICAg
UmVmUHRyPFdvcmtlclRocmVhZD4gbV93b3JrZXJUaHJlYWQ7Ci0KLSAgICAgICAgdW5zaWduZWQg
bV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudDsgLy8gVW5jb25maXJtZWQgbWVzc2FnZXMgZnJvbSB3
b3JrZXIgb2JqZWN0IHRvIHdvcmtlciB0aHJlYWQuCi0gICAgICAgIGJvb2wgbV93b3JrZXJUaHJl
YWRIYWRQZW5kaW5nQWN0aXZpdHk7IC8vIFRoZSBsYXRlc3QgY29uZmlybWF0aW9uIGZyb20gd29y
a2VyIHRocmVhZCByZXBvcnRlZCB0aGF0IGl0IHdhcyBzdGlsbCBhY3RpdmUuCi0KLSAgICAgICAg
Ym9vbCBtX2Fza2VkVG9UZXJtaW5hdGU7Ci0KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPiA+IG1fcXVldWVkRWFybHlUYXNrczsgLy8gVGFza3MgYXJl
IHF1ZXVlZCBoZXJlIHVudGlsIHRoZXJlJ3MgYSB0aHJlYWQgb2JqZWN0IGNyZWF0ZWQuCi0gICAg
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMp
Ci0KLSNlbmRpZiAvLyBXb3JrZXJNZXNzYWdpbmdQcm94eV9oCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9Xb3JrZXJPYmplY3RQcm94eS5oIGIvV2ViQ29yZS9kb20vV29ya2VyT2JqZWN0UHJveHku
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFhYmE3My4uMDAwMDAwMAotLS0gYS9X
ZWJDb3JlL2RvbS9Xb3JrZXJPYmplY3RQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgV29ya2VyT2JqZWN0UHJveHlfaAotI2RlZmluZSBXb3JrZXJPYmplY3RQcm94
eV9oCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIkNvbnNvbGUuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgU3RyaW5nOwotCi0gICAgLy8gQSBwcm94eSB0
byB0YWxrIHRvIHRoZSB3b3JrZXIgb2JqZWN0LgotICAgIGNsYXNzIFdvcmtlck9iamVjdFByb3h5
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfldvcmtlck9iamVjdFByb3h5KCkge30K
LQotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBT
dHJpbmcmKSA9IDA7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtl
ck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlVVJMKSA9IDA7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RDb25z
b2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KE1lc3NhZ2VEZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJj
ZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCkgPSAwOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXBv
cnRQZW5kaW5nQWN0aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpID0gMDsKLQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZCgpID0gMDsKLSAgICB9OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKLQotI2Vu
ZGlmIC8vIFdvcmtlck9iamVjdFByb3h5X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1dvcmtl
clJ1bkxvb3AuY3BwIGIvV2ViQ29yZS9kb20vV29ya2VyUnVuTG9vcC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDY1ODc3ZjcuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9kb20vV29y
a2VyUnVuTG9vcC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0gCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTaGFyZWRUaW1lci5oIgotI2luY2x1ZGUgIlRo
cmVhZEdsb2JhbERhdGEuaCIKLSNpbmNsdWRlICJUaHJlYWRUaW1lcnMuaCIKLSNpbmNsdWRlICJX
b3JrZXJSdW5Mb29wLmgiCi0jaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgotI2luY2x1ZGUgIldv
cmtlclRocmVhZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdvcmtlclNoYXJl
ZFRpbWVyIDogcHVibGljIFNoYXJlZFRpbWVyIHsKLXB1YmxpYzoKLSAgICBXb3JrZXJTaGFyZWRU
aW1lcigpCi0gICAgICAgIDogbV9zaGFyZWRUaW1lckZ1bmN0aW9uKDApCi0gICAgICAgICwgbV9u
ZXh0RmlyZVRpbWUoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gU2hhcmVkVGltZXIgaW50ZXJm
YWNlLgotICAgIHZpcnR1YWwgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmdW5jdGlvbiko
KSkgeyBtX3NoYXJlZFRpbWVyRnVuY3Rpb24gPSBmdW5jdGlvbjsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpIHsgbV9uZXh0RmlyZVRpbWUgPSBmaXJlVGlt
ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgeyBtX25leHRGaXJlVGltZSA9IDA7IH0KLQot
ICAgIGJvb2wgaXNBY3RpdmUoKSB7IHJldHVybiBtX3NoYXJlZFRpbWVyRnVuY3Rpb24gJiYgbV9u
ZXh0RmlyZVRpbWU7IH0KLSAgICBkb3VibGUgZmlyZVRpbWUoKSB7IHJldHVybiBtX25leHRGaXJl
VGltZTsgfQotICAgIHZvaWQgZmlyZSgpIHsgbV9zaGFyZWRUaW1lckZ1bmN0aW9uKCk7IH0KLQot
cHJpdmF0ZToKLSAgICB2b2lkICgqbV9zaGFyZWRUaW1lckZ1bmN0aW9uKSgpOwotICAgIGRvdWJs
ZSBtX25leHRGaXJlVGltZTsKLX07Ci0KLWNsYXNzIFdvcmtlclJ1bkxvb3A6OlRhc2sgOiBwdWJs
aWMgUmVmQ291bnRlZDxUYXNrPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGFz
az4gY3JlYXRlKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywg
Y29uc3QgU3RyaW5nJiBtb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
YXNrKHRhc2ssIG1vZGUpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIG1vZGUoKSBjb25z
dCB7IHJldHVybiBtX21vZGU7IH0KLSAgICB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpIHsgbV90YXNrLT5wZXJmb3JtVGFzayhjb250ZXh0KTsgfQotCi1w
cml2YXRlOgotICAgIFRhc2soUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
PiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCi0gICAgICAgIDogbV90YXNrKHRhc2spCi0gICAg
ICAgICwgbV9tb2RlKG1vZGUuY29weSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gbV90YXNrOwotICAgIFN0cmluZyBtX21vZGU7Ci19
OwotCi1jbGFzcyBNb2RlUHJlZGljYXRlIHsKLXB1YmxpYzoKLSAgICBNb2RlUHJlZGljYXRlKGNv
bnN0IFN0cmluZyYgbW9kZSkKLSAgICAgICAgOiBtX21vZGUobW9kZSkKLSAgICAgICAgLCBtX2Rl
ZmF1bHRNb2RlKG1vZGUgPT0gV29ya2VyUnVuTG9vcDo6ZGVmYXVsdE1vZGUoKSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgYm9vbCBpc0RlZmF1bHRNb2RlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2RlZmF1bHRNb2RlOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IoKShQYXNzUmVm
UHRyPFdvcmtlclJ1bkxvb3A6OlRhc2s+IHRhc2spIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9kZWZhdWx0TW9kZSB8fCBtX21vZGUgPT0gdGFzay0+bW9kZSgpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBTdHJpbmcgbV9tb2RlOwotICAgIGJvb2wgbV9kZWZhdWx0TW9kZTsKLX07Ci0K
LVdvcmtlclJ1bkxvb3A6OldvcmtlclJ1bkxvb3AoKQotICAgIDogbV9zaGFyZWRUaW1lcihuZXcg
V29ya2VyU2hhcmVkVGltZXIpCi0gICAgLCBtX25lc3RlZENvdW50KDApCi17Ci19Ci0KLVdvcmtl
clJ1bkxvb3A6On5Xb3JrZXJSdW5Mb29wKCkKLXsKLSAgICBBU1NFUlQoIW1fbmVzdGVkQ291bnQp
OwotfQotCi1TdHJpbmcgV29ya2VyUnVuTG9vcDo6ZGVmYXVsdE1vZGUoKQotewotICAgIHJldHVy
biBTdHJpbmcoKTsKLX0KLQotY2xhc3MgUnVuTG9vcFNldHVwIDogTm9uY29weWFibGUKLXsKLXB1
YmxpYzoKLSAgICBSdW5Mb29wU2V0dXAoV29ya2VyUnVuTG9vcCYgcnVuTG9vcCkKLSAgICAgICAg
OiBtX3J1bkxvb3AocnVuTG9vcCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9ydW5Mb29wLm1fbmVz
dGVkQ291bnQpCi0gICAgICAgICAgICB0aHJlYWRHbG9iYWxEYXRhKCkudGhyZWFkVGltZXJzKCku
c2V0U2hhcmVkVGltZXIobV9ydW5Mb29wLm1fc2hhcmVkVGltZXIuZ2V0KCkpOwotICAgICAgICBt
X3J1bkxvb3AubV9uZXN0ZWRDb3VudCsrOwotICAgIH0KLQotICAgIH5SdW5Mb29wU2V0dXAoKQot
ICAgIHsKLSAgICAgICAgbV9ydW5Mb29wLm1fbmVzdGVkQ291bnQtLTsKLSAgICAgICAgaWYgKCFt
X3J1bkxvb3AubV9uZXN0ZWRDb3VudCkKLSAgICAgICAgICAgIHRocmVhZEdsb2JhbERhdGEoKS50
aHJlYWRUaW1lcnMoKS5zZXRTaGFyZWRUaW1lcigwKTsKLSAgICB9Ci1wcml2YXRlOgotICAgIFdv
cmtlclJ1bkxvb3AmIG1fcnVuTG9vcDsKLX07Ci0KLXZvaWQgV29ya2VyUnVuTG9vcDo6cnVuKFdv
cmtlckNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgUnVuTG9vcFNldHVwIHNldHVwKCp0aGlzKTsK
LSAgICBNb2RlUHJlZGljYXRlIG1vZGVQcmVkaWNhdGUoZGVmYXVsdE1vZGUoKSk7Ci0gICAgTWVz
c2FnZVF1ZXVlV2FpdFJlc3VsdCByZXN1bHQ7Ci0gICAgZG8gewotICAgICAgICByZXN1bHQgPSBy
dW5Jbk1vZGUoY29udGV4dCwgbW9kZVByZWRpY2F0ZSk7Ci0gICAgfSB3aGlsZSAocmVzdWx0ICE9
IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpOwotfQotCi1NZXNzYWdlUXVldWVXYWl0UmVzdWx0IFdv
cmtlclJ1bkxvb3A6OnJ1bkluTW9kZShXb3JrZXJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIG1vZGUpCi17Ci0gICAgUnVuTG9vcFNldHVwIHNldHVwKCp0aGlzKTsKLSAgICBNb2RlUHJl
ZGljYXRlIG1vZGVQcmVkaWNhdGUobW9kZSk7Ci0gICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCBy
ZXN1bHQgPSBydW5Jbk1vZGUoY29udGV4dCwgbW9kZVByZWRpY2F0ZSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCBXb3JrZXJSdW5Mb29wOjpydW5Jbk1v
ZGUoV29ya2VyQ29udGV4dCogY29udGV4dCwgY29uc3QgTW9kZVByZWRpY2F0ZSYgcHJlZGljYXRl
KQotewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBBU1NFUlQoY29udGV4dC0+dGhyZWFkKCkp
OwotICAgIEFTU0VSVChjb250ZXh0LT50aHJlYWQoKS0+dGhyZWFkSUQoKSA9PSBjdXJyZW50VGhy
ZWFkKCkpOwotCi0gICAgZG91YmxlIGFic29sdXRlVGltZSA9IChwcmVkaWNhdGUuaXNEZWZhdWx0
TW9kZSgpICYmIG1fc2hhcmVkVGltZXItPmlzQWN0aXZlKCkpID8gbV9zaGFyZWRUaW1lci0+Zmly
ZVRpbWUoKSA6IE1lc3NhZ2VRdWV1ZTxSZWZQdHI8VGFzaz4gPjo6aW5maW5pdGVUaW1lKCk7Ci0g
ICAgUmVmUHRyPFRhc2s+IHRhc2s7Ci0gICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCByZXN1bHQg
PSBtX21lc3NhZ2VRdWV1ZS53YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQodGFzaywg
cHJlZGljYXRlLCBhYnNvbHV0ZVRpbWUpOwotCi0gICAgc3dpdGNoIChyZXN1bHQpIHsKLSAgICBj
YXNlIE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQ6Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBN
ZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQ6Ci0gICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKGNv
bnRleHQpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTWVzc2FnZVF1ZXVlVGltZW91dDoK
LSAgICAgICAgbV9zaGFyZWRUaW1lci0+ZmlyZSgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFdvcmtlclJ1bkxvb3A6OnRlcm1pbmF0ZSgp
Ci17Ci0gICAgbV9tZXNzYWdlUXVldWUua2lsbCgpOwotfQotCi12b2lkIFdvcmtlclJ1bkxvb3A6
OnBvc3RUYXNrKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykK
LXsKLSAgICBwb3N0VGFza0Zvck1vZGUodGFzaywgZGVmYXVsdE1vZGUoKSk7Ci19Ci0KLXZvaWQg
V29ya2VyUnVuTG9vcDo6cG9zdFRhc2tGb3JNb2RlKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQotewotICAgIG1fbWVzc2Fn
ZVF1ZXVlLmFwcGVuZChUYXNrOjpjcmVhdGUodGFzaywgbW9kZS5jb3B5KCkpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9Xb3JrZXJSdW5Mb29wLmggYi9XZWJDb3JlL2RvbS9Xb3JrZXJSdW5M
b29wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMWVhYTMuLjAwMDAwMDAKLS0t
IGEvV2ViQ29yZS9kb20vV29ya2VyUnVuTG9vcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
IAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgV29ya2VyUnVuTG9vcF9oCi0jZGVmaW5lIFdvcmtlclJ1bkxvb3BfaAot
Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCi0jaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSAgICBjbGFzcyBNb2RlUHJlZGljYXRlOwotICAgIGNsYXNzIFdvcmtlckNvbnRleHQ7Ci0gICAg
Y2xhc3MgV29ya2VyU2hhcmVkVGltZXI7Ci0KLSAgICBjbGFzcyBXb3JrZXJSdW5Mb29wIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIFdvcmtlclJ1bkxvb3AoKTsKLSAgICAgICAgfldvcmtlclJ1bkxv
b3AoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEJsb2NraW5nIGNhbGwuIFdhaXRzIGZvciB0YXNr
cyBhbmQgdGltZXJzLCBpbnZva2VzIHRoZSBjYWxsYmFja3MuCi0gICAgICAgIHZvaWQgcnVuKFdv
cmtlckNvbnRleHQqKTsKLQotICAgICAgICAvLyBXYWl0cyBmb3IgYSBzaW5nbGUgdGFzayBhbmQg
cmV0dXJucy4KLSAgICAgICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCBydW5Jbk1vZGUoV29ya2Vy
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgbW9kZSk7Ci0KLSAgICAgICAgdm9pZCB0ZXJtaW5hdGUo
KTsKLSAgICAgICAgYm9vbCB0ZXJtaW5hdGVkKCkgeyByZXR1cm4gbV9tZXNzYWdlUXVldWUua2ls
bGVkKCk7IH0KLQotICAgICAgICB2b2lkIHBvc3RUYXNrKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4pOwotICAgICAgICB2b2lkIHBvc3RUYXNrRm9yTW9kZShQYXNzUmVm
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcmIG1vZGUpOwot
Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgZGVmYXVsdE1vZGUoKTsKLSAgICAgICAgY2xhc3MgVGFz
azsKLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgUnVuTG9vcFNldHVwOwotICAg
ICAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IHJ1bkluTW9kZShXb3JrZXJDb250ZXh0KiwgY29u
c3QgTW9kZVByZWRpY2F0ZSYpOwotCi0gICAgICAgIE1lc3NhZ2VRdWV1ZTxSZWZQdHI8VGFzaz4g
PiBtX21lc3NhZ2VRdWV1ZTsKLSAgICAgICAgT3duUHRyPFdvcmtlclNoYXJlZFRpbWVyPiBtX3No
YXJlZFRpbWVyOwotICAgICAgICBpbnQgbV9uZXN0ZWRDb3VudDsKLSAgICB9OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKLQotI2VuZGlmIC8v
IFdvcmtlclJ1bkxvb3BfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vV29ya2VyVGhyZWFkLmNw
cCBiL1dlYkNvcmUvZG9tL1dvcmtlclRocmVhZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDNkNjU4NmYuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9kb20vV29ya2VyVGhyZWFkLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSAiV29ya2VyVGhy
ZWFkLmgiCi0KLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
LSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIK
LSNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCi0jaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHku
aCIKLQotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLXN0cnVjdCBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YSA6IE5v
bmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjphdXRvX3B0cjxXb3JrZXJUaHJl
YWRTdGFydHVwRGF0YT4gY3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5n
JiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBzdGQ6OmF1dG9fcHRyPFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhPihuZXcgV29ya2VyVGhy
ZWFkU3RhcnR1cERhdGEoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUpKTsKLSAgICB9
Ci0KLSAgICBLVVJMIG1fc2NyaXB0VVJMOwotICAgIFN0cmluZyBtX3VzZXJBZ2VudDsKLSAgICBT
dHJpbmcgbV9zb3VyY2VDb2RlOwotcHJpdmF0ZToKLSAgICBXb3JrZXJUaHJlYWRTdGFydHVwRGF0
YShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBT
dHJpbmcmIHNvdXJjZUNvZGUpOwotfTsKLQotV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6Oldvcmtl
clRocmVhZFN0YXJ0dXBEYXRhKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1
c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKLSAgICA6IG1fc2NyaXB0VVJMKHNj
cmlwdFVSTC5jb3B5KCkpCi0gICAgLCBtX3VzZXJBZ2VudCh1c2VyQWdlbnQuY29weSgpKQotICAg
ICwgbV9zb3VyY2VDb2RlKHNvdXJjZUNvZGUuY29weSgpKQotewotfQotCi1QYXNzUmVmUHRyPFdv
cmtlclRocmVhZD4gV29ya2VyVGhyZWFkOjpjcmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBj
b25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJP
YmplY3RQcm94eSogd29ya2VyT2JqZWN0UHJveHkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBXb3JrZXJUaHJlYWQoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUsIHdvcmtlck9i
amVjdFByb3h5KSk7Ci19Ci0KLVdvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IEtVUkwm
IHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNl
Q29kZSwgV29ya2VyT2JqZWN0UHJveHkqIHdvcmtlck9iamVjdFByb3h5KQotICAgIDogbV90aHJl
YWRJRCgwKQotICAgICwgbV93b3JrZXJPYmplY3RQcm94eSh3b3JrZXJPYmplY3RQcm94eSkKLSAg
ICAsIG1fc3RhcnR1cERhdGEoV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OmNyZWF0ZShzY3JpcHRV
UkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSkpCi17Ci19Ci0KLVdvcmtlclRocmVhZDo6fldvcmtl
clRocmVhZCgpCi17Ci19Ci0KLWJvb2wgV29ya2VyVGhyZWFkOjpzdGFydCgpCi17Ci0gICAgLy8g
TXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgbV90aHJlYWRJRCBp
cyBpbml0aWFsaXplZCB3aGVuIHRoZSB0aHJlYWQgc3RhcnRzLgotICAgIE11dGV4TG9ja2VyIGxv
Y2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLQotICAgIGlmIChtX3RocmVhZElEKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoV29ya2VyVGhy
ZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6OldvcmtlciIpOwotCi0gICAg
cmV0dXJuIG1fdGhyZWFkSUQ7Ci19Ci0KLXZvaWQqIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFk
U3RhcnQodm9pZCogdGhyZWFkKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXb3JrZXJUaHJl
YWQqPih0aHJlYWQpLT53b3JrZXJUaHJlYWQoKTsKLX0KLQotdm9pZCogV29ya2VyVGhyZWFkOjp3
b3JrZXJUaHJlYWQoKQotewotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVh
ZENyZWF0aW9uTXV0ZXgpOwotICAgICAgICBtX3dvcmtlckNvbnRleHQgPSBXb3JrZXJDb250ZXh0
OjpjcmVhdGUobV9zdGFydHVwRGF0YS0+bV9zY3JpcHRVUkwsIG1fc3RhcnR1cERhdGEtPm1fdXNl
ckFnZW50LCB0aGlzKTsKLSAgICAgICAgaWYgKG1fcnVuTG9vcC50ZXJtaW5hdGVkKCkpIHsKLSAg
ICAgICAgICAgIC8vIFRoZSB3b3JrZXIgd2FzIHRlcm1pbmF0ZWQgYmVmb3JlIHRoZSB0aHJlYWQg
aGFkIGEgY2hhbmNlIHRvIHJ1bi4gU2luY2UgdGhlIGNvbnRleHQgZGlkbid0IGV4aXN0IHlldCwg
Ci0gICAgICAgICAgICAvLyBmb3JiaWRFeGVjdXRpb24oKSBjb3VsZG4ndCBiZSBjYWxsZWQgZnJv
bSBzdG9wKCkuCi0gICAgICAgICAgIG1fd29ya2VyQ29udGV4dC0+c2NyaXB0KCktPmZvcmJpZEV4
ZWN1dGlvbigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgV29ya2VyU2NyaXB0Q29udHJvbGxl
ciogc2NyaXB0ID0gbV93b3JrZXJDb250ZXh0LT5zY3JpcHQoKTsKLSAgICBzY3JpcHQtPmV2YWx1
YXRlKFNjcmlwdFNvdXJjZUNvZGUobV9zdGFydHVwRGF0YS0+bV9zb3VyY2VDb2RlLCBtX3N0YXJ0
dXBEYXRhLT5tX3NjcmlwdFVSTCkpOwotICAgIC8vIEZyZWUgdGhlIHN0YXJ0dXAgZGF0YSB0byBj
YXVzZSBpdHMgbWVtYmVyIHZhcmlhYmxlIGRlcmVmJ3MgaGFwcGVuIG9uIHRoZSB3b3JrZXIncyB0
aHJlYWQgKHNpbmNlCi0gICAgLy8gYWxsIHJlZi9kZXJlZnMgb2YgdGhlc2Ugb2JqZWN0cyBhcmUg
aGFwcGVuaW5nIG9uIHRoZSB0aHJlYWQgYXQgdGhpcyBwb2ludCkuIE5vdGUgdGhhdAotICAgIC8v
IFdvcmtlclRocmVhZDo6fldvcmtlclRocmVhZCBoYXBwZW5zIG9uIGEgZGlmZmVyZW50IHRocmVh
ZCB3aGVyZSBpdCB3YXMgY3JlYXRlZC4KLSAgICBtX3N0YXJ0dXBEYXRhLmNsZWFyKCk7Ci0KLSAg
ICBtX3dvcmtlck9iamVjdFByb3h5LT5yZXBvcnRQZW5kaW5nQWN0aXZpdHkobV93b3JrZXJDb250
ZXh0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7Ci0KLSAgICAvLyBCbG9ja3MgdW50aWwgdGVybWlu
YXRlZC4KLSAgICBtX3J1bkxvb3AucnVuKG1fd29ya2VyQ29udGV4dC5nZXQoKSk7Ci0KLSAgICBU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gbV90aHJlYWRJRDsKLQotICAgIG1fd29ya2VyQ29u
dGV4dC0+Y2xlYXJTY3JpcHQoKTsKLSAgICBBU1NFUlQobV93b3JrZXJDb250ZXh0LT5oYXNPbmVS
ZWYoKSk7Ci0gICAgLy8gVGhlIGJlbG93IGFzc2lnbm1lbnQgd2lsbCBkZXN0cm95IHRoZSBjb250
ZXh0LCB3aGljaCB3aWxsIGluIHR1cm4gbm90aWZ5IG1lc3NhZ2luZyBwcm94eS4KLSAgICAvLyBX
ZSBjYW5ub3QgbGV0IGFueSBvYmplY3RzIHN1cnZpdmUgcGFzdCB0aHJlYWQgZXhpdCwgYmVjYXVz
ZSBubyBvdGhlciB0aHJlYWQgd2lsbCBydW4gR0Mgb3Igb3RoZXJ3aXNlIGRlc3Ryb3kgdGhlbS4K
LSAgICBtX3dvcmtlckNvbnRleHQgPSAwOwotICAgIAotICAgIC8vIFRoZSB0aHJlYWQgb2JqZWN0
IG1heSBiZSBhbHJlYWR5IGRlc3Ryb3llZCBmcm9tIG5vdGlmaWNhdGlvbiBub3csIGRvbid0IHRy
eSB0byBhY2Nlc3MgInRoaXMiLgotICAgIGRldGFjaFRocmVhZCh0aHJlYWRJRCk7Ci0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotdm9pZCBXb3JrZXJUaHJlYWQ6OnN0b3AoKQotewotICAgIC8vIE11dGV4
IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc3RvcCgpIGNhbiBiZSBjYWxsZWQgYmVm
b3JlIHRoZSBjb250ZXh0IGlzIGZ1bGx5IGNyZWF0ZWQuCi0gICAgTXV0ZXhMb2NrZXIgbG9jayht
X3RocmVhZENyZWF0aW9uTXV0ZXgpOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgdGFza3MgYXJlIGJl
aW5nIGhhbmRsZWQgYnkgdGhyZWFkIGV2ZW50IGxvb3AuIElmIHNjcmlwdCBleGVjdXRpb24gd2Vy
ZW4ndCBmb3JiaWRkZW4sIGEgd2hpbGUoMSkgbG9vcCBpbiBKUyBjb3VsZCBrZWVwIHRoZSB0aHJl
YWQgYWxpdmUgZm9yZXZlci4KLSAgICBpZiAobV93b3JrZXJDb250ZXh0KQotICAgICAgICBtX3dv
cmtlckNvbnRleHQtPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oKTsKLQotICAgIC8vIEZJWE1F
OiBSdWRlbHkga2lsbGluZyB0aGUgdGhyZWFkIHdvbid0IHdvcmsgd2hlbiB3ZSBhbGxvdyBuZXN0
ZWQgd29ya2VycywgYmVjYXVzZSB0aGV5IHdpbGwgdHJ5IHRvIHBvc3Qgbm90aWZpY2F0aW9ucyBv
ZiB0aGVpciBkZXN0cnVjdGlvbi4KLSAgICBtX3J1bkxvb3AudGVybWluYXRlKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vV29ya2VyVGhyZWFkLmggYi9XZWJDb3JlL2RvbS9Xb3JrZXJUaHJl
YWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFlZjVmNS4uMDAwMDAwMAotLS0g
YS9XZWJDb3JlL2RvbS9Xb3JrZXJUaHJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqCi0gKi8KLQotI2lmbmRlZiBXb3JrZXJUaHJlYWRfaAotI2RlZmluZSBXb3JrZXJU
aHJlYWRfaAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlIDxXb3JrZXJSdW5Mb29w
Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0g
ICAgY2xhc3MgS1VSTDsKLSAgICBjbGFzcyBTdHJpbmc7Ci0gICAgY2xhc3MgV29ya2VyQ29udGV4
dDsKLSAgICBjbGFzcyBXb3JrZXJPYmplY3RQcm94eTsKLSAgICBzdHJ1Y3QgV29ya2VyVGhyZWFk
U3RhcnR1cERhdGE7Ci0KLSAgICBjbGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxXb3JrZXJUaHJlYWQ+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdvcmtlclRocmVhZD4gY3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5n
JiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyT2JqZWN0UHJveHkq
KTsKLSAgICAgICAgfldvcmtlclRocmVhZCgpOwotCi0gICAgICAgIGJvb2wgc3RhcnQoKTsKLSAg
ICAgICAgdm9pZCBzdG9wKCk7Ci0KLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkSUQ7IH0KLSAgICAgICAgV29ya2VyUnVuTG9vcCYgcnVu
TG9vcCgpIHsgcmV0dXJuIG1fcnVuTG9vcDsgfQotICAgICAgICBXb3JrZXJPYmplY3RQcm94eSog
d29ya2VyT2JqZWN0UHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlck9iamVjdFByb3h5OyB9
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBXb3JrZXJUaHJlYWQoY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlck9iamVj
dFByb3h5Kik7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQqIHdvcmtlclRocmVhZFN0YXJ0KHZvaWQq
KTsKLSAgICAgICAgdm9pZCogd29ya2VyVGhyZWFkKCk7Ci0KLSAgICAgICAgVGhyZWFkSWRlbnRp
ZmllciBtX3RocmVhZElEOwotICAgICAgICBXb3JrZXJSdW5Mb29wIG1fcnVuTG9vcDsKLSAgICAg
ICAgV29ya2VyT2JqZWN0UHJveHkqIG1fd29ya2VyT2JqZWN0UHJveHk7Ci0KLSAgICAgICAgUmVm
UHRyPFdvcmtlckNvbnRleHQ+IG1fd29ya2VyQ29udGV4dDsKLSAgICAgICAgTXV0ZXggbV90aHJl
YWRDcmVhdGlvbk11dGV4OwotCi0gICAgICAgIE93blB0cjxXb3JrZXJUaHJlYWRTdGFydHVwRGF0
YT4gbV9zdGFydHVwRGF0YTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoV09SS0VSUykKLQotI2VuZGlmIC8vIFdvcmtlclRocmVhZF9oCi0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMjdhZGYzYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgi
CisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3Iu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3Bv
bnNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZh
bHNlLCBTdHJpbmc+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgU3RyaW5nPjo6
Y29weShjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmNvcHkoKTsKK30KKwor
Q3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBSZXNvdXJjZUVycm9yPjo6VHlwZSBDcm9zc1Ro
cmVhZENvcGllckJhc2U8ZmFsc2UsIFJlc291cmNlRXJyb3I+Ojpjb3B5KGNvbnN0IFJlc291cmNl
RXJyb3ImIGVycm9yKQoreworICAgIHJldHVybiBlcnJvci5jb3B5KCk7Cit9CisKK0Nyb3NzVGhy
ZWFkQ29waWVyQmFzZTxmYWxzZSwgUmVzb3VyY2VSZXF1ZXN0Pjo6VHlwZSBDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIFJlc291cmNlUmVxdWVzdD46OmNvcHkoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0LmNvcHlEYXRhKCk7Cit9CisKK0Ny
b3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgUmVzb3VyY2VSZXNwb25zZT46OlR5cGUgQ3Jvc3NU
aHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBSZXNvdXJjZVJlc3BvbnNlPjo6Y29weShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gcmVzcG9uc2UuY29weURhdGEo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktF
UlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZDhjMWMyNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3Jvc3NUaHJl
YWRDb3BpZXJfaAorI2RlZmluZSBDcm9zc1RocmVhZENvcGllcl9oCisKKyNpZiBFTkFCTEUoV09S
S0VSUykKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xh
c3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CisgICAgY2xhc3Mg
UmVzb3VyY2VSZXNwb25zZTsKKyAgICBjbGFzcyBTdHJpbmc7CisgICAgc3RydWN0IENyb3NzVGhy
ZWFkUmVzb3VyY2VSZXNwb25zZURhdGE7CisgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VS
ZXF1ZXN0RGF0YTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVh
ZENvcGllclBhc3NUaHJvdWdoIHsKKyAgICAgICAgdHlwZWRlZiBUIFR5cGU7CisgICAgICAgIHN0
YXRpYyBUeXBlIGNvcHkoY29uc3QgVCYgcGFyYW1ldGVyKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPGJv
b2wgaXNDb252ZXJ0aWJsZVRvSW50ZWdlciwgdHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFk
Q29waWVyQmFzZTsKKworICAgIC8vIEludGVnZXJzIGdldCBwYXNzZWQgdGhyb3VnaCB3aXRob3V0
IGFueSBjaGFuZ2VzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVh
ZENvcGllckJhc2U8dHJ1ZSwgVD4gOiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3Vn
aDxUPiB7CisgICAgfTsKKworICAgIC8vIFBvaW50ZXJzIGdldCBwYXNzZWQgdGhyb3VnaCB3aXRo
b3V0IGFueSBzaWduaWZpY2FudCBjaGFuZ2VzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFQqPiA6IHB1YmxpYyBDcm9zc1RocmVh
ZENvcGllclBhc3NUaHJvdWdoPFQqPiB7CisgICAgfTsKKworICAgIC8vIEN1c3RvbSBjb3B5IG1l
dGhvZHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVy
QmFzZTxmYWxzZSwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VD4gPiA+IHsKKyAgICAgICAgdHlw
ZWRlZiBQYXNzUmVmUHRyPFQ+IFR5cGU7CisgICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3Qg
UmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VD4gPiYgcmVmUHRyKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gUGFzc1JlZlB0cjxUPihzdGF0aWNfY2FzdDxUKj4ocmVmUHRyLmdldCgpKSk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENy
b3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgc3RkOjphdXRvX3B0cjxUPiA+IHsKKyAgICAgICAg
dHlwZWRlZiBzdGQ6OmF1dG9fcHRyPFQ+IFR5cGU7CisgICAgICAgIHN0YXRpYyBUeXBlIGNvcHko
Y29uc3Qgc3RkOjphdXRvX3B0cjxUPiYgYXV0b1B0cikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6YXV0b19wdHI8VD4oKmNvbnN0X2Nhc3Q8c3RkOjphdXRvX3B0cjxUPio+KCZh
dXRvUHRyKSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jv
c3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBTdHJpbmc+IHsKKyAgICAgICAgdHlwZWRlZiBTdHJp
bmcgVHlwZTsKKyAgICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBTdHJpbmcmKTsKKyAgICB9
OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBS
ZXNvdXJjZUVycm9yPiB7CisgICAgICAgIHR5cGVkZWYgUmVzb3VyY2VFcnJvciBUeXBlOworICAg
ICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICB9OworCisg
ICAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBSZXNvdXJj
ZVJlcXVlc3Q+IHsKKyAgICAgICAgdHlwZWRlZiBzdGQ6OmF1dG9fcHRyPENyb3NzVGhyZWFkUmVz
b3VyY2VSZXF1ZXN0RGF0YT4gVHlwZTsKKyAgICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NU
aHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBSZXNvdXJjZVJlc3BvbnNlPiB7CisgICAgICAgIHR5cGVk
ZWYgc3RkOjphdXRvX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPiBUeXBlOwor
ICAgICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB9
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyIDog
cHVibGljIENyb3NzVGhyZWFkQ29waWVyQmFzZTxXVEY6OklzQ29udmVydGlibGVUb0ludGVnZXI8
VD46OnZhbHVlLCBUPiB7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNlbmRpZiAvLyBDcm9zc1RocmVhZENvcGllcl9oCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvR2VuZXJpY1dvcmtlclRhc2suaCBiL1dlYkNvcmUv
d29ya2Vycy9HZW5lcmljV29ya2VyVGFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjk2YjBlNzAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dvcmtlcnMvR2VuZXJp
Y1dvcmtlclRhc2suaApAQCAtMCwwICsxLDQxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2VuZXJpY1dvcmtlclRhc2tf
aAorI2RlZmluZSBHZW5lcmljV29ya2VyVGFza19oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKwor
I2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
ICAgIC8vIFRyYWl0cyBmb3IgdGhlIEdlbmVyaWNXb3JrZXJUYXNrLgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljV29ya2VyVGFza1RyYWl0cyB7CisgICAgICAgIHR5cGVk
ZWYgY29uc3QgVCYgUGFyYW1UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8VCo+IHsKKyAgICAgICAgdHlwZWRlZiBU
KiBQYXJhbVR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBH
ZW5lcmljV29ya2VyVGFza1RyYWl0czxzdGQ6OmF1dG9fcHRyPFQ+ID4geworICAgICAgICB0eXBl
ZGVmIHN0ZDo6YXV0b19wdHI8VD4gUGFyYW1UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UGFzc1JlZlB0cjxUPiA+
IHsKKyAgICAgICAgdHlwZWRlZiBQYXNzUmVmUHRyPFQ+IFBhcmFtVHlwZTsKKyAgICB9OworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4KKyAgICBjbGFzcyBHZW5lcmlj
V29ya2VyVGFzazEgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CisgICAg
cHVibGljOgorICAgICAgICB0eXBlZGVmIHZvaWQgKCpNZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBNUDEpOworICAgICAgICB0eXBlZGVmIEdlbmVyaWNXb3JrZXJUYXNrMTxQMSwgTVAx
PiBHZW5lcmljV29ya2VyVGFzazsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29y
a2VyVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEg
cGFyYW1ldGVyMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBH
ZW5lcmljV29ya2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEpKTsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgR2VuZXJpY1dvcmtlclRhc2sxKE1ldGhvZCBtZXRob2QsIFBhcmFt
MSBwYXJhbWV0ZXIxKQorICAgICAgICAgICAgOiBtX21ldGhvZChtZXRob2QpCisgICAgICAgICAg
ICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgKCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJh
bWV0ZXIxKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWV0aG9kIG1fbWV0
aG9kOworICAgICAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+CisgICAg
Y2xhc3MgR2VuZXJpY1dvcmtlclRhc2syIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiB2b2lkICgqTWV0aG9kKShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIpOworICAgICAgICB0eXBlZGVmIEdlbmVyaWNX
b3JrZXJUYXNrMjxQMSwgTVAxLCBQMiwgTVAyPiBHZW5lcmljV29ya2VyVGFzazsKKyAgICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQ
YXJhbTE7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8
UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVy
aWNXb3JrZXJUYXNrPiBjcmVhdGUoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBh
cmFtMiBwYXJhbWV0ZXIyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMikpOwor
ICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBHZW5lcmljV29ya2VyVGFzazIoTWV0
aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQorICAgICAg
ICAgICAgOiBtX21ldGhvZChtZXRob2QpCisgICAgICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJh
bWV0ZXIxKQorICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgICgqbV9tZXRo
b2QpKGNvbnRleHQsIG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyKTsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgTWV0aG9kIG1fbWV0aG9kOworICAgICAgICBQMSBtX3BhcmFt
ZXRlcjE7CisgICAgICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlw
ZW5hbWUgUDMsIHR5cGVuYW1lIE1QMz4KKyAgICBjbGFzcyBHZW5lcmljV29ya2VyVGFzazMgOiBw
dWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CisgICAgcHVibGljOgorICAgICAg
ICB0eXBlZGVmIHZvaWQgKCpNZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1Q
MiwgTVAzKTsKKyAgICAgICAgdHlwZWRlZiBHZW5lcmljV29ya2VyVGFzazM8UDEsIE1QMSwgUDIs
IE1QMiwgUDMsIE1QMz4gR2VuZXJpY1dvcmtlclRhc2s7CisgICAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBl
IFBhcmFtMjsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0
czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2Vu
ZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwg
UGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwgcGFyYW1l
dGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMykpOworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBHZW5lcmljV29ya2VyVGFzazMoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFt
ZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKKyAgICAgICAgICAg
IDogbV9tZXRob2QobWV0aG9kKQorICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVy
MSkKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICAgICAs
IG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgKCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJhbWV0
ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMyk7CisgICAgICAgIH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICAgICAgUDEgbV9wYXJhbWV0ZXIxOwor
ICAgICAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgICAgIFAzIG1fcGFyYW1ldGVyMzsKKyAgICB9
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIs
IHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5
cGVuYW1lIE1QND4KKyAgICBjbGFzcyBHZW5lcmljV29ya2VyVGFzazQgOiBwdWJsaWMgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIHZv
aWQgKCpNZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQp
OworICAgICAgICB0eXBlZGVmIEdlbmVyaWNXb3JrZXJUYXNrNDxQMSwgTVAxLCBQMiwgTVAyLCBQ
MywgTVAzLCBQNCwgTVA0PiBHZW5lcmljV29ya2VyVGFzazsKKyAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5
cGUgUGFyYW0yOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJh
aXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5l
cmljV29ya2VyVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQ
YXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQ
YXJhbTQgcGFyYW1ldGVyNCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBHZW5lcmljV29ya2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBh
cmFtZXRlcjMsIHBhcmFtZXRlcjQpKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgR2VuZXJpY1dvcmtlclRhc2s0KE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQ
YXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0KQor
ICAgICAgICAgICAgOiBtX21ldGhvZChtZXRob2QpCisgICAgICAgICAgICAsIG1fcGFyYW1ldGVy
MShwYXJhbWV0ZXIxKQorICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAg
ICAgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgICAgICAgICAsIG1fcGFy
YW1ldGVyNChwYXJhbWV0ZXI0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgKCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJhbWV0ZXIxLCBt
X3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0KTsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgTWV0aG9kIG1fbWV0aG9kOworICAgICAgICBQMSBtX3BhcmFt
ZXRlcjE7CisgICAgICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICAgICAgUDMgbV9wYXJhbWV0ZXIz
OworICAgICAgICBQNCBtX3BhcmFtZXRlcjQ7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1l
IFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1
LCB0eXBlbmFtZSBNUDU+CisgICAgY2xhc3MgR2VuZXJpY1dvcmtlclRhc2s1IDogcHVibGljIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRl
ZiB2b2lkICgqTWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywg
TVA0LCBNUDUpOworICAgICAgICB0eXBlZGVmIEdlbmVyaWNXb3JrZXJUYXNrNTxQMSwgTVAxLCBQ
MiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1PiBHZW5lcmljV29ya2VyVGFzazsKKyAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMT46OlBhcmFt
VHlwZSBQYXJhbTE7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tU
cmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdl
bmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJh
bTQ7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDU+
OjpQYXJhbVR5cGUgUGFyYW01OworCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNX
b3JrZXJUYXNrPiBjcmVhdGUoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFt
MiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFt
NSBwYXJhbWV0ZXI1KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1l
dGVyMywgcGFyYW1ldGVyNCwgcGFyYW1ldGVyNSkpOworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBHZW5lcmljV29ya2VyVGFzazUoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFt
ZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFt
ZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1KQorICAgICAgICAgICAgOiBtX21ldGhvZChtZXRob2Qp
CisgICAgICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAgICAgLCBt
X3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFt
ZXRlcjMpCisgICAgICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0ZXI0KQorICAgICAgICAg
ICAgLCBtX3BhcmFtZXRlcjUocGFyYW1ldGVyNSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQsIG1fcGFy
YW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwgbV9wYXJh
bWV0ZXI1KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWV0aG9kIG1fbWV0
aG9kOworICAgICAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgICAgIFAyIG1fcGFyYW1ldGVyMjsK
KyAgICAgICAgUDMgbV9wYXJhbWV0ZXIzOworICAgICAgICBQNCBtX3BhcmFtZXRlcjQ7CisgICAg
ICAgIFA1IG1fcGFyYW1ldGVyNTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEs
IHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5
cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVu
YW1lIE1QNSwgdHlwZW5hbWUgUDYsIHR5cGVuYW1lIE1QNj4KKyAgICBjbGFzcyBHZW5lcmljV29y
a2VyVGFzazYgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CisgICAgcHVi
bGljOgorICAgICAgICB0eXBlZGVmIHZvaWQgKCpNZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSwgTVA2KTsKKyAgICAgICAgdHlwZWRlZiBHZW5l
cmljV29ya2VyVGFzazY8UDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QNCwgUDUsIE1Q
NSwgUDYsIE1QNj4gR2VuZXJpY1dvcmtlclRhc2s7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
R2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBh
cmFtMjsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQ
Mz46OlBhcmFtVHlwZSBQYXJhbTM7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dv
cmtlclRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OworICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBhcmFtNTsKKyAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQNj46OlBhcmFt
VHlwZSBQYXJhbTY7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRh
c2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFt
ZXRlcjUsIFBhcmFtNiBwYXJhbWV0ZXI2KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1l
dGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCwgcGFyYW1ldGVyNSwgcGFyYW1ldGVyNikpOwor
ICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBHZW5lcmljV29ya2VyVGFzazYoTWV0
aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMg
cGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1LCBQYXJhbTYg
cGFyYW1ldGVyNikKKyAgICAgICAgICAgIDogbV9tZXRob2QobWV0aG9kKQorICAgICAgICAgICAg
LCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBh
cmFtZXRlcjIpCisgICAgICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgICAg
ICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKKyAgICAgICAgICAgICwgbV9wYXJhbWV0
ZXI1KHBhcmFtZXRlcjUpCisgICAgICAgICAgICAsIG1fcGFyYW1ldGVyNihwYXJhbWV0ZXI2KQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
KCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1l
dGVyMywgbV9wYXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUsIG1fcGFyYW1ldGVyNik7CisgICAgICAg
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICAgICAgUDEg
bV9wYXJhbWV0ZXIxOworICAgICAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgICAgIFAzIG1fcGFy
YW1ldGVyMzsKKyAgICAgICAgUDQgbV9wYXJhbWV0ZXI0OworICAgICAgICBQNSBtX3BhcmFtZXRl
cjU7CisgICAgICAgIFA2IG1fcGFyYW1ldGVyNjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5h
bWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUg
UDUsIHR5cGVuYW1lIE1QNSwgdHlwZW5hbWUgUDYsIHR5cGVuYW1lIE1QNiwgdHlwZW5hbWUgUDcs
IHR5cGVuYW1lIE1QNz4KKyAgICBjbGFzcyBHZW5lcmljV29ya2VyVGFzazcgOiBwdWJsaWMgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVm
IHZvaWQgKCpNZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBN
UDQsIE1QNSwgTVA2LCBNUDcpOworICAgICAgICB0eXBlZGVmIEdlbmVyaWNXb3JrZXJUYXNrNzxQ
MSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1LCBQNiwgTVA2LCBQNywg
TVA3PiBHZW5lcmljV29ya2VyVGFzazsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmlj
V29ya2VyVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOwor
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAzPjo6UGFy
YW1UeXBlIFBhcmFtMzsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFz
a1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
R2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDU+OjpQYXJhbVR5cGUgUGFyYW01OworICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFA2Pjo6UGFyYW1UeXBlIFBh
cmFtNjsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQ
Nz46OlBhcmFtVHlwZSBQYXJhbTc7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJp
Y1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFy
YW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFy
YW01IHBhcmFtZXRlcjUsIFBhcmFtNiBwYXJhbWV0ZXI2LCBQYXJhbTcgcGFyYW1ldGVyNykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljV29ya2VyVGFz
ayhtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQs
IHBhcmFtZXRlcjUsIHBhcmFtZXRlcjYsIHBhcmFtZXRlcjcpKTsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgR2VuZXJpY1dvcmtlclRhc2s3KE1ldGhvZCBtZXRob2QsIFBhcmFt
MSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFt
NCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSwgUGFyYW02IHBhcmFtZXRlcjYsIFBhcmFt
NyBwYXJhbWV0ZXI3KQorICAgICAgICAgICAgOiBtX21ldGhvZChtZXRob2QpCisgICAgICAgICAg
ICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAgICAgLCBtX3BhcmFtZXRlcjIo
cGFyYW1ldGVyMikKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAg
ICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0ZXI0KQorICAgICAgICAgICAgLCBtX3BhcmFt
ZXRlcjUocGFyYW1ldGVyNSkKKyAgICAgICAgICAgICwgbV9wYXJhbWV0ZXI2KHBhcmFtZXRlcjYp
CisgICAgICAgICAgICAsIG1fcGFyYW1ldGVyNyhwYXJhbWV0ZXI3KQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgKCptX21ldGhvZCkoY29u
dGV4dCwgbV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0
ZXI0LCBtX3BhcmFtZXRlcjUsIG1fcGFyYW1ldGVyNiwgbV9wYXJhbWV0ZXI3KTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWV0aG9kIG1fbWV0aG9kOworICAgICAgICBQMSBt
X3BhcmFtZXRlcjE7CisgICAgICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICAgICAgUDMgbV9wYXJh
bWV0ZXIzOworICAgICAgICBQNCBtX3BhcmFtZXRlcjQ7CisgICAgICAgIFA1IG1fcGFyYW1ldGVy
NTsKKyAgICAgICAgUDYgbV9wYXJhbWV0ZXI2OworICAgICAgICBQNyBtX3BhcmFtZXRlcjc7Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+CisgICAgUGFz
c1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGVDYWxsYmFja1Rhc2so
CisgICAgICAgIHZvaWQgKCptZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEpLAor
ICAgICAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSkKKyAgICB7CisgICAgICAgIHJldHVybiBHZW5l
cmljV29ya2VyVGFzazE8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDE+
OjpjcmVhdGUoCisgICAgICAgICAgICBtZXRob2QsCisgICAgICAgICAgICBDcm9zc1RocmVhZENv
cGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+CisgICAgUGFz
c1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGVDYWxsYmFja1Rhc2so
CisgICAgICAgIHZvaWQgKCptZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1Q
MiksCisgICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMikK
KyAgICB7CisgICAgICAgIHJldHVybiBHZW5lcmljV29ya2VyVGFzazI8dHlwZW5hbWUgQ3Jvc3NU
aHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAy
Pjo6VHlwZSwgTVAyPjo6Y3JlYXRlKAorICAgICAgICAgICAgbWV0aG9kLAorICAgICAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLCBDcm9zc1RocmVhZENvcGll
cjxQMj46OmNvcHkocGFyYW1ldGVyMikpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAz
LCB0eXBlbmFtZSBNUDM+CisgICAgUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBjcmVhdGVDYWxsYmFja1Rhc2soCisgICAgICAgIHZvaWQgKCptZXRob2QpKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzKSwKKyAgICAgICAgY29uc3QgUDEmIHBhcmFt
ZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLCBjb25zdCBQMyYgcGFyYW1ldGVyMykKKyAgICB7
CisgICAgICAgIHJldHVybiBHZW5lcmljV29ya2VyVGFzazM8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRD
b3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlw
ZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMz46OmNyZWF0
ZSgKKyAgICAgICAgICAgIG1ldGhvZCwKKyAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAx
Pjo6Y29weShwYXJhbWV0ZXIxKSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRl
cjIpLAorICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBl
bmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFt
ZSBQNCwgdHlwZW5hbWUgTVA0PgorICAgIFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gY3JlYXRlQ2FsbGJhY2tUYXNrKAorICAgICAgICB2b2lkICgqbWV0aG9kKShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0KSwKKyAgICAgICAgY29uc3Qg
UDEmIHBhcmFtZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLCBjb25zdCBQMyYgcGFyYW1ldGVy
MywgY29uc3QgUDQmIHBhcmFtZXRlcjQpCisgICAgeworICAgICAgICByZXR1cm4gR2VuZXJpY1dv
cmtlclRhc2s0PHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMsCisgICAgICAgICAgICB0eXBlbmFtZSBDcm9zc1RocmVh
ZENvcGllcjxQND46OlR5cGUsIE1QND46OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICBtZXRob2Qs
CisgICAgICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEp
LCBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisgICAgICAgICAgICAg
ICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLCBDcm9zc1RocmVhZENv
cGllcjxQND46OmNvcHkocGFyYW1ldGVyNCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1l
IFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1
LCB0eXBlbmFtZSBNUDU+CisgICAgUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBjcmVhdGVDYWxsYmFja1Rhc2soCisgICAgICAgIHZvaWQgKCptZXRob2QpKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSksCisgICAgICAgIGNvbnN0
IFAxJiBwYXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29uc3QgUDMmIHBhcmFtZXRl
cjMsIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LCBjb25zdCBQNSYgcGFyYW1ldGVyNSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBHZW5lcmljV29ya2VyVGFzazU8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwg
TVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywKKyAgICAgICAg
ICAgIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0LCB0eXBlbmFtZSBD
cm9zc1RocmVhZENvcGllcjxQNT46OlR5cGUsIE1QNT46OmNyZWF0ZSgKKyAgICAgICAgICAgICAg
ICBtZXRob2QsCisgICAgICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBh
cmFtZXRlcjEpLCBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisgICAg
ICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLCBDcm9z
c1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1ldGVyNCksCisgICAgICAgICAgICAgICAgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDU+Ojpjb3B5KHBhcmFtZXRlcjUpKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAy
LCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0
eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1LCB0eXBlbmFtZSBQNiwgdHlwZW5hbWUgTVA2PgorICAg
IFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlQ2FsbGJhY2tU
YXNrKAorICAgICAgICB2b2lkICgqbWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAx
LCBNUDIsIE1QMywgTVA0LCBNUDUsIE1QNiksCisgICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIx
LCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29uc3QgUDMmIHBhcmFtZXRlcjMsIGNvbnN0IFA0JiBw
YXJhbWV0ZXI0LCBjb25zdCBQNSYgcGFyYW1ldGVyNSwgY29uc3QgUDYmIHBhcmFtZXRlcjYpCisg
ICAgeworICAgICAgICByZXR1cm4gR2VuZXJpY1dvcmtlclRhc2s2PHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46
OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMsCisg
ICAgICAgICAgICB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QNCwgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+OjpUeXBlLCBNUDUsIHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFA2Pjo6VHlwZSwgTVA2Pjo6Y3JlYXRlKAorICAgICAgICAgICAgICAgIG1ldGhv
ZCwKKyAgICAgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVy
MSksIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKKyAgICAgICAgICAg
ICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksIENyb3NzVGhyZWFk
Q29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwKKyAgICAgICAgICAgICAgICBDcm9zc1RocmVh
ZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVyNSksIENyb3NzVGhyZWFkQ29waWVyPFA2Pjo6Y29w
eShwYXJhbWV0ZXI2KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVu
YW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1l
IE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1Q
NSwgdHlwZW5hbWUgUDYsIHR5cGVuYW1lIE1QNiwgdHlwZW5hbWUgUDcsIHR5cGVuYW1lIE1QNz4K
KyAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxi
YWNrVGFzaygKKyAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1LCBNUDYsIE1QNyksCisgICAgICAgIGNvbnN0IFAxJiBw
YXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29uc3QgUDMmIHBhcmFtZXRlcjMsIGNv
bnN0IFA0JiBwYXJhbWV0ZXI0LCBjb25zdCBQNSYgcGFyYW1ldGVyNSwgY29uc3QgUDYmIHBhcmFt
ZXRlcjYsIGNvbnN0IFA3JiBwYXJhbWV0ZXI3KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdlbmVy
aWNXb3JrZXJUYXNrNzx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3Nz
VGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzLAorICAgICAgICAgICAgdHlwZW5hbWUgQ3Jvc3NU
aHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA1
Pjo6VHlwZSwgTVA1LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNj46OlR5cGUsIE1QNiwK
KyAgICAgICAgICAgIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA3Pjo6VHlwZSwgTVA3Pjo6
Y3JlYXRlKAorICAgICAgICAgICAgICAgIG1ldGhvZCwKKyAgICAgICAgICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6
Y29weShwYXJhbWV0ZXIyKSwKKyAgICAgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46
OmNvcHkocGFyYW1ldGVyMyksIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0
KSwKKyAgICAgICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVy
NSksIENyb3NzVGhyZWFkQ29waWVyPFA2Pjo6Y29weShwYXJhbWV0ZXI2KSwKKyAgICAgICAgICAg
ICAgICBDcm9zc1RocmVhZENvcGllcjxQNz46OmNvcHkocGFyYW1ldGVyNykpOworICAgIH0KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNl
bmRpZiAvLyBHZW5lcmljV29ya2VyVGFza19oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjBiYzlkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyLmNwcApAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiV29ya2VyLmgi
CisKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNp
bmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2
ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgor
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dFByb3h5
LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXb3JrZXI6Oldvcmtlcihjb25zdCBTdHJpbmcm
IHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMp
CisgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1fY29udGV4dFBy
b3h5KFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKHRoaXMpKQoreworICAgIG1fc2NyaXB0VVJM
ID0gY29udGV4dC0+Y29tcGxldGVVUkwodXJsKTsKKyAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCAh
bV9zY3JpcHRVUkwuaXNWYWxpZCgpKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+
Y2FuQWNjZXNzKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobV9zY3JpcHRVUkwpLmdldCgpKSkgewor
ICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIEZJWE1FOiAnaW5oZXJpdCcgY2hhcnNldCBhbmQgYWN0dWFsIGxvYWRpbmcgc3VwcG9ydCBm
cm9tIG9yaWdpbmFsIGRvY3VtZW50IHRvIGVuYWJsZSBuZXN0ZWQgd29ya2Vycy4KKyAgICBBU1NF
UlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpOworICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTsKKworICAgIG1fY2FjaGVkU2NyaXB0ID0gZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5yZXF1
ZXN0U2NyaXB0KG1fc2NyaXB0VVJMLCBkb2N1bWVudC0+Y2hhcnNldCgpKTsKKyAgICBpZiAoIW1f
Y2FjaGVkU2NyaXB0KSB7CisgICAgICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOyAgLy8gVGhlIHdv
cmtlciBjb250ZXh0IGRvZXMgbm90IGV4aXN0IHdoaWxlIGxvYWRpbmcsIHNvIHdlIG11c3QgZW5z
dXJlIHRoYXQgdGhlIHdvcmtlciBvYmplY3QgaXMgbm90IGNvbGxlY3RlZCwgYXMgd2VsbCBhcyBp
dHMgZXZlbnQgbGlzdGVuZXJzLgorICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7
Cit9CisKK1dvcmtlcjo6fldvcmtlcigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsgLy8gVGhlIGNvbnRleHQgaXMg
cHJvdGVjdGVkIGJ5IHdvcmtlciBjb250ZXh0IHByb3h5LCBzbyBpdCBjYW5ub3QgYmUgZGVzdHJv
eWVkIHdoaWxlIGEgV29ya2VyIGV4aXN0cy4KKyAgICBtX2NvbnRleHRQcm94eS0+d29ya2VyT2Jq
ZWN0RGVzdHJveWVkKCk7Cit9CisKK3ZvaWQgV29ya2VyOjpwb3N0TWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCit7CisgICAgbV9jb250ZXh0UHJveHktPnBvc3RNZXNzYWdlVG9Xb3JrZXJD
b250ZXh0KG1lc3NhZ2UpOworfQorCit2b2lkIFdvcmtlcjo6dGVybWluYXRlKCkKK3sKKyAgICBt
X2NvbnRleHRQcm94eS0+dGVybWluYXRlV29ya2VyQ29udGV4dCgpOworfQorCitib29sIFdvcmtl
cjo6Y2FuU3VzcGVuZCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEl0IGlzIG5vdCBjdXJyZW50
bHkgcG9zc2libGUgdG8gc3VzcGVuZCBhIHdvcmtlciwgc28gcGFnZXMgd2l0aCB3b3JrZXJzIGNh
biBub3QgZ28gaW50byBwYWdlIGNhY2hlLgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBX
b3JrZXI6OnN0b3AoKQoreworICAgIHRlcm1pbmF0ZSgpOworfQorCitib29sIFdvcmtlcjo6aGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0UHJveHktPmhh
c1BlbmRpbmdBY3Rpdml0eSgpIHx8IEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5
KCk7Cit9CisKK3ZvaWQgV29ya2VyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogdW51
c2VkUmVzb3VyY2UpCit7CisgICAgQVNTRVJUX1VOVVNFRCh1bnVzZWRSZXNvdXJjZSwgdW51c2Vk
UmVzb3VyY2UgPT0gbV9jYWNoZWRTY3JpcHQpOworCisgICAgaWYgKG1fY2FjaGVkU2NyaXB0LT5l
cnJvck9jY3VycmVkKCkpCisgICAgICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOworICAgIGVsc2UK
KyAgICAgICAgbV9jb250ZXh0UHJveHktPnN0YXJ0V29ya2VyQ29udGV4dChtX3NjcmlwdFVSTCwg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51c2VyQWdlbnQobV9zY3JpcHRVUkwpLCBtX2NhY2hl
ZFNjcmlwdC0+c2NyaXB0KCkpOworCisgICAgbV9jYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0
aGlzKTsKKyAgICBtX2NhY2hlZFNjcmlwdCA9IDA7CisKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKK30KKwordm9pZCBXb3JrZXI6OmRpc3BhdGNoRXJyb3JFdmVudCgpCit7CisgICAg
UmVmUHRyPEV2ZW50PiBldnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50
LCBmYWxzZSwgdHJ1ZSk7CisgICAgaWYgKG1fb25FcnJvckxpc3RlbmVyKSB7CisgICAgICAgIGV2
dC0+c2V0VGFyZ2V0KHRoaXMpOworICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7
CisgICAgICAgIG1fb25FcnJvckxpc3RlbmVyLT5oYW5kbGVFdmVudChldnQuZ2V0KCksIHRydWUp
OworICAgIH0KKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGRpc3BhdGNoRXZlbnQo
ZXZ0LnJlbGVhc2UoKSwgZWMpOworICAgIEFTU0VSVCghZWMpOworfQorCit2b2lkIFdvcmtlcjo6
YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyLCBib29sKQoreworICAgIEV2ZW50TGlzdGVu
ZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7
CisgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkgeworICAgICAgICBMaXN0
ZW5lclZlY3RvciBsaXN0ZW5lcnM7CisgICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0
ZW5lcik7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJz
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRl
ci0+c2Vjb25kOworICAgICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBsaXN0ZW5l
ckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQo
KTsgKytsaXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09IGV2
ZW50TGlzdGVuZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOworICAgICAgICBtX2V2
ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7CisgICAgfSAgICAKK30KKwor
dm9pZCBXb3JrZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCit7CisgICAgRXZlbnRM
aXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRU
eXBlKTsKKyAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29u
ZDsKKyAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIg
PSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKyts
aXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5l
cikgeworICAgICAgICAgICAgbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lckl0ZXIgLSBsaXN0ZW5l
cnMuYmVnaW4oKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisK
K2Jvb2wgV29ya2VyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LT50eXBlKCkuaXNFbXB0
eSgpKSB7CisgICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246OlVOU1BFQ0lGSUVEX0VWRU5UX1RZ
UEVfRVJSOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBMaXN0ZW5lclZlY3Rv
ciBsaXN0ZW5lcnNDb3B5ID0gbV9ldmVudExpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUoKSk7Cisg
ICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlz
dGVuZXJzQ29weS5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzQ29weS5lbmQoKTsg
KytsaXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICAg
ICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CisgICAgICAgIGxpc3RlbmVySXRlci0+
Z2V0KCktPmhhbmRsZUV2ZW50KGV2ZW50LmdldCgpLCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0
dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworfQorCit2b2lkIFdvcmtlcjo6ZGlzcGF0
Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8RXZlbnQ+IGV2
dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsICIiLCAiIiwgMCwgMCk7CisKKyAgICBp
ZiAobV9vbk1lc3NhZ2VMaXN0ZW5lci5nZXQoKSkgeworICAgICAgICBldnQtPnNldFRhcmdldCh0
aGlzKTsKKyAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOworICAgICAgICBtX29u
TWVzc2FnZUxpc3RlbmVyLT5oYW5kbGVFdmVudChldnQuZ2V0KCksIGZhbHNlKTsKKyAgICB9CisK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNl
KCksIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyLmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZDA1ZjlkNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXIuaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaWZuZGVmIFdvcmtl
cl9oCisjZGVmaW5lIFdvcmtlcl9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUg
IkF0b21pY1N0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFu
ZGxlLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisg
ICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CisgICAgY2xhc3MgQ2FjaGVkU2NyaXB0OworICAgIGNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgY2xhc3MgU3RyaW5nOworICAgIGNsYXNz
IFdvcmtlckNvbnRleHRQcm94eTsKKworICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisK
KyAgICBjbGFzcyBXb3JrZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXI+LCBwdWJsaWMgQWN0
aXZlRE9NT2JqZWN0LCBwcml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50LCBwdWJsaWMgRXZlbnRU
YXJnZXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyPiBj
cmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyKHVybCwgY29u
dGV4dCwgZWMpKTsgfQorICAgICAgICB+V29ya2VyKCk7CisKKyAgICAgICAgdmlydHVhbCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1
cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KKworICAgICAg
ICB2aXJ0dWFsIFdvcmtlciogdG9Xb3JrZXIoKSB7IHJldHVybiB0aGlzOyB9CisKKyAgICAgICAg
dm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisgICAgICAgIHZvaWQg
dGVybWluYXRlKCk7CisKKyAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5n
Jik7CisgICAgICAgIHZvaWQgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CisKKyAgICAgICAgdmlydHVh
bCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsK
KyAgICAgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgICAgIHZp
cnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2Rl
Jik7CisKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4gTGlz
dGVuZXJWZWN0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3Rl
bmVyVmVjdG9yPiBFdmVudExpc3RlbmVyc01hcDsKKyAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAm
IGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQorCisgICAgICAg
IHVzaW5nIFJlZkNvdW50ZWQ8V29ya2VyPjo6cmVmOworICAgICAgICB1c2luZyBSZWZDb3VudGVk
PFdvcmtlcj46OmRlcmVmOworCisgICAgICAgIHZvaWQgc2V0T25tZXNzYWdlKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uTWVzc2FnZUxpc3RlbmVyID0gZXZl
bnRMaXN0ZW5lcjsgfQorICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1lc3NhZ2UoKSBjb25zdCB7
IHJldHVybiBtX29uTWVzc2FnZUxpc3RlbmVyLmdldCgpOyB9CisKKyAgICAgICAgdm9pZCBzZXRP
bmVycm9yKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uRXJy
b3JMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICAgICAgRXZlbnRMaXN0ZW5lciogb25l
cnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fb25FcnJvckxpc3RlbmVyLmdldCgpOyB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBXb3JrZXIoY29uc3QgU3RyaW5nJiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRU
YXJnZXQoKSB7IHJlZigpOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0
KCkgeyBkZXJlZigpOyB9CisKKyAgICAgICAgS1VSTCBtX3NjcmlwdFVSTDsKKyAgICAgICAgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKKworICAgICAg
ICBXb3JrZXJDb250ZXh0UHJveHkqIG1fY29udGV4dFByb3h5OyAvLyBUaGUgcHJveHkgb3V0bGl2
ZXMgdGhlIHdvcmtlciB0byBwZXJmb3JtIHRocmVhZCBzaHV0ZG93bi4KKworICAgICAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk1lc3NhZ2VMaXN0ZW5lcjsKKyAgICAgICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IG1fb25FcnJvckxpc3RlbmVyOworICAgICAgICBFdmVudExpc3RlbmVyc01h
cCBtX2V2ZW50TGlzdGVuZXJzOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQorCisjZW5kaWYgLy8gV29ya2VyX2gKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRsIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5p
ZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmOWI2MgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRsCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqCisgKi8KKworbW9kdWxlIHRocmVhZHMgeworCisgICAgaW50ZXJmYWNlIFtDdXN0b21NYXJr
RnVuY3Rpb24sIENvbmRpdGlvbmFsPVdPUktFUlNdIFdvcmtlciB7CisKKyAgICAgICAgYXR0cmli
dXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25tZXNzYWdlOworICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGluIERPTVN0cmluZyBtZXNz
YWdlKTsKKworICAgICAgICB2b2lkIHRlcm1pbmF0ZSgpOworCisgICAgICAgIC8vIEV2ZW50VGFy
Z2V0IGludGVyZmFjZQorICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4g
RE9NU3RyaW5nIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBbQ3VzdG9tXSB2b2lk
IHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNh
cHR1cmUpOworICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQorICAg
ICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKKyAgICB9OworCit9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5YThl
NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApA
QCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorCisjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NVGltZXIuaCIKKyNpbmNsdWRlICJE
T01XaW5kb3cuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9u
LmgiCisjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldvcmtlckxvY2F0aW9u
LmgiCisjaW5jbHVkZSAiV29ya2VyTmF2aWdhdG9yLmgiCisjaW5jbHVkZSAiV29ya2VyT2JqZWN0
UHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV29ya2VyQ29udGV4dDo6V29ya2VyQ29udGV4
dChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBXb3JrZXJUaHJlYWQq
IHRocmVhZCkKKyAgICA6IG1fdXJsKHVybCkKKyAgICAsIG1fdXNlckFnZW50KHVzZXJBZ2VudCkK
KyAgICAsIG1fbG9jYXRpb24oV29ya2VyTG9jYXRpb246OmNyZWF0ZSh1cmwpKQorICAgICwgbV9z
Y3JpcHQobmV3IFdvcmtlclNjcmlwdENvbnRyb2xsZXIodGhpcykpCisgICAgLCBtX3RocmVhZCh0
aHJlYWQpCit7CisgICAgc2V0U2VjdXJpdHlPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1
cmwpKTsKK30KKworV29ya2VyQ29udGV4dDo6fldvcmtlckNvbnRleHQoKQoreworICAgIEFTU0VS
VChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQtPnRocmVhZElEKCkpOworCisgICAgbV90aHJl
YWQtPndvcmtlck9iamVjdFByb3h5KCktPndvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKK30KKwor
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogV29ya2VyQ29udGV4dDo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V29ya2VyQ29udGV4dCo+KHRo
aXMpOworfQorCitjb25zdCBLVVJMJiBXb3JrZXJDb250ZXh0Ojp2aXJ0dWFsVVJMKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV91cmw7Cit9CisKK0tVUkwgV29ya2VyQ29udGV4dDo6dmlydHVhbENv
bXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAoreworICAgIHJldHVybiBjb21wbGV0
ZVVSTCh1cmwpOworfQorCitLVVJMIFdvcmtlckNvbnRleHQ6OmNvbXBsZXRlVVJMKGNvbnN0IFN0
cmluZyYgdXJsKSBjb25zdAoreworICAgIC8vIEFsd2F5cyByZXR1cm4gYSBudWxsIFVSTCB3aGVu
IHBhc3NlZCBhIG51bGwgc3RyaW5nLgorICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgY2hhbmdlIHRo
ZSBLVVJMIGNvbnN0cnVjdG9yIHRvIGhhdmUgdGhpcyBiZWhhdmlvcj8KKyAgICBpZiAodXJsLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gS1VSTCgpOworICAgIC8vIEZJWE1FOiBkb2VzIHRoaXMg
bmVlZCB0byBwcm92aWRlIGEgY2hhcnNldCwgbGlrZSBEb2N1bWVudDo6Y29tcGxldGVVUkwgZG9l
cz8KKyAgICByZXR1cm4gS1VSTChtX2xvY2F0aW9uLT51cmwoKSwgdXJsKTsKK30KKworU3RyaW5n
IFdvcmtlckNvbnRleHQ6OnVzZXJBZ2VudChjb25zdCBLVVJMJikgY29uc3QKK3sKKyAgICByZXR1
cm4gbV91c2VyQWdlbnQ7Cit9CisKK1dvcmtlck5hdmlnYXRvciogV29ya2VyQ29udGV4dDo6bmF2
aWdhdG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbmF2aWdhdG9yKQorICAgICAgICBtX25hdmln
YXRvciA9IFdvcmtlck5hdmlnYXRvcjo6Y3JlYXRlKG1fdXNlckFnZW50KTsKKyAgICByZXR1cm4g
bV9uYXZpZ2F0b3IuZ2V0KCk7Cit9CisKK2Jvb2wgV29ya2VyQ29udGV4dDo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKK3sKKyAgICBBY3RpdmVET01PYmplY3RzTWFwJiBhY3RpdmVPYmplY3Rz
ID0gYWN0aXZlRE9NT2JqZWN0cygpOworICAgIEFjdGl2ZURPTU9iamVjdHNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGFjdGl2ZU9iamVjdHNFbmQgPSBhY3RpdmVPYmplY3RzLmVuZCgpOworICAgIGZvciAo
QWN0aXZlRE9NT2JqZWN0c01hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGFjdGl2ZU9iamVjdHMu
YmVnaW4oKTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKKyAgICAgICAgaWYg
KGl0ZXItPmZpcnN0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV29ya2VyQ29udGV4dDo6
cmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgbV90aHJlYWQtPndvcmtlck9iamVj
dFByb3h5KCktPnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChlcnJvck1lc3NhZ2UsIGxpbmVO
dW1iZXIsIHNvdXJjZVVSTCk7Cit9CisKK3ZvaWQgV29ya2VyQ29udGV4dDo6YWRkTWVzc2FnZShN
ZXNzYWdlRGVzdGluYXRpb24gZGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNz
YWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgbV90aHJlYWQtPndvcmtlck9iamVj
dFByb3h5KCktPnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGRlc3RpbmF0aW9uLCBz
b3VyY2UsIGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworfQorCit2b2lk
IFdvcmtlckNvbnRleHQ6OnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25l
ZCBsb25nLCBjb25zdCBTY3JpcHRTdHJpbmcmKQoreworICAgIC8vIEZJWE1FOiBUaGUgaW1wbGVt
ZW50YXRpb24gaXMgcGVuZGluZyB0aGUgZml4ZXMgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMTc1CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
b3JrZXJDb250ZXh0Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
bV90aHJlYWQtPndvcmtlck9iamVjdFByb3h5KCktPnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3Qo
bWVzc2FnZSk7Cit9CisKK3ZvaWQgV29ya2VyQ29udGV4dDo6YWRkRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyLCBib29sKQoreworICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAgaWYgKGl0ZXIgPT0gbV9l
dmVudExpc3RlbmVycy5lbmQoKSkgeworICAgICAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnM7
CisgICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7CisgICAgICAgIG1fZXZl
bnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOworICAgICAgICBm
b3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVn
aW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsK
KyAgICAgICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsaXN0ZW5lcnMu
YXBwZW5kKGV2ZW50TGlzdGVuZXIpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVu
dFR5cGUsIGxpc3RlbmVycyk7CisgICAgfSAgICAKK30KKwordm9pZCBXb3JrZXJDb250ZXh0Ojpy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyKiBldmVudExpc3RlbmVyLCBib29sKQoreworICAgIEV2ZW50TGlzdGVuZXJzTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAgaWYg
KGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgZm9yIChM
aXN0ZW5lclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJl
Z2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7
CisgICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpIHsKKyAgICAgICAg
ICAgIGxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXJJdGVyIC0gbGlzdGVuZXJzLmJlZ2luKCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFdvcmtlckNv
bnRleHQ6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIGlmICghZXZlbnQgfHwgZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgZWMgPSBFdmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBMaXN0ZW5lclZlY3RvciBs
aXN0ZW5lcnNDb3B5ID0gbV9ldmVudExpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUoKSk7CisgICAg
Zm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVu
ZXJzQ29weS5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzQ29weS5lbmQoKTsgKyts
aXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICAgICAg
ZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CisgICAgICAgIGxpc3RlbmVySXRlci0+Z2V0
KCktPmhhbmRsZUV2ZW50KGV2ZW50LmdldCgpLCBmYWxzZSk7CisgICAgfQorICAgIAorICAgIHJl
dHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKK30KKwordm9pZCBXb3JrZXJDb250ZXh0
Ojpwb3N0VGFzayhQYXNzUmVmUHRyPFRhc2s+IHRhc2spCit7CisgICAgdGhyZWFkKCktPnJ1bkxv
b3AoKS5wb3N0VGFzayh0YXNrKTsKK30KKworaW50IFdvcmtlckNvbnRleHQ6Omluc3RhbGxUaW1l
b3V0KFNjaGVkdWxlZEFjdGlvbiogYWN0aW9uLCBpbnQgdGltZW91dCwgYm9vbCBzaW5nbGVTaG90
KQoreworICAgIHJldHVybiBET01UaW1lcjo6aW5zdGFsbChzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCksIGFjdGlvbiwgdGltZW91dCwgc2luZ2xlU2hvdCk7Cit9CisKK3ZvaWQgV29ya2VyQ29udGV4
dDo6cmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKQoreworICAgIERPTVRpbWVyOjpyZW1vdmVC
eUlkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGltZW91dElkKTsKK30KKwordm9pZCBXb3Jr
ZXJDb250ZXh0OjpkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgIiIsICIi
LCAwLCAwKTsKKworICAgIGlmIChtX29ubWVzc2FnZUxpc3RlbmVyLmdldCgpKSB7CisgICAgICAg
IGV2dC0+c2V0VGFyZ2V0KHRoaXMpOworICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQodGhp
cyk7CisgICAgICAgIG1fb25tZXNzYWdlTGlzdGVuZXItPmhhbmRsZUV2ZW50KGV2dC5nZXQoKSwg
ZmFsc2UpOworICAgIH0KKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGRpc3BhdGNo
RXZlbnQoZXZ0LnJlbGVhc2UoKSwgZWMpOworICAgIEFTU0VSVCghZWMpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNGUxM2EKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCkBAIC0wLDAg
KzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKgorICovCisKKyNpZm5kZWYgV29ya2VyQ29udGV4dF9oCisjZGVmaW5l
IFdvcmtlckNvbnRleHRfaAorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJBdG9t
aWNTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2
ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgIldvcmtlclNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xh
c3MgU2NoZWR1bGVkQWN0aW9uOworICAgIGNsYXNzIFdvcmtlckxvY2F0aW9uOworICAgIGNsYXNz
IFdvcmtlck5hdmlnYXRvcjsKKyAgICBjbGFzcyBXb3JrZXJUaHJlYWQ7CisKKyAgICBjbGFzcyBX
b3JrZXJDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyQ29udGV4dD4sIHB1YmxpYyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LCBwdWJsaWMgRXZlbnRUYXJnZXQgeworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4gY3JlYXRlKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdvcmtlclRocmVhZCogdGhyZWFkKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlckNvbnRleHQo
dXJsLCB1c2VyQWdlbnQsIHRocmVhZCkpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB+
V29ya2VyQ29udGV4dCgpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1dvcmtlckNvbnRleHQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisKKyAgICAgICAgY29u
c3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICAgICAgS1VSTCBjb21w
bGV0ZVVSTChjb25zdCBTdHJpbmcmKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIFN0cmluZyB1
c2VyQWdlbnQoY29uc3QgS1VSTCYpIGNvbnN0OworCisgICAgICAgIFdvcmtlckxvY2F0aW9uKiBs
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24uZ2V0KCk7IH0KKyAgICAgICAgV29y
a2VyTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSBjb25zdDsKKworICAgICAgICBXb3JrZXJTY3JpcHRD
b250cm9sbGVyKiBzY3JpcHQoKSB7IHJldHVybiBtX3NjcmlwdC5nZXQoKTsgfQorICAgICAgICB2
b2lkIGNsZWFyU2NyaXB0KCkgeyByZXR1cm4gbV9zY3JpcHQuY2xlYXIoKTsgfQorICAgICAgICBX
b3JrZXJUaHJlYWQqIHRocmVhZCgpIHsgcmV0dXJuIG1fdGhyZWFkOyB9CisKKyAgICAgICAgYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2Fn
ZShNZXNzYWdlRGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJl
cXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRTdHJpbmcmIHNvdXJj
ZVN0cmluZyk7CisKKyAgICAgICAgdmlydHVhbCBXb3JrZXJDb250ZXh0KiB0b1dvcmtlckNvbnRl
eHQoKSB7IHJldHVybiB0aGlzOyB9CisKKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2soUGFzc1JlZlB0
cjxUYXNrPik7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRleHQncyB0aHJlYWQgYXN5bmNo
cm9ub3VzbHkuCisKKyAgICAgICAgaW50IGluc3RhbGxUaW1lb3V0KFNjaGVkdWxlZEFjdGlvbios
IGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpOworICAgICAgICB2b2lkIHJlbW92ZVRpbWVv
dXQoaW50IHRpbWVvdXRJZCk7CisKKyAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2UoY29uc3Qg
U3RyaW5nJik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wg
dXNlQ2FwdHVyZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0
dXJlKTsKKyAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgICAgICB2b2lkIHNldE9ubWVzc2FnZShQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbm1lc3NhZ2VMaXN0ZW5lciA9
IGV2ZW50TGlzdGVuZXI7IH0KKyAgICAgICAgRXZlbnRMaXN0ZW5lciogb25tZXNzYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9vbm1lc3NhZ2VMaXN0ZW5lci5nZXQoKTsgfQorCisgICAgICAgIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxFdmVudExpc3RlbmVyPiA+IExpc3RlbmVyVmVjdG9yOworICAgICAg
ICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0
ZW5lcnNNYXA7CisgICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExpc3RlbmVycygpIHsg
cmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0KKworICAgICAgICB1c2luZyBSZWZDb3VudGVkPFdv
cmtlckNvbnRleHQ+OjpyZWY7CisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8V29ya2VyQ29udGV4
dD46OmRlcmVmOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSB7IHJlZigpOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJl
ZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IGRlcmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCB2
b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVy
ZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorCisgICAgICAgIFdvcmtlckNvbnRleHQoY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIFdvcmtlclRocmVhZCopOworCisgICAgICAgIHZpcnR1
YWwgY29uc3QgS1VSTCYgdmlydHVhbFVSTCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEtVUkwg
dmlydHVhbENvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgICAgIEtVUkwg
bV91cmw7CisgICAgICAgIFN0cmluZyBtX3VzZXJBZ2VudDsKKyAgICAgICAgUmVmUHRyPFdvcmtl
ckxvY2F0aW9uPiBtX2xvY2F0aW9uOworICAgICAgICBtdXRhYmxlIFJlZlB0cjxXb3JrZXJOYXZp
Z2F0b3I+IG1fbmF2aWdhdG9yOworCisgICAgICAgIE93blB0cjxXb3JrZXJTY3JpcHRDb250cm9s
bGVyPiBtX3NjcmlwdDsKKyAgICAgICAgV29ya2VyVGhyZWFkKiBtX3RocmVhZDsKKworICAgICAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbm1lc3NhZ2VMaXN0ZW5lcjsKKyAgICAgICAgRXZl
bnRMaXN0ZW5lcnNNYXAgbV9ldmVudExpc3RlbmVyczsKKyAgICB9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIFdvcmtl
ckNvbnRleHRfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRs
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmUxZmZmNTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyQ29udGV4dC5pZGwKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCittb2R1
bGUgdGhyZWFkcyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1XT1JL
RVJTLAorICAgICAgICBDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QsCisgICAgICAgIEN1c3RvbU1h
cmtGdW5jdGlvbiwKKyAgICAgICAgRXh0ZW5kc0RPTUdsb2JhbE9iamVjdCwKKyAgICAgICAgTGVn
YWN5UGFyZW50PUpTV29ya2VyQ29udGV4dEJhc2UsCisgICAgICAgIE5vU3RhdGljVGFibGVzCisg
ICAgXSBXb3JrZXJDb250ZXh0IHsKKyNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpCisg
ICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tXSBXb3JrZXJDb250ZXh0IHNlbGY7CisjZW5kaWYKKwor
ICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7CisgICAgICAgIHZvaWQg
cG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UpOworCisgICAgICAgIGF0dHJpYnV0ZSBb
UmVwbGFjZWFibGVdIFdvcmtlckxvY2F0aW9uIGxvY2F0aW9uOworICAgICAgICBhdHRyaWJ1dGUg
W1JlcGxhY2VhYmxlXSBXb3JrZXJOYXZpZ2F0b3IgbmF2aWdhdG9yOworICAgICAgICAKKyAgICAg
ICAgYXR0cmlidXRlIE1lc3NhZ2VFdmVudENvbnN0cnVjdG9yIE1lc3NhZ2VFdmVudDsKKyAgICAg
ICAgYXR0cmlidXRlIFdvcmtlckxvY2F0aW9uQ29uc3RydWN0b3IgV29ya2VyTG9jYXRpb247CisK
KyAgICAgICAgLy8gVGltZXJzCisgICAgICAgIFtDdXN0b21dIGxvbmcgc2V0VGltZW91dChpbiBU
aW1lb3V0SGFuZGxlciBoYW5kbGVyLCBpbiBsb25nIHRpbWVvdXQpOworICAgICAgICAvLyBbQ3Vz
dG9tXSBsb25nIHNldFRpbWVvdXQoaW4gRE9NU3RyaW5nIGNvZGUsIGluIGxvbmcgdGltZW91dCk7
CisgICAgICAgIFtDdXN0b21dIHZvaWQgY2xlYXJUaW1lb3V0KGluIGxvbmcgaGFuZGxlKTsKKwor
ICAgICAgICBbQ3VzdG9tXSBsb25nIHNldEludGVydmFsKGluIFRpbWVvdXRIYW5kbGVyIGhhbmRs
ZXIsIGluIGxvbmcgdGltZW91dCk7CisgICAgICAgIC8vIFtDdXN0b21dIGxvbmcgc2V0SW50ZXJ2
YWwoaW4gRE9NU3RyaW5nIGNvZGUsIGluIGxvbmcgdGltZW91dCk7CisgICAgICAgIFtDdXN0b21d
IHZvaWQgY2xlYXJJbnRlcnZhbChpbiBsb25nIGhhbmRsZSk7CisKKyAgICAgICAgLy8gRXZlbnRU
YXJnZXQgaW50ZXJmYWNlCisgICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihp
biBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIFtDdXN0b21dIHZv
aWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNl
Q2FwdHVyZSk7CisgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCisg
ICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOworICAgIH07CisKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaCBiL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJDb250ZXh0UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5jOGY1NzYxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRl
eHRQcm94eS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdvcmtlckNvbnRleHRQcm94eV9oCisj
ZGVmaW5lIFdvcmtlckNvbnRleHRQcm94eV9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBTdHJpbmc7Cisg
ICAgY2xhc3MgV29ya2VyOworCisgICAgLy8gQSBwcm94eSB0byB0YWxrIHRvIHRoZSB3b3JrZXIg
Y29udGV4dC4KKyAgICBjbGFzcyBXb3JrZXJDb250ZXh0UHJveHkgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFdvcmtlckNvbnRleHRQcm94eSogY3JlYXRlKFdvcmtlciopOworCisgICAg
ICAgIHZpcnR1YWwgfldvcmtlckNvbnRleHRQcm94eSgpIHt9CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIHN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmlu
ZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpID0gMDsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgdGVybWluYXRlV29ya2VyQ29udGV4dCgpID0gMDsKKworICAgICAgICB2aXJ0
dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgU3RyaW5nJikgPSAwOwor
CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCA9IDA7CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIHdvcmtlck9iamVjdERlc3Ryb3llZCgpID0gMDsKKyAgICB9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykK
KworI2VuZGlmIC8vIFdvcmtlckNvbnRleHRQcm94eV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyTG9jYXRpb24uY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9u
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODRiZjkzCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcApAQCAtMCwwICsx
LDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShX
T1JLRVJTKQorCisjaW5jbHVkZSAiV29ya2VyTG9jYXRpb24uaCIKKworI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIFdvcmtlckxvY2F0
aW9uOjpocmVmKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91cmwuaGFzUGF0aCgpID8gbV91cmwu
cHJldHR5VVJMKCkgOiBtX3VybC5wcmV0dHlVUkwoKSArICIvIjsKK30KKworU3RyaW5nIFdvcmtl
ckxvY2F0aW9uOjpwcm90b2NvbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsLnByb3RvY29s
KCkgKyAiOiI7Cit9CisKK1N0cmluZyBXb3JrZXJMb2NhdGlvbjo6aG9zdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fdXJsLnBvcnQoKSA/IG1fdXJsLmhvc3QoKSArICI6IiArIFN0cmluZzo6bnVt
YmVyKChzdGF0aWNfY2FzdDxpbnQ+KG1fdXJsLnBvcnQoKSkpKSA6IG1fdXJsLmhvc3QoKTsKK30K
KworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpob3N0bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fdXJsLmhvc3QoKTsKK30KKworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpwb3J0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV91cmwucG9ydCgpID8gU3RyaW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8
aW50PihtX3VybC5wb3J0KCkpKSA6ICIiOworfQorCitTdHJpbmcgV29ya2VyTG9jYXRpb246OnBh
dGhuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91cmwucGF0aCgpLmlzRW1wdHkoKSA/ICIv
IiA6IG1fdXJsLnBhdGgoKTsKK30KKworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpzZWFyY2goKSBj
b25zdAoreworICAgIHJldHVybiBtX3VybC5xdWVyeSgpLmlzRW1wdHkoKSA/ICIiIDogIj8iICsg
bV91cmwucXVlcnkoKTsKK30KKworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpoYXNoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV91cmwucmVmKCkuaXNFbXB0eSgpID8gIiIgOiAiIyIgKyBtX3VybC5y
ZWYoKTsKK30KKworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjp0b1N0cmluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fdXJsLmhhc1BhdGgoKSA/IG1fdXJsLnByZXR0eVVSTCgpIDogbV91cmwucHJl
dHR5VVJMKCkgKyAiLyI7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9j
YXRpb24uaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzMxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyTG9jYXRpb24uaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisK
KyNpZm5kZWYgV29ya2VyTG9jYXRpb25faAorI2RlZmluZSBXb3JrZXJMb2NhdGlvbl9oCisKKyNp
ZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTdHJpbmc7CisKKyAg
ICBjbGFzcyBXb3JrZXJMb2NhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlckxvY2F0aW9u
PiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJMb2NhdGlv
bj4gY3JlYXRlKGNvbnN0IEtVUkwmIHVybCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXb3JrZXJMb2NhdGlvbih1cmwpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisKKyAgICAgICAgU3Ry
aW5nIGhyZWYoKSBjb25zdDsKKworICAgICAgICAvLyBVUkkgZGVjb21wb3NpdGlvbiBhdHRyaWJ1
dGVzCisgICAgICAgIFN0cmluZyBwcm90b2NvbCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgaG9z
dCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgaG9zdG5hbWUoKSBjb25zdDsKKyAgICAgICAgU3Ry
aW5nIHBvcnQoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHBhdGhuYW1lKCkgY29uc3Q7CisgICAg
ICAgIFN0cmluZyBzZWFyY2goKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGhhc2goKSBjb25zdDsK
KworICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIFdvcmtlckxvY2F0aW9uKGNvbnN0IEtVUkwmIHVybCkgOiBtX3VybCh1cmwpIHsgfQorCisg
ICAgICAgIEtVUkwgbV91cmw7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNlbmRpZiAvLyBXb3JrZXJMb2NhdGlvbl9oCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uaWRsIGIvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckxvY2F0aW9uLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41NTUxZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxv
Y2F0aW9uLmlkbApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHRocmVhZHMgeworCisgICAg
aW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V09SS0VSUywKKyAgICAgICAgR2VuZXJh
dGVDb25zdHJ1Y3RvciwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKKyAgICBdIFdvcmtlckxvY2F0
aW9uIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBocmVmOworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHByb3RvY29sOworICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGhvc3Q7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgaG9zdG5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
cG9ydDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwYXRobmFtZTsKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBzZWFyY2g7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgaGFzaDsKKworICAgICAgICBbRG9udEVudW1dIERPTVN0
cmluZyB0b1N0cmluZygpOworICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNjI2MDcK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHku
Y3BwCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJXb3JrZXJNZXNzYWdpbmdQcm94eS5o
IgorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJHZW5lcmljV29ya2VyVGFzay5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgorI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXIuaCIKKyNp
bmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrIDogcHVi
bGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVdvcmtl
ckNvbnRleHRUYXNrKG1lc3NhZ2UpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWVzc2FnZVdv
cmtlckNvbnRleHRUYXNrKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICAgICAgOiBtX21lc3Nh
Z2UobWVzc2FnZS5jb3B5KCkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHNjcmlwdENvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICAgICAg
V29ya2VyQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihzY3Jp
cHRDb250ZXh0KTsKKworICAgICAgICBjb250ZXh0LT5kaXNwYXRjaE1lc3NhZ2UobV9tZXNzYWdl
KTsKKworICAgICAgICBzdGF0aWNfY2FzdDxXb3JrZXJNZXNzYWdpbmdQcm94eSo+KGNvbnRleHQt
PnRocmVhZCgpLT53b3JrZXJPYmplY3RQcm94eSgpKS0+Y29uZmlybVdvcmtlclRocmVhZE1lc3Nh
Z2UoY29udGV4dC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBTdHJpbmcgbV9tZXNzYWdlOworfTsKKworY2xhc3MgTWVzc2FnZVdvcmtlclRhc2sgOiBwdWJs
aWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8TWVzc2FnZVdvcmtlclRhc2s+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVdvcmtlclRhc2sobWVzc2FnZSwgbWVzc2FnaW5nUHJv
eHkpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWVzc2FnZVdvcmtlclRhc2soY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCisgICAg
ICAgIDogbV9tZXNzYWdlKG1lc3NhZ2UuY29weSgpKQorICAgICAgICAsIG1fbWVzc2FnaW5nUHJv
eHkobWVzc2FnaW5nUHJveHkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKKyAgICB7CisgICAgICAgIFdvcmtlciog
d29ya2VyT2JqZWN0ID0gbV9tZXNzYWdpbmdQcm94eS0+d29ya2VyT2JqZWN0KCk7CisgICAgICAg
IGlmICghd29ya2VyT2JqZWN0IHx8IG1fbWVzc2FnaW5nUHJveHktPmFza2VkVG9UZXJtaW5hdGUo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB3b3JrZXJPYmplY3QtPmRpc3BhdGNo
TWVzc2FnZShtX21lc3NhZ2UpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9tZXNz
YWdlOworICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5OworfTsKKwor
Y2xhc3MgV29ya2VyRXhjZXB0aW9uVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJFeGNlcHRpb25U
YXNrPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1By
b3h5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJFeGNlcHRpb25U
YXNrKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMLCBtZXNzYWdpbmdQcm94eSkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBXb3JrZXJFeGNlcHRpb25UYXNrKGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkws
IFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKKyAgICAgICAgOiBtX2Vycm9y
TWVzc2FnZShlcnJvck1lc3NhZ2UuY29weSgpKQorICAgICAgICAsIG1fbGluZU51bWJlcihsaW5l
TnVtYmVyKQorICAgICAgICAsIG1fc291cmNlVVJMKHNvdXJjZVVSTC5jb3B5KCkpCisgICAgICAg
ICwgbV9tZXNzYWdpbmdQcm94eShtZXNzYWdpbmdQcm94eSkKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
CisgICAgeworICAgICAgICBpZiAoIW1fbWVzc2FnaW5nUHJveHktPmFza2VkVG9UZXJtaW5hdGUo
KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlcG9ydEV4Y2VwdGlvbihtX2Vycm9yTWVzc2FnZSwg
bV9saW5lTnVtYmVyLCBtX3NvdXJjZVVSTCk7CisgICAgfQorCisgICAgU3RyaW5nIG1fZXJyb3JN
ZXNzYWdlOworICAgIGludCBtX2xpbmVOdW1iZXI7CisgICAgU3RyaW5nIG1fc291cmNlVVJMOwor
ICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5OworfTsKKworY2xhc3Mg
V29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dERl
c3Ryb3llZFRhc2s+IGNyZWF0ZShXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlckNvbnRleHREZXN0cm95
ZWRUYXNrKG1lc3NhZ2luZ1Byb3h5KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdvcmtlckNv
bnRleHREZXN0cm95ZWRUYXNrKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkK
KyAgICAgICAgOiBtX21lc3NhZ2luZ1Byb3h5KG1lc3NhZ2luZ1Byb3h5KQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
CisgICAgeworICAgICAgICBtX21lc3NhZ2luZ1Byb3h5LT53b3JrZXJDb250ZXh0RGVzdHJveWVk
SW50ZXJuYWwoKTsKKyAgICB9CisKKyAgICBXb3JrZXJNZXNzYWdpbmdQcm94eSogbV9tZXNzYWdp
bmdQcm94eTsKK307CisKK2NsYXNzIFdvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzayA6IHB1
YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXb3JrZXJUaHJlYWRBY3Rpdml0eVJlcG9ydFRhc2s+IGNyZWF0ZShXb3JrZXJN
ZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHksIGJvb2wgY29uZmlybWluZ01lc3NhZ2UsIGJv
b2wgaGFzUGVuZGluZ0FjdGl2aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBXb3JrZXJUaHJlYWRBY3Rpdml0eVJlcG9ydFRhc2sobWVzc2FnaW5nUHJveHksIGNvbmZpcm1p
bmdNZXNzYWdlLCBoYXNQZW5kaW5nQWN0aXZpdHkpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
V29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNz
YWdpbmdQcm94eSwgYm9vbCBjb25maXJtaW5nTWVzc2FnZSwgYm9vbCBoYXNQZW5kaW5nQWN0aXZp
dHkpCisgICAgICAgIDogbV9tZXNzYWdpbmdQcm94eShtZXNzYWdpbmdQcm94eSkKKyAgICAgICAg
LCBtX2NvbmZpcm1pbmdNZXNzYWdlKGNvbmZpcm1pbmdNZXNzYWdlKQorICAgICAgICAsIG1faGFz
UGVuZGluZ0FjdGl2aXR5KGhhc1BlbmRpbmdBY3Rpdml0eSkKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQorICAgIHsK
KyAgICAgICAgbV9tZXNzYWdpbmdQcm94eS0+cmVwb3J0UGVuZGluZ0FjdGl2aXR5SW50ZXJuYWwo
bV9jb25maXJtaW5nTWVzc2FnZSwgbV9oYXNQZW5kaW5nQWN0aXZpdHkpOworICAgIH0KKworICAg
IFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5OworICAgIGJvb2wgbV9jb25m
aXJtaW5nTWVzc2FnZTsKKyAgICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5OworfTsKKworCitX
b3JrZXJDb250ZXh0UHJveHkqIFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKFdvcmtlciogd29y
a2VyKQoreworICAgIHJldHVybiBuZXcgV29ya2VyTWVzc2FnaW5nUHJveHkod29ya2VyKTsKK30K
KworV29ya2VyTWVzc2FnaW5nUHJveHk6Oldvcmtlck1lc3NhZ2luZ1Byb3h5KFdvcmtlciogd29y
a2VyT2JqZWN0KQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHdvcmtlck9iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV93b3JrZXJPYmplY3Qod29ya2VyT2Jq
ZWN0KQorICAgICwgbV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudCgwKQorICAgICwgbV93b3JrZXJU
aHJlYWRIYWRQZW5kaW5nQWN0aXZpdHkoZmFsc2UpCisgICAgLCBtX2Fza2VkVG9UZXJtaW5hdGUo
ZmFsc2UpCit7CisgICAgQVNTRVJUKG1fd29ya2VyT2JqZWN0KTsKKyAgICBBU1NFUlQoKG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpICYmIGlzTWFpblRocmVhZCgpKQorICAg
ICAgICAgICB8fCAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSAm
JiBjdXJyZW50VGhyZWFkKCkgPT0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5nZXQoKSktPnRocmVhZCgpLT50aHJlYWRJRCgpKSk7Cit9CisKK1dv
cmtlck1lc3NhZ2luZ1Byb3h5Ojp+V29ya2VyTWVzc2FnaW5nUHJveHkoKQoreworICAgIEFTU0VS
VCghbV93b3JrZXJPYmplY3QpOworICAgIEFTU0VSVCgobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0RvY3VtZW50KCkgJiYgaXNNYWluVGhyZWFkKCkpCisgICAgICAgICAgIHx8IChtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpICYmIGN1cnJlbnRUaHJlYWQoKSA9
PSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Lmdl
dCgpKS0+dGhyZWFkKCktPnRocmVhZElEKCkpKTsKK30KKwordm9pZCBXb3JrZXJNZXNzYWdpbmdQ
cm94eTo6c3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3Ry
aW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKK3sKKyAgICBSZWZQdHI8
V29ya2VyVGhyZWFkPiB0aHJlYWQgPSBXb3JrZXJUaHJlYWQ6OmNyZWF0ZShzY3JpcHRVUkwsIHVz
ZXJBZ2VudCwgc291cmNlQ29kZSwgdGhpcyk7CisgICAgd29ya2VyVGhyZWFkQ3JlYXRlZCh0aHJl
YWQpOworICAgIHRocmVhZC0+c3RhcnQoKTsKK30KKwordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94
eTo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7Cisg
ICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhNZXNzYWdlV29ya2VyVGFzazo6
Y3JlYXRlKG1lc3NhZ2UsIHRoaXMpKTsKK30KKwordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6
cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IHBvc3RUYXNrVG9Xb3JrZXJDb250ZXh0KE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzazo6Y3JlYXRl
KG1lc3NhZ2UpKTsKK30KKwordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdFRhc2tUb1dv
cmtlckNvbnRleHQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNr
KQoreworICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX3dvcmtlclRocmVhZCkgeworICAgICAgICArK21fdW5jb25maXJtZWRNZXNzYWdlQ291
bnQ7CisgICAgICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2sodGFzayk7Cisg
ICAgfSBlbHNlCisgICAgICAgIG1fcXVldWVkRWFybHlUYXNrcy5hcHBlbmQodGFzayk7Cit9CisK
K3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RUYXNrVG9Xb3JrZXJPYmplY3QoUGFzc1Jl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQoreworICAgIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2sodGFzayk7Cit9CisKK3ZvaWQgV29ya2VyTWVzc2Fn
aW5nUHJveHk6OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAg
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soV29ya2VyRXhjZXB0aW9uVGFzazo6
Y3JlYXRlKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMLCB0aGlzKSk7Cit9Cisg
ICAgCitzdGF0aWMgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSwgTWVz
c2FnZURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIGlmIChtZXNzYWdpbmdQcm94eS0+YXNr
ZWRUb1Rlcm1pbmF0ZSgpKQorICAgICAgICByZXR1cm47CisgICAgY29udGV4dC0+YWRkTWVzc2Fn
ZShkZXN0aW5hdGlvbiwgc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNl
VVJMKTsKK30KKwordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdENvbnNvbGVNZXNzYWdl
VG9Xb3JrZXJPYmplY3QoTWVzc2FnZURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBNZXNzYWdlU291
cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdENvbnNvbGVN
ZXNzYWdlVGFzaywgdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxp
bmVOdW1iZXIsIHNvdXJjZVVSTCkpOworfQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3
b3JrZXJUaHJlYWRDcmVhdGVkKFBhc3NSZWZQdHI8V29ya2VyVGhyZWFkPiB3b3JrZXJUaHJlYWQp
Cit7CisgICAgbV93b3JrZXJUaHJlYWQgPSB3b3JrZXJUaHJlYWQ7CisKKyAgICBpZiAobV9hc2tl
ZFRvVGVybWluYXRlKSB7CisgICAgICAgIC8vIFdvcmtlci50ZXJtaW5hdGUoKSBjb3VsZCBiZSBj
YWxsZWQgZnJvbSBKUyBiZWZvcmUgdGhlIHRocmVhZCB3YXMgY3JlYXRlZC4KKyAgICAgICAgbV93
b3JrZXJUaHJlYWQtPnN0b3AoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1bnNpZ25lZCB0YXNr
Q291bnQgPSBtX3F1ZXVlZEVhcmx5VGFza3Muc2l6ZSgpOworICAgICAgICBBU1NFUlQoIW1fdW5j
b25maXJtZWRNZXNzYWdlQ291bnQpOworICAgICAgICBtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50
ID0gdGFza0NvdW50OworICAgICAgICBtX3dvcmtlclRocmVhZEhhZFBlbmRpbmdBY3Rpdml0eSA9
IHRydWU7IC8vIFdvcmtlciBpbml0aWFsaXphdGlvbiBtZWFucyBhIHBlbmRpbmcgYWN0aXZpdHku
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhc2tDb3VudDsgKytpKQorICAg
ICAgICAgICAgbV93b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFzayhtX3F1ZXVlZEVhcmx5
VGFza3NbaV0pOworICAgICAgICBtX3F1ZXVlZEVhcmx5VGFza3MuY2xlYXIoKTsKKyAgICB9Cit9
CisKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6Ondvcmtlck9iamVjdERlc3Ryb3llZCgpCit7
CisgICAgbV93b3JrZXJPYmplY3QgPSAwOworICAgIGlmIChtX3dvcmtlclRocmVhZCkKKyAgICAg
ICAgdGVybWluYXRlV29ya2VyQ29udGV4dCgpOworICAgIGVsc2UKKyAgICAgICAgd29ya2VyQ29u
dGV4dERlc3Ryb3llZEludGVybmFsKCk7Cit9CisKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6
OndvcmtlckNvbnRleHREZXN0cm95ZWQoKQoreworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+cG9zdFRhc2soV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2s6OmNyZWF0ZSh0aGlzKSk7Cisg
ICAgLy8gV2lsbCBleGVjdXRlIHdvcmtlckNvbnRleHREZXN0cm95ZWRJbnRlcm5hbCgpIG9uIGNv
bnRleHQncyB0aHJlYWQuCit9CisKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OndvcmtlckNv
bnRleHREZXN0cm95ZWRJbnRlcm5hbCgpCit7CisgICAgLy8gV29ya2VyQ29udGV4dERlc3Ryb3ll
ZFRhc2sgaXMgYWx3YXlzIHRoZSBsYXN0IHRvIGJlIHBlcmZvcm1lZCwgc28gdGhlIHByb3h5IGlz
IG5vdCBuZWVkZWQgZm9yIGNvbW11bmljYXRpb24KKyAgICAvLyBpbiBlaXRoZXIgc2lkZSBhbnkg
bW9yZS4gSG93ZXZlciwgdGhlIFdvcmtlciBvYmplY3QgbWF5IHN0aWxsIGV4aXN0LCBhbmQgaXQg
YXNzdW1lcyB0aGF0IHRoZSBwcm94eSBleGlzdHMsIHRvby4KKyAgICBtX3dvcmtlclRocmVhZCA9
IDA7CisgICAgaWYgKCFtX3dvcmtlck9iamVjdCkKKyAgICAgICAgZGVsZXRlIHRoaXM7Cit9CisK
K3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKQorewor
ICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Fza2Vk
VG9UZXJtaW5hdGUgPSB0cnVlOworCisgICAgaWYgKG1fd29ya2VyVGhyZWFkKQorICAgICAgICBt
X3dvcmtlclRocmVhZC0+c3RvcCgpOworfQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpj
b25maXJtV29ya2VyVGhyZWFkTWVzc2FnZShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sKKyAg
ICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFdvcmtlclRocmVhZEFjdGl2aXR5
UmVwb3J0VGFzazo6Y3JlYXRlKHRoaXMsIHRydWUsIGhhc1BlbmRpbmdBY3Rpdml0eSkpOworICAg
IC8vIFdpbGwgZXhlY3V0ZSByZXBvcnRQZW5kaW5nQWN0aXZpdHlJbnRlcm5hbCgpIG9uIGNvbnRl
eHQncyB0aHJlYWQuCit9CisKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnJlcG9ydFBlbmRp
bmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sKKyAgICBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPnBvc3RUYXNrKFdvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzazo6Y3Jl
YXRlKHRoaXMsIGZhbHNlLCBoYXNQZW5kaW5nQWN0aXZpdHkpKTsKKyAgICAvLyBXaWxsIGV4ZWN1
dGUgcmVwb3J0UGVuZGluZ0FjdGl2aXR5SW50ZXJuYWwoKSBvbiBjb250ZXh0J3MgdGhyZWFkLgor
fQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpyZXBvcnRQZW5kaW5nQWN0aXZpdHlJbnRl
cm5hbChib29sIGNvbmZpcm1pbmdNZXNzYWdlLCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sK
KyAgICBpZiAoY29uZmlybWluZ01lc3NhZ2UgJiYgIW1fYXNrZWRUb1Rlcm1pbmF0ZSkgeworICAg
ICAgICBBU1NFUlQobV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudCk7CisgICAgICAgIC0tbV91bmNv
bmZpcm1lZE1lc3NhZ2VDb3VudDsKKyAgICB9CisKKyAgICBtX3dvcmtlclRocmVhZEhhZFBlbmRp
bmdBY3Rpdml0eSA9IGhhc1BlbmRpbmdBY3Rpdml0eTsKK30KKworYm9vbCBXb3JrZXJNZXNzYWdp
bmdQcm94eTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fdW5j
b25maXJtZWRNZXNzYWdlQ291bnQgfHwgbV93b3JrZXJUaHJlYWRIYWRQZW5kaW5nQWN0aXZpdHkp
ICYmICFtX2Fza2VkVG9UZXJtaW5hdGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dv
cmtlck1lc3NhZ2luZ1Byb3h5LmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJv
eHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjAyMTcxCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKQEAgLTAs
MCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBXb3JrZXJNZXNzYWdpbmdQcm94eV9o
CisjZGVmaW5lIFdvcmtlck1lc3NhZ2luZ1Byb3h5X2gKKworI2lmIEVOQUJMRShXT1JLRVJTKQor
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckNv
bnRleHRQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlck9iamVjdFByb3h5LmgiCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworICAgIGNsYXNzIFN0
cmluZzsKKyAgICBjbGFzcyBXb3JrZXI7CisgICAgY2xhc3MgV29ya2VyVGhyZWFkOworCisgICAg
Y2xhc3MgV29ya2VyTWVzc2FnaW5nUHJveHkgOiBwdWJsaWMgV29ya2VyQ29udGV4dFByb3h5LCBw
dWJsaWMgV29ya2VyT2JqZWN0UHJveHksIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KFdvcmtlciopOworCisgICAgICAgIC8vIEltcGxlbWVu
dGF0aW9ucyBvZiBXb3JrZXJDb250ZXh0UHJveHkuCisgICAgICAgIC8vIChPbmx5IHVzZSB0aGVz
ZSBtZXRob2RzIGluIHRoZSB3b3JrZXIgb2JqZWN0IHRocmVhZC4pCisgICAgICAgIHZpcnR1YWwg
dm9pZCBzdGFydFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBv
c3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHdvcmtlck9iamVjdERlc3Ryb3llZCgpOworCisgICAgICAgIC8vIEltcGxlbWVudGF0
aW9ucyBvZiBXb3JrZXJPYmplY3RQcm94eS4KKyAgICAgICAgLy8gKE9ubHkgdXNlIHRoZXNlIG1l
dGhvZHMgaW4gdGhlIHdvcmtlciBjb250ZXh0IHRocmVhZC4pCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChN
ZXNzYWdlRGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQo
KTsKKworICAgICAgICB2b2lkIHBvc3RUYXNrVG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7CisgICAgICAgIHZvaWQgcG9zdFRhc2tUb1dvcmtl
ckNvbnRleHQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7CisKKyAg
ICAgICAgdm9pZCB3b3JrZXJUaHJlYWRDcmVhdGVkKFBhc3NSZWZQdHI8V29ya2VyVGhyZWFkPik7
CisKKyAgICAgICAgdm9pZCBjb25maXJtV29ya2VyVGhyZWFkTWVzc2FnZShib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSk7CisKKyAgICAgICAgLy8gT25seSB1c2UgdGhpcyBtZXRob2Qgb24gdGhlIHdv
cmtlciBvYmplY3QgdGhyZWFkLgorICAgICAgICBib29sIGFza2VkVG9UZXJtaW5hdGUoKSBjb25z
dCB7IHJldHVybiBtX2Fza2VkVG9UZXJtaW5hdGU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IGZyaWVuZCBjbGFzcyBNZXNzYWdlV29ya2VyVGFzazsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFdv
cmtlckNvbnRleHREZXN0cm95ZWRUYXNrOworICAgICAgICBmcmllbmQgY2xhc3MgV29ya2VyVGhy
ZWFkQWN0aXZpdHlSZXBvcnRUYXNrOworCisgICAgICAgIHZpcnR1YWwgfldvcmtlck1lc3NhZ2lu
Z1Byb3h5KCk7CisKKyAgICAgICAgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkSW50ZXJuYWwo
KTsKKyAgICAgICAgdm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHlJbnRlcm5hbChib29sIGNvbmZp
cm1pbmdNZXNzYWdlLCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSk7CisgICAgICAgIFdvcmtlciog
d29ya2VyT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJPYmplY3Q7IH0KKworICAgICAg
ICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
OworICAgICAgICBXb3JrZXIqIG1fd29ya2VyT2JqZWN0OworICAgICAgICBSZWZQdHI8V29ya2Vy
VGhyZWFkPiBtX3dvcmtlclRocmVhZDsKKworICAgICAgICB1bnNpZ25lZCBtX3VuY29uZmlybWVk
TWVzc2FnZUNvdW50OyAvLyBVbmNvbmZpcm1lZCBtZXNzYWdlcyBmcm9tIHdvcmtlciBvYmplY3Qg
dG8gd29ya2VyIHRocmVhZC4KKyAgICAgICAgYm9vbCBtX3dvcmtlclRocmVhZEhhZFBlbmRpbmdB
Y3Rpdml0eTsgLy8gVGhlIGxhdGVzdCBjb25maXJtYXRpb24gZnJvbSB3b3JrZXIgdGhyZWFkIHJl
cG9ydGVkIHRoYXQgaXQgd2FzIHN0aWxsIGFjdGl2ZS4KKworICAgICAgICBib29sIG1fYXNrZWRU
b1Rlcm1pbmF0ZTsKKworICAgICAgICBWZWN0b3I8UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s+ID4gbV9xdWV1ZWRFYXJseVRhc2tzOyAvLyBUYXNrcyBhcmUgcXVldWVkIGhlcmUg
dW50aWwgdGhlcmUncyBhIHRocmVhZCBvYmplY3QgY3JlYXRlZC4KKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8v
IFdvcmtlck1lc3NhZ2luZ1Byb3h5X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJPYmplY3RQcm94eS5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck9iamVjdFByb3h5LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhYmE3MwotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oCkBAIC0wLDAgKzEsNjIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdvcmtlck9iamVjdFByb3h5X2gKKyNkZWZpbmUgV29ya2VyT2JqZWN0UHJveHlfaAor
CisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJDb25zb2xlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFN0cmluZzsKKworICAgIC8vIEEgcHJveHkgdG8gdGFs
ayB0byB0aGUgd29ya2VyIG9iamVjdC4KKyAgICBjbGFzcyBXb3JrZXJPYmplY3RQcm94eSB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5Xb3JrZXJPYmplY3RQcm94eSgpIHt9CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5n
JikgPSAwOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmpl
Y3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCkgPSAwOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1l
c3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlRGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2UsIE1l
c3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UGVu
ZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7CisKKyAgICAgICAgdmly
dHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKSA9IDA7CisgICAgfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNlbmRpZiAv
LyBXb3JrZXJPYmplY3RQcm94eV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
UnVuTG9vcC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU4NzdmNwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTaGFyZWRUaW1lci5oIgorI2luY2x1ZGUg
IlRocmVhZEdsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJUaHJlYWRUaW1lcnMuaCIKKyNpbmNsdWRl
ICJXb3JrZXJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUg
IldvcmtlclRocmVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdvcmtlclNo
YXJlZFRpbWVyIDogcHVibGljIFNoYXJlZFRpbWVyIHsKK3B1YmxpYzoKKyAgICBXb3JrZXJTaGFy
ZWRUaW1lcigpCisgICAgICAgIDogbV9zaGFyZWRUaW1lckZ1bmN0aW9uKDApCisgICAgICAgICwg
bV9uZXh0RmlyZVRpbWUoMCkKKyAgICB7CisgICAgfQorCisgICAgLy8gU2hhcmVkVGltZXIgaW50
ZXJmYWNlLgorICAgIHZpcnR1YWwgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmdW5jdGlv
bikoKSkgeyBtX3NoYXJlZFRpbWVyRnVuY3Rpb24gPSBmdW5jdGlvbjsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpIHsgbV9uZXh0RmlyZVRpbWUgPSBmaXJl
VGltZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgeyBtX25leHRGaXJlVGltZSA9IDA7IH0K
KworICAgIGJvb2wgaXNBY3RpdmUoKSB7IHJldHVybiBtX3NoYXJlZFRpbWVyRnVuY3Rpb24gJiYg
bV9uZXh0RmlyZVRpbWU7IH0KKyAgICBkb3VibGUgZmlyZVRpbWUoKSB7IHJldHVybiBtX25leHRG
aXJlVGltZTsgfQorICAgIHZvaWQgZmlyZSgpIHsgbV9zaGFyZWRUaW1lckZ1bmN0aW9uKCk7IH0K
KworcHJpdmF0ZToKKyAgICB2b2lkICgqbV9zaGFyZWRUaW1lckZ1bmN0aW9uKSgpOworICAgIGRv
dWJsZSBtX25leHRGaXJlVGltZTsKK307CisKK2NsYXNzIFdvcmtlclJ1bkxvb3A6OlRhc2sgOiBw
dWJsaWMgUmVmQ291bnRlZDxUYXNrPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFz
aywgY29uc3QgU3RyaW5nJiBtb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUYXNrKHRhc2ssIG1vZGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIG1vZGUoKSBj
b25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpIHsgbV90YXNrLT5wZXJmb3JtVGFzayhjb250ZXh0KTsgfQor
Citwcml2YXRlOgorICAgIFRhc2soUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCisgICAgICAgIDogbV90YXNrKHRhc2spCisg
ICAgICAgICwgbV9tb2RlKG1vZGUuY29weSgpKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gbV90YXNrOworICAgIFN0cmluZyBtX21vZGU7
Cit9OworCitjbGFzcyBNb2RlUHJlZGljYXRlIHsKK3B1YmxpYzoKKyAgICBNb2RlUHJlZGljYXRl
KGNvbnN0IFN0cmluZyYgbW9kZSkKKyAgICAgICAgOiBtX21vZGUobW9kZSkKKyAgICAgICAgLCBt
X2RlZmF1bHRNb2RlKG1vZGUgPT0gV29ya2VyUnVuTG9vcDo6ZGVmYXVsdE1vZGUoKSkKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBpc0RlZmF1bHRNb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2RlZmF1bHRNb2RlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IoKShQYXNz
UmVmUHRyPFdvcmtlclJ1bkxvb3A6OlRhc2s+IHRhc2spIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9kZWZhdWx0TW9kZSB8fCBtX21vZGUgPT0gdGFzay0+bW9kZSgpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBTdHJpbmcgbV9tb2RlOworICAgIGJvb2wgbV9kZWZhdWx0TW9kZTsKK307
CisKK1dvcmtlclJ1bkxvb3A6OldvcmtlclJ1bkxvb3AoKQorICAgIDogbV9zaGFyZWRUaW1lcihu
ZXcgV29ya2VyU2hhcmVkVGltZXIpCisgICAgLCBtX25lc3RlZENvdW50KDApCit7Cit9CisKK1dv
cmtlclJ1bkxvb3A6On5Xb3JrZXJSdW5Mb29wKCkKK3sKKyAgICBBU1NFUlQoIW1fbmVzdGVkQ291
bnQpOworfQorCitTdHJpbmcgV29ya2VyUnVuTG9vcDo6ZGVmYXVsdE1vZGUoKQoreworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKworY2xhc3MgUnVuTG9vcFNldHVwIDogTm9uY29weWFibGUKK3sK
K3B1YmxpYzoKKyAgICBSdW5Mb29wU2V0dXAoV29ya2VyUnVuTG9vcCYgcnVuTG9vcCkKKyAgICAg
ICAgOiBtX3J1bkxvb3AocnVuTG9vcCkKKyAgICB7CisgICAgICAgIGlmICghbV9ydW5Mb29wLm1f
bmVzdGVkQ291bnQpCisgICAgICAgICAgICB0aHJlYWRHbG9iYWxEYXRhKCkudGhyZWFkVGltZXJz
KCkuc2V0U2hhcmVkVGltZXIobV9ydW5Mb29wLm1fc2hhcmVkVGltZXIuZ2V0KCkpOworICAgICAg
ICBtX3J1bkxvb3AubV9uZXN0ZWRDb3VudCsrOworICAgIH0KKworICAgIH5SdW5Mb29wU2V0dXAo
KQorICAgIHsKKyAgICAgICAgbV9ydW5Mb29wLm1fbmVzdGVkQ291bnQtLTsKKyAgICAgICAgaWYg
KCFtX3J1bkxvb3AubV9uZXN0ZWRDb3VudCkKKyAgICAgICAgICAgIHRocmVhZEdsb2JhbERhdGEo
KS50aHJlYWRUaW1lcnMoKS5zZXRTaGFyZWRUaW1lcigwKTsKKyAgICB9Citwcml2YXRlOgorICAg
IFdvcmtlclJ1bkxvb3AmIG1fcnVuTG9vcDsKK307CisKK3ZvaWQgV29ya2VyUnVuTG9vcDo6cnVu
KFdvcmtlckNvbnRleHQqIGNvbnRleHQpCit7CisgICAgUnVuTG9vcFNldHVwIHNldHVwKCp0aGlz
KTsKKyAgICBNb2RlUHJlZGljYXRlIG1vZGVQcmVkaWNhdGUoZGVmYXVsdE1vZGUoKSk7CisgICAg
TWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCByZXN1bHQ7CisgICAgZG8geworICAgICAgICByZXN1bHQg
PSBydW5Jbk1vZGUoY29udGV4dCwgbW9kZVByZWRpY2F0ZSk7CisgICAgfSB3aGlsZSAocmVzdWx0
ICE9IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpOworfQorCitNZXNzYWdlUXVldWVXYWl0UmVzdWx0
IFdvcmtlclJ1bkxvb3A6OnJ1bkluTW9kZShXb3JrZXJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIG1vZGUpCit7CisgICAgUnVuTG9vcFNldHVwIHNldHVwKCp0aGlzKTsKKyAgICBNb2Rl
UHJlZGljYXRlIG1vZGVQcmVkaWNhdGUobW9kZSk7CisgICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3Vs
dCByZXN1bHQgPSBydW5Jbk1vZGUoY29udGV4dCwgbW9kZVByZWRpY2F0ZSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCBXb3JrZXJSdW5Mb29wOjpydW5J
bk1vZGUoV29ya2VyQ29udGV4dCogY29udGV4dCwgY29uc3QgTW9kZVByZWRpY2F0ZSYgcHJlZGlj
YXRlKQoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQoY29udGV4dC0+dGhyZWFk
KCkpOworICAgIEFTU0VSVChjb250ZXh0LT50aHJlYWQoKS0+dGhyZWFkSUQoKSA9PSBjdXJyZW50
VGhyZWFkKCkpOworCisgICAgZG91YmxlIGFic29sdXRlVGltZSA9IChwcmVkaWNhdGUuaXNEZWZh
dWx0TW9kZSgpICYmIG1fc2hhcmVkVGltZXItPmlzQWN0aXZlKCkpID8gbV9zaGFyZWRUaW1lci0+
ZmlyZVRpbWUoKSA6IE1lc3NhZ2VRdWV1ZTxSZWZQdHI8VGFzaz4gPjo6aW5maW5pdGVUaW1lKCk7
CisgICAgUmVmUHRyPFRhc2s+IHRhc2s7CisgICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCByZXN1
bHQgPSBtX21lc3NhZ2VRdWV1ZS53YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQodGFz
aywgcHJlZGljYXRlLCBhYnNvbHV0ZVRpbWUpOworCisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAg
ICBjYXNlIE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQ6CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQ6CisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNr
KGNvbnRleHQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVzc2FnZVF1ZXVlVGltZW91
dDoKKyAgICAgICAgbV9zaGFyZWRUaW1lci0+ZmlyZSgpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdvcmtlclJ1bkxvb3A6OnRlcm1pbmF0
ZSgpCit7CisgICAgbV9tZXNzYWdlUXVldWUua2lsbCgpOworfQorCit2b2lkIFdvcmtlclJ1bkxv
b3A6OnBvc3RUYXNrKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFz
aykKK3sKKyAgICBwb3N0VGFza0Zvck1vZGUodGFzaywgZGVmYXVsdE1vZGUoKSk7Cit9CisKK3Zv
aWQgV29ya2VyUnVuTG9vcDo6cG9zdFRhc2tGb3JNb2RlKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQoreworICAgIG1fbWVz
c2FnZVF1ZXVlLmFwcGVuZChUYXNrOjpjcmVhdGUodGFzaywgbW9kZS5jb3B5KCkpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5oIGIvV2ViQ29yZS93b3JrZXJz
L1dvcmtlclJ1bkxvb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDFl
YWEzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuaApA
QCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXb3JrZXJSdW5Mb29wX2gKKyNkZWZpbmUgV29ya2Vy
UnVuTG9vcF9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworICAgIGNsYXNzIE1vZGVQcmVkaWNhdGU7CisgICAgY2xhc3MgV29ya2VyQ29u
dGV4dDsKKyAgICBjbGFzcyBXb3JrZXJTaGFyZWRUaW1lcjsKKworICAgIGNsYXNzIFdvcmtlclJ1
bkxvb3AgeworICAgIHB1YmxpYzoKKyAgICAgICAgV29ya2VyUnVuTG9vcCgpOworICAgICAgICB+
V29ya2VyUnVuTG9vcCgpOworICAgICAgICAKKyAgICAgICAgLy8gQmxvY2tpbmcgY2FsbC4gV2Fp
dHMgZm9yIHRhc2tzIGFuZCB0aW1lcnMsIGludm9rZXMgdGhlIGNhbGxiYWNrcy4KKyAgICAgICAg
dm9pZCBydW4oV29ya2VyQ29udGV4dCopOworCisgICAgICAgIC8vIFdhaXRzIGZvciBhIHNpbmds
ZSB0YXNrIGFuZCByZXR1cm5zLgorICAgICAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IHJ1bklu
TW9kZShXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKworICAgICAgICB2b2lk
IHRlcm1pbmF0ZSgpOworICAgICAgICBib29sIHRlcm1pbmF0ZWQoKSB7IHJldHVybiBtX21lc3Nh
Z2VRdWV1ZS5raWxsZWQoKTsgfQorCisgICAgICAgIHZvaWQgcG9zdFRhc2soUGFzc1JlZlB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7CisgICAgICAgIHZvaWQgcG9zdFRhc2tGb3JN
b2RlKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFN0cmlu
ZyYgbW9kZSk7CisKKyAgICAgICAgc3RhdGljIFN0cmluZyBkZWZhdWx0TW9kZSgpOworICAgICAg
ICBjbGFzcyBUYXNrOworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBSdW5Mb29w
U2V0dXA7CisgICAgICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcnVuSW5Nb2RlKFdvcmtlckNv
bnRleHQqLCBjb25zdCBNb2RlUHJlZGljYXRlJik7CisKKyAgICAgICAgTWVzc2FnZVF1ZXVlPFJl
ZlB0cjxUYXNrPiA+IG1fbWVzc2FnZVF1ZXVlOworICAgICAgICBPd25QdHI8V29ya2VyU2hhcmVk
VGltZXI+IG1fc2hhcmVkVGltZXI7CisgICAgICAgIGludCBtX25lc3RlZENvdW50OworICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQor
CisjZW5kaWYgLy8gV29ya2VyUnVuTG9vcF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNjU4NmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcApAQCAtMCwwICsxLDE1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKwor
I2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgorI2luY2x1
ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUg
Ildvcmtlck9iamVjdFByb3h5LmgiCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgV29ya2VyVGhy
ZWFkU3RhcnR1cERhdGEgOiBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6
YXV0b19wdHI8V29ya2VyVGhyZWFkU3RhcnR1cERhdGE+IGNyZWF0ZShjb25zdCBLVVJMJiBzY3Jp
cHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUp
CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjphdXRvX3B0cjxXb3JrZXJUaHJlYWRTdGFydHVw
RGF0YT4obmV3IFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhKHNjcmlwdFVSTCwgdXNlckFnZW50LCBz
b3VyY2VDb2RlKSk7CisgICAgfQorCisgICAgS1VSTCBtX3NjcmlwdFVSTDsKKyAgICBTdHJpbmcg
bV91c2VyQWdlbnQ7CisgICAgU3RyaW5nIG1fc291cmNlQ29kZTsKK3ByaXZhdGU6CisgICAgV29y
a2VyVGhyZWFkU3RhcnR1cERhdGEoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcm
IHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKTsKK307CisKK1dvcmtlclRocmVh
ZFN0YXJ0dXBEYXRhOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBLVVJMJiBzY3JpcHRV
UkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpCisg
ICAgOiBtX3NjcmlwdFVSTChzY3JpcHRVUkwuY29weSgpKQorICAgICwgbV91c2VyQWdlbnQodXNl
ckFnZW50LmNvcHkoKSkKKyAgICAsIG1fc291cmNlQ29kZShzb3VyY2VDb2RlLmNvcHkoKSkKK3sK
K30KKworUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IFdvcmtlclRocmVhZDo6Y3JlYXRlKGNvbnN0
IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYg
c291cmNlQ29kZSwgV29ya2VyT2JqZWN0UHJveHkqIHdvcmtlck9iamVjdFByb3h5KQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyVGhyZWFkKHNjcmlwdFVSTCwgdXNlckFnZW50LCBz
b3VyY2VDb2RlLCB3b3JrZXJPYmplY3RQcm94eSkpOworfQorCitXb3JrZXJUaHJlYWQ6Oldvcmtl
clRocmVhZChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBj
b25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlck9iamVjdFByb3h5KiB3b3JrZXJPYmplY3RQ
cm94eSkKKyAgICA6IG1fdGhyZWFkSUQoMCkKKyAgICAsIG1fd29ya2VyT2JqZWN0UHJveHkod29y
a2VyT2JqZWN0UHJveHkpCisgICAgLCBtX3N0YXJ0dXBEYXRhKFdvcmtlclRocmVhZFN0YXJ0dXBE
YXRhOjpjcmVhdGUoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUpKQoreworfQorCitX
b3JrZXJUaHJlYWQ6On5Xb3JrZXJUaHJlYWQoKQoreworfQorCitib29sIFdvcmtlclRocmVhZDo6
c3RhcnQoKQoreworICAgIC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3Vy
ZSB0aGF0IG1fdGhyZWFkSUQgaXMgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4K
KyAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CisKKyAgICBpZiAo
bV90aHJlYWRJRCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX3RocmVhZElEID0gY3Jl
YXRlVGhyZWFkKFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3Jl
OjpXb3JrZXIiKTsKKworICAgIHJldHVybiBtX3RocmVhZElEOworfQorCit2b2lkKiBXb3JrZXJU
aHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0KHZvaWQqIHRocmVhZCkKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V29ya2VyVGhyZWFkKj4odGhyZWFkKS0+d29ya2VyVGhyZWFkKCk7Cit9CisKK3Zv
aWQqIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkKK3sKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKKyAgICAgICAgbV93b3JrZXJDb250
ZXh0ID0gV29ya2VyQ29udGV4dDo6Y3JlYXRlKG1fc3RhcnR1cERhdGEtPm1fc2NyaXB0VVJMLCBt
X3N0YXJ0dXBEYXRhLT5tX3VzZXJBZ2VudCwgdGhpcyk7CisgICAgICAgIGlmIChtX3J1bkxvb3Au
dGVybWluYXRlZCgpKSB7CisgICAgICAgICAgICAvLyBUaGUgd29ya2VyIHdhcyB0ZXJtaW5hdGVk
IGJlZm9yZSB0aGUgdGhyZWFkIGhhZCBhIGNoYW5jZSB0byBydW4uIFNpbmNlIHRoZSBjb250ZXh0
IGRpZG4ndCBleGlzdCB5ZXQsIAorICAgICAgICAgICAgLy8gZm9yYmlkRXhlY3V0aW9uKCkgY291
bGRuJ3QgYmUgY2FsbGVkIGZyb20gc3RvcCgpLgorICAgICAgICAgICBtX3dvcmtlckNvbnRleHQt
PnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFdv
cmtlclNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCA9IG1fd29ya2VyQ29udGV4dC0+c2NyaXB0KCk7
CisgICAgc2NyaXB0LT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKG1fc3RhcnR1cERhdGEtPm1f
c291cmNlQ29kZSwgbV9zdGFydHVwRGF0YS0+bV9zY3JpcHRVUkwpKTsKKyAgICAvLyBGcmVlIHRo
ZSBzdGFydHVwIGRhdGEgdG8gY2F1c2UgaXRzIG1lbWJlciB2YXJpYWJsZSBkZXJlZidzIGhhcHBl
biBvbiB0aGUgd29ya2VyJ3MgdGhyZWFkIChzaW5jZQorICAgIC8vIGFsbCByZWYvZGVyZWZzIG9m
IHRoZXNlIG9iamVjdHMgYXJlIGhhcHBlbmluZyBvbiB0aGUgdGhyZWFkIGF0IHRoaXMgcG9pbnQp
LiBOb3RlIHRoYXQKKyAgICAvLyBXb3JrZXJUaHJlYWQ6On5Xb3JrZXJUaHJlYWQgaGFwcGVucyBv
biBhIGRpZmZlcmVudCB0aHJlYWQgd2hlcmUgaXQgd2FzIGNyZWF0ZWQuCisgICAgbV9zdGFydHVw
RGF0YS5jbGVhcigpOworCisgICAgbV93b3JrZXJPYmplY3RQcm94eS0+cmVwb3J0UGVuZGluZ0Fj
dGl2aXR5KG1fd29ya2VyQ29udGV4dC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpOworCisgICAgLy8g
QmxvY2tzIHVudGlsIHRlcm1pbmF0ZWQuCisgICAgbV9ydW5Mb29wLnJ1bihtX3dvcmtlckNvbnRl
eHQuZ2V0KCkpOworCisgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IG1fdGhyZWFkSUQ7
CisKKyAgICBtX3dvcmtlckNvbnRleHQtPmNsZWFyU2NyaXB0KCk7CisgICAgQVNTRVJUKG1fd29y
a2VyQ29udGV4dC0+aGFzT25lUmVmKCkpOworICAgIC8vIFRoZSBiZWxvdyBhc3NpZ25tZW50IHdp
bGwgZGVzdHJveSB0aGUgY29udGV4dCwgd2hpY2ggd2lsbCBpbiB0dXJuIG5vdGlmeSBtZXNzYWdp
bmcgcHJveHkuCisgICAgLy8gV2UgY2Fubm90IGxldCBhbnkgb2JqZWN0cyBzdXJ2aXZlIHBhc3Qg
dGhyZWFkIGV4aXQsIGJlY2F1c2Ugbm8gb3RoZXIgdGhyZWFkIHdpbGwgcnVuIEdDIG9yIG90aGVy
d2lzZSBkZXN0cm95IHRoZW0uCisgICAgbV93b3JrZXJDb250ZXh0ID0gMDsKKyAgICAKKyAgICAv
LyBUaGUgdGhyZWFkIG9iamVjdCBtYXkgYmUgYWxyZWFkeSBkZXN0cm95ZWQgZnJvbSBub3RpZmlj
YXRpb24gbm93LCBkb24ndCB0cnkgdG8gYWNjZXNzICJ0aGlzIi4KKyAgICBkZXRhY2hUaHJlYWQo
dGhyZWFkSUQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkOjpzdG9w
KCkKK3sKKyAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHN0b3Ao
KSBjYW4gYmUgY2FsbGVkIGJlZm9yZSB0aGUgY29udGV4dCBpcyBmdWxseSBjcmVhdGVkLgorICAg
IE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKKworICAgIC8vIEVuc3Vy
ZSB0aGF0IHRhc2tzIGFyZSBiZWluZyBoYW5kbGVkIGJ5IHRocmVhZCBldmVudCBsb29wLiBJZiBz
Y3JpcHQgZXhlY3V0aW9uIHdlcmVuJ3QgZm9yYmlkZGVuLCBhIHdoaWxlKDEpIGxvb3AgaW4gSlMg
Y291bGQga2VlcCB0aGUgdGhyZWFkIGFsaXZlIGZvcmV2ZXIuCisgICAgaWYgKG1fd29ya2VyQ29u
dGV4dCkKKyAgICAgICAgbV93b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+Zm9yYmlkRXhlY3V0aW9u
KCk7CisKKyAgICAvLyBGSVhNRTogUnVkZWx5IGtpbGxpbmcgdGhlIHRocmVhZCB3b24ndCB3b3Jr
IHdoZW4gd2UgYWxsb3cgbmVzdGVkIHdvcmtlcnMsIGJlY2F1c2UgdGhleSB3aWxsIHRyeSB0byBw
b3N0IG5vdGlmaWNhdGlvbnMgb2YgdGhlaXIgZGVzdHJ1Y3Rpb24uCisgICAgbV9ydW5Mb29wLnRl
cm1pbmF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaCBi
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iMWVmNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlclRocmVhZC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBXb3Jr
ZXJUaHJlYWRfaAorI2RlZmluZSBXb3JrZXJUaHJlYWRfaAorCisjaWYgRU5BQkxFKFdPUktFUlMp
CisKKyNpbmNsdWRlIDxXb3JrZXJSdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBTdHJp
bmc7CisgICAgY2xhc3MgV29ya2VyQ29udGV4dDsKKyAgICBjbGFzcyBXb3JrZXJPYmplY3RQcm94
eTsKKyAgICBzdHJ1Y3QgV29ya2VyVGhyZWFkU3RhcnR1cERhdGE7CisKKyAgICBjbGFzcyBXb3Jr
ZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWQ+IHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRocmVhZD4gY3JlYXRlKGNvbnN0IEtV
UkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291
cmNlQ29kZSwgV29ya2VyT2JqZWN0UHJveHkqKTsKKyAgICAgICAgfldvcmtlclRocmVhZCgpOwor
CisgICAgICAgIGJvb2wgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisKKyAgICAgICAg
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkSUQ7IH0K
KyAgICAgICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCgpIHsgcmV0dXJuIG1fcnVuTG9vcDsgfQor
ICAgICAgICBXb3JrZXJPYmplY3RQcm94eSogd29ya2VyT2JqZWN0UHJveHkoKSBjb25zdCB7IHJl
dHVybiBtX3dvcmtlck9iamVjdFByb3h5OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBXb3Jr
ZXJUaHJlYWQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJp
bmcmIHNvdXJjZUNvZGUsIFdvcmtlck9iamVjdFByb3h5Kik7CisKKyAgICAgICAgc3RhdGljIHZv
aWQqIHdvcmtlclRocmVhZFN0YXJ0KHZvaWQqKTsKKyAgICAgICAgdm9pZCogd29ya2VyVGhyZWFk
KCk7CisKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgICAgICBXb3Jr
ZXJSdW5Mb29wIG1fcnVuTG9vcDsKKyAgICAgICAgV29ya2VyT2JqZWN0UHJveHkqIG1fd29ya2Vy
T2JqZWN0UHJveHk7CisKKyAgICAgICAgUmVmUHRyPFdvcmtlckNvbnRleHQ+IG1fd29ya2VyQ29u
dGV4dDsKKyAgICAgICAgTXV0ZXggbV90aHJlYWRDcmVhdGlvbk11dGV4OworCisgICAgICAgIE93
blB0cjxXb3JrZXJUaHJlYWRTdGFydHVwRGF0YT4gbV9zdGFydHVwRGF0YTsKKyAgICB9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2Vu
ZGlmIC8vIFdvcmtlclRocmVhZF9oCisK
</data>
<flag name="review"
          id="13595"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>