<?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>231118</bug_id>
          
          <creation_ts>2021-10-02 04:37:04 -0700</creation_ts>
          <short_desc>[LFC][Integration] Move inline iterators to InlineIterator namespace and rename Run* to Box*</short_desc>
          <delta_ts>2021-10-02 07:02:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Antti Koivisto">koivisto</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>annulen</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1799727</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-02 04:37:04 -0700</bug_when>
    <thetext>Improve naming and namespacing of the iterator types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799729</commentid>
    <comment_count>1</comment_count>
      <attachid>439962</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-02 05:00:02 -0700</bug_when>
    <thetext>Created attachment 439962
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799731</commentid>
    <comment_count>2</comment_count>
      <attachid>439963</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-02 05:26:18 -0700</bug_when>
    <thetext>Created attachment 439963
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799743</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-02 07:01:43 -0700</bug_when>
    <thetext>Committed r283443 (242430@main): &lt;https://commits.webkit.org/242430@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 439963.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799744</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-02 07:02:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/83797839&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439962</attachid>
            <date>2021-10-02 05:00:02 -0700</date>
            <delta_ts>2021-10-02 05:38:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231118-20211002150000.patch</filename>
            <type>text/plain</type>
            <size>238350</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzBhMTUyMzgxYWQ3ZTkw
OGFjMjcwNGZiNThlMWVlODJkMWY0YTU1Ny4uOGYzZTVkYzNjZTQ4OTAzZDUzMmJhYzg2MDg0MDVi
NjUxN2NjYzI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3OSBAQAorMjAyMS0xMC0wMiAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSW50ZWdyYXRp
b25dIE1vdmUgaW5saW5lIGl0ZXJhdG9ycyB0byBJbmxpbmVJdGVyYXRvciBuYW1lc3BhY2UgYW5k
IHJlbmFtZSBSdW4qIHRvIEJveCoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMTExOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcHJvdmUgbmFtaW5nIGFuZCBuYW1lc3BhY2luZyBvZiB0aGUgaXRlcmF0
b3IgdHlwZXMuCisKKyAgICAgICAgSXRlcmF0b3IgdHlwZXMgbW92ZSBmcm9tIExheW91dEludGVn
cmF0aW9uIHRvIElubGluZUl0ZXJhdG9yIG5hbWVzcGFjZS4KKworICAgICAgICBBbHNvIHRoZSBp
dGVyYXRvciBhbmQgdGhlIGl0ZXJhdGVkIHR5cGUgaXMgbmFtZWQgZnJvbSBSdW4gdG8gQm94IGZv
ciBhY2N1cmFjeSBhbmQKKyAgICAgICAgdGhlIGNvbmZ1c2luZyB3b3JkIFBhdGggaXMgZHJvcHBl
ZCAoc2luY2UgdGhlcmUgYXJlIG5vIG5hbWUgY29uZmxpdHMgaW4gdGhlIG5ldyBuYW1lc3BhY2Up
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3QgeWV0IGNoYW5nZSBhbnkgYWNjZXNzb3Jz
IG9yIHZhcmlhYmxlIG5hbWVzIHRvIG1hdGNoIHRoZSBydW4tPmJveCByZW5hbWluZy4KKworICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bG9jYWxDYXJldFJlY3RGb3JDaGFyYWN0ZXJP
ZmZzZXQpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpo
YXNJbmxpbmVSdW4pOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnVwc3RyZWFtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpkb3duc3RyZWFtIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnNlYXJjaEFoZWFkRm9yQmV0dGVyTWF0Y2gpOgorICAgICAgICAoV2ViQ29y
ZTo6UG9zaXRpb246OmlubGluZVJ1bkFuZE9mZnNldCBjb25zdCk6CisgICAgICAgICogZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHQpOgorICAgICAgICAqIGVkaXRpbmcv
SW5saW5lUnVuQW5kT2Zmc2V0Lmg6CisgICAgICAgICogZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246OlJlbmRlcmVkUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyZWRQb3NpdGlvbjo6cHJldmlvdXNMZWFmT25M
aW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246Om5leHRMZWFm
T25MaW5lIGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246OmxpbmUgY29uc3QpOgorICAgICAgICAq
IGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRv
cjo6aGFuZGxlVGV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpoYW5k
bGVUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6aGFuZGxlVGV4dE5v
ZGVGaXJzdExldHRlcik6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuaDoKKyAgICAg
ICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgICogZWRpdGluZy9WaXNp
YmxlVW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNUZXh0T3JMaW5lQnJlYWtSdW4pOgor
ICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNUZXh0T3JMaW5lQnJlYWtSdW4pOgorICAgICAgICAo
V2ViQ29yZTo6bmV4dFRleHRPckxpbmVCcmVha1J1bik6CisgICAgICAgIChXZWJDb3JlOjpzdGFy
dFRleHRPckxpbmVCcmVha1J1bik6CisgICAgICAgIChXZWJDb3JlOjplbmRUZXh0T3JMaW5lQnJl
YWtSdW4pOgorICAgICAgICAoV2ViQ29yZTo6bG9naWNhbGx5UHJldmlvdXNSdW4pOgorICAgICAg
ICAoV2ViQ29yZTo6bG9naWNhbGx5TmV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjp3b3JkQnJl
YWtJdGVyYXRvckZvck1pbk9mZnNldEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OndvcmRC
cmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6dmlz
dWFsV29yZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0UG9zaXRpb25Gb3JMaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OmVuZFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAgIChXZWJD
b3JlOjphYnNvbHV0ZUxpbmVEaXJlY3Rpb25Qb2ludFRvTG9jYWxQb2ludEluQmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6cHJldmlvdXNMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
bmV4dExpbmVQb3NpdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
dmFsdWVXaXRoSGFyZExpbmVCcmVha3MgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3Jh
dGlvbi9JbmxpbmVJdGVyYXRvckJveC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3I6OkJveEl0ZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvcjo6b3BlcmF0b3I9
PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3I6
OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6Om5l
eHRPbkxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6
cHJldmlvdXNPbkxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6
OkJveDo6bmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUl0ZXJhdG9yOjpCb3g6OnByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6bGluZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94OjpzdHlsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveDo6bmV4dFRleHRSdW4g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6Om5leHRU
ZXh0UnVuSW5UZXh0T3JkZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0
b3I6OlRleHRCb3g6OnNlbGVjdGlvblJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OlRleHRCb3g6OmlzQ29tYmluZWRUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0Qm94Ojpmb250Q2FzY2FkZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94OjpzZWxlY3Rpb25TdGF0ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0
Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3hJ
dGVyYXRvcjo6dHJhdmVyc2VOZXh0VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJ
dGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRUZXh0UnVuSW5UZXh0T3JkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjp0cmF2ZXJz
ZU5leHRPbkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJh
dG9yOjp0cmF2ZXJzZVByZXZpb3VzT25MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0
ZXJhdG9yOjpCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjp0cmF2ZXJz
ZVByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRPbkxpbmVJbkxvZ2ljYWxPcmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3I6OnRyYXZl
cnNlUHJldmlvdXNPbkxpbmVJbkxvZ2ljYWxPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVJdGVyYXRvcjo6Zmlyc3RUZXh0UnVuRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0
ZXJhdG9yOjpmaXJzdFRleHRSdW5JblRleHRPcmRlckZvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVJdGVyYXRvcjo6dGV4dFJ1bkZvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVy
YXRvcjo6cnVuRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6Om1v
ZGVyblBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6
bGVnYWN5UGF0aCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0
ZXJhdG9yQm94Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oLgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OlRleHRCb3g6OnJlbmRlcmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpUZXh0Qm94OjpsZWdhY3lJbmxpbmVCb3ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjpCb3hJdGVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3I6Om9wZXJhdG9yIT0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjpv
cGVyYXRvciogY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0
ZXJhdG9yOjpvcGVyYXRvci0+IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yKiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yOjpv
cGVyYXRvci0+IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0
Qm94SXRlcmF0b3I6OmdldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6VGV4dFJ1blJhbmdlOjpUZXh0UnVuUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OlRleHRSdW5SYW5nZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lSXRlcmF0b3I6OkJveDo6Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpCb3g6OmlzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6Qm94OjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpC
b3g6OmlzSG9yaXpvbnRhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6Qm94OjpkaXJPdmVycmlkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVy
YXRvcjo6Qm94Ojppc0xpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJ
dGVyYXRvcjo6Qm94OjptaW5pbXVtQ2FyZXRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6bWF4aW11bUNhcmV0T2Zmc2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6OmJpZGlMZXZlbCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94OjpyZW5kZXJlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94OjpsZWdhY3lJbmxpbmVCb3ggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6aW5saW5lQm94IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0Qm94OjpoYXNIeXBoZW4g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OlRleHRC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OnRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OnN0YXJ0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0Qm94OjplbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6Omxlbmd0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveDo6b2Zmc2V0
Rm9yUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRl
eHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUl0ZXJhdG9yOjpUZXh0Qm94OjpzZWxlY3RhYmxlUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OmNyZWF0ZVRleHRSdW4gY29uc3QpOgorICAg
ICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0
b3JCb3hMZWdhY3lQYXRoLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvckxlZ2FjeVBhdGguaC4KKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvckxlZ2FjeVBhdGg6OkJveEl0
ZXJhdG9yTGVnYWN5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94
SXRlcmF0b3JMZWdhY3lQYXRoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvckxlZ2FjeVBhdGg6OnRyYXZlcnNlTmV4dElubGlu
ZUJveEluQ2FjaGVPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94
SXRlcmF0b3JMZWdhY3lQYXRoOjp0cmF2ZXJzZVByZXZpb3VzSW5saW5lQm94SW5DYWNoZU9yZGVy
KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5Q
YXRoLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaC4KKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvck1vZGVyblBhdGg6OkJveEl0ZXJhdG9yTW9kZXJu
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3JNb2Rl
cm5QYXRoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpCb3hJdGVyYXRvck1vZGVyblBhdGg6OmJveGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvck1vZGVyblBhdGg6OmxpbmUgY29uc3QpOgor
ICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxpbmUuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0
aW9uTGluZUl0ZXJhdG9yLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpM
aW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVy
YXRvcjo6TGluZTo6bmV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6TGluZTo6cHJldmlvdXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0
b3I6OkxpbmU6OmZpcnN0UnVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpMaW5lOjpsYXN0UnVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpMaW5lOjpsb2dpY2FsU3RhcnRSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OkxpbmU6OmxvZ2ljYWxFbmRSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmxvZ2ljYWxTdGFydFJ1bldpdGhOb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpsb2dpY2FsRW5kUnVuV2l0
aE5vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmNs
b3Nlc3RSdW5Gb3JQb2ludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6TGluZTo6Y2xvc2VzdFJ1bkZvckxvZ2ljYWxMZWZ0UG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmJsb2NrRGlyZWN0aW9uUG9pbnRJbkxp
bmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OnNlbGVj
dGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OnNlbGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2Vk
aW5nQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6
OnNlbGVjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9y
OjpMaW5lOjpmaXJzdFNlbGVjdGVkQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUl0ZXJhdG9yOjpMaW5lOjpsYXN0U2VsZWN0ZWRCb3ggY29uc3QpOgorICAgICAgICAqIGxheW91
dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxpbmUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5o
LgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvcjo6b3BlcmF0
b3IqIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0
b3I6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6
OkxpbmU6OkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OnRv
cCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZTo6Ym90dG9t
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpzZWxlY3Rp
b25Ub3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OnNl
bGVjdGlvblRvcEZvckhpdFRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OkxpbmU6OnNlbGVjdGlvbkJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVJdGVyYXRvcjo6TGluZTo6c2VsZWN0aW9uSGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpsaW5lQm94VG9wIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpsaW5lQm94Qm90dG9tIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpzZWxlY3Rpb25SZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjp5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpjb250ZW50TG9naWNhbExl
ZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmNvbnRl
bnRMb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6
OkxpbmU6OmNvbnRlbnRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OkxpbmU6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmlzSG9yaXpvbnRhbCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZTo6YmFzZWxpbmVUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpjb250YWluaW5nQmxvY2sgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmxlZ2FjeVJvb3RJbmxp
bmVCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6Omlz
Rmlyc3QgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRv
ckxpbmVMZWdhY3lQYXRoLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmguCisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yTGVnYWN5UGF0aDo6Zmly
c3RSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVJdGVy
YXRvckxlZ2FjeVBhdGg6Omxhc3RSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OkxpbmVJdGVyYXRvckxlZ2FjeVBhdGg6OmxvZ2ljYWxTdGFydFJ1biBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yTGVnYWN5UGF0
aDo6bG9naWNhbEVuZFJ1biBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0lu
bGluZUl0ZXJhdG9yTGluZU1vZGVyblBhdGguaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvck1vZGVyblBh
dGguaC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3JNb2Rl
cm5QYXRoOjpMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoOjpmaXJzdFJ1biBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yTW9kZXJuUGF0aDo6bGFz
dFJ1biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJh
dG9yTW9kZXJuUGF0aDo6bG9naWNhbFN0YXJ0UnVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoOjpsb2dpY2FsRW5kUnVuIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3JNb2Rl
cm5QYXRoOjpsaW5lcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6
TGluZUl0ZXJhdG9yTW9kZXJuUGF0aDo6bGluZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudC5jcHA6CisgICAgICAgICog
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6dGV4dFJ1bnNGb3Ig
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6
OnJ1bkZvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGlu
ZUxheW91dDo6Zmlyc3RMaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVn
cmF0aW9uOjpMaW5lTGF5b3V0OjpsYXN0TGluZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
SXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9y
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0Jp
ZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRvcjo6VGV4dFJ1bkl0ZXJh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRvcjo6b2Zmc2V0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRvcjo6aW5j
cmVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRvcjo6YXRF
bmQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bkl0ZXJhdG9yOjpj
dXJyZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRv
cjo6ZGlyZWN0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5J
dGVyYXRvcjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVu
SXRlcmF0b3I6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9DYXJl
dFJlY3RDb21wdXRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ2FyZXRSZWN0
Rm9yTGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDYXJldFJlY3RGb3JU
ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dExvZ2ljYWxXaWR0aEZvclRleHRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGp1c3RGb3JC
b3JkZXJGaXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGp1
c3RTZWxlY3Rpb25Ub3BGb3JQcmVjZWRpbmdCbG9jayBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmlubGluZVNlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29y
ZTo6cG9zaXRpb25Gb3JSdW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpm
aW5kQ2xvc2VzdFRleHRBdEFic29sdXRlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojpwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpnZXRMZWFkaW5nQ29y
bmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmNvbGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxpbmVCcmVhazo6bGluZXNCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaW5lQnJlYWs6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGluZUJyZWFrOjphYnNvbHV0ZVF1YWRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpbmVCcmVhazo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJpZXMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZXBsYWNlZDo6cG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9u
R2VvbWV0cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyaWVzRm9yVGV4dFJ1bik6Cisg
ICAgICAgIChXZWJDb3JlOjplbGxpcHNpc1JlY3RGb3JUZXh0UnVuKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbGxlY3RBYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2FsUXVhZEZv
clRleHRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0Zv
clJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJ
bkJveCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZz
ZXRGb3JCaURpKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Zmlyc3RSdW5Mb2NhdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpsaW5lc0JvdW5kaW5nQm94IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25HZW9tZXRy
aWVzRm9yTGluZUJveGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNhcmV0TWlu
T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNhcmV0TWF4T2Zm
c2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvdW50UmVuZGVyZWRD
aGFyYWN0ZXJPZmZzZXRzVW50aWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnNP
ZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6aGFzUmVuZGVyZWRUZXh0IGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnREZWNvcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRleHRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFp
bnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyk6
CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERlY29y
YXRpb25QYWludGVyOjpzZXRUZXh0Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dERlY29yYXRpb25QYWludGVyOjpzZXRUZXh0UnVuSXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAg
ICAqIHN0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjptaW5M
b2dpY2FsVG9wRm9yVGV4dERlY29yYXRpb25MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Om1heExv
Z2ljYWxCb3R0b21Gb3JUZXh0RGVjb3JhdGlvbkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cHV0ZVVuZGVybGluZU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjp2aXN1YWxPdmVyZmxvd0Zv
ckRlY29yYXRpb25zKToKKyAgICAgICAgKiBzdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuaDoKKwog
MjAyMS0xMC0wMSAgTmlrb3MgTW91Y2h0YXJpcyAgPG5tb3VjaHRhcmlzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBbGxvdyBOYU4sIGluZmluaXR5LCBhbmQgLWluZmluaXR5IGluIGNhbGMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCmluZGV4IDc3Nzg3MTQzM2RhODEyNWJlYzgxMTE2MDAzNmFjNWRlYTRjMjJkZTAu
LjVkYjY4Mjk5NTg5ZmRjYjI5OTc1MmU1ODI2ZGM5OTMxZTZlYTAxZjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZQpAQCAtNzk1LDE0ICs3OTUsMTQgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5s
aW5lRGlzcGxheUJveC5oCiAgICAgbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lUmVjdC5oCiAKKyAgICBsYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3guaAor
ICAgIGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaAorICAg
IGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaAorICAgIGxh
eW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxpbmUuaAorICAgIGxheW91dC9pbnRlZ3Jh
dGlvbi9JbmxpbmVJdGVyYXRvckxpbmVMZWdhY3lQYXRoLmgKKyAgICBsYXlvdXQvaW50ZWdyYXRp
b24vSW5saW5lSXRlcmF0b3JMaW5lTW9kZXJuUGF0aC5oCiAgICAgbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudC5oCiAgICAgbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uTGluZS5oCi0gICAgbGF5b3V0L2ludGVncmF0aW9uL0xheW91dElu
dGVncmF0aW9uTGluZUl0ZXJhdG9yLmgKLSAgICBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmgKLSAgICBsYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmgKLSAgICBsYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oCi0gICAgbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgKLSAgICBsYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaAog
ICAgIGxheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5oCiAKICAgICBsb2FkZXIvQ2FudmFzQWN0
aXZpdHlSZWNvcmQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAzMGVlYzU3OWFmZjMxMzZlNjQwODJhZDY2
ZDFkNzg2N2Q1OGUyMjFjLi40NDdmMWM1M2VjZmExMDAwMjY5Zjg4ZGRhMDYxZjk0MDUwMzFiNzU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTUxMCwxNCArMTUxMCwxNCBAQCBsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmNwcAogbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lVGV4dEl0ZW0uY3BwCiBsYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9pbnZhbGlkYXRpb24vSW5saW5lSW52YWxpZGF0aW9uLmNw
cAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvdGV4dC9UZXh0VXRpbC5jcHAKK2xh
eW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveC5jcHAKK2xheW91dC9pbnRlZ3JhdGlv
bi9JbmxpbmVJdGVyYXRvckxpbmUuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25Cb3hUcmVlLmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292
ZXJhZ2UuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250
ZW50QnVpbGRlci5jcHAKIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGlu
ZUNvbnRlbnQuY3BwCi1sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3IuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0
LmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAK
LWxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmNwcAogbGF5
b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Q29u
dGFpbmVyQm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94R2VvbWV0cnkuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZTViNTBiNDlhMTUyY2NlNWQ4NWYxYTM4NmMxNzI2Njk0N2UxMWRlZi4uYjdkYjFkNzI1OGMz
ZGJkYWIwOGM5MDI1OGQxYmI4NjgyMjYxMTM5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTI3Nyw5ICs1Mjc3LDkgQEAKIAkJ
RTQ4NjNDRkUyMzg0MkU5RTAwOTcyMTU4IC8qIFJ1bGVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg2M0NGRDIzODQyRTlFMDA5NzIxNTggLyog
UnVsZURhdGEuaCAqLzsgfTsKIAkJRTQ5NDZFQUYxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVs
ZUltcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ5NDZFQUQxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OUJEOUZBMTMxRkQyRUQw
MDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0OUJEOUY5MTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wu
aCAqLzsgfTsKLQkJRTRBNjY0Q0MyNTIxRDRBRjAwNzA4MURDIC8qIExheW91dEludGVncmF0aW9u
UnVuSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0QTY2NEM2MjUyMUI3NzgwMDcwODFEQyAvKiBMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
RTRBNjY0Q0UyNTIxRDRDOTAwNzA4MURDIC8qIExheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JN
b2Rlcm5QYXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEE2NjRDNDI1MjFCNzc3MDA3MDgxREMgLyogTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRv
ck1vZGVyblBhdGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlFNEE2NjRDRjI1MjFENEUyMDA3MDgxREMgLyogTGF5b3V0SW50ZWdyYXRpb25SdW5J
dGVyYXRvckxlZ2FjeVBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0QTY2NEM1MjUyMUI3NzgwMDcwODFEQyAvKiBMYXlvdXRJbnRlZ3JhdGlvblJ1
bkl0ZXJhdG9yTGVnYWN5UGF0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUU0QTY2NENDMjUyMUQ0QUYwMDcwODFEQyAvKiBJbmxpbmVJdGVyYXRv
ckJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRB
NjY0QzYyNTIxQjc3ODAwNzA4MURDIC8qIElubGluZUl0ZXJhdG9yQm94LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTRBNjY0Q0UyNTIxRDRDOTAw
NzA4MURDIC8qIElubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBNjY0QzQyNTIxQjc3NzAwNzA4MURDIC8q
IElubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUU0QTY2NENGMjUyMUQ0RTIwMDcwODFEQyAvKiBJbmxp
bmVJdGVyYXRvckJveExlZ2FjeVBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0QTY2NEM1MjUyMUI3NzgwMDcwODFEQyAvKiBJbmxpbmVJdGVyYXRv
ckJveExlZ2FjeVBhdGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlFNEE3OTk1MjIwRUU0QjE0MDBDMTk1NjggLyogQ1NTUGFyc2VyQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBNzk5NEUy
MEVFNEFFMTAwQzE5NTY4IC8qIENTU1BhcnNlckNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEE4MTRENDFDNkRFQzQwMDBCRjg1QUMg
LyogQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTgxNEQzMUM2REVDNDAwMEJGODVBQyAvKiBDbGFzc0NoYW5n
ZUludmFsaWRhdGlvbi5oICovOyB9OwogCQlFNEE4MTREQTFDNzBFMTBEMDBCRjg1QUMgLyogQXR0
cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEE4MTREOTFDNzBFMTBEMDBCRjg1QUMgLyogQXR0cmlidXRlQ2hh
bmdlSW52YWxpZGF0aW9uLmggKi87IH07CkBAIC01MzA4LDkgKzUzMDgsOSBAQAogCQlFNEM5MUEw
RTE4MDIzNDMxMDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzkxQTBEMTgwMjM0MzEwMEExN0Y2RCAvKiBU
ZXh0UGFpbnRTdHlsZS5oICovOyB9OwogCQlFNEM5MUExNjE4MDk5OUYxMDBBMTdGNkQgLyogUmVu
ZGVyVGV4dExpbmVCb3hlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRDOTFBMTUxODA5OTlGMTAwQTE3RjZEIC8qIFJlbmRlclRleHRMaW5lQm94ZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEQz
M0YzQjI1MkFFRUNEMDA4MzdEMDUgLyogSW5saW5lUnVuQW5kT2Zmc2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQzM0YzOTI1MkFFRUNDMDA4MzdE
MDUgLyogSW5saW5lUnVuQW5kT2Zmc2V0LmggKi87IH07Ci0JCUU0RDMzRjQxMjUyQzRCODMwMDgz
N0QwNSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTREMzNGM0YyNTJDNEI4MjAwODM3RDA1IC8q
IExheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmggKi87IH07Ci0JCUU0RDMzRjQ0MjUyQzUw
RTIwMDgzN0QwNSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDMzRjQzMjUy
QzUwRTIwMDgzN0QwNSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGgu
aCAqLzsgfTsKLQkJRTREMzNGNDYyNTJDNTBGQzAwODM3RDA1IC8qIExheW91dEludGVncmF0aW9u
TGluZUl0ZXJhdG9yTW9kZXJuUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTREMzNGNDUyNTJDNTBGQjAwODM3RDA1IC8qIExheW91dEludGVncmF0
aW9uTGluZUl0ZXJhdG9yTW9kZXJuUGF0aC5oICovOyB9OworCQlFNEQzM0Y0MTI1MkM0QjgzMDA4
MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQzM0YzRjI1MkM0QjgyMDA4MzdEMDUgLyogSW5saW5lSXRl
cmF0b3JMaW5lLmggKi87IH07CisJCUU0RDMzRjQ0MjUyQzUwRTIwMDgzN0QwNSAvKiBJbmxpbmVJ
dGVyYXRvckxpbmVMZWdhY3lQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNEQzM0Y0MzI1MkM1MEUyMDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JM
aW5lTGVnYWN5UGF0aC5oICovOyB9OworCQlFNEQzM0Y0NjI1MkM1MEZDMDA4MzdEMDUgLyogSW5s
aW5lSXRlcmF0b3JMaW5lTW9kZXJuUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTREMzNGNDUyNTJDNTBGQjAwODM3RDA1IC8qIElubGluZUl0ZXJh
dG9yTGluZU1vZGVyblBhdGguaCAqLzsgfTsKIAkJRTRENThFQjUxN0I0REJEQzAwQ0JEQ0E4IC8q
IFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEQ1OEVCMzE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuaCAqLzsgfTsKIAkJRTRENThFQjkxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxl
Rm9udFNpemVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0RDU4RUI3MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rp
b25zLmggKi87IH07CiAJCUU0RDU4RUJCMTdCOEYxMjgwMENCRENBOCAvKiBFbGVtZW50VHJhdmVy
c2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ1
OEVCQTE3QjhGMTI4MDBDQkRDQTggLyogRWxlbWVudFRyYXZlcnNhbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNjU0MSwxMCArMTY1NDEsMTAg
QEAKIAkJRTRBMDA3ODQxQjgyMEVEMzAwMkM1QTZFIC8qIERhdGFVUkxEZWNvZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFVUkxEZWNvZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBMTgyMkYxRjEzQkU1ODAwRkVGNjk4IC8qIFN0
eWxlSW52YWxpZGF0aW9uRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlSW52YWxpZGF0
aW9uRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTFBQzc4MjJG
QUZENTAwMDE3Qjc1QiAvKiBMZWdhY3lMaW5lTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExlZ2FjeUxpbmVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRTRBNjY0QzQyNTIxQjc3NzAwNzA4MURDIC8qIExheW91dEludGVncmF0aW9uUnVuSXRl
cmF0b3JNb2Rlcm5QYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91
dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUU0QTY2NEM1MjUyMUI3NzgwMDcwODFEQyAvKiBMYXlvdXRJbnRlZ3JhdGlvblJ1
bkl0ZXJhdG9yTGVnYWN5UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
YXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFNEE2NjRDNjI1MjFCNzc4MDA3MDgxREMgLyogTGF5b3V0SW50ZWdyYXRp
b25SdW5JdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRJ
bnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0
QTY2NEM3MjUyMUI3NzkwMDcwODFEQyAvKiBMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0aW9u
UnVuSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEE2NjRDNDI1
MjFCNzc3MDA3MDgxREMgLyogSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEE2NjRDNTI1MjFCNzc4MDA3MDgxREMgLyog
SW5saW5lSXRlcmF0b3JCb3hMZWdhY3lQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFNEE2NjRDNjI1MjFCNzc4MDA3MDgxREMgLyogSW5saW5lSXRlcmF0b3JCb3gu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lSXRlcmF0b3JCb3guaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRBNjY0QzcyNTIxQjc3OTAwNzA4MURDIC8q
IElubGluZUl0ZXJhdG9yQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IElubGluZUl0ZXJhdG9yQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTRBNzk5NEUyMEVFNEFFMTAwQzE5NTY4IC8qIENTU1BhcnNlckNvbnRleHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ1NTUGFyc2VyQ29udGV4dC5oOyBwYXRoID0gcGFyc2Vy
L0NTU1BhcnNlckNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBNzk5
NTAyMEVFNEFFMjAwQzE5NTY4IC8qIENTU1BhcnNlckNvbnRleHQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ1NTUGFyc2VyQ29udGV4dC5jcHA7IHBhdGggPSBwYXJz
ZXIvQ1NTUGFyc2VyQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
QTgxNEQzMUM2REVDNDAwMEJGODVBQyAvKiBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY2MDksMTAgKzE2NjA5LDEwIEBACiAJCUU0
QzkxQTE1MTgwOTk5RjEwMEExN0Y2RCAvKiBSZW5kZXJUZXh0TGluZUJveGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRleHRMaW5lQm94ZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDOTFBMTcxODA5OTlGQjAwQTE3RjZEIC8qIFJlbmRlclRl
eHRMaW5lQm94ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyVGV4dExpbmVCb3hlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDMz
RjM5MjUyQUVFQ0MwMDgzN0QwNSAvKiBJbmxpbmVSdW5BbmRPZmZzZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lUnVuQW5kT2Zmc2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUU0RDMzRjNGMjUyQzRCODIwMDgzN0QwNSAvKiBMYXlvdXRJbnRlZ3Jh
dGlvbkxpbmVJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlv
dXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlFNEQzM0Y0MjI1MkM1MEE4MDA4MzdEMDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNEQzM0Y0MzI1MkM1MEUyMDA4MzdE
MDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yTGVn
YWN5UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNEQzM0Y0NTI1MkM1MEZC
MDA4MzdEMDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uTGluZUl0ZXJh
dG9yTW9kZXJuUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEQzM0YzRjI1
MkM0QjgyMDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElubGluZUl0ZXJhdG9yTGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFNEQzM0Y0MjI1MkM1MEE4MDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5l
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUl0ZXJhdG9yTGluZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RDMzRjQzMjUyQzUwRTIwMDgzN0QwNSAvKiBJbmxpbmVJ
dGVyYXRvckxpbmVMZWdhY3lQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElubGluZUl0ZXJhdG9yTGluZUxlZ2FjeVBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTREMzNGNDUyNTJDNTBGQjAwODM3RDA1IC8qIElubGluZUl0ZXJhdG9yTGluZU1vZGVy
blBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lSXRlcmF0b3JM
aW5lTW9kZXJuUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEQ1OEVCMjE3
QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEQ1OEVCMzE3QjREQkRDMDBDQkRDQTggLyog
U3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVGb250U2l6ZUZ1bmN0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTQ4NCw2ICsyOTQ4NCwx
NCBAQAogCQlFNEZCNEIxRTIzOTUzNTZGMDAzQzMzNkEgLyogaW50ZWdyYXRpb24gKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUU0QTY2NEM3MjUyMUI3Nzkw
MDcwODFEQyAvKiBJbmxpbmVJdGVyYXRvckJveC5jcHAgKi8sCisJCQkJRTRBNjY0QzYyNTIxQjc3
ODAwNzA4MURDIC8qIElubGluZUl0ZXJhdG9yQm94LmggKi8sCisJCQkJRTRBNjY0QzUyNTIxQjc3
ODAwNzA4MURDIC8qIElubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0aC5oICovLAorCQkJCUU0QTY2
NEM0MjUyMUI3NzcwMDcwODFEQyAvKiBJbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaCAqLywK
KwkJCQlFNEQzM0Y0MjI1MkM1MEE4MDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5lLmNwcCAq
LywKKwkJCQlFNEQzM0YzRjI1MkM0QjgyMDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5lLmgg
Ki8sCisJCQkJRTREMzNGNDMyNTJDNTBFMjAwODM3RDA1IC8qIElubGluZUl0ZXJhdG9yTGluZUxl
Z2FjeVBhdGguaCAqLywKKwkJCQlFNEQzM0Y0NTI1MkM1MEZCMDA4MzdEMDUgLyogSW5saW5lSXRl
cmF0b3JMaW5lTW9kZXJuUGF0aC5oICovLAogCQkJCUU0MTgwMjU2MjNENDU0QjUwMEZGQjA3MSAv
KiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuY3BwICovLAogCQkJCUU0MTgwMjUzMjNENDU0OUEw
MEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCAqLywKIAkJCQlFNDAzQjc5RjI1
MUIxMThCMDAxOUU4MDAgLyogTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5jcHAgKi8sCkBAIC0y
OTQ5MywxOCArMjk1MDEsMTAgQEAKIAkJCQk2RjNGQkE5NjI1NTZFMzA4MDAzNTMwRkQgLyogTGF5
b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5jcHAgKi8sCiAJCQkJNkYzRkJBOTcy
NTU2RTMxMjAwMzUzMEZEIC8qIExheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIu
aCAqLywKIAkJCQk2RkI0N0U2MTIyNzc0MjVBMDBDN0JDQjAgLyogTGF5b3V0SW50ZWdyYXRpb25M
aW5lLmggKi8sCi0JCQkJRTREMzNGNDIyNTJDNTBBODAwODM3RDA1IC8qIExheW91dEludGVncmF0
aW9uTGluZUl0ZXJhdG9yLmNwcCAqLywKLQkJCQlFNEQzM0YzRjI1MkM0QjgyMDA4MzdEMDUgLyog
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCAqLywKLQkJCQlFNEQzM0Y0MzI1MkM1MEUy
MDA4MzdEMDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmggKi8s
Ci0JCQkJRTREMzNGNDUyNTJDNTBGQjAwODM3RDA1IC8qIExheW91dEludGVncmF0aW9uTGluZUl0
ZXJhdG9yTW9kZXJuUGF0aC5oICovLAogCQkJCUU0QUJBQkRFMjM2MDg5M0QwMEZBNDM0NSAvKiBM
YXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwICovLAogCQkJCUU0QUJBQkRCMjM2MDg4RkQw
MEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCAqLywKIAkJCQlFNDMxMkFC
NTI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCAqLywK
IAkJCQlFNDMxMkFCNzI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0
aW9uLmggKi8sCi0JCQkJRTRBNjY0QzcyNTIxQjc3OTAwNzA4MURDIC8qIExheW91dEludGVncmF0
aW9uUnVuSXRlcmF0b3IuY3BwICovLAotCQkJCUU0QTY2NEM2MjUyMUI3NzgwMDcwODFEQyAvKiBM
YXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmggKi8sCi0JCQkJRTRBNjY0QzUyNTIxQjc3ODAw
NzA4MURDIC8qIExheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmggKi8sCi0J
CQkJRTRBNjY0QzQyNTIxQjc3NzAwNzA4MURDIC8qIExheW91dEludGVncmF0aW9uUnVuSXRlcmF0
b3JNb2Rlcm5QYXRoLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGludGVncmF0aW9uOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMxNDM0LDcgKzMxNDM0LDYgQEAKIAkJCQlFN0UwMzU3
MjI0RDRFMTk2MDA4REZFRkIgLyogQW5hbHlzZXJPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyN0UzQzgwODI1N0Y1RTZFMDBDOTg2QUIgLyogQU5HTEVIZWFkZXJzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAgLyogQU5HTEVJbnN0YW5jZWRBcnJheXMu
aCBpbiBIZWFkZXJzICovLAotCQkJCTdCQjM0QTE3MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8q
IEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDEx
IC8qIEFuaW1hdGlvbkVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzFFMkM0MjYyMUM5MzUy
ODAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTMy
NjgyLDYgKzMyNjgxLDcgQEAKIAkJCQk5MzQ5MDdFNDEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhp
Y3NDb250ZXh0Q0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxM0RFODcwMjNBOTY5NzMwMDhGQzQ3
QiAvKiBHcmFwaGljc0NvbnRleHRHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0I0NUFCNTUyNUZC
QTlERTAwRkQyN0Y0IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVFR0xVdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTdCQjM0QTE3MjUzNDVDQjIwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2
MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QjEwMzM5RTI1NDk3MjE3MDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhDMUFDIC8qIEdyYXBoaWNzQ29u
dGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzAwNSw2ICszMzAwNSwxMiBAQAog
CQkJCTExNUNGQTdFMjA4QjhFMTAwMDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTExMUZBMUM3MjZGMEYzMEYwMDNCOEYxNiAvKiBJbmxpbmVJbnZh
bGlkYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRTdDRkEyMjE3N0VFRjIwMDVCMTU3MyAv
KiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEE2NjRDQzI1MjFENEFGMDA3MDgx
REMgLyogSW5saW5lSXRlcmF0b3JCb3guaCBpbiBIZWFkZXJzICovLAorCQkJCUU0QTY2NENGMjUy
MUQ0RTIwMDcwODFEQyAvKiBJbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaCBpbiBIZWFkZXJz
ICovLAorCQkJCUU0QTY2NENFMjUyMUQ0QzkwMDcwODFEQyAvKiBJbmxpbmVJdGVyYXRvckJveE1v
ZGVyblBhdGguaCBpbiBIZWFkZXJzICovLAorCQkJCUU0RDMzRjQxMjUyQzRCODMwMDgzN0QwNSAv
KiBJbmxpbmVJdGVyYXRvckxpbmUuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0RDMzRjQ0MjUyQzUw
RTIwMDgzN0QwNSAvKiBJbmxpbmVJdGVyYXRvckxpbmVMZWdhY3lQYXRoLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFNEQzM0Y0NjI1MkM1MEZDMDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5lTW9k
ZXJuUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZBQUU3MTMyNkEyODE0QjAwRTA3NTAyIC8q
IElubGluZUxldmVsQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjBDRDY5NTIyOUVEMzI3MDBD
NTk5NEUgLyogSW5saW5lTGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCMjQwMDUyM0RGRjEy
ODAwNzk2NDU4IC8qIElubGluZUxpbmVCb3guaCBpbiBIZWFkZXJzICovLApAQCAtMzQwMDUsMTQg
KzM0MDExLDggQEAKIAkJCQlFNDUxQzYzNDIzOTQwNThGMDA5OTMxOTAgLyogTGF5b3V0SW50ZWdy
YXRpb25JbmxpbmVDb250ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjNGQkE5ODI1NTZFMzEz
MDAzNTMwRkQgLyogTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMyMjc3NDI1QTAwQzdCQ0IwIC8qIExheW91dEludGVncmF0
aW9uTGluZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTREMzNGNDEyNTJDNEI4MzAwODM3RDA1IC8q
IExheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEQz
M0Y0NDI1MkM1MEUyMDA4MzdEMDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdh
Y3lQYXRoLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEQzM0Y0NjI1MkM1MEZDMDA4MzdEMDUgLyog
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNEFCQUJERDIzNjA4OEZFMDBGQTQzNDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5
b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDAzQjdBMzI1MUIxMUMxMDAxOUU4MDAgLyogTGF5
b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEE2NjRDQzI1
MjFENEFGMDA3MDgxREMgLyogTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJRTRBNjY0Q0YyNTIxRDRFMjAwNzA4MURDIC8qIExheW91dEludGVncmF0aW9u
UnVuSXRlcmF0b3JMZWdhY3lQYXRoLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEE2NjRDRTI1MjFE
NEM5MDA3MDgxREMgLyogTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaCBp
biBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThEMCAvKiBMYXlvdXRJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZGQTRDMDEyM0YyRkVEOTAwN0U0RUJDIC8qIExh
eW91dExpbmVCcmVha0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZFNjk1MzAw
QzRDMDdFIC8qIExheW91dE1pbGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAwZmM2NTg1OGQzMmY1
MTljNzc2MGFiNWRlODU2ZGExNGZlOGE0ZTYzLi42MmQzMmU3NmEyYzM4OGM2Y2RkYThlNzYxMTQ3
ZmFjMzg1NzlkM2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKQEAgLTI5NDUsNyArMjk0NSw3IEBAIExheW91dFJlY3QgQVhPYmplY3RDYWNo
ZTo6bG9jYWxDYXJldFJlY3RGb3JDaGFyYWN0ZXJPZmZzZXQoUmVuZGVyT2JqZWN0KiYgcmVuZGVy
CiAgICAgaWYgKHJ1bkFuZE9mZnNldC5ydW4pCiAgICAgICAgIHJlbmRlcmVyID0gY29uc3RfY2Fz
dDxSZW5kZXJPYmplY3QqPigmcnVuQW5kT2Zmc2V0LnJ1bi0+cmVuZGVyZXIoKSk7CiAKLSAgICBp
ZiAoaXM8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlcikgJiYgTGF5b3V0SW50ZWdyYXRpb246OnJ1
bkZvcihkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KCpyZW5kZXJlcikpICE9IHJ1bkFuZE9mZnNl
dC5ydW4pCisgICAgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIpICYmIElubGluZUl0
ZXJhdG9yOjpydW5Gb3IoZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVyZXIpKSAhPSBy
dW5BbmRPZmZzZXQucnVuKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAgcmV0dXJu
IGNvbXB1dGVMb2NhbENhcmV0UmVjdCgqcmVuZGVyZXIsIHJ1bkFuZE9mZnNldCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmNwcAppbmRleCBkOWFhMWFmZDVlZGFlOWJiYWJlNTNmOWIwNzI5MjA5NGExYmI1
MDhmLi5iNmNlOTk1NzBhYmU5Y2ZiZTNhYTJiNDk0NTNmOWEwMTdlNzM1NTcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5jcHAKQEAgLTM1LDkgKzM1LDkgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVu
dC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94LmgiCisjaW5jbHVkZSAiSW5saW5lSXRl
cmF0b3JMaW5lLmgiCiAjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zmc2V0LmgiCi0jaW5jbHVkZSAi
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3Jh
dGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCkBAIC02OSwxMSAr
NjksMTEgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIGJvb2wgaGFzSW5s
aW5lUnVuKFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiB7Ci0gICAgaWYgKGlzPFJlbmRlckJveD4o
cmVuZGVyZXIpICYmIExheW91dEludGVncmF0aW9uOjpydW5Gb3IoZG93bmNhc3Q8UmVuZGVyQm94
PihyZW5kZXJlcikpKQorICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSAmJiBJbmxpbmVJ
dGVyYXRvcjo6cnVuRm9yKGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpKSkKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSAmJiBMYXlvdXRJ
bnRlZ3JhdGlvbjo6Zmlyc3RUZXh0UnVuRm9yKGRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVy
KSkpCisgICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSAmJiBJbmxpbmVJdGVyYXRvcjo6
Zmlyc3RUZXh0UnVuRm9yKGRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKSkpCiAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKSAmJiBM
YXlvdXRJbnRlZ3JhdGlvbjo6cnVuRm9yKGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4ocmVuZGVy
ZXIpKSkKKyAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlcikgJiYgSW5saW5lSXRl
cmF0b3I6OnJ1bkZvcihkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTczOSw3ICs3MzksNyBA
QCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxl
IHJ1bGUpIGNvbnN0CiAgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpKSB7CiAg
ICAgICAgICAgICBhdXRvJiB0ZXh0UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVu
ZGVyZXIpOwogCi0gICAgICAgICAgICBhdXRvIGZpcnN0VGV4dFJ1biA9IExheW91dEludGVncmF0
aW9uOjpmaXJzdFRleHRSdW5JblRleHRPcmRlckZvcih0ZXh0UmVuZGVyZXIpOworICAgICAgICAg
ICAgYXV0byBmaXJzdFRleHRSdW4gPSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RUZXh0UnVuSW5UZXh0
T3JkZXJGb3IodGV4dFJlbmRlcmVyKTsKICAgICAgICAgICAgIGlmICghZmlyc3RUZXh0UnVuKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC04NDYsNyArODQ2LDcgQEAgUG9zaXRpb24g
UG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNv
bnN0CiAgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpKSB7CiAgICAgICAgICAg
ICBhdXRvJiB0ZXh0UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpOwog
Ci0gICAgICAgICAgICBhdXRvIGZpcnN0VGV4dFJ1biA9IExheW91dEludGVncmF0aW9uOjpmaXJz
dFRleHRSdW5JblRleHRPcmRlckZvcih0ZXh0UmVuZGVyZXIpOworICAgICAgICAgICAgYXV0byBm
aXJzdFRleHRSdW4gPSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RUZXh0UnVuSW5UZXh0T3JkZXJGb3Io
dGV4dFJlbmRlcmVyKTsKICAgICAgICAgICAgIGlmICghZmlyc3RUZXh0UnVuKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTYwLDcgKzExNjAsNyBAQCBzdGF0aWMgYm9vbCBpc05v
blRleHRMZWFmQ2hpbGQoUmVuZGVyT2JqZWN0JiBvYmplY3QpCiAgICAgcmV0dXJuICFkb3duY2Fz
dDxSZW5kZXJFbGVtZW50PihvYmplY3QpLmZpcnN0Q2hpbGQoKTsKIH0KIAotc3RhdGljIExheW91
dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3Igc2VhcmNoQWhlYWRGb3JCZXR0ZXJNYXRjaChS
ZW5kZXJUZXh0JiByZW5kZXJlcikKK3N0YXRpYyBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJh
dG9yIHNlYXJjaEFoZWFkRm9yQmV0dGVyTWF0Y2goUmVuZGVyVGV4dCYgcmVuZGVyZXIpCiB7CiAg
ICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IHJlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpOwog
ICAgIFJlbmRlck9iamVjdCogbmV4dCA9ICZyZW5kZXJlcjsKQEAgLTExNzIsNyArMTE3Miw3IEBA
IHN0YXRpYyBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yIHNlYXJjaEFoZWFkRm9y
QmV0dGVyTWF0Y2goUmVuZGVyVGV4dCYKICAgICAgICAgaWYgKGlzTm9uVGV4dExlYWZDaGlsZCgq
bmV4dCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICBpZiAoaXM8UmVuZGVyVGV4
dD4oKm5leHQpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBydW4gPSBMYXlvdXRJbnRlZ3JhdGlv
bjo6Zmlyc3RUZXh0UnVuSW5UZXh0T3JkZXJGb3IoZG93bmNhc3Q8UmVuZGVyVGV4dD4oKm5leHQp
KSkKKyAgICAgICAgICAgIGlmIChhdXRvIHJ1biA9IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRS
dW5JblRleHRPcmRlckZvcihkb3duY2FzdDxSZW5kZXJUZXh0PigqbmV4dCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBydW47CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjEwLDE3ICsxMjEwLDE3
IEBAIElubGluZVJ1bkFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KEFmZmlu
aXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
cmV0dXJuIHsgeyB9LCBjYXJldE9mZnNldCB9OwogCi0gICAgTGF5b3V0SW50ZWdyYXRpb246OlJ1
bkl0ZXJhdG9yIHJ1bjsKKyAgICBJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3IgcnVuOwogCiAg
ICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpIHsKICAgICAgICAgYXV0byYgbGluZUJyZWFrUmVuZGVy
ZXIgPSBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KCpyZW5kZXJlcik7CiAgICAgICAgIGlmICgh
Y2FyZXRPZmZzZXQpCi0gICAgICAgICAgICBydW4gPSBMYXlvdXRJbnRlZ3JhdGlvbjo6cnVuRm9y
KGxpbmVCcmVha1JlbmRlcmVyKTsKKyAgICAgICAgICAgIHJ1biA9IElubGluZUl0ZXJhdG9yOjpy
dW5Gb3IobGluZUJyZWFrUmVuZGVyZXIpOwogICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyVGV4dD4o
KnJlbmRlcmVyKSkgewogICAgICAgICBhdXRvJiB0ZXh0UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5k
ZXJUZXh0PigqcmVuZGVyZXIpOwogCi0gICAgICAgIGF1dG8gdGV4dFJ1biA9IExheW91dEludGVn
cmF0aW9uOjpmaXJzdFRleHRSdW5Gb3IodGV4dFJlbmRlcmVyKTsKLSAgICAgICAgTGF5b3V0SW50
ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciBjYW5kaWRhdGU7CisgICAgICAgIGF1dG8gdGV4dFJ1
biA9IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5Gb3IodGV4dFJlbmRlcmVyKTsKKyAgICAg
ICAgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciBjYW5kaWRhdGU7CiAKICAgICAgICAg
Zm9yICg7IHRleHRSdW47ICsrdGV4dFJ1bikgewogICAgICAgICAgICAgdW5zaWduZWQgY2FyZXRN
aW5PZmZzZXQgPSB0ZXh0UnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKTsKQEAgLTEyNzAsNyArMTI3
MCw3IEBAIElubGluZVJ1bkFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KEFm
ZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uCiAgICAgICAgICAgICByZXR1cm4gZXF1aXZh
bGVudC5pbmxpbmVSdW5BbmRPZmZzZXQoQWZmaW5pdHk6OlVwc3RyZWFtLCBwcmltYXJ5RGlyZWN0
aW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXM8UmVuZGVyQm94PigqcmVuZGVyZXIpKSB7
Ci0gICAgICAgICAgICBydW4gPSBMYXlvdXRJbnRlZ3JhdGlvbjo6cnVuRm9yKGRvd25jYXN0PFJl
bmRlckJveD4oKnJlbmRlcmVyKSk7CisgICAgICAgICAgICBydW4gPSBJbmxpbmVJdGVyYXRvcjo6
cnVuRm9yKGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKSk7CiAgICAgICAgICAgICBpZiAo
cnVuICYmIGNhcmV0T2Zmc2V0ID4gcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKSAmJiBjYXJldE9m
ZnNldCA8IHJ1bi0+bWF4aW11bUNhcmV0T2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHsgcnVuLCBjYXJldE9mZnNldCB9OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IGVkYWFjMzY4NTYzNDg3MTgyYTZl
MzI2NGI3NTUwYWZjZjJmNDJkYTAuLjNhNmU0ZWE3NDQwNjJkZmZkNjRhMjZiYzYyZWYyY2Q4NGU2
NzIwZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCkBAIC00NywxMiArNDcsMTIgQEAKICNpbmNsdWRlICJIVE1MTElFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNwYW5FbGVtZW50LmgiCisjaW5j
bHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKICNpbmNsdWRlICJJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kLmgiCiAjaW5jbHVkZSAiSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5oIgogI2luY2x1ZGUg
Ikluc2VydE5vZGVCZWZvcmVDb21tYW5kLmgiCiAjaW5jbHVkZSAiSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yQ29tbWFuZC5oIgogI2luY2x1ZGUgIkluc2VydFRleHRDb21tYW5kLmgiCi0jaW5jbHVk
ZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2luY2x1ZGUgIkxlZ2FjeUlubGlu
ZVRleHRCb3guaCIKICNpbmNsdWRlICJNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5oIgog
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKQEAgLTEwMTYsNyArMTAxNiw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQmIHRleHROb2Rl
LCB1bnNpZ25lZCBzdGFyCiAgICAgICAgIGlmICghdGV4dFJlbmRlcmVyKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGF1dG8gcnVuID0gTGF5b3V0SW50ZWdyYXRpb246OmZpcnN0VGV4
dFJ1bkluVGV4dE9yZGVyRm9yKCp0ZXh0UmVuZGVyZXIpOworICAgICAgICBhdXRvIHJ1biA9IElu
bGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5JblRleHRPcmRlckZvcigqdGV4dFJlbmRlcmVyKTsK
ICAgICAgICAgaWYgKCFydW4pIHsKICAgICAgICAgICAgIHdob2xlVGV4dE5vZGVJc0VtcHR5ID0g
dHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwMjcsNyArMTAyNyw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQmIHRleHROb2Rl
LCB1bnNpZ25lZCBzdGFyCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdW5zaWduZWQg
cmVtb3ZlZCA9IDA7Ci0gICAgICAgIExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3Ig
cHJldmlvdXNSdW47CisgICAgICAgIElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IgcHJl
dmlvdXNSdW47CiAKICAgICAgICAgLy8gVGhpcyBsb29wIHN0cnVjdHVyZSB3b3JrcyB0byBwcm9j
ZXNzIGFsbCBnYXBzIHByZWNlZGluZyBhIGJveCwKICAgICAgICAgLy8gYW5kIGFsc28gd2lsbCBs
b29rIGF0IHRoZSBnYXAgYWZ0ZXIgdGhlIGxhc3QgYm94LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbmxpbmVSdW5BbmRPZmZzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5saW5lUnVuQW5kT2Zmc2V0LmgKaW5kZXggZDM0ZTQ5MjdjYTRlZGEwMmZkMWRiYzBjMjE5
NmM2ZmYwOTg2NWM1OC4uOTVmYTYzNDAwNDM2NGNmZGRkM2Q1YjU3ZmI1MjhjY2ZmNGFmNjJhYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmxpbmVSdW5BbmRPZmZzZXQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lubGluZVJ1bkFuZE9mZnNldC5oCkBAIC0yNSwx
MiArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlv
blJ1bkl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgSW5saW5lUnVuQW5kT2Zmc2V0IHsKLSAgICBMYXlvdXRJ
bnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3IgcnVuIHsgfTsKKyAgICBJbmxpbmVJdGVyYXRvcjo6Qm94
SXRlcmF0b3IgcnVuIHsgfTsKICAgICB1bnNpZ25lZCBvZmZzZXQgeyAwIH07CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcAppbmRleCA0NTUwNTdhZjk3
MWQyZjQ5ZjQwOGYwMzE1MzFmNzNkNTg3NjlmZTg2Li5kNWNkMGUyZDc1NmNjZTNjMDBlYzM5MDIy
YTQ4NDExMjJkYTZjMWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRl
cmVkUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3Np
dGlvbi5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgUmVuZGVyZWRQb3NpdGlvbjo6UmVuZGVyZWRQb3Np
dGlvbigpCiB7CiB9CiAKLVJlbmRlcmVkUG9zaXRpb246OlJlbmRlcmVkUG9zaXRpb24oY29uc3Qg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIHJ1
biwgdW5zaWduZWQgb2Zmc2V0KQorUmVuZGVyZWRQb3NpdGlvbjo6UmVuZGVyZWRQb3NpdGlvbihj
b25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3Ig
cnVuLCB1bnNpZ25lZCBvZmZzZXQpCiAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQogICAgICwg
bV9ydW4ocnVuKQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQpAQCAtOTUsMTQgKzk1LDE0IEBAIFJl
bmRlcmVkUG9zaXRpb246OlJlbmRlcmVkUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9u
LCBBZmZpbml0eSBhZmZpbml0eSkKICAgICAgICAgbV9yZW5kZXJlciA9IHJlbmRlcmVyRnJvbVBv
c2l0aW9uKHBvc2l0aW9uKTsKIH0KIAotTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIFJl
bmRlcmVkUG9zaXRpb246OnByZXZpb3VzTGVhZk9uTGluZSgpIGNvbnN0CitJbmxpbmVJdGVyYXRv
cjo6Qm94SXRlcmF0b3IgUmVuZGVyZWRQb3NpdGlvbjo6cHJldmlvdXNMZWFmT25MaW5lKCkgY29u
c3QKIHsKICAgICBpZiAoIW1fcHJldmlvdXNMZWFmT25MaW5lKQogICAgICAgICBtX3ByZXZpb3Vz
TGVhZk9uTGluZSA9IG1fcnVuLT5wcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CiAg
ICAgcmV0dXJuICptX3ByZXZpb3VzTGVhZk9uTGluZTsKIH0KIAotTGF5b3V0SW50ZWdyYXRpb246
OlJ1bkl0ZXJhdG9yIFJlbmRlcmVkUG9zaXRpb246Om5leHRMZWFmT25MaW5lKCkgY29uc3QKK0lu
bGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBSZW5kZXJlZFBvc2l0aW9uOjpuZXh0TGVhZk9uTGlu
ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX25leHRMZWFmT25MaW5lKQogICAgICAgICBtX25leHRM
ZWFmT25MaW5lID0gbV9ydW4tPm5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaAppbmRleCBiZWVhYzQ5MmY2MzI1OTJm
NTViNmQxZGFkN2QwZTE5YzQxZjdkMzUxLi45MDZlZjA3Y2MxYjAyOWIyNzIyNWI3ZTY4YmY4ZjNi
Yzg5MDkxMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9z
aXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaApA
QCAtMzEsOCArMzEsOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDYXJldFJlY3RDb21w
dXRhdGlvbi5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgiCi0j
aW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgorI2luY2x1ZGUgIklubGlu
ZUl0ZXJhdG9yQm94LmgiCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JMaW5lLmgiCiAjaW5jbHVk
ZSAiVGV4dEFmZmluaXR5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDcgKzUwLDcg
QEAgcHVibGljOgogICAgIGJvb2wgaXNFcXVpdmFsZW50KGNvbnN0IFJlbmRlcmVkUG9zaXRpb24m
KSBjb25zdDsKIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcmVuZGVyZXI7
IH0KLSAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJhdG9yIGxpbmUoKSBjb25zdCB7IHJl
dHVybiBtX3J1biA/IG1fcnVuLT5saW5lKCkgOiBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJh
dG9yKCk7IH0KKyAgICBJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yIGxpbmUoKSBjb25zdCB7
IHJldHVybiBtX3J1biA/IG1fcnVuLT5saW5lKCkgOiBJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJh
dG9yKCk7IH0KIAogICAgIHVuc2lnbmVkIGNoYXIgYmlkaUxldmVsT25MZWZ0KCkgY29uc3Q7CiAg
ICAgdW5zaWduZWQgY2hhciBiaWRpTGV2ZWxPblJpZ2h0KCkgY29uc3Q7CkBAIC03MiwyMSArNzIs
MjEgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5k
ZXJlZFBvc2l0aW9uJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBleHBsaWNpdCBSZW5k
ZXJlZFBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCosIExheW91dEludGVncmF0aW9uOjpSdW5J
dGVyYXRvciwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICBleHBsaWNpdCBSZW5kZXJlZFBvc2l0aW9u
KGNvbnN0IFJlbmRlck9iamVjdCosIElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciwgdW5zaWdu
ZWQgb2Zmc2V0KTsKIAotICAgIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBwcmV2aW91
c0xlYWZPbkxpbmUoKSBjb25zdDsKLSAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3Ig
bmV4dExlYWZPbkxpbmUoKSBjb25zdDsKKyAgICBJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3Ig
cHJldmlvdXNMZWFmT25MaW5lKCkgY29uc3Q7CisgICAgSW5saW5lSXRlcmF0b3I6OkJveEl0ZXJh
dG9yIG5leHRMZWFmT25MaW5lKCkgY29uc3Q7CiAgICAgYm9vbCBhdExlZnRtb3N0T2Zmc2V0SW5C
b3goKSBjb25zdCB7IHJldHVybiBtX3J1biAmJiBtX29mZnNldCA9PSBtX3J1bi0+bGVmdG1vc3RD
YXJldE9mZnNldCgpOyB9CiAgICAgYm9vbCBhdFJpZ2h0bW9zdE9mZnNldEluQm94KCkgY29uc3Qg
eyByZXR1cm4gbV9ydW4gJiYgbV9vZmZzZXQgPT0gbV9ydW4tPnJpZ2h0bW9zdENhcmV0T2Zmc2V0
KCk7IH0KICAgICBib29sIGF0TGVmdEJvdW5kYXJ5T2ZCaWRpUnVuKFNob3VsZE1hdGNoQmlkaUxl
dmVsLCB1bnNpZ25lZCBjaGFyIGJpZGlMZXZlbE9mUnVuKSBjb25zdDsKICAgICBib29sIGF0Umln
aHRCb3VuZGFyeU9mQmlkaVJ1bihTaG91bGRNYXRjaEJpZGlMZXZlbCwgdW5zaWduZWQgY2hhciBi
aWRpTGV2ZWxPZlJ1bikgY29uc3Q7CiAKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIG1fcmVuZGVy
ZXIgeyBudWxscHRyIH07Ci0gICAgTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIG1fcnVu
OworICAgIElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBtX3J1bjsKICAgICB1bnNpZ25lZCBt
X29mZnNldCB7IDAgfTsKIAotICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxMYXlvdXRJbnRlZ3Jh
dGlvbjo6UnVuSXRlcmF0b3I+IG1fcHJldmlvdXNMZWFmT25MaW5lOwotICAgIG11dGFibGUgc3Rk
OjpvcHRpb25hbDxMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3I+IG1fbmV4dExlYWZPbkxp
bmU7CisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRv
cj4gbV9wcmV2aW91c0xlYWZPbkxpbmU7CisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPElubGlu
ZUl0ZXJhdG9yOjpCb3hJdGVyYXRvcj4gbV9uZXh0TGVhZk9uTGluZTsKIH07CiAKIGJvb2wgcmVu
ZGVyT2JqZWN0Q29udGFpbnNQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBQb3Np
dGlvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDQyMmMx
ZjllMjYzMmFmMjhhNjhmNjU2MDU3YWNkYWUwMmEyMzExMGYuLmRmZDZjYjViMTVlNTFkZmViZDkw
NzQ0YjM2MjhiOTBjYmJlNjQ1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAKQEAgLTU4MCw3ICs1ODAsNyBAQCBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxlVGV4dE5v
ZGUoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBtX3RleHRSdW4gPSBMYXlv
dXRJbnRlZ3JhdGlvbjo6Zmlyc3RUZXh0UnVuSW5UZXh0T3JkZXJGb3IocmVuZGVyZXIpOworICAg
IG1fdGV4dFJ1biA9IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5JblRleHRPcmRlckZvcihy
ZW5kZXJlcik7CiAKICAgICBib29sIHNob3VsZEhhbmRsZUZpcnN0TGV0dGVyID0gIW1faGFuZGxl
ZEZpcnN0TGV0dGVyICYmIGlzPFJlbmRlclRleHRGcmFnbWVudD4ocmVuZGVyZXIpICYmICFtX29m
ZnNldDsKICAgICBpZiAoc2hvdWxkSGFuZGxlRmlyc3RMZXR0ZXIpCkBAIC02MDcsNyArNjA3LDcg
QEAgdm9pZCBUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRSdW4oKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYXV0byBmaXJzdFRleHRSdW4gPSBMYXlvdXRJbnRlZ3JhdGlvbjo6Zmlyc3RU
ZXh0UnVuSW5UZXh0T3JkZXJGb3IocmVuZGVyZXIpOworICAgIGF1dG8gZmlyc3RUZXh0UnVuID0g
SW5saW5lSXRlcmF0b3I6OmZpcnN0VGV4dFJ1bkluVGV4dE9yZGVyRm9yKHJlbmRlcmVyKTsKIAog
ICAgIFN0cmluZyByZW5kZXJlclRleHQgPSByZW5kZXJlci50ZXh0KCk7CiAgICAgdW5zaWduZWQg
c3RhcnQgPSBtX29mZnNldDsKQEAgLTcwMSw3ICs3MDEsNyBAQCB2b2lkIFRleHRJdGVyYXRvcjo6
aGFuZGxlVGV4dE5vZGVGaXJzdExldHRlcihSZW5kZXJUZXh0RnJhZ21lbnQmIHJlbmRlcmVyKQog
ICAgICAgICBpZiAoYXV0byogZmlyc3RMZXR0ZXJUZXh0ID0gZmlyc3RSZW5kZXJUZXh0SW5GaXJz
dExldHRlcihmaXJzdExldHRlcikpIHsKICAgICAgICAgICAgIG1faGFuZGxlZEZpcnN0TGV0dGVy
ID0gdHJ1ZTsKICAgICAgICAgICAgIG1fcmVtYWluaW5nVGV4dFJ1biA9IG1fdGV4dFJ1bjsKLSAg
ICAgICAgICAgIG1fdGV4dFJ1biA9IExheW91dEludGVncmF0aW9uOjpmaXJzdFRleHRSdW5JblRl
eHRPcmRlckZvcigqZmlyc3RMZXR0ZXJUZXh0KTsKKyAgICAgICAgICAgIG1fdGV4dFJ1biA9IElu
bGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5JblRleHRPcmRlckZvcigqZmlyc3RMZXR0ZXJUZXh0
KTsKICAgICAgICAgICAgIG1fZmlyc3RMZXR0ZXJUZXh0ID0gZmlyc3RMZXR0ZXJUZXh0OwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRl
cmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggYzcx
NjIyNWNmMGQyMDhhZWJlOGRhOTYwNDUzZDcxZTEyZDg4N2UxNy4uM2ZjMjdhMDk3ZDM5YWM4N2Fi
NTM5NWIxMmJhYjM0NmMxZDc3YzFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJDaGFyYWN0ZXJSYW5nZS5oIgogI2lu
Y2x1ZGUgIkZpbmRPcHRpb25zLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvci5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94LmgiCiAjaW5jbHVkZSAiU2ltcGxl
UmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3JCZWhhdmlvci5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KQEAgLTE0OSwxMCArMTQ5LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyBVc2Vk
IHdoZW4gdGhlcmUgaXMgc3RpbGwgc29tZSBwZW5kaW5nIHRleHQgZnJvbSB0aGUgY3VycmVudCBu
b2RlOyB3aGVuIHRoZXNlIGFyZSBmYWxzZSBhbmQgbnVsbCwgd2UgZ28gYmFjayB0byBub3JtYWwg
aXRlcmF0aW5nLgogICAgIE5vZGUqIG1fbm9kZUZvckFkZGl0aW9uYWxOZXdsaW5lIHsgbnVsbHB0
ciB9OwotICAgIExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3IgbV90ZXh0UnVuOwor
ICAgIElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IgbV90ZXh0UnVuOwogCiAgICAgLy8g
VXNlZCB3aGVuIGl0ZXJhdGluZyBvdmVyIDpmaXJzdC1sZXR0ZXIgdGV4dCB0byBzYXZlIHBvaW50
ZXIgdG8gcmVtYWluaW5nIHRleHQgYm94LgotICAgIExheW91dEludGVncmF0aW9uOjpUZXh0UnVu
SXRlcmF0b3IgbV9yZW1haW5pbmdUZXh0UnVuOworICAgIElubGluZUl0ZXJhdG9yOjpUZXh0Qm94
SXRlcmF0b3IgbV9yZW1haW5pbmdUZXh0UnVuOwogCiAgICAgLy8gVXNlZCB0byBwb2ludCB0byBS
ZW5kZXJUZXh0IG9iamVjdCBmb3IgOmZpcnN0LWxldHRlci4KICAgICBSZW5kZXJUZXh0KiBtX2Zp
cnN0TGV0dGVyVGV4dCB7IG51bGxwdHIgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVBvc2l0aW9uLmNwcAppbmRleCBlN2E1YWJmYjViNzM1OTY2NmI0YzYzMzcxMTM1Yzk0ZmQyOWZj
OWEyLi4yNGRhNTViM2I0MTYxZTkzZWVmZTUyMjZlMzdlNjg5MTAyODVmYjA5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCkBAIC0zNSw5ICszNSw5IEBACiAj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJveC5oIgorI2lu
Y2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZS5oIgogI2luY2x1ZGUgIklubGluZVJ1bkFuZE9mZnNl
dC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IGI3NGQ3M2JmNTc0M2RhYTVjNDQz
NTZjZGJjMzM3YjJkYTEyNGQzOGIuLjdlOTNmMDdhOWM1Y2UyYTUxNjkzYWE3NDI2MzcwNWU1ZDgx
OGE3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTMxLDkg
KzMxLDkgQEAKICNpbmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJv
eC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZS5oIgogI2luY2x1ZGUgIklubGluZVJ1
bkFuZE9mZnNldC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2luY2x1ZGUgIk5v
ZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2Nr
Rmxvdy5oIgpAQCAtMTI0LDEyICsxMjQsMTIgQEAgc3RhdGljIFBvc2l0aW9uIG5leHRMaW5lQ2Fu
ZGlkYXRlUG9zaXRpb24oTm9kZSogbm9kZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXMKICAg
ICByZXR1cm4gUG9zaXRpb24oKTsKIH0KIAotc3RhdGljIGJvb2wgaXNUZXh0T3JMaW5lQnJlYWtS
dW4oTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIHJ1bikKK3N0YXRpYyBib29sIGlzVGV4
dE9yTGluZUJyZWFrUnVuKElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBydW4pCiB7CiAgICAg
cmV0dXJuIHJ1biAmJiAocnVuLT5pc1RleHQoKSB8fCBydW4tPnJlbmRlcmVyKCkuaXNCUigpKTsK
IH0KIAotc3RhdGljIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBwcmV2aW91c1RleHRP
ckxpbmVCcmVha1J1bihMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3IgcnVuKQorc3RhdGlj
IElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBwcmV2aW91c1RleHRPckxpbmVCcmVha1J1bihJ
bmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3IgcnVuKQogewogICAgIHdoaWxlIChydW4pIHsKICAg
ICAgICAgcnVuLnRyYXZlcnNlUHJldmlvdXNPbkxpbmVJbkxvZ2ljYWxPcmRlcigpOwpAQCAtMTM5
LDcgKzEzOSw3IEBAIHN0YXRpYyBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3IgcHJldmlv
dXNUZXh0T3JMaW5lQnJlYWtSdW4oTGF5b3V0SW50ZWdyYXRpCiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotc3RhdGljIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBuZXh0VGV4dE9yTGluZUJy
ZWFrUnVuKExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBydW4pCitzdGF0aWMgSW5saW5l
SXRlcmF0b3I6OkJveEl0ZXJhdG9yIG5leHRUZXh0T3JMaW5lQnJlYWtSdW4oSW5saW5lSXRlcmF0
b3I6OkJveEl0ZXJhdG9yIHJ1bikKIHsKICAgICB3aGlsZSAocnVuKSB7CiAgICAgICAgIHJ1bi50
cmF2ZXJzZU5leHRPbkxpbmVJbkxvZ2ljYWxPcmRlcigpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHN0
YXRpYyBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3IgbmV4dFRleHRPckxpbmVCcmVha1J1
bihMYXlvdXRJbnRlZ3JhdGlvbjo6CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIExheW91
dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBzdGFydFRleHRPckxpbmVCcmVha1J1bihMYXlvdXRJ
bnRlZ3JhdGlvbjo6TGluZUl0ZXJhdG9yIGxpbmUpCitzdGF0aWMgSW5saW5lSXRlcmF0b3I6OkJv
eEl0ZXJhdG9yIHN0YXJ0VGV4dE9yTGluZUJyZWFrUnVuKElubGluZUl0ZXJhdG9yOjpMaW5lSXRl
cmF0b3IgbGluZSkKIHsKICAgICBhdXRvIHJ1biA9IGxpbmUtPmxvZ2ljYWxTdGFydFJ1bigpOwog
ICAgIGlmIChpc1RleHRPckxpbmVCcmVha1J1bihydW4pKQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0
YXRpYyBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3Igc3RhcnRUZXh0T3JMaW5lQnJlYWtS
dW4oTGF5b3V0SW50ZWdyYXRpb246CiAgICAgcmV0dXJuIG5leHRUZXh0T3JMaW5lQnJlYWtSdW4o
cnVuKTsKIH0KIAotc3RhdGljIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBlbmRUZXh0
T3JMaW5lQnJlYWtSdW4oTGF5b3V0SW50ZWdyYXRpb246OkxpbmVJdGVyYXRvciBsaW5lKQorc3Rh
dGljIElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBlbmRUZXh0T3JMaW5lQnJlYWtSdW4oSW5s
aW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvciBsaW5lKQogewogICAgIGF1dG8gcnVuID0gbGluZS0+
bG9naWNhbEVuZFJ1bigpOwogICAgIGlmIChpc1RleHRPckxpbmVCcmVha1J1bihydW4pKQpAQCAt
MTY1LDcgKzE2NSw3IEBAIHN0YXRpYyBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3IgZW5k
VGV4dE9yTGluZUJyZWFrUnVuKExheW91dEludGVncmF0aW9uOjpMCiAgICAgcmV0dXJuIHByZXZp
b3VzVGV4dE9yTGluZUJyZWFrUnVuKHJ1bik7CiB9CiAKLXN0YXRpYyBjb25zdCBMYXlvdXRJbnRl
Z3JhdGlvbjo6UnVuSXRlcmF0b3IgbG9naWNhbGx5UHJldmlvdXNSdW4oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBz
dGFydFJ1biwgYm9vbCYgcHJldmlvdXNCb3hJbkRpZmZlcmVudExpbmUpCitzdGF0aWMgY29uc3Qg
SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yIGxvZ2ljYWxseVByZXZpb3VzUnVuKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0
b3Igc3RhcnRSdW4sIGJvb2wmIHByZXZpb3VzQm94SW5EaWZmZXJlbnRMaW5lKQogewogICAgIGlm
IChhdXRvIHByZXZpb3VzUnVuID0gcHJldmlvdXNUZXh0T3JMaW5lQnJlYWtSdW4oc3RhcnRSdW4p
KQogICAgICAgICByZXR1cm4gcHJldmlvdXNSdW47CkBAIC0yMDMsNyArMjAzLDcgQEAgc3RhdGlj
IGNvbnN0IExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBsb2dpY2FsbHlQcmV2aW91c1J1
bihjb25zdCBWaXNpYmxlUG8KIH0KIAogCi1zdGF0aWMgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246
OlJ1bkl0ZXJhdG9yIGxvZ2ljYWxseU5leHRSdW4oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNp
YmxlUG9zaXRpb24sIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBzdGFydFJ1biwgYm9v
bCYgbmV4dEJveEluRGlmZmVyZW50TGluZSkKK3N0YXRpYyBjb25zdCBJbmxpbmVJdGVyYXRvcjo6
Qm94SXRlcmF0b3IgbG9naWNhbGx5TmV4dFJ1bihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2li
bGVQb3NpdGlvbiwgSW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yIHN0YXJ0UnVuLCBib29sJiBu
ZXh0Qm94SW5EaWZmZXJlbnRMaW5lKQogewogICAgIGlmIChhdXRvIG5leHRSdW4gPSBuZXh0VGV4
dE9yTGluZUJyZWFrUnVuKHN0YXJ0UnVuKSkKICAgICAgICAgcmV0dXJuIG5leHRSdW47CkBAIC0y
NDAsNyArMjQwLDcgQEAgc3RhdGljIGNvbnN0IExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRv
ciBsb2dpY2FsbHlOZXh0UnVuKGNvbnN0IFZpc2libGVQb3NpdGkKICAgICByZXR1cm4geyB9Owog
fQogCi1zdGF0aWMgVUJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWluT2Zmc2V0
Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIExheW91dElu
dGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3IgdGV4dFJ1biwKK3N0YXRpYyBVQnJlYWtJdGVyYXRv
ciogd29yZEJyZWFrSXRlcmF0b3JGb3JNaW5PZmZzZXRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHZpc2libGVQb3NpdGlvbiwgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciB0
ZXh0UnVuLAogICAgIHVuc2lnbmVkJiBwcmV2aW91c1J1bkxlbmd0aCwgYm9vbCYgcHJldmlvdXNS
dW5JbkRpZmZlcmVudExpbmUsIFZlY3RvcjxVQ2hhciwgMTAyND4mIHN0cmluZykKIHsKICAgICBw
cmV2aW91c1J1bkluRGlmZmVyZW50TGluZSA9IGZhbHNlOwpAQCAtMjU1LDcgKzI1NSw3IEBAIHN0
YXRpYyBVQnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3JGb3JNaW5PZmZzZXRCb3VuZGFy
eShjb25zdCBWaXNpYmxlUG9zaXRpCiAgICAgc3RyaW5nLmNsZWFyKCk7CiAKICAgICBpZiAocHJl
dmlvdXNSdW4pIHsKLSAgICAgICAgYXV0byYgcHJldmlvdXNUZXh0UnVuID0gZG93bmNhc3Q8TGF5
b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvcj4ocHJldmlvdXNSdW4pOworICAgICAgICBh
dXRvJiBwcmV2aW91c1RleHRSdW4gPSBkb3duY2FzdDxJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0
ZXJhdG9yPihwcmV2aW91c1J1bik7CiAgICAgICAgIHByZXZpb3VzUnVuTGVuZ3RoID0gcHJldmlv
dXNUZXh0UnVuLT5sZW5ndGgoKTsKICAgICAgICAgYXBwZW5kKHN0cmluZywgcHJldmlvdXNUZXh0
UnVuLT50ZXh0KCkpOwogICAgIH0KQEAgLTI2NCw3ICsyNjQsNyBAQCBzdGF0aWMgVUJyZWFrSXRl
cmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWluT2Zmc2V0Qm91bmRhcnkoY29uc3QgVmlzaWJs
ZVBvc2l0aQogICAgIHJldHVybiB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KHN0cmluZy5k
YXRhKCksIHN0cmluZy5zaXplKCkpKTsKIH0KIAotc3RhdGljIFVCcmVha0l0ZXJhdG9yKiB3b3Jk
QnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
dmlzaWJsZVBvc2l0aW9uLCBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yIHRleHRS
dW4sCitzdGF0aWMgVUJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0
Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIElubGluZUl0
ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IgdGV4dFJ1biwKICAgICBib29sJiBuZXh0UnVuSW5EaWZm
ZXJlbnRMaW5lLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiBzdHJpbmcpCiB7CiAgICAgbmV4dFJ1bklu
RGlmZmVyZW50TGluZSA9IGZhbHNlOwpAQCAtMjgwLDcgKzI4MCw3IEBAIHN0YXRpYyBVQnJlYWtJ
dGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3JGb3JNYXhPZmZzZXRCb3VuZGFyeShjb25zdCBWaXNp
YmxlUG9zaXRpCiAgICAgYXBwZW5kKHN0cmluZywgdGV4dFJ1bi0+dGV4dCgpKTsKIAogICAgIGlm
IChuZXh0UnVuKSB7Ci0gICAgICAgIGF1dG8mIG5leHRUZXh0UnVuID0gZG93bmNhc3Q8TGF5b3V0
SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvcj4obmV4dFJ1bik7CisgICAgICAgIGF1dG8mIG5l
eHRUZXh0UnVuID0gZG93bmNhc3Q8SW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcj4obmV4
dFJ1bik7CiAgICAgICAgIGFwcGVuZChzdHJpbmcsIG5leHRUZXh0UnVuLT50ZXh0KCkpOwogICAg
IH0KIApAQCAtMzE1LDcgKzMxNSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzdWFsV29y
ZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uCiAgICAgdmlz
aWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0
aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKSk7Ci0gICAgTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIHByZXZpb3VzbHlW
aXNpdGVkUnVuOworICAgIElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBwcmV2aW91c2x5Vmlz
aXRlZFJ1bjsKICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudCA9IHZpc2libGVQb3NpdGlvbjsK
ICAgICBzdGQ6Om9wdGlvbmFsPFZpc2libGVQb3NpdGlvbj4gcHJldmlvdXNQb3NpdGlvbjsKICAg
ICBVQnJlYWtJdGVyYXRvciogaXRlciA9IG51bGxwdHI7CkBAIC0zNDAsNyArMzQwLDcgQEAgc3Rh
dGljIFZpc2libGVQb3NpdGlvbiB2aXN1YWxXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAK
LSAgICAgICAgYXV0byYgdGV4dFJ1biA9IGRvd25jYXN0PExheW91dEludGVncmF0aW9uOjpUZXh0
UnVuSXRlcmF0b3I+KHJ1bik7CisgICAgICAgIGF1dG8mIHRleHRSdW4gPSBkb3duY2FzdDxJbmxp
bmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yPihydW4pOwogICAgICAgICB1bnNpZ25lZCBwcmV2
aW91c1J1bkxlbmd0aCA9IDA7CiAgICAgICAgIGJvb2wgcHJldmlvdXNSdW5JbkRpZmZlcmVudExp
bmUgPSBmYWxzZTsKICAgICAgICAgYm9vbCBuZXh0UnVuSW5EaWZmZXJlbnRMaW5lID0gZmFsc2U7
CkBAIC03NjQsNyArNzY0LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9u
Rm9yTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIExpbmVFbmRwb2kKICAgICAgICAgICAg
IHN0YXJ0UnVuLnRyYXZlcnNlTmV4dE9uTGluZSgpOwogICAgIH0KIAotICAgIHJldHVybiBpczxU
ZXh0Pigqc3RhcnROb2RlKSA/IFBvc2l0aW9uKGRvd25jYXN0PFRleHQ+KHN0YXJ0Tm9kZSksIGRv
d25jYXN0PExheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1bj4oKnN0YXJ0UnVuKS5zdGFydCgp
KQorICAgIHJldHVybiBpczxUZXh0Pigqc3RhcnROb2RlKSA/IFBvc2l0aW9uKGRvd25jYXN0PFRl
eHQ+KHN0YXJ0Tm9kZSksIGRvd25jYXN0PElubGluZUl0ZXJhdG9yOjpUZXh0Qm94Pigqc3RhcnRS
dW4pLnN0YXJ0KCkpCiAgICAgICAgIDogcG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0Tm9kZSk7CiB9
CiAKQEAgLTgzNyw4ICs4MzcsOCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9u
Rm9yTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIExpbmVFbmRwb2ludAogICAgIFBvc2l0
aW9uIHBvczsKICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4oKmVuZE5vZGUpKQogICAgICAgICBw
b3MgPSBwb3NpdGlvbkJlZm9yZU5vZGUoZW5kTm9kZSk7Ci0gICAgZWxzZSBpZiAoaXM8TGF5b3V0
SW50ZWdyYXRpb246OlBhdGhUZXh0UnVuPigqZW5kUnVuKSAmJiBpczxUZXh0PigqZW5kTm9kZSkp
IHsKLSAgICAgICAgYXV0byYgZW5kVGV4dFJ1biA9IGRvd25jYXN0PExheW91dEludGVncmF0aW9u
OjpQYXRoVGV4dFJ1bj4oKmVuZFJ1bik7CisgICAgZWxzZSBpZiAoaXM8SW5saW5lSXRlcmF0b3I6
OlRleHRCb3g+KCplbmRSdW4pICYmIGlzPFRleHQ+KCplbmROb2RlKSkgeworICAgICAgICBhdXRv
JiBlbmRUZXh0UnVuID0gZG93bmNhc3Q8SW5saW5lSXRlcmF0b3I6OlRleHRCb3g+KCplbmRSdW4p
OwogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kVGV4dFJ1bi5zdGFydCgpOwogICAgICAgICBp
ZiAoIWVuZFRleHRSdW4uaXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAgIGVuZE9mZnNldCArPSBl
bmRUZXh0UnVuLmxlbmd0aCgpOwpAQCAtOTI5LDcgKzkyOSw3IEBAIGJvb2wgaXNMb2dpY2FsRW5k
T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcCkKICAgICByZXR1cm4gcC5pc05vdE51bGwo
KSAmJiBwID09IGxvZ2ljYWxFbmRPZkxpbmUocCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSW50UG9p
bnQgYWJzb2x1dGVMaW5lRGlyZWN0aW9uUG9pbnRUb0xvY2FsUG9pbnRJbkJsb2NrKExheW91dElu
dGVncmF0aW9uOjpMaW5lSXRlcmF0b3ImIGxpbmUsIGludCBsaW5lRGlyZWN0aW9uUG9pbnQpCitz
dGF0aWMgaW5saW5lIEludFBvaW50IGFic29sdXRlTGluZURpcmVjdGlvblBvaW50VG9Mb2NhbFBv
aW50SW5CbG9jayhJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yJiBsaW5lLCBpbnQgbGluZURp
cmVjdGlvblBvaW50KQogewogICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9IGxpbmUtPmNvbnRh
aW5pbmdCbG9jaygpOwogICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVCbG9ja1BvaW50ID0gY29udGFp
bmluZ0Jsb2NrLmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpIC0gdG9GbG9hdFNpemUoY29u
dGFpbmluZ0Jsb2NrLnNjcm9sbFBvc2l0aW9uKCkpOwpAQCAtOTYxLDcgKzk2MSw3IEBAIFZpc2li
bGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZp
c2libGVQb3NpdGlvbiwgaW50CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbigpOwogCi0gICAgTGF5b3V0SW50ZWdyYXRpb246OkxpbmVJdGVyYXRvciBs
aW5lOworICAgIElubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3IgbGluZTsKICAgICBpZiAoYXV0
byBydW4gPSB2aXNpYmxlUG9zaXRpb24uaW5saW5lUnVuQW5kT2Zmc2V0KCkucnVuKSB7CiAgICAg
ICAgIGxpbmUgPSBydW4tPmxpbmUoKS0+cHJldmlvdXMoKTsKICAgICAgICAgLy8gV2Ugd2FudCB0
byBza2lwIHplcm8gaGVpZ2h0IGJveGVzLgpAQCAtMTAxMSw3ICsxMDExLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9z
aXRpb24sIGludCBsaW4KICAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAgIExheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0
b3IgbGluZTsKKyAgICBJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yIGxpbmU7CiAgICAgaWYg
KGF1dG8gcnVuID0gdmlzaWJsZVBvc2l0aW9uLmlubGluZVJ1bkFuZE9mZnNldCgpLnJ1bikgewog
ICAgICAgICBsaW5lID0gcnVuLT5saW5lKCktPm5leHQoKTsKICAgICAgICAgLy8gV2Ugd2FudCB0
byBza2lwIHplcm8gaGVpZ2h0IGJveGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCA0ZDQ5OTcyNGEzODlkOWU0YmI0NGFh
YmUxNDczMjVlNTk3Mzg1ZmUyLi45OWE0YmIyZWY3YTYxNDY3NGFjZjRmNzlmYTdjM2Q3Y2ZhZjk5
NjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcApAQCAtNDAsOSArNDAsOSBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgi
CisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRv
ckxpbmUuaCIKICNpbmNsdWRlICJMYXlvdXREaXNhbGxvd2VkU2NvcGUuaCIKLSNpbmNsdWRlICJM
YXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0
aW9uUnVuSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTcwMSw3ICs3MDEsNyBAQCBTdHJpbmcg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbHVlV2l0aEhhcmRMaW5lQnJlYWtzKCkgY29u
c3QKIAogICAgIE5vZGUqIHNvZnRMaW5lQnJlYWtOb2RlID0gbnVsbHB0cjsKICAgICB1bnNpZ25l
ZCBzb2Z0TGluZUJyZWFrT2Zmc2V0ID0gMDsKLSAgICBhdXRvIGN1cnJlbnRMaW5lID0gTGF5b3V0
SW50ZWdyYXRpb246OmZpcnN0TGluZUZvcigqcmVuZGVyZXIpOworICAgIGF1dG8gY3VycmVudExp
bmUgPSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RMaW5lRm9yKCpyZW5kZXJlcik7CiAgICAgaWYgKCFj
dXJyZW50TGluZSkKICAgICAgICAgcmV0dXJuIHZhbHVlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3guY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmVmOTVjMTJjMmQ3ZjMyYzUwYWU0MDA0MDJlODhmNGEyYzZmNzRjMTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0
b3JCb3guY3BwCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94LmgiCisKKworI2luY2x1ZGUgIklubGlu
ZUl0ZXJhdG9yTGluZS5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxheW91dC5o
IgorI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlckNvbWJpbmVU
ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCisjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgSW5saW5lSXRlcmF0b3Igewor
CitCb3hJdGVyYXRvcjo6Qm94SXRlcmF0b3IoQm94OjpQYXRoVmFyaWFudCYmIHBhdGhWYXJpYW50
KQorICAgIDogbV9ydW4oV1RGTW92ZShwYXRoVmFyaWFudCkpCit7Cit9CisKK0JveEl0ZXJhdG9y
OjpCb3hJdGVyYXRvcihjb25zdCBCb3gmIHJ1bikKKyAgICA6IG1fcnVuKHJ1bikKK3sKK30KKwor
Ym9vbCBCb3hJdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBCb3hJdGVyYXRvciYgb3RoZXIpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcnVuLm1fcGF0aFZhcmlhbnQgPT0gb3RoZXIubV9ydW4ubV9w
YXRoVmFyaWFudDsKK30KKworYm9vbCBCb3hJdGVyYXRvcjo6YXRFbmQoKSBjb25zdAoreworICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcnVuLm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKKyAgICAgICAgcmV0dXJuIHBhdGguYXRFbmQoKTsKKyAgICB9KTsKK30KKworQm94SXRlcmF0
b3IgQm94OjpuZXh0T25MaW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQm94SXRlcmF0b3IoKnRo
aXMpLnRyYXZlcnNlTmV4dE9uTGluZSgpOworfQorCitCb3hJdGVyYXRvciBCb3g6OnByZXZpb3Vz
T25MaW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQm94SXRlcmF0b3IoKnRoaXMpLnRyYXZlcnNl
UHJldmlvdXNPbkxpbmUoKTsKK30KKworQm94SXRlcmF0b3IgQm94OjpuZXh0T25MaW5lSWdub3Jp
bmdMaW5lQnJlYWsoKSBjb25zdAoreworICAgIHJldHVybiBCb3hJdGVyYXRvcigqdGhpcykudHJh
dmVyc2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKK30KKworQm94SXRlcmF0b3IgQm94
OjpwcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Qm94SXRlcmF0b3IoKnRoaXMpLnRyYXZlcnNlUHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVh
aygpOworfQorCitMaW5lSXRlcmF0b3IgQm94OjpsaW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBCb3hJdGVyYXRvckxlZ2FjeVBh
dGgmIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIExpbmVJdGVyYXRvcihMaW5lSXRlcmF0b3JMZWdh
Y3lQYXRoKCZwYXRoLnJvb3RJbmxpbmVCb3goKSkpOworICAgIH0KKyNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAgICAsIFtdKGNvbnN0IEJveEl0ZXJhdG9yTW9kZXJuUGF0
aCYgcGF0aCkgeworICAgICAgICByZXR1cm4gTGluZUl0ZXJhdG9yKExpbmVJdGVyYXRvck1vZGVy
blBhdGgoKnBhdGgubV9pbmxpbmVDb250ZW50LCBwYXRoLmJveCgpLmxpbmVJbmRleCgpKSk7Cisg
ICAgfQorI2VuZGlmCisgICAgKTsKK30KKworY29uc3QgUmVuZGVyU3R5bGUmIEJveDo6c3R5bGUo
KSBjb25zdAoreworICAgIHJldHVybiBsaW5lKCktPmlzRmlyc3QoKSA/IHJlbmRlcmVyKCkuZmly
c3RMaW5lU3R5bGUoKSA6IHJlbmRlcmVyKCkuc3R5bGUoKTsKK30KKworVGV4dEJveEl0ZXJhdG9y
IFRleHRCb3g6Om5leHRUZXh0UnVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGV4dEJveEl0ZXJh
dG9yKCp0aGlzKS50cmF2ZXJzZU5leHRUZXh0UnVuKCk7Cit9CisKK1RleHRCb3hJdGVyYXRvciBU
ZXh0Qm94OjpuZXh0VGV4dFJ1bkluVGV4dE9yZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGV4
dEJveEl0ZXJhdG9yKCp0aGlzKS50cmF2ZXJzZU5leHRUZXh0UnVuSW5UZXh0T3JkZXIoKTsKK30K
KworTGF5b3V0UmVjdCBUZXh0Qm94OjpzZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHJhbmdlU3RhcnQs
IHVuc2lnbmVkIHJhbmdlRW5kKSBjb25zdAoreworICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xh
bXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFuZ2UoKS5jbGFtcChyYW5nZVN0YXJ0LCByYW5nZUVuZCk7
CisKKyAgICBpZiAoY2xhbXBlZFN0YXJ0ID49IGNsYW1wZWRFbmQgJiYgIShyYW5nZVN0YXJ0ID09
IHJhbmdlRW5kICYmIHJhbmdlU3RhcnQgPj0gc3RhcnQoKSAmJiByYW5nZVN0YXJ0IDw9IGVuZCgp
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gc2VsZWN0aW9uVG9wID0gbGluZSgp
LT5zZWxlY3Rpb25Ub3AoKTsKKyAgICBhdXRvIHNlbGVjdGlvbkhlaWdodCA9IGxpbmUoKS0+c2Vs
ZWN0aW9uSGVpZ2h0KCk7CisKKyAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgeyBsb2dpY2Fs
TGVmdCgpLCBzZWxlY3Rpb25Ub3AsIGxvZ2ljYWxXaWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQgfTsK
KworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4oKTsKKyAgICBpZiAoY2xhbXBl
ZFN0YXJ0IHx8IGNsYW1wZWRFbmQgIT0gdGV4dFJ1bi5sZW5ndGgoKSkKKyAgICAgICAgZm9udENh
c2NhZGUoKS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0
LCBjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQpOworCisgICAgcmV0dXJuIHNuYXBwZWRTZWxlY3Rp
b25SZWN0KHNlbGVjdGlvblJlY3QsIGxvZ2ljYWxSaWdodCgpLCBzZWxlY3Rpb25Ub3AsIHNlbGVj
dGlvbkhlaWdodCwgaXNIb3Jpem9udGFsKCkpOworfQorCitib29sIFRleHRCb3g6OmlzQ29tYmlu
ZWRUZXh0KCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7
CisgICAgcmV0dXJuIGlzPFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcikgJiYgZG93bmNhc3Q8
UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKS5pc0NvbWJpbmVkKCk7Cit9CisKK2NvbnN0IEZv
bnRDYXNjYWRlJiBUZXh0Qm94Ojpmb250Q2FzY2FkZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzQ29t
YmluZWRUZXh0KCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4o
cmVuZGVyZXIoKSkudGV4dENvbWJpbmVGb250KCk7CisKKyAgICByZXR1cm4gc3R5bGUoKS5mb250
Q2FzY2FkZSgpOworfQorCitSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIEJveDo6c2VsZWN0
aW9uU3RhdGUoKSBjb25zdAoreworICAgIGlmIChpc1RleHQoKSkgeworICAgICAgICBhdXRvJiB0
ZXh0ID0gZG93bmNhc3Q8VGV4dEJveD4oKnRoaXMpOworICAgICAgICBhdXRvJiByZW5kZXJlciA9
IHRleHQucmVuZGVyZXIoKTsKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5zZWxlY3Rp
b24oKS5oaWdobGlnaHRTdGF0ZUZvclRleHRCb3gocmVuZGVyZXIsIHRleHQuc2VsZWN0YWJsZVJh
bmdlKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpOwor
fQorCitUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcihCb3g6OlBhdGhWYXJpYW50JiYg
cGF0aFZhcmlhbnQpCisgICAgOiBCb3hJdGVyYXRvcihXVEZNb3ZlKHBhdGhWYXJpYW50KSkKK3sK
K30KKworVGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IoY29uc3QgQm94JiBydW4pCisg
ICAgOiBCb3hJdGVyYXRvcihydW4pCit7Cit9CisKK1RleHRCb3hJdGVyYXRvciYgVGV4dEJveEl0
ZXJhdG9yOjp0cmF2ZXJzZU5leHRUZXh0UnVuKCkKK3sKKyAgICBXVEY6OnN3aXRjaE9uKG1fcnVu
Lm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcGF0aC50cmF2ZXJzZU5l
eHRUZXh0UnVuKCk7CisgICAgfSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitUZXh0Qm94SXRl
cmF0b3ImIFRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0VGV4dFJ1bkluVGV4dE9yZGVyKCkK
K3sKKyAgICBXVEY6OnN3aXRjaE9uKG1fcnVuLm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKKyAgICAgICAgcGF0aC50cmF2ZXJzZU5leHRUZXh0UnVuSW5UZXh0T3JkZXIoKTsKKyAgICB9
KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0JveEl0ZXJhdG9yJiBCb3hJdGVyYXRvcjo6dHJh
dmVyc2VOZXh0T25MaW5lKCkKK3sKKyAgICBXVEY6OnN3aXRjaE9uKG1fcnVuLm1fcGF0aFZhcmlh
bnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcGF0aC50cmF2ZXJzZU5leHRPbkxpbmUoKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0JveEl0ZXJhdG9yJiBCb3hJdGVyYXRv
cjo6dHJhdmVyc2VQcmV2aW91c09uTGluZSgpCit7CisgICAgV1RGOjpzd2l0Y2hPbihtX3J1bi5t
X3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHBhdGgudHJhdmVyc2VQcmV2
aW91c09uTGluZSgpOworICAgIH0pOworICAgIHJldHVybiAqdGhpczsKK30KKworQm94SXRlcmF0
b3ImIEJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpCit7
CisgICAgZG8geworICAgICAgICB0cmF2ZXJzZU5leHRPbkxpbmUoKTsKKyAgICB9IHdoaWxlICgh
YXRFbmQoKSAmJiBtX3J1bi5pc0xpbmVCcmVhaygpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisK
K0JveEl0ZXJhdG9yJiBCb3hJdGVyYXRvcjo6dHJhdmVyc2VQcmV2aW91c09uTGluZUlnbm9yaW5n
TGluZUJyZWFrKCkKK3sKKyAgICBkbyB7CisgICAgICAgIHRyYXZlcnNlUHJldmlvdXNPbkxpbmUo
KTsKKyAgICB9IHdoaWxlICghYXRFbmQoKSAmJiBtX3J1bi5pc0xpbmVCcmVhaygpKTsKKyAgICBy
ZXR1cm4gKnRoaXM7Cit9CisKK0JveEl0ZXJhdG9yJiBCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0
T25MaW5lSW5Mb2dpY2FsT3JkZXIoKQoreworICAgIFdURjo6c3dpdGNoT24obV9ydW4ubV9wYXRo
VmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICBwYXRoLnRyYXZlcnNlTmV4dE9uTGlu
ZUluTG9naWNhbE9yZGVyKCk7CisgICAgfSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitCb3hJ
dGVyYXRvciYgQm94SXRlcmF0b3I6OnRyYXZlcnNlUHJldmlvdXNPbkxpbmVJbkxvZ2ljYWxPcmRl
cigpCit7CisgICAgV1RGOjpzd2l0Y2hPbihtX3J1bi5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBw
YXRoKSB7CisgICAgICAgIHBhdGgudHJhdmVyc2VQcmV2aW91c09uTGluZUluTG9naWNhbE9yZGVy
KCk7CisgICAgfSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitUZXh0Qm94SXRlcmF0b3IgZmly
c3RUZXh0UnVuRm9yKGNvbnN0IFJlbmRlclRleHQmIHRleHQpCit7CisjaWYgRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCisgICAgaWYgKGF1dG8qIGxpbmVMYXlvdXQgPSBMYXlvdXRJ
bnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y29udGFpbmluZyh0ZXh0KSkKKyAgICAgICAgcmV0dXJu
IGxpbmVMYXlvdXQtPnRleHRSdW5zRm9yKHRleHQpOworI2VuZGlmCisKKyAgICByZXR1cm4geyBC
b3hJdGVyYXRvckxlZ2FjeVBhdGggeyB0ZXh0LmZpcnN0VGV4dEJveCgpIH0gfTsKK30KKworVGV4
dEJveEl0ZXJhdG9yIGZpcnN0VGV4dFJ1bkluVGV4dE9yZGVyRm9yKGNvbnN0IFJlbmRlclRleHQm
IHRleHQpCit7CisgICAgaWYgKHRleHQuZmlyc3RUZXh0Qm94KCkgJiYgdGV4dC5jb250YWluc1Jl
dmVyc2VkVGV4dCgpKSB7CisgICAgICAgIFZlY3Rvcjxjb25zdCBMZWdhY3lJbmxpbmVCb3gqPiBz
b3J0ZWRUZXh0Qm94ZXM7CisgICAgICAgIGZvciAoYXV0byogdGV4dEJveCA9IHRleHQuZmlyc3RU
ZXh0Qm94KCk7IHRleHRCb3g7IHRleHRCb3ggPSB0ZXh0Qm94LT5uZXh0VGV4dEJveCgpKQorICAg
ICAgICAgICAgc29ydGVkVGV4dEJveGVzLmFwcGVuZCh0ZXh0Qm94KTsKKyAgICAgICAgc3RkOjpz
b3J0KHNvcnRlZFRleHRCb3hlcy5iZWdpbigpLCBzb3J0ZWRUZXh0Qm94ZXMuZW5kKCksIFtdKGF1
dG8qIGEsIGF1dG8qIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBMZWdhY3lJbmxpbmVUZXh0Qm94
Ojpjb21wYXJlQnlTdGFydChkb3duY2FzdDxMZWdhY3lJbmxpbmVUZXh0Qm94PihhKSwgZG93bmNh
c3Q8TGVnYWN5SW5saW5lVGV4dEJveD4oYikpOworICAgICAgICB9KTsKKyAgICAgICAgYXV0byog
Zmlyc3QgPSBzb3J0ZWRUZXh0Qm94ZXNbMF07CisgICAgICAgIHJldHVybiB7IEJveEl0ZXJhdG9y
TGVnYWN5UGF0aCB7IGZpcnN0LCBXVEZNb3ZlKHNvcnRlZFRleHRCb3hlcyksIDAgfSB9OworICAg
IH0KKworICAgIHJldHVybiBmaXJzdFRleHRSdW5Gb3IodGV4dCk7Cit9CisKK1RleHRCb3hJdGVy
YXRvciB0ZXh0UnVuRm9yKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gqIGxlZ2FjeUlubGluZVRl
eHRCb3gpCit7CisgICAgcmV0dXJuIHsgQm94SXRlcmF0b3JMZWdhY3lQYXRoIHsgbGVnYWN5SW5s
aW5lVGV4dEJveCB9IH07Cit9CisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKK1RleHRCb3hJdGVyYXRvciB0ZXh0UnVuRm9yKGNvbnN0IExheW91dEludGVncmF0aW9uOjpJ
bmxpbmVDb250ZW50JiBjb250ZW50LCBjb25zdCBJbmxpbmVEaXNwbGF5OjpCb3gmIGJveCkKK3sK
KyAgICByZXR1cm4gdGV4dFJ1bkZvcihjb250ZW50LCBjb250ZW50LmluZGV4Rm9yQm94KGJveCkp
OworfQorCitUZXh0Qm94SXRlcmF0b3IgdGV4dFJ1bkZvcihjb25zdCBMYXlvdXRJbnRlZ3JhdGlv
bjo6SW5saW5lQ29udGVudCYgY29udGVudCwgc2l6ZV90IGJveEluZGV4KQoreworICAgIEFTU0VS
VChjb250ZW50LmJveGVzW2JveEluZGV4XS50ZXh0KCkpOworICAgIHJldHVybiB7IEJveEl0ZXJh
dG9yTW9kZXJuUGF0aCB7IGNvbnRlbnQsIGJveEluZGV4IH0gfTsKK30KKyNlbmRpZgorCitUZXh0
UnVuUmFuZ2UgdGV4dFJ1bnNGb3IoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKK3sKKyAgICByZXR1
cm4geyBmaXJzdFRleHRSdW5Gb3IodGV4dCkgfTsKK30KKworQm94SXRlcmF0b3IgcnVuRm9yKGNv
bnN0IFJlbmRlckxpbmVCcmVhayYgcmVuZGVyZXIpCit7CisjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCisgICAgaWYgKGF1dG8qIGxpbmVMYXlvdXQgPSBMYXlvdXRJbnRlZ3Jh
dGlvbjo6TGluZUxheW91dDo6Y29udGFpbmluZyhyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBs
aW5lTGF5b3V0LT5ydW5Gb3IocmVuZGVyZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHsgQm94SXRl
cmF0b3JMZWdhY3lQYXRoKHJlbmRlcmVyLmlubGluZUJveFdyYXBwZXIoKSkgfTsKK30KKworQm94
SXRlcmF0b3IgcnVuRm9yKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIpCit7CisjaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisgICAgaWYgKGF1dG8qIGxpbmVMYXlvdXQgPSBM
YXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y29udGFpbmluZyhyZW5kZXJlcikpCisgICAg
ICAgIHJldHVybiBsaW5lTGF5b3V0LT5ydW5Gb3IocmVuZGVyZXIpOworI2VuZGlmCisgICAgcmV0
dXJuIHsgQm94SXRlcmF0b3JMZWdhY3lQYXRoKHJlbmRlcmVyLmlubGluZUJveFdyYXBwZXIoKSkg
fTsKK30KKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorQm94SXRlcmF0
b3IgcnVuRm9yKGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiBjb250ZW50
LCBzaXplX3QgcnVuSW5kZXgpCit7CisgICAgcmV0dXJuIHsgQm94SXRlcmF0b3JNb2Rlcm5QYXRo
IHsgY29udGVudCwgcnVuSW5kZXggfSB9OworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKK2NvbnN0IEJveEl0ZXJhdG9yTW9kZXJuUGF0aCYgQm94Ojpt
b2Rlcm5QYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpnZXQ8Qm94SXRlcmF0b3JNb2Rl
cm5QYXRoPihtX3BhdGhWYXJpYW50KTsKK30KKyNlbmRpZgorCitjb25zdCBCb3hJdGVyYXRvckxl
Z2FjeVBhdGgmIEJveDo6bGVnYWN5UGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6Z2V0
PEJveEl0ZXJhdG9yTGVnYWN5UGF0aD4obV9wYXRoVmFyaWFudCk7Cit9CisKK30KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJv
eC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTZlMzEwMzRiOGU1NjkwNzA4NzkzZDZjZjEzYTk1MGU0ODMyNTk0Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9Jbmxp
bmVJdGVyYXRvckJveC5oCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaCIKKyNpbmNsdWRl
ICJJbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaCIKKyNpbmNsdWRlICJMZWdhY3lJbmxpbmVF
bGVtZW50Qm94LmgiCisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBSZW5kZXJMaW5lQnJlYWs7CitjbGFzcyBSZW5kZXJPYmplY3Q7CitjbGFz
cyBSZW5kZXJTdHlsZTsKK2NsYXNzIFJlbmRlclRleHQ7CisKK25hbWVzcGFjZSBJbmxpbmVJdGVy
YXRvciB7CisKK2NsYXNzIExpbmVJdGVyYXRvcjsKK2NsYXNzIEJveEl0ZXJhdG9yOworY2xhc3Mg
VGV4dEJveEl0ZXJhdG9yOworCitzdHJ1Y3QgRW5kSXRlcmF0b3IgeyB9OworCitjbGFzcyBCb3gg
eworcHVibGljOgorICAgIHVzaW5nIFBhdGhWYXJpYW50ID0gVmFyaWFudDwKKyNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAgICAgICAgQm94SXRlcmF0b3JNb2Rlcm5QYXRo
LAorI2VuZGlmCisgICAgICAgIEJveEl0ZXJhdG9yTGVnYWN5UGF0aAorICAgID47CisKKyAgICBC
b3goUGF0aFZhcmlhbnQmJik7CisKKyAgICBib29sIGlzVGV4dCgpIGNvbnN0OworCisgICAgRmxv
YXRSZWN0IHJlY3QoKSBjb25zdDsKKworICAgIGZsb2F0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJl
dHVybiBpc0hvcml6b250YWwoKSA/IHJlY3QoKS55KCkgOiByZWN0KCkueCgpOyB9CisgICAgZmxv
YXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gcmVjdCgp
Lm1heFkoKSA6IHJlY3QoKS5tYXhYKCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsTGVmdCgpIGNvbnN0
IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gcmVjdCgpLngoKSA6IHJlY3QoKS55KCk7IH0KKyAg
ICBmbG9hdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IHJl
Y3QoKS5tYXhYKCkgOiByZWN0KCkubWF4WSgpOyB9CisgICAgZmxvYXQgbG9naWNhbFdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyByZWN0KCkud2lkdGgoKSA6IHJlY3QoKS5o
ZWlnaHQoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBpc0hv
cml6b250YWwoKSA/IHJlY3QoKS5oZWlnaHQoKSA6IHJlY3QoKS53aWR0aCgpOyB9CisKKyAgICBi
b29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0OworICAgIGJvb2wgZGlyT3ZlcnJpZGUoKSBjb25zdDsK
KyAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBtaW5pbXVtQ2Fy
ZXRPZmZzZXQoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBtYXhpbXVtQ2FyZXRPZmZzZXQoKSBjb25z
dDsKKyAgICB1bnNpZ25lZCBsZWZ0bW9zdENhcmV0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWluaW11bUNhcmV0T2Zmc2V0KCkgOiBtYXhpbXVtQ2Fy
ZXRPZmZzZXQoKTsgfQorICAgIHVuc2lnbmVkIHJpZ2h0bW9zdENhcmV0T2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4aW11bUNhcmV0T2Zmc2V0KCkg
OiBtaW5pbXVtQ2FyZXRPZmZzZXQoKTsgfQorCisgICAgdW5zaWduZWQgY2hhciBiaWRpTGV2ZWwo
KSBjb25zdDsKKyAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJp
ZGlMZXZlbCgpICUgMiA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsg
fQorICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRpcmVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUjsgfQorCisgICAgUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0OworCisgICAgY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJlcigpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNv
bnN0OworCisgICAgLy8gRm9yIGludGVybWVkaWF0ZSBwb3J0aW5nIHN0ZXBzIG9ubHkuCisgICAg
Y29uc3QgTGVnYWN5SW5saW5lQm94KiBsZWdhY3lJbmxpbmVCb3goKSBjb25zdDsKKyNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAgICBjb25zdCBJbmxpbmVEaXNwbGF5OjpC
b3gqIGlubGluZUJveCgpIGNvbnN0OworI2VuZGlmCisgICAgQm94SXRlcmF0b3IgbmV4dE9uTGlu
ZSgpIGNvbnN0OworICAgIEJveEl0ZXJhdG9yIHByZXZpb3VzT25MaW5lKCkgY29uc3Q7CisgICAg
Qm94SXRlcmF0b3IgbmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkgY29uc3Q7CisgICAgQm94
SXRlcmF0b3IgcHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpIGNvbnN0OworCisgICAg
TGluZUl0ZXJhdG9yIGxpbmUoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFz
cyBCb3hJdGVyYXRvcjsKKyAgICBmcmllbmQgY2xhc3MgVGV4dEJveEl0ZXJhdG9yOworCisgICAg
Ly8gVG8gaGVscCB3aXRoIGRlYnVnZ2luZy4KKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKKyAgICBjb25zdCBCb3hJdGVyYXRvck1vZGVyblBhdGgmIG1vZGVyblBhdGgoKSBj
b25zdDsKKyNlbmRpZgorICAgIGNvbnN0IEJveEl0ZXJhdG9yTGVnYWN5UGF0aCYgbGVnYWN5UGF0
aCgpIGNvbnN0OworCisgICAgUGF0aFZhcmlhbnQgbV9wYXRoVmFyaWFudDsKK307CisKK2NsYXNz
IFRleHRCb3ggOiBwdWJsaWMgQm94IHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94KFBhdGhWYXJpYW50
JiYpOworCisgICAgYm9vbCBoYXNIeXBoZW4oKSBjb25zdDsKKyAgICBTdHJpbmdWaWV3IHRleHQo
KSBjb25zdDsKKworICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29uc3Q7CisgICAgdW5zaWduZWQgZW5k
KCkgY29uc3Q7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBv
ZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4KSBjb25zdDsKKyAgICBmbG9hdCBwb3NpdGlvbkZvck9m
ZnNldCh1bnNpZ25lZCkgY29uc3Q7CisKKyAgICBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlIHNlbGVj
dGFibGVSYW5nZSgpIGNvbnN0OworICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCh1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdDsKKworICAgIGJvb2wgaXNDb21iaW5lZFRleHQo
KSBjb25zdDsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUoKSBjb25zdDsKKwor
ICAgIFRleHRSdW4gY3JlYXRlVGV4dFJ1bigpIGNvbnN0OworCisgICAgY29uc3QgUmVuZGVyVGV4
dCYgcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0PihCb3g6OnJl
bmRlcmVyKCkpOyB9CisgICAgY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCogbGVnYWN5SW5saW5l
Qm94KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8TGVnYWN5SW5saW5lVGV4dEJveD4oQm94Ojps
ZWdhY3lJbmxpbmVCb3goKSk7IH0KKworICAgIFRleHRCb3hJdGVyYXRvciBuZXh0VGV4dFJ1bigp
IGNvbnN0OworICAgIFRleHRCb3hJdGVyYXRvciBuZXh0VGV4dFJ1bkluVGV4dE9yZGVyKCkgY29u
c3Q7Cit9OworCitjbGFzcyBCb3hJdGVyYXRvciB7CitwdWJsaWM6CisgICAgQm94SXRlcmF0b3Io
KSA6IG1fcnVuKEJveEl0ZXJhdG9yTGVnYWN5UGF0aCB7IG51bGxwdHIsIHsgfSB9KSB7IH07Cisg
ICAgQm94SXRlcmF0b3IoQm94OjpQYXRoVmFyaWFudCYmKTsKKyAgICBCb3hJdGVyYXRvcihjb25z
dCBCb3gmKTsKKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
YXRFbmQoKTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJveEl0ZXJhdG9yJikgY29u
c3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEJveEl0ZXJhdG9yJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShFbmRJ
dGVyYXRvcikgY29uc3QgeyByZXR1cm4gYXRFbmQoKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShF
bmRJdGVyYXRvcikgY29uc3QgeyByZXR1cm4gIWF0RW5kKCk7IH0KKworICAgIGNvbnN0IEJveCYg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9ydW47IH0KKyAgICBjb25zdCBCb3gqIG9wZXJh
dG9yLT4oKSBjb25zdCB7IHJldHVybiAmbV9ydW47IH0KKworICAgIGJvb2wgYXRFbmQoKSBjb25z
dDsKKworICAgIEJveEl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRPbkxpbmUoKTsKKyAgICBCb3hJdGVy
YXRvciYgdHJhdmVyc2VQcmV2aW91c09uTGluZSgpOworICAgIEJveEl0ZXJhdG9yJiB0cmF2ZXJz
ZU5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOworICAgIEJveEl0ZXJhdG9yJiB0cmF2ZXJz
ZVByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKKyAgICBCb3hJdGVyYXRvciYgdHJh
dmVyc2VOZXh0T25MaW5lSW5Mb2dpY2FsT3JkZXIoKTsKKyAgICBCb3hJdGVyYXRvciYgdHJhdmVy
c2VQcmV2aW91c09uTGluZUluTG9naWNhbE9yZGVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBCb3gg
bV9ydW47Cit9OworCitjbGFzcyBUZXh0Qm94SXRlcmF0b3IgOiBwdWJsaWMgQm94SXRlcmF0b3Ig
eworcHVibGljOgorICAgIFRleHRCb3hJdGVyYXRvcigpIHsgfQorICAgIFRleHRCb3hJdGVyYXRv
cihCb3g6OlBhdGhWYXJpYW50JiYpOworICAgIFRleHRCb3hJdGVyYXRvcihjb25zdCBCb3gmKTsK
KworICAgIFRleHRCb3hJdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIHRyYXZlcnNlTmV4
dFRleHRSdW4oKTsgfQorCisgICAgY29uc3QgVGV4dEJveCYgb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gZ2V0KCk7IH0KKyAgICBjb25zdCBUZXh0Qm94KiBvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gJmdldCgpOyB9CisKKyAgICBUZXh0Qm94SXRlcmF0b3ImIHRyYXZlcnNlTmV4dFRleHRS
dW4oKTsKKyAgICBUZXh0Qm94SXRlcmF0b3ImIHRyYXZlcnNlTmV4dFRleHRSdW5JblRleHRPcmRl
cigpOworCitwcml2YXRlOgorICAgIEJveEl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRPbkxpbmUoKSA9
IGRlbGV0ZTsKKyAgICBCb3hJdGVyYXRvciYgdHJhdmVyc2VQcmV2aW91c09uTGluZSgpID0gZGVs
ZXRlOworICAgIEJveEl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVh
aygpID0gZGVsZXRlOworICAgIEJveEl0ZXJhdG9yJiB0cmF2ZXJzZVByZXZpb3VzT25MaW5lSWdu
b3JpbmdMaW5lQnJlYWsoKSA9IGRlbGV0ZTsKKyAgICBCb3hJdGVyYXRvciYgdHJhdmVyc2VOZXh0
T25MaW5lSW5Mb2dpY2FsT3JkZXIoKSA9IGRlbGV0ZTsKKyAgICBCb3hJdGVyYXRvciYgdHJhdmVy
c2VQcmV2aW91c09uTGluZUluTG9naWNhbE9yZGVyKCkgPSBkZWxldGU7CisKKyAgICBjb25zdCBU
ZXh0Qm94JiBnZXQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxUZXh0Qm94PihtX3J1bik7IH0K
K307CisKK2NsYXNzIFRleHRSdW5SYW5nZSB7CitwdWJsaWM6CisgICAgVGV4dFJ1blJhbmdlKFRl
eHRCb3hJdGVyYXRvciBiZWdpbikKKyAgICAgICAgOiBtX2JlZ2luKGJlZ2luKQorICAgIHsKKyAg
ICB9CisKKyAgICBUZXh0Qm94SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2lu
OyB9CisgICAgRW5kSXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisKK3ByaXZh
dGU6CisgICAgVGV4dEJveEl0ZXJhdG9yIG1fYmVnaW47Cit9OworCitUZXh0Qm94SXRlcmF0b3Ig
Zmlyc3RUZXh0UnVuRm9yKGNvbnN0IFJlbmRlclRleHQmKTsKK1RleHRCb3hJdGVyYXRvciBmaXJz
dFRleHRSdW5JblRleHRPcmRlckZvcihjb25zdCBSZW5kZXJUZXh0Jik7CitUZXh0Qm94SXRlcmF0
b3IgdGV4dFJ1bkZvcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94Kik7CisjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCitUZXh0Qm94SXRlcmF0b3IgdGV4dFJ1bkZvcihjb25z
dCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudCYsIGNvbnN0IElubGluZURpc3BsYXk6
OkJveCYpOworVGV4dEJveEl0ZXJhdG9yIHRleHRSdW5Gb3IoY29uc3QgTGF5b3V0SW50ZWdyYXRp
b246OklubGluZUNvbnRlbnQmLCBzaXplX3QgcnVuSW5kZXgpOworI2VuZGlmCitUZXh0UnVuUmFu
Z2UgdGV4dFJ1bnNGb3IoY29uc3QgUmVuZGVyVGV4dCYpOworQm94SXRlcmF0b3IgcnVuRm9yKGNv
bnN0IFJlbmRlckxpbmVCcmVhayYpOworQm94SXRlcmF0b3IgcnVuRm9yKGNvbnN0IFJlbmRlckJv
eCYpOworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorQm94SXRlcmF0b3Ig
cnVuRm9yKGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50Jiwgc2l6ZV90IHJ1
bkluZGV4KTsKKyNlbmRpZgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitpbmxpbmUgQm94OjpCb3goUGF0aFZhcmlhbnQmJiBwYXRoKQorICAg
IDogbV9wYXRoVmFyaWFudChXVEZNb3ZlKHBhdGgpKQoreworfQorCitpbmxpbmUgYm9vbCBCb3g6
OmlzVGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFu
dCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5pc1RleHQoKTsKKyAgICB9
KTsKK30KKworaW5saW5lIEZsb2F0UmVjdCBCb3g6OnJlY3QoKSBjb25zdAoreworICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAg
cmV0dXJuIHBhdGgucmVjdCgpOworICAgIH0pOworfQorCitpbmxpbmUgYm9vbCBCb3g6OmlzSG9y
aXpvbnRhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFu
dCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5pc0hvcml6b250YWwoKTsK
KyAgICB9KTsKK30KKworaW5saW5lIGJvb2wgQm94OjpkaXJPdmVycmlkZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewor
ICAgICAgICByZXR1cm4gcGF0aC5kaXJPdmVycmlkZSgpOworICAgIH0pOworfQorCitpbmxpbmUg
Ym9vbCBCb3g6OmlzTGluZUJyZWFrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmlz
TGluZUJyZWFrKCk7CisgICAgfSk7Cit9CisKK2lubGluZSB1bnNpZ25lZCBCb3g6Om1pbmltdW1D
YXJldE9mZnNldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFy
aWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5taW5pbXVtQ2FyZXRP
ZmZzZXQoKTsKKyAgICB9KTsKK30KKworaW5saW5lIHVuc2lnbmVkIEJveDo6bWF4aW11bUNhcmV0
T2Zmc2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50
LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLm1heGltdW1DYXJldE9mZnNl
dCgpOworICAgIH0pOworfQorCitpbmxpbmUgdW5zaWduZWQgY2hhciBCb3g6OmJpZGlMZXZlbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0
byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5iaWRpTGV2ZWwoKTsKKyAgICB9KTsKK30K
KworaW5saW5lIGNvbnN0IFJlbmRlck9iamVjdCYgQm94OjpyZW5kZXJlcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgLT4g
Y29uc3QgUmVuZGVyT2JqZWN0JiB7CisgICAgICAgIHJldHVybiBwYXRoLnJlbmRlcmVyKCk7Cisg
ICAgfSk7Cit9CisKK2lubGluZSBjb25zdCBMZWdhY3lJbmxpbmVCb3gqIEJveDo6bGVnYWN5SW5s
aW5lQm94KCkgY29uc3QKK3sKKyAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Qm94SXRl
cmF0b3JMZWdhY3lQYXRoPihtX3BhdGhWYXJpYW50KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIFdURjo6Z2V0PEJveEl0ZXJhdG9yTGVnYWN5UGF0aD4obV9wYXRoVmFyaWFu
dCkubGVnYWN5SW5saW5lQm94KCk7Cit9CisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKK2lubGluZSBjb25zdCBJbmxpbmVEaXNwbGF5OjpCb3gqIEJveDo6aW5saW5lQm94
KCkgY29uc3QKK3sKKyAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Qm94SXRlcmF0b3JN
b2Rlcm5QYXRoPihtX3BhdGhWYXJpYW50KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuICZXVEY6OmdldDxCb3hJdGVyYXRvck1vZGVyblBhdGg+KG1fcGF0aFZhcmlhbnQpLmJv
eCgpOworfQorI2VuZGlmCisKK2lubGluZSBib29sIFRleHRCb3g6Omhhc0h5cGhlbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0
aCkgeworICAgICAgICByZXR1cm4gcGF0aC5oYXNIeXBoZW4oKTsKKyAgICB9KTsKK30KKworaW5s
aW5lIFRleHRCb3g6OlRleHRCb3goUGF0aFZhcmlhbnQmJiBwYXRoKQorICAgIDogQm94KFdURk1v
dmUocGF0aCkpCit7Cit9CisKK2lubGluZSBTdHJpbmdWaWV3IFRleHRCb3g6OnRleHQoKSBjb25z
dAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBh
dGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgudGV4dCgpOworICAgIH0pOworfQorCitpbmxpbmUg
dW5zaWduZWQgVGV4dEJveDo6c3RhcnQoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgu
c3RhcnQoKTsKKyAgICB9KTsKK30KKworaW5saW5lIHVuc2lnbmVkIFRleHRCb3g6OmVuZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYg
cGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5lbmQoKTsKKyAgICB9KTsKK30KKworaW5saW5l
IHVuc2lnbmVkIFRleHRCb3g6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0
aC5sZW5ndGgoKTsKKyAgICB9KTsKK30KKworaW5saW5lIHVuc2lnbmVkIFRleHRCb3g6Om9mZnNl
dEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
bV9wYXRoVmFyaWFudCwgWyZdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgub2Zm
c2V0Rm9yUG9zaXRpb24oeCk7CisgICAgfSk7Cit9CisKK2lubGluZSBmbG9hdCBUZXh0Qm94Ojpw
b3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgWyZdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0
dXJuIHBhdGgucG9zaXRpb25Gb3JPZmZzZXQob2Zmc2V0KTsKKyAgICB9KTsKK30KKworaW5saW5l
IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UgVGV4dEJveDo6c2VsZWN0YWJsZVJhbmdlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbJl0oYXV0byYgcGF0
aCkgeworICAgICAgICByZXR1cm4gcGF0aC5zZWxlY3RhYmxlUmFuZ2UoKTsKKyAgICB9KTsKK30K
KworaW5saW5lIFRleHRSdW4gVGV4dEJveDo6Y3JlYXRlVGV4dFJ1bigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgWyZdKGF1dG8mIHBhdGgpIHsKKyAg
ICAgICAgcmV0dXJuIHBhdGguY3JlYXRlVGV4dFJ1bigpOworICAgIH0pOworfQorCit9Cit9CisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRl
eHRCb3gpCitzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6
OkJveCYgcnVuKSB7IHJldHVybiBydW4uaXNUZXh0KCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpJbmxpbmVJ
dGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKQorc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciYgcnVuSXRlcmF0b3IpIHsgcmV0dXJuICFy
dW5JdGVyYXRvciB8fCBydW5JdGVyYXRvci0+aXNUZXh0KCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9JbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjI0
YzJhMjMwNjYzMjQyNWYzYzE2NmVlYzE1NDJjZjVmMjFlYmI5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94TGVnYWN5
UGF0aC5oCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJMZWdhY3lJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTGVnYWN5Um9vdElubGlu
ZUJveC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRlICJUZXh0Qm94U2VsZWN0
YWJsZVJhbmdlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIElubGluZUl0
ZXJhdG9yIHsKKworY2xhc3MgQm94SXRlcmF0b3JMZWdhY3lQYXRoIHsKK3B1YmxpYzoKKyAgICBC
b3hJdGVyYXRvckxlZ2FjeVBhdGgoY29uc3QgTGVnYWN5SW5saW5lQm94KiBpbmxpbmVCb3gsIFZl
Y3Rvcjxjb25zdCBMZWdhY3lJbmxpbmVCb3gqPiYmIHNvcnRlZElubGluZUJveGVzID0geyB9LCBz
aXplX3Qgc29ydGVkSW5saW5lQm94SW5kZXggPSAwKQorICAgICAgICA6IG1faW5saW5lQm94KGlu
bGluZUJveCkKKyAgICAgICAgLCBtX2xvZ2ljYWxPcmRlckNhY2hlKFdURk1vdmUoc29ydGVkSW5s
aW5lQm94ZXMpKQorICAgICAgICAsIG1fbG9naWNhbE9yZGVyQ2FjaGVJbmRleChzb3J0ZWRJbmxp
bmVCb3hJbmRleCkKKyAgICB7IH0KKworICAgIGVudW0gY2xhc3MgTG9naWNhbE9yZGVyIHsgU3Rh
cnQsIEVuZCB9OworICAgIEJveEl0ZXJhdG9yTGVnYWN5UGF0aChjb25zdCBMZWdhY3lSb290SW5s
aW5lQm94JiByb290LCBMb2dpY2FsT3JkZXIgb3JkZXIpCisgICAgICAgIDogbV9sb2dpY2FsT3Jk
ZXJDYWNoZShpbmxpbmVCb3hlc0luTG9naWNhbE9yZGVyKHJvb3QpKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX2xvZ2ljYWxPcmRlckNhY2hlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9sb2dp
Y2FsT3JkZXJDYWNoZUluZGV4ID0gb3JkZXIgPT0gTG9naWNhbE9yZGVyOjpTdGFydCA/IDAgOiBt
X2xvZ2ljYWxPcmRlckNhY2hlLnNpemUoKSAtIDE7CisgICAgICAgICAgICBtX2lubGluZUJveCA9
IG1fbG9naWNhbE9yZGVyQ2FjaGVbbV9sb2dpY2FsT3JkZXJDYWNoZUluZGV4XTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gt
PmlzSW5saW5lVGV4dEJveCgpOyB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5saW5lQm94LT5mcmFtZVJlY3QoKTsgfQorCisgICAgYm9vbCBpc0hvcml6b250YWwo
KSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+aXNIb3Jpem9udGFsKCk7IH0KKyAgICBib29s
IGRpck92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmRpck92ZXJyaWRlKCk7
IH0KKyAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmlz
TGluZUJyZWFrKCk7IH0KKworICAgIHVuc2lnbmVkIG1pbmltdW1DYXJldE9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5saW5lQm94LT5jYXJldE1pbk9mZnNldCgpOyB9CisgICAgdW5zaWduZWQg
bWF4aW11bUNhcmV0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmNhcmV0TWF4
T2Zmc2V0KCk7IH0KKworICAgIHVuc2lnbmVkIGNoYXIgYmlkaUxldmVsKCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVCb3gtPmJpZGlMZXZlbCgpOyB9CisKKyAgICBib29sIGhhc0h5cGhlbigpIGNv
bnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+aGFzSHlwaGVuKCk7IH0KKyAgICBTdHJpbmdW
aWV3IHRleHQoKSBjb25zdCB7IHJldHVybiBTdHJpbmdWaWV3KGlubGluZVRleHRCb3goKS0+cmVu
ZGVyZXIoKS50ZXh0KCkpLnN1YnN0cmluZyhpbmxpbmVUZXh0Qm94KCktPnN0YXJ0KCksIGlubGlu
ZVRleHRCb3goKS0+bGVuKCkpOyB9CisgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVy
biBpbmxpbmVUZXh0Qm94KCktPnN0YXJ0KCk7IH0KKyAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7
IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPmVuZCgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5sZW4oKTsgfQorCisgICAgdW5zaWduZWQg
b2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgp
LT5vZmZzZXRGb3JQb3NpdGlvbih4KTsgfQorICAgIGZsb2F0IHBvc2l0aW9uRm9yT2Zmc2V0KHVu
c2lnbmVkIG9mZnNldCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5wb3NpdGlvbkZv
ck9mZnNldChvZmZzZXQpOyB9CisKKyAgICBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlIHNlbGVjdGFi
bGVSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+c2VsZWN0YWJsZVJhbmdl
KCk7IH0KKworICAgIFRleHRSdW4gY3JlYXRlVGV4dFJ1bigpIGNvbnN0IHsgcmV0dXJuIGlubGlu
ZVRleHRCb3goKS0+Y3JlYXRlVGV4dFJ1bigpOyB9CisKKyAgICBjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlcmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lubGluZUJveC0+cmVu
ZGVyZXIoKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRSdW4oKSB7IG1faW5s
aW5lQm94ID0gaW5saW5lVGV4dEJveCgpLT5uZXh0VGV4dEJveCgpOyB9CisgICAgdm9pZCB0cmF2
ZXJzZU5leHRUZXh0UnVuSW5UZXh0T3JkZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2xvZ2lj
YWxPcmRlckNhY2hlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdHJhdmVyc2VOZXh0SW5saW5l
Qm94SW5DYWNoZU9yZGVyKCk7CisgICAgICAgICAgICBBU1NFUlQoIW1faW5saW5lQm94IHx8IGlz
PExlZ2FjeUlubGluZVRleHRCb3g+KG1faW5saW5lQm94KSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdHJhdmVyc2VOZXh0VGV4dFJ1bigpOworICAgIH0KKworICAg
IHZvaWQgdHJhdmVyc2VOZXh0T25MaW5lKCkKKyAgICB7CisgICAgICAgIG1faW5saW5lQm94ID0g
bV9pbmxpbmVCb3gtPm5leHRMZWFmT25MaW5lKCk7CisgICAgfQorCisgICAgdm9pZCB0cmF2ZXJz
ZVByZXZpb3VzT25MaW5lKCkKKyAgICB7CisgICAgICAgIG1faW5saW5lQm94ID0gbV9pbmxpbmVC
b3gtPnByZXZpb3VzTGVhZk9uTGluZSgpOworICAgIH0KKworICAgIHZvaWQgdHJhdmVyc2VOZXh0
T25MaW5lSW5Mb2dpY2FsT3JkZXIoKQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZUxvZ2ljYWxP
cmRlckNhY2hlRm9yTGluZSgpOworICAgICAgICB0cmF2ZXJzZU5leHRJbmxpbmVCb3hJbkNhY2hl
T3JkZXIoKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNPbkxpbmVJbkxvZ2lj
YWxPcmRlcigpCisgICAgeworICAgICAgICBpbml0aWFsaXplTG9naWNhbE9yZGVyQ2FjaGVGb3JM
aW5lKCk7CisgICAgICAgIHRyYXZlcnNlUHJldmlvdXNJbmxpbmVCb3hJbkNhY2hlT3JkZXIoKTsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQm94SXRlcmF0b3JMZWdhY3lQYXRo
JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3ggPT0gb3RoZXIubV9pbmxpbmVCb3g7
IH0KKworICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9pbmxpbmVCb3g7IH0KKwor
ICAgIExlZ2FjeUlubGluZUJveCogbGVnYWN5SW5saW5lQm94KCkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxMZWdhY3lJbmxpbmVCb3gqPihtX2lubGluZUJveCk7IH0KKyAgICBjb25zdCBMZWdh
Y3lSb290SW5saW5lQm94JiByb290SW5saW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVC
b3gtPnJvb3QoKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gq
IGlubGluZVRleHRCb3goKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxMZWdhY3lJbmxpbmVUZXh0
Qm94PihtX2lubGluZUJveCk7IH0KKworICAgIHN0YXRpYyBWZWN0b3I8Y29uc3QgTGVnYWN5SW5s
aW5lQm94Kj4gaW5saW5lQm94ZXNJbkxvZ2ljYWxPcmRlcihjb25zdCBMZWdhY3lSb290SW5saW5l
Qm94JiByb290KQorICAgIHsKKyAgICAgICAgVmVjdG9yPExlZ2FjeUlubGluZUJveCo+IGlubGlu
ZUJveGVzOworICAgICAgICByb290LmNvbGxlY3RMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcihpbmxp
bmVCb3hlcyk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFZlY3Rvcjxjb25zdCBM
ZWdhY3lJbmxpbmVCb3gqPiY+KGlubGluZUJveGVzKTsKKyAgICB9CisgICAgdm9pZCBpbml0aWFs
aXplTG9naWNhbE9yZGVyQ2FjaGVGb3JMaW5lKCkKKyAgICB7CisgICAgICAgIGlmICghbV9pbmxp
bmVCb3ggfHwgIW1fbG9naWNhbE9yZGVyQ2FjaGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBtX2xvZ2ljYWxPcmRlckNhY2hlID0gaW5saW5lQm94ZXNJbkxvZ2ljYWxP
cmRlcihtX2lubGluZUJveC0+cm9vdCgpKTsKKyAgICAgICAgZm9yIChtX2xvZ2ljYWxPcmRlckNh
Y2hlSW5kZXggPSAwOyBtX2xvZ2ljYWxPcmRlckNhY2hlSW5kZXggPCBtX2xvZ2ljYWxPcmRlckNh
Y2hlLnNpemUoKTsgKyttX2xvZ2ljYWxPcmRlckNhY2hlSW5kZXgpIHsKKyAgICAgICAgICAgIGlm
IChtX2xvZ2ljYWxPcmRlckNhY2hlW21fbG9naWNhbE9yZGVyQ2FjaGVJbmRleF0gPT0gbV9pbmxp
bmVCb3gpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgdHJhdmVyc2VOZXh0SW5saW5lQm94
SW5DYWNoZU9yZGVyKCk7CisgICAgdm9pZCB0cmF2ZXJzZVByZXZpb3VzSW5saW5lQm94SW5DYWNo
ZU9yZGVyKCk7CisKKyAgICBjb25zdCBMZWdhY3lJbmxpbmVCb3gqIG1faW5saW5lQm94IHsgbnVs
bHB0ciB9OworICAgIFJlZkNvdW50ZWRBcnJheTxjb25zdCBMZWdhY3lJbmxpbmVCb3gqPiBtX2xv
Z2ljYWxPcmRlckNhY2hlOworICAgIHNpemVfdCBtX2xvZ2ljYWxPcmRlckNhY2hlSW5kZXggeyAw
IH07Cit9OworCisKK2lubGluZSB2b2lkIEJveEl0ZXJhdG9yTGVnYWN5UGF0aDo6dHJhdmVyc2VO
ZXh0SW5saW5lQm94SW5DYWNoZU9yZGVyKCkKK3sKKyAgICBBU1NFUlQoIW1fbG9naWNhbE9yZGVy
Q2FjaGUuaXNFbXB0eSgpKTsKKyAgICArK21fbG9naWNhbE9yZGVyQ2FjaGVJbmRleDsKKyAgICBt
X2lubGluZUJveCA9IG1fbG9naWNhbE9yZGVyQ2FjaGVJbmRleCA8IG1fbG9naWNhbE9yZGVyQ2Fj
aGUuc2l6ZSgpID8gbV9sb2dpY2FsT3JkZXJDYWNoZVttX2xvZ2ljYWxPcmRlckNhY2hlSW5kZXhd
IDogbnVsbHB0cjsKK30KKworaW5saW5lIHZvaWQgQm94SXRlcmF0b3JMZWdhY3lQYXRoOjp0cmF2
ZXJzZVByZXZpb3VzSW5saW5lQm94SW5DYWNoZU9yZGVyKCkKK3sKKyAgICBBU1NFUlQoIW1fbG9n
aWNhbE9yZGVyQ2FjaGUuaXNFbXB0eSgpKTsKKyAgICBpZiAoIW1fbG9naWNhbE9yZGVyQ2FjaGVJ
bmRleCkgeworICAgICAgICBtX2lubGluZUJveCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9pbmxpbmVCb3ggPSBtX2xvZ2ljYWxPcmRlckNhY2hlWy0tbV9sb2dpY2Fs
T3JkZXJDYWNoZUluZGV4XTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmNjNTQ5MjkxOWIwMDczNmQxZTVlMDU5ODgwNTFmYjYyOGE3Y2I0NzkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5l
SXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmgKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbklubGlu
ZUNvbnRlbnQuaCIKKyNpbmNsdWRlICJUZXh0Qm94U2VsZWN0YWJsZVJhbmdlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBJbmxpbmVJdGVyYXRvciB7CisKK2NsYXNzIEJveEl0
ZXJhdG9yTW9kZXJuUGF0aCB7CitwdWJsaWM6CisgICAgQm94SXRlcmF0b3JNb2Rlcm5QYXRoKGNv
bnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50KQorICAg
ICAgICA6IG1faW5saW5lQ29udGVudCgmaW5saW5lQ29udGVudCkKKyAgICB7CisgICAgICAgIHNl
dEF0RW5kKCk7CisgICAgfQorICAgIEJveEl0ZXJhdG9yTW9kZXJuUGF0aChjb25zdCBMYXlvdXRJ
bnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgc2l6ZV90IHN0YXJ0SW5k
ZXgpCisgICAgICAgIDogbV9pbmxpbmVDb250ZW50KCZpbmxpbmVDb250ZW50KQorICAgICAgICAs
IG1fYm94SW5kZXgoc3RhcnRJbmRleCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc1RleHQo
KSBjb25zdCB7IHJldHVybiAhIWJveCgpLnRleHQoKTsgfQorCisgICAgRmxvYXRSZWN0IHJlY3Qo
KSBjb25zdCB7IHJldHVybiBib3goKS5sb2dpY2FsUmVjdCgpOyB9CisKKyAgICBib29sIGlzSG9y
aXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGRpck92ZXJyaWRlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyBy
ZXR1cm4gYm94KCkuaXNMaW5lQnJlYWsoKTsgfQorCisgICAgdW5zaWduZWQgbWluaW11bUNhcmV0
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNUZXh0KCkgPyBzdGFydCgpIDogMDsgfQorICAgIHVu
c2lnbmVkIG1heGltdW1DYXJldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dCgpID8gZW5k
KCkgOiAxOyB9CisKKyAgICB1bnNpZ25lZCBjaGFyIGJpZGlMZXZlbCgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KKworICAgIGJvb2wgaGFzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gYm94KCkudGV4dCgp
LT5oYXNIeXBoZW4oKTsgfQorICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIGJv
eCgpLnRleHQoKS0+b3JpZ2luYWxDb250ZW50KCk7IH0KKyAgICB1bnNpZ25lZCBzdGFydCgpIGNv
bnN0IHsgcmV0dXJuIGJveCgpLnRleHQoKS0+c3RhcnQoKTsgfQorICAgIHVuc2lnbmVkIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIGJveCgpLnRleHQoKS0+ZW5kKCk7IH0KKyAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBib3goKS50ZXh0KCktPmxlbmd0aCgpOyB9CisKKyAgICAvLyBG
SVhNRTogTWFrZSBhIHNoYXJlZCBnZW5lcmljIHZlcnNpb24gb2YgdGhpcy4KKyAgICBpbmxpbmUg
dW5zaWduZWQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChpc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGF1dG8g
cmVjdCA9IHRoaXMtPnJlY3QoKTsKKyAgICAgICAgYXV0byBsb2NhbFggPSB4IC0gcmVjdC54KCk7
CisgICAgICAgIGlmIChsb2NhbFggPiByZWN0LndpZHRoKCkpCisgICAgICAgICAgICByZXR1cm4g
bGVuZ3RoKCk7CisgICAgICAgIGlmIChsb2NhbFggPCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAgICAgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyA9IHRydWU7CisgICAgICAgIHJl
dHVybiBib3goKS5zdHlsZSgpLmZvbnRDYXNjYWRlKCkub2Zmc2V0Rm9yUG9zaXRpb24oY3JlYXRl
VGV4dFJ1bihIeXBoZW5Nb2RlOjpJZ25vcmUpLCBsb2NhbFgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhz
KTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogTWFrZSBhIHNoYXJlZCBnZW5lcmljIHZlcnNpb24g
b2YgdGhpcy4KKyAgICBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0ID49IHN0YXJ0KCkpOworICAgICAgICBB
U1NFUlQob2Zmc2V0IDw9IGVuZCgpKTsKKworICAgICAgICBpZiAoaXNMaW5lQnJlYWsoKSkKKyAg
ICAgICAgICAgIHJldHVybiByZWN0KCkueCgpOworCisgICAgICAgIGF1dG8gZW5kT2Zmc2V0ID0g
c2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAob2Zmc2V0KTsKKworICAgICAgICBMYXlvdXRSZWN0IHNl
bGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KHJlY3QoKS54KCksIDAsIDAsIDApOworICAgICAgICBU
ZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKEh5cGhlbk1vZGU6Oklnbm9yZSk7CisgICAg
ICAgIGJveCgpLnN0eWxlKCkuZm9udENhc2NhZGUoKS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4
dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCAwLCBlbmRPZmZzZXQpOworICAgICAgICByZXR1cm4g
c25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3Qs
IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigp
KS5tYXhYKCk7CisgICAgfQorCisgICAgVGV4dEJveFNlbGVjdGFibGVSYW5nZSBzZWxlY3RhYmxl
UmFuZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHN0YXJ0
KCksCisgICAgICAgICAgICBsZW5ndGgoKSwKKyAgICAgICAgICAgIGJveCgpLnRleHQoKS0+aGFz
SHlwaGVuKCkgPyBib3goKS5zdHlsZSgpLmh5cGhlblN0cmluZygpLmxlbmd0aCgpIDogMCwKKyAg
ICAgICAgICAgIGJveCgpLmlzTGluZUJyZWFrKCkKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBU
ZXh0UnVuIGNyZWF0ZVRleHRSdW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZVRleHRSdW4oSHlwaGVuTW9kZTo6SW5jbHVkZSk7CisgICAgfTsKKworICAgIGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5saW5l
Q29udGVudC0+cmVuZGVyZXJGb3JMYXlvdXRCb3goYm94KCkubGF5b3V0Qm94KCkpOworICAgIH0K
KworICAgIHZvaWQgdHJhdmVyc2VOZXh0VGV4dFJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQo
IWF0RW5kKCkpOworICAgICAgICBBU1NFUlQoYm94KCkudGV4dCgpKTsKKworICAgICAgICBhdXRv
JiBsYXlvdXRCb3ggPSBib3goKS5sYXlvdXRCb3goKTsKKworICAgICAgICB0cmF2ZXJzZU5leHRM
ZWFmKCk7CisKKyAgICAgICAgaWYgKCFhdEVuZCgpICYmICZsYXlvdXRCb3ggIT0gJmJveCgpLmxh
eW91dEJveCgpKQorICAgICAgICAgICAgc2V0QXRFbmQoKTsKKworICAgICAgICBBU1NFUlQoYXRF
bmQoKSB8fCBib3goKS50ZXh0KCkpOworICAgIH0KKworICAgIHZvaWQgdHJhdmVyc2VOZXh0VGV4
dFJ1bkluVGV4dE9yZGVyKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBObyBSVEwgaW4gTEZD
LgorICAgICAgICB0cmF2ZXJzZU5leHRUZXh0UnVuKCk7CisgICAgfQorCisgICAgdm9pZCB0cmF2
ZXJzZU5leHRPbkxpbmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFhdEVuZCgpKTsKKworICAg
ICAgICBhdXRvIG9sZExpbmVJbmRleCA9IGJveCgpLmxpbmVJbmRleCgpOworCisgICAgICAgIHRy
YXZlcnNlTmV4dExlYWYoKTsKKworICAgICAgICBpZiAoIWF0RW5kKCkgJiYgb2xkTGluZUluZGV4
ICE9IGJveCgpLmxpbmVJbmRleCgpKQorICAgICAgICAgICAgc2V0QXRFbmQoKTsKKyAgICB9CisK
KyAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFhdEVuZCgpKTsKKworICAgICAgICBhdXRvIG9sZExpbmVJbmRleCA9IGJveCgpLmxpbmVJbmRl
eCgpOworCisgICAgICAgIHRyYXZlcnNlUHJldmlvdXNMZWFmKCk7CisKKyAgICAgICAgaWYgKCFh
dEVuZCgpICYmIG9sZExpbmVJbmRleCAhPSBib3goKS5saW5lSW5kZXgoKSkKKyAgICAgICAgICAg
IHNldEF0RW5kKCk7CisgICAgfQorCisgICAgdm9pZCB0cmF2ZXJzZU5leHRPbkxpbmVJbkxvZ2lj
YWxPcmRlcigpCisgICAgeworICAgICAgICB0cmF2ZXJzZU5leHRPbkxpbmUoKTsKKyAgICB9CisK
KyAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNPbkxpbmVJbkxvZ2ljYWxPcmRlcigpCisgICAgewor
ICAgICAgICB0cmF2ZXJzZVByZXZpb3VzT25MaW5lKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEJveEl0ZXJhdG9yTW9kZXJuUGF0aCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IG1faW5saW5lQ29udGVudCA9PSBvdGhlci5tX2lubGluZUNvbnRlbnQgJiYgbV9ib3hJbmRleCA9
PSBvdGhlci5tX2JveEluZGV4OyB9CisKKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4g
bV9ib3hJbmRleCA9PSBib3hlcygpLnNpemUoKTsgfQorICAgIGNvbnN0IElubGluZURpc3BsYXk6
OkJveCYgYm94KCkgY29uc3QgeyByZXR1cm4gYm94ZXMoKVttX2JveEluZGV4XTsgfQorCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoOworICAgIGZyaWVu
ZCBjbGFzcyBCb3g7CisgICAgZnJpZW5kIGNsYXNzIEJveEl0ZXJhdG9yOworCisgICAgdm9pZCB0
cmF2ZXJzZU5leHRMZWFmKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghYXRFbmQoKSk7CisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgICsrbV9ib3hJbmRleDsKKyAgICAgICAgfSB3aGlsZSAoIWF0
RW5kKCkgJiYgYm94KCkuaXNJbmxpbmVCb3goKSk7CisgICAgfQorCisgICAgdm9pZCB0cmF2ZXJz
ZVByZXZpb3VzTGVhZigpCisgICAgeworICAgICAgICBBU1NFUlQoIWF0RW5kKCkpOworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBtX2JveEluZGV4ID0gbV9ib3hJbmRleCA/IG1fYm94SW5kZXgg
LSAxIDogYm94ZXMoKS5zaXplKCk7CisgICAgICAgIH0gd2hpbGUgKCFhdEVuZCgpICYmIGJveCgp
LmlzSW5saW5lQm94KCkpOworICAgIH0KKworICAgIHZvaWQgc2V0QXRFbmQoKSB7IG1fYm94SW5k
ZXggPSBib3hlcygpLnNpemUoKTsgfQorCisgICAgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246Oklu
bGluZUNvbnRlbnQ6OkJveGVzJiBib3hlcygpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGVu
dC0+Ym94ZXM7IH0KKyAgICBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZSYgbGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGVudC0+bGluZUZvckJveChib3goKSk7IH0KKworICAg
IGVudW0gY2xhc3MgSHlwaGVuTW9kZSB7IEluY2x1ZGUsIElnbm9yZSB9OworICAgIFRleHRSdW4g
Y3JlYXRlVGV4dFJ1bihIeXBoZW5Nb2RlIGh5cGhlbk1vZGUpIGNvbnN0CisgICAgeworICAgICAg
ICBhdXRvJiBzdHlsZSA9IGJveCgpLnN0eWxlKCk7CisgICAgICAgIGF1dG8gZXhwYW5zaW9uID0g
Ym94KCkuZXhwYW5zaW9uKCk7CisgICAgICAgIGF1dG8gcmVjdCA9IHRoaXMtPnJlY3QoKTsKKyAg
ICAgICAgYXV0byB4UG9zID0gcmVjdC54KCkgLSAobGluZSgpLmxpbmVCb3hMZWZ0KCkgKyBsaW5l
KCkuY29udGVudExlZnQoKSk7CisKKyAgICAgICAgYXV0byB0ZXh0Rm9yUnVuID0gWyZdIHsKKyAg
ICAgICAgICAgIGlmIChoeXBoZW5Nb2RlID09IEh5cGhlbk1vZGU6Oklnbm9yZSB8fCAhaGFzSHlw
aGVuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQoKS50b1N0cmluZ1dpdGhvdXRDb3B5
aW5nKCk7CisKKyAgICAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKHRleHQoKSwgc3R5bGUuaHlw
aGVuU3RyaW5nKCkpOworICAgICAgICB9KCk7CisKKyAgICAgICAgVGV4dFJ1biB0ZXh0UnVuIHsg
dGV4dEZvclJ1biwgeFBvcywgZXhwYW5zaW9uLmhvcml6b250YWxFeHBhbnNpb24sIGV4cGFuc2lv
bi5iZWhhdmlvciB9OworICAgICAgICB0ZXh0UnVuLnNldFRhYlNpemUoIXN0eWxlLmNvbGxhcHNl
V2hpdGVTcGFjZSgpLCBzdHlsZS50YWJTaXplKCkpOworICAgICAgICByZXR1cm4gdGV4dFJ1bjsK
KyAgICB9OworCisgICAgUmVmUHRyPGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250
ZW50PiBtX2lubGluZUNvbnRlbnQ7CisgICAgc2l6ZV90IG1fYm94SW5kZXggeyAwIH07Cit9Owor
Cit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMaW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDVhNTM0NmQ2NzI2
ODY5Y2U2YjBjYjljMmRhNTVmMmEyM2FlNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZS5jcHAKQEAgLTAsMCAr
MSwyNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5s
aW5lSXRlcmF0b3JMaW5lLmgiCisKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJveC5oIgorI2lu
Y2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxheW91dC5oIgorI2luY2x1ZGUgIlJlbmRlckJs
b2NrRmxvdy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgSW5saW5lSXRlcmF0
b3IgeworCitMaW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvcihMaW5lOjpQYXRoVmFyaWFudCYmIHBh
dGhWYXJpYW50KQorICAgIDogbV9saW5lKFdURk1vdmUocGF0aFZhcmlhbnQpKQoreworfQorCitM
aW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvcihjb25zdCBMaW5lJiBsaW5lKQorICAgIDogbV9saW5l
KGxpbmUpCit7Cit9CisKK2Jvb2wgTGluZUl0ZXJhdG9yOjphdEVuZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9saW5lLm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKKyAgICAgICAgcmV0dXJuIHBhdGguYXRFbmQoKTsKKyAgICB9KTsKK30KKworTGluZUl0ZXJh
dG9yJiBMaW5lSXRlcmF0b3I6OnRyYXZlcnNlTmV4dCgpCit7CisgICAgV1RGOjpzd2l0Y2hPbiht
X2xpbmUubV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0
aC50cmF2ZXJzZU5leHQoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0xpbmVJ
dGVyYXRvciYgTGluZUl0ZXJhdG9yOjp0cmF2ZXJzZVByZXZpb3VzKCkKK3sKKyAgICBXVEY6OnN3
aXRjaE9uKG1fbGluZS5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJl
dHVybiBwYXRoLnRyYXZlcnNlUHJldmlvdXMoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKK2Jvb2wgTGluZUl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IExpbmVJdGVyYXRvciYg
b3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGluZS5tX3BhdGhWYXJpYW50ID09IG90aGVy
Lm1fbGluZS5tX3BhdGhWYXJpYW50OworfQorCitMaW5lSXRlcmF0b3IgZmlyc3RMaW5lRm9yKGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKK3sKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKKyAgICBpZiAoYXV0byogbGluZUxheW91dCA9IGZsb3cubW9kZXJuTGluZUxh
eW91dCgpKQorICAgICAgICByZXR1cm4gbGluZUxheW91dC0+Zmlyc3RMaW5lKCk7CisjZW5kaWYK
KworICAgIHJldHVybiB7IExpbmVJdGVyYXRvckxlZ2FjeVBhdGggeyBmbG93LmZpcnN0Um9vdEJv
eCgpIH0gfTsKK30KKworTGluZUl0ZXJhdG9yIGxhc3RMaW5lRm9yKGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYgZmxvdykKK3sKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAg
ICBpZiAoYXV0byogbGluZUxheW91dCA9IGZsb3cubW9kZXJuTGluZUxheW91dCgpKQorICAgICAg
ICByZXR1cm4gbGluZUxheW91dC0+bGFzdExpbmUoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHsg
TGluZUl0ZXJhdG9yTGVnYWN5UGF0aCB7IGZsb3cubGFzdFJvb3RCb3goKSB9IH07Cit9CisKK0xp
bmVJdGVyYXRvciBMaW5lOjpuZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTGluZUl0ZXJhdG9y
KCp0aGlzKS50cmF2ZXJzZU5leHQoKTsKK30KKworTGluZUl0ZXJhdG9yIExpbmU6OnByZXZpb3Vz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTGluZUl0ZXJhdG9yKCp0aGlzKS50cmF2ZXJzZVByZXZp
b3VzKCk7Cit9CisKK0JveEl0ZXJhdG9yIExpbmU6OmZpcnN0UnVuKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSAtPiBCb3hJ
dGVyYXRvciB7CisgICAgICAgIHJldHVybiB7IHBhdGguZmlyc3RSdW4oKSB9OworICAgIH0pOwor
fQorCitCb3hJdGVyYXRvciBMaW5lOjpsYXN0UnVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSAtPiBCb3hJdGVyYXRvciB7
CisgICAgICAgIHJldHVybiB7IHBhdGgubGFzdFJ1bigpIH07CisgICAgfSk7Cit9CisKK0JveEl0
ZXJhdG9yIExpbmU6OmxvZ2ljYWxTdGFydFJ1bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgLT4gQm94SXRlcmF0b3Igewor
ICAgICAgICByZXR1cm4geyBwYXRoLmxvZ2ljYWxTdGFydFJ1bigpIH07CisgICAgfSk7Cit9CisK
K0JveEl0ZXJhdG9yIExpbmU6OmxvZ2ljYWxFbmRSdW4oKSBjb25zdAoreworICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIC0+IEJveEl0ZXJhdG9y
IHsKKyAgICAgICAgcmV0dXJuIHsgcGF0aC5sb2dpY2FsRW5kUnVuKCkgfTsKKyAgICB9KTsKK30K
KworQm94SXRlcmF0b3IgTGluZTo6bG9naWNhbFN0YXJ0UnVuV2l0aE5vZGUoKSBjb25zdAorewor
ICAgIGZvciAoYXV0byBydW4gPSBsb2dpY2FsU3RhcnRSdW4oKTsgcnVuOyBydW4udHJhdmVyc2VO
ZXh0T25MaW5lSW5Mb2dpY2FsT3JkZXIoKSkgeworICAgICAgICBpZiAocnVuLT5yZW5kZXJlcigp
Lm5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBydW47CisgICAgfQorICAgIHJldHVybiB7IH07
Cit9CisKK0JveEl0ZXJhdG9yIExpbmU6OmxvZ2ljYWxFbmRSdW5XaXRoTm9kZSgpIGNvbnN0Cit7
CisgICAgZm9yIChhdXRvIHJ1biA9IGxvZ2ljYWxFbmRSdW4oKTsgcnVuOyBydW4udHJhdmVyc2VQ
cmV2aW91c09uTGluZUluTG9naWNhbE9yZGVyKCkpIHsKKyAgICAgICAgaWYgKHJ1bi0+cmVuZGVy
ZXIoKS5ub2RlKCkpCisgICAgICAgICAgICByZXR1cm4gcnVuOworICAgIH0KKyAgICByZXR1cm4g
eyB9OworfQorCitCb3hJdGVyYXRvciBMaW5lOjpjbG9zZXN0UnVuRm9yUG9pbnQoY29uc3QgSW50
UG9pbnQmIHBvaW50SW5Db250ZW50cywgYm9vbCBlZGl0YWJsZU9ubHkpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNsb3Nlc3RSdW5Gb3JMb2dpY2FsTGVmdFBvc2l0aW9uKGlzSG9yaXpvbnRhbCgpID8g
cG9pbnRJbkNvbnRlbnRzLngoKSA6IHBvaW50SW5Db250ZW50cy55KCksIGVkaXRhYmxlT25seSk7
Cit9CisKK0JveEl0ZXJhdG9yIExpbmU6OmNsb3Nlc3RSdW5Gb3JMb2dpY2FsTGVmdFBvc2l0aW9u
KGludCBsZWZ0UG9zaXRpb24sIGJvb2wgZWRpdGFibGVPbmx5KSBjb25zdAoreworICAgIGF1dG8g
aXNFZGl0YWJsZSA9IFsmXShhdXRvIHJ1bikgeworICAgICAgICByZXR1cm4gcnVuICYmIHJ1bi0+
cmVuZGVyZXIoKS5ub2RlKCkgJiYgcnVuLT5yZW5kZXJlcigpLm5vZGUoKS0+aGFzRWRpdGFibGVT
dHlsZSgpOworICAgIH07CisKKyAgICBhdXRvIGZpcnN0UnVuID0gdGhpcy0+Zmlyc3RSdW4oKTsK
KyAgICBhdXRvIGxhc3RSdW4gPSB0aGlzLT5sYXN0UnVuKCk7CisKKyAgICBpZiAoZmlyc3RSdW4g
IT0gbGFzdFJ1bikgeworICAgICAgICBpZiAoZmlyc3RSdW4tPmlzTGluZUJyZWFrKCkpCisgICAg
ICAgICAgICBmaXJzdFJ1biA9IGZpcnN0UnVuLT5uZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWso
KTsKKyAgICAgICAgZWxzZSBpZiAobGFzdFJ1bi0+aXNMaW5lQnJlYWsoKSkKKyAgICAgICAgICAg
IGxhc3RSdW4gPSBsYXN0UnVuLT5wcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7Cisg
ICAgfQorCisgICAgaWYgKGZpcnN0UnVuID09IGxhc3RSdW4gJiYgKCFlZGl0YWJsZU9ubHkgfHwg
aXNFZGl0YWJsZShmaXJzdFJ1bikpKQorICAgICAgICByZXR1cm4gZmlyc3RSdW47CisKKyAgICBp
ZiAoZmlyc3RSdW4gJiYgbGVmdFBvc2l0aW9uIDw9IGZpcnN0UnVuLT5sb2dpY2FsTGVmdCgpICYm
ICFmaXJzdFJ1bi0+cmVuZGVyZXIoKS5pc0xpc3RNYXJrZXIoKSAmJiAoIWVkaXRhYmxlT25seSB8
fCBpc0VkaXRhYmxlKGZpcnN0UnVuKSkpCisgICAgICAgIHJldHVybiBmaXJzdFJ1bjsKKworICAg
IGlmIChsYXN0UnVuICYmIGxlZnRQb3NpdGlvbiA+PSBsYXN0UnVuLT5sb2dpY2FsUmlnaHQoKSAm
JiAhbGFzdFJ1bi0+cmVuZGVyZXIoKS5pc0xpc3RNYXJrZXIoKSAmJiAoIWVkaXRhYmxlT25seSB8
fCBpc0VkaXRhYmxlKGxhc3RSdW4pKSkKKyAgICAgICAgcmV0dXJuIGxhc3RSdW47CisKKyAgICBh
dXRvIGNsb3Nlc3RSdW4gPSBsYXN0UnVuOworICAgIGZvciAoYXV0byBydW4gPSBmaXJzdFJ1bjsg
cnVuOyBydW4gPSBydW4udHJhdmVyc2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSkgewor
ICAgICAgICBpZiAoIXJ1bi0+cmVuZGVyZXIoKS5pc0xpc3RNYXJrZXIoKSAmJiAoIWVkaXRhYmxl
T25seSB8fCBpc0VkaXRhYmxlKHJ1bikpKSB7CisgICAgICAgICAgICBpZiAobGVmdFBvc2l0aW9u
IDwgcnVuLT5sb2dpY2FsUmlnaHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcnVuOworICAg
ICAgICAgICAgY2xvc2VzdFJ1biA9IHJ1bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBjbG9zZXN0UnVuOworfQorCitpbnQgTGluZTo6YmxvY2tEaXJlY3Rpb25Qb2ludEluTGluZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICFjb250YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzRmxpcHBl
ZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBzdGQ6Om1heCh0b3AoKSwgc2VsZWN0aW9uVG9wKCkpIDog
c3RkOjptaW4oYm90dG9tKCksIHNlbGVjdGlvbkJvdHRvbSgpKTsKK30KKworTGF5b3V0VW5pdCBM
aW5lOjpzZWxlY3Rpb25Ub3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCkuYWRqdXN0U2VsZWN0aW9uVG9wRm9yUHJlY2VkaW5n
QmxvY2soc2VsZWN0aW9uVG9wKCkpOworfQorCitMYXlvdXRVbml0IExpbmU6OnNlbGVjdGlvbkhl
aWdodEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6
Om1heDxMYXlvdXRVbml0PigwLCBzZWxlY3Rpb25Cb3R0b20oKSAtIHNlbGVjdGlvblRvcEFkanVz
dGVkRm9yUHJlY2VkaW5nQmxvY2soKSk7Cit9CisKK1JlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3Rh
dGUgTGluZTo6c2VsZWN0aW9uU3RhdGUoKSBjb25zdAoreworICAgIGF1dG8mIGJsb2NrID0gY29u
dGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGJsb2NrLnNlbGVjdGlvblN0YXRlKCkgPT0gUmVuZGVy
T2JqZWN0OjpOb25lKQorICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpOb25lOworCisgICAg
YXV0byBzdGF0ZSA9IFJlbmRlck9iamVjdDo6Tm9uZTsKKyAgICBmb3IgKGF1dG8gYm94ID0gZmly
c3RSdW4oKTsgYm94OyBib3gudHJhdmVyc2VOZXh0T25MaW5lKCkpIHsKKyAgICAgICAgYXV0byBi
b3hTdGF0ZSA9IGJveC0+c2VsZWN0aW9uU3RhdGUoKTsKKyAgICAgICAgaWYgKChib3hTdGF0ZSA9
PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpTdGFydCAmJiBzdGF0ZSA9PSBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQpCisgICAgICAgICAgICB8fCAoYm94U3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kICYmIHN0YXRlID09IFJlbmRlck9iamVj
dDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0KSkKKyAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZTo6Qm90aDsKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gUmVu
ZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZSB8fCAoKGJveFN0YXRlID09IFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0IHx8IGJveFN0YXRlID09IFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0U3RhdGU6OkVuZCkKKyAgICAgICAgICAgICYmIChzdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lIHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxp
Z2h0U3RhdGU6Okluc2lkZSkpKQorICAgICAgICAgICAgc3RhdGUgPSBib3hTdGF0ZTsKKyAgICAg
ICAgZWxzZSBpZiAoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9u
ZSAmJiBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpTdGFydCkgeworICAg
ICAgICAgICAgLy8gV2UgYXJlIHBhc3QgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLgorICAgICAg
ICAgICAgc3RhdGUgPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpCb3RoOworICAgICAg
ICB9CisgICAgICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpC
b3RoKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBzdGF0ZTsKK30KKwor
Qm94SXRlcmF0b3IgTGluZTo6Zmlyc3RTZWxlY3RlZEJveCgpIGNvbnN0Cit7CisgICAgZm9yIChh
dXRvIGJveCA9IGZpcnN0UnVuKCk7IGJveDsgYm94LnRyYXZlcnNlTmV4dE9uTGluZSgpKSB7Cisg
ICAgICAgIGlmIChib3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZTo6Tm9uZSkKKyAgICAgICAgICAgIHJldHVybiBib3g7CisgICAgfQorICAgIHJldHVy
biB7IH07Cit9CisKK0JveEl0ZXJhdG9yIExpbmU6Omxhc3RTZWxlY3RlZEJveCgpIGNvbnN0Cit7
CisgICAgZm9yIChhdXRvIGJveCA9IGxhc3RSdW4oKTsgYm94OyBib3gudHJhdmVyc2VQcmV2aW91
c09uTGluZSgpKSB7CisgICAgICAgIGlmIChib3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZSkKKyAgICAgICAgICAgIHJldHVybiBib3g7Cisg
ICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK30KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZS5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjUyZmNlNWNiN2M4NmIwZWZiYWNhMmE0NmI4YTE5OTYyNmZiNjg4NTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMaW5l
LmgKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkZvbnRCYXNlbGluZS5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZUxlZ2FjeVBh
dGguaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckxpbmVNb2Rlcm5QYXRoLmgiCisjaW5jbHVk
ZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIElubGlu
ZUl0ZXJhdG9yIHsKKworY2xhc3MgTGluZUl0ZXJhdG9yOworY2xhc3MgUGF0aEl0ZXJhdG9yOwor
Y2xhc3MgQm94SXRlcmF0b3I7CisKK3N0cnVjdCBFbmRMaW5lSXRlcmF0b3IgeyB9OworCitjbGFz
cyBMaW5lIHsKK3B1YmxpYzoKKyAgICB1c2luZyBQYXRoVmFyaWFudCA9IFZhcmlhbnQ8CisjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisgICAgICAgIExpbmVJdGVyYXRvck1v
ZGVyblBhdGgsCisjZW5kaWYKKyAgICAgICAgTGluZUl0ZXJhdG9yTGVnYWN5UGF0aAorICAgID47
CisKKyAgICBMaW5lKFBhdGhWYXJpYW50JiYpOworCisgICAgTGF5b3V0VW5pdCB0b3AoKSBjb25z
dDsKKyAgICBMYXlvdXRVbml0IGJvdHRvbSgpIGNvbnN0OworICAgIExheW91dFVuaXQgc2VsZWN0
aW9uVG9wKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3BGb3JIaXRUZXN0aW5n
KCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdDsKKyAgICBM
YXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0OworICAgIExheW91dFVuaXQgc2VsZWN0
aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpIGNvbnN0OworICAgIExheW91dFVuaXQg
c2VsZWN0aW9uSGVpZ2h0QWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpIGNvbnN0OworICAgIExh
eW91dFVuaXQgbGluZUJveFRvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgbGluZUJveEJvdHRv
bSgpIGNvbnN0OworCisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0KCkgY29uc3Q7CisgICAg
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0OworCisg
ICAgZmxvYXQgeSgpIGNvbnN0OworICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsTGVmdCgpIGNvbnN0
OworICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdDsKKyAgICBmbG9hdCBjb250
ZW50TG9naWNhbFdpZHRoKCkgY29uc3Q7CisgICAgZmxvYXQgbG9naWNhbEhlaWdodCgpIGNvbnN0
OworCisgICAgaW50IGJsb2NrRGlyZWN0aW9uUG9pbnRJbkxpbmUoKSBjb25zdDsKKworICAgIGJv
b2wgaXNIb3Jpem9udGFsKCkgY29uc3Q7CisKKyAgICBGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBl
KCkgY29uc3Q7CisKKyAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGNvbnRhaW5pbmdCbG9jaygp
IGNvbnN0OworICAgIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gqIGxlZ2FjeVJvb3RJbmxpbmVC
b3goKSBjb25zdDsKKworICAgIGJvb2wgaXNGaXJzdCgpIGNvbnN0OworCisgICAgQm94SXRlcmF0
b3IgZmlyc3RSdW4oKSBjb25zdDsKKyAgICBCb3hJdGVyYXRvciBsYXN0UnVuKCkgY29uc3Q7CisK
KyAgICBMaW5lSXRlcmF0b3IgbmV4dCgpIGNvbnN0OworICAgIExpbmVJdGVyYXRvciBwcmV2aW91
cygpIGNvbnN0OworCisgICAgQm94SXRlcmF0b3IgY2xvc2VzdFJ1bkZvclBvaW50KGNvbnN0IElu
dFBvaW50JiBwb2ludEluQ29udGVudHMsIGJvb2wgZWRpdGFibGVPbmx5KSBjb25zdDsKKyAgICBC
b3hJdGVyYXRvciBjbG9zZXN0UnVuRm9yTG9naWNhbExlZnRQb3NpdGlvbihpbnQgcG9zaXRpb24s
IGJvb2wgZWRpdGFibGVPbmx5ID0gZmFsc2UpIGNvbnN0OworCisgICAgQm94SXRlcmF0b3IgbG9n
aWNhbFN0YXJ0UnVuKCkgY29uc3Q7CisgICAgQm94SXRlcmF0b3IgbG9naWNhbEVuZFJ1bigpIGNv
bnN0OworICAgIEJveEl0ZXJhdG9yIGxvZ2ljYWxTdGFydFJ1bldpdGhOb2RlKCkgY29uc3Q7Cisg
ICAgQm94SXRlcmF0b3IgbG9naWNhbEVuZFJ1bldpdGhOb2RlKCkgY29uc3Q7CisgICAgCisgICAg
Qm94SXRlcmF0b3IgZmlyc3RTZWxlY3RlZEJveCgpIGNvbnN0OworICAgIEJveEl0ZXJhdG9yIGxh
c3RTZWxlY3RlZEJveCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMaW5l
SXRlcmF0b3I7CisKKyAgICBQYXRoVmFyaWFudCBtX3BhdGhWYXJpYW50OworfTsKKworY2xhc3Mg
TGluZUl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBMaW5lSXRlcmF0b3IoKSA6IG1fbGluZShMaW5l
SXRlcmF0b3JMZWdhY3lQYXRoIHsgbnVsbHB0ciB9KSB7IH07CisgICAgTGluZUl0ZXJhdG9yKGNv
bnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gqIHJvb3RJbmxpbmVCb3gpIDogbV9saW5lKExpbmVJdGVy
YXRvckxlZ2FjeVBhdGggeyByb290SW5saW5lQm94IH0pIHsgfTsKKyAgICBMaW5lSXRlcmF0b3Io
TGluZTo6UGF0aFZhcmlhbnQmJik7CisgICAgTGluZUl0ZXJhdG9yKGNvbnN0IExpbmUmKTsKKwor
ICAgIExpbmVJdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIHRyYXZlcnNlTmV4dCgpOyB9
CisgICAgTGluZUl0ZXJhdG9yJiB0cmF2ZXJzZU5leHQoKTsKKyAgICBMaW5lSXRlcmF0b3ImIHRy
YXZlcnNlUHJldmlvdXMoKTsKKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAhYXRFbmQoKTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExpbmVJdGVy
YXRvciYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBMaW5lSXRlcmF0b3ImIG90
aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KEVuZExpbmVJdGVyYXRvcikgY29uc3QgeyByZXR1cm4gYXRFbmQoKTsgfQorICAgIGJv
b2wgb3BlcmF0b3IhPShFbmRMaW5lSXRlcmF0b3IpIGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9
CisKKyAgICBjb25zdCBMaW5lJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX2xpbmU7IH0K
KyAgICBjb25zdCBMaW5lKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fbGluZTsgfQor
CisgICAgYm9vbCBhdEVuZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIExpbmUgbV9saW5lOwor
fTsKKworTGluZUl0ZXJhdG9yIGZpcnN0TGluZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsK
K0xpbmVJdGVyYXRvciBsYXN0TGluZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKKworLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW5saW5l
IExpbmU6OkxpbmUoUGF0aFZhcmlhbnQmJiBwYXRoKQorICAgIDogbV9wYXRoVmFyaWFudChXVEZN
b3ZlKHBhdGgpKQoreworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBMaW5lOjp0b3AoKSBjb25zdAor
eworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8m
IHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgudG9wKCk7CisgICAgfSk7Cit9CisKK2lubGlu
ZSBMYXlvdXRVbml0IExpbmU6OmJvdHRvbSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgeworICAgICAgICByZXR1
cm4gcGF0aC5ib3R0b20oKTsKKyAgICB9KTsKK30KKworaW5saW5lIExheW91dFVuaXQgTGluZTo6
c2VsZWN0aW9uVG9wKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhW
YXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLnNlbGVj
dGlvblRvcCgpOworICAgIH0pOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBMaW5lOjpzZWxlY3Rp
b25Ub3BGb3JIaXRUZXN0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRo
LnNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcoKTsKKyAgICB9KTsKK30KKworaW5saW5lIExheW91
dFVuaXQgTGluZTo6c2VsZWN0aW9uQm90dG9tKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CisgICAgICAgIHJl
dHVybiBwYXRoLnNlbGVjdGlvbkJvdHRvbSgpOworICAgIH0pOworfQorCitpbmxpbmUgTGF5b3V0
VW5pdCBMaW5lOjpzZWxlY3Rpb25IZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBzZWxlY3Rp
b25Cb3R0b20oKSAtIHNlbGVjdGlvblRvcCgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBMaW5l
OjpsaW5lQm94VG9wKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhW
YXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmxpbmVC
b3hUb3AoKTsKKyAgICB9KTsKK30KKworaW5saW5lIExheW91dFVuaXQgTGluZTo6bGluZUJveEJv
dHRvbSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwg
W10oY29uc3QgYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5saW5lQm94Qm90dG9t
KCk7CisgICAgfSk7Cit9CisKK2lubGluZSBMYXlvdXRSZWN0IExpbmU6OnNlbGVjdGlvblJlY3Qo
KSBjb25zdAoreworICAgIHJldHVybiB7IExheW91dFBvaW50IHsgY29udGVudExvZ2ljYWxMZWZ0
KCksIHNlbGVjdGlvblRvcCgpIH0sIExheW91dFBvaW50IHsgY29udGVudExvZ2ljYWxSaWdodCgp
LCBzZWxlY3Rpb25Cb3R0b20oKSB9IH07Cit9CisKK2lubGluZSBmbG9hdCBMaW5lOjp5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBh
dXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLnkoKTsKKyAgICB9KTsKK30KKworaW5s
aW5lIGZsb2F0IExpbmU6OmNvbnRlbnRMb2dpY2FsTGVmdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgeworICAg
ICAgICByZXR1cm4gcGF0aC5jb250ZW50TG9naWNhbExlZnQoKTsKKyAgICB9KTsKK30KKworaW5s
aW5lIGZsb2F0IExpbmU6OmNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdAoreworICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKKyAg
ICAgICAgcmV0dXJuIHBhdGguY29udGVudExvZ2ljYWxSaWdodCgpOworICAgIH0pOworfQorCitp
bmxpbmUgZmxvYXQgTGluZTo6Y29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSAtIGNvbnRlbnRMb2dpY2FsTGVmdCgpOworfQorCitp
bmxpbmUgZmxvYXQgTGluZTo6bG9naWNhbEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgeworICAgICAg
ICByZXR1cm4gcGF0aC5sb2dpY2FsSGVpZ2h0KCk7CisgICAgfSk7Cit9CisKK2lubGluZSBib29s
IExpbmU6OmlzSG9yaXpvbnRhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
bV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0
aC5pc0hvcml6b250YWwoKTsKKyAgICB9KTsKK30KKworaW5saW5lIEZvbnRCYXNlbGluZSBMaW5l
OjpiYXNlbGluZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0
aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguYmFz
ZWxpbmVUeXBlKCk7CisgICAgfSk7Cit9CisKK2lubGluZSBjb25zdCBSZW5kZXJCbG9ja0Zsb3cm
IExpbmU6OmNvbnRhaW5pbmdCbG9jaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgLT4gY29uc3QgUmVuZGVyQmxv
Y2tGbG93JiB7CisgICAgICAgIHJldHVybiBwYXRoLmNvbnRhaW5pbmdCbG9jaygpOworICAgIH0p
OworfQorCitpbmxpbmUgY29uc3QgTGVnYWN5Um9vdElubGluZUJveCogTGluZTo6bGVnYWN5Um9v
dElubGluZUJveCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFy
aWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5sZWdhY3lS
b290SW5saW5lQm94KCk7CisgICAgfSk7Cit9CisKK2lubGluZSBib29sIExpbmU6OmlzRmlyc3Qo
KSBjb25zdAoreworICAgIHJldHVybiAhcHJldmlvdXMoKTsKK30KKworfQorfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMaW5l
TGVnYWN5UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0
ZXJhdG9yTGluZUxlZ2FjeVBhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTM4ZTUxN2NiMTM1ZDQ5MzQ0OTNj
OWQ4ODc1YWFjYTM0YzU5ZjIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZUxlZ2FjeVBhdGguaApAQCAtMCwwICsx
LDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW5saW5lSXRl
cmF0b3JCb3hMZWdhY3lQYXRoLmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVD
b250ZW50LmgiCisjaW5jbHVkZSAiTGVnYWN5Um9vdElubGluZUJveC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CituYW1lc3BhY2UgSW5saW5lSXRlcmF0b3IgeworCitjbGFzcyBMaW5lSXRlcmF0
b3JMZWdhY3lQYXRoIHsKK3B1YmxpYzoKKyAgICBMaW5lSXRlcmF0b3JMZWdhY3lQYXRoKGNvbnN0
IExlZ2FjeVJvb3RJbmxpbmVCb3gqIHJvb3RJbmxpbmVCb3gpCisgICAgICAgIDogbV9yb290SW5s
aW5lQm94KHJvb3RJbmxpbmVCb3gpCisgICAgeworICAgIH0KKyAgICBMaW5lSXRlcmF0b3JMZWdh
Y3lQYXRoKExpbmVJdGVyYXRvckxlZ2FjeVBhdGgmJikgPSBkZWZhdWx0OworICAgIExpbmVJdGVy
YXRvckxlZ2FjeVBhdGgoY29uc3QgTGluZUl0ZXJhdG9yTGVnYWN5UGF0aCYpID0gZGVmYXVsdDsK
KyAgICBMaW5lSXRlcmF0b3JMZWdhY3lQYXRoJiBvcGVyYXRvcj0oY29uc3QgTGluZUl0ZXJhdG9y
TGVnYWN5UGF0aCYpID0gZGVmYXVsdDsKKyAgICBMaW5lSXRlcmF0b3JMZWdhY3lQYXRoJiBvcGVy
YXRvcj0oTGluZUl0ZXJhdG9yTGVnYWN5UGF0aCYmKSA9IGRlZmF1bHQ7CisKKyAgICBMYXlvdXRV
bml0IHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bGluZVRvcCgpOyB9Cisg
ICAgTGF5b3V0VW5pdCBib3R0b20oKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxp
bmVCb3R0b20oKTsgfQorICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wKCkgY29uc3QgeyByZXR1
cm4gbV9yb290SW5saW5lQm94LT5zZWxlY3Rpb25Ub3AoKTsgfQorICAgIExheW91dFVuaXQgc2Vs
ZWN0aW9uVG9wRm9ySGl0VGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+
c2VsZWN0aW9uVG9wKExlZ2FjeVJvb3RJbmxpbmVCb3g6OkZvckhpdFRlc3Rpbmc6Olllcyk7IH0K
KyAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElu
bGluZUJveC0+c2VsZWN0aW9uQm90dG9tKCk7IH0KKyAgICBMYXlvdXRVbml0IGxpbmVCb3hUb3Ao
KSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxpbmVCb3hUb3AoKTsgfQorICAgIExh
eW91dFVuaXQgbGluZUJveEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+
bGluZUJveEJvdHRvbSgpOyB9CisKKyAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV9yb290
SW5saW5lQm94LT55KCk7IH0KKyAgICBmbG9hdCBjb250ZW50TG9naWNhbExlZnQoKSBjb25zdCB7
IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxvZ2ljYWxMZWZ0KCk7IH0KKyAgICBmbG9hdCBjb250
ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5sb2dpY2Fs
UmlnaHQoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3Jv
b3RJbmxpbmVCb3gtPmxvZ2ljYWxIZWlnaHQoKTsgfQorICAgIGJvb2wgaXNIb3Jpem9udGFsKCkg
Y29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5pc0hvcml6b250YWwoKTsgfQorICAgIEZv
bnRCYXNlbGluZSBiYXNlbGluZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gt
PmJhc2VsaW5lVHlwZSgpOyB9CisKKyAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGNvbnRhaW5p
bmdCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+YmxvY2tGbG93KCk7IH0K
KyAgICBjb25zdCBMZWdhY3lSb290SW5saW5lQm94KiBsZWdhY3lSb290SW5saW5lQm94KCkgY29u
c3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94OyB9CisKKyAgICB2b2lkIHRyYXZlcnNlTmV4dCgp
CisgICAgeworICAgICAgICBtX3Jvb3RJbmxpbmVCb3ggPSBtX3Jvb3RJbmxpbmVCb3gtPm5leHRS
b290Qm94KCk7CisgICAgfQorCisgICAgdm9pZCB0cmF2ZXJzZVByZXZpb3VzKCkKKyAgICB7Cisg
ICAgICAgIG1fcm9vdElubGluZUJveCA9IG1fcm9vdElubGluZUJveC0+cHJldlJvb3RCb3goKTsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZUl0ZXJhdG9yTGVnYWN5UGF0
aCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveCA9PSBvdGhlci5tX3Jvb3RJ
bmxpbmVCb3g7IH0KKworICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9yb290SW5s
aW5lQm94OyB9CisKKyAgICBCb3hJdGVyYXRvckxlZ2FjeVBhdGggZmlyc3RSdW4oKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHsgbV9yb290SW5saW5lQm94LT5maXJzdExlYWZEZXNjZW5k
YW50KCkgfTsKKyAgICB9CisKKyAgICBCb3hJdGVyYXRvckxlZ2FjeVBhdGggbGFzdFJ1bigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4geyBtX3Jvb3RJbmxpbmVCb3gtPmxhc3RMZWFmRGVz
Y2VuZGFudCgpIH07CisgICAgfQorCisKKyAgICBCb3hJdGVyYXRvckxlZ2FjeVBhdGggbG9naWNh
bFN0YXJ0UnVuKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB7ICptX3Jvb3RJbmxpbmVC
b3gsIEJveEl0ZXJhdG9yTGVnYWN5UGF0aDo6TG9naWNhbE9yZGVyOjpTdGFydCB9OworICAgIH0K
KworICAgIEJveEl0ZXJhdG9yTGVnYWN5UGF0aCBsb2dpY2FsRW5kUnVuKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiB7ICptX3Jvb3RJbmxpbmVCb3gsIEJveEl0ZXJhdG9yTGVnYWN5UGF0
aDo6TG9naWNhbE9yZGVyOjpFbmQgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgTGVn
YWN5Um9vdElubGluZUJveCogbV9yb290SW5saW5lQm94OworfTsKKworfQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZU1v
ZGVyblBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVy
YXRvckxpbmVNb2Rlcm5QYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2QzODc5YjBhNWU1ODRiNjcwYTRkODI5
OWI3NWI0MTE2NmRmMWI3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxpbmVNb2Rlcm5QYXRoLmgKQEAgLTAsMCArMSwx
NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRo
LmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmgiCisjaW5jbHVk
ZSAiUmVuZGVyQmxvY2tGbG93LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBJ
bmxpbmVJdGVyYXRvciB7CisKK2NsYXNzIEJveEl0ZXJhdG9yTW9kZXJuUGF0aDsKKworY2xhc3Mg
TGluZUl0ZXJhdG9yTW9kZXJuUGF0aCB7CitwdWJsaWM6CisgICAgTGluZUl0ZXJhdG9yTW9kZXJu
UGF0aChjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVu
dCwgc2l6ZV90IGxpbmVJbmRleCkKKyAgICAgICAgOiBtX2lubGluZUNvbnRlbnQoJmlubGluZUNv
bnRlbnQpCisgICAgICAgICwgbV9saW5lSW5kZXgobGluZUluZGV4KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGxpbmVJbmRleCA8PSBsaW5lcygpLnNpemUoKSk7CisgICAgfQorICAgIExpbmVJdGVy
YXRvck1vZGVyblBhdGgoTGluZUl0ZXJhdG9yTW9kZXJuUGF0aCYmKSA9IGRlZmF1bHQ7CisgICAg
TGluZUl0ZXJhdG9yTW9kZXJuUGF0aChjb25zdCBMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoJikgPSBk
ZWZhdWx0OworICAgIExpbmVJdGVyYXRvck1vZGVyblBhdGgmIG9wZXJhdG9yPShjb25zdCBMaW5l
SXRlcmF0b3JNb2Rlcm5QYXRoJikgPSBkZWZhdWx0OworICAgIExpbmVJdGVyYXRvck1vZGVyblBh
dGgmIG9wZXJhdG9yPShMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoJiYpID0gZGVmYXVsdDsKKworICAg
IExheW91dFVuaXQgdG9wKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Um91
bmQobGluZSgpLmVuY2xvc2luZ0NvbnRlbnRUb3AoKSk7IH0KKyAgICBMYXlvdXRVbml0IGJvdHRv
bSgpIGNvbnN0IHsgcmV0dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdFJvdW5kKGxpbmUoKS5lbmNs
b3NpbmdDb250ZW50Qm90dG9tKCkpOyB9CisgICAgTGF5b3V0VW5pdCBsaW5lQm94VG9wKCkgY29u
c3QgeyByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Um91bmQobGluZSgpLmxpbmVCb3hUb3Ao
KSk7IH0KKyAgICBMYXlvdXRVbml0IGxpbmVCb3hCb3R0b20oKSBjb25zdCB7IHJldHVybiBMYXlv
dXRVbml0Ojpmcm9tRmxvYXRSb3VuZChsaW5lKCkubGluZUJveEJvdHRvbSgpKTsgfQorCisgICAg
TGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AoKSBjb25zdCB7IHJldHVybiAhbV9saW5lSW5kZXggPyB0
b3AoKSA6IExpbmVJdGVyYXRvck1vZGVyblBhdGgoKm1faW5saW5lQ29udGVudCwgbV9saW5lSW5k
ZXggLSAxKS5zZWxlY3Rpb25Cb3R0b20oKTsgfQorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNv
bnRhaW5pbmdCbG9jaygpLmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSBvZmZzZXQgYWZ0ZXIgcmV0
aXJpbmcgbGVnYWN5IGxpbmUgbGF5b3V0LiBJdCBhbHNvIHJlcXVpcmVzIGNoYW5nZXMgaW4gUmVu
ZGVyVGV4dDo6cG9zaXRpb25Gb3JQb2ludCB0byBmaW5kIHRoZSBmaXJzdCBsaW5lIHdpdGggb2Zm
c2V0LgorICAgIC8vIC0gdGhlICJiZWZvcmUiIHZhbHVlIGlzIGFscmVhZHkgZmFjdG9yZWQgaW4g
dG8gdGhlIGxpbmUgb2Zmc2V0CisgICAgLy8gLSB0aGlzIGxvZ2ljIG5lZ2F0ZXMgdGhlIGZpcnN0
IGxpbmUncyBuYXR1cmFsIG9mZnNldCAoZS5nLiBibG9jayBoYXMgbm8gYm9yZGVyL3BhZGRpbmcg
YnV0IHRoZSBmaXJzdCBsaW5lIGhhcyBhIGNvbXB1dGVkIG9mZnNldCkuCisgICAgTGF5b3V0VW5p
dCBzZWxlY3Rpb25Ub3BGb3JIaXRUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gIW1fbGluZUluZGV4
ID8gY29udGFpbmluZ0Jsb2NrKCkuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpIDogc2VsZWN0aW9u
VG9wKCk7IH07CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBvciByZXBsYWNlLgorICAgIExheW91
dFVuaXQgc2VsZWN0aW9uQm90dG9tKCkgY29uc3QgeyByZXR1cm4gYm90dG9tKCk7IH0KKworICAg
IGZsb2F0IGNvbnRlbnRMb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGxpbmUoKS5saW5lQm94
TGVmdCgpICsgbGluZSgpLmNvbnRlbnRMZWZ0KCk7IH0KKyAgICBmbG9hdCBjb250ZW50TG9naWNh
bFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29udGVudExvZ2ljYWxMZWZ0KCkgKyBsaW5lKCkuY29u
dGVudFdpZHRoKCk7IH0KKyAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbGluZUJveFRvcCgp
OyB9CisgICAgZmxvYXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxpbmVCb3hCb3R0
b20oKSAtIGxpbmVCb3hUb3AoKTsgfQorICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUoKSBjb25zdCB7IHJl
dHVybiBBbHBoYWJldGljQmFzZWxpbmU7IH0KKworICAgIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYg
Y29udGFpbmluZ0Jsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50LT5jb250YWlu
aW5nQmxvY2soKTsgfQorICAgIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gqIGxlZ2FjeVJvb3RJ
bmxpbmVCb3goKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICB2b2lkIHRyYXZlcnNl
TmV4dCgpCisgICAgeworICAgICAgICBBU1NFUlQoIWF0RW5kKCkpOworCisgICAgICAgICsrbV9s
aW5lSW5kZXg7CisgICAgfQorCisgICAgdm9pZCB0cmF2ZXJzZVByZXZpb3VzKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghYXRFbmQoKSk7CisKKyAgICAgICAgaWYgKCFtX2xpbmVJbmRleCkgewor
ICAgICAgICAgICAgc2V0QXRFbmQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIC0tbV9saW5lSW5kZXg7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IExpbmVJdGVyYXRvck1vZGVyblBhdGgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lubGlu
ZUNvbnRlbnQgPT0gb3RoZXIubV9pbmxpbmVDb250ZW50ICYmIG1fbGluZUluZGV4ID09IG90aGVy
Lm1fbGluZUluZGV4OyB9CisKKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9saW5l
SW5kZXggPT0gbGluZXMoKS5zaXplKCk7IH0KKworICAgIEJveEl0ZXJhdG9yTW9kZXJuUGF0aCBm
aXJzdFJ1bigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWxpbmUoKS5ib3hDb3VudCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHsgKm1faW5saW5lQ29udGVudCB9OworICAgICAgICBhdXRvIHJ1
bkl0ZXJhdG9yID0gQm94SXRlcmF0b3JNb2Rlcm5QYXRoIHsgKm1faW5saW5lQ29udGVudCwgbGlu
ZSgpLmZpcnN0Qm94SW5kZXgoKSB9OworICAgICAgICBpZiAocnVuSXRlcmF0b3IuYm94KCkuaXNJ
bmxpbmVCb3goKSkKKyAgICAgICAgICAgIHJ1bkl0ZXJhdG9yLnRyYXZlcnNlTmV4dE9uTGluZSgp
OworICAgICAgICByZXR1cm4gcnVuSXRlcmF0b3I7CisgICAgfQorCisgICAgQm94SXRlcmF0b3JN
b2Rlcm5QYXRoIGxhc3RSdW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBib3hDb3VudCA9
IGxpbmUoKS5ib3hDb3VudCgpOworICAgICAgICBpZiAoIWJveENvdW50KQorICAgICAgICAgICAg
cmV0dXJuIHsgKm1faW5saW5lQ29udGVudCB9OworICAgICAgICBhdXRvIHJ1bkl0ZXJhdG9yID0g
Qm94SXRlcmF0b3JNb2Rlcm5QYXRoIHsgKm1faW5saW5lQ29udGVudCwgbGluZSgpLmZpcnN0Qm94
SW5kZXgoKSArIGJveENvdW50IC0gMSB9OworICAgICAgICBpZiAocnVuSXRlcmF0b3IuYm94KCku
aXNJbmxpbmVCb3goKSkKKyAgICAgICAgICAgIHJ1bkl0ZXJhdG9yLnRyYXZlcnNlUHJldmlvdXNP
bkxpbmUoKTsKKyAgICAgICAgcmV0dXJuIHJ1bkl0ZXJhdG9yOworICAgIH0KKworICAgIEJveEl0
ZXJhdG9yTW9kZXJuUGF0aCBsb2dpY2FsU3RhcnRSdW4oKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZpcnN0UnVuKCk7CisgICAgfQorCisgICAgQm94SXRlcmF0b3JNb2Rlcm5QYXRoIGxv
Z2ljYWxFbmRSdW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxhc3RSdW4oKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRBdEVuZCgpIHsgbV9saW5lSW5kZXggPSBsaW5l
cygpLnNpemUoKTsgfQorCisgICAgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRl
bnQ6OkxpbmVzJiBsaW5lcygpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGVudC0+bGluZXM7
IH0KKyAgICBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZSYgbGluZSgpIGNvbnN0IHsgcmV0
dXJuIGxpbmVzKClbbV9saW5lSW5kZXhdOyB9CisKKyAgICBSZWZQdHI8Y29uc3QgTGF5b3V0SW50
ZWdyYXRpb246OklubGluZUNvbnRlbnQ+IG1faW5saW5lQ29udGVudDsKKyAgICBzaXplX3QgbV9s
aW5lSW5kZXggeyAwIH07Cit9OworCit9Cit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3Jh
dGlvbklubGluZUNvbnRlbnQuY3BwCmluZGV4IDM0MGRhMzJmMjRiNDdiMTQwOWYzMzA4Zjk4NDFk
YjNkMmZhM2JlZWQuLmE4NjQ1OGU1YTZkZDdlMzdhMTlmNDI3MzQ0MTI5MjA3YzhhNWMxNjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3Jh
dGlvbklubGluZUNvbnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQuY3BwCkBAIC0yOCw4ICsyOCw4IEBA
CiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIklu
bGluZUl0ZXJhdG9yQm94LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0
LmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2luY2x1ZGUg
IlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJUZXh0UGFpbnRlci5oIgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25MaW5lSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZmJiM2U1OThkZGNiZmVjMGIwYWYwNmVkNTgwOWUxNGQ1ZDYzNzAxNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKLQotI2luY2x1
ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxheW91dC5oIgotI2luY2x1ZGUgIkxheW91dEludGVn
cmF0aW9uUnVuSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dEludGVncmF0aW9uIHsKLQotTGluZUl0
ZXJhdG9yOjpMaW5lSXRlcmF0b3IoUGF0aExpbmU6OlBhdGhWYXJpYW50JiYgcGF0aFZhcmlhbnQp
Ci0gICAgOiBtX2xpbmUoV1RGTW92ZShwYXRoVmFyaWFudCkpCi17Ci19Ci0KLUxpbmVJdGVyYXRv
cjo6TGluZUl0ZXJhdG9yKGNvbnN0IFBhdGhMaW5lJiBsaW5lKQotICAgIDogbV9saW5lKGxpbmUp
Ci17Ci19Ci0KLWJvb2wgTGluZUl0ZXJhdG9yOjphdEVuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9saW5lLm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAg
ICAgICAgcmV0dXJuIHBhdGguYXRFbmQoKTsKLSAgICB9KTsKLX0KLQotTGluZUl0ZXJhdG9yJiBM
aW5lSXRlcmF0b3I6OnRyYXZlcnNlTmV4dCgpCi17Ci0gICAgV1RGOjpzd2l0Y2hPbihtX2xpbmUu
bV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC50cmF2
ZXJzZU5leHQoKTsKLSAgICB9KTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUxpbmVJdGVyYXRv
ciYgTGluZUl0ZXJhdG9yOjp0cmF2ZXJzZVByZXZpb3VzKCkKLXsKLSAgICBXVEY6OnN3aXRjaE9u
KG1fbGluZS5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBw
YXRoLnRyYXZlcnNlUHJldmlvdXMoKTsKLSAgICB9KTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0K
LWJvb2wgTGluZUl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IExpbmVJdGVyYXRvciYgb3RoZXIp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGluZS5tX3BhdGhWYXJpYW50ID09IG90aGVyLm1fbGlu
ZS5tX3BhdGhWYXJpYW50OwotfQotCi1MaW5lSXRlcmF0b3IgZmlyc3RMaW5lRm9yKGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYgZmxvdykKLXsKLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKLSAgICBpZiAoYXV0byogbGluZUxheW91dCA9IGZsb3cubW9kZXJuTGluZUxheW91dCgp
KQotICAgICAgICByZXR1cm4gbGluZUxheW91dC0+Zmlyc3RMaW5lKCk7Ci0jZW5kaWYKLQotICAg
IHJldHVybiB7IExpbmVJdGVyYXRvckxlZ2FjeVBhdGggeyBmbG93LmZpcnN0Um9vdEJveCgpIH0g
fTsKLX0KLQotTGluZUl0ZXJhdG9yIGxhc3RMaW5lRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYg
ZmxvdykKLXsKLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLSAgICBpZiAo
YXV0byogbGluZUxheW91dCA9IGZsb3cubW9kZXJuTGluZUxheW91dCgpKQotICAgICAgICByZXR1
cm4gbGluZUxheW91dC0+bGFzdExpbmUoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHsgTGluZUl0
ZXJhdG9yTGVnYWN5UGF0aCB7IGZsb3cubGFzdFJvb3RCb3goKSB9IH07Ci19Ci0KLUxpbmVJdGVy
YXRvciBQYXRoTGluZTo6bmV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExpbmVJdGVyYXRvcigq
dGhpcykudHJhdmVyc2VOZXh0KCk7Ci19Ci0KLUxpbmVJdGVyYXRvciBQYXRoTGluZTo6cHJldmlv
dXMoKSBjb25zdAotewotICAgIHJldHVybiBMaW5lSXRlcmF0b3IoKnRoaXMpLnRyYXZlcnNlUHJl
dmlvdXMoKTsKLX0KLQotUnVuSXRlcmF0b3IgUGF0aExpbmU6OmZpcnN0UnVuKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSAt
PiBSdW5JdGVyYXRvciB7Ci0gICAgICAgIHJldHVybiB7IHBhdGguZmlyc3RSdW4oKSB9OwotICAg
IH0pOwotfQotCi1SdW5JdGVyYXRvciBQYXRoTGluZTo6bGFzdFJ1bigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgLT4gUnVu
SXRlcmF0b3IgewotICAgICAgICByZXR1cm4geyBwYXRoLmxhc3RSdW4oKSB9OwotICAgIH0pOwot
fQotCi1SdW5JdGVyYXRvciBQYXRoTGluZTo6bG9naWNhbFN0YXJ0UnVuKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSAtPiBS
dW5JdGVyYXRvciB7Ci0gICAgICAgIHJldHVybiB7IHBhdGgubG9naWNhbFN0YXJ0UnVuKCkgfTsK
LSAgICB9KTsKLX0KLQotUnVuSXRlcmF0b3IgUGF0aExpbmU6OmxvZ2ljYWxFbmRSdW4oKSBjb25z
dAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBh
dGgpIC0+IFJ1bkl0ZXJhdG9yIHsKLSAgICAgICAgcmV0dXJuIHsgcGF0aC5sb2dpY2FsRW5kUnVu
KCkgfTsKLSAgICB9KTsKLX0KLQotUnVuSXRlcmF0b3IgUGF0aExpbmU6OmxvZ2ljYWxTdGFydFJ1
bldpdGhOb2RlKCkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8gcnVuID0gbG9naWNhbFN0YXJ0UnVu
KCk7IHJ1bjsgcnVuLnRyYXZlcnNlTmV4dE9uTGluZUluTG9naWNhbE9yZGVyKCkpIHsKLSAgICAg
ICAgaWYgKHJ1bi0+cmVuZGVyZXIoKS5ub2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gcnVuOwot
ICAgIH0KLSAgICByZXR1cm4geyB9OwotfQotCi1SdW5JdGVyYXRvciBQYXRoTGluZTo6bG9naWNh
bEVuZFJ1bldpdGhOb2RlKCkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8gcnVuID0gbG9naWNhbEVu
ZFJ1bigpOyBydW47IHJ1bi50cmF2ZXJzZVByZXZpb3VzT25MaW5lSW5Mb2dpY2FsT3JkZXIoKSkg
ewotICAgICAgICBpZiAocnVuLT5yZW5kZXJlcigpLm5vZGUoKSkKLSAgICAgICAgICAgIHJldHVy
biBydW47Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19Ci0KLVJ1bkl0ZXJhdG9yIFBhdGhMaW5l
OjpjbG9zZXN0UnVuRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250ZW50cywgYm9v
bCBlZGl0YWJsZU9ubHkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNsb3Nlc3RSdW5Gb3JMb2dpY2Fs
TGVmdFBvc2l0aW9uKGlzSG9yaXpvbnRhbCgpID8gcG9pbnRJbkNvbnRlbnRzLngoKSA6IHBvaW50
SW5Db250ZW50cy55KCksIGVkaXRhYmxlT25seSk7Ci19Ci0KLVJ1bkl0ZXJhdG9yIFBhdGhMaW5l
OjpjbG9zZXN0UnVuRm9yTG9naWNhbExlZnRQb3NpdGlvbihpbnQgbGVmdFBvc2l0aW9uLCBib29s
IGVkaXRhYmxlT25seSkgY29uc3QKLXsKLSAgICBhdXRvIGlzRWRpdGFibGUgPSBbJl0oYXV0byBy
dW4pIHsKLSAgICAgICAgcmV0dXJuIHJ1biAmJiBydW4tPnJlbmRlcmVyKCkubm9kZSgpICYmIHJ1
bi0+cmVuZGVyZXIoKS5ub2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKTsKLSAgICB9OwotCi0gICAg
YXV0byBmaXJzdFJ1biA9IHRoaXMtPmZpcnN0UnVuKCk7Ci0gICAgYXV0byBsYXN0UnVuID0gdGhp
cy0+bGFzdFJ1bigpOwotCi0gICAgaWYgKGZpcnN0UnVuICE9IGxhc3RSdW4pIHsKLSAgICAgICAg
aWYgKGZpcnN0UnVuLT5pc0xpbmVCcmVhaygpKQotICAgICAgICAgICAgZmlyc3RSdW4gPSBmaXJz
dFJ1bi0+bmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7Ci0gICAgICAgIGVsc2UgaWYgKGxh
c3RSdW4tPmlzTGluZUJyZWFrKCkpCi0gICAgICAgICAgICBsYXN0UnVuID0gbGFzdFJ1bi0+cHJl
dmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOwotICAgIH0KLQotICAgIGlmIChmaXJzdFJ1
biA9PSBsYXN0UnVuICYmICghZWRpdGFibGVPbmx5IHx8IGlzRWRpdGFibGUoZmlyc3RSdW4pKSkK
LSAgICAgICAgcmV0dXJuIGZpcnN0UnVuOwotCi0gICAgaWYgKGZpcnN0UnVuICYmIGxlZnRQb3Np
dGlvbiA8PSBmaXJzdFJ1bi0+bG9naWNhbExlZnQoKSAmJiAhZmlyc3RSdW4tPnJlbmRlcmVyKCku
aXNMaXN0TWFya2VyKCkgJiYgKCFlZGl0YWJsZU9ubHkgfHwgaXNFZGl0YWJsZShmaXJzdFJ1bikp
KQotICAgICAgICByZXR1cm4gZmlyc3RSdW47Ci0KLSAgICBpZiAobGFzdFJ1biAmJiBsZWZ0UG9z
aXRpb24gPj0gbGFzdFJ1bi0+bG9naWNhbFJpZ2h0KCkgJiYgIWxhc3RSdW4tPnJlbmRlcmVyKCku
aXNMaXN0TWFya2VyKCkgJiYgKCFlZGl0YWJsZU9ubHkgfHwgaXNFZGl0YWJsZShsYXN0UnVuKSkp
Ci0gICAgICAgIHJldHVybiBsYXN0UnVuOwotCi0gICAgYXV0byBjbG9zZXN0UnVuID0gbGFzdFJ1
bjsKLSAgICBmb3IgKGF1dG8gcnVuID0gZmlyc3RSdW47IHJ1bjsgcnVuID0gcnVuLnRyYXZlcnNl
TmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkpIHsKLSAgICAgICAgaWYgKCFydW4tPnJlbmRl
cmVyKCkuaXNMaXN0TWFya2VyKCkgJiYgKCFlZGl0YWJsZU9ubHkgfHwgaXNFZGl0YWJsZShydW4p
KSkgewotICAgICAgICAgICAgaWYgKGxlZnRQb3NpdGlvbiA8IHJ1bi0+bG9naWNhbFJpZ2h0KCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bjsKLSAgICAgICAgICAgIGNsb3Nlc3RSdW4gPSBy
dW47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY2xvc2VzdFJ1bjsKLX0KLQotaW50
IFBhdGhMaW5lOjpibG9ja0RpcmVjdGlvblBvaW50SW5MaW5lKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gIWNvbnRhaW5pbmdCbG9jaygpLnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSA/IHN0ZDo6bWF4KHRvcCgpLCBzZWxlY3Rpb25Ub3AoKSkgOiBzdGQ6Om1pbihib3R0b20oKSwg
c2VsZWN0aW9uQm90dG9tKCkpOwotfQotCi1MYXlvdXRVbml0IFBhdGhMaW5lOjpzZWxlY3Rpb25U
b3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29udGFp
bmluZ0Jsb2NrKCkuYWRqdXN0U2VsZWN0aW9uVG9wRm9yUHJlY2VkaW5nQmxvY2soc2VsZWN0aW9u
VG9wKCkpOwotfQotCi1MYXlvdXRVbml0IFBhdGhMaW5lOjpzZWxlY3Rpb25IZWlnaHRBZGp1c3Rl
ZEZvclByZWNlZGluZ0Jsb2NrKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0
VW5pdD4oMCwgc2VsZWN0aW9uQm90dG9tKCkgLSBzZWxlY3Rpb25Ub3BBZGp1c3RlZEZvclByZWNl
ZGluZ0Jsb2NrKCkpOwotfQotCi1SZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIFBhdGhMaW5l
OjpzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0Ci17Ci0gICAgYXV0byYgYmxvY2sgPSBjb250YWluaW5n
QmxvY2soKTsKLSAgICBpZiAoYmxvY2suc2VsZWN0aW9uU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6
Ok5vbmUpCi0gICAgICAgIHJldHVybiBSZW5kZXJPYmplY3Q6Ok5vbmU7Ci0KLSAgICBhdXRvIHN0
YXRlID0gUmVuZGVyT2JqZWN0OjpOb25lOwotICAgIGZvciAoYXV0byBib3ggPSBmaXJzdFJ1bigp
OyBib3g7IGJveC50cmF2ZXJzZU5leHRPbkxpbmUoKSkgewotICAgICAgICBhdXRvIGJveFN0YXRl
ID0gYm94LT5zZWxlY3Rpb25TdGF0ZSgpOwotICAgICAgICBpZiAoKGJveFN0YXRlID09IFJlbmRl
ck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0ICYmIHN0YXRlID09IFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0U3RhdGU6OkVuZCkKLSAgICAgICAgICAgIHx8IChib3hTdGF0ZSA9PSBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQgJiYgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZTo6U3RhcnQpKQotICAgICAgICAgICAgc3RhdGUgPSBSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodFN0YXRlOjpCb3RoOwotICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lIHx8ICgoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpI
aWdobGlnaHRTdGF0ZTo6U3RhcnQgfHwgYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZTo6RW5kKQotICAgICAgICAgICAgJiYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGln
aGxpZ2h0U3RhdGU6Ok5vbmUgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0
ZTo6SW5zaWRlKSkpCi0gICAgICAgICAgICBzdGF0ZSA9IGJveFN0YXRlOwotICAgICAgICBlbHNl
IGlmIChib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lICYmIHN0
YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0KSB7Ci0gICAgICAgICAg
ICAvLyBXZSBhcmUgcGFzdCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24uCi0gICAgICAgICAgICBz
dGF0ZSA9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkJvdGg7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkJvdGgpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXRlOwotfQotCi1SdW5JdGVy
YXRvciBQYXRoTGluZTo6Zmlyc3RTZWxlY3RlZEJveCgpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRv
IGJveCA9IGZpcnN0UnVuKCk7IGJveDsgYm94LnRyYXZlcnNlTmV4dE9uTGluZSgpKSB7Ci0gICAg
ICAgIGlmIChib3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRT
dGF0ZTo6Tm9uZSkKLSAgICAgICAgICAgIHJldHVybiBib3g7Ci0gICAgfQotICAgIHJldHVybiB7
IH07Ci19Ci0KLVJ1bkl0ZXJhdG9yIFBhdGhMaW5lOjpsYXN0U2VsZWN0ZWRCb3goKSBjb25zdAot
ewotICAgIGZvciAoYXV0byBib3ggPSBsYXN0UnVuKCk7IGJveDsgYm94LnRyYXZlcnNlUHJldmlv
dXNPbkxpbmUoKSkgewotICAgICAgICBpZiAoYm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRl
ck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCi0gICAgICAgICAgICByZXR1cm4gYm94Owot
ICAgIH0KLSAgICByZXR1cm4geyB9OwotfQotCi19Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGlu
ZUl0ZXJhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNmY4NjVlYzA5N2Fm
M2YzNGUwYzgxYmI0OTA1NjE3YTBhNWZlNWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRm9udEJhc2VsaW5lLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmgiCi0j
aW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmgiCi0jaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2Ug
TGF5b3V0SW50ZWdyYXRpb24gewotCi1jbGFzcyBMaW5lSXRlcmF0b3I7Ci1jbGFzcyBQYXRoSXRl
cmF0b3I7Ci1jbGFzcyBSdW5JdGVyYXRvcjsKLQotc3RydWN0IEVuZExpbmVJdGVyYXRvciB7IH07
Ci0KLWNsYXNzIFBhdGhMaW5lIHsKLXB1YmxpYzoKLSAgICB1c2luZyBQYXRoVmFyaWFudCA9IFZh
cmlhbnQ8Ci0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0gICAgICAgIExp
bmVJdGVyYXRvck1vZGVyblBhdGgsCi0jZW5kaWYKLSAgICAgICAgTGluZUl0ZXJhdG9yTGVnYWN5
UGF0aAotICAgID47Ci0KLSAgICBQYXRoTGluZShQYXRoVmFyaWFudCYmKTsKLQotICAgIExheW91
dFVuaXQgdG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3R0b20oKSBjb25zdDsKLSAgICBM
YXlvdXRVbml0IHNlbGVjdGlvblRvcCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgc2VsZWN0aW9u
VG9wRm9ySGl0VGVzdGluZygpIGNvbnN0OwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9t
KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQoKSBjb25zdDsKLSAgICBM
YXlvdXRVbml0IHNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSBjb25zdDsK
LSAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2so
KSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGxpbmVCb3hUb3AoKSBjb25zdDsKLSAgICBMYXlvdXRV
bml0IGxpbmVCb3hCb3R0b20oKSBjb25zdDsKLQotICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVj
dCgpIGNvbnN0OwotICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3Rh
dGUoKSBjb25zdDsKLQotICAgIGZsb2F0IHkoKSBjb25zdDsKLSAgICBmbG9hdCBjb250ZW50TG9n
aWNhbExlZnQoKSBjb25zdDsKLSAgICBmbG9hdCBjb250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3Q7
Ci0gICAgZmxvYXQgY29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0OwotICAgIGZsb2F0IGxvZ2lj
YWxIZWlnaHQoKSBjb25zdDsKLQotICAgIGludCBibG9ja0RpcmVjdGlvblBvaW50SW5MaW5lKCkg
Y29uc3Q7Ci0KLSAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0OwotCi0gICAgRm9udEJhc2Vs
aW5lIGJhc2VsaW5lVHlwZSgpIGNvbnN0OwotCi0gICAgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBj
b250YWluaW5nQmxvY2soKSBjb25zdDsKLSAgICBjb25zdCBMZWdhY3lSb290SW5saW5lQm94KiBs
ZWdhY3lSb290SW5saW5lQm94KCkgY29uc3Q7Ci0KLSAgICBib29sIGlzRmlyc3QoKSBjb25zdDsK
LQotICAgIFJ1bkl0ZXJhdG9yIGZpcnN0UnVuKCkgY29uc3Q7Ci0gICAgUnVuSXRlcmF0b3IgbGFz
dFJ1bigpIGNvbnN0OwotCi0gICAgTGluZUl0ZXJhdG9yIG5leHQoKSBjb25zdDsKLSAgICBMaW5l
SXRlcmF0b3IgcHJldmlvdXMoKSBjb25zdDsKLQotICAgIFJ1bkl0ZXJhdG9yIGNsb3Nlc3RSdW5G
b3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRlbnRzLCBib29sIGVkaXRhYmxlT25s
eSkgY29uc3Q7Ci0gICAgUnVuSXRlcmF0b3IgY2xvc2VzdFJ1bkZvckxvZ2ljYWxMZWZ0UG9zaXRp
b24oaW50IHBvc2l0aW9uLCBib29sIGVkaXRhYmxlT25seSA9IGZhbHNlKSBjb25zdDsKLQotICAg
IFJ1bkl0ZXJhdG9yIGxvZ2ljYWxTdGFydFJ1bigpIGNvbnN0OwotICAgIFJ1bkl0ZXJhdG9yIGxv
Z2ljYWxFbmRSdW4oKSBjb25zdDsKLSAgICBSdW5JdGVyYXRvciBsb2dpY2FsU3RhcnRSdW5XaXRo
Tm9kZSgpIGNvbnN0OwotICAgIFJ1bkl0ZXJhdG9yIGxvZ2ljYWxFbmRSdW5XaXRoTm9kZSgpIGNv
bnN0OwotICAgIAotICAgIFJ1bkl0ZXJhdG9yIGZpcnN0U2VsZWN0ZWRCb3goKSBjb25zdDsKLSAg
ICBSdW5JdGVyYXRvciBsYXN0U2VsZWN0ZWRCb3goKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBm
cmllbmQgY2xhc3MgTGluZUl0ZXJhdG9yOwotCi0gICAgUGF0aFZhcmlhbnQgbV9wYXRoVmFyaWFu
dDsKLX07Ci0KLWNsYXNzIExpbmVJdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgTGluZUl0ZXJhdG9y
KCkgOiBtX2xpbmUoTGluZUl0ZXJhdG9yTGVnYWN5UGF0aCB7IG51bGxwdHIgfSkgeyB9OwotICAg
IExpbmVJdGVyYXRvcihjb25zdCBMZWdhY3lSb290SW5saW5lQm94KiByb290SW5saW5lQm94KSA6
IG1fbGluZShMaW5lSXRlcmF0b3JMZWdhY3lQYXRoIHsgcm9vdElubGluZUJveCB9KSB7IH07Ci0g
ICAgTGluZUl0ZXJhdG9yKFBhdGhMaW5lOjpQYXRoVmFyaWFudCYmKTsKLSAgICBMaW5lSXRlcmF0
b3IoY29uc3QgUGF0aExpbmUmKTsKLQotICAgIExpbmVJdGVyYXRvciYgb3BlcmF0b3IrKygpIHsg
cmV0dXJuIHRyYXZlcnNlTmV4dCgpOyB9Ci0gICAgTGluZUl0ZXJhdG9yJiB0cmF2ZXJzZU5leHQo
KTsKLSAgICBMaW5lSXRlcmF0b3ImIHRyYXZlcnNlUHJldmlvdXMoKTsKLQotICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhYXRFbmQoKTsgfQotCi0gICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IExpbmVJdGVyYXRvciYpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBMaW5lSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KEVuZExpbmVJdGVyYXRvcikgY29uc3QgeyBy
ZXR1cm4gYXRFbmQoKTsgfQotICAgIGJvb2wgb3BlcmF0b3IhPShFbmRMaW5lSXRlcmF0b3IpIGNv
bnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9Ci0KLSAgICBjb25zdCBQYXRoTGluZSYgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lOyB9Ci0gICAgY29uc3QgUGF0aExpbmUqIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiAmbV9saW5lOyB9Ci0KLSAgICBib29sIGF0RW5kKCkgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgUGF0aExpbmUgbV9saW5lOwotfTsKLQotTGluZUl0ZXJhdG9yIGZp
cnN0TGluZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKLUxpbmVJdGVyYXRvciBsYXN0TGlu
ZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaW5saW5lIFBhdGhMaW5lOjpQYXRoTGluZShQ
YXRoVmFyaWFudCYmIHBhdGgpCi0gICAgOiBtX3BhdGhWYXJpYW50KFdURk1vdmUocGF0aCkpCi17
Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IFBhdGhMaW5lOjp0b3AoKSBjb25zdAotewotICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsK
LSAgICAgICAgcmV0dXJuIHBhdGgudG9wKCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBMYXlvdXRV
bml0IFBhdGhMaW5lOjpib3R0b20oKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBh
dGguYm90dG9tKCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IFBhdGhMaW5lOjpz
ZWxlY3Rpb25Ub3AoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZh
cmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguc2VsZWN0
aW9uVG9wKCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IFBhdGhMaW5lOjpzZWxl
Y3Rpb25Ub3BGb3JIaXRUZXN0aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBw
YXRoLnNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIExh
eW91dFVuaXQgUGF0aExpbmU6OnNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgewotICAg
ICAgICByZXR1cm4gcGF0aC5zZWxlY3Rpb25Cb3R0b20oKTsKLSAgICB9KTsKLX0KLQotaW5saW5l
IExheW91dFVuaXQgUGF0aExpbmU6OnNlbGVjdGlvbkhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHNlbGVjdGlvbkJvdHRvbSgpIC0gc2VsZWN0aW9uVG9wKCk7Ci19Ci0KLWlubGluZSBMYXlv
dXRVbml0IFBhdGhMaW5lOjpsaW5lQm94VG9wKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJl
dHVybiBwYXRoLmxpbmVCb3hUb3AoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIExheW91dFVuaXQg
UGF0aExpbmU6OmxpbmVCb3hCb3R0b20oKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJu
IHBhdGgubGluZUJveEJvdHRvbSgpOwotICAgIH0pOwotfQotCi1pbmxpbmUgTGF5b3V0UmVjdCBQ
YXRoTGluZTo6c2VsZWN0aW9uUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHsgTGF5b3V0UG9p
bnQgeyBjb250ZW50TG9naWNhbExlZnQoKSwgc2VsZWN0aW9uVG9wKCkgfSwgTGF5b3V0UG9pbnQg
eyBjb250ZW50TG9naWNhbFJpZ2h0KCksIHNlbGVjdGlvbkJvdHRvbSgpIH0gfTsKLX0KLQotaW5s
aW5lIGZsb2F0IFBhdGhMaW5lOjp5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBw
YXRoLnkoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIGZsb2F0IFBhdGhMaW5lOjpjb250ZW50TG9n
aWNhbExlZnQoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlh
bnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguY29udGVudExv
Z2ljYWxMZWZ0KCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBmbG9hdCBQYXRoTGluZTo6Y29udGVu
dExvZ2ljYWxSaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRo
VmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5jb250
ZW50TG9naWNhbFJpZ2h0KCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBmbG9hdCBQYXRoTGluZTo6
Y29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbnRlbnRMb2dpY2Fs
UmlnaHQoKSAtIGNvbnRlbnRMb2dpY2FsTGVmdCgpOwotfQotCi1pbmxpbmUgZmxvYXQgUGF0aExp
bmU6OmxvZ2ljYWxIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1f
cGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGgu
bG9naWNhbEhlaWdodCgpOwotICAgIH0pOwotfQotCi1pbmxpbmUgYm9vbCBQYXRoTGluZTo6aXNI
b3Jpem9udGFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJp
YW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlzSG9yaXpv
bnRhbCgpOwotICAgIH0pOwotfQotCi1pbmxpbmUgRm9udEJhc2VsaW5lIFBhdGhMaW5lOjpiYXNl
bGluZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlh
bnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguYmFzZWxpbmVU
eXBlKCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIFBhdGhM
aW5lOjpjb250YWluaW5nQmxvY2soKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIC0+IGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYgewotICAgICAgICByZXR1cm4gcGF0aC5jb250YWluaW5nQmxvY2soKTsKLSAgICB9KTsK
LX0KLQotaW5saW5lIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gqIFBhdGhMaW5lOjpsZWdhY3lS
b290SW5saW5lQm94KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhW
YXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmxlZ2Fj
eVJvb3RJbmxpbmVCb3goKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIGJvb2wgUGF0aExpbmU6Omlz
Rmlyc3QoKSBjb25zdAotewotICAgIHJldHVybiAhcHJldmlvdXMoKTsKLX0KLQotfQotfQotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZjdjMGQyZWFmMDZkY2NkODJiM2ViOThhYjE2MzYx
NGVlMjMyNDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0
ZXJhdG9yTGVnYWN5UGF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uSW5saW5l
Q29udGVudC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQ
YXRoLmgiCi0jaW5jbHVkZSAiTGVnYWN5Um9vdElubGluZUJveC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLW5hbWVzcGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7Ci0KLWNsYXNzIExpbmVJdGVy
YXRvckxlZ2FjeVBhdGggewotcHVibGljOgotICAgIExpbmVJdGVyYXRvckxlZ2FjeVBhdGgoY29u
c3QgTGVnYWN5Um9vdElubGluZUJveCogcm9vdElubGluZUJveCkKLSAgICAgICAgOiBtX3Jvb3RJ
bmxpbmVCb3gocm9vdElubGluZUJveCkKLSAgICB7Ci0gICAgfQotICAgIExpbmVJdGVyYXRvckxl
Z2FjeVBhdGgoTGluZUl0ZXJhdG9yTGVnYWN5UGF0aCYmKSA9IGRlZmF1bHQ7Ci0gICAgTGluZUl0
ZXJhdG9yTGVnYWN5UGF0aChjb25zdCBMaW5lSXRlcmF0b3JMZWdhY3lQYXRoJikgPSBkZWZhdWx0
OwotICAgIExpbmVJdGVyYXRvckxlZ2FjeVBhdGgmIG9wZXJhdG9yPShjb25zdCBMaW5lSXRlcmF0
b3JMZWdhY3lQYXRoJikgPSBkZWZhdWx0OwotICAgIExpbmVJdGVyYXRvckxlZ2FjeVBhdGgmIG9w
ZXJhdG9yPShMaW5lSXRlcmF0b3JMZWdhY3lQYXRoJiYpID0gZGVmYXVsdDsKLQotICAgIExheW91
dFVuaXQgdG9wKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5saW5lVG9wKCk7IH0K
LSAgICBMYXlvdXRVbml0IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+
bGluZUJvdHRvbSgpOyB9Ci0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AoKSBjb25zdCB7IHJl
dHVybiBtX3Jvb3RJbmxpbmVCb3gtPnNlbGVjdGlvblRvcCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBz
ZWxlY3Rpb25Ub3BGb3JIaXRUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94
LT5zZWxlY3Rpb25Ub3AoTGVnYWN5Um9vdElubGluZUJveDo6Rm9ySGl0VGVzdGluZzo6WWVzKTsg
fQotICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9yb290
SW5saW5lQm94LT5zZWxlY3Rpb25Cb3R0b20oKTsgfQotICAgIExheW91dFVuaXQgbGluZUJveFRv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bGluZUJveFRvcCgpOyB9Ci0gICAg
TGF5b3V0VW5pdCBsaW5lQm94Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94
LT5saW5lQm94Qm90dG9tKCk7IH0KLQotICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3Jv
b3RJbmxpbmVCb3gtPnkoKTsgfQotICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsTGVmdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bG9naWNhbExlZnQoKTsgfQotICAgIGZsb2F0IGNv
bnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxvZ2lj
YWxSaWdodCgpOyB9Ci0gICAgZmxvYXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdElubGluZUJveC0+bG9naWNhbEhlaWdodCgpOyB9Ci0gICAgYm9vbCBpc0hvcml6b250YWwo
KSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmlzSG9yaXpvbnRhbCgpOyB9Ci0gICAg
Rm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJv
eC0+YmFzZWxpbmVUeXBlKCk7IH0KLQotICAgIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgY29udGFp
bmluZ0Jsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5ibG9ja0Zsb3coKTsg
fQotICAgIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gqIGxlZ2FjeVJvb3RJbmxpbmVCb3goKSBj
b25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3g7IH0KLQotICAgIHZvaWQgdHJhdmVyc2VOZXh0
KCkKLSAgICB7Ci0gICAgICAgIG1fcm9vdElubGluZUJveCA9IG1fcm9vdElubGluZUJveC0+bmV4
dFJvb3RCb3goKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXMoKQotICAgIHsK
LSAgICAgICAgbV9yb290SW5saW5lQm94ID0gbV9yb290SW5saW5lQm94LT5wcmV2Um9vdEJveCgp
OwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMaW5lSXRlcmF0b3JMZWdhY3lQ
YXRoJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94ID09IG90aGVyLm1fcm9v
dElubGluZUJveDsgfQotCi0gICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX3Jvb3RJ
bmxpbmVCb3g7IH0KLQotICAgIFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aCBmaXJzdFJ1bigpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4geyBtX3Jvb3RJbmxpbmVCb3gtPmZpcnN0TGVhZkRlc2Nl
bmRhbnQoKSB9OwotICAgIH0KLQotICAgIFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aCBsYXN0UnVuKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB7IG1fcm9vdElubGluZUJveC0+bGFzdExlYWZE
ZXNjZW5kYW50KCkgfTsKLSAgICB9Ci0KLQotICAgIFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aCBsb2dp
Y2FsU3RhcnRSdW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHsgKm1fcm9vdElubGlu
ZUJveCwgUnVuSXRlcmF0b3JMZWdhY3lQYXRoOjpMb2dpY2FsT3JkZXI6OlN0YXJ0IH07Ci0gICAg
fQotCi0gICAgUnVuSXRlcmF0b3JMZWdhY3lQYXRoIGxvZ2ljYWxFbmRSdW4oKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIHsgKm1fcm9vdElubGluZUJveCwgUnVuSXRlcmF0b3JMZWdhY3lQ
YXRoOjpMb2dpY2FsT3JkZXI6OkVuZCB9OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBM
ZWdhY3lSb290SW5saW5lQm94KiBtX3Jvb3RJbmxpbmVCb3g7Ci19OwotCi19Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25M
aW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDVmOTM1OWZmMTA2ZGZhNDg2Nzk0OTAyMTAyMGVkOTI4OTdiMjg1
YTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9y
TW9kZXJuUGF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQot
Ci0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmgiCi0jaW5jbHVkZSAi
TGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaCIKLSNpbmNsdWRlICJSZW5k
ZXJCbG9ja0Zsb3cuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgTGF5b3V0
SW50ZWdyYXRpb24gewotCi1jbGFzcyBSdW5JdGVyYXRvck1vZGVyblBhdGg7Ci0KLWNsYXNzIExp
bmVJdGVyYXRvck1vZGVyblBhdGggewotcHVibGljOgotICAgIExpbmVJdGVyYXRvck1vZGVyblBh
dGgoY29uc3QgSW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgc2l6ZV90IGxpbmVJbmRleCkK
LSAgICAgICAgOiBtX2lubGluZUNvbnRlbnQoJmlubGluZUNvbnRlbnQpCi0gICAgICAgICwgbV9s
aW5lSW5kZXgobGluZUluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGxpbmVJbmRleCA8PSBs
aW5lcygpLnNpemUoKSk7Ci0gICAgfQotICAgIExpbmVJdGVyYXRvck1vZGVyblBhdGgoTGluZUl0
ZXJhdG9yTW9kZXJuUGF0aCYmKSA9IGRlZmF1bHQ7Ci0gICAgTGluZUl0ZXJhdG9yTW9kZXJuUGF0
aChjb25zdCBMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoJikgPSBkZWZhdWx0OwotICAgIExpbmVJdGVy
YXRvck1vZGVyblBhdGgmIG9wZXJhdG9yPShjb25zdCBMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoJikg
PSBkZWZhdWx0OwotICAgIExpbmVJdGVyYXRvck1vZGVyblBhdGgmIG9wZXJhdG9yPShMaW5lSXRl
cmF0b3JNb2Rlcm5QYXRoJiYpID0gZGVmYXVsdDsKLQotICAgIExheW91dFVuaXQgdG9wKCkgY29u
c3QgeyByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Um91bmQobGluZSgpLmVuY2xvc2luZ0Nv
bnRlbnRUb3AoKSk7IH0KLSAgICBMYXlvdXRVbml0IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIExh
eW91dFVuaXQ6OmZyb21GbG9hdFJvdW5kKGxpbmUoKS5lbmNsb3NpbmdDb250ZW50Qm90dG9tKCkp
OyB9Ci0gICAgTGF5b3V0VW5pdCBsaW5lQm94VG9wKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0VW5p
dDo6ZnJvbUZsb2F0Um91bmQobGluZSgpLmxpbmVCb3hUb3AoKSk7IH0KLSAgICBMYXlvdXRVbml0
IGxpbmVCb3hCb3R0b20oKSBjb25zdCB7IHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3Vu
ZChsaW5lKCkubGluZUJveEJvdHRvbSgpKTsgfQotCi0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25U
b3AoKSBjb25zdCB7IHJldHVybiAhbV9saW5lSW5kZXggPyB0b3AoKSA6IExpbmVJdGVyYXRvck1v
ZGVyblBhdGgoKm1faW5saW5lQ29udGVudCwgbV9saW5lSW5kZXggLSAxKS5zZWxlY3Rpb25Cb3R0
b20oKTsgfQotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNvbnRhaW5pbmdCbG9jaygpLmJvcmRl
ckFuZFBhZGRpbmdCZWZvcmUoKSBvZmZzZXQgYWZ0ZXIgcmV0aXJpbmcgbGVnYWN5IGxpbmUgbGF5
b3V0LiBJdCBhbHNvIHJlcXVpcmVzIGNoYW5nZXMgaW4gUmVuZGVyVGV4dDo6cG9zaXRpb25Gb3JQ
b2ludCB0byBmaW5kIHRoZSBmaXJzdCBsaW5lIHdpdGggb2Zmc2V0LgotICAgIC8vIC0gdGhlICJi
ZWZvcmUiIHZhbHVlIGlzIGFscmVhZHkgZmFjdG9yZWQgaW4gdG8gdGhlIGxpbmUgb2Zmc2V0Ci0g
ICAgLy8gLSB0aGlzIGxvZ2ljIG5lZ2F0ZXMgdGhlIGZpcnN0IGxpbmUncyBuYXR1cmFsIG9mZnNl
dCAoZS5nLiBibG9jayBoYXMgbm8gYm9yZGVyL3BhZGRpbmcgYnV0IHRoZSBmaXJzdCBsaW5lIGhh
cyBhIGNvbXB1dGVkIG9mZnNldCkuCi0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3BGb3JIaXRU
ZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gIW1fbGluZUluZGV4ID8gY29udGFpbmluZ0Jsb2NrKCku
Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpIDogc2VsZWN0aW9uVG9wKCk7IH07Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCBvciByZXBsYWNlLgotICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9t
KCkgY29uc3QgeyByZXR1cm4gYm90dG9tKCk7IH0KLQotICAgIGZsb2F0IGNvbnRlbnRMb2dpY2Fs
TGVmdCgpIGNvbnN0IHsgcmV0dXJuIGxpbmUoKS5saW5lQm94TGVmdCgpICsgbGluZSgpLmNvbnRl
bnRMZWZ0KCk7IH0KLSAgICBmbG9hdCBjb250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1
cm4gY29udGVudExvZ2ljYWxMZWZ0KCkgKyBsaW5lKCkuY29udGVudFdpZHRoKCk7IH0KLSAgICBm
bG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbGluZUJveFRvcCgpOyB9Ci0gICAgZmxvYXQgbG9naWNh
bEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxpbmVCb3hCb3R0b20oKSAtIGxpbmVCb3hUb3AoKTsg
fQotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIEZv
bnRCYXNlbGluZSBiYXNlbGluZVR5cGUoKSBjb25zdCB7IHJldHVybiBBbHBoYWJldGljQmFzZWxp
bmU7IH0KLQotICAgIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgY29udGFpbmluZ0Jsb2NrKCkgY29u
c3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50LT5jb250YWluaW5nQmxvY2soKTsgfQotICAgIGNv
bnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gqIGxlZ2FjeVJvb3RJbmxpbmVCb3goKSBjb25zdCB7IHJl
dHVybiBudWxscHRyOyB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlTmV4dCgpCi0gICAgewotICAgICAg
ICBBU1NFUlQoIWF0RW5kKCkpOwotCi0gICAgICAgICsrbV9saW5lSW5kZXg7Ci0gICAgfQotCi0g
ICAgdm9pZCB0cmF2ZXJzZVByZXZpb3VzKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghYXRFbmQo
KSk7Ci0KLSAgICAgICAgaWYgKCFtX2xpbmVJbmRleCkgewotICAgICAgICAgICAgc2V0QXRFbmQo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC0tbV9saW5lSW5k
ZXg7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExpbmVJdGVyYXRvck1vZGVy
blBhdGgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lubGluZUNvbnRlbnQgPT0gb3RoZXIubV9p
bmxpbmVDb250ZW50ICYmIG1fbGluZUluZGV4ID09IG90aGVyLm1fbGluZUluZGV4OyB9Ci0KLSAg
ICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSW5kZXggPT0gbGluZXMoKS5zaXpl
KCk7IH0KLQotICAgIFJ1bkl0ZXJhdG9yTW9kZXJuUGF0aCBmaXJzdFJ1bigpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAoIWxpbmUoKS5ib3hDb3VudCgpKQotICAgICAgICAgICAgcmV0dXJuIHsg
Km1faW5saW5lQ29udGVudCB9OwotICAgICAgICBhdXRvIHJ1bkl0ZXJhdG9yID0gUnVuSXRlcmF0
b3JNb2Rlcm5QYXRoIHsgKm1faW5saW5lQ29udGVudCwgbGluZSgpLmZpcnN0Qm94SW5kZXgoKSB9
OwotICAgICAgICBpZiAocnVuSXRlcmF0b3IuYm94KCkuaXNJbmxpbmVCb3goKSkKLSAgICAgICAg
ICAgIHJ1bkl0ZXJhdG9yLnRyYXZlcnNlTmV4dE9uTGluZSgpOwotICAgICAgICByZXR1cm4gcnVu
SXRlcmF0b3I7Ci0gICAgfQotCi0gICAgUnVuSXRlcmF0b3JNb2Rlcm5QYXRoIGxhc3RSdW4oKSBj
b25zdAotICAgIHsKLSAgICAgICAgYXV0byBib3hDb3VudCA9IGxpbmUoKS5ib3hDb3VudCgpOwot
ICAgICAgICBpZiAoIWJveENvdW50KQotICAgICAgICAgICAgcmV0dXJuIHsgKm1faW5saW5lQ29u
dGVudCB9OwotICAgICAgICBhdXRvIHJ1bkl0ZXJhdG9yID0gUnVuSXRlcmF0b3JNb2Rlcm5QYXRo
IHsgKm1faW5saW5lQ29udGVudCwgbGluZSgpLmZpcnN0Qm94SW5kZXgoKSArIGJveENvdW50IC0g
MSB9OwotICAgICAgICBpZiAocnVuSXRlcmF0b3IuYm94KCkuaXNJbmxpbmVCb3goKSkKLSAgICAg
ICAgICAgIHJ1bkl0ZXJhdG9yLnRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKTsKLSAgICAgICAgcmV0
dXJuIHJ1bkl0ZXJhdG9yOwotICAgIH0KLQotICAgIFJ1bkl0ZXJhdG9yTW9kZXJuUGF0aCBsb2dp
Y2FsU3RhcnRSdW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpcnN0UnVuKCk7Ci0g
ICAgfQotCi0gICAgUnVuSXRlcmF0b3JNb2Rlcm5QYXRoIGxvZ2ljYWxFbmRSdW4oKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3RSdW4oKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
dm9pZCBzZXRBdEVuZCgpIHsgbV9saW5lSW5kZXggPSBsaW5lcygpLnNpemUoKTsgfQotCi0gICAg
Y29uc3QgSW5saW5lQ29udGVudDo6TGluZXMmIGxpbmVzKCkgY29uc3QgeyByZXR1cm4gbV9pbmxp
bmVDb250ZW50LT5saW5lczsgfQotICAgIGNvbnN0IExpbmUmIGxpbmUoKSBjb25zdCB7IHJldHVy
biBsaW5lcygpW21fbGluZUluZGV4XTsgfQotCi0gICAgUmVmUHRyPGNvbnN0IElubGluZUNvbnRl
bnQ+IG1faW5saW5lQ29udGVudDsKLSAgICBzaXplX3QgbV9saW5lSW5kZXggeyAwIH07Ci19Owot
Ci19Ci19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCmluZGV4
IDM5Njg3ZWM0YWIzYmFmOTA1YmZhYzY2OTUwMmNmNDg2YmIxNjY5NzIuLmU2ZGJlZmY0OTZkN2Jj
NDJiYmExNGVmNTc2ZTAxNDdlZDgzODgyYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlv
dXQuY3BwCkBAIC0zOTEsNyArMzkxLDcgQEAgSW5saW5lQ29udGVudCYgTGluZUxheW91dDo6ZW5z
dXJlSW5saW5lQ29udGVudCgpCiAgICAgcmV0dXJuICptX2lubGluZUNvbnRlbnQ7CiB9CiAKLVRl
eHRSdW5JdGVyYXRvciBMaW5lTGF5b3V0Ojp0ZXh0UnVuc0Zvcihjb25zdCBSZW5kZXJUZXh0JiBy
ZW5kZXJUZXh0KSBjb25zdAorSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciBMaW5lTGF5
b3V0Ojp0ZXh0UnVuc0Zvcihjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJUZXh0KSBjb25zdAogewog
ICAgIGlmICghbV9pbmxpbmVDb250ZW50KQogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDAxLDEw
ICs0MDEsMTAgQEAgVGV4dFJ1bkl0ZXJhdG9yIExpbmVMYXlvdXQ6OnRleHRSdW5zRm9yKGNvbnN0
IFJlbmRlclRleHQmIHJlbmRlclRleHQpIGNvbnN0CiAgICAgaWYgKCFmaXJzdEluZGV4KQogICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIExheW91dEludGVncmF0aW9uOjp0ZXh0UnVu
Rm9yKCptX2lubGluZUNvbnRlbnQsICpmaXJzdEluZGV4KTsKKyAgICByZXR1cm4gSW5saW5lSXRl
cmF0b3I6OnRleHRSdW5Gb3IoKm1faW5saW5lQ29udGVudCwgKmZpcnN0SW5kZXgpOwogfQogCi1S
dW5JdGVyYXRvciBMaW5lTGF5b3V0OjpydW5Gb3IoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVy
RWxlbWVudCkgY29uc3QKK0lubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBMaW5lTGF5b3V0Ojpy
dW5Gb3IoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyRWxlbWVudCkgY29uc3QKIHsKICAgICBp
ZiAoIW1faW5saW5lQ29udGVudCkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQxNCwyMyArNDE0
LDIzIEBAIFJ1bkl0ZXJhdG9yIExpbmVMYXlvdXQ6OnJ1bkZvcihjb25zdCBSZW5kZXJFbGVtZW50
JiByZW5kZXJFbGVtZW50KSBjb25zdAogICAgIGlmICghZmlyc3RJbmRleCkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIHJldHVybiBMYXlvdXRJbnRlZ3JhdGlvbjo6cnVuRm9yKCptX2lubGlu
ZUNvbnRlbnQsICpmaXJzdEluZGV4KTsKKyAgICByZXR1cm4gSW5saW5lSXRlcmF0b3I6OnJ1bkZv
cigqbV9pbmxpbmVDb250ZW50LCAqZmlyc3RJbmRleCk7CiB9CiAKLUxpbmVJdGVyYXRvciBMaW5l
TGF5b3V0OjpmaXJzdExpbmUoKSBjb25zdAorSW5saW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvciBM
aW5lTGF5b3V0OjpmaXJzdExpbmUoKSBjb25zdAogewogICAgIGlmICghbV9pbmxpbmVDb250ZW50
KQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIHsgTGluZUl0ZXJhdG9yTW9kZXJu
UGF0aCgqbV9pbmxpbmVDb250ZW50LCAwKSB9OworICAgIHJldHVybiB7IElubGluZUl0ZXJhdG9y
OjpMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoKCptX2lubGluZUNvbnRlbnQsIDApIH07CiB9CiAKLUxp
bmVJdGVyYXRvciBMaW5lTGF5b3V0OjpsYXN0TGluZSgpIGNvbnN0CitJbmxpbmVJdGVyYXRvcjo6
TGluZUl0ZXJhdG9yIExpbmVMYXlvdXQ6Omxhc3RMaW5lKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
aW5saW5lQ29udGVudCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiB7IExpbmVJ
dGVyYXRvck1vZGVyblBhdGgoKm1faW5saW5lQ29udGVudCwgbV9pbmxpbmVDb250ZW50LT5saW5l
cy5pc0VtcHR5KCkgPyAwIDogbV9pbmxpbmVDb250ZW50LT5saW5lcy5zaXplKCkgLSAxKSB9Owor
ICAgIHJldHVybiB7IElubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoKCptX2lu
bGluZUNvbnRlbnQsIG1faW5saW5lQ29udGVudC0+bGluZXMuaXNFbXB0eSgpID8gMCA6IG1faW5s
aW5lQ29udGVudC0+bGluZXMuc2l6ZSgpIC0gMSkgfTsKIH0KIAogTGF5b3V0UmVjdCBMaW5lTGF5
b3V0OjpmaXJzdElubGluZUJveFJlY3QoY29uc3QgUmVuZGVySW5saW5lJiByZW5kZXJJbmxpbmUp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKaW5kZXggMDFhYmFhMGM0NjBlYzc2
NzIzNzc0OGYzZGRmNzYyMDNmOGVjNjQ1Ni4uYTMzZDA2ZWIzODg4MjM3MDY1MDI2ZjU0OTJlOTgx
MTg1ZWUxYTVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaApAQCAtMjgsOSArMjgs
OSBAQAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKKyNpbmNsdWRlICJJ
bmxpbmVJdGVyYXRvckxpbmUuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUu
aCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIgotI2luY2x1ZGUg
IkxheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRQb2ludC5o
IgogI2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0RW51bXMu
aCIKQEAgLTk2LDEwICs5NiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludChQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwogICAgIGJvb2wgaGl0VGVzdChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwog
Ci0gICAgVGV4dFJ1bkl0ZXJhdG9yIHRleHRSdW5zRm9yKGNvbnN0IFJlbmRlclRleHQmKSBjb25z
dDsKLSAgICBSdW5JdGVyYXRvciBydW5Gb3IoY29uc3QgUmVuZGVyRWxlbWVudCYpIGNvbnN0Owot
ICAgIExpbmVJdGVyYXRvciBmaXJzdExpbmUoKSBjb25zdDsKLSAgICBMaW5lSXRlcmF0b3IgbGFz
dExpbmUoKSBjb25zdDsKKyAgICBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yIHRleHRS
dW5zRm9yKGNvbnN0IFJlbmRlclRleHQmKSBjb25zdDsKKyAgICBJbmxpbmVJdGVyYXRvcjo6Qm94
SXRlcmF0b3IgcnVuRm9yKGNvbnN0IFJlbmRlckVsZW1lbnQmKSBjb25zdDsKKyAgICBJbmxpbmVJ
dGVyYXRvcjo6TGluZUl0ZXJhdG9yIGZpcnN0TGluZSgpIGNvbnN0OworICAgIElubGluZUl0ZXJh
dG9yOjpMaW5lSXRlcmF0b3IgbGFzdExpbmUoKSBjb25zdDsKIAogICAgIExheW91dFJlY3QgZmly
c3RJbmxpbmVCb3hSZWN0KGNvbnN0IFJlbmRlcklubGluZSYpIGNvbnN0OwogICAgIExheW91dFJl
Y3QgZW5jbG9zaW5nQm9yZGVyQm94UmVjdEZvcihjb25zdCBSZW5kZXJJbmxpbmUmKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvblJ1bkl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjAxYzkwNGMzYmUxZGQ2ZjUwNjk0YzNjN2ViZTRiMmIyZWMyYTcwZi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCi0KLQotI2luY2x1
ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50
ZWdyYXRpb25MaW5lTGF5b3V0LmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5j
bHVkZSAiUmVuZGVyQ29tYmluZVRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIK
LSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFj
ZSBMYXlvdXRJbnRlZ3JhdGlvbiB7Ci0KLVJ1bkl0ZXJhdG9yOjpSdW5JdGVyYXRvcihQYXRoUnVu
OjpQYXRoVmFyaWFudCYmIHBhdGhWYXJpYW50KQotICAgIDogbV9ydW4oV1RGTW92ZShwYXRoVmFy
aWFudCkpCi17Ci19Ci0KLVJ1bkl0ZXJhdG9yOjpSdW5JdGVyYXRvcihjb25zdCBQYXRoUnVuJiBy
dW4pCi0gICAgOiBtX3J1bihydW4pCi17Ci19Ci0KLWJvb2wgUnVuSXRlcmF0b3I6Om9wZXJhdG9y
PT0oY29uc3QgUnVuSXRlcmF0b3ImIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBtX3J1bi5t
X3BhdGhWYXJpYW50ID09IG90aGVyLm1fcnVuLm1fcGF0aFZhcmlhbnQ7Ci19Ci0KLWJvb2wgUnVu
SXRlcmF0b3I6OmF0RW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3J1
bi5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmF0
RW5kKCk7Ci0gICAgfSk7Ci19Ci0KLVJ1bkl0ZXJhdG9yIFBhdGhSdW46Om5leHRPbkxpbmUoKSBj
b25zdAotewotICAgIHJldHVybiBSdW5JdGVyYXRvcigqdGhpcykudHJhdmVyc2VOZXh0T25MaW5l
KCk7Ci19Ci0KLVJ1bkl0ZXJhdG9yIFBhdGhSdW46OnByZXZpb3VzT25MaW5lKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gUnVuSXRlcmF0b3IoKnRoaXMpLnRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKTsK
LX0KLQotUnVuSXRlcmF0b3IgUGF0aFJ1bjo6bmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gUnVuSXRlcmF0b3IoKnRoaXMpLnRyYXZlcnNlTmV4dE9uTGlu
ZUlnbm9yaW5nTGluZUJyZWFrKCk7Ci19Ci0KLVJ1bkl0ZXJhdG9yIFBhdGhSdW46OnByZXZpb3Vz
T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSBjb25zdAotewotICAgIHJldHVybiBSdW5JdGVyYXRv
cigqdGhpcykudHJhdmVyc2VQcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7Ci19Ci0K
LUxpbmVJdGVyYXRvciBQYXRoUnVuOjpsaW5lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBSdW5JdGVyYXRvckxlZ2FjeVBhdGgmIHBh
dGgpIHsKLSAgICAgICAgcmV0dXJuIExpbmVJdGVyYXRvcihMaW5lSXRlcmF0b3JMZWdhY3lQYXRo
KCZwYXRoLnJvb3RJbmxpbmVCb3goKSkpOwotICAgIH0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKLSAgICAsIFtdKGNvbnN0IFJ1bkl0ZXJhdG9yTW9kZXJuUGF0aCYgcGF0
aCkgewotICAgICAgICByZXR1cm4gTGluZUl0ZXJhdG9yKExpbmVJdGVyYXRvck1vZGVyblBhdGgo
KnBhdGgubV9pbmxpbmVDb250ZW50LCBwYXRoLmJveCgpLmxpbmVJbmRleCgpKSk7Ci0gICAgfQot
I2VuZGlmCi0gICAgKTsKLX0KLQotY29uc3QgUmVuZGVyU3R5bGUmIFBhdGhSdW46OnN0eWxlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbGluZSgpLT5pc0ZpcnN0KCkgPyByZW5kZXJlcigpLmZpcnN0
TGluZVN0eWxlKCkgOiByZW5kZXJlcigpLnN0eWxlKCk7Ci19Ci0KLVRleHRSdW5JdGVyYXRvciBQ
YXRoVGV4dFJ1bjo6bmV4dFRleHRSdW4oKSBjb25zdAotewotICAgIHJldHVybiBUZXh0UnVuSXRl
cmF0b3IoKnRoaXMpLnRyYXZlcnNlTmV4dFRleHRSdW4oKTsKLX0KLQotVGV4dFJ1bkl0ZXJhdG9y
IFBhdGhUZXh0UnVuOjpuZXh0VGV4dFJ1bkluVGV4dE9yZGVyKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gVGV4dFJ1bkl0ZXJhdG9yKCp0aGlzKS50cmF2ZXJzZU5leHRUZXh0UnVuSW5UZXh0T3JkZXIo
KTsKLX0KLQotTGF5b3V0UmVjdCBQYXRoVGV4dFJ1bjo6c2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBy
YW5nZVN0YXJ0LCB1bnNpZ25lZCByYW5nZUVuZCkgY29uc3QKLXsKLSAgICBhdXRvIFtjbGFtcGVk
U3RhcnQsIGNsYW1wZWRFbmRdID0gc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAocmFuZ2VTdGFydCwg
cmFuZ2VFbmQpOwotCi0gICAgaWYgKGNsYW1wZWRTdGFydCA+PSBjbGFtcGVkRW5kICYmICEocmFu
Z2VTdGFydCA9PSByYW5nZUVuZCAmJiByYW5nZVN0YXJ0ID49IHN0YXJ0KCkgJiYgcmFuZ2VTdGFy
dCA8PSBlbmQoKSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBhdXRvIHNlbGVjdGlvblRv
cCA9IGxpbmUoKS0+c2VsZWN0aW9uVG9wKCk7Ci0gICAgYXV0byBzZWxlY3Rpb25IZWlnaHQgPSBs
aW5lKCktPnNlbGVjdGlvbkhlaWdodCgpOwotCi0gICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0
IHsgbG9naWNhbExlZnQoKSwgc2VsZWN0aW9uVG9wLCBsb2dpY2FsV2lkdGgoKSwgc2VsZWN0aW9u
SGVpZ2h0IH07Ci0KLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKCk7Ci0gICAg
aWYgKGNsYW1wZWRTdGFydCB8fCBjbGFtcGVkRW5kICE9IHRleHRSdW4ubGVuZ3RoKCkpCi0gICAg
ICAgIGZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2Vs
ZWN0aW9uUmVjdCwgY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kKTsKLQotICAgIHJldHVybiBzbmFw
cGVkU2VsZWN0aW9uUmVjdChzZWxlY3Rpb25SZWN0LCBsb2dpY2FsUmlnaHQoKSwgc2VsZWN0aW9u
VG9wLCBzZWxlY3Rpb25IZWlnaHQsIGlzSG9yaXpvbnRhbCgpKTsKLX0KLQotYm9vbCBQYXRoVGV4
dFJ1bjo6aXNDb21iaW5lZFRleHQoKSBjb25zdAotewotICAgIGF1dG8mIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKLSAgICByZXR1cm4gaXM8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVy
KSAmJiBkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIpLmlzQ29tYmluZWQoKTsK
LX0KLQotY29uc3QgRm9udENhc2NhZGUmIFBhdGhUZXh0UnVuOjpmb250Q2FzY2FkZSgpIGNvbnN0
Ci17Ci0gICAgaWYgKGlzQ29tYmluZWRUZXh0KCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkudGV4dENvbWJpbmVGb250KCk7Ci0KLSAgICBy
ZXR1cm4gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwotfQotCi1SZW5kZXJPYmplY3Q6OkhpZ2hsaWdo
dFN0YXRlIFBhdGhSdW46OnNlbGVjdGlvblN0YXRlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNUZXh0
KCkpIHsKLSAgICAgICAgYXV0byYgdGV4dCA9IGRvd25jYXN0PFBhdGhUZXh0UnVuPigqdGhpcyk7
Ci0gICAgICAgIGF1dG8mIHJlbmRlcmVyID0gdGV4dC5yZW5kZXJlcigpOwotICAgICAgICByZXR1
cm4gcmVuZGVyZXIudmlldygpLnNlbGVjdGlvbigpLmhpZ2hsaWdodFN0YXRlRm9yVGV4dEJveChy
ZW5kZXJlciwgdGV4dC5zZWxlY3RhYmxlUmFuZ2UoKSk7Ci0gICAgfQotICAgIHJldHVybiByZW5k
ZXJlcigpLnNlbGVjdGlvblN0YXRlKCk7Ci19Ci0KLVRleHRSdW5JdGVyYXRvcjo6VGV4dFJ1bkl0
ZXJhdG9yKFBhdGhSdW46OlBhdGhWYXJpYW50JiYgcGF0aFZhcmlhbnQpCi0gICAgOiBSdW5JdGVy
YXRvcihXVEZNb3ZlKHBhdGhWYXJpYW50KSkKLXsKLX0KLQotVGV4dFJ1bkl0ZXJhdG9yOjpUZXh0
UnVuSXRlcmF0b3IoY29uc3QgUGF0aFJ1biYgcnVuKQotICAgIDogUnVuSXRlcmF0b3IocnVuKQot
ewotfQotCi1UZXh0UnVuSXRlcmF0b3ImIFRleHRSdW5JdGVyYXRvcjo6dHJhdmVyc2VOZXh0VGV4
dFJ1bigpCi17Ci0gICAgV1RGOjpzd2l0Y2hPbihtX3J1bi5tX3BhdGhWYXJpYW50LCBbXShhdXRv
JiBwYXRoKSB7Ci0gICAgICAgIHBhdGgudHJhdmVyc2VOZXh0VGV4dFJ1bigpOwotICAgIH0pOwot
ICAgIHJldHVybiAqdGhpczsKLX0KLQotVGV4dFJ1bkl0ZXJhdG9yJiBUZXh0UnVuSXRlcmF0b3I6
OnRyYXZlcnNlTmV4dFRleHRSdW5JblRleHRPcmRlcigpCi17Ci0gICAgV1RGOjpzd2l0Y2hPbiht
X3J1bi5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHBhdGgudHJhdmVy
c2VOZXh0VGV4dFJ1bkluVGV4dE9yZGVyKCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuICp0aGlzOwot
fQotCi1SdW5JdGVyYXRvciYgUnVuSXRlcmF0b3I6OnRyYXZlcnNlTmV4dE9uTGluZSgpCi17Ci0g
ICAgV1RGOjpzd2l0Y2hPbihtX3J1bi5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7Ci0g
ICAgICAgIHBhdGgudHJhdmVyc2VOZXh0T25MaW5lKCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuICp0
aGlzOwotfQotCi1SdW5JdGVyYXRvciYgUnVuSXRlcmF0b3I6OnRyYXZlcnNlUHJldmlvdXNPbkxp
bmUoKQotewotICAgIFdURjo6c3dpdGNoT24obV9ydW4ubV9wYXRoVmFyaWFudCwgW10oYXV0byYg
cGF0aCkgewotICAgICAgICBwYXRoLnRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKTsKLSAgICB9KTsK
LSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVJ1bkl0ZXJhdG9yJiBSdW5JdGVyYXRvcjo6dHJhdmVy
c2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKQotewotICAgIGRvIHsKLSAgICAgICAgdHJh
dmVyc2VOZXh0T25MaW5lKCk7Ci0gICAgfSB3aGlsZSAoIWF0RW5kKCkgJiYgbV9ydW4uaXNMaW5l
QnJlYWsoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1SdW5JdGVyYXRvciYgUnVuSXRlcmF0
b3I6OnRyYXZlcnNlUHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpCi17Ci0gICAgZG8g
ewotICAgICAgICB0cmF2ZXJzZVByZXZpb3VzT25MaW5lKCk7Ci0gICAgfSB3aGlsZSAoIWF0RW5k
KCkgJiYgbV9ydW4uaXNMaW5lQnJlYWsoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1SdW5J
dGVyYXRvciYgUnVuSXRlcmF0b3I6OnRyYXZlcnNlTmV4dE9uTGluZUluTG9naWNhbE9yZGVyKCkK
LXsKLSAgICBXVEY6OnN3aXRjaE9uKG1fcnVuLm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKLSAgICAgICAgcGF0aC50cmF2ZXJzZU5leHRPbkxpbmVJbkxvZ2ljYWxPcmRlcigpOwotICAg
IH0pOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotUnVuSXRlcmF0b3ImIFJ1bkl0ZXJhdG9yOjp0
cmF2ZXJzZVByZXZpb3VzT25MaW5lSW5Mb2dpY2FsT3JkZXIoKQotewotICAgIFdURjo6c3dpdGNo
T24obV9ydW4ubV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICBwYXRoLnRy
YXZlcnNlUHJldmlvdXNPbkxpbmVJbkxvZ2ljYWxPcmRlcigpOwotICAgIH0pOwotICAgIHJldHVy
biAqdGhpczsKLX0KLQotVGV4dFJ1bkl0ZXJhdG9yIGZpcnN0VGV4dFJ1bkZvcihjb25zdCBSZW5k
ZXJUZXh0JiB0ZXh0KQotewotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQot
ICAgIGlmIChhdXRvKiBsaW5lTGF5b3V0ID0gTGluZUxheW91dDo6Y29udGFpbmluZyh0ZXh0KSkK
LSAgICAgICAgcmV0dXJuIGxpbmVMYXlvdXQtPnRleHRSdW5zRm9yKHRleHQpOwotI2VuZGlmCi0K
LSAgICByZXR1cm4geyBSdW5JdGVyYXRvckxlZ2FjeVBhdGggeyB0ZXh0LmZpcnN0VGV4dEJveCgp
IH0gfTsKLX0KLQotVGV4dFJ1bkl0ZXJhdG9yIGZpcnN0VGV4dFJ1bkluVGV4dE9yZGVyRm9yKGNv
bnN0IFJlbmRlclRleHQmIHRleHQpCi17Ci0gICAgaWYgKHRleHQuZmlyc3RUZXh0Qm94KCkgJiYg
dGV4dC5jb250YWluc1JldmVyc2VkVGV4dCgpKSB7Ci0gICAgICAgIFZlY3Rvcjxjb25zdCBMZWdh
Y3lJbmxpbmVCb3gqPiBzb3J0ZWRUZXh0Qm94ZXM7Ci0gICAgICAgIGZvciAoYXV0byogdGV4dEJv
eCA9IHRleHQuZmlyc3RUZXh0Qm94KCk7IHRleHRCb3g7IHRleHRCb3ggPSB0ZXh0Qm94LT5uZXh0
VGV4dEJveCgpKQotICAgICAgICAgICAgc29ydGVkVGV4dEJveGVzLmFwcGVuZCh0ZXh0Qm94KTsK
LSAgICAgICAgc3RkOjpzb3J0KHNvcnRlZFRleHRCb3hlcy5iZWdpbigpLCBzb3J0ZWRUZXh0Qm94
ZXMuZW5kKCksIFtdKGF1dG8qIGEsIGF1dG8qIGIpIHsKLSAgICAgICAgICAgIHJldHVybiBMZWdh
Y3lJbmxpbmVUZXh0Qm94Ojpjb21wYXJlQnlTdGFydChkb3duY2FzdDxMZWdhY3lJbmxpbmVUZXh0
Qm94PihhKSwgZG93bmNhc3Q8TGVnYWN5SW5saW5lVGV4dEJveD4oYikpOwotICAgICAgICB9KTsK
LSAgICAgICAgYXV0byogZmlyc3QgPSBzb3J0ZWRUZXh0Qm94ZXNbMF07Ci0gICAgICAgIHJldHVy
biB7IFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aCB7IGZpcnN0LCBXVEZNb3ZlKHNvcnRlZFRleHRCb3hl
cyksIDAgfSB9OwotICAgIH0KLQotICAgIHJldHVybiBmaXJzdFRleHRSdW5Gb3IodGV4dCk7Ci19
Ci0KLVRleHRSdW5JdGVyYXRvciB0ZXh0UnVuRm9yKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gq
IGxlZ2FjeUlubGluZVRleHRCb3gpCi17Ci0gICAgcmV0dXJuIHsgUnVuSXRlcmF0b3JMZWdhY3lQ
YXRoIHsgbGVnYWN5SW5saW5lVGV4dEJveCB9IH07Ci19Ci0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKLVRleHRSdW5JdGVyYXRvciB0ZXh0UnVuRm9yKGNvbnN0IElubGlu
ZUNvbnRlbnQmIGNvbnRlbnQsIGNvbnN0IElubGluZURpc3BsYXk6OkJveCYgYm94KQotewotICAg
IHJldHVybiB0ZXh0UnVuRm9yKGNvbnRlbnQsIGNvbnRlbnQuaW5kZXhGb3JCb3goYm94KSk7Ci19
Ci0KLVRleHRSdW5JdGVyYXRvciB0ZXh0UnVuRm9yKGNvbnN0IElubGluZUNvbnRlbnQmIGNvbnRl
bnQsIHNpemVfdCBib3hJbmRleCkKLXsKLSAgICBBU1NFUlQoY29udGVudC5ib3hlc1tib3hJbmRl
eF0udGV4dCgpKTsKLSAgICByZXR1cm4geyBSdW5JdGVyYXRvck1vZGVyblBhdGggeyBjb250ZW50
LCBib3hJbmRleCB9IH07Ci19Ci0jZW5kaWYKLQotVGV4dFJ1blJhbmdlIHRleHRSdW5zRm9yKGNv
bnN0IFJlbmRlclRleHQmIHRleHQpCi17Ci0gICAgcmV0dXJuIHsgZmlyc3RUZXh0UnVuRm9yKHRl
eHQpIH07Ci19Ci0KLVJ1bkl0ZXJhdG9yIHJ1bkZvcihjb25zdCBSZW5kZXJMaW5lQnJlYWsmIHJl
bmRlcmVyKQotewotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotICAgIGlm
IChhdXRvKiBsaW5lTGF5b3V0ID0gTGluZUxheW91dDo6Y29udGFpbmluZyhyZW5kZXJlcikpCi0g
ICAgICAgIHJldHVybiBsaW5lTGF5b3V0LT5ydW5Gb3IocmVuZGVyZXIpOwotI2VuZGlmCi0gICAg
cmV0dXJuIHsgUnVuSXRlcmF0b3JMZWdhY3lQYXRoKHJlbmRlcmVyLmlubGluZUJveFdyYXBwZXIo
KSkgfTsKLX0KLQotUnVuSXRlcmF0b3IgcnVuRm9yKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIp
Ci17Ci0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0gICAgaWYgKGF1dG8q
IGxpbmVMYXlvdXQgPSBMaW5lTGF5b3V0Ojpjb250YWluaW5nKHJlbmRlcmVyKSkKLSAgICAgICAg
cmV0dXJuIGxpbmVMYXlvdXQtPnJ1bkZvcihyZW5kZXJlcik7Ci0jZW5kaWYKLSAgICByZXR1cm4g
eyBSdW5JdGVyYXRvckxlZ2FjeVBhdGgocmVuZGVyZXIuaW5saW5lQm94V3JhcHBlcigpKSB9Owot
fQotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi1SdW5JdGVyYXRvciBy
dW5Gb3IoY29uc3QgSW5saW5lQ29udGVudCYgY29udGVudCwgc2l6ZV90IHJ1bkluZGV4KQotewot
ICAgIHJldHVybiB7IFJ1bkl0ZXJhdG9yTW9kZXJuUGF0aCB7IGNvbnRlbnQsIHJ1bkluZGV4IH0g
fTsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi1j
b25zdCBSdW5JdGVyYXRvck1vZGVyblBhdGgmIFBhdGhSdW46Om1vZGVyblBhdGgoKSBjb25zdAot
ewotICAgIHJldHVybiBXVEY6OmdldDxSdW5JdGVyYXRvck1vZGVyblBhdGg+KG1fcGF0aFZhcmlh
bnQpOwotfQotI2VuZGlmCi0KLWNvbnN0IFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aCYgUGF0aFJ1bjo6
bGVnYWN5UGF0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFJ1bkl0ZXJhdG9yTGVn
YWN5UGF0aD4obV9wYXRoVmFyaWFudCk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5J
dGVyYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTIxZmRiMzU0OWJhODRm
YzU0NmJiYTE2ZjM0ODcyMzg0YzljOTc5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzODggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25S
dW5JdGVyYXRvckxlZ2FjeVBhdGguaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0
ZXJhdG9yTW9kZXJuUGF0aC5oIgotI2luY2x1ZGUgIkxlZ2FjeUlubGluZUVsZW1lbnRCb3guaCIK
LSNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IFJlbmRlckxpbmVCcmVhazsKLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclN0eWxl
OwotY2xhc3MgUmVuZGVyVGV4dDsKLQotbmFtZXNwYWNlIExheW91dEludGVncmF0aW9uIHsKLQot
Y2xhc3MgTGluZUl0ZXJhdG9yOwotY2xhc3MgUnVuSXRlcmF0b3I7Ci1jbGFzcyBUZXh0UnVuSXRl
cmF0b3I7Ci0KLXN0cnVjdCBFbmRJdGVyYXRvciB7IH07Ci0KLWNsYXNzIFBhdGhSdW4gewotcHVi
bGljOgotICAgIHVzaW5nIFBhdGhWYXJpYW50ID0gVmFyaWFudDwKLSNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKLSAgICAgICAgUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLAotI2Vu
ZGlmCi0gICAgICAgIFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aAotICAgID47Ci0KLSAgICBQYXRoUnVu
KFBhdGhWYXJpYW50JiYpOwotCi0gICAgYm9vbCBpc1RleHQoKSBjb25zdDsKLQotICAgIEZsb2F0
UmVjdCByZWN0KCkgY29uc3Q7Ci0KLSAgICBmbG9hdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1
cm4gaXNIb3Jpem9udGFsKCkgPyByZWN0KCkueSgpIDogcmVjdCgpLngoKTsgfQotICAgIGZsb2F0
IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IHJlY3QoKS5t
YXhZKCkgOiByZWN0KCkubWF4WCgpOyB9Ci0gICAgZmxvYXQgbG9naWNhbExlZnQoKSBjb25zdCB7
IHJldHVybiBpc0hvcml6b250YWwoKSA/IHJlY3QoKS54KCkgOiByZWN0KCkueSgpOyB9Ci0gICAg
ZmxvYXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyByZWN0
KCkubWF4WCgpIDogcmVjdCgpLm1heFkoKTsgfQotICAgIGZsb2F0IGxvZ2ljYWxXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gcmVjdCgpLndpZHRoKCkgOiByZWN0KCkuaGVp
Z2h0KCk7IH0KLSAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jp
em9udGFsKCkgPyByZWN0KCkuaGVpZ2h0KCkgOiByZWN0KCkud2lkdGgoKTsgfQotCi0gICAgYm9v
bCBpc0hvcml6b250YWwoKSBjb25zdDsKLSAgICBib29sIGRpck92ZXJyaWRlKCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0OwotCi0gICAgdW5zaWduZWQgbWluaW11bUNhcmV0
T2Zmc2V0KCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbWF4aW11bUNhcmV0T2Zmc2V0KCkgY29uc3Q7
Ci0gICAgdW5zaWduZWQgbGVmdG1vc3RDYXJldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IG1pbmltdW1DYXJldE9mZnNldCgpIDogbWF4aW11bUNhcmV0
T2Zmc2V0KCk7IH0KLSAgICB1bnNpZ25lZCByaWdodG1vc3RDYXJldE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1heGltdW1DYXJldE9mZnNldCgpIDog
bWluaW11bUNhcmV0T2Zmc2V0KCk7IH0KLQotICAgIHVuc2lnbmVkIGNoYXIgYmlkaUxldmVsKCkg
Y29uc3Q7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBiaWRp
TGV2ZWwoKSAlIDIgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0K
LSAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkaXJlY3Rp
b24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KLQotICAgIFJlbmRlck9iamVjdDo6SGlnaGxp
Z2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdDsKLQotICAgIGNvbnN0IFJlbmRlck9iamVj
dCYgcmVuZGVyZXIoKSBjb25zdDsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25z
dDsKLQotICAgIC8vIEZvciBpbnRlcm1lZGlhdGUgcG9ydGluZyBzdGVwcyBvbmx5LgotICAgIGNv
bnN0IExlZ2FjeUlubGluZUJveCogbGVnYWN5SW5saW5lQm94KCkgY29uc3Q7Ci0jaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0gICAgY29uc3QgSW5saW5lRGlzcGxheTo6Qm94
KiBpbmxpbmVCb3goKSBjb25zdDsKLSNlbmRpZgotICAgIFJ1bkl0ZXJhdG9yIG5leHRPbkxpbmUo
KSBjb25zdDsKLSAgICBSdW5JdGVyYXRvciBwcmV2aW91c09uTGluZSgpIGNvbnN0OwotICAgIFJ1
bkl0ZXJhdG9yIG5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpIGNvbnN0OwotICAgIFJ1bkl0
ZXJhdG9yIHByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSBjb25zdDsKLQotICAgIExp
bmVJdGVyYXRvciBsaW5lKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3Mg
UnVuSXRlcmF0b3I7Ci0gICAgZnJpZW5kIGNsYXNzIFRleHRSdW5JdGVyYXRvcjsKLQotICAgIC8v
IFRvIGhlbHAgd2l0aCBkZWJ1Z2dpbmcuCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCi0gICAgY29uc3QgUnVuSXRlcmF0b3JNb2Rlcm5QYXRoJiBtb2Rlcm5QYXRoKCkgY29u
c3Q7Ci0jZW5kaWYKLSAgICBjb25zdCBSdW5JdGVyYXRvckxlZ2FjeVBhdGgmIGxlZ2FjeVBhdGgo
KSBjb25zdDsKLQotICAgIFBhdGhWYXJpYW50IG1fcGF0aFZhcmlhbnQ7Ci19OwotCi1jbGFzcyBQ
YXRoVGV4dFJ1biA6IHB1YmxpYyBQYXRoUnVuIHsKLXB1YmxpYzoKLSAgICBQYXRoVGV4dFJ1bihQ
YXRoVmFyaWFudCYmKTsKLQotICAgIGJvb2wgaGFzSHlwaGVuKCkgY29uc3Q7Ci0gICAgU3RyaW5n
VmlldyB0ZXh0KCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0OwotICAgIHVu
c2lnbmVkIGVuZCgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotCi0gICAg
dW5zaWduZWQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3Q7Ci0gICAgZmxvYXQgcG9z
aXRpb25Gb3JPZmZzZXQodW5zaWduZWQpIGNvbnN0OwotCi0gICAgVGV4dEJveFNlbGVjdGFibGVS
YW5nZSBzZWxlY3RhYmxlUmFuZ2UoKSBjb25zdDsKLSAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJl
Y3QodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3Q7Ci0KLSAgICBib29sIGlzQ29t
YmluZWRUZXh0KCkgY29uc3Q7Ci0gICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlKCkg
Y29uc3Q7Ci0KLSAgICBUZXh0UnVuIGNyZWF0ZVRleHRSdW4oKSBjb25zdDsKLQotICAgIGNvbnN0
IFJlbmRlclRleHQmIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4
dD4oUGF0aFJ1bjo6cmVuZGVyZXIoKSk7IH0KLSAgICBjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94
KiBsZWdhY3lJbmxpbmVCb3goKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxMZWdhY3lJbmxpbmVU
ZXh0Qm94PihQYXRoUnVuOjpsZWdhY3lJbmxpbmVCb3goKSk7IH0KLQotICAgIFRleHRSdW5JdGVy
YXRvciBuZXh0VGV4dFJ1bigpIGNvbnN0OwotICAgIFRleHRSdW5JdGVyYXRvciBuZXh0VGV4dFJ1
bkluVGV4dE9yZGVyKCkgY29uc3Q7Ci19OwotCi1jbGFzcyBSdW5JdGVyYXRvciB7Ci1wdWJsaWM6
Ci0gICAgUnVuSXRlcmF0b3IoKSA6IG1fcnVuKFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aCB7IG51bGxw
dHIsIHsgfSB9KSB7IH07Ci0gICAgUnVuSXRlcmF0b3IoUGF0aFJ1bjo6UGF0aFZhcmlhbnQmJik7
Ci0gICAgUnVuSXRlcmF0b3IoY29uc3QgUGF0aFJ1biYpOwotCi0gICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgUnVuSXRlcmF0b3ImKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
UnVuSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQot
Ci0gICAgYm9vbCBvcGVyYXRvcj09KEVuZEl0ZXJhdG9yKSBjb25zdCB7IHJldHVybiBhdEVuZCgp
OyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KEVuZEl0ZXJhdG9yKSBjb25zdCB7IHJldHVybiAhYXRF
bmQoKTsgfQotCi0gICAgY29uc3QgUGF0aFJ1biYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g
bV9ydW47IH0KLSAgICBjb25zdCBQYXRoUnVuKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
Jm1fcnVuOyB9Ci0KLSAgICBib29sIGF0RW5kKCkgY29uc3Q7Ci0KLSAgICBSdW5JdGVyYXRvciYg
dHJhdmVyc2VOZXh0T25MaW5lKCk7Ci0gICAgUnVuSXRlcmF0b3ImIHRyYXZlcnNlUHJldmlvdXNP
bkxpbmUoKTsKLSAgICBSdW5JdGVyYXRvciYgdHJhdmVyc2VOZXh0T25MaW5lSWdub3JpbmdMaW5l
QnJlYWsoKTsKLSAgICBSdW5JdGVyYXRvciYgdHJhdmVyc2VQcmV2aW91c09uTGluZUlnbm9yaW5n
TGluZUJyZWFrKCk7Ci0gICAgUnVuSXRlcmF0b3ImIHRyYXZlcnNlTmV4dE9uTGluZUluTG9naWNh
bE9yZGVyKCk7Ci0gICAgUnVuSXRlcmF0b3ImIHRyYXZlcnNlUHJldmlvdXNPbkxpbmVJbkxvZ2lj
YWxPcmRlcigpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgUGF0aFJ1biBtX3J1bjsKLX07Ci0KLWNsYXNz
IFRleHRSdW5JdGVyYXRvciA6IHB1YmxpYyBSdW5JdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgVGV4
dFJ1bkl0ZXJhdG9yKCkgeyB9Ci0gICAgVGV4dFJ1bkl0ZXJhdG9yKFBhdGhSdW46OlBhdGhWYXJp
YW50JiYpOwotICAgIFRleHRSdW5JdGVyYXRvcihjb25zdCBQYXRoUnVuJik7Ci0KLSAgICBUZXh0
UnVuSXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7IHJldHVybiB0cmF2ZXJzZU5leHRUZXh0UnVuKCk7
IH0KLQotICAgIGNvbnN0IFBhdGhUZXh0UnVuJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBn
ZXQoKTsgfQotICAgIGNvbnN0IFBhdGhUZXh0UnVuKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gJmdldCgpOyB9Ci0KLSAgICBUZXh0UnVuSXRlcmF0b3ImIHRyYXZlcnNlTmV4dFRleHRSdW4o
KTsKLSAgICBUZXh0UnVuSXRlcmF0b3ImIHRyYXZlcnNlTmV4dFRleHRSdW5JblRleHRPcmRlcigp
OwotCi1wcml2YXRlOgotICAgIFJ1bkl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRPbkxpbmUoKSA9IGRl
bGV0ZTsKLSAgICBSdW5JdGVyYXRvciYgdHJhdmVyc2VQcmV2aW91c09uTGluZSgpID0gZGVsZXRl
OwotICAgIFJ1bkl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygp
ID0gZGVsZXRlOwotICAgIFJ1bkl0ZXJhdG9yJiB0cmF2ZXJzZVByZXZpb3VzT25MaW5lSWdub3Jp
bmdMaW5lQnJlYWsoKSA9IGRlbGV0ZTsKLSAgICBSdW5JdGVyYXRvciYgdHJhdmVyc2VOZXh0T25M
aW5lSW5Mb2dpY2FsT3JkZXIoKSA9IGRlbGV0ZTsKLSAgICBSdW5JdGVyYXRvciYgdHJhdmVyc2VQ
cmV2aW91c09uTGluZUluTG9naWNhbE9yZGVyKCkgPSBkZWxldGU7Ci0KLSAgICBjb25zdCBQYXRo
VGV4dFJ1biYgZ2V0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8UGF0aFRleHRSdW4+KG1fcnVu
KTsgfQotfTsKLQotY2xhc3MgVGV4dFJ1blJhbmdlIHsKLXB1YmxpYzoKLSAgICBUZXh0UnVuUmFu
Z2UoVGV4dFJ1bkl0ZXJhdG9yIGJlZ2luKQotICAgICAgICA6IG1fYmVnaW4oYmVnaW4pCi0gICAg
ewotICAgIH0KLQotICAgIFRleHRSdW5JdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
YmVnaW47IH0KLSAgICBFbmRJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiB7IH07IH0KLQot
cHJpdmF0ZToKLSAgICBUZXh0UnVuSXRlcmF0b3IgbV9iZWdpbjsKLX07Ci0KLVRleHRSdW5JdGVy
YXRvciBmaXJzdFRleHRSdW5Gb3IoY29uc3QgUmVuZGVyVGV4dCYpOwotVGV4dFJ1bkl0ZXJhdG9y
IGZpcnN0VGV4dFJ1bkluVGV4dE9yZGVyRm9yKGNvbnN0IFJlbmRlclRleHQmKTsKLVRleHRSdW5J
dGVyYXRvciB0ZXh0UnVuRm9yKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gqKTsKLSNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLVRleHRSdW5JdGVyYXRvciB0ZXh0UnVuRm9y
KGNvbnN0IElubGluZUNvbnRlbnQmLCBjb25zdCBJbmxpbmVEaXNwbGF5OjpCb3gmKTsKLVRleHRS
dW5JdGVyYXRvciB0ZXh0UnVuRm9yKGNvbnN0IElubGluZUNvbnRlbnQmLCBzaXplX3QgcnVuSW5k
ZXgpOwotI2VuZGlmCi1UZXh0UnVuUmFuZ2UgdGV4dFJ1bnNGb3IoY29uc3QgUmVuZGVyVGV4dCYp
OwotUnVuSXRlcmF0b3IgcnVuRm9yKGNvbnN0IFJlbmRlckxpbmVCcmVhayYpOwotUnVuSXRlcmF0
b3IgcnVuRm9yKGNvbnN0IFJlbmRlckJveCYpOwotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQotUnVuSXRlcmF0b3IgcnVuRm9yKGNvbnN0IElubGluZUNvbnRlbnQmLCBzaXpl
X3QgcnVuSW5kZXgpOwotI2VuZGlmCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLWlubGluZSBQYXRoUnVuOjpQYXRoUnVuKFBhdGhWYXJpYW50
JiYgcGF0aCkKLSAgICA6IG1fcGF0aFZhcmlhbnQoV1RGTW92ZShwYXRoKSkKLXsKLX0KLQotaW5s
aW5lIGJvb2wgUGF0aFJ1bjo6aXNUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRo
LmlzVGV4dCgpOwotICAgIH0pOwotfQotCi1pbmxpbmUgRmxvYXRSZWN0IFBhdGhSdW46OnJlY3Qo
KSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1
dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGgucmVjdCgpOwotICAgIH0pOwotfQotCi1p
bmxpbmUgYm9vbCBQYXRoUnVuOjppc0hvcml6b250YWwoKSBjb25zdAotewotICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0
dXJuIHBhdGguaXNIb3Jpem9udGFsKCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBib29sIFBhdGhS
dW46OmRpck92ZXJyaWRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3Bh
dGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmRpck92ZXJy
aWRlKCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBib29sIFBhdGhSdW46OmlzTGluZUJyZWFrKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRv
JiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlzTGluZUJyZWFrKCk7Ci0gICAgfSk7Ci19
Ci0KLWlubGluZSB1bnNpZ25lZCBQYXRoUnVuOjptaW5pbXVtQ2FyZXRPZmZzZXQoKSBjb25zdAot
ewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKLSAgICAgICAgcmV0dXJuIHBhdGgubWluaW11bUNhcmV0T2Zmc2V0KCk7Ci0gICAgfSk7Ci19
Ci0KLWlubGluZSB1bnNpZ25lZCBQYXRoUnVuOjptYXhpbXVtQ2FyZXRPZmZzZXQoKSBjb25zdAot
ewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKLSAgICAgICAgcmV0dXJuIHBhdGgubWF4aW11bUNhcmV0T2Zmc2V0KCk7Ci0gICAgfSk7Ci19
Ci0KLWlubGluZSB1bnNpZ25lZCBjaGFyIFBhdGhSdW46OmJpZGlMZXZlbCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewot
ICAgICAgICByZXR1cm4gcGF0aC5iaWRpTGV2ZWwoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIGNv
bnN0IFJlbmRlck9iamVjdCYgUGF0aFJ1bjo6cmVuZGVyZXIoKSBjb25zdAotewotICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIC0+IGNvbnN0IFJl
bmRlck9iamVjdCYgewotICAgICAgICByZXR1cm4gcGF0aC5yZW5kZXJlcigpOwotICAgIH0pOwot
fQotCi1pbmxpbmUgY29uc3QgTGVnYWN5SW5saW5lQm94KiBQYXRoUnVuOjpsZWdhY3lJbmxpbmVC
b3goKSBjb25zdAotewotICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSdW5JdGVyYXRv
ckxlZ2FjeVBhdGg+KG1fcGF0aFZhcmlhbnQpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gV1RGOjpnZXQ8UnVuSXRlcmF0b3JMZWdhY3lQYXRoPihtX3BhdGhWYXJpYW50KS5s
ZWdhY3lJbmxpbmVCb3goKTsKLX0KLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05U
RVhUKQotaW5saW5lIGNvbnN0IElubGluZURpc3BsYXk6OkJveCogUGF0aFJ1bjo6aW5saW5lQm94
KCkgY29uc3QKLXsKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UnVuSXRlcmF0b3JN
b2Rlcm5QYXRoPihtX3BhdGhWYXJpYW50KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuICZXVEY6OmdldDxSdW5JdGVyYXRvck1vZGVyblBhdGg+KG1fcGF0aFZhcmlhbnQpLmJv
eCgpOwotfQotI2VuZGlmCi0KLWlubGluZSBib29sIFBhdGhUZXh0UnVuOjpoYXNIeXBoZW4oKSBj
b25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8m
IHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguaGFzSHlwaGVuKCk7Ci0gICAgfSk7Ci19Ci0K
LWlubGluZSBQYXRoVGV4dFJ1bjo6UGF0aFRleHRSdW4oUGF0aFZhcmlhbnQmJiBwYXRoKQotICAg
IDogUGF0aFJ1bihXVEZNb3ZlKHBhdGgpKQotewotfQotCi1pbmxpbmUgU3RyaW5nVmlldyBQYXRo
VGV4dFJ1bjo6dGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRo
VmFyaWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC50ZXh0KCk7Ci0g
ICAgfSk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBQYXRoVGV4dFJ1bjo6c3RhcnQoKSBjb25zdAot
ewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKLSAgICAgICAgcmV0dXJuIHBhdGguc3RhcnQoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIHVu
c2lnbmVkIFBhdGhUZXh0UnVuOjplbmQoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGgu
ZW5kKCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBQYXRoVGV4dFJ1bjo6bGVuZ3Ro
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShh
dXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmxlbmd0aCgpOwotICAgIH0pOwotfQot
Ci1pbmxpbmUgdW5zaWduZWQgUGF0aFRleHRSdW46Om9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgWyZdKGF1
dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGgub2Zmc2V0Rm9yUG9zaXRpb24oeCk7Ci0g
ICAgfSk7Ci19Ci0KLWlubGluZSBmbG9hdCBQYXRoVGV4dFJ1bjo6cG9zaXRpb25Gb3JPZmZzZXQo
dW5zaWduZWQgb2Zmc2V0KSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0
aFZhcmlhbnQsIFsmXShhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLnBvc2l0aW9u
Rm9yT2Zmc2V0KG9mZnNldCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBUZXh0Qm94U2VsZWN0YWJs
ZVJhbmdlIFBhdGhUZXh0UnVuOjpzZWxlY3RhYmxlUmFuZ2UoKSBjb25zdAotewotICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFsmXShhdXRvJiBwYXRoKSB7Ci0gICAgICAg
IHJldHVybiBwYXRoLnNlbGVjdGFibGVSYW5nZSgpOwotICAgIH0pOwotfQotCi1pbmxpbmUgVGV4
dFJ1biBQYXRoVGV4dFJ1bjo6Y3JlYXRlVGV4dFJ1bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgWyZdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0
dXJuIHBhdGguY3JlYXRlVGV4dFJ1bigpOwotICAgIH0pOwotfQotCi19Ci19Ci0KLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhUZXh0
UnVuKQotc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkxheW91dEludGVncmF0aW9u
OjpQYXRoUnVuJiBydW4pIHsgcmV0dXJuIHJ1bi5pc1RleHQoKTsgfQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6Okxh
eW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3IpCi1zdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yJiBydW5JdGVyYXRvcikg
eyByZXR1cm4gIXJ1bkl0ZXJhdG9yIHx8IHJ1bkl0ZXJhdG9yLT5pc1RleHQoKTsgfQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmggYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvckxlZ2FjeVBhdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRkMjVjMmQ0
ZTk5NmU0NmI4MWM4NTZhN2IyMjhiNzI3MzM4YTE2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvckxlZ2FjeVBhdGguaAorKysgL2Rldi9udWxsCkBA
IC0xLDE3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJM
ZWdhY3lJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAiTGVnYWN5Um9vdElubGluZUJveC5oIgot
I2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNsdWRlICJUZXh0Qm94U2VsZWN0YWJsZVJhbmdl
LmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dEludGVncmF0aW9u
IHsKLQotY2xhc3MgUnVuSXRlcmF0b3JMZWdhY3lQYXRoIHsKLXB1YmxpYzoKLSAgICBSdW5JdGVy
YXRvckxlZ2FjeVBhdGgoY29uc3QgTGVnYWN5SW5saW5lQm94KiBpbmxpbmVCb3gsIFZlY3Rvcjxj
b25zdCBMZWdhY3lJbmxpbmVCb3gqPiYmIHNvcnRlZElubGluZUJveGVzID0geyB9LCBzaXplX3Qg
c29ydGVkSW5saW5lQm94SW5kZXggPSAwKQotICAgICAgICA6IG1faW5saW5lQm94KGlubGluZUJv
eCkKLSAgICAgICAgLCBtX2xvZ2ljYWxPcmRlckNhY2hlKFdURk1vdmUoc29ydGVkSW5saW5lQm94
ZXMpKQotICAgICAgICAsIG1fbG9naWNhbE9yZGVyQ2FjaGVJbmRleChzb3J0ZWRJbmxpbmVCb3hJ
bmRleCkKLSAgICB7IH0KLQotICAgIGVudW0gY2xhc3MgTG9naWNhbE9yZGVyIHsgU3RhcnQsIEVu
ZCB9OwotICAgIFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aChjb25zdCBMZWdhY3lSb290SW5saW5lQm94
JiByb290LCBMb2dpY2FsT3JkZXIgb3JkZXIpCi0gICAgICAgIDogbV9sb2dpY2FsT3JkZXJDYWNo
ZShpbmxpbmVCb3hlc0luTG9naWNhbE9yZGVyKHJvb3QpKQotICAgIHsKLSAgICAgICAgaWYgKCFt
X2xvZ2ljYWxPcmRlckNhY2hlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbV9sb2dpY2FsT3Jk
ZXJDYWNoZUluZGV4ID0gb3JkZXIgPT0gTG9naWNhbE9yZGVyOjpTdGFydCA/IDAgOiBtX2xvZ2lj
YWxPcmRlckNhY2hlLnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBtX2lubGluZUJveCA9IG1fbG9n
aWNhbE9yZGVyQ2FjaGVbbV9sb2dpY2FsT3JkZXJDYWNoZUluZGV4XTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmlzSW5s
aW5lVGV4dEJveCgpOyB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5saW5lQm94LT5mcmFtZVJlY3QoKTsgfQotCi0gICAgYm9vbCBpc0hvcml6b250YWwoKSBjb25z
dCB7IHJldHVybiBtX2lubGluZUJveC0+aXNIb3Jpem9udGFsKCk7IH0KLSAgICBib29sIGRpck92
ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmRpck92ZXJyaWRlKCk7IH0KLSAg
ICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmlzTGluZUJy
ZWFrKCk7IH0KLQotICAgIHVuc2lnbmVkIG1pbmltdW1DYXJldE9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5saW5lQm94LT5jYXJldE1pbk9mZnNldCgpOyB9Ci0gICAgdW5zaWduZWQgbWF4aW11
bUNhcmV0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmNhcmV0TWF4T2Zmc2V0
KCk7IH0KLQotICAgIHVuc2lnbmVkIGNoYXIgYmlkaUxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9p
bmxpbmVCb3gtPmJpZGlMZXZlbCgpOyB9Ci0KLSAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0IHsg
cmV0dXJuIGlubGluZVRleHRCb3goKS0+aGFzSHlwaGVuKCk7IH0KLSAgICBTdHJpbmdWaWV3IHRl
eHQoKSBjb25zdCB7IHJldHVybiBTdHJpbmdWaWV3KGlubGluZVRleHRCb3goKS0+cmVuZGVyZXIo
KS50ZXh0KCkpLnN1YnN0cmluZyhpbmxpbmVUZXh0Qm94KCktPnN0YXJ0KCksIGlubGluZVRleHRC
b3goKS0+bGVuKCkpOyB9Ci0gICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBpbmxp
bmVUZXh0Qm94KCktPnN0YXJ0KCk7IH0KLSAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVy
biBpbmxpbmVUZXh0Qm94KCktPmVuZCgpOyB9Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5sZW4oKTsgfQotCi0gICAgdW5zaWduZWQgb2Zmc2V0
Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5vZmZz
ZXRGb3JQb3NpdGlvbih4KTsgfQotICAgIGZsb2F0IHBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVk
IG9mZnNldCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5wb3NpdGlvbkZvck9mZnNl
dChvZmZzZXQpOyB9Ci0KLSAgICBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlIHNlbGVjdGFibGVSYW5n
ZSgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+c2VsZWN0YWJsZVJhbmdlKCk7IH0K
LQotICAgIFRleHRSdW4gY3JlYXRlVGV4dFJ1bigpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRC
b3goKS0+Y3JlYXRlVGV4dFJ1bigpOyB9Ci0KLSAgICBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
cmVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2lubGluZUJveC0+cmVuZGVyZXIo
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRSdW4oKSB7IG1faW5saW5lQm94
ID0gaW5saW5lVGV4dEJveCgpLT5uZXh0VGV4dEJveCgpOyB9Ci0gICAgdm9pZCB0cmF2ZXJzZU5l
eHRUZXh0UnVuSW5UZXh0T3JkZXIoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2xvZ2ljYWxPcmRl
ckNhY2hlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgdHJhdmVyc2VOZXh0SW5saW5lQm94SW5D
YWNoZU9yZGVyKCk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1faW5saW5lQm94IHx8IGlzPExlZ2Fj
eUlubGluZVRleHRCb3g+KG1faW5saW5lQm94KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgdHJhdmVyc2VOZXh0VGV4dFJ1bigpOwotICAgIH0KLQotICAgIHZvaWQg
dHJhdmVyc2VOZXh0T25MaW5lKCkKLSAgICB7Ci0gICAgICAgIG1faW5saW5lQm94ID0gbV9pbmxp
bmVCb3gtPm5leHRMZWFmT25MaW5lKCk7Ci0gICAgfQotCi0gICAgdm9pZCB0cmF2ZXJzZVByZXZp
b3VzT25MaW5lKCkKLSAgICB7Ci0gICAgICAgIG1faW5saW5lQm94ID0gbV9pbmxpbmVCb3gtPnBy
ZXZpb3VzTGVhZk9uTGluZSgpOwotICAgIH0KLQotICAgIHZvaWQgdHJhdmVyc2VOZXh0T25MaW5l
SW5Mb2dpY2FsT3JkZXIoKQotICAgIHsKLSAgICAgICAgaW5pdGlhbGl6ZUxvZ2ljYWxPcmRlckNh
Y2hlRm9yTGluZSgpOwotICAgICAgICB0cmF2ZXJzZU5leHRJbmxpbmVCb3hJbkNhY2hlT3JkZXIo
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNPbkxpbmVJbkxvZ2ljYWxPcmRl
cigpCi0gICAgewotICAgICAgICBpbml0aWFsaXplTG9naWNhbE9yZGVyQ2FjaGVGb3JMaW5lKCk7
Ci0gICAgICAgIHRyYXZlcnNlUHJldmlvdXNJbmxpbmVCb3hJbkNhY2hlT3JkZXIoKTsKLSAgICB9
Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUnVuSXRlcmF0b3JMZWdhY3lQYXRoJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3ggPT0gb3RoZXIubV9pbmxpbmVCb3g7IH0KLQot
ICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9pbmxpbmVCb3g7IH0KLQotICAgIExl
Z2FjeUlubGluZUJveCogbGVnYWN5SW5saW5lQm94KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2Fz
dDxMZWdhY3lJbmxpbmVCb3gqPihtX2lubGluZUJveCk7IH0KLSAgICBjb25zdCBMZWdhY3lSb290
SW5saW5lQm94JiByb290SW5saW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPnJv
b3QoKTsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gqIGlubGlu
ZVRleHRCb3goKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxMZWdhY3lJbmxpbmVUZXh0Qm94Piht
X2lubGluZUJveCk7IH0KLQotICAgIHN0YXRpYyBWZWN0b3I8Y29uc3QgTGVnYWN5SW5saW5lQm94
Kj4gaW5saW5lQm94ZXNJbkxvZ2ljYWxPcmRlcihjb25zdCBMZWdhY3lSb290SW5saW5lQm94JiBy
b290KQotICAgIHsKLSAgICAgICAgVmVjdG9yPExlZ2FjeUlubGluZUJveCo+IGlubGluZUJveGVz
OwotICAgICAgICByb290LmNvbGxlY3RMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcihpbmxpbmVCb3hl
cyk7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFZlY3Rvcjxjb25zdCBMZWdhY3lJ
bmxpbmVCb3gqPiY+KGlubGluZUJveGVzKTsKLSAgICB9Ci0gICAgdm9pZCBpbml0aWFsaXplTG9n
aWNhbE9yZGVyQ2FjaGVGb3JMaW5lKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9pbmxpbmVCb3gg
fHwgIW1fbG9naWNhbE9yZGVyQ2FjaGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2xvZ2ljYWxPcmRlckNhY2hlID0gaW5saW5lQm94ZXNJbkxvZ2ljYWxPcmRlciht
X2lubGluZUJveC0+cm9vdCgpKTsKLSAgICAgICAgZm9yIChtX2xvZ2ljYWxPcmRlckNhY2hlSW5k
ZXggPSAwOyBtX2xvZ2ljYWxPcmRlckNhY2hlSW5kZXggPCBtX2xvZ2ljYWxPcmRlckNhY2hlLnNp
emUoKTsgKyttX2xvZ2ljYWxPcmRlckNhY2hlSW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChtX2xv
Z2ljYWxPcmRlckNhY2hlW21fbG9naWNhbE9yZGVyQ2FjaGVJbmRleF0gPT0gbV9pbmxpbmVCb3gp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHZvaWQgdHJhdmVyc2VOZXh0SW5saW5lQm94SW5DYWNo
ZU9yZGVyKCk7Ci0gICAgdm9pZCB0cmF2ZXJzZVByZXZpb3VzSW5saW5lQm94SW5DYWNoZU9yZGVy
KCk7Ci0KLSAgICBjb25zdCBMZWdhY3lJbmxpbmVCb3gqIG1faW5saW5lQm94IHsgbnVsbHB0ciB9
OwotICAgIFJlZkNvdW50ZWRBcnJheTxjb25zdCBMZWdhY3lJbmxpbmVCb3gqPiBtX2xvZ2ljYWxP
cmRlckNhY2hlOwotICAgIHNpemVfdCBtX2xvZ2ljYWxPcmRlckNhY2hlSW5kZXggeyAwIH07Ci19
OwotCi0KLWlubGluZSB2b2lkIFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aDo6dHJhdmVyc2VOZXh0SW5s
aW5lQm94SW5DYWNoZU9yZGVyKCkKLXsKLSAgICBBU1NFUlQoIW1fbG9naWNhbE9yZGVyQ2FjaGUu
aXNFbXB0eSgpKTsKLSAgICArK21fbG9naWNhbE9yZGVyQ2FjaGVJbmRleDsKLSAgICBtX2lubGlu
ZUJveCA9IG1fbG9naWNhbE9yZGVyQ2FjaGVJbmRleCA8IG1fbG9naWNhbE9yZGVyQ2FjaGUuc2l6
ZSgpID8gbV9sb2dpY2FsT3JkZXJDYWNoZVttX2xvZ2ljYWxPcmRlckNhY2hlSW5kZXhdIDogbnVs
bHB0cjsKLX0KLQotaW5saW5lIHZvaWQgUnVuSXRlcmF0b3JMZWdhY3lQYXRoOjp0cmF2ZXJzZVBy
ZXZpb3VzSW5saW5lQm94SW5DYWNoZU9yZGVyKCkKLXsKLSAgICBBU1NFUlQoIW1fbG9naWNhbE9y
ZGVyQ2FjaGUuaXNFbXB0eSgpKTsKLSAgICBpZiAoIW1fbG9naWNhbE9yZGVyQ2FjaGVJbmRleCkg
ewotICAgICAgICBtX2lubGluZUJveCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgbV9pbmxpbmVCb3ggPSBtX2xvZ2ljYWxPcmRlckNhY2hlWy0tbV9sb2dpY2FsT3JkZXJD
YWNoZUluZGV4XTsKLX0KLQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmggYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvck1vZGVyblBhdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYzYWUxNzlm
OGFkZDBmMzVjYzRiNTNhZmVmMTljMWRlYjc2MWRlYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaAorKysgL2Rldi9udWxsCkBA
IC0xLDIzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0j
aW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmgiCi0jaW5jbHVkZSAiVGV4
dEJveFNlbGVjdGFibGVSYW5nZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFj
ZSBMYXlvdXRJbnRlZ3JhdGlvbiB7Ci0KLWNsYXNzIFJ1bkl0ZXJhdG9yTW9kZXJuUGF0aCB7Ci1w
dWJsaWM6Ci0gICAgUnVuSXRlcmF0b3JNb2Rlcm5QYXRoKGNvbnN0IElubGluZUNvbnRlbnQmIGlu
bGluZUNvbnRlbnQpCi0gICAgICAgIDogbV9pbmxpbmVDb250ZW50KCZpbmxpbmVDb250ZW50KQot
ICAgIHsKLSAgICAgICAgc2V0QXRFbmQoKTsKLSAgICB9Ci0gICAgUnVuSXRlcmF0b3JNb2Rlcm5Q
YXRoKGNvbnN0IElubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIHNpemVfdCBzdGFydEluZGV4
KQotICAgICAgICA6IG1faW5saW5lQ29udGVudCgmaW5saW5lQ29udGVudCkKLSAgICAgICAgLCBt
X2JveEluZGV4KHN0YXJ0SW5kZXgpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgaXNUZXh0KCkg
Y29uc3QgeyByZXR1cm4gISFib3goKS50ZXh0KCk7IH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkg
Y29uc3QgeyByZXR1cm4gYm94KCkubG9naWNhbFJlY3QoKTsgfQotCi0gICAgYm9vbCBpc0hvcml6
b250YWwoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9vbCBkaXJPdmVycmlkZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0
dXJuIGJveCgpLmlzTGluZUJyZWFrKCk7IH0KLQotICAgIHVuc2lnbmVkIG1pbmltdW1DYXJldE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dCgpID8gc3RhcnQoKSA6IDA7IH0KLSAgICB1bnNp
Z25lZCBtYXhpbXVtQ2FyZXRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBpc1RleHQoKSA/IGVuZCgp
IDogMTsgfQotCi0gICAgdW5zaWduZWQgY2hhciBiaWRpTGV2ZWwoKSBjb25zdCB7IHJldHVybiAw
OyB9Ci0KLSAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0IHsgcmV0dXJuIGJveCgpLnRleHQoKS0+
aGFzSHlwaGVuKCk7IH0KLSAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdCB7IHJldHVybiBib3go
KS50ZXh0KCktPm9yaWdpbmFsQ29udGVudCgpOyB9Ci0gICAgdW5zaWduZWQgc3RhcnQoKSBjb25z
dCB7IHJldHVybiBib3goKS50ZXh0KCktPnN0YXJ0KCk7IH0KLSAgICB1bnNpZ25lZCBlbmQoKSBj
b25zdCB7IHJldHVybiBib3goKS50ZXh0KCktPmVuZCgpOyB9Ci0gICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gYm94KCkudGV4dCgpLT5sZW5ndGgoKTsgfQotCi0gICAgLy8gRklY
TUU6IE1ha2UgYSBzaGFyZWQgZ2VuZXJpYyB2ZXJzaW9uIG9mIHRoaXMuCi0gICAgaW5saW5lIHVu
c2lnbmVkIG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0Ci0gICAgewotICAgICAgICBp
ZiAoaXNMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBhdXRvIHJl
Y3QgPSB0aGlzLT5yZWN0KCk7Ci0gICAgICAgIGF1dG8gbG9jYWxYID0geCAtIHJlY3QueCgpOwot
ICAgICAgICBpZiAobG9jYWxYID4gcmVjdC53aWR0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGxl
bmd0aCgpOwotICAgICAgICBpZiAobG9jYWxYIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAwOwot
Ci0gICAgICAgIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0cnVlOwotICAgICAgICByZXR1
cm4gYm94KCkuc3R5bGUoKS5mb250Q2FzY2FkZSgpLm9mZnNldEZvclBvc2l0aW9uKGNyZWF0ZVRl
eHRSdW4oSHlwaGVuTW9kZTo6SWdub3JlKSwgbG9jYWxYLCBpbmNsdWRlUGFydGlhbEdseXBocyk7
Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IE1ha2UgYSBzaGFyZWQgZ2VuZXJpYyB2ZXJzaW9uIG9m
IHRoaXMuCi0gICAgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKG9mZnNldCA+PSBzdGFydCgpKTsKLSAgICAgICAgQVNT
RVJUKG9mZnNldCA8PSBlbmQoKSk7Ci0KLSAgICAgICAgaWYgKGlzTGluZUJyZWFrKCkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVjdCgpLngoKTsKLQotICAgICAgICBhdXRvIGVuZE9mZnNldCA9IHNl
bGVjdGFibGVSYW5nZSgpLmNsYW1wKG9mZnNldCk7Ci0KLSAgICAgICAgTGF5b3V0UmVjdCBzZWxl
Y3Rpb25SZWN0ID0gTGF5b3V0UmVjdChyZWN0KCkueCgpLCAwLCAwLCAwKTsKLSAgICAgICAgVGV4
dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bihIeXBoZW5Nb2RlOjpJZ25vcmUpOwotICAgICAg
ICBib3goKS5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQo
dGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgMCwgZW5kT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIHNu
YXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCBy
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5sdHIoKSku
bWF4WCgpOwotICAgIH0KLQotICAgIFRleHRCb3hTZWxlY3RhYmxlUmFuZ2Ugc2VsZWN0YWJsZVJh
bmdlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBzdGFydCgp
LAotICAgICAgICAgICAgbGVuZ3RoKCksCi0gICAgICAgICAgICBib3goKS50ZXh0KCktPmhhc0h5
cGhlbigpID8gYm94KCkuc3R5bGUoKS5oeXBoZW5TdHJpbmcoKS5sZW5ndGgoKSA6IDAsCi0gICAg
ICAgICAgICBib3goKS5pc0xpbmVCcmVhaygpCi0gICAgICAgIH07Ci0gICAgfQotCi0gICAgVGV4
dFJ1biBjcmVhdGVUZXh0UnVuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVU
ZXh0UnVuKEh5cGhlbk1vZGU6OkluY2x1ZGUpOwotICAgIH07Ci0KLSAgICBjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2lubGluZUNv
bnRlbnQtPnJlbmRlcmVyRm9yTGF5b3V0Qm94KGJveCgpLmxheW91dEJveCgpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRSdW4oKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFh
dEVuZCgpKTsKLSAgICAgICAgQVNTRVJUKGJveCgpLnRleHQoKSk7Ci0KLSAgICAgICAgYXV0byYg
bGF5b3V0Qm94ID0gYm94KCkubGF5b3V0Qm94KCk7Ci0KLSAgICAgICAgdHJhdmVyc2VOZXh0TGVh
ZigpOwotCi0gICAgICAgIGlmICghYXRFbmQoKSAmJiAmbGF5b3V0Qm94ICE9ICZib3goKS5sYXlv
dXRCb3goKSkKLSAgICAgICAgICAgIHNldEF0RW5kKCk7Ci0KLSAgICAgICAgQVNTRVJUKGF0RW5k
KCkgfHwgYm94KCkudGV4dCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRS
dW5JblRleHRPcmRlcigpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogTm8gUlRMIGluIExGQy4K
LSAgICAgICAgdHJhdmVyc2VOZXh0VGV4dFJ1bigpOwotICAgIH0KLQotICAgIHZvaWQgdHJhdmVy
c2VOZXh0T25MaW5lKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghYXRFbmQoKSk7Ci0KLSAgICAg
ICAgYXV0byBvbGRMaW5lSW5kZXggPSBib3goKS5saW5lSW5kZXgoKTsKLQotICAgICAgICB0cmF2
ZXJzZU5leHRMZWFmKCk7Ci0KLSAgICAgICAgaWYgKCFhdEVuZCgpICYmIG9sZExpbmVJbmRleCAh
PSBib3goKS5saW5lSW5kZXgoKSkKLSAgICAgICAgICAgIHNldEF0RW5kKCk7Ci0gICAgfQotCi0g
ICAgdm9pZCB0cmF2ZXJzZVByZXZpb3VzT25MaW5lKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCgh
YXRFbmQoKSk7Ci0KLSAgICAgICAgYXV0byBvbGRMaW5lSW5kZXggPSBib3goKS5saW5lSW5kZXgo
KTsKLQotICAgICAgICB0cmF2ZXJzZVByZXZpb3VzTGVhZigpOwotCi0gICAgICAgIGlmICghYXRF
bmQoKSAmJiBvbGRMaW5lSW5kZXggIT0gYm94KCkubGluZUluZGV4KCkpCi0gICAgICAgICAgICBz
ZXRBdEVuZCgpOwotICAgIH0KLQotICAgIHZvaWQgdHJhdmVyc2VOZXh0T25MaW5lSW5Mb2dpY2Fs
T3JkZXIoKQotICAgIHsKLSAgICAgICAgdHJhdmVyc2VOZXh0T25MaW5lKCk7Ci0gICAgfQotCi0g
ICAgdm9pZCB0cmF2ZXJzZVByZXZpb3VzT25MaW5lSW5Mb2dpY2FsT3JkZXIoKQotICAgIHsKLSAg
ICAgICAgdHJhdmVyc2VQcmV2aW91c09uTGluZSgpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBSdW5JdGVyYXRvck1vZGVyblBhdGgmIG90aGVyKSBjb25zdCB7IHJldHVybiBt
X2lubGluZUNvbnRlbnQgPT0gb3RoZXIubV9pbmxpbmVDb250ZW50ICYmIG1fYm94SW5kZXggPT0g
b3RoZXIubV9ib3hJbmRleDsgfQotCi0gICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ym94SW5kZXggPT0gYm94ZXMoKS5zaXplKCk7IH0KLSAgICBjb25zdCBJbmxpbmVEaXNwbGF5OjpC
b3gmIGJveCgpIGNvbnN0IHsgcmV0dXJuIGJveGVzKClbbV9ib3hJbmRleF07IH0KLQotcHJpdmF0
ZToKLSAgICBmcmllbmQgY2xhc3MgTGluZUl0ZXJhdG9yTW9kZXJuUGF0aDsKLSAgICBmcmllbmQg
Y2xhc3MgUGF0aFJ1bjsKLSAgICBmcmllbmQgY2xhc3MgUnVuSXRlcmF0b3I7Ci0KLSAgICB2b2lk
IHRyYXZlcnNlTmV4dExlYWYoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFhdEVuZCgpKTsKLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgKyttX2JveEluZGV4OwotICAgICAgICB9IHdoaWxlICgh
YXRFbmQoKSAmJiBib3goKS5pc0lubGluZUJveCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZl
cnNlUHJldmlvdXNMZWFmKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghYXRFbmQoKSk7Ci0gICAg
ICAgIGRvIHsKLSAgICAgICAgICAgIG1fYm94SW5kZXggPSBtX2JveEluZGV4ID8gbV9ib3hJbmRl
eCAtIDEgOiBib3hlcygpLnNpemUoKTsKLSAgICAgICAgfSB3aGlsZSAoIWF0RW5kKCkgJiYgYm94
KCkuaXNJbmxpbmVCb3goKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBdEVuZCgpIHsgbV9ib3hJ
bmRleCA9IGJveGVzKCkuc2l6ZSgpOyB9Ci0KLSAgICBjb25zdCBJbmxpbmVDb250ZW50OjpCb3hl
cyYgYm94ZXMoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUNvbnRlbnQtPmJveGVzOyB9Ci0gICAg
Y29uc3QgTGluZSYgbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGVudC0+bGluZUZv
ckJveChib3goKSk7IH0KLQotICAgIGVudW0gY2xhc3MgSHlwaGVuTW9kZSB7IEluY2x1ZGUsIEln
bm9yZSB9OwotICAgIFRleHRSdW4gY3JlYXRlVGV4dFJ1bihIeXBoZW5Nb2RlIGh5cGhlbk1vZGUp
IGNvbnN0Ci0gICAgewotICAgICAgICBhdXRvJiBzdHlsZSA9IGJveCgpLnN0eWxlKCk7Ci0gICAg
ICAgIGF1dG8gZXhwYW5zaW9uID0gYm94KCkuZXhwYW5zaW9uKCk7Ci0gICAgICAgIGF1dG8gcmVj
dCA9IHRoaXMtPnJlY3QoKTsKLSAgICAgICAgYXV0byB4UG9zID0gcmVjdC54KCkgLSAobGluZSgp
LmxpbmVCb3hMZWZ0KCkgKyBsaW5lKCkuY29udGVudExlZnQoKSk7Ci0KLSAgICAgICAgYXV0byB0
ZXh0Rm9yUnVuID0gWyZdIHsKLSAgICAgICAgICAgIGlmIChoeXBoZW5Nb2RlID09IEh5cGhlbk1v
ZGU6Oklnbm9yZSB8fCAhaGFzSHlwaGVuKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRleHQo
KS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKHRleHQoKSwgc3R5bGUuaHlwaGVuU3RyaW5nKCkpOwotICAgICAgICB9KCk7Ci0KLSAgICAg
ICAgVGV4dFJ1biB0ZXh0UnVuIHsgdGV4dEZvclJ1biwgeFBvcywgZXhwYW5zaW9uLmhvcml6b250
YWxFeHBhbnNpb24sIGV4cGFuc2lvbi5iZWhhdmlvciB9OwotICAgICAgICB0ZXh0UnVuLnNldFRh
YlNpemUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50YWJTaXplKCkpOwotICAg
ICAgICByZXR1cm4gdGV4dFJ1bjsKLSAgICB9OwotCi0gICAgUmVmUHRyPGNvbnN0IElubGluZUNv
bnRlbnQ+IG1faW5saW5lQ29udGVudDsKLSAgICBzaXplX3QgbV9ib3hJbmRleCB7IDAgfTsKLX07
Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA5NGUxYTBmNzliNGZlM2ZhMTUyMWU5ZWQ1
MjI3OWQ0YmUwMDc4MmFmLi5kZGFkMDMzYzFlMzgwMGQyMThkMTI4MDA5OTFiZTk1MGM1NDZmNDUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAKQEAgLTQxLDE1ICs0MSwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFRleHRSdW5JdGVyYXRvciB7CitjbGFzcyBUZXh0Qm94SXRlcmF0b3IgewogcHVibGlj
OgotICAgIFRleHRSdW5JdGVyYXRvcigpCisgICAgVGV4dEJveEl0ZXJhdG9yKCkKICAgICAgICAg
OiBtX3RleHRSdW4oMCkKICAgICAgICAgLCBtX29mZnNldCgwKQogICAgIHsKICAgICB9CiAKLSAg
ICBUZXh0UnVuSXRlcmF0b3IoY29uc3QgVGV4dFJ1biogdGV4dFJ1biwgdW5zaWduZWQgb2Zmc2V0
KQorICAgIFRleHRCb3hJdGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBv
ZmZzZXQpCiAgICAgICAgIDogbV90ZXh0UnVuKHRleHRSdW4pCiAgICAgICAgICwgbV9vZmZzZXQo
b2Zmc2V0KQogICAgIHsKQEAgLTYxLDEyICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgVUNoYXIgY3Vy
cmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90ZXh0UnVuKVttX29mZnNldF07IH0KICAgICBVQ2hh
ckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9O
RVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1cnJlbnQoKSk7IH0KIAotICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUZXh0UnVuSXRlcmF0b3ImIG90aGVyKQorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb2Zm
c2V0ID09IG90aGVyLm1fb2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47CiAg
ICAgfQogCi0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRSdW5JdGVyYXRvciYgb3RoZXIp
IHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSB7IHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7IH0K
IAogcHJpdmF0ZToKICAgICBjb25zdCBUZXh0UnVuKiBtX3RleHRSdW47CkBAIC00OTksMTQgKzQ5
OSwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQogewotICAgIEJpZGlSZXNvbHZlcjxUZXh0
UnVuSXRlcmF0b3IsIEJpZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKKyAgICBCaWRpUmVz
b2x2ZXI8VGV4dEJveEl0ZXJhdG9yLCBCaWRpQ2hhcmFjdGVyUnVuPiBiaWRpUmVzb2x2ZXI7CiAg
ICAgYmlkaVJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3RhdHVzKHJ1bi5kaXJlY3Rpb24oKSwgcnVu
LmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSkpOwotICAgIGJpZGlSZXNvbHZlci5zZXRQb3NpdGlvbkln
bm9yaW5nTmVzdGVkSXNvbGF0ZXMoVGV4dFJ1bkl0ZXJhdG9yKCZydW4sIDApKTsKKyAgICBiaWRp
UmVzb2x2ZXIuc2V0UG9zaXRpb25JZ25vcmluZ05lc3RlZElzb2xhdGVzKFRleHRCb3hJdGVyYXRv
cigmcnVuLCAwKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvd25lcnNoaXAgc2hvdWxkIGJlIHJl
dmVyc2VkLiBXZSBzaG91bGQgcGFzcyBCaWRpUnVuTGlzdAogICAgIC8vIHRvIEJpZGlSZXNvbHZl
ciBpbiBjcmVhdGVCaWRpUnVuc0ZvckxpbmUuCiAgICAgQmlkaVJ1bkxpc3Q8QmlkaUNoYXJhY3Rl
clJ1bj4mIGJpZGlSdW5zID0gYmlkaVJlc29sdmVyLnJ1bnMoKTsKLSAgICBiaWRpUmVzb2x2ZXIu
Y3JlYXRlQmlkaVJ1bnNGb3JMaW5lKFRleHRSdW5JdGVyYXRvcigmcnVuLCBydW4ubGVuZ3RoKCkp
KTsKKyAgICBiaWRpUmVzb2x2ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKFRleHRCb3hJdGVyYXRv
cigmcnVuLCBydW4ubGVuZ3RoKCkpKTsKIAogICAgIGlmICghYmlkaVJ1bnMucnVuQ291bnQoKSkK
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Nh
cmV0UmVjdENvbXB1dGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DYXJldFJl
Y3RDb21wdXRhdGlvbi5jcHAKaW5kZXggZTJmZDI5OWUxYjcyNjEyODVlNjFkN2UzMDQ3MmQ0ZGNl
MjI3ZDFkZS4uOTk4MDg3ODQxODQzZTVlOTM3YjY3NjA1MDAzNDJlYzVjY2NjNGUzMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwCkBA
IC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiQ2FyZXRSZWN0Q29tcHV0YXRpb24uaCIKIAogI2lu
Y2x1ZGUgIkVkaXRpbmcuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRv
ci5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaCIKKyNpbmNsdWRl
ICJJbmxpbmVJdGVyYXRvckJveC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZS5oIgog
I2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgog
I2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgpAQCAtMTA5LDcgKzEwOSw3IEBAIHN0YXRpYyBM
YXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQoY29uc3QgUmVuZGVyQm94
TW9kZWxPYmplY3QmIHJlCiAgICAgcmV0dXJuIGN1cnJlbnRTdHlsZS5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gcmVjdCA6IHJlY3QudHJhbnNwb3NlZFJlY3QoKTsKIH0KIAotc3RhdGljIExh
eW91dFJlY3QgY29tcHV0ZUNhcmV0UmVjdEZvckxpbmVQb3NpdGlvbihjb25zdCBMYXlvdXRJbnRl
Z3JhdGlvbjo6TGluZUl0ZXJhdG9yJiBsaW5lLCBmbG9hdCBsb2dpY2FsTGVmdFBvc2l0aW9uLCBD
YXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUpCitzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2Fy
ZXRSZWN0Rm9yTGluZVBvc2l0aW9uKGNvbnN0IElubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3Im
IGxpbmUsIGZsb2F0IGxvZ2ljYWxMZWZ0UG9zaXRpb24sIENhcmV0UmVjdE1vZGUgY2FyZXRSZWN0
TW9kZSkKIHsKICAgICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSBsaW5lLT5jb250YWluaW5nQmxv
Y2soKTsKICAgICBhdXRvIGxpbmVTZWxlY3Rpb25SZWN0ID0gbGluZS0+c2VsZWN0aW9uUmVjdCgp
OwpAQCAtMTcxLDcgKzE3MSw3IEBAIHN0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RG
b3JUZXh0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0CiAgICAgaWYgKCFy
dW5BbmRPZmZzZXQucnVuKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byYgdGV4dFJ1
biA9IGRvd25jYXN0PExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3I+KHJ1bkFuZE9m
ZnNldC5ydW4pOworICAgIGF1dG8mIHRleHRSdW4gPSBkb3duY2FzdDxJbmxpbmVJdGVyYXRvcjo6
VGV4dEJveEl0ZXJhdG9yPihydW5BbmRPZmZzZXQucnVuKTsKICAgICBhdXRvIGxpbmUgPSB0ZXh0
UnVuLT5saW5lKCk7CiAKICAgICBmbG9hdCBwb3NpdGlvbiA9IHRleHRSdW4tPnBvc2l0aW9uRm9y
T2Zmc2V0KHJ1bkFuZE9mZnNldC5vZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKaW5kZXggZmIyMjJmZDRlZmFmNTNiNjg1MGU2OTQ2MzA3
NDI4MGQyMmZjYjk2Ny4uOGE1Y2VmNjFmNjQyYzJhZTdhNjJmMmQ5NjNkZTgzYjU3MTEzYTg1YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oCkBA
IC0zMSw4ICszMSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyQ29tYmlu
ZVRleHQ7CiAKLW5hbWVzcGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7Ci1jbGFzcyBSdW5JdGVyYXRv
ckxlZ2FjeVBhdGg7CituYW1lc3BhY2UgSW5saW5lSXRlcmF0b3IgeworY2xhc3MgQm94SXRlcmF0
b3JMZWdhY3lQYXRoOwogfQogCiBjbGFzcyBMZWdhY3lJbmxpbmVUZXh0Qm94IDogcHVibGljIExl
Z2FjeUlubGluZUJveCB7CkBAIC0xNTQsNyArMTU0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
TWFya2VycygpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRJbnRl
Z3JhdGlvbjo6UnVuSXRlcmF0b3JMZWdhY3lQYXRoOworICAgIGZyaWVuZCBjbGFzcyBJbmxpbmVJ
dGVyYXRvcjo6Qm94SXRlcmF0b3JMZWdhY3lQYXRoOwogICAgIGZyaWVuZCBjbGFzcyBUZXh0Qm94
UGFpbnRlcjsKIAogICAgIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRleHQoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5
b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcApp
bmRleCAxNzkzOTVkZmQyNTZlM2ViMDY3YzlkOWJhYWQzNTRlMWE0ZTUxNWJkLi5lZThiMDQ0Y2E2
OWQzZGFjMmE1M2Y3YmU2ZDNlMmE4ODAxNTUxZGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuY3BwCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAi
QnJlYWtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgiCiAjaW5jbHVk
ZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94LmgiCiAj
aW5jbHVkZSAiSW5saW5lVGV4dEJveFN0eWxlLmgiCiAjaW5jbHVkZSAiSW5saW5lV2Fsa2VyLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2luY2x1ZGUgIkxl
Z2FjeUlubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJMZWdhY3lJbmxpbmVJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkxlZ2FjeUlubGluZVRleHRCb3guaCIKQEAgLTU0Nyw3ICs1NDcsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bihMZWdhY3lSb290SW5s
aW5lQm94KiBsaW5lQm94LCBCaWRpUgogCiAgICAgLy8gSW5jbHVkZSB0ZXh0IGRlY29yYXRpb24g
dmlzdWFsIG92ZXJmbG93IGFzIHBhcnQgb2YgdGhlIGdseXBoIG92ZXJmbG93LgogICAgIGlmICgh
cmVuZGVyZXIuc3R5bGUoKS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLmlzRW1wdHkoKSkKLSAg
ICAgICAgZ2x5cGhPdmVyZmxvdy5leHRlbmRUbyh2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25z
KHJ1bi0+Ym94KCktPmxpbmVTdHlsZSgpLCBMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bkZvcihk
b3duY2FzdDxMZWdhY3lJbmxpbmVUZXh0Qm94PihydW4tPmJveCgpKSkpKTsKKyAgICAgICAgZ2x5
cGhPdmVyZmxvdy5leHRlbmRUbyh2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zKHJ1bi0+Ym94
KCktPmxpbmVTdHlsZSgpLCBJbmxpbmVJdGVyYXRvcjo6dGV4dFJ1bkZvcihkb3duY2FzdDxMZWdh
Y3lJbmxpbmVUZXh0Qm94PihydW4tPmJveCgpKSkpKTsKIAogICAgIGlmICghZ2x5cGhPdmVyZmxv
dy5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJUKHJ1bi0+Ym94KCktPmJlaGF2ZXNMaWtlVGV4
dCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5k
ZXggYzFjNGJmYzZlODQ1ZTZjMWUyZmQxNjNiZWU4NjhmYWQ0NzRmYTVjNy4uZjE0MTAwYzc0ZGY2
NDAwMmJkN2NmMjFjNzVmMzA3ZDU2ZWU0NzIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTMzLDkgKzMzLDkgQEAKICNpbmNsdWRlICJIVE1M
UGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhpdFRlc3RMb2NhdGlvbi5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0
ZXJhdG9yLmgiCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKKyNpbmNsdWRlICJJbmxp
bmVJdGVyYXRvckxpbmUuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
aCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
TGF5b3V0UmVwYWludGVyLmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIkxlZ2FjeUxpbmVMYXlvdXQuaCIKQEAgLTMwNDEsNyArMzA0MSw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2tGbG93OjphZGp1c3RGb3JCb3JkZXJGaXQoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0
JiBsZWZ0LCBMYXlvdXRVCiAgICAgLy8gV2UgZG9uJ3QgZGVhbCB3aXRoIHJlbGF0aXZlIHBvc2l0
aW9uaW5nLiAgT3VyIGFzc3VtcHRpb24gaXMgdGhhdCB5b3Ugc2hyaW5rIHRvIGZpdCB0aGUgbGlu
ZXMgd2l0aG91dCBhY2NvdW50aW5nCiAgICAgLy8gZm9yIGVpdGhlciBvdmVyZmxvdyBvciB0cmFu
c2xhdGlvbnMgdmlhIHJlbGF0aXZlIHBvc2l0aW9uaW5nLgogICAgIGlmIChjaGlsZHJlbklubGlu
ZSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byBsaW5lID0gTGF5b3V0SW50ZWdyYXRpb246OmZpcnN0
TGluZUZvcigqdGhpcyk7IGxpbmU7IGxpbmUudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgZm9y
IChhdXRvIGxpbmUgPSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RMaW5lRm9yKCp0aGlzKTsgbGluZTsg
bGluZS50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICAgICAgbGVmdCA9IHN0ZDo6bWluKGxlZnQs
IHggKyBMYXlvdXRVbml0KGxpbmUtPmNvbnRlbnRMb2dpY2FsTGVmdCgpKSk7CiAgICAgICAgICAg
ICByaWdodCA9IHN0ZDo6bWF4KHJpZ2h0LCB4ICsgTGF5b3V0VW5pdChjZWlsZihsaW5lLT5jb250
ZW50TG9naWNhbFJpZ2h0KCkpKSk7CiAgICAgICAgIH0KQEAgLTMyNDgsNyArMzI0OCw3IEBAIExh
eW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphZGp1c3RTZWxlY3Rpb25Ub3BGb3JQcmVjZWRpbmdC
bG9jayhMYXlvdXRVbml0IHRvcCkKICAgICBpZiAoIW9mZnNldFRvQmxvY2tCZWZvcmUuaGVpZ2h0
KCkpCiAgICAgICAgIHJldHVybiB0b3A7CiAKLSAgICBpZiAoYXV0byBsYXN0TGluZSA9IExheW91
dEludGVncmF0aW9uOjpsYXN0TGluZUZvcigqYmxvY2tCZWZvcmUpKSB7CisgICAgaWYgKGF1dG8g
bGFzdExpbmUgPSBJbmxpbmVJdGVyYXRvcjo6bGFzdExpbmVGb3IoKmJsb2NrQmVmb3JlKSkgewog
ICAgICAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIGxhc3RMaW5lU2VsZWN0aW9uU3Rh
dGUgPSBsYXN0TGluZS0+c2VsZWN0aW9uU3RhdGUoKTsKICAgICAgICAgaWYgKGxhc3RMaW5lU2Vs
ZWN0aW9uU3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlICYmIGxh
c3RMaW5lU2VsZWN0aW9uU3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3Rh
cnQpCiAgICAgICAgICAgICByZXR1cm4gdG9wOwpAQCAtMzI3NCwxMSArMzI3NCwxMSBAQCBHYXBS
ZWN0cyBSZW5kZXJCbG9ja0Zsb3c6OmlubGluZVNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJv
b3RCbG9jaywgY29uc3QgTGF5bwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1
dG8gaGFzU2VsZWN0ZWRDaGlsZHJlbiA9IFsmXShjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGlu
ZUl0ZXJhdG9yJiBsaW5lKSB7CisgICAgYXV0byBoYXNTZWxlY3RlZENoaWxkcmVuID0gWyZdKGNv
bnN0IElubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3ImIGxpbmUpIHsKICAgICAgICAgcmV0dXJu
IGxpbmUtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
Tm9uZTsKICAgICB9OwogCi0gICAgYXV0byBsaW5lU2VsZWN0aW9uR2FwID0gWyZdKGNvbnN0IExh
eW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3ImIGxpbmUsIExheW91dFVuaXQgc2VsVG9wLCBM
YXlvdXRVbml0IHNlbEhlaWdodCkgLT4gR2FwUmVjdHMgeworICAgIGF1dG8gbGluZVNlbGVjdGlv
bkdhcCA9IFsmXShjb25zdCBJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yJiBsaW5lLCBMYXlv
dXRVbml0IHNlbFRvcCwgTGF5b3V0VW5pdCBzZWxIZWlnaHQpIC0+IEdhcFJlY3RzIHsKICAgICAg
ICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBsaW5lU3RhdGUgPSBsaW5lLT5zZWxlY3Rp
b25TdGF0ZSgpOwogCiAgICAgICAgIGJvb2wgbGVmdEdhcCwgcmlnaHRHYXA7CkBAIC0zMzMxLDgg
KzMzMzEsOCBAQCBHYXBSZWN0cyBSZW5kZXJCbG9ja0Zsb3c6OmlubGluZVNlbGVjdGlvbkdhcHMo
UmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5bwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH07CiAKLSAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJhdG9yIGxhc3RTZWxl
Y3RlZExpbmU7Ci0gICAgTGF5b3V0SW50ZWdyYXRpb246OkxpbmVJdGVyYXRvciBsaW5lID0gTGF5
b3V0SW50ZWdyYXRpb246OmZpcnN0TGluZUZvcigqdGhpcyk7CisgICAgSW5saW5lSXRlcmF0b3I6
OkxpbmVJdGVyYXRvciBsYXN0U2VsZWN0ZWRMaW5lOworICAgIElubGluZUl0ZXJhdG9yOjpMaW5l
SXRlcmF0b3IgbGluZSA9IElubGluZUl0ZXJhdG9yOjpmaXJzdExpbmVGb3IoKnRoaXMpOwogICAg
IGZvciAoOyBsaW5lICYmICFoYXNTZWxlY3RlZENoaWxkcmVuKGxpbmUpOyBsaW5lLnRyYXZlcnNl
TmV4dCgpKSB7IH0KIAogICAgIEdhcFJlY3RzIHJlc3VsdDsKQEAgLTMzNTgsNyArMzM1OCw3IEBA
IEdhcFJlY3RzIFJlbmRlckJsb2NrRmxvdzo6aW5saW5lU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9j
ayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvCiAKICAgICBpZiAoY29udGFpbnNTdGFydCAmJiAhbGFz
dFNlbGVjdGVkTGluZSkKICAgICAgICAgLy8gVmlzaWJsZVNlbGVjdGlvbiBtdXN0IHN0YXJ0IGp1
c3QgYWZ0ZXIgb3VyIGxhc3QgbGluZS4KLSAgICAgICAgbGFzdFNlbGVjdGVkTGluZSA9IExheW91
dEludGVncmF0aW9uOjpsYXN0TGluZUZvcigqdGhpcyk7CisgICAgICAgIGxhc3RTZWxlY3RlZExp
bmUgPSBJbmxpbmVJdGVyYXRvcjo6bGFzdExpbmVGb3IoKnRoaXMpOwogCiAgICAgaWYgKGxhc3RT
ZWxlY3RlZExpbmUgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBIaWdobGlnaHRTdGF0ZTo6RW5kICYm
IHNlbGVjdGlvblN0YXRlKCkgIT0gSGlnaGxpZ2h0U3RhdGU6OkJvdGgpIHsKICAgICAgICAgLy8g
VXBkYXRlIG91ciBsYXN0WSB0byBiZSB0aGUgYm90dG9tIG9mIHRoZSBsYXN0IHNlbGVjdGVkIGxp
bmUuCkBAIC0zNDU1LDcgKzM0NTUsNyBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6Y29udGFpbnNO
b25aZXJvQmlkaUxldmVsKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBQ
b3NpdGlvbiBwb3NpdGlvbkZvclJ1bihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIExheW91
dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBydW4sIGJvb2wgc3RhcnQpCitzdGF0aWMgUG9zaXRp
b24gcG9zaXRpb25Gb3JSdW4oY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBJbmxpbmVJdGVy
YXRvcjo6Qm94SXRlcmF0b3IgcnVuLCBib29sIHN0YXJ0KQogewogICAgIGlmICghcnVuKQogICAg
ICAgICByZXR1cm4gUG9zaXRpb24oKTsKQEAgLTM0NjMsMTAgKzM0NjMsMTAgQEAgc3RhdGljIFBv
c2l0aW9uIHBvc2l0aW9uRm9yUnVuKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgTGF5b3V0
SW50ZWdyYXRpb246OlIKICAgICBpZiAoIXJ1bi0+cmVuZGVyZXIoKS5ub25Qc2V1ZG9Ob2RlKCkp
CiAgICAgICAgIHJldHVybiBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKGZsb3cubm9uUHNl
dWRvRWxlbWVudCgpLCBzdGFydCA/IGZsb3cuY2FyZXRNaW5PZmZzZXQoKSA6IGZsb3cuY2FyZXRN
YXhPZmZzZXQoKSk7CiAKLSAgICBpZiAoIWlzPExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRl
cmF0b3I+KHJ1bikpCisgICAgaWYgKCFpczxJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9y
PihydW4pKQogICAgICAgICByZXR1cm4gbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihydW4t
PnJlbmRlcmVyKCkubm9uUHNldWRvTm9kZSgpLCBzdGFydCA/IHJ1bi0+cmVuZGVyZXIoKS5jYXJl
dE1pbk9mZnNldCgpIDogcnVuLT5yZW5kZXJlcigpLmNhcmV0TWF4T2Zmc2V0KCkpOwogCi0gICAg
YXV0byYgdGV4dFJ1biA9IGRvd25jYXN0PExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0
b3I+KHJ1bik7CisgICAgYXV0byYgdGV4dFJ1biA9IGRvd25jYXN0PElubGluZUl0ZXJhdG9yOjpU
ZXh0Qm94SXRlcmF0b3I+KHJ1bik7CiAgICAgcmV0dXJuIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9z
aXRpb24odGV4dFJ1bi0+cmVuZGVyZXIoKS5ub25Qc2V1ZG9Ob2RlKCksIHN0YXJ0ID8gdGV4dFJ1
bi0+c3RhcnQoKSA6IHRleHRSdW4tPmVuZCgpKTsKIH0KIApAQCAtMzUxOSw3ICszNTE5LDcgQEAg
UmVuZGVyVGV4dCogUmVuZGVyQmxvY2tGbG93OjpmaW5kQ2xvc2VzdFRleHRBdEFic29sdXRlUG9p
bnQoY29uc3QgRmxvYXRQb2ludCYgcG8KICAgICAvLyBPbmx5IGNoZWNrIHRoZSBnYXBzIGJldHdl
ZW4gdGhlIHJvb3QgbGluZSBib3hlcy4gV2UgZGVsaWJlcmF0ZWx5IGlnbm9yZSBvdmVyZmxvdyBi
ZWNhdXNlCiAgICAgLy8gZXhwZXJpZW5jZSBoYXMgc2hvd24gdGhhdCBoaXQgdGVzdHMgb24gYW4g
ZXhwbG9kZWQgdGV4dCBub2RlIGNhbiBmYWlsIHdoZW4gd2l0aGluIHRoZQogICAgIC8vIG92ZXJm
bG93IGZyYWdtZW50LgotICAgIGZvciAoYXV0byBjdXJyZW50ID0gTGF5b3V0SW50ZWdyYXRpb246
OmZpcnN0TGluZUZvcihibG9ja0Zsb3cpLCBsYXN0ID0gTGF5b3V0SW50ZWdyYXRpb246Omxhc3RM
aW5lRm9yKGJsb2NrRmxvdyk7IGN1cnJlbnQgJiYgY3VycmVudCAhPSBsYXN0OyBjdXJyZW50LnRy
YXZlcnNlTmV4dCgpKSB7CisgICAgZm9yIChhdXRvIGN1cnJlbnQgPSBJbmxpbmVJdGVyYXRvcjo6
Zmlyc3RMaW5lRm9yKGJsb2NrRmxvdyksIGxhc3QgPSBJbmxpbmVJdGVyYXRvcjo6bGFzdExpbmVG
b3IoYmxvY2tGbG93KTsgY3VycmVudCAmJiBjdXJyZW50ICE9IGxhc3Q7IGN1cnJlbnQudHJhdmVy
c2VOZXh0KCkpIHsKICAgICAgICAgZmxvYXQgY3VycmVudEJvdHRvbSA9IGN1cnJlbnQtPnkoKSAr
IGN1cnJlbnQtPmxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgaWYgKGxvY2FsUG9pbnQueSgpIDwg
Y3VycmVudEJvdHRvbSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzUzOSw3ICsz
NTM5LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25Gb3JQb2lu
dFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBMYXlvdXQKIHsKICAgICBBU1NFUlQoY2hpbGRyZW5J
bmxpbmUoKSk7CiAKLSAgICBhdXRvIGZpcnN0TGluZSA9IExheW91dEludGVncmF0aW9uOjpmaXJz
dExpbmVGb3IoKnRoaXMpOworICAgIGF1dG8gZmlyc3RMaW5lID0gSW5saW5lSXRlcmF0b3I6OmZp
cnN0TGluZUZvcigqdGhpcyk7CiAKICAgICBpZiAoIWZpcnN0TGluZSkKICAgICAgICAgcmV0dXJu
IGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBBZmZpbml0eTo6RG93bnN0cmVhbSk7CkBAIC0zNTQ4
LDkgKzM1NDgsOSBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbkZv
clBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dAogICAgIGJvb2wgYmxvY2tzQXJl
RmxpcHBlZCA9IHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKTsKIAogICAgIC8v
IGxvb2sgZm9yIHRoZSBjbG9zZXN0IGxpbmUgYm94IGluIHRoZSByb290IGJveCB3aGljaCBpcyBh
dCB0aGUgcGFzc2VkLWluIHkgY29vcmRpbmF0ZQotICAgIExheW91dEludGVncmF0aW9uOjpSdW5J
dGVyYXRvciBjbG9zZXN0UnVuOwotICAgIExheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3Ig
Zmlyc3RMaW5lV2l0aENoaWxkcmVuOwotICAgIExheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0
b3IgbGFzdExpbmVXaXRoQ2hpbGRyZW47CisgICAgSW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9y
IGNsb3Nlc3RSdW47CisgICAgSW5saW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvciBmaXJzdExpbmVX
aXRoQ2hpbGRyZW47CisgICAgSW5saW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvciBsYXN0TGluZVdp
dGhDaGlsZHJlbjsKICAgICBmb3IgKGF1dG8gbGluZSA9IGZpcnN0TGluZTsgbGluZTsgbGluZS50
cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBpZiAoZnJhZ21lbnQgJiYgbGluZS0+bGVnYWN5Um9v
dElubGluZUJveCgpICYmIGxpbmUtPmxlZ2FjeVJvb3RJbmxpbmVCb3goKS0+Y29udGFpbmluZ0Zy
YWdtZW50KCkgIT0gZnJhZ21lbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggMzFkZTYwZjRjYWMxOTI3MGQ2ZGMwYTRkNDI1
ZGE4ZGIzYWU0MzM4Yy4uM2ExNmJjZTQ3ZmUxYzllYjJjOTJjYTc2ZDhjMzIxYTgxZTA4MDk4YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTQ3LDggKzQ3LDggQEAK
ICNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW5saW5lSXRl
cmF0b3JMaW5lLmgiCiAjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zmc2V0LmgiCi0jaW5jbHVkZSAi
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3Jh
dGlvbkxpbmVMYXlvdXQuaCIKICNpbmNsdWRlICJMZWdhY3lJbmxpbmVFbGVtZW50Qm94LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
Y3BwCmluZGV4IDJhODhjMjFmYzQ2MWI5MDljYTcyOTE2ZmZlYzVkM2ZhODk4ZWZjZDIuLjA2Y2Nm
MGZiOGZmOTgxYTBkYmE3NzdlNjFlZTJjNjI5OGEyMDQ0NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTQwLDggKzQwLDggQEAKICNpbmNsdWRlICJI
VE1MSHRtbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3Iu
aCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
SW5saW5lSXRlcmF0b3JCb3guaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKICNp
bmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgpAQCAtMTY0NCwxMyArMTY0NCwxMyBAQCBib29sIFJlbmRlckVsZW1lbnQ6Omdl
dExlYWRpbmdDb3JuZXIoRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wmIGluc2lkZUZpeGVkKSBjb25z
dAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocC0+
bm9kZSgpICYmIHAtPm5vZGUoKSA9PSBlbGVtZW50KCkgJiYgaXM8UmVuZGVyVGV4dD4oKm8pICYm
ICFMYXlvdXRJbnRlZ3JhdGlvbjo6Zmlyc3RUZXh0UnVuRm9yKGRvd25jYXN0PFJlbmRlclRleHQ+
KCpvKSkpIHsKKyAgICAgICAgaWYgKHAtPm5vZGUoKSAmJiBwLT5ub2RlKCkgPT0gZWxlbWVudCgp
ICYmIGlzPFJlbmRlclRleHQ+KCpvKSAmJiAhSW5saW5lSXRlcmF0b3I6OmZpcnN0VGV4dFJ1bkZv
cihkb3duY2FzdDxSZW5kZXJUZXh0PigqbykpKSB7CiAgICAgICAgICAgICAvLyBkbyBub3RoaW5n
IC0gc2tpcCB1bnJlbmRlcmVkIHdoaXRlc3BhY2UgdGhhdCBpcyBhIGNoaWxkIG9yIG5leHQgc2li
bGluZyBvZiB0aGUgYW5jaG9yCiAgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyVGV4dD4oKm8p
IHx8IG8tPmlzUmVwbGFjZWQoKSkgewogICAgICAgICAgICAgcG9pbnQgPSBGbG9hdFBvaW50KCk7
CiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4oKm8pKSB7CiAgICAgICAgICAgICAgICAg
YXV0byYgdGV4dFJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKm8pOwotICAgICAgICAg
ICAgICAgIGlmIChhdXRvIHJ1biA9IExheW91dEludGVncmF0aW9uOjpmaXJzdFRleHRSdW5Gb3Io
dGV4dFJlbmRlcmVyKSkKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBydW4gPSBJbmxpbmVJdGVy
YXRvcjo6Zmlyc3RUZXh0UnVuRm9yKHRleHRSZW5kZXJlcikpCiAgICAgICAgICAgICAgICAgICAg
IHBvaW50Lm1vdmUodGV4dFJlbmRlcmVyLmxpbmVzQm91bmRpbmdCb3goKS54KCksIHJ1bi0+bGlu
ZSgpLT50b3AoKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlckJveD4oKm8pKQog
ICAgICAgICAgICAgICAgIHBvaW50Lm1vdmVCeShkb3duY2FzdDxSZW5kZXJCb3g+KCpvKS5sb2Nh
dGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4IGJl
OTJjYTAzMDhmNjNiNGY5YzI3NzQxYjI3ZGExNmQ5ODdhMDhmZjIuLmFjMjRjNTZhZGFlYzJiOTFm
YTFmY2UzODY1ZTU3MmRlMWY1NTk4YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcApAQCAtNDQsOCArNDQsOCBAQAogI2luY2x1ZGUgIkhUTUxNYXBFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2lu
Y2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTGF5b3V0
SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94Lmgi
CisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JMaW5lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKQEAg
LTkxLDcgKzkxLDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJp
ZXMoVmVjdG9yPFNlbGVjdGlvbkdlb21ldHJ5PiYgZ2VvbWV0cmkKICAgICBib29sIGlzRmlyc3RP
bkxpbmUgPSBmYWxzZTsKICAgICBib29sIGlzTGFzdE9uTGluZSA9IGZhbHNlOwogCi0gICAgYXV0
byBydW4gPSBMYXlvdXRJbnRlZ3JhdGlvbjo6cnVuRm9yKCp0aGlzKTsKKyAgICBhdXRvIHJ1biA9
IElubGluZUl0ZXJhdG9yOjpydW5Gb3IoKnRoaXMpOwogICAgIGlmICghcnVuKSB7CiAgICAgICAg
IC8vIFRoaXMgaXMgYSBibG9jayBpbWFnZS4KICAgICAgICAgaW1hZ2VSZWN0ID0gSW50UmVjdCgw
LCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaW5lQnJlYWsuY3BwCmluZGV4IGFiYzlmYjZlMTFlYWVlODQyZTA1YmRkZjZiOTc1ZTQ3YWEx
OTRhMGMuLjcxODgyNjMxMDVlYjdmOGQwNTMzMzQzODU0ZTMxYzM4MDIwMTU3NTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwCkBAIC0yNiw5ICsyNiw5
IEBACiAjaW5jbHVkZSAiRm9udE1ldHJpY3MuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxXQlJFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3gu
aCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKICNpbmNsdWRlICJJbmxpbmVSdW5B
bmRPZmZzZXQuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIgot
I2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMZWdh
Y3lJbmxpbmVFbGVtZW50Qm94LmgiCiAjaW5jbHVkZSAiTGVnYWN5Um9vdElubGluZUJveC5oIgog
I2luY2x1ZGUgIkxvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCIKQEAgLTE0NCw3ICsxNDQs
NyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyTGluZUJyZWFrOjpwb3NpdGlvbkZvclBvaW50KGNv
bnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZAogCiBJbnRSZWN0IFJlbmRlckxpbmVCcmVhazo6
bGluZXNCb3VuZGluZ0JveCgpIGNvbnN0CiB7Ci0gICAgYXV0byBydW4gPSBMYXlvdXRJbnRlZ3Jh
dGlvbjo6cnVuRm9yKCp0aGlzKTsKKyAgICBhdXRvIHJ1biA9IElubGluZUl0ZXJhdG9yOjpydW5G
b3IoKnRoaXMpOwogICAgIGlmICghcnVuKQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC0xNTMs
NyArMTUzLDcgQEAgSW50UmVjdCBSZW5kZXJMaW5lQnJlYWs6OmxpbmVzQm91bmRpbmdCb3goKSBj
b25zdAogCiB2b2lkIFJlbmRlckxpbmVCcmVhazo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CiB7
Ci0gICAgYXV0byBib3ggPSBMYXlvdXRJbnRlZ3JhdGlvbjo6cnVuRm9yKCp0aGlzKTsKKyAgICBh
dXRvIGJveCA9IElubGluZUl0ZXJhdG9yOjpydW5Gb3IoKnRoaXMpOwogICAgIGlmICghYm94KQog
ICAgICAgICByZXR1cm47CiAKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFJlbmRlckxpbmVCcmVh
azo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2lu
dCYgYQogCiB2b2lkIFJlbmRlckxpbmVCcmVhazo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRR
dWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAogewotICAgIGF1dG8gYm94ID0gTGF5
b3V0SW50ZWdyYXRpb246OnJ1bkZvcigqdGhpcyk7CisgICAgYXV0byBib3ggPSBJbmxpbmVJdGVy
YXRvcjo6cnVuRm9yKCp0aGlzKTsKICAgICBpZiAoIWJveCkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0xODAsNyArMTgwLDcgQEAgdm9pZCBSZW5kZXJMaW5lQnJlYWs6OnVwZGF0ZUZyb21TdHlsZSgp
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIHZvaWQgUmVuZGVyTGluZUJyZWFrOjpjb2xsZWN0
U2VsZWN0aW9uR2VvbWV0cmllcyhWZWN0b3I8U2VsZWN0aW9uR2VvbWV0cnk+JiByZWN0cywgdW5z
aWduZWQsIHVuc2lnbmVkKQogewotICAgIGF1dG8gcnVuID0gTGF5b3V0SW50ZWdyYXRpb246OnJ1
bkZvcigqdGhpcyk7CisgICAgYXV0byBydW4gPSBJbmxpbmVJdGVyYXRvcjo6cnVuRm9yKCp0aGlz
KTsKIAogICAgIGlmICghcnVuKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAppbmRleCAyYjUxMzRkMjg4ODJlNDE3ZmRhNTM3MDgx
ZDRiZTRjZGZkYzYzY2FhLi45ZDI5YjczZjRkZGRmZTVlOGYzZTYwNGY5N2YzZGY3ODNmMjU3NWZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTM0
LDggKzM0LDggQEAKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSGln
aGxpZ2h0RGF0YS5oIgogI2luY2x1ZGUgIkhpZ2hsaWdodFJlZ2lzdGVyLmgiCi0jaW5jbHVkZSAi
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3Jh
dGlvblJ1bkl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKKyNpbmNs
dWRlICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93
LmgiCkBAIC02ODksNyArNjg5LDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVByZWZl
cnJlZExvZ2ljYWxXaWR0aHMoKQogVmlzaWJsZVBvc2l0aW9uIFJlbmRlclJlcGxhY2VkOjpwb3Np
dGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyRnJhZ21l
bnRDb250YWluZXIqIGZyYWdtZW50KQogewogICAgIGF1dG8gW3RvcCwgYm90dG9tXSA9IFsmXSB7
Ci0gICAgICAgIGlmIChhdXRvIHJ1biA9IExheW91dEludGVncmF0aW9uOjpydW5Gb3IoKnRoaXMp
KSB7CisgICAgICAgIGlmIChhdXRvIHJ1biA9IElubGluZUl0ZXJhdG9yOjpydW5Gb3IoKnRoaXMp
KSB7CiAgICAgICAgICAgICBhdXRvIGxpbmUgPSBydW4tPmxpbmUoKTsKICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfcGFpcihsaW5lLT5zZWxlY3Rpb25Ub3BGb3JIaXRUZXN0aW5nKCksIGxp
bmUtPnNlbGVjdGlvbkJvdHRvbSgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCmluZGV4IDA4MTY0YjAwNjM4NDMwMzhiYTQ4NWYxY2EzZThiY2MyODk5
MTZmMDIuLmZjNDZkNWQwZWZhY2UyOTk0MGNmMTYyMzJiYTQ5YWRlODNiNzlkOGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTM1LDEwICszNSwxMCBAQAogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNs
dWRlICJIeXBoZW5hdGlvbi5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94LmgiCisjaW5j
bHVkZSAiSW5saW5lSXRlcmF0b3JMaW5lLmgiCiAjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zmc2V0
LmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3Jh
dGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGVnYWN5RWxsaXBzaXNCb3guaCIKICNpbmNs
dWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCkBAIC0zMDcsNyArMzA3LDcg
QEAgU3RyaW5nIFJlbmRlclRleHQ6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiAKIHZvaWQgUmVuZGVy
VGV4dDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBM
YXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bnNGb3IoKnRoaXMpKSB7CisgICAgZm9yIChhdXRvJiBy
dW4gOiBJbmxpbmVJdGVyYXRvcjo6dGV4dFJ1bnNGb3IoKnRoaXMpKSB7CiAgICAgICAgIGF1dG8g
cmVjdCA9IHJ1bi5yZWN0KCk7CiAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0
KEZsb2F0UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIHJlY3QubG9jYXRpb24oKSwgcmVjdC5zaXpl
KCkpKSk7CiAgICAgfQpAQCAtMzI2LDcgKzMyNiw3IEBAIFZlY3RvcjxJbnRSZWN0PiBSZW5kZXJU
ZXh0OjphYnNvbHV0ZVJlY3RzRm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwK
IC8vIEZ1bGwgYW5ub3RhdGlvbnMgYXJlIGFkZGVkIGluIHRoaXMgY2xhc3MuCiB2b2lkIFJlbmRl
clRleHQ6OmNvbGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzKFZlY3RvcjxTZWxlY3Rpb25HZW9tZXRy
eT4mIHJlY3RzLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQogewotICAgIGZvciAoYXV0
byBydW4gPSBMYXlvdXRJbnRlZ3JhdGlvbjo6Zmlyc3RUZXh0UnVuRm9yKCp0aGlzKTsgcnVuOyBy
dW4gPSBydW4udHJhdmVyc2VOZXh0VGV4dFJ1bigpKSB7CisgICAgZm9yIChhdXRvIHJ1biA9IElu
bGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5Gb3IoKnRoaXMpOyBydW47IHJ1biA9IHJ1bi50cmF2
ZXJzZU5leHRUZXh0UnVuKCkpIHsKICAgICAgICAgTGF5b3V0UmVjdCByZWN0OwogICAgICAgICBp
ZiAoc3RhcnQgPD0gcnVuLT5zdGFydCgpICYmIHJ1bi0+ZW5kKCkgPD0gZW5kKQogICAgICAgICAg
ICAgcmVjdCA9IHJ1bi0+c2VsZWN0aW9uUmVjdChzdGFydCwgZW5kKTsKQEAgLTM4Niw3ICszODYs
NyBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzKFZlY3RvcjxT
ZWxlY3Rpb25HZW9tZXRyeT4mIHJlY3RzLCB1bgogfQogI2VuZGlmCiAKLXN0YXRpYyBGbG9hdFJl
Y3QgYm91bmRhcmllc0ZvclRleHRSdW4oY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlBhdGhUZXh0
UnVuJiBydW4pCitzdGF0aWMgRmxvYXRSZWN0IGJvdW5kYXJpZXNGb3JUZXh0UnVuKGNvbnN0IElu
bGluZUl0ZXJhdG9yOjpUZXh0Qm94JiBydW4pCiB7CiAgICAgaWYgKGlzPFNWR0lubGluZVRleHRC
b3g+KHJ1bi5sZWdhY3lJbmxpbmVCb3goKSkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdJ
bmxpbmVUZXh0Qm94PigqcnVuLmxlZ2FjeUlubGluZUJveCgpKS5jYWxjdWxhdGVCb3VuZGFyaWVz
KCk7CkBAIC0zOTQsNyArMzk0LDcgQEAgc3RhdGljIEZsb2F0UmVjdCBib3VuZGFyaWVzRm9yVGV4
dFJ1bihjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6UGF0aFRleHRSdW4mIHJ1bikKICAgICByZXR1
cm4gcnVuLnJlY3QoKTsKIH0KIAotc3RhdGljIEludFJlY3QgZWxsaXBzaXNSZWN0Rm9yVGV4dFJ1
bihjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6UGF0aFRleHRSdW4mIHJ1biwgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGVuZCkKK3N0YXRpYyBJbnRSZWN0IGVsbGlwc2lzUmVjdEZvclRleHRSdW4o
Y29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3gmIHJ1biwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGVuZCkKIHsKICAgICAvLyBGSVhNRTogTm8gZWxsaXBzaXMgc3VwcG9ydCBpbiBtb2Rlcm4g
cGF0aCB5ZXQuCiAgICAgaWYgKCFydW4ubGVnYWN5SW5saW5lQm94KCkpCkBAIC00MjgsNyArNDI4
LDcgQEAgZW51bSBjbGFzcyBDbGlwcGluZ09wdGlvbiB7IE5vQ2xpcHBpbmcsIENsaXBUb0VsbGlw
c2lzIH07CiBzdGF0aWMgVmVjdG9yPEZsb2F0UXVhZD4gY29sbGVjdEFic29sdXRlUXVhZHMoY29u
c3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRlcmVyLCBib29sKiB3YXNGaXhlZCwgQ2xpcHBpbmdPcHRp
b24gY2xpcHBpbmcpCiB7CiAgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgZm9yIChh
dXRvJiBydW4gOiBMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bnNGb3IodGV4dFJlbmRlcmVyKSkg
eworICAgIGZvciAoYXV0byYgcnVuIDogSW5saW5lSXRlcmF0b3I6OnRleHRSdW5zRm9yKHRleHRS
ZW5kZXJlcikpIHsKICAgICAgICAgYXV0byBib3VuZGFyaWVzID0gYm91bmRhcmllc0ZvclRleHRS
dW4ocnVuKTsKIAogICAgICAgICAvLyBTaG9ydGVuIHRoZSB3aWR0aCBvZiB0aGlzIHRleHQgYm94
IGlmIGl0IGVuZHMgaW4gYW4gZWxsaXBzaXMuCkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBSZW5k
ZXJUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCogd2Fz
Rml4ZWQpIGNvbnN0CiAgICAgcXVhZHMuYXBwZW5kVmVjdG9yKGNvbGxlY3RBYnNvbHV0ZVF1YWRz
KCp0aGlzLCB3YXNGaXhlZCwgQ2xpcHBpbmdPcHRpb246Ok5vQ2xpcHBpbmcpKTsKIH0KIAotc3Rh
dGljIEZsb2F0UmVjdCBsb2NhbFF1YWRGb3JUZXh0UnVuKGNvbnN0IExheW91dEludGVncmF0aW9u
OjpQYXRoVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVz
ZVNlbGVjdGlvbkhlaWdodCkKK3N0YXRpYyBGbG9hdFJlY3QgbG9jYWxRdWFkRm9yVGV4dFJ1bihj
b25zdCBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveCYgcnVuLCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQgZW5kLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkKIHsKICAgICB1bnNpZ25lZCByZWFsRW5k
ID0gc3RkOjptaW4ocnVuLmVuZCgpLCBlbmQpOwogICAgIExheW91dFJlY3QgYm94U2VsZWN0aW9u
UmVjdCA9IHJ1bi5zZWxlY3Rpb25SZWN0KHN0YXJ0LCByZWFsRW5kKTsKQEAgLTQ5MCw3ICs0OTAs
NyBAQCBWZWN0b3I8RmxvYXRRdWFkPiBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzRm9yUmFuZ2Uo
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZAogICAgIGVuZCA9IHN0ZDo6bWluKGVuZCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpKTsKIAogICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1
YWRzOwotICAgIGZvciAoYXV0byYgcnVuIDogTGF5b3V0SW50ZWdyYXRpb246OnRleHRSdW5zRm9y
KCp0aGlzKSkgeworICAgIGZvciAoYXV0byYgcnVuIDogSW5saW5lSXRlcmF0b3I6OnRleHRSdW5z
Rm9yKCp0aGlzKSkgewogICAgICAgICBpZiAoaWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucyAmJiAh
cnVuLnNlbGVjdGFibGVSYW5nZSgpLmludGVyc2VjdHMoc3RhcnQsIGVuZCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgaWYgKHN0YXJ0IDw9IHJ1bi5zdGFydCgpICYmIHJ1bi5lbmQo
KSA8PSBlbmQpIHsKQEAgLTUyMyw3ICs1MjMsNyBAQCBQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3Np
dGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIAogZW51bSBTaG91bGRBZmZp
bml0eUJlRG93bnN0cmVhbSB7IEFsd2F5c0Rvd25zdHJlYW0sIEFsd2F5c1Vwc3RyZWFtLCBVcHN0
cmVhbUlmUG9zaXRpb25Jc05vdEF0U3RhcnQgfTsKIAotc3RhdGljIGJvb2wgbGluZURpcmVjdGlv
blBvaW50Rml0c0luQm94KGludCBwb2ludExpbmVEaXJlY3Rpb24sIGNvbnN0IExheW91dEludGVn
cmF0aW9uOjpUZXh0UnVuSXRlcmF0b3ImIHRleHRSdW4sIFNob3VsZEFmZmluaXR5QmVEb3duc3Ry
ZWFtJiBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSkKK3N0YXRpYyBib29sIGxpbmVEaXJlY3Rp
b25Qb2ludEZpdHNJbkJveChpbnQgcG9pbnRMaW5lRGlyZWN0aW9uLCBjb25zdCBJbmxpbmVJdGVy
YXRvcjo6VGV4dEJveEl0ZXJhdG9yJiB0ZXh0UnVuLCBTaG91bGRBZmZpbml0eUJlRG93bnN0cmVh
bSYgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pCiB7CiAgICAgc2hvdWxkQWZmaW5pdHlCZURv
d25zdHJlYW0gPSBBbHdheXNEb3duc3RyZWFtOwogCkBAIC01NjAsNyArNTYwLDcgQEAgc3RhdGlj
IGJvb2wgbGluZURpcmVjdGlvblBvaW50Rml0c0luQm94KGludCBwb2ludExpbmVEaXJlY3Rpb24s
IGNvbnN0IExheW91dEludGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94KGNvbnN0IExheW91dEludGVncmF0
aW9uOjpSdW5JdGVyYXRvciYgcnVuLCB1bnNpZ25lZCBvZmZzZXQsIFNob3VsZEFmZmluaXR5QmVE
b3duc3RyZWFtIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKQorc3RhdGljIFZpc2libGVQb3Np
dGlvbiBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3goY29uc3QgSW5saW5lSXRlcmF0b3I6OkJv
eEl0ZXJhdG9yJiBydW4sIHVuc2lnbmVkIG9mZnNldCwgU2hvdWxkQWZmaW5pdHlCZURvd25zdHJl
YW0gc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pCiB7CiAgICAgYXV0byBhZmZpbml0eSA9IFZp
c2libGVQb3NpdGlvbjo6ZGVmYXVsdEFmZmluaXR5OwogICAgIHN3aXRjaCAoc2hvdWxkQWZmaW5p
dHlCZURvd25zdHJlYW0pIHsKQEAgLTU3Nyw3ICs1NzcsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6
UnVuSQogICAgIHJldHVybiBydW4tPnJlbmRlcmVyKCkuY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG9m
ZnNldCwgYWZmaW5pdHkpOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2li
bGVQb3NpdGlvbkFmdGVyQWRqdXN0aW5nT2Zmc2V0Rm9yQmlEaShjb25zdCBMYXlvdXRJbnRlZ3Jh
dGlvbjo6VGV4dFJ1bkl0ZXJhdG9yJiBydW4sIHVuc2lnbmVkIG9mZnNldCwgU2hvdWxkQWZmaW5p
dHlCZURvd25zdHJlYW0gc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pCitzdGF0aWMgVmlzaWJs
ZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpdGlvbkFmdGVyQWRqdXN0aW5nT2Zmc2V0Rm9yQmlE
aShjb25zdCBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yJiBydW4sIHVuc2lnbmVkIG9m
ZnNldCwgU2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0gc2hvdWxkQWZmaW5pdHlCZURvd25zdHJl
YW0pCiB7CiAgICAgaWYgKG9mZnNldCAmJiBvZmZzZXQgPCBydW4tPmxlbmd0aCgpKQogICAgICAg
ICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94KHJ1biwgcnVuLT5zdGFydCgpICsg
b2Zmc2V0LCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7CkBAIC02MDQsNyArNjA0LDcgQEAg
c3RhdGljIFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9zaXRpb25BZnRlckFkanVzdGlu
Z09mZnNldEZvckJpRGkoY29uc3QgTGEKIAogICAgICAgICBpZiAoIXByZXZpb3VzUnVuIHx8IHBy
ZXZpb3VzUnVuLT5iaWRpTGV2ZWwoKSA8IHJ1bi0+YmlkaUxldmVsKCkpIHsKICAgICAgICAgICAg
IC8vIGUuZy4gbGVmdCBvZiBEIGluIGFEQzEyQkFiCi0gICAgICAgICAgICBMYXlvdXRJbnRlZ3Jh
dGlvbjo6UnVuSXRlcmF0b3IgcmlnaHRtb3N0UnVuID0gcnVuOworICAgICAgICAgICAgSW5saW5l
SXRlcmF0b3I6OkJveEl0ZXJhdG9yIHJpZ2h0bW9zdFJ1biA9IHJ1bjsKICAgICAgICAgICAgIGZv
ciAoYXV0byBuZXh0UnVuID0gcnVuLT5uZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsgbmV4
dFJ1bjsgbmV4dFJ1bi50cmF2ZXJzZU5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG5leHRSdW4tPmJpZGlMZXZlbCgpIDwgcnVuLT5iaWRpTGV2ZWwo
KSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02MzcsNyArNjM3LDcgQEAgc3RhdGlj
IFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9zaXRpb25BZnRlckFkanVzdGluZ09mZnNl
dEZvckJpRGkoY29uc3QgTGEKIAogICAgIGlmICghbmV4dFJ1biB8fCBuZXh0UnVuLT5iaWRpTGV2
ZWwoKSA8IHJ1bi0+YmlkaUxldmVsKCkpIHsKICAgICAgICAgLy8gZS5nLiByaWdodCBvZiBBIGlu
IGFEQzEyQkFiCi0gICAgICAgIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBsZWZ0bW9z
dFJ1biA9IHJ1bjsKKyAgICAgICAgSW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yIGxlZnRtb3N0
UnVuID0gcnVuOwogICAgICAgICBmb3IgKGF1dG8gcHJldmlvdXNSdW4gPSBydW4tPnByZXZpb3Vz
T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsgcHJldmlvdXNSdW47IHByZXZpb3VzUnVuLnRyYXZl
cnNlUHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICBpZiAo
cHJldmlvdXNSdW4tPmJpZGlMZXZlbCgpIDwgcnVuLT5iaWRpTGV2ZWwoKSkKICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTY1NCw3ICs2NTQsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGNy
ZWF0ZVZpc2libGVQb3NpdGlvbkFmdGVyQWRqdXN0aW5nT2Zmc2V0Rm9yQmlEaShjb25zdCBMYQog
CiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikKIHsKLSAgICBh
dXRvIGZpcnN0UnVuID0gTGF5b3V0SW50ZWdyYXRpb246OmZpcnN0VGV4dFJ1bkZvcigqdGhpcyk7
CisgICAgYXV0byBmaXJzdFJ1biA9IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5Gb3IoKnRo
aXMpOwogCiAgICAgaWYgKCFmaXJzdFJ1biB8fCAhdGV4dCgpLmxlbmd0aCgpKQogICAgICAgICBy
ZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIEFmZmluaXR5OjpEb3duc3RyZWFtKTsKQEAg
LTY2Myw3ICs2NjMsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dDo6cG9zaXRpb25Gb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbgogICAgIExheW91dFVuaXQg
cG9pbnRCbG9ja0RpcmVjdGlvbiA9IGZpcnN0UnVuLT5pc0hvcml6b250YWwoKSA/IHBvaW50Lnko
KSA6IHBvaW50LngoKTsKICAgICBib29sIGJsb2Nrc0FyZUZsaXBwZWQgPSBzdHlsZSgpLmlzRmxp
cHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCk7CiAKLSAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1
bkl0ZXJhdG9yIGxhc3RSdW47CisgICAgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciBs
YXN0UnVuOwogICAgIGZvciAoYXV0byBydW4gPSBmaXJzdFJ1bjsgcnVuOyBydW4udHJhdmVyc2VO
ZXh0VGV4dFJ1bigpKSB7CiAgICAgICAgIGlmIChydW4tPmlzTGluZUJyZWFrKCkgJiYgIXJ1bi0+
cHJldmlvdXNPbkxpbmUoKSAmJiBydW4tPm5leHRPbkxpbmUoKSAmJiAhcnVuLT5uZXh0T25MaW5l
KCktPmlzTGluZUJyZWFrKCkpCiAgICAgICAgICAgICBydW4udHJhdmVyc2VOZXh0VGV4dFJ1bigp
OwpAQCAtMTI3Miw3ICsxMjcyLDcgQEAgVmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWdu
ZWQ+PiBSZW5kZXJUZXh0OjpkcmFnZ2VkQ29udGVudFJhbmdlc0JldHdlZW5PZmYKIAogSW50UG9p
bnQgUmVuZGVyVGV4dDo6Zmlyc3RSdW5Mb2NhdGlvbigpIGNvbnN0CiB7Ci0gICAgYXV0byBmaXJz
dCA9IExheW91dEludGVncmF0aW9uOjpmaXJzdFRleHRSdW5Gb3IoKnRoaXMpOworICAgIGF1dG8g
Zmlyc3QgPSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RUZXh0UnVuRm9yKCp0aGlzKTsKICAgICBpZiAo
IWZpcnN0KQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiBJbnRQb2ludChmaXJzdC0+
cmVjdCgpLmxvY2F0aW9uKCkpOwpAQCAtMTU3Niw3ICsxNTc2LDcgQEAgZmxvYXQgUmVuZGVyVGV4
dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250Q2FzY2FkZSYg
ZiwgZmxvYXQKIAogSW50UmVjdCBSZW5kZXJUZXh0OjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QK
IHsKLSAgICBhdXRvIGZpcnN0ID0gTGF5b3V0SW50ZWdyYXRpb246OmZpcnN0VGV4dFJ1bkZvcigq
dGhpcyk7CisgICAgYXV0byBmaXJzdCA9IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5Gb3Io
KnRoaXMpOwogICAgIGlmICghZmlyc3QpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTE2MzQs
NyArMTYzNCw3IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvbkdlb21l
dHJpZXNGb3JMaW5lQm94ZXMoY29uc3QgUmVuZGVyTGF5ZXJNCiAKICAgICBMYXlvdXRSZWN0IHJl
c3VsdFJlY3Q7CiAKLSAgICBmb3IgKGF1dG8mIHJ1biA6IExheW91dEludGVncmF0aW9uOjp0ZXh0
UnVuc0ZvcigqdGhpcykpIHsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IElubGluZUl0ZXJhdG9yOjp0
ZXh0UnVuc0ZvcigqdGhpcykpIHsKICAgICAgICAgTGF5b3V0UmVjdCByZWN0OwogICAgICAgICBy
ZWN0LnVuaXRlKHJ1bi5zZWxlY3Rpb25SZWN0KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpKTsKICAg
ICAgICAgcmVjdC51bml0ZShlbGxpcHNpc1JlY3RGb3JUZXh0UnVuKHJ1biwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCkpOwpAQCAtMTY2NCw3ICsxNjY0LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0
OjpzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBy
ZXAKIAogaW50IFJlbmRlclRleHQ6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QKIHsKLSAgICBhdXRv
IGZpcnN0ID0gTGF5b3V0SW50ZWdyYXRpb246OmZpcnN0VGV4dFJ1bkZvcigqdGhpcyk7CisgICAg
YXV0byBmaXJzdCA9IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5Gb3IoKnRoaXMpOwogICAg
IGlmICghZmlyc3QpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xNjc3LDcgKzE2NzcsNyBAQCBp
bnQgUmVuZGVyVGV4dDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdAogCiBpbnQgUmVuZGVyVGV4dDo6
Y2FyZXRNYXhPZmZzZXQoKSBjb25zdAogewotICAgIGF1dG8gZmlyc3QgPSBMYXlvdXRJbnRlZ3Jh
dGlvbjo6Zmlyc3RUZXh0UnVuRm9yKCp0aGlzKTsKKyAgICBhdXRvIGZpcnN0ID0gSW5saW5lSXRl
cmF0b3I6OmZpcnN0VGV4dFJ1bkZvcigqdGhpcyk7CiAgICAgaWYgKCFmaXJzdCkKICAgICAgICAg
cmV0dXJuIHRleHQoKS5sZW5ndGgoKTsKIApAQCAtMTY5MSw3ICsxNjkxLDcgQEAgaW50IFJlbmRl
clRleHQ6OmNhcmV0TWF4T2Zmc2V0KCkgY29uc3QKIHVuc2lnbmVkIFJlbmRlclRleHQ6OmNvdW50
UmVuZGVyZWRDaGFyYWN0ZXJPZmZzZXRzVW50aWwodW5zaWduZWQgb2Zmc2V0KSBjb25zdAogewog
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBMYXlvdXRJbnRl
Z3JhdGlvbjo6dGV4dFJ1bnNGb3IoKnRoaXMpKSB7CisgICAgZm9yIChhdXRvJiBydW4gOiBJbmxp
bmVJdGVyYXRvcjo6dGV4dFJ1bnNGb3IoKnRoaXMpKSB7CiAgICAgICAgIGF1dG8gc3RhcnQgPSBy
dW4uc3RhcnQoKTsKICAgICAgICAgYXV0byBsZW5ndGggPSBydW4ubGVuZ3RoKCk7CiAgICAgICAg
IGlmIChvZmZzZXQgPCBzdGFydCkKQEAgLTE3MDgsNyArMTcwOCw3IEBAIHVuc2lnbmVkIFJlbmRl
clRleHQ6OmNvdW50UmVuZGVyZWRDaGFyYWN0ZXJPZmZzZXRzVW50aWwodW5zaWduZWQgb2Zmc2V0
KSBjb25zdAogZW51bSBjbGFzcyBPZmZzZXRUeXBlIHsgQ2hhcmFjdGVyLCBDYXJldCB9Owogc3Rh
dGljIGJvb2wgY29udGFpbnNPZmZzZXQoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCwgdW5zaWduZWQg
b2Zmc2V0LCBPZmZzZXRUeXBlIHR5cGUpCiB7Ci0gICAgZm9yIChhdXRvIGJveCA9IExheW91dElu
dGVncmF0aW9uOjpmaXJzdFRleHRSdW5JblRleHRPcmRlckZvcih0ZXh0KTsgYm94OyBib3gudHJh
dmVyc2VOZXh0VGV4dFJ1bkluVGV4dE9yZGVyKCkpIHsKKyAgICBmb3IgKGF1dG8gYm94ID0gSW5s
aW5lSXRlcmF0b3I6OmZpcnN0VGV4dFJ1bkluVGV4dE9yZGVyRm9yKHRleHQpOyBib3g7IGJveC50
cmF2ZXJzZU5leHRUZXh0UnVuSW5UZXh0T3JkZXIoKSkgewogICAgICAgICBhdXRvIHN0YXJ0ID0g
Ym94LT5zdGFydCgpOwogICAgICAgICBpZiAob2Zmc2V0IDwgc3RhcnQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNzM3LDcgKzE3MzcsNyBAQCBib29sIFJlbmRlclRleHQ6OmNvbnRh
aW5zQ2FyZXRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdAogCiBib29sIFJlbmRlclRleHQ6
Omhhc1JlbmRlcmVkVGV4dCgpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBib3ggOiBMYXlvdXRJ
bnRlZ3JhdGlvbjo6dGV4dFJ1bnNGb3IoKnRoaXMpKSB7CisgICAgZm9yIChhdXRvJiBib3ggOiBJ
bmxpbmVJdGVyYXRvcjo6dGV4dFJ1bnNGb3IoKnRoaXMpKSB7CiAgICAgICAgIGlmIChib3gubGVu
Z3RoKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggNDM0MmFkOTQxMDg0N2I0YTE0
N2UxNzc5OTI2MWY3Njc5ZjJjZDUzNi4uZDEwYTRkMjgyODA4MDc3MDA0NzBkOGNmMzlhZTcwMGU1
YjRiODA2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNwYW5FbGVtZW50LmgiCi0jaW5jbHVkZSAi
TGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9y
Qm94LmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJQcmludENvbnRleHQuaCIKQEAgLTI0MCwxMyArMjQwLDEzIEBAIHZv
aWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlck9iamVjdCYgbywKICAgICAgICAgLy8gbWFueSB0ZXN0IHJlc3VsdHMuCiAgICAg
ICAgIGNvbnN0IFJlbmRlclRleHQmIHRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PihvKTsKICAg
ICAgICAgciA9IEludFJlY3QodGV4dC5maXJzdFJ1bkxvY2F0aW9uKCksIHRleHQubGluZXNCb3Vu
ZGluZ0JveCgpLnNpemUoKSk7Ci0gICAgICAgIGlmICghTGF5b3V0SW50ZWdyYXRpb246OmZpcnN0
VGV4dFJ1bkZvcih0ZXh0KSkKKyAgICAgICAgaWYgKCFJbmxpbmVJdGVyYXRvcjo6Zmlyc3RUZXh0
UnVuRm9yKHRleHQpKQogICAgICAgICAgICAgYWRqdXN0Rm9yVGFibGVDZWxscyA9IGZhbHNlOwog
ICAgIH0gZWxzZSBpZiAoby5pc0JSKCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVyTGluZUJyZWFr
JiBiciA9IGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4obyk7CiAgICAgICAgIEludFJlY3QgbGlu
ZXNCb3ggPSBici5saW5lc0JvdW5kaW5nQm94KCk7CiAgICAgICAgIHIgPSBJbnRSZWN0KGxpbmVz
Qm94LngoKSwgbGluZXNCb3gueSgpLCBsaW5lc0JveC53aWR0aCgpLCBsaW5lc0JveC5oZWlnaHQo
KSk7Ci0gICAgICAgIGlmICghYnIuaW5saW5lQm94V3JhcHBlcigpICYmICFMYXlvdXRJbnRlZ3Jh
dGlvbjo6cnVuRm9yKGJyKSkKKyAgICAgICAgaWYgKCFici5pbmxpbmVCb3hXcmFwcGVyKCkgJiYg
IUlubGluZUl0ZXJhdG9yOjpydW5Gb3IoYnIpKQogICAgICAgICAgICAgYWRqdXN0Rm9yVGFibGVD
ZWxscyA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVySW5saW5lPihvKSkgewogICAg
ICAgICBjb25zdCBSZW5kZXJJbmxpbmUmIGlubGluZUZsb3cgPSBkb3duY2FzdDxSZW5kZXJJbmxp
bmU+KG8pOwpAQCAtNjAxLDcgKzYwMSw3IEBAIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlck9iamVjdCYgbywgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+IGJlCiAKICAg
ICBpZiAoaXM8UmVuZGVyVGV4dD4obykpIHsKICAgICAgICAgYXV0byYgdGV4dCA9IGRvd25jYXN0
PFJlbmRlclRleHQ+KG8pOwotICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IExheW91dEludGVncmF0
aW9uOjp0ZXh0UnVuc0Zvcih0ZXh0KSkgeworICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IElubGlu
ZUl0ZXJhdG9yOjp0ZXh0UnVuc0Zvcih0ZXh0KSkgewogICAgICAgICAgICAgdHMgPDwgaW5kZW50
OwogICAgICAgICAgICAgd3JpdGVUZXh0UnVuKHRleHQsIHJ1bik7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCmluZGV4IDg2YTczM2M0MGFj
NjQ5NThlNWRmMTJiZTAzYzQ1NjlhNzNlZWMzZjAuLjMyM2RlMDlmM2M2ZTRiZmY3YjgzZWFkYzVj
NGEwNzNhNzM5MDZkMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
Qm94UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWlu
dGVyLmNwcApAQCAtMjksOCArMjksOCBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUg
IkV2ZW50UmVnaW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3Jh
dGlvblJ1bkl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKKyNpbmNs
dWRlICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKICNpbmNsdWRlICJMZWdhY3lJbmxpbmVUZXh0Qm94
LmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKQEAg
LTQ1LDE5ICs0NSwxOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUZXh0Qm94UGFpbnRlcjo6
VGV4dEJveFBhaW50ZXIoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKLSAgICA6IFRl
eHRCb3hQYWludGVyKExheW91dEludGVncmF0aW9uOjp0ZXh0UnVuRm9yKCZ0ZXh0Qm94KSwgcGFp
bnRJbmZvLCBwYWludE9mZnNldCkKKyAgICA6IFRleHRCb3hQYWludGVyKElubGluZUl0ZXJhdG9y
Ojp0ZXh0UnVuRm9yKCZ0ZXh0Qm94KSwgcGFpbnRJbmZvLCBwYWludE9mZnNldCkKIHsKICAgICBt
X2VtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUgPSB0ZXh0Qm94LmVtcGhhc2lzTWFya0V4aXN0
c0FuZElzQWJvdmUobV9zdHlsZSk7CiB9CiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKIFRleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25zdCBMYXlvdXRJbnRl
Z3JhdGlvbjo6SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgSW5saW5lRGlzcGxh
eTo6Qm94JiBib3gsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQpCi0gICAgOiBUZXh0Qm94UGFpbnRlcihMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1
bkZvcihpbmxpbmVDb250ZW50LCBib3gpLCBwYWludEluZm8sIHBhaW50T2Zmc2V0KQorICAgIDog
VGV4dEJveFBhaW50ZXIoSW5saW5lSXRlcmF0b3I6OnRleHRSdW5Gb3IoaW5saW5lQ29udGVudCwg
Ym94KSwgcGFpbnRJbmZvLCBwYWludE9mZnNldCkKIHsKIH0KICNlbmRpZgogCi1UZXh0Qm94UGFp
bnRlcjo6VGV4dEJveFBhaW50ZXIoTGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciYm
IHRleHRCb3gsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpCitUZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIoSW5saW5lSXRlcmF0b3I6OlRl
eHRCb3hJdGVyYXRvciYmIHRleHRCb3gsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgOiBtX3RleHRCb3goV1RGTW92ZSh0ZXh0Qm94KSkK
ICAgICAsIG1fcmVuZGVyZXIobV90ZXh0Qm94LT5yZW5kZXJlcigpKQogICAgICwgbV9kb2N1bWVu
dChtX3JlbmRlcmVyLmRvY3VtZW50KCkpCkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBUZXh0Qm94
UGFpbnRlcjo6cGFpbnREZWNvcmF0aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRl
eHQsIGNvbnN0IEYKICAgICBhdXRvIHRleHREZWNvcmF0aW9ucyA9IG1fc3R5bGUudGV4dERlY29y
YXRpb25zSW5FZmZlY3QoKTsKICAgICB0ZXh0RGVjb3JhdGlvbnMuYWRkKFRleHREZWNvcmF0aW9u
UGFpbnRlcjo6dGV4dERlY29yYXRpb25zSW5FZmZlY3RGb3JTdHlsZShtYXJrZWRUZXh0LnN0eWxl
LnRleHREZWNvcmF0aW9uU3R5bGVzKSk7CiAgICAgVGV4dERlY29yYXRpb25QYWludGVyIGRlY29y
YXRpb25QYWludGVyIHsgY29udGV4dCwgdGV4dERlY29yYXRpb25zLCBtX3JlbmRlcmVyLCBtX2lz
Rmlyc3RMaW5lLCBmb250LCBtYXJrZWRUZXh0LnN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVzIH07
Ci0gICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFJ1bkl0ZXJhdG9yKG1fdGV4dEJveCk7Cisg
ICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dEJveEl0ZXJhdG9yKG1fdGV4dEJveCk7CiAgICAg
ZGVjb3JhdGlvblBhaW50ZXIuc2V0V2lkdGgoc25hcHBlZFNlbGVjdGlvblJlY3Qud2lkdGgoKSk7
CiAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0SXNIb3Jpem9udGFsKHRleHRCb3goKS5pc0hvcml6
b250YWwoKSk7CiAgICAgaWYgKG1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdykgewpAQCAtNDI2
LDcgKzQyNiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtaXJyb3JSVExTZWdtZW50KGZsb2F0IGxv
Z2ljYWxXaWR0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sCiAgICAgc3RhcnQgPSBsb2dpY2Fs
V2lkdGggLSB3aWR0aCAtIHN0YXJ0OwogfQogCi1zdGF0aWMgZmxvYXQgdGV4dFBvc2l0aW9uKGNv
bnN0IExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3ImIHRleHRCb3gpCitzdGF0aWMg
ZmxvYXQgdGV4dFBvc2l0aW9uKGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3Im
IHRleHRCb3gpCiB7CiAgICAgLy8gV2hlbiBjb21wdXRpbmcgdGhlIHdpZHRoIG9mIGEgdGV4dCBy
dW4sIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZSgp
IGRvZXNuJ3QgaW5jbHVkZSB0aGUgYWN0dWFsIG9mZnNldAogICAgIC8vIGZyb20gdGhlIGNvbnRh
aW5pbmcgYmxvY2sgZWRnZSBpbiBpdHMgbWVhc3VyZW1lbnQuIHRleHRQb3NpdGlvbigpIHNob3Vs
ZCBiZSBjb25zaXN0ZW50IHNvIHRoZSB0ZXh0IGFyZSByZW5kZXJlZCBpbiB0aGUgc2FtZSB3aWR0
aC4KQEAgLTQ5NSw3ICs0OTUsNyBAQCBGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0
ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbgogICAgIEZsb2F0
UmVjdCByZXN1bHQ7CiAgICAgYXV0byBtYXJrZWRUZXh0cyA9IE1hcmtlZFRleHQ6OmNvbGxlY3RG
b3JEb2N1bWVudE1hcmtlcnModGV4dEJveC5yZW5kZXJlcigpLCB0ZXh0Qm94LnNlbGVjdGFibGVS
YW5nZSgpLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKTsKICAgICBmb3IgKGF1
dG8mIG1hcmtlZFRleHQgOiBNYXJrZWRUZXh0OjpzdWJkaXZpZGUobWFya2VkVGV4dHMsIE1hcmtl
ZFRleHQ6Ok92ZXJsYXBTdHJhdGVneTo6RnJvbnRtb3N0KSkKLSAgICAgICAgcmVzdWx0ID0gdW5p
b25SZWN0KHJlc3VsdCwgY2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMoTGF5b3V0SW50ZWdy
YXRpb246OnRleHRSdW5Gb3IoJnRleHRCb3gpLCBtYXJrZWRUZXh0KSk7CisgICAgICAgIHJlc3Vs
dCA9IHVuaW9uUmVjdChyZXN1bHQsIGNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKElubGlu
ZUl0ZXJhdG9yOjp0ZXh0UnVuRm9yKCZ0ZXh0Qm94KSwgbWFya2VkVGV4dCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTU3MSw3ICs1NzEsNyBAQCBGbG9hdFJlY3QgVGV4dEJveFBhaW50
ZXI6OmNvbXB1dGVQYWludFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAg
IHJldHVybiB7IGJveE9yaWdpbiwgRmxvYXRTaXplKHRleHRCb3goKS5sb2dpY2FsV2lkdGgoKSwg
dGV4dEJveCgpLmxvZ2ljYWxIZWlnaHQoKSkgfTsKIH0KIAotRmxvYXRSZWN0IFRleHRCb3hQYWlu
dGVyOjpjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMYXlvdXRJbnRlZ3JhdGlv
bjo6VGV4dFJ1bkl0ZXJhdG9yJiB0ZXh0Qm94LCBjb25zdCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0
KQorRmxvYXRSZWN0IFRleHRCb3hQYWludGVyOjpjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5k
cyhjb25zdCBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yJiB0ZXh0Qm94LCBjb25zdCBN
YXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogewogICAgIGF1dG8mIGZvbnQgPSB0ZXh0Qm94LT5mb250
Q2FzY2FkZSgpOwogICAgIGF1dG8gYXNjZW50ID0gZm9udC5mb250TWV0cmljcygpLmFzY2VudCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuaAppbmRleCA0NzAxZWZj
NTRhYjgyMGYxOTZmNWU1OGNlODQ1YjVmMDUwZDBhZDliLi4xMWQ3NzI5OTFmNDEwNWYyMzE1M2I0
MDgyZGJhMTA3YzljOWUwZTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dEJveFBhaW50ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBh
aW50ZXIuaApAQCAtMjUsNyArMjUsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCisjaW5j
bHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNp
bmNsdWRlICJUZXh0Qm94U2VsZWN0YWJsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgpA
QCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEZsb2F0UmVjdCBjYWxjdWxhdGVV
bmlvbk9mQWxsRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYp
OwogCiBwcml2YXRlOgotICAgIFRleHRCb3hQYWludGVyKExheW91dEludGVncmF0aW9uOjpUZXh0
UnVuSXRlcmF0b3ImJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KTsKKyAgICBUZXh0Qm94UGFpbnRlcihJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yJiYs
IFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7CiAKICAgICBhdXRv
JiB0ZXh0Qm94KCkgY29uc3QgeyByZXR1cm4gKm1fdGV4dEJveDsgfQogCkBAIC03NSw3ICs3NSw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKGNvbnN0IENv
bXBvc2l0aW9uVW5kZXJsaW5lJik7CiAgICAgdm9pZCBwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJr
ZXIoY29uc3QgTWFya2VkVGV4dCYpOwogCi0gICAgc3RhdGljIEZsb2F0UmVjdCBjYWxjdWxhdGVE
b2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJh
dG9yJiwgY29uc3QgTWFya2VkVGV4dCYpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2FsY3VsYXRl
RG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRv
ciYsIGNvbnN0IE1hcmtlZFRleHQmKTsKIAogICAgIEZsb2F0UmVjdCBjb21wdXRlUGFpbnRSZWN0
KGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7CiAgICAgYm9vbCBjb21wdXRlSGF2ZVNl
bGVjdGlvbigpIGNvbnN0OwpAQCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogCiAgICAgY29uc3Qg
U2hhZG93RGF0YSogZGVidWdUZXh0U2hhZG93KCkgY29uc3Q7CiAKLSAgICBjb25zdCBMYXlvdXRJ
bnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yIG1fdGV4dEJveDsKKyAgICBjb25zdCBJbmxpbmVJ
dGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yIG1fdGV4dEJveDsKICAgICBjb25zdCBSZW5kZXJUZXh0
JiBtX3JlbmRlcmVyOwogICAgIGNvbnN0IERvY3VtZW50JiBtX2RvY3VtZW50OwogICAgIGNvbnN0
IFJlbmRlclN0eWxlJiBtX3N0eWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHREZWNvcmF0aW9uUGFpbnRlci5oCmluZGV4IDliZjRiNGQ5ODY2OGQ2ZGQxMjk0ZmY3NjUxNDYx
NzIyMzNiZTk5ODcuLjc3NmVlMGIzY2Y2MDc2NmU4Nzc1ODc0MTE4YjMwZDIwNGQzODY5OTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmgK
QEAgLTI0LDcgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaCIKKyNpbmNs
dWRlICJJbmxpbmVJdGVyYXRvckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRz
LmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCkBAIC00Niw3ICs0Niw3IEBAIHB1Ymxp
YzoKICAgICBzdHJ1Y3QgU3R5bGVzOwogICAgIFRleHREZWNvcmF0aW9uUGFpbnRlcihHcmFwaGlj
c0NvbnRleHQmLCBPcHRpb25TZXQ8VGV4dERlY29yYXRpb24+IGRlY29yYXRpb25zLCBjb25zdCBS
ZW5kZXJUZXh0JiwgYm9vbCBpc0ZpcnN0TGluZSwgY29uc3QgRm9udENhc2NhZGUmLCBzdGQ6Om9w
dGlvbmFsPFN0eWxlcz4gPSBzdGQ6Om51bGxvcHQpOwogICAgIAotICAgIHZvaWQgc2V0VGV4dFJ1
bkl0ZXJhdG9yKExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3IgdGV4dFJ1bikgeyBt
X3RleHRSdW4gPSB0ZXh0UnVuOyB9CisgICAgdm9pZCBzZXRUZXh0Qm94SXRlcmF0b3IoSW5saW5l
SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciB0ZXh0UnVuKSB7IG1fdGV4dFJ1biA9IHRleHRSdW47
IH0KICAgICB2b2lkIHNldElzSG9yaXpvbnRhbChib29sIGlzSG9yaXpvbnRhbCkgeyBtX2lzSG9y
aXpvbnRhbCA9IGlzSG9yaXpvbnRhbDsgfQogICAgIHZvaWQgc2V0V2lkdGgoZmxvYXQgd2lkdGgp
IHsgbV93aWR0aCA9IHdpZHRoOyB9CiAgICAgdm9pZCBzZXRUZXh0U2hhZG93KGNvbnN0IFNoYWRv
d0RhdGEqIHRleHRTaGFkb3cpIHsgbV9zaGFkb3cgPSB0ZXh0U2hhZG93OyB9CkBAIC03OSw3ICs3
OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzSG9yaXpvbnRhbCB7IHRydWUgfTsKICAgICBj
b25zdCBTaGFkb3dEYXRhKiBtX3NoYWRvdyB7IG51bGxwdHIgfTsKICAgICBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zKiBtX3NoYWRvd0NvbG9yRmlsdGVyIHsgbnVsbHB0ciB9OwotICAgIExheW91dElu
dGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3IgbV90ZXh0UnVuOworICAgIElubGluZUl0ZXJhdG9y
OjpUZXh0Qm94SXRlcmF0b3IgbV90ZXh0UnVuOwogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2Zv
bnQ7CiAKICAgICBTdHlsZXMgbV9zdHlsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5l
VGV4dEJveFN0eWxlLmNwcAppbmRleCAxYzRlNGVhMWNiNTgzZDBmYWU2YzlkNmIyNzJjZjY5OGRk
MGJkOGUzLi5jN2IxYzUxNjNmZWU1ZjdkN2Y0ZDE1NTg1MmFmNTZlZTUyMTZlYTFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAKQEAgLTI5LDggKzI5LDgg
QEAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25M
aW5lSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgi
CisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRv
ckxpbmUuaCIKICNpbmNsdWRlICJMZWdhY3lJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTGVn
YWN5Um9vdElubGluZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgpAQCAtNDksNyAr
NDksNyBAQCBzdGF0aWMgYm9vbCBpc0FuY2VzdG9yQW5kV2l0aGluQmxvY2soY29uc3QgUmVuZGVy
SW5saW5lJiBhbmNlc3RvciwgY29uc3QgUmVuZGVyTwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
c3RhdGljIHZvaWQgbWluTG9naWNhbFRvcEZvclRleHREZWNvcmF0aW9uTGluZShjb25zdCBMYXlv
dXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJhdG9yJiBsaW5lLCBmbG9hdCYgbWluTG9naWNhbFRvcCwg
Y29uc3QgUmVuZGVyRWxlbWVudCogZGVjb3JhdGlvblJlbmRlcmVyLCBPcHRpb25TZXQ8VGV4dERl
Y29yYXRpb24+IHRleHREZWNvcmF0aW9uKQorc3RhdGljIHZvaWQgbWluTG9naWNhbFRvcEZvclRl
eHREZWNvcmF0aW9uTGluZShjb25zdCBJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yJiBsaW5l
LCBmbG9hdCYgbWluTG9naWNhbFRvcCwgY29uc3QgUmVuZGVyRWxlbWVudCogZGVjb3JhdGlvblJl
bmRlcmVyLCBPcHRpb25TZXQ8VGV4dERlY29yYXRpb24+IHRleHREZWNvcmF0aW9uKQogewogICAg
IGZvciAoYXV0byBydW4gPSBsaW5lLT5maXJzdFJ1bigpOyBydW47IHJ1bi50cmF2ZXJzZU5leHRP
bkxpbmUoKSkgewogICAgICAgICBpZiAocnVuLT5yZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpKQpAQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgdm9pZCBtaW5Mb2dpY2FsVG9wRm9yVGV4
dERlY29yYXRpb25MaW5lKGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5lSXRlcgogICAgIH0K
IH0KIAotc3RhdGljIHZvaWQgbWF4TG9naWNhbEJvdHRvbUZvclRleHREZWNvcmF0aW9uTGluZShj
b25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJhdG9yJiBsaW5lLCBmbG9hdCYgbWF4TG9n
aWNhbEJvdHRvbSwgY29uc3QgUmVuZGVyRWxlbWVudCogZGVjb3JhdGlvblJlbmRlcmVyLCBPcHRp
b25TZXQ8VGV4dERlY29yYXRpb24+IHRleHREZWNvcmF0aW9uKQorc3RhdGljIHZvaWQgbWF4TG9n
aWNhbEJvdHRvbUZvclRleHREZWNvcmF0aW9uTGluZShjb25zdCBJbmxpbmVJdGVyYXRvcjo6TGlu
ZUl0ZXJhdG9yJiBsaW5lLCBmbG9hdCYgbWF4TG9naWNhbEJvdHRvbSwgY29uc3QgUmVuZGVyRWxl
bWVudCogZGVjb3JhdGlvblJlbmRlcmVyLCBPcHRpb25TZXQ8VGV4dERlY29yYXRpb24+IHRleHRE
ZWNvcmF0aW9uKQogewogICAgIGZvciAoYXV0byBydW4gPSBsaW5lLT5maXJzdFJ1bigpOyBydW47
IHJ1bi50cmF2ZXJzZU5leHRPbkxpbmUoKSkgewogICAgICAgICBpZiAocnVuLT5yZW5kZXJlcigp
LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQpAQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyBjb25z
dCBSZW5kZXJFbGVtZW50KiBlbmNsb3NpbmdSZW5kZXJlcldpdGhUZXh0RGVjb3JhdGlvbihjb25z
dCBSZW5kZXJUZXh0CiAgICAgcmV0dXJuIGN1cnJlbnQ7CiB9CiAgICAgCi1mbG9hdCBjb21wdXRl
VW5kZXJsaW5lT2Zmc2V0KFRleHRVbmRlcmxpbmVQb3NpdGlvbiB1bmRlcmxpbmVQb3NpdGlvbiwg
VGV4dFVuZGVybGluZU9mZnNldCB1bmRlcmxpbmVPZmZzZXQsIGNvbnN0IEZvbnRNZXRyaWNzJiBm
b250TWV0cmljcywgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciYgdGV4
dFJ1biwgZmxvYXQgZGVmYXVsdEdhcCkKK2Zsb2F0IGNvbXB1dGVVbmRlcmxpbmVPZmZzZXQoVGV4
dFVuZGVybGluZVBvc2l0aW9uIHVuZGVybGluZVBvc2l0aW9uLCBUZXh0VW5kZXJsaW5lT2Zmc2V0
IHVuZGVybGluZU9mZnNldCwgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzLCBjb25zdCBJ
bmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yJiB0ZXh0UnVuLCBmbG9hdCBkZWZhdWx0R2Fw
KQogewogICAgIC8vIFRoaXMgcmVwcmVzZW50cyB0aGUgZ2FwIGJldHdlZW4gdGhlIGJhc2VsaW5l
IGFuZCB0aGUgY2xvc2VzdCBlZGdlIG9mIHRoZSB1bmRlcmxpbmUuCiAgICAgZmxvYXQgZ2FwID0g
c3RkOjptYXg8aW50PigxLCBzdGQ6OmNlaWwoZGVmYXVsdEdhcCAvIDIuMGYpKTsKQEAgLTE2NSw3
ICsxNjUsNyBAQCBXYXZ5U3Ryb2tlUGFyYW1ldGVycyBnZXRXYXZ5U3Ryb2tlUGFyYW1ldGVycyhm
bG9hdCBmb250U2l6ZSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1HbHlwaE92ZXJmbG93IHZp
c3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSwg
Y29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciYgdGV4dFJ1bikKK0dseXBo
T3ZlcmZsb3cgdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYg
bGluZVN0eWxlLCBjb25zdCBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yJiB0ZXh0UnVu
KQogewogICAgIEFTU0VSVCghdGV4dFJ1biB8fCB0ZXh0UnVuLT5zdHlsZSgpID09IGxpbmVTdHls
ZSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94
U3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5oCmluZGV4
IGI0MjUxYTYyZDMyNmMzOWMzZDkxNGU1OGVlYWJjZTRiMDY0NmNhODUuLmM4NzgyMzM4Zjc0YmRj
ZWViMjZiY2RiMzA3NWYwYmZiNzYzNmE1MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL0lubGluZVRleHRCb3hTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGlu
ZVRleHRCb3hTdHlsZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRv
ci5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5
bGVDb25zdGFudHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTIsNyArNTIsNyBAQCBz
dHJ1Y3QgV2F2eVN0cm9rZVBhcmFtZXRlcnMgewogICAgIGZsb2F0IHN0ZXAgeyAwIH07CiB9Owog
V2F2eVN0cm9rZVBhcmFtZXRlcnMgZ2V0V2F2eVN0cm9rZVBhcmFtZXRlcnMoZmxvYXQgZm9udFNp
emUpOwotR2x5cGhPdmVyZmxvdyB2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zKGNvbnN0IFJl
bmRlclN0eWxlJiBsaW5lU3R5bGUsIGNvbnN0IExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRl
cmF0b3ImKTsKLWZsb2F0IGNvbXB1dGVVbmRlcmxpbmVPZmZzZXQoVGV4dFVuZGVybGluZVBvc2l0
aW9uLCBUZXh0VW5kZXJsaW5lT2Zmc2V0LCBjb25zdCBGb250TWV0cmljcyYsIGNvbnN0IExheW91
dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3ImLCBmbG9hdCB0ZXh0RGVjb3JhdGlvblRoaWNr
bmVzcyk7CitHbHlwaE92ZXJmbG93IHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyU3R5bGUmIGxpbmVTdHlsZSwgY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVy
YXRvciYpOworZmxvYXQgY29tcHV0ZVVuZGVybGluZU9mZnNldChUZXh0VW5kZXJsaW5lUG9zaXRp
b24sIFRleHRVbmRlcmxpbmVPZmZzZXQsIGNvbnN0IEZvbnRNZXRyaWNzJiwgY29uc3QgSW5saW5l
SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciYsIGZsb2F0IHRleHREZWNvcmF0aW9uVGhpY2tuZXNz
KTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="commit-queue"
          id="463758"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439963</attachid>
            <date>2021-10-02 05:26:18 -0700</date>
            <delta_ts>2021-10-02 07:01:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231118-20211002152616.patch</filename>
            <type>text/plain</type>
            <size>238313</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzBhMTUyMzgxYWQ3ZTkw
OGFjMjcwNGZiNThlMWVlODJkMWY0YTU1Ny4uOGYzZTVkYzNjZTQ4OTAzZDUzMmJhYzg2MDg0MDVi
NjUxN2NjYzI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3OSBAQAorMjAyMS0xMC0wMiAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSW50ZWdyYXRp
b25dIE1vdmUgaW5saW5lIGl0ZXJhdG9ycyB0byBJbmxpbmVJdGVyYXRvciBuYW1lc3BhY2UgYW5k
IHJlbmFtZSBSdW4qIHRvIEJveCoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMTExOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcHJvdmUgbmFtaW5nIGFuZCBuYW1lc3BhY2luZyBvZiB0aGUgaXRlcmF0
b3IgdHlwZXMuCisKKyAgICAgICAgSXRlcmF0b3IgdHlwZXMgbW92ZSBmcm9tIExheW91dEludGVn
cmF0aW9uIHRvIElubGluZUl0ZXJhdG9yIG5hbWVzcGFjZS4KKworICAgICAgICBBbHNvIHRoZSBp
dGVyYXRvciBhbmQgdGhlIGl0ZXJhdGVkIHR5cGUgaXMgbmFtZWQgZnJvbSBSdW4gdG8gQm94IGZv
ciBhY2N1cmFjeSBhbmQKKyAgICAgICAgdGhlIGNvbmZ1c2luZyB3b3JkIFBhdGggaXMgZHJvcHBl
ZCAoc2luY2UgdGhlcmUgYXJlIG5vIG5hbWUgY29uZmxpdHMgaW4gdGhlIG5ldyBuYW1lc3BhY2Up
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3QgeWV0IGNoYW5nZSBhbnkgYWNjZXNzb3Jz
IG9yIHZhcmlhYmxlIG5hbWVzIHRvIG1hdGNoIHRoZSBydW4tPmJveCByZW5hbWluZy4KKworICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bG9jYWxDYXJldFJlY3RGb3JDaGFyYWN0ZXJP
ZmZzZXQpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpo
YXNJbmxpbmVSdW4pOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnVwc3RyZWFtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpkb3duc3RyZWFtIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnNlYXJjaEFoZWFkRm9yQmV0dGVyTWF0Y2gpOgorICAgICAgICAoV2ViQ29y
ZTo6UG9zaXRpb246OmlubGluZVJ1bkFuZE9mZnNldCBjb25zdCk6CisgICAgICAgICogZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHQpOgorICAgICAgICAqIGVkaXRpbmcv
SW5saW5lUnVuQW5kT2Zmc2V0Lmg6CisgICAgICAgICogZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246OlJlbmRlcmVkUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyZWRQb3NpdGlvbjo6cHJldmlvdXNMZWFmT25M
aW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246Om5leHRMZWFm
T25MaW5lIGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246OmxpbmUgY29uc3QpOgorICAgICAgICAq
IGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRv
cjo6aGFuZGxlVGV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpoYW5k
bGVUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6aGFuZGxlVGV4dE5v
ZGVGaXJzdExldHRlcik6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuaDoKKyAgICAg
ICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgICogZWRpdGluZy9WaXNp
YmxlVW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNUZXh0T3JMaW5lQnJlYWtSdW4pOgor
ICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNUZXh0T3JMaW5lQnJlYWtSdW4pOgorICAgICAgICAo
V2ViQ29yZTo6bmV4dFRleHRPckxpbmVCcmVha1J1bik6CisgICAgICAgIChXZWJDb3JlOjpzdGFy
dFRleHRPckxpbmVCcmVha1J1bik6CisgICAgICAgIChXZWJDb3JlOjplbmRUZXh0T3JMaW5lQnJl
YWtSdW4pOgorICAgICAgICAoV2ViQ29yZTo6bG9naWNhbGx5UHJldmlvdXNSdW4pOgorICAgICAg
ICAoV2ViQ29yZTo6bG9naWNhbGx5TmV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjp3b3JkQnJl
YWtJdGVyYXRvckZvck1pbk9mZnNldEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OndvcmRC
cmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6dmlz
dWFsV29yZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0UG9zaXRpb25Gb3JMaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OmVuZFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAgIChXZWJD
b3JlOjphYnNvbHV0ZUxpbmVEaXJlY3Rpb25Qb2ludFRvTG9jYWxQb2ludEluQmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6cHJldmlvdXNMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
bmV4dExpbmVQb3NpdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
dmFsdWVXaXRoSGFyZExpbmVCcmVha3MgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3Jh
dGlvbi9JbmxpbmVJdGVyYXRvckJveC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3I6OkJveEl0ZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvcjo6b3BlcmF0b3I9
PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3I6
OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6Om5l
eHRPbkxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6
cHJldmlvdXNPbkxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6
OkJveDo6bmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUl0ZXJhdG9yOjpCb3g6OnByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6bGluZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94OjpzdHlsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveDo6bmV4dFRleHRSdW4g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6Om5leHRU
ZXh0UnVuSW5UZXh0T3JkZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0
b3I6OlRleHRCb3g6OnNlbGVjdGlvblJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OlRleHRCb3g6OmlzQ29tYmluZWRUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0Qm94Ojpmb250Q2FzY2FkZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94OjpzZWxlY3Rpb25TdGF0ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0
Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3hJ
dGVyYXRvcjo6dHJhdmVyc2VOZXh0VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJ
dGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRUZXh0UnVuSW5UZXh0T3JkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjp0cmF2ZXJz
ZU5leHRPbkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJh
dG9yOjp0cmF2ZXJzZVByZXZpb3VzT25MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0
ZXJhdG9yOjpCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjp0cmF2ZXJz
ZVByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRPbkxpbmVJbkxvZ2ljYWxPcmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3I6OnRyYXZl
cnNlUHJldmlvdXNPbkxpbmVJbkxvZ2ljYWxPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVJdGVyYXRvcjo6Zmlyc3RUZXh0UnVuRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0
ZXJhdG9yOjpmaXJzdFRleHRSdW5JblRleHRPcmRlckZvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVJdGVyYXRvcjo6dGV4dFJ1bkZvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVy
YXRvcjo6cnVuRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6Om1v
ZGVyblBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6
bGVnYWN5UGF0aCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0
ZXJhdG9yQm94Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oLgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OlRleHRCb3g6OnJlbmRlcmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpUZXh0Qm94OjpsZWdhY3lJbmxpbmVCb3ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjpCb3hJdGVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3I6Om9wZXJhdG9yIT0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjpv
cGVyYXRvciogY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0
ZXJhdG9yOjpvcGVyYXRvci0+IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yKiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yOjpv
cGVyYXRvci0+IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0
Qm94SXRlcmF0b3I6OmdldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6VGV4dFJ1blJhbmdlOjpUZXh0UnVuUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OlRleHRSdW5SYW5nZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lSXRlcmF0b3I6OkJveDo6Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpCb3g6OmlzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6Qm94OjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpC
b3g6OmlzSG9yaXpvbnRhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6Qm94OjpkaXJPdmVycmlkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVy
YXRvcjo6Qm94Ojppc0xpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJ
dGVyYXRvcjo6Qm94OjptaW5pbXVtQ2FyZXRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6bWF4aW11bUNhcmV0T2Zmc2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6OmJpZGlMZXZlbCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94OjpyZW5kZXJlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94OjpsZWdhY3lJbmxpbmVCb3ggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6aW5saW5lQm94IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0Qm94OjpoYXNIeXBoZW4g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OlRleHRC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OnRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OnN0YXJ0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0Qm94OjplbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6Omxlbmd0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveDo6b2Zmc2V0
Rm9yUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRl
eHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUl0ZXJhdG9yOjpUZXh0Qm94OjpzZWxlY3RhYmxlUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OmNyZWF0ZVRleHRSdW4gY29uc3QpOgorICAg
ICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0
b3JCb3hMZWdhY3lQYXRoLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvckxlZ2FjeVBhdGguaC4KKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvckxlZ2FjeVBhdGg6OkJveEl0
ZXJhdG9yTGVnYWN5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94
SXRlcmF0b3JMZWdhY3lQYXRoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvckxlZ2FjeVBhdGg6OnRyYXZlcnNlTmV4dElubGlu
ZUJveEluQ2FjaGVPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94
SXRlcmF0b3JMZWdhY3lQYXRoOjp0cmF2ZXJzZVByZXZpb3VzSW5saW5lQm94SW5DYWNoZU9yZGVy
KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5Q
YXRoLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaC4KKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvck1vZGVyblBhdGg6OkJveEl0ZXJhdG9yTW9kZXJu
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3JNb2Rl
cm5QYXRoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpCb3hJdGVyYXRvck1vZGVyblBhdGg6OmJveGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvck1vZGVyblBhdGg6OmxpbmUgY29uc3QpOgor
ICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxpbmUuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0
aW9uTGluZUl0ZXJhdG9yLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpM
aW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVy
YXRvcjo6TGluZTo6bmV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6TGluZTo6cHJldmlvdXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0
b3I6OkxpbmU6OmZpcnN0UnVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpMaW5lOjpsYXN0UnVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpMaW5lOjpsb2dpY2FsU3RhcnRSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OkxpbmU6OmxvZ2ljYWxFbmRSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmxvZ2ljYWxTdGFydFJ1bldpdGhOb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpsb2dpY2FsRW5kUnVuV2l0
aE5vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmNs
b3Nlc3RSdW5Gb3JQb2ludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6TGluZTo6Y2xvc2VzdFJ1bkZvckxvZ2ljYWxMZWZ0UG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmJsb2NrRGlyZWN0aW9uUG9pbnRJbkxp
bmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OnNlbGVj
dGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OnNlbGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2Vk
aW5nQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6
OnNlbGVjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9y
OjpMaW5lOjpmaXJzdFNlbGVjdGVkQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUl0ZXJhdG9yOjpMaW5lOjpsYXN0U2VsZWN0ZWRCb3ggY29uc3QpOgorICAgICAgICAqIGxheW91
dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxpbmUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5o
LgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvcjo6b3BlcmF0
b3IqIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0
b3I6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6
OkxpbmU6OkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OnRv
cCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZTo6Ym90dG9t
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpzZWxlY3Rp
b25Ub3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OnNl
bGVjdGlvblRvcEZvckhpdFRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OkxpbmU6OnNlbGVjdGlvbkJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVJdGVyYXRvcjo6TGluZTo6c2VsZWN0aW9uSGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpsaW5lQm94VG9wIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpsaW5lQm94Qm90dG9tIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpzZWxlY3Rpb25SZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjp5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpjb250ZW50TG9naWNhbExl
ZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmNvbnRl
bnRMb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6
OkxpbmU6OmNvbnRlbnRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OkxpbmU6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmlzSG9yaXpvbnRhbCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZTo6YmFzZWxpbmVUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpjb250YWluaW5nQmxvY2sgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmxlZ2FjeVJvb3RJbmxp
bmVCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6Omlz
Rmlyc3QgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRv
ckxpbmVMZWdhY3lQYXRoLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmguCisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yTGVnYWN5UGF0aDo6Zmly
c3RSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVJdGVy
YXRvckxlZ2FjeVBhdGg6Omxhc3RSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OkxpbmVJdGVyYXRvckxlZ2FjeVBhdGg6OmxvZ2ljYWxTdGFydFJ1biBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yTGVnYWN5UGF0
aDo6bG9naWNhbEVuZFJ1biBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0lu
bGluZUl0ZXJhdG9yTGluZU1vZGVyblBhdGguaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvck1vZGVyblBh
dGguaC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3JNb2Rl
cm5QYXRoOjpMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoOjpmaXJzdFJ1biBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yTW9kZXJuUGF0aDo6bGFz
dFJ1biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJh
dG9yTW9kZXJuUGF0aDo6bG9naWNhbFN0YXJ0UnVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoOjpsb2dpY2FsRW5kUnVuIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3JNb2Rl
cm5QYXRoOjpsaW5lcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6
TGluZUl0ZXJhdG9yTW9kZXJuUGF0aDo6bGluZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudC5jcHA6CisgICAgICAgICog
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6dGV4dFJ1bnNGb3Ig
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6
OnJ1bkZvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGlu
ZUxheW91dDo6Zmlyc3RMaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVn
cmF0aW9uOjpMaW5lTGF5b3V0OjpsYXN0TGluZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
SXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9y
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0Jp
ZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRvcjo6VGV4dFJ1bkl0ZXJh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRvcjo6b2Zmc2V0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRvcjo6aW5j
cmVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRvcjo6YXRF
bmQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bkl0ZXJhdG9yOjpj
dXJyZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRv
cjo6ZGlyZWN0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5J
dGVyYXRvcjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVu
SXRlcmF0b3I6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9DYXJl
dFJlY3RDb21wdXRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ2FyZXRSZWN0
Rm9yTGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDYXJldFJlY3RGb3JU
ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dExvZ2ljYWxXaWR0aEZvclRleHRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGp1c3RGb3JC
b3JkZXJGaXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGp1
c3RTZWxlY3Rpb25Ub3BGb3JQcmVjZWRpbmdCbG9jayBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmlubGluZVNlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29y
ZTo6cG9zaXRpb25Gb3JSdW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpm
aW5kQ2xvc2VzdFRleHRBdEFic29sdXRlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojpwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpnZXRMZWFkaW5nQ29y
bmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmNvbGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxpbmVCcmVhazo6bGluZXNCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaW5lQnJlYWs6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGluZUJyZWFrOjphYnNvbHV0ZVF1YWRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpbmVCcmVhazo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJpZXMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZXBsYWNlZDo6cG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9u
R2VvbWV0cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyaWVzRm9yVGV4dFJ1bik6Cisg
ICAgICAgIChXZWJDb3JlOjplbGxpcHNpc1JlY3RGb3JUZXh0UnVuKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbGxlY3RBYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2FsUXVhZEZv
clRleHRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0Zv
clJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJ
bkJveCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZz
ZXRGb3JCaURpKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Zmlyc3RSdW5Mb2NhdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpsaW5lc0JvdW5kaW5nQm94IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25HZW9tZXRy
aWVzRm9yTGluZUJveGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNhcmV0TWlu
T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNhcmV0TWF4T2Zm
c2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvdW50UmVuZGVyZWRD
aGFyYWN0ZXJPZmZzZXRzVW50aWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnNP
ZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6aGFzUmVuZGVyZWRUZXh0IGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnREZWNvcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRleHRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFp
bnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyk6
CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERlY29y
YXRpb25QYWludGVyOjpzZXRUZXh0Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dERlY29yYXRpb25QYWludGVyOjpzZXRUZXh0UnVuSXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAg
ICAqIHN0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjptaW5M
b2dpY2FsVG9wRm9yVGV4dERlY29yYXRpb25MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Om1heExv
Z2ljYWxCb3R0b21Gb3JUZXh0RGVjb3JhdGlvbkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cHV0ZVVuZGVybGluZU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjp2aXN1YWxPdmVyZmxvd0Zv
ckRlY29yYXRpb25zKToKKyAgICAgICAgKiBzdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuaDoKKwog
MjAyMS0xMC0wMSAgTmlrb3MgTW91Y2h0YXJpcyAgPG5tb3VjaHRhcmlzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBbGxvdyBOYU4sIGluZmluaXR5LCBhbmQgLWluZmluaXR5IGluIGNhbGMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCmluZGV4IDc3Nzg3MTQzM2RhODEyNWJlYzgxMTE2MDAzNmFjNWRlYTRjMjJkZTAu
LjVkYjY4Mjk5NTg5ZmRjYjI5OTc1MmU1ODI2ZGM5OTMxZTZlYTAxZjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZQpAQCAtNzk1LDE0ICs3OTUsMTQgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5s
aW5lRGlzcGxheUJveC5oCiAgICAgbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lUmVjdC5oCiAKKyAgICBsYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3guaAor
ICAgIGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaAorICAg
IGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaAorICAgIGxh
eW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxpbmUuaAorICAgIGxheW91dC9pbnRlZ3Jh
dGlvbi9JbmxpbmVJdGVyYXRvckxpbmVMZWdhY3lQYXRoLmgKKyAgICBsYXlvdXQvaW50ZWdyYXRp
b24vSW5saW5lSXRlcmF0b3JMaW5lTW9kZXJuUGF0aC5oCiAgICAgbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudC5oCiAgICAgbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uTGluZS5oCi0gICAgbGF5b3V0L2ludGVncmF0aW9uL0xheW91dElu
dGVncmF0aW9uTGluZUl0ZXJhdG9yLmgKLSAgICBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmgKLSAgICBsYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmgKLSAgICBsYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oCi0gICAgbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgKLSAgICBsYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaAog
ICAgIGxheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5oCiAKICAgICBsb2FkZXIvQ2FudmFzQWN0
aXZpdHlSZWNvcmQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAzMGVlYzU3OWFmZjMxMzZlNjQwODJhZDY2
ZDFkNzg2N2Q1OGUyMjFjLi40NDdmMWM1M2VjZmExMDAwMjY5Zjg4ZGRhMDYxZjk0MDUwMzFiNzU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTUxMCwxNCArMTUxMCwxNCBAQCBsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmNwcAogbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lVGV4dEl0ZW0uY3BwCiBsYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9pbnZhbGlkYXRpb24vSW5saW5lSW52YWxpZGF0aW9uLmNw
cAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvdGV4dC9UZXh0VXRpbC5jcHAKK2xh
eW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveC5jcHAKK2xheW91dC9pbnRlZ3JhdGlv
bi9JbmxpbmVJdGVyYXRvckxpbmUuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25Cb3hUcmVlLmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292
ZXJhZ2UuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250
ZW50QnVpbGRlci5jcHAKIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGlu
ZUNvbnRlbnQuY3BwCi1sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3IuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0
LmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAK
LWxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmNwcAogbGF5
b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Q29u
dGFpbmVyQm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94R2VvbWV0cnkuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZTViNTBiNDlhMTUyY2NlNWQ4NWYxYTM4NmMxNzI2Njk0N2UxMWRlZi4uYjdkYjFkNzI1OGMz
ZGJkYWIwOGM5MDI1OGQxYmI4NjgyMjYxMTM5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTI3Nyw5ICs1Mjc3LDkgQEAKIAkJ
RTQ4NjNDRkUyMzg0MkU5RTAwOTcyMTU4IC8qIFJ1bGVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg2M0NGRDIzODQyRTlFMDA5NzIxNTggLyog
UnVsZURhdGEuaCAqLzsgfTsKIAkJRTQ5NDZFQUYxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVs
ZUltcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ5NDZFQUQxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OUJEOUZBMTMxRkQyRUQw
MDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0OUJEOUY5MTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wu
aCAqLzsgfTsKLQkJRTRBNjY0Q0MyNTIxRDRBRjAwNzA4MURDIC8qIExheW91dEludGVncmF0aW9u
UnVuSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0QTY2NEM2MjUyMUI3NzgwMDcwODFEQyAvKiBMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
RTRBNjY0Q0UyNTIxRDRDOTAwNzA4MURDIC8qIExheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JN
b2Rlcm5QYXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEE2NjRDNDI1MjFCNzc3MDA3MDgxREMgLyogTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRv
ck1vZGVyblBhdGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlFNEE2NjRDRjI1MjFENEUyMDA3MDgxREMgLyogTGF5b3V0SW50ZWdyYXRpb25SdW5J
dGVyYXRvckxlZ2FjeVBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0QTY2NEM1MjUyMUI3NzgwMDcwODFEQyAvKiBMYXlvdXRJbnRlZ3JhdGlvblJ1
bkl0ZXJhdG9yTGVnYWN5UGF0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUU0QTY2NENDMjUyMUQ0QUYwMDcwODFEQyAvKiBJbmxpbmVJdGVyYXRv
ckJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRB
NjY0QzYyNTIxQjc3ODAwNzA4MURDIC8qIElubGluZUl0ZXJhdG9yQm94LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTRBNjY0Q0UyNTIxRDRDOTAw
NzA4MURDIC8qIElubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBNjY0QzQyNTIxQjc3NzAwNzA4MURDIC8q
IElubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUU0QTY2NENGMjUyMUQ0RTIwMDcwODFEQyAvKiBJbmxp
bmVJdGVyYXRvckJveExlZ2FjeVBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0QTY2NEM1MjUyMUI3NzgwMDcwODFEQyAvKiBJbmxpbmVJdGVyYXRv
ckJveExlZ2FjeVBhdGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlFNEE3OTk1MjIwRUU0QjE0MDBDMTk1NjggLyogQ1NTUGFyc2VyQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBNzk5NEUy
MEVFNEFFMTAwQzE5NTY4IC8qIENTU1BhcnNlckNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEE4MTRENDFDNkRFQzQwMDBCRjg1QUMg
LyogQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTgxNEQzMUM2REVDNDAwMEJGODVBQyAvKiBDbGFzc0NoYW5n
ZUludmFsaWRhdGlvbi5oICovOyB9OwogCQlFNEE4MTREQTFDNzBFMTBEMDBCRjg1QUMgLyogQXR0
cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEE4MTREOTFDNzBFMTBEMDBCRjg1QUMgLyogQXR0cmlidXRlQ2hh
bmdlSW52YWxpZGF0aW9uLmggKi87IH07CkBAIC01MzA4LDkgKzUzMDgsOSBAQAogCQlFNEM5MUEw
RTE4MDIzNDMxMDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzkxQTBEMTgwMjM0MzEwMEExN0Y2RCAvKiBU
ZXh0UGFpbnRTdHlsZS5oICovOyB9OwogCQlFNEM5MUExNjE4MDk5OUYxMDBBMTdGNkQgLyogUmVu
ZGVyVGV4dExpbmVCb3hlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRDOTFBMTUxODA5OTlGMTAwQTE3RjZEIC8qIFJlbmRlclRleHRMaW5lQm94ZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEQz
M0YzQjI1MkFFRUNEMDA4MzdEMDUgLyogSW5saW5lUnVuQW5kT2Zmc2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQzM0YzOTI1MkFFRUNDMDA4MzdE
MDUgLyogSW5saW5lUnVuQW5kT2Zmc2V0LmggKi87IH07Ci0JCUU0RDMzRjQxMjUyQzRCODMwMDgz
N0QwNSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTREMzNGM0YyNTJDNEI4MjAwODM3RDA1IC8q
IExheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmggKi87IH07Ci0JCUU0RDMzRjQ0MjUyQzUw
RTIwMDgzN0QwNSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDMzRjQzMjUy
QzUwRTIwMDgzN0QwNSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGgu
aCAqLzsgfTsKLQkJRTREMzNGNDYyNTJDNTBGQzAwODM3RDA1IC8qIExheW91dEludGVncmF0aW9u
TGluZUl0ZXJhdG9yTW9kZXJuUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTREMzNGNDUyNTJDNTBGQjAwODM3RDA1IC8qIExheW91dEludGVncmF0
aW9uTGluZUl0ZXJhdG9yTW9kZXJuUGF0aC5oICovOyB9OworCQlFNEQzM0Y0MTI1MkM0QjgzMDA4
MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQzM0YzRjI1MkM0QjgyMDA4MzdEMDUgLyogSW5saW5lSXRl
cmF0b3JMaW5lLmggKi87IH07CisJCUU0RDMzRjQ0MjUyQzUwRTIwMDgzN0QwNSAvKiBJbmxpbmVJ
dGVyYXRvckxpbmVMZWdhY3lQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNEQzM0Y0MzI1MkM1MEUyMDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JM
aW5lTGVnYWN5UGF0aC5oICovOyB9OworCQlFNEQzM0Y0NjI1MkM1MEZDMDA4MzdEMDUgLyogSW5s
aW5lSXRlcmF0b3JMaW5lTW9kZXJuUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTREMzNGNDUyNTJDNTBGQjAwODM3RDA1IC8qIElubGluZUl0ZXJh
dG9yTGluZU1vZGVyblBhdGguaCAqLzsgfTsKIAkJRTRENThFQjUxN0I0REJEQzAwQ0JEQ0E4IC8q
IFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEQ1OEVCMzE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuaCAqLzsgfTsKIAkJRTRENThFQjkxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxl
Rm9udFNpemVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0RDU4RUI3MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rp
b25zLmggKi87IH07CiAJCUU0RDU4RUJCMTdCOEYxMjgwMENCRENBOCAvKiBFbGVtZW50VHJhdmVy
c2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ1
OEVCQTE3QjhGMTI4MDBDQkRDQTggLyogRWxlbWVudFRyYXZlcnNhbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNjU0MSwxMCArMTY1NDEsMTAg
QEAKIAkJRTRBMDA3ODQxQjgyMEVEMzAwMkM1QTZFIC8qIERhdGFVUkxEZWNvZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFVUkxEZWNvZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBMTgyMkYxRjEzQkU1ODAwRkVGNjk4IC8qIFN0
eWxlSW52YWxpZGF0aW9uRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlSW52YWxpZGF0
aW9uRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTFBQzc4MjJG
QUZENTAwMDE3Qjc1QiAvKiBMZWdhY3lMaW5lTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExlZ2FjeUxpbmVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRTRBNjY0QzQyNTIxQjc3NzAwNzA4MURDIC8qIExheW91dEludGVncmF0aW9uUnVuSXRl
cmF0b3JNb2Rlcm5QYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91
dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUU0QTY2NEM1MjUyMUI3NzgwMDcwODFEQyAvKiBMYXlvdXRJbnRlZ3JhdGlvblJ1
bkl0ZXJhdG9yTGVnYWN5UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
YXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFNEE2NjRDNjI1MjFCNzc4MDA3MDgxREMgLyogTGF5b3V0SW50ZWdyYXRp
b25SdW5JdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRJ
bnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0
QTY2NEM3MjUyMUI3NzkwMDcwODFEQyAvKiBMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0aW9u
UnVuSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEE2NjRDNDI1
MjFCNzc3MDA3MDgxREMgLyogSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEE2NjRDNTI1MjFCNzc4MDA3MDgxREMgLyog
SW5saW5lSXRlcmF0b3JCb3hMZWdhY3lQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFNEE2NjRDNjI1MjFCNzc4MDA3MDgxREMgLyogSW5saW5lSXRlcmF0b3JCb3gu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lSXRlcmF0b3JCb3guaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRBNjY0QzcyNTIxQjc3OTAwNzA4MURDIC8q
IElubGluZUl0ZXJhdG9yQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IElubGluZUl0ZXJhdG9yQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTRBNzk5NEUyMEVFNEFFMTAwQzE5NTY4IC8qIENTU1BhcnNlckNvbnRleHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ1NTUGFyc2VyQ29udGV4dC5oOyBwYXRoID0gcGFyc2Vy
L0NTU1BhcnNlckNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBNzk5
NTAyMEVFNEFFMjAwQzE5NTY4IC8qIENTU1BhcnNlckNvbnRleHQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ1NTUGFyc2VyQ29udGV4dC5jcHA7IHBhdGggPSBwYXJz
ZXIvQ1NTUGFyc2VyQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
QTgxNEQzMUM2REVDNDAwMEJGODVBQyAvKiBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY2MDksMTAgKzE2NjA5LDEwIEBACiAJCUU0
QzkxQTE1MTgwOTk5RjEwMEExN0Y2RCAvKiBSZW5kZXJUZXh0TGluZUJveGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRleHRMaW5lQm94ZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDOTFBMTcxODA5OTlGQjAwQTE3RjZEIC8qIFJlbmRlclRl
eHRMaW5lQm94ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyVGV4dExpbmVCb3hlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDMz
RjM5MjUyQUVFQ0MwMDgzN0QwNSAvKiBJbmxpbmVSdW5BbmRPZmZzZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lUnVuQW5kT2Zmc2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUU0RDMzRjNGMjUyQzRCODIwMDgzN0QwNSAvKiBMYXlvdXRJbnRlZ3Jh
dGlvbkxpbmVJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlv
dXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlFNEQzM0Y0MjI1MkM1MEE4MDA4MzdEMDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNEQzM0Y0MzI1MkM1MEUyMDA4MzdE
MDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yTGVn
YWN5UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNEQzM0Y0NTI1MkM1MEZC
MDA4MzdEMDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uTGluZUl0ZXJh
dG9yTW9kZXJuUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEQzM0YzRjI1
MkM0QjgyMDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElubGluZUl0ZXJhdG9yTGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFNEQzM0Y0MjI1MkM1MEE4MDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5l
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUl0ZXJhdG9yTGluZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RDMzRjQzMjUyQzUwRTIwMDgzN0QwNSAvKiBJbmxpbmVJ
dGVyYXRvckxpbmVMZWdhY3lQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElubGluZUl0ZXJhdG9yTGluZUxlZ2FjeVBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTREMzNGNDUyNTJDNTBGQjAwODM3RDA1IC8qIElubGluZUl0ZXJhdG9yTGluZU1vZGVy
blBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lSXRlcmF0b3JM
aW5lTW9kZXJuUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEQ1OEVCMjE3
QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEQ1OEVCMzE3QjREQkRDMDBDQkRDQTggLyog
U3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVGb250U2l6ZUZ1bmN0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTQ4NCw2ICsyOTQ4NCwx
NCBAQAogCQlFNEZCNEIxRTIzOTUzNTZGMDAzQzMzNkEgLyogaW50ZWdyYXRpb24gKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUU0QTY2NEM3MjUyMUI3Nzkw
MDcwODFEQyAvKiBJbmxpbmVJdGVyYXRvckJveC5jcHAgKi8sCisJCQkJRTRBNjY0QzYyNTIxQjc3
ODAwNzA4MURDIC8qIElubGluZUl0ZXJhdG9yQm94LmggKi8sCisJCQkJRTRBNjY0QzUyNTIxQjc3
ODAwNzA4MURDIC8qIElubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0aC5oICovLAorCQkJCUU0QTY2
NEM0MjUyMUI3NzcwMDcwODFEQyAvKiBJbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaCAqLywK
KwkJCQlFNEQzM0Y0MjI1MkM1MEE4MDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5lLmNwcCAq
LywKKwkJCQlFNEQzM0YzRjI1MkM0QjgyMDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5lLmgg
Ki8sCisJCQkJRTREMzNGNDMyNTJDNTBFMjAwODM3RDA1IC8qIElubGluZUl0ZXJhdG9yTGluZUxl
Z2FjeVBhdGguaCAqLywKKwkJCQlFNEQzM0Y0NTI1MkM1MEZCMDA4MzdEMDUgLyogSW5saW5lSXRl
cmF0b3JMaW5lTW9kZXJuUGF0aC5oICovLAogCQkJCUU0MTgwMjU2MjNENDU0QjUwMEZGQjA3MSAv
KiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuY3BwICovLAogCQkJCUU0MTgwMjUzMjNENDU0OUEw
MEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCAqLywKIAkJCQlFNDAzQjc5RjI1
MUIxMThCMDAxOUU4MDAgLyogTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5jcHAgKi8sCkBAIC0y
OTQ5MywxOCArMjk1MDEsMTAgQEAKIAkJCQk2RjNGQkE5NjI1NTZFMzA4MDAzNTMwRkQgLyogTGF5
b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5jcHAgKi8sCiAJCQkJNkYzRkJBOTcy
NTU2RTMxMjAwMzUzMEZEIC8qIExheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIu
aCAqLywKIAkJCQk2RkI0N0U2MTIyNzc0MjVBMDBDN0JDQjAgLyogTGF5b3V0SW50ZWdyYXRpb25M
aW5lLmggKi8sCi0JCQkJRTREMzNGNDIyNTJDNTBBODAwODM3RDA1IC8qIExheW91dEludGVncmF0
aW9uTGluZUl0ZXJhdG9yLmNwcCAqLywKLQkJCQlFNEQzM0YzRjI1MkM0QjgyMDA4MzdEMDUgLyog
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCAqLywKLQkJCQlFNEQzM0Y0MzI1MkM1MEUy
MDA4MzdEMDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmggKi8s
Ci0JCQkJRTREMzNGNDUyNTJDNTBGQjAwODM3RDA1IC8qIExheW91dEludGVncmF0aW9uTGluZUl0
ZXJhdG9yTW9kZXJuUGF0aC5oICovLAogCQkJCUU0QUJBQkRFMjM2MDg5M0QwMEZBNDM0NSAvKiBM
YXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwICovLAogCQkJCUU0QUJBQkRCMjM2MDg4RkQw
MEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCAqLywKIAkJCQlFNDMxMkFC
NTI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCAqLywK
IAkJCQlFNDMxMkFCNzI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0
aW9uLmggKi8sCi0JCQkJRTRBNjY0QzcyNTIxQjc3OTAwNzA4MURDIC8qIExheW91dEludGVncmF0
aW9uUnVuSXRlcmF0b3IuY3BwICovLAotCQkJCUU0QTY2NEM2MjUyMUI3NzgwMDcwODFEQyAvKiBM
YXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmggKi8sCi0JCQkJRTRBNjY0QzUyNTIxQjc3ODAw
NzA4MURDIC8qIExheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmggKi8sCi0J
CQkJRTRBNjY0QzQyNTIxQjc3NzAwNzA4MURDIC8qIExheW91dEludGVncmF0aW9uUnVuSXRlcmF0
b3JNb2Rlcm5QYXRoLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGludGVncmF0aW9uOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMxNDM0LDcgKzMxNDM0LDYgQEAKIAkJCQlFN0UwMzU3
MjI0RDRFMTk2MDA4REZFRkIgLyogQW5hbHlzZXJPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyN0UzQzgwODI1N0Y1RTZFMDBDOTg2QUIgLyogQU5HTEVIZWFkZXJzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAgLyogQU5HTEVJbnN0YW5jZWRBcnJheXMu
aCBpbiBIZWFkZXJzICovLAotCQkJCTdCQjM0QTE3MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8q
IEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDEx
IC8qIEFuaW1hdGlvbkVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzFFMkM0MjYyMUM5MzUy
ODAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTMy
NjgyLDYgKzMyNjgxLDcgQEAKIAkJCQk5MzQ5MDdFNDEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhp
Y3NDb250ZXh0Q0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxM0RFODcwMjNBOTY5NzMwMDhGQzQ3
QiAvKiBHcmFwaGljc0NvbnRleHRHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0I0NUFCNTUyNUZC
QTlERTAwRkQyN0Y0IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVFR0xVdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTdCQjM0QTE3MjUzNDVDQjIwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2
MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QjEwMzM5RTI1NDk3MjE3MDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0IxMDMzOUYyNTQ5NzIxRTAwQzhDMUFDIC8qIEdyYXBoaWNzQ29u
dGV4dEdMQ1ZBTkdMRS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzAwNSw2ICszMzAwNSwxMiBAQAog
CQkJCTExNUNGQTdFMjA4QjhFMTAwMDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTExMUZBMUM3MjZGMEYzMEYwMDNCOEYxNiAvKiBJbmxpbmVJbnZh
bGlkYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRTdDRkEyMjE3N0VFRjIwMDVCMTU3MyAv
KiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEE2NjRDQzI1MjFENEFGMDA3MDgx
REMgLyogSW5saW5lSXRlcmF0b3JCb3guaCBpbiBIZWFkZXJzICovLAorCQkJCUU0QTY2NENGMjUy
MUQ0RTIwMDcwODFEQyAvKiBJbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaCBpbiBIZWFkZXJz
ICovLAorCQkJCUU0QTY2NENFMjUyMUQ0QzkwMDcwODFEQyAvKiBJbmxpbmVJdGVyYXRvckJveE1v
ZGVyblBhdGguaCBpbiBIZWFkZXJzICovLAorCQkJCUU0RDMzRjQxMjUyQzRCODMwMDgzN0QwNSAv
KiBJbmxpbmVJdGVyYXRvckxpbmUuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0RDMzRjQ0MjUyQzUw
RTIwMDgzN0QwNSAvKiBJbmxpbmVJdGVyYXRvckxpbmVMZWdhY3lQYXRoLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFNEQzM0Y0NjI1MkM1MEZDMDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5lTW9k
ZXJuUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZBQUU3MTMyNkEyODE0QjAwRTA3NTAyIC8q
IElubGluZUxldmVsQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjBDRDY5NTIyOUVEMzI3MDBD
NTk5NEUgLyogSW5saW5lTGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCMjQwMDUyM0RGRjEy
ODAwNzk2NDU4IC8qIElubGluZUxpbmVCb3guaCBpbiBIZWFkZXJzICovLApAQCAtMzQwMDUsMTQg
KzM0MDExLDggQEAKIAkJCQlFNDUxQzYzNDIzOTQwNThGMDA5OTMxOTAgLyogTGF5b3V0SW50ZWdy
YXRpb25JbmxpbmVDb250ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjNGQkE5ODI1NTZFMzEz
MDAzNTMwRkQgLyogTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMyMjc3NDI1QTAwQzdCQ0IwIC8qIExheW91dEludGVncmF0
aW9uTGluZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTREMzNGNDEyNTJDNEI4MzAwODM3RDA1IC8q
IExheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEQz
M0Y0NDI1MkM1MEUyMDA4MzdEMDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdh
Y3lQYXRoLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEQzM0Y0NjI1MkM1MEZDMDA4MzdEMDUgLyog
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNEFCQUJERDIzNjA4OEZFMDBGQTQzNDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5
b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDAzQjdBMzI1MUIxMUMxMDAxOUU4MDAgLyogTGF5
b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEE2NjRDQzI1
MjFENEFGMDA3MDgxREMgLyogTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJRTRBNjY0Q0YyNTIxRDRFMjAwNzA4MURDIC8qIExheW91dEludGVncmF0aW9u
UnVuSXRlcmF0b3JMZWdhY3lQYXRoLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEE2NjRDRTI1MjFE
NEM5MDA3MDgxREMgLyogTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaCBp
biBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThEMCAvKiBMYXlvdXRJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZGQTRDMDEyM0YyRkVEOTAwN0U0RUJDIC8qIExh
eW91dExpbmVCcmVha0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxRDcyRjYxNUZFNjk1MzAw
QzRDMDdFIC8qIExheW91dE1pbGVzdG9uZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAwZmM2NTg1OGQzMmY1
MTljNzc2MGFiNWRlODU2ZGExNGZlOGE0ZTYzLi42MmQzMmU3NmEyYzM4OGM2Y2RkYThlNzYxMTQ3
ZmFjMzg1NzlkM2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKQEAgLTI5NDUsNyArMjk0NSw3IEBAIExheW91dFJlY3QgQVhPYmplY3RDYWNo
ZTo6bG9jYWxDYXJldFJlY3RGb3JDaGFyYWN0ZXJPZmZzZXQoUmVuZGVyT2JqZWN0KiYgcmVuZGVy
CiAgICAgaWYgKHJ1bkFuZE9mZnNldC5ydW4pCiAgICAgICAgIHJlbmRlcmVyID0gY29uc3RfY2Fz
dDxSZW5kZXJPYmplY3QqPigmcnVuQW5kT2Zmc2V0LnJ1bi0+cmVuZGVyZXIoKSk7CiAKLSAgICBp
ZiAoaXM8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlcikgJiYgTGF5b3V0SW50ZWdyYXRpb246OnJ1
bkZvcihkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KCpyZW5kZXJlcikpICE9IHJ1bkFuZE9mZnNl
dC5ydW4pCisgICAgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIpICYmIElubGluZUl0
ZXJhdG9yOjpydW5Gb3IoZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVyZXIpKSAhPSBy
dW5BbmRPZmZzZXQucnVuKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAgcmV0dXJu
IGNvbXB1dGVMb2NhbENhcmV0UmVjdCgqcmVuZGVyZXIsIHJ1bkFuZE9mZnNldCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmNwcAppbmRleCBkOWFhMWFmZDVlZGFlOWJiYWJlNTNmOWIwNzI5MjA5NGExYmI1
MDhmLi5iNmNlOTk1NzBhYmU5Y2ZiZTNhYTJiNDk0NTNmOWEwMTdlNzM1NTcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5jcHAKQEAgLTM1LDkgKzM1LDkgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVu
dC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94LmgiCisjaW5jbHVkZSAiSW5saW5lSXRl
cmF0b3JMaW5lLmgiCiAjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zmc2V0LmgiCi0jaW5jbHVkZSAi
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3Jh
dGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCkBAIC02OSwxMSAr
NjksMTEgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIGJvb2wgaGFzSW5s
aW5lUnVuKFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiB7Ci0gICAgaWYgKGlzPFJlbmRlckJveD4o
cmVuZGVyZXIpICYmIExheW91dEludGVncmF0aW9uOjpydW5Gb3IoZG93bmNhc3Q8UmVuZGVyQm94
PihyZW5kZXJlcikpKQorICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSAmJiBJbmxpbmVJ
dGVyYXRvcjo6cnVuRm9yKGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpKSkKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSAmJiBMYXlvdXRJ
bnRlZ3JhdGlvbjo6Zmlyc3RUZXh0UnVuRm9yKGRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVy
KSkpCisgICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSAmJiBJbmxpbmVJdGVyYXRvcjo6
Zmlyc3RUZXh0UnVuRm9yKGRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKSkpCiAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKSAmJiBM
YXlvdXRJbnRlZ3JhdGlvbjo6cnVuRm9yKGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4ocmVuZGVy
ZXIpKSkKKyAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlcikgJiYgSW5saW5lSXRl
cmF0b3I6OnJ1bkZvcihkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTczOSw3ICs3MzksNyBA
QCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxl
IHJ1bGUpIGNvbnN0CiAgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpKSB7CiAg
ICAgICAgICAgICBhdXRvJiB0ZXh0UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVu
ZGVyZXIpOwogCi0gICAgICAgICAgICBhdXRvIGZpcnN0VGV4dFJ1biA9IExheW91dEludGVncmF0
aW9uOjpmaXJzdFRleHRSdW5JblRleHRPcmRlckZvcih0ZXh0UmVuZGVyZXIpOworICAgICAgICAg
ICAgYXV0byBmaXJzdFRleHRSdW4gPSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RUZXh0UnVuSW5UZXh0
T3JkZXJGb3IodGV4dFJlbmRlcmVyKTsKICAgICAgICAgICAgIGlmICghZmlyc3RUZXh0UnVuKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC04NDYsNyArODQ2LDcgQEAgUG9zaXRpb24g
UG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNv
bnN0CiAgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpKSB7CiAgICAgICAgICAg
ICBhdXRvJiB0ZXh0UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpOwog
Ci0gICAgICAgICAgICBhdXRvIGZpcnN0VGV4dFJ1biA9IExheW91dEludGVncmF0aW9uOjpmaXJz
dFRleHRSdW5JblRleHRPcmRlckZvcih0ZXh0UmVuZGVyZXIpOworICAgICAgICAgICAgYXV0byBm
aXJzdFRleHRSdW4gPSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RUZXh0UnVuSW5UZXh0T3JkZXJGb3Io
dGV4dFJlbmRlcmVyKTsKICAgICAgICAgICAgIGlmICghZmlyc3RUZXh0UnVuKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTYwLDcgKzExNjAsNyBAQCBzdGF0aWMgYm9vbCBpc05v
blRleHRMZWFmQ2hpbGQoUmVuZGVyT2JqZWN0JiBvYmplY3QpCiAgICAgcmV0dXJuICFkb3duY2Fz
dDxSZW5kZXJFbGVtZW50PihvYmplY3QpLmZpcnN0Q2hpbGQoKTsKIH0KIAotc3RhdGljIExheW91
dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3Igc2VhcmNoQWhlYWRGb3JCZXR0ZXJNYXRjaChS
ZW5kZXJUZXh0JiByZW5kZXJlcikKK3N0YXRpYyBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJh
dG9yIHNlYXJjaEFoZWFkRm9yQmV0dGVyTWF0Y2goUmVuZGVyVGV4dCYgcmVuZGVyZXIpCiB7CiAg
ICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IHJlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpOwog
ICAgIFJlbmRlck9iamVjdCogbmV4dCA9ICZyZW5kZXJlcjsKQEAgLTExNzIsNyArMTE3Miw3IEBA
IHN0YXRpYyBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yIHNlYXJjaEFoZWFkRm9y
QmV0dGVyTWF0Y2goUmVuZGVyVGV4dCYKICAgICAgICAgaWYgKGlzTm9uVGV4dExlYWZDaGlsZCgq
bmV4dCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICBpZiAoaXM8UmVuZGVyVGV4
dD4oKm5leHQpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBydW4gPSBMYXlvdXRJbnRlZ3JhdGlv
bjo6Zmlyc3RUZXh0UnVuSW5UZXh0T3JkZXJGb3IoZG93bmNhc3Q8UmVuZGVyVGV4dD4oKm5leHQp
KSkKKyAgICAgICAgICAgIGlmIChhdXRvIHJ1biA9IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRS
dW5JblRleHRPcmRlckZvcihkb3duY2FzdDxSZW5kZXJUZXh0PigqbmV4dCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBydW47CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjEwLDE3ICsxMjEwLDE3
IEBAIElubGluZVJ1bkFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KEFmZmlu
aXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
cmV0dXJuIHsgeyB9LCBjYXJldE9mZnNldCB9OwogCi0gICAgTGF5b3V0SW50ZWdyYXRpb246OlJ1
bkl0ZXJhdG9yIHJ1bjsKKyAgICBJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3IgcnVuOwogCiAg
ICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpIHsKICAgICAgICAgYXV0byYgbGluZUJyZWFrUmVuZGVy
ZXIgPSBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KCpyZW5kZXJlcik7CiAgICAgICAgIGlmICgh
Y2FyZXRPZmZzZXQpCi0gICAgICAgICAgICBydW4gPSBMYXlvdXRJbnRlZ3JhdGlvbjo6cnVuRm9y
KGxpbmVCcmVha1JlbmRlcmVyKTsKKyAgICAgICAgICAgIHJ1biA9IElubGluZUl0ZXJhdG9yOjpy
dW5Gb3IobGluZUJyZWFrUmVuZGVyZXIpOwogICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyVGV4dD4o
KnJlbmRlcmVyKSkgewogICAgICAgICBhdXRvJiB0ZXh0UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5k
ZXJUZXh0PigqcmVuZGVyZXIpOwogCi0gICAgICAgIGF1dG8gdGV4dFJ1biA9IExheW91dEludGVn
cmF0aW9uOjpmaXJzdFRleHRSdW5Gb3IodGV4dFJlbmRlcmVyKTsKLSAgICAgICAgTGF5b3V0SW50
ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciBjYW5kaWRhdGU7CisgICAgICAgIGF1dG8gdGV4dFJ1
biA9IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5Gb3IodGV4dFJlbmRlcmVyKTsKKyAgICAg
ICAgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciBjYW5kaWRhdGU7CiAKICAgICAgICAg
Zm9yICg7IHRleHRSdW47ICsrdGV4dFJ1bikgewogICAgICAgICAgICAgdW5zaWduZWQgY2FyZXRN
aW5PZmZzZXQgPSB0ZXh0UnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKTsKQEAgLTEyNzAsNyArMTI3
MCw3IEBAIElubGluZVJ1bkFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KEFm
ZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uCiAgICAgICAgICAgICByZXR1cm4gZXF1aXZh
bGVudC5pbmxpbmVSdW5BbmRPZmZzZXQoQWZmaW5pdHk6OlVwc3RyZWFtLCBwcmltYXJ5RGlyZWN0
aW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXM8UmVuZGVyQm94PigqcmVuZGVyZXIpKSB7
Ci0gICAgICAgICAgICBydW4gPSBMYXlvdXRJbnRlZ3JhdGlvbjo6cnVuRm9yKGRvd25jYXN0PFJl
bmRlckJveD4oKnJlbmRlcmVyKSk7CisgICAgICAgICAgICBydW4gPSBJbmxpbmVJdGVyYXRvcjo6
cnVuRm9yKGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKSk7CiAgICAgICAgICAgICBpZiAo
cnVuICYmIGNhcmV0T2Zmc2V0ID4gcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKSAmJiBjYXJldE9m
ZnNldCA8IHJ1bi0+bWF4aW11bUNhcmV0T2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHsgcnVuLCBjYXJldE9mZnNldCB9OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IGVkYWFjMzY4NTYzNDg3MTgyYTZl
MzI2NGI3NTUwYWZjZjJmNDJkYTAuLjNhNmU0ZWE3NDQwNjJkZmZkNjRhMjZiYzYyZWYyY2Q4NGU2
NzIwZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCkBAIC00NywxMiArNDcsMTIgQEAKICNpbmNsdWRlICJIVE1MTElFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNwYW5FbGVtZW50LmgiCisjaW5j
bHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKICNpbmNsdWRlICJJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kLmgiCiAjaW5jbHVkZSAiSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5oIgogI2luY2x1ZGUg
Ikluc2VydE5vZGVCZWZvcmVDb21tYW5kLmgiCiAjaW5jbHVkZSAiSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yQ29tbWFuZC5oIgogI2luY2x1ZGUgIkluc2VydFRleHRDb21tYW5kLmgiCi0jaW5jbHVk
ZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2luY2x1ZGUgIkxlZ2FjeUlubGlu
ZVRleHRCb3guaCIKICNpbmNsdWRlICJNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5oIgog
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKQEAgLTEwMTYsNyArMTAxNiw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQmIHRleHROb2Rl
LCB1bnNpZ25lZCBzdGFyCiAgICAgICAgIGlmICghdGV4dFJlbmRlcmVyKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGF1dG8gcnVuID0gTGF5b3V0SW50ZWdyYXRpb246OmZpcnN0VGV4
dFJ1bkluVGV4dE9yZGVyRm9yKCp0ZXh0UmVuZGVyZXIpOworICAgICAgICBhdXRvIHJ1biA9IElu
bGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5JblRleHRPcmRlckZvcigqdGV4dFJlbmRlcmVyKTsK
ICAgICAgICAgaWYgKCFydW4pIHsKICAgICAgICAgICAgIHdob2xlVGV4dE5vZGVJc0VtcHR5ID0g
dHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwMjcsNyArMTAyNyw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQmIHRleHROb2Rl
LCB1bnNpZ25lZCBzdGFyCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdW5zaWduZWQg
cmVtb3ZlZCA9IDA7Ci0gICAgICAgIExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3Ig
cHJldmlvdXNSdW47CisgICAgICAgIElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IgcHJl
dmlvdXNSdW47CiAKICAgICAgICAgLy8gVGhpcyBsb29wIHN0cnVjdHVyZSB3b3JrcyB0byBwcm9j
ZXNzIGFsbCBnYXBzIHByZWNlZGluZyBhIGJveCwKICAgICAgICAgLy8gYW5kIGFsc28gd2lsbCBs
b29rIGF0IHRoZSBnYXAgYWZ0ZXIgdGhlIGxhc3QgYm94LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbmxpbmVSdW5BbmRPZmZzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5saW5lUnVuQW5kT2Zmc2V0LmgKaW5kZXggZDM0ZTQ5MjdjYTRlZGEwMmZkMWRiYzBjMjE5
NmM2ZmYwOTg2NWM1OC4uOTVmYTYzNDAwNDM2NGNmZGRkM2Q1YjU3ZmI1MjhjY2ZmNGFmNjJhYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmxpbmVSdW5BbmRPZmZzZXQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lubGluZVJ1bkFuZE9mZnNldC5oCkBAIC0yNSwx
MiArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlv
blJ1bkl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgSW5saW5lUnVuQW5kT2Zmc2V0IHsKLSAgICBMYXlvdXRJ
bnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3IgcnVuIHsgfTsKKyAgICBJbmxpbmVJdGVyYXRvcjo6Qm94
SXRlcmF0b3IgcnVuIHsgfTsKICAgICB1bnNpZ25lZCBvZmZzZXQgeyAwIH07CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcAppbmRleCA0NTUwNTdhZjk3
MWQyZjQ5ZjQwOGYwMzE1MzFmNzNkNTg3NjlmZTg2Li5kNWNkMGUyZDc1NmNjZTNjMDBlYzM5MDIy
YTQ4NDExMjJkYTZjMWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRl
cmVkUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3Np
dGlvbi5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgUmVuZGVyZWRQb3NpdGlvbjo6UmVuZGVyZWRQb3Np
dGlvbigpCiB7CiB9CiAKLVJlbmRlcmVkUG9zaXRpb246OlJlbmRlcmVkUG9zaXRpb24oY29uc3Qg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIHJ1
biwgdW5zaWduZWQgb2Zmc2V0KQorUmVuZGVyZWRQb3NpdGlvbjo6UmVuZGVyZWRQb3NpdGlvbihj
b25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3Ig
cnVuLCB1bnNpZ25lZCBvZmZzZXQpCiAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQogICAgICwg
bV9ydW4ocnVuKQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQpAQCAtOTUsMTQgKzk1LDE0IEBAIFJl
bmRlcmVkUG9zaXRpb246OlJlbmRlcmVkUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9u
LCBBZmZpbml0eSBhZmZpbml0eSkKICAgICAgICAgbV9yZW5kZXJlciA9IHJlbmRlcmVyRnJvbVBv
c2l0aW9uKHBvc2l0aW9uKTsKIH0KIAotTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIFJl
bmRlcmVkUG9zaXRpb246OnByZXZpb3VzTGVhZk9uTGluZSgpIGNvbnN0CitJbmxpbmVJdGVyYXRv
cjo6Qm94SXRlcmF0b3IgUmVuZGVyZWRQb3NpdGlvbjo6cHJldmlvdXNMZWFmT25MaW5lKCkgY29u
c3QKIHsKICAgICBpZiAoIW1fcHJldmlvdXNMZWFmT25MaW5lKQogICAgICAgICBtX3ByZXZpb3Vz
TGVhZk9uTGluZSA9IG1fcnVuLT5wcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CiAg
ICAgcmV0dXJuICptX3ByZXZpb3VzTGVhZk9uTGluZTsKIH0KIAotTGF5b3V0SW50ZWdyYXRpb246
OlJ1bkl0ZXJhdG9yIFJlbmRlcmVkUG9zaXRpb246Om5leHRMZWFmT25MaW5lKCkgY29uc3QKK0lu
bGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBSZW5kZXJlZFBvc2l0aW9uOjpuZXh0TGVhZk9uTGlu
ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX25leHRMZWFmT25MaW5lKQogICAgICAgICBtX25leHRM
ZWFmT25MaW5lID0gbV9ydW4tPm5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaAppbmRleCBiZWVhYzQ5MmY2MzI1OTJm
NTViNmQxZGFkN2QwZTE5YzQxZjdkMzUxLi45MDZlZjA3Y2MxYjAyOWIyNzIyNWI3ZTY4YmY4ZjNi
Yzg5MDkxMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9z
aXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaApA
QCAtMzEsOCArMzEsOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDYXJldFJlY3RDb21w
dXRhdGlvbi5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgiCi0j
aW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgorI2luY2x1ZGUgIklubGlu
ZUl0ZXJhdG9yQm94LmgiCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JMaW5lLmgiCiAjaW5jbHVk
ZSAiVGV4dEFmZmluaXR5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDcgKzUwLDcg
QEAgcHVibGljOgogICAgIGJvb2wgaXNFcXVpdmFsZW50KGNvbnN0IFJlbmRlcmVkUG9zaXRpb24m
KSBjb25zdDsKIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcmVuZGVyZXI7
IH0KLSAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJhdG9yIGxpbmUoKSBjb25zdCB7IHJl
dHVybiBtX3J1biA/IG1fcnVuLT5saW5lKCkgOiBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJh
dG9yKCk7IH0KKyAgICBJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yIGxpbmUoKSBjb25zdCB7
IHJldHVybiBtX3J1biA/IG1fcnVuLT5saW5lKCkgOiBJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJh
dG9yKCk7IH0KIAogICAgIHVuc2lnbmVkIGNoYXIgYmlkaUxldmVsT25MZWZ0KCkgY29uc3Q7CiAg
ICAgdW5zaWduZWQgY2hhciBiaWRpTGV2ZWxPblJpZ2h0KCkgY29uc3Q7CkBAIC03MiwyMSArNzIs
MjEgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5k
ZXJlZFBvc2l0aW9uJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBleHBsaWNpdCBSZW5k
ZXJlZFBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCosIExheW91dEludGVncmF0aW9uOjpSdW5J
dGVyYXRvciwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICBleHBsaWNpdCBSZW5kZXJlZFBvc2l0aW9u
KGNvbnN0IFJlbmRlck9iamVjdCosIElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciwgdW5zaWdu
ZWQgb2Zmc2V0KTsKIAotICAgIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBwcmV2aW91
c0xlYWZPbkxpbmUoKSBjb25zdDsKLSAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3Ig
bmV4dExlYWZPbkxpbmUoKSBjb25zdDsKKyAgICBJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3Ig
cHJldmlvdXNMZWFmT25MaW5lKCkgY29uc3Q7CisgICAgSW5saW5lSXRlcmF0b3I6OkJveEl0ZXJh
dG9yIG5leHRMZWFmT25MaW5lKCkgY29uc3Q7CiAgICAgYm9vbCBhdExlZnRtb3N0T2Zmc2V0SW5C
b3goKSBjb25zdCB7IHJldHVybiBtX3J1biAmJiBtX29mZnNldCA9PSBtX3J1bi0+bGVmdG1vc3RD
YXJldE9mZnNldCgpOyB9CiAgICAgYm9vbCBhdFJpZ2h0bW9zdE9mZnNldEluQm94KCkgY29uc3Qg
eyByZXR1cm4gbV9ydW4gJiYgbV9vZmZzZXQgPT0gbV9ydW4tPnJpZ2h0bW9zdENhcmV0T2Zmc2V0
KCk7IH0KICAgICBib29sIGF0TGVmdEJvdW5kYXJ5T2ZCaWRpUnVuKFNob3VsZE1hdGNoQmlkaUxl
dmVsLCB1bnNpZ25lZCBjaGFyIGJpZGlMZXZlbE9mUnVuKSBjb25zdDsKICAgICBib29sIGF0Umln
aHRCb3VuZGFyeU9mQmlkaVJ1bihTaG91bGRNYXRjaEJpZGlMZXZlbCwgdW5zaWduZWQgY2hhciBi
aWRpTGV2ZWxPZlJ1bikgY29uc3Q7CiAKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIG1fcmVuZGVy
ZXIgeyBudWxscHRyIH07Ci0gICAgTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIG1fcnVu
OworICAgIElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBtX3J1bjsKICAgICB1bnNpZ25lZCBt
X29mZnNldCB7IDAgfTsKIAotICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxMYXlvdXRJbnRlZ3Jh
dGlvbjo6UnVuSXRlcmF0b3I+IG1fcHJldmlvdXNMZWFmT25MaW5lOwotICAgIG11dGFibGUgc3Rk
OjpvcHRpb25hbDxMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3I+IG1fbmV4dExlYWZPbkxp
bmU7CisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRv
cj4gbV9wcmV2aW91c0xlYWZPbkxpbmU7CisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPElubGlu
ZUl0ZXJhdG9yOjpCb3hJdGVyYXRvcj4gbV9uZXh0TGVhZk9uTGluZTsKIH07CiAKIGJvb2wgcmVu
ZGVyT2JqZWN0Q29udGFpbnNQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBQb3Np
dGlvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDQyMmMx
ZjllMjYzMmFmMjhhNjhmNjU2MDU3YWNkYWUwMmEyMzExMGYuLmRmZDZjYjViMTVlNTFkZmViZDkw
NzQ0YjM2MjhiOTBjYmJlNjQ1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAKQEAgLTU4MCw3ICs1ODAsNyBAQCBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxlVGV4dE5v
ZGUoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBtX3RleHRSdW4gPSBMYXlv
dXRJbnRlZ3JhdGlvbjo6Zmlyc3RUZXh0UnVuSW5UZXh0T3JkZXJGb3IocmVuZGVyZXIpOworICAg
IG1fdGV4dFJ1biA9IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5JblRleHRPcmRlckZvcihy
ZW5kZXJlcik7CiAKICAgICBib29sIHNob3VsZEhhbmRsZUZpcnN0TGV0dGVyID0gIW1faGFuZGxl
ZEZpcnN0TGV0dGVyICYmIGlzPFJlbmRlclRleHRGcmFnbWVudD4ocmVuZGVyZXIpICYmICFtX29m
ZnNldDsKICAgICBpZiAoc2hvdWxkSGFuZGxlRmlyc3RMZXR0ZXIpCkBAIC02MDcsNyArNjA3LDcg
QEAgdm9pZCBUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRSdW4oKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYXV0byBmaXJzdFRleHRSdW4gPSBMYXlvdXRJbnRlZ3JhdGlvbjo6Zmlyc3RU
ZXh0UnVuSW5UZXh0T3JkZXJGb3IocmVuZGVyZXIpOworICAgIGF1dG8gZmlyc3RUZXh0UnVuID0g
SW5saW5lSXRlcmF0b3I6OmZpcnN0VGV4dFJ1bkluVGV4dE9yZGVyRm9yKHJlbmRlcmVyKTsKIAog
ICAgIFN0cmluZyByZW5kZXJlclRleHQgPSByZW5kZXJlci50ZXh0KCk7CiAgICAgdW5zaWduZWQg
c3RhcnQgPSBtX29mZnNldDsKQEAgLTcwMSw3ICs3MDEsNyBAQCB2b2lkIFRleHRJdGVyYXRvcjo6
aGFuZGxlVGV4dE5vZGVGaXJzdExldHRlcihSZW5kZXJUZXh0RnJhZ21lbnQmIHJlbmRlcmVyKQog
ICAgICAgICBpZiAoYXV0byogZmlyc3RMZXR0ZXJUZXh0ID0gZmlyc3RSZW5kZXJUZXh0SW5GaXJz
dExldHRlcihmaXJzdExldHRlcikpIHsKICAgICAgICAgICAgIG1faGFuZGxlZEZpcnN0TGV0dGVy
ID0gdHJ1ZTsKICAgICAgICAgICAgIG1fcmVtYWluaW5nVGV4dFJ1biA9IG1fdGV4dFJ1bjsKLSAg
ICAgICAgICAgIG1fdGV4dFJ1biA9IExheW91dEludGVncmF0aW9uOjpmaXJzdFRleHRSdW5JblRl
eHRPcmRlckZvcigqZmlyc3RMZXR0ZXJUZXh0KTsKKyAgICAgICAgICAgIG1fdGV4dFJ1biA9IElu
bGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5JblRleHRPcmRlckZvcigqZmlyc3RMZXR0ZXJUZXh0
KTsKICAgICAgICAgICAgIG1fZmlyc3RMZXR0ZXJUZXh0ID0gZmlyc3RMZXR0ZXJUZXh0OwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRl
cmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggYzcx
NjIyNWNmMGQyMDhhZWJlOGRhOTYwNDUzZDcxZTEyZDg4N2UxNy4uM2ZjMjdhMDk3ZDM5YWM4N2Fi
NTM5NWIxMmJhYjM0NmMxZDc3YzFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJDaGFyYWN0ZXJSYW5nZS5oIgogI2lu
Y2x1ZGUgIkZpbmRPcHRpb25zLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvci5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94LmgiCiAjaW5jbHVkZSAiU2ltcGxl
UmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3JCZWhhdmlvci5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KQEAgLTE0OSwxMCArMTQ5LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyBVc2Vk
IHdoZW4gdGhlcmUgaXMgc3RpbGwgc29tZSBwZW5kaW5nIHRleHQgZnJvbSB0aGUgY3VycmVudCBu
b2RlOyB3aGVuIHRoZXNlIGFyZSBmYWxzZSBhbmQgbnVsbCwgd2UgZ28gYmFjayB0byBub3JtYWwg
aXRlcmF0aW5nLgogICAgIE5vZGUqIG1fbm9kZUZvckFkZGl0aW9uYWxOZXdsaW5lIHsgbnVsbHB0
ciB9OwotICAgIExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3IgbV90ZXh0UnVuOwor
ICAgIElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IgbV90ZXh0UnVuOwogCiAgICAgLy8g
VXNlZCB3aGVuIGl0ZXJhdGluZyBvdmVyIDpmaXJzdC1sZXR0ZXIgdGV4dCB0byBzYXZlIHBvaW50
ZXIgdG8gcmVtYWluaW5nIHRleHQgYm94LgotICAgIExheW91dEludGVncmF0aW9uOjpUZXh0UnVu
SXRlcmF0b3IgbV9yZW1haW5pbmdUZXh0UnVuOworICAgIElubGluZUl0ZXJhdG9yOjpUZXh0Qm94
SXRlcmF0b3IgbV9yZW1haW5pbmdUZXh0UnVuOwogCiAgICAgLy8gVXNlZCB0byBwb2ludCB0byBS
ZW5kZXJUZXh0IG9iamVjdCBmb3IgOmZpcnN0LWxldHRlci4KICAgICBSZW5kZXJUZXh0KiBtX2Zp
cnN0TGV0dGVyVGV4dCB7IG51bGxwdHIgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVBvc2l0aW9uLmNwcAppbmRleCBlN2E1YWJmYjViNzM1OTY2NmI0YzYzMzcxMTM1Yzk0ZmQyOWZj
OWEyLi4yNGRhNTViM2I0MTYxZTkzZWVmZTUyMjZlMzdlNjg5MTAyODVmYjA5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCkBAIC0zNSw5ICszNSw5IEBACiAj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJveC5oIgorI2lu
Y2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZS5oIgogI2luY2x1ZGUgIklubGluZVJ1bkFuZE9mZnNl
dC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IGI3NGQ3M2JmNTc0M2RhYTVjNDQz
NTZjZGJjMzM3YjJkYTEyNGQzOGIuLjdlOTNmMDdhOWM1Y2UyYTUxNjkzYWE3NDI2MzcwNWU1ZDgx
OGE3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTMxLDkg
KzMxLDkgQEAKICNpbmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJv
eC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZS5oIgogI2luY2x1ZGUgIklubGluZVJ1
bkFuZE9mZnNldC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2luY2x1ZGUgIk5v
ZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2Nr
Rmxvdy5oIgpAQCAtMTI0LDEyICsxMjQsMTIgQEAgc3RhdGljIFBvc2l0aW9uIG5leHRMaW5lQ2Fu
ZGlkYXRlUG9zaXRpb24oTm9kZSogbm9kZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXMKICAg
ICByZXR1cm4gUG9zaXRpb24oKTsKIH0KIAotc3RhdGljIGJvb2wgaXNUZXh0T3JMaW5lQnJlYWtS
dW4oTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIHJ1bikKK3N0YXRpYyBib29sIGlzVGV4
dE9yTGluZUJyZWFrUnVuKElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBydW4pCiB7CiAgICAg
cmV0dXJuIHJ1biAmJiAocnVuLT5pc1RleHQoKSB8fCBydW4tPnJlbmRlcmVyKCkuaXNCUigpKTsK
IH0KIAotc3RhdGljIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBwcmV2aW91c1RleHRP
ckxpbmVCcmVha1J1bihMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3IgcnVuKQorc3RhdGlj
IElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBwcmV2aW91c1RleHRPckxpbmVCcmVha1J1bihJ
bmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3IgcnVuKQogewogICAgIHdoaWxlIChydW4pIHsKICAg
ICAgICAgcnVuLnRyYXZlcnNlUHJldmlvdXNPbkxpbmVJbkxvZ2ljYWxPcmRlcigpOwpAQCAtMTM5
LDcgKzEzOSw3IEBAIHN0YXRpYyBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3IgcHJldmlv
dXNUZXh0T3JMaW5lQnJlYWtSdW4oTGF5b3V0SW50ZWdyYXRpCiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotc3RhdGljIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBuZXh0VGV4dE9yTGluZUJy
ZWFrUnVuKExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBydW4pCitzdGF0aWMgSW5saW5l
SXRlcmF0b3I6OkJveEl0ZXJhdG9yIG5leHRUZXh0T3JMaW5lQnJlYWtSdW4oSW5saW5lSXRlcmF0
b3I6OkJveEl0ZXJhdG9yIHJ1bikKIHsKICAgICB3aGlsZSAocnVuKSB7CiAgICAgICAgIHJ1bi50
cmF2ZXJzZU5leHRPbkxpbmVJbkxvZ2ljYWxPcmRlcigpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHN0
YXRpYyBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3IgbmV4dFRleHRPckxpbmVCcmVha1J1
bihMYXlvdXRJbnRlZ3JhdGlvbjo6CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIExheW91
dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBzdGFydFRleHRPckxpbmVCcmVha1J1bihMYXlvdXRJ
bnRlZ3JhdGlvbjo6TGluZUl0ZXJhdG9yIGxpbmUpCitzdGF0aWMgSW5saW5lSXRlcmF0b3I6OkJv
eEl0ZXJhdG9yIHN0YXJ0VGV4dE9yTGluZUJyZWFrUnVuKElubGluZUl0ZXJhdG9yOjpMaW5lSXRl
cmF0b3IgbGluZSkKIHsKICAgICBhdXRvIHJ1biA9IGxpbmUtPmxvZ2ljYWxTdGFydFJ1bigpOwog
ICAgIGlmIChpc1RleHRPckxpbmVCcmVha1J1bihydW4pKQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0
YXRpYyBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3Igc3RhcnRUZXh0T3JMaW5lQnJlYWtS
dW4oTGF5b3V0SW50ZWdyYXRpb246CiAgICAgcmV0dXJuIG5leHRUZXh0T3JMaW5lQnJlYWtSdW4o
cnVuKTsKIH0KIAotc3RhdGljIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBlbmRUZXh0
T3JMaW5lQnJlYWtSdW4oTGF5b3V0SW50ZWdyYXRpb246OkxpbmVJdGVyYXRvciBsaW5lKQorc3Rh
dGljIElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBlbmRUZXh0T3JMaW5lQnJlYWtSdW4oSW5s
aW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvciBsaW5lKQogewogICAgIGF1dG8gcnVuID0gbGluZS0+
bG9naWNhbEVuZFJ1bigpOwogICAgIGlmIChpc1RleHRPckxpbmVCcmVha1J1bihydW4pKQpAQCAt
MTY1LDcgKzE2NSw3IEBAIHN0YXRpYyBMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3IgZW5k
VGV4dE9yTGluZUJyZWFrUnVuKExheW91dEludGVncmF0aW9uOjpMCiAgICAgcmV0dXJuIHByZXZp
b3VzVGV4dE9yTGluZUJyZWFrUnVuKHJ1bik7CiB9CiAKLXN0YXRpYyBjb25zdCBMYXlvdXRJbnRl
Z3JhdGlvbjo6UnVuSXRlcmF0b3IgbG9naWNhbGx5UHJldmlvdXNSdW4oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBz
dGFydFJ1biwgYm9vbCYgcHJldmlvdXNCb3hJbkRpZmZlcmVudExpbmUpCitzdGF0aWMgY29uc3Qg
SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yIGxvZ2ljYWxseVByZXZpb3VzUnVuKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0
b3Igc3RhcnRSdW4sIGJvb2wmIHByZXZpb3VzQm94SW5EaWZmZXJlbnRMaW5lKQogewogICAgIGlm
IChhdXRvIHByZXZpb3VzUnVuID0gcHJldmlvdXNUZXh0T3JMaW5lQnJlYWtSdW4oc3RhcnRSdW4p
KQogICAgICAgICByZXR1cm4gcHJldmlvdXNSdW47CkBAIC0yMDMsNyArMjAzLDcgQEAgc3RhdGlj
IGNvbnN0IExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBsb2dpY2FsbHlQcmV2aW91c1J1
bihjb25zdCBWaXNpYmxlUG8KIH0KIAogCi1zdGF0aWMgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246
OlJ1bkl0ZXJhdG9yIGxvZ2ljYWxseU5leHRSdW4oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNp
YmxlUG9zaXRpb24sIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciBzdGFydFJ1biwgYm9v
bCYgbmV4dEJveEluRGlmZmVyZW50TGluZSkKK3N0YXRpYyBjb25zdCBJbmxpbmVJdGVyYXRvcjo6
Qm94SXRlcmF0b3IgbG9naWNhbGx5TmV4dFJ1bihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2li
bGVQb3NpdGlvbiwgSW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yIHN0YXJ0UnVuLCBib29sJiBu
ZXh0Qm94SW5EaWZmZXJlbnRMaW5lKQogewogICAgIGlmIChhdXRvIG5leHRSdW4gPSBuZXh0VGV4
dE9yTGluZUJyZWFrUnVuKHN0YXJ0UnVuKSkKICAgICAgICAgcmV0dXJuIG5leHRSdW47CkBAIC0y
NDAsNyArMjQwLDcgQEAgc3RhdGljIGNvbnN0IExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRv
ciBsb2dpY2FsbHlOZXh0UnVuKGNvbnN0IFZpc2libGVQb3NpdGkKICAgICByZXR1cm4geyB9Owog
fQogCi1zdGF0aWMgVUJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWluT2Zmc2V0
Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIExheW91dElu
dGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3IgdGV4dFJ1biwKK3N0YXRpYyBVQnJlYWtJdGVyYXRv
ciogd29yZEJyZWFrSXRlcmF0b3JGb3JNaW5PZmZzZXRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHZpc2libGVQb3NpdGlvbiwgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciB0
ZXh0UnVuLAogICAgIHVuc2lnbmVkJiBwcmV2aW91c1J1bkxlbmd0aCwgYm9vbCYgcHJldmlvdXNS
dW5JbkRpZmZlcmVudExpbmUsIFZlY3RvcjxVQ2hhciwgMTAyND4mIHN0cmluZykKIHsKICAgICBw
cmV2aW91c1J1bkluRGlmZmVyZW50TGluZSA9IGZhbHNlOwpAQCAtMjU1LDcgKzI1NSw3IEBAIHN0
YXRpYyBVQnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3JGb3JNaW5PZmZzZXRCb3VuZGFy
eShjb25zdCBWaXNpYmxlUG9zaXRpCiAgICAgc3RyaW5nLmNsZWFyKCk7CiAKICAgICBpZiAocHJl
dmlvdXNSdW4pIHsKLSAgICAgICAgYXV0byYgcHJldmlvdXNUZXh0UnVuID0gZG93bmNhc3Q8TGF5
b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvcj4ocHJldmlvdXNSdW4pOworICAgICAgICBh
dXRvJiBwcmV2aW91c1RleHRSdW4gPSBkb3duY2FzdDxJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0
ZXJhdG9yPihwcmV2aW91c1J1bik7CiAgICAgICAgIHByZXZpb3VzUnVuTGVuZ3RoID0gcHJldmlv
dXNUZXh0UnVuLT5sZW5ndGgoKTsKICAgICAgICAgYXBwZW5kKHN0cmluZywgcHJldmlvdXNUZXh0
UnVuLT50ZXh0KCkpOwogICAgIH0KQEAgLTI2NCw3ICsyNjQsNyBAQCBzdGF0aWMgVUJyZWFrSXRl
cmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWluT2Zmc2V0Qm91bmRhcnkoY29uc3QgVmlzaWJs
ZVBvc2l0aQogICAgIHJldHVybiB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KHN0cmluZy5k
YXRhKCksIHN0cmluZy5zaXplKCkpKTsKIH0KIAotc3RhdGljIFVCcmVha0l0ZXJhdG9yKiB3b3Jk
QnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
dmlzaWJsZVBvc2l0aW9uLCBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yIHRleHRS
dW4sCitzdGF0aWMgVUJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0
Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIElubGluZUl0
ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IgdGV4dFJ1biwKICAgICBib29sJiBuZXh0UnVuSW5EaWZm
ZXJlbnRMaW5lLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiBzdHJpbmcpCiB7CiAgICAgbmV4dFJ1bklu
RGlmZmVyZW50TGluZSA9IGZhbHNlOwpAQCAtMjgwLDcgKzI4MCw3IEBAIHN0YXRpYyBVQnJlYWtJ
dGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3JGb3JNYXhPZmZzZXRCb3VuZGFyeShjb25zdCBWaXNp
YmxlUG9zaXRpCiAgICAgYXBwZW5kKHN0cmluZywgdGV4dFJ1bi0+dGV4dCgpKTsKIAogICAgIGlm
IChuZXh0UnVuKSB7Ci0gICAgICAgIGF1dG8mIG5leHRUZXh0UnVuID0gZG93bmNhc3Q8TGF5b3V0
SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvcj4obmV4dFJ1bik7CisgICAgICAgIGF1dG8mIG5l
eHRUZXh0UnVuID0gZG93bmNhc3Q8SW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcj4obmV4
dFJ1bik7CiAgICAgICAgIGFwcGVuZChzdHJpbmcsIG5leHRUZXh0UnVuLT50ZXh0KCkpOwogICAg
IH0KIApAQCAtMzE1LDcgKzMxNSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzdWFsV29y
ZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uCiAgICAgdmlz
aWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0
aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKSk7Ci0gICAgTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIHByZXZpb3VzbHlW
aXNpdGVkUnVuOworICAgIElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBwcmV2aW91c2x5Vmlz
aXRlZFJ1bjsKICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudCA9IHZpc2libGVQb3NpdGlvbjsK
ICAgICBzdGQ6Om9wdGlvbmFsPFZpc2libGVQb3NpdGlvbj4gcHJldmlvdXNQb3NpdGlvbjsKICAg
ICBVQnJlYWtJdGVyYXRvciogaXRlciA9IG51bGxwdHI7CkBAIC0zNDAsNyArMzQwLDcgQEAgc3Rh
dGljIFZpc2libGVQb3NpdGlvbiB2aXN1YWxXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAK
LSAgICAgICAgYXV0byYgdGV4dFJ1biA9IGRvd25jYXN0PExheW91dEludGVncmF0aW9uOjpUZXh0
UnVuSXRlcmF0b3I+KHJ1bik7CisgICAgICAgIGF1dG8mIHRleHRSdW4gPSBkb3duY2FzdDxJbmxp
bmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yPihydW4pOwogICAgICAgICB1bnNpZ25lZCBwcmV2
aW91c1J1bkxlbmd0aCA9IDA7CiAgICAgICAgIGJvb2wgcHJldmlvdXNSdW5JbkRpZmZlcmVudExp
bmUgPSBmYWxzZTsKICAgICAgICAgYm9vbCBuZXh0UnVuSW5EaWZmZXJlbnRMaW5lID0gZmFsc2U7
CkBAIC03NjQsNyArNzY0LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9u
Rm9yTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIExpbmVFbmRwb2kKICAgICAgICAgICAg
IHN0YXJ0UnVuLnRyYXZlcnNlTmV4dE9uTGluZSgpOwogICAgIH0KIAotICAgIHJldHVybiBpczxU
ZXh0Pigqc3RhcnROb2RlKSA/IFBvc2l0aW9uKGRvd25jYXN0PFRleHQ+KHN0YXJ0Tm9kZSksIGRv
d25jYXN0PExheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1bj4oKnN0YXJ0UnVuKS5zdGFydCgp
KQorICAgIHJldHVybiBpczxUZXh0Pigqc3RhcnROb2RlKSA/IFBvc2l0aW9uKGRvd25jYXN0PFRl
eHQ+KHN0YXJ0Tm9kZSksIGRvd25jYXN0PElubGluZUl0ZXJhdG9yOjpUZXh0Qm94Pigqc3RhcnRS
dW4pLnN0YXJ0KCkpCiAgICAgICAgIDogcG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0Tm9kZSk7CiB9
CiAKQEAgLTgzNyw4ICs4MzcsOCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9u
Rm9yTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIExpbmVFbmRwb2ludAogICAgIFBvc2l0
aW9uIHBvczsKICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4oKmVuZE5vZGUpKQogICAgICAgICBw
b3MgPSBwb3NpdGlvbkJlZm9yZU5vZGUoZW5kTm9kZSk7Ci0gICAgZWxzZSBpZiAoaXM8TGF5b3V0
SW50ZWdyYXRpb246OlBhdGhUZXh0UnVuPigqZW5kUnVuKSAmJiBpczxUZXh0PigqZW5kTm9kZSkp
IHsKLSAgICAgICAgYXV0byYgZW5kVGV4dFJ1biA9IGRvd25jYXN0PExheW91dEludGVncmF0aW9u
OjpQYXRoVGV4dFJ1bj4oKmVuZFJ1bik7CisgICAgZWxzZSBpZiAoaXM8SW5saW5lSXRlcmF0b3I6
OlRleHRCb3g+KCplbmRSdW4pICYmIGlzPFRleHQ+KCplbmROb2RlKSkgeworICAgICAgICBhdXRv
JiBlbmRUZXh0UnVuID0gZG93bmNhc3Q8SW5saW5lSXRlcmF0b3I6OlRleHRCb3g+KCplbmRSdW4p
OwogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kVGV4dFJ1bi5zdGFydCgpOwogICAgICAgICBp
ZiAoIWVuZFRleHRSdW4uaXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAgIGVuZE9mZnNldCArPSBl
bmRUZXh0UnVuLmxlbmd0aCgpOwpAQCAtOTI5LDcgKzkyOSw3IEBAIGJvb2wgaXNMb2dpY2FsRW5k
T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcCkKICAgICByZXR1cm4gcC5pc05vdE51bGwo
KSAmJiBwID09IGxvZ2ljYWxFbmRPZkxpbmUocCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSW50UG9p
bnQgYWJzb2x1dGVMaW5lRGlyZWN0aW9uUG9pbnRUb0xvY2FsUG9pbnRJbkJsb2NrKExheW91dElu
dGVncmF0aW9uOjpMaW5lSXRlcmF0b3ImIGxpbmUsIGludCBsaW5lRGlyZWN0aW9uUG9pbnQpCitz
dGF0aWMgaW5saW5lIEludFBvaW50IGFic29sdXRlTGluZURpcmVjdGlvblBvaW50VG9Mb2NhbFBv
aW50SW5CbG9jayhJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yJiBsaW5lLCBpbnQgbGluZURp
cmVjdGlvblBvaW50KQogewogICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9IGxpbmUtPmNvbnRh
aW5pbmdCbG9jaygpOwogICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVCbG9ja1BvaW50ID0gY29udGFp
bmluZ0Jsb2NrLmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpIC0gdG9GbG9hdFNpemUoY29u
dGFpbmluZ0Jsb2NrLnNjcm9sbFBvc2l0aW9uKCkpOwpAQCAtOTYxLDcgKzk2MSw3IEBAIFZpc2li
bGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZp
c2libGVQb3NpdGlvbiwgaW50CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbigpOwogCi0gICAgTGF5b3V0SW50ZWdyYXRpb246OkxpbmVJdGVyYXRvciBs
aW5lOworICAgIElubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3IgbGluZTsKICAgICBpZiAoYXV0
byBydW4gPSB2aXNpYmxlUG9zaXRpb24uaW5saW5lUnVuQW5kT2Zmc2V0KCkucnVuKSB7CiAgICAg
ICAgIGxpbmUgPSBydW4tPmxpbmUoKS0+cHJldmlvdXMoKTsKICAgICAgICAgLy8gV2Ugd2FudCB0
byBza2lwIHplcm8gaGVpZ2h0IGJveGVzLgpAQCAtMTAxMSw3ICsxMDExLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9z
aXRpb24sIGludCBsaW4KICAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAgIExheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0
b3IgbGluZTsKKyAgICBJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yIGxpbmU7CiAgICAgaWYg
KGF1dG8gcnVuID0gdmlzaWJsZVBvc2l0aW9uLmlubGluZVJ1bkFuZE9mZnNldCgpLnJ1bikgewog
ICAgICAgICBsaW5lID0gcnVuLT5saW5lKCktPm5leHQoKTsKICAgICAgICAgLy8gV2Ugd2FudCB0
byBza2lwIHplcm8gaGVpZ2h0IGJveGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCA0ZDQ5OTcyNGEzODlkOWU0YmI0NGFh
YmUxNDczMjVlNTk3Mzg1ZmUyLi45OWE0YmIyZWY3YTYxNDY3NGFjZjRmNzlmYTdjM2Q3Y2ZhZjk5
NjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcApAQCAtNDAsOSArNDAsOSBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgi
CisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRv
ckxpbmUuaCIKICNpbmNsdWRlICJMYXlvdXREaXNhbGxvd2VkU2NvcGUuaCIKLSNpbmNsdWRlICJM
YXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0
aW9uUnVuSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTcwMSw3ICs3MDEsNyBAQCBTdHJpbmcg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbHVlV2l0aEhhcmRMaW5lQnJlYWtzKCkgY29u
c3QKIAogICAgIE5vZGUqIHNvZnRMaW5lQnJlYWtOb2RlID0gbnVsbHB0cjsKICAgICB1bnNpZ25l
ZCBzb2Z0TGluZUJyZWFrT2Zmc2V0ID0gMDsKLSAgICBhdXRvIGN1cnJlbnRMaW5lID0gTGF5b3V0
SW50ZWdyYXRpb246OmZpcnN0TGluZUZvcigqcmVuZGVyZXIpOworICAgIGF1dG8gY3VycmVudExp
bmUgPSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RMaW5lRm9yKCpyZW5kZXJlcik7CiAgICAgaWYgKCFj
dXJyZW50TGluZSkKICAgICAgICAgcmV0dXJuIHZhbHVlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3guY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmEyYTM5ZDMxNDE2N2U4YWYzNjhkODc1ZGRkYjU1ODljNzExNmE4NDgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0
b3JCb3guY3BwCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94LmgiCisKKworI2luY2x1ZGUgIklubGlu
ZUl0ZXJhdG9yTGluZS5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxheW91dC5o
IgorI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlckNvbWJpbmVU
ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCisjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgSW5saW5lSXRlcmF0b3Igewor
CitCb3hJdGVyYXRvcjo6Qm94SXRlcmF0b3IoQm94OjpQYXRoVmFyaWFudCYmIHBhdGhWYXJpYW50
KQorICAgIDogbV9ydW4oV1RGTW92ZShwYXRoVmFyaWFudCkpCit7Cit9CisKK0JveEl0ZXJhdG9y
OjpCb3hJdGVyYXRvcihjb25zdCBCb3gmIHJ1bikKKyAgICA6IG1fcnVuKHJ1bikKK3sKK30KKwor
Ym9vbCBCb3hJdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBCb3hJdGVyYXRvciYgb3RoZXIpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcnVuLm1fcGF0aFZhcmlhbnQgPT0gb3RoZXIubV9ydW4ubV9w
YXRoVmFyaWFudDsKK30KKworYm9vbCBCb3hJdGVyYXRvcjo6YXRFbmQoKSBjb25zdAoreworICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcnVuLm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKKyAgICAgICAgcmV0dXJuIHBhdGguYXRFbmQoKTsKKyAgICB9KTsKK30KKworQm94SXRlcmF0
b3IgQm94OjpuZXh0T25MaW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQm94SXRlcmF0b3IoKnRo
aXMpLnRyYXZlcnNlTmV4dE9uTGluZSgpOworfQorCitCb3hJdGVyYXRvciBCb3g6OnByZXZpb3Vz
T25MaW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQm94SXRlcmF0b3IoKnRoaXMpLnRyYXZlcnNl
UHJldmlvdXNPbkxpbmUoKTsKK30KKworQm94SXRlcmF0b3IgQm94OjpuZXh0T25MaW5lSWdub3Jp
bmdMaW5lQnJlYWsoKSBjb25zdAoreworICAgIHJldHVybiBCb3hJdGVyYXRvcigqdGhpcykudHJh
dmVyc2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKK30KKworQm94SXRlcmF0b3IgQm94
OjpwcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Qm94SXRlcmF0b3IoKnRoaXMpLnRyYXZlcnNlUHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVh
aygpOworfQorCitMaW5lSXRlcmF0b3IgQm94OjpsaW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBCb3hJdGVyYXRvckxlZ2FjeVBh
dGgmIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIExpbmVJdGVyYXRvcihMaW5lSXRlcmF0b3JMZWdh
Y3lQYXRoKCZwYXRoLnJvb3RJbmxpbmVCb3goKSkpOworICAgIH0KKyNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAgICAsIFtdKGNvbnN0IEJveEl0ZXJhdG9yTW9kZXJuUGF0
aCYgcGF0aCkgeworICAgICAgICByZXR1cm4gTGluZUl0ZXJhdG9yKExpbmVJdGVyYXRvck1vZGVy
blBhdGgocGF0aC5pbmxpbmVDb250ZW50KCksIHBhdGguYm94KCkubGluZUluZGV4KCkpKTsKKyAg
ICB9CisjZW5kaWYKKyAgICApOworfQorCitjb25zdCBSZW5kZXJTdHlsZSYgQm94OjpzdHlsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGxpbmUoKS0+aXNGaXJzdCgpID8gcmVuZGVyZXIoKS5maXJz
dExpbmVTdHlsZSgpIDogcmVuZGVyZXIoKS5zdHlsZSgpOworfQorCitUZXh0Qm94SXRlcmF0b3Ig
VGV4dEJveDo6bmV4dFRleHRSdW4oKSBjb25zdAoreworICAgIHJldHVybiBUZXh0Qm94SXRlcmF0
b3IoKnRoaXMpLnRyYXZlcnNlTmV4dFRleHRSdW4oKTsKK30KKworVGV4dEJveEl0ZXJhdG9yIFRl
eHRCb3g6Om5leHRUZXh0UnVuSW5UZXh0T3JkZXIoKSBjb25zdAoreworICAgIHJldHVybiBUZXh0
Qm94SXRlcmF0b3IoKnRoaXMpLnRyYXZlcnNlTmV4dFRleHRSdW5JblRleHRPcmRlcigpOworfQor
CitMYXlvdXRSZWN0IFRleHRCb3g6OnNlbGVjdGlvblJlY3QodW5zaWduZWQgcmFuZ2VTdGFydCwg
dW5zaWduZWQgcmFuZ2VFbmQpIGNvbnN0Cit7CisgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFt
cGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKHJhbmdlU3RhcnQsIHJhbmdlRW5kKTsK
KworICAgIGlmIChjbGFtcGVkU3RhcnQgPj0gY2xhbXBlZEVuZCAmJiAhKHJhbmdlU3RhcnQgPT0g
cmFuZ2VFbmQgJiYgcmFuZ2VTdGFydCA+PSBzdGFydCgpICYmIHJhbmdlU3RhcnQgPD0gZW5kKCkp
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBzZWxlY3Rpb25Ub3AgPSBsaW5lKCkt
PnNlbGVjdGlvblRvcCgpOworICAgIGF1dG8gc2VsZWN0aW9uSGVpZ2h0ID0gbGluZSgpLT5zZWxl
Y3Rpb25IZWlnaHQoKTsKKworICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCB7IGxvZ2ljYWxM
ZWZ0KCksIHNlbGVjdGlvblRvcCwgbG9naWNhbFdpZHRoKCksIHNlbGVjdGlvbkhlaWdodCB9Owor
CisgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigpOworICAgIGlmIChjbGFtcGVk
U3RhcnQgfHwgY2xhbXBlZEVuZCAhPSB0ZXh0UnVuLmxlbmd0aCgpKQorICAgICAgICBmb250Q2Fz
Y2FkZSgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3Qs
IGNsYW1wZWRTdGFydCwgY2xhbXBlZEVuZCk7CisKKyAgICByZXR1cm4gc25hcHBlZFNlbGVjdGlv
blJlY3Qoc2VsZWN0aW9uUmVjdCwgbG9naWNhbFJpZ2h0KCksIHNlbGVjdGlvblRvcCwgc2VsZWN0
aW9uSGVpZ2h0LCBpc0hvcml6b250YWwoKSk7Cit9CisKK2Jvb2wgVGV4dEJveDo6aXNDb21iaW5l
ZFRleHQoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsK
KyAgICByZXR1cm4gaXM8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKSAmJiBkb3duY2FzdDxS
ZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIpLmlzQ29tYmluZWQoKTsKK30KKworY29uc3QgRm9u
dENhc2NhZGUmIFRleHRCb3g6OmZvbnRDYXNjYWRlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNDb21i
aW5lZFRleHQoKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0Pihy
ZW5kZXJlcigpKS50ZXh0Q29tYmluZUZvbnQoKTsKKworICAgIHJldHVybiBzdHlsZSgpLmZvbnRD
YXNjYWRlKCk7Cit9CisKK1JlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgQm94OjpzZWxlY3Rp
b25TdGF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzVGV4dCgpKSB7CisgICAgICAgIGF1dG8mIHRl
eHQgPSBkb3duY2FzdDxUZXh0Qm94PigqdGhpcyk7CisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0g
dGV4dC5yZW5kZXJlcigpOworICAgICAgICByZXR1cm4gcmVuZGVyZXIudmlldygpLnNlbGVjdGlv
bigpLmhpZ2hsaWdodFN0YXRlRm9yVGV4dEJveChyZW5kZXJlciwgdGV4dC5zZWxlY3RhYmxlUmFu
Z2UoKSk7CisgICAgfQorICAgIHJldHVybiByZW5kZXJlcigpLnNlbGVjdGlvblN0YXRlKCk7Cit9
CisKK1RleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKEJveDo6UGF0aFZhcmlhbnQmJiBw
YXRoVmFyaWFudCkKKyAgICA6IEJveEl0ZXJhdG9yKFdURk1vdmUocGF0aFZhcmlhbnQpKQorewor
fQorCitUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcihjb25zdCBCb3gmIHJ1bikKKyAg
ICA6IEJveEl0ZXJhdG9yKHJ1bikKK3sKK30KKworVGV4dEJveEl0ZXJhdG9yJiBUZXh0Qm94SXRl
cmF0b3I6OnRyYXZlcnNlTmV4dFRleHRSdW4oKQoreworICAgIFdURjo6c3dpdGNoT24obV9ydW4u
bV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICBwYXRoLnRyYXZlcnNlTmV4
dFRleHRSdW4oKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1RleHRCb3hJdGVy
YXRvciYgVGV4dEJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRUZXh0UnVuSW5UZXh0T3JkZXIoKQor
eworICAgIFdURjo6c3dpdGNoT24obV9ydW4ubV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkg
eworICAgICAgICBwYXRoLnRyYXZlcnNlTmV4dFRleHRSdW5JblRleHRPcmRlcigpOworICAgIH0p
OworICAgIHJldHVybiAqdGhpczsKK30KKworQm94SXRlcmF0b3ImIEJveEl0ZXJhdG9yOjp0cmF2
ZXJzZU5leHRPbkxpbmUoKQoreworICAgIFdURjo6c3dpdGNoT24obV9ydW4ubV9wYXRoVmFyaWFu
dCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICBwYXRoLnRyYXZlcnNlTmV4dE9uTGluZSgpOwor
ICAgIH0pOworICAgIHJldHVybiAqdGhpczsKK30KKworQm94SXRlcmF0b3ImIEJveEl0ZXJhdG9y
Ojp0cmF2ZXJzZVByZXZpb3VzT25MaW5lKCkKK3sKKyAgICBXVEY6OnN3aXRjaE9uKG1fcnVuLm1f
cGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcGF0aC50cmF2ZXJzZVByZXZp
b3VzT25MaW5lKCk7CisgICAgfSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitCb3hJdGVyYXRv
ciYgQm94SXRlcmF0b3I6OnRyYXZlcnNlTmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkKK3sK
KyAgICBkbyB7CisgICAgICAgIHRyYXZlcnNlTmV4dE9uTGluZSgpOworICAgIH0gd2hpbGUgKCFh
dEVuZCgpICYmIG1fcnVuLmlzTGluZUJyZWFrKCkpOworICAgIHJldHVybiAqdGhpczsKK30KKwor
Qm94SXRlcmF0b3ImIEJveEl0ZXJhdG9yOjp0cmF2ZXJzZVByZXZpb3VzT25MaW5lSWdub3JpbmdM
aW5lQnJlYWsoKQoreworICAgIGRvIHsKKyAgICAgICAgdHJhdmVyc2VQcmV2aW91c09uTGluZSgp
OworICAgIH0gd2hpbGUgKCFhdEVuZCgpICYmIG1fcnVuLmlzTGluZUJyZWFrKCkpOworICAgIHJl
dHVybiAqdGhpczsKK30KKworQm94SXRlcmF0b3ImIEJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRP
bkxpbmVJbkxvZ2ljYWxPcmRlcigpCit7CisgICAgV1RGOjpzd2l0Y2hPbihtX3J1bi5tX3BhdGhW
YXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHBhdGgudHJhdmVyc2VOZXh0T25MaW5l
SW5Mb2dpY2FsT3JkZXIoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0JveEl0
ZXJhdG9yJiBCb3hJdGVyYXRvcjo6dHJhdmVyc2VQcmV2aW91c09uTGluZUluTG9naWNhbE9yZGVy
KCkKK3sKKyAgICBXVEY6OnN3aXRjaE9uKG1fcnVuLm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBh
dGgpIHsKKyAgICAgICAgcGF0aC50cmF2ZXJzZVByZXZpb3VzT25MaW5lSW5Mb2dpY2FsT3JkZXIo
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1RleHRCb3hJdGVyYXRvciBmaXJz
dFRleHRSdW5Gb3IoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKK3sKKyNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAgICBpZiAoYXV0byogbGluZUxheW91dCA9IExheW91dElu
dGVncmF0aW9uOjpMaW5lTGF5b3V0Ojpjb250YWluaW5nKHRleHQpKQorICAgICAgICByZXR1cm4g
bGluZUxheW91dC0+dGV4dFJ1bnNGb3IodGV4dCk7CisjZW5kaWYKKworICAgIHJldHVybiB7IEJv
eEl0ZXJhdG9yTGVnYWN5UGF0aCB7IHRleHQuZmlyc3RUZXh0Qm94KCkgfSB9OworfQorCitUZXh0
Qm94SXRlcmF0b3IgZmlyc3RUZXh0UnVuSW5UZXh0T3JkZXJGb3IoY29uc3QgUmVuZGVyVGV4dCYg
dGV4dCkKK3sKKyAgICBpZiAodGV4dC5maXJzdFRleHRCb3goKSAmJiB0ZXh0LmNvbnRhaW5zUmV2
ZXJzZWRUZXh0KCkpIHsKKyAgICAgICAgVmVjdG9yPGNvbnN0IExlZ2FjeUlubGluZUJveCo+IHNv
cnRlZFRleHRCb3hlczsKKyAgICAgICAgZm9yIChhdXRvKiB0ZXh0Qm94ID0gdGV4dC5maXJzdFRl
eHRCb3goKTsgdGV4dEJveDsgdGV4dEJveCA9IHRleHRCb3gtPm5leHRUZXh0Qm94KCkpCisgICAg
ICAgICAgICBzb3J0ZWRUZXh0Qm94ZXMuYXBwZW5kKHRleHRCb3gpOworICAgICAgICBzdGQ6OnNv
cnQoc29ydGVkVGV4dEJveGVzLmJlZ2luKCksIHNvcnRlZFRleHRCb3hlcy5lbmQoKSwgW10oYXV0
byogYSwgYXV0byogYikgeworICAgICAgICAgICAgcmV0dXJuIExlZ2FjeUlubGluZVRleHRCb3g6
OmNvbXBhcmVCeVN0YXJ0KGRvd25jYXN0PExlZ2FjeUlubGluZVRleHRCb3g+KGEpLCBkb3duY2Fz
dDxMZWdhY3lJbmxpbmVUZXh0Qm94PihiKSk7CisgICAgICAgIH0pOworICAgICAgICBhdXRvKiBm
aXJzdCA9IHNvcnRlZFRleHRCb3hlc1swXTsKKyAgICAgICAgcmV0dXJuIHsgQm94SXRlcmF0b3JM
ZWdhY3lQYXRoIHsgZmlyc3QsIFdURk1vdmUoc29ydGVkVGV4dEJveGVzKSwgMCB9IH07CisgICAg
fQorCisgICAgcmV0dXJuIGZpcnN0VGV4dFJ1bkZvcih0ZXh0KTsKK30KKworVGV4dEJveEl0ZXJh
dG9yIHRleHRSdW5Gb3IoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCogbGVnYWN5SW5saW5lVGV4
dEJveCkKK3sKKyAgICByZXR1cm4geyBCb3hJdGVyYXRvckxlZ2FjeVBhdGggeyBsZWdhY3lJbmxp
bmVUZXh0Qm94IH0gfTsKK30KKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQorVGV4dEJveEl0ZXJhdG9yIHRleHRSdW5Gb3IoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246Oklu
bGluZUNvbnRlbnQmIGNvbnRlbnQsIGNvbnN0IElubGluZURpc3BsYXk6OkJveCYgYm94KQorewor
ICAgIHJldHVybiB0ZXh0UnVuRm9yKGNvbnRlbnQsIGNvbnRlbnQuaW5kZXhGb3JCb3goYm94KSk7
Cit9CisKK1RleHRCb3hJdGVyYXRvciB0ZXh0UnVuRm9yKGNvbnN0IExheW91dEludGVncmF0aW9u
OjpJbmxpbmVDb250ZW50JiBjb250ZW50LCBzaXplX3QgYm94SW5kZXgpCit7CisgICAgQVNTRVJU
KGNvbnRlbnQuYm94ZXNbYm94SW5kZXhdLnRleHQoKSk7CisgICAgcmV0dXJuIHsgQm94SXRlcmF0
b3JNb2Rlcm5QYXRoIHsgY29udGVudCwgYm94SW5kZXggfSB9OworfQorI2VuZGlmCisKK1RleHRS
dW5SYW5nZSB0ZXh0UnVuc0Zvcihjb25zdCBSZW5kZXJUZXh0JiB0ZXh0KQoreworICAgIHJldHVy
biB7IGZpcnN0VGV4dFJ1bkZvcih0ZXh0KSB9OworfQorCitCb3hJdGVyYXRvciBydW5Gb3IoY29u
c3QgUmVuZGVyTGluZUJyZWFrJiByZW5kZXJlcikKK3sKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKKyAgICBpZiAoYXV0byogbGluZUxheW91dCA9IExheW91dEludGVncmF0
aW9uOjpMaW5lTGF5b3V0Ojpjb250YWluaW5nKHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGxp
bmVMYXlvdXQtPnJ1bkZvcihyZW5kZXJlcik7CisjZW5kaWYKKyAgICByZXR1cm4geyBCb3hJdGVy
YXRvckxlZ2FjeVBhdGgocmVuZGVyZXIuaW5saW5lQm94V3JhcHBlcigpKSB9OworfQorCitCb3hJ
dGVyYXRvciBydW5Gb3IoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikKK3sKKyNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAgICBpZiAoYXV0byogbGluZUxheW91dCA9IExh
eW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0Ojpjb250YWluaW5nKHJlbmRlcmVyKSkKKyAgICAg
ICAgcmV0dXJuIGxpbmVMYXlvdXQtPnJ1bkZvcihyZW5kZXJlcik7CisjZW5kaWYKKyAgICByZXR1
cm4geyBCb3hJdGVyYXRvckxlZ2FjeVBhdGgocmVuZGVyZXIuaW5saW5lQm94V3JhcHBlcigpKSB9
OworfQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCitCb3hJdGVyYXRv
ciBydW5Gb3IoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmIGNvbnRlbnQs
IHNpemVfdCBydW5JbmRleCkKK3sKKyAgICByZXR1cm4geyBCb3hJdGVyYXRvck1vZGVyblBhdGgg
eyBjb250ZW50LCBydW5JbmRleCB9IH07Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQorY29uc3QgQm94SXRlcmF0b3JNb2Rlcm5QYXRoJiBCb3g6Om1v
ZGVyblBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OmdldDxCb3hJdGVyYXRvck1vZGVy
blBhdGg+KG1fcGF0aFZhcmlhbnQpOworfQorI2VuZGlmCisKK2NvbnN0IEJveEl0ZXJhdG9yTGVn
YWN5UGF0aCYgQm94OjpsZWdhY3lQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpnZXQ8
Qm94SXRlcmF0b3JMZWdhY3lQYXRoPihtX3BhdGhWYXJpYW50KTsKK30KKworfQorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3gu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lNmUzMTAzNGI4ZTU2OTA3MDg3OTNkNmNmMTNhOTUwZTQ4MzI1OTQyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGlu
ZUl0ZXJhdG9yQm94LmgKQEAgLTAsMCArMSwzODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0aC5oIgorI2luY2x1ZGUg
IklubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oIgorI2luY2x1ZGUgIkxlZ2FjeUlubGluZUVs
ZW1lbnRCb3guaCIKKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFJlbmRlckxpbmVCcmVhazsKK2NsYXNzIFJlbmRlck9iamVjdDsKK2NsYXNz
IFJlbmRlclN0eWxlOworY2xhc3MgUmVuZGVyVGV4dDsKKworbmFtZXNwYWNlIElubGluZUl0ZXJh
dG9yIHsKKworY2xhc3MgTGluZUl0ZXJhdG9yOworY2xhc3MgQm94SXRlcmF0b3I7CitjbGFzcyBU
ZXh0Qm94SXRlcmF0b3I7CisKK3N0cnVjdCBFbmRJdGVyYXRvciB7IH07CisKK2NsYXNzIEJveCB7
CitwdWJsaWM6CisgICAgdXNpbmcgUGF0aFZhcmlhbnQgPSBWYXJpYW50PAorI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQorICAgICAgICBCb3hJdGVyYXRvck1vZGVyblBhdGgs
CisjZW5kaWYKKyAgICAgICAgQm94SXRlcmF0b3JMZWdhY3lQYXRoCisgICAgPjsKKworICAgIEJv
eChQYXRoVmFyaWFudCYmKTsKKworICAgIGJvb2wgaXNUZXh0KCkgY29uc3Q7CisKKyAgICBGbG9h
dFJlY3QgcmVjdCgpIGNvbnN0OworCisgICAgZmxvYXQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0
dXJuIGlzSG9yaXpvbnRhbCgpID8gcmVjdCgpLnkoKSA6IHJlY3QoKS54KCk7IH0KKyAgICBmbG9h
dCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyByZWN0KCku
bWF4WSgpIDogcmVjdCgpLm1heFgoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxMZWZ0KCkgY29uc3Qg
eyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyByZWN0KCkueCgpIDogcmVjdCgpLnkoKTsgfQorICAg
IGZsb2F0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gcmVj
dCgpLm1heFgoKSA6IHJlY3QoKS5tYXhZKCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsV2lkdGgoKSBj
b25zdCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IHJlY3QoKS53aWR0aCgpIDogcmVjdCgpLmhl
aWdodCgpOyB9CisgICAgZmxvYXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9y
aXpvbnRhbCgpID8gcmVjdCgpLmhlaWdodCgpIDogcmVjdCgpLndpZHRoKCk7IH0KKworICAgIGJv
b2wgaXNIb3Jpem9udGFsKCkgY29uc3Q7CisgICAgYm9vbCBkaXJPdmVycmlkZSgpIGNvbnN0Owor
ICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG1pbmltdW1DYXJl
dE9mZnNldCgpIGNvbnN0OworICAgIHVuc2lnbmVkIG1heGltdW1DYXJldE9mZnNldCgpIGNvbnN0
OworICAgIHVuc2lnbmVkIGxlZnRtb3N0Q2FyZXRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBpc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtaW5pbXVtQ2FyZXRPZmZzZXQoKSA6IG1heGltdW1DYXJl
dE9mZnNldCgpOyB9CisgICAgdW5zaWduZWQgcmlnaHRtb3N0Q2FyZXRPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtYXhpbXVtQ2FyZXRPZmZzZXQoKSA6
IG1pbmltdW1DYXJldE9mZnNldCgpOyB9CisKKyAgICB1bnNpZ25lZCBjaGFyIGJpZGlMZXZlbCgp
IGNvbnN0OworICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlk
aUxldmVsKCkgJSAyID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOyB9
CisgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0
aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSOyB9CisKKyAgICBSZW5kZXJPYmplY3Q6OkhpZ2hs
aWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Q7CisKKyAgICBjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29u
c3Q7CisKKyAgICAvLyBGb3IgaW50ZXJtZWRpYXRlIHBvcnRpbmcgc3RlcHMgb25seS4KKyAgICBj
b25zdCBMZWdhY3lJbmxpbmVCb3gqIGxlZ2FjeUlubGluZUJveCgpIGNvbnN0OworI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorICAgIGNvbnN0IElubGluZURpc3BsYXk6OkJv
eCogaW5saW5lQm94KCkgY29uc3Q7CisjZW5kaWYKKyAgICBCb3hJdGVyYXRvciBuZXh0T25MaW5l
KCkgY29uc3Q7CisgICAgQm94SXRlcmF0b3IgcHJldmlvdXNPbkxpbmUoKSBjb25zdDsKKyAgICBC
b3hJdGVyYXRvciBuZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSBjb25zdDsKKyAgICBCb3hJ
dGVyYXRvciBwcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkgY29uc3Q7CisKKyAgICBM
aW5lSXRlcmF0b3IgbGluZSgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNz
IEJveEl0ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBUZXh0Qm94SXRlcmF0b3I7CisKKyAgICAv
LyBUbyBoZWxwIHdpdGggZGVidWdnaW5nLgorI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQorICAgIGNvbnN0IEJveEl0ZXJhdG9yTW9kZXJuUGF0aCYgbW9kZXJuUGF0aCgpIGNv
bnN0OworI2VuZGlmCisgICAgY29uc3QgQm94SXRlcmF0b3JMZWdhY3lQYXRoJiBsZWdhY3lQYXRo
KCkgY29uc3Q7CisKKyAgICBQYXRoVmFyaWFudCBtX3BhdGhWYXJpYW50OworfTsKKworY2xhc3Mg
VGV4dEJveCA6IHB1YmxpYyBCb3ggeworcHVibGljOgorICAgIFRleHRCb3goUGF0aFZhcmlhbnQm
Jik7CisKKyAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0OworICAgIFN0cmluZ1ZpZXcgdGV4dCgp
IGNvbnN0OworCisgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBlbmQo
KSBjb25zdDsKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG9m
ZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0OworICAgIGZsb2F0IHBvc2l0aW9uRm9yT2Zm
c2V0KHVuc2lnbmVkKSBjb25zdDsKKworICAgIFRleHRCb3hTZWxlY3RhYmxlUmFuZ2Ugc2VsZWN0
YWJsZVJhbmdlKCkgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0KHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0OworCisgICAgYm9vbCBpc0NvbWJpbmVkVGV4dCgp
IGNvbnN0OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSgpIGNvbnN0OworCisg
ICAgVGV4dFJ1biBjcmVhdGVUZXh0UnVuKCkgY29uc3Q7CisKKyAgICBjb25zdCBSZW5kZXJUZXh0
JiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+KEJveDo6cmVu
ZGVyZXIoKSk7IH0KKyAgICBjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94KiBsZWdhY3lJbmxpbmVC
b3goKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxMZWdhY3lJbmxpbmVUZXh0Qm94PihCb3g6Omxl
Z2FjeUlubGluZUJveCgpKTsgfQorCisgICAgVGV4dEJveEl0ZXJhdG9yIG5leHRUZXh0UnVuKCkg
Y29uc3Q7CisgICAgVGV4dEJveEl0ZXJhdG9yIG5leHRUZXh0UnVuSW5UZXh0T3JkZXIoKSBjb25z
dDsKK307CisKK2NsYXNzIEJveEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBCb3hJdGVyYXRvcigp
IDogbV9ydW4oQm94SXRlcmF0b3JMZWdhY3lQYXRoIHsgbnVsbHB0ciwgeyB9IH0pIHsgfTsKKyAg
ICBCb3hJdGVyYXRvcihCb3g6OlBhdGhWYXJpYW50JiYpOworICAgIEJveEl0ZXJhdG9yKGNvbnN0
IEJveCYpOworCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICFh
dEVuZCgpOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQm94SXRlcmF0b3ImKSBjb25z
dDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQm94SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KEVuZEl0
ZXJhdG9yKSBjb25zdCB7IHJldHVybiBhdEVuZCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KEVu
ZEl0ZXJhdG9yKSBjb25zdCB7IHJldHVybiAhYXRFbmQoKTsgfQorCisgICAgY29uc3QgQm94JiBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3J1bjsgfQorICAgIGNvbnN0IEJveCogb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX3J1bjsgfQorCisgICAgYm9vbCBhdEVuZCgpIGNvbnN0
OworCisgICAgQm94SXRlcmF0b3ImIHRyYXZlcnNlTmV4dE9uTGluZSgpOworICAgIEJveEl0ZXJh
dG9yJiB0cmF2ZXJzZVByZXZpb3VzT25MaW5lKCk7CisgICAgQm94SXRlcmF0b3ImIHRyYXZlcnNl
TmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CisgICAgQm94SXRlcmF0b3ImIHRyYXZlcnNl
UHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOworICAgIEJveEl0ZXJhdG9yJiB0cmF2
ZXJzZU5leHRPbkxpbmVJbkxvZ2ljYWxPcmRlcigpOworICAgIEJveEl0ZXJhdG9yJiB0cmF2ZXJz
ZVByZXZpb3VzT25MaW5lSW5Mb2dpY2FsT3JkZXIoKTsKKworcHJvdGVjdGVkOgorICAgIEJveCBt
X3J1bjsKK307CisKK2NsYXNzIFRleHRCb3hJdGVyYXRvciA6IHB1YmxpYyBCb3hJdGVyYXRvciB7
CitwdWJsaWM6CisgICAgVGV4dEJveEl0ZXJhdG9yKCkgeyB9CisgICAgVGV4dEJveEl0ZXJhdG9y
KEJveDo6UGF0aFZhcmlhbnQmJik7CisgICAgVGV4dEJveEl0ZXJhdG9yKGNvbnN0IEJveCYpOwor
CisgICAgVGV4dEJveEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyByZXR1cm4gdHJhdmVyc2VOZXh0
VGV4dFJ1bigpOyB9CisKKyAgICBjb25zdCBUZXh0Qm94JiBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiBnZXQoKTsgfQorICAgIGNvbnN0IFRleHRCb3gqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiAmZ2V0KCk7IH0KKworICAgIFRleHRCb3hJdGVyYXRvciYgdHJhdmVyc2VOZXh0VGV4dFJ1
bigpOworICAgIFRleHRCb3hJdGVyYXRvciYgdHJhdmVyc2VOZXh0VGV4dFJ1bkluVGV4dE9yZGVy
KCk7CisKK3ByaXZhdGU6CisgICAgQm94SXRlcmF0b3ImIHRyYXZlcnNlTmV4dE9uTGluZSgpID0g
ZGVsZXRlOworICAgIEJveEl0ZXJhdG9yJiB0cmF2ZXJzZVByZXZpb3VzT25MaW5lKCkgPSBkZWxl
dGU7CisgICAgQm94SXRlcmF0b3ImIHRyYXZlcnNlTmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFr
KCkgPSBkZWxldGU7CisgICAgQm94SXRlcmF0b3ImIHRyYXZlcnNlUHJldmlvdXNPbkxpbmVJZ25v
cmluZ0xpbmVCcmVhaygpID0gZGVsZXRlOworICAgIEJveEl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRP
bkxpbmVJbkxvZ2ljYWxPcmRlcigpID0gZGVsZXRlOworICAgIEJveEl0ZXJhdG9yJiB0cmF2ZXJz
ZVByZXZpb3VzT25MaW5lSW5Mb2dpY2FsT3JkZXIoKSA9IGRlbGV0ZTsKKworICAgIGNvbnN0IFRl
eHRCb3gmIGdldCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFRleHRCb3g+KG1fcnVuKTsgfQor
fTsKKworY2xhc3MgVGV4dFJ1blJhbmdlIHsKK3B1YmxpYzoKKyAgICBUZXh0UnVuUmFuZ2UoVGV4
dEJveEl0ZXJhdG9yIGJlZ2luKQorICAgICAgICA6IG1fYmVnaW4oYmVnaW4pCisgICAgeworICAg
IH0KKworICAgIFRleHRCb3hJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47
IH0KKyAgICBFbmRJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiB7IH07IH0KKworcHJpdmF0
ZToKKyAgICBUZXh0Qm94SXRlcmF0b3IgbV9iZWdpbjsKK307CisKK1RleHRCb3hJdGVyYXRvciBm
aXJzdFRleHRSdW5Gb3IoY29uc3QgUmVuZGVyVGV4dCYpOworVGV4dEJveEl0ZXJhdG9yIGZpcnN0
VGV4dFJ1bkluVGV4dE9yZGVyRm9yKGNvbnN0IFJlbmRlclRleHQmKTsKK1RleHRCb3hJdGVyYXRv
ciB0ZXh0UnVuRm9yKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gqKTsKKyNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKK1RleHRCb3hJdGVyYXRvciB0ZXh0UnVuRm9yKGNvbnN0
IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiwgY29uc3QgSW5saW5lRGlzcGxheTo6
Qm94Jik7CitUZXh0Qm94SXRlcmF0b3IgdGV4dFJ1bkZvcihjb25zdCBMYXlvdXRJbnRlZ3JhdGlv
bjo6SW5saW5lQ29udGVudCYsIHNpemVfdCBydW5JbmRleCk7CisjZW5kaWYKK1RleHRSdW5SYW5n
ZSB0ZXh0UnVuc0Zvcihjb25zdCBSZW5kZXJUZXh0Jik7CitCb3hJdGVyYXRvciBydW5Gb3IoY29u
c3QgUmVuZGVyTGluZUJyZWFrJik7CitCb3hJdGVyYXRvciBydW5Gb3IoY29uc3QgUmVuZGVyQm94
Jik7CisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCitCb3hJdGVyYXRvciBy
dW5Gb3IoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmLCBzaXplX3QgcnVu
SW5kZXgpOworI2VuZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK2lubGluZSBCb3g6OkJveChQYXRoVmFyaWFudCYmIHBhdGgpCisgICAg
OiBtX3BhdGhWYXJpYW50KFdURk1vdmUocGF0aCkpCit7Cit9CisKK2lubGluZSBib29sIEJveDo6
aXNUZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50
LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmlzVGV4dCgpOworICAgIH0p
OworfQorCitpbmxpbmUgRmxvYXRSZWN0IEJveDo6cmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICBy
ZXR1cm4gcGF0aC5yZWN0KCk7CisgICAgfSk7Cit9CisKK2lubGluZSBib29sIEJveDo6aXNIb3Jp
em9udGFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50
LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmlzSG9yaXpvbnRhbCgpOwor
ICAgIH0pOworfQorCitpbmxpbmUgYm9vbCBCb3g6OmRpck92ZXJyaWRlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7Cisg
ICAgICAgIHJldHVybiBwYXRoLmRpck92ZXJyaWRlKCk7CisgICAgfSk7Cit9CisKK2lubGluZSBi
b29sIEJveDo6aXNMaW5lQnJlYWsoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguaXNM
aW5lQnJlYWsoKTsKKyAgICB9KTsKK30KKworaW5saW5lIHVuc2lnbmVkIEJveDo6bWluaW11bUNh
cmV0T2Zmc2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJp
YW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLm1pbmltdW1DYXJldE9m
ZnNldCgpOworICAgIH0pOworfQorCitpbmxpbmUgdW5zaWduZWQgQm94OjptYXhpbXVtQ2FyZXRP
ZmZzZXQoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQs
IFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgubWF4aW11bUNhcmV0T2Zmc2V0
KCk7CisgICAgfSk7Cit9CisKK2lubGluZSB1bnNpZ25lZCBjaGFyIEJveDo6YmlkaUxldmVsKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRv
JiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmJpZGlMZXZlbCgpOworICAgIH0pOworfQor
CitpbmxpbmUgY29uc3QgUmVuZGVyT2JqZWN0JiBCb3g6OnJlbmRlcmVyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSAtPiBj
b25zdCBSZW5kZXJPYmplY3QmIHsKKyAgICAgICAgcmV0dXJuIHBhdGgucmVuZGVyZXIoKTsKKyAg
ICB9KTsKK30KKworaW5saW5lIGNvbnN0IExlZ2FjeUlubGluZUJveCogQm94OjpsZWdhY3lJbmxp
bmVCb3goKSBjb25zdAoreworICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxCb3hJdGVy
YXRvckxlZ2FjeVBhdGg+KG1fcGF0aFZhcmlhbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gV1RGOjpnZXQ8Qm94SXRlcmF0b3JMZWdhY3lQYXRoPihtX3BhdGhWYXJpYW50
KS5sZWdhY3lJbmxpbmVCb3goKTsKK30KKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQoraW5saW5lIGNvbnN0IElubGluZURpc3BsYXk6OkJveCogQm94OjppbmxpbmVCb3go
KSBjb25zdAoreworICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxCb3hJdGVyYXRvck1v
ZGVyblBhdGg+KG1fcGF0aFZhcmlhbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gJldURjo6Z2V0PEJveEl0ZXJhdG9yTW9kZXJuUGF0aD4obV9wYXRoVmFyaWFudCkuYm94
KCk7Cit9CisjZW5kaWYKKworaW5saW5lIGJvb2wgVGV4dEJveDo6aGFzSHlwaGVuKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRo
KSB7CisgICAgICAgIHJldHVybiBwYXRoLmhhc0h5cGhlbigpOworICAgIH0pOworfQorCitpbmxp
bmUgVGV4dEJveDo6VGV4dEJveChQYXRoVmFyaWFudCYmIHBhdGgpCisgICAgOiBCb3goV1RGTW92
ZShwYXRoKSkKK3sKK30KKworaW5saW5lIFN0cmluZ1ZpZXcgVGV4dEJveDo6dGV4dCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0
aCkgeworICAgICAgICByZXR1cm4gcGF0aC50ZXh0KCk7CisgICAgfSk7Cit9CisKK2lubGluZSB1
bnNpZ25lZCBUZXh0Qm94OjpzdGFydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5z
dGFydCgpOworICAgIH0pOworfQorCitpbmxpbmUgdW5zaWduZWQgVGV4dEJveDo6ZW5kKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBw
YXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmVuZCgpOworICAgIH0pOworfQorCitpbmxpbmUg
dW5zaWduZWQgVGV4dEJveDo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRo
Lmxlbmd0aCgpOworICAgIH0pOworfQorCitpbmxpbmUgdW5zaWduZWQgVGV4dEJveDo6b2Zmc2V0
Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3BhdGhWYXJpYW50LCBbJl0oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5vZmZz
ZXRGb3JQb3NpdGlvbih4KTsKKyAgICB9KTsKK30KKworaW5saW5lIGZsb2F0IFRleHRCb3g6OnBv
c2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbJl0oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1
cm4gcGF0aC5wb3NpdGlvbkZvck9mZnNldChvZmZzZXQpOworICAgIH0pOworfQorCitpbmxpbmUg
VGV4dEJveFNlbGVjdGFibGVSYW5nZSBUZXh0Qm94OjpzZWxlY3RhYmxlUmFuZ2UoKSBjb25zdAor
eworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFsmXShhdXRvJiBwYXRo
KSB7CisgICAgICAgIHJldHVybiBwYXRoLnNlbGVjdGFibGVSYW5nZSgpOworICAgIH0pOworfQor
CitpbmxpbmUgVGV4dFJ1biBUZXh0Qm94OjpjcmVhdGVUZXh0UnVuKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbJl0oYXV0byYgcGF0aCkgeworICAg
ICAgICByZXR1cm4gcGF0aC5jcmVhdGVUZXh0UnVuKCk7CisgICAgfSk7Cit9CisKK30KK30KKwor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4
dEJveCkKK3N0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6
Qm94JiBydW4pIHsgcmV0dXJuIHJ1bi5pc1RleHQoKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OklubGluZUl0
ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpCitzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yJiBydW5JdGVyYXRvcikgeyByZXR1cm4gIXJ1
bkl0ZXJhdG9yIHx8IHJ1bkl0ZXJhdG9yLT5pc1RleHQoKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0lubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0aC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMjRj
MmEyMzA2NjMyNDI1ZjNjMTY2ZWVjMTU0MmNmNWYyMWViYjkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3hMZWdhY3lQ
YXRoLmgKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkxlZ2FjeUlubGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJMZWdhY3lSb290SW5saW5l
Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlRleHRCb3hTZWxlY3Rh
YmxlUmFuZ2UuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgSW5saW5lSXRl
cmF0b3IgeworCitjbGFzcyBCb3hJdGVyYXRvckxlZ2FjeVBhdGggeworcHVibGljOgorICAgIEJv
eEl0ZXJhdG9yTGVnYWN5UGF0aChjb25zdCBMZWdhY3lJbmxpbmVCb3gqIGlubGluZUJveCwgVmVj
dG9yPGNvbnN0IExlZ2FjeUlubGluZUJveCo+JiYgc29ydGVkSW5saW5lQm94ZXMgPSB7IH0sIHNp
emVfdCBzb3J0ZWRJbmxpbmVCb3hJbmRleCA9IDApCisgICAgICAgIDogbV9pbmxpbmVCb3goaW5s
aW5lQm94KQorICAgICAgICAsIG1fbG9naWNhbE9yZGVyQ2FjaGUoV1RGTW92ZShzb3J0ZWRJbmxp
bmVCb3hlcykpCisgICAgICAgICwgbV9sb2dpY2FsT3JkZXJDYWNoZUluZGV4KHNvcnRlZElubGlu
ZUJveEluZGV4KQorICAgIHsgfQorCisgICAgZW51bSBjbGFzcyBMb2dpY2FsT3JkZXIgeyBTdGFy
dCwgRW5kIH07CisgICAgQm94SXRlcmF0b3JMZWdhY3lQYXRoKGNvbnN0IExlZ2FjeVJvb3RJbmxp
bmVCb3gmIHJvb3QsIExvZ2ljYWxPcmRlciBvcmRlcikKKyAgICAgICAgOiBtX2xvZ2ljYWxPcmRl
ckNhY2hlKGlubGluZUJveGVzSW5Mb2dpY2FsT3JkZXIocm9vdCkpCisgICAgeworICAgICAgICBp
ZiAoIW1fbG9naWNhbE9yZGVyQ2FjaGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2xvZ2lj
YWxPcmRlckNhY2hlSW5kZXggPSBvcmRlciA9PSBMb2dpY2FsT3JkZXI6OlN0YXJ0ID8gMCA6IG1f
bG9naWNhbE9yZGVyQ2FjaGUuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIG1faW5saW5lQm94ID0g
bV9sb2dpY2FsT3JkZXJDYWNoZVttX2xvZ2ljYWxPcmRlckNhY2hlSW5kZXhdOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+
aXNJbmxpbmVUZXh0Qm94KCk7IH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVCb3gtPmZyYW1lUmVjdCgpOyB9CisKKyAgICBib29sIGlzSG9yaXpvbnRhbCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94LT5pc0hvcml6b250YWwoKTsgfQorICAgIGJvb2wg
ZGlyT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+ZGlyT3ZlcnJpZGUoKTsg
fQorICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+aXNM
aW5lQnJlYWsoKTsgfQorCisgICAgdW5zaWduZWQgbWluaW11bUNhcmV0T2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmxpbmVCb3gtPmNhcmV0TWluT2Zmc2V0KCk7IH0KKyAgICB1bnNpZ25lZCBt
YXhpbXVtQ2FyZXRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+Y2FyZXRNYXhP
ZmZzZXQoKTsgfQorCisgICAgdW5zaWduZWQgY2hhciBiaWRpTGV2ZWwoKSBjb25zdCB7IHJldHVy
biBtX2lubGluZUJveC0+YmlkaUxldmVsKCk7IH0KKworICAgIGJvb2wgaGFzSHlwaGVuKCkgY29u
c3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5oYXNIeXBoZW4oKTsgfQorICAgIFN0cmluZ1Zp
ZXcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZ1ZpZXcoaW5saW5lVGV4dEJveCgpLT5yZW5k
ZXJlcigpLnRleHQoKSkuc3Vic3RyaW5nKGlubGluZVRleHRCb3goKS0+c3RhcnQoKSwgaW5saW5l
VGV4dEJveCgpLT5sZW4oKSk7IH0KKyAgICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0IHsgcmV0dXJu
IGlubGluZVRleHRCb3goKS0+c3RhcnQoKTsgfQorICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGlubGluZVRleHRCb3goKS0+ZW5kKCk7IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPmxlbigpOyB9CisKKyAgICB1bnNpZ25lZCBv
ZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4KSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCkt
Pm9mZnNldEZvclBvc2l0aW9uKHgpOyB9CisgICAgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQodW5z
aWduZWQgb2Zmc2V0KSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPnBvc2l0aW9uRm9y
T2Zmc2V0KG9mZnNldCk7IH0KKworICAgIFRleHRCb3hTZWxlY3RhYmxlUmFuZ2Ugc2VsZWN0YWJs
ZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5zZWxlY3RhYmxlUmFuZ2Uo
KTsgfQorCisgICAgVGV4dFJ1biBjcmVhdGVUZXh0UnVuKCkgY29uc3QgeyByZXR1cm4gaW5saW5l
VGV4dEJveCgpLT5jcmVhdGVUZXh0UnVuKCk7IH0KKworICAgIGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5saW5lQm94LT5yZW5k
ZXJlcigpOworICAgIH0KKworICAgIHZvaWQgdHJhdmVyc2VOZXh0VGV4dFJ1bigpIHsgbV9pbmxp
bmVCb3ggPSBpbmxpbmVUZXh0Qm94KCktPm5leHRUZXh0Qm94KCk7IH0KKyAgICB2b2lkIHRyYXZl
cnNlTmV4dFRleHRSdW5JblRleHRPcmRlcigpCisgICAgeworICAgICAgICBpZiAoIW1fbG9naWNh
bE9yZGVyQ2FjaGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICB0cmF2ZXJzZU5leHRJbmxpbmVC
b3hJbkNhY2hlT3JkZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVCb3ggfHwgaXM8
TGVnYWN5SW5saW5lVGV4dEJveD4obV9pbmxpbmVCb3gpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICB0cmF2ZXJzZU5leHRUZXh0UnVuKCk7CisgICAgfQorCisgICAg
dm9pZCB0cmF2ZXJzZU5leHRPbkxpbmUoKQorICAgIHsKKyAgICAgICAgbV9pbmxpbmVCb3ggPSBt
X2lubGluZUJveC0+bmV4dExlYWZPbkxpbmUoKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYXZlcnNl
UHJldmlvdXNPbkxpbmUoKQorICAgIHsKKyAgICAgICAgbV9pbmxpbmVCb3ggPSBtX2lubGluZUJv
eC0+cHJldmlvdXNMZWFmT25MaW5lKCk7CisgICAgfQorCisgICAgdm9pZCB0cmF2ZXJzZU5leHRP
bkxpbmVJbkxvZ2ljYWxPcmRlcigpCisgICAgeworICAgICAgICBpbml0aWFsaXplTG9naWNhbE9y
ZGVyQ2FjaGVGb3JMaW5lKCk7CisgICAgICAgIHRyYXZlcnNlTmV4dElubGluZUJveEluQ2FjaGVP
cmRlcigpOworICAgIH0KKworICAgIHZvaWQgdHJhdmVyc2VQcmV2aW91c09uTGluZUluTG9naWNh
bE9yZGVyKCkKKyAgICB7CisgICAgICAgIGluaXRpYWxpemVMb2dpY2FsT3JkZXJDYWNoZUZvckxp
bmUoKTsKKyAgICAgICAgdHJhdmVyc2VQcmV2aW91c0lubGluZUJveEluQ2FjaGVPcmRlcigpOwor
ICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCb3hJdGVyYXRvckxlZ2FjeVBhdGgm
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveCA9PSBvdGhlci5tX2lubGluZUJveDsg
fQorCisgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX2lubGluZUJveDsgfQorCisg
ICAgTGVnYWN5SW5saW5lQm94KiBsZWdhY3lJbmxpbmVCb3goKSBjb25zdCB7IHJldHVybiBjb25z
dF9jYXN0PExlZ2FjeUlubGluZUJveCo+KG1faW5saW5lQm94KTsgfQorICAgIGNvbnN0IExlZ2Fj
eVJvb3RJbmxpbmVCb3gmIHJvb3RJbmxpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJv
eC0+cm9vdCgpOyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCog
aW5saW5lVGV4dEJveCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PExlZ2FjeUlubGluZVRleHRC
b3g+KG1faW5saW5lQm94KTsgfQorCisgICAgc3RhdGljIFZlY3Rvcjxjb25zdCBMZWdhY3lJbmxp
bmVCb3gqPiBpbmxpbmVCb3hlc0luTG9naWNhbE9yZGVyKGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVC
b3gmIHJvb3QpCisgICAgeworICAgICAgICBWZWN0b3I8TGVnYWN5SW5saW5lQm94Kj4gaW5saW5l
Qm94ZXM7CisgICAgICAgIHJvb3QuY29sbGVjdExlYWZCb3hlc0luTG9naWNhbE9yZGVyKGlubGlu
ZUJveGVzKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPGNvbnN0IExl
Z2FjeUlubGluZUJveCo+Jj4oaW5saW5lQm94ZXMpOworICAgIH0KKyAgICB2b2lkIGluaXRpYWxp
emVMb2dpY2FsT3JkZXJDYWNoZUZvckxpbmUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lubGlu
ZUJveCB8fCAhbV9sb2dpY2FsT3JkZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG1fbG9naWNhbE9yZGVyQ2FjaGUgPSBpbmxpbmVCb3hlc0luTG9naWNhbE9y
ZGVyKG1faW5saW5lQm94LT5yb290KCkpOworICAgICAgICBmb3IgKG1fbG9naWNhbE9yZGVyQ2Fj
aGVJbmRleCA9IDA7IG1fbG9naWNhbE9yZGVyQ2FjaGVJbmRleCA8IG1fbG9naWNhbE9yZGVyQ2Fj
aGUuc2l6ZSgpOyArK21fbG9naWNhbE9yZGVyQ2FjaGVJbmRleCkgeworICAgICAgICAgICAgaWYg
KG1fbG9naWNhbE9yZGVyQ2FjaGVbbV9sb2dpY2FsT3JkZXJDYWNoZUluZGV4XSA9PSBtX2lubGlu
ZUJveCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCB0cmF2ZXJzZU5leHRJbmxpbmVCb3hJ
bkNhY2hlT3JkZXIoKTsKKyAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNJbmxpbmVCb3hJbkNhY2hl
T3JkZXIoKTsKKworICAgIGNvbnN0IExlZ2FjeUlubGluZUJveCogbV9pbmxpbmVCb3ggeyBudWxs
cHRyIH07CisgICAgUmVmQ291bnRlZEFycmF5PGNvbnN0IExlZ2FjeUlubGluZUJveCo+IG1fbG9n
aWNhbE9yZGVyQ2FjaGU7CisgICAgc2l6ZV90IG1fbG9naWNhbE9yZGVyQ2FjaGVJbmRleCB7IDAg
fTsKK307CisKKworaW5saW5lIHZvaWQgQm94SXRlcmF0b3JMZWdhY3lQYXRoOjp0cmF2ZXJzZU5l
eHRJbmxpbmVCb3hJbkNhY2hlT3JkZXIoKQoreworICAgIEFTU0VSVCghbV9sb2dpY2FsT3JkZXJD
YWNoZS5pc0VtcHR5KCkpOworICAgICsrbV9sb2dpY2FsT3JkZXJDYWNoZUluZGV4OworICAgIG1f
aW5saW5lQm94ID0gbV9sb2dpY2FsT3JkZXJDYWNoZUluZGV4IDwgbV9sb2dpY2FsT3JkZXJDYWNo
ZS5zaXplKCkgPyBtX2xvZ2ljYWxPcmRlckNhY2hlW21fbG9naWNhbE9yZGVyQ2FjaGVJbmRleF0g
OiBudWxscHRyOworfQorCitpbmxpbmUgdm9pZCBCb3hJdGVyYXRvckxlZ2FjeVBhdGg6OnRyYXZl
cnNlUHJldmlvdXNJbmxpbmVCb3hJbkNhY2hlT3JkZXIoKQoreworICAgIEFTU0VSVCghbV9sb2dp
Y2FsT3JkZXJDYWNoZS5pc0VtcHR5KCkpOworICAgIGlmICghbV9sb2dpY2FsT3JkZXJDYWNoZUlu
ZGV4KSB7CisgICAgICAgIG1faW5saW5lQm94ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX2lubGluZUJveCA9IG1fbG9naWNhbE9yZGVyQ2FjaGVbLS1tX2xvZ2ljYWxP
cmRlckNhY2hlSW5kZXhdOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWMxOWYwMWI0ZTE5YmJjNWU2MTk4ZjljY2YxM2E2YTliMDYzNzJjYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJ
dGVyYXRvckJveE1vZGVyblBhdGguaApAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNp
bmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uSW5saW5l
Q29udGVudC5oIgorI2luY2x1ZGUgIlRleHRCb3hTZWxlY3RhYmxlUmFuZ2UuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIElubGluZUl0ZXJhdG9yIHsKKworY2xhc3MgQm94SXRl
cmF0b3JNb2Rlcm5QYXRoIHsKK3B1YmxpYzoKKyAgICBCb3hJdGVyYXRvck1vZGVyblBhdGgoY29u
c3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQpCisgICAg
ICAgIDogbV9pbmxpbmVDb250ZW50KCZpbmxpbmVDb250ZW50KQorICAgIHsKKyAgICAgICAgc2V0
QXRFbmQoKTsKKyAgICB9CisgICAgQm94SXRlcmF0b3JNb2Rlcm5QYXRoKGNvbnN0IExheW91dElu
dGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBzaXplX3Qgc3RhcnRJbmRl
eCkKKyAgICAgICAgOiBtX2lubGluZUNvbnRlbnQoJmlubGluZUNvbnRlbnQpCisgICAgICAgICwg
bV9ib3hJbmRleChzdGFydEluZGV4KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzVGV4dCgp
IGNvbnN0IHsgcmV0dXJuICEhYm94KCkudGV4dCgpOyB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIGJveCgpLmxvZ2ljYWxSZWN0KCk7IH0KKworICAgIGJvb2wgaXNIb3Jp
em9udGFsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgZGlyT3ZlcnJpZGUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJl
dHVybiBib3goKS5pc0xpbmVCcmVhaygpOyB9CisKKyAgICB1bnNpZ25lZCBtaW5pbXVtQ2FyZXRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBpc1RleHQoKSA/IHN0YXJ0KCkgOiAwOyB9CisgICAgdW5z
aWduZWQgbWF4aW11bUNhcmV0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNUZXh0KCkgPyBlbmQo
KSA6IDE7IH0KKworICAgIHVuc2lnbmVkIGNoYXIgYmlkaUxldmVsKCkgY29uc3QgeyByZXR1cm4g
MDsgfQorCisgICAgYm9vbCBoYXNIeXBoZW4oKSBjb25zdCB7IHJldHVybiBib3goKS50ZXh0KCkt
Pmhhc0h5cGhlbigpOyB9CisgICAgU3RyaW5nVmlldyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gYm94
KCkudGV4dCgpLT5vcmlnaW5hbENvbnRlbnQoKTsgfQorICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29u
c3QgeyByZXR1cm4gYm94KCkudGV4dCgpLT5zdGFydCgpOyB9CisgICAgdW5zaWduZWQgZW5kKCkg
Y29uc3QgeyByZXR1cm4gYm94KCkudGV4dCgpLT5lbmQoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIGJveCgpLnRleHQoKS0+bGVuZ3RoKCk7IH0KKworICAgIC8vIEZJ
WE1FOiBNYWtlIGEgc2hhcmVkIGdlbmVyaWMgdmVyc2lvbiBvZiB0aGlzLgorICAgIGlubGluZSB1
bnNpZ25lZCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4KSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzTGluZUJyZWFrKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgYXV0byBy
ZWN0ID0gdGhpcy0+cmVjdCgpOworICAgICAgICBhdXRvIGxvY2FsWCA9IHggLSByZWN0LngoKTsK
KyAgICAgICAgaWYgKGxvY2FsWCA+IHJlY3Qud2lkdGgoKSkKKyAgICAgICAgICAgIHJldHVybiBs
ZW5ndGgoKTsKKyAgICAgICAgaWYgKGxvY2FsWCA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsK
KworICAgICAgICBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIGJveCgpLnN0eWxlKCkuZm9udENhc2NhZGUoKS5vZmZzZXRGb3JQb3NpdGlvbihjcmVhdGVU
ZXh0UnVuKEh5cGhlbk1vZGU6Oklnbm9yZSksIGxvY2FsWCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMp
OworICAgIH0KKworICAgIC8vIEZJWE1FOiBNYWtlIGEgc2hhcmVkIGdlbmVyaWMgdmVyc2lvbiBv
ZiB0aGlzLgorICAgIGZsb2F0IHBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChvZmZzZXQgPj0gc3RhcnQoKSk7CisgICAgICAgIEFT
U0VSVChvZmZzZXQgPD0gZW5kKCkpOworCisgICAgICAgIGlmIChpc0xpbmVCcmVhaygpKQorICAg
ICAgICAgICAgcmV0dXJuIHJlY3QoKS54KCk7CisKKyAgICAgICAgYXV0byBlbmRPZmZzZXQgPSBz
ZWxlY3RhYmxlUmFuZ2UoKS5jbGFtcChvZmZzZXQpOworCisgICAgICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdCA9IExheW91dFJlY3QocmVjdCgpLngoKSwgMCwgMCwgMCk7CisgICAgICAgIFRl
eHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4oSHlwaGVuTW9kZTo6SWdub3JlKTsKKyAgICAg
ICAgYm94KCkuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0
KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIDAsIGVuZE9mZnNldCk7CisgICAgICAgIHJldHVybiBz
bmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwg
cmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkp
Lm1heFgoKTsKKyAgICB9CisKKyAgICBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlIHNlbGVjdGFibGVS
YW5nZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgc3RhcnQo
KSwKKyAgICAgICAgICAgIGxlbmd0aCgpLAorICAgICAgICAgICAgYm94KCkudGV4dCgpLT5oYXNI
eXBoZW4oKSA/IGJveCgpLnN0eWxlKCkuaHlwaGVuU3RyaW5nKCkubGVuZ3RoKCkgOiAwLAorICAg
ICAgICAgICAgYm94KCkuaXNMaW5lQnJlYWsoKQorICAgICAgICB9OworICAgIH0KKworICAgIFRl
eHRSdW4gY3JlYXRlVGV4dFJ1bigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRl
VGV4dFJ1bihIeXBoZW5Nb2RlOjpJbmNsdWRlKTsKKyAgICB9OworCisgICAgY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmxpbmVD
b250ZW50LT5yZW5kZXJlckZvckxheW91dEJveChib3goKS5sYXlvdXRCb3goKSk7CisgICAgfQor
CisgICAgdm9pZCB0cmF2ZXJzZU5leHRUZXh0UnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
YXRFbmQoKSk7CisgICAgICAgIEFTU0VSVChib3goKS50ZXh0KCkpOworCisgICAgICAgIGF1dG8m
IGxheW91dEJveCA9IGJveCgpLmxheW91dEJveCgpOworCisgICAgICAgIHRyYXZlcnNlTmV4dExl
YWYoKTsKKworICAgICAgICBpZiAoIWF0RW5kKCkgJiYgJmxheW91dEJveCAhPSAmYm94KCkubGF5
b3V0Qm94KCkpCisgICAgICAgICAgICBzZXRBdEVuZCgpOworCisgICAgICAgIEFTU0VSVChhdEVu
ZCgpIHx8IGJveCgpLnRleHQoKSk7CisgICAgfQorCisgICAgdm9pZCB0cmF2ZXJzZU5leHRUZXh0
UnVuSW5UZXh0T3JkZXIoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IE5vIFJUTCBpbiBMRkMu
CisgICAgICAgIHRyYXZlcnNlTmV4dFRleHRSdW4oKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYXZl
cnNlTmV4dE9uTGluZSgpCisgICAgeworICAgICAgICBBU1NFUlQoIWF0RW5kKCkpOworCisgICAg
ICAgIGF1dG8gb2xkTGluZUluZGV4ID0gYm94KCkubGluZUluZGV4KCk7CisKKyAgICAgICAgdHJh
dmVyc2VOZXh0TGVhZigpOworCisgICAgICAgIGlmICghYXRFbmQoKSAmJiBvbGRMaW5lSW5kZXgg
IT0gYm94KCkubGluZUluZGV4KCkpCisgICAgICAgICAgICBzZXRBdEVuZCgpOworICAgIH0KKwor
ICAgIHZvaWQgdHJhdmVyc2VQcmV2aW91c09uTGluZSgpCisgICAgeworICAgICAgICBBU1NFUlQo
IWF0RW5kKCkpOworCisgICAgICAgIGF1dG8gb2xkTGluZUluZGV4ID0gYm94KCkubGluZUluZGV4
KCk7CisKKyAgICAgICAgdHJhdmVyc2VQcmV2aW91c0xlYWYoKTsKKworICAgICAgICBpZiAoIWF0
RW5kKCkgJiYgb2xkTGluZUluZGV4ICE9IGJveCgpLmxpbmVJbmRleCgpKQorICAgICAgICAgICAg
c2V0QXRFbmQoKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYXZlcnNlTmV4dE9uTGluZUluTG9naWNh
bE9yZGVyKCkKKyAgICB7CisgICAgICAgIHRyYXZlcnNlTmV4dE9uTGluZSgpOworICAgIH0KKwor
ICAgIHZvaWQgdHJhdmVyc2VQcmV2aW91c09uTGluZUluTG9naWNhbE9yZGVyKCkKKyAgICB7Cisg
ICAgICAgIHRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQm94SXRlcmF0b3JNb2Rlcm5QYXRoJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
bV9pbmxpbmVDb250ZW50ID09IG90aGVyLm1faW5saW5lQ29udGVudCAmJiBtX2JveEluZGV4ID09
IG90aGVyLm1fYm94SW5kZXg7IH0KKworICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiBt
X2JveEluZGV4ID09IGJveGVzKCkuc2l6ZSgpOyB9CisgICAgY29uc3QgSW5saW5lRGlzcGxheTo6
Qm94JiBib3goKSBjb25zdCB7IHJldHVybiBib3hlcygpW21fYm94SW5kZXhdOyB9CisgICAgYXV0
byYgaW5saW5lQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuICptX2lubGluZUNvbnRlbnQ7IH0KKwor
cHJpdmF0ZToKKyAgICB2b2lkIHRyYXZlcnNlTmV4dExlYWYoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFhdEVuZCgpKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgKyttX2JveEluZGV4Owor
ICAgICAgICB9IHdoaWxlICghYXRFbmQoKSAmJiBib3goKS5pc0lubGluZUJveCgpKTsKKyAgICB9
CisKKyAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNMZWFmKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghYXRFbmQoKSk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fYm94SW5kZXggPSBtX2Jv
eEluZGV4ID8gbV9ib3hJbmRleCAtIDEgOiBib3hlcygpLnNpemUoKTsKKyAgICAgICAgfSB3aGls
ZSAoIWF0RW5kKCkgJiYgYm94KCkuaXNJbmxpbmVCb3goKSk7CisgICAgfQorCisgICAgdm9pZCBz
ZXRBdEVuZCgpIHsgbV9ib3hJbmRleCA9IGJveGVzKCkuc2l6ZSgpOyB9CisKKyAgICBjb25zdCBM
YXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudDo6Qm94ZXMmIGJveGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmxpbmVDb250ZW50LT5ib3hlczsgfQorICAgIGNvbnN0IExheW91dEludGVncmF0
aW9uOjpMaW5lJiBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50LT5saW5lRm9y
Qm94KGJveCgpKTsgfQorCisgICAgZW51bSBjbGFzcyBIeXBoZW5Nb2RlIHsgSW5jbHVkZSwgSWdu
b3JlIH07CisgICAgVGV4dFJ1biBjcmVhdGVUZXh0UnVuKEh5cGhlbk1vZGUgaHlwaGVuTW9kZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIGF1dG8mIHN0eWxlID0gYm94KCkuc3R5bGUoKTsKKyAgICAg
ICAgYXV0byBleHBhbnNpb24gPSBib3goKS5leHBhbnNpb24oKTsKKyAgICAgICAgYXV0byByZWN0
ID0gdGhpcy0+cmVjdCgpOworICAgICAgICBhdXRvIHhQb3MgPSByZWN0LngoKSAtIChsaW5lKCku
bGluZUJveExlZnQoKSArIGxpbmUoKS5jb250ZW50TGVmdCgpKTsKKworICAgICAgICBhdXRvIHRl
eHRGb3JSdW4gPSBbJl0geworICAgICAgICAgICAgaWYgKGh5cGhlbk1vZGUgPT0gSHlwaGVuTW9k
ZTo6SWdub3JlIHx8ICFoYXNIeXBoZW4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGV4dCgp
LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKKworICAgICAgICAgICAgcmV0dXJuIG1ha2VTdHJp
bmcodGV4dCgpLCBzdHlsZS5oeXBoZW5TdHJpbmcoKSk7CisgICAgICAgIH0oKTsKKworICAgICAg
ICBUZXh0UnVuIHRleHRSdW4geyB0ZXh0Rm9yUnVuLCB4UG9zLCBleHBhbnNpb24uaG9yaXpvbnRh
bEV4cGFuc2lvbiwgZXhwYW5zaW9uLmJlaGF2aW9yIH07CisgICAgICAgIHRleHRSdW4uc2V0VGFi
U2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7CisgICAg
ICAgIHJldHVybiB0ZXh0UnVuOworICAgIH07CisKKyAgICBSZWZQdHI8Y29uc3QgTGF5b3V0SW50
ZWdyYXRpb246OklubGluZUNvbnRlbnQ+IG1faW5saW5lQ29udGVudDsKKyAgICBzaXplX3QgbV9i
b3hJbmRleCB7IDAgfTsKK307CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMaW5lLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxpbmUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlkNWE1MzQ2ZDY3MjY4NjljZTZiMGNiOWMyZGE1NWYyYTIzYWU2MzkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0
b3JMaW5lLmNwcApAQCAtMCwwICsxLDI1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKKworI2luY2x1ZGUgIklubGlu
ZUl0ZXJhdG9yQm94LmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0Lmgi
CisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25h
bWVzcGFjZSBJbmxpbmVJdGVyYXRvciB7CisKK0xpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yKExp
bmU6OlBhdGhWYXJpYW50JiYgcGF0aFZhcmlhbnQpCisgICAgOiBtX2xpbmUoV1RGTW92ZShwYXRo
VmFyaWFudCkpCit7Cit9CisKK0xpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yKGNvbnN0IExpbmUm
IGxpbmUpCisgICAgOiBtX2xpbmUobGluZSkKK3sKK30KKworYm9vbCBMaW5lSXRlcmF0b3I6OmF0
RW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2xpbmUubV9wYXRoVmFy
aWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5hdEVuZCgpOworICAg
IH0pOworfQorCitMaW5lSXRlcmF0b3ImIExpbmVJdGVyYXRvcjo6dHJhdmVyc2VOZXh0KCkKK3sK
KyAgICBXVEY6OnN3aXRjaE9uKG1fbGluZS5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7
CisgICAgICAgIHJldHVybiBwYXRoLnRyYXZlcnNlTmV4dCgpOworICAgIH0pOworICAgIHJldHVy
biAqdGhpczsKK30KKworTGluZUl0ZXJhdG9yJiBMaW5lSXRlcmF0b3I6OnRyYXZlcnNlUHJldmlv
dXMoKQoreworICAgIFdURjo6c3dpdGNoT24obV9saW5lLm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8m
IHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgudHJhdmVyc2VQcmV2aW91cygpOworICAgIH0p
OworICAgIHJldHVybiAqdGhpczsKK30KKworYm9vbCBMaW5lSXRlcmF0b3I6Om9wZXJhdG9yPT0o
Y29uc3QgTGluZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saW5lLm1f
cGF0aFZhcmlhbnQgPT0gb3RoZXIubV9saW5lLm1fcGF0aFZhcmlhbnQ7Cit9CisKK0xpbmVJdGVy
YXRvciBmaXJzdExpbmVGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQoreworI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorICAgIGlmIChhdXRvKiBsaW5lTGF5b3V0
ID0gZmxvdy5tb2Rlcm5MaW5lTGF5b3V0KCkpCisgICAgICAgIHJldHVybiBsaW5lTGF5b3V0LT5m
aXJzdExpbmUoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHsgTGluZUl0ZXJhdG9yTGVnYWN5UGF0
aCB7IGZsb3cuZmlyc3RSb290Qm94KCkgfSB9OworfQorCitMaW5lSXRlcmF0b3IgbGFzdExpbmVG
b3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQoreworI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQorICAgIGlmIChhdXRvKiBsaW5lTGF5b3V0ID0gZmxvdy5tb2Rlcm5M
aW5lTGF5b3V0KCkpCisgICAgICAgIHJldHVybiBsaW5lTGF5b3V0LT5sYXN0TGluZSgpOworI2Vu
ZGlmCisKKyAgICByZXR1cm4geyBMaW5lSXRlcmF0b3JMZWdhY3lQYXRoIHsgZmxvdy5sYXN0Um9v
dEJveCgpIH0gfTsKK30KKworTGluZUl0ZXJhdG9yIExpbmU6Om5leHQoKSBjb25zdAoreworICAg
IHJldHVybiBMaW5lSXRlcmF0b3IoKnRoaXMpLnRyYXZlcnNlTmV4dCgpOworfQorCitMaW5lSXRl
cmF0b3IgTGluZTo6cHJldmlvdXMoKSBjb25zdAoreworICAgIHJldHVybiBMaW5lSXRlcmF0b3Io
KnRoaXMpLnRyYXZlcnNlUHJldmlvdXMoKTsKK30KKworQm94SXRlcmF0b3IgTGluZTo6Zmlyc3RS
dW4oKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtd
KGF1dG8mIHBhdGgpIC0+IEJveEl0ZXJhdG9yIHsKKyAgICAgICAgcmV0dXJuIHsgcGF0aC5maXJz
dFJ1bigpIH07CisgICAgfSk7Cit9CisKK0JveEl0ZXJhdG9yIExpbmU6Omxhc3RSdW4oKSBjb25z
dAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBh
dGgpIC0+IEJveEl0ZXJhdG9yIHsKKyAgICAgICAgcmV0dXJuIHsgcGF0aC5sYXN0UnVuKCkgfTsK
KyAgICB9KTsKK30KKworQm94SXRlcmF0b3IgTGluZTo6bG9naWNhbFN0YXJ0UnVuKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRo
KSAtPiBCb3hJdGVyYXRvciB7CisgICAgICAgIHJldHVybiB7IHBhdGgubG9naWNhbFN0YXJ0UnVu
KCkgfTsKKyAgICB9KTsKK30KKworQm94SXRlcmF0b3IgTGluZTo6bG9naWNhbEVuZFJ1bigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYg
cGF0aCkgLT4gQm94SXRlcmF0b3IgeworICAgICAgICByZXR1cm4geyBwYXRoLmxvZ2ljYWxFbmRS
dW4oKSB9OworICAgIH0pOworfQorCitCb3hJdGVyYXRvciBMaW5lOjpsb2dpY2FsU3RhcnRSdW5X
aXRoTm9kZSgpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvIHJ1biA9IGxvZ2ljYWxTdGFydFJ1bigp
OyBydW47IHJ1bi50cmF2ZXJzZU5leHRPbkxpbmVJbkxvZ2ljYWxPcmRlcigpKSB7CisgICAgICAg
IGlmIChydW4tPnJlbmRlcmVyKCkubm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJ1bjsKKyAg
ICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworQm94SXRlcmF0b3IgTGluZTo6bG9naWNhbEVuZFJ1
bldpdGhOb2RlKCkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8gcnVuID0gbG9naWNhbEVuZFJ1bigp
OyBydW47IHJ1bi50cmF2ZXJzZVByZXZpb3VzT25MaW5lSW5Mb2dpY2FsT3JkZXIoKSkgeworICAg
ICAgICBpZiAocnVuLT5yZW5kZXJlcigpLm5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBydW47
CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK0JveEl0ZXJhdG9yIExpbmU6OmNsb3Nlc3RS
dW5Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRlbnRzLCBib29sIGVkaXRhYmxl
T25seSkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xvc2VzdFJ1bkZvckxvZ2ljYWxMZWZ0UG9zaXRp
b24oaXNIb3Jpem9udGFsKCkgPyBwb2ludEluQ29udGVudHMueCgpIDogcG9pbnRJbkNvbnRlbnRz
LnkoKSwgZWRpdGFibGVPbmx5KTsKK30KKworQm94SXRlcmF0b3IgTGluZTo6Y2xvc2VzdFJ1bkZv
ckxvZ2ljYWxMZWZ0UG9zaXRpb24oaW50IGxlZnRQb3NpdGlvbiwgYm9vbCBlZGl0YWJsZU9ubHkp
IGNvbnN0Cit7CisgICAgYXV0byBpc0VkaXRhYmxlID0gWyZdKGF1dG8gcnVuKSB7CisgICAgICAg
IHJldHVybiBydW4gJiYgcnVuLT5yZW5kZXJlcigpLm5vZGUoKSAmJiBydW4tPnJlbmRlcmVyKCku
bm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCk7CisgICAgfTsKKworICAgIGF1dG8gZmlyc3RSdW4g
PSB0aGlzLT5maXJzdFJ1bigpOworICAgIGF1dG8gbGFzdFJ1biA9IHRoaXMtPmxhc3RSdW4oKTsK
KworICAgIGlmIChmaXJzdFJ1biAhPSBsYXN0UnVuKSB7CisgICAgICAgIGlmIChmaXJzdFJ1bi0+
aXNMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgIGZpcnN0UnVuID0gZmlyc3RSdW4tPm5leHRPbkxp
bmVJZ25vcmluZ0xpbmVCcmVhaygpOworICAgICAgICBlbHNlIGlmIChsYXN0UnVuLT5pc0xpbmVC
cmVhaygpKQorICAgICAgICAgICAgbGFzdFJ1biA9IGxhc3RSdW4tPnByZXZpb3VzT25MaW5lSWdu
b3JpbmdMaW5lQnJlYWsoKTsKKyAgICB9CisKKyAgICBpZiAoZmlyc3RSdW4gPT0gbGFzdFJ1biAm
JiAoIWVkaXRhYmxlT25seSB8fCBpc0VkaXRhYmxlKGZpcnN0UnVuKSkpCisgICAgICAgIHJldHVy
biBmaXJzdFJ1bjsKKworICAgIGlmIChmaXJzdFJ1biAmJiBsZWZ0UG9zaXRpb24gPD0gZmlyc3RS
dW4tPmxvZ2ljYWxMZWZ0KCkgJiYgIWZpcnN0UnVuLT5yZW5kZXJlcigpLmlzTGlzdE1hcmtlcigp
ICYmICghZWRpdGFibGVPbmx5IHx8IGlzRWRpdGFibGUoZmlyc3RSdW4pKSkKKyAgICAgICAgcmV0
dXJuIGZpcnN0UnVuOworCisgICAgaWYgKGxhc3RSdW4gJiYgbGVmdFBvc2l0aW9uID49IGxhc3RS
dW4tPmxvZ2ljYWxSaWdodCgpICYmICFsYXN0UnVuLT5yZW5kZXJlcigpLmlzTGlzdE1hcmtlcigp
ICYmICghZWRpdGFibGVPbmx5IHx8IGlzRWRpdGFibGUobGFzdFJ1bikpKQorICAgICAgICByZXR1
cm4gbGFzdFJ1bjsKKworICAgIGF1dG8gY2xvc2VzdFJ1biA9IGxhc3RSdW47CisgICAgZm9yIChh
dXRvIHJ1biA9IGZpcnN0UnVuOyBydW47IHJ1biA9IHJ1bi50cmF2ZXJzZU5leHRPbkxpbmVJZ25v
cmluZ0xpbmVCcmVhaygpKSB7CisgICAgICAgIGlmICghcnVuLT5yZW5kZXJlcigpLmlzTGlzdE1h
cmtlcigpICYmICghZWRpdGFibGVPbmx5IHx8IGlzRWRpdGFibGUocnVuKSkpIHsKKyAgICAgICAg
ICAgIGlmIChsZWZ0UG9zaXRpb24gPCBydW4tPmxvZ2ljYWxSaWdodCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBydW47CisgICAgICAgICAgICBjbG9zZXN0UnVuID0gcnVuOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGNsb3Nlc3RSdW47Cit9CisKK2ludCBMaW5lOjpibG9ja0Rp
cmVjdGlvblBvaW50SW5MaW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWNvbnRhaW5pbmdCbG9j
aygpLnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IHN0ZDo6bWF4KHRvcCgp
LCBzZWxlY3Rpb25Ub3AoKSkgOiBzdGQ6Om1pbihib3R0b20oKSwgc2VsZWN0aW9uQm90dG9tKCkp
OworfQorCitMYXlvdXRVbml0IExpbmU6OnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5n
QmxvY2soKSBjb25zdAoreworICAgIHJldHVybiBjb250YWluaW5nQmxvY2soKS5hZGp1c3RTZWxl
Y3Rpb25Ub3BGb3JQcmVjZWRpbmdCbG9jayhzZWxlY3Rpb25Ub3AoKSk7Cit9CisKK0xheW91dFVu
aXQgTGluZTo6c2VsZWN0aW9uSGVpZ2h0QWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIHNlbGVjdGlvbkJvdHRvbSgp
IC0gc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpKTsKK30KKworUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBMaW5lOjpzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0Cit7Cisg
ICAgYXV0byYgYmxvY2sgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoYmxvY2suc2VsZWN0
aW9uU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6Ok5vbmUpCisgICAgICAgIHJldHVybiBSZW5kZXJP
YmplY3Q6Ok5vbmU7CisKKyAgICBhdXRvIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpOb25lOworICAg
IGZvciAoYXV0byBib3ggPSBmaXJzdFJ1bigpOyBib3g7IGJveC50cmF2ZXJzZU5leHRPbkxpbmUo
KSkgeworICAgICAgICBhdXRvIGJveFN0YXRlID0gYm94LT5zZWxlY3Rpb25TdGF0ZSgpOworICAg
ICAgICBpZiAoKGJveFN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0
ICYmIHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkVuZCkKKyAgICAgICAg
ICAgIHx8IChib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQgJiYg
c3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQpKQorICAgICAgICAg
ICAgc3RhdGUgPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpCb3RoOworICAgICAgICBl
bHNlIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lIHx8ICgo
Ym94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQgfHwgYm94U3Rh
dGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kKQorICAgICAgICAgICAgJiYg
KHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUgfHwgc3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlKSkpCisgICAgICAgICAgICBzdGF0
ZSA9IGJveFN0YXRlOworICAgICAgICBlbHNlIGlmIChib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlOjpOb25lICYmIHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhdGU6OlN0YXJ0KSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgcGFzdCB0aGUgZW5kIG9mIHRo
ZSBzZWxlY3Rpb24uCisgICAgICAgICAgICBzdGF0ZSA9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhdGU6OkJvdGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVj
dDo6SGlnaGxpZ2h0U3RhdGU6OkJvdGgpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIHN0YXRlOworfQorCitCb3hJdGVyYXRvciBMaW5lOjpmaXJzdFNlbGVjdGVkQm94KCkg
Y29uc3QKK3sKKyAgICBmb3IgKGF1dG8gYm94ID0gZmlyc3RSdW4oKTsgYm94OyBib3gudHJhdmVy
c2VOZXh0T25MaW5lKCkpIHsKKyAgICAgICAgaWYgKGJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKQorICAgICAgICAgICAgcmV0dXJuIGJv
eDsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworQm94SXRlcmF0b3IgTGluZTo6bGFzdFNl
bGVjdGVkQm94KCkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8gYm94ID0gbGFzdFJ1bigpOyBib3g7
IGJveC50cmF2ZXJzZVByZXZpb3VzT25MaW5lKCkpIHsKKyAgICAgICAgaWYgKGJveC0+c2VsZWN0
aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKQorICAgICAg
ICAgICAgcmV0dXJuIGJveDsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworfQorfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0
b3JMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0
b3JMaW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTJmY2U1Y2I3Yzg2YjBlZmJhY2EyYTQ2YjhhMTk5NjI2ZmI2
ODg1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9JbmxpbmVJdGVyYXRvckxpbmUuaApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRm9udEJhc2VsaW5lLmgiCisjaW5jbHVkZSAiSW5saW5l
SXRlcmF0b3JMaW5lTGVnYWN5UGF0aC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZU1v
ZGVyblBhdGguaCIKKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgSW5saW5lSXRlcmF0b3IgeworCitjbGFzcyBMaW5lSXRlcmF0b3I7Citj
bGFzcyBQYXRoSXRlcmF0b3I7CitjbGFzcyBCb3hJdGVyYXRvcjsKKworc3RydWN0IEVuZExpbmVJ
dGVyYXRvciB7IH07CisKK2NsYXNzIExpbmUgeworcHVibGljOgorICAgIHVzaW5nIFBhdGhWYXJp
YW50ID0gVmFyaWFudDwKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAg
ICAgICAgTGluZUl0ZXJhdG9yTW9kZXJuUGF0aCwKKyNlbmRpZgorICAgICAgICBMaW5lSXRlcmF0
b3JMZWdhY3lQYXRoCisgICAgPjsKKworICAgIExpbmUoUGF0aFZhcmlhbnQmJik7CisKKyAgICBM
YXlvdXRVbml0IHRvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgYm90dG9tKCkgY29uc3Q7Cisg
ICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHNlbGVj
dGlvblRvcEZvckhpdFRlc3RpbmcoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJv
dHRvbSgpIGNvbnN0OworICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0KCkgY29uc3Q7Cisg
ICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkgY29u
c3Q7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHRBZGp1c3RlZEZvclByZWNlZGluZ0Js
b2NrKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsaW5lQm94VG9wKCkgY29uc3Q7CisgICAgTGF5
b3V0VW5pdCBsaW5lQm94Qm90dG9tKCkgY29uc3Q7CisKKyAgICBMYXlvdXRSZWN0IHNlbGVjdGlv
blJlY3QoKSBjb25zdDsKKyAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlv
blN0YXRlKCkgY29uc3Q7CisKKyAgICBmbG9hdCB5KCkgY29uc3Q7CisgICAgZmxvYXQgY29udGVu
dExvZ2ljYWxMZWZ0KCkgY29uc3Q7CisgICAgZmxvYXQgY29udGVudExvZ2ljYWxSaWdodCgpIGNv
bnN0OworICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdDsKKyAgICBmbG9hdCBs
b2dpY2FsSGVpZ2h0KCkgY29uc3Q7CisKKyAgICBpbnQgYmxvY2tEaXJlY3Rpb25Qb2ludEluTGlu
ZSgpIGNvbnN0OworCisgICAgYm9vbCBpc0hvcml6b250YWwoKSBjb25zdDsKKworICAgIEZvbnRC
YXNlbGluZSBiYXNlbGluZVR5cGUoKSBjb25zdDsKKworICAgIGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgY29udGFpbmluZ0Jsb2NrKCkgY29uc3Q7CisgICAgY29uc3QgTGVnYWN5Um9vdElubGluZUJv
eCogbGVnYWN5Um9vdElubGluZUJveCgpIGNvbnN0OworCisgICAgYm9vbCBpc0ZpcnN0KCkgY29u
c3Q7CisKKyAgICBCb3hJdGVyYXRvciBmaXJzdFJ1bigpIGNvbnN0OworICAgIEJveEl0ZXJhdG9y
IGxhc3RSdW4oKSBjb25zdDsKKworICAgIExpbmVJdGVyYXRvciBuZXh0KCkgY29uc3Q7CisgICAg
TGluZUl0ZXJhdG9yIHByZXZpb3VzKCkgY29uc3Q7CisKKyAgICBCb3hJdGVyYXRvciBjbG9zZXN0
UnVuRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250ZW50cywgYm9vbCBlZGl0YWJs
ZU9ubHkpIGNvbnN0OworICAgIEJveEl0ZXJhdG9yIGNsb3Nlc3RSdW5Gb3JMb2dpY2FsTGVmdFBv
c2l0aW9uKGludCBwb3NpdGlvbiwgYm9vbCBlZGl0YWJsZU9ubHkgPSBmYWxzZSkgY29uc3Q7CisK
KyAgICBCb3hJdGVyYXRvciBsb2dpY2FsU3RhcnRSdW4oKSBjb25zdDsKKyAgICBCb3hJdGVyYXRv
ciBsb2dpY2FsRW5kUnVuKCkgY29uc3Q7CisgICAgQm94SXRlcmF0b3IgbG9naWNhbFN0YXJ0UnVu
V2l0aE5vZGUoKSBjb25zdDsKKyAgICBCb3hJdGVyYXRvciBsb2dpY2FsRW5kUnVuV2l0aE5vZGUo
KSBjb25zdDsKKyAgICAKKyAgICBCb3hJdGVyYXRvciBmaXJzdFNlbGVjdGVkQm94KCkgY29uc3Q7
CisgICAgQm94SXRlcmF0b3IgbGFzdFNlbGVjdGVkQm94KCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIExpbmVJdGVyYXRvcjsKKworICAgIFBhdGhWYXJpYW50IG1fcGF0aFZh
cmlhbnQ7Cit9OworCitjbGFzcyBMaW5lSXRlcmF0b3IgeworcHVibGljOgorICAgIExpbmVJdGVy
YXRvcigpIDogbV9saW5lKExpbmVJdGVyYXRvckxlZ2FjeVBhdGggeyBudWxscHRyIH0pIHsgfTsK
KyAgICBMaW5lSXRlcmF0b3IoY29uc3QgTGVnYWN5Um9vdElubGluZUJveCogcm9vdElubGluZUJv
eCkgOiBtX2xpbmUoTGluZUl0ZXJhdG9yTGVnYWN5UGF0aCB7IHJvb3RJbmxpbmVCb3ggfSkgeyB9
OworICAgIExpbmVJdGVyYXRvcihMaW5lOjpQYXRoVmFyaWFudCYmKTsKKyAgICBMaW5lSXRlcmF0
b3IoY29uc3QgTGluZSYpOworCisgICAgTGluZUl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyByZXR1
cm4gdHJhdmVyc2VOZXh0KCk7IH0KKyAgICBMaW5lSXRlcmF0b3ImIHRyYXZlcnNlTmV4dCgpOwor
ICAgIExpbmVJdGVyYXRvciYgdHJhdmVyc2VQcmV2aW91cygpOworCisgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgTGluZUl0ZXJhdG9yJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IExpbmVJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oRW5kTGluZUl0ZXJhdG9yKSBjb25zdCB7IHJldHVy
biBhdEVuZCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KEVuZExpbmVJdGVyYXRvcikgY29uc3Qg
eyByZXR1cm4gIWF0RW5kKCk7IH0KKworICAgIGNvbnN0IExpbmUmIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZTsgfQorICAgIGNvbnN0IExpbmUqIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiAmbV9saW5lOyB9CisKKyAgICBib29sIGF0RW5kKCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgTGluZSBtX2xpbmU7Cit9OworCitMaW5lSXRlcmF0b3IgZmlyc3RMaW5lRm9yKGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYpOworTGluZUl0ZXJhdG9yIGxhc3RMaW5lRm9yKGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYpOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitpbmxpbmUgTGluZTo6TGluZShQYXRoVmFyaWFudCYmIHBhdGgpCisgICAg
OiBtX3BhdGhWYXJpYW50KFdURk1vdmUocGF0aCkpCit7Cit9CisKK2lubGluZSBMYXlvdXRVbml0
IExpbmU6OnRvcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFy
aWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC50b3AoKTsK
KyAgICB9KTsKK30KKworaW5saW5lIExheW91dFVuaXQgTGluZTo6Ym90dG9tKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBw
YXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmJvdHRvbSgpOworICAgIH0pOworfQorCitpbmxp
bmUgTGF5b3V0VW5pdCBMaW5lOjpzZWxlY3Rpb25Ub3AoKSBjb25zdAoreworICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKKyAgICAg
ICAgcmV0dXJuIHBhdGguc2VsZWN0aW9uVG9wKCk7CisgICAgfSk7Cit9CisKK2lubGluZSBMYXlv
dXRVbml0IExpbmU6OnNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsK
KyAgICAgICAgcmV0dXJuIHBhdGguc2VsZWN0aW9uVG9wRm9ySGl0VGVzdGluZygpOworICAgIH0p
OworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBMaW5lOjpzZWxlY3Rpb25Cb3R0b20oKSBjb25zdAor
eworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8m
IHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguc2VsZWN0aW9uQm90dG9tKCk7CisgICAgfSk7
Cit9CisKK2lubGluZSBMYXlvdXRVbml0IExpbmU6OnNlbGVjdGlvbkhlaWdodCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNlbGVjdGlvbkJvdHRvbSgpIC0gc2VsZWN0aW9uVG9wKCk7Cit9CisKK2lu
bGluZSBMYXlvdXRVbml0IExpbmU6OmxpbmVCb3hUb3AoKSBjb25zdAoreworICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKKyAgICAg
ICAgcmV0dXJuIHBhdGgubGluZUJveFRvcCgpOworICAgIH0pOworfQorCitpbmxpbmUgTGF5b3V0
VW5pdCBMaW5lOjpsaW5lQm94Qm90dG9tKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVy
biBwYXRoLmxpbmVCb3hCb3R0b20oKTsKKyAgICB9KTsKK30KKworaW5saW5lIExheW91dFJlY3Qg
TGluZTo6c2VsZWN0aW9uUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgTGF5b3V0UG9pbnQg
eyBjb250ZW50TG9naWNhbExlZnQoKSwgc2VsZWN0aW9uVG9wKCkgfSwgTGF5b3V0UG9pbnQgeyBj
b250ZW50TG9naWNhbFJpZ2h0KCksIHNlbGVjdGlvbkJvdHRvbSgpIH0gfTsKK30KKworaW5saW5l
IGZsb2F0IExpbmU6OnkoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0
aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgueSgp
OworICAgIH0pOworfQorCitpbmxpbmUgZmxvYXQgTGluZTo6Y29udGVudExvZ2ljYWxMZWZ0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25z
dCBhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmNvbnRlbnRMb2dpY2FsTGVmdCgp
OworICAgIH0pOworfQorCitpbmxpbmUgZmxvYXQgTGluZTo6Y29udGVudExvZ2ljYWxSaWdodCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29u
c3QgYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5jb250ZW50TG9naWNhbFJpZ2h0
KCk7CisgICAgfSk7Cit9CisKK2lubGluZSBmbG9hdCBMaW5lOjpjb250ZW50TG9naWNhbFdpZHRo
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGVudExvZ2ljYWxSaWdodCgpIC0gY29udGVudExv
Z2ljYWxMZWZ0KCk7Cit9CisKK2lubGluZSBmbG9hdCBMaW5lOjpsb2dpY2FsSGVpZ2h0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBh
dXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmxvZ2ljYWxIZWlnaHQoKTsKKyAgICB9
KTsKK30KKworaW5saW5lIGJvb2wgTGluZTo6aXNIb3Jpem9udGFsKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7
CisgICAgICAgIHJldHVybiBwYXRoLmlzSG9yaXpvbnRhbCgpOworICAgIH0pOworfQorCitpbmxp
bmUgRm9udEJhc2VsaW5lIExpbmU6OmJhc2VsaW5lVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgeworICAg
ICAgICByZXR1cm4gcGF0aC5iYXNlbGluZVR5cGUoKTsKKyAgICB9KTsKK30KKworaW5saW5lIGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYgTGluZTo6Y29udGFpbmluZ0Jsb2NrKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRo
KSAtPiBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIHsKKyAgICAgICAgcmV0dXJuIHBhdGguY29udGFp
bmluZ0Jsb2NrKCk7CisgICAgfSk7Cit9CisKK2lubGluZSBjb25zdCBMZWdhY3lSb290SW5saW5l
Qm94KiBMaW5lOjpsZWdhY3lSb290SW5saW5lQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CisgICAgICAg
IHJldHVybiBwYXRoLmxlZ2FjeVJvb3RJbmxpbmVCb3goKTsKKyAgICB9KTsKK30KKworaW5saW5l
IGJvb2wgTGluZTo6aXNGaXJzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFwcmV2aW91cygpOwor
fQorCit9Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9JbmxpbmVJdGVyYXRvckxpbmVMZWdhY3lQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMaW5lTGVnYWN5UGF0aC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkx
MzhlNTE3Y2IxMzVkNDkzNDQ5M2M5ZDg4NzVhYWNhMzRjNTlmMjAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMaW5lTGVn
YWN5UGF0aC5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaCIKKyNpbmNsdWRlICJMYXlv
dXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQuaCIKKyNpbmNsdWRlICJMZWdhY3lSb290SW5saW5l
Qm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBJbmxpbmVJdGVyYXRvciB7
CisKK2NsYXNzIExpbmVJdGVyYXRvckxlZ2FjeVBhdGggeworcHVibGljOgorICAgIExpbmVJdGVy
YXRvckxlZ2FjeVBhdGgoY29uc3QgTGVnYWN5Um9vdElubGluZUJveCogcm9vdElubGluZUJveCkK
KyAgICAgICAgOiBtX3Jvb3RJbmxpbmVCb3gocm9vdElubGluZUJveCkKKyAgICB7CisgICAgfQor
ICAgIExpbmVJdGVyYXRvckxlZ2FjeVBhdGgoTGluZUl0ZXJhdG9yTGVnYWN5UGF0aCYmKSA9IGRl
ZmF1bHQ7CisgICAgTGluZUl0ZXJhdG9yTGVnYWN5UGF0aChjb25zdCBMaW5lSXRlcmF0b3JMZWdh
Y3lQYXRoJikgPSBkZWZhdWx0OworICAgIExpbmVJdGVyYXRvckxlZ2FjeVBhdGgmIG9wZXJhdG9y
PShjb25zdCBMaW5lSXRlcmF0b3JMZWdhY3lQYXRoJikgPSBkZWZhdWx0OworICAgIExpbmVJdGVy
YXRvckxlZ2FjeVBhdGgmIG9wZXJhdG9yPShMaW5lSXRlcmF0b3JMZWdhY3lQYXRoJiYpID0gZGVm
YXVsdDsKKworICAgIExheW91dFVuaXQgdG9wKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5l
Qm94LT5saW5lVG9wKCk7IH0KKyAgICBMYXlvdXRVbml0IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJu
IG1fcm9vdElubGluZUJveC0+bGluZUJvdHRvbSgpOyB9CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rp
b25Ub3AoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPnNlbGVjdGlvblRvcCgpOyB9
CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3BGb3JIaXRUZXN0aW5nKCkgY29uc3QgeyByZXR1
cm4gbV9yb290SW5saW5lQm94LT5zZWxlY3Rpb25Ub3AoTGVnYWN5Um9vdElubGluZUJveDo6Rm9y
SGl0VGVzdGluZzo6WWVzKTsgfQorICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tKCkgY29u
c3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5zZWxlY3Rpb25Cb3R0b20oKTsgfQorICAgIExh
eW91dFVuaXQgbGluZUJveFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bGlu
ZUJveFRvcCgpOyB9CisgICAgTGF5b3V0VW5pdCBsaW5lQm94Qm90dG9tKCkgY29uc3QgeyByZXR1
cm4gbV9yb290SW5saW5lQm94LT5saW5lQm94Qm90dG9tKCk7IH0KKworICAgIGZsb2F0IHkoKSBj
b25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPnkoKTsgfQorICAgIGZsb2F0IGNvbnRlbnRM
b2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bG9naWNhbExlZnQo
KTsgfQorICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3Jv
b3RJbmxpbmVCb3gtPmxvZ2ljYWxSaWdodCgpOyB9CisgICAgZmxvYXQgbG9naWNhbEhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bG9naWNhbEhlaWdodCgpOyB9CisgICAg
Ym9vbCBpc0hvcml6b250YWwoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmlzSG9y
aXpvbnRhbCgpOyB9CisgICAgRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcm9vdElubGluZUJveC0+YmFzZWxpbmVUeXBlKCk7IH0KKworICAgIGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYgY29udGFpbmluZ0Jsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5l
Qm94LT5ibG9ja0Zsb3coKTsgfQorICAgIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gqIGxlZ2Fj
eVJvb3RJbmxpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3g7IH0KKworICAg
IHZvaWQgdHJhdmVyc2VOZXh0KCkKKyAgICB7CisgICAgICAgIG1fcm9vdElubGluZUJveCA9IG1f
cm9vdElubGluZUJveC0+bmV4dFJvb3RCb3goKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYXZlcnNl
UHJldmlvdXMoKQorICAgIHsKKyAgICAgICAgbV9yb290SW5saW5lQm94ID0gbV9yb290SW5saW5l
Qm94LT5wcmV2Um9vdEJveCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBM
aW5lSXRlcmF0b3JMZWdhY3lQYXRoJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5l
Qm94ID09IG90aGVyLm1fcm9vdElubGluZUJveDsgfQorCisgICAgYm9vbCBhdEVuZCgpIGNvbnN0
IHsgcmV0dXJuICFtX3Jvb3RJbmxpbmVCb3g7IH0KKworICAgIEJveEl0ZXJhdG9yTGVnYWN5UGF0
aCBmaXJzdFJ1bigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geyBtX3Jvb3RJbmxpbmVC
b3gtPmZpcnN0TGVhZkRlc2NlbmRhbnQoKSB9OworICAgIH0KKworICAgIEJveEl0ZXJhdG9yTGVn
YWN5UGF0aCBsYXN0UnVuKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB7IG1fcm9vdElu
bGluZUJveC0+bGFzdExlYWZEZXNjZW5kYW50KCkgfTsKKyAgICB9CisKKworICAgIEJveEl0ZXJh
dG9yTGVnYWN5UGF0aCBsb2dpY2FsU3RhcnRSdW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHsgKm1fcm9vdElubGluZUJveCwgQm94SXRlcmF0b3JMZWdhY3lQYXRoOjpMb2dpY2FsT3Jk
ZXI6OlN0YXJ0IH07CisgICAgfQorCisgICAgQm94SXRlcmF0b3JMZWdhY3lQYXRoIGxvZ2ljYWxF
bmRSdW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsgKm1fcm9vdElubGluZUJveCwg
Qm94SXRlcmF0b3JMZWdhY3lQYXRoOjpMb2dpY2FsT3JkZXI6OkVuZCB9OworICAgIH0KKworcHJp
dmF0ZToKKyAgICBjb25zdCBMZWdhY3lSb290SW5saW5lQm94KiBtX3Jvb3RJbmxpbmVCb3g7Cit9
OworCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
SW5saW5lSXRlcmF0b3JMaW5lTW9kZXJuUGF0aC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZU1vZGVyblBhdGguaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZDM4
NzliMGE1ZTU4NGI2NzBhNGQ4Mjk5Yjc1YjQxMTY2ZGYxYjcwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZU1vZGVy
blBhdGguaApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJJbmxpbmVJ
dGVyYXRvckJveE1vZGVyblBhdGguaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbklubGlu
ZUNvbnRlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIElubGluZUl0ZXJhdG9yIHsKKworY2xhc3MgQm94SXRlcmF0b3JN
b2Rlcm5QYXRoOworCitjbGFzcyBMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoIHsKK3B1YmxpYzoKKyAg
ICBMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoKGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVD
b250ZW50JiBpbmxpbmVDb250ZW50LCBzaXplX3QgbGluZUluZGV4KQorICAgICAgICA6IG1faW5s
aW5lQ29udGVudCgmaW5saW5lQ29udGVudCkKKyAgICAgICAgLCBtX2xpbmVJbmRleChsaW5lSW5k
ZXgpCisgICAgeworICAgICAgICBBU1NFUlQobGluZUluZGV4IDw9IGxpbmVzKCkuc2l6ZSgpKTsK
KyAgICB9CisgICAgTGluZUl0ZXJhdG9yTW9kZXJuUGF0aChMaW5lSXRlcmF0b3JNb2Rlcm5QYXRo
JiYpID0gZGVmYXVsdDsKKyAgICBMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoKGNvbnN0IExpbmVJdGVy
YXRvck1vZGVyblBhdGgmKSA9IGRlZmF1bHQ7CisgICAgTGluZUl0ZXJhdG9yTW9kZXJuUGF0aCYg
b3BlcmF0b3I9KGNvbnN0IExpbmVJdGVyYXRvck1vZGVyblBhdGgmKSA9IGRlZmF1bHQ7CisgICAg
TGluZUl0ZXJhdG9yTW9kZXJuUGF0aCYgb3BlcmF0b3I9KExpbmVJdGVyYXRvck1vZGVyblBhdGgm
JikgPSBkZWZhdWx0OworCisgICAgTGF5b3V0VW5pdCB0b3AoKSBjb25zdCB7IHJldHVybiBMYXlv
dXRVbml0Ojpmcm9tRmxvYXRSb3VuZChsaW5lKCkuZW5jbG9zaW5nQ29udGVudFRvcCgpKTsgfQor
ICAgIExheW91dFVuaXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZs
b2F0Um91bmQobGluZSgpLmVuY2xvc2luZ0NvbnRlbnRCb3R0b20oKSk7IH0KKyAgICBMYXlvdXRV
bml0IGxpbmVCb3hUb3AoKSBjb25zdCB7IHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3Vu
ZChsaW5lKCkubGluZUJveFRvcCgpKTsgfQorICAgIExheW91dFVuaXQgbGluZUJveEJvdHRvbSgp
IGNvbnN0IHsgcmV0dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdFJvdW5kKGxpbmUoKS5saW5lQm94
Qm90dG9tKCkpOyB9CisKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCgpIGNvbnN0IHsgcmV0
dXJuICFtX2xpbmVJbmRleCA/IHRvcCgpIDogTGluZUl0ZXJhdG9yTW9kZXJuUGF0aCgqbV9pbmxp
bmVDb250ZW50LCBtX2xpbmVJbmRleCAtIDEpLnNlbGVjdGlvbkJvdHRvbSgpOyB9CisgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGUgY29udGFpbmluZ0Jsb2NrKCkuYm9yZGVyQW5kUGFkZGluZ0JlZm9y
ZSgpIG9mZnNldCBhZnRlciByZXRpcmluZyBsZWdhY3kgbGluZSBsYXlvdXQuIEl0IGFsc28gcmVx
dWlyZXMgY2hhbmdlcyBpbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50IHRvIGZpbmQgdGhl
IGZpcnN0IGxpbmUgd2l0aCBvZmZzZXQuCisgICAgLy8gLSB0aGUgImJlZm9yZSIgdmFsdWUgaXMg
YWxyZWFkeSBmYWN0b3JlZCBpbiB0byB0aGUgbGluZSBvZmZzZXQKKyAgICAvLyAtIHRoaXMgbG9n
aWMgbmVnYXRlcyB0aGUgZmlyc3QgbGluZSdzIG5hdHVyYWwgb2Zmc2V0IChlLmcuIGJsb2NrIGhh
cyBubyBib3JkZXIvcGFkZGluZyBidXQgdGhlIGZpcnN0IGxpbmUgaGFzIGEgY29tcHV0ZWQgb2Zm
c2V0KS4KKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcoKSBjb25zdCB7
IHJldHVybiAhbV9saW5lSW5kZXggPyBjb250YWluaW5nQmxvY2soKS5ib3JkZXJBbmRQYWRkaW5n
QmVmb3JlKCkgOiBzZWxlY3Rpb25Ub3AoKTsgfTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG9y
IHJlcGxhY2UuCisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdCB7IHJldHVy
biBib3R0b20oKTsgfQorCisgICAgZmxvYXQgY29udGVudExvZ2ljYWxMZWZ0KCkgY29uc3QgeyBy
ZXR1cm4gbGluZSgpLmxpbmVCb3hMZWZ0KCkgKyBsaW5lKCkuY29udGVudExlZnQoKTsgfQorICAg
IGZsb2F0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBjb250ZW50TG9naWNh
bExlZnQoKSArIGxpbmUoKS5jb250ZW50V2lkdGgoKTsgfQorICAgIGZsb2F0IHkoKSBjb25zdCB7
IHJldHVybiBsaW5lQm94VG9wKCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbGluZUJveEJvdHRvbSgpIC0gbGluZUJveFRvcCgpOyB9CisgICAgYm9vbCBpc0hv
cml6b250YWwoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgRm9udEJhc2VsaW5lIGJhc2Vs
aW5lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFscGhhYmV0aWNCYXNlbGluZTsgfQorCisgICAgY29u
c3QgUmVuZGVyQmxvY2tGbG93JiBjb250YWluaW5nQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2lu
bGluZUNvbnRlbnQtPmNvbnRhaW5pbmdCbG9jaygpOyB9CisgICAgY29uc3QgTGVnYWN5Um9vdElu
bGluZUJveCogbGVnYWN5Um9vdElubGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0K
KworICAgIHZvaWQgdHJhdmVyc2VOZXh0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghYXRFbmQo
KSk7CisKKyAgICAgICAgKyttX2xpbmVJbmRleDsKKyAgICB9CisKKyAgICB2b2lkIHRyYXZlcnNl
UHJldmlvdXMoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFhdEVuZCgpKTsKKworICAgICAgICBp
ZiAoIW1fbGluZUluZGV4KSB7CisgICAgICAgICAgICBzZXRBdEVuZCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLS1tX2xpbmVJbmRleDsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZUl0ZXJhdG9yTW9kZXJuUGF0aCYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGVudCA9PSBvdGhlci5tX2lubGluZUNvbnRlbnQgJiYg
bV9saW5lSW5kZXggPT0gb3RoZXIubV9saW5lSW5kZXg7IH0KKworICAgIGJvb2wgYXRFbmQoKSBj
b25zdCB7IHJldHVybiBtX2xpbmVJbmRleCA9PSBsaW5lcygpLnNpemUoKTsgfQorCisgICAgQm94
SXRlcmF0b3JNb2Rlcm5QYXRoIGZpcnN0UnVuKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
bGluZSgpLmJveENvdW50KCkpCisgICAgICAgICAgICByZXR1cm4geyAqbV9pbmxpbmVDb250ZW50
IH07CisgICAgICAgIGF1dG8gcnVuSXRlcmF0b3IgPSBCb3hJdGVyYXRvck1vZGVyblBhdGggeyAq
bV9pbmxpbmVDb250ZW50LCBsaW5lKCkuZmlyc3RCb3hJbmRleCgpIH07CisgICAgICAgIGlmIChy
dW5JdGVyYXRvci5ib3goKS5pc0lubGluZUJveCgpKQorICAgICAgICAgICAgcnVuSXRlcmF0b3Iu
dHJhdmVyc2VOZXh0T25MaW5lKCk7CisgICAgICAgIHJldHVybiBydW5JdGVyYXRvcjsKKyAgICB9
CisKKyAgICBCb3hJdGVyYXRvck1vZGVyblBhdGggbGFzdFJ1bigpIGNvbnN0CisgICAgeworICAg
ICAgICBhdXRvIGJveENvdW50ID0gbGluZSgpLmJveENvdW50KCk7CisgICAgICAgIGlmICghYm94
Q291bnQpCisgICAgICAgICAgICByZXR1cm4geyAqbV9pbmxpbmVDb250ZW50IH07CisgICAgICAg
IGF1dG8gcnVuSXRlcmF0b3IgPSBCb3hJdGVyYXRvck1vZGVyblBhdGggeyAqbV9pbmxpbmVDb250
ZW50LCBsaW5lKCkuZmlyc3RCb3hJbmRleCgpICsgYm94Q291bnQgLSAxIH07CisgICAgICAgIGlm
IChydW5JdGVyYXRvci5ib3goKS5pc0lubGluZUJveCgpKQorICAgICAgICAgICAgcnVuSXRlcmF0
b3IudHJhdmVyc2VQcmV2aW91c09uTGluZSgpOworICAgICAgICByZXR1cm4gcnVuSXRlcmF0b3I7
CisgICAgfQorCisgICAgQm94SXRlcmF0b3JNb2Rlcm5QYXRoIGxvZ2ljYWxTdGFydFJ1bigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gZmlyc3RSdW4oKTsKKyAgICB9CisKKyAgICBCb3hJ
dGVyYXRvck1vZGVyblBhdGggbG9naWNhbEVuZFJ1bigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbGFzdFJ1bigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHNldEF0RW5kKCkg
eyBtX2xpbmVJbmRleCA9IGxpbmVzKCkuc2l6ZSgpOyB9CisKKyAgICBjb25zdCBMYXlvdXRJbnRl
Z3JhdGlvbjo6SW5saW5lQ29udGVudDo6TGluZXMmIGxpbmVzKCkgY29uc3QgeyByZXR1cm4gbV9p
bmxpbmVDb250ZW50LT5saW5lczsgfQorICAgIGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5l
JiBsaW5lKCkgY29uc3QgeyByZXR1cm4gbGluZXMoKVttX2xpbmVJbmRleF07IH0KKworICAgIFJl
ZlB0cjxjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudD4gbV9pbmxpbmVDb250
ZW50OworICAgIHNpemVfdCBtX2xpbmVJbmRleCB7IDAgfTsKK307CisKK30KK30KKworI2VuZGlm
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbklubGluZUNvbnRlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudC5jcHAKaW5kZXggMzQwZGEzMmYy
NGI0N2IxNDA5ZjMzMDhmOTg0MWRiM2QyZmEzYmVlZC4uYTg2NDU4ZTVhNmRkN2UzN2ExOWY0Mjcz
NDQxMjkyMDdjOGE1YzE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudC5j
cHAKQEAgLTI4LDggKzI4LDggQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05U
RVhUKQogCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKICNpbmNsdWRlICJMYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlRleHRQYWludGVyLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmIzZTU5OGRkY2JmZWMwYjBhZjA2ZWQ1ODA5
ZTE0ZDVkNjM3MDE0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxp
bmVJdGVyYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJ
dGVyYXRvci5oIgotCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgiCi0j
aW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRl
ckJsb2NrRmxvdy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0SW50
ZWdyYXRpb24gewotCi1MaW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvcihQYXRoTGluZTo6UGF0aFZh
cmlhbnQmJiBwYXRoVmFyaWFudCkKLSAgICA6IG1fbGluZShXVEZNb3ZlKHBhdGhWYXJpYW50KSkK
LXsKLX0KLQotTGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3IoY29uc3QgUGF0aExpbmUmIGxpbmUp
Ci0gICAgOiBtX2xpbmUobGluZSkKLXsKLX0KLQotYm9vbCBMaW5lSXRlcmF0b3I6OmF0RW5kKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2xpbmUubV9wYXRoVmFyaWFudCwg
W10oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5hdEVuZCgpOwotICAgIH0pOwot
fQotCi1MaW5lSXRlcmF0b3ImIExpbmVJdGVyYXRvcjo6dHJhdmVyc2VOZXh0KCkKLXsKLSAgICBX
VEY6OnN3aXRjaE9uKG1fbGluZS5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7Ci0gICAg
ICAgIHJldHVybiBwYXRoLnRyYXZlcnNlTmV4dCgpOwotICAgIH0pOwotICAgIHJldHVybiAqdGhp
czsKLX0KLQotTGluZUl0ZXJhdG9yJiBMaW5lSXRlcmF0b3I6OnRyYXZlcnNlUHJldmlvdXMoKQot
ewotICAgIFdURjo6c3dpdGNoT24obV9saW5lLm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKLSAgICAgICAgcmV0dXJuIHBhdGgudHJhdmVyc2VQcmV2aW91cygpOwotICAgIH0pOwotICAg
IHJldHVybiAqdGhpczsKLX0KLQotYm9vbCBMaW5lSXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3Qg
TGluZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9saW5lLm1fcGF0aFZh
cmlhbnQgPT0gb3RoZXIubV9saW5lLm1fcGF0aFZhcmlhbnQ7Ci19Ci0KLUxpbmVJdGVyYXRvciBm
aXJzdExpbmVGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQotewotI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQotICAgIGlmIChhdXRvKiBsaW5lTGF5b3V0ID0gZmxv
dy5tb2Rlcm5MaW5lTGF5b3V0KCkpCi0gICAgICAgIHJldHVybiBsaW5lTGF5b3V0LT5maXJzdExp
bmUoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHsgTGluZUl0ZXJhdG9yTGVnYWN5UGF0aCB7IGZs
b3cuZmlyc3RSb290Qm94KCkgfSB9OwotfQotCi1MaW5lSXRlcmF0b3IgbGFzdExpbmVGb3IoY29u
c3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQotewotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQotICAgIGlmIChhdXRvKiBsaW5lTGF5b3V0ID0gZmxvdy5tb2Rlcm5MaW5lTGF5
b3V0KCkpCi0gICAgICAgIHJldHVybiBsaW5lTGF5b3V0LT5sYXN0TGluZSgpOwotI2VuZGlmCi0K
LSAgICByZXR1cm4geyBMaW5lSXRlcmF0b3JMZWdhY3lQYXRoIHsgZmxvdy5sYXN0Um9vdEJveCgp
IH0gfTsKLX0KLQotTGluZUl0ZXJhdG9yIFBhdGhMaW5lOjpuZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gTGluZUl0ZXJhdG9yKCp0aGlzKS50cmF2ZXJzZU5leHQoKTsKLX0KLQotTGluZUl0ZXJh
dG9yIFBhdGhMaW5lOjpwcmV2aW91cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExpbmVJdGVyYXRv
cigqdGhpcykudHJhdmVyc2VQcmV2aW91cygpOwotfQotCi1SdW5JdGVyYXRvciBQYXRoTGluZTo6
Zmlyc3RSdW4oKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlh
bnQsIFtdKGF1dG8mIHBhdGgpIC0+IFJ1bkl0ZXJhdG9yIHsKLSAgICAgICAgcmV0dXJuIHsgcGF0
aC5maXJzdFJ1bigpIH07Ci0gICAgfSk7Ci19Ci0KLVJ1bkl0ZXJhdG9yIFBhdGhMaW5lOjpsYXN0
UnVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBb
XShhdXRvJiBwYXRoKSAtPiBSdW5JdGVyYXRvciB7Ci0gICAgICAgIHJldHVybiB7IHBhdGgubGFz
dFJ1bigpIH07Ci0gICAgfSk7Ci19Ci0KLVJ1bkl0ZXJhdG9yIFBhdGhMaW5lOjpsb2dpY2FsU3Rh
cnRSdW4oKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQs
IFtdKGF1dG8mIHBhdGgpIC0+IFJ1bkl0ZXJhdG9yIHsKLSAgICAgICAgcmV0dXJuIHsgcGF0aC5s
b2dpY2FsU3RhcnRSdW4oKSB9OwotICAgIH0pOwotfQotCi1SdW5JdGVyYXRvciBQYXRoTGluZTo6
bG9naWNhbEVuZFJ1bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRo
VmFyaWFudCwgW10oYXV0byYgcGF0aCkgLT4gUnVuSXRlcmF0b3IgewotICAgICAgICByZXR1cm4g
eyBwYXRoLmxvZ2ljYWxFbmRSdW4oKSB9OwotICAgIH0pOwotfQotCi1SdW5JdGVyYXRvciBQYXRo
TGluZTo6bG9naWNhbFN0YXJ0UnVuV2l0aE5vZGUoKSBjb25zdAotewotICAgIGZvciAoYXV0byBy
dW4gPSBsb2dpY2FsU3RhcnRSdW4oKTsgcnVuOyBydW4udHJhdmVyc2VOZXh0T25MaW5lSW5Mb2dp
Y2FsT3JkZXIoKSkgewotICAgICAgICBpZiAocnVuLT5yZW5kZXJlcigpLm5vZGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBydW47Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19Ci0KLVJ1bkl0ZXJh
dG9yIFBhdGhMaW5lOjpsb2dpY2FsRW5kUnVuV2l0aE5vZGUoKSBjb25zdAotewotICAgIGZvciAo
YXV0byBydW4gPSBsb2dpY2FsRW5kUnVuKCk7IHJ1bjsgcnVuLnRyYXZlcnNlUHJldmlvdXNPbkxp
bmVJbkxvZ2ljYWxPcmRlcigpKSB7Ci0gICAgICAgIGlmIChydW4tPnJlbmRlcmVyKCkubm9kZSgp
KQotICAgICAgICAgICAgcmV0dXJuIHJ1bjsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQot
UnVuSXRlcmF0b3IgUGF0aExpbmU6OmNsb3Nlc3RSdW5Gb3JQb2ludChjb25zdCBJbnRQb2ludCYg
cG9pbnRJbkNvbnRlbnRzLCBib29sIGVkaXRhYmxlT25seSkgY29uc3QKLXsKLSAgICByZXR1cm4g
Y2xvc2VzdFJ1bkZvckxvZ2ljYWxMZWZ0UG9zaXRpb24oaXNIb3Jpem9udGFsKCkgPyBwb2ludElu
Q29udGVudHMueCgpIDogcG9pbnRJbkNvbnRlbnRzLnkoKSwgZWRpdGFibGVPbmx5KTsKLX0KLQot
UnVuSXRlcmF0b3IgUGF0aExpbmU6OmNsb3Nlc3RSdW5Gb3JMb2dpY2FsTGVmdFBvc2l0aW9uKGlu
dCBsZWZ0UG9zaXRpb24sIGJvb2wgZWRpdGFibGVPbmx5KSBjb25zdAotewotICAgIGF1dG8gaXNF
ZGl0YWJsZSA9IFsmXShhdXRvIHJ1bikgewotICAgICAgICByZXR1cm4gcnVuICYmIHJ1bi0+cmVu
ZGVyZXIoKS5ub2RlKCkgJiYgcnVuLT5yZW5kZXJlcigpLm5vZGUoKS0+aGFzRWRpdGFibGVTdHls
ZSgpOwotICAgIH07Ci0KLSAgICBhdXRvIGZpcnN0UnVuID0gdGhpcy0+Zmlyc3RSdW4oKTsKLSAg
ICBhdXRvIGxhc3RSdW4gPSB0aGlzLT5sYXN0UnVuKCk7Ci0KLSAgICBpZiAoZmlyc3RSdW4gIT0g
bGFzdFJ1bikgewotICAgICAgICBpZiAoZmlyc3RSdW4tPmlzTGluZUJyZWFrKCkpCi0gICAgICAg
ICAgICBmaXJzdFJ1biA9IGZpcnN0UnVuLT5uZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsK
LSAgICAgICAgZWxzZSBpZiAobGFzdFJ1bi0+aXNMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgIGxh
c3RSdW4gPSBsYXN0UnVuLT5wcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7Ci0gICAg
fQotCi0gICAgaWYgKGZpcnN0UnVuID09IGxhc3RSdW4gJiYgKCFlZGl0YWJsZU9ubHkgfHwgaXNF
ZGl0YWJsZShmaXJzdFJ1bikpKQotICAgICAgICByZXR1cm4gZmlyc3RSdW47Ci0KLSAgICBpZiAo
Zmlyc3RSdW4gJiYgbGVmdFBvc2l0aW9uIDw9IGZpcnN0UnVuLT5sb2dpY2FsTGVmdCgpICYmICFm
aXJzdFJ1bi0+cmVuZGVyZXIoKS5pc0xpc3RNYXJrZXIoKSAmJiAoIWVkaXRhYmxlT25seSB8fCBp
c0VkaXRhYmxlKGZpcnN0UnVuKSkpCi0gICAgICAgIHJldHVybiBmaXJzdFJ1bjsKLQotICAgIGlm
IChsYXN0UnVuICYmIGxlZnRQb3NpdGlvbiA+PSBsYXN0UnVuLT5sb2dpY2FsUmlnaHQoKSAmJiAh
bGFzdFJ1bi0+cmVuZGVyZXIoKS5pc0xpc3RNYXJrZXIoKSAmJiAoIWVkaXRhYmxlT25seSB8fCBp
c0VkaXRhYmxlKGxhc3RSdW4pKSkKLSAgICAgICAgcmV0dXJuIGxhc3RSdW47Ci0KLSAgICBhdXRv
IGNsb3Nlc3RSdW4gPSBsYXN0UnVuOwotICAgIGZvciAoYXV0byBydW4gPSBmaXJzdFJ1bjsgcnVu
OyBydW4gPSBydW4udHJhdmVyc2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSkgewotICAg
ICAgICBpZiAoIXJ1bi0+cmVuZGVyZXIoKS5pc0xpc3RNYXJrZXIoKSAmJiAoIWVkaXRhYmxlT25s
eSB8fCBpc0VkaXRhYmxlKHJ1bikpKSB7Ci0gICAgICAgICAgICBpZiAobGVmdFBvc2l0aW9uIDwg
cnVuLT5sb2dpY2FsUmlnaHQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcnVuOwotICAgICAg
ICAgICAgY2xvc2VzdFJ1biA9IHJ1bjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBj
bG9zZXN0UnVuOwotfQotCi1pbnQgUGF0aExpbmU6OmJsb2NrRGlyZWN0aW9uUG9pbnRJbkxpbmUo
KSBjb25zdAotewotICAgIHJldHVybiAhY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gc3RkOjptYXgodG9wKCksIHNlbGVjdGlvblRvcCgpKSA6
IHN0ZDo6bWluKGJvdHRvbSgpLCBzZWxlY3Rpb25Cb3R0b20oKSk7Ci19Ci0KLUxheW91dFVuaXQg
UGF0aExpbmU6OnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSBjb25zdAot
ewotICAgIHJldHVybiBjb250YWluaW5nQmxvY2soKS5hZGp1c3RTZWxlY3Rpb25Ub3BGb3JQcmVj
ZWRpbmdCbG9jayhzZWxlY3Rpb25Ub3AoKSk7Ci19Ci0KLUxheW91dFVuaXQgUGF0aExpbmU6OnNl
bGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSBjb25zdAotewotICAgIHJl
dHVybiBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBzZWxlY3Rpb25Cb3R0b20oKSAtIHNlbGVjdGlv
blRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSk7Ci19Ci0KLVJlbmRlck9iamVjdDo6SGln
aGxpZ2h0U3RhdGUgUGF0aExpbmU6OnNlbGVjdGlvblN0YXRlKCkgY29uc3QKLXsKLSAgICBhdXRv
JiBibG9jayA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChibG9jay5zZWxlY3Rpb25TdGF0
ZSgpID09IFJlbmRlck9iamVjdDo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6
Tm9uZTsKLQotICAgIGF1dG8gc3RhdGUgPSBSZW5kZXJPYmplY3Q6Ok5vbmU7Ci0gICAgZm9yIChh
dXRvIGJveCA9IGZpcnN0UnVuKCk7IGJveDsgYm94LnRyYXZlcnNlTmV4dE9uTGluZSgpKSB7Ci0g
ICAgICAgIGF1dG8gYm94U3RhdGUgPSBib3gtPnNlbGVjdGlvblN0YXRlKCk7Ci0gICAgICAgIGlm
ICgoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQgJiYgc3Rh
dGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kKQotICAgICAgICAgICAgfHwg
KGJveFN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkVuZCAmJiBzdGF0ZSA9
PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpTdGFydCkpCi0gICAgICAgICAgICBzdGF0
ZSA9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkJvdGg7Ci0gICAgICAgIGVsc2UgaWYg
KHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUgfHwgKChib3hTdGF0
ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpTdGFydCB8fCBib3hTdGF0ZSA9PSBS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQpCi0gICAgICAgICAgICAmJiAoc3RhdGUg
PT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZSB8fCBzdGF0ZSA9PSBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpJbnNpZGUpKSkKLSAgICAgICAgICAgIHN0YXRlID0gYm94
U3RhdGU7Ci0gICAgICAgIGVsc2UgaWYgKGJveFN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxp
Z2h0U3RhdGU6Ok5vbmUgJiYgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
U3RhcnQpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBwYXN0IHRoZSBlbmQgb2YgdGhlIHNlbGVj
dGlvbi4KLSAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
Qm90aDsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZTo6Qm90aCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4g
c3RhdGU7Ci19Ci0KLVJ1bkl0ZXJhdG9yIFBhdGhMaW5lOjpmaXJzdFNlbGVjdGVkQm94KCkgY29u
c3QKLXsKLSAgICBmb3IgKGF1dG8gYm94ID0gZmlyc3RSdW4oKTsgYm94OyBib3gudHJhdmVyc2VO
ZXh0T25MaW5lKCkpIHsKLSAgICAgICAgaWYgKGJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5k
ZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKQotICAgICAgICAgICAgcmV0dXJuIGJveDsK
LSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotUnVuSXRlcmF0b3IgUGF0aExpbmU6Omxhc3RT
ZWxlY3RlZEJveCgpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvIGJveCA9IGxhc3RSdW4oKTsgYm94
OyBib3gudHJhdmVyc2VQcmV2aW91c09uTGluZSgpKSB7Ci0gICAgICAgIGlmIChib3gtPnNlbGVj
dGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZSkKLSAgICAg
ICAgICAgIHJldHVybiBib3g7Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19Ci0KLX0KLX0KLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVn
cmF0aW9uTGluZUl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzE2Zjg2NWVjMDk3YWYzZjM0ZTBjODFiYjQ5MDU2MTdhMGE1ZmU1Yi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDI3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJGb250QmFzZWxpbmUuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVy
YXRvckxlZ2FjeVBhdGguaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRv
ck1vZGVyblBhdGguaCIKLSNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLW5hbWVzcGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7Ci0KLWNsYXNzIExpbmVJdGVy
YXRvcjsKLWNsYXNzIFBhdGhJdGVyYXRvcjsKLWNsYXNzIFJ1bkl0ZXJhdG9yOwotCi1zdHJ1Y3Qg
RW5kTGluZUl0ZXJhdG9yIHsgfTsKLQotY2xhc3MgUGF0aExpbmUgewotcHVibGljOgotICAgIHVz
aW5nIFBhdGhWYXJpYW50ID0gVmFyaWFudDwKLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKLSAgICAgICAgTGluZUl0ZXJhdG9yTW9kZXJuUGF0aCwKLSNlbmRpZgotICAgICAg
ICBMaW5lSXRlcmF0b3JMZWdhY3lQYXRoCi0gICAgPjsKLQotICAgIFBhdGhMaW5lKFBhdGhWYXJp
YW50JiYpOwotCi0gICAgTGF5b3V0VW5pdCB0b3AoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJv
dHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wKCkgY29uc3Q7Ci0gICAg
TGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3BGb3JIaXRUZXN0aW5nKCkgY29uc3Q7Ci0gICAgTGF5b3V0
VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhl
aWdodCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVj
ZWRpbmdCbG9jaygpIGNvbnN0OwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0QWRqdXN0
ZWRGb3JQcmVjZWRpbmdCbG9jaygpIGNvbnN0OwotICAgIExheW91dFVuaXQgbGluZUJveFRvcCgp
IGNvbnN0OwotICAgIExheW91dFVuaXQgbGluZUJveEJvdHRvbSgpIGNvbnN0OwotCi0gICAgTGF5
b3V0UmVjdCBzZWxlY3Rpb25SZWN0KCkgY29uc3Q7Ci0gICAgUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0OwotCi0gICAgZmxvYXQgeSgpIGNvbnN0Owot
ICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsTGVmdCgpIGNvbnN0OwotICAgIGZsb2F0IGNvbnRlbnRM
b2dpY2FsUmlnaHQoKSBjb25zdDsKLSAgICBmbG9hdCBjb250ZW50TG9naWNhbFdpZHRoKCkgY29u
c3Q7Ci0gICAgZmxvYXQgbG9naWNhbEhlaWdodCgpIGNvbnN0OwotCi0gICAgaW50IGJsb2NrRGly
ZWN0aW9uUG9pbnRJbkxpbmUoKSBjb25zdDsKLQotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29u
c3Q7Ci0KLSAgICBGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlKCkgY29uc3Q7Ci0KLSAgICBjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGNvbnRhaW5pbmdCbG9jaygpIGNvbnN0OwotICAgIGNvbnN0IExl
Z2FjeVJvb3RJbmxpbmVCb3gqIGxlZ2FjeVJvb3RJbmxpbmVCb3goKSBjb25zdDsKLQotICAgIGJv
b2wgaXNGaXJzdCgpIGNvbnN0OwotCi0gICAgUnVuSXRlcmF0b3IgZmlyc3RSdW4oKSBjb25zdDsK
LSAgICBSdW5JdGVyYXRvciBsYXN0UnVuKCkgY29uc3Q7Ci0KLSAgICBMaW5lSXRlcmF0b3IgbmV4
dCgpIGNvbnN0OwotICAgIExpbmVJdGVyYXRvciBwcmV2aW91cygpIGNvbnN0OwotCi0gICAgUnVu
SXRlcmF0b3IgY2xvc2VzdFJ1bkZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGVu
dHMsIGJvb2wgZWRpdGFibGVPbmx5KSBjb25zdDsKLSAgICBSdW5JdGVyYXRvciBjbG9zZXN0UnVu
Rm9yTG9naWNhbExlZnRQb3NpdGlvbihpbnQgcG9zaXRpb24sIGJvb2wgZWRpdGFibGVPbmx5ID0g
ZmFsc2UpIGNvbnN0OwotCi0gICAgUnVuSXRlcmF0b3IgbG9naWNhbFN0YXJ0UnVuKCkgY29uc3Q7
Ci0gICAgUnVuSXRlcmF0b3IgbG9naWNhbEVuZFJ1bigpIGNvbnN0OwotICAgIFJ1bkl0ZXJhdG9y
IGxvZ2ljYWxTdGFydFJ1bldpdGhOb2RlKCkgY29uc3Q7Ci0gICAgUnVuSXRlcmF0b3IgbG9naWNh
bEVuZFJ1bldpdGhOb2RlKCkgY29uc3Q7Ci0gICAgCi0gICAgUnVuSXRlcmF0b3IgZmlyc3RTZWxl
Y3RlZEJveCgpIGNvbnN0OwotICAgIFJ1bkl0ZXJhdG9yIGxhc3RTZWxlY3RlZEJveCgpIGNvbnN0
OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBMaW5lSXRlcmF0b3I7Ci0KLSAgICBQYXRo
VmFyaWFudCBtX3BhdGhWYXJpYW50OwotfTsKLQotY2xhc3MgTGluZUl0ZXJhdG9yIHsKLXB1Ymxp
YzoKLSAgICBMaW5lSXRlcmF0b3IoKSA6IG1fbGluZShMaW5lSXRlcmF0b3JMZWdhY3lQYXRoIHsg
bnVsbHB0ciB9KSB7IH07Ci0gICAgTGluZUl0ZXJhdG9yKGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVC
b3gqIHJvb3RJbmxpbmVCb3gpIDogbV9saW5lKExpbmVJdGVyYXRvckxlZ2FjeVBhdGggeyByb290
SW5saW5lQm94IH0pIHsgfTsKLSAgICBMaW5lSXRlcmF0b3IoUGF0aExpbmU6OlBhdGhWYXJpYW50
JiYpOwotICAgIExpbmVJdGVyYXRvcihjb25zdCBQYXRoTGluZSYpOwotCi0gICAgTGluZUl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkgeyByZXR1cm4gdHJhdmVyc2VOZXh0KCk7IH0KLSAgICBMaW5lSXRl
cmF0b3ImIHRyYXZlcnNlTmV4dCgpOwotICAgIExpbmVJdGVyYXRvciYgdHJhdmVyc2VQcmV2aW91
cygpOwotCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICFhdEVu
ZCgpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZUl0ZXJhdG9yJikgY29uc3Q7
Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExpbmVJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oRW5kTGlu
ZUl0ZXJhdG9yKSBjb25zdCB7IHJldHVybiBhdEVuZCgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9
KEVuZExpbmVJdGVyYXRvcikgY29uc3QgeyByZXR1cm4gIWF0RW5kKCk7IH0KLQotICAgIGNvbnN0
IFBhdGhMaW5lJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX2xpbmU7IH0KLSAgICBjb25z
dCBQYXRoTGluZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX2xpbmU7IH0KLQotICAg
IGJvb2wgYXRFbmQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBQYXRoTGluZSBtX2xpbmU7Ci19
OwotCi1MaW5lSXRlcmF0b3IgZmlyc3RMaW5lRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwot
TGluZUl0ZXJhdG9yIGxhc3RMaW5lRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pbmxpbmUg
UGF0aExpbmU6OlBhdGhMaW5lKFBhdGhWYXJpYW50JiYgcGF0aCkKLSAgICA6IG1fcGF0aFZhcmlh
bnQoV1RGTW92ZShwYXRoKSkKLXsKLX0KLQotaW5saW5lIExheW91dFVuaXQgUGF0aExpbmU6OnRv
cCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10o
Y29uc3QgYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC50b3AoKTsKLSAgICB9KTsK
LX0KLQotaW5saW5lIExheW91dFVuaXQgUGF0aExpbmU6OmJvdHRvbSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkg
ewotICAgICAgICByZXR1cm4gcGF0aC5ib3R0b20oKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIExh
eW91dFVuaXQgUGF0aExpbmU6OnNlbGVjdGlvblRvcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgewotICAgICAg
ICByZXR1cm4gcGF0aC5zZWxlY3Rpb25Ub3AoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIExheW91
dFVuaXQgUGF0aExpbmU6OnNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcoKSBjb25zdAotewotICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgp
IHsKLSAgICAgICAgcmV0dXJuIHBhdGguc2VsZWN0aW9uVG9wRm9ySGl0VGVzdGluZygpOwotICAg
IH0pOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBQYXRoTGluZTo6c2VsZWN0aW9uQm90dG9tKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25z
dCBhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLnNlbGVjdGlvbkJvdHRvbSgpOwot
ICAgIH0pOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBQYXRoTGluZTo6c2VsZWN0aW9uSGVpZ2h0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2VsZWN0aW9uQm90dG9tKCkgLSBzZWxlY3Rpb25Ub3Ao
KTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgUGF0aExpbmU6OmxpbmVCb3hUb3AoKSBjb25zdAot
ewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8m
IHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGgubGluZUJveFRvcCgpOwotICAgIH0pOwotfQot
Ci1pbmxpbmUgTGF5b3V0VW5pdCBQYXRoTGluZTo6bGluZUJveEJvdHRvbSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0
aCkgewotICAgICAgICByZXR1cm4gcGF0aC5saW5lQm94Qm90dG9tKCk7Ci0gICAgfSk7Ci19Ci0K
LWlubGluZSBMYXlvdXRSZWN0IFBhdGhMaW5lOjpzZWxlY3Rpb25SZWN0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4geyBMYXlvdXRQb2ludCB7IGNvbnRlbnRMb2dpY2FsTGVmdCgpLCBzZWxlY3Rpb25U
b3AoKSB9LCBMYXlvdXRQb2ludCB7IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgc2VsZWN0aW9uQm90
dG9tKCkgfSB9OwotfQotCi1pbmxpbmUgZmxvYXQgUGF0aExpbmU6OnkoKSBjb25zdAotewotICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgp
IHsKLSAgICAgICAgcmV0dXJuIHBhdGgueSgpOwotICAgIH0pOwotfQotCi1pbmxpbmUgZmxvYXQg
UGF0aExpbmU6OmNvbnRlbnRMb2dpY2FsTGVmdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6
c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgewotICAgICAgICBy
ZXR1cm4gcGF0aC5jb250ZW50TG9naWNhbExlZnQoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIGZs
b2F0IFBhdGhMaW5lOjpjb250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7Ci0gICAg
ICAgIHJldHVybiBwYXRoLmNvbnRlbnRMb2dpY2FsUmlnaHQoKTsKLSAgICB9KTsKLX0KLQotaW5s
aW5lIGZsb2F0IFBhdGhMaW5lOjpjb250ZW50TG9naWNhbFdpZHRoKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gY29udGVudExvZ2ljYWxSaWdodCgpIC0gY29udGVudExvZ2ljYWxMZWZ0KCk7Ci19Ci0K
LWlubGluZSBmbG9hdCBQYXRoTGluZTo6bG9naWNhbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgewot
ICAgICAgICByZXR1cm4gcGF0aC5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgfSk7Ci19Ci0KLWlubGlu
ZSBib29sIFBhdGhMaW5lOjppc0hvcml6b250YWwoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKLSAgICAgICAg
cmV0dXJuIHBhdGguaXNIb3Jpem9udGFsKCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBGb250QmFz
ZWxpbmUgUGF0aExpbmU6OmJhc2VsaW5lVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6
c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgewotICAgICAgICBy
ZXR1cm4gcGF0aC5iYXNlbGluZVR5cGUoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYgUGF0aExpbmU6OmNvbnRhaW5pbmdCbG9jaygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkg
LT4gY29uc3QgUmVuZGVyQmxvY2tGbG93JiB7Ci0gICAgICAgIHJldHVybiBwYXRoLmNvbnRhaW5p
bmdCbG9jaygpOwotICAgIH0pOwotfQotCi1pbmxpbmUgY29uc3QgTGVnYWN5Um9vdElubGluZUJv
eCogUGF0aExpbmU6OmxlZ2FjeVJvb3RJbmxpbmVCb3goKSBjb25zdAotewotICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKLSAgICAg
ICAgcmV0dXJuIHBhdGgubGVnYWN5Um9vdElubGluZUJveCgpOwotICAgIH0pOwotfQotCi1pbmxp
bmUgYm9vbCBQYXRoTGluZTo6aXNGaXJzdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFwcmV2aW91
cygpOwotfQotCi19Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRv
ckxlZ2FjeVBhdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRmN2MwZDJlYWYw
NmRjY2Q4MmIzZWI5OGFiMTYzNjE0ZWUyMzI0MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTGF5
b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRp
b25SdW5JdGVyYXRvckxlZ2FjeVBhdGguaCIKLSNpbmNsdWRlICJMZWdhY3lSb290SW5saW5lQm94
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIExheW91dEludGVncmF0aW9u
IHsKLQotY2xhc3MgTGluZUl0ZXJhdG9yTGVnYWN5UGF0aCB7Ci1wdWJsaWM6Ci0gICAgTGluZUl0
ZXJhdG9yTGVnYWN5UGF0aChjb25zdCBMZWdhY3lSb290SW5saW5lQm94KiByb290SW5saW5lQm94
KQotICAgICAgICA6IG1fcm9vdElubGluZUJveChyb290SW5saW5lQm94KQotICAgIHsKLSAgICB9
Ci0gICAgTGluZUl0ZXJhdG9yTGVnYWN5UGF0aChMaW5lSXRlcmF0b3JMZWdhY3lQYXRoJiYpID0g
ZGVmYXVsdDsKLSAgICBMaW5lSXRlcmF0b3JMZWdhY3lQYXRoKGNvbnN0IExpbmVJdGVyYXRvckxl
Z2FjeVBhdGgmKSA9IGRlZmF1bHQ7Ci0gICAgTGluZUl0ZXJhdG9yTGVnYWN5UGF0aCYgb3BlcmF0
b3I9KGNvbnN0IExpbmVJdGVyYXRvckxlZ2FjeVBhdGgmKSA9IGRlZmF1bHQ7Ci0gICAgTGluZUl0
ZXJhdG9yTGVnYWN5UGF0aCYgb3BlcmF0b3I9KExpbmVJdGVyYXRvckxlZ2FjeVBhdGgmJikgPSBk
ZWZhdWx0OwotCi0gICAgTGF5b3V0VW5pdCB0b3AoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxp
bmVCb3gtPmxpbmVUb3AoKTsgfQotICAgIExheW91dFVuaXQgYm90dG9tKCkgY29uc3QgeyByZXR1
cm4gbV9yb290SW5saW5lQm94LT5saW5lQm90dG9tKCk7IH0KLSAgICBMYXlvdXRVbml0IHNlbGVj
dGlvblRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+c2VsZWN0aW9uVG9wKCk7
IH0KLSAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3Jvb3RJbmxpbmVCb3gtPnNlbGVjdGlvblRvcChMZWdhY3lSb290SW5saW5lQm94OjpG
b3JIaXRUZXN0aW5nOjpZZXMpOyB9Ci0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBj
b25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPnNlbGVjdGlvbkJvdHRvbSgpOyB9Ci0gICAg
TGF5b3V0VW5pdCBsaW5lQm94VG9wKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5s
aW5lQm94VG9wKCk7IH0KLSAgICBMYXlvdXRVbml0IGxpbmVCb3hCb3R0b20oKSBjb25zdCB7IHJl
dHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxpbmVCb3hCb3R0b20oKTsgfQotCi0gICAgZmxvYXQgeSgp
IGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+eSgpOyB9Ci0gICAgZmxvYXQgY29udGVu
dExvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5sb2dpY2FsTGVm
dCgpOyB9Ci0gICAgZmxvYXQgY29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdElubGluZUJveC0+bG9naWNhbFJpZ2h0KCk7IH0KLSAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5sb2dpY2FsSGVpZ2h0KCk7IH0KLSAg
ICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+aXNI
b3Jpem9udGFsKCk7IH0KLSAgICBGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yb290SW5saW5lQm94LT5iYXNlbGluZVR5cGUoKTsgfQotCi0gICAgY29uc3QgUmVu
ZGVyQmxvY2tGbG93JiBjb250YWluaW5nQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxp
bmVCb3gtPmJsb2NrRmxvdygpOyB9Ci0gICAgY29uc3QgTGVnYWN5Um9vdElubGluZUJveCogbGVn
YWN5Um9vdElubGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveDsgfQotCi0g
ICAgdm9pZCB0cmF2ZXJzZU5leHQoKQotICAgIHsKLSAgICAgICAgbV9yb290SW5saW5lQm94ID0g
bV9yb290SW5saW5lQm94LT5uZXh0Um9vdEJveCgpOwotICAgIH0KLQotICAgIHZvaWQgdHJhdmVy
c2VQcmV2aW91cygpCi0gICAgewotICAgICAgICBtX3Jvb3RJbmxpbmVCb3ggPSBtX3Jvb3RJbmxp
bmVCb3gtPnByZXZSb290Qm94KCk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IExpbmVJdGVyYXRvckxlZ2FjeVBhdGgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxp
bmVCb3ggPT0gb3RoZXIubV9yb290SW5saW5lQm94OyB9Ci0KLSAgICBib29sIGF0RW5kKCkgY29u
c3QgeyByZXR1cm4gIW1fcm9vdElubGluZUJveDsgfQotCi0gICAgUnVuSXRlcmF0b3JMZWdhY3lQ
YXRoIGZpcnN0UnVuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB7IG1fcm9vdElubGlu
ZUJveC0+Zmlyc3RMZWFmRGVzY2VuZGFudCgpIH07Ci0gICAgfQotCi0gICAgUnVuSXRlcmF0b3JM
ZWdhY3lQYXRoIGxhc3RSdW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHsgbV9yb290
SW5saW5lQm94LT5sYXN0TGVhZkRlc2NlbmRhbnQoKSB9OwotICAgIH0KLQotCi0gICAgUnVuSXRl
cmF0b3JMZWdhY3lQYXRoIGxvZ2ljYWxTdGFydFJ1bigpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4geyAqbV9yb290SW5saW5lQm94LCBSdW5JdGVyYXRvckxlZ2FjeVBhdGg6OkxvZ2ljYWxP
cmRlcjo6U3RhcnQgfTsKLSAgICB9Ci0KLSAgICBSdW5JdGVyYXRvckxlZ2FjeVBhdGggbG9naWNh
bEVuZFJ1bigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4geyAqbV9yb290SW5saW5lQm94
LCBSdW5JdGVyYXRvckxlZ2FjeVBhdGg6OkxvZ2ljYWxPcmRlcjo6RW5kIH07Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gqIG1fcm9vdElubGluZUJveDsK
LX07Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvck1vZGVyblBhdGguaCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvck1vZGVy
blBhdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY5MzU5ZmYxMDZkZmE0ODY3
OTQ5MDIxMDIwZWQ5Mjg5N2IyODVhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNv
bnRlbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9kZXJuUGF0
aC5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLW5hbWVzcGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7Ci0KLWNsYXNzIFJ1bkl0ZXJhdG9yTW9k
ZXJuUGF0aDsKLQotY2xhc3MgTGluZUl0ZXJhdG9yTW9kZXJuUGF0aCB7Ci1wdWJsaWM6Ci0gICAg
TGluZUl0ZXJhdG9yTW9kZXJuUGF0aChjb25zdCBJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50
LCBzaXplX3QgbGluZUluZGV4KQotICAgICAgICA6IG1faW5saW5lQ29udGVudCgmaW5saW5lQ29u
dGVudCkKLSAgICAgICAgLCBtX2xpbmVJbmRleChsaW5lSW5kZXgpCi0gICAgewotICAgICAgICBB
U1NFUlQobGluZUluZGV4IDw9IGxpbmVzKCkuc2l6ZSgpKTsKLSAgICB9Ci0gICAgTGluZUl0ZXJh
dG9yTW9kZXJuUGF0aChMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoJiYpID0gZGVmYXVsdDsKLSAgICBM
aW5lSXRlcmF0b3JNb2Rlcm5QYXRoKGNvbnN0IExpbmVJdGVyYXRvck1vZGVyblBhdGgmKSA9IGRl
ZmF1bHQ7Ci0gICAgTGluZUl0ZXJhdG9yTW9kZXJuUGF0aCYgb3BlcmF0b3I9KGNvbnN0IExpbmVJ
dGVyYXRvck1vZGVyblBhdGgmKSA9IGRlZmF1bHQ7Ci0gICAgTGluZUl0ZXJhdG9yTW9kZXJuUGF0
aCYgb3BlcmF0b3I9KExpbmVJdGVyYXRvck1vZGVyblBhdGgmJikgPSBkZWZhdWx0OwotCi0gICAg
TGF5b3V0VW5pdCB0b3AoKSBjb25zdCB7IHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3Vu
ZChsaW5lKCkuZW5jbG9zaW5nQ29udGVudFRvcCgpKTsgfQotICAgIExheW91dFVuaXQgYm90dG9t
KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Um91bmQobGluZSgpLmVuY2xv
c2luZ0NvbnRlbnRCb3R0b20oKSk7IH0KLSAgICBMYXlvdXRVbml0IGxpbmVCb3hUb3AoKSBjb25z
dCB7IHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3VuZChsaW5lKCkubGluZUJveFRvcCgp
KTsgfQotICAgIExheW91dFVuaXQgbGluZUJveEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIExheW91
dFVuaXQ6OmZyb21GbG9hdFJvdW5kKGxpbmUoKS5saW5lQm94Qm90dG9tKCkpOyB9Ci0KLSAgICBM
YXlvdXRVbml0IHNlbGVjdGlvblRvcCgpIGNvbnN0IHsgcmV0dXJuICFtX2xpbmVJbmRleCA/IHRv
cCgpIDogTGluZUl0ZXJhdG9yTW9kZXJuUGF0aCgqbV9pbmxpbmVDb250ZW50LCBtX2xpbmVJbmRl
eCAtIDEpLnNlbGVjdGlvbkJvdHRvbSgpOyB9Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgY29u
dGFpbmluZ0Jsb2NrKCkuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpIG9mZnNldCBhZnRlciByZXRp
cmluZyBsZWdhY3kgbGluZSBsYXlvdXQuIEl0IGFsc28gcmVxdWlyZXMgY2hhbmdlcyBpbiBSZW5k
ZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50IHRvIGZpbmQgdGhlIGZpcnN0IGxpbmUgd2l0aCBvZmZz
ZXQuCi0gICAgLy8gLSB0aGUgImJlZm9yZSIgdmFsdWUgaXMgYWxyZWFkeSBmYWN0b3JlZCBpbiB0
byB0aGUgbGluZSBvZmZzZXQKLSAgICAvLyAtIHRoaXMgbG9naWMgbmVnYXRlcyB0aGUgZmlyc3Qg
bGluZSdzIG5hdHVyYWwgb2Zmc2V0IChlLmcuIGJsb2NrIGhhcyBubyBib3JkZXIvcGFkZGluZyBi
dXQgdGhlIGZpcnN0IGxpbmUgaGFzIGEgY29tcHV0ZWQgb2Zmc2V0KS4KLSAgICBMYXlvdXRVbml0
IHNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcoKSBjb25zdCB7IHJldHVybiAhbV9saW5lSW5kZXgg
PyBjb250YWluaW5nQmxvY2soKS5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgOiBzZWxlY3Rpb25U
b3AoKTsgfTsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IG9yIHJlcGxhY2UuCi0gICAgTGF5b3V0
VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdCB7IHJldHVybiBib3R0b20oKTsgfQotCi0gICAg
ZmxvYXQgY29udGVudExvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbGluZSgpLmxpbmVCb3hM
ZWZ0KCkgKyBsaW5lKCkuY29udGVudExlZnQoKTsgfQotICAgIGZsb2F0IGNvbnRlbnRMb2dpY2Fs
UmlnaHQoKSBjb25zdCB7IHJldHVybiBjb250ZW50TG9naWNhbExlZnQoKSArIGxpbmUoKS5jb250
ZW50V2lkdGgoKTsgfQotICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBsaW5lQm94VG9wKCk7
IH0KLSAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbGluZUJveEJvdHRv
bSgpIC0gbGluZUJveFRvcCgpOyB9Ci0gICAgYm9vbCBpc0hvcml6b250YWwoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIEFscGhhYmV0aWNCYXNlbGluZTsgfQotCi0gICAgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBj
b250YWluaW5nQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2lubGluZUNvbnRlbnQtPmNvbnRhaW5p
bmdCbG9jaygpOyB9Ci0gICAgY29uc3QgTGVnYWN5Um9vdElubGluZUJveCogbGVnYWN5Um9vdElu
bGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KLQotICAgIHZvaWQgdHJhdmVyc2VO
ZXh0KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghYXRFbmQoKSk7Ci0KLSAgICAgICAgKyttX2xp
bmVJbmRleDsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXMoKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFhdEVuZCgpKTsKLQotICAgICAgICBpZiAoIW1fbGluZUluZGV4KSB7Ci0g
ICAgICAgICAgICBzZXRBdEVuZCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgLS1tX2xpbmVJbmRleDsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgTGluZUl0ZXJhdG9yTW9kZXJuUGF0aCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5l
Q29udGVudCA9PSBvdGhlci5tX2lubGluZUNvbnRlbnQgJiYgbV9saW5lSW5kZXggPT0gb3RoZXIu
bV9saW5lSW5kZXg7IH0KLQotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVJ
bmRleCA9PSBsaW5lcygpLnNpemUoKTsgfQotCi0gICAgUnVuSXRlcmF0b3JNb2Rlcm5QYXRoIGZp
cnN0UnVuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbGluZSgpLmJveENvdW50KCkpCi0g
ICAgICAgICAgICByZXR1cm4geyAqbV9pbmxpbmVDb250ZW50IH07Ci0gICAgICAgIGF1dG8gcnVu
SXRlcmF0b3IgPSBSdW5JdGVyYXRvck1vZGVyblBhdGggeyAqbV9pbmxpbmVDb250ZW50LCBsaW5l
KCkuZmlyc3RCb3hJbmRleCgpIH07Ci0gICAgICAgIGlmIChydW5JdGVyYXRvci5ib3goKS5pc0lu
bGluZUJveCgpKQotICAgICAgICAgICAgcnVuSXRlcmF0b3IudHJhdmVyc2VOZXh0T25MaW5lKCk7
Ci0gICAgICAgIHJldHVybiBydW5JdGVyYXRvcjsKLSAgICB9Ci0KLSAgICBSdW5JdGVyYXRvck1v
ZGVyblBhdGggbGFzdFJ1bigpIGNvbnN0Ci0gICAgewotICAgICAgICBhdXRvIGJveENvdW50ID0g
bGluZSgpLmJveENvdW50KCk7Ci0gICAgICAgIGlmICghYm94Q291bnQpCi0gICAgICAgICAgICBy
ZXR1cm4geyAqbV9pbmxpbmVDb250ZW50IH07Ci0gICAgICAgIGF1dG8gcnVuSXRlcmF0b3IgPSBS
dW5JdGVyYXRvck1vZGVyblBhdGggeyAqbV9pbmxpbmVDb250ZW50LCBsaW5lKCkuZmlyc3RCb3hJ
bmRleCgpICsgYm94Q291bnQgLSAxIH07Ci0gICAgICAgIGlmIChydW5JdGVyYXRvci5ib3goKS5p
c0lubGluZUJveCgpKQotICAgICAgICAgICAgcnVuSXRlcmF0b3IudHJhdmVyc2VQcmV2aW91c09u
TGluZSgpOwotICAgICAgICByZXR1cm4gcnVuSXRlcmF0b3I7Ci0gICAgfQotCi0gICAgUnVuSXRl
cmF0b3JNb2Rlcm5QYXRoIGxvZ2ljYWxTdGFydFJ1bigpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gZmlyc3RSdW4oKTsKLSAgICB9Ci0KLSAgICBSdW5JdGVyYXRvck1vZGVyblBhdGggbG9n
aWNhbEVuZFJ1bigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbGFzdFJ1bigpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIHNldEF0RW5kKCkgeyBtX2xpbmVJbmRleCA9IGxpbmVz
KCkuc2l6ZSgpOyB9Ci0KLSAgICBjb25zdCBJbmxpbmVDb250ZW50OjpMaW5lcyYgbGluZXMoKSBj
b25zdCB7IHJldHVybiBtX2lubGluZUNvbnRlbnQtPmxpbmVzOyB9Ci0gICAgY29uc3QgTGluZSYg
bGluZSgpIGNvbnN0IHsgcmV0dXJuIGxpbmVzKClbbV9saW5lSW5kZXhdOyB9Ci0KLSAgICBSZWZQ
dHI8Y29uc3QgSW5saW5lQ29udGVudD4gbV9pbmxpbmVDb250ZW50OwotICAgIHNpemVfdCBtX2xp
bmVJbmRleCB7IDAgfTsKLX07Ci0KLX0KLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
TGluZUxheW91dC5jcHAKaW5kZXggMzk2ODdlYzRhYjNiYWY5MDViZmFjNjY5NTAyY2Y0ODZiYjE2
Njk3Mi4uZTZkYmVmZjQ5NmQ3YmM0MmJiYTE0ZWY1NzZlMDE0N2VkODM4ODJiYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGlu
ZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKQEAgLTM5MSw3ICszOTEsNyBAQCBJbmxpbmVDb250
ZW50JiBMaW5lTGF5b3V0OjplbnN1cmVJbmxpbmVDb250ZW50KCkKICAgICByZXR1cm4gKm1faW5s
aW5lQ29udGVudDsKIH0KIAotVGV4dFJ1bkl0ZXJhdG9yIExpbmVMYXlvdXQ6OnRleHRSdW5zRm9y
KGNvbnN0IFJlbmRlclRleHQmIHJlbmRlclRleHQpIGNvbnN0CitJbmxpbmVJdGVyYXRvcjo6VGV4
dEJveEl0ZXJhdG9yIExpbmVMYXlvdXQ6OnRleHRSdW5zRm9yKGNvbnN0IFJlbmRlclRleHQmIHJl
bmRlclRleHQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lubGluZUNvbnRlbnQpCiAgICAgICAgIHJl
dHVybiB7IH07CkBAIC00MDEsMTAgKzQwMSwxMCBAQCBUZXh0UnVuSXRlcmF0b3IgTGluZUxheW91
dDo6dGV4dFJ1bnNGb3IoY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyVGV4dCkgY29uc3QKICAgICBp
ZiAoIWZpcnN0SW5kZXgpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gTGF5b3V0
SW50ZWdyYXRpb246OnRleHRSdW5Gb3IoKm1faW5saW5lQ29udGVudCwgKmZpcnN0SW5kZXgpOwor
ICAgIHJldHVybiBJbmxpbmVJdGVyYXRvcjo6dGV4dFJ1bkZvcigqbV9pbmxpbmVDb250ZW50LCAq
Zmlyc3RJbmRleCk7CiB9CiAKLVJ1bkl0ZXJhdG9yIExpbmVMYXlvdXQ6OnJ1bkZvcihjb25zdCBS
ZW5kZXJFbGVtZW50JiByZW5kZXJFbGVtZW50KSBjb25zdAorSW5saW5lSXRlcmF0b3I6OkJveEl0
ZXJhdG9yIExpbmVMYXlvdXQ6OnJ1bkZvcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJFbGVt
ZW50KSBjb25zdAogewogICAgIGlmICghbV9pbmxpbmVDb250ZW50KQogICAgICAgICByZXR1cm4g
eyB9OwpAQCAtNDE0LDIzICs0MTQsMjMgQEAgUnVuSXRlcmF0b3IgTGluZUxheW91dDo6cnVuRm9y
KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlckVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKCFmaXJz
dEluZGV4KQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIExheW91dEludGVncmF0
aW9uOjpydW5Gb3IoKm1faW5saW5lQ29udGVudCwgKmZpcnN0SW5kZXgpOworICAgIHJldHVybiBJ
bmxpbmVJdGVyYXRvcjo6cnVuRm9yKCptX2lubGluZUNvbnRlbnQsICpmaXJzdEluZGV4KTsKIH0K
IAotTGluZUl0ZXJhdG9yIExpbmVMYXlvdXQ6OmZpcnN0TGluZSgpIGNvbnN0CitJbmxpbmVJdGVy
YXRvcjo6TGluZUl0ZXJhdG9yIExpbmVMYXlvdXQ6OmZpcnN0TGluZSgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX2lubGluZUNvbnRlbnQpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4g
eyBMaW5lSXRlcmF0b3JNb2Rlcm5QYXRoKCptX2lubGluZUNvbnRlbnQsIDApIH07CisgICAgcmV0
dXJuIHsgSW5saW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvck1vZGVyblBhdGgoKm1faW5saW5lQ29u
dGVudCwgMCkgfTsKIH0KIAotTGluZUl0ZXJhdG9yIExpbmVMYXlvdXQ6Omxhc3RMaW5lKCkgY29u
c3QKK0lubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3IgTGluZUxheW91dDo6bGFzdExpbmUoKSBj
b25zdAogewogICAgIGlmICghbV9pbmxpbmVDb250ZW50KQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgcmV0dXJuIHsgTGluZUl0ZXJhdG9yTW9kZXJuUGF0aCgqbV9pbmxpbmVDb250ZW50LCBt
X2lubGluZUNvbnRlbnQtPmxpbmVzLmlzRW1wdHkoKSA/IDAgOiBtX2lubGluZUNvbnRlbnQtPmxp
bmVzLnNpemUoKSAtIDEpIH07CisgICAgcmV0dXJuIHsgSW5saW5lSXRlcmF0b3I6OkxpbmVJdGVy
YXRvck1vZGVyblBhdGgoKm1faW5saW5lQ29udGVudCwgbV9pbmxpbmVDb250ZW50LT5saW5lcy5p
c0VtcHR5KCkgPyAwIDogbV9pbmxpbmVDb250ZW50LT5saW5lcy5zaXplKCkgLSAxKSB9OwogfQog
CiBMYXlvdXRSZWN0IExpbmVMYXlvdXQ6OmZpcnN0SW5saW5lQm94UmVjdChjb25zdCBSZW5kZXJJ
bmxpbmUmIHJlbmRlcklubGluZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaApp
bmRleCAwMWFiYWEwYzQ2MGVjNzY3MjM3NzQ4ZjNkZGY3NjIwM2Y4ZWM2NDU2Li5hMzNkMDZlYjM4
ODgyMzcwNjUwMjZmNTQ5MmU5ODExODVlZTFhNWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxh
eW91dC5oCkBAIC0yOCw5ICsyOCw5IEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRv
ckJveC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZS5oIgogI2luY2x1ZGUgIkxheW91
dEludGVncmF0aW9uQm94VHJlZS5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0
ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkxheW91dFBvaW50LmgiCiAjaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJPYmplY3RFbnVtcy5oIgpAQCAtOTYsMTAgKzk2LDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7CiAg
ICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbik7CiAKLSAgICBUZXh0UnVuSXRlcmF0b3IgdGV4dFJ1bnNGb3IoY29u
c3QgUmVuZGVyVGV4dCYpIGNvbnN0OwotICAgIFJ1bkl0ZXJhdG9yIHJ1bkZvcihjb25zdCBSZW5k
ZXJFbGVtZW50JikgY29uc3Q7Ci0gICAgTGluZUl0ZXJhdG9yIGZpcnN0TGluZSgpIGNvbnN0Owot
ICAgIExpbmVJdGVyYXRvciBsYXN0TGluZSgpIGNvbnN0OworICAgIElubGluZUl0ZXJhdG9yOjpU
ZXh0Qm94SXRlcmF0b3IgdGV4dFJ1bnNGb3IoY29uc3QgUmVuZGVyVGV4dCYpIGNvbnN0OworICAg
IElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBydW5Gb3IoY29uc3QgUmVuZGVyRWxlbWVudCYp
IGNvbnN0OworICAgIElubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3IgZmlyc3RMaW5lKCkgY29u
c3Q7CisgICAgSW5saW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvciBsYXN0TGluZSgpIGNvbnN0Owog
CiAgICAgTGF5b3V0UmVjdCBmaXJzdElubGluZUJveFJlY3QoY29uc3QgUmVuZGVySW5saW5lJikg
Y29uc3Q7CiAgICAgTGF5b3V0UmVjdCBlbmNsb3NpbmdCb3JkZXJCb3hSZWN0Rm9yKGNvbnN0IFJl
bmRlcklubGluZSYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDFjOTA0YzNiZTFkZDZmNTA2OTRjM2M3ZWJl
NGIyYjJlYzJhNzBmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1
bkl0ZXJhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRl
cmF0b3IuaCIKLQotCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIK
LSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCIKLSNpbmNsdWRlICJSZW5k
ZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJDb21iaW5lVGV4dC5oIgotI2luY2x1ZGUg
IlJlbmRlckxpbmVCcmVhay5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dEludGVncmF0aW9uIHsKLQotUnVuSXRlcmF0b3I6
OlJ1bkl0ZXJhdG9yKFBhdGhSdW46OlBhdGhWYXJpYW50JiYgcGF0aFZhcmlhbnQpCi0gICAgOiBt
X3J1bihXVEZNb3ZlKHBhdGhWYXJpYW50KSkKLXsKLX0KLQotUnVuSXRlcmF0b3I6OlJ1bkl0ZXJh
dG9yKGNvbnN0IFBhdGhSdW4mIHJ1bikKLSAgICA6IG1fcnVuKHJ1bikKLXsKLX0KLQotYm9vbCBS
dW5JdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBSdW5JdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcnVuLm1fcGF0aFZhcmlhbnQgPT0gb3RoZXIubV9ydW4ubV9wYXRoVmFy
aWFudDsKLX0KLQotYm9vbCBSdW5JdGVyYXRvcjo6YXRFbmQoKSBjb25zdAotewotICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1fcnVuLm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAg
ICAgICAgcmV0dXJuIHBhdGguYXRFbmQoKTsKLSAgICB9KTsKLX0KLQotUnVuSXRlcmF0b3IgUGF0
aFJ1bjo6bmV4dE9uTGluZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFJ1bkl0ZXJhdG9yKCp0aGlz
KS50cmF2ZXJzZU5leHRPbkxpbmUoKTsKLX0KLQotUnVuSXRlcmF0b3IgUGF0aFJ1bjo6cHJldmlv
dXNPbkxpbmUoKSBjb25zdAotewotICAgIHJldHVybiBSdW5JdGVyYXRvcigqdGhpcykudHJhdmVy
c2VQcmV2aW91c09uTGluZSgpOwotfQotCi1SdW5JdGVyYXRvciBQYXRoUnVuOjpuZXh0T25MaW5l
SWdub3JpbmdMaW5lQnJlYWsoKSBjb25zdAotewotICAgIHJldHVybiBSdW5JdGVyYXRvcigqdGhp
cykudHJhdmVyc2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKLX0KLQotUnVuSXRlcmF0
b3IgUGF0aFJ1bjo6cHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFJ1bkl0ZXJhdG9yKCp0aGlzKS50cmF2ZXJzZVByZXZpb3VzT25MaW5lSWdub3Jp
bmdMaW5lQnJlYWsoKTsKLX0KLQotTGluZUl0ZXJhdG9yIFBhdGhSdW46OmxpbmUoKSBjb25zdAot
ewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IFJ1bkl0
ZXJhdG9yTGVnYWN5UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gTGluZUl0ZXJhdG9yKExp
bmVJdGVyYXRvckxlZ2FjeVBhdGgoJnBhdGgucm9vdElubGluZUJveCgpKSk7Ci0gICAgfQotI2lm
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotICAgICwgW10oY29uc3QgUnVuSXRl
cmF0b3JNb2Rlcm5QYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBMaW5lSXRlcmF0b3IoTGlu
ZUl0ZXJhdG9yTW9kZXJuUGF0aCgqcGF0aC5tX2lubGluZUNvbnRlbnQsIHBhdGguYm94KCkubGlu
ZUluZGV4KCkpKTsKLSAgICB9Ci0jZW5kaWYKLSAgICApOwotfQotCi1jb25zdCBSZW5kZXJTdHls
ZSYgUGF0aFJ1bjo6c3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBsaW5lKCktPmlzRmlyc3Qo
KSA/IHJlbmRlcmVyKCkuZmlyc3RMaW5lU3R5bGUoKSA6IHJlbmRlcmVyKCkuc3R5bGUoKTsKLX0K
LQotVGV4dFJ1bkl0ZXJhdG9yIFBhdGhUZXh0UnVuOjpuZXh0VGV4dFJ1bigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFRleHRSdW5JdGVyYXRvcigqdGhpcykudHJhdmVyc2VOZXh0VGV4dFJ1bigpOwot
fQotCi1UZXh0UnVuSXRlcmF0b3IgUGF0aFRleHRSdW46Om5leHRUZXh0UnVuSW5UZXh0T3JkZXIo
KSBjb25zdAotewotICAgIHJldHVybiBUZXh0UnVuSXRlcmF0b3IoKnRoaXMpLnRyYXZlcnNlTmV4
dFRleHRSdW5JblRleHRPcmRlcigpOwotfQotCi1MYXlvdXRSZWN0IFBhdGhUZXh0UnVuOjpzZWxl
Y3Rpb25SZWN0KHVuc2lnbmVkIHJhbmdlU3RhcnQsIHVuc2lnbmVkIHJhbmdlRW5kKSBjb25zdAot
ewotICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFuZ2Uo
KS5jbGFtcChyYW5nZVN0YXJ0LCByYW5nZUVuZCk7Ci0KLSAgICBpZiAoY2xhbXBlZFN0YXJ0ID49
IGNsYW1wZWRFbmQgJiYgIShyYW5nZVN0YXJ0ID09IHJhbmdlRW5kICYmIHJhbmdlU3RhcnQgPj0g
c3RhcnQoKSAmJiByYW5nZVN0YXJ0IDw9IGVuZCgpKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQot
ICAgIGF1dG8gc2VsZWN0aW9uVG9wID0gbGluZSgpLT5zZWxlY3Rpb25Ub3AoKTsKLSAgICBhdXRv
IHNlbGVjdGlvbkhlaWdodCA9IGxpbmUoKS0+c2VsZWN0aW9uSGVpZ2h0KCk7Ci0KLSAgICBMYXlv
dXRSZWN0IHNlbGVjdGlvblJlY3QgeyBsb2dpY2FsTGVmdCgpLCBzZWxlY3Rpb25Ub3AsIGxvZ2lj
YWxXaWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQgfTsKLQotICAgIFRleHRSdW4gdGV4dFJ1biA9IGNy
ZWF0ZVRleHRSdW4oKTsKLSAgICBpZiAoY2xhbXBlZFN0YXJ0IHx8IGNsYW1wZWRFbmQgIT0gdGV4
dFJ1bi5sZW5ndGgoKSkKLSAgICAgICAgZm9udENhc2NhZGUoKS5hZGp1c3RTZWxlY3Rpb25SZWN0
Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQp
OwotCi0gICAgcmV0dXJuIHNuYXBwZWRTZWxlY3Rpb25SZWN0KHNlbGVjdGlvblJlY3QsIGxvZ2lj
YWxSaWdodCgpLCBzZWxlY3Rpb25Ub3AsIHNlbGVjdGlvbkhlaWdodCwgaXNIb3Jpem9udGFsKCkp
OwotfQotCi1ib29sIFBhdGhUZXh0UnVuOjppc0NvbWJpbmVkVGV4dCgpIGNvbnN0Ci17Ci0gICAg
YXV0byYgcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgIHJldHVybiBpczxSZW5kZXJD
b21iaW5lVGV4dD4ocmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5k
ZXJlcikuaXNDb21iaW5lZCgpOwotfQotCi1jb25zdCBGb250Q2FzY2FkZSYgUGF0aFRleHRSdW46
OmZvbnRDYXNjYWRlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNDb21iaW5lZFRleHQoKSkKLSAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKS50ZXh0Q29t
YmluZUZvbnQoKTsKLQotICAgIHJldHVybiBzdHlsZSgpLmZvbnRDYXNjYWRlKCk7Ci19Ci0KLVJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgUGF0aFJ1bjo6c2VsZWN0aW9uU3RhdGUoKSBjb25z
dAotewotICAgIGlmIChpc1RleHQoKSkgewotICAgICAgICBhdXRvJiB0ZXh0ID0gZG93bmNhc3Q8
UGF0aFRleHRSdW4+KCp0aGlzKTsKLSAgICAgICAgYXV0byYgcmVuZGVyZXIgPSB0ZXh0LnJlbmRl
cmVyKCk7Ci0gICAgICAgIHJldHVybiByZW5kZXJlci52aWV3KCkuc2VsZWN0aW9uKCkuaGlnaGxp
Z2h0U3RhdGVGb3JUZXh0Qm94KHJlbmRlcmVyLCB0ZXh0LnNlbGVjdGFibGVSYW5nZSgpKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhdGUoKTsKLX0KLQotVGV4dFJ1
bkl0ZXJhdG9yOjpUZXh0UnVuSXRlcmF0b3IoUGF0aFJ1bjo6UGF0aFZhcmlhbnQmJiBwYXRoVmFy
aWFudCkKLSAgICA6IFJ1bkl0ZXJhdG9yKFdURk1vdmUocGF0aFZhcmlhbnQpKQotewotfQotCi1U
ZXh0UnVuSXRlcmF0b3I6OlRleHRSdW5JdGVyYXRvcihjb25zdCBQYXRoUnVuJiBydW4pCi0gICAg
OiBSdW5JdGVyYXRvcihydW4pCi17Ci19Ci0KLVRleHRSdW5JdGVyYXRvciYgVGV4dFJ1bkl0ZXJh
dG9yOjp0cmF2ZXJzZU5leHRUZXh0UnVuKCkKLXsKLSAgICBXVEY6OnN3aXRjaE9uKG1fcnVuLm1f
cGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcGF0aC50cmF2ZXJzZU5leHRU
ZXh0UnVuKCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1UZXh0UnVuSXRlcmF0
b3ImIFRleHRSdW5JdGVyYXRvcjo6dHJhdmVyc2VOZXh0VGV4dFJ1bkluVGV4dE9yZGVyKCkKLXsK
LSAgICBXVEY6OnN3aXRjaE9uKG1fcnVuLm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsK
LSAgICAgICAgcGF0aC50cmF2ZXJzZU5leHRUZXh0UnVuSW5UZXh0T3JkZXIoKTsKLSAgICB9KTsK
LSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVJ1bkl0ZXJhdG9yJiBSdW5JdGVyYXRvcjo6dHJhdmVy
c2VOZXh0T25MaW5lKCkKLXsKLSAgICBXVEY6OnN3aXRjaE9uKG1fcnVuLm1fcGF0aFZhcmlhbnQs
IFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcGF0aC50cmF2ZXJzZU5leHRPbkxpbmUoKTsKLSAg
ICB9KTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVJ1bkl0ZXJhdG9yJiBSdW5JdGVyYXRvcjo6
dHJhdmVyc2VQcmV2aW91c09uTGluZSgpCi17Ci0gICAgV1RGOjpzd2l0Y2hPbihtX3J1bi5tX3Bh
dGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHBhdGgudHJhdmVyc2VQcmV2aW91
c09uTGluZSgpOwotICAgIH0pOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotUnVuSXRlcmF0b3Im
IFJ1bkl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpCi17Ci0g
ICAgZG8gewotICAgICAgICB0cmF2ZXJzZU5leHRPbkxpbmUoKTsKLSAgICB9IHdoaWxlICghYXRF
bmQoKSAmJiBtX3J1bi5pc0xpbmVCcmVhaygpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVJ1
bkl0ZXJhdG9yJiBSdW5JdGVyYXRvcjo6dHJhdmVyc2VQcmV2aW91c09uTGluZUlnbm9yaW5nTGlu
ZUJyZWFrKCkKLXsKLSAgICBkbyB7Ci0gICAgICAgIHRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKTsK
LSAgICB9IHdoaWxlICghYXRFbmQoKSAmJiBtX3J1bi5pc0xpbmVCcmVhaygpKTsKLSAgICByZXR1
cm4gKnRoaXM7Ci19Ci0KLVJ1bkl0ZXJhdG9yJiBSdW5JdGVyYXRvcjo6dHJhdmVyc2VOZXh0T25M
aW5lSW5Mb2dpY2FsT3JkZXIoKQotewotICAgIFdURjo6c3dpdGNoT24obV9ydW4ubV9wYXRoVmFy
aWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICBwYXRoLnRyYXZlcnNlTmV4dE9uTGluZUlu
TG9naWNhbE9yZGVyKCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1SdW5JdGVy
YXRvciYgUnVuSXRlcmF0b3I6OnRyYXZlcnNlUHJldmlvdXNPbkxpbmVJbkxvZ2ljYWxPcmRlcigp
Ci17Ci0gICAgV1RGOjpzd2l0Y2hPbihtX3J1bi5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRo
KSB7Ci0gICAgICAgIHBhdGgudHJhdmVyc2VQcmV2aW91c09uTGluZUluTG9naWNhbE9yZGVyKCk7
Ci0gICAgfSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1UZXh0UnVuSXRlcmF0b3IgZmlyc3RU
ZXh0UnVuRm9yKGNvbnN0IFJlbmRlclRleHQmIHRleHQpCi17Ci0jaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCi0gICAgaWYgKGF1dG8qIGxpbmVMYXlvdXQgPSBMaW5lTGF5b3V0
Ojpjb250YWluaW5nKHRleHQpKQotICAgICAgICByZXR1cm4gbGluZUxheW91dC0+dGV4dFJ1bnNG
b3IodGV4dCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiB7IFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aCB7
IHRleHQuZmlyc3RUZXh0Qm94KCkgfSB9OwotfQotCi1UZXh0UnVuSXRlcmF0b3IgZmlyc3RUZXh0
UnVuSW5UZXh0T3JkZXJGb3IoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKLXsKLSAgICBpZiAodGV4
dC5maXJzdFRleHRCb3goKSAmJiB0ZXh0LmNvbnRhaW5zUmV2ZXJzZWRUZXh0KCkpIHsKLSAgICAg
ICAgVmVjdG9yPGNvbnN0IExlZ2FjeUlubGluZUJveCo+IHNvcnRlZFRleHRCb3hlczsKLSAgICAg
ICAgZm9yIChhdXRvKiB0ZXh0Qm94ID0gdGV4dC5maXJzdFRleHRCb3goKTsgdGV4dEJveDsgdGV4
dEJveCA9IHRleHRCb3gtPm5leHRUZXh0Qm94KCkpCi0gICAgICAgICAgICBzb3J0ZWRUZXh0Qm94
ZXMuYXBwZW5kKHRleHRCb3gpOwotICAgICAgICBzdGQ6OnNvcnQoc29ydGVkVGV4dEJveGVzLmJl
Z2luKCksIHNvcnRlZFRleHRCb3hlcy5lbmQoKSwgW10oYXV0byogYSwgYXV0byogYikgewotICAg
ICAgICAgICAgcmV0dXJuIExlZ2FjeUlubGluZVRleHRCb3g6OmNvbXBhcmVCeVN0YXJ0KGRvd25j
YXN0PExlZ2FjeUlubGluZVRleHRCb3g+KGEpLCBkb3duY2FzdDxMZWdhY3lJbmxpbmVUZXh0Qm94
PihiKSk7Ci0gICAgICAgIH0pOwotICAgICAgICBhdXRvKiBmaXJzdCA9IHNvcnRlZFRleHRCb3hl
c1swXTsKLSAgICAgICAgcmV0dXJuIHsgUnVuSXRlcmF0b3JMZWdhY3lQYXRoIHsgZmlyc3QsIFdU
Rk1vdmUoc29ydGVkVGV4dEJveGVzKSwgMCB9IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIGZpcnN0
VGV4dFJ1bkZvcih0ZXh0KTsKLX0KLQotVGV4dFJ1bkl0ZXJhdG9yIHRleHRSdW5Gb3IoY29uc3Qg
TGVnYWN5SW5saW5lVGV4dEJveCogbGVnYWN5SW5saW5lVGV4dEJveCkKLXsKLSAgICByZXR1cm4g
eyBSdW5JdGVyYXRvckxlZ2FjeVBhdGggeyBsZWdhY3lJbmxpbmVUZXh0Qm94IH0gfTsKLX0KLQot
I2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotVGV4dFJ1bkl0ZXJhdG9yIHRl
eHRSdW5Gb3IoY29uc3QgSW5saW5lQ29udGVudCYgY29udGVudCwgY29uc3QgSW5saW5lRGlzcGxh
eTo6Qm94JiBib3gpCi17Ci0gICAgcmV0dXJuIHRleHRSdW5Gb3IoY29udGVudCwgY29udGVudC5p
bmRleEZvckJveChib3gpKTsKLX0KLQotVGV4dFJ1bkl0ZXJhdG9yIHRleHRSdW5Gb3IoY29uc3Qg
SW5saW5lQ29udGVudCYgY29udGVudCwgc2l6ZV90IGJveEluZGV4KQotewotICAgIEFTU0VSVChj
b250ZW50LmJveGVzW2JveEluZGV4XS50ZXh0KCkpOwotICAgIHJldHVybiB7IFJ1bkl0ZXJhdG9y
TW9kZXJuUGF0aCB7IGNvbnRlbnQsIGJveEluZGV4IH0gfTsKLX0KLSNlbmRpZgotCi1UZXh0UnVu
UmFuZ2UgdGV4dFJ1bnNGb3IoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKLXsKLSAgICByZXR1cm4g
eyBmaXJzdFRleHRSdW5Gb3IodGV4dCkgfTsKLX0KLQotUnVuSXRlcmF0b3IgcnVuRm9yKGNvbnN0
IFJlbmRlckxpbmVCcmVhayYgcmVuZGVyZXIpCi17Ci0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRU
SU5HX0NPTlRFWFQpCi0gICAgaWYgKGF1dG8qIGxpbmVMYXlvdXQgPSBMaW5lTGF5b3V0Ojpjb250
YWluaW5nKHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuIGxpbmVMYXlvdXQtPnJ1bkZvcihyZW5k
ZXJlcik7Ci0jZW5kaWYKLSAgICByZXR1cm4geyBSdW5JdGVyYXRvckxlZ2FjeVBhdGgocmVuZGVy
ZXIuaW5saW5lQm94V3JhcHBlcigpKSB9OwotfQotCi1SdW5JdGVyYXRvciBydW5Gb3IoY29uc3Qg
UmVuZGVyQm94JiByZW5kZXJlcikKLXsKLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKLSAgICBpZiAoYXV0byogbGluZUxheW91dCA9IExpbmVMYXlvdXQ6OmNvbnRhaW5pbmco
cmVuZGVyZXIpKQotICAgICAgICByZXR1cm4gbGluZUxheW91dC0+cnVuRm9yKHJlbmRlcmVyKTsK
LSNlbmRpZgotICAgIHJldHVybiB7IFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aChyZW5kZXJlci5pbmxp
bmVCb3hXcmFwcGVyKCkpIH07Ci19Ci0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKLVJ1bkl0ZXJhdG9yIHJ1bkZvcihjb25zdCBJbmxpbmVDb250ZW50JiBjb250ZW50LCBz
aXplX3QgcnVuSW5kZXgpCi17Ci0gICAgcmV0dXJuIHsgUnVuSXRlcmF0b3JNb2Rlcm5QYXRoIHsg
Y29udGVudCwgcnVuSW5kZXggfSB9OwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKLWNvbnN0IFJ1bkl0ZXJhdG9yTW9kZXJuUGF0aCYgUGF0aFJ1bjo6
bW9kZXJuUGF0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFJ1bkl0ZXJhdG9yTW9k
ZXJuUGF0aD4obV9wYXRoVmFyaWFudCk7Ci19Ci0jZW5kaWYKLQotY29uc3QgUnVuSXRlcmF0b3JM
ZWdhY3lQYXRoJiBQYXRoUnVuOjpsZWdhY3lQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RG
OjpnZXQ8UnVuSXRlcmF0b3JMZWdhY3lQYXRoPihtX3BhdGhWYXJpYW50KTsKLX0KLQotfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVn
cmF0aW9uUnVuSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQxMjFmZGIzNTQ5YmE4NGZjNTQ2YmJhMTZmMzQ4NzIzODRjOWM5NzkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaAorKysgL2Rldi9udWxs
CkBAIC0xLDM4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oIgotI2luY2x1ZGUgIkxh
eW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmgiCi0jaW5jbHVkZSAiTGVnYWN5
SW5saW5lRWxlbWVudEJveC5oIgotI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyTGluZUJyZWFrOwotY2xhc3MgUmVuZGVyT2JqZWN0
OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBSZW5kZXJUZXh0OwotCi1uYW1lc3BhY2UgTGF5
b3V0SW50ZWdyYXRpb24gewotCi1jbGFzcyBMaW5lSXRlcmF0b3I7Ci1jbGFzcyBSdW5JdGVyYXRv
cjsKLWNsYXNzIFRleHRSdW5JdGVyYXRvcjsKLQotc3RydWN0IEVuZEl0ZXJhdG9yIHsgfTsKLQot
Y2xhc3MgUGF0aFJ1biB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgUGF0aFZhcmlhbnQgPSBWYXJpYW50
PAotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotICAgICAgICBSdW5JdGVy
YXRvck1vZGVyblBhdGgsCi0jZW5kaWYKLSAgICAgICAgUnVuSXRlcmF0b3JMZWdhY3lQYXRoCi0g
ICAgPjsKLQotICAgIFBhdGhSdW4oUGF0aFZhcmlhbnQmJik7Ci0KLSAgICBib29sIGlzVGV4dCgp
IGNvbnN0OwotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdDsKLQotICAgIGZsb2F0IGxvZ2lj
YWxUb3AoKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IHJlY3QoKS55KCkgOiByZWN0
KCkueCgpOyB9Ci0gICAgZmxvYXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGlzSG9y
aXpvbnRhbCgpID8gcmVjdCgpLm1heFkoKSA6IHJlY3QoKS5tYXhYKCk7IH0KLSAgICBmbG9hdCBs
b2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gcmVjdCgpLngoKSA6
IHJlY3QoKS55KCk7IH0KLSAgICBmbG9hdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBp
c0hvcml6b250YWwoKSA/IHJlY3QoKS5tYXhYKCkgOiByZWN0KCkubWF4WSgpOyB9Ci0gICAgZmxv
YXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyByZWN0KCku
d2lkdGgoKSA6IHJlY3QoKS5oZWlnaHQoKTsgfQotICAgIGZsb2F0IGxvZ2ljYWxIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IHJlY3QoKS5oZWlnaHQoKSA6IHJlY3QoKS53
aWR0aCgpOyB9Ci0KLSAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0OwotICAgIGJvb2wgZGly
T3ZlcnJpZGUoKSBjb25zdDsKLSAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3Q7Ci0KLSAgICB1
bnNpZ25lZCBtaW5pbXVtQ2FyZXRPZmZzZXQoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBtYXhpbXVt
Q2FyZXRPZmZzZXQoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBsZWZ0bW9zdENhcmV0T2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWluaW11bUNhcmV0T2Zm
c2V0KCkgOiBtYXhpbXVtQ2FyZXRPZmZzZXQoKTsgfQotICAgIHVuc2lnbmVkIHJpZ2h0bW9zdENh
cmV0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4
aW11bUNhcmV0T2Zmc2V0KCkgOiBtaW5pbXVtQ2FyZXRPZmZzZXQoKTsgfQotCi0gICAgdW5zaWdu
ZWQgY2hhciBiaWRpTGV2ZWwoKSBjb25zdDsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGJpZGlMZXZlbCgpICUgMiA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRl
eHREaXJlY3Rpb246OkxUUjsgfQotICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIGRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUjsgfQotCi0gICAg
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0OwotCi0g
ICAgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcigpIGNvbnN0OwotICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSgpIGNvbnN0OwotCi0gICAgLy8gRm9yIGludGVybWVkaWF0ZSBwb3J0aW5n
IHN0ZXBzIG9ubHkuCi0gICAgY29uc3QgTGVnYWN5SW5saW5lQm94KiBsZWdhY3lJbmxpbmVCb3go
KSBjb25zdDsKLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLSAgICBjb25z
dCBJbmxpbmVEaXNwbGF5OjpCb3gqIGlubGluZUJveCgpIGNvbnN0OwotI2VuZGlmCi0gICAgUnVu
SXRlcmF0b3IgbmV4dE9uTGluZSgpIGNvbnN0OwotICAgIFJ1bkl0ZXJhdG9yIHByZXZpb3VzT25M
aW5lKCkgY29uc3Q7Ci0gICAgUnVuSXRlcmF0b3IgbmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFr
KCkgY29uc3Q7Ci0gICAgUnVuSXRlcmF0b3IgcHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVh
aygpIGNvbnN0OwotCi0gICAgTGluZUl0ZXJhdG9yIGxpbmUoKSBjb25zdDsKLQotcHJvdGVjdGVk
OgotICAgIGZyaWVuZCBjbGFzcyBSdW5JdGVyYXRvcjsKLSAgICBmcmllbmQgY2xhc3MgVGV4dFJ1
bkl0ZXJhdG9yOwotCi0gICAgLy8gVG8gaGVscCB3aXRoIGRlYnVnZ2luZy4KLSNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLSAgICBjb25zdCBSdW5JdGVyYXRvck1vZGVyblBh
dGgmIG1vZGVyblBhdGgoKSBjb25zdDsKLSNlbmRpZgotICAgIGNvbnN0IFJ1bkl0ZXJhdG9yTGVn
YWN5UGF0aCYgbGVnYWN5UGF0aCgpIGNvbnN0OwotCi0gICAgUGF0aFZhcmlhbnQgbV9wYXRoVmFy
aWFudDsKLX07Ci0KLWNsYXNzIFBhdGhUZXh0UnVuIDogcHVibGljIFBhdGhSdW4gewotcHVibGlj
OgotICAgIFBhdGhUZXh0UnVuKFBhdGhWYXJpYW50JiYpOwotCi0gICAgYm9vbCBoYXNIeXBoZW4o
KSBjb25zdDsKLSAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIHN0
YXJ0KCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgZW5kKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4KSBj
b25zdDsKLSAgICBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCkgY29uc3Q7Ci0KLSAg
ICBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlIHNlbGVjdGFibGVSYW5nZSgpIGNvbnN0OwotICAgIExh
eW91dFJlY3Qgc2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25z
dDsKLQotICAgIGJvb2wgaXNDb21iaW5lZFRleHQoKSBjb25zdDsKLSAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udENhc2NhZGUoKSBjb25zdDsKLQotICAgIFRleHRSdW4gY3JlYXRlVGV4dFJ1bigp
IGNvbnN0OwotCi0gICAgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIoKSBjb25zdCB7IHJldHVy
biBkb3duY2FzdDxSZW5kZXJUZXh0PihQYXRoUnVuOjpyZW5kZXJlcigpKTsgfQotICAgIGNvbnN0
IExlZ2FjeUlubGluZVRleHRCb3gqIGxlZ2FjeUlubGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIGRv
d25jYXN0PExlZ2FjeUlubGluZVRleHRCb3g+KFBhdGhSdW46OmxlZ2FjeUlubGluZUJveCgpKTsg
fQotCi0gICAgVGV4dFJ1bkl0ZXJhdG9yIG5leHRUZXh0UnVuKCkgY29uc3Q7Ci0gICAgVGV4dFJ1
bkl0ZXJhdG9yIG5leHRUZXh0UnVuSW5UZXh0T3JkZXIoKSBjb25zdDsKLX07Ci0KLWNsYXNzIFJ1
bkl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBSdW5JdGVyYXRvcigpIDogbV9ydW4oUnVuSXRlcmF0
b3JMZWdhY3lQYXRoIHsgbnVsbHB0ciwgeyB9IH0pIHsgfTsKLSAgICBSdW5JdGVyYXRvcihQYXRo
UnVuOjpQYXRoVmFyaWFudCYmKTsKLSAgICBSdW5JdGVyYXRvcihjb25zdCBQYXRoUnVuJik7Ci0K
LSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gIWF0RW5kKCk7IH0K
LQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSdW5JdGVyYXRvciYpIGNvbnN0OwotICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBSdW5JdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oRW5kSXRlcmF0b3IpIGNv
bnN0IHsgcmV0dXJuIGF0RW5kKCk7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oRW5kSXRlcmF0b3Ip
IGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9Ci0KLSAgICBjb25zdCBQYXRoUnVuJiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiBtX3J1bjsgfQotICAgIGNvbnN0IFBhdGhSdW4qIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiAmbV9ydW47IH0KLQotICAgIGJvb2wgYXRFbmQoKSBjb25zdDsK
LQotICAgIFJ1bkl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRPbkxpbmUoKTsKLSAgICBSdW5JdGVyYXRv
ciYgdHJhdmVyc2VQcmV2aW91c09uTGluZSgpOwotICAgIFJ1bkl0ZXJhdG9yJiB0cmF2ZXJzZU5l
eHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOwotICAgIFJ1bkl0ZXJhdG9yJiB0cmF2ZXJzZVBy
ZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKLSAgICBSdW5JdGVyYXRvciYgdHJhdmVy
c2VOZXh0T25MaW5lSW5Mb2dpY2FsT3JkZXIoKTsKLSAgICBSdW5JdGVyYXRvciYgdHJhdmVyc2VQ
cmV2aW91c09uTGluZUluTG9naWNhbE9yZGVyKCk7Ci0KLXByb3RlY3RlZDoKLSAgICBQYXRoUnVu
IG1fcnVuOwotfTsKLQotY2xhc3MgVGV4dFJ1bkl0ZXJhdG9yIDogcHVibGljIFJ1bkl0ZXJhdG9y
IHsKLXB1YmxpYzoKLSAgICBUZXh0UnVuSXRlcmF0b3IoKSB7IH0KLSAgICBUZXh0UnVuSXRlcmF0
b3IoUGF0aFJ1bjo6UGF0aFZhcmlhbnQmJik7Ci0gICAgVGV4dFJ1bkl0ZXJhdG9yKGNvbnN0IFBh
dGhSdW4mKTsKLQotICAgIFRleHRSdW5JdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIHRy
YXZlcnNlTmV4dFRleHRSdW4oKTsgfQotCi0gICAgY29uc3QgUGF0aFRleHRSdW4mIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Ci0gICAgY29uc3QgUGF0aFRleHRSdW4qIG9wZXJh
dG9yLT4oKSBjb25zdCB7IHJldHVybiAmZ2V0KCk7IH0KLQotICAgIFRleHRSdW5JdGVyYXRvciYg
dHJhdmVyc2VOZXh0VGV4dFJ1bigpOwotICAgIFRleHRSdW5JdGVyYXRvciYgdHJhdmVyc2VOZXh0
VGV4dFJ1bkluVGV4dE9yZGVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgUnVuSXRlcmF0b3ImIHRyYXZl
cnNlTmV4dE9uTGluZSgpID0gZGVsZXRlOwotICAgIFJ1bkl0ZXJhdG9yJiB0cmF2ZXJzZVByZXZp
b3VzT25MaW5lKCkgPSBkZWxldGU7Ci0gICAgUnVuSXRlcmF0b3ImIHRyYXZlcnNlTmV4dE9uTGlu
ZUlnbm9yaW5nTGluZUJyZWFrKCkgPSBkZWxldGU7Ci0gICAgUnVuSXRlcmF0b3ImIHRyYXZlcnNl
UHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpID0gZGVsZXRlOwotICAgIFJ1bkl0ZXJh
dG9yJiB0cmF2ZXJzZU5leHRPbkxpbmVJbkxvZ2ljYWxPcmRlcigpID0gZGVsZXRlOwotICAgIFJ1
bkl0ZXJhdG9yJiB0cmF2ZXJzZVByZXZpb3VzT25MaW5lSW5Mb2dpY2FsT3JkZXIoKSA9IGRlbGV0
ZTsKLQotICAgIGNvbnN0IFBhdGhUZXh0UnVuJiBnZXQoKSBjb25zdCB7IHJldHVybiBkb3duY2Fz
dDxQYXRoVGV4dFJ1bj4obV9ydW4pOyB9Ci19OwotCi1jbGFzcyBUZXh0UnVuUmFuZ2UgewotcHVi
bGljOgotICAgIFRleHRSdW5SYW5nZShUZXh0UnVuSXRlcmF0b3IgYmVnaW4pCi0gICAgICAgIDog
bV9iZWdpbihiZWdpbikKLSAgICB7Ci0gICAgfQotCi0gICAgVGV4dFJ1bkl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbjsgfQotICAgIEVuZEl0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIHsgfTsgfQotCi1wcml2YXRlOgotICAgIFRleHRSdW5JdGVyYXRvciBtX2JlZ2lu
OwotfTsKLQotVGV4dFJ1bkl0ZXJhdG9yIGZpcnN0VGV4dFJ1bkZvcihjb25zdCBSZW5kZXJUZXh0
Jik7Ci1UZXh0UnVuSXRlcmF0b3IgZmlyc3RUZXh0UnVuSW5UZXh0T3JkZXJGb3IoY29uc3QgUmVu
ZGVyVGV4dCYpOwotVGV4dFJ1bkl0ZXJhdG9yIHRleHRSdW5Gb3IoY29uc3QgTGVnYWN5SW5saW5l
VGV4dEJveCopOwotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotVGV4dFJ1
bkl0ZXJhdG9yIHRleHRSdW5Gb3IoY29uc3QgSW5saW5lQ29udGVudCYsIGNvbnN0IElubGluZURp
c3BsYXk6OkJveCYpOwotVGV4dFJ1bkl0ZXJhdG9yIHRleHRSdW5Gb3IoY29uc3QgSW5saW5lQ29u
dGVudCYsIHNpemVfdCBydW5JbmRleCk7Ci0jZW5kaWYKLVRleHRSdW5SYW5nZSB0ZXh0UnVuc0Zv
cihjb25zdCBSZW5kZXJUZXh0Jik7Ci1SdW5JdGVyYXRvciBydW5Gb3IoY29uc3QgUmVuZGVyTGlu
ZUJyZWFrJik7Ci1SdW5JdGVyYXRvciBydW5Gb3IoY29uc3QgUmVuZGVyQm94Jik7Ci0jaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi1SdW5JdGVyYXRvciBydW5Gb3IoY29uc3Qg
SW5saW5lQ29udGVudCYsIHNpemVfdCBydW5JbmRleCk7Ci0jZW5kaWYKLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaW5saW5lIFBhdGhSdW46
OlBhdGhSdW4oUGF0aFZhcmlhbnQmJiBwYXRoKQotICAgIDogbV9wYXRoVmFyaWFudChXVEZNb3Zl
KHBhdGgpKQotewotfQotCi1pbmxpbmUgYm9vbCBQYXRoUnVuOjppc1RleHQoKSBjb25zdAotewot
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsK
LSAgICAgICAgcmV0dXJuIHBhdGguaXNUZXh0KCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBGbG9h
dFJlY3QgUGF0aFJ1bjo6cmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
bV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5yZWN0
KCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBib29sIFBhdGhSdW46OmlzSG9yaXpvbnRhbCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYg
cGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pc0hvcml6b250YWwoKTsKLSAgICB9KTsKLX0K
LQotaW5saW5lIGJvb2wgUGF0aFJ1bjo6ZGlyT3ZlcnJpZGUoKSBjb25zdAotewotICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAg
cmV0dXJuIHBhdGguZGlyT3ZlcnJpZGUoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIGJvb2wgUGF0
aFJ1bjo6aXNMaW5lQnJlYWsoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1f
cGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguaXNMaW5l
QnJlYWsoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIFBhdGhSdW46Om1pbmltdW1D
YXJldE9mZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFy
aWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5taW5pbXVtQ2FyZXRP
ZmZzZXQoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIFBhdGhSdW46Om1heGltdW1D
YXJldE9mZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFy
aWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5tYXhpbXVtQ2FyZXRP
ZmZzZXQoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIGNoYXIgUGF0aFJ1bjo6Ymlk
aUxldmVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50
LCBbXShhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmJpZGlMZXZlbCgpOwotICAg
IH0pOwotfQotCi1pbmxpbmUgY29uc3QgUmVuZGVyT2JqZWN0JiBQYXRoUnVuOjpyZW5kZXJlcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0
byYgcGF0aCkgLT4gY29uc3QgUmVuZGVyT2JqZWN0JiB7Ci0gICAgICAgIHJldHVybiBwYXRoLnJl
bmRlcmVyKCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBjb25zdCBMZWdhY3lJbmxpbmVCb3gqIFBh
dGhSdW46OmxlZ2FjeUlubGluZUJveCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aD4obV9wYXRoVmFyaWFudCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBXVEY6OmdldDxSdW5JdGVyYXRvckxlZ2FjeVBh
dGg+KG1fcGF0aFZhcmlhbnQpLmxlZ2FjeUlubGluZUJveCgpOwotfQotCi0jaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi1pbmxpbmUgY29uc3QgSW5saW5lRGlzcGxheTo6Qm94
KiBQYXRoUnVuOjppbmxpbmVCb3goKSBjb25zdAotewotICAgIGlmICghV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxSdW5JdGVyYXRvck1vZGVyblBhdGg+KG1fcGF0aFZhcmlhbnQpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gJldURjo6Z2V0PFJ1bkl0ZXJhdG9yTW9kZXJuUGF0
aD4obV9wYXRoVmFyaWFudCkuYm94KCk7Ci19Ci0jZW5kaWYKLQotaW5saW5lIGJvb2wgUGF0aFRl
eHRSdW46Omhhc0h5cGhlbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9w
YXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5oYXNIeXBo
ZW4oKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIFBhdGhUZXh0UnVuOjpQYXRoVGV4dFJ1bihQYXRo
VmFyaWFudCYmIHBhdGgpCi0gICAgOiBQYXRoUnVuKFdURk1vdmUocGF0aCkpCi17Ci19Ci0KLWlu
bGluZSBTdHJpbmdWaWV3IFBhdGhUZXh0UnVuOjp0ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJl
dHVybiBwYXRoLnRleHQoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIFBhdGhUZXh0
UnVuOjpzdGFydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFy
aWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5zdGFydCgpOwotICAg
IH0pOwotfQotCi1pbmxpbmUgdW5zaWduZWQgUGF0aFRleHRSdW46OmVuZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewot
ICAgICAgICByZXR1cm4gcGF0aC5lbmQoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIHVuc2lnbmVk
IFBhdGhUZXh0UnVuOjpsZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGgubGVu
Z3RoKCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBQYXRoVGV4dFJ1bjo6b2Zmc2V0
Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3BhdGhWYXJpYW50LCBbJl0oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5vZmZz
ZXRGb3JQb3NpdGlvbih4KTsKLSAgICB9KTsKLX0KLQotaW5saW5lIGZsb2F0IFBhdGhUZXh0UnVu
Ojpwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgWyZdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAg
cmV0dXJuIHBhdGgucG9zaXRpb25Gb3JPZmZzZXQob2Zmc2V0KTsKLSAgICB9KTsKLX0KLQotaW5s
aW5lIFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UgUGF0aFRleHRSdW46OnNlbGVjdGFibGVSYW5nZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgWyZdKGF1
dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguc2VsZWN0YWJsZVJhbmdlKCk7Ci0gICAg
fSk7Ci19Ci0KLWlubGluZSBUZXh0UnVuIFBhdGhUZXh0UnVuOjpjcmVhdGVUZXh0UnVuKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbJl0oYXV0byYg
cGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5jcmVhdGVUZXh0UnVuKCk7Ci0gICAgfSk7Ci19
Ci0KLX0KLX0KLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpMYXlvdXRJ
bnRlZ3JhdGlvbjo6UGF0aFRleHRSdW4pCi1zdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhSdW4mIHJ1bikgeyByZXR1cm4gcnVuLmlzVGV4dCgp
OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvcikKLXN0
YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRl
cmF0b3ImIHJ1bkl0ZXJhdG9yKSB7IHJldHVybiAhcnVuSXRlcmF0b3IgfHwgcnVuSXRlcmF0b3It
PmlzVGV4dCgpOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvckxlZ2FjeVBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlv
dXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBhZGQyNWMyZDRlOTk2ZTQ2YjgxYzg1NmE3YjIyOGI3MjczMzhhMTZmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5UGF0
aC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIkxlZ2FjeUlubGluZVRleHRCb3guaCIKLSNpbmNsdWRlICJMZWdh
Y3lSb290SW5saW5lQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgotI2luY2x1ZGUgIlRl
eHRCb3hTZWxlY3RhYmxlUmFuZ2UuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3Bh
Y2UgTGF5b3V0SW50ZWdyYXRpb24gewotCi1jbGFzcyBSdW5JdGVyYXRvckxlZ2FjeVBhdGggewot
cHVibGljOgotICAgIFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aChjb25zdCBMZWdhY3lJbmxpbmVCb3gq
IGlubGluZUJveCwgVmVjdG9yPGNvbnN0IExlZ2FjeUlubGluZUJveCo+JiYgc29ydGVkSW5saW5l
Qm94ZXMgPSB7IH0sIHNpemVfdCBzb3J0ZWRJbmxpbmVCb3hJbmRleCA9IDApCi0gICAgICAgIDog
bV9pbmxpbmVCb3goaW5saW5lQm94KQotICAgICAgICAsIG1fbG9naWNhbE9yZGVyQ2FjaGUoV1RG
TW92ZShzb3J0ZWRJbmxpbmVCb3hlcykpCi0gICAgICAgICwgbV9sb2dpY2FsT3JkZXJDYWNoZUlu
ZGV4KHNvcnRlZElubGluZUJveEluZGV4KQotICAgIHsgfQotCi0gICAgZW51bSBjbGFzcyBMb2dp
Y2FsT3JkZXIgeyBTdGFydCwgRW5kIH07Ci0gICAgUnVuSXRlcmF0b3JMZWdhY3lQYXRoKGNvbnN0
IExlZ2FjeVJvb3RJbmxpbmVCb3gmIHJvb3QsIExvZ2ljYWxPcmRlciBvcmRlcikKLSAgICAgICAg
OiBtX2xvZ2ljYWxPcmRlckNhY2hlKGlubGluZUJveGVzSW5Mb2dpY2FsT3JkZXIocm9vdCkpCi0g
ICAgewotICAgICAgICBpZiAoIW1fbG9naWNhbE9yZGVyQ2FjaGUuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBtX2xvZ2ljYWxPcmRlckNhY2hlSW5kZXggPSBvcmRlciA9PSBMb2dpY2FsT3JkZXI6
OlN0YXJ0ID8gMCA6IG1fbG9naWNhbE9yZGVyQ2FjaGUuc2l6ZSgpIC0gMTsKLSAgICAgICAgICAg
IG1faW5saW5lQm94ID0gbV9sb2dpY2FsT3JkZXJDYWNoZVttX2xvZ2ljYWxPcmRlckNhY2hlSW5k
ZXhdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVy
biBtX2lubGluZUJveC0+aXNJbmxpbmVUZXh0Qm94KCk7IH0KLQotICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmZyYW1lUmVjdCgpOyB9Ci0KLSAgICBib29s
IGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94LT5pc0hvcml6b250YWwo
KTsgfQotICAgIGJvb2wgZGlyT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+
ZGlyT3ZlcnJpZGUoKTsgfQotICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBt
X2lubGluZUJveC0+aXNMaW5lQnJlYWsoKTsgfQotCi0gICAgdW5zaWduZWQgbWluaW11bUNhcmV0
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmNhcmV0TWluT2Zmc2V0KCk7IH0K
LSAgICB1bnNpZ25lZCBtYXhpbXVtQ2FyZXRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2lubGlu
ZUJveC0+Y2FyZXRNYXhPZmZzZXQoKTsgfQotCi0gICAgdW5zaWduZWQgY2hhciBiaWRpTGV2ZWwo
KSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+YmlkaUxldmVsKCk7IH0KLQotICAgIGJvb2wg
aGFzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5oYXNIeXBoZW4oKTsg
fQotICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZ1ZpZXcoaW5saW5l
VGV4dEJveCgpLT5yZW5kZXJlcigpLnRleHQoKSkuc3Vic3RyaW5nKGlubGluZVRleHRCb3goKS0+
c3RhcnQoKSwgaW5saW5lVGV4dEJveCgpLT5sZW4oKSk7IH0KLSAgICB1bnNpZ25lZCBzdGFydCgp
IGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+c3RhcnQoKTsgfQotICAgIHVuc2lnbmVk
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+ZW5kKCk7IH0KLSAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPmxlbigpOyB9Ci0K
LSAgICB1bnNpZ25lZCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4KSBjb25zdCB7IHJldHVybiBp
bmxpbmVUZXh0Qm94KCktPm9mZnNldEZvclBvc2l0aW9uKHgpOyB9Ci0gICAgZmxvYXQgcG9zaXRp
b25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94
KCktPnBvc2l0aW9uRm9yT2Zmc2V0KG9mZnNldCk7IH0KLQotICAgIFRleHRCb3hTZWxlY3RhYmxl
UmFuZ2Ugc2VsZWN0YWJsZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5z
ZWxlY3RhYmxlUmFuZ2UoKTsgfQotCi0gICAgVGV4dFJ1biBjcmVhdGVUZXh0UnVuKCkgY29uc3Qg
eyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5jcmVhdGVUZXh0UnVuKCk7IH0KLQotICAgIGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
aW5saW5lQm94LT5yZW5kZXJlcigpOwotICAgIH0KLQotICAgIHZvaWQgdHJhdmVyc2VOZXh0VGV4
dFJ1bigpIHsgbV9pbmxpbmVCb3ggPSBpbmxpbmVUZXh0Qm94KCktPm5leHRUZXh0Qm94KCk7IH0K
LSAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRSdW5JblRleHRPcmRlcigpCi0gICAgewotICAgICAg
ICBpZiAoIW1fbG9naWNhbE9yZGVyQ2FjaGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB0cmF2
ZXJzZU5leHRJbmxpbmVCb3hJbkNhY2hlT3JkZXIoKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9p
bmxpbmVCb3ggfHwgaXM8TGVnYWN5SW5saW5lVGV4dEJveD4obV9pbmxpbmVCb3gpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0cmF2ZXJzZU5leHRUZXh0UnVuKCk7
Ci0gICAgfQotCi0gICAgdm9pZCB0cmF2ZXJzZU5leHRPbkxpbmUoKQotICAgIHsKLSAgICAgICAg
bV9pbmxpbmVCb3ggPSBtX2lubGluZUJveC0+bmV4dExlYWZPbkxpbmUoKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKQotICAgIHsKLSAgICAgICAgbV9pbmxpbmVC
b3ggPSBtX2lubGluZUJveC0+cHJldmlvdXNMZWFmT25MaW5lKCk7Ci0gICAgfQotCi0gICAgdm9p
ZCB0cmF2ZXJzZU5leHRPbkxpbmVJbkxvZ2ljYWxPcmRlcigpCi0gICAgewotICAgICAgICBpbml0
aWFsaXplTG9naWNhbE9yZGVyQ2FjaGVGb3JMaW5lKCk7Ci0gICAgICAgIHRyYXZlcnNlTmV4dElu
bGluZUJveEluQ2FjaGVPcmRlcigpOwotICAgIH0KLQotICAgIHZvaWQgdHJhdmVyc2VQcmV2aW91
c09uTGluZUluTG9naWNhbE9yZGVyKCkKLSAgICB7Ci0gICAgICAgIGluaXRpYWxpemVMb2dpY2Fs
T3JkZXJDYWNoZUZvckxpbmUoKTsKLSAgICAgICAgdHJhdmVyc2VQcmV2aW91c0lubGluZUJveElu
Q2FjaGVPcmRlcigpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSdW5JdGVy
YXRvckxlZ2FjeVBhdGgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveCA9PSBvdGhl
ci5tX2lubGluZUJveDsgfQotCi0gICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX2lu
bGluZUJveDsgfQotCi0gICAgTGVnYWN5SW5saW5lQm94KiBsZWdhY3lJbmxpbmVCb3goKSBjb25z
dCB7IHJldHVybiBjb25zdF9jYXN0PExlZ2FjeUlubGluZUJveCo+KG1faW5saW5lQm94KTsgfQot
ICAgIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gmIHJvb3RJbmxpbmVCb3goKSBjb25zdCB7IHJl
dHVybiBtX2lubGluZUJveC0+cm9vdCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgTGVnYWN5
SW5saW5lVGV4dEJveCogaW5saW5lVGV4dEJveCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PExl
Z2FjeUlubGluZVRleHRCb3g+KG1faW5saW5lQm94KTsgfQotCi0gICAgc3RhdGljIFZlY3Rvcjxj
b25zdCBMZWdhY3lJbmxpbmVCb3gqPiBpbmxpbmVCb3hlc0luTG9naWNhbE9yZGVyKGNvbnN0IExl
Z2FjeVJvb3RJbmxpbmVCb3gmIHJvb3QpCi0gICAgewotICAgICAgICBWZWN0b3I8TGVnYWN5SW5s
aW5lQm94Kj4gaW5saW5lQm94ZXM7Ci0gICAgICAgIHJvb3QuY29sbGVjdExlYWZCb3hlc0luTG9n
aWNhbE9yZGVyKGlubGluZUJveGVzKTsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
VmVjdG9yPGNvbnN0IExlZ2FjeUlubGluZUJveCo+Jj4oaW5saW5lQm94ZXMpOwotICAgIH0KLSAg
ICB2b2lkIGluaXRpYWxpemVMb2dpY2FsT3JkZXJDYWNoZUZvckxpbmUoKQotICAgIHsKLSAgICAg
ICAgaWYgKCFtX2lubGluZUJveCB8fCAhbV9sb2dpY2FsT3JkZXJDYWNoZS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbG9naWNhbE9yZGVyQ2FjaGUgPSBpbmxpbmVC
b3hlc0luTG9naWNhbE9yZGVyKG1faW5saW5lQm94LT5yb290KCkpOwotICAgICAgICBmb3IgKG1f
bG9naWNhbE9yZGVyQ2FjaGVJbmRleCA9IDA7IG1fbG9naWNhbE9yZGVyQ2FjaGVJbmRleCA8IG1f
bG9naWNhbE9yZGVyQ2FjaGUuc2l6ZSgpOyArK21fbG9naWNhbE9yZGVyQ2FjaGVJbmRleCkgewot
ICAgICAgICAgICAgaWYgKG1fbG9naWNhbE9yZGVyQ2FjaGVbbV9sb2dpY2FsT3JkZXJDYWNoZUlu
ZGV4XSA9PSBtX2lubGluZUJveCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgdm9pZCB0cmF2ZXJz
ZU5leHRJbmxpbmVCb3hJbkNhY2hlT3JkZXIoKTsKLSAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNJ
bmxpbmVCb3hJbkNhY2hlT3JkZXIoKTsKLQotICAgIGNvbnN0IExlZ2FjeUlubGluZUJveCogbV9p
bmxpbmVCb3ggeyBudWxscHRyIH07Ci0gICAgUmVmQ291bnRlZEFycmF5PGNvbnN0IExlZ2FjeUlu
bGluZUJveCo+IG1fbG9naWNhbE9yZGVyQ2FjaGU7Ci0gICAgc2l6ZV90IG1fbG9naWNhbE9yZGVy
Q2FjaGVJbmRleCB7IDAgfTsKLX07Ci0KLQotaW5saW5lIHZvaWQgUnVuSXRlcmF0b3JMZWdhY3lQ
YXRoOjp0cmF2ZXJzZU5leHRJbmxpbmVCb3hJbkNhY2hlT3JkZXIoKQotewotICAgIEFTU0VSVCgh
bV9sb2dpY2FsT3JkZXJDYWNoZS5pc0VtcHR5KCkpOwotICAgICsrbV9sb2dpY2FsT3JkZXJDYWNo
ZUluZGV4OwotICAgIG1faW5saW5lQm94ID0gbV9sb2dpY2FsT3JkZXJDYWNoZUluZGV4IDwgbV9s
b2dpY2FsT3JkZXJDYWNoZS5zaXplKCkgPyBtX2xvZ2ljYWxPcmRlckNhY2hlW21fbG9naWNhbE9y
ZGVyQ2FjaGVJbmRleF0gOiBudWxscHRyOwotfQotCi1pbmxpbmUgdm9pZCBSdW5JdGVyYXRvckxl
Z2FjeVBhdGg6OnRyYXZlcnNlUHJldmlvdXNJbmxpbmVCb3hJbkNhY2hlT3JkZXIoKQotewotICAg
IEFTU0VSVCghbV9sb2dpY2FsT3JkZXJDYWNoZS5pc0VtcHR5KCkpOwotICAgIGlmICghbV9sb2dp
Y2FsT3JkZXJDYWNoZUluZGV4KSB7Ci0gICAgICAgIG1faW5saW5lQm94ID0gbnVsbHB0cjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2lubGluZUJveCA9IG1fbG9naWNhbE9yZGVyQ2Fj
aGVbLS1tX2xvZ2ljYWxPcmRlckNhY2hlSW5kZXhdOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvck1vZGVyblBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlv
dXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9kZXJuUGF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyZjNhZTE3OWY4YWRkMGYzNWNjNGI1M2FmZWYxOWMxZGViNzYxZGVhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9kZXJuUGF0
aC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRl
bnQuaCIKLSNpbmNsdWRlICJUZXh0Qm94U2VsZWN0YWJsZVJhbmdlLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotbmFtZXNwYWNlIExheW91dEludGVncmF0aW9uIHsKLQotY2xhc3MgUnVuSXRl
cmF0b3JNb2Rlcm5QYXRoIHsKLXB1YmxpYzoKLSAgICBSdW5JdGVyYXRvck1vZGVyblBhdGgoY29u
c3QgSW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCkKLSAgICAgICAgOiBtX2lubGluZUNvbnRl
bnQoJmlubGluZUNvbnRlbnQpCi0gICAgewotICAgICAgICBzZXRBdEVuZCgpOwotICAgIH0KLSAg
ICBSdW5JdGVyYXRvck1vZGVyblBhdGgoY29uc3QgSW5saW5lQ29udGVudCYgaW5saW5lQ29udGVu
dCwgc2l6ZV90IHN0YXJ0SW5kZXgpCi0gICAgICAgIDogbV9pbmxpbmVDb250ZW50KCZpbmxpbmVD
b250ZW50KQotICAgICAgICAsIG1fYm94SW5kZXgoc3RhcnRJbmRleCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiAhIWJveCgpLnRleHQoKTsgfQotCi0g
ICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBib3goKS5sb2dpY2FsUmVjdCgpOyB9
Ci0KLSAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICBi
b29sIGRpck92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGlzTGlu
ZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gYm94KCkuaXNMaW5lQnJlYWsoKTsgfQotCi0gICAgdW5z
aWduZWQgbWluaW11bUNhcmV0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNUZXh0KCkgPyBzdGFy
dCgpIDogMDsgfQotICAgIHVuc2lnbmVkIG1heGltdW1DYXJldE9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIGlzVGV4dCgpID8gZW5kKCkgOiAxOyB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyIGJpZGlMZXZl
bCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGJvb2wgaGFzSHlwaGVuKCkgY29uc3QgeyBy
ZXR1cm4gYm94KCkudGV4dCgpLT5oYXNIeXBoZW4oKTsgfQotICAgIFN0cmluZ1ZpZXcgdGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGJveCgpLnRleHQoKS0+b3JpZ2luYWxDb250ZW50KCk7IH0KLSAgICB1
bnNpZ25lZCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIGJveCgpLnRleHQoKS0+c3RhcnQoKTsgfQot
ICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGJveCgpLnRleHQoKS0+ZW5kKCk7IH0K
LSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBib3goKS50ZXh0KCktPmxlbmd0
aCgpOyB9Ci0KLSAgICAvLyBGSVhNRTogTWFrZSBhIHNoYXJlZCBnZW5lcmljIHZlcnNpb24gb2Yg
dGhpcy4KLSAgICBpbmxpbmUgdW5zaWduZWQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChpc0xpbmVCcmVhaygpKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIGF1dG8gcmVjdCA9IHRoaXMtPnJlY3QoKTsKLSAgICAgICAgYXV0byBsb2Nh
bFggPSB4IC0gcmVjdC54KCk7Ci0gICAgICAgIGlmIChsb2NhbFggPiByZWN0LndpZHRoKCkpCi0g
ICAgICAgICAgICByZXR1cm4gbGVuZ3RoKCk7Ci0gICAgICAgIGlmIChsb2NhbFggPCAwKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyA9
IHRydWU7Ci0gICAgICAgIHJldHVybiBib3goKS5zdHlsZSgpLmZvbnRDYXNjYWRlKCkub2Zmc2V0
Rm9yUG9zaXRpb24oY3JlYXRlVGV4dFJ1bihIeXBoZW5Nb2RlOjpJZ25vcmUpLCBsb2NhbFgsIGlu
Y2x1ZGVQYXJ0aWFsR2x5cGhzKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogTWFrZSBhIHNoYXJl
ZCBnZW5lcmljIHZlcnNpb24gb2YgdGhpcy4KLSAgICBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1
bnNpZ25lZCBvZmZzZXQpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQob2Zmc2V0ID49IHN0
YXJ0KCkpOwotICAgICAgICBBU1NFUlQob2Zmc2V0IDw9IGVuZCgpKTsKLQotICAgICAgICBpZiAo
aXNMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgIHJldHVybiByZWN0KCkueCgpOwotCi0gICAgICAg
IGF1dG8gZW5kT2Zmc2V0ID0gc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAob2Zmc2V0KTsKLQotICAg
ICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KHJlY3QoKS54KCksIDAs
IDAsIDApOwotICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKEh5cGhlbk1v
ZGU6Oklnbm9yZSk7Ci0gICAgICAgIGJveCgpLnN0eWxlKCkuZm9udENhc2NhZGUoKS5hZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCAwLCBlbmRPZmZzZXQp
OwotICAgICAgICByZXR1cm4gc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0
aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpLCB0ZXh0UnVuLmx0cigpKS5tYXhYKCk7Ci0gICAgfQotCi0gICAgVGV4dEJveFNlbGVjdGFi
bGVSYW5nZSBzZWxlY3RhYmxlUmFuZ2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgIHN0YXJ0KCksCi0gICAgICAgICAgICBsZW5ndGgoKSwKLSAgICAgICAgICAg
IGJveCgpLnRleHQoKS0+aGFzSHlwaGVuKCkgPyBib3goKS5zdHlsZSgpLmh5cGhlblN0cmluZygp
Lmxlbmd0aCgpIDogMCwKLSAgICAgICAgICAgIGJveCgpLmlzTGluZUJyZWFrKCkKLSAgICAgICAg
fTsKLSAgICB9Ci0KLSAgICBUZXh0UnVuIGNyZWF0ZVRleHRSdW4oKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZVRleHRSdW4oSHlwaGVuTW9kZTo6SW5jbHVkZSk7Ci0gICAgfTsK
LQotICAgIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1faW5saW5lQ29udGVudC0+cmVuZGVyZXJGb3JMYXlvdXRCb3goYm94KCkubGF5
b3V0Qm94KCkpOwotICAgIH0KLQotICAgIHZvaWQgdHJhdmVyc2VOZXh0VGV4dFJ1bigpCi0gICAg
ewotICAgICAgICBBU1NFUlQoIWF0RW5kKCkpOwotICAgICAgICBBU1NFUlQoYm94KCkudGV4dCgp
KTsKLQotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBib3goKS5sYXlvdXRCb3goKTsKLQotICAg
ICAgICB0cmF2ZXJzZU5leHRMZWFmKCk7Ci0KLSAgICAgICAgaWYgKCFhdEVuZCgpICYmICZsYXlv
dXRCb3ggIT0gJmJveCgpLmxheW91dEJveCgpKQotICAgICAgICAgICAgc2V0QXRFbmQoKTsKLQot
ICAgICAgICBBU1NFUlQoYXRFbmQoKSB8fCBib3goKS50ZXh0KCkpOwotICAgIH0KLQotICAgIHZv
aWQgdHJhdmVyc2VOZXh0VGV4dFJ1bkluVGV4dE9yZGVyKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBObyBSVEwgaW4gTEZDLgotICAgICAgICB0cmF2ZXJzZU5leHRUZXh0UnVuKCk7Ci0gICAg
fQotCi0gICAgdm9pZCB0cmF2ZXJzZU5leHRPbkxpbmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KCFhdEVuZCgpKTsKLQotICAgICAgICBhdXRvIG9sZExpbmVJbmRleCA9IGJveCgpLmxpbmVJbmRl
eCgpOwotCi0gICAgICAgIHRyYXZlcnNlTmV4dExlYWYoKTsKLQotICAgICAgICBpZiAoIWF0RW5k
KCkgJiYgb2xkTGluZUluZGV4ICE9IGJveCgpLmxpbmVJbmRleCgpKQotICAgICAgICAgICAgc2V0
QXRFbmQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKCFhdEVuZCgpKTsKLQotICAgICAgICBhdXRvIG9sZExpbmVJbmRl
eCA9IGJveCgpLmxpbmVJbmRleCgpOwotCi0gICAgICAgIHRyYXZlcnNlUHJldmlvdXNMZWFmKCk7
Ci0KLSAgICAgICAgaWYgKCFhdEVuZCgpICYmIG9sZExpbmVJbmRleCAhPSBib3goKS5saW5lSW5k
ZXgoKSkKLSAgICAgICAgICAgIHNldEF0RW5kKCk7Ci0gICAgfQotCi0gICAgdm9pZCB0cmF2ZXJz
ZU5leHRPbkxpbmVJbkxvZ2ljYWxPcmRlcigpCi0gICAgewotICAgICAgICB0cmF2ZXJzZU5leHRP
bkxpbmUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNPbkxpbmVJbkxvZ2lj
YWxPcmRlcigpCi0gICAgewotICAgICAgICB0cmF2ZXJzZVByZXZpb3VzT25MaW5lKCk7Ci0gICAg
fQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJ1bkl0ZXJhdG9yTW9kZXJuUGF0aCYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGVudCA9PSBvdGhlci5tX2lubGluZUNvbnRl
bnQgJiYgbV9ib3hJbmRleCA9PSBvdGhlci5tX2JveEluZGV4OyB9Ci0KLSAgICBib29sIGF0RW5k
KCkgY29uc3QgeyByZXR1cm4gbV9ib3hJbmRleCA9PSBib3hlcygpLnNpemUoKTsgfQotICAgIGNv
bnN0IElubGluZURpc3BsYXk6OkJveCYgYm94KCkgY29uc3QgeyByZXR1cm4gYm94ZXMoKVttX2Jv
eEluZGV4XTsgfQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBMaW5lSXRlcmF0b3JNb2Rl
cm5QYXRoOwotICAgIGZyaWVuZCBjbGFzcyBQYXRoUnVuOwotICAgIGZyaWVuZCBjbGFzcyBSdW5J
dGVyYXRvcjsKLQotICAgIHZvaWQgdHJhdmVyc2VOZXh0TGVhZigpCi0gICAgewotICAgICAgICBB
U1NFUlQoIWF0RW5kKCkpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICArK21fYm94SW5kZXg7
Ci0gICAgICAgIH0gd2hpbGUgKCFhdEVuZCgpICYmIGJveCgpLmlzSW5saW5lQm94KCkpOwotICAg
IH0KLQotICAgIHZvaWQgdHJhdmVyc2VQcmV2aW91c0xlYWYoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKCFhdEVuZCgpKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbV9ib3hJbmRleCA9IG1f
Ym94SW5kZXggPyBtX2JveEluZGV4IC0gMSA6IGJveGVzKCkuc2l6ZSgpOwotICAgICAgICB9IHdo
aWxlICghYXRFbmQoKSAmJiBib3goKS5pc0lubGluZUJveCgpKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldEF0RW5kKCkgeyBtX2JveEluZGV4ID0gYm94ZXMoKS5zaXplKCk7IH0KLQotICAgIGNvbnN0
IElubGluZUNvbnRlbnQ6OkJveGVzJiBib3hlcygpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29u
dGVudC0+Ym94ZXM7IH0KLSAgICBjb25zdCBMaW5lJiBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9p
bmxpbmVDb250ZW50LT5saW5lRm9yQm94KGJveCgpKTsgfQotCi0gICAgZW51bSBjbGFzcyBIeXBo
ZW5Nb2RlIHsgSW5jbHVkZSwgSWdub3JlIH07Ci0gICAgVGV4dFJ1biBjcmVhdGVUZXh0UnVuKEh5
cGhlbk1vZGUgaHlwaGVuTW9kZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGF1dG8mIHN0eWxlID0g
Ym94KCkuc3R5bGUoKTsKLSAgICAgICAgYXV0byBleHBhbnNpb24gPSBib3goKS5leHBhbnNpb24o
KTsKLSAgICAgICAgYXV0byByZWN0ID0gdGhpcy0+cmVjdCgpOwotICAgICAgICBhdXRvIHhQb3Mg
PSByZWN0LngoKSAtIChsaW5lKCkubGluZUJveExlZnQoKSArIGxpbmUoKS5jb250ZW50TGVmdCgp
KTsKLQotICAgICAgICBhdXRvIHRleHRGb3JSdW4gPSBbJl0gewotICAgICAgICAgICAgaWYgKGh5
cGhlbk1vZGUgPT0gSHlwaGVuTW9kZTo6SWdub3JlIHx8ICFoYXNIeXBoZW4oKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGV4dCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKLQotICAgICAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcodGV4dCgpLCBzdHlsZS5oeXBoZW5TdHJpbmcoKSk7Ci0g
ICAgICAgIH0oKTsKLQotICAgICAgICBUZXh0UnVuIHRleHRSdW4geyB0ZXh0Rm9yUnVuLCB4UG9z
LCBleHBhbnNpb24uaG9yaXpvbnRhbEV4cGFuc2lvbiwgZXhwYW5zaW9uLmJlaGF2aW9yIH07Ci0g
ICAgICAgIHRleHRSdW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0
eWxlLnRhYlNpemUoKSk7Ci0gICAgICAgIHJldHVybiB0ZXh0UnVuOwotICAgIH07Ci0KLSAgICBS
ZWZQdHI8Y29uc3QgSW5saW5lQ29udGVudD4gbV9pbmxpbmVDb250ZW50OwotICAgIHNpemVfdCBt
X2JveEluZGV4IHsgMCB9OwotfTsKLQotfQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDk0ZTFh
MGY3OWI0ZmUzZmExNTIxZTllZDUyMjc5ZDRiZTAwNzgyYWYuLmRkYWQwMzNjMWUzODAwZDIxOGQx
MjgwMDk5MWJlOTUwYzU0NmY0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNDEsMTUgKzQxLDE1IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVGV4dFJ1bkl0ZXJhdG9yIHsKK2NsYXNzIFRleHRC
b3hJdGVyYXRvciB7CiBwdWJsaWM6Ci0gICAgVGV4dFJ1bkl0ZXJhdG9yKCkKKyAgICBUZXh0Qm94
SXRlcmF0b3IoKQogICAgICAgICA6IG1fdGV4dFJ1bigwKQogICAgICAgICAsIG1fb2Zmc2V0KDAp
CiAgICAgewogICAgIH0KIAotICAgIFRleHRSdW5JdGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0
UnVuLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgVGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4q
IHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkKICAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikK
ICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgewpAQCAtNjEsMTIgKzYxLDEyIEBAIHB1
YmxpYzoKICAgICBVQ2hhciBjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gKCptX3RleHRSdW4pW21f
b2Zmc2V0XTsgfQogICAgIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGF0RW5kKCkgPyBVX09USEVSX05FVVRSQUwgOiB1X2NoYXJEaXJlY3Rpb24oY3VycmVudCgpKTsg
fQogCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRleHRSdW5JdGVyYXRvciYgb3RoZXIpCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpCiAgICAgewog
ICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQgJiYgbV90ZXh0UnVuID09
IG90aGVyLm1fdGV4dFJ1bjsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGV4
dFJ1bkl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gIW9wZXJhdG9yPT0ob3RoZXIpOyB9CisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIHsgcmV0dXJuICFv
cGVyYXRvcj09KG90aGVyKTsgfQogCiBwcml2YXRlOgogICAgIGNvbnN0IFRleHRSdW4qIG1fdGV4
dFJ1bjsKQEAgLTQ5OSwxNCArNDk5LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6
OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pCiB7Ci0g
ICAgQmlkaVJlc29sdmVyPFRleHRSdW5JdGVyYXRvciwgQmlkaUNoYXJhY3RlclJ1bj4gYmlkaVJl
c29sdmVyOworICAgIEJpZGlSZXNvbHZlcjxUZXh0Qm94SXRlcmF0b3IsIEJpZGlDaGFyYWN0ZXJS
dW4+IGJpZGlSZXNvbHZlcjsKICAgICBiaWRpUmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMo
cnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpKSk7Ci0gICAgYmlkaVJl
c29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhUZXh0UnVuSXRlcmF0b3Io
JnJ1biwgMCkpOworICAgIGJpZGlSZXNvbHZlci5zZXRQb3NpdGlvbklnbm9yaW5nTmVzdGVkSXNv
bGF0ZXMoVGV4dEJveEl0ZXJhdG9yKCZydW4sIDApKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG93
bmVyc2hpcCBzaG91bGQgYmUgcmV2ZXJzZWQuIFdlIHNob3VsZCBwYXNzIEJpZGlSdW5MaXN0CiAg
ICAgLy8gdG8gQmlkaVJlc29sdmVyIGluIGNyZWF0ZUJpZGlSdW5zRm9yTGluZS4KICAgICBCaWRp
UnVuTGlzdDxCaWRpQ2hhcmFjdGVyUnVuPiYgYmlkaVJ1bnMgPSBiaWRpUmVzb2x2ZXIucnVucygp
OwotICAgIGJpZGlSZXNvbHZlci5jcmVhdGVCaWRpUnVuc0ZvckxpbmUoVGV4dFJ1bkl0ZXJhdG9y
KCZydW4sIHJ1bi5sZW5ndGgoKSkpOworICAgIGJpZGlSZXNvbHZlci5jcmVhdGVCaWRpUnVuc0Zv
ckxpbmUoVGV4dEJveEl0ZXJhdG9yKCZydW4sIHJ1bi5sZW5ndGgoKSkpOwogCiAgICAgaWYgKCFi
aWRpUnVucy5ydW5Db3VudCgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmNwcAppbmRleCBlMmZkMjk5ZTFiNzI2
MTI4NWU2MWQ3ZTMwNDcyZDRkY2UyMjdkMWRlLi45OTgwODc4NDE4NDNlNWU5MzdiNjc2MDUwMDM0
MmVjNWNjY2M0ZTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRS
ZWN0Q29tcHV0YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DYXJldFJl
Y3RDb21wdXRhdGlvbi5jcHAKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJDYXJldFJlY3RD
b21wdXRhdGlvbi5oIgogCiAjaW5jbHVkZSAiRWRpdGluZy5oIgotI2luY2x1ZGUgIkxheW91dElu
dGVncmF0aW9uTGluZUl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5J
dGVyYXRvci5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94LmgiCisjaW5jbHVkZSAiSW5s
aW5lSXRlcmF0b3JMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVk
ZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCkBAIC0xMDks
NyArMTA5LDcgQEAgc3RhdGljIExheW91dFJlY3QgY29tcHV0ZUNhcmV0UmVjdEZvckVtcHR5RWxl
bWVudChjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgcmUKICAgICByZXR1cm4gY3VycmVudFN0
eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWN0IDogcmVjdC50cmFuc3Bvc2VkUmVj
dCgpOwogfQogCi1zdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0Rm9yTGluZVBvc2l0
aW9uKGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3ImIGxpbmUsIGZsb2F0IGxv
Z2ljYWxMZWZ0UG9zaXRpb24sIENhcmV0UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkKK3N0YXRpYyBM
YXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JMaW5lUG9zaXRpb24oY29uc3QgSW5saW5lSXRl
cmF0b3I6OkxpbmVJdGVyYXRvciYgbGluZSwgZmxvYXQgbG9naWNhbExlZnRQb3NpdGlvbiwgQ2Fy
ZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKQogewogICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9
IGxpbmUtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgIGF1dG8gbGluZVNlbGVjdGlvblJlY3QgPSBs
aW5lLT5zZWxlY3Rpb25SZWN0KCk7CkBAIC0xNzEsNyArMTcxLDcgQEAgc3RhdGljIExheW91dFJl
Y3QgY29tcHV0ZUNhcmV0UmVjdEZvclRleHQoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5B
bmRPZmZzZXQKICAgICBpZiAoIXJ1bkFuZE9mZnNldC5ydW4pCiAgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBhdXRvJiB0ZXh0UnVuID0gZG93bmNhc3Q8TGF5b3V0SW50ZWdyYXRpb246OlRleHRS
dW5JdGVyYXRvcj4ocnVuQW5kT2Zmc2V0LnJ1bik7CisgICAgYXV0byYgdGV4dFJ1biA9IGRvd25j
YXN0PElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3I+KHJ1bkFuZE9mZnNldC5ydW4pOwog
ICAgIGF1dG8gbGluZSA9IHRleHRSdW4tPmxpbmUoKTsKIAogICAgIGZsb2F0IHBvc2l0aW9uID0g
dGV4dFJ1bi0+cG9zaXRpb25Gb3JPZmZzZXQocnVuQW5kT2Zmc2V0Lm9mZnNldCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAppbmRleCBmYjIyMmZk
NGVmYWY1M2I2ODUwZTY5NDYzMDc0MjgwZDIyZmNiOTY3Li44YTVjZWY2MWY2NDJjMmFlN2E2MmYy
ZDk2M2RlODNiNTcxMTNhODVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGVnYWN5SW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdh
Y3lJbmxpbmVUZXh0Qm94LmgKQEAgLTMxLDggKzMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBSZW5kZXJDb21iaW5lVGV4dDsKIAotbmFtZXNwYWNlIExheW91dEludGVncmF0aW9u
IHsKLWNsYXNzIFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aDsKK25hbWVzcGFjZSBJbmxpbmVJdGVyYXRv
ciB7CitjbGFzcyBCb3hJdGVyYXRvckxlZ2FjeVBhdGg7CiB9CiAKIGNsYXNzIExlZ2FjeUlubGlu
ZVRleHRCb3ggOiBwdWJsaWMgTGVnYWN5SW5saW5lQm94IHsKQEAgLTE1NCw3ICsxNTQsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNNYXJrZXJzKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZnJp
ZW5kIGNsYXNzIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvckxlZ2FjeVBhdGg7CisgICAg
ZnJpZW5kIGNsYXNzIElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvckxlZ2FjeVBhdGg7CiAgICAg
ZnJpZW5kIGNsYXNzIFRleHRCb3hQYWludGVyOwogCiAgICAgY29uc3QgUmVuZGVyQ29tYmluZVRl
eHQqIGNvbWJpbmVkVGV4dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUxpbmVMYXlvdXQuY3BwCmluZGV4IDE3OTM5NWRmZDI1NmUzZWIwNjdjOWQ5YmFhZDM1NGUx
YTRlNTE1YmQuLmVlOGIwNDRjYTY5ZDNkYWMyYTUzZjdiZTZkM2UyYTg4MDE1NTFkYWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5jcHAKQEAgLTMwLDkg
KzMwLDkgQEAKICNpbmNsdWRlICJCcmVha2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJGbG9hdGlu
Z09iamVjdHMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiSW5s
aW5lSXRlcmF0b3JCb3guaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94U3R5bGUuaCIKICNpbmNs
dWRlICJJbmxpbmVXYWxrZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lRWxlbWVudEJveC5oIgogI2luY2x1ZGUgIkxl
Z2FjeUlubGluZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgpA
QCAtNTQ3LDcgKzU0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JU
ZXh0UnVuKExlZ2FjeVJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIEJpZGlSCiAKICAgICAvLyBJbmNs
dWRlIHRleHQgZGVjb3JhdGlvbiB2aXN1YWwgb3ZlcmZsb3cgYXMgcGFydCBvZiB0aGUgZ2x5cGgg
b3ZlcmZsb3cuCiAgICAgaWYgKCFyZW5kZXJlci5zdHlsZSgpLnRleHREZWNvcmF0aW9uc0luRWZm
ZWN0KCkuaXNFbXB0eSgpKQotICAgICAgICBnbHlwaE92ZXJmbG93LmV4dGVuZFRvKHZpc3VhbE92
ZXJmbG93Rm9yRGVjb3JhdGlvbnMocnVuLT5ib3goKS0+bGluZVN0eWxlKCksIExheW91dEludGVn
cmF0aW9uOjp0ZXh0UnVuRm9yKGRvd25jYXN0PExlZ2FjeUlubGluZVRleHRCb3g+KHJ1bi0+Ym94
KCkpKSkpOworICAgICAgICBnbHlwaE92ZXJmbG93LmV4dGVuZFRvKHZpc3VhbE92ZXJmbG93Rm9y
RGVjb3JhdGlvbnMocnVuLT5ib3goKS0+bGluZVN0eWxlKCksIElubGluZUl0ZXJhdG9yOjp0ZXh0
UnVuRm9yKGRvd25jYXN0PExlZ2FjeUlubGluZVRleHRCb3g+KHJ1bi0+Ym94KCkpKSkpOwogCiAg
ICAgaWYgKCFnbHlwaE92ZXJmbG93LmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQocnVuLT5i
b3goKS0+YmVoYXZlc0xpa2VUZXh0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcAppbmRleCBjMWM0YmZjNmU4NDVlNmMxZTJmZDE2M2JlZTg2OGZhZDQ3
NGZhNWM3Li5mMTQxMDBjNzRkZjY0MDAyYmQ3Y2YyMWM3NWYzMDdkNTZlZTQ3MjI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzMsOSArMzMs
OSBAQAogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFy
ZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdExvY2F0aW9uLmgiCi0jaW5jbHVkZSAiTGF5
b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJv
eC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZS5oIgogI2luY2x1ZGUgIkxheW91dElu
dGVncmF0aW9uTGluZUxheW91dC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRl
cmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKICNpbmNsdWRlICJMZWdhY3lJ
bmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTGVnYWN5TGluZUxheW91dC5oIgpAQCAtMzA0MSw3
ICszMDQxLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEZvckJvcmRlckZpdChMYXlv
dXRVbml0IHgsIExheW91dFVuaXQmIGxlZnQsIExheW91dFUKICAgICAvLyBXZSBkb24ndCBkZWFs
IHdpdGggcmVsYXRpdmUgcG9zaXRpb25pbmcuICBPdXIgYXNzdW1wdGlvbiBpcyB0aGF0IHlvdSBz
aHJpbmsgdG8gZml0IHRoZSBsaW5lcyB3aXRob3V0IGFjY291bnRpbmcKICAgICAvLyBmb3IgZWl0
aGVyIG92ZXJmbG93IG9yIHRyYW5zbGF0aW9ucyB2aWEgcmVsYXRpdmUgcG9zaXRpb25pbmcuCiAg
ICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGxpbmUgPSBMYXlv
dXRJbnRlZ3JhdGlvbjo6Zmlyc3RMaW5lRm9yKCp0aGlzKTsgbGluZTsgbGluZS50cmF2ZXJzZU5l
eHQoKSkgeworICAgICAgICBmb3IgKGF1dG8gbGluZSA9IElubGluZUl0ZXJhdG9yOjpmaXJzdExp
bmVGb3IoKnRoaXMpOyBsaW5lOyBsaW5lLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAgICAgICBs
ZWZ0ID0gc3RkOjptaW4obGVmdCwgeCArIExheW91dFVuaXQobGluZS0+Y29udGVudExvZ2ljYWxM
ZWZ0KCkpKTsKICAgICAgICAgICAgIHJpZ2h0ID0gc3RkOjptYXgocmlnaHQsIHggKyBMYXlvdXRV
bml0KGNlaWxmKGxpbmUtPmNvbnRlbnRMb2dpY2FsUmlnaHQoKSkpKTsKICAgICAgICAgfQpAQCAt
MzI0OCw3ICszMjQ4LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdFNlbGVj
dGlvblRvcEZvclByZWNlZGluZ0Jsb2NrKExheW91dFVuaXQgdG9wKQogICAgIGlmICghb2Zmc2V0
VG9CbG9ja0JlZm9yZS5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIHRvcDsKIAotICAgIGlmIChh
dXRvIGxhc3RMaW5lID0gTGF5b3V0SW50ZWdyYXRpb246Omxhc3RMaW5lRm9yKCpibG9ja0JlZm9y
ZSkpIHsKKyAgICBpZiAoYXV0byBsYXN0TGluZSA9IElubGluZUl0ZXJhdG9yOjpsYXN0TGluZUZv
cigqYmxvY2tCZWZvcmUpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUg
bGFzdExpbmVTZWxlY3Rpb25TdGF0ZSA9IGxhc3RMaW5lLT5zZWxlY3Rpb25TdGF0ZSgpOwogICAg
ICAgICBpZiAobGFzdExpbmVTZWxlY3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdo
dFN0YXRlOjpJbnNpZGUgJiYgbGFzdExpbmVTZWxlY3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlOjpTdGFydCkKICAgICAgICAgICAgIHJldHVybiB0b3A7CkBAIC0zMjc0
LDExICszMjc0LDExIEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrRmxvdzo6aW5saW5lU2VsZWN0aW9u
R2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvCiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCi0gICAgYXV0byBoYXNTZWxlY3RlZENoaWxkcmVuID0gWyZdKGNvbnN0IExh
eW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3ImIGxpbmUpIHsKKyAgICBhdXRvIGhhc1NlbGVj
dGVkQ2hpbGRyZW4gPSBbJl0oY29uc3QgSW5saW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvciYgbGlu
ZSkgewogICAgICAgICByZXR1cm4gbGluZS0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOwogICAgIH07CiAKLSAgICBhdXRvIGxpbmVTZWxlY3Rp
b25HYXAgPSBbJl0oY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OkxpbmVJdGVyYXRvciYgbGluZSwg
TGF5b3V0VW5pdCBzZWxUb3AsIExheW91dFVuaXQgc2VsSGVpZ2h0KSAtPiBHYXBSZWN0cyB7Cisg
ICAgYXV0byBsaW5lU2VsZWN0aW9uR2FwID0gWyZdKGNvbnN0IElubGluZUl0ZXJhdG9yOjpMaW5l
SXRlcmF0b3ImIGxpbmUsIExheW91dFVuaXQgc2VsVG9wLCBMYXlvdXRVbml0IHNlbEhlaWdodCkg
LT4gR2FwUmVjdHMgewogICAgICAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIGxpbmVT
dGF0ZSA9IGxpbmUtPnNlbGVjdGlvblN0YXRlKCk7CiAKICAgICAgICAgYm9vbCBsZWZ0R2FwLCBy
aWdodEdhcDsKQEAgLTMzMzEsOCArMzMzMSw4IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrRmxvdzo6
aW5saW5lU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvCiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfTsKIAotICAgIExheW91dEludGVncmF0aW9uOjpM
aW5lSXRlcmF0b3IgbGFzdFNlbGVjdGVkTGluZTsKLSAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6TGlu
ZUl0ZXJhdG9yIGxpbmUgPSBMYXlvdXRJbnRlZ3JhdGlvbjo6Zmlyc3RMaW5lRm9yKCp0aGlzKTsK
KyAgICBJbmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yIGxhc3RTZWxlY3RlZExpbmU7CisgICAg
SW5saW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvciBsaW5lID0gSW5saW5lSXRlcmF0b3I6OmZpcnN0
TGluZUZvcigqdGhpcyk7CiAgICAgZm9yICg7IGxpbmUgJiYgIWhhc1NlbGVjdGVkQ2hpbGRyZW4o
bGluZSk7IGxpbmUudHJhdmVyc2VOZXh0KCkpIHsgfQogCiAgICAgR2FwUmVjdHMgcmVzdWx0OwpA
QCAtMzM1OCw3ICszMzU4LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2tGbG93OjppbmxpbmVTZWxl
Y3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW8KIAogICAgIGlmIChj
b250YWluc1N0YXJ0ICYmICFsYXN0U2VsZWN0ZWRMaW5lKQogICAgICAgICAvLyBWaXNpYmxlU2Vs
ZWN0aW9uIG11c3Qgc3RhcnQganVzdCBhZnRlciBvdXIgbGFzdCBsaW5lLgotICAgICAgICBsYXN0
U2VsZWN0ZWRMaW5lID0gTGF5b3V0SW50ZWdyYXRpb246Omxhc3RMaW5lRm9yKCp0aGlzKTsKKyAg
ICAgICAgbGFzdFNlbGVjdGVkTGluZSA9IElubGluZUl0ZXJhdG9yOjpsYXN0TGluZUZvcigqdGhp
cyk7CiAKICAgICBpZiAobGFzdFNlbGVjdGVkTGluZSAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IEhp
Z2hsaWdodFN0YXRlOjpFbmQgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBIaWdobGlnaHRTdGF0ZTo6
Qm90aCkgewogICAgICAgICAvLyBVcGRhdGUgb3VyIGxhc3RZIHRvIGJlIHRoZSBib3R0b20gb2Yg
dGhlIGxhc3Qgc2VsZWN0ZWQgbGluZS4KQEAgLTM0NTUsNyArMzQ1NSw3IEBAIGJvb2wgUmVuZGVy
QmxvY2tGbG93Ojpjb250YWluc05vblplcm9CaWRpTGV2ZWwoKSBjb25zdAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotc3RhdGljIFBvc2l0aW9uIHBvc2l0aW9uRm9yUnVuKGNvbnN0IFJlbmRlckJs
b2NrRmxvdyYgZmxvdywgTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIHJ1biwgYm9vbCBz
dGFydCkKK3N0YXRpYyBQb3NpdGlvbiBwb3NpdGlvbkZvclJ1bihjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIGZsb3csIElubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciBydW4sIGJvb2wgc3RhcnQpCiB7
CiAgICAgaWYgKCFydW4pCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwpAQCAtMzQ2MywxMCAr
MzQ2MywxMCBAQCBzdGF0aWMgUG9zaXRpb24gcG9zaXRpb25Gb3JSdW4oY29uc3QgUmVuZGVyQmxv
Y2tGbG93JiBmbG93LCBMYXlvdXRJbnRlZ3JhdGlvbjo6UgogICAgIGlmICghcnVuLT5yZW5kZXJl
cigpLm5vblBzZXVkb05vZGUoKSkKICAgICAgICAgcmV0dXJuIG1ha2VEZXByZWNhdGVkTGVnYWN5
UG9zaXRpb24oZmxvdy5ub25Qc2V1ZG9FbGVtZW50KCksIHN0YXJ0ID8gZmxvdy5jYXJldE1pbk9m
ZnNldCgpIDogZmxvdy5jYXJldE1heE9mZnNldCgpKTsKIAotICAgIGlmICghaXM8TGF5b3V0SW50
ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvcj4ocnVuKSkKKyAgICBpZiAoIWlzPElubGluZUl0ZXJh
dG9yOjpUZXh0Qm94SXRlcmF0b3I+KHJ1bikpCiAgICAgICAgIHJldHVybiBtYWtlRGVwcmVjYXRl
ZExlZ2FjeVBvc2l0aW9uKHJ1bi0+cmVuZGVyZXIoKS5ub25Qc2V1ZG9Ob2RlKCksIHN0YXJ0ID8g
cnVuLT5yZW5kZXJlcigpLmNhcmV0TWluT2Zmc2V0KCkgOiBydW4tPnJlbmRlcmVyKCkuY2FyZXRN
YXhPZmZzZXQoKSk7CiAKLSAgICBhdXRvJiB0ZXh0UnVuID0gZG93bmNhc3Q8TGF5b3V0SW50ZWdy
YXRpb246OlRleHRSdW5JdGVyYXRvcj4ocnVuKTsKKyAgICBhdXRvJiB0ZXh0UnVuID0gZG93bmNh
c3Q8SW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcj4ocnVuKTsKICAgICByZXR1cm4gbWFr
ZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbih0ZXh0UnVuLT5yZW5kZXJlcigpLm5vblBzZXVkb05v
ZGUoKSwgc3RhcnQgPyB0ZXh0UnVuLT5zdGFydCgpIDogdGV4dFJ1bi0+ZW5kKCkpOwogfQogCkBA
IC0zNTE5LDcgKzM1MTksNyBAQCBSZW5kZXJUZXh0KiBSZW5kZXJCbG9ja0Zsb3c6OmZpbmRDbG9z
ZXN0VGV4dEF0QWJzb2x1dGVQb2ludChjb25zdCBGbG9hdFBvaW50JiBwbwogICAgIC8vIE9ubHkg
Y2hlY2sgdGhlIGdhcHMgYmV0d2VlbiB0aGUgcm9vdCBsaW5lIGJveGVzLiBXZSBkZWxpYmVyYXRl
bHkgaWdub3JlIG92ZXJmbG93IGJlY2F1c2UKICAgICAvLyBleHBlcmllbmNlIGhhcyBzaG93biB0
aGF0IGhpdCB0ZXN0cyBvbiBhbiBleHBsb2RlZCB0ZXh0IG5vZGUgY2FuIGZhaWwgd2hlbiB3aXRo
aW4gdGhlCiAgICAgLy8gb3ZlcmZsb3cgZnJhZ21lbnQuCi0gICAgZm9yIChhdXRvIGN1cnJlbnQg
PSBMYXlvdXRJbnRlZ3JhdGlvbjo6Zmlyc3RMaW5lRm9yKGJsb2NrRmxvdyksIGxhc3QgPSBMYXlv
dXRJbnRlZ3JhdGlvbjo6bGFzdExpbmVGb3IoYmxvY2tGbG93KTsgY3VycmVudCAmJiBjdXJyZW50
ICE9IGxhc3Q7IGN1cnJlbnQudHJhdmVyc2VOZXh0KCkpIHsKKyAgICBmb3IgKGF1dG8gY3VycmVu
dCA9IElubGluZUl0ZXJhdG9yOjpmaXJzdExpbmVGb3IoYmxvY2tGbG93KSwgbGFzdCA9IElubGlu
ZUl0ZXJhdG9yOjpsYXN0TGluZUZvcihibG9ja0Zsb3cpOyBjdXJyZW50ICYmIGN1cnJlbnQgIT0g
bGFzdDsgY3VycmVudC50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBmbG9hdCBjdXJyZW50Qm90
dG9tID0gY3VycmVudC0+eSgpICsgY3VycmVudC0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICBp
ZiAobG9jYWxQb2ludC55KCkgPCBjdXJyZW50Qm90dG9tKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0zNTM5LDcgKzM1MzksNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2tG
bG93Ojpwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dAogewog
ICAgIEFTU0VSVChjaGlsZHJlbklubGluZSgpKTsKIAotICAgIGF1dG8gZmlyc3RMaW5lID0gTGF5
b3V0SW50ZWdyYXRpb246OmZpcnN0TGluZUZvcigqdGhpcyk7CisgICAgYXV0byBmaXJzdExpbmUg
PSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RMaW5lRm9yKCp0aGlzKTsKIAogICAgIGlmICghZmlyc3RM
aW5lKQogICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIEFmZmluaXR5OjpE
b3duc3RyZWFtKTsKQEAgLTM1NDgsOSArMzU0OCw5IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJC
bG9ja0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0
CiAgICAgYm9vbCBibG9ja3NBcmVGbGlwcGVkID0gc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0
aW5nTW9kZSgpOwogCiAgICAgLy8gbG9vayBmb3IgdGhlIGNsb3Nlc3QgbGluZSBib3ggaW4gdGhl
IHJvb3QgYm94IHdoaWNoIGlzIGF0IHRoZSBwYXNzZWQtaW4geSBjb29yZGluYXRlCi0gICAgTGF5
b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yIGNsb3Nlc3RSdW47Ci0gICAgTGF5b3V0SW50ZWdy
YXRpb246OkxpbmVJdGVyYXRvciBmaXJzdExpbmVXaXRoQ2hpbGRyZW47Ci0gICAgTGF5b3V0SW50
ZWdyYXRpb246OkxpbmVJdGVyYXRvciBsYXN0TGluZVdpdGhDaGlsZHJlbjsKKyAgICBJbmxpbmVJ
dGVyYXRvcjo6Qm94SXRlcmF0b3IgY2xvc2VzdFJ1bjsKKyAgICBJbmxpbmVJdGVyYXRvcjo6TGlu
ZUl0ZXJhdG9yIGZpcnN0TGluZVdpdGhDaGlsZHJlbjsKKyAgICBJbmxpbmVJdGVyYXRvcjo6TGlu
ZUl0ZXJhdG9yIGxhc3RMaW5lV2l0aENoaWxkcmVuOwogICAgIGZvciAoYXV0byBsaW5lID0gZmly
c3RMaW5lOyBsaW5lOyBsaW5lLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAgIGlmIChmcmFnbWVu
dCAmJiBsaW5lLT5sZWdhY3lSb290SW5saW5lQm94KCkgJiYgbGluZS0+bGVnYWN5Um9vdElubGlu
ZUJveCgpLT5jb250YWluaW5nRnJhZ21lbnQoKSAhPSBmcmFnbWVudCkKICAgICAgICAgICAgIGNv
bnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAzMWRlNjBm
NGNhYzE5MjcwZDZkYzBhNGQ0MjVkYThkYjNhZTQzMzhjLi4zYTE2YmNlNDdmZTFjOWViMmM5MmNh
NzZkOGMzMjFhODFlMDgwOThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cApAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
KyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKICNpbmNsdWRlICJJbmxpbmVSdW5BbmRP
ZmZzZXQuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxheW91dC5oIgogI2luY2x1ZGUgIkxlZ2FjeUlu
bGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJQYWdlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggMmE4OGMyMWZjNDYxYjkwOWNhNzI5MTZmZmVj
NWQzZmE4OThlZmNkMi4uMDZjY2YwZmI4ZmY5ODFhMGRiYTc3N2U2MWVlMmM2Mjk4YTIwNDQ0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAtNDAsOCAr
NDAsOCBAQAogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFn
ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRl
Z3JhdGlvbkxpbmVJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRl
cmF0b3IuaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJveC5oIgorI2luY2x1ZGUgIklubGlu
ZUl0ZXJhdG9yTGluZS5oIgogI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC0xNjQ0LDEzICsxNjQ0LDEzIEBAIGJv
b2wgUmVuZGVyRWxlbWVudDo6Z2V0TGVhZGluZ0Nvcm5lcihGbG9hdFBvaW50JiBwb2ludCwgYm9v
bCYgaW5zaWRlRml4ZWQpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChwLT5ub2RlKCkgJiYgcC0+bm9kZSgpID09IGVsZW1lbnQoKSAmJiBp
czxSZW5kZXJUZXh0PigqbykgJiYgIUxheW91dEludGVncmF0aW9uOjpmaXJzdFRleHRSdW5Gb3Io
ZG93bmNhc3Q8UmVuZGVyVGV4dD4oKm8pKSkgeworICAgICAgICBpZiAocC0+bm9kZSgpICYmIHAt
Pm5vZGUoKSA9PSBlbGVtZW50KCkgJiYgaXM8UmVuZGVyVGV4dD4oKm8pICYmICFJbmxpbmVJdGVy
YXRvcjo6Zmlyc3RUZXh0UnVuRm9yKGRvd25jYXN0PFJlbmRlclRleHQ+KCpvKSkpIHsKICAgICAg
ICAgICAgIC8vIGRvIG5vdGhpbmcgLSBza2lwIHVucmVuZGVyZWQgd2hpdGVzcGFjZSB0aGF0IGlz
IGEgY2hpbGQgb3IgbmV4dCBzaWJsaW5nIG9mIHRoZSBhbmNob3IKICAgICAgICAgfSBlbHNlIGlm
IChpczxSZW5kZXJUZXh0PigqbykgfHwgby0+aXNSZXBsYWNlZCgpKSB7CiAgICAgICAgICAgICBw
b2ludCA9IEZsb2F0UG9pbnQoKTsKICAgICAgICAgICAgIGlmIChpczxSZW5kZXJUZXh0Pigqbykp
IHsKICAgICAgICAgICAgICAgICBhdXRvJiB0ZXh0UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJU
ZXh0Pigqbyk7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gcnVuID0gTGF5b3V0SW50ZWdyYXRp
b246OmZpcnN0VGV4dFJ1bkZvcih0ZXh0UmVuZGVyZXIpKQorICAgICAgICAgICAgICAgIGlmIChh
dXRvIHJ1biA9IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5Gb3IodGV4dFJlbmRlcmVyKSkK
ICAgICAgICAgICAgICAgICAgICAgcG9pbnQubW92ZSh0ZXh0UmVuZGVyZXIubGluZXNCb3VuZGlu
Z0JveCgpLngoKSwgcnVuLT5saW5lKCktPnRvcCgpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXM8UmVuZGVyQm94PigqbykpCiAgICAgICAgICAgICAgICAgcG9pbnQubW92ZUJ5KGRvd25jYXN0
PFJlbmRlckJveD4oKm8pLmxvY2F0aW9uKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZS5jcHAKaW5kZXggYmU5MmNhMDMwOGY2M2I0ZjljMjc3NDFiMjdkYTE2ZDk4N2EwOGZm
Mi4uYWMyNGM1NmFkYWVjMmI5MWZhMWZjZTM4NjVlNTcyZGUxZjU1OThhYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC00NCw4ICs0NCw4IEBACiAjaW5jbHVk
ZSAiSFRNTE1hcEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJI
aXRUZXN0UmVzdWx0LmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3Iu
aCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
SW5saW5lSXRlcmF0b3JCb3guaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVy
Q2hpbGRJdGVyYXRvci5oIgpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpjb2xs
ZWN0U2VsZWN0aW9uR2VvbWV0cmllcyhWZWN0b3I8U2VsZWN0aW9uR2VvbWV0cnk+JiBnZW9tZXRy
aQogICAgIGJvb2wgaXNGaXJzdE9uTGluZSA9IGZhbHNlOwogICAgIGJvb2wgaXNMYXN0T25MaW5l
ID0gZmFsc2U7CiAKLSAgICBhdXRvIHJ1biA9IExheW91dEludGVncmF0aW9uOjpydW5Gb3IoKnRo
aXMpOworICAgIGF1dG8gcnVuID0gSW5saW5lSXRlcmF0b3I6OnJ1bkZvcigqdGhpcyk7CiAgICAg
aWYgKCFydW4pIHsKICAgICAgICAgLy8gVGhpcyBpcyBhIGJsb2NrIGltYWdlLgogICAgICAgICBp
bWFnZVJlY3QgPSBJbnRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKaW5kZXggYWJjOWZiNmUxMWVhZWU4
NDJlMDViZGRmNmI5NzVlNDdhYTE5NGEwYy4uNzE4ODI2MzEwNWViN2Y4ZDA1MzMzNDM4NTRlMzFj
MzgwMjAxNTc1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
bmVCcmVhay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVh
ay5jcHAKQEAgLTI2LDkgKzI2LDkgQEAKICNpbmNsdWRlICJGb250TWV0cmljcy5oIgogI2luY2x1
ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFdCUkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJJbmxpbmVJdGVyYXRvckJveC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZS5oIgog
I2luY2x1ZGUgIklubGluZVJ1bkFuZE9mZnNldC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0
aW9uTGluZUl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRv
ci5oIgogI2luY2x1ZGUgIkxlZ2FjeUlubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJMZWdh
Y3lSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hl
cy5oIgpAQCAtMTQ0LDcgKzE0NCw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJMaW5lQnJlYWs6
OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kCiAKIEludFJl
Y3QgUmVuZGVyTGluZUJyZWFrOjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QKIHsKLSAgICBhdXRv
IHJ1biA9IExheW91dEludGVncmF0aW9uOjpydW5Gb3IoKnRoaXMpOworICAgIGF1dG8gcnVuID0g
SW5saW5lSXRlcmF0b3I6OnJ1bkZvcigqdGhpcyk7CiAgICAgaWYgKCFydW4pCiAgICAgICAgIHJl
dHVybiB7IH07CiAKQEAgLTE1Myw3ICsxNTMsNyBAQCBJbnRSZWN0IFJlbmRlckxpbmVCcmVhazo6
bGluZXNCb3VuZGluZ0JveCgpIGNvbnN0CiAKIHZvaWQgUmVuZGVyTGluZUJyZWFrOjphYnNvbHV0
ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCkgY29uc3QKIHsKLSAgICBhdXRvIGJveCA9IExheW91dEludGVncmF0aW9uOjpy
dW5Gb3IoKnRoaXMpOworICAgIGF1dG8gYm94ID0gSW5saW5lSXRlcmF0b3I6OnJ1bkZvcigqdGhp
cyk7CiAgICAgaWYgKCFib3gpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTYzLDcgKzE2Myw3IEBA
IHZvaWQgUmVuZGVyTGluZUJyZWFrOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVj
dHMsIGNvbnN0IExheW91dFBvaW50JiBhCiAKIHZvaWQgUmVuZGVyTGluZUJyZWFrOjphYnNvbHV0
ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4ZWQpIGNvbnN0CiB7
Ci0gICAgYXV0byBib3ggPSBMYXlvdXRJbnRlZ3JhdGlvbjo6cnVuRm9yKCp0aGlzKTsKKyAgICBh
dXRvIGJveCA9IElubGluZUl0ZXJhdG9yOjpydW5Gb3IoKnRoaXMpOwogICAgIGlmICghYm94KQog
ICAgICAgICByZXR1cm47CiAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFJlbmRlckxpbmVCcmVh
azo6dXBkYXRlRnJvbVN0eWxlKCkKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogdm9pZCBSZW5k
ZXJMaW5lQnJlYWs6OmNvbGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzKFZlY3RvcjxTZWxlY3Rpb25H
ZW9tZXRyeT4mIHJlY3RzLCB1bnNpZ25lZCwgdW5zaWduZWQpCiB7Ci0gICAgYXV0byBydW4gPSBM
YXlvdXRJbnRlZ3JhdGlvbjo6cnVuRm9yKCp0aGlzKTsKKyAgICBhdXRvIHJ1biA9IElubGluZUl0
ZXJhdG9yOjpydW5Gb3IoKnRoaXMpOwogCiAgICAgaWYgKCFydW4pCiAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCmluZGV4IDJiNTEz
NGQyODg4MmU0MTdmZGE1MzcwODFkNGJlNGNkZmRjNjNjYWEuLjlkMjliNzNmNGRkZGZlNWU4ZjNl
NjA0Zjk3ZjNkZjc4M2YyNTc1ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlcGxhY2VkLmNwcApAQCAtMzQsOCArMzQsOCBAQAogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlv
bXMuaCIKICNpbmNsdWRlICJIaWdobGlnaHREYXRhLmgiCiAjaW5jbHVkZSAiSGlnaGxpZ2h0UmVn
aXN0ZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJJbmxpbmVJ
dGVyYXRvckJveC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZS5oIgogI2luY2x1ZGUg
IkxheW91dFJlcGFpbnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAi
UmVuZGVyRnJhZ21lbnRlZEZsb3cuaCIKQEAgLTY4OSw3ICs2ODksNyBAQCB2b2lkIFJlbmRlclJl
cGxhY2VkOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiBWaXNpYmxlUG9zaXRpb24g
UmVuZGVyUmVwbGFjZWQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
LCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQpCiB7CiAgICAgYXV0byBb
dG9wLCBib3R0b21dID0gWyZdIHsKLSAgICAgICAgaWYgKGF1dG8gcnVuID0gTGF5b3V0SW50ZWdy
YXRpb246OnJ1bkZvcigqdGhpcykpIHsKKyAgICAgICAgaWYgKGF1dG8gcnVuID0gSW5saW5lSXRl
cmF0b3I6OnJ1bkZvcigqdGhpcykpIHsKICAgICAgICAgICAgIGF1dG8gbGluZSA9IHJ1bi0+bGlu
ZSgpOwogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxpbmUtPnNlbGVjdGlvblRv
cEZvckhpdFRlc3RpbmcoKSwgbGluZS0+c2VsZWN0aW9uQm90dG9tKCkpOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggMDgxNjRiMDA2Mzg0MzAz
OGJhNDg1ZjFjYTNlOGJjYzI4OTkxNmYwMi4uZmM0NmQ1ZDBlZmFjZTI5OTQwY2YxNjIzMmJhNDlh
ZGU4M2I3OWQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAt
MzUsMTAgKzM1LDEwIEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTFBh
cnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCisjaW5jbHVkZSAiSW5saW5l
SXRlcmF0b3JCb3guaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckxpbmUuaCIKICNpbmNsdWRl
ICJJbmxpbmVSdW5BbmRPZmZzZXQuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxheW91dC5oIgotI2lu
Y2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMZWdhY3lF
bGxpcHNpc0JveC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2su
aCIKQEAgLTMwNyw3ICszMDcsNyBAQCBTdHJpbmcgUmVuZGVyVGV4dDo6b3JpZ2luYWxUZXh0KCkg
Y29uc3QKIAogdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYg
cmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3QKIHsKLSAg
ICBmb3IgKGF1dG8mIHJ1biA6IExheW91dEludGVncmF0aW9uOjp0ZXh0UnVuc0ZvcigqdGhpcykp
IHsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IElubGluZUl0ZXJhdG9yOjp0ZXh0UnVuc0ZvcigqdGhp
cykpIHsKICAgICAgICAgYXV0byByZWN0ID0gcnVuLnJlY3QoKTsKICAgICAgICAgcmVjdHMuYXBw
ZW5kKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0ICsgcmVjdC5s
b2NhdGlvbigpLCByZWN0LnNpemUoKSkpKTsKICAgICB9CkBAIC0zMjYsNyArMzI2LDcgQEAgVmVj
dG9yPEludFJlY3Q+IFJlbmRlclRleHQ6OmFic29sdXRlUmVjdHNGb3JSYW5nZSh1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQgZW5kLAogLy8gRnVsbCBhbm5vdGF0aW9ucyBhcmUgYWRkZWQgaW4gdGhp
cyBjbGFzcy4KIHZvaWQgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJpZXMoVmVj
dG9yPFNlbGVjdGlvbkdlb21ldHJ5PiYgcmVjdHMsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBl
bmQpCiB7Ci0gICAgZm9yIChhdXRvIHJ1biA9IExheW91dEludGVncmF0aW9uOjpmaXJzdFRleHRS
dW5Gb3IoKnRoaXMpOyBydW47IHJ1biA9IHJ1bi50cmF2ZXJzZU5leHRUZXh0UnVuKCkpIHsKKyAg
ICBmb3IgKGF1dG8gcnVuID0gSW5saW5lSXRlcmF0b3I6OmZpcnN0VGV4dFJ1bkZvcigqdGhpcyk7
IHJ1bjsgcnVuID0gcnVuLnRyYXZlcnNlTmV4dFRleHRSdW4oKSkgewogICAgICAgICBMYXlvdXRS
ZWN0IHJlY3Q7CiAgICAgICAgIGlmIChzdGFydCA8PSBydW4tPnN0YXJ0KCkgJiYgcnVuLT5lbmQo
KSA8PSBlbmQpCiAgICAgICAgICAgICByZWN0ID0gcnVuLT5zZWxlY3Rpb25SZWN0KHN0YXJ0LCBl
bmQpOwpAQCAtMzg2LDcgKzM4Niw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlv
bkdlb21ldHJpZXMoVmVjdG9yPFNlbGVjdGlvbkdlb21ldHJ5PiYgcmVjdHMsIHVuCiB9CiAjZW5k
aWYKIAotc3RhdGljIEZsb2F0UmVjdCBib3VuZGFyaWVzRm9yVGV4dFJ1bihjb25zdCBMYXlvdXRJ
bnRlZ3JhdGlvbjo6UGF0aFRleHRSdW4mIHJ1bikKK3N0YXRpYyBGbG9hdFJlY3QgYm91bmRhcmll
c0ZvclRleHRSdW4oY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3gmIHJ1bikKIHsKICAgICBp
ZiAoaXM8U1ZHSW5saW5lVGV4dEJveD4ocnVuLmxlZ2FjeUlubGluZUJveCgpKSkKICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PFNWR0lubGluZVRleHRCb3g+KCpydW4ubGVnYWN5SW5saW5lQm94KCkp
LmNhbGN1bGF0ZUJvdW5kYXJpZXMoKTsKQEAgLTM5NCw3ICszOTQsNyBAQCBzdGF0aWMgRmxvYXRS
ZWN0IGJvdW5kYXJpZXNGb3JUZXh0UnVuKGNvbnN0IExheW91dEludGVncmF0aW9uOjpQYXRoVGV4
dFJ1biYgcnVuKQogICAgIHJldHVybiBydW4ucmVjdCgpOwogfQogCi1zdGF0aWMgSW50UmVjdCBl
bGxpcHNpc1JlY3RGb3JUZXh0UnVuKGNvbnN0IExheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1
biYgcnVuLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQorc3RhdGljIEludFJlY3QgZWxs
aXBzaXNSZWN0Rm9yVGV4dFJ1bihjb25zdCBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveCYgcnVuLCB1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQogewogICAgIC8vIEZJWE1FOiBObyBlbGxpcHNp
cyBzdXBwb3J0IGluIG1vZGVybiBwYXRoIHlldC4KICAgICBpZiAoIXJ1bi5sZWdhY3lJbmxpbmVC
b3goKSkKQEAgLTQyOCw3ICs0MjgsNyBAQCBlbnVtIGNsYXNzIENsaXBwaW5nT3B0aW9uIHsgTm9D
bGlwcGluZywgQ2xpcFRvRWxsaXBzaXMgfTsKIHN0YXRpYyBWZWN0b3I8RmxvYXRRdWFkPiBjb2xs
ZWN0QWJzb2x1dGVRdWFkcyhjb25zdCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGJvb2wqIHdh
c0ZpeGVkLCBDbGlwcGluZ09wdGlvbiBjbGlwcGluZykKIHsKICAgICBWZWN0b3I8RmxvYXRRdWFk
PiBxdWFkczsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IExheW91dEludGVncmF0aW9uOjp0ZXh0UnVu
c0Zvcih0ZXh0UmVuZGVyZXIpKSB7CisgICAgZm9yIChhdXRvJiBydW4gOiBJbmxpbmVJdGVyYXRv
cjo6dGV4dFJ1bnNGb3IodGV4dFJlbmRlcmVyKSkgewogICAgICAgICBhdXRvIGJvdW5kYXJpZXMg
PSBib3VuZGFyaWVzRm9yVGV4dFJ1bihydW4pOwogCiAgICAgICAgIC8vIFNob3J0ZW4gdGhlIHdp
ZHRoIG9mIHRoaXMgdGV4dCBib3ggaWYgaXQgZW5kcyBpbiBhbiBlbGxpcHNpcy4KQEAgLTQ1Nyw3
ICs0NTcsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVh
ZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKICAgICBxdWFkcy5hcHBlbmRWZWN0b3Io
Y29sbGVjdEFic29sdXRlUXVhZHMoKnRoaXMsIHdhc0ZpeGVkLCBDbGlwcGluZ09wdGlvbjo6Tm9D
bGlwcGluZykpOwogfQogCi1zdGF0aWMgRmxvYXRSZWN0IGxvY2FsUXVhZEZvclRleHRSdW4oY29u
c3QgTGF5b3V0SW50ZWdyYXRpb246OlBhdGhUZXh0UnVuJiBydW4sIHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQorc3RhdGljIEZsb2F0UmVjdCBs
b2NhbFF1YWRGb3JUZXh0UnVuKGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94JiBydW4sIHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQogewog
ICAgIHVuc2lnbmVkIHJlYWxFbmQgPSBzdGQ6Om1pbihydW4uZW5kKCksIGVuZCk7CiAgICAgTGF5
b3V0UmVjdCBib3hTZWxlY3Rpb25SZWN0ID0gcnVuLnNlbGVjdGlvblJlY3Qoc3RhcnQsIHJlYWxF
bmQpOwpAQCAtNDkwLDcgKzQ5MCw3IEBAIFZlY3RvcjxGbG9hdFF1YWQ+IFJlbmRlclRleHQ6OmFi
c29sdXRlUXVhZHNGb3JSYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kCiAgICAgZW5k
ID0gc3RkOjptaW4oZW5kLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UX01BWCkpOwogCiAgICAg
VmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBMYXlvdXRJbnRl
Z3JhdGlvbjo6dGV4dFJ1bnNGb3IoKnRoaXMpKSB7CisgICAgZm9yIChhdXRvJiBydW4gOiBJbmxp
bmVJdGVyYXRvcjo6dGV4dFJ1bnNGb3IoKnRoaXMpKSB7CiAgICAgICAgIGlmIChpZ25vcmVFbXB0
eVRleHRTZWxlY3Rpb25zICYmICFydW4uc2VsZWN0YWJsZVJhbmdlKCkuaW50ZXJzZWN0cyhzdGFy
dCwgZW5kKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc3RhcnQgPD0gcnVu
LnN0YXJ0KCkgJiYgcnVuLmVuZCgpIDw9IGVuZCkgewpAQCAtNTIzLDcgKzUyMyw3IEBAIFBvc2l0
aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
KQogCiBlbnVtIFNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtIHsgQWx3YXlzRG93bnN0cmVhbSwg
QWx3YXlzVXBzdHJlYW0sIFVwc3RyZWFtSWZQb3NpdGlvbklzTm90QXRTdGFydCB9OwogCi1zdGF0
aWMgYm9vbCBsaW5lRGlyZWN0aW9uUG9pbnRGaXRzSW5Cb3goaW50IHBvaW50TGluZURpcmVjdGlv
biwgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciYgdGV4dFJ1biwgU2hv
dWxkQWZmaW5pdHlCZURvd25zdHJlYW0mIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKQorc3Rh
dGljIGJvb2wgbGluZURpcmVjdGlvblBvaW50Rml0c0luQm94KGludCBwb2ludExpbmVEaXJlY3Rp
b24sIGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3ImIHRleHRSdW4sIFNob3Vs
ZEFmZmluaXR5QmVEb3duc3RyZWFtJiBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSkKIHsKICAg
ICBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSA9IEFsd2F5c0Rvd25zdHJlYW07CiAKQEAgLTU2
MCw3ICs1NjAsNyBAQCBzdGF0aWMgYm9vbCBsaW5lRGlyZWN0aW9uUG9pbnRGaXRzSW5Cb3goaW50
IHBvaW50TGluZURpcmVjdGlvbiwgY29uc3QgTGF5b3V0SW50ZQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotc3RhdGljIFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3go
Y29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yJiBydW4sIHVuc2lnbmVkIG9mZnNl
dCwgU2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0gc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0p
CitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChjb25z
dCBJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3ImIHJ1biwgdW5zaWduZWQgb2Zmc2V0LCBTaG91
bGRBZmZpbml0eUJlRG93bnN0cmVhbSBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSkKIHsKICAg
ICBhdXRvIGFmZmluaXR5ID0gVmlzaWJsZVBvc2l0aW9uOjpkZWZhdWx0QWZmaW5pdHk7CiAgICAg
c3dpdGNoIChzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSkgewpAQCAtNTc3LDcgKzU3Nyw3IEBA
IHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94KGNvbnN0
IExheW91dEludGVncmF0aW9uOjpSdW5JCiAgICAgcmV0dXJuIHJ1bi0+cmVuZGVyZXIoKS5jcmVh
dGVWaXNpYmxlUG9zaXRpb24ob2Zmc2V0LCBhZmZpbml0eSk7CiB9CiAKLXN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURp
KGNvbnN0IExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3ImIHJ1biwgdW5zaWduZWQg
b2Zmc2V0LCBTaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSBzaG91bGRBZmZpbml0eUJlRG93bnN0
cmVhbSkKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJB
ZGp1c3RpbmdPZmZzZXRGb3JCaURpKGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0
b3ImIHJ1biwgdW5zaWduZWQgb2Zmc2V0LCBTaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSBzaG91
bGRBZmZpbml0eUJlRG93bnN0cmVhbSkKIHsKICAgICBpZiAob2Zmc2V0ICYmIG9mZnNldCA8IHJ1
bi0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3go
cnVuLCBydW4tPnN0YXJ0KCkgKyBvZmZzZXQsIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsK
QEAgLTYwNCw3ICs2MDQsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQ
b3NpdGlvbkFmdGVyQWRqdXN0aW5nT2Zmc2V0Rm9yQmlEaShjb25zdCBMYQogCiAgICAgICAgIGlm
ICghcHJldmlvdXNSdW4gfHwgcHJldmlvdXNSdW4tPmJpZGlMZXZlbCgpIDwgcnVuLT5iaWRpTGV2
ZWwoKSkgewogICAgICAgICAgICAgLy8gZS5nLiBsZWZ0IG9mIEQgaW4gYURDMTJCQWIKLSAgICAg
ICAgICAgIExheW91dEludGVncmF0aW9uOjpSdW5JdGVyYXRvciByaWdodG1vc3RSdW4gPSBydW47
CisgICAgICAgICAgICBJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3IgcmlnaHRtb3N0UnVuID0g
cnVuOwogICAgICAgICAgICAgZm9yIChhdXRvIG5leHRSdW4gPSBydW4tPm5leHRPbkxpbmVJZ25v
cmluZ0xpbmVCcmVhaygpOyBuZXh0UnVuOyBuZXh0UnVuLnRyYXZlcnNlTmV4dE9uTGluZUlnbm9y
aW5nTGluZUJyZWFrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobmV4dFJ1bi0+YmlkaUxldmVs
KCkgPCBydW4tPmJpZGlMZXZlbCgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTYz
Nyw3ICs2MzcsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpdGlv
bkFmdGVyQWRqdXN0aW5nT2Zmc2V0Rm9yQmlEaShjb25zdCBMYQogCiAgICAgaWYgKCFuZXh0UnVu
IHx8IG5leHRSdW4tPmJpZGlMZXZlbCgpIDwgcnVuLT5iaWRpTGV2ZWwoKSkgewogICAgICAgICAv
LyBlLmcuIHJpZ2h0IG9mIEEgaW4gYURDMTJCQWIKLSAgICAgICAgTGF5b3V0SW50ZWdyYXRpb246
OlJ1bkl0ZXJhdG9yIGxlZnRtb3N0UnVuID0gcnVuOworICAgICAgICBJbmxpbmVJdGVyYXRvcjo6
Qm94SXRlcmF0b3IgbGVmdG1vc3RSdW4gPSBydW47CiAgICAgICAgIGZvciAoYXV0byBwcmV2aW91
c1J1biA9IHJ1bi0+cHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOyBwcmV2aW91c1J1
bjsgcHJldmlvdXNSdW4udHJhdmVyc2VQcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkp
IHsKICAgICAgICAgICAgIGlmIChwcmV2aW91c1J1bi0+YmlkaUxldmVsKCkgPCBydW4tPmJpZGlM
ZXZlbCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjU0LDcgKzY1NCw3IEBAIHN0YXRp
YyBWaXNpYmxlUG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZz
ZXRGb3JCaURpKGNvbnN0IExhCiAKIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlv
bkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyRnJhZ21lbnRD
b250YWluZXIqKQogewotICAgIGF1dG8gZmlyc3RSdW4gPSBMYXlvdXRJbnRlZ3JhdGlvbjo6Zmly
c3RUZXh0UnVuRm9yKCp0aGlzKTsKKyAgICBhdXRvIGZpcnN0UnVuID0gSW5saW5lSXRlcmF0b3I6
OmZpcnN0VGV4dFJ1bkZvcigqdGhpcyk7CiAKICAgICBpZiAoIWZpcnN0UnVuIHx8ICF0ZXh0KCku
bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgQWZmaW5p
dHk6OkRvd25zdHJlYW0pOwpAQCAtNjYzLDcgKzY2Myw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5k
ZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3Qg
UmVuCiAgICAgTGF5b3V0VW5pdCBwb2ludEJsb2NrRGlyZWN0aW9uID0gZmlyc3RSdW4tPmlzSG9y
aXpvbnRhbCgpID8gcG9pbnQueSgpIDogcG9pbnQueCgpOwogICAgIGJvb2wgYmxvY2tzQXJlRmxp
cHBlZCA9IHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKTsKIAotICAgIExheW91
dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3IgbGFzdFJ1bjsKKyAgICBJbmxpbmVJdGVyYXRv
cjo6VGV4dEJveEl0ZXJhdG9yIGxhc3RSdW47CiAgICAgZm9yIChhdXRvIHJ1biA9IGZpcnN0UnVu
OyBydW47IHJ1bi50cmF2ZXJzZU5leHRUZXh0UnVuKCkpIHsKICAgICAgICAgaWYgKHJ1bi0+aXNM
aW5lQnJlYWsoKSAmJiAhcnVuLT5wcmV2aW91c09uTGluZSgpICYmIHJ1bi0+bmV4dE9uTGluZSgp
ICYmICFydW4tPm5leHRPbkxpbmUoKS0+aXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAgIHJ1bi50
cmF2ZXJzZU5leHRUZXh0UnVuKCk7CkBAIC0xMjcyLDcgKzEyNzIsNyBAQCBWZWN0b3I8c3RkOjpw
YWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4+IFJlbmRlclRleHQ6OmRyYWdnZWRDb250ZW50UmFuZ2Vz
QmV0d2Vlbk9mZgogCiBJbnRQb2ludCBSZW5kZXJUZXh0OjpmaXJzdFJ1bkxvY2F0aW9uKCkgY29u
c3QKIHsKLSAgICBhdXRvIGZpcnN0ID0gTGF5b3V0SW50ZWdyYXRpb246OmZpcnN0VGV4dFJ1bkZv
cigqdGhpcyk7CisgICAgYXV0byBmaXJzdCA9IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5G
b3IoKnRoaXMpOwogICAgIGlmICghZmlyc3QpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgcmV0
dXJuIEludFBvaW50KGZpcnN0LT5yZWN0KCkubG9jYXRpb24oKSk7CkBAIC0xNTc2LDcgKzE1NzYs
NyBAQCBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4s
IGNvbnN0IEZvbnRDYXNjYWRlJiBmLCBmbG9hdAogCiBJbnRSZWN0IFJlbmRlclRleHQ6OmxpbmVz
Qm91bmRpbmdCb3goKSBjb25zdAogewotICAgIGF1dG8gZmlyc3QgPSBMYXlvdXRJbnRlZ3JhdGlv
bjo6Zmlyc3RUZXh0UnVuRm9yKCp0aGlzKTsKKyAgICBhdXRvIGZpcnN0ID0gSW5saW5lSXRlcmF0
b3I6OmZpcnN0VGV4dFJ1bkZvcigqdGhpcyk7CiAgICAgaWYgKCFmaXJzdCkKICAgICAgICAgcmV0
dXJuIHsgfTsKIApAQCAtMTYzNCw3ICsxNjM0LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpj
b2xsZWN0U2VsZWN0aW9uR2VvbWV0cmllc0ZvckxpbmVCb3hlcyhjb25zdCBSZW5kZXJMYXllck0K
IAogICAgIExheW91dFJlY3QgcmVzdWx0UmVjdDsKIAotICAgIGZvciAoYXV0byYgcnVuIDogTGF5
b3V0SW50ZWdyYXRpb246OnRleHRSdW5zRm9yKCp0aGlzKSkgeworICAgIGZvciAoYXV0byYgcnVu
IDogSW5saW5lSXRlcmF0b3I6OnRleHRSdW5zRm9yKCp0aGlzKSkgewogICAgICAgICBMYXlvdXRS
ZWN0IHJlY3Q7CiAgICAgICAgIHJlY3QudW5pdGUocnVuLnNlbGVjdGlvblJlY3Qoc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCkpOwogICAgICAgICByZWN0LnVuaXRlKGVsbGlwc2lzUmVjdEZvclRleHRS
dW4ocnVuLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KSk7CkBAIC0xNjY0LDcgKzE2NjQsNyBAQCBM
YXlvdXRSZWN0IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcAogCiBpbnQgUmVuZGVyVGV4dDo6Y2FyZXRNaW5PZmZzZXQo
KSBjb25zdAogewotICAgIGF1dG8gZmlyc3QgPSBMYXlvdXRJbnRlZ3JhdGlvbjo6Zmlyc3RUZXh0
UnVuRm9yKCp0aGlzKTsKKyAgICBhdXRvIGZpcnN0ID0gSW5saW5lSXRlcmF0b3I6OmZpcnN0VGV4
dFJ1bkZvcigqdGhpcyk7CiAgICAgaWYgKCFmaXJzdCkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAg
LTE2NzcsNyArMTY3Nyw3IEBAIGludCBSZW5kZXJUZXh0OjpjYXJldE1pbk9mZnNldCgpIGNvbnN0
CiAKIGludCBSZW5kZXJUZXh0OjpjYXJldE1heE9mZnNldCgpIGNvbnN0CiB7Ci0gICAgYXV0byBm
aXJzdCA9IExheW91dEludGVncmF0aW9uOjpmaXJzdFRleHRSdW5Gb3IoKnRoaXMpOworICAgIGF1
dG8gZmlyc3QgPSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RUZXh0UnVuRm9yKCp0aGlzKTsKICAgICBp
ZiAoIWZpcnN0KQogICAgICAgICByZXR1cm4gdGV4dCgpLmxlbmd0aCgpOwogCkBAIC0xNjkxLDcg
KzE2OTEsNyBAQCBpbnQgUmVuZGVyVGV4dDo6Y2FyZXRNYXhPZmZzZXQoKSBjb25zdAogdW5zaWdu
ZWQgUmVuZGVyVGV4dDo6Y291bnRSZW5kZXJlZENoYXJhY3Rlck9mZnNldHNVbnRpbCh1bnNpZ25l
ZCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGF1
dG8mIHJ1biA6IExheW91dEludGVncmF0aW9uOjp0ZXh0UnVuc0ZvcigqdGhpcykpIHsKKyAgICBm
b3IgKGF1dG8mIHJ1biA6IElubGluZUl0ZXJhdG9yOjp0ZXh0UnVuc0ZvcigqdGhpcykpIHsKICAg
ICAgICAgYXV0byBzdGFydCA9IHJ1bi5zdGFydCgpOwogICAgICAgICBhdXRvIGxlbmd0aCA9IHJ1
bi5sZW5ndGgoKTsKICAgICAgICAgaWYgKG9mZnNldCA8IHN0YXJ0KQpAQCAtMTcwOCw3ICsxNzA4
LDcgQEAgdW5zaWduZWQgUmVuZGVyVGV4dDo6Y291bnRSZW5kZXJlZENoYXJhY3Rlck9mZnNldHNV
bnRpbCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiBlbnVtIGNsYXNzIE9mZnNldFR5cGUgeyBDaGFy
YWN0ZXIsIENhcmV0IH07CiBzdGF0aWMgYm9vbCBjb250YWluc09mZnNldChjb25zdCBSZW5kZXJU
ZXh0JiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIE9mZnNldFR5cGUgdHlwZSkKIHsKLSAgICBmb3Ig
KGF1dG8gYm94ID0gTGF5b3V0SW50ZWdyYXRpb246OmZpcnN0VGV4dFJ1bkluVGV4dE9yZGVyRm9y
KHRleHQpOyBib3g7IGJveC50cmF2ZXJzZU5leHRUZXh0UnVuSW5UZXh0T3JkZXIoKSkgeworICAg
IGZvciAoYXV0byBib3ggPSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RUZXh0UnVuSW5UZXh0T3JkZXJG
b3IodGV4dCk7IGJveDsgYm94LnRyYXZlcnNlTmV4dFRleHRSdW5JblRleHRPcmRlcigpKSB7CiAg
ICAgICAgIGF1dG8gc3RhcnQgPSBib3gtPnN0YXJ0KCk7CiAgICAgICAgIGlmIChvZmZzZXQgPCBz
dGFydCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3MzcsNyArMTczNyw3IEBAIGJv
b2wgUmVuZGVyVGV4dDo6Y29udGFpbnNDYXJldE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0
CiAKIGJvb2wgUmVuZGVyVGV4dDo6aGFzUmVuZGVyZWRUZXh0KCkgY29uc3QKIHsKLSAgICBmb3Ig
KGF1dG8mIGJveCA6IExheW91dEludGVncmF0aW9uOjp0ZXh0UnVuc0ZvcigqdGhpcykpIHsKKyAg
ICBmb3IgKGF1dG8mIGJveCA6IElubGluZUl0ZXJhdG9yOjp0ZXh0UnVuc0ZvcigqdGhpcykpIHsK
ICAgICAgICAgaWYgKGJveC5sZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRl
eCA0MzQyYWQ5NDEwODQ3YjRhMTQ3ZTE3Nzk5MjYxZjc2NzlmMmNkNTM2Li5kMTBhNGQyODI4MDgw
NzcwMDQ3MGQ4Y2YzOWFlNzAwZTViNGI4MDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiSFRN
TEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MU3BhbkVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCisjaW5j
bHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKICNpbmNsdWRlICJMZWdhY3lJbmxpbmVUZXh0Qm94
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgpAQCAt
MjQwLDEzICsyNDAsMTMgQEAgdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVj
dChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLAogICAgICAgICAvLyBtYW55
IHRlc3QgcmVzdWx0cy4KICAgICAgICAgY29uc3QgUmVuZGVyVGV4dCYgdGV4dCA9IGRvd25jYXN0
PFJlbmRlclRleHQ+KG8pOwogICAgICAgICByID0gSW50UmVjdCh0ZXh0LmZpcnN0UnVuTG9jYXRp
b24oKSwgdGV4dC5saW5lc0JvdW5kaW5nQm94KCkuc2l6ZSgpKTsKLSAgICAgICAgaWYgKCFMYXlv
dXRJbnRlZ3JhdGlvbjo6Zmlyc3RUZXh0UnVuRm9yKHRleHQpKQorICAgICAgICBpZiAoIUlubGlu
ZUl0ZXJhdG9yOjpmaXJzdFRleHRSdW5Gb3IodGV4dCkpCiAgICAgICAgICAgICBhZGp1c3RGb3JU
YWJsZUNlbGxzID0gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChvLmlzQlIoKSkgewogICAgICAgICBj
b25zdCBSZW5kZXJMaW5lQnJlYWsmIGJyID0gZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPihvKTsK
ICAgICAgICAgSW50UmVjdCBsaW5lc0JveCA9IGJyLmxpbmVzQm91bmRpbmdCb3goKTsKICAgICAg
ICAgciA9IEludFJlY3QobGluZXNCb3gueCgpLCBsaW5lc0JveC55KCksIGxpbmVzQm94LndpZHRo
KCksIGxpbmVzQm94LmhlaWdodCgpKTsKLSAgICAgICAgaWYgKCFici5pbmxpbmVCb3hXcmFwcGVy
KCkgJiYgIUxheW91dEludGVncmF0aW9uOjpydW5Gb3IoYnIpKQorICAgICAgICBpZiAoIWJyLmlu
bGluZUJveFdyYXBwZXIoKSAmJiAhSW5saW5lSXRlcmF0b3I6OnJ1bkZvcihicikpCiAgICAgICAg
ICAgICBhZGp1c3RGb3JUYWJsZUNlbGxzID0gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChpczxSZW5k
ZXJJbmxpbmU+KG8pKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlcklubGluZSYgaW5saW5lRmxvdyA9
IGRvd25jYXN0PFJlbmRlcklubGluZT4obyk7CkBAIC02MDEsNyArNjAxLDcgQEAgdm9pZCB3cml0
ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBPcHRpb25TZXQ8UmVuZGVy
QXNUZXh0RmxhZz4gYmUKIAogICAgIGlmIChpczxSZW5kZXJUZXh0PihvKSkgewogICAgICAgICBh
dXRvJiB0ZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4obyk7Ci0gICAgICAgIGZvciAoYXV0byYg
cnVuIDogTGF5b3V0SW50ZWdyYXRpb246OnRleHRSdW5zRm9yKHRleHQpKSB7CisgICAgICAgIGZv
ciAoYXV0byYgcnVuIDogSW5saW5lSXRlcmF0b3I6OnRleHRSdW5zRm9yKHRleHQpKSB7CiAgICAg
ICAgICAgICB0cyA8PCBpbmRlbnQ7CiAgICAgICAgICAgICB3cml0ZVRleHRSdW4odGV4dCwgcnVu
KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRC
b3hQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5j
cHAKaW5kZXggODZhNzMzYzQwYWM2NDk1OGU1ZGYxMmJlMDNjNDU2OWE3M2VlYzNmMC4uMzIzZGUw
OWYzYzZlNGJmZjdiODNlYWRjNWM0YTA3M2E3MzkwNmQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAi
RWRpdG9yLmgiCiAjaW5jbHVkZSAiRXZlbnRSZWdpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIkxheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJJbmxpbmVJ
dGVyYXRvckJveC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZS5oIgogI2luY2x1ZGUg
IkxlZ2FjeUlubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRl
ICJSZW5kZXJCbG9jay5oIgpAQCAtNDUsMTkgKzQ1LDE5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFRleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0
Qm94JiB0ZXh0Qm94LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0KQotICAgIDogVGV4dEJveFBhaW50ZXIoTGF5b3V0SW50ZWdyYXRpb246OnRleHRS
dW5Gb3IoJnRleHRCb3gpLCBwYWludEluZm8sIHBhaW50T2Zmc2V0KQorICAgIDogVGV4dEJveFBh
aW50ZXIoSW5saW5lSXRlcmF0b3I6OnRleHRSdW5Gb3IoJnRleHRCb3gpLCBwYWludEluZm8sIHBh
aW50T2Zmc2V0KQogewogICAgIG1fZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZSA9IHRleHRC
b3guZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShtX3N0eWxlKTsKIH0KIAogI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogVGV4dEJveFBhaW50ZXI6OlRleHRCb3hQYWlu
dGVyKGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50
LCBjb25zdCBJbmxpbmVEaXNwbGF5OjpCb3gmIGJveCwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKLSAgICA6IFRleHRCb3hQYWludGVyKExheW91
dEludGVncmF0aW9uOjp0ZXh0UnVuRm9yKGlubGluZUNvbnRlbnQsIGJveCksIHBhaW50SW5mbywg
cGFpbnRPZmZzZXQpCisgICAgOiBUZXh0Qm94UGFpbnRlcihJbmxpbmVJdGVyYXRvcjo6dGV4dFJ1
bkZvcihpbmxpbmVDb250ZW50LCBib3gpLCBwYWludEluZm8sIHBhaW50T2Zmc2V0KQogewogfQog
I2VuZGlmCiAKLVRleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihMYXlvdXRJbnRlZ3JhdGlv
bjo6VGV4dFJ1bkl0ZXJhdG9yJiYgdGV4dEJveCwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKK1RleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRl
cihJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yJiYgdGV4dEJveCwgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICA6IG1fdGV4dEJv
eChXVEZNb3ZlKHRleHRCb3gpKQogICAgICwgbV9yZW5kZXJlcihtX3RleHRCb3gtPnJlbmRlcmVy
KCkpCiAgICAgLCBtX2RvY3VtZW50KG1fcmVuZGVyZXIuZG9jdW1lbnQoKSkKQEAgLTM3Miw3ICsz
NzIsNyBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludERlY29yYXRpb24oY29uc3QgU3R5bGVk
TWFya2VkVGV4dCYgbWFya2VkVGV4dCwgY29uc3QgRgogICAgIGF1dG8gdGV4dERlY29yYXRpb25z
ID0gbV9zdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIHRleHREZWNvcmF0aW9u
cy5hZGQoVGV4dERlY29yYXRpb25QYWludGVyOjp0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdEZvclN0
eWxlKG1hcmtlZFRleHQuc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMpKTsKICAgICBUZXh0RGVj
b3JhdGlvblBhaW50ZXIgZGVjb3JhdGlvblBhaW50ZXIgeyBjb250ZXh0LCB0ZXh0RGVjb3JhdGlv
bnMsIG1fcmVuZGVyZXIsIG1faXNGaXJzdExpbmUsIGZvbnQsIG1hcmtlZFRleHQuc3R5bGUudGV4
dERlY29yYXRpb25TdHlsZXMgfTsKLSAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRUZXh0UnVuSXRl
cmF0b3IobV90ZXh0Qm94KTsKKyAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRUZXh0Qm94SXRlcmF0
b3IobV90ZXh0Qm94KTsKICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRXaWR0aChzbmFwcGVkU2Vs
ZWN0aW9uUmVjdC53aWR0aCgpKTsKICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRJc0hvcml6b250
YWwodGV4dEJveCgpLmlzSG9yaXpvbnRhbCgpKTsKICAgICBpZiAobWFya2VkVGV4dC5zdHlsZS50
ZXh0U2hhZG93KSB7CkBAIC00MjYsNyArNDI2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1pcnJv
clJUTFNlZ21lbnQoZmxvYXQgbG9naWNhbFdpZHRoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwK
ICAgICBzdGFydCA9IGxvZ2ljYWxXaWR0aCAtIHdpZHRoIC0gc3RhcnQ7CiB9CiAKLXN0YXRpYyBm
bG9hdCB0ZXh0UG9zaXRpb24oY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRv
ciYgdGV4dEJveCkKK3N0YXRpYyBmbG9hdCB0ZXh0UG9zaXRpb24oY29uc3QgSW5saW5lSXRlcmF0
b3I6OlRleHRCb3hJdGVyYXRvciYgdGV4dEJveCkKIHsKICAgICAvLyBXaGVuIGNvbXB1dGluZyB0
aGUgd2lkdGggb2YgYSB0ZXh0IHJ1biwgUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rp
b25Qb3NpdGlvbnNGb3JMaW5lKCkgZG9lc24ndCBpbmNsdWRlIHRoZSBhY3R1YWwgb2Zmc2V0CiAg
ICAgLy8gZnJvbSB0aGUgY29udGFpbmluZyBibG9jayBlZGdlIGluIGl0cyBtZWFzdXJlbWVudC4g
dGV4dFBvc2l0aW9uKCkgc2hvdWxkIGJlIGNvbnNpc3RlbnQgc28gdGhlIHRleHQgYXJlIHJlbmRl
cmVkIGluIHRoZSBzYW1lIHdpZHRoLgpAQCAtNDk1LDcgKzQ5NSw3IEBAIEZsb2F0UmVjdCBUZXh0
Qm94UGFpbnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0
IExlZ2FjeUluCiAgICAgRmxvYXRSZWN0IHJlc3VsdDsKICAgICBhdXRvIG1hcmtlZFRleHRzID0g
TWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2Vycyh0ZXh0Qm94LnJlbmRlcmVyKCks
IHRleHRCb3guc2VsZWN0YWJsZVJhbmdlKCksIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29y
YXRpb24pOwogICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IE1hcmtlZFRleHQ6OnN1YmRpdmlk
ZShtYXJrZWRUZXh0cywgTWFya2VkVGV4dDo6T3ZlcmxhcFN0cmF0ZWd5OjpGcm9udG1vc3QpKQot
ICAgICAgICByZXN1bHQgPSB1bmlvblJlY3QocmVzdWx0LCBjYWxjdWxhdGVEb2N1bWVudE1hcmtl
ckJvdW5kcyhMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bkZvcigmdGV4dEJveCksIG1hcmtlZFRl
eHQpKTsKKyAgICAgICAgcmVzdWx0ID0gdW5pb25SZWN0KHJlc3VsdCwgY2FsY3VsYXRlRG9jdW1l
bnRNYXJrZXJCb3VuZHMoSW5saW5lSXRlcmF0b3I6OnRleHRSdW5Gb3IoJnRleHRCb3gpLCBtYXJr
ZWRUZXh0KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTcxLDcgKzU3MSw3IEBAIEZs
b2F0UmVjdCBUZXh0Qm94UGFpbnRlcjo6Y29tcHV0ZVBhaW50UmVjdChjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQpCiAgICAgcmV0dXJuIHsgYm94T3JpZ2luLCBGbG9hdFNpemUodGV4dEJv
eCgpLmxvZ2ljYWxXaWR0aCgpLCB0ZXh0Qm94KCkubG9naWNhbEhlaWdodCgpKSB9OwogfQogCi1G
bG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNv
bnN0IExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3ImIHRleHRCb3gsIGNvbnN0IE1h
cmtlZFRleHQmIG1hcmtlZFRleHQpCitGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0
ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0
b3ImIHRleHRCb3gsIGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCiB7CiAgICAgYXV0byYg
Zm9udCA9IHRleHRCb3gtPmZvbnRDYXNjYWRlKCk7CiAgICAgYXV0byBhc2NlbnQgPSBmb250LmZv
bnRNZXRyaWNzKCkuYXNjZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEJveFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFp
bnRlci5oCmluZGV4IDQ3MDFlZmM1NGFiODIwZjE5NmY1ZTU4Y2U4NDViNWYwNTBkMGFkOWIuLjEx
ZDc3Mjk5MWY0MTA1ZjIzMTUzYjQwODJkYmExMDdjOWM5ZTBlMzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oCkBAIC0yNSw3ICsyNSw3IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9u
UnVuSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJveC5oIgogI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlRleHRCb3hTZWxlY3RhYmxlUmFuZ2UuaCIKICNp
bmNsdWRlICJUZXh0UnVuLmgiCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
RmxvYXRSZWN0IGNhbGN1bGF0ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBM
ZWdhY3lJbmxpbmVUZXh0Qm94Jik7CiAKIHByaXZhdGU6Ci0gICAgVGV4dEJveFBhaW50ZXIoTGF5
b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciYmLCBQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpOworICAgIFRleHRCb3hQYWludGVyKElubGluZUl0ZXJhdG9y
OjpUZXh0Qm94SXRlcmF0b3ImJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0KTsKIAogICAgIGF1dG8mIHRleHRCb3goKSBjb25zdCB7IHJldHVybiAqbV90ZXh0Qm94
OyB9CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50Q29tcG9zaXRp
b25VbmRlcmxpbmUoY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKTsKICAgICB2b2lkIHBhaW50
UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihjb25zdCBNYXJrZWRUZXh0Jik7CiAKLSAgICBzdGF0aWMg
RmxvYXRSZWN0IGNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExheW91dEludGVn
cmF0aW9uOjpUZXh0UnVuSXRlcmF0b3ImLCBjb25zdCBNYXJrZWRUZXh0Jik7CisgICAgc3RhdGlj
IEZsb2F0UmVjdCBjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBJbmxpbmVJdGVy
YXRvcjo6VGV4dEJveEl0ZXJhdG9yJiwgY29uc3QgTWFya2VkVGV4dCYpOwogCiAgICAgRmxvYXRS
ZWN0IGNvbXB1dGVQYWludFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKICAg
ICBib29sIGNvbXB1dGVIYXZlU2VsZWN0aW9uKCkgY29uc3Q7CkBAIC04NSw3ICs4NSw3IEBAIHBy
aXZhdGU6CiAKICAgICBjb25zdCBTaGFkb3dEYXRhKiBkZWJ1Z1RleHRTaGFkb3coKSBjb25zdDsK
IAotICAgIGNvbnN0IExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3IgbV90ZXh0Qm94
OworICAgIGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IgbV90ZXh0Qm94Owog
ICAgIGNvbnN0IFJlbmRlclRleHQmIG1fcmVuZGVyZXI7CiAgICAgY29uc3QgRG9jdW1lbnQmIG1f
ZG9jdW1lbnQ7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fc3R5bGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmgKaW5kZXggOWJmNGI0ZDk4
NjY4ZDZkZDEyOTRmZjc2NTE0NjE3MjIzM2JlOTk4Ny4uNzc2ZWUwYjNjZjYwNzY2ZTg3NzU4NzQx
MThiMzBkMjA0ZDM4Njk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHREZWNvcmF0aW9uUGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
RGVjb3JhdGlvblBhaW50ZXIuaApAQCAtMjQsNyArMjQsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25S
dW5JdGVyYXRvci5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKQEAg
LTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBTdHlsZXM7CiAgICAgVGV4dERlY29y
YXRpb25QYWludGVyKEdyYXBoaWNzQ29udGV4dCYsIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4g
ZGVjb3JhdGlvbnMsIGNvbnN0IFJlbmRlclRleHQmLCBib29sIGlzRmlyc3RMaW5lLCBjb25zdCBG
b250Q2FzY2FkZSYsIHN0ZDo6b3B0aW9uYWw8U3R5bGVzPiA9IHN0ZDo6bnVsbG9wdCk7CiAgICAg
Ci0gICAgdm9pZCBzZXRUZXh0UnVuSXRlcmF0b3IoTGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5J
dGVyYXRvciB0ZXh0UnVuKSB7IG1fdGV4dFJ1biA9IHRleHRSdW47IH0KKyAgICB2b2lkIHNldFRl
eHRCb3hJdGVyYXRvcihJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yIHRleHRSdW4pIHsg
bV90ZXh0UnVuID0gdGV4dFJ1bjsgfQogICAgIHZvaWQgc2V0SXNIb3Jpem9udGFsKGJvb2wgaXNI
b3Jpem9udGFsKSB7IG1faXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsOyB9CiAgICAgdm9pZCBz
ZXRXaWR0aChmbG9hdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KICAgICB2b2lkIHNldFRl
eHRTaGFkb3coY29uc3QgU2hhZG93RGF0YSogdGV4dFNoYWRvdykgeyBtX3NoYWRvdyA9IHRleHRT
aGFkb3c7IH0KQEAgLTc5LDcgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNIb3Jpem9u
dGFsIHsgdHJ1ZSB9OwogICAgIGNvbnN0IFNoYWRvd0RhdGEqIG1fc2hhZG93IHsgbnVsbHB0ciB9
OwogICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMqIG1fc2hhZG93Q29sb3JGaWx0ZXIgeyBudWxs
cHRyIH07Ci0gICAgTGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciBtX3RleHRSdW47
CisgICAgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciBtX3RleHRSdW47CiAgICAgY29u
c3QgRm9udENhc2NhZGUmIG1fZm9udDsKIAogICAgIFN0eWxlcyBtX3N0eWxlczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCmluZGV4IDFjNGU0ZWExY2I1ODNk
MGZhZTZjOWQ2YjI3MmNmNjk4ZGQwYmQ4ZTMuLmM3YjFjNTE2M2ZlZTVmN2Q3ZjRkMTU1ODUyYWY1
NmVlNTIxNmVhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRC
b3hTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxl
LmNwcApAQCAtMjksOCArMjksOCBAQAogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVk
ZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRl
ICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxheW91dEludGVn
cmF0aW9uUnVuSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJveC5oIgorI2lu
Y2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZS5oIgogI2luY2x1ZGUgIkxlZ2FjeUlubGluZVRleHRC
b3guaCIKICNpbmNsdWRlICJMZWdhY3lSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVy
SW5saW5lLmgiCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBib29sIGlzQW5jZXN0b3JBbmRXaXRo
aW5CbG9jayhjb25zdCBSZW5kZXJJbmxpbmUmIGFuY2VzdG9yLCBjb25zdCBSZW5kZXJPCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCBtaW5Mb2dpY2FsVG9wRm9yVGV4dERlY29y
YXRpb25MaW5lKGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3ImIGxpbmUsIGZs
b2F0JiBtaW5Mb2dpY2FsVG9wLCBjb25zdCBSZW5kZXJFbGVtZW50KiBkZWNvcmF0aW9uUmVuZGVy
ZXIsIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gdGV4dERlY29yYXRpb24pCitzdGF0aWMgdm9p
ZCBtaW5Mb2dpY2FsVG9wRm9yVGV4dERlY29yYXRpb25MaW5lKGNvbnN0IElubGluZUl0ZXJhdG9y
OjpMaW5lSXRlcmF0b3ImIGxpbmUsIGZsb2F0JiBtaW5Mb2dpY2FsVG9wLCBjb25zdCBSZW5kZXJF
bGVtZW50KiBkZWNvcmF0aW9uUmVuZGVyZXIsIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gdGV4
dERlY29yYXRpb24pCiB7CiAgICAgZm9yIChhdXRvIHJ1biA9IGxpbmUtPmZpcnN0UnVuKCk7IHJ1
bjsgcnVuLnRyYXZlcnNlTmV4dE9uTGluZSgpKSB7CiAgICAgICAgIGlmIChydW4tPnJlbmRlcmVy
KCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCkBAIC02Niw3ICs2Niw3IEBAIHN0YXRpYyB2b2lk
IG1pbkxvZ2ljYWxUb3BGb3JUZXh0RGVjb3JhdGlvbkxpbmUoY29uc3QgTGF5b3V0SW50ZWdyYXRp
b246OkxpbmVJdGVyCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBtYXhMb2dpY2FsQm90dG9tRm9y
VGV4dERlY29yYXRpb25MaW5lKGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3Im
IGxpbmUsIGZsb2F0JiBtYXhMb2dpY2FsQm90dG9tLCBjb25zdCBSZW5kZXJFbGVtZW50KiBkZWNv
cmF0aW9uUmVuZGVyZXIsIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gdGV4dERlY29yYXRpb24p
CitzdGF0aWMgdm9pZCBtYXhMb2dpY2FsQm90dG9tRm9yVGV4dERlY29yYXRpb25MaW5lKGNvbnN0
IElubGluZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3ImIGxpbmUsIGZsb2F0JiBtYXhMb2dpY2FsQm90
dG9tLCBjb25zdCBSZW5kZXJFbGVtZW50KiBkZWNvcmF0aW9uUmVuZGVyZXIsIE9wdGlvblNldDxU
ZXh0RGVjb3JhdGlvbj4gdGV4dERlY29yYXRpb24pCiB7CiAgICAgZm9yIChhdXRvIHJ1biA9IGxp
bmUtPmZpcnN0UnVuKCk7IHJ1bjsgcnVuLnRyYXZlcnNlTmV4dE9uTGluZSgpKSB7CiAgICAgICAg
IGlmIChydW4tPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgc3RhdGljIGNvbnN0IFJlbmRlckVsZW1lbnQqIGVuY2xvc2luZ1JlbmRlcmVyV2l0
aFRleHREZWNvcmF0aW9uKGNvbnN0IFJlbmRlclRleHQKICAgICByZXR1cm4gY3VycmVudDsKIH0K
ICAgICAKLWZsb2F0IGNvbXB1dGVVbmRlcmxpbmVPZmZzZXQoVGV4dFVuZGVybGluZVBvc2l0aW9u
IHVuZGVybGluZVBvc2l0aW9uLCBUZXh0VW5kZXJsaW5lT2Zmc2V0IHVuZGVybGluZU9mZnNldCwg
Y29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzLCBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6
VGV4dFJ1bkl0ZXJhdG9yJiB0ZXh0UnVuLCBmbG9hdCBkZWZhdWx0R2FwKQorZmxvYXQgY29tcHV0
ZVVuZGVybGluZU9mZnNldChUZXh0VW5kZXJsaW5lUG9zaXRpb24gdW5kZXJsaW5lUG9zaXRpb24s
IFRleHRVbmRlcmxpbmVPZmZzZXQgdW5kZXJsaW5lT2Zmc2V0LCBjb25zdCBGb250TWV0cmljcyYg
Zm9udE1ldHJpY3MsIGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3ImIHRleHRS
dW4sIGZsb2F0IGRlZmF1bHRHYXApCiB7CiAgICAgLy8gVGhpcyByZXByZXNlbnRzIHRoZSBnYXAg
YmV0d2VlbiB0aGUgYmFzZWxpbmUgYW5kIHRoZSBjbG9zZXN0IGVkZ2Ugb2YgdGhlIHVuZGVybGlu
ZS4KICAgICBmbG9hdCBnYXAgPSBzdGQ6Om1heDxpbnQ+KDEsIHN0ZDo6Y2VpbChkZWZhdWx0R2Fw
IC8gMi4wZikpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIFdhdnlTdHJva2VQYXJhbWV0ZXJzIGdldFdh
dnlTdHJva2VQYXJhbWV0ZXJzKGZsb2F0IGZvbnRTaXplKQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUdseXBoT3ZlcmZsb3cgdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJTdHlsZSYgbGluZVN0eWxlLCBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJh
dG9yJiB0ZXh0UnVuKQorR2x5cGhPdmVyZmxvdyB2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25z
KGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUsIGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0
Qm94SXRlcmF0b3ImIHRleHRSdW4pCiB7CiAgICAgQVNTRVJUKCF0ZXh0UnVuIHx8IHRleHRSdW4t
PnN0eWxlKCkgPT0gbGluZVN0eWxlKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5l
VGV4dEJveFN0eWxlLmgKaW5kZXggYjQyNTFhNjJkMzI2YzM5YzNkOTE0ZTU4ZWVhYmNlNGIwNjQ2
Y2E4NS4uYzg3ODIzMzhmNzRiZGNlZWIyNmJjZGIzMDc1ZjBiZmI3NjM2YTUwNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJMYXlvdXRJ
bnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC01Miw3ICs1Miw3IEBAIHN0cnVjdCBXYXZ5U3Ryb2tlUGFyYW1ldGVycyB7CiAgICAgZmxv
YXQgc3RlcCB7IDAgfTsKIH07CiBXYXZ5U3Ryb2tlUGFyYW1ldGVycyBnZXRXYXZ5U3Ryb2tlUGFy
YW1ldGVycyhmbG9hdCBmb250U2l6ZSk7Ci1HbHlwaE92ZXJmbG93IHZpc3VhbE92ZXJmbG93Rm9y
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSwgY29uc3QgTGF5b3V0SW50
ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciYpOwotZmxvYXQgY29tcHV0ZVVuZGVybGluZU9mZnNl
dChUZXh0VW5kZXJsaW5lUG9zaXRpb24sIFRleHRVbmRlcmxpbmVPZmZzZXQsIGNvbnN0IEZvbnRN
ZXRyaWNzJiwgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvciYsIGZsb2F0
IHRleHREZWNvcmF0aW9uVGhpY2tuZXNzKTsKK0dseXBoT3ZlcmZsb3cgdmlzdWFsT3ZlcmZsb3dG
b3JEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBjb25zdCBJbmxpbmVJ
dGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yJik7CitmbG9hdCBjb21wdXRlVW5kZXJsaW5lT2Zmc2V0
KFRleHRVbmRlcmxpbmVQb3NpdGlvbiwgVGV4dFVuZGVybGluZU9mZnNldCwgY29uc3QgRm9udE1l
dHJpY3MmLCBjb25zdCBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yJiwgZmxvYXQgdGV4
dERlY29yYXRpb25UaGlja25lc3MpOwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>