<?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>147908</bug_id>
          
          <creation_ts>2015-08-11 16:10:36 -0700</creation_ts>
          <short_desc>Always use a byte-sized lock implementation</short_desc>
          <delta_ts>2015-08-11 21:21:08 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>147841</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1116763</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-11 16:10:36 -0700</bug_when>
    <thetext>At time of writing, you could choose between Lock, which is a sizeof(void*) lock implementation with some nice theoretical properties, and ByteLock, which is a sizeof(uint8_t) lock implementation that empirically performs as well or better.

Clearly, we should make Lock use ByteLock&apos;s superior algorithm and get rid of ByteLock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116766</commentid>
    <comment_count>1</comment_count>
      <attachid>258774</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-11 16:13:01 -0700</bug_when>
    <thetext>Created attachment 258774
probably works</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116772</commentid>
    <comment_count>2</comment_count>
      <attachid>258776</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-11 16:22:58 -0700</bug_when>
    <thetext>Created attachment 258776
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116779</commentid>
    <comment_count>3</comment_count>
      <attachid>258778</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-11 16:33:40 -0700</bug_when>
    <thetext>Created attachment 258778
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116785</commentid>
    <comment_count>4</comment_count>
      <attachid>258778</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-11 16:43:08 -0700</bug_when>
    <thetext>Comment on attachment 258778
the patch

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

r=me

&gt; Source/WTF/ChangeLog:27
&gt; +        - Move the algorithm in Lock into files called BasicLock.h|cpp. Make ParkingLot use
&gt; +          BasicLock.

&quot;Basic&quot; doesn&apos;t say a lot to me about when to use or not use this lock. &quot;Basic&quot; feels good, but I probably shouldn&apos;t feel good about using this lock.

How about &quot;ParkingLock&quot;. It helps to say &quot;only the ParkingLot should use this&quot;.

Or, &quot;WordLock&quot; to describe a part of the tradeoff: bigger than a byte lock, so I probably don&apos;t want it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116838</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-11 20:08:13 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 258778 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=258778&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WTF/ChangeLog:27
&gt; &gt; +        - Move the algorithm in Lock into files called BasicLock.h|cpp. Make ParkingLot use
&gt; &gt; +          BasicLock.
&gt; 
&gt; &quot;Basic&quot; doesn&apos;t say a lot to me about when to use or not use this lock.
&gt; &quot;Basic&quot; feels good, but I probably shouldn&apos;t feel good about using this lock.
&gt; 
&gt; How about &quot;ParkingLock&quot;. It helps to say &quot;only the ParkingLot should use
&gt; this&quot;.
&gt; 
&gt; Or, &quot;WordLock&quot; to describe a part of the tradeoff: bigger than a byte lock,
&gt; so I probably don&apos;t want it.

I&apos;ll call it WordLock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116839</commentid>
    <comment_count>6</comment_count>
      <attachid>258798</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-11 20:14:57 -0700</bug_when>
    <thetext>Created attachment 258798
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116840</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-11 20:15:58 -0700</bug_when>
    <thetext>Attachment 258798 did not pass style-queue:


ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116843</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-11 20:22:45 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Attachment 258798 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:29:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]
&gt; Total errors found: 1 in 14 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

Fixed locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116855</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-11 21:21:08 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/188323</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258774</attachid>
            <date>2015-08-11 16:13:01 -0700</date>
            <delta_ts>2015-08-11 16:22:58 -0700</delta_ts>
            <desc>probably works</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59247</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJ
VExvY2suaAkocmV2aXNpb24gMTg4MjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uY3VycmVudEpJVExvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTQgKzI3LDE0IEBA
CiAjZGVmaW5lIENvbmN1cnJlbnRKSVRMb2NrX2gKIAogI2luY2x1ZGUgIkRlZmVyR0MuaCIKLSNp
bmNsdWRlIDx3dGYvQnl0ZUxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUg
PHd0Zi9Ob0xvY2suaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoQ09OQ1VSUkVO
VF9KSVQpCi10eXBlZGVmIEJ5dGVMb2NrIENvbmN1cnJlbnRKSVRMb2NrOwotdHlwZWRlZiBCeXRl
TG9ja2VyIENvbmN1cnJlbnRKSVRMb2NrZXJJbXBsOwordHlwZWRlZiBMb2NrIENvbmN1cnJlbnRK
SVRMb2NrOwordHlwZWRlZiBMb2NrSG9sZGVyIENvbmN1cnJlbnRKSVRMb2NrZXJJbXBsOwogI2Vs
c2UKIHR5cGVkZWYgTm9Mb2NrIENvbmN1cnJlbnRKSVRMb2NrOwogdHlwZWRlZiBOb0xvY2tMb2Nr
ZXIgQ29uY3VycmVudEpJVExvY2tlckltcGw7CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4ODI5MikKKysrIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDYgQEAK
IAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8q
IE5vTG9jay5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJs
ZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICov
OyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBB
N0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07Ci0JCTBGODI0QTY2MUI3NDQzQTAwMDJFMzQ1RCAv
KiBCeXRlTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suY3BwICovOyB9OwotCQkw
RjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBC
eXRlTG9jay5oICovOyB9OwogCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xv
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgy
NEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi87IH07CiAJCTBGODI0QTY5
MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2lu
Z0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzEwNTkx
NjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsgfTsKQEAgLTQ2LDYgKzQ0LDggQEAK
IAkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNjE2NjZERkEz
MDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLzsgfTsKIAkJMEZFMTY0NkExQjZGRkM5
NjAwNDAwRTdDIC8qIExvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFMTY0NjgxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3BwICovOyB9Owog
CQkwRkUxNjQ2QjFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMTY0NjkxQjZGRkM5NjAwNDAwRTdDIC8qIExv
Y2suaCAqLzsgfTsKKwkJMEZFNDQ3OUMxQjdBQUEwMzAwOTQ5OEVCIC8qIEJhc2ljTG9jay5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0NDc5QTFC
N0FBQTAzMDA5NDk4RUIgLyogQmFzaWNMb2NrLmNwcCAqLzsgfTsKKwkJMEZFNDQ3OUQxQjdBQUEw
MzAwOTQ5OEVCIC8qIEJhc2ljTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIEJhc2ljTG9jay5oICov
OyB9OwogCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjUxQjIyRDREODAw
NjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLzsgfTsKIAkJMTQwMjJGNDExOEY1QzNGQzAwN0ZGMEVC
IC8qIGxpYmJtYWxsb2MuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0MDIyRjQwMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9jLmEgKi87IH07
CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0
QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsKQEAgLTMxMSw4ICszMTEsNiBAQAogCQkwRjJCNjZBNDE3
QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
QjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGlw
Qnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFCNDhCNDAw
QTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0
ZUxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZUxvY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0
NUQgLyogQnl0ZUxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjQxQjc0NDNBMDAwMkUz
NDVEIC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODI0QTY1
MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBhcmtpbmdMb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4
NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzMzLDYgKzMzMSw4IEBACiAJCTBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQ
cmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdQcmlu
dFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUxNjQ2ODFCNkZGQzk2
MDA0MDBFN0MgLyogTG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBMb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMTY0NjkxQjZGRkM5
NjAwNDAwRTdDIC8qIExvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9j
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU0NDc5QTFCN0FBQTAzMDA5NDk4
RUIgLyogQmFzaWNMb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEJhc2ljTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTQ0NzlCMUI3
QUFBMDMwMDk0OThFQiAvKiBCYXNpY0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmFzaWNMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUMzRUU0
MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZVNw
aW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgw
MDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1
QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC03MTgsMTQgKzcxOCwxNCBAQAog
CQkJCTE0Njk0MTlCMTZFQUIxMEEwMDI0RTE0NiAvKiBBdXRvZHJhaW5lZFBvb2xNYWMubW0gKi8s
CiAJCQkJMEZCMTRFMTgxODBGQTIxODAwOUI2QjREIC8qIEJhZy5oICovLAogCQkJCTBGQjE0RTFB
MTgxMEUxREEwMDlCNkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLywKKwkJCQkwRkU0NDc5QTFCN0FB
QTAzMDA5NDk4RUIgLyogQmFzaWNMb2NrLmNwcCAqLywKKwkJCQkwRkU0NDc5QjFCN0FBQTAzMDA5
NDk4RUIgLyogQmFzaWNMb2NrLmggKi8sCiAJCQkJQThBNDcyNUYxNTFBODI1QTAwNDEyM0ZGIC8q
IEJpdG1hcC5oICovLAogCQkJCUE4QTQ3MjYwMTUxQTgyNUEwMDQxMjNGRiAvKiBCaXRWZWN0b3Iu
Y3BwICovLAogCQkJCUE4QTQ3MjYxMTUxQTgyNUEwMDQxMjNGRiAvKiBCaXRWZWN0b3IuaCAqLywK
IAkJCQlBOEE0NzI2NDE1MUE4MjVBMDA0MTIzRkYgLyogQmxvY2tTdGFjay5oICovLAogCQkJCUE4
QTQ3MjY1MTUxQTgyNUEwMDQxMjNGRiAvKiBCbG9vbUZpbHRlci5oICovLAogCQkJCUE4QTQ3MjY3
MTUxQTgyNUEwMDQxMjNGRiAvKiBCdW1wUG9pbnRlckFsbG9jYXRvci5oICovLAotCQkJCTBGODI0
QTYyMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgKi8sCi0JCQkJMEY4MjRBNjMxQjc0
NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2NrLmggKi8sCiAJCQkJRUI5NUUxRUYxNjFBNzI0MTAwODlB
MkY1IC8qIEJ5dGVPcmRlci5oICovLAogCQkJCTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBC
eXRlU3BpbkxvY2suaCAqLywKIAkJCQlBOEE0NzI2QTE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tl
ZEFyaXRobWV0aWMuaCAqLywKQEAgLTExNjgsNyArMTE2OCw2IEBACiAJCQkJQThBNDc0MTUxNTFB
ODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
MTYxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAq
LywKLQkJCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3NDE3MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWRCbGFja1RyZWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDE4MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxOTE1MUE4MjVCMDA0MTIzRkYgLyogUmVmQ291bnRl
ZEFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTEyMjIsNiArMTIyMSw3IEBACiAJCQkJQThBNDc0
NTQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzQ1NTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU3BlY2lmaWMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0OUVGMTYzMTZCQkZFMEQwMDBBNDMzMSAvKiBUcmlTdGF0ZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIEJhc2ljTG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NkQxNTFBODI1QjAwNDEyM0ZGIC8qIFVuaW9uRmlu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NkExNTFBODI1QjAwNDEyM0ZGIC8qIFVURjgu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0I5MTUxQTgyNUIwMDQxMjNGRiAvKiB1dGlscy5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xMzM5LDcgKzEzMzksNiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJ
QThBNDczODYxNTFBODI1QjAwNDEyM0ZGIC8qIEFzc2VydGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDc0MzUxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21pY1N0cmluZy5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkwRjgyNEE2NjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOUJDNzBGMDUxNzZDMzc5RDAwMTAxREVDIC8qIEF0b21pY1N0cmlu
Z1RhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUZCMTgyNDM1QTYwMEE4MkU2OSAv
KiBTdHJpbmdDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5NDE5RDE2RUFCMTBBMDAyNEUx
NDYgLyogQXV0b2RyYWluZWRQb29sTWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0xNDAyLDYgKzE0
MDEsNyBAQAogCQkJCTcwRUNBNjBEMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBs
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFREFDRDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFj
a1N0YXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDNDMTUxQTgyNUIwMDQxMjNGRiAv
KiBTdHJpbmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTQ0NzlDMUI3QUFBMDMw
MDk0OThFQiAvKiBCYXNpY0xvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NDAxNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1
RkMxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmluZ0ltcGxDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUJBMTVGNTE4MjQzNDgwMDBBODJFNjkgLyogU3RyaW5nSW1wbE1hYy5tbSBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAkocmV2aXNp
b24gMTg4MjkyKQorKysgU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNp
bmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvQnl0ZUxvY2suaD4KKyNpbmNsdWRlIDx3
dGYvQmFzaWNMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8
d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KQEAgLTQ0LDcgKzQ0LDcgQEAg
dW5zaWduZWQgbnVtSXRlcmF0aW9uczsKICAgICAKIE5PX1JFVFVSTiB2b2lkIHVzYWdlKCkKIHsK
LSAgICBwcmludGYoIlVzYWdlOiBMb2NrU3BlZWRUZXN0IHNwaW5sb2NrfGxvY2t8Ynl0ZWxvY2t8
bXV0ZXh8YWxsIDxudW0gdGhyZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBncm91cD4gPHdv
cmsgcGVyIGNyaXRpY2FsIHNlY3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51bSBpdGVyYXRp
b25zPlxuIik7CisgICAgcHJpbnRmKCJVc2FnZTogTG9ja1NwZWVkVGVzdCBzcGlubG9ja3xiYXNp
Y2xvY2t8bG9ja3xieXRlbG9ja3xtdXRleHxhbGwgPG51bSB0aHJlYWQgZ3JvdXBzPiA8bnVtIHRo
cmVhZHMgcGVyIGdyb3VwPiA8d29yayBwZXIgY3JpdGljYWwgc2VjdGlvbj4gPG51bSBub2lzZSB0
aHJlYWRzPiA8bnVtIGl0ZXJhdGlvbnM+XG4iKTsKICAgICBleGl0KDEpOwogfQogCkBAIC0xMjIs
MTIgKzEyMiwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJ1
bkJlbmNobWFyazxTcGluTG9jaz4oIlNwaW5Mb2NrIik7CiAgICAgICAgIGRpZFJ1biA9IHRydWU7
CiAgICAgfQotICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJsb2NrIikgfHwgIXN0cmNtcChhcmd2
WzFdLCAiYWxsIikpIHsKLSAgICAgICAgcnVuQmVuY2htYXJrPExvY2s+KCJXVEYgTG9jayIpOwor
ICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJiYXNpY2xvY2siKSB8fCAhc3RyY21wKGFyZ3ZbMV0s
ICJhbGwiKSkgeworICAgICAgICBydW5CZW5jaG1hcms8QmFzaWNMb2NrPigiV1RGIEJhc2ljTG9j
ayIpOwogICAgICAgICBkaWRSdW4gPSB0cnVlOwogICAgIH0KLSAgICBpZiAoIXN0cmNtcChhcmd2
WzFdLCAiYnl0ZWxvY2siKSB8fCAhc3RyY21wKGFyZ3ZbMV0sICJhbGwiKSkgewotICAgICAgICBy
dW5CZW5jaG1hcms8Qnl0ZUxvY2s+KCJXVEYgQnl0ZUxvY2siKTsKKyAgICBpZiAoIXN0cmNtcChh
cmd2WzFdLCAibG9jayIpIHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CisgICAgICAgIHJ1
bkJlbmNobWFyazxMb2NrPigiV1RGIExvY2siKTsKICAgICAgICAgZGlkUnVuID0gdHJ1ZTsKICAg
ICB9CiAgICAgaWYgKCFzdHJjbXAoYXJndlsxXSwgIm11dGV4IikgfHwgIXN0cmNtcChhcmd2WzFd
LCAiYWxsIikpIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jhc2ljTG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQmFzaWNMb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0Jhc2ljTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2ljTG9jay5oIgorCisjaW5jbHVkZSAiRGF0YUxvZy5o
IgorI2luY2x1ZGUgIlN0cmluZ1ByaW50U3RyZWFtLmgiCisjaW5jbHVkZSAiVGhyZWFkU3BlY2lm
aWMuaCIKKyNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRpdmVzLmgiCisjaW5jbHVkZSA8Y29uZGl0
aW9uX3ZhcmlhYmxlPgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHRocmVhZD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSB7CisKKy8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgc2Vy
dmVzIHRocmVlIHB1cnBvc2VzOgorLy8KKy8vIDEpIEEgcGFya2luZyBtZWNoYW5pc20gZm9yIHRo
cmVhZHMgdGhhdCBnbyB0byBzbGVlcC4gVGhhdCBpbnZvbHZlcyBqdXN0IGEgc3lzdGVtIG11dGV4
IGFuZAorLy8gICAgY29uZGl0aW9uIHZhcmlhYmxlLgorLy8KKy8vIDIpIEEgcXVldWUgbm9kZSBm
b3Igd2hlbiBhIHRocmVhZCBpcyBvbiBzb21lIEJhc2ljTG9jaydzIHF1ZXVlLgorLy8KKy8vIDMp
IFRoZSBxdWV1ZSBoZWFkLiBUaGlzIGlzIGtpbmQgb2YgZnVua3kuIFdoZW4gYSB0aHJlYWQgaXMg
dGhlIGhlYWQgb2YgYSBxdWV1ZSwgaXQgYWxzbyBzZXJ2ZXMgYXMKKy8vICAgIHRoZSBiYXNpYyBx
dWV1ZSBib29ra2VlcGluZyBkYXRhIHN0cnVjdHVyZS4gV2hlbiBhIHRocmVhZCBpcyBkZXF1ZXVl
ZCwgdGhlIG5leHQgdGhyZWFkIGluIHRoZQorLy8gICAgcXVldWUgdGFrZXMgb24gdGhlIHF1ZXVl
IGhlYWQgZHV0aWVzLgorc3RydWN0IFRocmVhZERhdGEgeworICAgIC8vIFRoZSBwYXJraW5nIG1l
Y2hhbmlzbS4KKyAgICBib29sIHNob3VsZFBhcmsgeyBmYWxzZSB9OworICAgIHN0ZDo6bXV0ZXgg
cGFya2luZ0xvY2s7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlv
bjsKKworICAgIC8vIFRoZSBxdWV1ZSBub2RlLgorICAgIFRocmVhZERhdGEqIG5leHRJblF1ZXVl
IHsgbnVsbHB0ciB9OworCisgICAgLy8gVGhlIHF1ZXVlIGl0c2VsZi4KKyAgICBUaHJlYWREYXRh
KiBxdWV1ZVRhaWwgeyBudWxscHRyIH07Cit9OworCitUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRh
PiogdGhyZWFkRGF0YTsKKworVGhyZWFkRGF0YSogbXlUaHJlYWREYXRhKCkKK3sKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisg
ICAgICAgIGluaXRpYWxpemVPbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICB0aHJlYWRE
YXRhID0gbmV3IFRocmVhZFNwZWNpZmljPFRocmVhZERhdGE+KCk7CisgICAgICAgIH0pOworCisg
ICAgcmV0dXJuICp0aHJlYWREYXRhOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwor
dm9pZCBCYXNpY0xvY2s6OmxvY2tTbG93KCkKK3sKKyAgICB1bnNpZ25lZCBzcGluQ291bnQgPSAw
OworCisgICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFz
ZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KKyAgICBjb25zdCB1bnNpZ25lZCBzcGlu
TGltaXQgPSA0MDsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHVpbnRwdHJfdCBjdXJy
ZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghKGN1
cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCkpIHsKKyAgICAgICAgICAgIC8vIEl0J3Mgbm90
IHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGhvbGQgdGhlIHF1ZXVlIGxvY2sgd2hpbGUgdGhlIGxv
Y2sgaXRzZWxmIGlzIG5vIGxvbmdlcgorICAgICAgICAgICAgLy8gaGVsZCwgc2luY2Ugd2Ugd2ls
bCBvbmx5IGF0dGVtcHQgdG8gYWNxdWlyZSB0aGUgcXVldWUgbG9jayB3aGVuIHRoZSBsb2NrIGlz
IGhlbGQgYW5kCisgICAgICAgICAgICAvLyB0aGUgcXVldWUgbG9jayBwcmV2ZW50cyB1bmxvY2su
CisgICAgICAgICAgICBBU1NFUlQoIShjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJp
dCkpOworICAgICAgICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRX
b3JkVmFsdWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBpc0xvY2tlZEJpdCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBTdWNjZXNzISBXZSBhY3F1aXJlZCB0aGUgbG9jay4KKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBxdWV1ZSBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVzdCB0cnkg
dG8gc3BpbiBhcm91bmQgYWdhaW4uCisgICAgICAgIGlmICghKGN1cnJlbnRXb3JkVmFsdWUgJiB+
cXVldWVIZWFkTWFzaykgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgICAgICBz
cGluQ291bnQrKzsKKyAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5lZWQgdG8gcHV0IG91
cnNlbHZlcyBvbiB0aGUgcXVldWUuIENyZWF0ZSB0aGUgcXVldWUgaWYgb25lIGRvZXMgbm90IGV4
aXN0LiBUaGlzIHJlcXVyaWVzCisgICAgICAgIC8vIG93bmluZyB0aGUgcXVldWUgZm9yIGEgbGl0
dGxlIGJpdC4gVGhlIGxvY2sgdGhhdCBjb250cm9scyB0aGUgcXVldWUgaXMgaXRzZWxmIGEgc3Bp
bmxvY2suCisgICAgICAgIC8vIEJ1dCBiZWZvcmUgd2UgYWNxdWlyZSB0aGUgcXVldWUgc3Bpbmxv
Y2ssIHdlIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSBUaHJlYWREYXRhIGZvciB0aGlzCisgICAg
ICAgIC8vIHRocmVhZC4KKyAgICAgICAgVGhyZWFkRGF0YSogbWUgPSBteVRocmVhZERhdGEoKTsK
KyAgICAgICAgQVNTRVJUKCFtZS0+c2hvdWxkUGFyayk7CisgICAgICAgIEFTU0VSVCghbWUtPm5l
eHRJblF1ZXVlKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+cXVldWVUYWlsKTsKKworICAgICAgICAv
LyBSZWxvYWQgdGhlIGN1cnJlbnQgd29yZCB2YWx1ZSwgc2luY2Ugc29tZSB0aW1lIG1heSBoYXZl
IHBhc3NlZC4KKyAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisKKyAg
ICAgICAgLy8gV2UgcHJvY2VlZCBvbmx5IGlmIHRoZSBxdWV1ZSBsb2NrIGlzIG5vdCBoZWxkLCB0
aGUgQmFzaWNMb2NrIGlzIGhlbGQsIGFuZCB3ZSBzdWNjZWVkIGluCisgICAgICAgIC8vIGFjcXVp
cmluZyB0aGUgcXVldWUgbG9jay4KKyAgICAgICAgaWYgKChjdXJyZW50V29yZFZhbHVlICYgaXNR
dWV1ZUxvY2tlZEJpdCkKKyAgICAgICAgICAgIHx8ICEoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9j
a2VkQml0KQorICAgICAgICAgICAgfHwgIW1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJl
bnRXb3JkVmFsdWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBpc1F1ZXVlTG9ja2VkQml0KSkgeworICAg
ICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtZS0+c2hvdWxkUGFyayA9IHRydWU7CisK
KyAgICAgICAgLy8gV2Ugb3duIHRoZSBxdWV1ZS4gTm9ib2R5IGNhbiBlbnF1ZXVlIG9yIGRlcXVl
dWUgdW50aWwgd2UncmUgZG9uZS4gQWxzbywgaXQncyBub3QgcG9zc2libGUKKyAgICAgICAgLy8g
dG8gcmVsZWFzZSB0aGUgQmFzaWNMb2NrIHdoaWxlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2suCisg
ICAgICAgIFRocmVhZERhdGEqIHF1ZXVlSGVhZCA9IGJpdHdpc2VfY2FzdDxUaHJlYWREYXRhKj4o
Y3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKTsKKyAgICAgICAgaWYgKHF1ZXVlSGVh
ZCkgeworICAgICAgICAgICAgLy8gUHV0IHRoaXMgdGhyZWFkIGF0IHRoZSBlbmQgb2YgdGhlIHF1
ZXVlLgorICAgICAgICAgICAgcXVldWVIZWFkLT5xdWV1ZVRhaWwtPm5leHRJblF1ZXVlID0gbWU7
CisgICAgICAgICAgICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbCA9IG1lOworCisgICAgICAgICAgICAv
LyBSZWxlYXNlIHRoZSBxdWV1ZSBsb2NrLgorICAgICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9
IG1fd29yZC5sb2FkKCk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIH5x
dWV1ZUhlYWRNYXNrKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNR
dWV1ZUxvY2tlZEJpdCk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlz
TG9ja2VkQml0KTsKKyAgICAgICAgICAgIG1fd29yZC5zdG9yZShjdXJyZW50V29yZFZhbHVlICYg
fmlzUXVldWVMb2NrZWRCaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTWFr
ZSB0aGlzIHRocmVhZCBiZSB0aGUgcXVldWUtaGVhZC4KKyAgICAgICAgICAgIHF1ZXVlSGVhZCA9
IG1lOworICAgICAgICAgICAgbWUtPnF1ZXVlVGFpbCA9IG1lOworCisgICAgICAgICAgICAvLyBS
ZWxlYXNlIHRoZSBxdWV1ZSBsb2NrIGFuZCBpbnN0YWxsIG91cnNlbHZlcyBhcyB0aGUgaGVhZC4g
Tm8gbmVlZCBmb3IgYSBDQVMgbG9vcCwgc2luY2UKKyAgICAgICAgICAgIC8vIHdlIG93biB0aGUg
cXVldWUgbG9jay4KKyAgICAgICAgICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgp
OworICAgICAgICAgICAgQVNTRVJUKH4oY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNr
KSk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRC
aXQpOworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7
CisgICAgICAgICAgICB1aW50cHRyX3QgbmV3V29yZFZhbHVlID0gY3VycmVudFdvcmRWYWx1ZTsK
KyAgICAgICAgICAgIG5ld1dvcmRWYWx1ZSB8PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihxdWV1
ZUhlYWQpOworICAgICAgICAgICAgbmV3V29yZFZhbHVlICY9IH5pc1F1ZXVlTG9ja2VkQml0Owor
ICAgICAgICAgICAgbV93b3JkLnN0b3JlKG5ld1dvcmRWYWx1ZSk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50IGV2ZXJ5b25lIHdobyBhY3F1aXJlcyB0aGUgcXVldWUgbG9j
ayB3aWxsIHNlZSBtZSBvbiB0aGUgcXVldWUsIGFuZCBhbnlvbmUgd2hvCisgICAgICAgIC8vIGFj
cXVpcmVzIG1lJ3MgbG9jayB3aWxsIHNlZSB0aGF0IG1lIHdhbnRzIHRvIHBhcmsuIE5vdGUgdGhh
dCBzaG91bGRQYXJrIG1heSBoYXZlIGJlZW4KKyAgICAgICAgLy8gY2xlYXJlZCBhcyBzb29uIGFz
IHRoZSBxdWV1ZSBsb2NrIHdhcyByZWxlYXNlZCBhYm92ZSwgYnV0IGl0IHdpbGwgaGFwcGVuIHdo
aWxlIHRoZQorICAgICAgICAvLyByZWxlYXNpbmcgdGhyZWFkIGhvbGRzIG1lJ3MgcGFya2luZ0xv
Y2suCisKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4
PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgICAgIHdoaWxlIChtZS0+c2hvdWxk
UGFyaykKKyAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0KGxvY2tlcik7
CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKKyAgICAgICAg
QVNTRVJUKCFtZS0+bmV4dEluUXVldWUpOworICAgICAgICBBU1NFUlQoIW1lLT5xdWV1ZVRhaWwp
OworICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGNhbiBsb29wIGFyb3VuZCBhbmQgdHJ5IHRv
IGFjcXVpcmUgdGhlIGxvY2sgYWdhaW4uCisgICAgfQorfQorCit2b2lkIEJhc2ljTG9jazo6dW5s
b2NrU2xvdygpCit7CisgICAgLy8gVGhlIGZhc3QgcGF0aCBjYW4gZmFpbCBlaXRoZXIgYmVjYXVz
ZSBvZiBzcHVyaW91cyB3ZWFrIENBUyBmYWlsdXJlLCBvciBiZWNhdXNlIHNvbWVvbmUgcHV0IGEK
KyAgICAvLyB0aHJlYWQgb24gdGhlIHF1ZXVlLCBvciB0aGUgcXVldWUgbG9jayBpcyBoZWxkLiBJ
ZiB0aGUgcXVldWUgbG9jayBpcyBoZWxkLCBpdCBjYW4gb25seSBiZQorICAgIC8vIGJlY2F1c2Ug
c29tZW9uZSAqd2lsbCogZW5xdWV1ZSBhIHRocmVhZCBvbnRvIHRoZSBxdWV1ZS4KKworICAgIC8v
IEFjcXVpcmUgdGhlIHF1ZXVlIGxvY2ssIG9yIHJlbGVhc2UgdGhlIGxvY2suIFRoaXMgbG9vcCBo
YW5kbGVzIGJvdGggbG9jayByZWxlYXNlIGluIGNhc2UgdGhlCisgICAgLy8gZmFzdCBwYXRoJ3Mg
d2VhayBDQVMgc3B1cmlvdXNseSBmYWlsZWQgYW5kIGl0IGhhbmRsZXMgcXVldWUgbG9jayBhY3F1
aXNpdGlvbiBpZiB0aGVyZSBpcworICAgIC8vIGFjdHVhbGx5IHNvbWV0aGluZyBpbnRlcmVzdGlu
ZyBvbiB0aGUgcXVldWUuCisgICAgZm9yICg7OykgeworICAgICAgICB1aW50cHRyX3QgY3VycmVu
dFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3Jk
VmFsdWUgJiBpc0xvY2tlZEJpdCk7CisgICAgICAgIAorICAgICAgICBpZiAoY3VycmVudFdvcmRW
YWx1ZSA9PSBpc0xvY2tlZEJpdCkgeworICAgICAgICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhj
aGFuZ2VXZWFrKGlzTG9ja2VkQml0LCAwKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBmYXN0
IHBhdGgncyB3ZWFrIENBUyBoYWQgc3B1cmlvdXNseSBmYWlsZWQsIGFuZCBub3cgd2Ugc3VjY2Vl
ZGVkLiBUaGUgbG9jayBpcworICAgICAgICAgICAgICAgIC8vIHVubG9ja2VkIGFuZCB3ZSdyZSBk
b25lIQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC8vIExvb3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAgICBzdGQ6OnRoaXNfdGhy
ZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCkgeworICAg
ICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgaXQgd2Fzbid0IGp1c3QgYSBzcHVyaW91cyB3
ZWFrIENBUyBmYWlsdXJlIGFuZCBpZiB0aGUgcXVldWUgbG9jayBpcyBub3QgaGVsZCwgdGhlbiB0
aGVyZQorICAgICAgICAvLyBtdXN0IGJlIGFuIGVudHJ5IG9uIHRoZSBxdWV1ZS4KKyAgICAgICAg
QVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiB+cXVldWVIZWFkTWFzayk7CisKKyAgICAgICAgaWYg
KG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRXb3Jk
VmFsdWUgfCBpc1F1ZXVlTG9ja2VkQml0KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHVpbnRwdHJfdCBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKyAgICAgICAg
CisgICAgLy8gQWZ0ZXIgd2UgYWNxdWlyZSB0aGUgcXVldWUgbG9jaywgdGhlIEJhc2ljTG9jayBt
dXN0IHN0aWxsIGJlIGhlbGQgYW5kIHRoZSBxdWV1ZSBtdXN0IGJlCisgICAgLy8gbm9uLWVtcHR5
LiBUaGUgcXVldWUgbXVzdCBiZSBub24tZW1wdHkgc2luY2Ugb25seSB0aGUgbG9ja1Nsb3coKSBt
ZXRob2QgY291bGQgaGF2ZSBoZWxkIHRoZQorICAgIC8vIHF1ZXVlIGxvY2sgYW5kIGlmIGl0IGRp
ZCB0aGVuIGl0IG9ubHkgcmVsZWFzZXMgaXQgYWZ0ZXIgcHV0dGluZyBzb21ldGhpbmcgb24gdGhl
IHF1ZXVlLgorICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpOworICAg
IEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7CisgICAgVGhyZWFk
RGF0YSogcXVldWVIZWFkID0gYml0d2lzZV9jYXN0PFRocmVhZERhdGEqPihjdXJyZW50V29yZFZh
bHVlICYgfnF1ZXVlSGVhZE1hc2spOworICAgIEFTU0VSVChxdWV1ZUhlYWQpOworCisgICAgVGhy
ZWFkRGF0YSogbmV3UXVldWVIZWFkID0gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZTsKKyAgICAvLyBF
aXRoZXIgdGhpcyB3YXMgdGhlIG9ubHkgdGhyZWFkIG9uIHRoZSBxdWV1ZSwgaW4gd2hpY2ggY2Fz
ZSB3ZSBkZWxldGUgdGhlIHF1ZXVlLCBvciB0aGVyZQorICAgIC8vIGFyZSBzdGlsbCBtb3JlIHRo
cmVhZHMgb24gdGhlIHF1ZXVlLCBpbiB3aGljaCBjYXNlIHdlIGNyZWF0ZSBhIG5ldyBxdWV1ZSBo
ZWFkLgorICAgIGlmIChuZXdRdWV1ZUhlYWQpCisgICAgICAgIG5ld1F1ZXVlSGVhZC0+cXVldWVU
YWlsID0gcXVldWVIZWFkLT5xdWV1ZVRhaWw7CisKKyAgICAvLyBDaGFuZ2UgdGhlIHF1ZXVlIGhl
YWQsIHBvc3NpYmx5IHJlbW92aW5nIGl0IGlmIG5ld1F1ZXVlSGVhZCBpcyBudWxsLiBObyBuZWVk
IGZvciBhIENBUyBsb29wLAorICAgIC8vIHNpbmNlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2sgYW5k
IHRoZSBsb2NrIGl0c2VsZiBzbyBub3RoaW5nIGFib3V0IHRoZSBsb2NrIGNhbiBjaGFuZ2Ugcmln
aHQKKyAgICAvLyBub3cuCisgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Cisg
ICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7CisgICAgQVNTRVJUKGN1
cnJlbnRXb3JkVmFsdWUgJiBpc1F1ZXVlTG9ja2VkQml0KTsKKyAgICBBU1NFUlQoKGN1cnJlbnRX
b3JkVmFsdWUgJiB+cXVldWVIZWFkTWFzaykgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocXVl
dWVIZWFkKSk7CisgICAgdWludHB0cl90IG5ld1dvcmRWYWx1ZSA9IGN1cnJlbnRXb3JkVmFsdWU7
CisgICAgbmV3V29yZFZhbHVlICY9IH5pc0xvY2tlZEJpdDsgLy8gUmVsZWFzZSB0aGUgQmFzaWNM
b2NrLgorICAgIG5ld1dvcmRWYWx1ZSAmPSB+aXNRdWV1ZUxvY2tlZEJpdDsgLy8gUmVsZWFzZSB0
aGUgcXVldWUgbG9jay4KKyAgICBuZXdXb3JkVmFsdWUgJj0gcXVldWVIZWFkTWFzazsgLy8gQ2xl
YXIgb3V0IHRoZSBvbGQgcXVldWUgaGVhZC4KKyAgICBuZXdXb3JkVmFsdWUgfD0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4obmV3UXVldWVIZWFkKTsgLy8gSW5zdGFsbCBuZXcgcXVldWUgaGVhZC4K
KyAgICBtX3dvcmQuc3RvcmUobmV3V29yZFZhbHVlKTsKKworICAgIC8vIE5vdyB0aGUgbG9jayBp
cyBhdmFpbGFibGUgZm9yIGFjcXVpc2l0aW9uLiBCdXQgd2UganVzdCBoYXZlIHRvIHdha2UgdXAg
dGhlIG9sZCBxdWV1ZSBoZWFkLgorICAgIC8vIEFmdGVyIHRoYXQsIHdlJ3JlIGRvbmUhCisKKyAg
ICBxdWV1ZUhlYWQtPm5leHRJblF1ZXVlID0gbnVsbHB0cjsKKyAgICBxdWV1ZUhlYWQtPnF1ZXVl
VGFpbCA9IG51bGxwdHI7CisKKyAgICAvLyBXZSBkbyB0aGlzIGNhcmVmdWxseSBiZWNhdXNlIHRo
aXMgbWF5IHJ1biBlaXRoZXIgYmVmb3JlIG9yIGR1cmluZyB0aGUgcGFya2luZ0xvY2sgY3JpdGlj
YWwKKyAgICAvLyBzZWN0aW9uIGluIGxvY2tTbG93KCkuCisgICAgeworICAgICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihxdWV1ZUhlYWQtPnBhcmtpbmdMb2NrKTsKKyAg
ICAgICAgcXVldWVIZWFkLT5zaG91bGRQYXJrID0gZmFsc2U7CisgICAgfQorICAgIC8vIERvZXNu
J3QgbWF0dGVyIGlmIHdlIG5vdGlmeV9hbGwoKSBvciBub3RpZnlfb25lKCkgaGVyZSBzaW5jZSB0
aGUgb25seSB0aHJlYWQgdGhhdCBjb3VsZCBiZQorICAgIC8vIHdhaXRpbmcgaXMgcXVldWVIZWFk
LgorICAgIHF1ZXVlSGVhZC0+cGFya2luZ0NvbmRpdGlvbi5ub3RpZnlfb25lKCk7CisKKyAgICAv
LyBUaGUgb2xkIHF1ZXVlIGhlYWQgY2FuIG5vdyBjb250ZW5kIGZvciB0aGUgbG9jayBhZ2Fpbi4g
V2UncmUgZG9uZSEKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0Jhc2ljTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Jhc2ljTG9jay5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvQmFzaWNMb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFdURl9CYXNpY0xvY2tfaAorI2RlZmluZSBXVEZfQmFzaWNMb2Nr
X2gKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
CituYW1lc3BhY2UgV1RGIHsKKworLy8gQSBCYXNpY0xvY2sgaXMgYSBmdWxseSBhZGFwdGl2ZSBt
dXRleCB0aGF0IHVzZXMgc2l6ZW9mKHZvaWQqKSBzdG9yYWdlLiBJdCBoYXMgYSBmYXN0IHBhdGgg
dGhhdCBpcworLy8gc2ltaWxhciB0byBTcGluTG9jaywgYW5kIGEgc2xvdyBwYXRoIHRoYXQgaXMg
c2ltaWxhciB0byBNdXRleC4gSW4gbW9zdCBjYXNlcywgeW91IHNob3VsZCB1c2UgTG9jaworLy8g
aW5zdGVhZC4gQmFzaWNMb2NrIHNpdHMgbG93ZXIgaW4gdGhlIHN0YWNrIGFuZCBpcyB1c2VkIHRv
IGltcGxlbWVudCBMb2NrLCBzbyBMb2NrIGlzIHRoZSBtYWluCisvLyBjbGllbnQgb2YgQmFzaWNM
b2NrLgorCitjbGFzcyBCYXNpY0xvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2lj
TG9jayk7CitwdWJsaWM6CisgICAgQmFzaWNMb2NrKCkKKyAgICB7CisgICAgICAgIG1fd29yZC5z
dG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICB9CisKKyAgICB2b2lkIGxv
Y2soKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2Vh
aygwLCBpc0xvY2tlZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7CisgICAgICAg
ICAgICAvLyBCYXNpY0xvY2sgYWNxdWlyZWQhCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBsb2NrU2xvdygpOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrKCkKKyAg
ICB7CisgICAgICAgIGlmIChMSUtFTFkobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNMb2Nr
ZWRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkgeworICAgICAgICAgICAgLy8g
QmFzaWNMb2NrIHJlbGVhc2VkLCBhbmQgbm9ib2R5IHdhcyB3YWl0aW5nIQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdW5sb2NrU2xvdygpOworICAgIH0KKworICAg
IGJvb2wgaXNIZWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dvcmQubG9hZChz
dGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzTG9ja2VkQml0OworICAgIH0KKworICAgIGJv
b2wgaXNMb2NrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSGVsZCgpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGlzTG9ja2VkQml0ID0g
MTsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGlzUXVldWVMb2NrZWRCaXQgPSAyOworICAg
IHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcXVldWVIZWFkTWFzayA9IDM7CisKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHVubG9ja1Nsb3coKTsKKworICAgIEF0b21pYzx1aW50cHRyX3Q+IG1fd29yZDsKK307CisKK3R5
cGVkZWYgTG9ja2VyPEJhc2ljTG9jaz4gQmFzaWNMb2NrSG9sZGVyOworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwordXNpbmcgV1RGOjpCYXNpY0xvY2s7Cit1c2luZyBXVEY6OkJhc2ljTG9ja0hvbGRl
cjsKKworI2VuZGlmIC8vIFdURl9CYXNpY0xvY2tfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9C
eXRlTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQnl0ZUxvY2suY3BwCShy
ZXZpc2lvbiAxODgyOTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJ5dGVMb2NrLmgi
Ci0KLSNpbmNsdWRlICJEYXRhTG9nLmgiCi0jaW5jbHVkZSAiUGFya2luZ0xvdC5oIgotI2luY2x1
ZGUgIlN0cmluZ1ByaW50U3RyZWFtLmgiCi0jaW5jbHVkZSA8dGhyZWFkPgotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi12b2lkIEJ5dGVM
b2NrOjpsb2NrU2xvdygpCi17Ci0gICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKLQotICAgIC8v
IFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3Qg
SmlrZXNSVk0gZXhwZXJpbWVudHMuCi0gICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7
Ci0gICAgCi0gICAgZm9yICg7OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUg
PSBtX2J5dGUubG9hZCgpOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5
dGVWYWx1ZSwgIlxuIikpOwotCi0gICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJn
ZSBpbi4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAg
ICAgICAgICYmIG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1
cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28g
bXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgotICAgICAgICBpZiAoIShjdXJy
ZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsK
LSAgICAgICAgICAgIHNwaW5Db3VudCsrOwotICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6
eWllbGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
TmVlZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3Qs
IGFuZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCi0gICAgICAgIC8vIGlmIHRoZSBwYXJr
ZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgotICAgICAgICBp
ZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQotICAgICAgICAgICAgJiYgIW1f
Ynl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFs
dWUgfCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8g
V2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBh
cyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgotICAgICAgICBQYXJraW5nTG90Ojpjb21w
YXJlQW5kUGFyaygmbV9ieXRlLCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOwotCi0gICAgICAg
IC8vIFdlIGhhdmUgYXdha2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2
YWx1ZSBjaGFuZ2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCi0gICAgICAgIC8vIGFyb3VuZCBhbmQg
dHJ5IGFnYWluLgotICAgIH0KLX0KLQotdm9pZCBCeXRlTG9jazo6dW5sb2NrU2xvdygpCi17Ci0g
ICAgLy8gUmVsZWFzZSB0aGUgbG9jayB3aGlsZSBmaW5kaW5nIG91dCBpZiBzb21lb25lIGlzIHBh
cmtlZC4gTm90ZSB0aGF0IGFzIHNvb24gYXMgd2UgZG8gdGhpcywKLSAgICAvLyBzb21lb25lIG1p
Z2h0IGJhcmdlIGluLgotICAgIHVpbnQ4X3Qgb2xkQnl0ZVZhbHVlOwotICAgIGZvciAoOzspIHsK
LSAgICAgICAgb2xkQnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5s
b2NraW5nIHdpdGggIiwgb2xkQnl0ZVZhbHVlLCAiXG4iKSk7Ci0gICAgICAgIEFTU0VSVChvbGRC
eXRlVmFsdWUgJiBpc0hlbGRCaXQpOwotICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNoYW5n
ZVdlYWsob2xkQnl0ZVZhbHVlLCAwKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IC8vIE5vdGUgdGhhdCBzb21lb25lIGNvdWxkIHRyeSB0byBwYXJrIHJpZ2h0IG5vdy4gSWYgdGhh
dCBoYXBwZW5zLCB0aGV5IHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5Ci0gICAgLy8gYmVjYXVzZSBv
dXIgcGFya2luZyBwcmVkaWNhdGUgaXMgdGhhdCBtX2J5dGUgPT0gaXNIZWxkQml0IHwgaGFzUGFy
a2VkQml0LCBidXQgd2UndmUgYWxyZWFkeSBzZXQKLSAgICAvLyBtX2J5dGUgPSAwLgotCi0gICAg
Ly8gSWYgdGhlcmUgaGFkIGJlZW4gdGhyZWFkcyBwYXJrZWQsIHVucGFyayBhbGwgb2YgdGhlbS4g
VGhpcyBjYXVzZXMgYSB0aHVuZGVyaW5nIGhlcmQsIGJ1dCB3aGlsZQotICAgIC8vIHRoYXQgaXMg
dGhlb3JldGljYWxseSBzY2FyeSwgaXQncyB0b3RhbGx5IGZpbmUgaW4gV2ViS2l0IGJlY2F1c2Ug
d2UgdXN1YWxseSBkb24ndCBoYXZlIGVub3VnaAotICAgIC8vIHRocmVhZHMgZm9yIHRoaXMgdG8g
bWF0dGVyLgotICAgIC8vIEZJWE1FOiBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzIHRvIGV4aGli
aXQgdGh1bmRlcmluZyBoZXJkLiBXZSBjb3VsZCB1c2UgdW5wYXJrT25lKCksIGFuZCBpZgotICAg
IC8vIHRoYXQgcmV0dXJucyB0cnVlLCBqdXN0IHNldCB0aGUgcGFya2VkIGJpdCBhZ2Fpbi4gSWYg
aW4gdGhlIHByb2Nlc3Mgb2Ygc2V0dGluZyB0aGUgcGFya2VkIGJpdAotICAgIC8vIHdlIGZhaWwg
dGhlIENBUywgdGhlbiBqdXN0IHVucGFyayBhZ2Fpbi4KLSAgICBpZiAob2xkQnl0ZVZhbHVlICYg
aGFzUGFya2VkQml0KQotICAgICAgICBQYXJraW5nTG90Ojp1bnBhcmtBbGwoJm1fYnl0ZSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgJKHJldmlzaW9uIDE4ODI5
MikKKysrIFNvdXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2lmbmRlZiBCeXRlTG9ja19oCi0jZGVmaW5lIEJ5dGVMb2NrX2gKLQotI2luY2x1ZGUgPHd0Zi9B
dG9taWNzLmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2tlci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gVGhpcyBpcyBsaWtlIExvY2ssIGJ1dCBv
bmx5IHJlcXVpcmVzIDEgYnl0ZSBpbnN0ZWFkIG9mIHNpemVvZih2b2lkKikgc3RvcmFnZS4gVGhl
IGRvd25zaWRlIGlzIHRoYXQKLS8vIGl0IGlzIHNsb3dlciBvbiB0aGUgc2xvdyBwYXRoIHVuZGVy
IGhlYXZ5IGNvbnRlbnRpb24gaW52b2x2aW5nIG1hbnkgdGhyZWFkcyBiZWNhdXNlIGl0IGlzCi0v
LyBzdXNjZXB0aWJsZSB0byB0aGUgInRodW5kZXJpbmcgaGVyZCIgcHJvYmxlbTogaXQgZG9lc24n
dCBoYXZlIGVub3VnaCBzdGF0ZSB0byB0cmFjayBob3cgbWFueQotLy8gdGhyZWFkcyBhcmUgd2Fp
dGluZyBmb3IgdGhlIGxvY2ssIHNvIHdoZW4gdW5sb2NrIGRldGVjdHMgdGhhdCBhbnkgdGhyZWFk
IGlzIHdhaXRpbmcsIHRoZW4gaXQgd2FrZXMKLS8vIGFsbCBvZiB0aGUgd2FpdGluZyB0aHJlYWRz
LiBBbGwgb2YgdGhvc2UgdGhyZWFkcyB3aWxsIHBpbGUgb250byB0aGUgbG9jazsgb25lIHdpbGwg
c3VjY2VlZCBhbmQgdGFrZQotLy8gaXQgd2hpbGUgdGhlIG90aGVycyB3aWxsIGdvIGJhY2sgdG8g
c2xlZXAuIFRoZSBzbG93LWRvd24gaXMgc21hbGwuIFRlbiB0aHJlYWRzIHJlcGVhdGVkbHkKLS8v
IGNvbnRlbmRpbmcgZm9yIHRoZSBzYW1lIH4xLTEwdXMgbG9uZyBjcml0aWNhbCBzZWN0aW9uIHdp
bGwgcnVuIDclIHNsb3dlciBvbiBteSBtYWNoaW5lLiBJZiBJIG1lc3MKLS8vIHdpdGggYW55IG9m
IHRoZSBwYXJhbWV0ZXJzIC0gY2hhbmdlIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBvciBjaGFuZ2Ug
dGhlIGNyaXRpY2FsIHNlY3Rpb24gZHVyYXRpb24gLQotLy8gdGhlbiBCeXRlTG9jayByZWFjaGVz
IHBhcml0eSB3aXRoIExvY2ssIGFuZCBzb21ldGltZXMgb3V0cGVyZm9ybXMgaXQuIFBlcmhhcHMg
bW9zdCBzdXJwcmlzaW5nbHksCi0vLyB0aGUgc2xvdy1kb3duIGdvZXMgYXdheSBldmVuIHdoZW4g
eW91IGluY3JlYXNlIHRoZSBudW1iZXIgb2YgdGhyZWFkcy4gQnl0ZUxvY2sgYXBwZWFycyB0byBz
b21ldGltZXMKLS8vIGJlIGZhc3RlciB1bmRlciBtaWNyb2NvbnRlbnRpb24sIHBlcmhhcHMgYmVj
YXVzZSBhIGNvbnRlbnRpb3VzIDgtYml0IENBUyBpcyBjaGVhcGVyIHRoYW4gYQotLy8gY29udGVu
dGlvdXMgNjQtYml0IENBUy4gTm90ZSB0aGF0IHVuY29udGVuZGVkIGxvY2tpbmcgaXMgZXF1YWxs
eSBmYXN0IHdpdGggQnl0ZUxvY2sgYXMgd2l0aCBMb2NrLgotLy8gSW4gYWxsLCBMb2NrIGFuZCBC
eXRlTG9jayBoYXZlIHNpbWlsYXIgcGVyZm9ybWFuY2UgdW5kZXIgY29udHJvbGxlZCBtaWNyb2Jl
bmNobWFya3MsIGJ1dCBMb2NrIGlzCi0vLyB0aGVvcmV0aWNhbGx5IHNhZmVyIGJlY2F1c2Ugb2Yg
dGhlIHRodW5kZXJpbmcgaGVyZCBpc3N1ZS4gSXQncyBwcm9iYWJseSBiZXN0IHRvIHVzZSBCeXRl
TG9jayBvbmx5Ci0vLyB3aGVuIHlvdSByZWFsbHkgY2FyZSBhYm91dCBzcGFjZSBhbmQgeW91IGRv
bid0IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgdGhhdCBhIGxhcmdlIG51bWJlciBvZgotLy8gdGhy
ZWFkcyB3b3VsZCBldmVyIHBpbGUgb250byB0aGUgc2FtZSBsb2NrLgotCi1jbGFzcyBCeXRlTG9j
ayB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZUxvY2spOwotcHVibGljOgotICAgIEJ5
dGVMb2NrKCkKLSAgICB7Ci0gICAgICAgIG1fYnl0ZS5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBsb2NrKCkKLSAgICB7Ci0gICAgICAg
IGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoMCwgaXNIZWxkQml0LCBzdGQ6
Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgYWNxdWlyZWQh
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBsb2NrU2xvdygpOwot
ICAgIH0KLQotICAgIHZvaWQgdW5sb2NrKCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9i
eXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxlYXNlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMg
d2FpdGluZyEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9j
a1Nsb3coKTsKLSAgICB9Ci0KLSAgICBib29sIGlzSGVsZCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9ieXRlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRC
aXQ7Ci0gICAgfQotCi0gICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gaXNIZWxkKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCB1aW50
OF90IGlzSGVsZEJpdCA9IDE7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaGFzUGFya2VkQml0
ID0gMjsKLQotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGxvY2tTbG93KCk7Ci0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrU2xvdygpOwotCi0gICAgQXRvbWljPHVpbnQ4X3Q+
IG1fYnl0ZTsKLX07Ci0KLXR5cGVkZWYgTG9ja2VyPEJ5dGVMb2NrPiBCeXRlTG9ja2VyOwotCi19
IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpCeXRlTG9jazsKLXVzaW5nIFdURjo6Qnl0
ZUxvY2tlcjsKLQotI2VuZGlmIC8vIEJ5dGVMb2NrX2gKLQpJbmRleDogU291cmNlL1dURi93dGYv
TG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9u
IDE4ODI5MikKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw1NSArMjcsMTQgQEAKICNpbmNsdWRlICJMb2NrLmgiCiAKICNpbmNsdWRlICJEYXRhTG9nLmgi
CisjaW5jbHVkZSAiUGFya2luZ0xvdC5oIgogI2luY2x1ZGUgIlN0cmluZ1ByaW50U3RyZWFtLmgi
Ci0jaW5jbHVkZSAiVGhyZWFkU3BlY2lmaWMuaCIKICNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRp
dmVzLmgiCi0jaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgotI2luY2x1ZGUgPG11dGV4Pgog
I2luY2x1ZGUgPHRocmVhZD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLW5hbWVzcGFjZSB7Ci0KLS8v
IFRoaXMgZGF0YSBzdHJ1Y3R1cmUgc2VydmVzIHRocmVlIHB1cnBvc2VzOgotLy8KLS8vIDEpIEEg
cGFya2luZyBtZWNoYW5pc20gZm9yIHRocmVhZHMgdGhhdCBnbyB0byBzbGVlcC4gVGhhdCBpbnZv
bHZlcyBqdXN0IGEgc3lzdGVtIG11dGV4IGFuZAotLy8gICAgY29uZGl0aW9uIHZhcmlhYmxlLgot
Ly8KLS8vIDIpIEEgcXVldWUgbm9kZSBmb3Igd2hlbiBhIHRocmVhZCBpcyBvbiBzb21lIExvY2sn
cyBxdWV1ZS4KLS8vCi0vLyAzKSBUaGUgcXVldWUgaGVhZC4gVGhpcyBpcyBraW5kIG9mIGZ1bmt5
LiBXaGVuIGEgdGhyZWFkIGlzIHRoZSBoZWFkIG9mIGEgcXVldWUsIGl0IGFsc28gc2VydmVzIGFz
Ci0vLyAgICB0aGUgYmFzaWMgcXVldWUgYm9va2tlZXBpbmcgZGF0YSBzdHJ1Y3R1cmUuIFdoZW4g
YSB0aHJlYWQgaXMgZGVxdWV1ZWQsIHRoZSBuZXh0IHRocmVhZCBpbiB0aGUKLS8vICAgIHF1ZXVl
IHRha2VzIG9uIHRoZSBxdWV1ZSBoZWFkIGR1dGllcy4KLXN0cnVjdCBUaHJlYWREYXRhIHsKLSAg
ICAvLyBUaGUgcGFya2luZyBtZWNoYW5pc20uCi0gICAgYm9vbCBzaG91bGRQYXJrIHsgZmFsc2Ug
fTsKLSAgICBzdGQ6Om11dGV4IHBhcmtpbmdMb2NrOwotICAgIHN0ZDo6Y29uZGl0aW9uX3Zhcmlh
YmxlIHBhcmtpbmdDb25kaXRpb247Ci0KLSAgICAvLyBUaGUgcXVldWUgbm9kZS4KLSAgICBUaHJl
YWREYXRhKiBuZXh0SW5RdWV1ZSB7IG51bGxwdHIgfTsKLQotICAgIC8vIFRoZSBxdWV1ZSBpdHNl
bGYuCi0gICAgVGhyZWFkRGF0YSogcXVldWVUYWlsIHsgbnVsbHB0ciB9OwotfTsKLQotVGhyZWFk
U3BlY2lmaWM8VGhyZWFkRGF0YT4qIHRocmVhZERhdGE7Ci0KLVRocmVhZERhdGEqIG15VGhyZWFk
RGF0YSgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOwotICAg
IHN0ZDo6Y2FsbF9vbmNlKAotICAgICAgICBpbml0aWFsaXplT25jZSwKLSAgICAgICAgW10gewot
ICAgICAgICAgICAgdGhyZWFkRGF0YSA9IG5ldyBUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPigp
OwotICAgICAgICB9KTsKLQotICAgIHJldHVybiAqdGhyZWFkRGF0YTsKLX0KLQotfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKIHZv
aWQgTG9ja0Jhc2U6OmxvY2tTbG93KCkKIHsKQEAgLTg1LDE4NCArNDQsNjIgQEAgdm9pZCBMb2Nr
QmFzZTo6bG9ja1Nsb3coKQogICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQwOwogICAg
IAogICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFsdWUgPSBt
X3dvcmQubG9hZCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCEoY3VycmVudFdvcmRWYWx1ZSAm
IGlzTG9ja2VkQml0KSkgewotICAgICAgICAgICAgLy8gSXQncyBub3QgcG9zc2libGUgZm9yIHNv
bWVvbmUgdG8gaG9sZCB0aGUgcXVldWUgbG9jayB3aGlsZSB0aGUgbG9jayBpdHNlbGYgaXMgbm8g
bG9uZ2VyCi0gICAgICAgICAgICAvLyBoZWxkLCBzaW5jZSB3ZSB3aWxsIG9ubHkgYXR0ZW1wdCB0
byBhY3F1aXJlIHRoZSBxdWV1ZSBsb2NrIHdoZW4gdGhlIGxvY2sgaXMgaGVsZCBhbmQKLSAgICAg
ICAgICAgIC8vIHRoZSBxdWV1ZSBsb2NrIHByZXZlbnRzIHVubG9jay4KLSAgICAgICAgICAgIEFT
U0VSVCghKGN1cnJlbnRXb3JkVmFsdWUgJiBpc1F1ZXVlTG9ja2VkQml0KSk7Ci0gICAgICAgICAg
ICBpZiAobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwgY3VycmVu
dFdvcmRWYWx1ZSB8IGlzTG9ja2VkQml0KSkgewotICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3Mh
IFdlIGFjcXVpcmVkIHRoZSBsb2NrLgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQorICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5
dGUubG9hZCgpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9T
dHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVWYWx1
ZSwgIlxuIikpOworCisgICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4K
KyAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAg
ICYmIG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRC
eXRlVmFsdWUgfCBpc0hlbGRCaXQpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8v
IElmIHRoZXJlIGlzIG5vIHF1ZXVlIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNh
biBqdXN0IHRyeSB0byBzcGluIGFyb3VuZCBhZ2Fpbi4KLSAgICAgICAgaWYgKCEoY3VycmVudFdv
cmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAg
ICAgICAgLy8gSWYgdGhlcmUgaXMgbm9ib2R5IHBhcmtlZCBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRv
byBtdWNoLCB3ZSBjYW4ganVzdCB0cnkgdG8gc3BpbiBhcm91bmQuCisgICAgICAgIGlmICghKGN1
cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkg
ewogICAgICAgICAgICAgc3BpbkNvdW50Kys7CiAgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFk
Ojp5aWVsZCgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICAv
LyBOZWVkIHRvIHB1dCBvdXJzZWx2ZXMgb24gdGhlIHF1ZXVlLiBDcmVhdGUgdGhlIHF1ZXVlIGlm
IG9uZSBkb2VzIG5vdCBleGlzdC4gVGhpcyByZXF1cmllcwotICAgICAgICAvLyBvd25pbmcgdGhl
IHF1ZXVlIGZvciBhIGxpdHRsZSBiaXQuIFRoZSBsb2NrIHRoYXQgY29udHJvbHMgdGhlIHF1ZXVl
IGlzIGl0c2VsZiBhIHNwaW5sb2NrLgotICAgICAgICAvLyBCdXQgYmVmb3JlIHdlIGFjcXVpcmUg
dGhlIHF1ZXVlIHNwaW5sb2NrLCB3ZSBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgVGhyZWFkRGF0
YSBmb3IgdGhpcwotICAgICAgICAvLyB0aHJlYWQuCi0gICAgICAgIFRocmVhZERhdGEqIG1lID0g
bXlUaHJlYWREYXRhKCk7Ci0gICAgICAgIEFTU0VSVCghbWUtPnNob3VsZFBhcmspOwotICAgICAg
ICBBU1NFUlQoIW1lLT5uZXh0SW5RdWV1ZSk7Ci0gICAgICAgIEFTU0VSVCghbWUtPnF1ZXVlVGFp
bCk7Ci0KLSAgICAgICAgLy8gUmVsb2FkIHRoZSBjdXJyZW50IHdvcmQgdmFsdWUsIHNpbmNlIHNv
bWUgdGltZSBtYXkgaGF2ZSBwYXNzZWQuCi0gICAgICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dv
cmQubG9hZCgpOwotCi0gICAgICAgIC8vIFdlIHByb2NlZWQgb25seSBpZiB0aGUgcXVldWUgbG9j
ayBpcyBub3QgaGVsZCwgdGhlIExvY2sgaXMgaGVsZCwgYW5kIHdlIHN1Y2NlZWQgaW4KLSAgICAg
ICAgLy8gYWNxdWlyaW5nIHRoZSBxdWV1ZSBsb2NrLgotICAgICAgICBpZiAoKGN1cnJlbnRXb3Jk
VmFsdWUgJiBpc1F1ZXVlTG9ja2VkQml0KQotICAgICAgICAgICAgfHwgIShjdXJyZW50V29yZFZh
bHVlICYgaXNMb2NrZWRCaXQpCi0gICAgICAgICAgICB8fCAhbV93b3JkLmNvbXBhcmVFeGNoYW5n
ZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwgY3VycmVudFdvcmRWYWx1ZSB8IGlzUXVldWVMb2NrZWRC
aXQpKSB7Ci0gICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAgICAv
LyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgcGFya2VkIGJpdCBmaXJz
dCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBhcm91bmQKKyAgICAgICAgLy8gaWYgdGhlIHBh
cmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFpbGVkIGF0IHNldHRpbmcgaXQuCisgICAgICAg
IGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgICAgICAmJiAh
bV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVW
YWx1ZSB8IGhhc1BhcmtlZEJpdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgbWUtPnNob3VsZFBhcmsgPSB0cnVlOwotCi0gICAgICAgIC8vIFdl
IG93biB0aGUgcXVldWUuIE5vYm9keSBjYW4gZW5xdWV1ZSBvciBkZXF1ZXVlIHVudGlsIHdlJ3Jl
IGRvbmUuIEFsc28sIGl0J3Mgbm90IHBvc3NpYmxlCi0gICAgICAgIC8vIHRvIHJlbGVhc2UgdGhl
IExvY2sgd2hpbGUgd2UgaG9sZCB0aGUgcXVldWUgbG9jay4KLSAgICAgICAgVGhyZWFkRGF0YSog
cXVldWVIZWFkID0gYml0d2lzZV9jYXN0PFRocmVhZERhdGEqPihjdXJyZW50V29yZFZhbHVlICYg
fnF1ZXVlSGVhZE1hc2spOwotICAgICAgICBpZiAocXVldWVIZWFkKSB7Ci0gICAgICAgICAgICAv
LyBQdXQgdGhpcyB0aHJlYWQgYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUuCi0gICAgICAgICAgICBx
dWV1ZUhlYWQtPnF1ZXVlVGFpbC0+bmV4dEluUXVldWUgPSBtZTsKLSAgICAgICAgICAgIHF1ZXVl
SGVhZC0+cXVldWVUYWlsID0gbWU7Ci0KLSAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIHF1ZXVl
IGxvY2suCi0gICAgICAgICAgICBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKLSAg
ICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1hc2spOwotICAg
ICAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc1F1ZXVlTG9ja2VkQml0KTsKLSAg
ICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpOwotICAgICAg
ICAgICAgbV93b3JkLnN0b3JlKGN1cnJlbnRXb3JkVmFsdWUgJiB+aXNRdWV1ZUxvY2tlZEJpdCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBNYWtlIHRoaXMgdGhyZWFkIGJlIHRo
ZSBxdWV1ZS1oZWFkLgotICAgICAgICAgICAgcXVldWVIZWFkID0gbWU7Ci0gICAgICAgICAgICBt
ZS0+cXVldWVUYWlsID0gbWU7Ci0KLSAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIHF1ZXVlIGxv
Y2sgYW5kIGluc3RhbGwgb3Vyc2VsdmVzIGFzIHRoZSBoZWFkLiBObyBuZWVkIGZvciBhIENBUyBs
b29wLCBzaW5jZQotICAgICAgICAgICAgLy8gd2Ugb3duIHRoZSBxdWV1ZSBsb2NrLgotICAgICAg
ICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Ci0gICAgICAgICAgICBBU1NF
UlQofihjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1hc2spKTsKLSAgICAgICAgICAgIEFT
U0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7Ci0gICAgICAgICAgICBB
U1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KTsKLSAgICAgICAgICAgIHVpbnRw
dHJfdCBuZXdXb3JkVmFsdWUgPSBjdXJyZW50V29yZFZhbHVlOwotICAgICAgICAgICAgbmV3V29y
ZFZhbHVlIHw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHF1ZXVlSGVhZCk7Ci0gICAgICAgICAg
ICBuZXdXb3JkVmFsdWUgJj0gfmlzUXVldWVMb2NrZWRCaXQ7Ci0gICAgICAgICAgICBtX3dvcmQu
c3RvcmUobmV3V29yZFZhbHVlKTsKLSAgICAgICAgfQogCi0gICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQgZXZlcnlvbmUgd2hvIGFjcXVpcmVzIHRoZSBxdWV1ZSBsb2NrIHdpbGwgc2VlIG1lIG9uIHRo
ZSBxdWV1ZSwgYW5kIGFueW9uZSB3aG8KLSAgICAgICAgLy8gYWNxdWlyZXMgbWUncyBsb2NrIHdp
bGwgc2VlIHRoYXQgbWUgd2FudHMgdG8gcGFyay4gTm90ZSB0aGF0IHNob3VsZFBhcmsgbWF5IGhh
dmUgYmVlbgotICAgICAgICAvLyBjbGVhcmVkIGFzIHNvb24gYXMgdGhlIHF1ZXVlIGxvY2sgd2Fz
IHJlbGVhc2VkIGFib3ZlLCBidXQgaXQgd2lsbCBoYXBwZW4gd2hpbGUgdGhlCi0gICAgICAgIC8v
IHJlbGVhc2luZyB0aHJlYWQgaG9sZHMgbWUncyBwYXJraW5nTG9jay4KLQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtZS0+cGFya2lu
Z0xvY2spOwotICAgICAgICAgICAgd2hpbGUgKG1lLT5zaG91bGRQYXJrKQotICAgICAgICAgICAg
ICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLndhaXQobG9ja2VyKTsKLSAgICAgICAgfQorICAgICAg
ICAvLyBXZSBub3cgZXhwZWN0IHRoZSB2YWx1ZSB0byBiZSBpc0hlbGR8aGFzUGFya2VkLiBTbyBs
b25nIGFzIHRoYXQncyB0aGUgY2FzZSwgd2UgY2FuIHBhcmsuCisgICAgICAgIFBhcmtpbmdMb3Q6
OmNvbXBhcmVBbmRQYXJrKCZtX2J5dGUsIGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCk7CiAKLSAg
ICAgICAgQVNTRVJUKCFtZS0+c2hvdWxkUGFyayk7Ci0gICAgICAgIEFTU0VSVCghbWUtPm5leHRJ
blF1ZXVlKTsKLSAgICAgICAgQVNTRVJUKCFtZS0+cXVldWVUYWlsKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIE5vdyB3ZSBjYW4gbG9vcCBhcm91bmQgYW5kIHRyeSB0byBhY3F1aXJlIHRoZSBsb2Nr
IGFnYWluLgorICAgICAgICAvLyBXZSBoYXZlIGF3YWtlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJl
Y2F1c2UgdGhlIGJ5dGUgdmFsdWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAorICAgICAg
ICAvLyBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KICAgICB9CiB9CiAKIHZvaWQgTG9ja0Jhc2U6OnVu
bG9ja1Nsb3coKQogewotICAgIC8vIFRoZSBmYXN0IHBhdGggY2FuIGZhaWwgZWl0aGVyIGJlY2F1
c2Ugb2Ygc3B1cmlvdXMgd2VhayBDQVMgZmFpbHVyZSwgb3IgYmVjYXVzZSBzb21lb25lIHB1dCBh
Ci0gICAgLy8gdGhyZWFkIG9uIHRoZSBxdWV1ZSwgb3IgdGhlIHF1ZXVlIGxvY2sgaXMgaGVsZC4g
SWYgdGhlIHF1ZXVlIGxvY2sgaXMgaGVsZCwgaXQgY2FuIG9ubHkgYmUKLSAgICAvLyBiZWNhdXNl
IHNvbWVvbmUgKndpbGwqIGVucXVldWUgYSB0aHJlYWQgb250byB0aGUgcXVldWUuCi0KLSAgICAv
LyBBY3F1aXJlIHRoZSBxdWV1ZSBsb2NrLCBvciByZWxlYXNlIHRoZSBsb2NrLiBUaGlzIGxvb3Ag
aGFuZGxlcyBib3RoIGxvY2sgcmVsZWFzZSBpbiBjYXNlIHRoZQotICAgIC8vIGZhc3QgcGF0aCdz
IHdlYWsgQ0FTIHNwdXJpb3VzbHkgZmFpbGVkIGFuZCBpdCBoYW5kbGVzIHF1ZXVlIGxvY2sgYWNx
dWlzaXRpb24gaWYgdGhlcmUgaXMKLSAgICAvLyBhY3R1YWxseSBzb21ldGhpbmcgaW50ZXJlc3Rp
bmcgb24gdGhlIHF1ZXVlLgorICAgIC8vIFJlbGVhc2UgdGhlIGxvY2sgd2hpbGUgZmluZGluZyBv
dXQgaWYgc29tZW9uZSBpcyBwYXJrZWQuIE5vdGUgdGhhdCBhcyBzb29uIGFzIHdlIGRvIHRoaXMs
CisgICAgLy8gc29tZW9uZSBtaWdodCBiYXJnZSBpbi4KKyAgICB1aW50OF90IG9sZEJ5dGVWYWx1
ZTsKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVpbnRwdHJfdCBjdXJyZW50V29yZFZhbHVlID0g
bV93b3JkLmxvYWQoKTsKLQotICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9j
a2VkQml0KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjdXJyZW50V29yZFZhbHVlID09IGlzTG9j
a2VkQml0KSB7Ci0gICAgICAgICAgICBpZiAobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNM
b2NrZWRCaXQsIDApKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGZhc3QgcGF0aCdzIHdlYWsg
Q0FTIGhhZCBzcHVyaW91c2x5IGZhaWxlZCwgYW5kIG5vdyB3ZSBzdWNjZWVkZWQuIFRoZSBsb2Nr
IGlzCi0gICAgICAgICAgICAgICAgLy8gdW5sb2NrZWQgYW5kIHdlJ3JlIGRvbmUhCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gTG9vcCBhcm91
bmQgYW5kIHRyeSBhZ2Fpbi4KLSAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KGN1cnJlbnRXb3JkVmFsdWUgJiBpc1F1ZXVlTG9ja2VkQml0KSB7Ci0gICAgICAgICAgICBzdGQ6
OnRoaXNfdGhyZWFkOjp5aWVsZCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBJZiBpdCB3YXNuJ3QganVzdCBhIHNwdXJpb3VzIHdlYWsgQ0FTIGZhaWx1
cmUgYW5kIGlmIHRoZSBxdWV1ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGVuIHRoZXJlCi0gICAgICAg
IC8vIG11c3QgYmUgYW4gZW50cnkgb24gdGhlIHF1ZXVlLgotICAgICAgICBBU1NFUlQoY3VycmVu
dFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKTsKLQotICAgICAgICBpZiAobV93b3JkLmNvbXBh
cmVFeGNoYW5nZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwgY3VycmVudFdvcmRWYWx1ZSB8IGlzUXVl
dWVMb2NrZWRCaXQpKQorICAgICAgICBvbGRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOworICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRo
cmVhZCgpLCAiOiB1bmxvY2tpbmcgd2l0aCAiLCBvbGRCeXRlVmFsdWUsICJcbiIpKTsKKyAgICAg
ICAgQVNTRVJUKG9sZEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCk7CisgICAgICAgIGlmIChtX2J5dGUu
Y29tcGFyZUV4Y2hhbmdlV2VhayhvbGRCeXRlVmFsdWUsIDApKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgp
OwotICAgICAgICAKLSAgICAvLyBBZnRlciB3ZSBhY3F1aXJlIHRoZSBxdWV1ZSBsb2NrLCB0aGUg
TG9jayBtdXN0IHN0aWxsIGJlIGhlbGQgYW5kIHRoZSBxdWV1ZSBtdXN0IGJlCi0gICAgLy8gbm9u
LWVtcHR5LiBUaGUgcXVldWUgbXVzdCBiZSBub24tZW1wdHkgc2luY2Ugb25seSB0aGUgbG9ja1Ns
b3coKSBtZXRob2QgY291bGQgaGF2ZSBoZWxkIHRoZQotICAgIC8vIHF1ZXVlIGxvY2sgYW5kIGlm
IGl0IGRpZCB0aGVuIGl0IG9ubHkgcmVsZWFzZXMgaXQgYWZ0ZXIgcHV0dGluZyBzb21ldGhpbmcg
b24gdGhlIHF1ZXVlLgotICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQp
OwotICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7Ci0gICAg
VGhyZWFkRGF0YSogcXVldWVIZWFkID0gYml0d2lzZV9jYXN0PFRocmVhZERhdGEqPihjdXJyZW50
V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1hc2spOwotICAgIEFTU0VSVChxdWV1ZUhlYWQpOwotCi0g
ICAgVGhyZWFkRGF0YSogbmV3UXVldWVIZWFkID0gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZTsKLSAg
ICAvLyBFaXRoZXIgdGhpcyB3YXMgdGhlIG9ubHkgdGhyZWFkIG9uIHRoZSBxdWV1ZSwgaW4gd2hp
Y2ggY2FzZSB3ZSBkZWxldGUgdGhlIHF1ZXVlLCBvciB0aGVyZQotICAgIC8vIGFyZSBzdGlsbCBt
b3JlIHRocmVhZHMgb24gdGhlIHF1ZXVlLCBpbiB3aGljaCBjYXNlIHdlIGNyZWF0ZSBhIG5ldyBx
dWV1ZSBoZWFkLgotICAgIGlmIChuZXdRdWV1ZUhlYWQpCi0gICAgICAgIG5ld1F1ZXVlSGVhZC0+
cXVldWVUYWlsID0gcXVldWVIZWFkLT5xdWV1ZVRhaWw7Ci0KLSAgICAvLyBDaGFuZ2UgdGhlIHF1
ZXVlIGhlYWQsIHBvc3NpYmx5IHJlbW92aW5nIGl0IGlmIG5ld1F1ZXVlSGVhZCBpcyBudWxsLiBO
byBuZWVkIGZvciBhIENBUyBsb29wLAotICAgIC8vIHNpbmNlIHdlIGhvbGQgdGhlIHF1ZXVlIGxv
Y2sgYW5kIHRoZSBsb2NrIGl0c2VsZiBzbyBub3RoaW5nIGFib3V0IHRoZSBsb2NrIGNhbiBjaGFu
Z2UgcmlnaHQKLSAgICAvLyBub3cuCi0gICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2Fk
KCk7Ci0gICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7Ci0gICAgQVNT
RVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc1F1ZXVlTG9ja2VkQml0KTsKLSAgICBBU1NFUlQoKGN1
cnJlbnRXb3JkVmFsdWUgJiB+cXVldWVIZWFkTWFzaykgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4ocXVldWVIZWFkKSk7Ci0gICAgdWludHB0cl90IG5ld1dvcmRWYWx1ZSA9IGN1cnJlbnRXb3Jk
VmFsdWU7Ci0gICAgbmV3V29yZFZhbHVlICY9IH5pc0xvY2tlZEJpdDsgLy8gUmVsZWFzZSB0aGUg
TG9jay4KLSAgICBuZXdXb3JkVmFsdWUgJj0gfmlzUXVldWVMb2NrZWRCaXQ7IC8vIFJlbGVhc2Ug
dGhlIHF1ZXVlIGxvY2suCi0gICAgbmV3V29yZFZhbHVlICY9IHF1ZXVlSGVhZE1hc2s7IC8vIENs
ZWFyIG91dCB0aGUgb2xkIHF1ZXVlIGhlYWQuCi0gICAgbmV3V29yZFZhbHVlIHw9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KG5ld1F1ZXVlSGVhZCk7IC8vIEluc3RhbGwgbmV3IHF1ZXVlIGhlYWQu
Ci0gICAgbV93b3JkLnN0b3JlKG5ld1dvcmRWYWx1ZSk7Ci0KLSAgICAvLyBOb3cgdGhlIGxvY2sg
aXMgYXZhaWxhYmxlIGZvciBhY3F1aXNpdGlvbi4gQnV0IHdlIGp1c3QgaGF2ZSB0byB3YWtlIHVw
IHRoZSBvbGQgcXVldWUgaGVhZC4KLSAgICAvLyBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIQotCi0g
ICAgcXVldWVIZWFkLT5uZXh0SW5RdWV1ZSA9IG51bGxwdHI7Ci0gICAgcXVldWVIZWFkLT5xdWV1
ZVRhaWwgPSBudWxscHRyOwotCi0gICAgLy8gV2UgZG8gdGhpcyBjYXJlZnVsbHkgYmVjYXVzZSB0
aGlzIG1heSBydW4gZWl0aGVyIGJlZm9yZSBvciBkdXJpbmcgdGhlIHBhcmtpbmdMb2NrIGNyaXRp
Y2FsCi0gICAgLy8gc2VjdGlvbiBpbiBsb2NrU2xvdygpLgotICAgIHsKLSAgICAgICAgc3RkOjp1
bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIocXVldWVIZWFkLT5wYXJraW5nTG9jayk7Ci0g
ICAgICAgIHF1ZXVlSGVhZC0+c2hvdWxkUGFyayA9IGZhbHNlOwotICAgIH0KLSAgICAvLyBEb2Vz
bid0IG1hdHRlciBpZiB3ZSBub3RpZnlfYWxsKCkgb3Igbm90aWZ5X29uZSgpIGhlcmUgc2luY2Ug
dGhlIG9ubHkgdGhyZWFkIHRoYXQgY291bGQgYmUKLSAgICAvLyB3YWl0aW5nIGlzIHF1ZXVlSGVh
ZC4KLSAgICBxdWV1ZUhlYWQtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X29uZSgpOwotCi0gICAg
Ly8gVGhlIG9sZCBxdWV1ZSBoZWFkIGNhbiBub3cgY29udGVuZCBmb3IgdGhlIGxvY2sgYWdhaW4u
IFdlJ3JlIGRvbmUhCisgICAgLy8gTm90ZSB0aGF0IHNvbWVvbmUgY291bGQgdHJ5IHRvIHBhcmsg
cmlnaHQgbm93LiBJZiB0aGF0IGhhcHBlbnMsIHRoZXkgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkK
KyAgICAvLyBiZWNhdXNlIG91ciBwYXJraW5nIHByZWRpY2F0ZSBpcyB0aGF0IG1fYnl0ZSA9PSBp
c0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQsIGJ1dCB3ZSd2ZSBhbHJlYWR5IHNldAorICAgIC8vIG1f
Ynl0ZSA9IDAuCisKKyAgICAvLyBJZiB0aGVyZSBoYWQgYmVlbiB0aHJlYWRzIHBhcmtlZCwgdW5w
YXJrIGFsbCBvZiB0aGVtLiBUaGlzIGNhdXNlcyBhIHRodW5kZXJpbmcgaGVyZCwgYnV0IHdoaWxl
CisgICAgLy8gdGhhdCBpcyB0aGVvcmV0aWNhbGx5IHNjYXJ5LCBpdCdzIHRvdGFsbHkgZmluZSBp
biBXZWJLaXQgYmVjYXVzZSB3ZSB1c3VhbGx5IGRvbid0IGhhdmUgZW5vdWdoCisgICAgLy8gdGhy
ZWFkcyBmb3IgdGhpcyB0byBtYXR0ZXIuCisgICAgLy8gRklYTUU6IFdlIGRvbid0IHJlYWxseSBu
ZWVkIHRoaXMgdG8gZXhoaWJpdCB0aHVuZGVyaW5nIGhlcmQuIFdlIGNvdWxkIHVzZSB1bnBhcmtP
bmUoKSwgYW5kIGlmCisgICAgLy8gdGhhdCByZXR1cm5zIHRydWUsIGp1c3Qgc2V0IHRoZSBwYXJr
ZWQgYml0IGFnYWluLiBJZiBpbiB0aGUgcHJvY2VzcyBvZiBzZXR0aW5nIHRoZSBwYXJrZWQgYml0
CisgICAgLy8gd2UgZmFpbCB0aGUgQ0FTLCB0aGVuIGp1c3QgdW5wYXJrIGFnYWluLgorICAgIGlm
IChvbGRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFy
a0FsbCgmbV9ieXRlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9Mb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lv
biAxODgyOTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDEwOCArMzMsMTggQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLS8vIEEgTG9jayBpcyBhIGZ1bGx5
IGFkYXB0aXZlIG11dGV4IHRoYXQgZ2l2ZXMgeW91IHRoZSBiZXN0IG9mIFNwaW5Mb2NrIGFuZCBN
dXRleC4gRm9yIHNtYWxsIGNyaXRpY2FsCi0vLyBzZWN0aW9ucyAodGhhdCB0YWtlIG5hbm9zZWNv
bmRzKSwgaXQgd2lsbCB1c3VhbGx5IHBlcmZvcm0gd2l0aGluIDJ4IG9mIGEgU3BpbkxvY2sgaW4g
Ym90aCB0aGUKLS8vIGNvbnRlbmRlZCBhbmQgdW5jb250ZW5kZWQgY2FzZS4gV2hlbiB1c2luZyBh
IE11dGV4LCBzdWNoIGNyaXRpY2FsIHNlY3Rpb25zIHRha2UgdXAgdG8gMTAweCBsb25nZXIKLS8v
IHRoYW4gTG9jayBpbiB0aGUgY29udGVuZGVkIGNhc2UsIG9yIDN4IGxvbmdlciB0aGFuIExvY2sg
aW4gdGhlIHVuY29udGVuZGVkIGNhc2UuIEZvciBsb25nZXIKLS8vIGNyaXRpY2FsIHNlY3Rpb25z
ICh0aGF0IHRha2UgdGVucyBvZiBtaWNyb3NlY29uZHMpLCBpdCB3aWxsIHBlcmZvcm0gYXMgd2Vs
bCBhcyBhIE11dGV4IGFuZCBzbGlnaHRseQotLy8gYmV0dGVyIHRoYW4gYSBTcGluTG9jay4gQnV0
LCBjcnVjaWFsbHksIGEgU3BpbkxvY2sgd2lsbCBidXJuIHVwIHRvIDkweCBtb3JlIHRpbWUgaW4g
dGhlIGtlcm5lbCBmb3IKLS8vIHN1Y2ggY3JpdGljYWwgc2VjdGlvbnMgdGhhbiBlaXRoZXIgTG9j
ayBvciBNdXRleC4gSGVuY2UsIHVzaW5nIExvY2sgd2lsbCBtYWtlIHRoZSBjb21tb24gY2FzZSBv
ZgotLy8gbG9ja2luZyBwZXJmb3JtIGNsb3NlIHRvIFNwaW5Mb2NrIGZvciBhbnkgY3JpdGljYWwg
c2VjdGlvbiB0aGF0IGRvZXMgbW9yZSB0aGFuIGEgZmV3IG5hbm9zZWNvbmRzIG9mCi0vLyB3b3Jr
IHdoaWxlIGJlaW5nIGFzIGtpbmQgdG8gdGhlIHNjaGVkdWxlciBmb3IgbG9uZ2VyIGNyaXRpY2Fs
IHNlY3Rpb25zIGFzIGEgTXV0ZXguCi0vLwotLy8gTGlrZSBTcGluTG9jaywgTG9jayB0YWtlcyB2
ZXJ5IGxpdHRsZSBtZW1vcnkgLSBqdXN0IHNpemVvZih2b2lkKiksIHRob3VnaCBzZWUgYSBkZXRh
aWxlZCBjYXZlYXQKLS8vIGJlbG93LgotLy8KLS8vIEdlbmVyYWxseSwgeW91IHNob3VsZCB1c2Ug
TG9jayBpbnN0ZWFkIG9mIFNwaW5Mb2NrIGJlY2F1c2Ugd2hpbGUgaXQgcGVuYWxpemVzIHlvdSBz
bGlnaHRseSwgeW91Ci0vLyBtYWtlIHVwIGZvciBpdCBieSBub3Qgd2FzdGluZyBDUFUgY3ljbGVz
IGluIGNhc2Ugb2YgY29udGVudGlvbi4KLS8vCi0vLyBUaGUgTG9jayBoYXMgdGhlIGZvbGxvd2lu
ZyBuaWNlIHByb3BlcnRpZXM6Ci0vLwotLy8gLSBVbmNvbnRlbmRlZCBmYXN0IHBhdGhzIGZvciBs
b2NrIGFjcXVpc2l0aW9uIGFuZCBsb2NrIHJlbGVhc2UgdGhhdCBhcmUgYWxtb3N0IGFzIGZhc3Qg
YXMgdGhlCi0vLyAgIHVuY29udGVuZGVkIGZhc3QgcGF0aHMgb2YgYSBzcGlubG9jay4gVGhlIG9u
bHkgb3ZlcmhlYWQgaXMgdGhhdCB0aGUgc3BpbmxvY2sgd2lsbCBub3QgQ0FTIG9uCi0vLyAgIHJl
bGVhc2UsIHdoaWxlIExvY2sgd2lsbCBDQVMuIFRoaXMgb3ZlcmhlYWQgKmNhbiogc2xvdyB0aGlu
Z3MgZG93biBmb3IgZXh0cmVtZWx5IHNtYWxsIGNyaXRpY2FsCi0vLyAgIHNlY3Rpb25zIHRoYXQg
ZG8gbGl0dGxlIG9yIG5vdGhpbmcgLSBpdCBtYWtlcyB0aGVtIDJ4IHNsb3dlciBzaW5jZSBpbiB0
aGF0IGNhc2UsIENBUyBpcyB0aGUgbW9zdAotLy8gICBleHBlbnNpdmUgaW5zdHJ1Y3Rpb24gYW5k
IGhhdmluZyB0d28gb2YgdGhlbSBpcyB0d2ljZSBhcyBiYWQgYXMganVzdCBoYXZpbmcgb25lLiBI
b3dldmVyLCB0aGlzCi0vLyAgIGxvY2sgaW1wbGVtZW50YXRpb24gaXMgc3RpbGwgYWxtb3N0IDN4
IGZhc3RlciB0aGFuIGEgcGxhdGZvcm0gbXV0ZXggaW4gdGhvc2UgY2FzZXMuIEl0J3MgdW5saWtl
bHkKLS8vICAgdGhhdCB5b3UnbGwgZW5jb3VudGVyIG5vLW9wIGNyaXRpY2FsIHNlY3Rpb25zLCBz
byB1c3VhbGx5LCB0aGlzIGxvY2sgaXMgYmV0dGVyIHRoYW4gYSBzcGlubG9jay4KLS8vCi0vLyAt
IENvbnRlbmRlZCBmYXN0IHBhdGggdGhhdCBhdHRlbXB0cyB0byBzcGluIGFuZCB5aWVsZCBmb3Ig
c29tZSBudW1iZXIgb2YgdGltZXMuIEZvciBjcml0aWNhbAotLy8gICBzZWN0aW9ucyB0aGF0IGFy
ZSBoZWxkIG9ubHkgYnJpZWZseSwgdGhpcyBhbGxvd3MgTG9jayB0byBwZXJmb3JtIGFsbW9zdCBh
cyB3ZWxsIGFzIGEgU3BpbkxvY2suCi0vLyAgIFNwaW5Mb2NrIGNhbiBzdGlsbCBiZSBhbG1vc3Qg
MnggZmFzdGVyIHRoYW4gTG9jayBpZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBhIG5vLW9wLCBi
dXQgdGhpcwotLy8gICBhZHZhbnRhZ2UgZGltaW5pc2hlcyBhcyB0aGUgY3JpdGljYWwgc2VjdGlv
biBncm93cy4KLS8vCi0vLyAtIENvbnRlbmRlZCBzbG93IHBhdGggdGhhdCBlbnF1ZXVlcyB0aGUg
Y29udGVuZGluZyB0aHJlYWQgYW5kIGNhdXNlcyBpdCB0byB3YWl0IG9uIGEgY29uZGl0aW9uCi0v
LyAgIHZhcmlhYmxlIHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBUaGlzIGlzIHRoZSBvbmx5
IGNhc2UgaW4gd2hpY2ggc3lzdGVtIG11dGV4ZXMgYW5kIGNvbmRpdGlvbgotLy8gICB2YXJpYWJs
ZXMgYXJlIHVzZWQuIFRoaXMgY2FzZSBpcyByYXJlIGFuZCBzZWxmLWxpbWl0aW5nOiBpdCB3aWxs
IG9ubHkgaGFwcGVuIHdoZW4gYSBsb2NrIGlzIGhlbGQKLS8vICAgZm9yIGxvbmcgZW5vdWdoIHRo
YXQgc3Bpbm5pbmcgc29tZSBudW1iZXIgb2YgdGltZXMgZG9lc24ndCBhY3F1aXJlIGl0LiBUaGUg
ZmFjdCB0aGF0IExvY2sgZG9lcwotLy8gICB0aGlzIGFzIGEgZmFsbGJhY2sgd2hlbiBzcGlubmlu
ZyBmb3Igc29tZSBudW1iZXIgb2YgdGltZXMgZmFpbHMgbWVhbnMgdGhhdCBpdCB3aWxsIGJ1cm4K
LS8vICAgZHJhbWF0aWNhbGx5IGZld2VyIENQVSBjeWNsZXMgLSBmb3IgZXhhbXBsZSB3aXRoIDEw
IHRocmVhZHMgb24gYW4gOCBsb2dpY2FsIENQVSBtYWNoaW5lIGFjcXVpcmluZwotLy8gICBhIGNy
aXRpY2FsIHNlY3Rpb24gdGhhdCB0YWtlcyA1MCBtaWNyb3NlY29uZHMsIHRoZSBXVEYgU3Bpbkxv
Y2sgd2lsbCBjYXVzZSA5MHggbW9yZSB0aW1lIHRvIGJlCi0vLyAgIHNwZW50IGluIHRoZSBrZXJu
ZWwgdGhhbiBMb2NrLgotLy8KLS8vIC0gVmVyeSBsb3cgbWVtb3J5IHVzYWdlLiBFYWNoIExvY2sg
cmVxdWlyZXMgb25seSBzaXplb2Yodm9pZCopIG1lbW9yeS4gV2hlbiB0aGUgY29udGVuZGVkIHNs
b3cKLS8vICAgcGF0aCBpcyBhY3RpdmF0ZWQsIExvY2sgb25seSByZWxpZXMgb24gZWFjaCB0aHJl
YWQgaGF2aW5nIGEgcHJlYWxsb2NhdGVkIHRocmVhZC1zcGVjaWZpYyBkYXRhCi0vLyAgIHN0cnVj
dHVyZSBjYWxsZWQgVGhyZWFkRGF0YSB0aGF0LCB0b2dldGhlciB3aXRoIHRoZSBMb2NrIGl0c2Vs
ZiwgaXMgdXNlZCB0byBidWlsZCB1cCBhIHRocmVhZAotLy8gICBxdWV1ZS4gU28sIHRoZSB0b3Rh
bCBtZW1vcnkgdXNhZ2Ugb2YgYWxsIExvY2tzIGlzIHN0aWxsIGJvdW5kZWQgYnk6Ci0vLwotLy8g
ICAgICAgbnVtYmVyT2ZMb2NrcyAqIHNpemVvZih2b2lkKikgKyBudW1iZXJPZlRocmVhZHMgKiBz
aXplb2YoVGhyZWFkRGF0YSkKLS8vCi0vLyAgIFdoZXJlIFRocmVhZERhdGEgaXMgYSBkZWNlbnRs
eSBsYXJnZSBkYXRhIHN0cnVjdHVyZSwgYnV0IHdlIHdpbGwgb25seSBldmVyIGhhdmUgb25lIHBl
ciB0aHJlYWQsCi0vLyAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBMb2NrcyBpbiBtZW1v
cnkuIEFub3RoZXIgd2F5IHRvIHZpZXcgdGhpcyBpcyB0aGF0IHRoZSB3b3JzdCBjYXNlCi0vLyAg
IG1lbW9yeSB1c2FnZSBwZXIgTG9jayBpczoKLS8vCi0vLyAgICAgICBzaXplb2Yodm9pZCopICsg
bnVtYmVyT2ZUaHJlYWRzIC8gbnVtYmVyT2ZMb2NrcyAqIHNpemVvZihUaHJlYWREYXRhKQotLy8K
LS8vICAgU28sIHVubGVzcyB5b3UgaGF2ZSBhIHNtYWxsIG51bWJlciBvZiBMb2NrcyAob3IsIGEg
bGFyZ2UgbnVtYmVyIG9mIHRocmVhZHMsIHdoaWNoIGlzIGZhciBsZXNzCi0vLyAgIGxpa2VseSks
IHRoZSBtZW1vcnkgdXNhZ2UgcGVyLUxvY2sgaXMgc3RpbGwgZ29pbmcgdG8gYmUgc29tZXdoZXJl
IGFyb3VuZCBzaXplb2Yodm9pZCopLgotLy8KLS8vIC0gQmFyZ2luZyBmYXN0IHBhdGhzLiBUaGUg
TG9jayBpcyB0dW5lZCBmb3IgbWF4aW11bSB0aHJvdWdocHV0IHJhdGhlciB0aGFuIG1heGltdW0g
ZmFpcm5lc3MuIElmCi0vLyAgIGEgdGhyZWFkIHJlbGVhc2VzIGEgTG9jayB0aGF0IHdhcyBjb250
ZW5kZWQgYW5kIGhhZCBhIHF1ZXVlIG9mIHdhaXRpbmcgdGhyZWFkcywgdGhlbiBpdCB3aWxsCi0v
LyAgIHdha2UgdXAgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLCBidXQgaXQgd2lsbCBhbHNvIG1hcmsg
dGhlIGxvY2sgYXMgYmVpbmcgYXZhaWxhYmxlLiBUaGlzIG1lYW5zIHRoYXQKLS8vICAgc29tZSBv
dGhlciB0aHJlYWQgdGhhdCBpcyBqdXN0IG5vdyBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdGhlIGxv
Y2sgbWF5IGdldCBpdCBiZWZvcmUgdGhlIHRocmVhZAotLy8gICB0aGF0IGdvdCB3b2tlbiB1cC4g
V2hlbiBhIHRocmVhZCBiYXJnZXMgaW50byB0aGUgbG9jaywgdGhlIHRocmVhZCB0aGF0IGdvdCB3
b2tlbiB1cCB3aWxsIHNpbXBseQotLy8gICBnbyBiYWNrIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVl
LiBUaGUgYmFyZ2luZyBiZWhhdmlvciBlbmRzIHVwIGJlaW5nIHByb2JhYmlsaXN0aWMgb24gbW9z
dAotLy8gICBwbGF0Zm9ybXMgYW5kIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSB1bmZhaXIgdG8gc29t
ZSB0aHJlYWQgYXQgc29tZSBtb21lbnQgaW4gdGltZSwgaXQgd2lsbCByYXJlbHkKLS8vICAgaGF2
ZSBhIGxvbmcgc3RyZWFrIG9mIHVuZmFpcm5lc3MgdG93YXJkcyBhbnkgcGFydGljdWxhciB0aHJl
YWQ6IGV2ZW50dWFsbHkgZWFjaCB0aHJlYWQgd2FpdGluZyBvbgotLy8gICB0aGUgbG9jayB3aWxs
IGdldCB0byBoYXZlIGEgdHVybiBzbyBsb25nIGFzIG5vIHRocmVhZCBqdXN0IGhvbGRzIHRoZSBs
b2NrIGZvcmV2ZXIuIFRoYXQgc2FpZCwKLS8vICAgdGhlcmUgKmlzKiBhIGNoYW5jZSBvZiBwYXRo
b2xvZ2llcyAtIHVzZXJzIG9mIExvY2sgc2hvdWxkIG5vdCBkZXBlbmQgb24gZmlyc3QtaW4sIGZp
cnN0LW91dCBsb2NrCi0vLyAgIGFjcXVpc2l0aW9uIG9yZGVyIHVuZGVyIGNvbnRlbnRpb24uIFRo
ZSBzYW1lIGNhdmVhdCBpcyBnZW5lcmFsbHkgdHJ1ZSBvZiBTcGluTG9jayBhbmQgcGxhdGZvcm0K
LS8vICAgbXV0ZXhlcyBvbiBzb21lIHBsYXRmb3Jtcy4KLQotLy8gRklYTUU6IFdlIGNvdWxkIG1h
a2UgdGhpcyBMb2NrIG1vcmUgZWZmaWNpZW50IGJ5IHVzaW5nIFBhcmtpbmdMb3QgYW5kIGF0b21p
YyBhZGQgaW5zdGVhZCBvZiBDQVMuCi0vLyBUaGUgbG9jayB3b3VsZCBiZSBhdmFpbGFibGUgaWYg
dGhlIDMyLWJpdCBsb2NrIHdvcmQgPD0gMS4gTG9ja2luZyB3b3VsZCBhdG9taWNhbGx5IGFkZCAy
IHRvIHRoZQotLy8gd29yZC4gVGhlIGxvY2sgd291bGQgYmUga25vd24gdG8gYmUgaGVsZCBpZiB0
aGUgb2xkIHZhbHVlIG9mIHRoZSB3b3JkIHdhcyA8PSAxLiBUaGUgbG93IGJpdAotLy8ganVzdCBp
bmRpY2F0ZXMgaWYgYW55b25lIGlzIHdhaXRpbmcuIElmIHRoZSB3b3JkIHdhcyA+PSAyIGFmdGVy
IHRoZSBhdG9taWMgYWRkLCB3ZSB3b3VsZCBnbyB0byBhCi0vLyBzbG93IHBhdGggdGhhdCByZXBl
YXRlZGx5IGF0dGVtcHRzIHRvIHNldCB0aGUgbG9jayB3b3JkIHRvIDMgW3NpY10gZnJvbSAwIG9y
IDEsIGFuZCBwYXJrcyBpZiB0aGF0J3MKLS8vIG5vdCBwb3NzaWJsZS4gVGhlIHNsb3cgcGF0aCBj
b3VsZCBhbHNvIHBlcmZvcm0gZGVmZW5zaXZlIGZpeHVwIHRoYXQgZHJvcHMgdGhlIGxvY2sgdmFs
dWUgZG93biB0bwotLy8gMyBpZiBpdCB3YXMgZ3JlYXRlciB0aGFuIDMsIGFueXRpbWUgdGhhdCBp
dCBuZWVkZWQgdG8gZ28gdG8gcGFyay4gVGhlIHVubG9jayBmYXN0IHBhdGggd291bGQKLS8vIGF0
b21pY2FsbHkgc3VidHJhY3QgMi4gSWYgdGhlIGRlY3JlbWVudCBvcGVyYXRpb24gZG9lcyBub3Qg
Y2F1c2UgdGhlIGNvdW50IHRvIHplcm8sIGl0IHdvdWxkIGdvIHRvCi0vLyBhIHNsb3cgcGF0aC4g
VGhlIHNsb3cgcGF0aCB3b3VsZCB1bnBhcmsgb25lLiBJZiB1bnBhcmtpbmcgcmV0dXJucyBmYWxz
ZSwgdGhlIHNsb3cgcGF0aCB3b3VsZAotLy8gYXR0ZW1wdCBhIHN0cm9uZyBDQVMgZnJvbSAxIHRv
IDAuIEl0IHdvdWxkbid0IGRvIGFueXRoaW5nIGlmIHRoZSBDQVMgZmFpbHMsIHNpbmNlIHRoZSBv
bmx5IGdvYWwgb2YKLS8vIHRoYXQgQ0FTIGlzIHRvIHRlbGwgZnV0dXJlIHVubG9jayBmYXN0IHBh
dGhzIHRoYXQgdGhlcmUgaXMgcG9zc2libHkgYSB0aHJlYWQgcGFya2VkLiBBcyBzdWNoIHRoZQot
Ly8gc3RhdGVzIG9mIHRoZSBsb2NrIGFyZToKLS8vCi0vLyAgIDA6IGxvY2sgYXZhaWxhYmxlIGFu
ZCBub2JvZHkgd2FpdGluZwotLy8gICAxOiBsb2NrIGF2YWlsYWJsZSBhbmQgdGhlcmUgbWF5IGJl
IHRocmVhZHMgd2FpdGluZwotLy8gICAyOiBsb2NrIHRha2VuIGFuZCBubyB0aHJlYWRzIHdhaXRp
bmcKLS8vID49MzogbG9jayB0YWtlbiBhbmQgdGhyZWFkcyB3YWl0aW5nCi0vLwotLy8gSXQgbWF5
IGJlIHBvc3NpYmxlIHRvIGRlc2lnbiBhbiBldmVuIGJldHRlciBsb2NrIGltcGxlbWVudGF0aW9u
IGJhc2VkIG9uIGF0b21pYyBpbmNyZW1lbnRzIHJhdGhlcgotLy8gdGhhbiBhdG9taWMgKz0yLy09
Mi4KLS8vCi0vLyBOb3RlIHRoYXQgYmVjYXVzZSBQYXJraW5nTG90IHVzZXMgdGhpcyBsb2NrIGlu
dGVybmFsbHksIHdlIHdvdWxkIHByb2JhYmx5IHJlbmFtZSB0aGlzIGxvY2sKLS8vIGltcGxlbWVu
dGF0aW9uIHRvIHNvbWV0aGluZyBsaWtlIEJvb3RzdHJhcExvY2sgb3IgZXZlbiBtYWtlIGl0IHBh
cnQgb2YgYW4gYW5vbnltb3VzIG5hbWVzcGFjZQotLy8gaW5zaWRlIFBhcmtpbmdMb3QuCi0vLwot
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Nzg0MQorLy8gVGhp
cyBpcyBhIGZ1bGx5IGFkYXB0aXZlIG11dGV4IHRoYXQgb25seSByZXF1aXJlcyAxIGJ5dGUgb2Yg
c3RvcmFnZS4gSXQgaGFzIGZhc3QgcGF0aHMgdGhhdCBhcmUKKy8vIGNvbXBldGV0aXZlIHRvIFNw
aW5Mb2NrICh1bmNvbnRlbmRlZCBsb2NraW5nIGlzIGlubGluZWQgYW5kIGlzIGp1c3QgYSBDQVMs
IG1pY3JvY29udGVudGlvbiBpcworLy8gaGFuZGxlZCBieSBzcGlubmluZyBhbmQgeWllbGRpbmcp
LCBhbmQgYSBzbG93IHBhdGggdGhhdCBpcyBjb21wZXRldGl2ZSB0byBNdXRleCAoaWYgYSBsb2Nr
IGNhbm5vdAorLy8gYmUgYWNxdWlyZWQgaW4gYSBzaG9ydCBwZXJpb2Qgb2YgdGltZSwgdGhlIHRo
cmVhZCBpcyBwdXQgdG8gc2xlZXAgdW50aWwgdGhlIGxvY2sgaXMgYXZhaWxhYmxlCisvLyBhZ2Fp
bikuIEl0IHVzZXMgbGVzcyBtZW1vcnkgdGhhbiBlaXRoZXIgU3BpbkxvY2sgb3IgTXV0ZXguCiAK
IC8vIFRoaXMgaXMgYSBzdHJ1Y3Qgd2l0aG91dCBhIGNvbnN0cnVjdG9yIG9yIGRlc3RydWN0b3Ig
c28gdGhhdCBpdCBjYW4gYmUgc3RhdGljYWxseSBpbml0aWFsaXplZC4KIC8vIFVzZSBMb2NrIGlu
IGluc3RhbmNlIHZhcmlhYmxlcy4KIHN0cnVjdCBMb2NrQmFzZSB7CiAgICAgdm9pZCBsb2NrKCkK
ICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoMCwg
aXNMb2NrZWRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgeworICAgICAgICBpZiAo
TElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSkpKSB7CiAgICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNDQsOCArNTQsOCBAQCBzdHJ1Y3QgTG9j
a0Jhc2UgewogCiAgICAgdm9pZCB1bmxvY2soKQogICAgIHsKLSAgICAgICAgaWYgKExJS0VMWSht
X3dvcmQuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0xvY2tlZEJpdCwgMCwgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsZWFzZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2VkLCBhbmQgbm9ib2R5
IHdhcyB3YWl0aW5nIQorICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VX
ZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7CisgICAgICAg
ICAgICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTU0LDcgKzY0LDcgQEAgc3RydWN0IExvY2tCYXNl
IHsKIAogICAgIGJvb2wgaXNIZWxkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3dv
cmQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzTG9ja2VkQml0OworICAgICAg
ICByZXR1cm4gbV9ieXRlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRC
aXQ7CiAgICAgfQogCiAgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CkBAIC0xNjMsMTQgKzczLDEz
IEBAIHN0cnVjdCBMb2NrQmFzZSB7CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNv
bnN0IHVpbnRwdHJfdCBpc0xvY2tlZEJpdCA9IDE7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJf
dCBpc1F1ZXVlTG9ja2VkQml0ID0gMjsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHF1ZXVl
SGVhZE1hc2sgPSAzOworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGlzSGVsZEJpdCA9IDE7Cisg
ICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaGFzUGFya2VkQml0ID0gMjsKIAogICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGxvY2tTbG93KCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
dW5sb2NrU2xvdygpOwogCi0gICAgQXRvbWljPHVpbnRwdHJfdD4gbV93b3JkOworICAgIEF0b21p
Yzx1aW50OF90PiBtX2J5dGU7CiB9OwogCiBjbGFzcyBMb2NrIDogcHVibGljIExvY2tCYXNlIHsK
QEAgLTE3OCw3ICs4Nyw3IEBAIGNsYXNzIExvY2sgOiBwdWJsaWMgTG9ja0Jhc2UgewogcHVibGlj
OgogICAgIExvY2soKQogICAgIHsKLSAgICAgICAgbV93b3JkLnN0b3JlKDAsIHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGF4ZWQpOworICAgICAgICBtX2J5dGUuc3RvcmUoMCwgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsYXhlZCk7CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL1dURi93dGYvUGFya2luZ0xv
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAJKHJldmlz
aW9uIDE4ODI5MikKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGFy
a2luZ0xvdC5oIgogCisjaW5jbHVkZSAiQmFzaWNMb2NrLmgiCiAjaW5jbHVkZSAiRGF0YUxvZy5o
IgogI2luY2x1ZGUgIkhhc2hGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJMb2NrLmgiCiAjaW5jbHVk
ZSAiU3RyaW5nUHJpbnRTdHJlYW0uaCIKICNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgogI2lu
Y2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKQEAgLTE3MCw3ICsxNzAsNyBAQCBwdWJsaWM6
CiAKICAgICAvLyBUaGlzIGxvY2sgcHJvdGVjdHMgdGhlIGVudGlyZSBidWNrZXQuIFRob3Ugc2hh
bGwgbm90IG1ha2UgY2hhbmdlcyB0byBCdWNrZXQgd2l0aG91dCBob2xkaW5nCiAgICAgLy8gdGhp
cyBsb2NrLgotICAgIExvY2sgbG9jazsKKyAgICBCYXNpY0xvY2sgbG9jazsKIAogICAgIC8vIFB1
dCBzb21lIGRpc3RhbmUgYmV0d2VlbiBidWNrZXRzIGluIG1lbW9yeS4gVGhpcyBpcyBvbmUgb2Yg
c2V2ZXJhbCBtaXRpZ2F0aW9ucyBhZ2FpbnN0IGZhbHNlCiAgICAgLy8gc2hhcmluZy4KSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCShyZXZpc2lvbiAxODgyOTIpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDx3
dGYvQnl0ZUxvY2suaD4KKyNpbmNsdWRlIDx3dGYvQmFzaWNMb2NrLmg+CiAjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZ1ByaW1pdGl2ZXMuaD4KQEAgLTY4LDY5ICs2OCw2OSBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVu
c2lnbmVkIG51bVRocmVhZEdyb3VwCiAgICAgICAgIEVYUEVDVF9FUShleHBlY3RlZCwgd29yZHNb
dGhyZWFkR3JvdXBJbmRleF0pOwogfQogCi1URVNUKFdURl9Mb2NrLCBVbmNvbnRlbnRlZFNob3J0
U2VjdGlvbikKK1RFU1QoV1RGX0Jhc2ljTG9jaywgVW5jb250ZW50ZWRTaG9ydFNlY3Rpb24pCiB7
Ci0gICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMSwgMSwgMSwgMTAwMDAwMDApOworICAgIHJ1bkxvY2tU
ZXN0PEJhc2ljTG9jaz4oMSwgMSwgMSwgMTAwMDAwMDApOwogfQogCi1URVNUKFdURl9Mb2NrLCBV
bmNvbnRlbnRlZExvbmdTZWN0aW9uKQorVEVTVChXVEZfQmFzaWNMb2NrLCBVbmNvbnRlbnRlZExv
bmdTZWN0aW9uKQogewotICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEsIDEwMDAwLCAxMDAwKTsK
KyAgICBydW5Mb2NrVGVzdDxCYXNpY0xvY2s+KDEsIDEsIDEwMDAwLCAxMDAwKTsKIH0KIAotVEVT
VChXVEZfTG9jaywgQ29udGVudGVkU2hvcnRTZWN0aW9uKQorVEVTVChXVEZfQmFzaWNMb2NrLCBD
b250ZW50ZWRTaG9ydFNlY3Rpb24pCiB7Ci0gICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMSwgMTAsIDEs
IDEwMDAwMDAwKTsKKyAgICBydW5Mb2NrVGVzdDxCYXNpY0xvY2s+KDEsIDEwLCAxLCAxMDAwMDAw
MCk7CiB9CiAKLVRFU1QoV1RGX0xvY2ssIENvbnRlbnRlZExvbmdTZWN0aW9uKQorVEVTVChXVEZf
QmFzaWNMb2NrLCBDb250ZW50ZWRMb25nU2VjdGlvbikKIHsKLSAgICBydW5Mb2NrVGVzdDxMb2Nr
PigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKKyAgICBydW5Mb2NrVGVzdDxCYXNpY0xvY2s+KDEsIDEw
LCAxMDAwMCwgMTAwMDApOwogfQogCi1URVNUKFdURl9Mb2NrLCBNYW55Q29udGVudGVkU2hvcnRT
ZWN0aW9ucykKK1RFU1QoV1RGX0Jhc2ljTG9jaywgTWFueUNvbnRlbnRlZFNob3J0U2VjdGlvbnMp
CiB7Ci0gICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMTAsIDEwLCAxLCA1MDAwMDApOworICAgIHJ1bkxv
Y2tUZXN0PEJhc2ljTG9jaz4oMTAsIDEwLCAxLCA1MDAwMDApOwogfQogCi1URVNUKFdURl9Mb2Nr
LCBNYW55Q29udGVudGVkTG9uZ1NlY3Rpb25zKQorVEVTVChXVEZfQmFzaWNMb2NrLCBNYW55Q29u
dGVudGVkTG9uZ1NlY3Rpb25zKQogewotICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwgMTAw
MDAsIDEwMDApOworICAgIHJ1bkxvY2tUZXN0PEJhc2ljTG9jaz4oMTAsIDEwLCAxMDAwMCwgMTAw
MCk7CiB9CiAKLVRFU1QoV1RGX0J5dGVMb2NrLCBVbmNvbnRlbnRlZFNob3J0U2VjdGlvbikKK1RF
U1QoV1RGX0xvY2ssIFVuY29udGVudGVkU2hvcnRTZWN0aW9uKQogewotICAgIHJ1bkxvY2tUZXN0
PEJ5dGVMb2NrPigxLCAxLCAxLCAxMDAwMDAwMCk7CisgICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMSwg
MSwgMSwgMTAwMDAwMDApOwogfQogCi1URVNUKFdURl9CeXRlTG9jaywgVW5jb250ZW50ZWRMb25n
U2VjdGlvbikKK1RFU1QoV1RGX0xvY2ssIFVuY29udGVudGVkTG9uZ1NlY3Rpb24pCiB7Ci0gICAg
cnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEsIDEsIDEwMDAwLCAxMDAwKTsKKyAgICBydW5Mb2NrVGVz
dDxMb2NrPigxLCAxLCAxMDAwMCwgMTAwMCk7CiB9CiAKLVRFU1QoV1RGX0J5dGVMb2NrLCBDb250
ZW50ZWRTaG9ydFNlY3Rpb24pCitURVNUKFdURl9Mb2NrLCBDb250ZW50ZWRTaG9ydFNlY3Rpb24p
CiB7Ci0gICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEsIDEwLCAxLCAxMDAwMDAwMCk7CisgICAg
cnVuTG9ja1Rlc3Q8TG9jaz4oMSwgMTAsIDEsIDEwMDAwMDAwKTsKIH0KIAotVEVTVChXVEZfQnl0
ZUxvY2ssIENvbnRlbnRlZExvbmdTZWN0aW9uKQorVEVTVChXVEZfTG9jaywgQ29udGVudGVkTG9u
Z1NlY3Rpb24pCiB7Ci0gICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEsIDEwLCAxMDAwMCwgMTAw
MDApOworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEwLCAxMDAwMCwgMTAwMDApOwogfQogCi1U
RVNUKFdURl9CeXRlTG9jaywgTWFueUNvbnRlbnRlZFNob3J0U2VjdGlvbnMpCitURVNUKFdURl9M
b2NrLCBNYW55Q29udGVudGVkU2hvcnRTZWN0aW9ucykKIHsKLSAgICBydW5Mb2NrVGVzdDxCeXRl
TG9jaz4oMTAsIDEwLCAxLCA1MDAwMDApOworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwg
MSwgNTAwMDAwKTsKIH0KIAotVEVTVChXVEZfQnl0ZUxvY2ssIE1hbnlDb250ZW50ZWRMb25nU2Vj
dGlvbnMpCitURVNUKFdURl9Mb2NrLCBNYW55Q29udGVudGVkTG9uZ1NlY3Rpb25zKQogewotICAg
IHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxMCwgMTAsIDEwMDAwLCAxMDAwKTsKKyAgICBydW5Mb2Nr
VGVzdDxMb2NrPigxMCwgMTAsIDEwMDAwLCAxMDAwKTsKIH0KIAotVEVTVChXVEZfQnl0ZUxvY2ss
IFNlY3Rpb25BZGRyZXNzQ29sbGlzaW9uKQorVEVTVChXVEZfTG9jaywgU2VjdGlvbkFkZHJlc3ND
b2xsaXNpb24pCiB7Ci0gICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDQsIDIsIDEwMDAwLCAyMDAw
KTsKKyAgICBydW5Mb2NrVGVzdDxMb2NrPig0LCAyLCAxMDAwMCwgMjAwMCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258776</attachid>
            <date>2015-08-11 16:22:58 -0700</date>
            <delta_ts>2015-08-11 16:33:40 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>65941</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MzA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDE1LTA4LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWx3YXlzIHVzZSBhIGJ5dGUtc2l6ZWQgbG9jayBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3OTA4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0NvbmN1cnJlbnRK
SVRMb2NrLmg6IExvY2sgaXMgbm93IGJ5dGUtc2l6ZWQgYW5kIEJ5dGVMb2NrIGlzIGdvbmUsIHNv
IHVzZSBMb2NrLgorCiAyMDE1LTA4LTExICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBnZXRfYnlfaWQgbGlrZSBJQyBpbnRvIGdldF9i
eV92YWwgd2hlbiB0aGUgZ2l2ZW4gbmFtZSBpcyBTdHJpbmcgb3IgU3ltYm9sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgJKHJl
dmlzaW9uIDE4ODMwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJl
bnRKSVRMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE0ICsyNywxNCBAQAogI2RlZmluZSBD
b25jdXJyZW50SklUTG9ja19oCiAKICNpbmNsdWRlICJEZWZlckdDLmgiCi0jaW5jbHVkZSA8d3Rm
L0J5dGVMb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9Mb2Nr
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQotdHlw
ZWRlZiBCeXRlTG9jayBDb25jdXJyZW50SklUTG9jazsKLXR5cGVkZWYgQnl0ZUxvY2tlciBDb25j
dXJyZW50SklUTG9ja2VySW1wbDsKK3R5cGVkZWYgTG9jayBDb25jdXJyZW50SklUTG9jazsKK3R5
cGVkZWYgTG9ja0hvbGRlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKICNlbHNlCiB0eXBlZGVm
IE5vTG9jayBDb25jdXJyZW50SklUTG9jazsKIHR5cGVkZWYgTm9Mb2NrTG9ja2VyIENvbmN1cnJl
bnRKSVRMb2NrZXJJbXBsOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODMwNykKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTUtMDgtMTEgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBBbHdheXMgdXNlIGEgYnl0
ZS1zaXplZCBsb2NrIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc5MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBdCB0aGUgc3RhcnQgb2YgbXkgbG9ja2luZyBhbGdvcml0aG0g
Y3J1c2FkZSwgSSBpbXBsZW1lbnRlZCBMb2NrLCB3aGljaCBpcyBhIHNpemVvZih2b2lkKikKKyAg
ICAgICAgbG9jayBpbXBsZW1lbnRhdGlvbiB3aXRoIHNvbWUgbmljZSB0aGVvcmV0aWNhbCBwcm9w
ZXJ0aWVzIGFuZCBnb29kIHBlcmZvcm1hbmNlLiBUaGVuIEkgYWRkZWQKKyAgICAgICAgdGhlIFBh
cmtpbmdMb3QgYWJzdHJhY3Rpb24gYW5kIEJ5dGVMb2NrLiBQYXJraW5nTG90IHVzZXMgTG9jayBp
biBpdHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgIEJ5dGVMb2NrIHVzZXMgUGFya2luZ0xvdCB0
byBjcmVhdGUgYSBzaXplb2YoY2hhcikgbG9jayBpbXBsZW1lbnRhdGlvbiB0aGF0IHBlcmZvcm1z
IGxpa2UKKyAgICAgICAgTG9jay4KKworICAgICAgICBJdCB0dXJucyBvdXQgdGhhdCBCeXRlTG9j
ayBpcyBhbHdheXMgYXQgbGVhc3QgYXMgZ29vZCBhcyBMb2NrLCBhbmQgc29tZXRpbWVzIGEgbG90
IGJldHRlcjoKKyAgICAgICAgaXQgcmVxdWlyZXMgOHggbGVzcyBtZW1vcnkgb24gNjQtYml0IHN5
c3RlbXMuIEl0J3MgaGFyZCB0byBjb25zdHJ1Y3QgYSBiZW5jaG1hcmsgd2hlcmUKKyAgICAgICAg
Qnl0ZUxvY2sgaXMgc2lnbmlmaWNhbnRseSBzbG93ZXIgdGhhbiBMb2NrLCBhbmQgd2hlbiB5b3Ug
ZG8gY29uc3RydWN0IHN1Y2ggYSBiZW5jaG1hcmssCisgICAgICAgIHR3ZWFraW5nIGl0IGEgYml0
IGNhbiBhbHNvIGNyZWF0ZSBhIHNjZW5hcmlvIHdoZXJlIEJ5dGVMb2NrIGlzIHNpZ25pZmljYW50
bHkgZmFzdGVyIHRoYW4KKyAgICAgICAgTG9jay4KKworICAgICAgICBTbywgdGhlIHRoaW5nIHRo
YXQgd2UgY2FsbCAiTG9jayIgc2hvdWxkIHJlYWxseSB1c2UgQnl0ZUxvY2sncyBhbGdvcml0aG0s
IHNpbmNlIGl0IGlzIG1vcmUKKyAgICAgICAgY29tcGFjdCBhbmQganVzdCBhcyBmYXN0LiBUaGF0
J3Mgd2hhdCB0aGlzIHBhdGNoIGRvZXMuCisKKyAgICAgICAgQnV0IHdlIHN0aWxsIG5lZWQgdG8g
a2VlcCB0aGUgb2xkIExvY2sgYWxnb3JpdGhtLCBiZWNhdXNlIGl0J3MgdXNlZCB0byBpbXBsZW1l
bnQgUGFya2luZ0xvdCwKKyAgICAgICAgd2hpY2ggaW4gdHVybiBpcyB1c2VkIHRvIGltcGxlbWVu
dCBCeXRlTG9jay4gU28gdGhpcyBwYXRjaCBkb2VzIHRoaXMgdHJhbnNmb3JtYXRpb246CisKKyAg
ICAgICAgLSBNb3ZlIHRoZSBhbGdvcml0aG0gaW4gTG9jayBpbnRvIGZpbGVzIGNhbGxlZCBCYXNp
Y0xvY2suaHxjcHAuIE1ha2UgUGFya2luZ0xvdCB1c2UKKyAgICAgICAgICBCYXNpY0xvY2suCisK
KyAgICAgICAgLSBNb3ZlIHRoZSBhbGdvcml0aG0gaW4gQnl0ZUxvY2sgaW50byBMb2NrLmh8Y3Bw
LiBNYWtlIGV2ZXJ5b25lIHdobyB1c2VkIEJ5dGVMb2NrIHVzZSBMb2NrCisgICAgICAgICAgaW5z
dGVhZC4gQWxsIG90aGVyIHVzZXJzIG9mIExvY2sgbm93IGdldCB0aGUgYnl0ZS1zaXplZCBsb2Nr
IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIC0gUmVtb3ZlIHRoZSBvbGQgQnl0ZUxvY2sgZmls
ZXMuCisKKyAgICAgICAgKiBXVEYudmN4cHJvai9XVEYudmN4cHJvajoKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tTcGVl
ZFRlc3QuY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd3RmL0Jhc2ljTG9jay5jcHA6
IEFkZGVkLgorICAgICAgICAoV1RGOjpCYXNpY0xvY2s6OmxvY2tTbG93KToKKyAgICAgICAgKFdU
Rjo6QmFzaWNMb2NrOjp1bmxvY2tTbG93KToKKyAgICAgICAgKiB3dGYvQmFzaWNMb2NrLmg6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpCYXNpY0xvY2s6OkJhc2ljTG9jayk6CisgICAgICAgIChXVEY6
OkJhc2ljTG9jazo6bG9jayk6CisgICAgICAgIChXVEY6OkJhc2ljTG9jazo6dW5sb2NrKToKKyAg
ICAgICAgKFdURjo6QmFzaWNMb2NrOjppc0hlbGQpOgorICAgICAgICAoV1RGOjpCYXNpY0xvY2s6
OmlzTG9ja2VkKToKKyAgICAgICAgKiB3dGYvQnl0ZUxvY2suY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHd0Zi9CeXRlTG9jay5oOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2Nr
U2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1bmxvY2tTbG93KToKKyAgICAgICAgKiB3
dGYvTG9jay5oOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6bG9jayk6CisgICAgICAgIChXVEY6
OkxvY2tCYXNlOjp1bmxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6aXNIZWxkKToKKyAg
ICAgICAgKFdURjo6TG9ja0Jhc2U6OmlzTG9ja2VkKToKKyAgICAgICAgKFdURjo6TG9jazo6TG9j
ayk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuY3BwOgorCiAyMDE1LTA4LTExICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIEJ5dGVTcGluTG9jawpJ
bmRleDogU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCShyZXZpc2lvbiAxODgzMDcpCisrKyBT
b3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQg
KzEsNCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzw/eG1s
IHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8UHJvamVjdCBEZWZhdWx0VGFyZ2V0
cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jv
c29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVtR3JvdXAgTGFiZWw9IlBy
b2plY3RDb25maWd1cmF0aW9ucyI+CiAgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9
IkRlYnVnU3VmZml4fFdpbjMyIj4KQEAgLTUyLDggKzUyLDggQEAKICAgPC9JdGVtR3JvdXA+CiAg
IDxJdGVtR3JvdXA+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcQXNzZXJ0aW9ucy5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcQmFzaWNMb2NrLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxCaXRWZWN0b3IuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEJ5dGVMb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHd0ZlxDb21waWxhdGlvblRocmVhZC5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlx3dGZcQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3Bw
IiAvPgpAQCAtMTY4LDEyICsxNjgsMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0
ZlxBdXRvZHJhaW5lZFBvb2wuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxC
YWcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCYWdUb0hhc2hNYXAuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCYXNpY0xvY2suaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCaXRtYXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxCaXRWZWN0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHd0ZlxCbG9ja1N0YWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQmxv
b21GaWx0ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCdW1wUG9pbnRl
ckFsbG9jYXRvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEJ5dGVMb2Nr
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQ2hlY2tlZEFyaXRobWV0aWMu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxDaGVja2VkQm9vbGVhbi5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXENvbXBpbGVyLmgiIC8+CkluZGV4OiBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4ODMwNykK
KysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDggKzI0LDYgQEAKIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1
QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZC
MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyog
RmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07Ci0JCTBGODI0
QTY2MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0
ZUxvY2suY3BwICovOyB9OwotCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTYz
MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovOyB9OwogCQkwRjgyNEE2ODFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5j
cHAgKi87IH07CiAJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NTFCNzQ0
M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5
MEIwQUQgLyogUmF3UG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsg
fTsKQEAgLTQ2LDYgKzQ0LDggQEAKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLzsg
fTsKIAkJMEZFMTY0NkExQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMTY0NjgxQjZGRkM5NjAwNDAwRTdD
IC8qIExvY2suY3BwICovOyB9OwogCQkwRkUxNjQ2QjFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMTY0Njkx
QjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAqLzsgfTsKKwkJMEZFNDQ3OUMxQjdBQUEwMzAwOTQ5
OEVCIC8qIEJhc2ljTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogQmFzaWNMb2NrLmNwcCAqLzsg
fTsKKwkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIEJhc2ljTG9jay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5
OEVCIC8qIEJhc2ljTG9jay5oICovOyB9OwogCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyog
VGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLzsgfTsKIAkJMTQw
MjJGNDExOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSBpbiBGcmFtZXdvcmtzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDIyRjQwMThGNUMzRkMwMDdGRjBFQiAv
KiBsaWJibWFsbG9jLmEgKi87IH07CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1T
aXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsKQEAgLTMxMSw4ICsz
MTEsNiBAQAogCQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50
ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjgyNEE2MjFC
NzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQnl0ZUxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnl0ZUxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmtpbmdMb3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzMzLDYgKzMzMSw4IEBACiAJCTBGRERCRkE2MTY2NkRG
QTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFMTY0NjkxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogQmFzaWNMb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2ljTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBCYXNpY0xvY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzaWNMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2Mu
YSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hp
dmUuYXI7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07CiAJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJBTVNpemUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNzE3LDE0ICs3MTcsMTQgQEAKIAkJCQkxNDY5NDE5QjE2RUFCMTBB
MDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sTWFjLm1tICovLAogCQkJCTBGQjE0RTE4MTgwRkEy
MTgwMDlCNkI0RCAvKiBCYWcuaCAqLywKIAkJCQkwRkIxNEUxQTE4MTBFMURBMDA5QjZCNEQgLyog
QmFnVG9IYXNoTWFwLmggKi8sCisJCQkJMEZFNDQ3OUExQjdBQUEwMzAwOTQ5OEVCIC8qIEJhc2lj
TG9jay5jcHAgKi8sCisJCQkJMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIEJhc2ljTG9jay5o
ICovLAogCQkJCUE4QTQ3MjVGMTUxQTgyNUEwMDQxMjNGRiAvKiBCaXRtYXAuaCAqLywKIAkJCQlB
OEE0NzI2MDE1MUE4MjVBMDA0MTIzRkYgLyogQml0VmVjdG9yLmNwcCAqLywKIAkJCQlBOEE0NzI2
MTE1MUE4MjVBMDA0MTIzRkYgLyogQml0VmVjdG9yLmggKi8sCiAJCQkJQThBNDcyNjQxNTFBODI1
QTAwNDEyM0ZGIC8qIEJsb2NrU3RhY2suaCAqLywKIAkJCQlBOEE0NzI2NTE1MUE4MjVBMDA0MTIz
RkYgLyogQmxvb21GaWx0ZXIuaCAqLywKIAkJCQlBOEE0NzI2NzE1MUE4MjVBMDA0MTIzRkYgLyog
QnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywKLQkJCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suY3BwICovLAotCQkJCTBGODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRl
TG9jay5oICovLAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBCeXRlT3JkZXIuaCAq
LywKIAkJCQlBOEE0NzI2QTE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCAq
LywKIAkJCQlBOEE0NzI2QjE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCAqLywK
QEAgLTExNjYsNyArMTE2Niw2IEBACiAJCQkJQThBNDc0MTUxNTFBODI1QjAwNDEyM0ZGIC8qIFJh
bmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTYxNTFBODI1QjAwNDEyM0ZG
IC8qIFJhbmRvbU51bWJlclNlZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODcxMDVBMTY2NDNG
MTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjgyNEE2NzFC
NzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDE3
MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDE4MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQxOTE1MUE4MjVCMDA0MTIzRkYgLyogUmVmQ291bnRlZEFycmF5LmggaW4gSGVhZGVy
cyAqLywKQEAgLTEyMjAsNiArMTIxOSw3IEBACiAJCQkJQThBNDc0NTQxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NTE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU3BlY2lmaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
OUVGMTYzMTZCQkZFMEQwMDBBNDMzMSAvKiBUcmlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIEJhc2ljTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NkQxNTFBODI1QjAwNDEyM0ZGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0NkExNTFBODI1QjAwNDEyM0ZGIC8qIFVURjguaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3M0I5MTUxQTgyNUIwMDQxMjNGRiAvKiB1dGlscy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMzM3LDcgKzEzMzcsNiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJQThBNDczODYxNTFBODI1QjAw
NDEyM0ZGIC8qIEFzc2VydGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MzUxNTFB
ODI1QjAwNDEyM0ZGIC8qIEF0b21pY1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjgy
NEE2NjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OUJDNzBGMDUxNzZDMzc5RDAwMTAxREVDIC8qIEF0b21pY1N0cmluZ1RhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1QkExNUZCMTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdDRi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDY5NDE5RDE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQ
b29sTWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0xNDAwLDYgKzEzOTksNyBAQAogCQkJCTcwRUNB
NjBEMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZFREFDRDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4QTQ3NDNDMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTQ0NzlDMUI3QUFBMDMwMDk0OThFQiAvKiBCYXNpY0xv
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NDAxNTFBODI1QjAwNDEyM0ZGIC8qIFN0
cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RkMxODI0MzVBNjAwQTgyRTY5
IC8qIFN0cmluZ0ltcGxDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVGNTE4MjQzNDgw
MDBBODJFNjkgLyogU3RyaW5nSW1wbE1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAkocmV2aXNpb24gMTg4MzA3KQorKysgU291
cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlIDx1bmlzdGQuaD4K
LSNpbmNsdWRlIDx3dGYvQnl0ZUxvY2suaD4KKyNpbmNsdWRlIDx3dGYvQmFzaWNMb2NrLmg+CiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNs
dWRlIDx3dGYvU3BpbkxvY2suaD4KQEAgLTQ0LDcgKzQ0LDcgQEAgdW5zaWduZWQgbnVtSXRlcmF0
aW9uczsKICAgICAKIE5PX1JFVFVSTiB2b2lkIHVzYWdlKCkKIHsKLSAgICBwcmludGYoIlVzYWdl
OiBMb2NrU3BlZWRUZXN0IHNwaW5sb2NrfGxvY2t8Ynl0ZWxvY2t8bXV0ZXh8YWxsIDxudW0gdGhy
ZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBncm91cD4gPHdvcmsgcGVyIGNyaXRpY2FsIHNl
Y3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51bSBpdGVyYXRpb25zPlxuIik7CisgICAgcHJp
bnRmKCJVc2FnZTogTG9ja1NwZWVkVGVzdCBzcGlubG9ja3xiYXNpY2xvY2t8bG9ja3xieXRlbG9j
a3xtdXRleHxhbGwgPG51bSB0aHJlYWQgZ3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3VwPiA8
d29yayBwZXIgY3JpdGljYWwgc2VjdGlvbj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0ZXJh
dGlvbnM+XG4iKTsKICAgICBleGl0KDEpOwogfQogCkBAIC0xMjIsMTIgKzEyMiwxMiBAQCBpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJ1bkJlbmNobWFyazxTcGluTG9j
az4oIlNwaW5Mb2NrIik7CiAgICAgICAgIGRpZFJ1biA9IHRydWU7CiAgICAgfQotICAgIGlmICgh
c3RyY21wKGFyZ3ZbMV0sICJsb2NrIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKLSAg
ICAgICAgcnVuQmVuY2htYXJrPExvY2s+KCJXVEYgTG9jayIpOworICAgIGlmICghc3RyY21wKGFy
Z3ZbMV0sICJiYXNpY2xvY2siKSB8fCAhc3RyY21wKGFyZ3ZbMV0sICJhbGwiKSkgeworICAgICAg
ICBydW5CZW5jaG1hcms8QmFzaWNMb2NrPigiV1RGIEJhc2ljTG9jayIpOwogICAgICAgICBkaWRS
dW4gPSB0cnVlOwogICAgIH0KLSAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAiYnl0ZWxvY2siKSB8
fCAhc3RyY21wKGFyZ3ZbMV0sICJhbGwiKSkgewotICAgICAgICBydW5CZW5jaG1hcms8Qnl0ZUxv
Y2s+KCJXVEYgQnl0ZUxvY2siKTsKKyAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAibG9jayIpIHx8
ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CisgICAgICAgIHJ1bkJlbmNobWFyazxMb2NrPigi
V1RGIExvY2siKTsKICAgICAgICAgZGlkUnVuID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKCFzdHJj
bXAoYXJndlsxXSwgIm11dGV4IikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0Jhc2ljTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQmFzaWNMb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0Jhc2ljTG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkJhc2ljTG9jay5oIgorCisjaW5jbHVkZSAiRGF0YUxvZy5oIgorI2luY2x1ZGUgIlN0cmlu
Z1ByaW50U3RyZWFtLmgiCisjaW5jbHVkZSAiVGhyZWFkU3BlY2lmaWMuaCIKKyNpbmNsdWRlICJU
aHJlYWRpbmdQcmltaXRpdmVzLmgiCisjaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgorI2lu
Y2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHRocmVhZD4KKworbmFtZXNwYWNlIFdURiB7CisKK25h
bWVzcGFjZSB7CisKKy8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgc2VydmVzIHRocmVlIHB1cnBvc2Vz
OgorLy8KKy8vIDEpIEEgcGFya2luZyBtZWNoYW5pc20gZm9yIHRocmVhZHMgdGhhdCBnbyB0byBz
bGVlcC4gVGhhdCBpbnZvbHZlcyBqdXN0IGEgc3lzdGVtIG11dGV4IGFuZAorLy8gICAgY29uZGl0
aW9uIHZhcmlhYmxlLgorLy8KKy8vIDIpIEEgcXVldWUgbm9kZSBmb3Igd2hlbiBhIHRocmVhZCBp
cyBvbiBzb21lIEJhc2ljTG9jaydzIHF1ZXVlLgorLy8KKy8vIDMpIFRoZSBxdWV1ZSBoZWFkLiBU
aGlzIGlzIGtpbmQgb2YgZnVua3kuIFdoZW4gYSB0aHJlYWQgaXMgdGhlIGhlYWQgb2YgYSBxdWV1
ZSwgaXQgYWxzbyBzZXJ2ZXMgYXMKKy8vICAgIHRoZSBiYXNpYyBxdWV1ZSBib29ra2VlcGluZyBk
YXRhIHN0cnVjdHVyZS4gV2hlbiBhIHRocmVhZCBpcyBkZXF1ZXVlZCwgdGhlIG5leHQgdGhyZWFk
IGluIHRoZQorLy8gICAgcXVldWUgdGFrZXMgb24gdGhlIHF1ZXVlIGhlYWQgZHV0aWVzLgorc3Ry
dWN0IFRocmVhZERhdGEgeworICAgIC8vIFRoZSBwYXJraW5nIG1lY2hhbmlzbS4KKyAgICBib29s
IHNob3VsZFBhcmsgeyBmYWxzZSB9OworICAgIHN0ZDo6bXV0ZXggcGFya2luZ0xvY2s7CisgICAg
c3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlvbjsKKworICAgIC8vIFRoZSBx
dWV1ZSBub2RlLgorICAgIFRocmVhZERhdGEqIG5leHRJblF1ZXVlIHsgbnVsbHB0ciB9OworCisg
ICAgLy8gVGhlIHF1ZXVlIGl0c2VsZi4KKyAgICBUaHJlYWREYXRhKiBxdWV1ZVRhaWwgeyBudWxs
cHRyIH07Cit9OworCitUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPiogdGhyZWFkRGF0YTsKKwor
VGhyZWFkRGF0YSogbXlUaHJlYWREYXRhKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
aW5pdGlhbGl6ZU9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIGluaXRpYWxpemVP
bmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICB0aHJlYWREYXRhID0gbmV3IFRocmVhZFNw
ZWNpZmljPFRocmVhZERhdGE+KCk7CisgICAgICAgIH0pOworCisgICAgcmV0dXJuICp0aHJlYWRE
YXRhOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBCYXNpY0xvY2s6Omxv
Y2tTbG93KCkKK3sKKyAgICB1bnNpZ25lZCBzcGluQ291bnQgPSAwOworCisgICAgLy8gVGhpcyBt
YWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFzdCBKaWtlc1JW
TSBleHBlcmltZW50cy4KKyAgICBjb25zdCB1bnNpZ25lZCBzcGluTGltaXQgPSA0MDsKKyAgICAK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIHVpbnRwdHJfdCBjdXJyZW50V29yZFZhbHVlID0gbV93
b3JkLmxvYWQoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghKGN1cnJlbnRXb3JkVmFsdWUgJiBp
c0xvY2tlZEJpdCkpIHsKKyAgICAgICAgICAgIC8vIEl0J3Mgbm90IHBvc3NpYmxlIGZvciBzb21l
b25lIHRvIGhvbGQgdGhlIHF1ZXVlIGxvY2sgd2hpbGUgdGhlIGxvY2sgaXRzZWxmIGlzIG5vIGxv
bmdlcgorICAgICAgICAgICAgLy8gaGVsZCwgc2luY2Ugd2Ugd2lsbCBvbmx5IGF0dGVtcHQgdG8g
YWNxdWlyZSB0aGUgcXVldWUgbG9jayB3aGVuIHRoZSBsb2NrIGlzIGhlbGQgYW5kCisgICAgICAg
ICAgICAvLyB0aGUgcXVldWUgbG9jayBwcmV2ZW50cyB1bmxvY2suCisgICAgICAgICAgICBBU1NF
UlQoIShjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCkpOworICAgICAgICAgICAg
aWYgKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRX
b3JkVmFsdWUgfCBpc0xvY2tlZEJpdCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTdWNjZXNzISBX
ZSBhY3F1aXJlZCB0aGUgbG9jay4KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBxdWV1ZSBhbmQgd2Ug
aGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVzdCB0cnkgdG8gc3BpbiBhcm91bmQgYWdh
aW4uCisgICAgICAgIGlmICghKGN1cnJlbnRXb3JkVmFsdWUgJiB+cXVldWVIZWFkTWFzaykgJiYg
c3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgICAgICBzcGluQ291bnQrKzsKKyAgICAg
ICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIE5lZWQgdG8gcHV0IG91cnNlbHZlcyBvbiB0aGUgcXVl
dWUuIENyZWF0ZSB0aGUgcXVldWUgaWYgb25lIGRvZXMgbm90IGV4aXN0LiBUaGlzIHJlcXVyaWVz
CisgICAgICAgIC8vIG93bmluZyB0aGUgcXVldWUgZm9yIGEgbGl0dGxlIGJpdC4gVGhlIGxvY2sg
dGhhdCBjb250cm9scyB0aGUgcXVldWUgaXMgaXRzZWxmIGEgc3BpbmxvY2suCisgICAgICAgIC8v
IEJ1dCBiZWZvcmUgd2UgYWNxdWlyZSB0aGUgcXVldWUgc3BpbmxvY2ssIHdlIG1ha2Ugc3VyZSB0
aGF0IHdlIGhhdmUgYSBUaHJlYWREYXRhIGZvciB0aGlzCisgICAgICAgIC8vIHRocmVhZC4KKyAg
ICAgICAgVGhyZWFkRGF0YSogbWUgPSBteVRocmVhZERhdGEoKTsKKyAgICAgICAgQVNTRVJUKCFt
ZS0+c2hvdWxkUGFyayk7CisgICAgICAgIEFTU0VSVCghbWUtPm5leHRJblF1ZXVlKTsKKyAgICAg
ICAgQVNTRVJUKCFtZS0+cXVldWVUYWlsKTsKKworICAgICAgICAvLyBSZWxvYWQgdGhlIGN1cnJl
bnQgd29yZCB2YWx1ZSwgc2luY2Ugc29tZSB0aW1lIG1heSBoYXZlIHBhc3NlZC4KKyAgICAgICAg
Y3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisKKyAgICAgICAgLy8gV2UgcHJvY2Vl
ZCBvbmx5IGlmIHRoZSBxdWV1ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGUgQmFzaWNMb2NrIGlzIGhl
bGQsIGFuZCB3ZSBzdWNjZWVkIGluCisgICAgICAgIC8vIGFjcXVpcmluZyB0aGUgcXVldWUgbG9j
ay4KKyAgICAgICAgaWYgKChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCkKKyAg
ICAgICAgICAgIHx8ICEoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KQorICAgICAgICAg
ICAgfHwgIW1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJl
bnRXb3JkVmFsdWUgfCBpc1F1ZXVlTG9ja2VkQml0KSkgeworICAgICAgICAgICAgc3RkOjp0aGlz
X3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBtZS0+c2hvdWxkUGFyayA9IHRydWU7CisKKyAgICAgICAgLy8gV2Ugb3du
IHRoZSBxdWV1ZS4gTm9ib2R5IGNhbiBlbnF1ZXVlIG9yIGRlcXVldWUgdW50aWwgd2UncmUgZG9u
ZS4gQWxzbywgaXQncyBub3QgcG9zc2libGUKKyAgICAgICAgLy8gdG8gcmVsZWFzZSB0aGUgQmFz
aWNMb2NrIHdoaWxlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2suCisgICAgICAgIFRocmVhZERhdGEq
IHF1ZXVlSGVhZCA9IGJpdHdpc2VfY2FzdDxUaHJlYWREYXRhKj4oY3VycmVudFdvcmRWYWx1ZSAm
IH5xdWV1ZUhlYWRNYXNrKTsKKyAgICAgICAgaWYgKHF1ZXVlSGVhZCkgeworICAgICAgICAgICAg
Ly8gUHV0IHRoaXMgdGhyZWFkIGF0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlLgorICAgICAgICAgICAg
cXVldWVIZWFkLT5xdWV1ZVRhaWwtPm5leHRJblF1ZXVlID0gbWU7CisgICAgICAgICAgICBxdWV1
ZUhlYWQtPnF1ZXVlVGFpbCA9IG1lOworCisgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBxdWV1
ZSBsb2NrLgorICAgICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Cisg
ICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKTsKKyAg
ICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7Cisg
ICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KTsKKyAgICAg
ICAgICAgIG1fd29yZC5zdG9yZShjdXJyZW50V29yZFZhbHVlICYgfmlzUXVldWVMb2NrZWRCaXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTWFrZSB0aGlzIHRocmVhZCBiZSB0
aGUgcXVldWUtaGVhZC4KKyAgICAgICAgICAgIHF1ZXVlSGVhZCA9IG1lOworICAgICAgICAgICAg
bWUtPnF1ZXVlVGFpbCA9IG1lOworCisgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBxdWV1ZSBs
b2NrIGFuZCBpbnN0YWxsIG91cnNlbHZlcyBhcyB0aGUgaGVhZC4gTm8gbmVlZCBmb3IgYSBDQVMg
bG9vcCwgc2luY2UKKyAgICAgICAgICAgIC8vIHdlIG93biB0aGUgcXVldWUgbG9jay4KKyAgICAg
ICAgICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAgICAgQVNT
RVJUKH4oY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKSk7CisgICAgICAgICAgICBB
U1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRCaXQpOworICAgICAgICAgICAg
QVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7CisgICAgICAgICAgICB1aW50
cHRyX3QgbmV3V29yZFZhbHVlID0gY3VycmVudFdvcmRWYWx1ZTsKKyAgICAgICAgICAgIG5ld1dv
cmRWYWx1ZSB8PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihxdWV1ZUhlYWQpOworICAgICAgICAg
ICAgbmV3V29yZFZhbHVlICY9IH5pc1F1ZXVlTG9ja2VkQml0OworICAgICAgICAgICAgbV93b3Jk
LnN0b3JlKG5ld1dvcmRWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBdCB0aGlzIHBv
aW50IGV2ZXJ5b25lIHdobyBhY3F1aXJlcyB0aGUgcXVldWUgbG9jayB3aWxsIHNlZSBtZSBvbiB0
aGUgcXVldWUsIGFuZCBhbnlvbmUgd2hvCisgICAgICAgIC8vIGFjcXVpcmVzIG1lJ3MgbG9jayB3
aWxsIHNlZSB0aGF0IG1lIHdhbnRzIHRvIHBhcmsuIE5vdGUgdGhhdCBzaG91bGRQYXJrIG1heSBo
YXZlIGJlZW4KKyAgICAgICAgLy8gY2xlYXJlZCBhcyBzb29uIGFzIHRoZSBxdWV1ZSBsb2NrIHdh
cyByZWxlYXNlZCBhYm92ZSwgYnV0IGl0IHdpbGwgaGFwcGVuIHdoaWxlIHRoZQorICAgICAgICAv
LyByZWxlYXNpbmcgdGhyZWFkIGhvbGRzIG1lJ3MgcGFya2luZ0xvY2suCisKKyAgICAgICAgewor
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtp
bmdMb2NrKTsKKyAgICAgICAgICAgIHdoaWxlIChtZS0+c2hvdWxkUGFyaykKKyAgICAgICAgICAg
ICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0KGxvY2tlcik7CisgICAgICAgIH0KKworICAg
ICAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+bmV4dElu
UXVldWUpOworICAgICAgICBBU1NFUlQoIW1lLT5xdWV1ZVRhaWwpOworICAgICAgICAKKyAgICAg
ICAgLy8gTm93IHdlIGNhbiBsb29wIGFyb3VuZCBhbmQgdHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2sg
YWdhaW4uCisgICAgfQorfQorCit2b2lkIEJhc2ljTG9jazo6dW5sb2NrU2xvdygpCit7CisgICAg
Ly8gVGhlIGZhc3QgcGF0aCBjYW4gZmFpbCBlaXRoZXIgYmVjYXVzZSBvZiBzcHVyaW91cyB3ZWFr
IENBUyBmYWlsdXJlLCBvciBiZWNhdXNlIHNvbWVvbmUgcHV0IGEKKyAgICAvLyB0aHJlYWQgb24g
dGhlIHF1ZXVlLCBvciB0aGUgcXVldWUgbG9jayBpcyBoZWxkLiBJZiB0aGUgcXVldWUgbG9jayBp
cyBoZWxkLCBpdCBjYW4gb25seSBiZQorICAgIC8vIGJlY2F1c2Ugc29tZW9uZSAqd2lsbCogZW5x
dWV1ZSBhIHRocmVhZCBvbnRvIHRoZSBxdWV1ZS4KKworICAgIC8vIEFjcXVpcmUgdGhlIHF1ZXVl
IGxvY2ssIG9yIHJlbGVhc2UgdGhlIGxvY2suIFRoaXMgbG9vcCBoYW5kbGVzIGJvdGggbG9jayBy
ZWxlYXNlIGluIGNhc2UgdGhlCisgICAgLy8gZmFzdCBwYXRoJ3Mgd2VhayBDQVMgc3B1cmlvdXNs
eSBmYWlsZWQgYW5kIGl0IGhhbmRsZXMgcXVldWUgbG9jayBhY3F1aXNpdGlvbiBpZiB0aGVyZSBp
cworICAgIC8vIGFjdHVhbGx5IHNvbWV0aGluZyBpbnRlcmVzdGluZyBvbiB0aGUgcXVldWUuCisg
ICAgZm9yICg7OykgeworICAgICAgICB1aW50cHRyX3QgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29y
ZC5sb2FkKCk7CisKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJp
dCk7CisgICAgICAgIAorICAgICAgICBpZiAoY3VycmVudFdvcmRWYWx1ZSA9PSBpc0xvY2tlZEJp
dCkgeworICAgICAgICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzTG9ja2Vk
Qml0LCAwKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBmYXN0IHBhdGgncyB3ZWFrIENBUyBo
YWQgc3B1cmlvdXNseSBmYWlsZWQsIGFuZCBub3cgd2Ugc3VjY2VlZGVkLiBUaGUgbG9jayBpcwor
ICAgICAgICAgICAgICAgIC8vIHVubG9ja2VkIGFuZCB3ZSdyZSBkb25lIQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIExvb3AgYXJvdW5kIGFu
ZCB0cnkgYWdhaW4uCisgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChjdXJy
ZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCkgeworICAgICAgICAgICAgc3RkOjp0aGlz
X3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gSWYgaXQgd2Fzbid0IGp1c3QgYSBzcHVyaW91cyB3ZWFrIENBUyBmYWlsdXJlIGFu
ZCBpZiB0aGUgcXVldWUgbG9jayBpcyBub3QgaGVsZCwgdGhlbiB0aGVyZQorICAgICAgICAvLyBt
dXN0IGJlIGFuIGVudHJ5IG9uIHRoZSBxdWV1ZS4KKyAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3Jk
VmFsdWUgJiB+cXVldWVIZWFkTWFzayk7CisKKyAgICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhj
aGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBpc1F1ZXVlTG9j
a2VkQml0KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHVpbnRwdHJfdCBjdXJy
ZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKyAgICAgICAgCisgICAgLy8gQWZ0ZXIgd2Ug
YWNxdWlyZSB0aGUgcXVldWUgbG9jaywgdGhlIEJhc2ljTG9jayBtdXN0IHN0aWxsIGJlIGhlbGQg
YW5kIHRoZSBxdWV1ZSBtdXN0IGJlCisgICAgLy8gbm9uLWVtcHR5LiBUaGUgcXVldWUgbXVzdCBi
ZSBub24tZW1wdHkgc2luY2Ugb25seSB0aGUgbG9ja1Nsb3coKSBtZXRob2QgY291bGQgaGF2ZSBo
ZWxkIHRoZQorICAgIC8vIHF1ZXVlIGxvY2sgYW5kIGlmIGl0IGRpZCB0aGVuIGl0IG9ubHkgcmVs
ZWFzZXMgaXQgYWZ0ZXIgcHV0dGluZyBzb21ldGhpbmcgb24gdGhlIHF1ZXVlLgorICAgIEFTU0VS
VChjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpOworICAgIEFTU0VSVChjdXJyZW50V29y
ZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7CisgICAgVGhyZWFkRGF0YSogcXVldWVIZWFkID0g
Yml0d2lzZV9jYXN0PFRocmVhZERhdGEqPihjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1h
c2spOworICAgIEFTU0VSVChxdWV1ZUhlYWQpOworCisgICAgVGhyZWFkRGF0YSogbmV3UXVldWVI
ZWFkID0gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZTsKKyAgICAvLyBFaXRoZXIgdGhpcyB3YXMgdGhl
IG9ubHkgdGhyZWFkIG9uIHRoZSBxdWV1ZSwgaW4gd2hpY2ggY2FzZSB3ZSBkZWxldGUgdGhlIHF1
ZXVlLCBvciB0aGVyZQorICAgIC8vIGFyZSBzdGlsbCBtb3JlIHRocmVhZHMgb24gdGhlIHF1ZXVl
LCBpbiB3aGljaCBjYXNlIHdlIGNyZWF0ZSBhIG5ldyBxdWV1ZSBoZWFkLgorICAgIGlmIChuZXdR
dWV1ZUhlYWQpCisgICAgICAgIG5ld1F1ZXVlSGVhZC0+cXVldWVUYWlsID0gcXVldWVIZWFkLT5x
dWV1ZVRhaWw7CisKKyAgICAvLyBDaGFuZ2UgdGhlIHF1ZXVlIGhlYWQsIHBvc3NpYmx5IHJlbW92
aW5nIGl0IGlmIG5ld1F1ZXVlSGVhZCBpcyBudWxsLiBObyBuZWVkIGZvciBhIENBUyBsb29wLAor
ICAgIC8vIHNpbmNlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2sgYW5kIHRoZSBsb2NrIGl0c2VsZiBz
byBub3RoaW5nIGFib3V0IHRoZSBsb2NrIGNhbiBjaGFuZ2UgcmlnaHQKKyAgICAvLyBub3cuCisg
ICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgQVNTRVJUKGN1cnJlbnRX
b3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7CisgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBp
c1F1ZXVlTG9ja2VkQml0KTsKKyAgICBBU1NFUlQoKGN1cnJlbnRXb3JkVmFsdWUgJiB+cXVldWVI
ZWFkTWFzaykgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocXVldWVIZWFkKSk7CisgICAgdWlu
dHB0cl90IG5ld1dvcmRWYWx1ZSA9IGN1cnJlbnRXb3JkVmFsdWU7CisgICAgbmV3V29yZFZhbHVl
ICY9IH5pc0xvY2tlZEJpdDsgLy8gUmVsZWFzZSB0aGUgQmFzaWNMb2NrLgorICAgIG5ld1dvcmRW
YWx1ZSAmPSB+aXNRdWV1ZUxvY2tlZEJpdDsgLy8gUmVsZWFzZSB0aGUgcXVldWUgbG9jay4KKyAg
ICBuZXdXb3JkVmFsdWUgJj0gcXVldWVIZWFkTWFzazsgLy8gQ2xlYXIgb3V0IHRoZSBvbGQgcXVl
dWUgaGVhZC4KKyAgICBuZXdXb3JkVmFsdWUgfD0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3
UXVldWVIZWFkKTsgLy8gSW5zdGFsbCBuZXcgcXVldWUgaGVhZC4KKyAgICBtX3dvcmQuc3RvcmUo
bmV3V29yZFZhbHVlKTsKKworICAgIC8vIE5vdyB0aGUgbG9jayBpcyBhdmFpbGFibGUgZm9yIGFj
cXVpc2l0aW9uLiBCdXQgd2UganVzdCBoYXZlIHRvIHdha2UgdXAgdGhlIG9sZCBxdWV1ZSBoZWFk
LgorICAgIC8vIEFmdGVyIHRoYXQsIHdlJ3JlIGRvbmUhCisKKyAgICBxdWV1ZUhlYWQtPm5leHRJ
blF1ZXVlID0gbnVsbHB0cjsKKyAgICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbCA9IG51bGxwdHI7CisK
KyAgICAvLyBXZSBkbyB0aGlzIGNhcmVmdWxseSBiZWNhdXNlIHRoaXMgbWF5IHJ1biBlaXRoZXIg
YmVmb3JlIG9yIGR1cmluZyB0aGUgcGFya2luZ0xvY2sgY3JpdGljYWwKKyAgICAvLyBzZWN0aW9u
IGluIGxvY2tTbG93KCkuCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0
ZXg+IGxvY2tlcihxdWV1ZUhlYWQtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgcXVldWVIZWFkLT5z
aG91bGRQYXJrID0gZmFsc2U7CisgICAgfQorICAgIC8vIERvZXNuJ3QgbWF0dGVyIGlmIHdlIG5v
dGlmeV9hbGwoKSBvciBub3RpZnlfb25lKCkgaGVyZSBzaW5jZSB0aGUgb25seSB0aHJlYWQgdGhh
dCBjb3VsZCBiZQorICAgIC8vIHdhaXRpbmcgaXMgcXVldWVIZWFkLgorICAgIHF1ZXVlSGVhZC0+
cGFya2luZ0NvbmRpdGlvbi5ub3RpZnlfb25lKCk7CisKKyAgICAvLyBUaGUgb2xkIHF1ZXVlIGhl
YWQgY2FuIG5vdyBjb250ZW5kIGZvciB0aGUgbG9jayBhZ2Fpbi4gV2UncmUgZG9uZSEKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jhc2ljTG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Jhc2ljTG9jay5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dURi93dGYvQmFzaWNMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFdURl9CYXNpY0xvY2tfaAorI2RlZmluZSBXVEZfQmFzaWNMb2NrX2gKKworI2luY2x1ZGUgPHd0
Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CisjaW5jbHVkZSA8d3RmL0xv
Y2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsK
KworLy8gQSBCYXNpY0xvY2sgaXMgYSBmdWxseSBhZGFwdGl2ZSBtdXRleCB0aGF0IHVzZXMgc2l6
ZW9mKHZvaWQqKSBzdG9yYWdlLiBJdCBoYXMgYSBmYXN0IHBhdGggdGhhdCBpcworLy8gc2ltaWxh
ciB0byBTcGluTG9jaywgYW5kIGEgc2xvdyBwYXRoIHRoYXQgaXMgc2ltaWxhciB0byBNdXRleC4g
SW4gbW9zdCBjYXNlcywgeW91IHNob3VsZCB1c2UgTG9jaworLy8gaW5zdGVhZC4gQmFzaWNMb2Nr
IHNpdHMgbG93ZXIgaW4gdGhlIHN0YWNrIGFuZCBpcyB1c2VkIHRvIGltcGxlbWVudCBMb2NrLCBz
byBMb2NrIGlzIHRoZSBtYWluCisvLyBjbGllbnQgb2YgQmFzaWNMb2NrLgorCitjbGFzcyBCYXNp
Y0xvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljTG9jayk7CitwdWJsaWM6Cisg
ICAgQmFzaWNMb2NrKCkKKyAgICB7CisgICAgICAgIG1fd29yZC5zdG9yZSgwLCBzdGQ6Om1lbW9y
eV9vcmRlcl9yZWxheGVkKTsKKyAgICB9CisKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAg
ICAgaWYgKExJS0VMWShtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0xvY2tlZEJpdCwg
c3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7CisgICAgICAgICAgICAvLyBCYXNpY0xvY2sg
YWNxdWlyZWQhCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsb2Nr
U2xvdygpOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrKCkKKyAgICB7CisgICAgICAgIGlmIChM
SUtFTFkobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNMb2NrZWRCaXQsIDAsIHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGVhc2UpKSkgeworICAgICAgICAgICAgLy8gQmFzaWNMb2NrIHJlbGVhc2Vk
LCBhbmQgbm9ib2R5IHdhcyB3YWl0aW5nIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgdW5sb2NrU2xvdygpOworICAgIH0KKworICAgIGJvb2wgaXNIZWxkKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dvcmQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9h
Y3F1aXJlKSAmIGlzTG9ja2VkQml0OworICAgIH0KKworICAgIGJvb2wgaXNMb2NrZWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSGVsZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgY29uc3QgdWludHB0cl90IGlzTG9ja2VkQml0ID0gMTsKKyAgICBzdGF0aWMgY29u
c3QgdWludHB0cl90IGlzUXVldWVMb2NrZWRCaXQgPSAyOworICAgIHN0YXRpYyBjb25zdCB1aW50
cHRyX3QgcXVldWVIZWFkTWFzayA9IDM7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBs
b2NrU2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3coKTsKKwor
ICAgIEF0b21pYzx1aW50cHRyX3Q+IG1fd29yZDsKK307CisKK3R5cGVkZWYgTG9ja2VyPEJhc2lj
TG9jaz4gQmFzaWNMb2NrSG9sZGVyOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpCYXNpY0xvY2s7Cit1c2luZyBXVEY6OkJhc2ljTG9ja0hvbGRlcjsKKworI2VuZGlmIC8vIFdU
Rl9CYXNpY0xvY2tfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQnl0ZUxvY2suY3BwCShyZXZpc2lvbiAxODgzMDcpCisr
KyBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJ5dGVMb2NrLmgiCi0KLSNpbmNsdWRlICJEYXRh
TG9nLmgiCi0jaW5jbHVkZSAiUGFya2luZ0xvdC5oIgotI2luY2x1ZGUgIlN0cmluZ1ByaW50U3Ry
ZWFtLmgiCi0jaW5jbHVkZSA8dGhyZWFkPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi12b2lkIEJ5dGVMb2NrOjpsb2NrU2xvdygpCi17
Ci0gICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKLQotICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVy
IHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVu
dHMuCi0gICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7Ci0gICAgCi0gICAgZm9yICg7
OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwot
ICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVu
dFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVWYWx1ZSwgIlxuIikpOwot
Ci0gICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KLSAgICAgICAgaWYg
KCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAgICAgICAgICYmIG1fYnl0ZS5j
b21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBp
c0hlbGRCaXQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGlz
IG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3Qg
dHJ5IHRvIHNwaW4gYXJvdW5kLgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFz
UGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKLSAgICAgICAgICAgIHNwaW5D
b3VudCsrOwotICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTmVlZCB0byBwYXJrLiBXZSBk
byB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVuIHBhcmtpbmcu
IFdlIHNwaW4gYXJvdW5kCi0gICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdhc24ndCBzZXQg
YW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZh
bHVlICYgaGFzUGFya2VkQml0KQotICAgICAgICAgICAgJiYgIW1fYnl0ZS5jb21wYXJlRXhjaGFu
Z2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQp
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUg
dmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2Us
IHdlIGNhbiBwYXJrLgotICAgICAgICBQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFyaygmbV9ieXRl
LCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOwotCi0gICAgICAgIC8vIFdlIGhhdmUgYXdha2Vu
LCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFuZ2VkLiBFaXRo
ZXIgd2F5LCB3ZSBsb29wCi0gICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgotICAgIH0K
LX0KLQotdm9pZCBCeXRlTG9jazo6dW5sb2NrU2xvdygpCi17Ci0gICAgLy8gUmVsZWFzZSB0aGUg
bG9jayB3aGlsZSBmaW5kaW5nIG91dCBpZiBzb21lb25lIGlzIHBhcmtlZC4gTm90ZSB0aGF0IGFz
IHNvb24gYXMgd2UgZG8gdGhpcywKLSAgICAvLyBzb21lb25lIG1pZ2h0IGJhcmdlIGluLgotICAg
IHVpbnQ4X3Qgb2xkQnl0ZVZhbHVlOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgb2xkQnl0ZVZh
bHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5sb2NraW5nIHdpdGggIiwgb2xk
Qnl0ZVZhbHVlLCAiXG4iKSk7Ci0gICAgICAgIEFTU0VSVChvbGRCeXRlVmFsdWUgJiBpc0hlbGRC
aXQpOwotICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkQnl0ZVZhbHVl
LCAwKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIE5vdGUgdGhhdCBzb21l
b25lIGNvdWxkIHRyeSB0byBwYXJrIHJpZ2h0IG5vdy4gSWYgdGhhdCBoYXBwZW5zLCB0aGV5IHdp
bGwgcmV0dXJuIGltbWVkaWF0ZWx5Ci0gICAgLy8gYmVjYXVzZSBvdXIgcGFya2luZyBwcmVkaWNh
dGUgaXMgdGhhdCBtX2J5dGUgPT0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0LCBidXQgd2UndmUg
YWxyZWFkeSBzZXQKLSAgICAvLyBtX2J5dGUgPSAwLgotCi0gICAgLy8gSWYgdGhlcmUgaGFkIGJl
ZW4gdGhyZWFkcyBwYXJrZWQsIHVucGFyayBhbGwgb2YgdGhlbS4gVGhpcyBjYXVzZXMgYSB0aHVu
ZGVyaW5nIGhlcmQsIGJ1dCB3aGlsZQotICAgIC8vIHRoYXQgaXMgdGhlb3JldGljYWxseSBzY2Fy
eSwgaXQncyB0b3RhbGx5IGZpbmUgaW4gV2ViS2l0IGJlY2F1c2Ugd2UgdXN1YWxseSBkb24ndCBo
YXZlIGVub3VnaAotICAgIC8vIHRocmVhZHMgZm9yIHRoaXMgdG8gbWF0dGVyLgotICAgIC8vIEZJ
WE1FOiBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzIHRvIGV4aGliaXQgdGh1bmRlcmluZyBoZXJk
LiBXZSBjb3VsZCB1c2UgdW5wYXJrT25lKCksIGFuZCBpZgotICAgIC8vIHRoYXQgcmV0dXJucyB0
cnVlLCBqdXN0IHNldCB0aGUgcGFya2VkIGJpdCBhZ2Fpbi4gSWYgaW4gdGhlIHByb2Nlc3Mgb2Yg
c2V0dGluZyB0aGUgcGFya2VkIGJpdAotICAgIC8vIHdlIGZhaWwgdGhlIENBUywgdGhlbiBqdXN0
IHVucGFyayBhZ2Fpbi4KLSAgICBpZiAob2xkQnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQotICAg
ICAgICBQYXJraW5nTG90Ojp1bnBhcmtBbGwoJm1fYnl0ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgotCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgJKHJldmlzaW9uIDE4ODMwNykKKysrIFNvdXJjZS9XVEYv
d3RmL0J5dGVMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBCeXRlTG9ja19o
Ci0jZGVmaW5lIEJ5dGVMb2NrX2gKLQotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0xvY2tlci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotLy8gVGhpcyBpcyBsaWtlIExvY2ssIGJ1dCBvbmx5IHJlcXVpcmVzIDEgYnl0
ZSBpbnN0ZWFkIG9mIHNpemVvZih2b2lkKikgc3RvcmFnZS4gVGhlIGRvd25zaWRlIGlzIHRoYXQK
LS8vIGl0IGlzIHNsb3dlciBvbiB0aGUgc2xvdyBwYXRoIHVuZGVyIGhlYXZ5IGNvbnRlbnRpb24g
aW52b2x2aW5nIG1hbnkgdGhyZWFkcyBiZWNhdXNlIGl0IGlzCi0vLyBzdXNjZXB0aWJsZSB0byB0
aGUgInRodW5kZXJpbmcgaGVyZCIgcHJvYmxlbTogaXQgZG9lc24ndCBoYXZlIGVub3VnaCBzdGF0
ZSB0byB0cmFjayBob3cgbWFueQotLy8gdGhyZWFkcyBhcmUgd2FpdGluZyBmb3IgdGhlIGxvY2ss
IHNvIHdoZW4gdW5sb2NrIGRldGVjdHMgdGhhdCBhbnkgdGhyZWFkIGlzIHdhaXRpbmcsIHRoZW4g
aXQgd2FrZXMKLS8vIGFsbCBvZiB0aGUgd2FpdGluZyB0aHJlYWRzLiBBbGwgb2YgdGhvc2UgdGhy
ZWFkcyB3aWxsIHBpbGUgb250byB0aGUgbG9jazsgb25lIHdpbGwgc3VjY2VlZCBhbmQgdGFrZQot
Ly8gaXQgd2hpbGUgdGhlIG90aGVycyB3aWxsIGdvIGJhY2sgdG8gc2xlZXAuIFRoZSBzbG93LWRv
d24gaXMgc21hbGwuIFRlbiB0aHJlYWRzIHJlcGVhdGVkbHkKLS8vIGNvbnRlbmRpbmcgZm9yIHRo
ZSBzYW1lIH4xLTEwdXMgbG9uZyBjcml0aWNhbCBzZWN0aW9uIHdpbGwgcnVuIDclIHNsb3dlciBv
biBteSBtYWNoaW5lLiBJZiBJIG1lc3MKLS8vIHdpdGggYW55IG9mIHRoZSBwYXJhbWV0ZXJzIC0g
Y2hhbmdlIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBvciBjaGFuZ2UgdGhlIGNyaXRpY2FsIHNlY3Rp
b24gZHVyYXRpb24gLQotLy8gdGhlbiBCeXRlTG9jayByZWFjaGVzIHBhcml0eSB3aXRoIExvY2ss
IGFuZCBzb21ldGltZXMgb3V0cGVyZm9ybXMgaXQuIFBlcmhhcHMgbW9zdCBzdXJwcmlzaW5nbHks
Ci0vLyB0aGUgc2xvdy1kb3duIGdvZXMgYXdheSBldmVuIHdoZW4geW91IGluY3JlYXNlIHRoZSBu
dW1iZXIgb2YgdGhyZWFkcy4gQnl0ZUxvY2sgYXBwZWFycyB0byBzb21ldGltZXMKLS8vIGJlIGZh
c3RlciB1bmRlciBtaWNyb2NvbnRlbnRpb24sIHBlcmhhcHMgYmVjYXVzZSBhIGNvbnRlbnRpb3Vz
IDgtYml0IENBUyBpcyBjaGVhcGVyIHRoYW4gYQotLy8gY29udGVudGlvdXMgNjQtYml0IENBUy4g
Tm90ZSB0aGF0IHVuY29udGVuZGVkIGxvY2tpbmcgaXMgZXF1YWxseSBmYXN0IHdpdGggQnl0ZUxv
Y2sgYXMgd2l0aCBMb2NrLgotLy8gSW4gYWxsLCBMb2NrIGFuZCBCeXRlTG9jayBoYXZlIHNpbWls
YXIgcGVyZm9ybWFuY2UgdW5kZXIgY29udHJvbGxlZCBtaWNyb2JlbmNobWFya3MsIGJ1dCBMb2Nr
IGlzCi0vLyB0aGVvcmV0aWNhbGx5IHNhZmVyIGJlY2F1c2Ugb2YgdGhlIHRodW5kZXJpbmcgaGVy
ZCBpc3N1ZS4gSXQncyBwcm9iYWJseSBiZXN0IHRvIHVzZSBCeXRlTG9jayBvbmx5Ci0vLyB3aGVu
IHlvdSByZWFsbHkgY2FyZSBhYm91dCBzcGFjZSBhbmQgeW91IGRvbid0IGhhdmUgcmVhc29uIHRv
IGJlbGlldmUgdGhhdCBhIGxhcmdlIG51bWJlciBvZgotLy8gdGhyZWFkcyB3b3VsZCBldmVyIHBp
bGUgb250byB0aGUgc2FtZSBsb2NrLgotCi1jbGFzcyBCeXRlTG9jayB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQnl0ZUxvY2spOwotcHVibGljOgotICAgIEJ5dGVMb2NrKCkKLSAgICB7Ci0g
ICAgICAgIG1fYnl0ZS5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBsb2NrKCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRl
LmNvbXBhcmVFeGNoYW5nZVdlYWsoMCwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1
aXJlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgYWNxdWlyZWQhCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBsb2NrU2xvdygpOwotICAgIH0KLQotICAgIHZvaWQg
dW5sb2NrKCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5n
ZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsKLSAgICAg
ICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9ja1Nsb3coKTsKLSAgICB9Ci0K
LSAgICBib29sIGlzSGVsZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9ieXRlLmxv
YWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc0xvY2tlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNIZWxkKCk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGlzSGVsZEJpdCA9IDE7
Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaGFzUGFya2VkQml0ID0gMjsKLQotICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGxvY2tTbG93KCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgdW5sb2NrU2xvdygpOwotCi0gICAgQXRvbWljPHVpbnQ4X3Q+IG1fYnl0ZTsKLX07Ci0KLXR5
cGVkZWYgTG9ja2VyPEJ5dGVMb2NrPiBCeXRlTG9ja2VyOwotCi19IC8vIG5hbWVzcGFjZSBXVEYK
LQotdXNpbmcgV1RGOjpCeXRlTG9jazsKLXVzaW5nIFdURjo6Qnl0ZUxvY2tlcjsKLQotI2VuZGlm
IC8vIEJ5dGVMb2NrX2gKLQpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4ODMw
NykKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00
LDEwICs0LDEwIEBAIHNldChXVEZfSEVBREVSUwogICAgIEF0b21pY3MuaAogICAgIEJhZy5oCiAg
ICAgQmFnVG9IYXNoTWFwLmgKKyAgICBCYXNpY0xvY2suaAogICAgIEJpdFZlY3Rvci5oCiAgICAg
Qml0bWFwLmgKICAgICBCdW1wUG9pbnRlckFsbG9jYXRvci5oCi0gICAgQnl0ZUxvY2suaAogICAg
IEJ5dGVPcmRlci5oCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKQEAg
LTE0NSw4ICsxNDUsOCBAQCBzZXQoV1RGX0hFQURFUlMKIHNldChXVEZfU09VUkNFUwogICAgIEFz
c2VydGlvbnMuY3BwCiAgICAgQXRvbWljcy5jcHAKKyAgICBCYXNpY0xvY2suY3BwCiAgICAgQml0
VmVjdG9yLmNwcAotICAgIEJ5dGVMb2NrLmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAog
ICAgIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIuY3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkocmV2aXNpb24gMTg4MzA3KQorKysgU291cmNlL1dU
Ri93dGYvTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDU1ICsyNywxNCBAQAogI2luY2x1
ZGUgIkxvY2suaCIKIAogI2luY2x1ZGUgIkRhdGFMb2cuaCIKKyNpbmNsdWRlICJQYXJraW5nTG90
LmgiCiAjaW5jbHVkZSAiU3RyaW5nUHJpbnRTdHJlYW0uaCIKLSNpbmNsdWRlICJUaHJlYWRTcGVj
aWZpYy5oIgogI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRlIDxjb25k
aXRpb25fdmFyaWFibGU+Ci0jaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8dGhyZWFkPgogCiBu
YW1lc3BhY2UgV1RGIHsKIAotbmFtZXNwYWNlIHsKLQotLy8gVGhpcyBkYXRhIHN0cnVjdHVyZSBz
ZXJ2ZXMgdGhyZWUgcHVycG9zZXM6Ci0vLwotLy8gMSkgQSBwYXJraW5nIG1lY2hhbmlzbSBmb3Ig
dGhyZWFkcyB0aGF0IGdvIHRvIHNsZWVwLiBUaGF0IGludm9sdmVzIGp1c3QgYSBzeXN0ZW0gbXV0
ZXggYW5kCi0vLyAgICBjb25kaXRpb24gdmFyaWFibGUuCi0vLwotLy8gMikgQSBxdWV1ZSBub2Rl
IGZvciB3aGVuIGEgdGhyZWFkIGlzIG9uIHNvbWUgTG9jaydzIHF1ZXVlLgotLy8KLS8vIDMpIFRo
ZSBxdWV1ZSBoZWFkLiBUaGlzIGlzIGtpbmQgb2YgZnVua3kuIFdoZW4gYSB0aHJlYWQgaXMgdGhl
IGhlYWQgb2YgYSBxdWV1ZSwgaXQgYWxzbyBzZXJ2ZXMgYXMKLS8vICAgIHRoZSBiYXNpYyBxdWV1
ZSBib29ra2VlcGluZyBkYXRhIHN0cnVjdHVyZS4gV2hlbiBhIHRocmVhZCBpcyBkZXF1ZXVlZCwg
dGhlIG5leHQgdGhyZWFkIGluIHRoZQotLy8gICAgcXVldWUgdGFrZXMgb24gdGhlIHF1ZXVlIGhl
YWQgZHV0aWVzLgotc3RydWN0IFRocmVhZERhdGEgewotICAgIC8vIFRoZSBwYXJraW5nIG1lY2hh
bmlzbS4KLSAgICBib29sIHNob3VsZFBhcmsgeyBmYWxzZSB9OwotICAgIHN0ZDo6bXV0ZXggcGFy
a2luZ0xvY2s7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlvbjsK
LQotICAgIC8vIFRoZSBxdWV1ZSBub2RlLgotICAgIFRocmVhZERhdGEqIG5leHRJblF1ZXVlIHsg
bnVsbHB0ciB9OwotCi0gICAgLy8gVGhlIHF1ZXVlIGl0c2VsZi4KLSAgICBUaHJlYWREYXRhKiBx
dWV1ZVRhaWwgeyBudWxscHRyIH07Ci19OwotCi1UaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPiog
dGhyZWFkRGF0YTsKLQotVGhyZWFkRGF0YSogbXlUaHJlYWREYXRhKCkKLXsKLSAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7Ci0gICAgc3RkOjpjYWxsX29uY2UoCi0gICAg
ICAgIGluaXRpYWxpemVPbmNlLAotICAgICAgICBbXSB7Ci0gICAgICAgICAgICB0aHJlYWREYXRh
ID0gbmV3IFRocmVhZFNwZWNpZmljPFRocmVhZERhdGE+KCk7Ci0gICAgICAgIH0pOwotCi0gICAg
cmV0dXJuICp0aHJlYWREYXRhOwotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKK3N0YXRp
YyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogdm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3co
KQogewpAQCAtODUsMTg0ICs0NCw2MiBAQCB2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCiAgICAg
Y29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7CiAgICAgCiAgICAgZm9yICg7OykgewotICAg
ICAgICB1aW50cHRyX3QgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoIShjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpKSB7Ci0gICAg
ICAgICAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSBmb3Igc29tZW9uZSB0byBob2xkIHRoZSBxdWV1
ZSBsb2NrIHdoaWxlIHRoZSBsb2NrIGl0c2VsZiBpcyBubyBsb25nZXIKLSAgICAgICAgICAgIC8v
IGhlbGQsIHNpbmNlIHdlIHdpbGwgb25seSBhdHRlbXB0IHRvIGFjcXVpcmUgdGhlIHF1ZXVlIGxv
Y2sgd2hlbiB0aGUgbG9jayBpcyBoZWxkIGFuZAotICAgICAgICAgICAgLy8gdGhlIHF1ZXVlIGxv
Y2sgcHJldmVudHMgdW5sb2NrLgotICAgICAgICAgICAgQVNTRVJUKCEoY3VycmVudFdvcmRWYWx1
ZSAmIGlzUXVldWVMb2NrZWRCaXQpKTsKLSAgICAgICAgICAgIGlmIChtX3dvcmQuY29tcGFyZUV4
Y2hhbmdlV2VhayhjdXJyZW50V29yZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlIHwgaXNMb2NrZWRC
aXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3VjY2VzcyEgV2UgYWNxdWlyZWQgdGhlIGxvY2su
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAg
ICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7CisgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IGxvY2tpbmcgd2l0aCAiLCBjdXJyZW50Qnl0ZVZhbHVlLCAiXG4iKSk7CisKKyAgICAgICAg
Ly8gV2UgYWxsb3cgb3Vyc2VsdmVzIHRvIGJhcmdlIGluLgorICAgICAgICBpZiAoIShjdXJyZW50
Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgJiYgbV9ieXRlLmNvbXBhcmVFeGNo
YW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCkp
CisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gcXVldWUg
YW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJv
dW5kIGFnYWluLgotICAgICAgICBpZiAoIShjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1h
c2spICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgeworICAgICAgICAvLyBJZiB0aGVyZSBpcyBu
b2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRy
eSB0byBzcGluIGFyb3VuZC4KKyAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1Bh
cmtlZEJpdCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CiAgICAgICAgICAgICBzcGluQ291
bnQrKzsKICAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIE5lZWQgdG8gcHV0IG91cnNlbHZl
cyBvbiB0aGUgcXVldWUuIENyZWF0ZSB0aGUgcXVldWUgaWYgb25lIGRvZXMgbm90IGV4aXN0LiBU
aGlzIHJlcXVyaWVzCi0gICAgICAgIC8vIG93bmluZyB0aGUgcXVldWUgZm9yIGEgbGl0dGxlIGJp
dC4gVGhlIGxvY2sgdGhhdCBjb250cm9scyB0aGUgcXVldWUgaXMgaXRzZWxmIGEgc3BpbmxvY2su
Ci0gICAgICAgIC8vIEJ1dCBiZWZvcmUgd2UgYWNxdWlyZSB0aGUgcXVldWUgc3BpbmxvY2ssIHdl
IG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSBUaHJlYWREYXRhIGZvciB0aGlzCi0gICAgICAgIC8v
IHRocmVhZC4KLSAgICAgICAgVGhyZWFkRGF0YSogbWUgPSBteVRocmVhZERhdGEoKTsKLSAgICAg
ICAgQVNTRVJUKCFtZS0+c2hvdWxkUGFyayk7Ci0gICAgICAgIEFTU0VSVCghbWUtPm5leHRJblF1
ZXVlKTsKLSAgICAgICAgQVNTRVJUKCFtZS0+cXVldWVUYWlsKTsKLQotICAgICAgICAvLyBSZWxv
YWQgdGhlIGN1cnJlbnQgd29yZCB2YWx1ZSwgc2luY2Ugc29tZSB0aW1lIG1heSBoYXZlIHBhc3Nl
ZC4KLSAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Ci0KLSAgICAgICAg
Ly8gV2UgcHJvY2VlZCBvbmx5IGlmIHRoZSBxdWV1ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGUgTG9j
ayBpcyBoZWxkLCBhbmQgd2Ugc3VjY2VlZCBpbgotICAgICAgICAvLyBhY3F1aXJpbmcgdGhlIHF1
ZXVlIGxvY2suCi0gICAgICAgIGlmICgoY3VycmVudFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRC
aXQpCi0gICAgICAgICAgICB8fCAhKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCkKLSAg
ICAgICAgICAgIHx8ICFtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50V29yZFZhbHVl
LCBjdXJyZW50V29yZFZhbHVlIHwgaXNRdWV1ZUxvY2tlZEJpdCkpIHsKLSAgICAgICAgICAgIHN0
ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8g
dGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBX
ZSBzcGluIGFyb3VuZAorICAgICAgICAvLyBpZiB0aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFu
ZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KKyAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1
ZSAmIGhhc1BhcmtlZEJpdCkKKyAgICAgICAgICAgICYmICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdl
V2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtZS0+
c2hvdWxkUGFyayA9IHRydWU7Ci0KLSAgICAgICAgLy8gV2Ugb3duIHRoZSBxdWV1ZS4gTm9ib2R5
IGNhbiBlbnF1ZXVlIG9yIGRlcXVldWUgdW50aWwgd2UncmUgZG9uZS4gQWxzbywgaXQncyBub3Qg
cG9zc2libGUKLSAgICAgICAgLy8gdG8gcmVsZWFzZSB0aGUgTG9jayB3aGlsZSB3ZSBob2xkIHRo
ZSBxdWV1ZSBsb2NrLgotICAgICAgICBUaHJlYWREYXRhKiBxdWV1ZUhlYWQgPSBiaXR3aXNlX2Nh
c3Q8VGhyZWFkRGF0YSo+KGN1cnJlbnRXb3JkVmFsdWUgJiB+cXVldWVIZWFkTWFzayk7Ci0gICAg
ICAgIGlmIChxdWV1ZUhlYWQpIHsKLSAgICAgICAgICAgIC8vIFB1dCB0aGlzIHRocmVhZCBhdCB0
aGUgZW5kIG9mIHRoZSBxdWV1ZS4KLSAgICAgICAgICAgIHF1ZXVlSGVhZC0+cXVldWVUYWlsLT5u
ZXh0SW5RdWV1ZSA9IG1lOwotICAgICAgICAgICAgcXVldWVIZWFkLT5xdWV1ZVRhaWwgPSBtZTsK
LQotICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgcXVldWUgbG9jay4KLSAgICAgICAgICAgIGN1
cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOwotICAgICAgICAgICAgQVNTRVJUKGN1cnJl
bnRXb3JkVmFsdWUgJiB+cXVldWVIZWFkTWFzayk7Ci0gICAgICAgICAgICBBU1NFUlQoY3VycmVu
dFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRCaXQpOwotICAgICAgICAgICAgQVNTRVJUKGN1cnJl
bnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7Ci0gICAgICAgICAgICBtX3dvcmQuc3RvcmUoY3Vy
cmVudFdvcmRWYWx1ZSAmIH5pc1F1ZXVlTG9ja2VkQml0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIE1ha2UgdGhpcyB0aHJlYWQgYmUgdGhlIHF1ZXVlLWhlYWQuCi0gICAgICAg
ICAgICBxdWV1ZUhlYWQgPSBtZTsKLSAgICAgICAgICAgIG1lLT5xdWV1ZVRhaWwgPSBtZTsKLQot
ICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgcXVldWUgbG9jayBhbmQgaW5zdGFsbCBvdXJzZWx2
ZXMgYXMgdGhlIGhlYWQuIE5vIG5lZWQgZm9yIGEgQ0FTIGxvb3AsIHNpbmNlCi0gICAgICAgICAg
ICAvLyB3ZSBvd24gdGhlIHF1ZXVlIGxvY2suCi0gICAgICAgICAgICBjdXJyZW50V29yZFZhbHVl
ID0gbV93b3JkLmxvYWQoKTsKLSAgICAgICAgICAgIEFTU0VSVCh+KGN1cnJlbnRXb3JkVmFsdWUg
JiB+cXVldWVIZWFkTWFzaykpOwotICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUg
JiBpc1F1ZXVlTG9ja2VkQml0KTsKLSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVl
ICYgaXNMb2NrZWRCaXQpOwotICAgICAgICAgICAgdWludHB0cl90IG5ld1dvcmRWYWx1ZSA9IGN1
cnJlbnRXb3JkVmFsdWU7Ci0gICAgICAgICAgICBuZXdXb3JkVmFsdWUgfD0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4ocXVldWVIZWFkKTsKLSAgICAgICAgICAgIG5ld1dvcmRWYWx1ZSAmPSB+aXNR
dWV1ZUxvY2tlZEJpdDsKLSAgICAgICAgICAgIG1fd29yZC5zdG9yZShuZXdXb3JkVmFsdWUpOwot
ICAgICAgICB9CiAKLSAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBldmVyeW9uZSB3aG8gYWNxdWly
ZXMgdGhlIHF1ZXVlIGxvY2sgd2lsbCBzZWUgbWUgb24gdGhlIHF1ZXVlLCBhbmQgYW55b25lIHdo
bwotICAgICAgICAvLyBhY3F1aXJlcyBtZSdzIGxvY2sgd2lsbCBzZWUgdGhhdCBtZSB3YW50cyB0
byBwYXJrLiBOb3RlIHRoYXQgc2hvdWxkUGFyayBtYXkgaGF2ZSBiZWVuCi0gICAgICAgIC8vIGNs
ZWFyZWQgYXMgc29vbiBhcyB0aGUgcXVldWUgbG9jayB3YXMgcmVsZWFzZWQgYWJvdmUsIGJ1dCBp
dCB3aWxsIGhhcHBlbiB3aGlsZSB0aGUKLSAgICAgICAgLy8gcmVsZWFzaW5nIHRocmVhZCBob2xk
cyBtZSdzIHBhcmtpbmdMb2NrLgotCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7Ci0gICAgICAgICAgICB3
aGlsZSAobWUtPnNob3VsZFBhcmspCi0gICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRp
b24ud2FpdChsb2NrZXIpOwotICAgICAgICB9CisgICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhl
IHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNl
LCB3ZSBjYW4gcGFyay4KKyAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fYnl0
ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKIAotICAgICAgICBBU1NFUlQoIW1lLT5zaG91
bGRQYXJrKTsKLSAgICAgICAgQVNTRVJUKCFtZS0+bmV4dEluUXVldWUpOwotICAgICAgICBBU1NF
UlQoIW1lLT5xdWV1ZVRhaWwpOwotICAgICAgICAKLSAgICAgICAgLy8gTm93IHdlIGNhbiBsb29w
IGFyb3VuZCBhbmQgdHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2sgYWdhaW4uCisgICAgICAgIC8vIFdl
IGhhdmUgYXdha2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBj
aGFuZ2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFn
YWluLgogICAgIH0KIH0KIAogdm9pZCBMb2NrQmFzZTo6dW5sb2NrU2xvdygpCiB7Ci0gICAgLy8g
VGhlIGZhc3QgcGF0aCBjYW4gZmFpbCBlaXRoZXIgYmVjYXVzZSBvZiBzcHVyaW91cyB3ZWFrIENB
UyBmYWlsdXJlLCBvciBiZWNhdXNlIHNvbWVvbmUgcHV0IGEKLSAgICAvLyB0aHJlYWQgb24gdGhl
IHF1ZXVlLCBvciB0aGUgcXVldWUgbG9jayBpcyBoZWxkLiBJZiB0aGUgcXVldWUgbG9jayBpcyBo
ZWxkLCBpdCBjYW4gb25seSBiZQotICAgIC8vIGJlY2F1c2Ugc29tZW9uZSAqd2lsbCogZW5xdWV1
ZSBhIHRocmVhZCBvbnRvIHRoZSBxdWV1ZS4KLQotICAgIC8vIEFjcXVpcmUgdGhlIHF1ZXVlIGxv
Y2ssIG9yIHJlbGVhc2UgdGhlIGxvY2suIFRoaXMgbG9vcCBoYW5kbGVzIGJvdGggbG9jayByZWxl
YXNlIGluIGNhc2UgdGhlCi0gICAgLy8gZmFzdCBwYXRoJ3Mgd2VhayBDQVMgc3B1cmlvdXNseSBm
YWlsZWQgYW5kIGl0IGhhbmRsZXMgcXVldWUgbG9jayBhY3F1aXNpdGlvbiBpZiB0aGVyZSBpcwot
ICAgIC8vIGFjdHVhbGx5IHNvbWV0aGluZyBpbnRlcmVzdGluZyBvbiB0aGUgcXVldWUuCisgICAg
Ly8gUmVsZWFzZSB0aGUgbG9jayB3aGlsZSBmaW5kaW5nIG91dCBpZiBzb21lb25lIGlzIHBhcmtl
ZC4gTm90ZSB0aGF0IGFzIHNvb24gYXMgd2UgZG8gdGhpcywKKyAgICAvLyBzb21lb25lIG1pZ2h0
IGJhcmdlIGluLgorICAgIHVpbnQ4X3Qgb2xkQnl0ZVZhbHVlOwogICAgIGZvciAoOzspIHsKLSAg
ICAgICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOwotCi0gICAg
ICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKGN1cnJlbnRXb3JkVmFsdWUgPT0gaXNMb2NrZWRCaXQpIHsKLSAgICAgICAgICAg
IGlmIChtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0xvY2tlZEJpdCwgMCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGUgZmFzdCBwYXRoJ3Mgd2VhayBDQVMgaGFkIHNwdXJpb3VzbHkgZmFp
bGVkLCBhbmQgbm93IHdlIHN1Y2NlZWRlZC4gVGhlIGxvY2sgaXMKLSAgICAgICAgICAgICAgICAv
LyB1bmxvY2tlZCBhbmQgd2UncmUgZG9uZSEKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAvLyBMb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgotICAg
ICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoY3VycmVudFdvcmRWYWx1ZSAmIGlz
UXVldWVMb2NrZWRCaXQpIHsKLSAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIGl0IHdh
c24ndCBqdXN0IGEgc3B1cmlvdXMgd2VhayBDQVMgZmFpbHVyZSBhbmQgaWYgdGhlIHF1ZXVlIGxv
Y2sgaXMgbm90IGhlbGQsIHRoZW4gdGhlcmUKLSAgICAgICAgLy8gbXVzdCBiZSBhbiBlbnRyeSBv
biB0aGUgcXVldWUuCi0gICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVh
ZE1hc2spOwotCi0gICAgICAgIGlmIChtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50
V29yZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlIHwgaXNRdWV1ZUxvY2tlZEJpdCkpCisgICAgICAg
IG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVubG9ja2luZyB3
aXRoICIsIG9sZEJ5dGVWYWx1ZSwgIlxuIikpOworICAgICAgICBBU1NFUlQob2xkQnl0ZVZhbHVl
ICYgaXNIZWxkQml0KTsKKyAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9s
ZEJ5dGVWYWx1ZSwgMCkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICB1aW50cHRy
X3QgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Ci0gICAgICAgIAotICAgIC8vIEFm
dGVyIHdlIGFjcXVpcmUgdGhlIHF1ZXVlIGxvY2ssIHRoZSBMb2NrIG11c3Qgc3RpbGwgYmUgaGVs
ZCBhbmQgdGhlIHF1ZXVlIG11c3QgYmUKLSAgICAvLyBub24tZW1wdHkuIFRoZSBxdWV1ZSBtdXN0
IGJlIG5vbi1lbXB0eSBzaW5jZSBvbmx5IHRoZSBsb2NrU2xvdygpIG1ldGhvZCBjb3VsZCBoYXZl
IGhlbGQgdGhlCi0gICAgLy8gcXVldWUgbG9jayBhbmQgaWYgaXQgZGlkIHRoZW4gaXQgb25seSBy
ZWxlYXNlcyBpdCBhZnRlciBwdXR0aW5nIHNvbWV0aGluZyBvbiB0aGUgcXVldWUuCi0gICAgQVNT
RVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7Ci0gICAgQVNTRVJUKGN1cnJlbnRX
b3JkVmFsdWUgJiBpc1F1ZXVlTG9ja2VkQml0KTsKLSAgICBUaHJlYWREYXRhKiBxdWV1ZUhlYWQg
PSBiaXR3aXNlX2Nhc3Q8VGhyZWFkRGF0YSo+KGN1cnJlbnRXb3JkVmFsdWUgJiB+cXVldWVIZWFk
TWFzayk7Ci0gICAgQVNTRVJUKHF1ZXVlSGVhZCk7Ci0KLSAgICBUaHJlYWREYXRhKiBuZXdRdWV1
ZUhlYWQgPSBxdWV1ZUhlYWQtPm5leHRJblF1ZXVlOwotICAgIC8vIEVpdGhlciB0aGlzIHdhcyB0
aGUgb25seSB0aHJlYWQgb24gdGhlIHF1ZXVlLCBpbiB3aGljaCBjYXNlIHdlIGRlbGV0ZSB0aGUg
cXVldWUsIG9yIHRoZXJlCi0gICAgLy8gYXJlIHN0aWxsIG1vcmUgdGhyZWFkcyBvbiB0aGUgcXVl
dWUsIGluIHdoaWNoIGNhc2Ugd2UgY3JlYXRlIGEgbmV3IHF1ZXVlIGhlYWQuCi0gICAgaWYgKG5l
d1F1ZXVlSGVhZCkKLSAgICAgICAgbmV3UXVldWVIZWFkLT5xdWV1ZVRhaWwgPSBxdWV1ZUhlYWQt
PnF1ZXVlVGFpbDsKLQotICAgIC8vIENoYW5nZSB0aGUgcXVldWUgaGVhZCwgcG9zc2libHkgcmVt
b3ZpbmcgaXQgaWYgbmV3UXVldWVIZWFkIGlzIG51bGwuIE5vIG5lZWQgZm9yIGEgQ0FTIGxvb3As
Ci0gICAgLy8gc2luY2Ugd2UgaG9sZCB0aGUgcXVldWUgbG9jayBhbmQgdGhlIGxvY2sgaXRzZWxm
IHNvIG5vdGhpbmcgYWJvdXQgdGhlIGxvY2sgY2FuIGNoYW5nZSByaWdodAotICAgIC8vIG5vdy4K
LSAgICBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKLSAgICBBU1NFUlQoY3VycmVu
dFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KTsKLSAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAm
IGlzUXVldWVMb2NrZWRCaXQpOwotICAgIEFTU0VSVCgoY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1
ZUhlYWRNYXNrKSA9PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihxdWV1ZUhlYWQpKTsKLSAgICB1
aW50cHRyX3QgbmV3V29yZFZhbHVlID0gY3VycmVudFdvcmRWYWx1ZTsKLSAgICBuZXdXb3JkVmFs
dWUgJj0gfmlzTG9ja2VkQml0OyAvLyBSZWxlYXNlIHRoZSBMb2NrLgotICAgIG5ld1dvcmRWYWx1
ZSAmPSB+aXNRdWV1ZUxvY2tlZEJpdDsgLy8gUmVsZWFzZSB0aGUgcXVldWUgbG9jay4KLSAgICBu
ZXdXb3JkVmFsdWUgJj0gcXVldWVIZWFkTWFzazsgLy8gQ2xlYXIgb3V0IHRoZSBvbGQgcXVldWUg
aGVhZC4KLSAgICBuZXdXb3JkVmFsdWUgfD0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3UXVl
dWVIZWFkKTsgLy8gSW5zdGFsbCBuZXcgcXVldWUgaGVhZC4KLSAgICBtX3dvcmQuc3RvcmUobmV3
V29yZFZhbHVlKTsKLQotICAgIC8vIE5vdyB0aGUgbG9jayBpcyBhdmFpbGFibGUgZm9yIGFjcXVp
c2l0aW9uLiBCdXQgd2UganVzdCBoYXZlIHRvIHdha2UgdXAgdGhlIG9sZCBxdWV1ZSBoZWFkLgot
ICAgIC8vIEFmdGVyIHRoYXQsIHdlJ3JlIGRvbmUhCi0KLSAgICBxdWV1ZUhlYWQtPm5leHRJblF1
ZXVlID0gbnVsbHB0cjsKLSAgICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbCA9IG51bGxwdHI7Ci0KLSAg
ICAvLyBXZSBkbyB0aGlzIGNhcmVmdWxseSBiZWNhdXNlIHRoaXMgbWF5IHJ1biBlaXRoZXIgYmVm
b3JlIG9yIGR1cmluZyB0aGUgcGFya2luZ0xvY2sgY3JpdGljYWwKLSAgICAvLyBzZWN0aW9uIGlu
IGxvY2tTbG93KCkuCi0gICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+
IGxvY2tlcihxdWV1ZUhlYWQtPnBhcmtpbmdMb2NrKTsKLSAgICAgICAgcXVldWVIZWFkLT5zaG91
bGRQYXJrID0gZmFsc2U7Ci0gICAgfQotICAgIC8vIERvZXNuJ3QgbWF0dGVyIGlmIHdlIG5vdGlm
eV9hbGwoKSBvciBub3RpZnlfb25lKCkgaGVyZSBzaW5jZSB0aGUgb25seSB0aHJlYWQgdGhhdCBj
b3VsZCBiZQotICAgIC8vIHdhaXRpbmcgaXMgcXVldWVIZWFkLgotICAgIHF1ZXVlSGVhZC0+cGFy
a2luZ0NvbmRpdGlvbi5ub3RpZnlfb25lKCk7Ci0KLSAgICAvLyBUaGUgb2xkIHF1ZXVlIGhlYWQg
Y2FuIG5vdyBjb250ZW5kIGZvciB0aGUgbG9jayBhZ2Fpbi4gV2UncmUgZG9uZSEKKyAgICAvLyBO
b3RlIHRoYXQgc29tZW9uZSBjb3VsZCB0cnkgdG8gcGFyayByaWdodCBub3cuIElmIHRoYXQgaGFw
cGVucywgdGhleSB3aWxsIHJldHVybiBpbW1lZGlhdGVseQorICAgIC8vIGJlY2F1c2Ugb3VyIHBh
cmtpbmcgcHJlZGljYXRlIGlzIHRoYXQgbV9ieXRlID09IGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJp
dCwgYnV0IHdlJ3ZlIGFscmVhZHkgc2V0CisgICAgLy8gbV9ieXRlID0gMC4KKworICAgIC8vIElm
IHRoZXJlIGhhZCBiZWVuIHRocmVhZHMgcGFya2VkLCB1bnBhcmsgYWxsIG9mIHRoZW0uIFRoaXMg
Y2F1c2VzIGEgdGh1bmRlcmluZyBoZXJkLCBidXQgd2hpbGUKKyAgICAvLyB0aGF0IGlzIHRoZW9y
ZXRpY2FsbHkgc2NhcnksIGl0J3MgdG90YWxseSBmaW5lIGluIFdlYktpdCBiZWNhdXNlIHdlIHVz
dWFsbHkgZG9uJ3QgaGF2ZSBlbm91Z2gKKyAgICAvLyB0aHJlYWRzIGZvciB0aGlzIHRvIG1hdHRl
ci4KKyAgICAvLyBGSVhNRTogV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyB0byBleGhpYml0IHRo
dW5kZXJpbmcgaGVyZC4gV2UgY291bGQgdXNlIHVucGFya09uZSgpLCBhbmQgaWYKKyAgICAvLyB0
aGF0IHJldHVybnMgdHJ1ZSwganVzdCBzZXQgdGhlIHBhcmtlZCBiaXQgYWdhaW4uIElmIGluIHRo
ZSBwcm9jZXNzIG9mIHNldHRpbmcgdGhlIHBhcmtlZCBiaXQKKyAgICAvLyB3ZSBmYWlsIHRoZSBD
QVMsIHRoZW4ganVzdCB1bnBhcmsgYWdhaW4uCisgICAgaWYgKG9sZEJ5dGVWYWx1ZSAmIGhhc1Bh
cmtlZEJpdCkKKyAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrQWxsKCZtX2J5dGUpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHJldmlzaW9uIDE4ODMwNykKKysrIFNvdXJjZS9X
VEYvd3RmL0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTA4ICszMywxOCBAQAogCiBuYW1l
c3BhY2UgV1RGIHsKIAotLy8gQSBMb2NrIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0ZXggdGhhdCBn
aXZlcyB5b3UgdGhlIGJlc3Qgb2YgU3BpbkxvY2sgYW5kIE11dGV4LiBGb3Igc21hbGwgY3JpdGlj
YWwKLS8vIHNlY3Rpb25zICh0aGF0IHRha2UgbmFub3NlY29uZHMpLCBpdCB3aWxsIHVzdWFsbHkg
cGVyZm9ybSB3aXRoaW4gMnggb2YgYSBTcGluTG9jayBpbiBib3RoIHRoZQotLy8gY29udGVuZGVk
IGFuZCB1bmNvbnRlbmRlZCBjYXNlLiBXaGVuIHVzaW5nIGEgTXV0ZXgsIHN1Y2ggY3JpdGljYWwg
c2VjdGlvbnMgdGFrZSB1cCB0byAxMDB4IGxvbmdlcgotLy8gdGhhbiBMb2NrIGluIHRoZSBjb250
ZW5kZWQgY2FzZSwgb3IgM3ggbG9uZ2VyIHRoYW4gTG9jayBpbiB0aGUgdW5jb250ZW5kZWQgY2Fz
ZS4gRm9yIGxvbmdlcgotLy8gY3JpdGljYWwgc2VjdGlvbnMgKHRoYXQgdGFrZSB0ZW5zIG9mIG1p
Y3Jvc2Vjb25kcyksIGl0IHdpbGwgcGVyZm9ybSBhcyB3ZWxsIGFzIGEgTXV0ZXggYW5kIHNsaWdo
dGx5Ci0vLyBiZXR0ZXIgdGhhbiBhIFNwaW5Mb2NrLiBCdXQsIGNydWNpYWxseSwgYSBTcGluTG9j
ayB3aWxsIGJ1cm4gdXAgdG8gOTB4IG1vcmUgdGltZSBpbiB0aGUga2VybmVsIGZvcgotLy8gc3Vj
aCBjcml0aWNhbCBzZWN0aW9ucyB0aGFuIGVpdGhlciBMb2NrIG9yIE11dGV4LiBIZW5jZSwgdXNp
bmcgTG9jayB3aWxsIG1ha2UgdGhlIGNvbW1vbiBjYXNlIG9mCi0vLyBsb2NraW5nIHBlcmZvcm0g
Y2xvc2UgdG8gU3BpbkxvY2sgZm9yIGFueSBjcml0aWNhbCBzZWN0aW9uIHRoYXQgZG9lcyBtb3Jl
IHRoYW4gYSBmZXcgbmFub3NlY29uZHMgb2YKLS8vIHdvcmsgd2hpbGUgYmVpbmcgYXMga2luZCB0
byB0aGUgc2NoZWR1bGVyIGZvciBsb25nZXIgY3JpdGljYWwgc2VjdGlvbnMgYXMgYSBNdXRleC4K
LS8vCi0vLyBMaWtlIFNwaW5Mb2NrLCBMb2NrIHRha2VzIHZlcnkgbGl0dGxlIG1lbW9yeSAtIGp1
c3Qgc2l6ZW9mKHZvaWQqKSwgdGhvdWdoIHNlZSBhIGRldGFpbGVkIGNhdmVhdAotLy8gYmVsb3cu
Ci0vLwotLy8gR2VuZXJhbGx5LCB5b3Ugc2hvdWxkIHVzZSBMb2NrIGluc3RlYWQgb2YgU3Bpbkxv
Y2sgYmVjYXVzZSB3aGlsZSBpdCBwZW5hbGl6ZXMgeW91IHNsaWdodGx5LCB5b3UKLS8vIG1ha2Ug
dXAgZm9yIGl0IGJ5IG5vdCB3YXN0aW5nIENQVSBjeWNsZXMgaW4gY2FzZSBvZiBjb250ZW50aW9u
LgotLy8KLS8vIFRoZSBMb2NrIGhhcyB0aGUgZm9sbG93aW5nIG5pY2UgcHJvcGVydGllczoKLS8v
Ci0vLyAtIFVuY29udGVuZGVkIGZhc3QgcGF0aHMgZm9yIGxvY2sgYWNxdWlzaXRpb24gYW5kIGxv
Y2sgcmVsZWFzZSB0aGF0IGFyZSBhbG1vc3QgYXMgZmFzdCBhcyB0aGUKLS8vICAgdW5jb250ZW5k
ZWQgZmFzdCBwYXRocyBvZiBhIHNwaW5sb2NrLiBUaGUgb25seSBvdmVyaGVhZCBpcyB0aGF0IHRo
ZSBzcGlubG9jayB3aWxsIG5vdCBDQVMgb24KLS8vICAgcmVsZWFzZSwgd2hpbGUgTG9jayB3aWxs
IENBUy4gVGhpcyBvdmVyaGVhZCAqY2FuKiBzbG93IHRoaW5ncyBkb3duIGZvciBleHRyZW1lbHkg
c21hbGwgY3JpdGljYWwKLS8vICAgc2VjdGlvbnMgdGhhdCBkbyBsaXR0bGUgb3Igbm90aGluZyAt
IGl0IG1ha2VzIHRoZW0gMnggc2xvd2VyIHNpbmNlIGluIHRoYXQgY2FzZSwgQ0FTIGlzIHRoZSBt
b3N0Ci0vLyAgIGV4cGVuc2l2ZSBpbnN0cnVjdGlvbiBhbmQgaGF2aW5nIHR3byBvZiB0aGVtIGlz
IHR3aWNlIGFzIGJhZCBhcyBqdXN0IGhhdmluZyBvbmUuIEhvd2V2ZXIsIHRoaXMKLS8vICAgbG9j
ayBpbXBsZW1lbnRhdGlvbiBpcyBzdGlsbCBhbG1vc3QgM3ggZmFzdGVyIHRoYW4gYSBwbGF0Zm9y
bSBtdXRleCBpbiB0aG9zZSBjYXNlcy4gSXQncyB1bmxpa2VseQotLy8gICB0aGF0IHlvdSdsbCBl
bmNvdW50ZXIgbm8tb3AgY3JpdGljYWwgc2VjdGlvbnMsIHNvIHVzdWFsbHksIHRoaXMgbG9jayBp
cyBiZXR0ZXIgdGhhbiBhIHNwaW5sb2NrLgotLy8KLS8vIC0gQ29udGVuZGVkIGZhc3QgcGF0aCB0
aGF0IGF0dGVtcHRzIHRvIHNwaW4gYW5kIHlpZWxkIGZvciBzb21lIG51bWJlciBvZiB0aW1lcy4g
Rm9yIGNyaXRpY2FsCi0vLyAgIHNlY3Rpb25zIHRoYXQgYXJlIGhlbGQgb25seSBicmllZmx5LCB0
aGlzIGFsbG93cyBMb2NrIHRvIHBlcmZvcm0gYWxtb3N0IGFzIHdlbGwgYXMgYSBTcGluTG9jay4K
LS8vICAgU3BpbkxvY2sgY2FuIHN0aWxsIGJlIGFsbW9zdCAyeCBmYXN0ZXIgdGhhbiBMb2NrIGlm
IHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGEgbm8tb3AsIGJ1dCB0aGlzCi0vLyAgIGFkdmFudGFn
ZSBkaW1pbmlzaGVzIGFzIHRoZSBjcml0aWNhbCBzZWN0aW9uIGdyb3dzLgotLy8KLS8vIC0gQ29u
dGVuZGVkIHNsb3cgcGF0aCB0aGF0IGVucXVldWVzIHRoZSBjb250ZW5kaW5nIHRocmVhZCBhbmQg
Y2F1c2VzIGl0IHRvIHdhaXQgb24gYSBjb25kaXRpb24KLS8vICAgdmFyaWFibGUgdW50aWwgdGhl
IGxvY2sgaXMgcmVsZWFzZWQuIFRoaXMgaXMgdGhlIG9ubHkgY2FzZSBpbiB3aGljaCBzeXN0ZW0g
bXV0ZXhlcyBhbmQgY29uZGl0aW9uCi0vLyAgIHZhcmlhYmxlcyBhcmUgdXNlZC4gVGhpcyBjYXNl
IGlzIHJhcmUgYW5kIHNlbGYtbGltaXRpbmc6IGl0IHdpbGwgb25seSBoYXBwZW4gd2hlbiBhIGxv
Y2sgaXMgaGVsZAotLy8gICBmb3IgbG9uZyBlbm91Z2ggdGhhdCBzcGlubmluZyBzb21lIG51bWJl
ciBvZiB0aW1lcyBkb2Vzbid0IGFjcXVpcmUgaXQuIFRoZSBmYWN0IHRoYXQgTG9jayBkb2VzCi0v
LyAgIHRoaXMgYXMgYSBmYWxsYmFjayB3aGVuIHNwaW5uaW5nIGZvciBzb21lIG51bWJlciBvZiB0
aW1lcyBmYWlscyBtZWFucyB0aGF0IGl0IHdpbGwgYnVybgotLy8gICBkcmFtYXRpY2FsbHkgZmV3
ZXIgQ1BVIGN5Y2xlcyAtIGZvciBleGFtcGxlIHdpdGggMTAgdGhyZWFkcyBvbiBhbiA4IGxvZ2lj
YWwgQ1BVIG1hY2hpbmUgYWNxdWlyaW5nCi0vLyAgIGEgY3JpdGljYWwgc2VjdGlvbiB0aGF0IHRh
a2VzIDUwIG1pY3Jvc2Vjb25kcywgdGhlIFdURiBTcGluTG9jayB3aWxsIGNhdXNlIDkweCBtb3Jl
IHRpbWUgdG8gYmUKLS8vICAgc3BlbnQgaW4gdGhlIGtlcm5lbCB0aGFuIExvY2suCi0vLwotLy8g
LSBWZXJ5IGxvdyBtZW1vcnkgdXNhZ2UuIEVhY2ggTG9jayByZXF1aXJlcyBvbmx5IHNpemVvZih2
b2lkKikgbWVtb3J5LiBXaGVuIHRoZSBjb250ZW5kZWQgc2xvdwotLy8gICBwYXRoIGlzIGFjdGl2
YXRlZCwgTG9jayBvbmx5IHJlbGllcyBvbiBlYWNoIHRocmVhZCBoYXZpbmcgYSBwcmVhbGxvY2F0
ZWQgdGhyZWFkLXNwZWNpZmljIGRhdGEKLS8vICAgc3RydWN0dXJlIGNhbGxlZCBUaHJlYWREYXRh
IHRoYXQsIHRvZ2V0aGVyIHdpdGggdGhlIExvY2sgaXRzZWxmLCBpcyB1c2VkIHRvIGJ1aWxkIHVw
IGEgdGhyZWFkCi0vLyAgIHF1ZXVlLiBTbywgdGhlIHRvdGFsIG1lbW9yeSB1c2FnZSBvZiBhbGwg
TG9ja3MgaXMgc3RpbGwgYm91bmRlZCBieToKLS8vCi0vLyAgICAgICBudW1iZXJPZkxvY2tzICog
c2l6ZW9mKHZvaWQqKSArIG51bWJlck9mVGhyZWFkcyAqIHNpemVvZihUaHJlYWREYXRhKQotLy8K
LS8vICAgV2hlcmUgVGhyZWFkRGF0YSBpcyBhIGRlY2VudGx5IGxhcmdlIGRhdGEgc3RydWN0dXJl
LCBidXQgd2Ugd2lsbCBvbmx5IGV2ZXIgaGF2ZSBvbmUgcGVyIHRocmVhZCwKLS8vICAgcmVnYXJk
bGVzcyBvZiB0aGUgbnVtYmVyIG9mIExvY2tzIGluIG1lbW9yeS4gQW5vdGhlciB3YXkgdG8gdmll
dyB0aGlzIGlzIHRoYXQgdGhlIHdvcnN0IGNhc2UKLS8vICAgbWVtb3J5IHVzYWdlIHBlciBMb2Nr
IGlzOgotLy8KLS8vICAgICAgIHNpemVvZih2b2lkKikgKyBudW1iZXJPZlRocmVhZHMgLyBudW1i
ZXJPZkxvY2tzICogc2l6ZW9mKFRocmVhZERhdGEpCi0vLwotLy8gICBTbywgdW5sZXNzIHlvdSBo
YXZlIGEgc21hbGwgbnVtYmVyIG9mIExvY2tzIChvciwgYSBsYXJnZSBudW1iZXIgb2YgdGhyZWFk
cywgd2hpY2ggaXMgZmFyIGxlc3MKLS8vICAgbGlrZWx5KSwgdGhlIG1lbW9yeSB1c2FnZSBwZXIt
TG9jayBpcyBzdGlsbCBnb2luZyB0byBiZSBzb21ld2hlcmUgYXJvdW5kIHNpemVvZih2b2lkKiku
Ci0vLwotLy8gLSBCYXJnaW5nIGZhc3QgcGF0aHMuIFRoZSBMb2NrIGlzIHR1bmVkIGZvciBtYXhp
bXVtIHRocm91Z2hwdXQgcmF0aGVyIHRoYW4gbWF4aW11bSBmYWlybmVzcy4gSWYKLS8vICAgYSB0
aHJlYWQgcmVsZWFzZXMgYSBMb2NrIHRoYXQgd2FzIGNvbnRlbmRlZCBhbmQgaGFkIGEgcXVldWUg
b2Ygd2FpdGluZyB0aHJlYWRzLCB0aGVuIGl0IHdpbGwKLS8vICAgd2FrZSB1cCB0aGUgaGVhZCBv
ZiB0aGUgcXVldWUsIGJ1dCBpdCB3aWxsIGFsc28gbWFyayB0aGUgbG9jayBhcyBiZWluZyBhdmFp
bGFibGUuIFRoaXMgbWVhbnMgdGhhdAotLy8gICBzb21lIG90aGVyIHRocmVhZCB0aGF0IGlzIGp1
c3Qgbm93IGF0dGVtcHRpbmcgdG8gYWNxdWlyZSB0aGUgbG9jayBtYXkgZ2V0IGl0IGJlZm9yZSB0
aGUgdGhyZWFkCi0vLyAgIHRoYXQgZ290IHdva2VuIHVwLiBXaGVuIGEgdGhyZWFkIGJhcmdlcyBp
bnRvIHRoZSBsb2NrLCB0aGUgdGhyZWFkIHRoYXQgZ290IHdva2VuIHVwIHdpbGwgc2ltcGx5Ci0v
LyAgIGdvIGJhY2sgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuIFRoZSBiYXJnaW5nIGJlaGF2aW9y
IGVuZHMgdXAgYmVpbmcgcHJvYmFiaWxpc3RpYyBvbiBtb3N0Ci0vLyAgIHBsYXRmb3JtcyBhbmQg
ZXZlbiB0aG91Z2ggaXQgbWF5IGJlIHVuZmFpciB0byBzb21lIHRocmVhZCBhdCBzb21lIG1vbWVu
dCBpbiB0aW1lLCBpdCB3aWxsIHJhcmVseQotLy8gICBoYXZlIGEgbG9uZyBzdHJlYWsgb2YgdW5m
YWlybmVzcyB0b3dhcmRzIGFueSBwYXJ0aWN1bGFyIHRocmVhZDogZXZlbnR1YWxseSBlYWNoIHRo
cmVhZCB3YWl0aW5nIG9uCi0vLyAgIHRoZSBsb2NrIHdpbGwgZ2V0IHRvIGhhdmUgYSB0dXJuIHNv
IGxvbmcgYXMgbm8gdGhyZWFkIGp1c3QgaG9sZHMgdGhlIGxvY2sgZm9yZXZlci4gVGhhdCBzYWlk
LAotLy8gICB0aGVyZSAqaXMqIGEgY2hhbmNlIG9mIHBhdGhvbG9naWVzIC0gdXNlcnMgb2YgTG9j
ayBzaG91bGQgbm90IGRlcGVuZCBvbiBmaXJzdC1pbiwgZmlyc3Qtb3V0IGxvY2sKLS8vICAgYWNx
dWlzaXRpb24gb3JkZXIgdW5kZXIgY29udGVudGlvbi4gVGhlIHNhbWUgY2F2ZWF0IGlzIGdlbmVy
YWxseSB0cnVlIG9mIFNwaW5Mb2NrIGFuZCBwbGF0Zm9ybQotLy8gICBtdXRleGVzIG9uIHNvbWUg
cGxhdGZvcm1zLgotCi0vLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIExvY2sgbW9yZSBlZmZp
Y2llbnQgYnkgdXNpbmcgUGFya2luZ0xvdCBhbmQgYXRvbWljIGFkZCBpbnN0ZWFkIG9mIENBUy4K
LS8vIFRoZSBsb2NrIHdvdWxkIGJlIGF2YWlsYWJsZSBpZiB0aGUgMzItYml0IGxvY2sgd29yZCA8
PSAxLiBMb2NraW5nIHdvdWxkIGF0b21pY2FsbHkgYWRkIDIgdG8gdGhlCi0vLyB3b3JkLiBUaGUg
bG9jayB3b3VsZCBiZSBrbm93biB0byBiZSBoZWxkIGlmIHRoZSBvbGQgdmFsdWUgb2YgdGhlIHdv
cmQgd2FzIDw9IDEuIFRoZSBsb3cgYml0Ci0vLyBqdXN0IGluZGljYXRlcyBpZiBhbnlvbmUgaXMg
d2FpdGluZy4gSWYgdGhlIHdvcmQgd2FzID49IDIgYWZ0ZXIgdGhlIGF0b21pYyBhZGQsIHdlIHdv
dWxkIGdvIHRvIGEKLS8vIHNsb3cgcGF0aCB0aGF0IHJlcGVhdGVkbHkgYXR0ZW1wdHMgdG8gc2V0
IHRoZSBsb2NrIHdvcmQgdG8gMyBbc2ljXSBmcm9tIDAgb3IgMSwgYW5kIHBhcmtzIGlmIHRoYXQn
cwotLy8gbm90IHBvc3NpYmxlLiBUaGUgc2xvdyBwYXRoIGNvdWxkIGFsc28gcGVyZm9ybSBkZWZl
bnNpdmUgZml4dXAgdGhhdCBkcm9wcyB0aGUgbG9jayB2YWx1ZSBkb3duIHRvCi0vLyAzIGlmIGl0
IHdhcyBncmVhdGVyIHRoYW4gMywgYW55dGltZSB0aGF0IGl0IG5lZWRlZCB0byBnbyB0byBwYXJr
LiBUaGUgdW5sb2NrIGZhc3QgcGF0aCB3b3VsZAotLy8gYXRvbWljYWxseSBzdWJ0cmFjdCAyLiBJ
ZiB0aGUgZGVjcmVtZW50IG9wZXJhdGlvbiBkb2VzIG5vdCBjYXVzZSB0aGUgY291bnQgdG8gemVy
bywgaXQgd291bGQgZ28gdG8KLS8vIGEgc2xvdyBwYXRoLiBUaGUgc2xvdyBwYXRoIHdvdWxkIHVu
cGFyayBvbmUuIElmIHVucGFya2luZyByZXR1cm5zIGZhbHNlLCB0aGUgc2xvdyBwYXRoIHdvdWxk
Ci0vLyBhdHRlbXB0IGEgc3Ryb25nIENBUyBmcm9tIDEgdG8gMC4gSXQgd291bGRuJ3QgZG8gYW55
dGhpbmcgaWYgdGhlIENBUyBmYWlscywgc2luY2UgdGhlIG9ubHkgZ29hbCBvZgotLy8gdGhhdCBD
QVMgaXMgdG8gdGVsbCBmdXR1cmUgdW5sb2NrIGZhc3QgcGF0aHMgdGhhdCB0aGVyZSBpcyBwb3Nz
aWJseSBhIHRocmVhZCBwYXJrZWQuIEFzIHN1Y2ggdGhlCi0vLyBzdGF0ZXMgb2YgdGhlIGxvY2sg
YXJlOgotLy8KLS8vICAgMDogbG9jayBhdmFpbGFibGUgYW5kIG5vYm9keSB3YWl0aW5nCi0vLyAg
IDE6IGxvY2sgYXZhaWxhYmxlIGFuZCB0aGVyZSBtYXkgYmUgdGhyZWFkcyB3YWl0aW5nCi0vLyAg
IDI6IGxvY2sgdGFrZW4gYW5kIG5vIHRocmVhZHMgd2FpdGluZwotLy8gPj0zOiBsb2NrIHRha2Vu
IGFuZCB0aHJlYWRzIHdhaXRpbmcKLS8vCi0vLyBJdCBtYXkgYmUgcG9zc2libGUgdG8gZGVzaWdu
IGFuIGV2ZW4gYmV0dGVyIGxvY2sgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gYXRvbWljIGluY3Jl
bWVudHMgcmF0aGVyCi0vLyB0aGFuIGF0b21pYyArPTIvLT0yLgotLy8KLS8vIE5vdGUgdGhhdCBi
ZWNhdXNlIFBhcmtpbmdMb3QgdXNlcyB0aGlzIGxvY2sgaW50ZXJuYWxseSwgd2Ugd291bGQgcHJv
YmFibHkgcmVuYW1lIHRoaXMgbG9jawotLy8gaW1wbGVtZW50YXRpb24gdG8gc29tZXRoaW5nIGxp
a2UgQm9vdHN0cmFwTG9jayBvciBldmVuIG1ha2UgaXQgcGFydCBvZiBhbiBhbm9ueW1vdXMgbmFt
ZXNwYWNlCi0vLyBpbnNpZGUgUGFya2luZ0xvdC4KLS8vCi0vLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3ODQxCisvLyBUaGlzIGlzIGEgZnVsbHkgYWRhcHRpdmUg
bXV0ZXggdGhhdCBvbmx5IHJlcXVpcmVzIDEgYnl0ZSBvZiBzdG9yYWdlLiBJdCBoYXMgZmFzdCBw
YXRocyB0aGF0IGFyZQorLy8gY29tcGV0ZXRpdmUgdG8gU3BpbkxvY2sgKHVuY29udGVuZGVkIGxv
Y2tpbmcgaXMgaW5saW5lZCBhbmQgaXMganVzdCBhIENBUywgbWljcm9jb250ZW50aW9uIGlzCisv
LyBoYW5kbGVkIGJ5IHNwaW5uaW5nIGFuZCB5aWVsZGluZyksIGFuZCBhIHNsb3cgcGF0aCB0aGF0
IGlzIGNvbXBldGV0aXZlIHRvIE11dGV4IChpZiBhIGxvY2sgY2Fubm90CisvLyBiZSBhY3F1aXJl
ZCBpbiBhIHNob3J0IHBlcmlvZCBvZiB0aW1lLCB0aGUgdGhyZWFkIGlzIHB1dCB0byBzbGVlcCB1
bnRpbCB0aGUgbG9jayBpcyBhdmFpbGFibGUKKy8vIGFnYWluKS4gSXQgdXNlcyBsZXNzIG1lbW9y
eSB0aGFuIGVpdGhlciBTcGluTG9jayBvciBNdXRleC4KIAogLy8gVGhpcyBpcyBhIHN0cnVjdCB3
aXRob3V0IGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3RvciBzbyB0aGF0IGl0IGNhbiBiZSBzdGF0
aWNhbGx5IGluaXRpYWxpemVkLgogLy8gVXNlIExvY2sgaW4gaW5zdGFuY2UgdmFyaWFibGVzLgog
c3RydWN0IExvY2tCYXNlIHsKICAgICB2b2lkIGxvY2soKQogICAgIHsKLSAgICAgICAgaWYgKExJ
S0VMWShtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0xvY2tlZEJpdCwgc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSkpKSB7CisgICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVF
eGNoYW5nZVdlYWsoMCwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpIHsK
ICAgICAgICAgICAgIC8vIExvY2sgYWNxdWlyZWQhCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTE0NCw4ICs1NCw4IEBAIHN0cnVjdCBMb2NrQmFzZSB7CiAKICAgICB2b2lkIHVu
bG9jaygpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VX
ZWFrKGlzTG9ja2VkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsKLSAgICAg
ICAgICAgIC8vIExvY2sgcmVsZWFzZWQsIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCisgICAgICAg
IGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsKKyAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQg
YW5kIG5vYm9keSB3YXMgd2FpdGluZyEKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkBAIC0xNTQsNyArNjQsNyBAQCBzdHJ1Y3QgTG9ja0Jhc2UgewogCiAgICAgYm9vbCBpc0hlbGQo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fd29yZC5sb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcXVpcmUpICYgaXNMb2NrZWRCaXQ7CisgICAgICAgIHJldHVybiBtX2J5dGUubG9hZChz
dGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzSGVsZEJpdDsKICAgICB9CiAKICAgICBib29s
IGlzTG9ja2VkKCkgY29uc3QKQEAgLTE2MywxNCArNzMsMTMgQEAgc3RydWN0IExvY2tCYXNlIHsK
ICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGlzTG9ja2Vk
Qml0ID0gMTsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGlzUXVldWVMb2NrZWRCaXQgPSAy
OwotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcXVldWVIZWFkTWFzayA9IDM7CisgICAgc3Rh
dGljIGNvbnN0IHVpbnQ4X3QgaXNIZWxkQml0ID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdWludDhf
dCBoYXNQYXJrZWRCaXQgPSAyOwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Ns
b3coKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CiAKLSAgICBB
dG9taWM8dWludHB0cl90PiBtX3dvcmQ7CisgICAgQXRvbWljPHVpbnQ4X3Q+IG1fYnl0ZTsKIH07
CiAKIGNsYXNzIExvY2sgOiBwdWJsaWMgTG9ja0Jhc2UgewpAQCAtMTc4LDcgKzg3LDcgQEAgY2xh
c3MgTG9jayA6IHB1YmxpYyBMb2NrQmFzZSB7CiBwdWJsaWM6CiAgICAgTG9jaygpCiAgICAgewot
ICAgICAgICBtX3dvcmQuc3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAg
ICAgIG1fYnl0ZS5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKICAgICB9CiB9
OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAkocmV2aXNpb24gMTg4MzA3KQorKysgU291cmNl
L1dURi93dGYvUGFya2luZ0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDkgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYXJraW5nTG90LmgiCiAKKyNpbmNsdWRl
ICJCYXNpY0xvY2suaCIKICNpbmNsdWRlICJEYXRhTG9nLmgiCiAjaW5jbHVkZSAiSGFzaEZ1bmN0
aW9ucy5oIgotI2luY2x1ZGUgIkxvY2suaCIKICNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5o
IgogI2luY2x1ZGUgIlRocmVhZFNwZWNpZmljLmgiCiAjaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0
aXZlcy5oIgpAQCAtMTcwLDcgKzE3MCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRoaXMgbG9jayBw
cm90ZWN0cyB0aGUgZW50aXJlIGJ1Y2tldC4gVGhvdSBzaGFsbCBub3QgbWFrZSBjaGFuZ2VzIHRv
IEJ1Y2tldCB3aXRob3V0IGhvbGRpbmcKICAgICAvLyB0aGlzIGxvY2suCi0gICAgTG9jayBsb2Nr
OworICAgIEJhc2ljTG9jayBsb2NrOwogCiAgICAgLy8gUHV0IHNvbWUgZGlzdGFuZSBiZXR3ZWVu
IGJ1Y2tldHMgaW4gbWVtb3J5LiBUaGlzIGlzIG9uZSBvZiBzZXZlcmFsIG1pdGlnYXRpb25zIGFn
YWluc3QgZmFsc2UKICAgICAvLyBzaGFyaW5nLgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MzA3KQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDgtMTEgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBBbHdheXMgdXNlIGEgYnl0ZS1z
aXplZCBsb2NrIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDc5MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBbGwgcHJldmlvdXMgdGVzdHMgb2YgTG9jayBhcmUgbm93IHRlc3Rz
IG9mIEJhc2ljTG9jay4gQWxsIHByZXZpb3VzIHRlc3RzIG9mIEJ5dGVMb2NrIGFyZQorICAgICAg
ICBub3cgdGVzdHMgb2YgTG9jay4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0xvY2suY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cnVuTG9ja1Rlc3QpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTUtMDgtMTEgIEphc29uIE1hcmNlbGwgIDxq
bWFyY2VsbEBhcHBsZS5jb20+CiAKICAgICAgICAgU3Vic3RpdHV0ZWQgRGFzaGJvYXJkLlJlcG9z
aXRvcnkuT3BlblNvdXJjZS50cmFjIGZvciB3ZWJraXRUcmFjIGFuZCBEYXNoYm9hcmQuUmVwb3Np
dG9yeS5JbnRlcm5hbC50cmFjCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9M
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2Nr
LmNwcAkocmV2aXNpb24gMTg4MzA3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
TG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL0J5dGVMb2NrLmg+CisjaW5jbHVkZSA8d3RmL0Jh
c2ljTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CkBAIC02OCw2OSArNjgs
NjkgQEAgdm9pZCBydW5Mb2NrVGVzdCh1bnNpZ25lZCBudW1UaHJlYWRHcm91cAogICAgICAgICBF
WFBFQ1RfRVEoZXhwZWN0ZWQsIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdKTsKIH0KIAotVEVTVChX
VEZfTG9jaywgVW5jb250ZW50ZWRTaG9ydFNlY3Rpb24pCitURVNUKFdURl9CYXNpY0xvY2ssIFVu
Y29udGVudGVkU2hvcnRTZWN0aW9uKQogewotICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEsIDEs
IDEwMDAwMDAwKTsKKyAgICBydW5Mb2NrVGVzdDxCYXNpY0xvY2s+KDEsIDEsIDEsIDEwMDAwMDAw
KTsKIH0KIAotVEVTVChXVEZfTG9jaywgVW5jb250ZW50ZWRMb25nU2VjdGlvbikKK1RFU1QoV1RG
X0Jhc2ljTG9jaywgVW5jb250ZW50ZWRMb25nU2VjdGlvbikKIHsKLSAgICBydW5Mb2NrVGVzdDxM
b2NrPigxLCAxLCAxMDAwMCwgMTAwMCk7CisgICAgcnVuTG9ja1Rlc3Q8QmFzaWNMb2NrPigxLCAx
LCAxMDAwMCwgMTAwMCk7CiB9CiAKLVRFU1QoV1RGX0xvY2ssIENvbnRlbnRlZFNob3J0U2VjdGlv
bikKK1RFU1QoV1RGX0Jhc2ljTG9jaywgQ29udGVudGVkU2hvcnRTZWN0aW9uKQogewotICAgIHJ1
bkxvY2tUZXN0PExvY2s+KDEsIDEwLCAxLCAxMDAwMDAwMCk7CisgICAgcnVuTG9ja1Rlc3Q8QmFz
aWNMb2NrPigxLCAxMCwgMSwgMTAwMDAwMDApOwogfQogCi1URVNUKFdURl9Mb2NrLCBDb250ZW50
ZWRMb25nU2VjdGlvbikKK1RFU1QoV1RGX0Jhc2ljTG9jaywgQ29udGVudGVkTG9uZ1NlY3Rpb24p
CiB7Ci0gICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMSwgMTAsIDEwMDAwLCAxMDAwMCk7CisgICAgcnVu
TG9ja1Rlc3Q8QmFzaWNMb2NrPigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKIH0KIAotVEVTVChXVEZf
TG9jaywgTWFueUNvbnRlbnRlZFNob3J0U2VjdGlvbnMpCitURVNUKFdURl9CYXNpY0xvY2ssIE1h
bnlDb250ZW50ZWRTaG9ydFNlY3Rpb25zKQogewotICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAx
MCwgMSwgNTAwMDAwKTsKKyAgICBydW5Mb2NrVGVzdDxCYXNpY0xvY2s+KDEwLCAxMCwgMSwgNTAw
MDAwKTsKIH0KIAotVEVTVChXVEZfTG9jaywgTWFueUNvbnRlbnRlZExvbmdTZWN0aW9ucykKK1RF
U1QoV1RGX0Jhc2ljTG9jaywgTWFueUNvbnRlbnRlZExvbmdTZWN0aW9ucykKIHsKLSAgICBydW5M
b2NrVGVzdDxMb2NrPigxMCwgMTAsIDEwMDAwLCAxMDAwKTsKKyAgICBydW5Mb2NrVGVzdDxCYXNp
Y0xvY2s+KDEwLCAxMCwgMTAwMDAsIDEwMDApOwogfQogCi1URVNUKFdURl9CeXRlTG9jaywgVW5j
b250ZW50ZWRTaG9ydFNlY3Rpb24pCitURVNUKFdURl9Mb2NrLCBVbmNvbnRlbnRlZFNob3J0U2Vj
dGlvbikKIHsKLSAgICBydW5Mb2NrVGVzdDxCeXRlTG9jaz4oMSwgMSwgMSwgMTAwMDAwMDApOwor
ICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEsIDEsIDEwMDAwMDAwKTsKIH0KIAotVEVTVChXVEZf
Qnl0ZUxvY2ssIFVuY29udGVudGVkTG9uZ1NlY3Rpb24pCitURVNUKFdURl9Mb2NrLCBVbmNvbnRl
bnRlZExvbmdTZWN0aW9uKQogewotICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxLCAxLCAxMDAw
MCwgMTAwMCk7CisgICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMSwgMSwgMTAwMDAsIDEwMDApOwogfQog
Ci1URVNUKFdURl9CeXRlTG9jaywgQ29udGVudGVkU2hvcnRTZWN0aW9uKQorVEVTVChXVEZfTG9j
aywgQ29udGVudGVkU2hvcnRTZWN0aW9uKQogewotICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigx
LCAxMCwgMSwgMTAwMDAwMDApOworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEwLCAxLCAxMDAw
MDAwMCk7CiB9CiAKLVRFU1QoV1RGX0J5dGVMb2NrLCBDb250ZW50ZWRMb25nU2VjdGlvbikKK1RF
U1QoV1RGX0xvY2ssIENvbnRlbnRlZExvbmdTZWN0aW9uKQogewotICAgIHJ1bkxvY2tUZXN0PEJ5
dGVMb2NrPigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAx
MCwgMTAwMDAsIDEwMDAwKTsKIH0KIAotVEVTVChXVEZfQnl0ZUxvY2ssIE1hbnlDb250ZW50ZWRT
aG9ydFNlY3Rpb25zKQorVEVTVChXVEZfTG9jaywgTWFueUNvbnRlbnRlZFNob3J0U2VjdGlvbnMp
CiB7Ci0gICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEwLCAxMCwgMSwgNTAwMDAwKTsKKyAgICBy
dW5Mb2NrVGVzdDxMb2NrPigxMCwgMTAsIDEsIDUwMDAwMCk7CiB9CiAKLVRFU1QoV1RGX0J5dGVM
b2NrLCBNYW55Q29udGVudGVkTG9uZ1NlY3Rpb25zKQorVEVTVChXVEZfTG9jaywgTWFueUNvbnRl
bnRlZExvbmdTZWN0aW9ucykKIHsKLSAgICBydW5Mb2NrVGVzdDxCeXRlTG9jaz4oMTAsIDEwLCAx
MDAwMCwgMTAwMCk7CisgICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMTAsIDEwLCAxMDAwMCwgMTAwMCk7
CiB9CiAKLVRFU1QoV1RGX0J5dGVMb2NrLCBTZWN0aW9uQWRkcmVzc0NvbGxpc2lvbikKK1RFU1Qo
V1RGX0xvY2ssIFNlY3Rpb25BZGRyZXNzQ29sbGlzaW9uKQogewotICAgIHJ1bkxvY2tUZXN0PEJ5
dGVMb2NrPig0LCAyLCAxMDAwMCwgMjAwMCk7CisgICAgcnVuTG9ja1Rlc3Q8TG9jaz4oNCwgMiwg
MTAwMDAsIDIwMDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258778</attachid>
            <date>2015-08-11 16:33:40 -0700</date>
            <delta_ts>2015-08-11 20:14:57 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>65898</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MzA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDE1LTA4LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWx3YXlzIHVzZSBhIGJ5dGUtc2l6ZWQgbG9jayBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3OTA4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0NvbmN1cnJlbnRK
SVRMb2NrLmg6IExvY2sgaXMgbm93IGJ5dGUtc2l6ZWQgYW5kIEJ5dGVMb2NrIGlzIGdvbmUsIHNv
IHVzZSBMb2NrLgorCiAyMDE1LTA4LTExICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBnZXRfYnlfaWQgbGlrZSBJQyBpbnRvIGdldF9i
eV92YWwgd2hlbiB0aGUgZ2l2ZW4gbmFtZSBpcyBTdHJpbmcgb3IgU3ltYm9sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgJKHJl
dmlzaW9uIDE4ODMwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJl
bnRKSVRMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE0ICsyNywxNCBAQAogI2RlZmluZSBD
b25jdXJyZW50SklUTG9ja19oCiAKICNpbmNsdWRlICJEZWZlckdDLmgiCi0jaW5jbHVkZSA8d3Rm
L0J5dGVMb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9Mb2Nr
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQotdHlw
ZWRlZiBCeXRlTG9jayBDb25jdXJyZW50SklUTG9jazsKLXR5cGVkZWYgQnl0ZUxvY2tlciBDb25j
dXJyZW50SklUTG9ja2VySW1wbDsKK3R5cGVkZWYgTG9jayBDb25jdXJyZW50SklUTG9jazsKK3R5
cGVkZWYgTG9ja0hvbGRlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKICNlbHNlCiB0eXBlZGVm
IE5vTG9jayBDb25jdXJyZW50SklUTG9jazsKIHR5cGVkZWYgTm9Mb2NrTG9ja2VyIENvbmN1cnJl
bnRKSVRMb2NrZXJJbXBsOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODMwOSkKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTUtMDgtMTEgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBBbHdheXMgdXNlIGEgYnl0
ZS1zaXplZCBsb2NrIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc5MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBdCB0aGUgc3RhcnQgb2YgbXkgbG9ja2luZyBhbGdvcml0aG0g
Y3J1c2FkZSwgSSBpbXBsZW1lbnRlZCBMb2NrLCB3aGljaCBpcyBhIHNpemVvZih2b2lkKikKKyAg
ICAgICAgbG9jayBpbXBsZW1lbnRhdGlvbiB3aXRoIHNvbWUgbmljZSB0aGVvcmV0aWNhbCBwcm9w
ZXJ0aWVzIGFuZCBnb29kIHBlcmZvcm1hbmNlLiBUaGVuIEkgYWRkZWQKKyAgICAgICAgdGhlIFBh
cmtpbmdMb3QgYWJzdHJhY3Rpb24gYW5kIEJ5dGVMb2NrLiBQYXJraW5nTG90IHVzZXMgTG9jayBp
biBpdHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgIEJ5dGVMb2NrIHVzZXMgUGFya2luZ0xvdCB0
byBjcmVhdGUgYSBzaXplb2YoY2hhcikgbG9jayBpbXBsZW1lbnRhdGlvbiB0aGF0IHBlcmZvcm1z
IGxpa2UKKyAgICAgICAgTG9jay4KKworICAgICAgICBJdCB0dXJucyBvdXQgdGhhdCBCeXRlTG9j
ayBpcyBhbHdheXMgYXQgbGVhc3QgYXMgZ29vZCBhcyBMb2NrLCBhbmQgc29tZXRpbWVzIGEgbG90
IGJldHRlcjoKKyAgICAgICAgaXQgcmVxdWlyZXMgOHggbGVzcyBtZW1vcnkgb24gNjQtYml0IHN5
c3RlbXMuIEl0J3MgaGFyZCB0byBjb25zdHJ1Y3QgYSBiZW5jaG1hcmsgd2hlcmUKKyAgICAgICAg
Qnl0ZUxvY2sgaXMgc2lnbmlmaWNhbnRseSBzbG93ZXIgdGhhbiBMb2NrLCBhbmQgd2hlbiB5b3Ug
ZG8gY29uc3RydWN0IHN1Y2ggYSBiZW5jaG1hcmssCisgICAgICAgIHR3ZWFraW5nIGl0IGEgYml0
IGNhbiBhbHNvIGNyZWF0ZSBhIHNjZW5hcmlvIHdoZXJlIEJ5dGVMb2NrIGlzIHNpZ25pZmljYW50
bHkgZmFzdGVyIHRoYW4KKyAgICAgICAgTG9jay4KKworICAgICAgICBTbywgdGhlIHRoaW5nIHRo
YXQgd2UgY2FsbCAiTG9jayIgc2hvdWxkIHJlYWxseSB1c2UgQnl0ZUxvY2sncyBhbGdvcml0aG0s
IHNpbmNlIGl0IGlzIG1vcmUKKyAgICAgICAgY29tcGFjdCBhbmQganVzdCBhcyBmYXN0LiBUaGF0
J3Mgd2hhdCB0aGlzIHBhdGNoIGRvZXMuCisKKyAgICAgICAgQnV0IHdlIHN0aWxsIG5lZWQgdG8g
a2VlcCB0aGUgb2xkIExvY2sgYWxnb3JpdGhtLCBiZWNhdXNlIGl0J3MgdXNlZCB0byBpbXBsZW1l
bnQgUGFya2luZ0xvdCwKKyAgICAgICAgd2hpY2ggaW4gdHVybiBpcyB1c2VkIHRvIGltcGxlbWVu
dCBCeXRlTG9jay4gU28gdGhpcyBwYXRjaCBkb2VzIHRoaXMgdHJhbnNmb3JtYXRpb246CisKKyAg
ICAgICAgLSBNb3ZlIHRoZSBhbGdvcml0aG0gaW4gTG9jayBpbnRvIGZpbGVzIGNhbGxlZCBCYXNp
Y0xvY2suaHxjcHAuIE1ha2UgUGFya2luZ0xvdCB1c2UKKyAgICAgICAgICBCYXNpY0xvY2suCisK
KyAgICAgICAgLSBNb3ZlIHRoZSBhbGdvcml0aG0gaW4gQnl0ZUxvY2sgaW50byBMb2NrLmh8Y3Bw
LiBNYWtlIGV2ZXJ5b25lIHdobyB1c2VkIEJ5dGVMb2NrIHVzZSBMb2NrCisgICAgICAgICAgaW5z
dGVhZC4gQWxsIG90aGVyIHVzZXJzIG9mIExvY2sgbm93IGdldCB0aGUgYnl0ZS1zaXplZCBsb2Nr
IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIC0gUmVtb3ZlIHRoZSBvbGQgQnl0ZUxvY2sgZmls
ZXMuCisKKyAgICAgICAgKiBXVEYudmN4cHJvai9XVEYudmN4cHJvajoKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tTcGVl
ZFRlc3QuY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd3RmL0Jhc2ljTG9jay5jcHA6
IEFkZGVkLgorICAgICAgICAoV1RGOjpCYXNpY0xvY2s6OmxvY2tTbG93KToKKyAgICAgICAgKFdU
Rjo6QmFzaWNMb2NrOjp1bmxvY2tTbG93KToKKyAgICAgICAgKiB3dGYvQmFzaWNMb2NrLmg6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpCYXNpY0xvY2s6OkJhc2ljTG9jayk6CisgICAgICAgIChXVEY6
OkJhc2ljTG9jazo6bG9jayk6CisgICAgICAgIChXVEY6OkJhc2ljTG9jazo6dW5sb2NrKToKKyAg
ICAgICAgKFdURjo6QmFzaWNMb2NrOjppc0hlbGQpOgorICAgICAgICAoV1RGOjpCYXNpY0xvY2s6
OmlzTG9ja2VkKToKKyAgICAgICAgKiB3dGYvQnl0ZUxvY2suY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHd0Zi9CeXRlTG9jay5oOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2Nr
U2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1bmxvY2tTbG93KToKKyAgICAgICAgKiB3
dGYvTG9jay5oOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6bG9jayk6CisgICAgICAgIChXVEY6
OkxvY2tCYXNlOjp1bmxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6aXNIZWxkKToKKyAg
ICAgICAgKFdURjo6TG9ja0Jhc2U6OmlzTG9ja2VkKToKKyAgICAgICAgKFdURjo6TG9jazo6TG9j
ayk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuY3BwOgorCiAyMDE1LTA4LTExICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIEJ5dGVTcGluTG9jawpJ
bmRleDogU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCShyZXZpc2lvbiAxODgzMDkpCisrKyBT
b3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQg
KzEsNCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzw/eG1s
IHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8UHJvamVjdCBEZWZhdWx0VGFyZ2V0
cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jv
c29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVtR3JvdXAgTGFiZWw9IlBy
b2plY3RDb25maWd1cmF0aW9ucyI+CiAgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9
IkRlYnVnU3VmZml4fFdpbjMyIj4KQEAgLTUyLDggKzUyLDggQEAKICAgPC9JdGVtR3JvdXA+CiAg
IDxJdGVtR3JvdXA+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcQXNzZXJ0aW9ucy5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcQmFzaWNMb2NrLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxCaXRWZWN0b3IuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEJ5dGVMb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHd0ZlxDb21waWxhdGlvblRocmVhZC5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlx3dGZcQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3Bw
IiAvPgpAQCAtMTY4LDEyICsxNjgsMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0
ZlxBdXRvZHJhaW5lZFBvb2wuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxC
YWcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCYWdUb0hhc2hNYXAuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCYXNpY0xvY2suaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCaXRtYXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxCaXRWZWN0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHd0ZlxCbG9ja1N0YWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQmxv
b21GaWx0ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCdW1wUG9pbnRl
ckFsbG9jYXRvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEJ5dGVMb2Nr
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQ2hlY2tlZEFyaXRobWV0aWMu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxDaGVja2VkQm9vbGVhbi5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXENvbXBpbGVyLmgiIC8+CkluZGV4OiBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4ODMwOSkK
KysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDggKzI0LDYgQEAKIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1
QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZC
MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyog
RmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07Ci0JCTBGODI0
QTY2MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0
ZUxvY2suY3BwICovOyB9OwotCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTYz
MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovOyB9OwogCQkwRjgyNEE2ODFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5j
cHAgKi87IH07CiAJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NTFCNzQ0
M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5
MEIwQUQgLyogUmF3UG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsg
fTsKQEAgLTQ2LDYgKzQ0LDggQEAKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLzsg
fTsKIAkJMEZFMTY0NkExQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMTY0NjgxQjZGRkM5NjAwNDAwRTdD
IC8qIExvY2suY3BwICovOyB9OwogCQkwRkUxNjQ2QjFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMTY0Njkx
QjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAqLzsgfTsKKwkJMEZFNDQ3OUMxQjdBQUEwMzAwOTQ5
OEVCIC8qIEJhc2ljTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogQmFzaWNMb2NrLmNwcCAqLzsg
fTsKKwkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIEJhc2ljTG9jay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5
OEVCIC8qIEJhc2ljTG9jay5oICovOyB9OwogCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyog
VGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLzsgfTsKIAkJMTQw
MjJGNDExOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSBpbiBGcmFtZXdvcmtzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDIyRjQwMThGNUMzRkMwMDdGRjBFQiAv
KiBsaWJibWFsbG9jLmEgKi87IH07CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1T
aXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsKQEAgLTMxMSw4ICsz
MTEsNiBAQAogCQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50
ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjgyNEE2MjFC
NzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQnl0ZUxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnl0ZUxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmtpbmdMb3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzMzLDYgKzMzMSw4IEBACiAJCTBGRERCRkE2MTY2NkRG
QTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFMTY0NjkxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogQmFzaWNMb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2ljTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBCYXNpY0xvY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzaWNMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2Mu
YSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hp
dmUuYXI7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07CiAJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJBTVNpemUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNzE3LDE0ICs3MTcsMTQgQEAKIAkJCQkxNDY5NDE5QjE2RUFCMTBB
MDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sTWFjLm1tICovLAogCQkJCTBGQjE0RTE4MTgwRkEy
MTgwMDlCNkI0RCAvKiBCYWcuaCAqLywKIAkJCQkwRkIxNEUxQTE4MTBFMURBMDA5QjZCNEQgLyog
QmFnVG9IYXNoTWFwLmggKi8sCisJCQkJMEZFNDQ3OUExQjdBQUEwMzAwOTQ5OEVCIC8qIEJhc2lj
TG9jay5jcHAgKi8sCisJCQkJMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIEJhc2ljTG9jay5o
ICovLAogCQkJCUE4QTQ3MjVGMTUxQTgyNUEwMDQxMjNGRiAvKiBCaXRtYXAuaCAqLywKIAkJCQlB
OEE0NzI2MDE1MUE4MjVBMDA0MTIzRkYgLyogQml0VmVjdG9yLmNwcCAqLywKIAkJCQlBOEE0NzI2
MTE1MUE4MjVBMDA0MTIzRkYgLyogQml0VmVjdG9yLmggKi8sCiAJCQkJQThBNDcyNjQxNTFBODI1
QTAwNDEyM0ZGIC8qIEJsb2NrU3RhY2suaCAqLywKIAkJCQlBOEE0NzI2NTE1MUE4MjVBMDA0MTIz
RkYgLyogQmxvb21GaWx0ZXIuaCAqLywKIAkJCQlBOEE0NzI2NzE1MUE4MjVBMDA0MTIzRkYgLyog
QnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywKLQkJCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suY3BwICovLAotCQkJCTBGODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRl
TG9jay5oICovLAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBCeXRlT3JkZXIuaCAq
LywKIAkJCQlBOEE0NzI2QTE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCAq
LywKIAkJCQlBOEE0NzI2QjE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCAqLywK
QEAgLTExNjYsNyArMTE2Niw2IEBACiAJCQkJQThBNDc0MTUxNTFBODI1QjAwNDEyM0ZGIC8qIFJh
bmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTYxNTFBODI1QjAwNDEyM0ZG
IC8qIFJhbmRvbU51bWJlclNlZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODcxMDVBMTY2NDNG
MTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjgyNEE2NzFC
NzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDE3
MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDE4MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQxOTE1MUE4MjVCMDA0MTIzRkYgLyogUmVmQ291bnRlZEFycmF5LmggaW4gSGVhZGVy
cyAqLywKQEAgLTEyMjAsNiArMTIxOSw3IEBACiAJCQkJQThBNDc0NTQxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NTE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU3BlY2lmaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
OUVGMTYzMTZCQkZFMEQwMDBBNDMzMSAvKiBUcmlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIEJhc2ljTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NkQxNTFBODI1QjAwNDEyM0ZGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0NkExNTFBODI1QjAwNDEyM0ZGIC8qIFVURjguaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3M0I5MTUxQTgyNUIwMDQxMjNGRiAvKiB1dGlscy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMzM3LDcgKzEzMzcsNiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJQThBNDczODYxNTFBODI1QjAw
NDEyM0ZGIC8qIEFzc2VydGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MzUxNTFB
ODI1QjAwNDEyM0ZGIC8qIEF0b21pY1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjgy
NEE2NjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OUJDNzBGMDUxNzZDMzc5RDAwMTAxREVDIC8qIEF0b21pY1N0cmluZ1RhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1QkExNUZCMTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdDRi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDY5NDE5RDE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQ
b29sTWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0xNDAwLDYgKzEzOTksNyBAQAogCQkJCTcwRUNB
NjBEMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZFREFDRDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4QTQ3NDNDMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTQ0NzlDMUI3QUFBMDMwMDk0OThFQiAvKiBCYXNpY0xv
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NDAxNTFBODI1QjAwNDEyM0ZGIC8qIFN0
cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RkMxODI0MzVBNjAwQTgyRTY5
IC8qIFN0cmluZ0ltcGxDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVGNTE4MjQzNDgw
MDBBODJFNjkgLyogU3RyaW5nSW1wbE1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAkocmV2aXNpb24gMTg4MzA5KQorKysgU291
cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlIDx1bmlzdGQuaD4K
LSNpbmNsdWRlIDx3dGYvQnl0ZUxvY2suaD4KKyNpbmNsdWRlIDx3dGYvQmFzaWNMb2NrLmg+CiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNs
dWRlIDx3dGYvU3BpbkxvY2suaD4KQEAgLTQ0LDcgKzQ0LDcgQEAgdW5zaWduZWQgbnVtSXRlcmF0
aW9uczsKICAgICAKIE5PX1JFVFVSTiB2b2lkIHVzYWdlKCkKIHsKLSAgICBwcmludGYoIlVzYWdl
OiBMb2NrU3BlZWRUZXN0IHNwaW5sb2NrfGxvY2t8Ynl0ZWxvY2t8bXV0ZXh8YWxsIDxudW0gdGhy
ZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBncm91cD4gPHdvcmsgcGVyIGNyaXRpY2FsIHNl
Y3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51bSBpdGVyYXRpb25zPlxuIik7CisgICAgcHJp
bnRmKCJVc2FnZTogTG9ja1NwZWVkVGVzdCBzcGlubG9ja3xiYXNpY2xvY2t8bG9ja3xieXRlbG9j
a3xtdXRleHxhbGwgPG51bSB0aHJlYWQgZ3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3VwPiA8
d29yayBwZXIgY3JpdGljYWwgc2VjdGlvbj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0ZXJh
dGlvbnM+XG4iKTsKICAgICBleGl0KDEpOwogfQogCkBAIC0xMjIsMTIgKzEyMiwxMiBAQCBpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJ1bkJlbmNobWFyazxTcGluTG9j
az4oIlNwaW5Mb2NrIik7CiAgICAgICAgIGRpZFJ1biA9IHRydWU7CiAgICAgfQotICAgIGlmICgh
c3RyY21wKGFyZ3ZbMV0sICJsb2NrIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKLSAg
ICAgICAgcnVuQmVuY2htYXJrPExvY2s+KCJXVEYgTG9jayIpOworICAgIGlmICghc3RyY21wKGFy
Z3ZbMV0sICJiYXNpY2xvY2siKSB8fCAhc3RyY21wKGFyZ3ZbMV0sICJhbGwiKSkgeworICAgICAg
ICBydW5CZW5jaG1hcms8QmFzaWNMb2NrPigiV1RGIEJhc2ljTG9jayIpOwogICAgICAgICBkaWRS
dW4gPSB0cnVlOwogICAgIH0KLSAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAiYnl0ZWxvY2siKSB8
fCAhc3RyY21wKGFyZ3ZbMV0sICJhbGwiKSkgewotICAgICAgICBydW5CZW5jaG1hcms8Qnl0ZUxv
Y2s+KCJXVEYgQnl0ZUxvY2siKTsKKyAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAibG9jayIpIHx8
ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CisgICAgICAgIHJ1bkJlbmNobWFyazxMb2NrPigi
V1RGIExvY2siKTsKICAgICAgICAgZGlkUnVuID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKCFzdHJj
bXAoYXJndlsxXSwgIm11dGV4IikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0Jhc2ljTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQmFzaWNMb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0Jhc2ljTG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkJhc2ljTG9jay5oIgorCisjaW5jbHVkZSAiRGF0YUxvZy5oIgorI2luY2x1ZGUgIlN0cmlu
Z1ByaW50U3RyZWFtLmgiCisjaW5jbHVkZSAiVGhyZWFkU3BlY2lmaWMuaCIKKyNpbmNsdWRlICJU
aHJlYWRpbmdQcmltaXRpdmVzLmgiCisjaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgorI2lu
Y2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHRocmVhZD4KKworbmFtZXNwYWNlIFdURiB7CisKK25h
bWVzcGFjZSB7CisKKy8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgc2VydmVzIHRocmVlIHB1cnBvc2Vz
OgorLy8KKy8vIDEpIEEgcGFya2luZyBtZWNoYW5pc20gZm9yIHRocmVhZHMgdGhhdCBnbyB0byBz
bGVlcC4gVGhhdCBpbnZvbHZlcyBqdXN0IGEgc3lzdGVtIG11dGV4IGFuZAorLy8gICAgY29uZGl0
aW9uIHZhcmlhYmxlLgorLy8KKy8vIDIpIEEgcXVldWUgbm9kZSBmb3Igd2hlbiBhIHRocmVhZCBp
cyBvbiBzb21lIEJhc2ljTG9jaydzIHF1ZXVlLgorLy8KKy8vIDMpIFRoZSBxdWV1ZSBoZWFkLiBU
aGlzIGlzIGtpbmQgb2YgZnVua3kuIFdoZW4gYSB0aHJlYWQgaXMgdGhlIGhlYWQgb2YgYSBxdWV1
ZSwgaXQgYWxzbyBzZXJ2ZXMgYXMKKy8vICAgIHRoZSBiYXNpYyBxdWV1ZSBib29ra2VlcGluZyBk
YXRhIHN0cnVjdHVyZS4gV2hlbiBhIHRocmVhZCBpcyBkZXF1ZXVlZCwgdGhlIG5leHQgdGhyZWFk
IGluIHRoZQorLy8gICAgcXVldWUgdGFrZXMgb24gdGhlIHF1ZXVlIGhlYWQgZHV0aWVzLgorc3Ry
dWN0IFRocmVhZERhdGEgeworICAgIC8vIFRoZSBwYXJraW5nIG1lY2hhbmlzbS4KKyAgICBib29s
IHNob3VsZFBhcmsgeyBmYWxzZSB9OworICAgIHN0ZDo6bXV0ZXggcGFya2luZ0xvY2s7CisgICAg
c3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlvbjsKKworICAgIC8vIFRoZSBx
dWV1ZSBub2RlLgorICAgIFRocmVhZERhdGEqIG5leHRJblF1ZXVlIHsgbnVsbHB0ciB9OworCisg
ICAgLy8gVGhlIHF1ZXVlIGl0c2VsZi4KKyAgICBUaHJlYWREYXRhKiBxdWV1ZVRhaWwgeyBudWxs
cHRyIH07Cit9OworCitUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPiogdGhyZWFkRGF0YTsKKwor
VGhyZWFkRGF0YSogbXlUaHJlYWREYXRhKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
aW5pdGlhbGl6ZU9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIGluaXRpYWxpemVP
bmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICB0aHJlYWREYXRhID0gbmV3IFRocmVhZFNw
ZWNpZmljPFRocmVhZERhdGE+KCk7CisgICAgICAgIH0pOworCisgICAgcmV0dXJuICp0aHJlYWRE
YXRhOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBCYXNpY0xvY2s6Omxv
Y2tTbG93KCkKK3sKKyAgICB1bnNpZ25lZCBzcGluQ291bnQgPSAwOworCisgICAgLy8gVGhpcyBt
YWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFzdCBKaWtlc1JW
TSBleHBlcmltZW50cy4KKyAgICBjb25zdCB1bnNpZ25lZCBzcGluTGltaXQgPSA0MDsKKyAgICAK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIHVpbnRwdHJfdCBjdXJyZW50V29yZFZhbHVlID0gbV93
b3JkLmxvYWQoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghKGN1cnJlbnRXb3JkVmFsdWUgJiBp
c0xvY2tlZEJpdCkpIHsKKyAgICAgICAgICAgIC8vIEl0J3Mgbm90IHBvc3NpYmxlIGZvciBzb21l
b25lIHRvIGhvbGQgdGhlIHF1ZXVlIGxvY2sgd2hpbGUgdGhlIGxvY2sgaXRzZWxmIGlzIG5vIGxv
bmdlcgorICAgICAgICAgICAgLy8gaGVsZCwgc2luY2Ugd2Ugd2lsbCBvbmx5IGF0dGVtcHQgdG8g
YWNxdWlyZSB0aGUgcXVldWUgbG9jayB3aGVuIHRoZSBsb2NrIGlzIGhlbGQgYW5kCisgICAgICAg
ICAgICAvLyB0aGUgcXVldWUgbG9jayBwcmV2ZW50cyB1bmxvY2suCisgICAgICAgICAgICBBU1NF
UlQoIShjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCkpOworICAgICAgICAgICAg
aWYgKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRX
b3JkVmFsdWUgfCBpc0xvY2tlZEJpdCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTdWNjZXNzISBX
ZSBhY3F1aXJlZCB0aGUgbG9jay4KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBxdWV1ZSBhbmQgd2Ug
aGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVzdCB0cnkgdG8gc3BpbiBhcm91bmQgYWdh
aW4uCisgICAgICAgIGlmICghKGN1cnJlbnRXb3JkVmFsdWUgJiB+cXVldWVIZWFkTWFzaykgJiYg
c3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgICAgICBzcGluQ291bnQrKzsKKyAgICAg
ICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIE5lZWQgdG8gcHV0IG91cnNlbHZlcyBvbiB0aGUgcXVl
dWUuIENyZWF0ZSB0aGUgcXVldWUgaWYgb25lIGRvZXMgbm90IGV4aXN0LiBUaGlzIHJlcXVyaWVz
CisgICAgICAgIC8vIG93bmluZyB0aGUgcXVldWUgZm9yIGEgbGl0dGxlIGJpdC4gVGhlIGxvY2sg
dGhhdCBjb250cm9scyB0aGUgcXVldWUgaXMgaXRzZWxmIGEgc3BpbmxvY2suCisgICAgICAgIC8v
IEJ1dCBiZWZvcmUgd2UgYWNxdWlyZSB0aGUgcXVldWUgc3BpbmxvY2ssIHdlIG1ha2Ugc3VyZSB0
aGF0IHdlIGhhdmUgYSBUaHJlYWREYXRhIGZvciB0aGlzCisgICAgICAgIC8vIHRocmVhZC4KKyAg
ICAgICAgVGhyZWFkRGF0YSogbWUgPSBteVRocmVhZERhdGEoKTsKKyAgICAgICAgQVNTRVJUKCFt
ZS0+c2hvdWxkUGFyayk7CisgICAgICAgIEFTU0VSVCghbWUtPm5leHRJblF1ZXVlKTsKKyAgICAg
ICAgQVNTRVJUKCFtZS0+cXVldWVUYWlsKTsKKworICAgICAgICAvLyBSZWxvYWQgdGhlIGN1cnJl
bnQgd29yZCB2YWx1ZSwgc2luY2Ugc29tZSB0aW1lIG1heSBoYXZlIHBhc3NlZC4KKyAgICAgICAg
Y3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisKKyAgICAgICAgLy8gV2UgcHJvY2Vl
ZCBvbmx5IGlmIHRoZSBxdWV1ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGUgQmFzaWNMb2NrIGlzIGhl
bGQsIGFuZCB3ZSBzdWNjZWVkIGluCisgICAgICAgIC8vIGFjcXVpcmluZyB0aGUgcXVldWUgbG9j
ay4KKyAgICAgICAgaWYgKChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCkKKyAg
ICAgICAgICAgIHx8ICEoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KQorICAgICAgICAg
ICAgfHwgIW1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJl
bnRXb3JkVmFsdWUgfCBpc1F1ZXVlTG9ja2VkQml0KSkgeworICAgICAgICAgICAgc3RkOjp0aGlz
X3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBtZS0+c2hvdWxkUGFyayA9IHRydWU7CisKKyAgICAgICAgLy8gV2Ugb3du
IHRoZSBxdWV1ZS4gTm9ib2R5IGNhbiBlbnF1ZXVlIG9yIGRlcXVldWUgdW50aWwgd2UncmUgZG9u
ZS4gQWxzbywgaXQncyBub3QgcG9zc2libGUKKyAgICAgICAgLy8gdG8gcmVsZWFzZSB0aGUgQmFz
aWNMb2NrIHdoaWxlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2suCisgICAgICAgIFRocmVhZERhdGEq
IHF1ZXVlSGVhZCA9IGJpdHdpc2VfY2FzdDxUaHJlYWREYXRhKj4oY3VycmVudFdvcmRWYWx1ZSAm
IH5xdWV1ZUhlYWRNYXNrKTsKKyAgICAgICAgaWYgKHF1ZXVlSGVhZCkgeworICAgICAgICAgICAg
Ly8gUHV0IHRoaXMgdGhyZWFkIGF0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlLgorICAgICAgICAgICAg
cXVldWVIZWFkLT5xdWV1ZVRhaWwtPm5leHRJblF1ZXVlID0gbWU7CisgICAgICAgICAgICBxdWV1
ZUhlYWQtPnF1ZXVlVGFpbCA9IG1lOworCisgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBxdWV1
ZSBsb2NrLgorICAgICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Cisg
ICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKTsKKyAg
ICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7Cisg
ICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KTsKKyAgICAg
ICAgICAgIG1fd29yZC5zdG9yZShjdXJyZW50V29yZFZhbHVlICYgfmlzUXVldWVMb2NrZWRCaXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTWFrZSB0aGlzIHRocmVhZCBiZSB0
aGUgcXVldWUtaGVhZC4KKyAgICAgICAgICAgIHF1ZXVlSGVhZCA9IG1lOworICAgICAgICAgICAg
bWUtPnF1ZXVlVGFpbCA9IG1lOworCisgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBxdWV1ZSBs
b2NrIGFuZCBpbnN0YWxsIG91cnNlbHZlcyBhcyB0aGUgaGVhZC4gTm8gbmVlZCBmb3IgYSBDQVMg
bG9vcCwgc2luY2UKKyAgICAgICAgICAgIC8vIHdlIG93biB0aGUgcXVldWUgbG9jay4KKyAgICAg
ICAgICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAgICAgQVNT
RVJUKH4oY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKSk7CisgICAgICAgICAgICBB
U1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRCaXQpOworICAgICAgICAgICAg
QVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7CisgICAgICAgICAgICB1aW50
cHRyX3QgbmV3V29yZFZhbHVlID0gY3VycmVudFdvcmRWYWx1ZTsKKyAgICAgICAgICAgIG5ld1dv
cmRWYWx1ZSB8PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihxdWV1ZUhlYWQpOworICAgICAgICAg
ICAgbmV3V29yZFZhbHVlICY9IH5pc1F1ZXVlTG9ja2VkQml0OworICAgICAgICAgICAgbV93b3Jk
LnN0b3JlKG5ld1dvcmRWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBdCB0aGlzIHBv
aW50IGV2ZXJ5b25lIHdobyBhY3F1aXJlcyB0aGUgcXVldWUgbG9jayB3aWxsIHNlZSBtZSBvbiB0
aGUgcXVldWUsIGFuZCBhbnlvbmUgd2hvCisgICAgICAgIC8vIGFjcXVpcmVzIG1lJ3MgbG9jayB3
aWxsIHNlZSB0aGF0IG1lIHdhbnRzIHRvIHBhcmsuIE5vdGUgdGhhdCBzaG91bGRQYXJrIG1heSBo
YXZlIGJlZW4KKyAgICAgICAgLy8gY2xlYXJlZCBhcyBzb29uIGFzIHRoZSBxdWV1ZSBsb2NrIHdh
cyByZWxlYXNlZCBhYm92ZSwgYnV0IGl0IHdpbGwgaGFwcGVuIHdoaWxlIHRoZQorICAgICAgICAv
LyByZWxlYXNpbmcgdGhyZWFkIGhvbGRzIG1lJ3MgcGFya2luZ0xvY2suCisKKyAgICAgICAgewor
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtp
bmdMb2NrKTsKKyAgICAgICAgICAgIHdoaWxlIChtZS0+c2hvdWxkUGFyaykKKyAgICAgICAgICAg
ICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0KGxvY2tlcik7CisgICAgICAgIH0KKworICAg
ICAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+bmV4dElu
UXVldWUpOworICAgICAgICBBU1NFUlQoIW1lLT5xdWV1ZVRhaWwpOworICAgICAgICAKKyAgICAg
ICAgLy8gTm93IHdlIGNhbiBsb29wIGFyb3VuZCBhbmQgdHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2sg
YWdhaW4uCisgICAgfQorfQorCit2b2lkIEJhc2ljTG9jazo6dW5sb2NrU2xvdygpCit7CisgICAg
Ly8gVGhlIGZhc3QgcGF0aCBjYW4gZmFpbCBlaXRoZXIgYmVjYXVzZSBvZiBzcHVyaW91cyB3ZWFr
IENBUyBmYWlsdXJlLCBvciBiZWNhdXNlIHNvbWVvbmUgcHV0IGEKKyAgICAvLyB0aHJlYWQgb24g
dGhlIHF1ZXVlLCBvciB0aGUgcXVldWUgbG9jayBpcyBoZWxkLiBJZiB0aGUgcXVldWUgbG9jayBp
cyBoZWxkLCBpdCBjYW4gb25seSBiZQorICAgIC8vIGJlY2F1c2Ugc29tZW9uZSAqd2lsbCogZW5x
dWV1ZSBhIHRocmVhZCBvbnRvIHRoZSBxdWV1ZS4KKworICAgIC8vIEFjcXVpcmUgdGhlIHF1ZXVl
IGxvY2ssIG9yIHJlbGVhc2UgdGhlIGxvY2suIFRoaXMgbG9vcCBoYW5kbGVzIGJvdGggbG9jayBy
ZWxlYXNlIGluIGNhc2UgdGhlCisgICAgLy8gZmFzdCBwYXRoJ3Mgd2VhayBDQVMgc3B1cmlvdXNs
eSBmYWlsZWQgYW5kIGl0IGhhbmRsZXMgcXVldWUgbG9jayBhY3F1aXNpdGlvbiBpZiB0aGVyZSBp
cworICAgIC8vIGFjdHVhbGx5IHNvbWV0aGluZyBpbnRlcmVzdGluZyBvbiB0aGUgcXVldWUuCisg
ICAgZm9yICg7OykgeworICAgICAgICB1aW50cHRyX3QgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29y
ZC5sb2FkKCk7CisKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJp
dCk7CisgICAgICAgIAorICAgICAgICBpZiAoY3VycmVudFdvcmRWYWx1ZSA9PSBpc0xvY2tlZEJp
dCkgeworICAgICAgICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzTG9ja2Vk
Qml0LCAwKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBmYXN0IHBhdGgncyB3ZWFrIENBUyBo
YWQgc3B1cmlvdXNseSBmYWlsZWQsIGFuZCBub3cgd2Ugc3VjY2VlZGVkLiBUaGUgbG9jayBpcwor
ICAgICAgICAgICAgICAgIC8vIHVubG9ja2VkIGFuZCB3ZSdyZSBkb25lIQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIExvb3AgYXJvdW5kIGFu
ZCB0cnkgYWdhaW4uCisgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChjdXJy
ZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCkgeworICAgICAgICAgICAgc3RkOjp0aGlz
X3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gSWYgaXQgd2Fzbid0IGp1c3QgYSBzcHVyaW91cyB3ZWFrIENBUyBmYWlsdXJlIGFu
ZCBpZiB0aGUgcXVldWUgbG9jayBpcyBub3QgaGVsZCwgdGhlbiB0aGVyZQorICAgICAgICAvLyBt
dXN0IGJlIGFuIGVudHJ5IG9uIHRoZSBxdWV1ZS4KKyAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3Jk
VmFsdWUgJiB+cXVldWVIZWFkTWFzayk7CisKKyAgICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhj
aGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBpc1F1ZXVlTG9j
a2VkQml0KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHVpbnRwdHJfdCBjdXJy
ZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKyAgICAgICAgCisgICAgLy8gQWZ0ZXIgd2Ug
YWNxdWlyZSB0aGUgcXVldWUgbG9jaywgdGhlIEJhc2ljTG9jayBtdXN0IHN0aWxsIGJlIGhlbGQg
YW5kIHRoZSBxdWV1ZSBtdXN0IGJlCisgICAgLy8gbm9uLWVtcHR5LiBUaGUgcXVldWUgbXVzdCBi
ZSBub24tZW1wdHkgc2luY2Ugb25seSB0aGUgbG9ja1Nsb3coKSBtZXRob2QgY291bGQgaGF2ZSBo
ZWxkIHRoZQorICAgIC8vIHF1ZXVlIGxvY2sgYW5kIGlmIGl0IGRpZCB0aGVuIGl0IG9ubHkgcmVs
ZWFzZXMgaXQgYWZ0ZXIgcHV0dGluZyBzb21ldGhpbmcgb24gdGhlIHF1ZXVlLgorICAgIEFTU0VS
VChjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpOworICAgIEFTU0VSVChjdXJyZW50V29y
ZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7CisgICAgVGhyZWFkRGF0YSogcXVldWVIZWFkID0g
Yml0d2lzZV9jYXN0PFRocmVhZERhdGEqPihjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1h
c2spOworICAgIEFTU0VSVChxdWV1ZUhlYWQpOworCisgICAgVGhyZWFkRGF0YSogbmV3UXVldWVI
ZWFkID0gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZTsKKyAgICAvLyBFaXRoZXIgdGhpcyB3YXMgdGhl
IG9ubHkgdGhyZWFkIG9uIHRoZSBxdWV1ZSwgaW4gd2hpY2ggY2FzZSB3ZSBkZWxldGUgdGhlIHF1
ZXVlLCBvciB0aGVyZQorICAgIC8vIGFyZSBzdGlsbCBtb3JlIHRocmVhZHMgb24gdGhlIHF1ZXVl
LCBpbiB3aGljaCBjYXNlIHdlIGNyZWF0ZSBhIG5ldyBxdWV1ZSBoZWFkLgorICAgIGlmIChuZXdR
dWV1ZUhlYWQpCisgICAgICAgIG5ld1F1ZXVlSGVhZC0+cXVldWVUYWlsID0gcXVldWVIZWFkLT5x
dWV1ZVRhaWw7CisKKyAgICAvLyBDaGFuZ2UgdGhlIHF1ZXVlIGhlYWQsIHBvc3NpYmx5IHJlbW92
aW5nIGl0IGlmIG5ld1F1ZXVlSGVhZCBpcyBudWxsLiBObyBuZWVkIGZvciBhIENBUyBsb29wLAor
ICAgIC8vIHNpbmNlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2sgYW5kIHRoZSBsb2NrIGl0c2VsZiBz
byBub3RoaW5nIGFib3V0IHRoZSBsb2NrIGNhbiBjaGFuZ2UgcmlnaHQKKyAgICAvLyBub3cuCisg
ICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgQVNTRVJUKGN1cnJlbnRX
b3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7CisgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBp
c1F1ZXVlTG9ja2VkQml0KTsKKyAgICBBU1NFUlQoKGN1cnJlbnRXb3JkVmFsdWUgJiB+cXVldWVI
ZWFkTWFzaykgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocXVldWVIZWFkKSk7CisgICAgdWlu
dHB0cl90IG5ld1dvcmRWYWx1ZSA9IGN1cnJlbnRXb3JkVmFsdWU7CisgICAgbmV3V29yZFZhbHVl
ICY9IH5pc0xvY2tlZEJpdDsgLy8gUmVsZWFzZSB0aGUgQmFzaWNMb2NrLgorICAgIG5ld1dvcmRW
YWx1ZSAmPSB+aXNRdWV1ZUxvY2tlZEJpdDsgLy8gUmVsZWFzZSB0aGUgcXVldWUgbG9jay4KKyAg
ICBuZXdXb3JkVmFsdWUgJj0gcXVldWVIZWFkTWFzazsgLy8gQ2xlYXIgb3V0IHRoZSBvbGQgcXVl
dWUgaGVhZC4KKyAgICBuZXdXb3JkVmFsdWUgfD0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3
UXVldWVIZWFkKTsgLy8gSW5zdGFsbCBuZXcgcXVldWUgaGVhZC4KKyAgICBtX3dvcmQuc3RvcmUo
bmV3V29yZFZhbHVlKTsKKworICAgIC8vIE5vdyB0aGUgbG9jayBpcyBhdmFpbGFibGUgZm9yIGFj
cXVpc2l0aW9uLiBCdXQgd2UganVzdCBoYXZlIHRvIHdha2UgdXAgdGhlIG9sZCBxdWV1ZSBoZWFk
LgorICAgIC8vIEFmdGVyIHRoYXQsIHdlJ3JlIGRvbmUhCisKKyAgICBxdWV1ZUhlYWQtPm5leHRJ
blF1ZXVlID0gbnVsbHB0cjsKKyAgICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbCA9IG51bGxwdHI7CisK
KyAgICAvLyBXZSBkbyB0aGlzIGNhcmVmdWxseSBiZWNhdXNlIHRoaXMgbWF5IHJ1biBlaXRoZXIg
YmVmb3JlIG9yIGR1cmluZyB0aGUgcGFya2luZ0xvY2sgY3JpdGljYWwKKyAgICAvLyBzZWN0aW9u
IGluIGxvY2tTbG93KCkuCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0
ZXg+IGxvY2tlcihxdWV1ZUhlYWQtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgcXVldWVIZWFkLT5z
aG91bGRQYXJrID0gZmFsc2U7CisgICAgfQorICAgIC8vIERvZXNuJ3QgbWF0dGVyIGlmIHdlIG5v
dGlmeV9hbGwoKSBvciBub3RpZnlfb25lKCkgaGVyZSBzaW5jZSB0aGUgb25seSB0aHJlYWQgdGhh
dCBjb3VsZCBiZQorICAgIC8vIHdhaXRpbmcgaXMgcXVldWVIZWFkLgorICAgIHF1ZXVlSGVhZC0+
cGFya2luZ0NvbmRpdGlvbi5ub3RpZnlfb25lKCk7CisKKyAgICAvLyBUaGUgb2xkIHF1ZXVlIGhl
YWQgY2FuIG5vdyBjb250ZW5kIGZvciB0aGUgbG9jayBhZ2Fpbi4gV2UncmUgZG9uZSEKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jhc2ljTG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Jhc2ljTG9jay5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dURi93dGYvQmFzaWNMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFdURl9CYXNpY0xvY2tfaAorI2RlZmluZSBXVEZfQmFzaWNMb2NrX2gKKworI2luY2x1ZGUgPHd0
Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CisjaW5jbHVkZSA8d3RmL0xv
Y2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsK
KworLy8gQSBCYXNpY0xvY2sgaXMgYSBmdWxseSBhZGFwdGl2ZSBtdXRleCB0aGF0IHVzZXMgc2l6
ZW9mKHZvaWQqKSBzdG9yYWdlLiBJdCBoYXMgYSBmYXN0IHBhdGggdGhhdCBpcworLy8gc2ltaWxh
ciB0byBTcGluTG9jaywgYW5kIGEgc2xvdyBwYXRoIHRoYXQgaXMgc2ltaWxhciB0byBNdXRleC4g
SW4gbW9zdCBjYXNlcywgeW91IHNob3VsZCB1c2UgTG9jaworLy8gaW5zdGVhZC4gQmFzaWNMb2Nr
IHNpdHMgbG93ZXIgaW4gdGhlIHN0YWNrIGFuZCBpcyB1c2VkIHRvIGltcGxlbWVudCBMb2NrLCBz
byBMb2NrIGlzIHRoZSBtYWluCisvLyBjbGllbnQgb2YgQmFzaWNMb2NrLgorCitjbGFzcyBCYXNp
Y0xvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljTG9jayk7CitwdWJsaWM6Cisg
ICAgQmFzaWNMb2NrKCkKKyAgICB7CisgICAgICAgIG1fd29yZC5zdG9yZSgwLCBzdGQ6Om1lbW9y
eV9vcmRlcl9yZWxheGVkKTsKKyAgICB9CisKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAg
ICAgaWYgKExJS0VMWShtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0xvY2tlZEJpdCwg
c3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7CisgICAgICAgICAgICAvLyBCYXNpY0xvY2sg
YWNxdWlyZWQhCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsb2Nr
U2xvdygpOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrKCkKKyAgICB7CisgICAgICAgIGlmIChM
SUtFTFkobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNMb2NrZWRCaXQsIDAsIHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGVhc2UpKSkgeworICAgICAgICAgICAgLy8gQmFzaWNMb2NrIHJlbGVhc2Vk
LCBhbmQgbm9ib2R5IHdhcyB3YWl0aW5nIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgdW5sb2NrU2xvdygpOworICAgIH0KKworICAgIGJvb2wgaXNIZWxkKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dvcmQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9h
Y3F1aXJlKSAmIGlzTG9ja2VkQml0OworICAgIH0KKworICAgIGJvb2wgaXNMb2NrZWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSGVsZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgY29uc3QgdWludHB0cl90IGlzTG9ja2VkQml0ID0gMTsKKyAgICBzdGF0aWMgY29u
c3QgdWludHB0cl90IGlzUXVldWVMb2NrZWRCaXQgPSAyOworICAgIHN0YXRpYyBjb25zdCB1aW50
cHRyX3QgcXVldWVIZWFkTWFzayA9IDM7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBs
b2NrU2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3coKTsKKwor
ICAgIEF0b21pYzx1aW50cHRyX3Q+IG1fd29yZDsKK307CisKK3R5cGVkZWYgTG9ja2VyPEJhc2lj
TG9jaz4gQmFzaWNMb2NrSG9sZGVyOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpCYXNpY0xvY2s7Cit1c2luZyBXVEY6OkJhc2ljTG9ja0hvbGRlcjsKKworI2VuZGlmIC8vIFdU
Rl9CYXNpY0xvY2tfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQnl0ZUxvY2suY3BwCShyZXZpc2lvbiAxODgzMDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJ5dGVMb2NrLmgiCi0KLSNpbmNsdWRlICJEYXRh
TG9nLmgiCi0jaW5jbHVkZSAiUGFya2luZ0xvdC5oIgotI2luY2x1ZGUgIlN0cmluZ1ByaW50U3Ry
ZWFtLmgiCi0jaW5jbHVkZSA8dGhyZWFkPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi12b2lkIEJ5dGVMb2NrOjpsb2NrU2xvdygpCi17
Ci0gICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKLQotICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVy
IHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVu
dHMuCi0gICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7Ci0gICAgCi0gICAgZm9yICg7
OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwot
ICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVu
dFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVWYWx1ZSwgIlxuIikpOwot
Ci0gICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KLSAgICAgICAgaWYg
KCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAgICAgICAgICYmIG1fYnl0ZS5j
b21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBp
c0hlbGRCaXQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGlz
IG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3Qg
dHJ5IHRvIHNwaW4gYXJvdW5kLgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFz
UGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKLSAgICAgICAgICAgIHNwaW5D
b3VudCsrOwotICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTmVlZCB0byBwYXJrLiBXZSBk
byB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVuIHBhcmtpbmcu
IFdlIHNwaW4gYXJvdW5kCi0gICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdhc24ndCBzZXQg
YW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZh
bHVlICYgaGFzUGFya2VkQml0KQotICAgICAgICAgICAgJiYgIW1fYnl0ZS5jb21wYXJlRXhjaGFu
Z2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQp
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUg
dmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2Us
IHdlIGNhbiBwYXJrLgotICAgICAgICBQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFyaygmbV9ieXRl
LCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOwotCi0gICAgICAgIC8vIFdlIGhhdmUgYXdha2Vu
LCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFuZ2VkLiBFaXRo
ZXIgd2F5LCB3ZSBsb29wCi0gICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgotICAgIH0K
LX0KLQotdm9pZCBCeXRlTG9jazo6dW5sb2NrU2xvdygpCi17Ci0gICAgLy8gUmVsZWFzZSB0aGUg
bG9jayB3aGlsZSBmaW5kaW5nIG91dCBpZiBzb21lb25lIGlzIHBhcmtlZC4gTm90ZSB0aGF0IGFz
IHNvb24gYXMgd2UgZG8gdGhpcywKLSAgICAvLyBzb21lb25lIG1pZ2h0IGJhcmdlIGluLgotICAg
IHVpbnQ4X3Qgb2xkQnl0ZVZhbHVlOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgb2xkQnl0ZVZh
bHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5sb2NraW5nIHdpdGggIiwgb2xk
Qnl0ZVZhbHVlLCAiXG4iKSk7Ci0gICAgICAgIEFTU0VSVChvbGRCeXRlVmFsdWUgJiBpc0hlbGRC
aXQpOwotICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkQnl0ZVZhbHVl
LCAwKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIE5vdGUgdGhhdCBzb21l
b25lIGNvdWxkIHRyeSB0byBwYXJrIHJpZ2h0IG5vdy4gSWYgdGhhdCBoYXBwZW5zLCB0aGV5IHdp
bGwgcmV0dXJuIGltbWVkaWF0ZWx5Ci0gICAgLy8gYmVjYXVzZSBvdXIgcGFya2luZyBwcmVkaWNh
dGUgaXMgdGhhdCBtX2J5dGUgPT0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0LCBidXQgd2UndmUg
YWxyZWFkeSBzZXQKLSAgICAvLyBtX2J5dGUgPSAwLgotCi0gICAgLy8gSWYgdGhlcmUgaGFkIGJl
ZW4gdGhyZWFkcyBwYXJrZWQsIHVucGFyayBhbGwgb2YgdGhlbS4gVGhpcyBjYXVzZXMgYSB0aHVu
ZGVyaW5nIGhlcmQsIGJ1dCB3aGlsZQotICAgIC8vIHRoYXQgaXMgdGhlb3JldGljYWxseSBzY2Fy
eSwgaXQncyB0b3RhbGx5IGZpbmUgaW4gV2ViS2l0IGJlY2F1c2Ugd2UgdXN1YWxseSBkb24ndCBo
YXZlIGVub3VnaAotICAgIC8vIHRocmVhZHMgZm9yIHRoaXMgdG8gbWF0dGVyLgotICAgIC8vIEZJ
WE1FOiBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzIHRvIGV4aGliaXQgdGh1bmRlcmluZyBoZXJk
LiBXZSBjb3VsZCB1c2UgdW5wYXJrT25lKCksIGFuZCBpZgotICAgIC8vIHRoYXQgcmV0dXJucyB0
cnVlLCBqdXN0IHNldCB0aGUgcGFya2VkIGJpdCBhZ2Fpbi4gSWYgaW4gdGhlIHByb2Nlc3Mgb2Yg
c2V0dGluZyB0aGUgcGFya2VkIGJpdAotICAgIC8vIHdlIGZhaWwgdGhlIENBUywgdGhlbiBqdXN0
IHVucGFyayBhZ2Fpbi4KLSAgICBpZiAob2xkQnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQotICAg
ICAgICBQYXJraW5nTG90Ojp1bnBhcmtBbGwoJm1fYnl0ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgotCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgJKHJldmlzaW9uIDE4ODMwOSkKKysrIFNvdXJjZS9XVEYv
d3RmL0J5dGVMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBCeXRlTG9ja19o
Ci0jZGVmaW5lIEJ5dGVMb2NrX2gKLQotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0xvY2tlci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotLy8gVGhpcyBpcyBsaWtlIExvY2ssIGJ1dCBvbmx5IHJlcXVpcmVzIDEgYnl0
ZSBpbnN0ZWFkIG9mIHNpemVvZih2b2lkKikgc3RvcmFnZS4gVGhlIGRvd25zaWRlIGlzIHRoYXQK
LS8vIGl0IGlzIHNsb3dlciBvbiB0aGUgc2xvdyBwYXRoIHVuZGVyIGhlYXZ5IGNvbnRlbnRpb24g
aW52b2x2aW5nIG1hbnkgdGhyZWFkcyBiZWNhdXNlIGl0IGlzCi0vLyBzdXNjZXB0aWJsZSB0byB0
aGUgInRodW5kZXJpbmcgaGVyZCIgcHJvYmxlbTogaXQgZG9lc24ndCBoYXZlIGVub3VnaCBzdGF0
ZSB0byB0cmFjayBob3cgbWFueQotLy8gdGhyZWFkcyBhcmUgd2FpdGluZyBmb3IgdGhlIGxvY2ss
IHNvIHdoZW4gdW5sb2NrIGRldGVjdHMgdGhhdCBhbnkgdGhyZWFkIGlzIHdhaXRpbmcsIHRoZW4g
aXQgd2FrZXMKLS8vIGFsbCBvZiB0aGUgd2FpdGluZyB0aHJlYWRzLiBBbGwgb2YgdGhvc2UgdGhy
ZWFkcyB3aWxsIHBpbGUgb250byB0aGUgbG9jazsgb25lIHdpbGwgc3VjY2VlZCBhbmQgdGFrZQot
Ly8gaXQgd2hpbGUgdGhlIG90aGVycyB3aWxsIGdvIGJhY2sgdG8gc2xlZXAuIFRoZSBzbG93LWRv
d24gaXMgc21hbGwuIFRlbiB0aHJlYWRzIHJlcGVhdGVkbHkKLS8vIGNvbnRlbmRpbmcgZm9yIHRo
ZSBzYW1lIH4xLTEwdXMgbG9uZyBjcml0aWNhbCBzZWN0aW9uIHdpbGwgcnVuIDclIHNsb3dlciBv
biBteSBtYWNoaW5lLiBJZiBJIG1lc3MKLS8vIHdpdGggYW55IG9mIHRoZSBwYXJhbWV0ZXJzIC0g
Y2hhbmdlIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBvciBjaGFuZ2UgdGhlIGNyaXRpY2FsIHNlY3Rp
b24gZHVyYXRpb24gLQotLy8gdGhlbiBCeXRlTG9jayByZWFjaGVzIHBhcml0eSB3aXRoIExvY2ss
IGFuZCBzb21ldGltZXMgb3V0cGVyZm9ybXMgaXQuIFBlcmhhcHMgbW9zdCBzdXJwcmlzaW5nbHks
Ci0vLyB0aGUgc2xvdy1kb3duIGdvZXMgYXdheSBldmVuIHdoZW4geW91IGluY3JlYXNlIHRoZSBu
dW1iZXIgb2YgdGhyZWFkcy4gQnl0ZUxvY2sgYXBwZWFycyB0byBzb21ldGltZXMKLS8vIGJlIGZh
c3RlciB1bmRlciBtaWNyb2NvbnRlbnRpb24sIHBlcmhhcHMgYmVjYXVzZSBhIGNvbnRlbnRpb3Vz
IDgtYml0IENBUyBpcyBjaGVhcGVyIHRoYW4gYQotLy8gY29udGVudGlvdXMgNjQtYml0IENBUy4g
Tm90ZSB0aGF0IHVuY29udGVuZGVkIGxvY2tpbmcgaXMgZXF1YWxseSBmYXN0IHdpdGggQnl0ZUxv
Y2sgYXMgd2l0aCBMb2NrLgotLy8gSW4gYWxsLCBMb2NrIGFuZCBCeXRlTG9jayBoYXZlIHNpbWls
YXIgcGVyZm9ybWFuY2UgdW5kZXIgY29udHJvbGxlZCBtaWNyb2JlbmNobWFya3MsIGJ1dCBMb2Nr
IGlzCi0vLyB0aGVvcmV0aWNhbGx5IHNhZmVyIGJlY2F1c2Ugb2YgdGhlIHRodW5kZXJpbmcgaGVy
ZCBpc3N1ZS4gSXQncyBwcm9iYWJseSBiZXN0IHRvIHVzZSBCeXRlTG9jayBvbmx5Ci0vLyB3aGVu
IHlvdSByZWFsbHkgY2FyZSBhYm91dCBzcGFjZSBhbmQgeW91IGRvbid0IGhhdmUgcmVhc29uIHRv
IGJlbGlldmUgdGhhdCBhIGxhcmdlIG51bWJlciBvZgotLy8gdGhyZWFkcyB3b3VsZCBldmVyIHBp
bGUgb250byB0aGUgc2FtZSBsb2NrLgotCi1jbGFzcyBCeXRlTG9jayB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQnl0ZUxvY2spOwotcHVibGljOgotICAgIEJ5dGVMb2NrKCkKLSAgICB7Ci0g
ICAgICAgIG1fYnl0ZS5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBsb2NrKCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRl
LmNvbXBhcmVFeGNoYW5nZVdlYWsoMCwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1
aXJlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgYWNxdWlyZWQhCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBsb2NrU2xvdygpOwotICAgIH0KLQotICAgIHZvaWQg
dW5sb2NrKCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5n
ZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsKLSAgICAg
ICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9ja1Nsb3coKTsKLSAgICB9Ci0K
LSAgICBib29sIGlzSGVsZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9ieXRlLmxv
YWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc0xvY2tlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNIZWxkKCk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGlzSGVsZEJpdCA9IDE7
Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaGFzUGFya2VkQml0ID0gMjsKLQotICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGxvY2tTbG93KCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgdW5sb2NrU2xvdygpOwotCi0gICAgQXRvbWljPHVpbnQ4X3Q+IG1fYnl0ZTsKLX07Ci0KLXR5
cGVkZWYgTG9ja2VyPEJ5dGVMb2NrPiBCeXRlTG9ja2VyOwotCi19IC8vIG5hbWVzcGFjZSBXVEYK
LQotdXNpbmcgV1RGOjpCeXRlTG9jazsKLXVzaW5nIFdURjo6Qnl0ZUxvY2tlcjsKLQotI2VuZGlm
IC8vIEJ5dGVMb2NrX2gKLQpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4ODMw
OSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00
LDEwICs0LDEwIEBAIHNldChXVEZfSEVBREVSUwogICAgIEF0b21pY3MuaAogICAgIEJhZy5oCiAg
ICAgQmFnVG9IYXNoTWFwLmgKKyAgICBCYXNpY0xvY2suaAogICAgIEJpdFZlY3Rvci5oCiAgICAg
Qml0bWFwLmgKICAgICBCdW1wUG9pbnRlckFsbG9jYXRvci5oCi0gICAgQnl0ZUxvY2suaAogICAg
IEJ5dGVPcmRlci5oCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKQEAg
LTE0NSw4ICsxNDUsOCBAQCBzZXQoV1RGX0hFQURFUlMKIHNldChXVEZfU09VUkNFUwogICAgIEFz
c2VydGlvbnMuY3BwCiAgICAgQXRvbWljcy5jcHAKKyAgICBCYXNpY0xvY2suY3BwCiAgICAgQml0
VmVjdG9yLmNwcAotICAgIEJ5dGVMb2NrLmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAog
ICAgIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIuY3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkocmV2aXNpb24gMTg4MzA5KQorKysgU291cmNlL1dU
Ri93dGYvTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDU1ICsyNywxNCBAQAogI2luY2x1
ZGUgIkxvY2suaCIKIAogI2luY2x1ZGUgIkRhdGFMb2cuaCIKKyNpbmNsdWRlICJQYXJraW5nTG90
LmgiCiAjaW5jbHVkZSAiU3RyaW5nUHJpbnRTdHJlYW0uaCIKLSNpbmNsdWRlICJUaHJlYWRTcGVj
aWZpYy5oIgogI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRlIDxjb25k
aXRpb25fdmFyaWFibGU+Ci0jaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8dGhyZWFkPgogCiBu
YW1lc3BhY2UgV1RGIHsKIAotbmFtZXNwYWNlIHsKLQotLy8gVGhpcyBkYXRhIHN0cnVjdHVyZSBz
ZXJ2ZXMgdGhyZWUgcHVycG9zZXM6Ci0vLwotLy8gMSkgQSBwYXJraW5nIG1lY2hhbmlzbSBmb3Ig
dGhyZWFkcyB0aGF0IGdvIHRvIHNsZWVwLiBUaGF0IGludm9sdmVzIGp1c3QgYSBzeXN0ZW0gbXV0
ZXggYW5kCi0vLyAgICBjb25kaXRpb24gdmFyaWFibGUuCi0vLwotLy8gMikgQSBxdWV1ZSBub2Rl
IGZvciB3aGVuIGEgdGhyZWFkIGlzIG9uIHNvbWUgTG9jaydzIHF1ZXVlLgotLy8KLS8vIDMpIFRo
ZSBxdWV1ZSBoZWFkLiBUaGlzIGlzIGtpbmQgb2YgZnVua3kuIFdoZW4gYSB0aHJlYWQgaXMgdGhl
IGhlYWQgb2YgYSBxdWV1ZSwgaXQgYWxzbyBzZXJ2ZXMgYXMKLS8vICAgIHRoZSBiYXNpYyBxdWV1
ZSBib29ra2VlcGluZyBkYXRhIHN0cnVjdHVyZS4gV2hlbiBhIHRocmVhZCBpcyBkZXF1ZXVlZCwg
dGhlIG5leHQgdGhyZWFkIGluIHRoZQotLy8gICAgcXVldWUgdGFrZXMgb24gdGhlIHF1ZXVlIGhl
YWQgZHV0aWVzLgotc3RydWN0IFRocmVhZERhdGEgewotICAgIC8vIFRoZSBwYXJraW5nIG1lY2hh
bmlzbS4KLSAgICBib29sIHNob3VsZFBhcmsgeyBmYWxzZSB9OwotICAgIHN0ZDo6bXV0ZXggcGFy
a2luZ0xvY2s7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlvbjsK
LQotICAgIC8vIFRoZSBxdWV1ZSBub2RlLgotICAgIFRocmVhZERhdGEqIG5leHRJblF1ZXVlIHsg
bnVsbHB0ciB9OwotCi0gICAgLy8gVGhlIHF1ZXVlIGl0c2VsZi4KLSAgICBUaHJlYWREYXRhKiBx
dWV1ZVRhaWwgeyBudWxscHRyIH07Ci19OwotCi1UaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPiog
dGhyZWFkRGF0YTsKLQotVGhyZWFkRGF0YSogbXlUaHJlYWREYXRhKCkKLXsKLSAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7Ci0gICAgc3RkOjpjYWxsX29uY2UoCi0gICAg
ICAgIGluaXRpYWxpemVPbmNlLAotICAgICAgICBbXSB7Ci0gICAgICAgICAgICB0aHJlYWREYXRh
ID0gbmV3IFRocmVhZFNwZWNpZmljPFRocmVhZERhdGE+KCk7Ci0gICAgICAgIH0pOwotCi0gICAg
cmV0dXJuICp0aHJlYWREYXRhOwotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKK3N0YXRp
YyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogdm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3co
KQogewpAQCAtODUsMTg0ICs0NCw2MiBAQCB2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCiAgICAg
Y29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7CiAgICAgCiAgICAgZm9yICg7OykgewotICAg
ICAgICB1aW50cHRyX3QgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoIShjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpKSB7Ci0gICAg
ICAgICAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSBmb3Igc29tZW9uZSB0byBob2xkIHRoZSBxdWV1
ZSBsb2NrIHdoaWxlIHRoZSBsb2NrIGl0c2VsZiBpcyBubyBsb25nZXIKLSAgICAgICAgICAgIC8v
IGhlbGQsIHNpbmNlIHdlIHdpbGwgb25seSBhdHRlbXB0IHRvIGFjcXVpcmUgdGhlIHF1ZXVlIGxv
Y2sgd2hlbiB0aGUgbG9jayBpcyBoZWxkIGFuZAotICAgICAgICAgICAgLy8gdGhlIHF1ZXVlIGxv
Y2sgcHJldmVudHMgdW5sb2NrLgotICAgICAgICAgICAgQVNTRVJUKCEoY3VycmVudFdvcmRWYWx1
ZSAmIGlzUXVldWVMb2NrZWRCaXQpKTsKLSAgICAgICAgICAgIGlmIChtX3dvcmQuY29tcGFyZUV4
Y2hhbmdlV2VhayhjdXJyZW50V29yZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlIHwgaXNMb2NrZWRC
aXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3VjY2VzcyEgV2UgYWNxdWlyZWQgdGhlIGxvY2su
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAg
ICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7CisgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IGxvY2tpbmcgd2l0aCAiLCBjdXJyZW50Qnl0ZVZhbHVlLCAiXG4iKSk7CisKKyAgICAgICAg
Ly8gV2UgYWxsb3cgb3Vyc2VsdmVzIHRvIGJhcmdlIGluLgorICAgICAgICBpZiAoIShjdXJyZW50
Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgJiYgbV9ieXRlLmNvbXBhcmVFeGNo
YW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCkp
CisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gcXVldWUg
YW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJv
dW5kIGFnYWluLgotICAgICAgICBpZiAoIShjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1h
c2spICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgeworICAgICAgICAvLyBJZiB0aGVyZSBpcyBu
b2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRy
eSB0byBzcGluIGFyb3VuZC4KKyAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1Bh
cmtlZEJpdCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CiAgICAgICAgICAgICBzcGluQ291
bnQrKzsKICAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIE5lZWQgdG8gcHV0IG91cnNlbHZl
cyBvbiB0aGUgcXVldWUuIENyZWF0ZSB0aGUgcXVldWUgaWYgb25lIGRvZXMgbm90IGV4aXN0LiBU
aGlzIHJlcXVyaWVzCi0gICAgICAgIC8vIG93bmluZyB0aGUgcXVldWUgZm9yIGEgbGl0dGxlIGJp
dC4gVGhlIGxvY2sgdGhhdCBjb250cm9scyB0aGUgcXVldWUgaXMgaXRzZWxmIGEgc3BpbmxvY2su
Ci0gICAgICAgIC8vIEJ1dCBiZWZvcmUgd2UgYWNxdWlyZSB0aGUgcXVldWUgc3BpbmxvY2ssIHdl
IG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSBUaHJlYWREYXRhIGZvciB0aGlzCi0gICAgICAgIC8v
IHRocmVhZC4KLSAgICAgICAgVGhyZWFkRGF0YSogbWUgPSBteVRocmVhZERhdGEoKTsKLSAgICAg
ICAgQVNTRVJUKCFtZS0+c2hvdWxkUGFyayk7Ci0gICAgICAgIEFTU0VSVCghbWUtPm5leHRJblF1
ZXVlKTsKLSAgICAgICAgQVNTRVJUKCFtZS0+cXVldWVUYWlsKTsKLQotICAgICAgICAvLyBSZWxv
YWQgdGhlIGN1cnJlbnQgd29yZCB2YWx1ZSwgc2luY2Ugc29tZSB0aW1lIG1heSBoYXZlIHBhc3Nl
ZC4KLSAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Ci0KLSAgICAgICAg
Ly8gV2UgcHJvY2VlZCBvbmx5IGlmIHRoZSBxdWV1ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGUgTG9j
ayBpcyBoZWxkLCBhbmQgd2Ugc3VjY2VlZCBpbgotICAgICAgICAvLyBhY3F1aXJpbmcgdGhlIHF1
ZXVlIGxvY2suCi0gICAgICAgIGlmICgoY3VycmVudFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRC
aXQpCi0gICAgICAgICAgICB8fCAhKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCkKLSAg
ICAgICAgICAgIHx8ICFtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50V29yZFZhbHVl
LCBjdXJyZW50V29yZFZhbHVlIHwgaXNRdWV1ZUxvY2tlZEJpdCkpIHsKLSAgICAgICAgICAgIHN0
ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8g
dGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBX
ZSBzcGluIGFyb3VuZAorICAgICAgICAvLyBpZiB0aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFu
ZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KKyAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1
ZSAmIGhhc1BhcmtlZEJpdCkKKyAgICAgICAgICAgICYmICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdl
V2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtZS0+
c2hvdWxkUGFyayA9IHRydWU7Ci0KLSAgICAgICAgLy8gV2Ugb3duIHRoZSBxdWV1ZS4gTm9ib2R5
IGNhbiBlbnF1ZXVlIG9yIGRlcXVldWUgdW50aWwgd2UncmUgZG9uZS4gQWxzbywgaXQncyBub3Qg
cG9zc2libGUKLSAgICAgICAgLy8gdG8gcmVsZWFzZSB0aGUgTG9jayB3aGlsZSB3ZSBob2xkIHRo
ZSBxdWV1ZSBsb2NrLgotICAgICAgICBUaHJlYWREYXRhKiBxdWV1ZUhlYWQgPSBiaXR3aXNlX2Nh
c3Q8VGhyZWFkRGF0YSo+KGN1cnJlbnRXb3JkVmFsdWUgJiB+cXVldWVIZWFkTWFzayk7Ci0gICAg
ICAgIGlmIChxdWV1ZUhlYWQpIHsKLSAgICAgICAgICAgIC8vIFB1dCB0aGlzIHRocmVhZCBhdCB0
aGUgZW5kIG9mIHRoZSBxdWV1ZS4KLSAgICAgICAgICAgIHF1ZXVlSGVhZC0+cXVldWVUYWlsLT5u
ZXh0SW5RdWV1ZSA9IG1lOwotICAgICAgICAgICAgcXVldWVIZWFkLT5xdWV1ZVRhaWwgPSBtZTsK
LQotICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgcXVldWUgbG9jay4KLSAgICAgICAgICAgIGN1
cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOwotICAgICAgICAgICAgQVNTRVJUKGN1cnJl
bnRXb3JkVmFsdWUgJiB+cXVldWVIZWFkTWFzayk7Ci0gICAgICAgICAgICBBU1NFUlQoY3VycmVu
dFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRCaXQpOwotICAgICAgICAgICAgQVNTRVJUKGN1cnJl
bnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7Ci0gICAgICAgICAgICBtX3dvcmQuc3RvcmUoY3Vy
cmVudFdvcmRWYWx1ZSAmIH5pc1F1ZXVlTG9ja2VkQml0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIE1ha2UgdGhpcyB0aHJlYWQgYmUgdGhlIHF1ZXVlLWhlYWQuCi0gICAgICAg
ICAgICBxdWV1ZUhlYWQgPSBtZTsKLSAgICAgICAgICAgIG1lLT5xdWV1ZVRhaWwgPSBtZTsKLQot
ICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgcXVldWUgbG9jayBhbmQgaW5zdGFsbCBvdXJzZWx2
ZXMgYXMgdGhlIGhlYWQuIE5vIG5lZWQgZm9yIGEgQ0FTIGxvb3AsIHNpbmNlCi0gICAgICAgICAg
ICAvLyB3ZSBvd24gdGhlIHF1ZXVlIGxvY2suCi0gICAgICAgICAgICBjdXJyZW50V29yZFZhbHVl
ID0gbV93b3JkLmxvYWQoKTsKLSAgICAgICAgICAgIEFTU0VSVCh+KGN1cnJlbnRXb3JkVmFsdWUg
JiB+cXVldWVIZWFkTWFzaykpOwotICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUg
JiBpc1F1ZXVlTG9ja2VkQml0KTsKLSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVl
ICYgaXNMb2NrZWRCaXQpOwotICAgICAgICAgICAgdWludHB0cl90IG5ld1dvcmRWYWx1ZSA9IGN1
cnJlbnRXb3JkVmFsdWU7Ci0gICAgICAgICAgICBuZXdXb3JkVmFsdWUgfD0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4ocXVldWVIZWFkKTsKLSAgICAgICAgICAgIG5ld1dvcmRWYWx1ZSAmPSB+aXNR
dWV1ZUxvY2tlZEJpdDsKLSAgICAgICAgICAgIG1fd29yZC5zdG9yZShuZXdXb3JkVmFsdWUpOwot
ICAgICAgICB9CiAKLSAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBldmVyeW9uZSB3aG8gYWNxdWly
ZXMgdGhlIHF1ZXVlIGxvY2sgd2lsbCBzZWUgbWUgb24gdGhlIHF1ZXVlLCBhbmQgYW55b25lIHdo
bwotICAgICAgICAvLyBhY3F1aXJlcyBtZSdzIGxvY2sgd2lsbCBzZWUgdGhhdCBtZSB3YW50cyB0
byBwYXJrLiBOb3RlIHRoYXQgc2hvdWxkUGFyayBtYXkgaGF2ZSBiZWVuCi0gICAgICAgIC8vIGNs
ZWFyZWQgYXMgc29vbiBhcyB0aGUgcXVldWUgbG9jayB3YXMgcmVsZWFzZWQgYWJvdmUsIGJ1dCBp
dCB3aWxsIGhhcHBlbiB3aGlsZSB0aGUKLSAgICAgICAgLy8gcmVsZWFzaW5nIHRocmVhZCBob2xk
cyBtZSdzIHBhcmtpbmdMb2NrLgotCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7Ci0gICAgICAgICAgICB3
aGlsZSAobWUtPnNob3VsZFBhcmspCi0gICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRp
b24ud2FpdChsb2NrZXIpOwotICAgICAgICB9CisgICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhl
IHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNl
LCB3ZSBjYW4gcGFyay4KKyAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fYnl0
ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKIAotICAgICAgICBBU1NFUlQoIW1lLT5zaG91
bGRQYXJrKTsKLSAgICAgICAgQVNTRVJUKCFtZS0+bmV4dEluUXVldWUpOwotICAgICAgICBBU1NF
UlQoIW1lLT5xdWV1ZVRhaWwpOwotICAgICAgICAKLSAgICAgICAgLy8gTm93IHdlIGNhbiBsb29w
IGFyb3VuZCBhbmQgdHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2sgYWdhaW4uCisgICAgICAgIC8vIFdl
IGhhdmUgYXdha2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBj
aGFuZ2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFn
YWluLgogICAgIH0KIH0KIAogdm9pZCBMb2NrQmFzZTo6dW5sb2NrU2xvdygpCiB7Ci0gICAgLy8g
VGhlIGZhc3QgcGF0aCBjYW4gZmFpbCBlaXRoZXIgYmVjYXVzZSBvZiBzcHVyaW91cyB3ZWFrIENB
UyBmYWlsdXJlLCBvciBiZWNhdXNlIHNvbWVvbmUgcHV0IGEKLSAgICAvLyB0aHJlYWQgb24gdGhl
IHF1ZXVlLCBvciB0aGUgcXVldWUgbG9jayBpcyBoZWxkLiBJZiB0aGUgcXVldWUgbG9jayBpcyBo
ZWxkLCBpdCBjYW4gb25seSBiZQotICAgIC8vIGJlY2F1c2Ugc29tZW9uZSAqd2lsbCogZW5xdWV1
ZSBhIHRocmVhZCBvbnRvIHRoZSBxdWV1ZS4KLQotICAgIC8vIEFjcXVpcmUgdGhlIHF1ZXVlIGxv
Y2ssIG9yIHJlbGVhc2UgdGhlIGxvY2suIFRoaXMgbG9vcCBoYW5kbGVzIGJvdGggbG9jayByZWxl
YXNlIGluIGNhc2UgdGhlCi0gICAgLy8gZmFzdCBwYXRoJ3Mgd2VhayBDQVMgc3B1cmlvdXNseSBm
YWlsZWQgYW5kIGl0IGhhbmRsZXMgcXVldWUgbG9jayBhY3F1aXNpdGlvbiBpZiB0aGVyZSBpcwot
ICAgIC8vIGFjdHVhbGx5IHNvbWV0aGluZyBpbnRlcmVzdGluZyBvbiB0aGUgcXVldWUuCisgICAg
Ly8gUmVsZWFzZSB0aGUgbG9jayB3aGlsZSBmaW5kaW5nIG91dCBpZiBzb21lb25lIGlzIHBhcmtl
ZC4gTm90ZSB0aGF0IGFzIHNvb24gYXMgd2UgZG8gdGhpcywKKyAgICAvLyBzb21lb25lIG1pZ2h0
IGJhcmdlIGluLgorICAgIHVpbnQ4X3Qgb2xkQnl0ZVZhbHVlOwogICAgIGZvciAoOzspIHsKLSAg
ICAgICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOwotCi0gICAg
ICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKGN1cnJlbnRXb3JkVmFsdWUgPT0gaXNMb2NrZWRCaXQpIHsKLSAgICAgICAgICAg
IGlmIChtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0xvY2tlZEJpdCwgMCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGUgZmFzdCBwYXRoJ3Mgd2VhayBDQVMgaGFkIHNwdXJpb3VzbHkgZmFp
bGVkLCBhbmQgbm93IHdlIHN1Y2NlZWRlZC4gVGhlIGxvY2sgaXMKLSAgICAgICAgICAgICAgICAv
LyB1bmxvY2tlZCBhbmQgd2UncmUgZG9uZSEKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAvLyBMb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgotICAg
ICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoY3VycmVudFdvcmRWYWx1ZSAmIGlz
UXVldWVMb2NrZWRCaXQpIHsKLSAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIGl0IHdh
c24ndCBqdXN0IGEgc3B1cmlvdXMgd2VhayBDQVMgZmFpbHVyZSBhbmQgaWYgdGhlIHF1ZXVlIGxv
Y2sgaXMgbm90IGhlbGQsIHRoZW4gdGhlcmUKLSAgICAgICAgLy8gbXVzdCBiZSBhbiBlbnRyeSBv
biB0aGUgcXVldWUuCi0gICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVh
ZE1hc2spOwotCi0gICAgICAgIGlmIChtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50
V29yZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlIHwgaXNRdWV1ZUxvY2tlZEJpdCkpCisgICAgICAg
IG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVubG9ja2luZyB3
aXRoICIsIG9sZEJ5dGVWYWx1ZSwgIlxuIikpOworICAgICAgICBBU1NFUlQob2xkQnl0ZVZhbHVl
ICYgaXNIZWxkQml0KTsKKyAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9s
ZEJ5dGVWYWx1ZSwgMCkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICB1aW50cHRy
X3QgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Ci0gICAgICAgIAotICAgIC8vIEFm
dGVyIHdlIGFjcXVpcmUgdGhlIHF1ZXVlIGxvY2ssIHRoZSBMb2NrIG11c3Qgc3RpbGwgYmUgaGVs
ZCBhbmQgdGhlIHF1ZXVlIG11c3QgYmUKLSAgICAvLyBub24tZW1wdHkuIFRoZSBxdWV1ZSBtdXN0
IGJlIG5vbi1lbXB0eSBzaW5jZSBvbmx5IHRoZSBsb2NrU2xvdygpIG1ldGhvZCBjb3VsZCBoYXZl
IGhlbGQgdGhlCi0gICAgLy8gcXVldWUgbG9jayBhbmQgaWYgaXQgZGlkIHRoZW4gaXQgb25seSBy
ZWxlYXNlcyBpdCBhZnRlciBwdXR0aW5nIHNvbWV0aGluZyBvbiB0aGUgcXVldWUuCi0gICAgQVNT
RVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7Ci0gICAgQVNTRVJUKGN1cnJlbnRX
b3JkVmFsdWUgJiBpc1F1ZXVlTG9ja2VkQml0KTsKLSAgICBUaHJlYWREYXRhKiBxdWV1ZUhlYWQg
PSBiaXR3aXNlX2Nhc3Q8VGhyZWFkRGF0YSo+KGN1cnJlbnRXb3JkVmFsdWUgJiB+cXVldWVIZWFk
TWFzayk7Ci0gICAgQVNTRVJUKHF1ZXVlSGVhZCk7Ci0KLSAgICBUaHJlYWREYXRhKiBuZXdRdWV1
ZUhlYWQgPSBxdWV1ZUhlYWQtPm5leHRJblF1ZXVlOwotICAgIC8vIEVpdGhlciB0aGlzIHdhcyB0
aGUgb25seSB0aHJlYWQgb24gdGhlIHF1ZXVlLCBpbiB3aGljaCBjYXNlIHdlIGRlbGV0ZSB0aGUg
cXVldWUsIG9yIHRoZXJlCi0gICAgLy8gYXJlIHN0aWxsIG1vcmUgdGhyZWFkcyBvbiB0aGUgcXVl
dWUsIGluIHdoaWNoIGNhc2Ugd2UgY3JlYXRlIGEgbmV3IHF1ZXVlIGhlYWQuCi0gICAgaWYgKG5l
d1F1ZXVlSGVhZCkKLSAgICAgICAgbmV3UXVldWVIZWFkLT5xdWV1ZVRhaWwgPSBxdWV1ZUhlYWQt
PnF1ZXVlVGFpbDsKLQotICAgIC8vIENoYW5nZSB0aGUgcXVldWUgaGVhZCwgcG9zc2libHkgcmVt
b3ZpbmcgaXQgaWYgbmV3UXVldWVIZWFkIGlzIG51bGwuIE5vIG5lZWQgZm9yIGEgQ0FTIGxvb3As
Ci0gICAgLy8gc2luY2Ugd2UgaG9sZCB0aGUgcXVldWUgbG9jayBhbmQgdGhlIGxvY2sgaXRzZWxm
IHNvIG5vdGhpbmcgYWJvdXQgdGhlIGxvY2sgY2FuIGNoYW5nZSByaWdodAotICAgIC8vIG5vdy4K
LSAgICBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKLSAgICBBU1NFUlQoY3VycmVu
dFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KTsKLSAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAm
IGlzUXVldWVMb2NrZWRCaXQpOwotICAgIEFTU0VSVCgoY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1
ZUhlYWRNYXNrKSA9PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihxdWV1ZUhlYWQpKTsKLSAgICB1
aW50cHRyX3QgbmV3V29yZFZhbHVlID0gY3VycmVudFdvcmRWYWx1ZTsKLSAgICBuZXdXb3JkVmFs
dWUgJj0gfmlzTG9ja2VkQml0OyAvLyBSZWxlYXNlIHRoZSBMb2NrLgotICAgIG5ld1dvcmRWYWx1
ZSAmPSB+aXNRdWV1ZUxvY2tlZEJpdDsgLy8gUmVsZWFzZSB0aGUgcXVldWUgbG9jay4KLSAgICBu
ZXdXb3JkVmFsdWUgJj0gcXVldWVIZWFkTWFzazsgLy8gQ2xlYXIgb3V0IHRoZSBvbGQgcXVldWUg
aGVhZC4KLSAgICBuZXdXb3JkVmFsdWUgfD0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3UXVl
dWVIZWFkKTsgLy8gSW5zdGFsbCBuZXcgcXVldWUgaGVhZC4KLSAgICBtX3dvcmQuc3RvcmUobmV3
V29yZFZhbHVlKTsKLQotICAgIC8vIE5vdyB0aGUgbG9jayBpcyBhdmFpbGFibGUgZm9yIGFjcXVp
c2l0aW9uLiBCdXQgd2UganVzdCBoYXZlIHRvIHdha2UgdXAgdGhlIG9sZCBxdWV1ZSBoZWFkLgot
ICAgIC8vIEFmdGVyIHRoYXQsIHdlJ3JlIGRvbmUhCi0KLSAgICBxdWV1ZUhlYWQtPm5leHRJblF1
ZXVlID0gbnVsbHB0cjsKLSAgICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbCA9IG51bGxwdHI7Ci0KLSAg
ICAvLyBXZSBkbyB0aGlzIGNhcmVmdWxseSBiZWNhdXNlIHRoaXMgbWF5IHJ1biBlaXRoZXIgYmVm
b3JlIG9yIGR1cmluZyB0aGUgcGFya2luZ0xvY2sgY3JpdGljYWwKLSAgICAvLyBzZWN0aW9uIGlu
IGxvY2tTbG93KCkuCi0gICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+
IGxvY2tlcihxdWV1ZUhlYWQtPnBhcmtpbmdMb2NrKTsKLSAgICAgICAgcXVldWVIZWFkLT5zaG91
bGRQYXJrID0gZmFsc2U7Ci0gICAgfQotICAgIC8vIERvZXNuJ3QgbWF0dGVyIGlmIHdlIG5vdGlm
eV9hbGwoKSBvciBub3RpZnlfb25lKCkgaGVyZSBzaW5jZSB0aGUgb25seSB0aHJlYWQgdGhhdCBj
b3VsZCBiZQotICAgIC8vIHdhaXRpbmcgaXMgcXVldWVIZWFkLgotICAgIHF1ZXVlSGVhZC0+cGFy
a2luZ0NvbmRpdGlvbi5ub3RpZnlfb25lKCk7Ci0KLSAgICAvLyBUaGUgb2xkIHF1ZXVlIGhlYWQg
Y2FuIG5vdyBjb250ZW5kIGZvciB0aGUgbG9jayBhZ2Fpbi4gV2UncmUgZG9uZSEKKyAgICAvLyBO
b3RlIHRoYXQgc29tZW9uZSBjb3VsZCB0cnkgdG8gcGFyayByaWdodCBub3cuIElmIHRoYXQgaGFw
cGVucywgdGhleSB3aWxsIHJldHVybiBpbW1lZGlhdGVseQorICAgIC8vIGJlY2F1c2Ugb3VyIHBh
cmtpbmcgcHJlZGljYXRlIGlzIHRoYXQgbV9ieXRlID09IGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJp
dCwgYnV0IHdlJ3ZlIGFscmVhZHkgc2V0CisgICAgLy8gbV9ieXRlID0gMC4KKworICAgIC8vIElm
IHRoZXJlIGhhZCBiZWVuIHRocmVhZHMgcGFya2VkLCB1bnBhcmsgYWxsIG9mIHRoZW0uIFRoaXMg
Y2F1c2VzIGEgdGh1bmRlcmluZyBoZXJkLCBidXQgd2hpbGUKKyAgICAvLyB0aGF0IGlzIHRoZW9y
ZXRpY2FsbHkgc2NhcnksIGl0J3MgdG90YWxseSBmaW5lIGluIFdlYktpdCBiZWNhdXNlIHdlIHVz
dWFsbHkgZG9uJ3QgaGF2ZSBlbm91Z2gKKyAgICAvLyB0aHJlYWRzIGZvciB0aGlzIHRvIG1hdHRl
ci4KKyAgICAvLyBGSVhNRTogV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyB0byBleGhpYml0IHRo
dW5kZXJpbmcgaGVyZC4gV2UgY291bGQgdXNlIHVucGFya09uZSgpLCBhbmQgaWYKKyAgICAvLyB0
aGF0IHJldHVybnMgdHJ1ZSwganVzdCBzZXQgdGhlIHBhcmtlZCBiaXQgYWdhaW4uIElmIGluIHRo
ZSBwcm9jZXNzIG9mIHNldHRpbmcgdGhlIHBhcmtlZCBiaXQKKyAgICAvLyB3ZSBmYWlsIHRoZSBD
QVMsIHRoZW4ganVzdCB1bnBhcmsgYWdhaW4uCisgICAgaWYgKG9sZEJ5dGVWYWx1ZSAmIGhhc1Bh
cmtlZEJpdCkKKyAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrQWxsKCZtX2J5dGUpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHJldmlzaW9uIDE4ODMwOSkKKysrIFNvdXJjZS9X
VEYvd3RmL0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTA4ICszMywxOCBAQAogCiBuYW1l
c3BhY2UgV1RGIHsKIAotLy8gQSBMb2NrIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0ZXggdGhhdCBn
aXZlcyB5b3UgdGhlIGJlc3Qgb2YgU3BpbkxvY2sgYW5kIE11dGV4LiBGb3Igc21hbGwgY3JpdGlj
YWwKLS8vIHNlY3Rpb25zICh0aGF0IHRha2UgbmFub3NlY29uZHMpLCBpdCB3aWxsIHVzdWFsbHkg
cGVyZm9ybSB3aXRoaW4gMnggb2YgYSBTcGluTG9jayBpbiBib3RoIHRoZQotLy8gY29udGVuZGVk
IGFuZCB1bmNvbnRlbmRlZCBjYXNlLiBXaGVuIHVzaW5nIGEgTXV0ZXgsIHN1Y2ggY3JpdGljYWwg
c2VjdGlvbnMgdGFrZSB1cCB0byAxMDB4IGxvbmdlcgotLy8gdGhhbiBMb2NrIGluIHRoZSBjb250
ZW5kZWQgY2FzZSwgb3IgM3ggbG9uZ2VyIHRoYW4gTG9jayBpbiB0aGUgdW5jb250ZW5kZWQgY2Fz
ZS4gRm9yIGxvbmdlcgotLy8gY3JpdGljYWwgc2VjdGlvbnMgKHRoYXQgdGFrZSB0ZW5zIG9mIG1p
Y3Jvc2Vjb25kcyksIGl0IHdpbGwgcGVyZm9ybSBhcyB3ZWxsIGFzIGEgTXV0ZXggYW5kIHNsaWdo
dGx5Ci0vLyBiZXR0ZXIgdGhhbiBhIFNwaW5Mb2NrLiBCdXQsIGNydWNpYWxseSwgYSBTcGluTG9j
ayB3aWxsIGJ1cm4gdXAgdG8gOTB4IG1vcmUgdGltZSBpbiB0aGUga2VybmVsIGZvcgotLy8gc3Vj
aCBjcml0aWNhbCBzZWN0aW9ucyB0aGFuIGVpdGhlciBMb2NrIG9yIE11dGV4LiBIZW5jZSwgdXNp
bmcgTG9jayB3aWxsIG1ha2UgdGhlIGNvbW1vbiBjYXNlIG9mCi0vLyBsb2NraW5nIHBlcmZvcm0g
Y2xvc2UgdG8gU3BpbkxvY2sgZm9yIGFueSBjcml0aWNhbCBzZWN0aW9uIHRoYXQgZG9lcyBtb3Jl
IHRoYW4gYSBmZXcgbmFub3NlY29uZHMgb2YKLS8vIHdvcmsgd2hpbGUgYmVpbmcgYXMga2luZCB0
byB0aGUgc2NoZWR1bGVyIGZvciBsb25nZXIgY3JpdGljYWwgc2VjdGlvbnMgYXMgYSBNdXRleC4K
LS8vCi0vLyBMaWtlIFNwaW5Mb2NrLCBMb2NrIHRha2VzIHZlcnkgbGl0dGxlIG1lbW9yeSAtIGp1
c3Qgc2l6ZW9mKHZvaWQqKSwgdGhvdWdoIHNlZSBhIGRldGFpbGVkIGNhdmVhdAotLy8gYmVsb3cu
Ci0vLwotLy8gR2VuZXJhbGx5LCB5b3Ugc2hvdWxkIHVzZSBMb2NrIGluc3RlYWQgb2YgU3Bpbkxv
Y2sgYmVjYXVzZSB3aGlsZSBpdCBwZW5hbGl6ZXMgeW91IHNsaWdodGx5LCB5b3UKLS8vIG1ha2Ug
dXAgZm9yIGl0IGJ5IG5vdCB3YXN0aW5nIENQVSBjeWNsZXMgaW4gY2FzZSBvZiBjb250ZW50aW9u
LgotLy8KLS8vIFRoZSBMb2NrIGhhcyB0aGUgZm9sbG93aW5nIG5pY2UgcHJvcGVydGllczoKLS8v
Ci0vLyAtIFVuY29udGVuZGVkIGZhc3QgcGF0aHMgZm9yIGxvY2sgYWNxdWlzaXRpb24gYW5kIGxv
Y2sgcmVsZWFzZSB0aGF0IGFyZSBhbG1vc3QgYXMgZmFzdCBhcyB0aGUKLS8vICAgdW5jb250ZW5k
ZWQgZmFzdCBwYXRocyBvZiBhIHNwaW5sb2NrLiBUaGUgb25seSBvdmVyaGVhZCBpcyB0aGF0IHRo
ZSBzcGlubG9jayB3aWxsIG5vdCBDQVMgb24KLS8vICAgcmVsZWFzZSwgd2hpbGUgTG9jayB3aWxs
IENBUy4gVGhpcyBvdmVyaGVhZCAqY2FuKiBzbG93IHRoaW5ncyBkb3duIGZvciBleHRyZW1lbHkg
c21hbGwgY3JpdGljYWwKLS8vICAgc2VjdGlvbnMgdGhhdCBkbyBsaXR0bGUgb3Igbm90aGluZyAt
IGl0IG1ha2VzIHRoZW0gMnggc2xvd2VyIHNpbmNlIGluIHRoYXQgY2FzZSwgQ0FTIGlzIHRoZSBt
b3N0Ci0vLyAgIGV4cGVuc2l2ZSBpbnN0cnVjdGlvbiBhbmQgaGF2aW5nIHR3byBvZiB0aGVtIGlz
IHR3aWNlIGFzIGJhZCBhcyBqdXN0IGhhdmluZyBvbmUuIEhvd2V2ZXIsIHRoaXMKLS8vICAgbG9j
ayBpbXBsZW1lbnRhdGlvbiBpcyBzdGlsbCBhbG1vc3QgM3ggZmFzdGVyIHRoYW4gYSBwbGF0Zm9y
bSBtdXRleCBpbiB0aG9zZSBjYXNlcy4gSXQncyB1bmxpa2VseQotLy8gICB0aGF0IHlvdSdsbCBl
bmNvdW50ZXIgbm8tb3AgY3JpdGljYWwgc2VjdGlvbnMsIHNvIHVzdWFsbHksIHRoaXMgbG9jayBp
cyBiZXR0ZXIgdGhhbiBhIHNwaW5sb2NrLgotLy8KLS8vIC0gQ29udGVuZGVkIGZhc3QgcGF0aCB0
aGF0IGF0dGVtcHRzIHRvIHNwaW4gYW5kIHlpZWxkIGZvciBzb21lIG51bWJlciBvZiB0aW1lcy4g
Rm9yIGNyaXRpY2FsCi0vLyAgIHNlY3Rpb25zIHRoYXQgYXJlIGhlbGQgb25seSBicmllZmx5LCB0
aGlzIGFsbG93cyBMb2NrIHRvIHBlcmZvcm0gYWxtb3N0IGFzIHdlbGwgYXMgYSBTcGluTG9jay4K
LS8vICAgU3BpbkxvY2sgY2FuIHN0aWxsIGJlIGFsbW9zdCAyeCBmYXN0ZXIgdGhhbiBMb2NrIGlm
IHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGEgbm8tb3AsIGJ1dCB0aGlzCi0vLyAgIGFkdmFudGFn
ZSBkaW1pbmlzaGVzIGFzIHRoZSBjcml0aWNhbCBzZWN0aW9uIGdyb3dzLgotLy8KLS8vIC0gQ29u
dGVuZGVkIHNsb3cgcGF0aCB0aGF0IGVucXVldWVzIHRoZSBjb250ZW5kaW5nIHRocmVhZCBhbmQg
Y2F1c2VzIGl0IHRvIHdhaXQgb24gYSBjb25kaXRpb24KLS8vICAgdmFyaWFibGUgdW50aWwgdGhl
IGxvY2sgaXMgcmVsZWFzZWQuIFRoaXMgaXMgdGhlIG9ubHkgY2FzZSBpbiB3aGljaCBzeXN0ZW0g
bXV0ZXhlcyBhbmQgY29uZGl0aW9uCi0vLyAgIHZhcmlhYmxlcyBhcmUgdXNlZC4gVGhpcyBjYXNl
IGlzIHJhcmUgYW5kIHNlbGYtbGltaXRpbmc6IGl0IHdpbGwgb25seSBoYXBwZW4gd2hlbiBhIGxv
Y2sgaXMgaGVsZAotLy8gICBmb3IgbG9uZyBlbm91Z2ggdGhhdCBzcGlubmluZyBzb21lIG51bWJl
ciBvZiB0aW1lcyBkb2Vzbid0IGFjcXVpcmUgaXQuIFRoZSBmYWN0IHRoYXQgTG9jayBkb2VzCi0v
LyAgIHRoaXMgYXMgYSBmYWxsYmFjayB3aGVuIHNwaW5uaW5nIGZvciBzb21lIG51bWJlciBvZiB0
aW1lcyBmYWlscyBtZWFucyB0aGF0IGl0IHdpbGwgYnVybgotLy8gICBkcmFtYXRpY2FsbHkgZmV3
ZXIgQ1BVIGN5Y2xlcyAtIGZvciBleGFtcGxlIHdpdGggMTAgdGhyZWFkcyBvbiBhbiA4IGxvZ2lj
YWwgQ1BVIG1hY2hpbmUgYWNxdWlyaW5nCi0vLyAgIGEgY3JpdGljYWwgc2VjdGlvbiB0aGF0IHRh
a2VzIDUwIG1pY3Jvc2Vjb25kcywgdGhlIFdURiBTcGluTG9jayB3aWxsIGNhdXNlIDkweCBtb3Jl
IHRpbWUgdG8gYmUKLS8vICAgc3BlbnQgaW4gdGhlIGtlcm5lbCB0aGFuIExvY2suCi0vLwotLy8g
LSBWZXJ5IGxvdyBtZW1vcnkgdXNhZ2UuIEVhY2ggTG9jayByZXF1aXJlcyBvbmx5IHNpemVvZih2
b2lkKikgbWVtb3J5LiBXaGVuIHRoZSBjb250ZW5kZWQgc2xvdwotLy8gICBwYXRoIGlzIGFjdGl2
YXRlZCwgTG9jayBvbmx5IHJlbGllcyBvbiBlYWNoIHRocmVhZCBoYXZpbmcgYSBwcmVhbGxvY2F0
ZWQgdGhyZWFkLXNwZWNpZmljIGRhdGEKLS8vICAgc3RydWN0dXJlIGNhbGxlZCBUaHJlYWREYXRh
IHRoYXQsIHRvZ2V0aGVyIHdpdGggdGhlIExvY2sgaXRzZWxmLCBpcyB1c2VkIHRvIGJ1aWxkIHVw
IGEgdGhyZWFkCi0vLyAgIHF1ZXVlLiBTbywgdGhlIHRvdGFsIG1lbW9yeSB1c2FnZSBvZiBhbGwg
TG9ja3MgaXMgc3RpbGwgYm91bmRlZCBieToKLS8vCi0vLyAgICAgICBudW1iZXJPZkxvY2tzICog
c2l6ZW9mKHZvaWQqKSArIG51bWJlck9mVGhyZWFkcyAqIHNpemVvZihUaHJlYWREYXRhKQotLy8K
LS8vICAgV2hlcmUgVGhyZWFkRGF0YSBpcyBhIGRlY2VudGx5IGxhcmdlIGRhdGEgc3RydWN0dXJl
LCBidXQgd2Ugd2lsbCBvbmx5IGV2ZXIgaGF2ZSBvbmUgcGVyIHRocmVhZCwKLS8vICAgcmVnYXJk
bGVzcyBvZiB0aGUgbnVtYmVyIG9mIExvY2tzIGluIG1lbW9yeS4gQW5vdGhlciB3YXkgdG8gdmll
dyB0aGlzIGlzIHRoYXQgdGhlIHdvcnN0IGNhc2UKLS8vICAgbWVtb3J5IHVzYWdlIHBlciBMb2Nr
IGlzOgotLy8KLS8vICAgICAgIHNpemVvZih2b2lkKikgKyBudW1iZXJPZlRocmVhZHMgLyBudW1i
ZXJPZkxvY2tzICogc2l6ZW9mKFRocmVhZERhdGEpCi0vLwotLy8gICBTbywgdW5sZXNzIHlvdSBo
YXZlIGEgc21hbGwgbnVtYmVyIG9mIExvY2tzIChvciwgYSBsYXJnZSBudW1iZXIgb2YgdGhyZWFk
cywgd2hpY2ggaXMgZmFyIGxlc3MKLS8vICAgbGlrZWx5KSwgdGhlIG1lbW9yeSB1c2FnZSBwZXIt
TG9jayBpcyBzdGlsbCBnb2luZyB0byBiZSBzb21ld2hlcmUgYXJvdW5kIHNpemVvZih2b2lkKiku
Ci0vLwotLy8gLSBCYXJnaW5nIGZhc3QgcGF0aHMuIFRoZSBMb2NrIGlzIHR1bmVkIGZvciBtYXhp
bXVtIHRocm91Z2hwdXQgcmF0aGVyIHRoYW4gbWF4aW11bSBmYWlybmVzcy4gSWYKLS8vICAgYSB0
aHJlYWQgcmVsZWFzZXMgYSBMb2NrIHRoYXQgd2FzIGNvbnRlbmRlZCBhbmQgaGFkIGEgcXVldWUg
b2Ygd2FpdGluZyB0aHJlYWRzLCB0aGVuIGl0IHdpbGwKLS8vICAgd2FrZSB1cCB0aGUgaGVhZCBv
ZiB0aGUgcXVldWUsIGJ1dCBpdCB3aWxsIGFsc28gbWFyayB0aGUgbG9jayBhcyBiZWluZyBhdmFp
bGFibGUuIFRoaXMgbWVhbnMgdGhhdAotLy8gICBzb21lIG90aGVyIHRocmVhZCB0aGF0IGlzIGp1
c3Qgbm93IGF0dGVtcHRpbmcgdG8gYWNxdWlyZSB0aGUgbG9jayBtYXkgZ2V0IGl0IGJlZm9yZSB0
aGUgdGhyZWFkCi0vLyAgIHRoYXQgZ290IHdva2VuIHVwLiBXaGVuIGEgdGhyZWFkIGJhcmdlcyBp
bnRvIHRoZSBsb2NrLCB0aGUgdGhyZWFkIHRoYXQgZ290IHdva2VuIHVwIHdpbGwgc2ltcGx5Ci0v
LyAgIGdvIGJhY2sgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuIFRoZSBiYXJnaW5nIGJlaGF2aW9y
IGVuZHMgdXAgYmVpbmcgcHJvYmFiaWxpc3RpYyBvbiBtb3N0Ci0vLyAgIHBsYXRmb3JtcyBhbmQg
ZXZlbiB0aG91Z2ggaXQgbWF5IGJlIHVuZmFpciB0byBzb21lIHRocmVhZCBhdCBzb21lIG1vbWVu
dCBpbiB0aW1lLCBpdCB3aWxsIHJhcmVseQotLy8gICBoYXZlIGEgbG9uZyBzdHJlYWsgb2YgdW5m
YWlybmVzcyB0b3dhcmRzIGFueSBwYXJ0aWN1bGFyIHRocmVhZDogZXZlbnR1YWxseSBlYWNoIHRo
cmVhZCB3YWl0aW5nIG9uCi0vLyAgIHRoZSBsb2NrIHdpbGwgZ2V0IHRvIGhhdmUgYSB0dXJuIHNv
IGxvbmcgYXMgbm8gdGhyZWFkIGp1c3QgaG9sZHMgdGhlIGxvY2sgZm9yZXZlci4gVGhhdCBzYWlk
LAotLy8gICB0aGVyZSAqaXMqIGEgY2hhbmNlIG9mIHBhdGhvbG9naWVzIC0gdXNlcnMgb2YgTG9j
ayBzaG91bGQgbm90IGRlcGVuZCBvbiBmaXJzdC1pbiwgZmlyc3Qtb3V0IGxvY2sKLS8vICAgYWNx
dWlzaXRpb24gb3JkZXIgdW5kZXIgY29udGVudGlvbi4gVGhlIHNhbWUgY2F2ZWF0IGlzIGdlbmVy
YWxseSB0cnVlIG9mIFNwaW5Mb2NrIGFuZCBwbGF0Zm9ybQotLy8gICBtdXRleGVzIG9uIHNvbWUg
cGxhdGZvcm1zLgotCi0vLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIExvY2sgbW9yZSBlZmZp
Y2llbnQgYnkgdXNpbmcgUGFya2luZ0xvdCBhbmQgYXRvbWljIGFkZCBpbnN0ZWFkIG9mIENBUy4K
LS8vIFRoZSBsb2NrIHdvdWxkIGJlIGF2YWlsYWJsZSBpZiB0aGUgMzItYml0IGxvY2sgd29yZCA8
PSAxLiBMb2NraW5nIHdvdWxkIGF0b21pY2FsbHkgYWRkIDIgdG8gdGhlCi0vLyB3b3JkLiBUaGUg
bG9jayB3b3VsZCBiZSBrbm93biB0byBiZSBoZWxkIGlmIHRoZSBvbGQgdmFsdWUgb2YgdGhlIHdv
cmQgd2FzIDw9IDEuIFRoZSBsb3cgYml0Ci0vLyBqdXN0IGluZGljYXRlcyBpZiBhbnlvbmUgaXMg
d2FpdGluZy4gSWYgdGhlIHdvcmQgd2FzID49IDIgYWZ0ZXIgdGhlIGF0b21pYyBhZGQsIHdlIHdv
dWxkIGdvIHRvIGEKLS8vIHNsb3cgcGF0aCB0aGF0IHJlcGVhdGVkbHkgYXR0ZW1wdHMgdG8gc2V0
IHRoZSBsb2NrIHdvcmQgdG8gMyBbc2ljXSBmcm9tIDAgb3IgMSwgYW5kIHBhcmtzIGlmIHRoYXQn
cwotLy8gbm90IHBvc3NpYmxlLiBUaGUgc2xvdyBwYXRoIGNvdWxkIGFsc28gcGVyZm9ybSBkZWZl
bnNpdmUgZml4dXAgdGhhdCBkcm9wcyB0aGUgbG9jayB2YWx1ZSBkb3duIHRvCi0vLyAzIGlmIGl0
IHdhcyBncmVhdGVyIHRoYW4gMywgYW55dGltZSB0aGF0IGl0IG5lZWRlZCB0byBnbyB0byBwYXJr
LiBUaGUgdW5sb2NrIGZhc3QgcGF0aCB3b3VsZAotLy8gYXRvbWljYWxseSBzdWJ0cmFjdCAyLiBJ
ZiB0aGUgZGVjcmVtZW50IG9wZXJhdGlvbiBkb2VzIG5vdCBjYXVzZSB0aGUgY291bnQgdG8gemVy
bywgaXQgd291bGQgZ28gdG8KLS8vIGEgc2xvdyBwYXRoLiBUaGUgc2xvdyBwYXRoIHdvdWxkIHVu
cGFyayBvbmUuIElmIHVucGFya2luZyByZXR1cm5zIGZhbHNlLCB0aGUgc2xvdyBwYXRoIHdvdWxk
Ci0vLyBhdHRlbXB0IGEgc3Ryb25nIENBUyBmcm9tIDEgdG8gMC4gSXQgd291bGRuJ3QgZG8gYW55
dGhpbmcgaWYgdGhlIENBUyBmYWlscywgc2luY2UgdGhlIG9ubHkgZ29hbCBvZgotLy8gdGhhdCBD
QVMgaXMgdG8gdGVsbCBmdXR1cmUgdW5sb2NrIGZhc3QgcGF0aHMgdGhhdCB0aGVyZSBpcyBwb3Nz
aWJseSBhIHRocmVhZCBwYXJrZWQuIEFzIHN1Y2ggdGhlCi0vLyBzdGF0ZXMgb2YgdGhlIGxvY2sg
YXJlOgotLy8KLS8vICAgMDogbG9jayBhdmFpbGFibGUgYW5kIG5vYm9keSB3YWl0aW5nCi0vLyAg
IDE6IGxvY2sgYXZhaWxhYmxlIGFuZCB0aGVyZSBtYXkgYmUgdGhyZWFkcyB3YWl0aW5nCi0vLyAg
IDI6IGxvY2sgdGFrZW4gYW5kIG5vIHRocmVhZHMgd2FpdGluZwotLy8gPj0zOiBsb2NrIHRha2Vu
IGFuZCB0aHJlYWRzIHdhaXRpbmcKLS8vCi0vLyBJdCBtYXkgYmUgcG9zc2libGUgdG8gZGVzaWdu
IGFuIGV2ZW4gYmV0dGVyIGxvY2sgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gYXRvbWljIGluY3Jl
bWVudHMgcmF0aGVyCi0vLyB0aGFuIGF0b21pYyArPTIvLT0yLgotLy8KLS8vIE5vdGUgdGhhdCBi
ZWNhdXNlIFBhcmtpbmdMb3QgdXNlcyB0aGlzIGxvY2sgaW50ZXJuYWxseSwgd2Ugd291bGQgcHJv
YmFibHkgcmVuYW1lIHRoaXMgbG9jawotLy8gaW1wbGVtZW50YXRpb24gdG8gc29tZXRoaW5nIGxp
a2UgQm9vdHN0cmFwTG9jayBvciBldmVuIG1ha2UgaXQgcGFydCBvZiBhbiBhbm9ueW1vdXMgbmFt
ZXNwYWNlCi0vLyBpbnNpZGUgUGFya2luZ0xvdC4KLS8vCi0vLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3ODQxCisvLyBUaGlzIGlzIGEgZnVsbHkgYWRhcHRpdmUg
bXV0ZXggdGhhdCBvbmx5IHJlcXVpcmVzIDEgYnl0ZSBvZiBzdG9yYWdlLiBJdCBoYXMgZmFzdCBw
YXRocyB0aGF0IGFyZQorLy8gY29tcGV0ZXRpdmUgdG8gU3BpbkxvY2sgKHVuY29udGVuZGVkIGxv
Y2tpbmcgaXMgaW5saW5lZCBhbmQgaXMganVzdCBhIENBUywgbWljcm9jb250ZW50aW9uIGlzCisv
LyBoYW5kbGVkIGJ5IHNwaW5uaW5nIGFuZCB5aWVsZGluZyksIGFuZCBhIHNsb3cgcGF0aCB0aGF0
IGlzIGNvbXBldGV0aXZlIHRvIE11dGV4IChpZiBhIGxvY2sgY2Fubm90CisvLyBiZSBhY3F1aXJl
ZCBpbiBhIHNob3J0IHBlcmlvZCBvZiB0aW1lLCB0aGUgdGhyZWFkIGlzIHB1dCB0byBzbGVlcCB1
bnRpbCB0aGUgbG9jayBpcyBhdmFpbGFibGUKKy8vIGFnYWluKS4gSXQgdXNlcyBsZXNzIG1lbW9y
eSB0aGFuIGVpdGhlciBTcGluTG9jayBvciBNdXRleC4KIAogLy8gVGhpcyBpcyBhIHN0cnVjdCB3
aXRob3V0IGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3RvciBzbyB0aGF0IGl0IGNhbiBiZSBzdGF0
aWNhbGx5IGluaXRpYWxpemVkLgogLy8gVXNlIExvY2sgaW4gaW5zdGFuY2UgdmFyaWFibGVzLgog
c3RydWN0IExvY2tCYXNlIHsKICAgICB2b2lkIGxvY2soKQogICAgIHsKLSAgICAgICAgaWYgKExJ
S0VMWShtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0xvY2tlZEJpdCwgc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSkpKSB7CisgICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVF
eGNoYW5nZVdlYWsoMCwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpIHsK
ICAgICAgICAgICAgIC8vIExvY2sgYWNxdWlyZWQhCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTE0NCw4ICs1NCw4IEBAIHN0cnVjdCBMb2NrQmFzZSB7CiAKICAgICB2b2lkIHVu
bG9jaygpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VX
ZWFrKGlzTG9ja2VkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsKLSAgICAg
ICAgICAgIC8vIExvY2sgcmVsZWFzZWQsIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCisgICAgICAg
IGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsKKyAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQg
YW5kIG5vYm9keSB3YXMgd2FpdGluZyEKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkBAIC0xNTQsNyArNjQsNyBAQCBzdHJ1Y3QgTG9ja0Jhc2UgewogCiAgICAgYm9vbCBpc0hlbGQo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fd29yZC5sb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcXVpcmUpICYgaXNMb2NrZWRCaXQ7CisgICAgICAgIHJldHVybiBtX2J5dGUubG9hZChz
dGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzSGVsZEJpdDsKICAgICB9CiAKICAgICBib29s
IGlzTG9ja2VkKCkgY29uc3QKQEAgLTE2MywxNCArNzMsMTMgQEAgc3RydWN0IExvY2tCYXNlIHsK
ICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGlzTG9ja2Vk
Qml0ID0gMTsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGlzUXVldWVMb2NrZWRCaXQgPSAy
OwotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcXVldWVIZWFkTWFzayA9IDM7CisgICAgc3Rh
dGljIGNvbnN0IHVpbnQ4X3QgaXNIZWxkQml0ID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdWludDhf
dCBoYXNQYXJrZWRCaXQgPSAyOwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Ns
b3coKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CiAKLSAgICBB
dG9taWM8dWludHB0cl90PiBtX3dvcmQ7CisgICAgQXRvbWljPHVpbnQ4X3Q+IG1fYnl0ZTsKIH07
CiAKIGNsYXNzIExvY2sgOiBwdWJsaWMgTG9ja0Jhc2UgewpAQCAtMTc4LDcgKzg3LDcgQEAgY2xh
c3MgTG9jayA6IHB1YmxpYyBMb2NrQmFzZSB7CiBwdWJsaWM6CiAgICAgTG9jaygpCiAgICAgewot
ICAgICAgICBtX3dvcmQuc3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAg
ICAgIG1fYnl0ZS5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKICAgICB9CiB9
OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAkocmV2aXNpb24gMTg4MzA5KQorKysgU291cmNl
L1dURi93dGYvUGFya2luZ0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDkgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYXJraW5nTG90LmgiCiAKKyNpbmNsdWRl
ICJCYXNpY0xvY2suaCIKICNpbmNsdWRlICJEYXRhTG9nLmgiCiAjaW5jbHVkZSAiSGFzaEZ1bmN0
aW9ucy5oIgotI2luY2x1ZGUgIkxvY2suaCIKICNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5o
IgogI2luY2x1ZGUgIlRocmVhZFNwZWNpZmljLmgiCiAjaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0
aXZlcy5oIgpAQCAtMTcwLDcgKzE3MCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRoaXMgbG9jayBw
cm90ZWN0cyB0aGUgZW50aXJlIGJ1Y2tldC4gVGhvdSBzaGFsbCBub3QgbWFrZSBjaGFuZ2VzIHRv
IEJ1Y2tldCB3aXRob3V0IGhvbGRpbmcKICAgICAvLyB0aGlzIGxvY2suCi0gICAgTG9jayBsb2Nr
OworICAgIEJhc2ljTG9jayBsb2NrOwogCiAgICAgLy8gUHV0IHNvbWUgZGlzdGFuZSBiZXR3ZWVu
IGJ1Y2tldHMgaW4gbWVtb3J5LiBUaGlzIGlzIG9uZSBvZiBzZXZlcmFsIG1pdGlnYXRpb25zIGFn
YWluc3QgZmFsc2UKICAgICAvLyBzaGFyaW5nLgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MzA5KQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDgtMTEgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBBbHdheXMgdXNlIGEgYnl0ZS1z
aXplZCBsb2NrIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDc5MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBbGwgcHJldmlvdXMgdGVzdHMgb2YgTG9jayBhcmUgbm93IHRlc3Rz
IG9mIEJhc2ljTG9jay4gQWxsIHByZXZpb3VzIHRlc3RzIG9mIEJ5dGVMb2NrIGFyZQorICAgICAg
ICBub3cgdGVzdHMgb2YgTG9jay4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0xvY2suY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cnVuTG9ja1Rlc3QpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTUtMDgtMTEgIE1hcmsgTGFtICA8bWFyay5s
YW1AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBuYW1lcyBvZiBMb2NrIHRlc3RzOiBzaG91bGQg
YmUgIkNvbnRlbmRlZCIsIG5vdCAiQ29udGVudGVkIi4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0xvY2suY3BwCShyZXZpc2lvbiAxODgzMDkpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDx3dGYvQnl0ZUxvY2suaD4KKyNp
bmNsdWRlIDx3dGYvQmFzaWNMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4K
QEAgLTY4LDY5ICs2OCw2OSBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVkIG51bVRocmVhZEdy
b3VwCiAgICAgICAgIEVYUEVDVF9FUShleHBlY3RlZCwgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0p
OwogfQogCi1URVNUKFdURl9Mb2NrLCBVbmNvbnRlbmRlZFNob3J0U2VjdGlvbikKK1RFU1QoV1RG
X0Jhc2ljTG9jaywgVW5jb250ZW5kZWRTaG9ydFNlY3Rpb24pCiB7Ci0gICAgcnVuTG9ja1Rlc3Q8
TG9jaz4oMSwgMSwgMSwgMTAwMDAwMDApOworICAgIHJ1bkxvY2tUZXN0PEJhc2ljTG9jaz4oMSwg
MSwgMSwgMTAwMDAwMDApOwogfQogCi1URVNUKFdURl9Mb2NrLCBVbmNvbnRlbmRlZExvbmdTZWN0
aW9uKQorVEVTVChXVEZfQmFzaWNMb2NrLCBVbmNvbnRlbmRlZExvbmdTZWN0aW9uKQogewotICAg
IHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEsIDEwMDAwLCAxMDAwKTsKKyAgICBydW5Mb2NrVGVzdDxC
YXNpY0xvY2s+KDEsIDEsIDEwMDAwLCAxMDAwKTsKIH0KIAotVEVTVChXVEZfTG9jaywgQ29udGVu
ZGVkU2hvcnRTZWN0aW9uKQorVEVTVChXVEZfQmFzaWNMb2NrLCBDb250ZW5kZWRTaG9ydFNlY3Rp
b24pCiB7Ci0gICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMSwgMTAsIDEsIDEwMDAwMDAwKTsKKyAgICBy
dW5Mb2NrVGVzdDxCYXNpY0xvY2s+KDEsIDEwLCAxLCAxMDAwMDAwMCk7CiB9CiAKLVRFU1QoV1RG
X0xvY2ssIENvbnRlbmRlZExvbmdTZWN0aW9uKQorVEVTVChXVEZfQmFzaWNMb2NrLCBDb250ZW5k
ZWRMb25nU2VjdGlvbikKIHsKLSAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxMCwgMTAwMDAsIDEw
MDAwKTsKKyAgICBydW5Mb2NrVGVzdDxCYXNpY0xvY2s+KDEsIDEwLCAxMDAwMCwgMTAwMDApOwog
fQogCi1URVNUKFdURl9Mb2NrLCBNYW55Q29udGVuZGVkU2hvcnRTZWN0aW9ucykKK1RFU1QoV1RG
X0Jhc2ljTG9jaywgTWFueUNvbnRlbmRlZFNob3J0U2VjdGlvbnMpCiB7Ci0gICAgcnVuTG9ja1Rl
c3Q8TG9jaz4oMTAsIDEwLCAxLCA1MDAwMDApOworICAgIHJ1bkxvY2tUZXN0PEJhc2ljTG9jaz4o
MTAsIDEwLCAxLCA1MDAwMDApOwogfQogCi1URVNUKFdURl9Mb2NrLCBNYW55Q29udGVuZGVkTG9u
Z1NlY3Rpb25zKQorVEVTVChXVEZfQmFzaWNMb2NrLCBNYW55Q29udGVuZGVkTG9uZ1NlY3Rpb25z
KQogewotICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwgMTAwMDAsIDEwMDApOworICAgIHJ1
bkxvY2tUZXN0PEJhc2ljTG9jaz4oMTAsIDEwLCAxMDAwMCwgMTAwMCk7CiB9CiAKLVRFU1QoV1RG
X0J5dGVMb2NrLCBVbmNvbnRlbmRlZFNob3J0U2VjdGlvbikKK1RFU1QoV1RGX0xvY2ssIFVuY29u
dGVuZGVkU2hvcnRTZWN0aW9uKQogewotICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxLCAxLCAx
LCAxMDAwMDAwMCk7CisgICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMSwgMSwgMSwgMTAwMDAwMDApOwog
fQogCi1URVNUKFdURl9CeXRlTG9jaywgVW5jb250ZW5kZWRMb25nU2VjdGlvbikKK1RFU1QoV1RG
X0xvY2ssIFVuY29udGVuZGVkTG9uZ1NlY3Rpb24pCiB7Ci0gICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxv
Y2s+KDEsIDEsIDEwMDAwLCAxMDAwKTsKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxLCAxMDAw
MCwgMTAwMCk7CiB9CiAKLVRFU1QoV1RGX0J5dGVMb2NrLCBDb250ZW5kZWRTaG9ydFNlY3Rpb24p
CitURVNUKFdURl9Mb2NrLCBDb250ZW5kZWRTaG9ydFNlY3Rpb24pCiB7Ci0gICAgcnVuTG9ja1Rl
c3Q8Qnl0ZUxvY2s+KDEsIDEwLCAxLCAxMDAwMDAwMCk7CisgICAgcnVuTG9ja1Rlc3Q8TG9jaz4o
MSwgMTAsIDEsIDEwMDAwMDAwKTsKIH0KIAotVEVTVChXVEZfQnl0ZUxvY2ssIENvbnRlbmRlZExv
bmdTZWN0aW9uKQorVEVTVChXVEZfTG9jaywgQ29udGVuZGVkTG9uZ1NlY3Rpb24pCiB7Ci0gICAg
cnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEsIDEwLCAxMDAwMCwgMTAwMDApOworICAgIHJ1bkxvY2tU
ZXN0PExvY2s+KDEsIDEwLCAxMDAwMCwgMTAwMDApOwogfQogCi1URVNUKFdURl9CeXRlTG9jaywg
TWFueUNvbnRlbmRlZFNob3J0U2VjdGlvbnMpCitURVNUKFdURl9Mb2NrLCBNYW55Q29udGVuZGVk
U2hvcnRTZWN0aW9ucykKIHsKLSAgICBydW5Mb2NrVGVzdDxCeXRlTG9jaz4oMTAsIDEwLCAxLCA1
MDAwMDApOworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwgMSwgNTAwMDAwKTsKIH0KIAot
VEVTVChXVEZfQnl0ZUxvY2ssIE1hbnlDb250ZW5kZWRMb25nU2VjdGlvbnMpCitURVNUKFdURl9M
b2NrLCBNYW55Q29udGVuZGVkTG9uZ1NlY3Rpb25zKQogewotICAgIHJ1bkxvY2tUZXN0PEJ5dGVM
b2NrPigxMCwgMTAsIDEwMDAwLCAxMDAwKTsKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigxMCwgMTAs
IDEwMDAwLCAxMDAwKTsKIH0KIAotVEVTVChXVEZfQnl0ZUxvY2ssIFNlY3Rpb25BZGRyZXNzQ29s
bGlzaW9uKQorVEVTVChXVEZfTG9jaywgU2VjdGlvbkFkZHJlc3NDb2xsaXNpb24pCiB7Ci0gICAg
cnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDQsIDIsIDEwMDAwLCAyMDAwKTsKKyAgICBydW5Mb2NrVGVz
dDxMb2NrPig0LCAyLCAxMDAwMCwgMjAwMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkK
</data>
<flag name="review"
          id="283959"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258798</attachid>
            <date>2015-08-11 20:14:57 -0700</date>
            <delta_ts>2015-08-11 20:14:57 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>66481</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MzA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDE1LTA4LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWx3YXlzIHVzZSBhIGJ5dGUtc2l6ZWQgbG9jayBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3OTA4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgKiBydW50aW1lL0NvbmN1cnJlbnRK
SVRMb2NrLmg6IExvY2sgaXMgbm93IGJ5dGUtc2l6ZWQgYW5kIEJ5dGVMb2NrIGlzIGdvbmUsIHNv
IHVzZSBMb2NrLgorCiAyMDE1LTA4LTExICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBnZXRfYnlfaWQgbGlrZSBJQyBpbnRvIGdldF9i
eV92YWwgd2hlbiB0aGUgZ2l2ZW4gbmFtZSBpcyBTdHJpbmcgb3IgU3ltYm9sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgJKHJl
dmlzaW9uIDE4ODMwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJl
bnRKSVRMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE0ICsyNywxNCBAQAogI2RlZmluZSBD
b25jdXJyZW50SklUTG9ja19oCiAKICNpbmNsdWRlICJEZWZlckdDLmgiCi0jaW5jbHVkZSA8d3Rm
L0J5dGVMb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9Mb2Nr
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQotdHlw
ZWRlZiBCeXRlTG9jayBDb25jdXJyZW50SklUTG9jazsKLXR5cGVkZWYgQnl0ZUxvY2tlciBDb25j
dXJyZW50SklUTG9ja2VySW1wbDsKK3R5cGVkZWYgTG9jayBDb25jdXJyZW50SklUTG9jazsKK3R5
cGVkZWYgTG9ja0hvbGRlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKICNlbHNlCiB0eXBlZGVm
IE5vTG9jayBDb25jdXJyZW50SklUTG9jazsKIHR5cGVkZWYgTm9Mb2NrTG9ja2VyIENvbmN1cnJl
bnRKSVRMb2NrZXJJbXBsOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODMwOSkKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTUtMDgtMTEgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBBbHdheXMgdXNlIGEgYnl0
ZS1zaXplZCBsb2NrIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc5MDgKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJl
eSBHYXJlbi4KKworICAgICAgICBBdCB0aGUgc3RhcnQgb2YgbXkgbG9ja2luZyBhbGdvcml0aG0g
Y3J1c2FkZSwgSSBpbXBsZW1lbnRlZCBMb2NrLCB3aGljaCBpcyBhIHNpemVvZih2b2lkKikKKyAg
ICAgICAgbG9jayBpbXBsZW1lbnRhdGlvbiB3aXRoIHNvbWUgbmljZSB0aGVvcmV0aWNhbCBwcm9w
ZXJ0aWVzIGFuZCBnb29kIHBlcmZvcm1hbmNlLiBUaGVuIEkgYWRkZWQKKyAgICAgICAgdGhlIFBh
cmtpbmdMb3QgYWJzdHJhY3Rpb24gYW5kIEJ5dGVMb2NrLiBQYXJraW5nTG90IHVzZXMgTG9jayBp
biBpdHMgaW1wbGVtZW50YXRpb24uCisgICAgICAgIEJ5dGVMb2NrIHVzZXMgUGFya2luZ0xvdCB0
byBjcmVhdGUgYSBzaXplb2YoY2hhcikgbG9jayBpbXBsZW1lbnRhdGlvbiB0aGF0IHBlcmZvcm1z
IGxpa2UKKyAgICAgICAgTG9jay4KKworICAgICAgICBJdCB0dXJucyBvdXQgdGhhdCBCeXRlTG9j
ayBpcyBhbHdheXMgYXQgbGVhc3QgYXMgZ29vZCBhcyBMb2NrLCBhbmQgc29tZXRpbWVzIGEgbG90
IGJldHRlcjoKKyAgICAgICAgaXQgcmVxdWlyZXMgOHggbGVzcyBtZW1vcnkgb24gNjQtYml0IHN5
c3RlbXMuIEl0J3MgaGFyZCB0byBjb25zdHJ1Y3QgYSBiZW5jaG1hcmsgd2hlcmUKKyAgICAgICAg
Qnl0ZUxvY2sgaXMgc2lnbmlmaWNhbnRseSBzbG93ZXIgdGhhbiBMb2NrLCBhbmQgd2hlbiB5b3Ug
ZG8gY29uc3RydWN0IHN1Y2ggYSBiZW5jaG1hcmssCisgICAgICAgIHR3ZWFraW5nIGl0IGEgYml0
IGNhbiBhbHNvIGNyZWF0ZSBhIHNjZW5hcmlvIHdoZXJlIEJ5dGVMb2NrIGlzIHNpZ25pZmljYW50
bHkgZmFzdGVyIHRoYW4KKyAgICAgICAgTG9jay4KKworICAgICAgICBTbywgdGhlIHRoaW5nIHRo
YXQgd2UgY2FsbCAiTG9jayIgc2hvdWxkIHJlYWxseSB1c2UgQnl0ZUxvY2sncyBhbGdvcml0aG0s
IHNpbmNlIGl0IGlzIG1vcmUKKyAgICAgICAgY29tcGFjdCBhbmQganVzdCBhcyBmYXN0LiBUaGF0
J3Mgd2hhdCB0aGlzIHBhdGNoIGRvZXMuCisKKyAgICAgICAgQnV0IHdlIHN0aWxsIG5lZWQgdG8g
a2VlcCB0aGUgb2xkIExvY2sgYWxnb3JpdGhtLCBiZWNhdXNlIGl0J3MgdXNlZCB0byBpbXBsZW1l
bnQgUGFya2luZ0xvdCwKKyAgICAgICAgd2hpY2ggaW4gdHVybiBpcyB1c2VkIHRvIGltcGxlbWVu
dCBCeXRlTG9jay4gU28gdGhpcyBwYXRjaCBkb2VzIHRoaXMgdHJhbnNmb3JtYXRpb246CisKKyAg
ICAgICAgLSBNb3ZlIHRoZSBhbGdvcml0aG0gaW4gTG9jayBpbnRvIGZpbGVzIGNhbGxlZCBXb3Jk
TG9jay5ofGNwcC4gTWFrZSBQYXJraW5nTG90IHVzZQorICAgICAgICAgIFdvcmRMb2NrLgorCisg
ICAgICAgIC0gTW92ZSB0aGUgYWxnb3JpdGhtIGluIEJ5dGVMb2NrIGludG8gTG9jay5ofGNwcC4g
TWFrZSBldmVyeW9uZSB3aG8gdXNlZCBCeXRlTG9jayB1c2UgTG9jaworICAgICAgICAgIGluc3Rl
YWQuIEFsbCBvdGhlciB1c2VycyBvZiBMb2NrIG5vdyBnZXQgdGhlIGJ5dGUtc2l6ZWQgbG9jayBp
bXBsZW1lbnRhdGlvbi4KKworICAgICAgICAtIFJlbW92ZSB0aGUgb2xkIEJ5dGVMb2NrIGZpbGVz
LgorCisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2o6CisgICAgICAgICogV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmVuY2htYXJrcy9Mb2NrU3BlZWRU
ZXN0LmNwcDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHd0Zi9Xb3JkTG9jay5jcHA6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpXb3JkTG9jazo6bG9ja1Nsb3cpOgorICAgICAgICAoV1RGOjpX
b3JkTG9jazo6dW5sb2NrU2xvdyk6CisgICAgICAgICogd3RmL1dvcmRMb2NrLmg6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpXb3JkTG9jazo6V29yZExvY2spOgorICAgICAgICAoV1RGOjpXb3JkTG9j
azo6bG9jayk6CisgICAgICAgIChXVEY6OldvcmRMb2NrOjp1bmxvY2spOgorICAgICAgICAoV1RG
OjpXb3JkTG9jazo6aXNIZWxkKToKKyAgICAgICAgKFdURjo6V29yZExvY2s6OmlzTG9ja2VkKToK
KyAgICAgICAgKiB3dGYvQnl0ZUxvY2suY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi9CeXRl
TG9jay5oOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiB3dGYvTG9jay5jcHA6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2NrU2xvdyk6CisgICAg
ICAgIChXVEY6OkxvY2tCYXNlOjp1bmxvY2tTbG93KToKKyAgICAgICAgKiB3dGYvTG9jay5oOgor
ICAgICAgICAoV1RGOjpMb2NrQmFzZTo6bG9jayk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1
bmxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6aXNIZWxkKToKKyAgICAgICAgKFdURjo6
TG9ja0Jhc2U6OmlzTG9ja2VkKToKKyAgICAgICAgKFdURjo6TG9jazo6TG9jayk6CisgICAgICAg
ICogd3RmL1BhcmtpbmdMb3QuY3BwOgorCiAyMDE1LTA4LTExICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIEJ5dGVTcGluTG9jawpJbmRleDogU291cmNl
L1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dU
Ri52Y3hwcm9qL1dURi52Y3hwcm9qCShyZXZpc2lvbiAxODgzMDkpCisrKyBTb3VyY2UvV1RGL1dU
Ri52Y3hwcm9qL1dURi52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAot77u/
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzw/eG1sIHZlcnNpb249IjEu
MCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRv
b2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2
ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1
cmF0aW9ucyI+CiAgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnU3VmZml4
fFdpbjMyIj4KQEAgLTUzLDcgKzUzLDYgQEAKICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHd0ZlxBc3NlcnRpb25zLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHd0ZlxCaXRWZWN0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
d3RmXEJ5dGVMb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxDb21w
aWxhdGlvblRocmVhZC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcQ3J5
cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3
dGZcQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwIiAvPgpAQCAtMTU1LDYgKzE1NCw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcd2luXFdvcmtJdGVtV2luLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0Zlx3aW5cV29ya1F1ZXVlV2luLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0Zlx3aW5cV1RGRExMLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxXb3JkTG9jay5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlx3dGZcV29ya1F1ZXVlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHd0ZlxXVEZUaHJlYWREYXRhLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHd0ZlxTY2hlZHVsZVBhaXJDRi5jcHAiIC8+CkBAIC0xNzMsNyArMTczLDYgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCbG9ja1N0YWNrLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlx3dGZcQmxvb21GaWx0ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxCdW1wUG9pbnRlckFsbG9jYXRvci5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cd3RmXEJ5dGVMb2NrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
Llx3dGZcQ2hlY2tlZEFyaXRobWV0aWMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHd0ZlxDaGVja2VkQm9vbGVhbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3Rm
XENvbXBpbGVyLmgiIC8+CkBAIC0zMTQsNiArMzEzLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHd0ZlxWTVRhZ3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0Zlx3
aW5cR0RJT2JqZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcd2luXFdv
cmtJdGVtV2luLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcV29yZExvY2su
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxXb3JrUXVldWUuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxXVEZUaHJlYWREYXRhLmgiIC8+CiAgIDwvSXRl
bUdyb3VwPgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxODgzMDkpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw2IEBACiAJCTBGMEQ4NUI0MTcyMzRDQzEw
MDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLzsgfTsKIAkJ
MEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3
MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKIAkJMEYyQjY2QTcxN0I2
QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5o
ICovOyB9OwotCQkwRjgyNEE2NjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjRBNjIxQjc0NDNB
MDAwMkUzNDVEIC8qIEJ5dGVMb2NrLmNwcCAqLzsgfTsKLQkJMEY4MjRBNjcxQjc0NDNBMDAwMkUz
NDVEIC8qIEJ5dGVMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCAqLzsgfTsKIAkJ
MEY4MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVE
IC8qIFBhcmtpbmdMb3QuY3BwICovOyB9OwogCQkwRjgyNEE2OTFCNzQ0M0EwMDAyRTM0NUQgLyog
UGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAqLzsgfTsKIAkJMEY4
NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBS
YXdQb2ludGVyLmggKi87IH07CkBAIC00Niw2ICs0NCw4IEBACiAJCTBGRERCRkE4MTY2NkRGQTMw
MEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmggKi87IH07CiAJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY4
MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLzsgfTsKIAkJMEZFMTY0NkIxQjZGRkM5NjAw
NDAwRTdDIC8qIExvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTE2NDY5MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmggKi87IH07CisJCTBGRTQ0
NzlDMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogV29y
ZExvY2suY3BwICovOyB9OworCQkwRkU0NDc5RDFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTQ0NzlC
MUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovOyB9OwogCQkwRkVENjdCNjFCMjJENEQ4
MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAq
LzsgfTsKIAkJMTQwMjJGNDExOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDIyRjQwMThGNUMz
RkMwMDdGRjBFQiAvKiBsaWJibWFsbG9jLmEgKi87IH07CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsK
QEAgLTMxMSw4ICszMTEsNiBAQAogCQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJy
YWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8q
IEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZUxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFya2luZ0xvdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmtpbmdMb3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8q
IFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzMzLDYgKzMzMSw4IEBACiAJCTBG
RERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMTY0NjkxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29yZExvY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29yZExvY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueVB0clNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAyMkY0MDE4RjVDM0ZDMDA3RkYwRUIgLyogbGli
Ym1hbGxvYy5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gYXJjaGl2ZS5hcjsgcGF0aCA9IGxpYmJtYWxsb2MuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKIAkJMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MjMsOCArNzIzLDYgQEAKIAkJCQlBOEE0NzI2NDE1
MUE4MjVBMDA0MTIzRkYgLyogQmxvY2tTdGFjay5oICovLAogCQkJCUE4QTQ3MjY1MTUxQTgyNUEw
MDQxMjNGRiAvKiBCbG9vbUZpbHRlci5oICovLAogCQkJCUE4QTQ3MjY3MTUxQTgyNUEwMDQxMjNG
RiAvKiBCdW1wUG9pbnRlckFsbG9jYXRvci5oICovLAotCQkJCTBGODI0QTYyMUI3NDQzQTAwMDJF
MzQ1RCAvKiBCeXRlTG9jay5jcHAgKi8sCi0JCQkJMEY4MjRBNjMxQjc0NDNBMDAwMkUzNDVEIC8q
IEJ5dGVMb2NrLmggKi8sCiAJCQkJRUI5NUUxRUYxNjFBNzI0MTAwODlBMkY1IC8qIEJ5dGVPcmRl
ci5oICovLAogCQkJCUE4QTQ3MjZBMTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRp
Yy5oICovLAogCQkJCUE4QTQ3MjZCMTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQm9vbGVhbi5o
ICovLApAQCAtODkyLDYgKzg5MCw4IEBACiAJCQkJQThBNDczNzExNTFBODI1QjAwNDEyM0ZGIC8q
IFZlY3RvclRyYWl0cy5oICovLAogCQkJCUE4QTQ3MzcyMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRh
Z3MuaCAqLywKIAkJCQk5NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oICovLAor
CQkJCTBGRTQ0NzlBMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5jcHAgKi8sCisJCQkJMEZF
NDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi8sCiAJCQkJRTRBMEFEMzcxQTk2
MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5jcHAgKi8sCiAJCQkJRTRBMEFEMzgxQTk2MjQ1NTAw
NTM2REY2IC8qIFdvcmtRdWV1ZS5oICovLAogCQkJCUE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAv
KiBXVEZUaHJlYWREYXRhLmNwcCAqLywKQEAgLTExNjYsNyArMTE2Niw2IEBACiAJCQkJQThBNDc0
MTUxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDc0MTYxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDE3MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWRCbGFja1RyZWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDE4MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3Vu
dGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxOTE1MUE4MjVCMDA0MTIzRkYgLyogUmVm
Q291bnRlZEFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTEyMjAsNiArMTIxOSw3IEBACiAJCQkJ
QThBNDc0NTQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzQ1NTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU3BlY2lmaWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0OUVGMTYzMTZCQkZFMEQwMDBBNDMzMSAvKiBUcmlTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRM
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ2RDE1MUE4MjVCMDA0MTIzRkYgLyogVW5p
b25GaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ2QTE1MUE4MjVCMDA0MTIzRkYgLyog
VVRGOC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQjkxNTFBODI1QjAwNDEyM0ZGIC8qIHV0
aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTEzMzcsNyArMTMzNyw2IEBACiAJCQlmaWxlcyA9ICgK
IAkJCQlBOEE0NzM4NjE1MUE4MjVCMDA0MTIzRkYgLyogQXNzZXJ0aW9ucy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQzNTE1MUE4MjVCMDA0MTIzRkYgLyogQXRvbWljU3RyaW5nLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTBGODI0QTY2MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5QkM3MEYwNTE3NkMzNzlEMDAxMDFERUMgLyogQXRvbWlj
U3RyaW5nVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RkIxODI0MzVBNjAwQTgy
RTY5IC8qIFN0cmluZ0NGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0Njk0MTlEMTZFQUIxMEEw
MDI0RTE0NiAvKiBBdXRvZHJhaW5lZFBvb2xNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTE0MDAs
NiArMTM5OSw3IEBACiAJCQkJNzBFQ0E2MEQxQjAyNDI2ODAwNDQ5NzM5IC8qIEF0b21pY1N0cmlu
Z0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8q
IFN0YWNrU3RhdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0M0MxNTFBODI1QjAwNDEy
M0ZGIC8qIFN0cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNDQ3OUMxQjdB
QUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQw
MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
QkExNUZDMTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVCQTE1RjUxODI0MzQ4MDAwQTgyRTY5IC8qIFN0cmluZ0ltcGxNYWMubW0gaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAJKHJl
dmlzaW9uIDE4ODMwOSkKKysrIFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
CiAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3RmL0J5dGVMb2NrLmg+CisjaW5jbHVk
ZSA8d3RmL1dvcmRMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KQEAgLTQ0LDcgKzQ0LDcg
QEAgdW5zaWduZWQgbnVtSXRlcmF0aW9uczsKICAgICAKIE5PX1JFVFVSTiB2b2lkIHVzYWdlKCkK
IHsKLSAgICBwcmludGYoIlVzYWdlOiBMb2NrU3BlZWRUZXN0IHNwaW5sb2NrfGxvY2t8Ynl0ZWxv
Y2t8bXV0ZXh8YWxsIDxudW0gdGhyZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBncm91cD4g
PHdvcmsgcGVyIGNyaXRpY2FsIHNlY3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51bSBpdGVy
YXRpb25zPlxuIik7CisgICAgcHJpbnRmKCJVc2FnZTogTG9ja1NwZWVkVGVzdCBzcGlubG9ja3x3
b3JkbG9ja3xsb2NrfGJ5dGVsb2NrfG11dGV4fGFsbCA8bnVtIHRocmVhZCBncm91cHM+IDxudW0g
dGhyZWFkcyBwZXIgZ3JvdXA+IDx3b3JrIHBlciBjcml0aWNhbCBzZWN0aW9uPiA8bnVtIG5vaXNl
IHRocmVhZHM+IDxudW0gaXRlcmF0aW9ucz5cbiIpOwogICAgIGV4aXQoMSk7CiB9CiAKQEAgLTEy
MiwxMiArMTIyLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAg
cnVuQmVuY2htYXJrPFNwaW5Mb2NrPigiU3BpbkxvY2siKTsKICAgICAgICAgZGlkUnVuID0gdHJ1
ZTsKICAgICB9Ci0gICAgaWYgKCFzdHJjbXAoYXJndlsxXSwgImxvY2siKSB8fCAhc3RyY21wKGFy
Z3ZbMV0sICJhbGwiKSkgewotICAgICAgICBydW5CZW5jaG1hcms8TG9jaz4oIldURiBMb2NrIik7
CisgICAgaWYgKCFzdHJjbXAoYXJndlsxXSwgIndvcmRsb2NrIikgfHwgIXN0cmNtcChhcmd2WzFd
LCAiYWxsIikpIHsKKyAgICAgICAgcnVuQmVuY2htYXJrPFdvcmRMb2NrPigiV1RGIFdvcmRMb2Nr
Iik7CiAgICAgICAgIGRpZFJ1biA9IHRydWU7CiAgICAgfQotICAgIGlmICghc3RyY21wKGFyZ3Zb
MV0sICJieXRlbG9jayIpIHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7Ci0gICAgICAgIHJ1
bkJlbmNobWFyazxCeXRlTG9jaz4oIldURiBCeXRlTG9jayIpOworICAgIGlmICghc3RyY21wKGFy
Z3ZbMV0sICJsb2NrIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKKyAgICAgICAgcnVu
QmVuY2htYXJrPExvY2s+KCJXVEYgTG9jayIpOwogICAgICAgICBkaWRSdW4gPSB0cnVlOwogICAg
IH0KICAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAibXV0ZXgiKSB8fCAhc3RyY21wKGFyZ3ZbMV0s
ICJhbGwiKSkgewpJbmRleDogU291cmNlL1dURi93dGYvQnl0ZUxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0J5dGVMb2NrLmNwcAkocmV2aXNpb24gMTg4MzA5KQorKysgU291
cmNlL1dURi93dGYvQnl0ZUxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJCeXRlTG9jay5oIgotCi0jaW5jbHVkZSAiRGF0YUxvZy5o
IgotI2luY2x1ZGUgIlBhcmtpbmdMb3QuaCIKLSNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5o
IgotI2luY2x1ZGUgPHRocmVhZD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXN0YXRpYyBjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKLQotdm9pZCBCeXRlTG9jazo6bG9ja1Nsb3coKQotewotICAg
IHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7Ci0KLSAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJu
cyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgot
ICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQwOwotICAgIAotICAgIGZvciAoOzspIHsK
LSAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJl
YWQoKSwgIjogbG9ja2luZyB3aXRoICIsIGN1cnJlbnRCeXRlVmFsdWUsICJcbiIpKTsKLQotICAg
ICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmFyZ2UgaW4uCi0gICAgICAgIGlmICghKGN1
cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAmJiBtX2J5dGUuY29tcGFy
ZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxk
Qml0KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2Jv
ZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0
byBzcGluIGFyb3VuZC4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1Bhcmtl
ZEJpdCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7Ci0gICAgICAgICAgICBzcGluQ291bnQr
KzsKLSAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhp
cyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBz
cGluIGFyb3VuZAotICAgICAgICAvLyBpZiB0aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3
ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAm
IGhhc1BhcmtlZEJpdCkKLSAgICAgICAgICAgICYmICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vh
ayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVl
IHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBj
YW4gcGFyay4KLSAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fYnl0ZSwgaXNI
ZWxkQml0IHwgaGFzUGFya2VkQml0KTsKLQotICAgICAgICAvLyBXZSBoYXZlIGF3YWtlbiwgb3Ig
d2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhlIGJ5dGUgdmFsdWUgY2hhbmdlZC4gRWl0aGVyIHdh
eSwgd2UgbG9vcAotICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KLSAgICB9Ci19Ci0K
LXZvaWQgQnl0ZUxvY2s6OnVubG9ja1Nsb3coKQotewotICAgIC8vIFJlbGVhc2UgdGhlIGxvY2sg
d2hpbGUgZmluZGluZyBvdXQgaWYgc29tZW9uZSBpcyBwYXJrZWQuIE5vdGUgdGhhdCBhcyBzb29u
IGFzIHdlIGRvIHRoaXMsCi0gICAgLy8gc29tZW9uZSBtaWdodCBiYXJnZSBpbi4KLSAgICB1aW50
OF90IG9sZEJ5dGVWYWx1ZTsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIG9sZEJ5dGVWYWx1ZSA9
IG1fYnl0ZS5sb2FkKCk7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxv
Zyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVubG9ja2luZyB3aXRoICIsIG9sZEJ5dGVW
YWx1ZSwgIlxuIikpOwotICAgICAgICBBU1NFUlQob2xkQnl0ZVZhbHVlICYgaXNIZWxkQml0KTsK
LSAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgMCkp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBOb3RlIHRoYXQgc29tZW9uZSBj
b3VsZCB0cnkgdG8gcGFyayByaWdodCBub3cuIElmIHRoYXQgaGFwcGVucywgdGhleSB3aWxsIHJl
dHVybiBpbW1lZGlhdGVseQotICAgIC8vIGJlY2F1c2Ugb3VyIHBhcmtpbmcgcHJlZGljYXRlIGlz
IHRoYXQgbV9ieXRlID09IGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCwgYnV0IHdlJ3ZlIGFscmVh
ZHkgc2V0Ci0gICAgLy8gbV9ieXRlID0gMC4KLQotICAgIC8vIElmIHRoZXJlIGhhZCBiZWVuIHRo
cmVhZHMgcGFya2VkLCB1bnBhcmsgYWxsIG9mIHRoZW0uIFRoaXMgY2F1c2VzIGEgdGh1bmRlcmlu
ZyBoZXJkLCBidXQgd2hpbGUKLSAgICAvLyB0aGF0IGlzIHRoZW9yZXRpY2FsbHkgc2NhcnksIGl0
J3MgdG90YWxseSBmaW5lIGluIFdlYktpdCBiZWNhdXNlIHdlIHVzdWFsbHkgZG9uJ3QgaGF2ZSBl
bm91Z2gKLSAgICAvLyB0aHJlYWRzIGZvciB0aGlzIHRvIG1hdHRlci4KLSAgICAvLyBGSVhNRTog
V2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyB0byBleGhpYml0IHRodW5kZXJpbmcgaGVyZC4gV2Ug
Y291bGQgdXNlIHVucGFya09uZSgpLCBhbmQgaWYKLSAgICAvLyB0aGF0IHJldHVybnMgdHJ1ZSwg
anVzdCBzZXQgdGhlIHBhcmtlZCBiaXQgYWdhaW4uIElmIGluIHRoZSBwcm9jZXNzIG9mIHNldHRp
bmcgdGhlIHBhcmtlZCBiaXQKLSAgICAvLyB3ZSBmYWlsIHRoZSBDQVMsIHRoZW4ganVzdCB1bnBh
cmsgYWdhaW4uCi0gICAgaWYgKG9sZEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkKLSAgICAgICAg
UGFya2luZ0xvdDo6dW5wYXJrQWxsKCZtX2J5dGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYK
LQpJbmRleDogU291cmNlL1dURi93dGYvQnl0ZUxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9CeXRlTG9jay5oCShyZXZpc2lvbiAxODgzMDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9C
eXRlTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQnl0ZUxvY2tfaAotI2Rl
ZmluZSBCeXRlTG9ja19oCi0KLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1ZGUgPHd0
Zi9Mb2NrZXIuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdU
RiB7Ci0KLS8vIFRoaXMgaXMgbGlrZSBMb2NrLCBidXQgb25seSByZXF1aXJlcyAxIGJ5dGUgaW5z
dGVhZCBvZiBzaXplb2Yodm9pZCopIHN0b3JhZ2UuIFRoZSBkb3duc2lkZSBpcyB0aGF0Ci0vLyBp
dCBpcyBzbG93ZXIgb24gdGhlIHNsb3cgcGF0aCB1bmRlciBoZWF2eSBjb250ZW50aW9uIGludm9s
dmluZyBtYW55IHRocmVhZHMgYmVjYXVzZSBpdCBpcwotLy8gc3VzY2VwdGlibGUgdG8gdGhlICJ0
aHVuZGVyaW5nIGhlcmQiIHByb2JsZW06IGl0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3RhdGUgdG8g
dHJhY2sgaG93IG1hbnkKLS8vIHRocmVhZHMgYXJlIHdhaXRpbmcgZm9yIHRoZSBsb2NrLCBzbyB3
aGVuIHVubG9jayBkZXRlY3RzIHRoYXQgYW55IHRocmVhZCBpcyB3YWl0aW5nLCB0aGVuIGl0IHdh
a2VzCi0vLyBhbGwgb2YgdGhlIHdhaXRpbmcgdGhyZWFkcy4gQWxsIG9mIHRob3NlIHRocmVhZHMg
d2lsbCBwaWxlIG9udG8gdGhlIGxvY2s7IG9uZSB3aWxsIHN1Y2NlZWQgYW5kIHRha2UKLS8vIGl0
IHdoaWxlIHRoZSBvdGhlcnMgd2lsbCBnbyBiYWNrIHRvIHNsZWVwLiBUaGUgc2xvdy1kb3duIGlz
IHNtYWxsLiBUZW4gdGhyZWFkcyByZXBlYXRlZGx5Ci0vLyBjb250ZW5kaW5nIGZvciB0aGUgc2Ft
ZSB+MS0xMHVzIGxvbmcgY3JpdGljYWwgc2VjdGlvbiB3aWxsIHJ1biA3JSBzbG93ZXIgb24gbXkg
bWFjaGluZS4gSWYgSSBtZXNzCi0vLyB3aXRoIGFueSBvZiB0aGUgcGFyYW1ldGVycyAtIGNoYW5n
ZSB0aGUgbnVtYmVyIG9mIHRocmVhZHMgb3IgY2hhbmdlIHRoZSBjcml0aWNhbCBzZWN0aW9uIGR1
cmF0aW9uIC0KLS8vIHRoZW4gQnl0ZUxvY2sgcmVhY2hlcyBwYXJpdHkgd2l0aCBMb2NrLCBhbmQg
c29tZXRpbWVzIG91dHBlcmZvcm1zIGl0LiBQZXJoYXBzIG1vc3Qgc3VycHJpc2luZ2x5LAotLy8g
dGhlIHNsb3ctZG93biBnb2VzIGF3YXkgZXZlbiB3aGVuIHlvdSBpbmNyZWFzZSB0aGUgbnVtYmVy
IG9mIHRocmVhZHMuIEJ5dGVMb2NrIGFwcGVhcnMgdG8gc29tZXRpbWVzCi0vLyBiZSBmYXN0ZXIg
dW5kZXIgbWljcm9jb250ZW50aW9uLCBwZXJoYXBzIGJlY2F1c2UgYSBjb250ZW50aW91cyA4LWJp
dCBDQVMgaXMgY2hlYXBlciB0aGFuIGEKLS8vIGNvbnRlbnRpb3VzIDY0LWJpdCBDQVMuIE5vdGUg
dGhhdCB1bmNvbnRlbmRlZCBsb2NraW5nIGlzIGVxdWFsbHkgZmFzdCB3aXRoIEJ5dGVMb2NrIGFz
IHdpdGggTG9jay4KLS8vIEluIGFsbCwgTG9jayBhbmQgQnl0ZUxvY2sgaGF2ZSBzaW1pbGFyIHBl
cmZvcm1hbmNlIHVuZGVyIGNvbnRyb2xsZWQgbWljcm9iZW5jaG1hcmtzLCBidXQgTG9jayBpcwot
Ly8gdGhlb3JldGljYWxseSBzYWZlciBiZWNhdXNlIG9mIHRoZSB0aHVuZGVyaW5nIGhlcmQgaXNz
dWUuIEl0J3MgcHJvYmFibHkgYmVzdCB0byB1c2UgQnl0ZUxvY2sgb25seQotLy8gd2hlbiB5b3Ug
cmVhbGx5IGNhcmUgYWJvdXQgc3BhY2UgYW5kIHlvdSBkb24ndCBoYXZlIHJlYXNvbiB0byBiZWxp
ZXZlIHRoYXQgYSBsYXJnZSBudW1iZXIgb2YKLS8vIHRocmVhZHMgd291bGQgZXZlciBwaWxlIG9u
dG8gdGhlIHNhbWUgbG9jay4KLQotY2xhc3MgQnl0ZUxvY2sgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEJ5dGVMb2NrKTsKLXB1YmxpYzoKLSAgICBCeXRlTG9jaygpCi0gICAgewotICAgICAg
ICBtX2J5dGUuc3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgbG9jaygpCi0gICAgewotICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21w
YXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkp
KSB7Ci0gICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbG9ja1Nsb3coKTsKLSAgICB9Ci0KLSAgICB2b2lkIHVubG9j
aygpCi0gICAgewotICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFr
KGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7Ci0gICAgICAgICAg
ICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB1bmxvY2tTbG93KCk7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc0hlbGQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZS5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OwotICAgIH0KLQotICAgIGJvb2wg
aXNMb2NrZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSGVsZCgpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOwotICAg
IHN0YXRpYyBjb25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9IDI7Ci0KLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVu
bG9ja1Nsb3coKTsKLQotICAgIEF0b21pYzx1aW50OF90PiBtX2J5dGU7Ci19OwotCi10eXBlZGVm
IExvY2tlcjxCeXRlTG9jaz4gQnl0ZUxvY2tlcjsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVz
aW5nIFdURjo6Qnl0ZUxvY2s7Ci11c2luZyBXVEY6OkJ5dGVMb2NrZXI7Ci0KLSNlbmRpZiAvLyBC
eXRlTG9ja19oCi0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODgzMDkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3
LDYgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgQml0VmVjdG9yLmgKICAgICBCaXRtYXAuaAogICAg
IEJ1bXBQb2ludGVyQWxsb2NhdG9yLmgKLSAgICBCeXRlTG9jay5oCiAgICAgQnl0ZU9yZGVyLmgK
ICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29tcGlsZXIuaApAQCAtMTA0LDYgKzEwMyw3
IEBAIHNldChXVEZfSEVBREVSUwogICAgIFZlY3RvclRyYWl0cy5oCiAgICAgV1RGVGhyZWFkRGF0
YS5oCiAgICAgV2Vha1B0ci5oCisgICAgV29yZExvY2suaAogICAgIFdvcmtRdWV1ZS5oCiAgICAg
ZHRvYS5oCiAKQEAgLTE0Niw3ICsxNDYsNiBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBBc3NlcnRp
b25zLmNwcAogICAgIEF0b21pY3MuY3BwCiAgICAgQml0VmVjdG9yLmNwcAotICAgIEJ5dGVMb2Nr
LmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAogICAgIENyeXB0b2dyYXBoaWNVdGlsaXRp
ZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwCkBAIC0xODMsNiAr
MTgyLDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgU3RyaW5nUHJpbnRTdHJlYW0uY3BwCiAgICAg
VGhyZWFkaW5nLmNwcAogICAgIFdURlRocmVhZERhdGEuY3BwCisgICAgV29yZExvY2suY3BwCiAg
ICAgV29ya1F1ZXVlLmNwcAogICAgIGR0b2EuY3BwCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZpc2lvbiAx
ODgzMDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NTUgKzI3LDE0IEBACiAjaW5jbHVkZSAiTG9jay5oIgogCiAjaW5jbHVkZSAiRGF0YUxvZy5oIgor
I2luY2x1ZGUgIlBhcmtpbmdMb3QuaCIKICNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5oIgot
I2luY2x1ZGUgIlRocmVhZFNwZWNpZmljLmgiCiAjaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0aXZl
cy5oIgotI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KLSNpbmNsdWRlIDxtdXRleD4KICNp
bmNsdWRlIDx0aHJlYWQ+CiAKIG5hbWVzcGFjZSBXVEYgewogCi1uYW1lc3BhY2UgewotCi0vLyBU
aGlzIGRhdGEgc3RydWN0dXJlIHNlcnZlcyB0aHJlZSBwdXJwb3NlczoKLS8vCi0vLyAxKSBBIHBh
cmtpbmcgbWVjaGFuaXNtIGZvciB0aHJlYWRzIHRoYXQgZ28gdG8gc2xlZXAuIFRoYXQgaW52b2x2
ZXMganVzdCBhIHN5c3RlbSBtdXRleCBhbmQKLS8vICAgIGNvbmRpdGlvbiB2YXJpYWJsZS4KLS8v
Ci0vLyAyKSBBIHF1ZXVlIG5vZGUgZm9yIHdoZW4gYSB0aHJlYWQgaXMgb24gc29tZSBMb2NrJ3Mg
cXVldWUuCi0vLwotLy8gMykgVGhlIHF1ZXVlIGhlYWQuIFRoaXMgaXMga2luZCBvZiBmdW5reS4g
V2hlbiBhIHRocmVhZCBpcyB0aGUgaGVhZCBvZiBhIHF1ZXVlLCBpdCBhbHNvIHNlcnZlcyBhcwot
Ly8gICAgdGhlIGJhc2ljIHF1ZXVlIGJvb2trZWVwaW5nIGRhdGEgc3RydWN0dXJlLiBXaGVuIGEg
dGhyZWFkIGlzIGRlcXVldWVkLCB0aGUgbmV4dCB0aHJlYWQgaW4gdGhlCi0vLyAgICBxdWV1ZSB0
YWtlcyBvbiB0aGUgcXVldWUgaGVhZCBkdXRpZXMuCi1zdHJ1Y3QgVGhyZWFkRGF0YSB7Ci0gICAg
Ly8gVGhlIHBhcmtpbmcgbWVjaGFuaXNtLgotICAgIGJvb2wgc2hvdWxkUGFyayB7IGZhbHNlIH07
Ci0gICAgc3RkOjptdXRleCBwYXJraW5nTG9jazsKLSAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJs
ZSBwYXJraW5nQ29uZGl0aW9uOwotCi0gICAgLy8gVGhlIHF1ZXVlIG5vZGUuCi0gICAgVGhyZWFk
RGF0YSogbmV4dEluUXVldWUgeyBudWxscHRyIH07Ci0KLSAgICAvLyBUaGUgcXVldWUgaXRzZWxm
LgotICAgIFRocmVhZERhdGEqIHF1ZXVlVGFpbCB7IG51bGxwdHIgfTsKLX07Ci0KLVRocmVhZFNw
ZWNpZmljPFRocmVhZERhdGE+KiB0aHJlYWREYXRhOwotCi1UaHJlYWREYXRhKiBteVRocmVhZERh
dGEoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZTsKLSAgICBz
dGQ6OmNhbGxfb25jZSgKLSAgICAgICAgaW5pdGlhbGl6ZU9uY2UsCi0gICAgICAgIFtdIHsKLSAg
ICAgICAgICAgIHRocmVhZERhdGEgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFkRGF0YT4oKTsK
LSAgICAgICAgfSk7Ci0KLSAgICByZXR1cm4gKnRocmVhZERhdGE7Ci19Ci0KLX0gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiB2b2lk
IExvY2tCYXNlOjpsb2NrU2xvdygpCiB7CkBAIC04NSwxODQgKzQ0LDYyIEBAIHZvaWQgTG9ja0Jh
c2U6OmxvY2tTbG93KCkKICAgICBjb25zdCB1bnNpZ25lZCBzcGluTGltaXQgPSA0MDsKICAgICAK
ICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVpbnRwdHJfdCBjdXJyZW50V29yZFZhbHVlID0gbV93
b3JkLmxvYWQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghKGN1cnJlbnRXb3JkVmFsdWUgJiBp
c0xvY2tlZEJpdCkpIHsKLSAgICAgICAgICAgIC8vIEl0J3Mgbm90IHBvc3NpYmxlIGZvciBzb21l
b25lIHRvIGhvbGQgdGhlIHF1ZXVlIGxvY2sgd2hpbGUgdGhlIGxvY2sgaXRzZWxmIGlzIG5vIGxv
bmdlcgotICAgICAgICAgICAgLy8gaGVsZCwgc2luY2Ugd2Ugd2lsbCBvbmx5IGF0dGVtcHQgdG8g
YWNxdWlyZSB0aGUgcXVldWUgbG9jayB3aGVuIHRoZSBsb2NrIGlzIGhlbGQgYW5kCi0gICAgICAg
ICAgICAvLyB0aGUgcXVldWUgbG9jayBwcmV2ZW50cyB1bmxvY2suCi0gICAgICAgICAgICBBU1NF
UlQoIShjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCkpOwotICAgICAgICAgICAg
aWYgKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRX
b3JkVmFsdWUgfCBpc0xvY2tlZEJpdCkpIHsKLSAgICAgICAgICAgICAgICAvLyBTdWNjZXNzISBX
ZSBhY3F1aXJlZCB0aGUgbG9jay4KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKyAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9ieXRl
LmxvYWQoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbG9ja2luZyB3aXRoICIsIGN1cnJlbnRCeXRlVmFsdWUs
ICJcbiIpKTsKKworICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmFyZ2UgaW4uCisg
ICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICAm
JiBtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0
ZVZhbHVlIHwgaXNIZWxkQml0KSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAvLyBJ
ZiB0aGVyZSBpcyBubyBxdWV1ZSBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4g
anVzdCB0cnkgdG8gc3BpbiBhcm91bmQgYWdhaW4uCi0gICAgICAgIGlmICghKGN1cnJlbnRXb3Jk
VmFsdWUgJiB+cXVldWVIZWFkTWFzaykgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAg
ICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28g
bXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgorICAgICAgICBpZiAoIShjdXJy
ZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsK
ICAgICAgICAgICAgIHNwaW5Db3VudCsrOwogICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6
eWllbGQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8g
TmVlZCB0byBwdXQgb3Vyc2VsdmVzIG9uIHRoZSBxdWV1ZS4gQ3JlYXRlIHRoZSBxdWV1ZSBpZiBv
bmUgZG9lcyBub3QgZXhpc3QuIFRoaXMgcmVxdXJpZXMKLSAgICAgICAgLy8gb3duaW5nIHRoZSBx
dWV1ZSBmb3IgYSBsaXR0bGUgYml0LiBUaGUgbG9jayB0aGF0IGNvbnRyb2xzIHRoZSBxdWV1ZSBp
cyBpdHNlbGYgYSBzcGlubG9jay4KLSAgICAgICAgLy8gQnV0IGJlZm9yZSB3ZSBhY3F1aXJlIHRo
ZSBxdWV1ZSBzcGlubG9jaywgd2UgbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIFRocmVhZERhdGEg
Zm9yIHRoaXMKLSAgICAgICAgLy8gdGhyZWFkLgotICAgICAgICBUaHJlYWREYXRhKiBtZSA9IG15
VGhyZWFkRGF0YSgpOwotICAgICAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKLSAgICAgICAg
QVNTRVJUKCFtZS0+bmV4dEluUXVldWUpOwotICAgICAgICBBU1NFUlQoIW1lLT5xdWV1ZVRhaWwp
OwotCi0gICAgICAgIC8vIFJlbG9hZCB0aGUgY3VycmVudCB3b3JkIHZhbHVlLCBzaW5jZSBzb21l
IHRpbWUgbWF5IGhhdmUgcGFzc2VkLgotICAgICAgICBjdXJyZW50V29yZFZhbHVlID0gbV93b3Jk
LmxvYWQoKTsKLQotICAgICAgICAvLyBXZSBwcm9jZWVkIG9ubHkgaWYgdGhlIHF1ZXVlIGxvY2sg
aXMgbm90IGhlbGQsIHRoZSBMb2NrIGlzIGhlbGQsIGFuZCB3ZSBzdWNjZWVkIGluCi0gICAgICAg
IC8vIGFjcXVpcmluZyB0aGUgcXVldWUgbG9jay4KLSAgICAgICAgaWYgKChjdXJyZW50V29yZFZh
bHVlICYgaXNRdWV1ZUxvY2tlZEJpdCkKLSAgICAgICAgICAgIHx8ICEoY3VycmVudFdvcmRWYWx1
ZSAmIGlzTG9ja2VkQml0KQotICAgICAgICAgICAgfHwgIW1fd29yZC5jb21wYXJlRXhjaGFuZ2VX
ZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBpc1F1ZXVlTG9ja2VkQml0
KSkgewotICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgLy8g
TmVlZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3Qs
IGFuZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCisgICAgICAgIC8vIGlmIHRoZSBwYXJr
ZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgorICAgICAgICBp
ZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQorICAgICAgICAgICAgJiYgIW1f
Ynl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFs
dWUgfCBoYXNQYXJrZWRCaXQpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIG1lLT5zaG91bGRQYXJrID0gdHJ1ZTsKLQotICAgICAgICAvLyBXZSBv
d24gdGhlIHF1ZXVlLiBOb2JvZHkgY2FuIGVucXVldWUgb3IgZGVxdWV1ZSB1bnRpbCB3ZSdyZSBk
b25lLiBBbHNvLCBpdCdzIG5vdCBwb3NzaWJsZQotICAgICAgICAvLyB0byByZWxlYXNlIHRoZSBM
b2NrIHdoaWxlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2suCi0gICAgICAgIFRocmVhZERhdGEqIHF1
ZXVlSGVhZCA9IGJpdHdpc2VfY2FzdDxUaHJlYWREYXRhKj4oY3VycmVudFdvcmRWYWx1ZSAmIH5x
dWV1ZUhlYWRNYXNrKTsKLSAgICAgICAgaWYgKHF1ZXVlSGVhZCkgewotICAgICAgICAgICAgLy8g
UHV0IHRoaXMgdGhyZWFkIGF0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlLgotICAgICAgICAgICAgcXVl
dWVIZWFkLT5xdWV1ZVRhaWwtPm5leHRJblF1ZXVlID0gbWU7Ci0gICAgICAgICAgICBxdWV1ZUhl
YWQtPnF1ZXVlVGFpbCA9IG1lOwotCi0gICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBxdWV1ZSBs
b2NrLgotICAgICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKTsKLSAgICAg
ICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KTsKLSAgICAgICAg
ICAgIG1fd29yZC5zdG9yZShjdXJyZW50V29yZFZhbHVlICYgfmlzUXVldWVMb2NrZWRCaXQpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTWFrZSB0aGlzIHRocmVhZCBiZSB0aGUg
cXVldWUtaGVhZC4KLSAgICAgICAgICAgIHF1ZXVlSGVhZCA9IG1lOwotICAgICAgICAgICAgbWUt
PnF1ZXVlVGFpbCA9IG1lOwotCi0gICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBxdWV1ZSBsb2Nr
IGFuZCBpbnN0YWxsIG91cnNlbHZlcyBhcyB0aGUgaGVhZC4gTm8gbmVlZCBmb3IgYSBDQVMgbG9v
cCwgc2luY2UKLSAgICAgICAgICAgIC8vIHdlIG93biB0aGUgcXVldWUgbG9jay4KLSAgICAgICAg
ICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOwotICAgICAgICAgICAgQVNTRVJU
KH4oY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKSk7Ci0gICAgICAgICAgICBBU1NF
UlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRCaXQpOwotICAgICAgICAgICAgQVNT
RVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7Ci0gICAgICAgICAgICB1aW50cHRy
X3QgbmV3V29yZFZhbHVlID0gY3VycmVudFdvcmRWYWx1ZTsKLSAgICAgICAgICAgIG5ld1dvcmRW
YWx1ZSB8PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihxdWV1ZUhlYWQpOwotICAgICAgICAgICAg
bmV3V29yZFZhbHVlICY9IH5pc1F1ZXVlTG9ja2VkQml0OwotICAgICAgICAgICAgbV93b3JkLnN0
b3JlKG5ld1dvcmRWYWx1ZSk7Ci0gICAgICAgIH0KIAotICAgICAgICAvLyBBdCB0aGlzIHBvaW50
IGV2ZXJ5b25lIHdobyBhY3F1aXJlcyB0aGUgcXVldWUgbG9jayB3aWxsIHNlZSBtZSBvbiB0aGUg
cXVldWUsIGFuZCBhbnlvbmUgd2hvCi0gICAgICAgIC8vIGFjcXVpcmVzIG1lJ3MgbG9jayB3aWxs
IHNlZSB0aGF0IG1lIHdhbnRzIHRvIHBhcmsuIE5vdGUgdGhhdCBzaG91bGRQYXJrIG1heSBoYXZl
IGJlZW4KLSAgICAgICAgLy8gY2xlYXJlZCBhcyBzb29uIGFzIHRoZSBxdWV1ZSBsb2NrIHdhcyBy
ZWxlYXNlZCBhYm92ZSwgYnV0IGl0IHdpbGwgaGFwcGVuIHdoaWxlIHRoZQotICAgICAgICAvLyBy
ZWxlYXNpbmcgdGhyZWFkIGhvbGRzIG1lJ3MgcGFya2luZ0xvY2suCi0KLSAgICAgICAgewotICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdM
b2NrKTsKLSAgICAgICAgICAgIHdoaWxlIChtZS0+c2hvdWxkUGFyaykKLSAgICAgICAgICAgICAg
ICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0KGxvY2tlcik7Ci0gICAgICAgIH0KKyAgICAgICAg
Ly8gV2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9u
ZyBhcyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgorICAgICAgICBQYXJraW5nTG90Ojpj
b21wYXJlQW5kUGFyaygmbV9ieXRlLCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOwogCi0gICAg
ICAgIEFTU0VSVCghbWUtPnNob3VsZFBhcmspOwotICAgICAgICBBU1NFUlQoIW1lLT5uZXh0SW5R
dWV1ZSk7Ci0gICAgICAgIEFTU0VSVCghbWUtPnF1ZXVlVGFpbCk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBOb3cgd2UgY2FuIGxvb3AgYXJvdW5kIGFuZCB0cnkgdG8gYWNxdWlyZSB0aGUgbG9jayBh
Z2Fpbi4KKyAgICAgICAgLy8gV2UgaGF2ZSBhd2FrZW4sIG9yIHdlIG5ldmVyIHBhcmtlZCBiZWNh
dXNlIHRoZSBieXRlIHZhbHVlIGNoYW5nZWQuIEVpdGhlciB3YXksIHdlIGxvb3AKKyAgICAgICAg
Ly8gYXJvdW5kIGFuZCB0cnkgYWdhaW4uCiAgICAgfQogfQogCiB2b2lkIExvY2tCYXNlOjp1bmxv
Y2tTbG93KCkKIHsKLSAgICAvLyBUaGUgZmFzdCBwYXRoIGNhbiBmYWlsIGVpdGhlciBiZWNhdXNl
IG9mIHNwdXJpb3VzIHdlYWsgQ0FTIGZhaWx1cmUsIG9yIGJlY2F1c2Ugc29tZW9uZSBwdXQgYQot
ICAgIC8vIHRocmVhZCBvbiB0aGUgcXVldWUsIG9yIHRoZSBxdWV1ZSBsb2NrIGlzIGhlbGQuIElm
IHRoZSBxdWV1ZSBsb2NrIGlzIGhlbGQsIGl0IGNhbiBvbmx5IGJlCi0gICAgLy8gYmVjYXVzZSBz
b21lb25lICp3aWxsKiBlbnF1ZXVlIGEgdGhyZWFkIG9udG8gdGhlIHF1ZXVlLgotCi0gICAgLy8g
QWNxdWlyZSB0aGUgcXVldWUgbG9jaywgb3IgcmVsZWFzZSB0aGUgbG9jay4gVGhpcyBsb29wIGhh
bmRsZXMgYm90aCBsb2NrIHJlbGVhc2UgaW4gY2FzZSB0aGUKLSAgICAvLyBmYXN0IHBhdGgncyB3
ZWFrIENBUyBzcHVyaW91c2x5IGZhaWxlZCBhbmQgaXQgaGFuZGxlcyBxdWV1ZSBsb2NrIGFjcXVp
c2l0aW9uIGlmIHRoZXJlIGlzCi0gICAgLy8gYWN0dWFsbHkgc29tZXRoaW5nIGludGVyZXN0aW5n
IG9uIHRoZSBxdWV1ZS4KKyAgICAvLyBSZWxlYXNlIHRoZSBsb2NrIHdoaWxlIGZpbmRpbmcgb3V0
IGlmIHNvbWVvbmUgaXMgcGFya2VkLiBOb3RlIHRoYXQgYXMgc29vbiBhcyB3ZSBkbyB0aGlzLAor
ICAgIC8vIHNvbWVvbmUgbWlnaHQgYmFyZ2UgaW4uCisgICAgdWludDhfdCBvbGRCeXRlVmFsdWU7
CiAgICAgZm9yICg7OykgewotICAgICAgICB1aW50cHRyX3QgY3VycmVudFdvcmRWYWx1ZSA9IG1f
d29yZC5sb2FkKCk7Ci0KLSAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tl
ZEJpdCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY3VycmVudFdvcmRWYWx1ZSA9PSBpc0xvY2tl
ZEJpdCkgewotICAgICAgICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzTG9j
a2VkQml0LCAwKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBmYXN0IHBhdGgncyB3ZWFrIENB
UyBoYWQgc3B1cmlvdXNseSBmYWlsZWQsIGFuZCBub3cgd2Ugc3VjY2VlZGVkLiBUaGUgbG9jayBp
cwotICAgICAgICAgICAgICAgIC8vIHVubG9ja2VkIGFuZCB3ZSdyZSBkb25lIQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIExvb3AgYXJvdW5k
IGFuZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChj
dXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCkgewotICAgICAgICAgICAgc3RkOjp0
aGlzX3RocmVhZDo6eWllbGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gSWYgaXQgd2Fzbid0IGp1c3QgYSBzcHVyaW91cyB3ZWFrIENBUyBmYWlsdXJl
IGFuZCBpZiB0aGUgcXVldWUgbG9jayBpcyBub3QgaGVsZCwgdGhlbiB0aGVyZQotICAgICAgICAv
LyBtdXN0IGJlIGFuIGVudHJ5IG9uIHRoZSBxdWV1ZS4KLSAgICAgICAgQVNTRVJUKGN1cnJlbnRX
b3JkVmFsdWUgJiB+cXVldWVIZWFkTWFzayk7Ci0KLSAgICAgICAgaWYgKG1fd29yZC5jb21wYXJl
RXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBpc1F1ZXVl
TG9ja2VkQml0KSkKKyAgICAgICAgb2xkQnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJl
YWQoKSwgIjogdW5sb2NraW5nIHdpdGggIiwgb2xkQnl0ZVZhbHVlLCAiXG4iKSk7CisgICAgICAg
IEFTU0VSVChvbGRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpOworICAgICAgICBpZiAobV9ieXRlLmNv
bXBhcmVFeGNoYW5nZVdlYWsob2xkQnl0ZVZhbHVlLCAwKSkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAotICAgIHVpbnRwdHJfdCBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsK
LSAgICAgICAgCi0gICAgLy8gQWZ0ZXIgd2UgYWNxdWlyZSB0aGUgcXVldWUgbG9jaywgdGhlIExv
Y2sgbXVzdCBzdGlsbCBiZSBoZWxkIGFuZCB0aGUgcXVldWUgbXVzdCBiZQotICAgIC8vIG5vbi1l
bXB0eS4gVGhlIHF1ZXVlIG11c3QgYmUgbm9uLWVtcHR5IHNpbmNlIG9ubHkgdGhlIGxvY2tTbG93
KCkgbWV0aG9kIGNvdWxkIGhhdmUgaGVsZCB0aGUKLSAgICAvLyBxdWV1ZSBsb2NrIGFuZCBpZiBp
dCBkaWQgdGhlbiBpdCBvbmx5IHJlbGVhc2VzIGl0IGFmdGVyIHB1dHRpbmcgc29tZXRoaW5nIG9u
IHRoZSBxdWV1ZS4KLSAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KTsK
LSAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRCaXQpOwotICAgIFRo
cmVhZERhdGEqIHF1ZXVlSGVhZCA9IGJpdHdpc2VfY2FzdDxUaHJlYWREYXRhKj4oY3VycmVudFdv
cmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKTsKLSAgICBBU1NFUlQocXVldWVIZWFkKTsKLQotICAg
IFRocmVhZERhdGEqIG5ld1F1ZXVlSGVhZCA9IHF1ZXVlSGVhZC0+bmV4dEluUXVldWU7Ci0gICAg
Ly8gRWl0aGVyIHRoaXMgd2FzIHRoZSBvbmx5IHRocmVhZCBvbiB0aGUgcXVldWUsIGluIHdoaWNo
IGNhc2Ugd2UgZGVsZXRlIHRoZSBxdWV1ZSwgb3IgdGhlcmUKLSAgICAvLyBhcmUgc3RpbGwgbW9y
ZSB0aHJlYWRzIG9uIHRoZSBxdWV1ZSwgaW4gd2hpY2ggY2FzZSB3ZSBjcmVhdGUgYSBuZXcgcXVl
dWUgaGVhZC4KLSAgICBpZiAobmV3UXVldWVIZWFkKQotICAgICAgICBuZXdRdWV1ZUhlYWQtPnF1
ZXVlVGFpbCA9IHF1ZXVlSGVhZC0+cXVldWVUYWlsOwotCi0gICAgLy8gQ2hhbmdlIHRoZSBxdWV1
ZSBoZWFkLCBwb3NzaWJseSByZW1vdmluZyBpdCBpZiBuZXdRdWV1ZUhlYWQgaXMgbnVsbC4gTm8g
bmVlZCBmb3IgYSBDQVMgbG9vcCwKLSAgICAvLyBzaW5jZSB3ZSBob2xkIHRoZSBxdWV1ZSBsb2Nr
IGFuZCB0aGUgbG9jayBpdHNlbGYgc28gbm90aGluZyBhYm91dCB0aGUgbG9jayBjYW4gY2hhbmdl
IHJpZ2h0Ci0gICAgLy8gbm93LgotICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgp
OwotICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpOwotICAgIEFTU0VS
VChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7Ci0gICAgQVNTRVJUKChjdXJy
ZW50V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1hc2spID09IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHF1ZXVlSGVhZCkpOwotICAgIHVpbnRwdHJfdCBuZXdXb3JkVmFsdWUgPSBjdXJyZW50V29yZFZh
bHVlOwotICAgIG5ld1dvcmRWYWx1ZSAmPSB+aXNMb2NrZWRCaXQ7IC8vIFJlbGVhc2UgdGhlIExv
Y2suCi0gICAgbmV3V29yZFZhbHVlICY9IH5pc1F1ZXVlTG9ja2VkQml0OyAvLyBSZWxlYXNlIHRo
ZSBxdWV1ZSBsb2NrLgotICAgIG5ld1dvcmRWYWx1ZSAmPSBxdWV1ZUhlYWRNYXNrOyAvLyBDbGVh
ciBvdXQgdGhlIG9sZCBxdWV1ZSBoZWFkLgotICAgIG5ld1dvcmRWYWx1ZSB8PSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihuZXdRdWV1ZUhlYWQpOyAvLyBJbnN0YWxsIG5ldyBxdWV1ZSBoZWFkLgot
ICAgIG1fd29yZC5zdG9yZShuZXdXb3JkVmFsdWUpOwotCi0gICAgLy8gTm93IHRoZSBsb2NrIGlz
IGF2YWlsYWJsZSBmb3IgYWNxdWlzaXRpb24uIEJ1dCB3ZSBqdXN0IGhhdmUgdG8gd2FrZSB1cCB0
aGUgb2xkIHF1ZXVlIGhlYWQuCi0gICAgLy8gQWZ0ZXIgdGhhdCwgd2UncmUgZG9uZSEKLQotICAg
IHF1ZXVlSGVhZC0+bmV4dEluUXVldWUgPSBudWxscHRyOwotICAgIHF1ZXVlSGVhZC0+cXVldWVU
YWlsID0gbnVsbHB0cjsKLQotICAgIC8vIFdlIGRvIHRoaXMgY2FyZWZ1bGx5IGJlY2F1c2UgdGhp
cyBtYXkgcnVuIGVpdGhlciBiZWZvcmUgb3IgZHVyaW5nIHRoZSBwYXJraW5nTG9jayBjcml0aWNh
bAotICAgIC8vIHNlY3Rpb24gaW4gbG9ja1Nsb3coKS4KLSAgICB7Ci0gICAgICAgIHN0ZDo6dW5p
cXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHF1ZXVlSGVhZC0+cGFya2luZ0xvY2spOwotICAg
ICAgICBxdWV1ZUhlYWQtPnNob3VsZFBhcmsgPSBmYWxzZTsKLSAgICB9Ci0gICAgLy8gRG9lc24n
dCBtYXR0ZXIgaWYgd2Ugbm90aWZ5X2FsbCgpIG9yIG5vdGlmeV9vbmUoKSBoZXJlIHNpbmNlIHRo
ZSBvbmx5IHRocmVhZCB0aGF0IGNvdWxkIGJlCi0gICAgLy8gd2FpdGluZyBpcyBxdWV1ZUhlYWQu
Ci0gICAgcXVldWVIZWFkLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKLQotICAgIC8v
IFRoZSBvbGQgcXVldWUgaGVhZCBjYW4gbm93IGNvbnRlbmQgZm9yIHRoZSBsb2NrIGFnYWluLiBX
ZSdyZSBkb25lIQorICAgIC8vIE5vdGUgdGhhdCBzb21lb25lIGNvdWxkIHRyeSB0byBwYXJrIHJp
Z2h0IG5vdy4gSWYgdGhhdCBoYXBwZW5zLCB0aGV5IHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5Cisg
ICAgLy8gYmVjYXVzZSBvdXIgcGFya2luZyBwcmVkaWNhdGUgaXMgdGhhdCBtX2J5dGUgPT0gaXNI
ZWxkQml0IHwgaGFzUGFya2VkQml0LCBidXQgd2UndmUgYWxyZWFkeSBzZXQKKyAgICAvLyBtX2J5
dGUgPSAwLgorCisgICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gdGhyZWFkcyBwYXJrZWQsIHVucGFy
ayBhbGwgb2YgdGhlbS4gVGhpcyBjYXVzZXMgYSB0aHVuZGVyaW5nIGhlcmQsIGJ1dCB3aGlsZQor
ICAgIC8vIHRoYXQgaXMgdGhlb3JldGljYWxseSBzY2FyeSwgaXQncyB0b3RhbGx5IGZpbmUgaW4g
V2ViS2l0IGJlY2F1c2Ugd2UgdXN1YWxseSBkb24ndCBoYXZlIGVub3VnaAorICAgIC8vIHRocmVh
ZHMgZm9yIHRoaXMgdG8gbWF0dGVyLgorICAgIC8vIEZJWE1FOiBXZSBkb24ndCByZWFsbHkgbmVl
ZCB0aGlzIHRvIGV4aGliaXQgdGh1bmRlcmluZyBoZXJkLiBXZSBjb3VsZCB1c2UgdW5wYXJrT25l
KCksIGFuZCBpZgorICAgIC8vIHRoYXQgcmV0dXJucyB0cnVlLCBqdXN0IHNldCB0aGUgcGFya2Vk
IGJpdCBhZ2Fpbi4gSWYgaW4gdGhlIHByb2Nlc3Mgb2Ygc2V0dGluZyB0aGUgcGFya2VkIGJpdAor
ICAgIC8vIHdlIGZhaWwgdGhlIENBUywgdGhlbiBqdXN0IHVucGFyayBhZ2Fpbi4KKyAgICBpZiAo
b2xkQnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQorICAgICAgICBQYXJraW5nTG90Ojp1bnBhcmtB
bGwoJm1fYnl0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkocmV2aXNpb24g
MTg4MzA5KQorKysgU291cmNlL1dURi93dGYvTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywx
MDggKzMzLDE4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi0vLyBBIExvY2sgaXMgYSBmdWxseSBh
ZGFwdGl2ZSBtdXRleCB0aGF0IGdpdmVzIHlvdSB0aGUgYmVzdCBvZiBTcGluTG9jayBhbmQgTXV0
ZXguIEZvciBzbWFsbCBjcml0aWNhbAotLy8gc2VjdGlvbnMgKHRoYXQgdGFrZSBuYW5vc2Vjb25k
cyksIGl0IHdpbGwgdXN1YWxseSBwZXJmb3JtIHdpdGhpbiAyeCBvZiBhIFNwaW5Mb2NrIGluIGJv
dGggdGhlCi0vLyBjb250ZW5kZWQgYW5kIHVuY29udGVuZGVkIGNhc2UuIFdoZW4gdXNpbmcgYSBN
dXRleCwgc3VjaCBjcml0aWNhbCBzZWN0aW9ucyB0YWtlIHVwIHRvIDEwMHggbG9uZ2VyCi0vLyB0
aGFuIExvY2sgaW4gdGhlIGNvbnRlbmRlZCBjYXNlLCBvciAzeCBsb25nZXIgdGhhbiBMb2NrIGlu
IHRoZSB1bmNvbnRlbmRlZCBjYXNlLiBGb3IgbG9uZ2VyCi0vLyBjcml0aWNhbCBzZWN0aW9ucyAo
dGhhdCB0YWtlIHRlbnMgb2YgbWljcm9zZWNvbmRzKSwgaXQgd2lsbCBwZXJmb3JtIGFzIHdlbGwg
YXMgYSBNdXRleCBhbmQgc2xpZ2h0bHkKLS8vIGJldHRlciB0aGFuIGEgU3BpbkxvY2suIEJ1dCwg
Y3J1Y2lhbGx5LCBhIFNwaW5Mb2NrIHdpbGwgYnVybiB1cCB0byA5MHggbW9yZSB0aW1lIGluIHRo
ZSBrZXJuZWwgZm9yCi0vLyBzdWNoIGNyaXRpY2FsIHNlY3Rpb25zIHRoYW4gZWl0aGVyIExvY2sg
b3IgTXV0ZXguIEhlbmNlLCB1c2luZyBMb2NrIHdpbGwgbWFrZSB0aGUgY29tbW9uIGNhc2Ugb2YK
LS8vIGxvY2tpbmcgcGVyZm9ybSBjbG9zZSB0byBTcGluTG9jayBmb3IgYW55IGNyaXRpY2FsIHNl
Y3Rpb24gdGhhdCBkb2VzIG1vcmUgdGhhbiBhIGZldyBuYW5vc2Vjb25kcyBvZgotLy8gd29yayB3
aGlsZSBiZWluZyBhcyBraW5kIHRvIHRoZSBzY2hlZHVsZXIgZm9yIGxvbmdlciBjcml0aWNhbCBz
ZWN0aW9ucyBhcyBhIE11dGV4LgotLy8KLS8vIExpa2UgU3BpbkxvY2ssIExvY2sgdGFrZXMgdmVy
eSBsaXR0bGUgbWVtb3J5IC0ganVzdCBzaXplb2Yodm9pZCopLCB0aG91Z2ggc2VlIGEgZGV0YWls
ZWQgY2F2ZWF0Ci0vLyBiZWxvdy4KLS8vCi0vLyBHZW5lcmFsbHksIHlvdSBzaG91bGQgdXNlIExv
Y2sgaW5zdGVhZCBvZiBTcGluTG9jayBiZWNhdXNlIHdoaWxlIGl0IHBlbmFsaXplcyB5b3Ugc2xp
Z2h0bHksIHlvdQotLy8gbWFrZSB1cCBmb3IgaXQgYnkgbm90IHdhc3RpbmcgQ1BVIGN5Y2xlcyBp
biBjYXNlIG9mIGNvbnRlbnRpb24uCi0vLwotLy8gVGhlIExvY2sgaGFzIHRoZSBmb2xsb3dpbmcg
bmljZSBwcm9wZXJ0aWVzOgotLy8KLS8vIC0gVW5jb250ZW5kZWQgZmFzdCBwYXRocyBmb3IgbG9j
ayBhY3F1aXNpdGlvbiBhbmQgbG9jayByZWxlYXNlIHRoYXQgYXJlIGFsbW9zdCBhcyBmYXN0IGFz
IHRoZQotLy8gICB1bmNvbnRlbmRlZCBmYXN0IHBhdGhzIG9mIGEgc3BpbmxvY2suIFRoZSBvbmx5
IG92ZXJoZWFkIGlzIHRoYXQgdGhlIHNwaW5sb2NrIHdpbGwgbm90IENBUyBvbgotLy8gICByZWxl
YXNlLCB3aGlsZSBMb2NrIHdpbGwgQ0FTLiBUaGlzIG92ZXJoZWFkICpjYW4qIHNsb3cgdGhpbmdz
IGRvd24gZm9yIGV4dHJlbWVseSBzbWFsbCBjcml0aWNhbAotLy8gICBzZWN0aW9ucyB0aGF0IGRv
IGxpdHRsZSBvciBub3RoaW5nIC0gaXQgbWFrZXMgdGhlbSAyeCBzbG93ZXIgc2luY2UgaW4gdGhh
dCBjYXNlLCBDQVMgaXMgdGhlIG1vc3QKLS8vICAgZXhwZW5zaXZlIGluc3RydWN0aW9uIGFuZCBo
YXZpbmcgdHdvIG9mIHRoZW0gaXMgdHdpY2UgYXMgYmFkIGFzIGp1c3QgaGF2aW5nIG9uZS4gSG93
ZXZlciwgdGhpcwotLy8gICBsb2NrIGltcGxlbWVudGF0aW9uIGlzIHN0aWxsIGFsbW9zdCAzeCBm
YXN0ZXIgdGhhbiBhIHBsYXRmb3JtIG11dGV4IGluIHRob3NlIGNhc2VzLiBJdCdzIHVubGlrZWx5
Ci0vLyAgIHRoYXQgeW91J2xsIGVuY291bnRlciBuby1vcCBjcml0aWNhbCBzZWN0aW9ucywgc28g
dXN1YWxseSwgdGhpcyBsb2NrIGlzIGJldHRlciB0aGFuIGEgc3BpbmxvY2suCi0vLwotLy8gLSBD
b250ZW5kZWQgZmFzdCBwYXRoIHRoYXQgYXR0ZW1wdHMgdG8gc3BpbiBhbmQgeWllbGQgZm9yIHNv
bWUgbnVtYmVyIG9mIHRpbWVzLiBGb3IgY3JpdGljYWwKLS8vICAgc2VjdGlvbnMgdGhhdCBhcmUg
aGVsZCBvbmx5IGJyaWVmbHksIHRoaXMgYWxsb3dzIExvY2sgdG8gcGVyZm9ybSBhbG1vc3QgYXMg
d2VsbCBhcyBhIFNwaW5Mb2NrLgotLy8gICBTcGluTG9jayBjYW4gc3RpbGwgYmUgYWxtb3N0IDJ4
IGZhc3RlciB0aGFuIExvY2sgaWYgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgYSBuby1vcCwgYnV0
IHRoaXMKLS8vICAgYWR2YW50YWdlIGRpbWluaXNoZXMgYXMgdGhlIGNyaXRpY2FsIHNlY3Rpb24g
Z3Jvd3MuCi0vLwotLy8gLSBDb250ZW5kZWQgc2xvdyBwYXRoIHRoYXQgZW5xdWV1ZXMgdGhlIGNv
bnRlbmRpbmcgdGhyZWFkIGFuZCBjYXVzZXMgaXQgdG8gd2FpdCBvbiBhIGNvbmRpdGlvbgotLy8g
ICB2YXJpYWJsZSB1bnRpbCB0aGUgbG9jayBpcyByZWxlYXNlZC4gVGhpcyBpcyB0aGUgb25seSBj
YXNlIGluIHdoaWNoIHN5c3RlbSBtdXRleGVzIGFuZCBjb25kaXRpb24KLS8vICAgdmFyaWFibGVz
IGFyZSB1c2VkLiBUaGlzIGNhc2UgaXMgcmFyZSBhbmQgc2VsZi1saW1pdGluZzogaXQgd2lsbCBv
bmx5IGhhcHBlbiB3aGVuIGEgbG9jayBpcyBoZWxkCi0vLyAgIGZvciBsb25nIGVub3VnaCB0aGF0
IHNwaW5uaW5nIHNvbWUgbnVtYmVyIG9mIHRpbWVzIGRvZXNuJ3QgYWNxdWlyZSBpdC4gVGhlIGZh
Y3QgdGhhdCBMb2NrIGRvZXMKLS8vICAgdGhpcyBhcyBhIGZhbGxiYWNrIHdoZW4gc3Bpbm5pbmcg
Zm9yIHNvbWUgbnVtYmVyIG9mIHRpbWVzIGZhaWxzIG1lYW5zIHRoYXQgaXQgd2lsbCBidXJuCi0v
LyAgIGRyYW1hdGljYWxseSBmZXdlciBDUFUgY3ljbGVzIC0gZm9yIGV4YW1wbGUgd2l0aCAxMCB0
aHJlYWRzIG9uIGFuIDggbG9naWNhbCBDUFUgbWFjaGluZSBhY3F1aXJpbmcKLS8vICAgYSBjcml0
aWNhbCBzZWN0aW9uIHRoYXQgdGFrZXMgNTAgbWljcm9zZWNvbmRzLCB0aGUgV1RGIFNwaW5Mb2Nr
IHdpbGwgY2F1c2UgOTB4IG1vcmUgdGltZSB0byBiZQotLy8gICBzcGVudCBpbiB0aGUga2VybmVs
IHRoYW4gTG9jay4KLS8vCi0vLyAtIFZlcnkgbG93IG1lbW9yeSB1c2FnZS4gRWFjaCBMb2NrIHJl
cXVpcmVzIG9ubHkgc2l6ZW9mKHZvaWQqKSBtZW1vcnkuIFdoZW4gdGhlIGNvbnRlbmRlZCBzbG93
Ci0vLyAgIHBhdGggaXMgYWN0aXZhdGVkLCBMb2NrIG9ubHkgcmVsaWVzIG9uIGVhY2ggdGhyZWFk
IGhhdmluZyBhIHByZWFsbG9jYXRlZCB0aHJlYWQtc3BlY2lmaWMgZGF0YQotLy8gICBzdHJ1Y3R1
cmUgY2FsbGVkIFRocmVhZERhdGEgdGhhdCwgdG9nZXRoZXIgd2l0aCB0aGUgTG9jayBpdHNlbGYs
IGlzIHVzZWQgdG8gYnVpbGQgdXAgYSB0aHJlYWQKLS8vICAgcXVldWUuIFNvLCB0aGUgdG90YWwg
bWVtb3J5IHVzYWdlIG9mIGFsbCBMb2NrcyBpcyBzdGlsbCBib3VuZGVkIGJ5OgotLy8KLS8vICAg
ICAgIG51bWJlck9mTG9ja3MgKiBzaXplb2Yodm9pZCopICsgbnVtYmVyT2ZUaHJlYWRzICogc2l6
ZW9mKFRocmVhZERhdGEpCi0vLwotLy8gICBXaGVyZSBUaHJlYWREYXRhIGlzIGEgZGVjZW50bHkg
bGFyZ2UgZGF0YSBzdHJ1Y3R1cmUsIGJ1dCB3ZSB3aWxsIG9ubHkgZXZlciBoYXZlIG9uZSBwZXIg
dGhyZWFkLAotLy8gICByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgTG9ja3MgaW4gbWVtb3J5
LiBBbm90aGVyIHdheSB0byB2aWV3IHRoaXMgaXMgdGhhdCB0aGUgd29yc3QgY2FzZQotLy8gICBt
ZW1vcnkgdXNhZ2UgcGVyIExvY2sgaXM6Ci0vLwotLy8gICAgICAgc2l6ZW9mKHZvaWQqKSArIG51
bWJlck9mVGhyZWFkcyAvIG51bWJlck9mTG9ja3MgKiBzaXplb2YoVGhyZWFkRGF0YSkKLS8vCi0v
LyAgIFNvLCB1bmxlc3MgeW91IGhhdmUgYSBzbWFsbCBudW1iZXIgb2YgTG9ja3MgKG9yLCBhIGxh
cmdlIG51bWJlciBvZiB0aHJlYWRzLCB3aGljaCBpcyBmYXIgbGVzcwotLy8gICBsaWtlbHkpLCB0
aGUgbWVtb3J5IHVzYWdlIHBlci1Mb2NrIGlzIHN0aWxsIGdvaW5nIHRvIGJlIHNvbWV3aGVyZSBh
cm91bmQgc2l6ZW9mKHZvaWQqKS4KLS8vCi0vLyAtIEJhcmdpbmcgZmFzdCBwYXRocy4gVGhlIExv
Y2sgaXMgdHVuZWQgZm9yIG1heGltdW0gdGhyb3VnaHB1dCByYXRoZXIgdGhhbiBtYXhpbXVtIGZh
aXJuZXNzLiBJZgotLy8gICBhIHRocmVhZCByZWxlYXNlcyBhIExvY2sgdGhhdCB3YXMgY29udGVu
ZGVkIGFuZCBoYWQgYSBxdWV1ZSBvZiB3YWl0aW5nIHRocmVhZHMsIHRoZW4gaXQgd2lsbAotLy8g
ICB3YWtlIHVwIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSwgYnV0IGl0IHdpbGwgYWxzbyBtYXJrIHRo
ZSBsb2NrIGFzIGJlaW5nIGF2YWlsYWJsZS4gVGhpcyBtZWFucyB0aGF0Ci0vLyAgIHNvbWUgb3Ro
ZXIgdGhyZWFkIHRoYXQgaXMganVzdCBub3cgYXR0ZW1wdGluZyB0byBhY3F1aXJlIHRoZSBsb2Nr
IG1heSBnZXQgaXQgYmVmb3JlIHRoZSB0aHJlYWQKLS8vICAgdGhhdCBnb3Qgd29rZW4gdXAuIFdo
ZW4gYSB0aHJlYWQgYmFyZ2VzIGludG8gdGhlIGxvY2ssIHRoZSB0aHJlYWQgdGhhdCBnb3Qgd29r
ZW4gdXAgd2lsbCBzaW1wbHkKLS8vICAgZ28gYmFjayB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZS4g
VGhlIGJhcmdpbmcgYmVoYXZpb3IgZW5kcyB1cCBiZWluZyBwcm9iYWJpbGlzdGljIG9uIG1vc3QK
LS8vICAgcGxhdGZvcm1zIGFuZCBldmVuIHRob3VnaCBpdCBtYXkgYmUgdW5mYWlyIHRvIHNvbWUg
dGhyZWFkIGF0IHNvbWUgbW9tZW50IGluIHRpbWUsIGl0IHdpbGwgcmFyZWx5Ci0vLyAgIGhhdmUg
YSBsb25nIHN0cmVhayBvZiB1bmZhaXJuZXNzIHRvd2FyZHMgYW55IHBhcnRpY3VsYXIgdGhyZWFk
OiBldmVudHVhbGx5IGVhY2ggdGhyZWFkIHdhaXRpbmcgb24KLS8vICAgdGhlIGxvY2sgd2lsbCBn
ZXQgdG8gaGF2ZSBhIHR1cm4gc28gbG9uZyBhcyBubyB0aHJlYWQganVzdCBob2xkcyB0aGUgbG9j
ayBmb3JldmVyLiBUaGF0IHNhaWQsCi0vLyAgIHRoZXJlICppcyogYSBjaGFuY2Ugb2YgcGF0aG9s
b2dpZXMgLSB1c2VycyBvZiBMb2NrIHNob3VsZCBub3QgZGVwZW5kIG9uIGZpcnN0LWluLCBmaXJz
dC1vdXQgbG9jawotLy8gICBhY3F1aXNpdGlvbiBvcmRlciB1bmRlciBjb250ZW50aW9uLiBUaGUg
c2FtZSBjYXZlYXQgaXMgZ2VuZXJhbGx5IHRydWUgb2YgU3BpbkxvY2sgYW5kIHBsYXRmb3JtCi0v
LyAgIG11dGV4ZXMgb24gc29tZSBwbGF0Zm9ybXMuCi0KLS8vIEZJWE1FOiBXZSBjb3VsZCBtYWtl
IHRoaXMgTG9jayBtb3JlIGVmZmljaWVudCBieSB1c2luZyBQYXJraW5nTG90IGFuZCBhdG9taWMg
YWRkIGluc3RlYWQgb2YgQ0FTLgotLy8gVGhlIGxvY2sgd291bGQgYmUgYXZhaWxhYmxlIGlmIHRo
ZSAzMi1iaXQgbG9jayB3b3JkIDw9IDEuIExvY2tpbmcgd291bGQgYXRvbWljYWxseSBhZGQgMiB0
byB0aGUKLS8vIHdvcmQuIFRoZSBsb2NrIHdvdWxkIGJlIGtub3duIHRvIGJlIGhlbGQgaWYgdGhl
IG9sZCB2YWx1ZSBvZiB0aGUgd29yZCB3YXMgPD0gMS4gVGhlIGxvdyBiaXQKLS8vIGp1c3QgaW5k
aWNhdGVzIGlmIGFueW9uZSBpcyB3YWl0aW5nLiBJZiB0aGUgd29yZCB3YXMgPj0gMiBhZnRlciB0
aGUgYXRvbWljIGFkZCwgd2Ugd291bGQgZ28gdG8gYQotLy8gc2xvdyBwYXRoIHRoYXQgcmVwZWF0
ZWRseSBhdHRlbXB0cyB0byBzZXQgdGhlIGxvY2sgd29yZCB0byAzIFtzaWNdIGZyb20gMCBvciAx
LCBhbmQgcGFya3MgaWYgdGhhdCdzCi0vLyBub3QgcG9zc2libGUuIFRoZSBzbG93IHBhdGggY291
bGQgYWxzbyBwZXJmb3JtIGRlZmVuc2l2ZSBmaXh1cCB0aGF0IGRyb3BzIHRoZSBsb2NrIHZhbHVl
IGRvd24gdG8KLS8vIDMgaWYgaXQgd2FzIGdyZWF0ZXIgdGhhbiAzLCBhbnl0aW1lIHRoYXQgaXQg
bmVlZGVkIHRvIGdvIHRvIHBhcmsuIFRoZSB1bmxvY2sgZmFzdCBwYXRoIHdvdWxkCi0vLyBhdG9t
aWNhbGx5IHN1YnRyYWN0IDIuIElmIHRoZSBkZWNyZW1lbnQgb3BlcmF0aW9uIGRvZXMgbm90IGNh
dXNlIHRoZSBjb3VudCB0byB6ZXJvLCBpdCB3b3VsZCBnbyB0bwotLy8gYSBzbG93IHBhdGguIFRo
ZSBzbG93IHBhdGggd291bGQgdW5wYXJrIG9uZS4gSWYgdW5wYXJraW5nIHJldHVybnMgZmFsc2Us
IHRoZSBzbG93IHBhdGggd291bGQKLS8vIGF0dGVtcHQgYSBzdHJvbmcgQ0FTIGZyb20gMSB0byAw
LiBJdCB3b3VsZG4ndCBkbyBhbnl0aGluZyBpZiB0aGUgQ0FTIGZhaWxzLCBzaW5jZSB0aGUgb25s
eSBnb2FsIG9mCi0vLyB0aGF0IENBUyBpcyB0byB0ZWxsIGZ1dHVyZSB1bmxvY2sgZmFzdCBwYXRo
cyB0aGF0IHRoZXJlIGlzIHBvc3NpYmx5IGEgdGhyZWFkIHBhcmtlZC4gQXMgc3VjaCB0aGUKLS8v
IHN0YXRlcyBvZiB0aGUgbG9jayBhcmU6Ci0vLwotLy8gICAwOiBsb2NrIGF2YWlsYWJsZSBhbmQg
bm9ib2R5IHdhaXRpbmcKLS8vICAgMTogbG9jayBhdmFpbGFibGUgYW5kIHRoZXJlIG1heSBiZSB0
aHJlYWRzIHdhaXRpbmcKLS8vICAgMjogbG9jayB0YWtlbiBhbmQgbm8gdGhyZWFkcyB3YWl0aW5n
Ci0vLyA+PTM6IGxvY2sgdGFrZW4gYW5kIHRocmVhZHMgd2FpdGluZwotLy8KLS8vIEl0IG1heSBi
ZSBwb3NzaWJsZSB0byBkZXNpZ24gYW4gZXZlbiBiZXR0ZXIgbG9jayBpbXBsZW1lbnRhdGlvbiBi
YXNlZCBvbiBhdG9taWMgaW5jcmVtZW50cyByYXRoZXIKLS8vIHRoYW4gYXRvbWljICs9Mi8tPTIu
Ci0vLwotLy8gTm90ZSB0aGF0IGJlY2F1c2UgUGFya2luZ0xvdCB1c2VzIHRoaXMgbG9jayBpbnRl
cm5hbGx5LCB3ZSB3b3VsZCBwcm9iYWJseSByZW5hbWUgdGhpcyBsb2NrCi0vLyBpbXBsZW1lbnRh
dGlvbiB0byBzb21ldGhpbmcgbGlrZSBCb290c3RyYXBMb2NrIG9yIGV2ZW4gbWFrZSBpdCBwYXJ0
IG9mIGFuIGFub255bW91cyBuYW1lc3BhY2UKLS8vIGluc2lkZSBQYXJraW5nTG90LgotLy8KLS8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc4NDEKKy8vIFRoaXMg
aXMgYSBmdWxseSBhZGFwdGl2ZSBtdXRleCB0aGF0IG9ubHkgcmVxdWlyZXMgMSBieXRlIG9mIHN0
b3JhZ2UuIEl0IGhhcyBmYXN0IHBhdGhzIHRoYXQgYXJlCisvLyBjb21wZXRldGl2ZSB0byBTcGlu
TG9jayAodW5jb250ZW5kZWQgbG9ja2luZyBpcyBpbmxpbmVkIGFuZCBpcyBqdXN0IGEgQ0FTLCBt
aWNyb2NvbnRlbnRpb24gaXMKKy8vIGhhbmRsZWQgYnkgc3Bpbm5pbmcgYW5kIHlpZWxkaW5nKSwg
YW5kIGEgc2xvdyBwYXRoIHRoYXQgaXMgY29tcGV0ZXRpdmUgdG8gTXV0ZXggKGlmIGEgbG9jayBj
YW5ub3QKKy8vIGJlIGFjcXVpcmVkIGluIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUsIHRoZSB0aHJl
YWQgaXMgcHV0IHRvIHNsZWVwIHVudGlsIHRoZSBsb2NrIGlzIGF2YWlsYWJsZQorLy8gYWdhaW4p
LiBJdCB1c2VzIGxlc3MgbWVtb3J5IHRoYW4gZWl0aGVyIFNwaW5Mb2NrIG9yIE11dGV4LgogCiAv
LyBUaGlzIGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yIHNv
IHRoYXQgaXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCiAvLyBVc2UgTG9jayBpbiBp
bnN0YW5jZSB2YXJpYWJsZXMuCiBzdHJ1Y3QgTG9ja0Jhc2UgewogICAgIHZvaWQgbG9jaygpCiAg
ICAgewotICAgICAgICBpZiAoTElLRUxZKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlz
TG9ja2VkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpIHsKKyAgICAgICAgaWYgKExJ
S0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5
X29yZGVyX2FjcXVpcmUpKSkgewogICAgICAgICAgICAgLy8gTG9jayBhY3F1aXJlZCEKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTQ0LDggKzU0LDggQEAgc3RydWN0IExvY2tC
YXNlIHsKIAogICAgIHZvaWQgdW5sb2NrKCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV93
b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNMb2NrZWRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGVhc2UpKSkgewotICAgICAgICAgICAgLy8gTG9jayByZWxlYXNlZCwgYW5kIG5vYm9keSB3
YXMgd2FpdGluZyEKKyAgICAgICAgaWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vh
ayhpc0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkgeworICAgICAgICAg
ICAgLy8gTG9jayByZWxlYXNlZCBhbmQgbm9ib2R5IHdhcyB3YWl0aW5nIQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTE1NCw3ICs2NCw3IEBAIHN0cnVjdCBMb2NrQmFzZSB7
CiAKICAgICBib29sIGlzSGVsZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV93b3Jk
LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0xvY2tlZEJpdDsKKyAgICAgICAg
cmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0
OwogICAgIH0KIAogICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdApAQCAtMTYzLDE0ICs3MywxMyBA
QCBzdHJ1Y3QgTG9ja0Jhc2UgewogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25z
dCB1aW50cHRyX3QgaXNMb2NrZWRCaXQgPSAxOwotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3Qg
aXNRdWV1ZUxvY2tlZEJpdCA9IDI7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBxdWV1ZUhl
YWRNYXNrID0gMzsKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOworICAg
IHN0YXRpYyBjb25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9IDI7CiAKICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVu
bG9ja1Nsb3coKTsKIAotICAgIEF0b21pYzx1aW50cHRyX3Q+IG1fd29yZDsKKyAgICBBdG9taWM8
dWludDhfdD4gbV9ieXRlOwogfTsKIAogY2xhc3MgTG9jayA6IHB1YmxpYyBMb2NrQmFzZSB7CkBA
IC0xNzgsNyArODcsNyBAQCBjbGFzcyBMb2NrIDogcHVibGljIExvY2tCYXNlIHsKIHB1YmxpYzoK
ICAgICBMb2NrKCkKICAgICB7Ci0gICAgICAgIG1fd29yZC5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxheGVkKTsKKyAgICAgICAgbV9ieXRlLnN0b3JlKDAsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGF4ZWQpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCShyZXZpc2lv
biAxODgzMDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMTEgKzI4LDExIEBACiAKICNpbmNsdWRlICJEYXRhTG9nLmgiCiAjaW5jbHVkZSAi
SGFzaEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIkxvY2suaCIKICNpbmNsdWRlICJTdHJpbmdQcmlu
dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRocmVhZFNwZWNpZmljLmgiCiAjaW5jbHVkZSAiVGhyZWFk
aW5nUHJpbWl0aXZlcy5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgIldvcmRMb2Nr
LmgiCiAjaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgogI2luY2x1ZGUgPG11dGV4PgogI2lu
Y2x1ZGUgPHRocmVhZD4KQEAgLTE3MCw3ICsxNzAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlz
IGxvY2sgcHJvdGVjdHMgdGhlIGVudGlyZSBidWNrZXQuIFRob3Ugc2hhbGwgbm90IG1ha2UgY2hh
bmdlcyB0byBCdWNrZXQgd2l0aG91dCBob2xkaW5nCiAgICAgLy8gdGhpcyBsb2NrLgotICAgIExv
Y2sgbG9jazsKKyAgICBXb3JkTG9jayBsb2NrOwogCiAgICAgLy8gUHV0IHNvbWUgZGlzdGFuZSBi
ZXR3ZWVuIGJ1Y2tldHMgaW4gbWVtb3J5LiBUaGlzIGlzIG9uZSBvZiBzZXZlcmFsIG1pdGlnYXRp
b25zIGFnYWluc3QgZmFsc2UKICAgICAvLyBzaGFyaW5nLgpJbmRleDogU291cmNlL1dURi93dGYv
V29yZExvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dvcmRMb2NrLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1dvcmRMb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29yZExvY2suaCIKKwor
I2luY2x1ZGUgIkRhdGFMb2cuaCIKKyNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5oIgorI2lu
Y2x1ZGUgIlRocmVhZFNwZWNpZmljLmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0aXZlcy5o
IgorI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNs
dWRlIDx0aHJlYWQ+CisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgeworCisvLyBUaGlz
IGRhdGEgc3RydWN0dXJlIHNlcnZlcyB0aHJlZSBwdXJwb3NlczoKKy8vCisvLyAxKSBBIHBhcmtp
bmcgbWVjaGFuaXNtIGZvciB0aHJlYWRzIHRoYXQgZ28gdG8gc2xlZXAuIFRoYXQgaW52b2x2ZXMg
anVzdCBhIHN5c3RlbSBtdXRleCBhbmQKKy8vICAgIGNvbmRpdGlvbiB2YXJpYWJsZS4KKy8vCisv
LyAyKSBBIHF1ZXVlIG5vZGUgZm9yIHdoZW4gYSB0aHJlYWQgaXMgb24gc29tZSBXb3JkTG9jaydz
IHF1ZXVlLgorLy8KKy8vIDMpIFRoZSBxdWV1ZSBoZWFkLiBUaGlzIGlzIGtpbmQgb2YgZnVua3ku
IFdoZW4gYSB0aHJlYWQgaXMgdGhlIGhlYWQgb2YgYSBxdWV1ZSwgaXQgYWxzbyBzZXJ2ZXMgYXMK
Ky8vICAgIHRoZSBiYXNpYyBxdWV1ZSBib29ra2VlcGluZyBkYXRhIHN0cnVjdHVyZS4gV2hlbiBh
IHRocmVhZCBpcyBkZXF1ZXVlZCwgdGhlIG5leHQgdGhyZWFkIGluIHRoZQorLy8gICAgcXVldWUg
dGFrZXMgb24gdGhlIHF1ZXVlIGhlYWQgZHV0aWVzLgorc3RydWN0IFRocmVhZERhdGEgeworICAg
IC8vIFRoZSBwYXJraW5nIG1lY2hhbmlzbS4KKyAgICBib29sIHNob3VsZFBhcmsgeyBmYWxzZSB9
OworICAgIHN0ZDo6bXV0ZXggcGFya2luZ0xvY2s7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFi
bGUgcGFya2luZ0NvbmRpdGlvbjsKKworICAgIC8vIFRoZSBxdWV1ZSBub2RlLgorICAgIFRocmVh
ZERhdGEqIG5leHRJblF1ZXVlIHsgbnVsbHB0ciB9OworCisgICAgLy8gVGhlIHF1ZXVlIGl0c2Vs
Zi4KKyAgICBUaHJlYWREYXRhKiBxdWV1ZVRhaWwgeyBudWxscHRyIH07Cit9OworCitUaHJlYWRT
cGVjaWZpYzxUaHJlYWREYXRhPiogdGhyZWFkRGF0YTsKKworVGhyZWFkRGF0YSogbXlUaHJlYWRE
YXRhKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7CisgICAg
c3RkOjpjYWxsX29uY2UoCisgICAgICAgIGluaXRpYWxpemVPbmNlLAorICAgICAgICBbXSB7Cisg
ICAgICAgICAgICB0aHJlYWREYXRhID0gbmV3IFRocmVhZFNwZWNpZmljPFRocmVhZERhdGE+KCk7
CisgICAgICAgIH0pOworCisgICAgcmV0dXJuICp0aHJlYWREYXRhOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKwordm9pZCBXb3JkTG9jazo6bG9ja1Nsb3coKQoreworICAgIHVuc2ln
bmVkIHNwaW5Db3VudCA9IDA7CisKKyAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQg
dG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgorICAgIGNv
bnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQwOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAg
ICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAK
KyAgICAgICAgaWYgKCEoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KSkgeworICAgICAg
ICAgICAgLy8gSXQncyBub3QgcG9zc2libGUgZm9yIHNvbWVvbmUgdG8gaG9sZCB0aGUgcXVldWUg
bG9jayB3aGlsZSB0aGUgbG9jayBpdHNlbGYgaXMgbm8gbG9uZ2VyCisgICAgICAgICAgICAvLyBo
ZWxkLCBzaW5jZSB3ZSB3aWxsIG9ubHkgYXR0ZW1wdCB0byBhY3F1aXJlIHRoZSBxdWV1ZSBsb2Nr
IHdoZW4gdGhlIGxvY2sgaXMgaGVsZCBhbmQKKyAgICAgICAgICAgIC8vIHRoZSBxdWV1ZSBsb2Nr
IHByZXZlbnRzIHVubG9jay4KKyAgICAgICAgICAgIEFTU0VSVCghKGN1cnJlbnRXb3JkVmFsdWUg
JiBpc1F1ZXVlTG9ja2VkQml0KSk7CisgICAgICAgICAgICBpZiAobV93b3JkLmNvbXBhcmVFeGNo
YW5nZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwgY3VycmVudFdvcmRWYWx1ZSB8IGlzTG9ja2VkQml0
KSkgeworICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3MhIFdlIGFjcXVpcmVkIHRoZSBsb2NrLgor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIElmIHRoZXJlIGlzIG5vIHF1ZXVlIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gs
IHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZCBhZ2Fpbi4KKyAgICAgICAgaWYgKCEoY3Vy
cmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQp
IHsKKyAgICAgICAgICAgIHNwaW5Db3VudCsrOworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVh
ZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gTmVlZCB0byBwdXQgb3Vyc2VsdmVzIG9uIHRoZSBxdWV1ZS4gQ3JlYXRlIHRoZSBxdWV1ZSBp
ZiBvbmUgZG9lcyBub3QgZXhpc3QuIFRoaXMgcmVxdXJpZXMKKyAgICAgICAgLy8gb3duaW5nIHRo
ZSBxdWV1ZSBmb3IgYSBsaXR0bGUgYml0LiBUaGUgbG9jayB0aGF0IGNvbnRyb2xzIHRoZSBxdWV1
ZSBpcyBpdHNlbGYgYSBzcGlubG9jay4KKyAgICAgICAgLy8gQnV0IGJlZm9yZSB3ZSBhY3F1aXJl
IHRoZSBxdWV1ZSBzcGlubG9jaywgd2UgbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIFRocmVhZERh
dGEgZm9yIHRoaXMKKyAgICAgICAgLy8gdGhyZWFkLgorICAgICAgICBUaHJlYWREYXRhKiBtZSA9
IG15VGhyZWFkRGF0YSgpOworICAgICAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKKyAgICAg
ICAgQVNTRVJUKCFtZS0+bmV4dEluUXVldWUpOworICAgICAgICBBU1NFUlQoIW1lLT5xdWV1ZVRh
aWwpOworCisgICAgICAgIC8vIFJlbG9hZCB0aGUgY3VycmVudCB3b3JkIHZhbHVlLCBzaW5jZSBz
b21lIHRpbWUgbWF5IGhhdmUgcGFzc2VkLgorICAgICAgICBjdXJyZW50V29yZFZhbHVlID0gbV93
b3JkLmxvYWQoKTsKKworICAgICAgICAvLyBXZSBwcm9jZWVkIG9ubHkgaWYgdGhlIHF1ZXVlIGxv
Y2sgaXMgbm90IGhlbGQsIHRoZSBXb3JkTG9jayBpcyBoZWxkLCBhbmQgd2Ugc3VjY2VlZCBpbgor
ICAgICAgICAvLyBhY3F1aXJpbmcgdGhlIHF1ZXVlIGxvY2suCisgICAgICAgIGlmICgoY3VycmVu
dFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRCaXQpCisgICAgICAgICAgICB8fCAhKGN1cnJlbnRX
b3JkVmFsdWUgJiBpc0xvY2tlZEJpdCkKKyAgICAgICAgICAgIHx8ICFtX3dvcmQuY29tcGFyZUV4
Y2hhbmdlV2VhayhjdXJyZW50V29yZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlIHwgaXNRdWV1ZUxv
Y2tlZEJpdCkpIHsKKyAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbWUtPnNob3Vs
ZFBhcmsgPSB0cnVlOworCisgICAgICAgIC8vIFdlIG93biB0aGUgcXVldWUuIE5vYm9keSBjYW4g
ZW5xdWV1ZSBvciBkZXF1ZXVlIHVudGlsIHdlJ3JlIGRvbmUuIEFsc28sIGl0J3Mgbm90IHBvc3Np
YmxlCisgICAgICAgIC8vIHRvIHJlbGVhc2UgdGhlIFdvcmRMb2NrIHdoaWxlIHdlIGhvbGQgdGhl
IHF1ZXVlIGxvY2suCisgICAgICAgIFRocmVhZERhdGEqIHF1ZXVlSGVhZCA9IGJpdHdpc2VfY2Fz
dDxUaHJlYWREYXRhKj4oY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKTsKKyAgICAg
ICAgaWYgKHF1ZXVlSGVhZCkgeworICAgICAgICAgICAgLy8gUHV0IHRoaXMgdGhyZWFkIGF0IHRo
ZSBlbmQgb2YgdGhlIHF1ZXVlLgorICAgICAgICAgICAgcXVldWVIZWFkLT5xdWV1ZVRhaWwtPm5l
eHRJblF1ZXVlID0gbWU7CisgICAgICAgICAgICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbCA9IG1lOwor
CisgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBxdWV1ZSBsb2NrLgorICAgICAgICAgICAgY3Vy
cmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVu
dFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50
V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVu
dFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KTsKKyAgICAgICAgICAgIG1fd29yZC5zdG9yZShjdXJy
ZW50V29yZFZhbHVlICYgfmlzUXVldWVMb2NrZWRCaXQpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gTWFrZSB0aGlzIHRocmVhZCBiZSB0aGUgcXVldWUtaGVhZC4KKyAgICAgICAg
ICAgIHF1ZXVlSGVhZCA9IG1lOworICAgICAgICAgICAgbWUtPnF1ZXVlVGFpbCA9IG1lOworCisg
ICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBxdWV1ZSBsb2NrIGFuZCBpbnN0YWxsIG91cnNlbHZl
cyBhcyB0aGUgaGVhZC4gTm8gbmVlZCBmb3IgYSBDQVMgbG9vcCwgc2luY2UKKyAgICAgICAgICAg
IC8vIHdlIG93biB0aGUgcXVldWUgbG9jay4KKyAgICAgICAgICAgIGN1cnJlbnRXb3JkVmFsdWUg
PSBtX3dvcmQubG9hZCgpOworICAgICAgICAgICAgQVNTRVJUKH4oY3VycmVudFdvcmRWYWx1ZSAm
IH5xdWV1ZUhlYWRNYXNrKSk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAm
IGlzUXVldWVMb2NrZWRCaXQpOworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUg
JiBpc0xvY2tlZEJpdCk7CisgICAgICAgICAgICB1aW50cHRyX3QgbmV3V29yZFZhbHVlID0gY3Vy
cmVudFdvcmRWYWx1ZTsKKyAgICAgICAgICAgIG5ld1dvcmRWYWx1ZSB8PSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihxdWV1ZUhlYWQpOworICAgICAgICAgICAgbmV3V29yZFZhbHVlICY9IH5pc1F1
ZXVlTG9ja2VkQml0OworICAgICAgICAgICAgbV93b3JkLnN0b3JlKG5ld1dvcmRWYWx1ZSk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGV2ZXJ5b25lIHdobyBhY3F1aXJl
cyB0aGUgcXVldWUgbG9jayB3aWxsIHNlZSBtZSBvbiB0aGUgcXVldWUsIGFuZCBhbnlvbmUgd2hv
CisgICAgICAgIC8vIGFjcXVpcmVzIG1lJ3MgbG9jayB3aWxsIHNlZSB0aGF0IG1lIHdhbnRzIHRv
IHBhcmsuIE5vdGUgdGhhdCBzaG91bGRQYXJrIG1heSBoYXZlIGJlZW4KKyAgICAgICAgLy8gY2xl
YXJlZCBhcyBzb29uIGFzIHRoZSBxdWV1ZSBsb2NrIHdhcyByZWxlYXNlZCBhYm92ZSwgYnV0IGl0
IHdpbGwgaGFwcGVuIHdoaWxlIHRoZQorICAgICAgICAvLyByZWxlYXNpbmcgdGhyZWFkIGhvbGRz
IG1lJ3MgcGFya2luZ0xvY2suCisKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVf
bG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgICAgIHdo
aWxlIChtZS0+c2hvdWxkUGFyaykKKyAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlv
bi53YWl0KGxvY2tlcik7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIW1lLT5zaG91bGRQ
YXJrKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+bmV4dEluUXVldWUpOworICAgICAgICBBU1NFUlQo
IW1lLT5xdWV1ZVRhaWwpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGNhbiBsb29wIGFy
b3VuZCBhbmQgdHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2sgYWdhaW4uCisgICAgfQorfQorCit2b2lk
IFdvcmRMb2NrOjp1bmxvY2tTbG93KCkKK3sKKyAgICAvLyBUaGUgZmFzdCBwYXRoIGNhbiBmYWls
IGVpdGhlciBiZWNhdXNlIG9mIHNwdXJpb3VzIHdlYWsgQ0FTIGZhaWx1cmUsIG9yIGJlY2F1c2Ug
c29tZW9uZSBwdXQgYQorICAgIC8vIHRocmVhZCBvbiB0aGUgcXVldWUsIG9yIHRoZSBxdWV1ZSBs
b2NrIGlzIGhlbGQuIElmIHRoZSBxdWV1ZSBsb2NrIGlzIGhlbGQsIGl0IGNhbiBvbmx5IGJlCisg
ICAgLy8gYmVjYXVzZSBzb21lb25lICp3aWxsKiBlbnF1ZXVlIGEgdGhyZWFkIG9udG8gdGhlIHF1
ZXVlLgorCisgICAgLy8gQWNxdWlyZSB0aGUgcXVldWUgbG9jaywgb3IgcmVsZWFzZSB0aGUgbG9j
ay4gVGhpcyBsb29wIGhhbmRsZXMgYm90aCBsb2NrIHJlbGVhc2UgaW4gY2FzZSB0aGUKKyAgICAv
LyBmYXN0IHBhdGgncyB3ZWFrIENBUyBzcHVyaW91c2x5IGZhaWxlZCBhbmQgaXQgaGFuZGxlcyBx
dWV1ZSBsb2NrIGFjcXVpc2l0aW9uIGlmIHRoZXJlIGlzCisgICAgLy8gYWN0dWFsbHkgc29tZXRo
aW5nIGludGVyZXN0aW5nIG9uIHRoZSBxdWV1ZS4KKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHVp
bnRwdHJfdCBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKworICAgICAgICBBU1NF
UlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KTsKKyAgICAgICAgCisgICAgICAgIGlm
IChjdXJyZW50V29yZFZhbHVlID09IGlzTG9ja2VkQml0KSB7CisgICAgICAgICAgICBpZiAobV93
b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNMb2NrZWRCaXQsIDApKSB7CisgICAgICAgICAgICAg
ICAgLy8gVGhlIGZhc3QgcGF0aCdzIHdlYWsgQ0FTIGhhZCBzcHVyaW91c2x5IGZhaWxlZCwgYW5k
IG5vdyB3ZSBzdWNjZWVkZWQuIFRoZSBsb2NrIGlzCisgICAgICAgICAgICAgICAgLy8gdW5sb2Nr
ZWQgYW5kIHdlJ3JlIGRvbmUhCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gTG9vcCBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgICAg
IHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnRXb3JkVmFsdWUgJiBpc1F1ZXVlTG9j
a2VkQml0KSB7CisgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBpdCB3YXNuJ3QganVz
dCBhIHNwdXJpb3VzIHdlYWsgQ0FTIGZhaWx1cmUgYW5kIGlmIHRoZSBxdWV1ZSBsb2NrIGlzIG5v
dCBoZWxkLCB0aGVuIHRoZXJlCisgICAgICAgIC8vIG11c3QgYmUgYW4gZW50cnkgb24gdGhlIHF1
ZXVlLgorICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKTsK
KworICAgICAgICBpZiAobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudFdvcmRWYWx1
ZSwgY3VycmVudFdvcmRWYWx1ZSB8IGlzUXVldWVMb2NrZWRCaXQpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9h
ZCgpOworICAgICAgICAKKyAgICAvLyBBZnRlciB3ZSBhY3F1aXJlIHRoZSBxdWV1ZSBsb2NrLCB0
aGUgV29yZExvY2sgbXVzdCBzdGlsbCBiZSBoZWxkIGFuZCB0aGUgcXVldWUgbXVzdCBiZQorICAg
IC8vIG5vbi1lbXB0eS4gVGhlIHF1ZXVlIG11c3QgYmUgbm9uLWVtcHR5IHNpbmNlIG9ubHkgdGhl
IGxvY2tTbG93KCkgbWV0aG9kIGNvdWxkIGhhdmUgaGVsZCB0aGUKKyAgICAvLyBxdWV1ZSBsb2Nr
IGFuZCBpZiBpdCBkaWQgdGhlbiBpdCBvbmx5IHJlbGVhc2VzIGl0IGFmdGVyIHB1dHRpbmcgc29t
ZXRoaW5nIG9uIHRoZSBxdWV1ZS4KKyAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9j
a2VkQml0KTsKKyAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRCaXQp
OworICAgIFRocmVhZERhdGEqIHF1ZXVlSGVhZCA9IGJpdHdpc2VfY2FzdDxUaHJlYWREYXRhKj4o
Y3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKTsKKyAgICBBU1NFUlQocXVldWVIZWFk
KTsKKworICAgIFRocmVhZERhdGEqIG5ld1F1ZXVlSGVhZCA9IHF1ZXVlSGVhZC0+bmV4dEluUXVl
dWU7CisgICAgLy8gRWl0aGVyIHRoaXMgd2FzIHRoZSBvbmx5IHRocmVhZCBvbiB0aGUgcXVldWUs
IGluIHdoaWNoIGNhc2Ugd2UgZGVsZXRlIHRoZSBxdWV1ZSwgb3IgdGhlcmUKKyAgICAvLyBhcmUg
c3RpbGwgbW9yZSB0aHJlYWRzIG9uIHRoZSBxdWV1ZSwgaW4gd2hpY2ggY2FzZSB3ZSBjcmVhdGUg
YSBuZXcgcXVldWUgaGVhZC4KKyAgICBpZiAobmV3UXVldWVIZWFkKQorICAgICAgICBuZXdRdWV1
ZUhlYWQtPnF1ZXVlVGFpbCA9IHF1ZXVlSGVhZC0+cXVldWVUYWlsOworCisgICAgLy8gQ2hhbmdl
IHRoZSBxdWV1ZSBoZWFkLCBwb3NzaWJseSByZW1vdmluZyBpdCBpZiBuZXdRdWV1ZUhlYWQgaXMg
bnVsbC4gTm8gbmVlZCBmb3IgYSBDQVMgbG9vcCwKKyAgICAvLyBzaW5jZSB3ZSBob2xkIHRoZSBx
dWV1ZSBsb2NrIGFuZCB0aGUgbG9jayBpdHNlbGYgc28gbm90aGluZyBhYm91dCB0aGUgbG9jayBj
YW4gY2hhbmdlIHJpZ2h0CisgICAgLy8gbm93LgorICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dv
cmQubG9hZCgpOworICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpOwor
ICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7CisgICAgQVNT
RVJUKChjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1hc2spID09IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KHF1ZXVlSGVhZCkpOworICAgIHVpbnRwdHJfdCBuZXdXb3JkVmFsdWUgPSBjdXJy
ZW50V29yZFZhbHVlOworICAgIG5ld1dvcmRWYWx1ZSAmPSB+aXNMb2NrZWRCaXQ7IC8vIFJlbGVh
c2UgdGhlIFdvcmRMb2NrLgorICAgIG5ld1dvcmRWYWx1ZSAmPSB+aXNRdWV1ZUxvY2tlZEJpdDsg
Ly8gUmVsZWFzZSB0aGUgcXVldWUgbG9jay4KKyAgICBuZXdXb3JkVmFsdWUgJj0gcXVldWVIZWFk
TWFzazsgLy8gQ2xlYXIgb3V0IHRoZSBvbGQgcXVldWUgaGVhZC4KKyAgICBuZXdXb3JkVmFsdWUg
fD0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3UXVldWVIZWFkKTsgLy8gSW5zdGFsbCBuZXcg
cXVldWUgaGVhZC4KKyAgICBtX3dvcmQuc3RvcmUobmV3V29yZFZhbHVlKTsKKworICAgIC8vIE5v
dyB0aGUgbG9jayBpcyBhdmFpbGFibGUgZm9yIGFjcXVpc2l0aW9uLiBCdXQgd2UganVzdCBoYXZl
IHRvIHdha2UgdXAgdGhlIG9sZCBxdWV1ZSBoZWFkLgorICAgIC8vIEFmdGVyIHRoYXQsIHdlJ3Jl
IGRvbmUhCisKKyAgICBxdWV1ZUhlYWQtPm5leHRJblF1ZXVlID0gbnVsbHB0cjsKKyAgICBxdWV1
ZUhlYWQtPnF1ZXVlVGFpbCA9IG51bGxwdHI7CisKKyAgICAvLyBXZSBkbyB0aGlzIGNhcmVmdWxs
eSBiZWNhdXNlIHRoaXMgbWF5IHJ1biBlaXRoZXIgYmVmb3JlIG9yIGR1cmluZyB0aGUgcGFya2lu
Z0xvY2sgY3JpdGljYWwKKyAgICAvLyBzZWN0aW9uIGluIGxvY2tTbG93KCkuCisgICAgeworICAg
ICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihxdWV1ZUhlYWQtPnBhcmtp
bmdMb2NrKTsKKyAgICAgICAgcXVldWVIZWFkLT5zaG91bGRQYXJrID0gZmFsc2U7CisgICAgfQor
ICAgIC8vIERvZXNuJ3QgbWF0dGVyIGlmIHdlIG5vdGlmeV9hbGwoKSBvciBub3RpZnlfb25lKCkg
aGVyZSBzaW5jZSB0aGUgb25seSB0aHJlYWQgdGhhdCBjb3VsZCBiZQorICAgIC8vIHdhaXRpbmcg
aXMgcXVldWVIZWFkLgorICAgIHF1ZXVlSGVhZC0+cGFya2luZ0NvbmRpdGlvbi5ub3RpZnlfb25l
KCk7CisKKyAgICAvLyBUaGUgb2xkIHF1ZXVlIGhlYWQgY2FuIG5vdyBjb250ZW5kIGZvciB0aGUg
bG9jayBhZ2Fpbi4gV2UncmUgZG9uZSEKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1dvcmRMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
V29yZExvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1dvcmRMb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdURl9Xb3JkTG9ja19oCisjZGVmaW5lIFdURl9X
b3JkTG9ja19oCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Db21w
aWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgV29yZExvY2sgaXMgYSBmdWxseSBhZGFw
dGl2ZSBtdXRleCB0aGF0IHVzZXMgc2l6ZW9mKHZvaWQqKSBzdG9yYWdlLiBJdCBoYXMgYSBmYXN0
IHBhdGggdGhhdCBpcworLy8gc2ltaWxhciB0byBTcGluTG9jaywgYW5kIGEgc2xvdyBwYXRoIHRo
YXQgaXMgc2ltaWxhciB0byBNdXRleC4gSW4gbW9zdCBjYXNlcywgeW91IHNob3VsZCB1c2UgTG9j
aworLy8gaW5zdGVhZC4gV29yZExvY2sgc2l0cyBsb3dlciBpbiB0aGUgc3RhY2sgYW5kIGlzIHVz
ZWQgdG8gaW1wbGVtZW50IExvY2ssIHNvIExvY2sgaXMgdGhlIG1haW4KKy8vIGNsaWVudCBvZiBX
b3JkTG9jay4KKworY2xhc3MgV29yZExvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdv
cmRMb2NrKTsKK3B1YmxpYzoKKyAgICBXb3JkTG9jaygpCisgICAgeworICAgICAgICBtX3dvcmQu
c3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgfQorCisgICAgdm9pZCBs
b2NrKCkKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdl
YWsoMCwgaXNMb2NrZWRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgeworICAgICAg
ICAgICAgLy8gV29yZExvY2sgYWNxdWlyZWQhCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBsb2NrU2xvdygpOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrKCkKKyAg
ICB7CisgICAgICAgIGlmIChMSUtFTFkobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNMb2Nr
ZWRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkgeworICAgICAgICAgICAgLy8g
V29yZExvY2sgcmVsZWFzZWQsIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1bmxvY2tTbG93KCk7CisgICAgfQorCisgICAg
Ym9vbCBpc0hlbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd29yZC5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNMb2NrZWRCaXQ7CisgICAgfQorCisgICAgYm9v
bCBpc0xvY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNIZWxkKCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgaXNMb2NrZWRCaXQgPSAx
OworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgaXNRdWV1ZUxvY2tlZEJpdCA9IDI7CisgICAg
c3RhdGljIGNvbnN0IHVpbnRwdHJfdCBxdWV1ZUhlYWRNYXNrID0gMzsKKworICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGxvY2tTbG93KCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
dW5sb2NrU2xvdygpOworCisgICAgQXRvbWljPHVpbnRwdHJfdD4gbV93b3JkOworfTsKKwordHlw
ZWRlZiBMb2NrZXI8V29yZExvY2s+IFdvcmRMb2NrSG9sZGVyOworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwordXNpbmcgV1RGOjpXb3JkTG9jazsKK3VzaW5nIFdURjo6V29yZExvY2tIb2xkZXI7CisK
KyNlbmRpZiAvLyBXVEZfV29yZExvY2tfaAorCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODgzMDkpCisrKyBUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNS0wOC0xMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEFsd2F5cyB1c2UgYSBieXRlLXNp
emVkIGxvY2sgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NzkwOAorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdh
cmVuLgorCisgICAgICAgIEFsbCBwcmV2aW91cyB0ZXN0cyBvZiBMb2NrIGFyZSBub3cgdGVzdHMg
b2YgV29yZExvY2suIEFsbCBwcmV2aW91cyB0ZXN0cyBvZiBCeXRlTG9jayBhcmUKKyAgICAgICAg
bm93IHRlc3RzIG9mIExvY2suCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9M
b2NrLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnJ1bkxvY2tUZXN0KToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE1LTA4LTExICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggbmFtZXMgb2YgTG9jayB0ZXN0czogc2hvdWxkIGJl
ICJDb250ZW5kZWQiLCBub3QgIkNvbnRlbnRlZCIuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9Mb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Mb2NrLmNwcAkocmV2aXNpb24gMTg4MzA5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEwICsyNCwxMCBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDx3dGYvQnl0ZUxvY2suaD4KICNp
bmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC02OCw2OSArNjgsNjkgQEAgdm9pZCBydW5Mb2Nr
VGVzdCh1bnNpZ25lZCBudW1UaHJlYWRHcm91cAogICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWQs
IHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdKTsKIH0KIAotVEVTVChXVEZfTG9jaywgVW5jb250ZW5k
ZWRTaG9ydFNlY3Rpb24pCitURVNUKFdURl9Xb3JkTG9jaywgVW5jb250ZW5kZWRTaG9ydFNlY3Rp
b24pCiB7Ci0gICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMSwgMSwgMSwgMTAwMDAwMDApOworICAgIHJ1
bkxvY2tUZXN0PFdvcmRMb2NrPigxLCAxLCAxLCAxMDAwMDAwMCk7CiB9CiAKLVRFU1QoV1RGX0xv
Y2ssIFVuY29udGVuZGVkTG9uZ1NlY3Rpb24pCitURVNUKFdURl9Xb3JkTG9jaywgVW5jb250ZW5k
ZWRMb25nU2VjdGlvbikKIHsKLSAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxLCAxMDAwMCwgMTAw
MCk7CisgICAgcnVuTG9ja1Rlc3Q8V29yZExvY2s+KDEsIDEsIDEwMDAwLCAxMDAwKTsKIH0KIAot
VEVTVChXVEZfTG9jaywgQ29udGVuZGVkU2hvcnRTZWN0aW9uKQorVEVTVChXVEZfV29yZExvY2ss
IENvbnRlbmRlZFNob3J0U2VjdGlvbikKIHsKLSAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxMCwg
MSwgMTAwMDAwMDApOworICAgIHJ1bkxvY2tUZXN0PFdvcmRMb2NrPigxLCAxMCwgMSwgMTAwMDAw
MDApOwogfQogCi1URVNUKFdURl9Mb2NrLCBDb250ZW5kZWRMb25nU2VjdGlvbikKK1RFU1QoV1RG
X1dvcmRMb2NrLCBDb250ZW5kZWRMb25nU2VjdGlvbikKIHsKLSAgICBydW5Mb2NrVGVzdDxMb2Nr
PigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKKyAgICBydW5Mb2NrVGVzdDxXb3JkTG9jaz4oMSwgMTAs
IDEwMDAwLCAxMDAwMCk7CiB9CiAKLVRFU1QoV1RGX0xvY2ssIE1hbnlDb250ZW5kZWRTaG9ydFNl
Y3Rpb25zKQorVEVTVChXVEZfV29yZExvY2ssIE1hbnlDb250ZW5kZWRTaG9ydFNlY3Rpb25zKQog
ewotICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwgMSwgNTAwMDAwKTsKKyAgICBydW5Mb2Nr
VGVzdDxXb3JkTG9jaz4oMTAsIDEwLCAxLCA1MDAwMDApOwogfQogCi1URVNUKFdURl9Mb2NrLCBN
YW55Q29udGVuZGVkTG9uZ1NlY3Rpb25zKQorVEVTVChXVEZfV29yZExvY2ssIE1hbnlDb250ZW5k
ZWRMb25nU2VjdGlvbnMpCiB7Ci0gICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMTAsIDEwLCAxMDAwMCwg
MTAwMCk7CisgICAgcnVuTG9ja1Rlc3Q8V29yZExvY2s+KDEwLCAxMCwgMTAwMDAsIDEwMDApOwog
fQogCi1URVNUKFdURl9CeXRlTG9jaywgVW5jb250ZW5kZWRTaG9ydFNlY3Rpb24pCitURVNUKFdU
Rl9Mb2NrLCBVbmNvbnRlbmRlZFNob3J0U2VjdGlvbikKIHsKLSAgICBydW5Mb2NrVGVzdDxCeXRl
TG9jaz4oMSwgMSwgMSwgMTAwMDAwMDApOworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEsIDEs
IDEwMDAwMDAwKTsKIH0KIAotVEVTVChXVEZfQnl0ZUxvY2ssIFVuY29udGVuZGVkTG9uZ1NlY3Rp
b24pCitURVNUKFdURl9Mb2NrLCBVbmNvbnRlbmRlZExvbmdTZWN0aW9uKQogewotICAgIHJ1bkxv
Y2tUZXN0PEJ5dGVMb2NrPigxLCAxLCAxMDAwMCwgMTAwMCk7CisgICAgcnVuTG9ja1Rlc3Q8TG9j
az4oMSwgMSwgMTAwMDAsIDEwMDApOwogfQogCi1URVNUKFdURl9CeXRlTG9jaywgQ29udGVuZGVk
U2hvcnRTZWN0aW9uKQorVEVTVChXVEZfTG9jaywgQ29udGVuZGVkU2hvcnRTZWN0aW9uKQogewot
ICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxLCAxMCwgMSwgMTAwMDAwMDApOworICAgIHJ1bkxv
Y2tUZXN0PExvY2s+KDEsIDEwLCAxLCAxMDAwMDAwMCk7CiB9CiAKLVRFU1QoV1RGX0J5dGVMb2Nr
LCBDb250ZW5kZWRMb25nU2VjdGlvbikKK1RFU1QoV1RGX0xvY2ssIENvbnRlbmRlZExvbmdTZWN0
aW9uKQogewotICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxLCAxMCwgMTAwMDAsIDEwMDAwKTsK
KyAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKIH0KIAotVEVTVChX
VEZfQnl0ZUxvY2ssIE1hbnlDb250ZW5kZWRTaG9ydFNlY3Rpb25zKQorVEVTVChXVEZfTG9jaywg
TWFueUNvbnRlbmRlZFNob3J0U2VjdGlvbnMpCiB7Ci0gICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+
KDEwLCAxMCwgMSwgNTAwMDAwKTsKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigxMCwgMTAsIDEsIDUw
MDAwMCk7CiB9CiAKLVRFU1QoV1RGX0J5dGVMb2NrLCBNYW55Q29udGVuZGVkTG9uZ1NlY3Rpb25z
KQorVEVTVChXVEZfTG9jaywgTWFueUNvbnRlbmRlZExvbmdTZWN0aW9ucykKIHsKLSAgICBydW5M
b2NrVGVzdDxCeXRlTG9jaz4oMTAsIDEwLCAxMDAwMCwgMTAwMCk7CisgICAgcnVuTG9ja1Rlc3Q8
TG9jaz4oMTAsIDEwLCAxMDAwMCwgMTAwMCk7CiB9CiAKLVRFU1QoV1RGX0J5dGVMb2NrLCBTZWN0
aW9uQWRkcmVzc0NvbGxpc2lvbikKK1RFU1QoV1RGX0xvY2ssIFNlY3Rpb25BZGRyZXNzQ29sbGlz
aW9uKQogewotICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPig0LCAyLCAxMDAwMCwgMjAwMCk7Cisg
ICAgcnVuTG9ja1Rlc3Q8TG9jaz4oNCwgMiwgMTAwMDAsIDIwMDApOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>