<?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>238064</bug_id>
          
          <creation_ts>2022-03-17 21:17:24 -0700</creation_ts>
          <short_desc>[IFC][Integration] Rename InlineIterator::Line::closestRunForPoint to closestBoxForPoint</short_desc>
          <delta_ts>2022-03-18 06:51:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>samuel_white</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1852608</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2022-03-17 21:17:24 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852609</commentid>
    <comment_count>1</comment_count>
      <attachid>455064</attachid>
    <who name="alan">zalan</who>
    <bug_when>2022-03-17 21:19:29 -0700</bug_when>
    <thetext>Created attachment 455064
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852699</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-18 06:50:25 -0700</bug_when>
    <thetext>Committed r291481 (248595@main): &lt;https://commits.webkit.org/248595@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 455064.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852700</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-18 06:51:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/90483617&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455064</attachid>
            <date>2022-03-17 21:19:29 -0700</date>
            <delta_ts>2022-03-18 06:50:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238064-20220317211928.patch</filename>
            <type>text/plain</type>
            <size>100343</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODA2MTA2NjM2ZTk1MzNh
N2ZkY2ZkNGQ2N2QxZmZmNjhjOWM4MzJiOC4uMDA1MzI0MzRhNDAxMGRiMWU0ZDUzNzdiNzNjNGE1
NzI5MDNjYTA5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDIyLTAzLTE3ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbSUZDXVtJbnRlZ3JhdGlvbl0g
UmVuYW1lIElubGluZUl0ZXJhdG9yOjpMaW5lOjpjbG9zZXN0UnVuKiB0byBjbG9zZXN0Qm94Rm9y
KgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM4MDY0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6bG9jYWxDYXJldFJlY3RGb3JDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAqIGRvbS9Q
b3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6dXBzdHJlYW0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmRvd25zdHJlYW0gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UG9zaXRpb246OnJlbmRlcnNJbkRpZmZlcmVudFBvc2l0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjppbmxpbmVCb3hBbmRPZmZzZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6c2VhcmNoQWhlYWRGb3JCZXR0ZXJNYXRjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBkb20vUG9zaXRpb24uaDoKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpkaXJlY3Rpb25PZlNlbGVj
dGlvbik6CisgICAgICAgICogZWRpdGluZy9JbmxpbmVSdW5BbmRPZmZzZXQuaDoKKyAgICAgICAg
KiBlZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
ZWRQb3NpdGlvbjo6UmVuZGVyZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJl
ZFBvc2l0aW9uOjpwcmV2aW91c0xlYWZPbkxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyZWRQb3NpdGlvbjo6bmV4dExlYWZPbkxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyZWRQb3NpdGlvbjo6aXNFcXVpdmFsZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcmVkUG9zaXRpb246OmJpZGlMZXZlbE9uTGVmdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJlZFBvc2l0aW9uOjpiaWRpTGV2ZWxPblJpZ2h0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246OmxlZnRCb3VuZGFyeU9mQmlkaVJ1bik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJlZFBvc2l0aW9uOjpyaWdodEJvdW5kYXJ5T2ZCaWRpUnVu
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246OmF0TGVmdEJvdW5kYXJ5T2ZC
aWRpUnVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246OmF0Umln
aHRCb3VuZGFyeU9mQmlkaVJ1biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJlZFBv
c2l0aW9uOjphYnNvbHV0ZVJlY3QgY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvUmVuZGVyZWRQ
b3NpdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyZWRQb3NpdGlvbjo6bGluZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJlZFBvc2l0aW9uOjphdExlZnRtb3N0T2Zmc2V0
SW5Cb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyZWRQb3NpdGlvbjo6YXRSaWdo
dG1vc3RPZmZzZXRJbkJveCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlE
aXN0aW5jdENhbmRpZGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRp
b246OnJpZ2h0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlUG9zaXRpb246OmlubGluZUJveEFuZE9mZnNldCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6YWJzb2x1dGVTZWxlY3Rpb25Cb3VuZHNGb3JM
aW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6aW5saW5lUnVu
QW5kT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmlzVGV4dE9yTGluZUJyZWFrQm94KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3Vz
VGV4dE9yTGluZUJyZWFrQm94KToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRUZXh0T3JMaW5lQnJl
YWtCb3gpOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRUZXh0T3JMaW5lQnJlYWtCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6ZW5kVGV4dE9yTGluZUJyZWFrQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OmxvZ2ljYWxseVByZXZpb3VzQm94KToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxseU5leHRC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6d29yZEJyZWFrSXRlcmF0b3JGb3JNaW5PZmZzZXRCb3Vu
ZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjp3b3JkQnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJv
dW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OnZpc3VhbFdvcmRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpzdGFydFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjplbmRQ
b3NpdGlvbkZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNMaW5lUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6bmV4dExpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojppc1RleHRPckxpbmVCcmVha1J1bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwcmV2
aW91c1RleHRPckxpbmVCcmVha1J1bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpuZXh0
VGV4dE9yTGluZUJyZWFrUnVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0VGV4
dE9yTGluZUJyZWFrUnVuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVuZFRleHRPckxp
bmVCcmVha1J1bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsbHlQcmV2aW91
c1J1bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsbHlOZXh0UnVuKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMaW5lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lOjpjbG9zZXN0Qm94Rm9y
UG9pbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmNs
b3Nlc3RCb3hGb3JMb2dpY2FsTGVmdFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpMaW5lOjpjbG9zZXN0UnVuRm9yUG9pbnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmU6OmNsb3Nlc3RSdW5Gb3JM
b2dpY2FsTGVmdFBvc2l0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW50
ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMaW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL0NhcmV0
UmVjdENvbXB1dGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDYXJldFJlY3RG
b3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDYXJldFJlY3RGb3JMaW5lQnJlYWsp
OgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUNhcmV0UmVjdEZvclNWR0lubGluZVRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUNhcmV0UmVjdEZvckJveCk6CisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlQ2FyZXRSZWN0Rm9yQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0
ZUxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRp
b24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBvc2l0aW9uRm9yUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Rmxvdzo6ZmluZENsb3Nlc3RUZXh0QXRBYnNvbHV0ZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorCiAyMDIyLTAzLTE2ICBBbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbSUZDXVtJbnRlZ3JhdGlvbl0gSW50
cm9kdWNlIExpbmVTZWxlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwCmluZGV4IDJkMjIwNDQyNTI1NDdiMmNhMzRkOWVjMTkyNmVhMjc3MmJl
MGQzNTEuLjdjNGE0ZmVjZTg0MDIxNjZhZGI0MjgyZmFlODE0MDM2MzcyYTYxMzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMzA0Niwx
NCArMzA0NiwxNCBAQCBMYXlvdXRSZWN0IEFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9y
Q2hhcmFjdGVyT2Zmc2V0KFJlbmRlck9iamVjdComIHJlbmRlcgogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBhdXRvIHJ1bkFuZE9mZnNldCA9IG1ha2VD
b250YWluZXJPZmZzZXRQb3NpdGlvbihyYW5nZS0+c3RhcnQpLmlubGluZVJ1bkFuZE9mZnNldChB
ZmZpbml0eTo6RG93bnN0cmVhbSk7Ci0gICAgaWYgKHJ1bkFuZE9mZnNldC5ydW4pCi0gICAgICAg
IHJlbmRlcmVyID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPigmcnVuQW5kT2Zmc2V0LnJ1bi0+
cmVuZGVyZXIoKSk7CisgICAgYXV0byBib3hBbmRPZmZzZXQgPSBtYWtlQ29udGFpbmVyT2Zmc2V0
UG9zaXRpb24ocmFuZ2UtPnN0YXJ0KS5pbmxpbmVCb3hBbmRPZmZzZXQoQWZmaW5pdHk6OkRvd25z
dHJlYW0pOworICAgIGlmIChib3hBbmRPZmZzZXQuYm94KQorICAgICAgICByZW5kZXJlciA9IGNv
bnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oJmJveEFuZE9mZnNldC5ib3gtPnJlbmRlcmVyKCkpOwog
Ci0gICAgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIpICYmIElubGluZUl0ZXJhdG9y
Ojpib3hGb3IoZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVyZXIpKSAhPSBydW5BbmRP
ZmZzZXQucnVuKQorICAgIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKSAmJiBJbmxp
bmVJdGVyYXRvcjo6Ym94Rm9yKGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4oKnJlbmRlcmVyKSkg
IT0gYm94QW5kT2Zmc2V0LmJveCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIHJl
dHVybiBjb21wdXRlTG9jYWxDYXJldFJlY3QoKnJlbmRlcmVyLCBydW5BbmRPZmZzZXQpOworICAg
IHJldHVybiBjb21wdXRlTG9jYWxDYXJldFJlY3QoKnJlbmRlcmVyLCBib3hBbmRPZmZzZXQpOwog
fQogCiBJbnRSZWN0IEFYT2JqZWN0Q2FjaGU6OmFic29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0
ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmNwcAppbmRleCAyYjY0NDkxMzQwMDdiOWQzM2I1MDM5ZmNmYTQ5YmM2YmJiNmFi
MTY0Li4xZDIwODY3M2YwNzFmZjZhOGJiZjA1YmYyNGYyOWQwMmQ1NDZjNmQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5jcHAKQEAgLTc0MSw4ICs3NDEsOCBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBz
dHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAgICAgICAgIGlm
IChpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpKSB7CiAgICAgICAgICAgICBhdXRvJiB0ZXh0UmVu
ZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpOwogCi0gICAgICAgICAgICBh
dXRvIFtmaXJzdFRleHRSdW4sIG9yZGVyQ2FjaGVdID0gSW5saW5lSXRlcmF0b3I6OmZpcnN0VGV4
dEJveEluTG9naWNhbE9yZGVyRm9yKHRleHRSZW5kZXJlcik7Ci0gICAgICAgICAgICBpZiAoIWZp
cnN0VGV4dFJ1bikKKyAgICAgICAgICAgIGF1dG8gW2ZpcnN0VGV4dEJveCwgb3JkZXJDYWNoZV0g
PSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RUZXh0Qm94SW5Mb2dpY2FsT3JkZXJGb3IodGV4dFJlbmRl
cmVyKTsKKyAgICAgICAgICAgIGlmICghZmlyc3RUZXh0Qm94KQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgICAgICBpZiAoJmN1cnJlbnROb2RlICE9IHN0YXJ0Tm9kZSkgewpA
QCAtNzU1LDE1ICs3NTUsMTUgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRpbmdC
b3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICB1bnNpZ25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudFBvc2l0aW9uLm9mZnNldEluTGVhZk5v
ZGUoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byBydW4gPSBmaXJzdFRleHRSdW47IHJ1bjspIHsK
LSAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNldCA+IHJ1bi0+c3RhcnQoKSAmJiB0ZXh0T2Zm
c2V0IDw9IHJ1bi0+ZW5kKCkpCisgICAgICAgICAgICBmb3IgKGF1dG8gYm94ID0gZmlyc3RUZXh0
Qm94OyBib3g7KSB7CisgICAgICAgICAgICAgICAgaWYgKHRleHRPZmZzZXQgPiBib3gtPnN0YXJ0
KCkgJiYgdGV4dE9mZnNldCA8PSBib3gtPmVuZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY3VycmVudFBvc2l0aW9uOwogCi0gICAgICAgICAgICAgICAgYXV0byBuZXh0UnVuID0gSW5s
aW5lSXRlcmF0b3I6Om5leHRUZXh0Qm94SW5Mb2dpY2FsT3JkZXIocnVuLCBvcmRlckNhY2hlKTsK
LSAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNldCA9PSBydW4tPmVuZCgpICsgMSAmJiBuZXh0
UnVuICYmIHJ1bi0+bGluZSgpICE9IG5leHRSdW4tPmxpbmUoKSkKKyAgICAgICAgICAgICAgICBh
dXRvIG5leHRCb3ggPSBJbmxpbmVJdGVyYXRvcjo6bmV4dFRleHRCb3hJbkxvZ2ljYWxPcmRlcihi
b3gsIG9yZGVyQ2FjaGUpOworICAgICAgICAgICAgICAgIGlmICh0ZXh0T2Zmc2V0ID09IGJveC0+
ZW5kKCkgKyAxICYmIG5leHRCb3ggJiYgYm94LT5saW5lKCkgIT0gbmV4dEJveC0+bGluZSgpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9uOwogCi0gICAgICAgICAg
ICAgICAgcnVuID0gbmV4dFJ1bjsKKyAgICAgICAgICAgICAgICBib3ggPSBuZXh0Qm94OwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtODQ4LDggKzg0OCw4IEBAIFBvc2l0aW9u
IFBvc2l0aW9uOjpkb3duc3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBj
b25zdAogICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSkgewogICAgICAgICAg
ICAgYXV0byYgdGV4dFJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKTsK
IAotICAgICAgICAgICAgYXV0byBbZmlyc3RUZXh0UnVuLCBvcmRlckNhY2hlXSA9IElubGluZUl0
ZXJhdG9yOjpmaXJzdFRleHRCb3hJbkxvZ2ljYWxPcmRlckZvcih0ZXh0UmVuZGVyZXIpOwotICAg
ICAgICAgICAgaWYgKCFmaXJzdFRleHRSdW4pCisgICAgICAgICAgICBhdXRvIFtmaXJzdFRleHRC
b3gsIG9yZGVyQ2FjaGVdID0gSW5saW5lSXRlcmF0b3I6OmZpcnN0VGV4dEJveEluTG9naWNhbE9y
ZGVyRm9yKHRleHRSZW5kZXJlcik7CisgICAgICAgICAgICBpZiAoIWZpcnN0VGV4dEJveCkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgaWYgKCZjdXJyZW50Tm9kZSAh
PSBzdGFydE5vZGUpIHsKQEAgLTg1OCwxOCArODU4LDE4IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpk
b3duc3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICB1bnNpZ25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudFBvc2l0
aW9uLm9mZnNldEluTGVhZk5vZGUoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byBydW4gPSBmaXJz
dFRleHRSdW47IHJ1bjspIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJ1bi0+bGVuZ3RoKCkgJiYg
dGV4dE9mZnNldCA9PSBydW4tPnN0YXJ0KCkpCisgICAgICAgICAgICBmb3IgKGF1dG8gYm94ID0g
Zmlyc3RUZXh0Qm94OyBib3g7KSB7CisgICAgICAgICAgICAgICAgaWYgKCFib3gtPmxlbmd0aCgp
ICYmIHRleHRPZmZzZXQgPT0gYm94LT5zdGFydCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY3VycmVudFBvc2l0aW9uOwogCi0gICAgICAgICAgICAgICAgaWYgKHRleHRPZmZzZXQgPj0g
cnVuLT5zdGFydCgpICYmIHRleHRPZmZzZXQgPCBydW4tPmVuZCgpKQorICAgICAgICAgICAgICAg
IGlmICh0ZXh0T2Zmc2V0ID49IGJveC0+c3RhcnQoKSAmJiB0ZXh0T2Zmc2V0IDwgYm94LT5lbmQo
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKIAotICAgICAg
ICAgICAgICAgIGF1dG8gbmV4dFJ1biA9IElubGluZUl0ZXJhdG9yOjpuZXh0VGV4dEJveEluTG9n
aWNhbE9yZGVyKHJ1biwgb3JkZXJDYWNoZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHRPZmZz
ZXQgPT0gcnVuLT5lbmQoKSAmJiBuZXh0UnVuICYmIHJ1bi0+bGluZSgpICE9IG5leHRSdW4tPmxp
bmUoKSkKKyAgICAgICAgICAgICAgICBhdXRvIG5leHRCb3ggPSBJbmxpbmVJdGVyYXRvcjo6bmV4
dFRleHRCb3hJbkxvZ2ljYWxPcmRlcihib3gsIG9yZGVyQ2FjaGUpOworICAgICAgICAgICAgICAg
IGlmICh0ZXh0T2Zmc2V0ID09IGJveC0+ZW5kKCkgJiYgbmV4dEJveCAmJiBib3gtPmxpbmUoKSAh
PSBuZXh0Qm94LT5saW5lKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9z
aXRpb247CiAKLSAgICAgICAgICAgICAgICBydW4gPSBuZXh0UnVuOworICAgICAgICAgICAgICAg
IGJveCA9IG5leHRCb3g7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDgx
LDggKzEwODEsOCBAQCBib29sIFBvc2l0aW9uOjpyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiAgICAgaWYgKHJlbmRlcmVyID09IHBvc2l0
aW9uUmVuZGVyZXIgJiYgdGhpc1JlbmRlcmVkT2Zmc2V0ID09IHBvc2l0aW9uUmVuZGVyZWRPZmZz
ZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gcnVuMSA9IGlubGluZVJ1bkFu
ZE9mZnNldChBZmZpbml0eTo6RG93bnN0cmVhbSkucnVuOwotICAgIGF1dG8gcnVuMiA9IHBvc2l0
aW9uLmlubGluZVJ1bkFuZE9mZnNldChBZmZpbml0eTo6RG93bnN0cmVhbSkucnVuOworICAgIGF1
dG8gYm94MSA9IGlubGluZUJveEFuZE9mZnNldChBZmZpbml0eTo6RG93bnN0cmVhbSkuYm94Owor
ICAgIGF1dG8gYm94MiA9IHBvc2l0aW9uLmlubGluZUJveEFuZE9mZnNldChBZmZpbml0eTo6RG93
bnN0cmVhbSkuYm94OwogCiAgICAgTE9HKEVkaXRpbmcsICJyZW5kZXJlcjogICAgICAgICAgICAg
ICAlcFxuIiwgcmVuZGVyZXIpOwogICAgIExPRyhFZGl0aW5nLCAidGhpc1JlbmRlcmVkT2Zmc2V0
OiAgICAgICAgICVkXG4iLCB0aGlzUmVuZGVyZWRPZmZzZXQpOwpAQCAtMTA5MiwxMCArMTA5Miwx
MCBAQCBib29sIFBvc2l0aW9uOjpyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihjb25zdCBQb3Np
dGlvbiYgcG9zaXRpb24pIGNvbnN0CiAgICAgTE9HKEVkaXRpbmcsICJwb3Mgbm9kZSBtaW4vbWF4
OiAgICAgICAlZDolZFxuIiwgY2FyZXRNaW5PZmZzZXQoKnBvc2l0aW9uLmRlcHJlY2F0ZWROb2Rl
KCkpLCBjYXJldE1heE9mZnNldCgqcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpOwogICAgIExP
RyhFZGl0aW5nLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAKLSAgICBpZiAoIXJ1bjEgfHwgIXJ1bjIp
CisgICAgaWYgKCFib3gxIHx8ICFib3gyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAocnVuMS0+bGluZSgpICE9IHJ1bjItPmxpbmUoKSkKKyAgICBpZiAoYm94MS0+bGluZSgpICE9
IGJveDItPmxpbmUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAobmV4dFJlbmRl
cmVkRWRpdGFibGUoZGVwcmVjYXRlZE5vZGUoKSkgPT0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUo
KQpAQCAtMTE1MCw5ICsxMTUwLDkgQEAgUG9zaXRpb24gUG9zaXRpb246OnRyYWlsaW5nV2hpdGVz
cGFjZVBvc2l0aW9uKEFmZmluaXR5LCBib29sIGNvbnNpZGVyTm9uQ29sbGFwc2kKICAgICByZXR1
cm4geyB9OwogfQogCi1JbmxpbmVSdW5BbmRPZmZzZXQgUG9zaXRpb246OmlubGluZVJ1bkFuZE9m
ZnNldChBZmZpbml0eSBhZmZpbml0eSkgY29uc3QKK0lubGluZUJveEFuZE9mZnNldCBQb3NpdGlv
bjo6aW5saW5lQm94QW5kT2Zmc2V0KEFmZmluaXR5IGFmZmluaXR5KSBjb25zdAogewotICAgIHJl
dHVybiBpbmxpbmVSdW5BbmRPZmZzZXQoYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24oKSk7Cisg
ICAgcmV0dXJuIGlubGluZUJveEFuZE9mZnNldChhZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbigp
KTsKIH0KIAogc3RhdGljIGJvb2wgaXNOb25UZXh0TGVhZkNoaWxkKFJlbmRlck9iamVjdCYgb2Jq
ZWN0KQpAQCAtMTE3NCw4ICsxMTc0LDggQEAgc3RhdGljIElubGluZUl0ZXJhdG9yOjpUZXh0Qm94
SXRlcmF0b3Igc2VhcmNoQWhlYWRGb3JCZXR0ZXJNYXRjaChSZW5kZXJUZXh0JiByZW4KICAgICAg
ICAgaWYgKGlzTm9uVGV4dExlYWZDaGlsZCgqbmV4dCkpCiAgICAgICAgICAgICByZXR1cm4geyB9
OwogICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4oKm5leHQpKSB7Ci0gICAgICAgICAgICBpZiAo
YXV0byBbcnVuLCBvcmRlckNhY2hlXSA9IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRCb3hJbkxv
Z2ljYWxPcmRlckZvcihkb3duY2FzdDxSZW5kZXJUZXh0PigqbmV4dCkpOyBydW4pCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJ1bjsKKyAgICAgICAgICAgIGlmIChhdXRvIFtib3gsIG9yZGVyQ2Fj
aGVdID0gSW5saW5lSXRlcmF0b3I6OmZpcnN0VGV4dEJveEluTG9naWNhbE9yZGVyRm9yKGRvd25j
YXN0PFJlbmRlclRleHQ+KCpuZXh0KSk7IGJveCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYm94
OwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB7IH07CkBAIC0xMjAxLDcgKzEyMDEsNyBA
QCBzdGF0aWMgUG9zaXRpb24gdXBzdHJlYW1JZ25vcmluZ0VkaXRpbmdCb3VuZGFyaWVzKFBvc2l0
aW9uIHBvc2l0aW9uKQogICAgIHJldHVybiBwb3NpdGlvbjsKIH0KIAotSW5saW5lUnVuQW5kT2Zm
c2V0IFBvc2l0aW9uOjppbmxpbmVSdW5BbmRPZmZzZXQoQWZmaW5pdHkgYWZmaW5pdHksIFRleHRE
aXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29uc3QKK0lubGluZUJveEFuZE9mZnNldCBQb3Np
dGlvbjo6aW5saW5lQm94QW5kT2Zmc2V0KEFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9u
IHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0CiB7CiAgICAgYXV0byBjYXJldE9mZnNldCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihkZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKIApAQCAtMTIxMiwy
NyArMTIxMiwyNyBAQCBJbmxpbmVSdW5BbmRPZmZzZXQgUG9zaXRpb246OmlubGluZVJ1bkFuZE9m
ZnNldChBZmZpbml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbgogICAgIGlmICghcmVuZGVyZXIp
CiAgICAgICAgIHJldHVybiB7IHsgfSwgY2FyZXRPZmZzZXQgfTsKIAotICAgIElubGluZUl0ZXJh
dG9yOjpMZWFmQm94SXRlcmF0b3IgcnVuOworICAgIElubGluZUl0ZXJhdG9yOjpMZWFmQm94SXRl
cmF0b3IgYm94OwogCiAgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpIHsKICAgICAgICAgYXV0byYg
bGluZUJyZWFrUmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KCpyZW5kZXJlcik7
CiAgICAgICAgIGlmICghY2FyZXRPZmZzZXQpCi0gICAgICAgICAgICBydW4gPSBJbmxpbmVJdGVy
YXRvcjo6Ym94Rm9yKGxpbmVCcmVha1JlbmRlcmVyKTsKKyAgICAgICAgICAgIGJveCA9IElubGlu
ZUl0ZXJhdG9yOjpib3hGb3IobGluZUJyZWFrUmVuZGVyZXIpOwogICAgIH0gZWxzZSBpZiAoaXM8
UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSkgewogICAgICAgICBhdXRvJiB0ZXh0UmVuZGVyZXIgPSBk
b3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpOwogCi0gICAgICAgIGF1dG8gdGV4dFJ1biA9
IElubGluZUl0ZXJhdG9yOjpmaXJzdFRleHRCb3hGb3IodGV4dFJlbmRlcmVyKTsKKyAgICAgICAg
YXV0byB0ZXh0Qm94ID0gSW5saW5lSXRlcmF0b3I6OmZpcnN0VGV4dEJveEZvcih0ZXh0UmVuZGVy
ZXIpOwogICAgICAgICBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yIGNhbmRpZGF0ZTsK
IAotICAgICAgICBmb3IgKDsgdGV4dFJ1bjsgKyt0ZXh0UnVuKSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBjYXJldE1pbk9mZnNldCA9IHRleHRSdW4tPm1pbmltdW1DYXJldE9mZnNldCgpOwotICAg
ICAgICAgICAgdW5zaWduZWQgY2FyZXRNYXhPZmZzZXQgPSB0ZXh0UnVuLT5tYXhpbXVtQ2FyZXRP
ZmZzZXQoKTsKKyAgICAgICAgZm9yICg7IHRleHRCb3g7ICsrdGV4dEJveCkgeworICAgICAgICAg
ICAgdW5zaWduZWQgY2FyZXRNaW5PZmZzZXQgPSB0ZXh0Qm94LT5taW5pbXVtQ2FyZXRPZmZzZXQo
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNhcmV0TWF4T2Zmc2V0ID0gdGV4dEJveC0+bWF4aW11
bUNhcmV0T2Zmc2V0KCk7CiAKLSAgICAgICAgICAgIGlmIChjYXJldE9mZnNldCA8IGNhcmV0TWlu
T2Zmc2V0IHx8IGNhcmV0T2Zmc2V0ID4gY2FyZXRNYXhPZmZzZXQgfHwgKGNhcmV0T2Zmc2V0ID09
IGNhcmV0TWF4T2Zmc2V0ICYmIHRleHRSdW4tPmlzTGluZUJyZWFrKCkpKQorICAgICAgICAgICAg
aWYgKGNhcmV0T2Zmc2V0IDwgY2FyZXRNaW5PZmZzZXQgfHwgY2FyZXRPZmZzZXQgPiBjYXJldE1h
eE9mZnNldCB8fCAoY2FyZXRPZmZzZXQgPT0gY2FyZXRNYXhPZmZzZXQgJiYgdGV4dEJveC0+aXNM
aW5lQnJlYWsoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGlm
IChjYXJldE9mZnNldCA+IGNhcmV0TWluT2Zmc2V0ICYmIGNhcmV0T2Zmc2V0IDwgY2FyZXRNYXhP
ZmZzZXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dFJ1biwgY2FyZXRPZmZzZXQgfTsK
KyAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0Qm94LCBjYXJldE9mZnNldCB9OwogCiAgICAg
ICAgICAgICBpZiAoKGNhcmV0T2Zmc2V0ID09IGNhcmV0TWF4T2Zmc2V0KSBeIChhZmZpbml0eSA9
PSBBZmZpbml0eTo6RG93bnN0cmVhbSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjQx
LDIxICsxMjQxLDIxIEBAIElubGluZVJ1bkFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5lUnVuQW5k
T2Zmc2V0KEFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgIGlmIChjYXJldE9mZnNldCA9PSBjYXJldE1heE9mZnNldCkg
ewotICAgICAgICAgICAgICAgIGF1dG8gbmV4dE9uTGluZSA9IHRleHRSdW4tPm5leHRPbkxpbmUo
KTsKKyAgICAgICAgICAgICAgICBhdXRvIG5leHRPbkxpbmUgPSB0ZXh0Qm94LT5uZXh0T25MaW5l
KCk7CiAgICAgICAgICAgICAgICAgaWYgKG5leHRPbkxpbmUgJiYgbmV4dE9uTGluZS0+aXNMaW5l
QnJlYWsoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGNhbmRpZGF0ZSA9IHRleHRSdW47CisgICAgICAgICAgICBjYW5kaWRhdGUgPSB0
ZXh0Qm94OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNhbmRpZGF0ZSAmJiAhY2FuZGlkYXRl
LT5uZXh0VGV4dEJveCgpICYmIGFmZmluaXR5ID09IEFmZmluaXR5OjpEb3duc3RyZWFtKSB7Ci0g
ICAgICAgICAgICB0ZXh0UnVuID0gc2VhcmNoQWhlYWRGb3JCZXR0ZXJNYXRjaCh0ZXh0UmVuZGVy
ZXIpOwotICAgICAgICAgICAgaWYgKHRleHRSdW4pCi0gICAgICAgICAgICAgICAgY2FyZXRPZmZz
ZXQgPSB0ZXh0UnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKTsKKyAgICAgICAgICAgIHRleHRCb3gg
PSBzZWFyY2hBaGVhZEZvckJldHRlck1hdGNoKHRleHRSZW5kZXJlcik7CisgICAgICAgICAgICBp
ZiAodGV4dEJveCkKKyAgICAgICAgICAgICAgICBjYXJldE9mZnNldCA9IHRleHRCb3gtPm1pbmlt
dW1DYXJldE9mZnNldCgpOwogICAgICAgICB9CiAKLSAgICAgICAgcnVuID0gdGV4dFJ1biA/IHRl
eHRSdW4gOiBjYW5kaWRhdGU7CisgICAgICAgIGJveCA9IHRleHRCb3ggPyB0ZXh0Qm94IDogY2Fu
ZGlkYXRlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0
aW5nKCpkZXByZWNhdGVkTm9kZSgpKSAmJiBpczxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikg
JiYgaGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQoZG93bmNhc3Q8
UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKSkgewogICAgICAgICAgICAgLy8gVHJ5IGEgdmlz
dWFsbHkgZXF1aXZhbGVudCBwb3NpdGlvbiB3aXRoIHBvc3NpYmx5IG9wcG9zaXRlIGVkaXRhYmls
aXR5LiBUaGlzIGhlbHBzIGluIGNhc2UgfHRoaXN8IGlzIGluCkBAIC0xMjY5LDExMiArMTI2OSwx
MTIgQEAgSW5saW5lUnVuQW5kT2Zmc2V0IFBvc2l0aW9uOjppbmxpbmVSdW5BbmRPZmZzZXQoQWZm
aW5pdHkgYWZmaW5pdHksIFRleHREaXJlY3Rpb24KICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHsgeyB9LCBjYXJldE9mZnNldCB9OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1
cm4gZXF1aXZhbGVudC5pbmxpbmVSdW5BbmRPZmZzZXQoQWZmaW5pdHk6OlVwc3RyZWFtLCBwcmlt
YXJ5RGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBlcXVpdmFsZW50LmlubGluZUJveEFu
ZE9mZnNldChBZmZpbml0eTo6VXBzdHJlYW0sIHByaW1hcnlEaXJlY3Rpb24pOwogICAgICAgICB9
CiAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikpIHsKLSAgICAgICAgICAgIHJ1
biA9IElubGluZUl0ZXJhdG9yOjpib3hGb3IoZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIp
KTsKLSAgICAgICAgICAgIGlmIChydW4gJiYgY2FyZXRPZmZzZXQgPiBydW4tPm1pbmltdW1DYXJl
dE9mZnNldCgpICYmIGNhcmV0T2Zmc2V0IDwgcnVuLT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4geyBydW4sIGNhcmV0T2Zmc2V0IH07CisgICAgICAgICAgICBi
b3ggPSBJbmxpbmVJdGVyYXRvcjo6Ym94Rm9yKGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVy
KSk7CisgICAgICAgICAgICBpZiAoYm94ICYmIGNhcmV0T2Zmc2V0ID4gYm94LT5taW5pbXVtQ2Fy
ZXRPZmZzZXQoKSAmJiBjYXJldE9mZnNldCA8IGJveC0+bWF4aW11bUNhcmV0T2Zmc2V0KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgYm94LCBjYXJldE9mZnNldCB9OwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKCFydW4pCisgICAgaWYgKCFib3gpCiAgICAgICAgIHJldHVybiB7IHsg
fSwgY2FyZXRPZmZzZXQgfTsKIAotICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwgPSBydW4tPmJpZGlM
ZXZlbCgpOworICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOwogCi0g
ICAgaWYgKHJ1bi0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikgewotICAgICAgICBp
ZiAoY2FyZXRPZmZzZXQgPT0gcnVuLT5yaWdodG1vc3RDYXJldE9mZnNldCgpKSB7Ci0gICAgICAg
ICAgICBhdXRvIG5leHRSdW4gPSBydW4tPm5leHRPbkxpbmUoKTsKLSAgICAgICAgICAgIGlmICgh
bmV4dFJ1biB8fCBuZXh0UnVuLT5iaWRpTGV2ZWwoKSA+PSBsZXZlbCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4geyBydW4sIGNhcmV0T2Zmc2V0IH07CisgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkg
PT0gcHJpbWFyeURpcmVjdGlvbikgeworICAgICAgICBpZiAoY2FyZXRPZmZzZXQgPT0gYm94LT5y
aWdodG1vc3RDYXJldE9mZnNldCgpKSB7CisgICAgICAgICAgICBhdXRvIG5leHRCb3ggPSBib3gt
Pm5leHRPbkxpbmUoKTsKKyAgICAgICAgICAgIGlmICghbmV4dEJveCB8fCBuZXh0Qm94LT5iaWRp
TGV2ZWwoKSA+PSBsZXZlbCkKKyAgICAgICAgICAgICAgICByZXR1cm4geyBib3gsIGNhcmV0T2Zm
c2V0IH07CiAKLSAgICAgICAgICAgIGxldmVsID0gbmV4dFJ1bi0+YmlkaUxldmVsKCk7CisgICAg
ICAgICAgICBsZXZlbCA9IG5leHRCb3gtPmJpZGlMZXZlbCgpOwogCi0gICAgICAgICAgICBhdXRv
IHByZXZpb3VzUnVuID0gcnVuLT5wcmV2aW91c09uTGluZSgpOworICAgICAgICAgICAgYXV0byBw
cmV2aW91c1J1biA9IGJveC0+cHJldmlvdXNPbkxpbmUoKTsKICAgICAgICAgICAgIGZvciAoOyBw
cmV2aW91c1J1bjsgcHJldmlvdXNSdW4udHJhdmVyc2VQcmV2aW91c09uTGluZSgpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHByZXZpb3VzUnVuLT5iaWRpTGV2ZWwoKSA8PSBsZXZlbCkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChw
cmV2aW91c1J1biAmJiBwcmV2aW91c1J1bi0+YmlkaUxldmVsKCkgPT0gbGV2ZWwpIC8vIEZvciBl
eGFtcGxlLCBhYmMgRkVEIDEyMyBeIENCQQotICAgICAgICAgICAgICAgIHJldHVybiB7IHJ1biwg
Y2FyZXRPZmZzZXQgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBib3gsIGNhcmV0T2Zmc2V0
IH07CiAKICAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLCBhYmMgMTIzIF4gQ0JBCi0gICAgICAg
ICAgICBmb3IgKDsgbmV4dFJ1bjsgbmV4dFJ1bi50cmF2ZXJzZU5leHRPbkxpbmUoKSkgewotICAg
ICAgICAgICAgICAgIGlmIChuZXh0UnVuLT5iaWRpTGV2ZWwoKSA8IGxldmVsKQorICAgICAgICAg
ICAgZm9yICg7IG5leHRCb3g7IG5leHRCb3gudHJhdmVyc2VOZXh0T25MaW5lKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobmV4dEJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcnVuID0gbmV4dFJ1bjsKKyAgICAgICAg
ICAgICAgICBib3ggPSBuZXh0Qm94OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FyZXRP
ZmZzZXQgPSBydW4tPnJpZ2h0bW9zdENhcmV0T2Zmc2V0KCk7CisgICAgICAgICAgICBjYXJldE9m
ZnNldCA9IGJveC0+cmlnaHRtb3N0Q2FyZXRPZmZzZXQoKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGF1dG8gcHJldmlvdXNSdW4gPSBydW4tPnByZXZpb3VzT25MaW5lKCk7CisgICAg
ICAgICAgICBhdXRvIHByZXZpb3VzUnVuID0gYm94LT5wcmV2aW91c09uTGluZSgpOwogICAgICAg
ICAgICAgaWYgKCFwcmV2aW91c1J1biB8fCBwcmV2aW91c1J1bi0+YmlkaUxldmVsKCkgPj0gbGV2
ZWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgcnVuLCBjYXJldE9mZnNldCB9OworICAgICAg
ICAgICAgICAgIHJldHVybiB7IGJveCwgY2FyZXRPZmZzZXQgfTsKIAogICAgICAgICAgICAgbGV2
ZWwgPSBwcmV2aW91c1J1bi0+YmlkaUxldmVsKCk7CiAKLSAgICAgICAgICAgIGF1dG8gbmV4dFJ1
biA9IHJ1bi0+bmV4dE9uTGluZSgpOwotICAgICAgICAgICAgZm9yICg7IG5leHRSdW47IG5leHRS
dW4udHJhdmVyc2VOZXh0T25MaW5lKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobmV4dFJ1bi0+
YmlkaUxldmVsKCkgPD0gbGV2ZWwpCisgICAgICAgICAgICBhdXRvIG5leHRCb3ggPSBib3gtPm5l
eHRPbkxpbmUoKTsKKyAgICAgICAgICAgIGZvciAoOyBuZXh0Qm94OyBuZXh0Qm94LnRyYXZlcnNl
TmV4dE9uTGluZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5leHRCb3gtPmJpZGlMZXZlbCgp
IDw9IGxldmVsKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKG5leHRSdW4gJiYgbmV4dFJ1bi0+YmlkaUxldmVsKCkgPT0gbGV2ZWwp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgcnVuLCBjYXJldE9mZnNldCB9OworICAgICAgICAg
ICAgaWYgKG5leHRCb3ggJiYgbmV4dEJveC0+YmlkaUxldmVsKCkgPT0gbGV2ZWwpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgYm94LCBjYXJldE9mZnNldCB9OwogCiAgICAgICAgICAgICBmb3Ig
KDsgcHJldmlvdXNSdW47IHByZXZpb3VzUnVuLnRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKSkgewog
ICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1J1bi0+YmlkaUxldmVsKCkgPCBsZXZlbCkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcnVuID0gcHJldmlvdXNS
dW47CisgICAgICAgICAgICAgICAgYm94ID0gcHJldmlvdXNSdW47CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGNhcmV0T2Zmc2V0ID0gcnVuLT5sZWZ0bW9zdENhcmV0T2Zmc2V0KCk7Cisg
ICAgICAgICAgICBjYXJldE9mZnNldCA9IGJveC0+bGVmdG1vc3RDYXJldE9mZnNldCgpOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB7IHJ1biwgY2FyZXRPZmZzZXQgfTsKKyAgICAgICAgcmV0
dXJuIHsgYm94LCBjYXJldE9mZnNldCB9OwogICAgIH0KIAotICAgIGlmIChjYXJldE9mZnNldCA9
PSBydW4tPmxlZnRtb3N0Q2FyZXRPZmZzZXQoKSkgewotICAgICAgICBhdXRvIHByZXZpb3VzUnVu
ID0gcnVuLT5wcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CisgICAgaWYgKGNhcmV0
T2Zmc2V0ID09IGJveC0+bGVmdG1vc3RDYXJldE9mZnNldCgpKSB7CisgICAgICAgIGF1dG8gcHJl
dmlvdXNSdW4gPSBib3gtPnByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKICAgICAg
ICAgaWYgKCFwcmV2aW91c1J1biB8fCBwcmV2aW91c1J1bi0+YmlkaUxldmVsKCkgPCBsZXZlbCkg
ewotICAgICAgICAgICAgLy8gTGVmdCBlZGdlIG9mIGEgc2Vjb25kYXJ5IHJ1bi4gU2V0IHRvIHRo
ZSByaWdodCBlZGdlIG9mIHRoZSBlbnRpcmUgcnVuLgotICAgICAgICAgICAgZm9yIChhdXRvIG5l
eHRSdW4gPSBydW4tPm5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOyBuZXh0UnVuOyBuZXh0
UnVuLnRyYXZlcnNlTmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobmV4dFJ1bi0+YmlkaUxldmVsKCkgPCBsZXZlbCkKKyAgICAgICAgICAgIC8vIExl
ZnQgZWRnZSBvZiBhIHNlY29uZGFyeSBib3guIFNldCB0byB0aGUgcmlnaHQgZWRnZSBvZiB0aGUg
ZW50aXJlIGJveC4KKyAgICAgICAgICAgIGZvciAoYXV0byBuZXh0Qm94ID0gYm94LT5uZXh0T25M
aW5lSWdub3JpbmdMaW5lQnJlYWsoKTsgbmV4dEJveDsgbmV4dEJveC50cmF2ZXJzZU5leHRPbkxp
bmVJZ25vcmluZ0xpbmVCcmVhaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5leHRCb3gtPmJp
ZGlMZXZlbCgpIDwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIHJ1biA9IG5leHRSdW47CisgICAgICAgICAgICAgICAgYm94ID0gbmV4dEJveDsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhcmV0T2Zmc2V0ID0gcnVuLT5yaWdodG1vc3RDYXJl
dE9mZnNldCgpOworICAgICAgICAgICAgY2FyZXRPZmZzZXQgPSBib3gtPnJpZ2h0bW9zdENhcmV0
T2Zmc2V0KCk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNSdW4tPmJpZGlMZXZlbCgpID4g
bGV2ZWwpIHsKLSAgICAgICAgICAgIC8vIFJpZ2h0IGVkZ2Ugb2YgYSAidGVydGlhcnkiIHJ1bi4g
U2V0IHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhhdCBydW4uCi0gICAgICAgICAgICBmb3IgKGF1dG8g
dGVydGlhcnlSdW4gPSBydW4tPnByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsgdGVy
dGlhcnlSdW47IHRlcnRpYXJ5UnVuLnRyYXZlcnNlUHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVC
cmVhaygpKSB7CisgICAgICAgICAgICAvLyBSaWdodCBlZGdlIG9mIGEgInRlcnRpYXJ5IiBib3gu
IFNldCB0byB0aGUgbGVmdCBlZGdlIG9mIHRoYXQgYm94LgorICAgICAgICAgICAgZm9yIChhdXRv
IHRlcnRpYXJ5UnVuID0gYm94LT5wcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7IHRl
cnRpYXJ5UnVuOyB0ZXJ0aWFyeVJ1bi50cmF2ZXJzZVByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5l
QnJlYWsoKSkgewogICAgICAgICAgICAgICAgIGlmICh0ZXJ0aWFyeVJ1bi0+YmlkaUxldmVsKCkg
PD0gbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHJ1
biA9IHRlcnRpYXJ5UnVuOworICAgICAgICAgICAgICAgIGJveCA9IHRlcnRpYXJ5UnVuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2FyZXRPZmZzZXQgPSBydW4tPmxlZnRtb3N0Q2FyZXRP
ZmZzZXQoKTsKKyAgICAgICAgICAgIGNhcmV0T2Zmc2V0ID0gYm94LT5sZWZ0bW9zdENhcmV0T2Zm
c2V0KCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBhdXRvIG5leHRSdW4gPSBy
dW4tPm5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOwotICAgICAgICBpZiAoIW5leHRSdW4g
fHwgbmV4dFJ1bi0+YmlkaUxldmVsKCkgPCBsZXZlbCkgewotICAgICAgICAgICAgLy8gUmlnaHQg
ZWRnZSBvZiBhIHNlY29uZGFyeSBydW4uIFNldCB0byB0aGUgbGVmdCBlZGdlIG9mIHRoZSBlbnRp
cmUgcnVuLgotICAgICAgICAgICAgZm9yIChhdXRvIHByZXZpb3VzUnVuID0gcnVuLT5wcmV2aW91
c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7IHByZXZpb3VzUnVuOyBwcmV2aW91c1J1bi50cmF2
ZXJzZVByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSkgeworICAgICAgICBhdXRvIG5l
eHRCb3ggPSBib3gtPm5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOworICAgICAgICBpZiAo
IW5leHRCb3ggfHwgbmV4dEJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkgeworICAgICAgICAgICAg
Ly8gUmlnaHQgZWRnZSBvZiBhIHNlY29uZGFyeSBib3guIFNldCB0byB0aGUgbGVmdCBlZGdlIG9m
IHRoZSBlbnRpcmUgYm94LgorICAgICAgICAgICAgZm9yIChhdXRvIHByZXZpb3VzUnVuID0gYm94
LT5wcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7IHByZXZpb3VzUnVuOyBwcmV2aW91
c1J1bi50cmF2ZXJzZVByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSkgewogICAgICAg
ICAgICAgICAgIGlmIChwcmV2aW91c1J1bi0+YmlkaUxldmVsKCkgPCBsZXZlbCkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcnVuID0gcHJldmlvdXNSdW47Cisg
ICAgICAgICAgICAgICAgYm94ID0gcHJldmlvdXNSdW47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXJldE9mZnNldCA9IHJ1bi0+bGVmdG1vc3RDYXJldE9mZnNldCgpOwotICAgICAgICB9
IGVsc2UgaWYgKG5leHRSdW4tPmJpZGlMZXZlbCgpID4gbGV2ZWwpIHsKLSAgICAgICAgICAgIC8v
IExlZnQgZWRnZSBvZiBhICJ0ZXJ0aWFyeSIgcnVuLiBTZXQgdG8gdGhlIHJpZ2h0IGVkZ2Ugb2Yg
dGhhdCBydW4uCi0gICAgICAgICAgICBmb3IgKGF1dG8gdGVydGlhcnlSdW4gPSBydW4tPm5leHRP
bkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOyB0ZXJ0aWFyeVJ1bjsgdGVydGlhcnlSdW4udHJhdmVy
c2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgY2FyZXRPZmZz
ZXQgPSBib3gtPmxlZnRtb3N0Q2FyZXRPZmZzZXQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChuZXh0
Qm94LT5iaWRpTGV2ZWwoKSA+IGxldmVsKSB7CisgICAgICAgICAgICAvLyBMZWZ0IGVkZ2Ugb2Yg
YSAidGVydGlhcnkiIGJveC4gU2V0IHRvIHRoZSByaWdodCBlZGdlIG9mIHRoYXQgYm94LgorICAg
ICAgICAgICAgZm9yIChhdXRvIHRlcnRpYXJ5UnVuID0gYm94LT5uZXh0T25MaW5lSWdub3JpbmdM
aW5lQnJlYWsoKTsgdGVydGlhcnlSdW47IHRlcnRpYXJ5UnVuLnRyYXZlcnNlTmV4dE9uTGluZUln
bm9yaW5nTGluZUJyZWFrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGVydGlhcnlSdW4tPmJp
ZGlMZXZlbCgpIDw9IGxldmVsKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBydW4gPSB0ZXJ0aWFyeVJ1bjsKKyAgICAgICAgICAgICAgICBib3ggPSB0ZXJ0aWFy
eVJ1bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhcmV0T2Zmc2V0ID0gcnVuLT5yaWdo
dG1vc3RDYXJldE9mZnNldCgpOworICAgICAgICAgICAgY2FyZXRPZmZzZXQgPSBib3gtPnJpZ2h0
bW9zdENhcmV0T2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4geyBydW4s
IGNhcmV0T2Zmc2V0IH07CisgICAgcmV0dXJuIHsgYm94LCBjYXJldE9mZnNldCB9OwogfQogCiBU
ZXh0RGlyZWN0aW9uIFBvc2l0aW9uOjpwcmltYXJ5RGlyZWN0aW9uKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmgKaW5kZXggOWM5OTRjMDk3OGM2YTQ4N2Q3ZTIyYmEwYmQ2ZTBhNDg4YzU0YmMxZS4u
M2NhNTI1YjFiYjE4YmFjYTRmMGE1NDUyNjE5MmY5NjQzODBkNWMyZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgZW51bSBQb3NpdGlvbk1vdmVUeXBlIHsKICAgICBCYWNr
d2FyZERlbGV0aW9uIC8vIFN1YmplY3QgdG8gcGxhdGZvcm0gY29udmVudGlvbnMuCiB9OwogCi1z
dHJ1Y3QgSW5saW5lUnVuQW5kT2Zmc2V0Oworc3RydWN0IElubGluZUJveEFuZE9mZnNldDsKIAog
Y2xhc3MgUG9zaXRpb24gewogcHVibGljOgpAQCAtMTcwLDggKzE3MCw4IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzUmVuZGVyZWRDaGFyYWN0ZXIoKSBjb25zdDsKICAgICBib29sIHJlbmRlcnNJbkRp
ZmZlcmVudFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJikgY29uc3Q7CiAKLSAgICBJbmxpbmVSdW5B
bmRPZmZzZXQgaW5saW5lUnVuQW5kT2Zmc2V0KEFmZmluaXR5KSBjb25zdDsKLSAgICBJbmxpbmVS
dW5BbmRPZmZzZXQgaW5saW5lUnVuQW5kT2Zmc2V0KEFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHBy
aW1hcnlEaXJlY3Rpb24pIGNvbnN0OworICAgIElubGluZUJveEFuZE9mZnNldCBpbmxpbmVCb3hB
bmRPZmZzZXQoQWZmaW5pdHkpIGNvbnN0OworICAgIElubGluZUJveEFuZE9mZnNldCBpbmxpbmVC
b3hBbmRPZmZzZXQoQWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29u
c3Q7CiAKICAgICBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24oKSBjb25zdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBhZGFiOWQxYThjYzdj
MDlkY2Y5ZDY3ODY4ZTNmZTA4OTcyMzRkYmZmLi5mNTFkN2E0N2YwNTBjOTBiMTljNjBjYTAyYzhk
YzQwNjRhNmRmNjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cApAQCAtNjc1LDEwICs2NzUsMTAgQEAgVGV4dERpcmVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6ZGly
ZWN0aW9uT2ZTZWxlY3Rpb24oKQogICAgIC8vIGNhbiBjYXVzZSBsYXlvdXQsIHdoaWNoIGhhcyB0
aGUgcG90ZW50aWFsIHRvIGludmFsaWRhdGUgbGluZWJveGVzLgogICAgIGF1dG8gc3RhcnRQb3Np
dGlvbiA9IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAgIGF1dG8gZW5kUG9zaXRpb24g
PSBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0gICAgYXV0byBzdGFydFJ1biA9IHN0YXJ0UG9z
aXRpb24uaW5saW5lUnVuQW5kT2Zmc2V0KCkucnVuOwotICAgIGF1dG8gZW5kUnVuID0gZW5kUG9z
aXRpb24uaW5saW5lUnVuQW5kT2Zmc2V0KCkucnVuOwotICAgIGlmIChzdGFydFJ1biAmJiBlbmRS
dW4gJiYgc3RhcnRSdW4tPmRpcmVjdGlvbigpID09IGVuZFJ1bi0+ZGlyZWN0aW9uKCkpCi0gICAg
ICAgIHJldHVybiBzdGFydFJ1bi0+ZGlyZWN0aW9uKCk7CisgICAgYXV0byBzdGFydEJveCA9IHN0
YXJ0UG9zaXRpb24uaW5saW5lQm94QW5kT2Zmc2V0KCkuYm94OworICAgIGF1dG8gZW5kQm94ID0g
ZW5kUG9zaXRpb24uaW5saW5lQm94QW5kT2Zmc2V0KCkuYm94OworICAgIGlmIChzdGFydEJveCAm
JiBlbmRCb3ggJiYgc3RhcnRCb3gtPmRpcmVjdGlvbigpID09IGVuZEJveC0+ZGlyZWN0aW9uKCkp
CisgICAgICAgIHJldHVybiBzdGFydEJveC0+ZGlyZWN0aW9uKCk7CiAgICAgcmV0dXJuIGRpcmVj
dGlvbk9mRW5jbG9zaW5nQmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbmxpbmVSdW5BbmRPZmZzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5s
aW5lUnVuQW5kT2Zmc2V0LmgKaW5kZXggNzU3YzZkNThjODJjODFkNWY0MjBlNTk4YWIzYmFiNzYw
MjI2ODE2NS4uZGQyZmNmN2RjYWM1MWI5ODg2YzFiY2JhNzYyMzViMjRkNWQyNGYxNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmxpbmVSdW5BbmRPZmZzZXQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lubGluZVJ1bkFuZE9mZnNldC5oCkBAIC0yOSw4ICsyOSw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IElubGluZVJ1bkFuZE9mZnNldCB7
Ci0gICAgSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBydW4geyB9Oworc3RydWN0IElu
bGluZUJveEFuZE9mZnNldCB7CisgICAgSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBi
b3ggeyB9OwogICAgIHVuc2lnbmVkIG9mZnNldCB7IDAgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwCmluZGV4IDJkODNmOWNmZGM4NGNhMzM5NTcx
YzJiODFkODEwZjAzMWEyNjA5MWYuLjY4NjY3ZGVhMjYzMzNlMWQzZmMzYzI5MTMyMDVmYjllNDll
NWFhZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcApA
QCAtNjksOSArNjksOSBAQCBSZW5kZXJlZFBvc2l0aW9uOjpSZW5kZXJlZFBvc2l0aW9uKCkKIHsK
IH0KIAotUmVuZGVyZWRQb3NpdGlvbjo6UmVuZGVyZWRQb3NpdGlvbihjb25zdCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBJbmxpbmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9yIHJ1biwgdW5zaWdu
ZWQgb2Zmc2V0KQorUmVuZGVyZWRQb3NpdGlvbjo6UmVuZGVyZWRQb3NpdGlvbihjb25zdCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBJbmxpbmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9yIGJveCwg
dW5zaWduZWQgb2Zmc2V0KQogICAgIDogbV9yZW5kZXJlcihyZW5kZXJlcikKLSAgICAsIG1fcnVu
KHJ1bikKKyAgICAsIG1fYm94KGJveCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKIHsKIH0KQEAg
LTg2LDExICs4NiwxMSBAQCBSZW5kZXJlZFBvc2l0aW9uOjpSZW5kZXJlZFBvc2l0aW9uKGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbiwgQWZmaW5pdHkgYWZmaW5pdHkpCiAgICAgaWYgKHBvc2l0aW9u
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJ1bkFuZE9mZnNldCA9IHBv
c2l0aW9uLmlubGluZVJ1bkFuZE9mZnNldChhZmZpbml0eSk7Ci0gICAgbV9ydW4gPSBydW5BbmRP
ZmZzZXQucnVuOwotICAgIG1fb2Zmc2V0ID0gcnVuQW5kT2Zmc2V0Lm9mZnNldDsKLSAgICBpZiAo
bV9ydW4pCi0gICAgICAgIG1fcmVuZGVyZXIgPSAmbV9ydW4tPnJlbmRlcmVyKCk7CisgICAgYXV0
byBib3hBbmRPZmZzZXQgPSBwb3NpdGlvbi5pbmxpbmVCb3hBbmRPZmZzZXQoYWZmaW5pdHkpOwor
ICAgIG1fYm94ID0gYm94QW5kT2Zmc2V0LmJveDsKKyAgICBtX29mZnNldCA9IGJveEFuZE9mZnNl
dC5vZmZzZXQ7CisgICAgaWYgKG1fYm94KQorICAgICAgICBtX3JlbmRlcmVyID0gJm1fYm94LT5y
ZW5kZXJlcigpOwogICAgIGVsc2UKICAgICAgICAgbV9yZW5kZXJlciA9IHJlbmRlcmVyRnJvbVBv
c2l0aW9uKHBvc2l0aW9uKTsKIH0KQEAgLTk4LDQ4ICs5OCw0OCBAQCBSZW5kZXJlZFBvc2l0aW9u
OjpSZW5kZXJlZFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgQWZmaW5pdHkgYWZm
aW5pdHkpCiBJbmxpbmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9yIFJlbmRlcmVkUG9zaXRpb246
OnByZXZpb3VzTGVhZk9uTGluZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ByZXZpb3VzTGVhZk9u
TGluZSkKLSAgICAgICAgbV9wcmV2aW91c0xlYWZPbkxpbmUgPSBtX3J1bi0+cHJldmlvdXNPbkxp
bmVJZ25vcmluZ0xpbmVCcmVhaygpOworICAgICAgICBtX3ByZXZpb3VzTGVhZk9uTGluZSA9IG1f
Ym94LT5wcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CiAgICAgcmV0dXJuICptX3By
ZXZpb3VzTGVhZk9uTGluZTsKIH0KIAogSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBS
ZW5kZXJlZFBvc2l0aW9uOjpuZXh0TGVhZk9uTGluZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX25l
eHRMZWFmT25MaW5lKQotICAgICAgICBtX25leHRMZWFmT25MaW5lID0gbV9ydW4tPm5leHRPbkxp
bmVJZ25vcmluZ0xpbmVCcmVhaygpOworICAgICAgICBtX25leHRMZWFmT25MaW5lID0gbV9ib3gt
Pm5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOwogICAgIHJldHVybiAqbV9uZXh0TGVhZk9u
TGluZTsKIH0KIAogYm9vbCBSZW5kZXJlZFBvc2l0aW9uOjppc0VxdWl2YWxlbnQoY29uc3QgUmVu
ZGVyZWRQb3NpdGlvbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtX3JlbmRlcmVyID09
IG90aGVyLm1fcmVuZGVyZXIgJiYgbV9ydW4gPT0gb3RoZXIubV9ydW4gJiYgbV9vZmZzZXQgPT0g
b3RoZXIubV9vZmZzZXQpCi0gICAgICAgIHx8IChhdExlZnRtb3N0T2Zmc2V0SW5Cb3goKSAmJiBv
dGhlci5hdFJpZ2h0bW9zdE9mZnNldEluQm94KCkgJiYgcHJldmlvdXNMZWFmT25MaW5lKCkgPT0g
b3RoZXIubV9ydW4pCi0gICAgICAgIHx8IChhdFJpZ2h0bW9zdE9mZnNldEluQm94KCkgJiYgb3Ro
ZXIuYXRMZWZ0bW9zdE9mZnNldEluQm94KCkgJiYgbmV4dExlYWZPbkxpbmUoKSA9PSBvdGhlci5t
X3J1bik7CisgICAgcmV0dXJuIChtX3JlbmRlcmVyID09IG90aGVyLm1fcmVuZGVyZXIgJiYgbV9i
b3ggPT0gb3RoZXIubV9ib3ggJiYgbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQpCisgICAgICAg
IHx8IChhdExlZnRtb3N0T2Zmc2V0SW5Cb3goKSAmJiBvdGhlci5hdFJpZ2h0bW9zdE9mZnNldElu
Qm94KCkgJiYgcHJldmlvdXNMZWFmT25MaW5lKCkgPT0gb3RoZXIubV9ib3gpCisgICAgICAgIHx8
IChhdFJpZ2h0bW9zdE9mZnNldEluQm94KCkgJiYgb3RoZXIuYXRMZWZ0bW9zdE9mZnNldEluQm94
KCkgJiYgbmV4dExlYWZPbkxpbmUoKSA9PSBvdGhlci5tX2JveCk7CiB9CiAKIHVuc2lnbmVkIGNo
YXIgUmVuZGVyZWRQb3NpdGlvbjo6YmlkaUxldmVsT25MZWZ0KCkgY29uc3QKIHsKLSAgICBhdXRv
IHJ1biA9IGF0TGVmdG1vc3RPZmZzZXRJbkJveCgpID8gcHJldmlvdXNMZWFmT25MaW5lKCkgOiBt
X3J1bjsKLSAgICByZXR1cm4gcnVuID8gcnVuLT5iaWRpTGV2ZWwoKSA6IDA7CisgICAgYXV0byBi
b3ggPSBhdExlZnRtb3N0T2Zmc2V0SW5Cb3goKSA/IHByZXZpb3VzTGVhZk9uTGluZSgpIDogbV9i
b3g7CisgICAgcmV0dXJuIGJveCA/IGJveC0+YmlkaUxldmVsKCkgOiAwOwogfQogCiB1bnNpZ25l
ZCBjaGFyIFJlbmRlcmVkUG9zaXRpb246OmJpZGlMZXZlbE9uUmlnaHQoKSBjb25zdAogewotICAg
IGF1dG8gcnVuID0gYXRSaWdodG1vc3RPZmZzZXRJbkJveCgpID8gbmV4dExlYWZPbkxpbmUoKSA6
IG1fcnVuOwotICAgIHJldHVybiBydW4gPyBydW4tPmJpZGlMZXZlbCgpIDogMDsKKyAgICBhdXRv
IGJveCA9IGF0UmlnaHRtb3N0T2Zmc2V0SW5Cb3goKSA/IG5leHRMZWFmT25MaW5lKCkgOiBtX2Jv
eDsKKyAgICByZXR1cm4gYm94ID8gYm94LT5iaWRpTGV2ZWwoKSA6IDA7CiB9CiAKIFJlbmRlcmVk
UG9zaXRpb24gUmVuZGVyZWRQb3NpdGlvbjo6bGVmdEJvdW5kYXJ5T2ZCaWRpUnVuKHVuc2lnbmVk
IGNoYXIgYmlkaUxldmVsT2ZSdW4pCiB7Ci0gICAgaWYgKCFtX3J1biB8fCBiaWRpTGV2ZWxPZlJ1
biA+IG1fcnVuLT5iaWRpTGV2ZWwoKSkKKyAgICBpZiAoIW1fYm94IHx8IGJpZGlMZXZlbE9mUnVu
ID4gbV9ib3gtPmJpZGlMZXZlbCgpKQogICAgICAgICByZXR1cm4gUmVuZGVyZWRQb3NpdGlvbigp
OwogCi0gICAgYXV0byBydW4gPSBtX3J1bjsKKyAgICBhdXRvIGJveCA9IG1fYm94OwogICAgIGRv
IHsKLSAgICAgICAgYXV0byBwcmV2ID0gcnVuLT5wcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJy
ZWFrKCk7CisgICAgICAgIGF1dG8gcHJldiA9IGJveC0+cHJldmlvdXNPbkxpbmVJZ25vcmluZ0xp
bmVCcmVhaygpOwogICAgICAgICBpZiAoIXByZXYgfHwgcHJldi0+YmlkaUxldmVsKCkgPCBiaWRp
TGV2ZWxPZlJ1bikKLSAgICAgICAgICAgIHJldHVybiBSZW5kZXJlZFBvc2l0aW9uKCZydW4tPnJl
bmRlcmVyKCksIHJ1biwgcnVuLT5sZWZ0bW9zdENhcmV0T2Zmc2V0KCkpOwotICAgICAgICBydW4g
PSBwcmV2OwotICAgIH0gd2hpbGUgKHJ1bik7CisgICAgICAgICAgICByZXR1cm4gUmVuZGVyZWRQ
b3NpdGlvbigmYm94LT5yZW5kZXJlcigpLCBib3gsIGJveC0+bGVmdG1vc3RDYXJldE9mZnNldCgp
KTsKKyAgICAgICAgYm94ID0gcHJldjsKKyAgICB9IHdoaWxlIChib3gpOwogCiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFJlbmRlcmVkUG9zaXRpb24oKTsKQEAgLTE0Nywx
NiArMTQ3LDE2IEBAIFJlbmRlcmVkUG9zaXRpb24gUmVuZGVyZWRQb3NpdGlvbjo6bGVmdEJvdW5k
YXJ5T2ZCaWRpUnVuKHVuc2lnbmVkIGNoYXIgYmlkaUxldmVsCiAKIFJlbmRlcmVkUG9zaXRpb24g
UmVuZGVyZWRQb3NpdGlvbjo6cmlnaHRCb3VuZGFyeU9mQmlkaVJ1bih1bnNpZ25lZCBjaGFyIGJp
ZGlMZXZlbE9mUnVuKQogewotICAgIGlmICghbV9ydW4gfHwgYmlkaUxldmVsT2ZSdW4gPiBtX3J1
bi0+YmlkaUxldmVsKCkpCisgICAgaWYgKCFtX2JveCB8fCBiaWRpTGV2ZWxPZlJ1biA+IG1fYm94
LT5iaWRpTGV2ZWwoKSkKICAgICAgICAgcmV0dXJuIFJlbmRlcmVkUG9zaXRpb24oKTsKIAotICAg
IGF1dG8gcnVuID0gbV9ydW47CisgICAgYXV0byBib3ggPSBtX2JveDsKICAgICBkbyB7Ci0gICAg
ICAgIGF1dG8gbmV4dCA9IHJ1bi0+bmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CisgICAg
ICAgIGF1dG8gbmV4dCA9IGJveC0+bmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CiAgICAg
ICAgIGlmICghbmV4dCB8fCBuZXh0LT5iaWRpTGV2ZWwoKSA8IGJpZGlMZXZlbE9mUnVuKQotICAg
ICAgICAgICAgcmV0dXJuIFJlbmRlcmVkUG9zaXRpb24oJnJ1bi0+cmVuZGVyZXIoKSwgcnVuLCBy
dW4tPnJpZ2h0bW9zdENhcmV0T2Zmc2V0KCkpOwotICAgICAgICBydW4gPSBuZXh0OwotICAgIH0g
d2hpbGUgKHJ1bik7CisgICAgICAgICAgICByZXR1cm4gUmVuZGVyZWRQb3NpdGlvbigmYm94LT5y
ZW5kZXJlcigpLCBib3gsIGJveC0+cmlnaHRtb3N0Q2FyZXRPZmZzZXQoKSk7CisgICAgICAgIGJv
eCA9IG5leHQ7CisgICAgfSB3aGlsZSAoYm94KTsKIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIHJldHVybiBSZW5kZXJlZFBvc2l0aW9uKCk7CkBAIC0xNjQsMTkgKzE2NCwxOSBAQCBS
ZW5kZXJlZFBvc2l0aW9uIFJlbmRlcmVkUG9zaXRpb246OnJpZ2h0Qm91bmRhcnlPZkJpZGlSdW4o
dW5zaWduZWQgY2hhciBiaWRpTGV2ZQogCiBib29sIFJlbmRlcmVkUG9zaXRpb246OmF0TGVmdEJv
dW5kYXJ5T2ZCaWRpUnVuKFNob3VsZE1hdGNoQmlkaUxldmVsIHNob3VsZE1hdGNoQmlkaUxldmVs
LCB1bnNpZ25lZCBjaGFyIGJpZGlMZXZlbE9mUnVuKSBjb25zdAogewotICAgIGlmICghbV9ydW4p
CisgICAgaWYgKCFtX2JveCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGF0TGVm
dG1vc3RPZmZzZXRJbkJveCgpKSB7CiAgICAgICAgIGlmIChzaG91bGRNYXRjaEJpZGlMZXZlbCA9
PSBJZ25vcmVCaWRpTGV2ZWwpCi0gICAgICAgICAgICByZXR1cm4gIXByZXZpb3VzTGVhZk9uTGlu
ZSgpIHx8IHByZXZpb3VzTGVhZk9uTGluZSgpLT5iaWRpTGV2ZWwoKSA8IG1fcnVuLT5iaWRpTGV2
ZWwoKTsKLSAgICAgICAgcmV0dXJuIG1fcnVuLT5iaWRpTGV2ZWwoKSA+PSBiaWRpTGV2ZWxPZlJ1
biAmJiAoIXByZXZpb3VzTGVhZk9uTGluZSgpIHx8IHByZXZpb3VzTGVhZk9uTGluZSgpLT5iaWRp
TGV2ZWwoKSA8IGJpZGlMZXZlbE9mUnVuKTsKKyAgICAgICAgICAgIHJldHVybiAhcHJldmlvdXNM
ZWFmT25MaW5lKCkgfHwgcHJldmlvdXNMZWFmT25MaW5lKCktPmJpZGlMZXZlbCgpIDwgbV9ib3gt
PmJpZGlMZXZlbCgpOworICAgICAgICByZXR1cm4gbV9ib3gtPmJpZGlMZXZlbCgpID49IGJpZGlM
ZXZlbE9mUnVuICYmICghcHJldmlvdXNMZWFmT25MaW5lKCkgfHwgcHJldmlvdXNMZWFmT25MaW5l
KCktPmJpZGlMZXZlbCgpIDwgYmlkaUxldmVsT2ZSdW4pOwogICAgIH0KIAogICAgIGlmIChhdFJp
Z2h0bW9zdE9mZnNldEluQm94KCkpIHsKICAgICAgICAgaWYgKHNob3VsZE1hdGNoQmlkaUxldmVs
ID09IElnbm9yZUJpZGlMZXZlbCkKLSAgICAgICAgICAgIHJldHVybiBuZXh0TGVhZk9uTGluZSgp
ICYmIG1fcnVuLT5iaWRpTGV2ZWwoKSA8IG5leHRMZWFmT25MaW5lKCktPmJpZGlMZXZlbCgpOwot
ICAgICAgICByZXR1cm4gbmV4dExlYWZPbkxpbmUoKSAmJiBtX3J1bi0+YmlkaUxldmVsKCkgPCBi
aWRpTGV2ZWxPZlJ1biAmJiBuZXh0TGVhZk9uTGluZSgpLT5iaWRpTGV2ZWwoKSA+PSBiaWRpTGV2
ZWxPZlJ1bjsKKyAgICAgICAgICAgIHJldHVybiBuZXh0TGVhZk9uTGluZSgpICYmIG1fYm94LT5i
aWRpTGV2ZWwoKSA8IG5leHRMZWFmT25MaW5lKCktPmJpZGlMZXZlbCgpOworICAgICAgICByZXR1
cm4gbmV4dExlYWZPbkxpbmUoKSAmJiBtX2JveC0+YmlkaUxldmVsKCkgPCBiaWRpTGV2ZWxPZlJ1
biAmJiBuZXh0TGVhZk9uTGluZSgpLT5iaWRpTGV2ZWwoKSA+PSBiaWRpTGV2ZWxPZlJ1bjsKICAg
ICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xODQsMTkgKzE4NCwxOSBAQCBib29sIFJlbmRl
cmVkUG9zaXRpb246OmF0TGVmdEJvdW5kYXJ5T2ZCaWRpUnVuKFNob3VsZE1hdGNoQmlkaUxldmVs
IHNob3VsZE1hdGNoQgogCiBib29sIFJlbmRlcmVkUG9zaXRpb246OmF0UmlnaHRCb3VuZGFyeU9m
QmlkaVJ1bihTaG91bGRNYXRjaEJpZGlMZXZlbCBzaG91bGRNYXRjaEJpZGlMZXZlbCwgdW5zaWdu
ZWQgY2hhciBiaWRpTGV2ZWxPZlJ1bikgY29uc3QKIHsKLSAgICBpZiAoIW1fcnVuKQorICAgIGlm
ICghbV9ib3gpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChhdFJpZ2h0bW9zdE9m
ZnNldEluQm94KCkpIHsKICAgICAgICAgaWYgKHNob3VsZE1hdGNoQmlkaUxldmVsID09IElnbm9y
ZUJpZGlMZXZlbCkKLSAgICAgICAgICAgIHJldHVybiAhbmV4dExlYWZPbkxpbmUoKSB8fCBuZXh0
TGVhZk9uTGluZSgpLT5iaWRpTGV2ZWwoKSA8IG1fcnVuLT5iaWRpTGV2ZWwoKTsKLSAgICAgICAg
cmV0dXJuIG1fcnVuLT5iaWRpTGV2ZWwoKSA+PSBiaWRpTGV2ZWxPZlJ1biAmJiAoIW5leHRMZWFm
T25MaW5lKCkgfHwgbmV4dExlYWZPbkxpbmUoKS0+YmlkaUxldmVsKCkgPCBiaWRpTGV2ZWxPZlJ1
bik7CisgICAgICAgICAgICByZXR1cm4gIW5leHRMZWFmT25MaW5lKCkgfHwgbmV4dExlYWZPbkxp
bmUoKS0+YmlkaUxldmVsKCkgPCBtX2JveC0+YmlkaUxldmVsKCk7CisgICAgICAgIHJldHVybiBt
X2JveC0+YmlkaUxldmVsKCkgPj0gYmlkaUxldmVsT2ZSdW4gJiYgKCFuZXh0TGVhZk9uTGluZSgp
IHx8IG5leHRMZWFmT25MaW5lKCktPmJpZGlMZXZlbCgpIDwgYmlkaUxldmVsT2ZSdW4pOwogICAg
IH0KIAogICAgIGlmIChhdExlZnRtb3N0T2Zmc2V0SW5Cb3goKSkgewogICAgICAgICBpZiAoc2hv
dWxkTWF0Y2hCaWRpTGV2ZWwgPT0gSWdub3JlQmlkaUxldmVsKQotICAgICAgICAgICAgcmV0dXJu
IHByZXZpb3VzTGVhZk9uTGluZSgpICYmIG1fcnVuLT5iaWRpTGV2ZWwoKSA8IHByZXZpb3VzTGVh
Zk9uTGluZSgpLT5iaWRpTGV2ZWwoKTsKLSAgICAgICAgcmV0dXJuIHByZXZpb3VzTGVhZk9uTGlu
ZSgpICYmIG1fcnVuLT5iaWRpTGV2ZWwoKSA8IGJpZGlMZXZlbE9mUnVuICYmIHByZXZpb3VzTGVh
Zk9uTGluZSgpLT5iaWRpTGV2ZWwoKSA+PSBiaWRpTGV2ZWxPZlJ1bjsKKyAgICAgICAgICAgIHJl
dHVybiBwcmV2aW91c0xlYWZPbkxpbmUoKSAmJiBtX2JveC0+YmlkaUxldmVsKCkgPCBwcmV2aW91
c0xlYWZPbkxpbmUoKS0+YmlkaUxldmVsKCk7CisgICAgICAgIHJldHVybiBwcmV2aW91c0xlYWZP
bkxpbmUoKSAmJiBtX2JveC0+YmlkaUxldmVsKCkgPCBiaWRpTGV2ZWxPZlJ1biAmJiBwcmV2aW91
c0xlYWZPbkxpbmUoKS0+YmlkaUxldmVsKCkgPj0gYmlkaUxldmVsT2ZSdW47CiAgICAgfQogCiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjI3LDcgKzIyNyw3IEBAIEludFJlY3QgUmVuZGVyZWRQb3Np
dGlvbjo6YWJzb2x1dGVSZWN0KENhcmV0UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkgY29uc3QKICAg
ICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBJbnRSZWN0
IGxvY2FsUmVjdCA9IHNuYXBwZWRJbnRSZWN0KGNvbXB1dGVMb2NhbENhcmV0UmVjdCgqbV9yZW5k
ZXJlciwgeyBtX3J1biwgbV9vZmZzZXQgfSwgY2FyZXRSZWN0TW9kZSkpOworICAgIEludFJlY3Qg
bG9jYWxSZWN0ID0gc25hcHBlZEludFJlY3QoY29tcHV0ZUxvY2FsQ2FyZXRSZWN0KCptX3JlbmRl
cmVyLCB7IG1fYm94LCBtX29mZnNldCB9LCBjYXJldFJlY3RNb2RlKSk7CiAgICAgcmV0dXJuIGxv
Y2FsUmVjdCA9PSBJbnRSZWN0KCkgPyBJbnRSZWN0KCkgOiBtX3JlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5oCmluZGV4IDIxMzIy
M2Q5YzUxNjRlYzRhNzkyMGI5NWM3ZGIxNDFmNmRkM2EyN2MuLjU1NzFhNDczMmIwYTM3MjJmZmFm
NThlNzM3NDc3NDQ1NDUyZmI0ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVuZGVyZWRQb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQ
b3NpdGlvbi5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXF1aXZhbGVu
dChjb25zdCBSZW5kZXJlZFBvc2l0aW9uJikgY29uc3Q7CiAKICAgICBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuICFtX3JlbmRlcmVyOyB9Ci0gICAgSW5saW5lSXRlcmF0b3I6OkxpbmVJdGVy
YXRvciBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9ydW4gPyBtX3J1bi0+bGluZSgpIDogSW5saW5l
SXRlcmF0b3I6OkxpbmVJdGVyYXRvcigpOyB9CisgICAgSW5saW5lSXRlcmF0b3I6OkxpbmVJdGVy
YXRvciBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9ib3ggPyBtX2JveC0+bGluZSgpIDogSW5saW5l
SXRlcmF0b3I6OkxpbmVJdGVyYXRvcigpOyB9CiAKICAgICB1bnNpZ25lZCBjaGFyIGJpZGlMZXZl
bE9uTGVmdCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGNoYXIgYmlkaUxldmVsT25SaWdodCgpIGNv
bnN0OwpAQCAtNzYsMTMgKzc2LDEzIEBAIHByaXZhdGU6CiAKICAgICBJbmxpbmVJdGVyYXRvcjo6
TGVhZkJveEl0ZXJhdG9yIHByZXZpb3VzTGVhZk9uTGluZSgpIGNvbnN0OwogICAgIElubGluZUl0
ZXJhdG9yOjpMZWFmQm94SXRlcmF0b3IgbmV4dExlYWZPbkxpbmUoKSBjb25zdDsKLSAgICBib29s
IGF0TGVmdG1vc3RPZmZzZXRJbkJveCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuICYmIG1fb2Zmc2V0
ID09IG1fcnVuLT5sZWZ0bW9zdENhcmV0T2Zmc2V0KCk7IH0KLSAgICBib29sIGF0UmlnaHRtb3N0
T2Zmc2V0SW5Cb3goKSBjb25zdCB7IHJldHVybiBtX3J1biAmJiBtX29mZnNldCA9PSBtX3J1bi0+
cmlnaHRtb3N0Q2FyZXRPZmZzZXQoKTsgfQorICAgIGJvb2wgYXRMZWZ0bW9zdE9mZnNldEluQm94
KCkgY29uc3QgeyByZXR1cm4gbV9ib3ggJiYgbV9vZmZzZXQgPT0gbV9ib3gtPmxlZnRtb3N0Q2Fy
ZXRPZmZzZXQoKTsgfQorICAgIGJvb2wgYXRSaWdodG1vc3RPZmZzZXRJbkJveCgpIGNvbnN0IHsg
cmV0dXJuIG1fYm94ICYmIG1fb2Zmc2V0ID09IG1fYm94LT5yaWdodG1vc3RDYXJldE9mZnNldCgp
OyB9CiAgICAgYm9vbCBhdExlZnRCb3VuZGFyeU9mQmlkaVJ1bihTaG91bGRNYXRjaEJpZGlMZXZl
bCwgdW5zaWduZWQgY2hhciBiaWRpTGV2ZWxPZlJ1bikgY29uc3Q7CiAgICAgYm9vbCBhdFJpZ2h0
Qm91bmRhcnlPZkJpZGlSdW4oU2hvdWxkTWF0Y2hCaWRpTGV2ZWwsIHVuc2lnbmVkIGNoYXIgYmlk
aUxldmVsT2ZSdW4pIGNvbnN0OwogCiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVy
IHsgbnVsbHB0ciB9OwotICAgIElubGluZUl0ZXJhdG9yOjpMZWFmQm94SXRlcmF0b3IgbV9ydW47
CisgICAgSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBtX2JveDsKICAgICB1bnNpZ25l
ZCBtX29mZnNldCB7IDAgfTsKIAogICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxJbmxpbmVJdGVy
YXRvcjo6TGVhZkJveEl0ZXJhdG9yPiBtX3ByZXZpb3VzTGVhZk9uTGluZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAppbmRleCBlOTZjMzU4Y2I1NTY0ZjlkMjY3
ZTg5ZTNiZDRjZTRhMWVhNmY3ZGNhLi4yNjE4MTQyMTE2MWEwNDliNjU0YThkZTNiNjc0YWM5MzQ2
ZWI0MzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCkBA
IC0xMjYsMTI1ICsxMjYsMTI1IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdFZpc3Vh
bGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogICAgIElubGluZUl0ZXJhdG9yOjpMaW5lTG9n
aWNhbE9yZGVyQ2FjaGUgb3JkZXJDYWNoZTsKIAogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
IGF1dG8gW3J1biwgb2Zmc2V0XSA9IHAuaW5saW5lUnVuQW5kT2Zmc2V0KG1fYWZmaW5pdHksIHBy
aW1hcnlEaXJlY3Rpb24pOwotICAgICAgICBpZiAoIXJ1bikKKyAgICAgICAgYXV0byBbYm94LCBv
ZmZzZXRdID0gcC5pbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlv
bik7CisgICAgICAgIGlmICghYm94KQogICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlEaXJlY3Rp
b24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlk
YXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVl
cFBvc2l0aW9uKTsKIAotICAgICAgICBhdXRvKiByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7
CisgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKIAogICAgICAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgaWYgKChyZW5kZXJlci0+aXNSZXBsYWNlZE9ySW5s
aW5lQmxvY2soKSB8fCByZW5kZXJlci0+aXNCUigpKSAmJiBvZmZzZXQgPT0gcnVuLT5yaWdodG1v
c3RDYXJldE9mZnNldCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBydW4tPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQ
b3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7
CisgICAgICAgICAgICBpZiAoKHJlbmRlcmVyLT5pc1JlcGxhY2VkT3JJbmxpbmVCbG9jaygpIHx8
IHJlbmRlcmVyLT5pc0JSKCkpICYmIG9mZnNldCA9PSBib3gtPnJpZ2h0bW9zdENhcmV0T2Zmc2V0
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5l
eHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKIAogICAgICAgICAg
ICAgaWYgKCFyZW5kZXJlci0+bm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgcnVuLnRyYXZlcnNl
UHJldmlvdXNPbkxpbmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJ1bikKKyAgICAgICAgICAg
ICAgICBib3gudHJhdmVyc2VQcmV2aW91c09uTGluZSgpOworICAgICAgICAgICAgICAgIGlmICgh
Ym94KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpMVFIgPyBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVw
UG9zaXRpb24pIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24p
OwotICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsKLSAgICAgICAg
ICAgICAgICBvZmZzZXQgPSBydW4tPnJpZ2h0bW9zdENhcmV0T2Zmc2V0KCk7CisgICAgICAgICAg
ICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOworICAgICAgICAgICAgICAgIG9mZnNl
dCA9IGJveC0+cmlnaHRtb3N0Q2FyZXRPZmZzZXQoKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IHVu
ZGVyZmxvdyB0aGUgKHVuc2lnbmVkKSBvZmZzZXQuIFRoaXMgaXMgZmluZSBhbmQgaGFuZGxlZCBi
ZWxvdy4KLSAgICAgICAgICAgIG9mZnNldCA9IHJ1bi0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gcmVuZGVyZXItPnByZXZpb3VzT2Zmc2V0KG9mZnNldCkgOiByZW5kZXJlci0+bmV4dE9mZnNl
dChvZmZzZXQpOworICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyByZW5kZXJlci0+cHJldmlvdXNPZmZzZXQob2Zmc2V0KSA6IHJlbmRlcmVyLT5uZXh0
T2Zmc2V0KG9mZnNldCk7CiAKLSAgICAgICAgICAgIGF1dG8gY2FyZXRNaW5PZmZzZXQgPSBydW4t
Pm1pbmltdW1DYXJldE9mZnNldCgpOwotICAgICAgICAgICAgYXV0byBjYXJldE1heE9mZnNldCA9
IHJ1bi0+bWF4aW11bUNhcmV0T2Zmc2V0KCk7CisgICAgICAgICAgICBhdXRvIGNhcmV0TWluT2Zm
c2V0ID0gYm94LT5taW5pbXVtQ2FyZXRPZmZzZXQoKTsKKyAgICAgICAgICAgIGF1dG8gY2FyZXRN
YXhPZmZzZXQgPSBib3gtPm1heGltdW1DYXJldE9mZnNldCgpOwogCiAgICAgICAgICAgICBpZiAo
b2Zmc2V0ID4gY2FyZXRNaW5PZmZzZXQgJiYgb2Zmc2V0IDwgY2FyZXRNYXhPZmZzZXQpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gcnVuLT5sZWZ0
bW9zdENhcmV0T2Zmc2V0KCkpIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gYm94LT5sZWZ0
bW9zdENhcmV0T2Zmc2V0KCkpIHsKICAgICAgICAgICAgICAgICAvLyBPdmVyc2hvdCB0byB0aGUg
bGVmdC4KLSAgICAgICAgICAgICAgICBhdXRvIHByZXZpb3VzUnVuID0gcnVuLT5wcmV2aW91c09u
TGluZUlnbm9yaW5nTGluZUJyZWFrKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c1J1
bikgeworICAgICAgICAgICAgICAgIGF1dG8gcHJldmlvdXNCb3ggPSBib3gtPnByZXZpb3VzT25M
aW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzQm94
KSB7CiAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uT25MZWZ0ID0gcHJpbWFy
eURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBwcmV2aW91c1Zpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRh
dGUobV9kZWVwUG9zaXRpb24pOwotICAgICAgICAgICAgICAgICAgICBhdXRvIHJ1bk9uTGVmdCA9
IHBvc2l0aW9uT25MZWZ0LmlubGluZVJ1bkFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGly
ZWN0aW9uKS5ydW47Ci0gICAgICAgICAgICAgICAgICAgIGlmIChydW5PbkxlZnQgJiYgcnVuT25M
ZWZ0LT5saW5lKCkgPT0gcnVuLT5saW5lKCkpCisgICAgICAgICAgICAgICAgICAgIGF1dG8gYm94
T25MZWZ0ID0gcG9zaXRpb25PbkxlZnQuaW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5pdHksIHBy
aW1hcnlEaXJlY3Rpb24pLmJveDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJveE9uTGVmdCAm
JiBib3hPbkxlZnQtPmxpbmUoKSA9PSBib3gtPmxpbmUoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRp
b25PbkxlZnQ7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gUmVwb3Np
dGlvbiBhdCB0aGUgb3RoZXIgbG9naWNhbCBwb3NpdGlvbiBjb3JyZXNwb25kaW5nIHRvIG91ciBl
ZGdlJ3MgdmlzdWFsIHBvc2l0aW9uIGFuZCBnbyBmb3IgYW5vdGhlciByb3VuZC4KLSAgICAgICAg
ICAgICAgICBydW4gPSBwcmV2aW91c1J1bjsKLSAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZy
dW4tPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJldmlvdXNSdW4tPnJp
Z2h0bW9zdENhcmV0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgYm94ID0gcHJldmlvdXNCb3g7
CisgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOworICAgICAgICAg
ICAgICAgIG9mZnNldCA9IHByZXZpb3VzQm94LT5yaWdodG1vc3RDYXJldE9mZnNldCgpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGxldmVsID0gcnVuLT5iaWRpTGV2ZWwoKTsKLSAgICAgICAgICAgIGF1dG8gcHJl
dmlvdXNSdW4gPSBydW4tPnByZXZpb3VzT25MaW5lKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsKKyAgICAgICAgICAgIGF1dG8gcHJldmlvdXNC
b3ggPSBib3gtPnByZXZpb3VzT25MaW5lKCk7CiAKLSAgICAgICAgICAgIGlmIChydW4tPmRpcmVj
dGlvbigpID09IHByaW1hcnlEaXJlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBpZiAoIXByZXZp
b3VzUnVuKSB7CisgICAgICAgICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5RGly
ZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c0JveCkgewogICAgICAgICAg
ICAgICAgICAgICBhdXRvIGxvZ2ljYWxTdGFydCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERp
cmVjdGlvbjo6TFRSCi0gICAgICAgICAgICAgICAgICAgICAgICA/IElubGluZUl0ZXJhdG9yOjpm
aXJzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcldpdGhOb2RlKHJ1bi0+bGluZSgpLCBvcmRlckNh
Y2hlKQotICAgICAgICAgICAgICAgICAgICAgICAgOiBJbmxpbmVJdGVyYXRvcjo6bGFzdExlYWZP
bkxpbmVJbkxvZ2ljYWxPcmRlcldpdGhOb2RlKHJ1bi0+bGluZSgpLCBvcmRlckNhY2hlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgID8gSW5saW5lSXRlcmF0b3I6OmZpcnN0TGVhZk9uTGluZUlu
TG9naWNhbE9yZGVyV2l0aE5vZGUoYm94LT5saW5lKCksIG9yZGVyQ2FjaGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICA6IElubGluZUl0ZXJhdG9yOjpsYXN0TGVhZk9uTGluZUluTG9naWNhbE9y
ZGVyV2l0aE5vZGUoYm94LT5saW5lKCksIG9yZGVyQ2FjaGUpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAobG9naWNhbFN0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW4gPSBsb2dp
Y2FsU3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZydW4tPnJlbmRl
cmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9u
ID09IFRleHREaXJlY3Rpb246OkxUUiA/IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCkgOiBydW4t
Pm1heGltdW1DYXJldE9mZnNldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYm94ID0gbG9n
aWNhbFN0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5k
ZXJlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBib3gtPm1pbmltdW1DYXJldE9mZnNldCgpIDogYm94
LT5tYXhpbXVtQ2FyZXRPZmZzZXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KHByZXZpb3VzUnVuLT5iaWRpTGV2ZWwoKSA+PSBsZXZlbCkKKyAgICAgICAgICAgICAgICBpZiAo
cHJldmlvdXNCb3gtPmJpZGlMZXZlbCgpID49IGxldmVsKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgICAgIGxldmVsID0gcHJldmlvdXNSdW4tPmJpZGlMZXZlbCgp
OworICAgICAgICAgICAgICAgIGxldmVsID0gcHJldmlvdXNCb3gtPmJpZGlMZXZlbCgpOwogCi0g
ICAgICAgICAgICAgICAgYXV0byBuZXh0UnVuID0gcnVuOworICAgICAgICAgICAgICAgIGF1dG8g
bmV4dEJveCA9IGJveDsKICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAg
IG5leHRSdW4udHJhdmVyc2VOZXh0T25MaW5lKCk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAo
bmV4dFJ1biAmJiBuZXh0UnVuLT5iaWRpTGV2ZWwoKSA+IGxldmVsKTsKKyAgICAgICAgICAgICAg
ICAgICAgbmV4dEJveC50cmF2ZXJzZU5leHRPbkxpbmUoKTsKKyAgICAgICAgICAgICAgICB9IHdo
aWxlIChuZXh0Qm94ICYmIG5leHRCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpOwogCi0gICAgICAg
ICAgICAgICAgaWYgKG5leHRSdW4gJiYgbmV4dFJ1bi0+YmlkaUxldmVsKCkgPT0gbGV2ZWwpCisg
ICAgICAgICAgICAgICAgaWYgKG5leHRCb3ggJiYgbmV4dEJveC0+YmlkaUxldmVsKCkgPT0gbGV2
ZWwpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgcnVuID0g
cHJldmlvdXNSdW47Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJlcigp
OwotICAgICAgICAgICAgICAgIG9mZnNldCA9IHJ1bi0+cmlnaHRtb3N0Q2FyZXRPZmZzZXQoKTsK
LSAgICAgICAgICAgICAgICBpZiAocnVuLT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5RGlyZWN0aW9u
KQorICAgICAgICAgICAgICAgIGJveCA9IHByZXZpb3VzQm94OworICAgICAgICAgICAgICAgIHJl
bmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gt
PnJpZ2h0bW9zdENhcmV0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKGJveC0+ZGlyZWN0
aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHdo
aWxlIChwcmV2aW91c1J1biAmJiAhcHJldmlvdXNSdW4tPnJlbmRlcmVyKCkubm9kZSgpKQotICAg
ICAgICAgICAgICAgIHByZXZpb3VzUnVuLnRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKTsKKyAgICAg
ICAgICAgIHdoaWxlIChwcmV2aW91c0JveCAmJiAhcHJldmlvdXNCb3gtPnJlbmRlcmVyKCkubm9k
ZSgpKQorICAgICAgICAgICAgICAgIHByZXZpb3VzQm94LnRyYXZlcnNlUHJldmlvdXNPbkxpbmUo
KTsKIAotICAgICAgICAgICAgaWYgKHByZXZpb3VzUnVuKSB7Ci0gICAgICAgICAgICAgICAgcnVu
ID0gcHJldmlvdXNSdW47Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJl
cigpOwotICAgICAgICAgICAgICAgIG9mZnNldCA9IHJ1bi0+cmlnaHRtb3N0Q2FyZXRPZmZzZXQo
KTsKLSAgICAgICAgICAgICAgICBpZiAocnVuLT5iaWRpTGV2ZWwoKSA+IGxldmVsKSB7CisgICAg
ICAgICAgICBpZiAocHJldmlvdXNCb3gpIHsKKyAgICAgICAgICAgICAgICBib3ggPSBwcmV2aW91
c0JveDsKKyAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CisgICAg
ICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5yaWdodG1vc3RDYXJldE9mZnNldCgpOworICAgICAg
ICAgICAgICAgIGlmIChib3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpIHsKICAgICAgICAgICAgICAg
ICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNSdW4gPSBwcmV2aW91
c1J1bi50cmF2ZXJzZVByZXZpb3VzT25MaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gd2hp
bGUgKHByZXZpb3VzUnVuICYmIHByZXZpb3VzUnVuLT5iaWRpTGV2ZWwoKSA+IGxldmVsKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQm94ID0gcHJldmlvdXNCb3gudHJhdmVyc2VQ
cmV2aW91c09uTGluZSgpOworICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChwcmV2aW91c0Jv
eCAmJiBwcmV2aW91c0JveC0+YmlkaUxldmVsKCkgPiBsZXZlbCk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwcmV2aW91c1J1biB8fCBwcmV2aW91c1J1bi0+YmlkaUxldmVsKCkgPCBsZXZl
bCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c0JveCB8fCBwcmV2aW91c0JveC0+
YmlkaUxldmVsKCkgPCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVHJhaWxpbmcgZWRnZSBvZiBhIHNlY29uZGFyeSBydW4uIFNldCB0byB0aGUgbGVhZGluZyBl
ZGdlIG9mIHRoZSBlbnRpcmUgcnVuLgorICAgICAgICAgICAgICAgIC8vIFRyYWlsaW5nIGVkZ2Ug
b2YgYSBzZWNvbmRhcnkgYm94LiBTZXQgdG8gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgZW50aXJl
IGJveC4KICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoYXV0byBuZXh0UnVuID0gcnVuLT5uZXh0T25MaW5lKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChuZXh0UnVuLT5iaWRpTGV2ZWwoKSA8IGxldmVsKQorICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoYXV0byBuZXh0Qm94ID0gYm94LT5uZXh0T25MaW5lKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Qm94LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcnVuID0gbmV4dFJ1bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJveCA9IG5leHRCb3g7
CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bi0+Ymlk
aUxldmVsKCkgPT0gbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgIGlmIChib3gtPmJpZGlMZXZl
bCgpID09IGxldmVsKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGxldmVsID0gcnVuLT5iaWRpTGV2ZWwoKTsKLSAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKGF1dG8gcHJldmlvdXNSdW4gPSBydW4tPnByZXZpb3VzT25MaW5lKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1J1bi0+YmlkaUxldmVsKCkgPCBsZXZlbCkK
KyAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOworICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoYXV0byBwcmV2aW91c0JveCA9IGJveC0+cHJldmlvdXNPbkxpbmUo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQm94LT5iaWRpTGV2ZWwo
KSA8IGxldmVsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcnVuID0gcHJldmlvdXNSdW47CisgICAgICAgICAgICAgICAgICAgICAg
ICBib3ggPSBwcmV2aW91c0JveDsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBpZiAocnVuLT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGJveC0+YmlkaUxldmVsKCkgPT0gbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBydW4tPmJpZGlMZXZlbCgpOwor
ICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGJveC0+YmlkaUxldmVsKCk7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsKLSAg
ICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246
OkxUUiA/IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCkgOiBydW4tPm1heGltdW1DYXJldE9mZnNl
dCgpOworICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKKyAgICAg
ICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxU
UiA/IGJveC0+bWluaW11bUNhcmV0T2Zmc2V0KCkgOiBib3gtPm1heGltdW1DYXJldE9mZnNldCgp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI5Miwx
MjkgKzI5MiwxMjkgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlz
dGluY3RDYW5kaWRhdGUoKSBjb25zdAogICAgIElubGluZUl0ZXJhdG9yOjpMaW5lTG9naWNhbE9y
ZGVyQ2FjaGUgb3JkZXJDYWNoZTsKIAogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGF1dG8g
W3J1biwgb2Zmc2V0XSA9IHAuaW5saW5lUnVuQW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlE
aXJlY3Rpb24pOwotICAgICAgICBpZiAoIXJ1bikKKyAgICAgICAgYXV0byBbYm94LCBvZmZzZXRd
ID0gcC5pbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbik7Cisg
ICAgICAgIGlmICghYm94KQogICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlEaXJlY3Rpb24gPT0g
VGV4dERpcmVjdGlvbjo6TFRSID8gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVw
UG9zaXRpb24pIDogcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0
aW9uKTsKIAotICAgICAgICBhdXRvKiByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7CisgICAg
ICAgIGF1dG8qIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKIAogICAgICAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICAgICAgaWYgKChyZW5kZXJlci0+aXNSZXBsYWNlZE9ySW5saW5lQmxv
Y2soKSB8fCByZW5kZXJlci0+aXNCUigpKSAmJiBvZmZzZXQgPT0gcnVuLT5sZWZ0bW9zdENhcmV0
T2Zmc2V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bi0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDog
cHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKKyAgICAg
ICAgICAgIGlmICgocmVuZGVyZXItPmlzUmVwbGFjZWRPcklubGluZUJsb2NrKCkgfHwgcmVuZGVy
ZXItPmlzQlIoKSkgJiYgb2Zmc2V0ID09IGJveC0+bGVmdG1vc3RDYXJldE9mZnNldCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG5leHRW
aXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFs
bHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAKICAgICAgICAgICAgIGlmICgh
cmVuZGVyZXItPm5vZGUoKSkgewotICAgICAgICAgICAgICAgIHJ1bi50cmF2ZXJzZU5leHRPbkxp
bmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJ1bikKKyAgICAgICAgICAgICAgICBib3gudHJh
dmVyc2VOZXh0T25MaW5lKCk7CisgICAgICAgICAgICAgICAgaWYgKCFib3gpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/
IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IHByZXZpb3Vz
VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7Ci0gICAgICAgICAgICAg
ICAgcmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgIG9mZnNldCA9
IHJ1bi0+bGVmdG1vc3RDYXJldE9mZnNldCgpOworICAgICAgICAgICAgICAgIHJlbmRlcmVyID0g
JmJveC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPmxlZnRtb3N0
Q2FyZXRPZmZzZXQoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IHVuZGVyZmxvdyB0aGUgKHVuc2ln
bmVkKSBvZmZzZXQuIFRoaXMgaXMgZmluZSBhbmQgaGFuZGxlZCBiZWxvdy4KLSAgICAgICAgICAg
IG9mZnNldCA9IHJ1bi0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVuZGVyZXItPm5leHRP
ZmZzZXQob2Zmc2V0KSA6IHJlbmRlcmVyLT5wcmV2aW91c09mZnNldChvZmZzZXQpOworICAgICAg
ICAgICAgb2Zmc2V0ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZW5kZXJlci0+
bmV4dE9mZnNldChvZmZzZXQpIDogcmVuZGVyZXItPnByZXZpb3VzT2Zmc2V0KG9mZnNldCk7CiAK
LSAgICAgICAgICAgIGF1dG8gY2FyZXRNaW5PZmZzZXQgPSBydW4tPm1pbmltdW1DYXJldE9mZnNl
dCgpOwotICAgICAgICAgICAgYXV0byBjYXJldE1heE9mZnNldCA9IHJ1bi0+bWF4aW11bUNhcmV0
T2Zmc2V0KCk7CisgICAgICAgICAgICBhdXRvIGNhcmV0TWluT2Zmc2V0ID0gYm94LT5taW5pbXVt
Q2FyZXRPZmZzZXQoKTsKKyAgICAgICAgICAgIGF1dG8gY2FyZXRNYXhPZmZzZXQgPSBib3gtPm1h
eGltdW1DYXJldE9mZnNldCgpOwogCiAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gY2FyZXRNaW5P
ZmZzZXQgJiYgb2Zmc2V0IDwgY2FyZXRNYXhPZmZzZXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gcnVuLT5yaWdodG1vc3RDYXJldE9mZnNldCgp
KSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IGJveC0+cmlnaHRtb3N0Q2FyZXRPZmZzZXQo
KSkgewogICAgICAgICAgICAgICAgIC8vIE92ZXJzaG90IHRvIHRoZSByaWdodC4KLSAgICAgICAg
ICAgICAgICBhdXRvIG5leHRSdW4gPSBydW4tPm5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygp
OwotICAgICAgICAgICAgICAgIGlmICghbmV4dFJ1bikgeworICAgICAgICAgICAgICAgIGF1dG8g
bmV4dEJveCA9IGJveC0+bmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFuZXh0Qm94KSB7CiAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHBvc2l0
aW9uT25SaWdodCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gbmV4
dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogcHJldmlvdXNWaXN1
YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byBydW5PblJpZ2h0ID0gcG9zaXRpb25PblJpZ2h0LmlubGluZVJ1bkFuZE9mZnNldCht
X2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uKS5ydW47Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChydW5PblJpZ2h0ICYmIHJ1bk9uUmlnaHQtPmxpbmUoKSA9PSBydW4tPmxpbmUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byBib3hPblJpZ2h0ID0gcG9zaXRpb25PblJpZ2h0LmlubGluZUJv
eEFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uKS5ib3g7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChib3hPblJpZ2h0ICYmIGJveE9uUmlnaHQtPmxpbmUoKSA9PSBib3gtPmxp
bmUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25PblJpZ2h0OwogICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIC8vIFJlcG9zaXRpb24gYXQgdGhlIG90aGVyIGxvZ2ljYWwgcG9z
aXRpb24gY29ycmVzcG9uZGluZyB0byBvdXIgZWRnZSdzIHZpc3VhbCBwb3NpdGlvbiBhbmQgZ28g
Zm9yIGFub3RoZXIgcm91bmQuCi0gICAgICAgICAgICAgICAgcnVuID0gbmV4dFJ1bjsKLSAgICAg
ICAgICAgICAgICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAg
b2Zmc2V0ID0gbmV4dFJ1bi0+bGVmdG1vc3RDYXJldE9mZnNldCgpOworICAgICAgICAgICAgICAg
IGJveCA9IG5leHRCb3g7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJl
cigpOworICAgICAgICAgICAgICAgIG9mZnNldCA9IG5leHRCb3gtPmxlZnRtb3N0Q2FyZXRPZmZz
ZXQoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciBsZXZlbCA9IHJ1bi0+YmlkaUxldmVsKCk7Ci0gICAgICAgICAg
ICBhdXRvIG5leHRSdW4gPSBydW4tPm5leHRPbkxpbmUoKTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOworICAgICAgICAgICAgYXV0byBuZXh0Qm94
ID0gYm94LT5uZXh0T25MaW5lKCk7CiAKLSAgICAgICAgICAgIGlmIChydW4tPmRpcmVjdGlvbigp
ID09IHByaW1hcnlEaXJlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBpZiAoIW5leHRSdW4pIHsK
KyAgICAgICAgICAgIGlmIChib3gtPmRpcmVjdGlvbigpID09IHByaW1hcnlEaXJlY3Rpb24pIHsK
KyAgICAgICAgICAgICAgICBpZiAoIW5leHRCb3gpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0
byBsb2dpY2FsRW5kID0gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIKLSAg
ICAgICAgICAgICAgICAgICAgICAgID8gSW5saW5lSXRlcmF0b3I6Omxhc3RMZWFmT25MaW5lSW5M
b2dpY2FsT3JkZXJXaXRoTm9kZShydW4tPmxpbmUoKSwgb3JkZXJDYWNoZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIDogSW5saW5lSXRlcmF0b3I6OmZpcnN0TGVhZk9uTGluZUluTG9naWNhbE9y
ZGVyV2l0aE5vZGUocnVuLT5saW5lKCksIG9yZGVyQ2FjaGUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgPyBJbmxpbmVJdGVyYXRvcjo6bGFzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcldpdGhO
b2RlKGJveC0+bGluZSgpLCBvcmRlckNhY2hlKQorICAgICAgICAgICAgICAgICAgICAgICAgOiBJ
bmxpbmVJdGVyYXRvcjo6Zmlyc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXJXaXRoTm9kZShib3gt
PmxpbmUoKSwgb3JkZXJDYWNoZSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxF
bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1biA9IGxvZ2ljYWxFbmQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246
OkxUUiA/IHJ1bi0+bWF4aW11bUNhcmV0T2Zmc2V0KCkgOiBydW4tPm1pbmltdW1DYXJldE9mZnNl
dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYm94ID0gbG9naWNhbEVuZDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6
TFRSID8gYm94LT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6IGJveC0+bWluaW11bUNhcmV0T2Zmc2V0
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKG5leHRSdW4tPmJpZGlMZXZl
bCgpID49IGxldmVsKQorICAgICAgICAgICAgICAgIGlmIChuZXh0Qm94LT5iaWRpTGV2ZWwoKSA+
PSBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBs
ZXZlbCA9IG5leHRSdW4tPmJpZGlMZXZlbCgpOworICAgICAgICAgICAgICAgIGxldmVsID0gbmV4
dEJveC0+YmlkaUxldmVsKCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHByZXZpb3VzUnVuID0g
cnVuOworICAgICAgICAgICAgICAgIGF1dG8gcHJldmlvdXNCb3ggPSBib3g7CiAgICAgICAgICAg
ICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1J1bi50cmF2ZXJzZVByZXZp
b3VzT25MaW5lKCk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAocHJldmlvdXNSdW4gJiYgcHJl
dmlvdXNSdW4tPmJpZGlMZXZlbCgpID4gbGV2ZWwpOworICAgICAgICAgICAgICAgICAgICBwcmV2
aW91c0JveC50cmF2ZXJzZVByZXZpb3VzT25MaW5lKCk7CisgICAgICAgICAgICAgICAgfSB3aGls
ZSAocHJldmlvdXNCb3ggJiYgcHJldmlvdXNCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpOwogCi0g
ICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUnVuICYmIHByZXZpb3VzUnVuLT5iaWRpTGV2ZWwo
KSA9PSBsZXZlbCkgLy8gRm9yIGV4YW1wbGUsIGFiYyBGRUQgMTIzIF4gQ0JBCisgICAgICAgICAg
ICAgICAgaWYgKHByZXZpb3VzQm94ICYmIHByZXZpb3VzQm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZl
bCkgLy8gRm9yIGV4YW1wbGUsIGFiYyBGRUQgMTIzIF4gQ0JBCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGFiYyAxMjMgXiBDQkEg
b3IgMTIzIF4gQ0JBIGFiYwotICAgICAgICAgICAgICAgIHJ1biA9IG5leHRSdW47Ci0gICAgICAg
ICAgICAgICAgcmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgIG9m
ZnNldCA9IHJ1bi0+bGVmdG1vc3RDYXJldE9mZnNldCgpOwotICAgICAgICAgICAgICAgIGlmIChy
dW4tPmRpcmVjdGlvbigpID09IHByaW1hcnlEaXJlY3Rpb24pCisgICAgICAgICAgICAgICAgYm94
ID0gbmV4dEJveDsKKyAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7
CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5sZWZ0bW9zdENhcmV0T2Zmc2V0KCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHdoaWxlIChuZXh0UnVuICYmICFuZXh0UnVuLT5y
ZW5kZXJlcigpLm5vZGUoKSkKLSAgICAgICAgICAgICAgICBuZXh0UnVuLnRyYXZlcnNlTmV4dE9u
TGluZSgpOworICAgICAgICAgICAgd2hpbGUgKG5leHRCb3ggJiYgIW5leHRCb3gtPnJlbmRlcmVy
KCkubm9kZSgpKQorICAgICAgICAgICAgICAgIG5leHRCb3gudHJhdmVyc2VOZXh0T25MaW5lKCk7
CiAKLSAgICAgICAgICAgIGlmIChuZXh0UnVuKSB7Ci0gICAgICAgICAgICAgICAgcnVuID0gbmV4
dFJ1bjsKLSAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0gICAg
ICAgICAgICAgICAgb2Zmc2V0ID0gcnVuLT5sZWZ0bW9zdENhcmV0T2Zmc2V0KCk7CisgICAgICAg
ICAgICBpZiAobmV4dEJveCkgeworICAgICAgICAgICAgICAgIGJveCA9IG5leHRCb3g7CisgICAg
ICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOworICAgICAgICAgICAgICAg
IG9mZnNldCA9IGJveC0+bGVmdG1vc3RDYXJldE9mZnNldCgpOwogCi0gICAgICAgICAgICAgICAg
aWYgKHJ1bi0+YmlkaUxldmVsKCkgPiBsZXZlbCkgeworICAgICAgICAgICAgICAgIGlmIChib3gt
PmJpZGlMZXZlbCgpID4gbGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAg
ICAgICAgICAgICAgICAgICAgbmV4dFJ1bi50cmF2ZXJzZU5leHRPbkxpbmUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSB3aGlsZSAobmV4dFJ1biAmJiBuZXh0UnVuLT5iaWRpTGV2ZWwoKSA+IGxl
dmVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRCb3gudHJhdmVyc2VOZXh0T25MaW5l
KCk7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKG5leHRCb3ggJiYgbmV4dEJveC0+Ymlk
aUxldmVsKCkgPiBsZXZlbCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0UnVuIHx8
IG5leHRSdW4tPmJpZGlMZXZlbCgpIDwgbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgIGlmICgh
bmV4dEJveCB8fCBuZXh0Qm94LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBUcmFpbGluZyBlZGdlIG9mIGEgc2Vjb25kYXJ5IHJ1bi4g
U2V0IHRvIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIGVudGlyZSBydW4uCisgICAgICAgICAgICAg
ICAgLy8gVHJhaWxpbmcgZWRnZSBvZiBhIHNlY29uZGFyeSBib3guIFNldCB0byB0aGUgbGVhZGlu
ZyBlZGdlIG9mIHRoZSBlbnRpcmUgYm94LgogICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChhdXRvIHByZXZpb3VzUnVuID0gcnVuLT5wcmV2
aW91c09uTGluZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNSdW4t
PmJpZGlMZXZlbCgpIDwgbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChhdXRvIHBy
ZXZpb3VzQm94ID0gYm94LT5wcmV2aW91c09uTGluZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocHJldmlvdXNCb3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW4gPSBwcmV2
aW91c1J1bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJveCA9IHByZXZpb3VzQm94OwogICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChydW4tPmJpZGlMZXZl
bCgpID09IGxldmVsKQorICAgICAgICAgICAgICAgICAgICBpZiAoYm94LT5iaWRpTGV2ZWwoKSA9
PSBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBsZXZlbCA9IHJ1bi0+YmlkaUxldmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxl
IChhdXRvIG5leHRSdW4gPSBydW4tPm5leHRPbkxpbmUoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5leHRSdW4tPmJpZGlMZXZlbCgpIDwgbGV2ZWwpCisgICAgICAgICAgICAgICAg
ICAgIGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KGF1dG8gbmV4dEJveCA9IGJveC0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobmV4dEJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1biA9IG5leHRSdW47
CisgICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBuZXh0Qm94OwogICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChydW4tPmJpZGlMZXZlbCgpID09IGxldmVs
KQorICAgICAgICAgICAgICAgICAgICBpZiAoYm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBsZXZlbCA9
IHJ1bi0+YmlkaUxldmVsKCk7CisgICAgICAgICAgICAgICAgICAgIGxldmVsID0gYm94LT5iaWRp
TGV2ZWwoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAm
cnVuLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rp
b24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gcnVuLT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1
bi0+bWluaW11bUNhcmV0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94
LT5yZW5kZXJlcigpOworICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSID8gYm94LT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6IGJveC0+
bWluaW11bUNhcmV0T2Zmc2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtNjMyLDE0ICs2MzIsMTQgQEAgVUNoYXIzMiBWaXNpYmxlUG9zaXRpb246
OmNoYXJhY3RlckFmdGVyKCkgY29uc3QKICAgICByZXR1cm4gY2g7CiB9CiAKLUlubGluZVJ1bkFu
ZE9mZnNldCBWaXNpYmxlUG9zaXRpb246OmlubGluZVJ1bkFuZE9mZnNldCgpIGNvbnN0CitJbmxp
bmVCb3hBbmRPZmZzZXQgVmlzaWJsZVBvc2l0aW9uOjppbmxpbmVCb3hBbmRPZmZzZXQoKSBjb25z
dAogewotICAgIHJldHVybiBtX2RlZXBQb3NpdGlvbi5pbmxpbmVSdW5BbmRPZmZzZXQobV9hZmZp
bml0eSk7CisgICAgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlubGluZUJveEFuZE9mZnNldChtX2Fm
ZmluaXR5KTsKIH0KIAotSW5saW5lUnVuQW5kT2Zmc2V0IFZpc2libGVQb3NpdGlvbjo6aW5saW5l
UnVuQW5kT2Zmc2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29uc3QKK0lubGlu
ZUJveEFuZE9mZnNldCBWaXNpYmxlUG9zaXRpb246OmlubGluZUJveEFuZE9mZnNldChUZXh0RGly
ZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGVlcFBvc2l0
aW9uLmlubGluZVJ1bkFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uKTsKKyAg
ICByZXR1cm4gbV9kZWVwUG9zaXRpb24uaW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5pdHksIHBy
aW1hcnlEaXJlY3Rpb24pOwogfQogCiBhdXRvIFZpc2libGVQb3NpdGlvbjo6bG9jYWxDYXJldFJl
Y3QoKSBjb25zdCAtPiBMb2NhbENhcmV0UmVjdApAQCAtNjQ4LDEyICs2NDgsMTIgQEAgYXV0byBW
aXNpYmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0KCkgY29uc3QgLT4gTG9jYWxDYXJldFJlY3QK
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIHJ1bkFuZE9m
ZnNldCA9IGlubGluZVJ1bkFuZE9mZnNldCgpOwotICAgIGF1dG8gcmVuZGVyZXIgPSBydW5BbmRP
ZmZzZXQucnVuID8gJnJ1bkFuZE9mZnNldC5ydW4tPnJlbmRlcmVyKCkgOiBub2RlLT5yZW5kZXJl
cigpOworICAgIGF1dG8gYm94QW5kT2Zmc2V0ID0gaW5saW5lQm94QW5kT2Zmc2V0KCk7CisgICAg
YXV0byByZW5kZXJlciA9IGJveEFuZE9mZnNldC5ib3ggPyAmYm94QW5kT2Zmc2V0LmJveC0+cmVu
ZGVyZXIoKSA6IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIHJldHVybiB7IGNvbXB1dGVMb2NhbENhcmV0UmVjdCgqcmVuZGVy
ZXIsIHJ1bkFuZE9mZnNldCksIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4ocmVuZGVyZXIpIH07
CisgICAgcmV0dXJuIHsgY29tcHV0ZUxvY2FsQ2FyZXRSZWN0KCpyZW5kZXJlciwgYm94QW5kT2Zm
c2V0KSwgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihyZW5kZXJlcikgfTsKIH0KIAogSW50UmVj
dCBWaXNpYmxlUG9zaXRpb246OmFic29sdXRlQ2FyZXRCb3VuZHMoYm9vbCogaW5zaWRlRml4ZWQp
IGNvbnN0CkBAIC02NjUsMTEgKzY2NSwxMSBAQCBJbnRSZWN0IFZpc2libGVQb3NpdGlvbjo6YWJz
b2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNpZGVGaXhlZCkgY29uc3QKIAogRmxvYXRSZWN0IFZp
c2libGVQb3NpdGlvbjo6YWJzb2x1dGVTZWxlY3Rpb25Cb3VuZHNGb3JMaW5lKCkgY29uc3QKIHsK
LSAgICBhdXRvIHJ1biA9IGlubGluZVJ1bkFuZE9mZnNldCgpLnJ1bjsKLSAgICBpZiAoIXJ1bikK
KyAgICBhdXRvIGJveCA9IGlubGluZUJveEFuZE9mZnNldCgpLmJveDsKKyAgICBpZiAoIWJveCkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gbGluZSA9IHJ1bi0+bGluZSgpOworICAg
IGF1dG8gbGluZSA9IGJveC0+bGluZSgpOwogICAgIHJldHVybiBsaW5lLT5jb250YWluaW5nQmxv
Y2soKS5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCB7IExpbmVTZWxlY3Rpb246OnBoeXNp
Y2FsUmVjdCgqbGluZSkgfSkuYm91bmRpbmdCb3goKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5kZXggYTkyY2E4MWJjZWZlM2U0NzZjNGM1NDY2MGQ5NzIw
ODRlZWVjZmFjNi4uYWZhOTBmOTE0NDk3NDdhNWM0YjI2ZjkxMmFiNTJhNDM2NThiZTY0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCkBAIC02Nyw4ICs2Nyw4IEBA
IHB1YmxpYzoKICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBoYW5kbGUgW3RhYmxlLCAwXSBj
b3JyZWN0bHkuCiAgICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVlcFBvc2l0aW9uLmlzTm90TnVsbCgpID8gbV9kZWVwUG9zaXRpb24uZGVwcmVjYXRl
ZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDogMDsgfQogCi0gICAgSW5saW5lUnVuQW5k
T2Zmc2V0IGlubGluZVJ1bkFuZE9mZnNldCgpIGNvbnN0OwotICAgIElubGluZVJ1bkFuZE9mZnNl
dCBpbmxpbmVSdW5BbmRPZmZzZXQoVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKSBjb25z
dDsKKyAgICBJbmxpbmVCb3hBbmRPZmZzZXQgaW5saW5lQm94QW5kT2Zmc2V0KCkgY29uc3Q7Cisg
ICAgSW5saW5lQm94QW5kT2Zmc2V0IGlubGluZUJveEFuZE9mZnNldChUZXh0RGlyZWN0aW9uIHBy
aW1hcnlEaXJlY3Rpb24pIGNvbnN0OwogCiAgICAgc3RydWN0IExvY2FsQ2FyZXRSZWN0IHsKICAg
ICAgICAgTGF5b3V0UmVjdCByZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMu
Y3BwCmluZGV4IGZiODY5ZDE3OTEzNzczMDk3YTMwNDc4ODY3OWM5YWNhODg5NDRkYTYuLjJjODA4
NzBlNjZkY2Q3ZWE4NzQ0NTljZTczMGE5YTY4NzlmOTQwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTEyNSw2MCArMTI1LDYwIEBAIHN0YXRpYyBQb3NpdGlv
biBuZXh0TGluZUNhbmRpZGF0ZVBvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzCiAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiB9CiAKLXN0YXRpYyBib29sIGlzVGV4
dE9yTGluZUJyZWFrUnVuKElubGluZUl0ZXJhdG9yOjpMZWFmQm94SXRlcmF0b3IgcnVuKQorc3Rh
dGljIGJvb2wgaXNUZXh0T3JMaW5lQnJlYWtCb3goSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVy
YXRvciBib3gpCiB7Ci0gICAgcmV0dXJuIHJ1biAmJiAocnVuLT5pc1RleHQoKSB8fCBydW4tPnJl
bmRlcmVyKCkuaXNCUigpKTsKKyAgICByZXR1cm4gYm94ICYmIChib3gtPmlzVGV4dCgpIHx8IGJv
eC0+cmVuZGVyZXIoKS5pc0JSKCkpOwogfQogCi1zdGF0aWMgSW5saW5lSXRlcmF0b3I6OkxlYWZC
b3hJdGVyYXRvciBwcmV2aW91c1RleHRPckxpbmVCcmVha1J1bihJbmxpbmVJdGVyYXRvcjo6TGVh
ZkJveEl0ZXJhdG9yIHJ1biwgSW5saW5lSXRlcmF0b3I6OkxpbmVMb2dpY2FsT3JkZXJDYWNoZSYg
b3JkZXJDYWNoZSkKK3N0YXRpYyBJbmxpbmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9yIHByZXZp
b3VzVGV4dE9yTGluZUJyZWFrQm94KElubGluZUl0ZXJhdG9yOjpMZWFmQm94SXRlcmF0b3IgYm94
LCBJbmxpbmVJdGVyYXRvcjo6TGluZUxvZ2ljYWxPcmRlckNhY2hlJiBvcmRlckNhY2hlKQogewot
ICAgIHdoaWxlIChydW4pIHsKLSAgICAgICAgcnVuID0gSW5saW5lSXRlcmF0b3I6OnByZXZpb3Vz
TGVhZk9uTGluZUluTG9naWNhbE9yZGVyKHJ1biwgb3JkZXJDYWNoZSk7Ci0gICAgICAgIGlmIChp
c1RleHRPckxpbmVCcmVha1J1bihydW4pKQotICAgICAgICAgICAgcmV0dXJuIHJ1bjsKKyAgICB3
aGlsZSAoYm94KSB7CisgICAgICAgIGJveCA9IElubGluZUl0ZXJhdG9yOjpwcmV2aW91c0xlYWZP
bkxpbmVJbkxvZ2ljYWxPcmRlcihib3gsIG9yZGVyQ2FjaGUpOworICAgICAgICBpZiAoaXNUZXh0
T3JMaW5lQnJlYWtCb3goYm94KSkKKyAgICAgICAgICAgIHJldHVybiBib3g7CiAgICAgfQogICAg
IHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBJbmxpbmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9y
IG5leHRUZXh0T3JMaW5lQnJlYWtSdW4oSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBy
dW4sIElubGluZUl0ZXJhdG9yOjpMaW5lTG9naWNhbE9yZGVyQ2FjaGUmIG9yZGVyQ2FjaGUpCitz
dGF0aWMgSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBuZXh0VGV4dE9yTGluZUJyZWFr
Qm94KElubGluZUl0ZXJhdG9yOjpMZWFmQm94SXRlcmF0b3IgYm94LCBJbmxpbmVJdGVyYXRvcjo6
TGluZUxvZ2ljYWxPcmRlckNhY2hlJiBvcmRlckNhY2hlKQogewotICAgIHdoaWxlIChydW4pIHsK
LSAgICAgICAgcnVuID0gSW5saW5lSXRlcmF0b3I6Om5leHRMZWFmT25MaW5lSW5Mb2dpY2FsT3Jk
ZXIocnVuLCBvcmRlckNhY2hlKTsKLSAgICAgICAgaWYgKGlzVGV4dE9yTGluZUJyZWFrUnVuKHJ1
bikpCi0gICAgICAgICAgICByZXR1cm4gcnVuOworICAgIHdoaWxlIChib3gpIHsKKyAgICAgICAg
Ym94ID0gSW5saW5lSXRlcmF0b3I6Om5leHRMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXIoYm94LCBv
cmRlckNhY2hlKTsKKyAgICAgICAgaWYgKGlzVGV4dE9yTGluZUJyZWFrQm94KGJveCkpCisgICAg
ICAgICAgICByZXR1cm4gYm94OwogICAgIH0KICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMg
SW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBzdGFydFRleHRPckxpbmVCcmVha1J1bihJ
bmxpbmVJdGVyYXRvcjo6TGluZUl0ZXJhdG9yIGxpbmUsIElubGluZUl0ZXJhdG9yOjpMaW5lTG9n
aWNhbE9yZGVyQ2FjaGUmIG9yZGVyQ2FjaGUpCitzdGF0aWMgSW5saW5lSXRlcmF0b3I6OkxlYWZC
b3hJdGVyYXRvciBzdGFydFRleHRPckxpbmVCcmVha0JveChJbmxpbmVJdGVyYXRvcjo6TGluZUl0
ZXJhdG9yIGxpbmUsIElubGluZUl0ZXJhdG9yOjpMaW5lTG9naWNhbE9yZGVyQ2FjaGUmIG9yZGVy
Q2FjaGUpCiB7Ci0gICAgYXV0byBydW4gPSBJbmxpbmVJdGVyYXRvcjo6Zmlyc3RMZWFmT25MaW5l
SW5Mb2dpY2FsT3JkZXIobGluZSwgb3JkZXJDYWNoZSk7Ci0gICAgaWYgKGlzVGV4dE9yTGluZUJy
ZWFrUnVuKHJ1bikpCi0gICAgICAgIHJldHVybiBydW47Ci0gICAgcmV0dXJuIG5leHRUZXh0T3JM
aW5lQnJlYWtSdW4ocnVuLCBvcmRlckNhY2hlKTsKKyAgICBhdXRvIGJveCA9IElubGluZUl0ZXJh
dG9yOjpmaXJzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcihsaW5lLCBvcmRlckNhY2hlKTsKKyAg
ICBpZiAoaXNUZXh0T3JMaW5lQnJlYWtCb3goYm94KSkKKyAgICAgICAgcmV0dXJuIGJveDsKKyAg
ICByZXR1cm4gbmV4dFRleHRPckxpbmVCcmVha0JveChib3gsIG9yZGVyQ2FjaGUpOwogfQogCi1z
dGF0aWMgSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBlbmRUZXh0T3JMaW5lQnJlYWtS
dW4oSW5saW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvciBsaW5lLCBJbmxpbmVJdGVyYXRvcjo6TGlu
ZUxvZ2ljYWxPcmRlckNhY2hlJiBvcmRlckNhY2hlKQorc3RhdGljIElubGluZUl0ZXJhdG9yOjpM
ZWFmQm94SXRlcmF0b3IgZW5kVGV4dE9yTGluZUJyZWFrQm94KElubGluZUl0ZXJhdG9yOjpMaW5l
SXRlcmF0b3IgbGluZSwgSW5saW5lSXRlcmF0b3I6OkxpbmVMb2dpY2FsT3JkZXJDYWNoZSYgb3Jk
ZXJDYWNoZSkKIHsKLSAgICBhdXRvIHJ1biA9IElubGluZUl0ZXJhdG9yOjpsYXN0TGVhZk9uTGlu
ZUluTG9naWNhbE9yZGVyKGxpbmUsIG9yZGVyQ2FjaGUpOwotICAgIGlmIChpc1RleHRPckxpbmVC
cmVha1J1bihydW4pKQotICAgICAgICByZXR1cm4gcnVuOwotICAgIHJldHVybiBwcmV2aW91c1Rl
eHRPckxpbmVCcmVha1J1bihydW4sIG9yZGVyQ2FjaGUpOworICAgIGF1dG8gYm94ID0gSW5saW5l
SXRlcmF0b3I6Omxhc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXIobGluZSwgb3JkZXJDYWNoZSk7
CisgICAgaWYgKGlzVGV4dE9yTGluZUJyZWFrQm94KGJveCkpCisgICAgICAgIHJldHVybiBib3g7
CisgICAgcmV0dXJuIHByZXZpb3VzVGV4dE9yTGluZUJyZWFrQm94KGJveCwgb3JkZXJDYWNoZSk7
CiB9CiAKLXN0YXRpYyBjb25zdCBJbmxpbmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9yIGxvZ2lj
YWxseVByZXZpb3VzUnVuKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBJ
bmxpbmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9yIHN0YXJ0UnVuLCBJbmxpbmVJdGVyYXRvcjo6
TGluZUxvZ2ljYWxPcmRlckNhY2hlJiBvcmRlckNhY2hlLCBib29sJiBwcmV2aW91c0JveEluRGlm
ZmVyZW50TGluZSkKK3N0YXRpYyBjb25zdCBJbmxpbmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9y
IGxvZ2ljYWxseVByZXZpb3VzQm94KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0
aW9uLCBJbmxpbmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9yIHN0YXJ0Qm94LCBJbmxpbmVJdGVy
YXRvcjo6TGluZUxvZ2ljYWxPcmRlckNhY2hlJiBvcmRlckNhY2hlLCBib29sJiBwcmV2aW91c0Jv
eEluRGlmZmVyZW50TGluZSkKIHsKLSAgICBpZiAoYXV0byBwcmV2aW91c1J1biA9IHByZXZpb3Vz
VGV4dE9yTGluZUJyZWFrUnVuKHN0YXJ0UnVuLCBvcmRlckNhY2hlKSkKLSAgICAgICAgcmV0dXJu
IHByZXZpb3VzUnVuOworICAgIGlmIChhdXRvIHByZXZpb3VzQm94ID0gcHJldmlvdXNUZXh0T3JM
aW5lQnJlYWtCb3goc3RhcnRCb3gsIG9yZGVyQ2FjaGUpKQorICAgICAgICByZXR1cm4gcHJldmlv
dXNCb3g7CiAKLSAgICBpZiAoYXV0byBwcmV2aW91c0xpbmUgPSBzdGFydFJ1bi0+bGluZSgpLT5w
cmV2aW91cygpKSB7CisgICAgaWYgKGF1dG8gcHJldmlvdXNMaW5lID0gc3RhcnRCb3gtPmxpbmUo
KS0+cHJldmlvdXMoKSkgewogICAgICAgICAvLyBGSVhNRTogV2h5IGlzbid0IHByZXZpb3VzQm94
SW5EaWZmZXJlbnRMaW5lIHNldCBoZXJlPwotICAgICAgICBpZiAoYXV0byBwcmV2aW91c1J1biA9
IGVuZFRleHRPckxpbmVCcmVha1J1bihwcmV2aW91c0xpbmUsIG9yZGVyQ2FjaGUpKQotICAgICAg
ICAgICAgcmV0dXJuIHByZXZpb3VzUnVuOworICAgICAgICBpZiAoYXV0byBwcmV2aW91c0JveCA9
IGVuZFRleHRPckxpbmVCcmVha0JveChwcmV2aW91c0xpbmUsIG9yZGVyQ2FjaGUpKQorICAgICAg
ICAgICAgcmV0dXJuIHByZXZpb3VzQm94OwogICAgIH0KIAogICAgIHdoaWxlICgxKSB7Ci0gICAg
ICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IHN0YXJ0UnVuLT5yZW5kZXJlcigpLm5vblBzZXVkb05vZGUo
KTsKKyAgICAgICAgYXV0byogc3RhcnROb2RlID0gc3RhcnRCb3gtPnJlbmRlcmVyKCkubm9uUHNl
dWRvTm9kZSgpOwogICAgICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgICAgIGJyZWFrOwog
CkBAIC0xOTEsMzIgKzE5MSwzMiBAQCBzdGF0aWMgY29uc3QgSW5saW5lSXRlcmF0b3I6OkxlYWZC
b3hJdGVyYXRvciBsb2dpY2FsbHlQcmV2aW91c1J1bihjb25zdCBWaXNpYmxlUAogICAgICAgICBp
ZiAoIXByZXZpb3VzTGluZSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGlmIChwcmV2
aW91c0xpbmUgIT0gc3RhcnRSdW4tPmxpbmUoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gcHJl
dmlvdXNSdW4gPSBlbmRUZXh0T3JMaW5lQnJlYWtSdW4ocHJldmlvdXNMaW5lLCBvcmRlckNhY2hl
KSkgeworICAgICAgICBpZiAocHJldmlvdXNMaW5lICE9IHN0YXJ0Qm94LT5saW5lKCkpIHsKKyAg
ICAgICAgICAgIGlmIChhdXRvIHByZXZpb3VzQm94ID0gZW5kVGV4dE9yTGluZUJyZWFrQm94KHBy
ZXZpb3VzTGluZSwgb3JkZXJDYWNoZSkpIHsKICAgICAgICAgICAgICAgICBwcmV2aW91c0JveElu
RGlmZmVyZW50TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzUnVu
OworICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0JveDsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgIHN0YXJ0UnVuID0gSW5saW5lSXRlcmF0b3I6OmZpcnN0TGVhZk9u
TGluZUluTG9naWNhbE9yZGVyKHByZXZpb3VzTGluZSwgb3JkZXJDYWNoZSk7CisgICAgICAgIHN0
YXJ0Qm94ID0gSW5saW5lSXRlcmF0b3I6OmZpcnN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyKHBy
ZXZpb3VzTGluZSwgb3JkZXJDYWNoZSk7CiAgICAgfQogICAgIHJldHVybiB7IH07CiB9CiAKIAot
c3RhdGljIGNvbnN0IElubGluZUl0ZXJhdG9yOjpMZWFmQm94SXRlcmF0b3IgbG9naWNhbGx5TmV4
dFJ1bihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgSW5saW5lSXRlcmF0
b3I6OkxlYWZCb3hJdGVyYXRvciBzdGFydFJ1biwgSW5saW5lSXRlcmF0b3I6OkxpbmVMb2dpY2Fs
T3JkZXJDYWNoZSYgb3JkZXJDYWNoZSwgYm9vbCYgbmV4dEJveEluRGlmZmVyZW50TGluZSkKK3N0
YXRpYyBjb25zdCBJbmxpbmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9yIGxvZ2ljYWxseU5leHRC
b3goY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIElubGluZUl0ZXJhdG9y
OjpMZWFmQm94SXRlcmF0b3Igc3RhcnRCb3gsIElubGluZUl0ZXJhdG9yOjpMaW5lTG9naWNhbE9y
ZGVyQ2FjaGUmIG9yZGVyQ2FjaGUsIGJvb2wmIG5leHRCb3hJbkRpZmZlcmVudExpbmUpCiB7Ci0g
ICAgaWYgKGF1dG8gbmV4dFJ1biA9IG5leHRUZXh0T3JMaW5lQnJlYWtSdW4oc3RhcnRSdW4sIG9y
ZGVyQ2FjaGUpKQotICAgICAgICByZXR1cm4gbmV4dFJ1bjsKKyAgICBpZiAoYXV0byBuZXh0Qm94
ID0gbmV4dFRleHRPckxpbmVCcmVha0JveChzdGFydEJveCwgb3JkZXJDYWNoZSkpCisgICAgICAg
IHJldHVybiBuZXh0Qm94OwogCi0gICAgaWYgKGF1dG8gbmV4dExpbmUgPSBzdGFydFJ1bi0+bGlu
ZSgpLT5uZXh0KCkpIHsKKyAgICBpZiAoYXV0byBuZXh0TGluZSA9IHN0YXJ0Qm94LT5saW5lKCkt
Pm5leHQoKSkgewogICAgICAgICAvLyBGSVhNRTogV2h5IGlzbid0IHByZXZpb3VzQm94SW5EaWZm
ZXJlbnRMaW5lIHNldCBoZXJlPwotICAgICAgICBpZiAoYXV0byBuZXh0UnVuID0gc3RhcnRUZXh0
T3JMaW5lQnJlYWtSdW4obmV4dExpbmUsIG9yZGVyQ2FjaGUpKQotICAgICAgICAgICAgcmV0dXJu
IG5leHRSdW47CisgICAgICAgIGlmIChhdXRvIG5leHRCb3ggPSBzdGFydFRleHRPckxpbmVCcmVh
a0JveChuZXh0TGluZSwgb3JkZXJDYWNoZSkpCisgICAgICAgICAgICByZXR1cm4gbmV4dEJveDsK
ICAgICB9CiAKICAgICB3aGlsZSAoMSkgewotICAgICAgICBhdXRvKiBzdGFydE5vZGUgPSBzdGFy
dFJ1bi0+cmVuZGVyZXIoKS5ub25Qc2V1ZG9Ob2RlKCk7CisgICAgICAgIGF1dG8qIHN0YXJ0Tm9k
ZSA9IHN0YXJ0Qm94LT5yZW5kZXJlcigpLm5vblBzZXVkb05vZGUoKTsKICAgICAgICAgaWYgKCFz
dGFydE5vZGUpCiAgICAgICAgICAgICBicmVhazsKIApAQCAtMjI5LDYyICsyMjksNjIgQEAgc3Rh
dGljIGNvbnN0IElubGluZUl0ZXJhdG9yOjpMZWFmQm94SXRlcmF0b3IgbG9naWNhbGx5TmV4dFJ1
bihjb25zdCBWaXNpYmxlUG9zaXQKICAgICAgICAgaWYgKCFuZXh0TGluZSkKICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgIGlmIChuZXh0TGluZSAhPSBzdGFydFJ1bi0+bGluZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAoYXV0byBuZXh0UnVuID0gc3RhcnRUZXh0T3JMaW5lQnJlYWtSdW4obmV4
dExpbmUsIG9yZGVyQ2FjaGUpKSB7CisgICAgICAgIGlmIChuZXh0TGluZSAhPSBzdGFydEJveC0+
bGluZSgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBuZXh0Qm94ID0gc3RhcnRUZXh0T3JMaW5l
QnJlYWtCb3gobmV4dExpbmUsIG9yZGVyQ2FjaGUpKSB7CiAgICAgICAgICAgICAgICAgbmV4dEJv
eEluRGlmZmVyZW50TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5leHRSdW47
CisgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRCb3g7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICBzdGFydFJ1biA9IElubGluZUl0ZXJhdG9yOjpsYXN0TGVhZk9uTGluZUlu
TG9naWNhbE9yZGVyV2l0aE5vZGUobmV4dExpbmUsIG9yZGVyQ2FjaGUpOworICAgICAgICBzdGFy
dEJveCA9IElubGluZUl0ZXJhdG9yOjpsYXN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5v
ZGUobmV4dExpbmUsIG9yZGVyQ2FjaGUpOwogICAgIH0KICAgICByZXR1cm4geyB9OwogfQogCi1z
dGF0aWMgVUJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWluT2Zmc2V0Qm91bmRh
cnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIElubGluZUl0ZXJhdG9y
OjpUZXh0Qm94SXRlcmF0b3IgdGV4dFJ1biwKLSAgICB1bnNpZ25lZCYgcHJldmlvdXNSdW5MZW5n
dGgsIGJvb2wmIHByZXZpb3VzUnVuSW5EaWZmZXJlbnRMaW5lLCBWZWN0b3I8VUNoYXIsIDEwMjQ+
JiBzdHJpbmcpCitzdGF0aWMgVUJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWlu
T2Zmc2V0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIElu
bGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IgdGV4dEJveCwKKyAgICB1bnNpZ25lZCYgcHJl
dmlvdXNCb3hMZW5ndGgsIGJvb2wmIHByZXZpb3VzQm94SW5EaWZmZXJlbnRMaW5lLCBWZWN0b3I8
VUNoYXIsIDEwMjQ+JiBzdHJpbmcpCiB7Ci0gICAgcHJldmlvdXNSdW5JbkRpZmZlcmVudExpbmUg
PSBmYWxzZTsKKyAgICBwcmV2aW91c0JveEluRGlmZmVyZW50TGluZSA9IGZhbHNlOwogCiAgICAg
SW5saW5lSXRlcmF0b3I6OkxpbmVMb2dpY2FsT3JkZXJDYWNoZSBvcmRlckNhY2hlOwotICAgIGF1
dG8gcHJldmlvdXNSdW4gPSBsb2dpY2FsbHlQcmV2aW91c1J1bih2aXNpYmxlUG9zaXRpb24sIHRl
eHRSdW4sIG9yZGVyQ2FjaGUsIHByZXZpb3VzUnVuSW5EaWZmZXJlbnRMaW5lKTsKLSAgICB3aGls
ZSAocHJldmlvdXNSdW4gJiYgIXByZXZpb3VzUnVuLT5pc1RleHQoKSkgewotICAgICAgICBBU1NF
UlQocHJldmlvdXNSdW4tPnJlbmRlcmVyKCkuaXNCUigpKTsKLSAgICAgICAgcHJldmlvdXNSdW5J
bkRpZmZlcmVudExpbmUgPSB0cnVlOwotICAgICAgICBwcmV2aW91c1J1biA9IGxvZ2ljYWxseVBy
ZXZpb3VzUnVuKHZpc2libGVQb3NpdGlvbiwgcHJldmlvdXNSdW4sIG9yZGVyQ2FjaGUsIHByZXZp
b3VzUnVuSW5EaWZmZXJlbnRMaW5lKTsKKyAgICBhdXRvIHByZXZpb3VzQm94ID0gbG9naWNhbGx5
UHJldmlvdXNCb3godmlzaWJsZVBvc2l0aW9uLCB0ZXh0Qm94LCBvcmRlckNhY2hlLCBwcmV2aW91
c0JveEluRGlmZmVyZW50TGluZSk7CisgICAgd2hpbGUgKHByZXZpb3VzQm94ICYmICFwcmV2aW91
c0JveC0+aXNUZXh0KCkpIHsKKyAgICAgICAgQVNTRVJUKHByZXZpb3VzQm94LT5yZW5kZXJlcigp
LmlzQlIoKSk7CisgICAgICAgIHByZXZpb3VzQm94SW5EaWZmZXJlbnRMaW5lID0gdHJ1ZTsKKyAg
ICAgICAgcHJldmlvdXNCb3ggPSBsb2dpY2FsbHlQcmV2aW91c0JveCh2aXNpYmxlUG9zaXRpb24s
IHByZXZpb3VzQm94LCBvcmRlckNhY2hlLCBwcmV2aW91c0JveEluRGlmZmVyZW50TGluZSk7CiAg
ICAgfQogCiAgICAgc3RyaW5nLmNsZWFyKCk7CiAKLSAgICBpZiAocHJldmlvdXNSdW4pIHsKLSAg
ICAgICAgYXV0byYgcHJldmlvdXNUZXh0UnVuID0gZG93bmNhc3Q8SW5saW5lSXRlcmF0b3I6OlRl
eHRCb3hJdGVyYXRvcj4ocHJldmlvdXNSdW4pOwotICAgICAgICBwcmV2aW91c1J1bkxlbmd0aCA9
IHByZXZpb3VzVGV4dFJ1bi0+bGVuZ3RoKCk7Ci0gICAgICAgIGFwcGVuZChzdHJpbmcsIHByZXZp
b3VzVGV4dFJ1bi0+dGV4dCgpKTsKKyAgICBpZiAocHJldmlvdXNCb3gpIHsKKyAgICAgICAgYXV0
byYgcHJldmlvdXNUZXh0Qm94ID0gZG93bmNhc3Q8SW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVy
YXRvcj4ocHJldmlvdXNCb3gpOworICAgICAgICBwcmV2aW91c0JveExlbmd0aCA9IHByZXZpb3Vz
VGV4dEJveC0+bGVuZ3RoKCk7CisgICAgICAgIGFwcGVuZChzdHJpbmcsIHByZXZpb3VzVGV4dEJv
eC0+dGV4dCgpKTsKICAgICB9Ci0gICAgYXBwZW5kKHN0cmluZywgdGV4dFJ1bi0+dGV4dCgpKTsK
KyAgICBhcHBlbmQoc3RyaW5nLCB0ZXh0Qm94LT50ZXh0KCkpOwogCiAgICAgcmV0dXJuIHdvcmRC
cmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcoc3RyaW5nLmRhdGEoKSwgc3RyaW5nLnNpemUoKSkpOwog
fQogCi1zdGF0aWMgVUJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0
Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIElubGluZUl0
ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IgdGV4dFJ1biwKLSAgICBib29sJiBuZXh0UnVuSW5EaWZm
ZXJlbnRMaW5lLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiBzdHJpbmcpCitzdGF0aWMgVUJyZWFrSXRl
cmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0
b3IgdGV4dEJveCwKKyAgICBib29sJiBuZXh0Qm94SW5EaWZmZXJlbnRMaW5lLCBWZWN0b3I8VUNo
YXIsIDEwMjQ+JiBzdHJpbmcpCiB7Ci0gICAgbmV4dFJ1bkluRGlmZmVyZW50TGluZSA9IGZhbHNl
OworICAgIG5leHRCb3hJbkRpZmZlcmVudExpbmUgPSBmYWxzZTsKIAogICAgIElubGluZUl0ZXJh
dG9yOjpMaW5lTG9naWNhbE9yZGVyQ2FjaGUgb3JkZXJDYWNoZTsKLSAgICBhdXRvIG5leHRSdW4g
PSBsb2dpY2FsbHlOZXh0UnVuKHZpc2libGVQb3NpdGlvbiwgdGV4dFJ1biwgb3JkZXJDYWNoZSwg
bmV4dFJ1bkluRGlmZmVyZW50TGluZSk7Ci0gICAgd2hpbGUgKG5leHRSdW4gJiYgIW5leHRSdW4t
PmlzVGV4dCgpKSB7Ci0gICAgICAgIEFTU0VSVChuZXh0UnVuLT5yZW5kZXJlcigpLmlzQlIoKSk7
Ci0gICAgICAgIG5leHRSdW5JbkRpZmZlcmVudExpbmUgPSB0cnVlOwotICAgICAgICBuZXh0UnVu
ID0gbG9naWNhbGx5TmV4dFJ1bih2aXNpYmxlUG9zaXRpb24sIG5leHRSdW4sIG9yZGVyQ2FjaGUs
IG5leHRSdW5JbkRpZmZlcmVudExpbmUpOworICAgIGF1dG8gbmV4dEJveCA9IGxvZ2ljYWxseU5l
eHRCb3godmlzaWJsZVBvc2l0aW9uLCB0ZXh0Qm94LCBvcmRlckNhY2hlLCBuZXh0Qm94SW5EaWZm
ZXJlbnRMaW5lKTsKKyAgICB3aGlsZSAobmV4dEJveCAmJiAhbmV4dEJveC0+aXNUZXh0KCkpIHsK
KyAgICAgICAgQVNTRVJUKG5leHRCb3gtPnJlbmRlcmVyKCkuaXNCUigpKTsKKyAgICAgICAgbmV4
dEJveEluRGlmZmVyZW50TGluZSA9IHRydWU7CisgICAgICAgIG5leHRCb3ggPSBsb2dpY2FsbHlO
ZXh0Qm94KHZpc2libGVQb3NpdGlvbiwgbmV4dEJveCwgb3JkZXJDYWNoZSwgbmV4dEJveEluRGlm
ZmVyZW50TGluZSk7CiAgICAgfQogCiAgICAgc3RyaW5nLmNsZWFyKCk7Ci0gICAgYXBwZW5kKHN0
cmluZywgdGV4dFJ1bi0+dGV4dCgpKTsKKyAgICBhcHBlbmQoc3RyaW5nLCB0ZXh0Qm94LT50ZXh0
KCkpOwogCi0gICAgaWYgKG5leHRSdW4pIHsKLSAgICAgICAgYXV0byYgbmV4dFRleHRSdW4gPSBk
b3duY2FzdDxJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yPihuZXh0UnVuKTsKLSAgICAg
ICAgYXBwZW5kKHN0cmluZywgbmV4dFRleHRSdW4tPnRleHQoKSk7CisgICAgaWYgKG5leHRCb3gp
IHsKKyAgICAgICAgYXV0byYgbmV4dFRleHRCb3ggPSBkb3duY2FzdDxJbmxpbmVJdGVyYXRvcjo6
VGV4dEJveEl0ZXJhdG9yPihuZXh0Qm94KTsKKyAgICAgICAgYXBwZW5kKHN0cmluZywgbmV4dFRl
eHRCb3gtPnRleHQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHdvcmRCcmVha0l0ZXJhdG9yKFN0
cmluZ1ZpZXcoc3RyaW5nLmRhdGEoKSwgc3RyaW5nLnNpemUoKSkpOwpAQCAtMzE4LDcgKzMxOCw3
IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzdWFsV29yZFBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uCiAgICAgdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVp
dmFsZW50KCkuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CiAKICAgICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNs
b3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgSW5saW5l
SXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBwcmV2aW91c2x5VmlzaXRlZFJ1bjsKKyAgICBJbmxp
bmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9yIHByZXZpb3VzbHlWaXNpdGVkQm94OwogICAgIFZp
c2libGVQb3NpdGlvbiBjdXJyZW50ID0gdmlzaWJsZVBvc2l0aW9uOwogICAgIHN0ZDo6b3B0aW9u
YWw8VmlzaWJsZVBvc2l0aW9uPiBwcmV2aW91c1Bvc2l0aW9uOwogICAgIFVCcmVha0l0ZXJhdG9y
KiBpdGVyID0gbnVsbHB0cjsKQEAgLTMzMyw1MCArMzMzLDUwIEBAIHN0YXRpYyBWaXNpYmxlUG9z
aXRpb24gdmlzdWFsV29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBv
c2l0aW9uCiAgICAgICAgIGlmIChwcmV2aW91c1Bvc2l0aW9uICYmIGFkamFjZW50Q2hhcmFjdGVy
UG9zaXRpb24gPT0gcHJldmlvdXNQb3NpdGlvbi52YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOwogICAgIAotICAgICAgICAvLyBGSVhNRTogV2h5IGZvcmNlIHRo
ZSB1c2Ugb2YgdXBzdHJlYW0gYWZmaW5pdHkgaGVyZSBpbnN0ZWFkIG9mIFZpc2libGVQb3NpdGlv
bjo6aW5saW5lUnVuQW5kT2Zmc2V0LCB3aGljaCB3aWxsIGdldCBhZmZpbml0eSBmcm9tIGFkamFj
ZW50Q2hhcmFjdGVyUG9zaXRpb24/Ci0gICAgICAgIGF1dG8gW3J1biwgb2Zmc2V0SW5SdW5dID0g
YWRqYWNlbnRDaGFyYWN0ZXJQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmlubGluZVJ1bkFuZE9m
ZnNldChBZmZpbml0eTo6VXBzdHJlYW0pOworICAgICAgICAvLyBGSVhNRTogV2h5IGZvcmNlIHRo
ZSB1c2Ugb2YgdXBzdHJlYW0gYWZmaW5pdHkgaGVyZSBpbnN0ZWFkIG9mIFZpc2libGVQb3NpdGlv
bjo6aW5saW5lQm94QW5kT2Zmc2V0LCB3aGljaCB3aWxsIGdldCBhZmZpbml0eSBmcm9tIGFkamFj
ZW50Q2hhcmFjdGVyUG9zaXRpb24/CisgICAgICAgIGF1dG8gW2JveCwgb2Zmc2V0SW5Cb3hdID0g
YWRqYWNlbnRDaGFyYWN0ZXJQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmlubGluZUJveEFuZE9m
ZnNldChBZmZpbml0eTo6VXBzdHJlYW0pOwogICAgIAotICAgICAgICBpZiAoIXJ1bikKKyAgICAg
ICAgaWYgKCFib3gpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCFydW4tPmlzVGV4
dCgpKSB7CisgICAgICAgIGlmICghYm94LT5pc1RleHQoKSkgewogICAgICAgICAgICAgY3VycmVu
dCA9IGFkamFjZW50Q2hhcmFjdGVyUG9zaXRpb247CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGF1dG8mIHRleHRSdW4gPSBkb3duY2FzdDxJbmxpbmVJdGVyYXRv
cjo6VGV4dEJveEl0ZXJhdG9yPihydW4pOwotICAgICAgICB1bnNpZ25lZCBwcmV2aW91c1J1bkxl
bmd0aCA9IDA7Ci0gICAgICAgIGJvb2wgcHJldmlvdXNSdW5JbkRpZmZlcmVudExpbmUgPSBmYWxz
ZTsKLSAgICAgICAgYm9vbCBuZXh0UnVuSW5EaWZmZXJlbnRMaW5lID0gZmFsc2U7Ci0gICAgICAg
IGJvb2wgbW92aW5nSW50b05ld1J1biA9IHByZXZpb3VzbHlWaXNpdGVkUnVuICE9IHJ1bjsKLQot
ICAgICAgICBpZiAob2Zmc2V0SW5SdW4gPT0gdGV4dFJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCkp
Ci0gICAgICAgICAgICBpdGVyID0gd29yZEJyZWFrSXRlcmF0b3JGb3JNaW5PZmZzZXRCb3VuZGFy
eShhZGphY2VudENoYXJhY3RlclBvc2l0aW9uLCB0ZXh0UnVuLCBwcmV2aW91c1J1bkxlbmd0aCwg
cHJldmlvdXNSdW5JbkRpZmZlcmVudExpbmUsIHN0cmluZyk7Ci0gICAgICAgIGVsc2UgaWYgKG9m
ZnNldEluUnVuID09IHRleHRSdW4tPm1heGltdW1DYXJldE9mZnNldCgpKQotICAgICAgICAgICAg
aXRlciA9IHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkoYWRqYWNlbnRDaGFy
YWN0ZXJQb3NpdGlvbiwgdGV4dFJ1biwgbmV4dFJ1bkluRGlmZmVyZW50TGluZSwgc3RyaW5nKTsK
LSAgICAgICAgZWxzZSBpZiAobW92aW5nSW50b05ld1J1bikgewotICAgICAgICAgICAgaXRlciA9
IHdvcmRCcmVha0l0ZXJhdG9yKHRleHRSdW4tPnRleHQoKSk7Ci0gICAgICAgICAgICBwcmV2aW91
c2x5VmlzaXRlZFJ1biA9IHJ1bjsKKyAgICAgICAgYXV0byYgdGV4dEJveCA9IGRvd25jYXN0PElu
bGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3I+KGJveCk7CisgICAgICAgIHVuc2lnbmVkIHBy
ZXZpb3VzQm94TGVuZ3RoID0gMDsKKyAgICAgICAgYm9vbCBwcmV2aW91c0JveEluRGlmZmVyZW50
TGluZSA9IGZhbHNlOworICAgICAgICBib29sIG5leHRCb3hJbkRpZmZlcmVudExpbmUgPSBmYWxz
ZTsKKyAgICAgICAgYm9vbCBtb3ZpbmdJbnRvTmV3Qm94ID0gcHJldmlvdXNseVZpc2l0ZWRCb3gg
IT0gYm94OworCisgICAgICAgIGlmIChvZmZzZXRJbkJveCA9PSB0ZXh0Qm94LT5taW5pbXVtQ2Fy
ZXRPZmZzZXQoKSkKKyAgICAgICAgICAgIGl0ZXIgPSB3b3JkQnJlYWtJdGVyYXRvckZvck1pbk9m
ZnNldEJvdW5kYXJ5KGFkamFjZW50Q2hhcmFjdGVyUG9zaXRpb24sIHRleHRCb3gsIHByZXZpb3Vz
Qm94TGVuZ3RoLCBwcmV2aW91c0JveEluRGlmZmVyZW50TGluZSwgc3RyaW5nKTsKKyAgICAgICAg
ZWxzZSBpZiAob2Zmc2V0SW5Cb3ggPT0gdGV4dEJveC0+bWF4aW11bUNhcmV0T2Zmc2V0KCkpCisg
ICAgICAgICAgICBpdGVyID0gd29yZEJyZWFrSXRlcmF0b3JGb3JNYXhPZmZzZXRCb3VuZGFyeShh
ZGphY2VudENoYXJhY3RlclBvc2l0aW9uLCB0ZXh0Qm94LCBuZXh0Qm94SW5EaWZmZXJlbnRMaW5l
LCBzdHJpbmcpOworICAgICAgICBlbHNlIGlmIChtb3ZpbmdJbnRvTmV3Qm94KSB7CisgICAgICAg
ICAgICBpdGVyID0gd29yZEJyZWFrSXRlcmF0b3IodGV4dEJveC0+dGV4dCgpKTsKKyAgICAgICAg
ICAgIHByZXZpb3VzbHlWaXNpdGVkQm94ID0gYm94OwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFpdGVyKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgdWJya19maXJzdChpdGVyKTsK
LSAgICAgICAgaW50IG9mZnNldEluSXRlcmF0b3IgPSBvZmZzZXRJblJ1biAtIHRleHRSdW4tPnN0
YXJ0KCkgKyBwcmV2aW91c1J1bkxlbmd0aDsKKyAgICAgICAgaW50IG9mZnNldEluSXRlcmF0b3Ig
PSBvZmZzZXRJbkJveCAtIHRleHRCb3gtPnN0YXJ0KCkgKyBwcmV2aW91c0JveExlbmd0aDsKIAog
ICAgICAgICBib29sIGlzV29yZEJyZWFrOwotICAgICAgICBib29sIGJveEhhc1NhbWVEaXJlY3Rp
b25hbGl0eUFzQmxvY2sgPSBydW4tPmRpcmVjdGlvbigpID09IGJsb2NrRGlyZWN0aW9uOwotICAg
ICAgICBib29sIG1vdmluZ0JhY2t3YXJkID0gKGRpcmVjdGlvbiA9PSBNb3ZlTGVmdCAmJiBydW4t
PmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUikgfHwgKGRpcmVjdGlvbiA9PSBNb3Zl
UmlnaHQgJiYgcnVuLT5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpOworICAgICAg
ICBib29sIGJveEhhc1NhbWVEaXJlY3Rpb25hbGl0eUFzQmxvY2sgPSBib3gtPmRpcmVjdGlvbigp
ID09IGJsb2NrRGlyZWN0aW9uOworICAgICAgICBib29sIG1vdmluZ0JhY2t3YXJkID0gKGRpcmVj
dGlvbiA9PSBNb3ZlTGVmdCAmJiBib3gtPmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxU
UikgfHwgKGRpcmVjdGlvbiA9PSBNb3ZlUmlnaHQgJiYgYm94LT5kaXJlY3Rpb24oKSA9PSBUZXh0
RGlyZWN0aW9uOjpSVEwpOwogICAgICAgICBpZiAoKHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQg
JiYgYm94SGFzU2FtZURpcmVjdGlvbmFsaXR5QXNCbG9jaykKICAgICAgICAgICAgIHx8ICghc2tp
cHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCAmJiBtb3ZpbmdCYWNrd2FyZCkpIHsKLSAgICAgICAgICAg
IGJvb2wgbG9naWNhbFN0YXJ0SW5SZW5kZXJlciA9IG9mZnNldEluUnVuID09IHRleHRSdW4tPnN0
YXJ0KCkgJiYgcHJldmlvdXNSdW5JbkRpZmZlcmVudExpbmU7CisgICAgICAgICAgICBib29sIGxv
Z2ljYWxTdGFydEluUmVuZGVyZXIgPSBvZmZzZXRJbkJveCA9PSB0ZXh0Qm94LT5zdGFydCgpICYm
IHByZXZpb3VzQm94SW5EaWZmZXJlbnRMaW5lOwogICAgICAgICAgICAgaXNXb3JkQnJlYWsgPSBp
c0xvZ2ljYWxTdGFydE9mV29yZChpdGVyLCBvZmZzZXRJbkl0ZXJhdG9yLCBsb2dpY2FsU3RhcnRJ
blJlbmRlcmVyKTsKLSAgICAgICAgICAgIGlmIChpc1dvcmRCcmVhayAmJiBvZmZzZXRJblJ1biA9
PSBydW4tPm1heGltdW1DYXJldE9mZnNldCgpICYmIG5leHRSdW5JbkRpZmZlcmVudExpbmUpCisg
ICAgICAgICAgICBpZiAoaXNXb3JkQnJlYWsgJiYgb2Zmc2V0SW5Cb3ggPT0gYm94LT5tYXhpbXVt
Q2FyZXRPZmZzZXQoKSAmJiBuZXh0Qm94SW5EaWZmZXJlbnRMaW5lKQogICAgICAgICAgICAgICAg
IGlzV29yZEJyZWFrID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBib29s
IGxvZ2ljYWxFbmRJblJlbmRlcmVyID0gb2Zmc2V0SW5SdW4gPT0gdGV4dFJ1bi0+ZW5kKCkgJiYg
bmV4dFJ1bkluRGlmZmVyZW50TGluZTsKKyAgICAgICAgICAgIGJvb2wgbG9naWNhbEVuZEluUmVu
ZGVyZXIgPSBvZmZzZXRJbkJveCA9PSB0ZXh0Qm94LT5lbmQoKSAmJiBuZXh0Qm94SW5EaWZmZXJl
bnRMaW5lOwogICAgICAgICAgICAgaXNXb3JkQnJlYWsgPSBpc2xvZ2ljYWxFbmRPZldvcmQoaXRl
ciwgb2Zmc2V0SW5JdGVyYXRvciwgbG9naWNhbEVuZEluUmVuZGVyZXIpOwotICAgICAgICAgICAg
aWYgKGlzV29yZEJyZWFrICYmIG9mZnNldEluUnVuID09IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0
KCkgJiYgcHJldmlvdXNSdW5JbkRpZmZlcmVudExpbmUpCisgICAgICAgICAgICBpZiAoaXNXb3Jk
QnJlYWsgJiYgb2Zmc2V0SW5Cb3ggPT0gYm94LT5taW5pbXVtQ2FyZXRPZmZzZXQoKSAmJiBwcmV2
aW91c0JveEluRGlmZmVyZW50TGluZSkKICAgICAgICAgICAgICAgICBpc1dvcmRCcmVhayA9IGZh
bHNlOwogICAgICAgICB9ICAgICAgCiAKQEAgLTc1MiwyNCArNzUyLDI0IEBAIHN0YXRpYyBWaXNp
YmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbkZvckxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBj
LCBMaW5lRW5kcG9pCiAgICAgSW5saW5lSXRlcmF0b3I6OkxpbmVMb2dpY2FsT3JkZXJDYWNoZSBv
cmRlckNhY2hlOwogCiAgICAgTm9kZSogc3RhcnROb2RlID0gbnVsbHB0cjsKLSAgICBhdXRvIHN0
YXJ0UnVuID0gbW9kZSA9PSBVc2VMb2dpY2FsT3JkZXJpbmcgPyBJbmxpbmVJdGVyYXRvcjo6Zmly
c3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXJXaXRoTm9kZShsaW5lLCBvcmRlckNhY2hlKSA6IGxp
bmUtPmZpcnN0TGVhZkJveCgpOworICAgIGF1dG8gc3RhcnRCb3ggPSBtb2RlID09IFVzZUxvZ2lj
YWxPcmRlcmluZyA/IElubGluZUl0ZXJhdG9yOjpmaXJzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRl
cldpdGhOb2RlKGxpbmUsIG9yZGVyQ2FjaGUpIDogbGluZS0+Zmlyc3RMZWFmQm94KCk7CiAgICAg
Ly8gR2VuZXJhdGVkIGNvbnRlbnQgKGUuZy4gbGlzdCBtYXJrZXJzIGFuZCBDU1MgOmJlZm9yZSBh
bmQgOmFmdGVyIHBzZXVkb2VsZW1lbnRzKSBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgRE9NIGVsZW1l
bnQsCiAgICAgLy8gYW5kIHNvIGNhbm5vdCBiZSByZXByZXNlbnRlZCBieSBhIFZpc2libGVQb3Np
dGlvbi4gVXNlIHdoYXRldmVyIGZvbGxvd3MgaW5zdGVhZC4KICAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICBpZiAoIXN0YXJ0UnVuKQorICAgICAgICBpZiAoIXN0YXJ0Qm94KQogICAgICAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0
UnVuLT5yZW5kZXJlcigpLm5vblBzZXVkb05vZGUoKTsKKyAgICAgICAgc3RhcnROb2RlID0gc3Rh
cnRCb3gtPnJlbmRlcmVyKCkubm9uUHNldWRvTm9kZSgpOwogICAgICAgICBpZiAoc3RhcnROb2Rl
KQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgaWYgKG1vZGUgPT0gVXNlTG9naWNhbE9y
ZGVyaW5nKQotICAgICAgICAgICAgc3RhcnRSdW4gPSBJbmxpbmVJdGVyYXRvcjo6bmV4dExlYWZP
bkxpbmVJbkxvZ2ljYWxPcmRlcihzdGFydFJ1biwgb3JkZXJDYWNoZSk7CisgICAgICAgICAgICBz
dGFydEJveCA9IElubGluZUl0ZXJhdG9yOjpuZXh0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyKHN0
YXJ0Qm94LCBvcmRlckNhY2hlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhcnRSdW4u
dHJhdmVyc2VOZXh0T25MaW5lKCk7CisgICAgICAgICAgICBzdGFydEJveC50cmF2ZXJzZU5leHRP
bkxpbmUoKTsKICAgICB9CiAKLSAgICByZXR1cm4gaXM8VGV4dD4oKnN0YXJ0Tm9kZSkgPyBQb3Np
dGlvbihkb3duY2FzdDxUZXh0PihzdGFydE5vZGUpLCBkb3duY2FzdDxJbmxpbmVJdGVyYXRvcjo6
VGV4dEJveD4oKnN0YXJ0UnVuKS5zdGFydCgpKQorICAgIHJldHVybiBpczxUZXh0Pigqc3RhcnRO
b2RlKSA/IFBvc2l0aW9uKGRvd25jYXN0PFRleHQ+KHN0YXJ0Tm9kZSksIGRvd25jYXN0PElubGlu
ZUl0ZXJhdG9yOjpUZXh0Qm94Pigqc3RhcnRCb3gpLnN0YXJ0KCkpCiAgICAgICAgIDogcG9zaXRp
b25CZWZvcmVOb2RlKHN0YXJ0Tm9kZSk7CiB9CiAKQEAgLTgyNCwzMSArODI0LDMxIEBAIHN0YXRp
YyBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25Gb3JMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgYywgTGluZUVuZHBvaW50CiAgICAgSW5saW5lSXRlcmF0b3I6OkxpbmVMb2dpY2FsT3JkZXJD
YWNoZSBvcmRlckNhY2hlOwogCiAgICAgTm9kZSogZW5kTm9kZSA9IG51bGxwdHI7Ci0gICAgYXV0
byBlbmRSdW4gPSBtb2RlID09IFVzZUxvZ2ljYWxPcmRlcmluZyA/IElubGluZUl0ZXJhdG9yOjps
YXN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyKGxpbmUsIG9yZGVyQ2FjaGUpIDogbGluZS0+bGFz
dExlYWZCb3goKTsKKyAgICBhdXRvIGVuZEJveCA9IG1vZGUgPT0gVXNlTG9naWNhbE9yZGVyaW5n
ID8gSW5saW5lSXRlcmF0b3I6Omxhc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXIobGluZSwgb3Jk
ZXJDYWNoZSkgOiBsaW5lLT5sYXN0TGVhZkJveCgpOwogICAgIC8vIEdlbmVyYXRlZCBjb250ZW50
IChlLmcuIGxpc3QgbWFya2VycyBhbmQgQ1NTIDpiZWZvcmUgYW5kIDphZnRlciBwc2V1ZG9lbGVt
ZW50cykgaGF2ZSBubyBjb3JyZXNwb25kaW5nIERPTSBlbGVtZW50LAogICAgIC8vIGFuZCBzbyBj
YW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgYSBWaXNpYmxlUG9zaXRpb24uIFVzZSB3aGF0ZXZlciBw
cmVjZWRlcyBpbnN0ZWFkLgogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmICghZW5kUnVu
KQorICAgICAgICBpZiAoIWVuZEJveCkKICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oKTsKIAotICAgICAgICBlbmROb2RlID0gZW5kUnVuLT5yZW5kZXJlcigpLm5vblBzZXVkb05v
ZGUoKTsKKyAgICAgICAgZW5kTm9kZSA9IGVuZEJveC0+cmVuZGVyZXIoKS5ub25Qc2V1ZG9Ob2Rl
KCk7CiAgICAgICAgIGlmIChlbmROb2RlKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
aWYgKG1vZGUgPT0gVXNlTG9naWNhbE9yZGVyaW5nKQotICAgICAgICAgICAgZW5kUnVuID0gSW5s
aW5lSXRlcmF0b3I6OnByZXZpb3VzTGVhZk9uTGluZUluTG9naWNhbE9yZGVyKGVuZFJ1biwgb3Jk
ZXJDYWNoZSk7CisgICAgICAgICAgICBlbmRCb3ggPSBJbmxpbmVJdGVyYXRvcjo6cHJldmlvdXNM
ZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXIoZW5kQm94LCBvcmRlckNhY2hlKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZW5kUnVuLnRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKTsKKyAgICAgICAg
ICAgIGVuZEJveC50cmF2ZXJzZVByZXZpb3VzT25MaW5lKCk7CiAgICAgfQogCiAgICAgUG9zaXRp
b24gcG9zOwogICAgIGlmIChpczxIVE1MQlJFbGVtZW50PigqZW5kTm9kZSkpCiAgICAgICAgIHBv
cyA9IHBvc2l0aW9uQmVmb3JlTm9kZShlbmROb2RlKTsKLSAgICBlbHNlIGlmIChpczxJbmxpbmVJ
dGVyYXRvcjo6VGV4dEJveD4oKmVuZFJ1bikgJiYgaXM8VGV4dD4oKmVuZE5vZGUpKSB7Ci0gICAg
ICAgIGF1dG8mIGVuZFRleHRSdW4gPSBkb3duY2FzdDxJbmxpbmVJdGVyYXRvcjo6VGV4dEJveD4o
KmVuZFJ1bik7Ci0gICAgICAgIGludCBlbmRPZmZzZXQgPSBlbmRUZXh0UnVuLnN0YXJ0KCk7Ci0g
ICAgICAgIGlmICghZW5kVGV4dFJ1bi5pc0xpbmVCcmVhaygpKQotICAgICAgICAgICAgZW5kT2Zm
c2V0ICs9IGVuZFRleHRSdW4ubGVuZ3RoKCk7CisgICAgZWxzZSBpZiAoaXM8SW5saW5lSXRlcmF0
b3I6OlRleHRCb3g+KCplbmRCb3gpICYmIGlzPFRleHQ+KCplbmROb2RlKSkgeworICAgICAgICBh
dXRvJiBlbmRUZXh0Qm94ID0gZG93bmNhc3Q8SW5saW5lSXRlcmF0b3I6OlRleHRCb3g+KCplbmRC
b3gpOworICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC5zdGFydCgpOworICAgICAg
ICBpZiAoIWVuZFRleHRCb3guaXNMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgIGVuZE9mZnNldCAr
PSBlbmRUZXh0Qm94Lmxlbmd0aCgpOwogICAgICAgICBwb3MgPSBQb3NpdGlvbihkb3duY2FzdDxU
ZXh0PihlbmROb2RlKSwgZW5kT2Zmc2V0KTsKICAgICB9IGVsc2UKICAgICAgICAgcG9zID0gcG9z
aXRpb25BZnRlck5vZGUoZW5kTm9kZSk7CkBAIC05NjksOCArOTY5LDggQEAgVmlzaWJsZVBvc2l0
aW9uIHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBv
c2l0aW9uLCBpbnQKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCiAgICAgSW5s
aW5lSXRlcmF0b3I6OkxpbmVJdGVyYXRvciBsaW5lOwotICAgIGlmIChhdXRvIHJ1biA9IHZpc2li
bGVQb3NpdGlvbi5pbmxpbmVSdW5BbmRPZmZzZXQoKS5ydW4pIHsKLSAgICAgICAgbGluZSA9IHJ1
bi0+bGluZSgpLT5wcmV2aW91cygpOworICAgIGlmIChhdXRvIGJveCA9IHZpc2libGVQb3NpdGlv
bi5pbmxpbmVCb3hBbmRPZmZzZXQoKS5ib3gpIHsKKyAgICAgICAgbGluZSA9IGJveC0+bGluZSgp
LT5wcmV2aW91cygpOwogICAgICAgICAvLyBXZSB3YW50IHRvIHNraXAgemVybyBoZWlnaHQgYm94
ZXMuCiAgICAgICAgIC8vIFRoaXMgY291bGQgaGFwcGVuIGluIGNhc2UgaXQgaXMgYSBMZWdhY3lS
b290SW5saW5lQm94IHdpdGggdHJhaWxpbmcgZmxvYXRzLgogICAgICAgICBpZiAoIWxpbmUgfHwg
IWxpbmUtPmxpbmVCb3hIZWlnaHQoKSB8fCAhbGluZS0+Zmlyc3RMZWFmQm94KCkpCkBAIC05OTAs
MTAgKzk5MCwxMCBAQCBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNMaW5lUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGludAogICAgIGlmIChsaW5lKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBDYW4gYmUgd3JvbmcgZm9yIG11bHRpLWNvbHVtbiBsYXlvdXQgYW5k
IHdpdGggdHJhbnNmb3Jtcy4KICAgICAgICAgYXV0byBwb2ludEluTGluZSA9IGFic29sdXRlTGlu
ZURpcmVjdGlvblBvaW50VG9Mb2NhbFBvaW50SW5CbG9jayhsaW5lLCBsaW5lRGlyZWN0aW9uUG9p
bnQpOwotICAgICAgICBhdXRvIHJ1biA9IGxpbmUtPmNsb3Nlc3RSdW5Gb3JQb2ludChwb2ludElu
TGluZSwgaXNFZGl0YWJsZVBvc2l0aW9uKHApKTsKLSAgICAgICAgaWYgKCFydW4pCisgICAgICAg
IGF1dG8gYm94ID0gbGluZS0+Y2xvc2VzdEJveEZvclBvaW50KHBvaW50SW5MaW5lLCBpc0VkaXRh
YmxlUG9zaXRpb24ocCkpOworICAgICAgICBpZiAoIWJveCkKICAgICAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsKLSAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBydW4tPnJlbmRlcmVy
KCk7CisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gYm94LT5yZW5kZXJlcigpOwogICAgICAgICBO
b2RlKiBub2RlID0gcmVuZGVyZXIubm9kZSgpOwogICAgICAgICBpZiAobm9kZSAmJiBlZGl0aW5n
SWdub3Jlc0NvbnRlbnQoKm5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJl
bnRCZWZvcmVOb2RlKG5vZGUpOwpAQCAtMTAyMiw4ICsxMDIyLDggQEAgVmlzaWJsZVBvc2l0aW9u
IG5leHRMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24s
IGludCBsaW4KICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCiAgICAgSW5saW5l
SXRlcmF0b3I6OkxpbmVJdGVyYXRvciBsaW5lOwotICAgIGlmIChhdXRvIHJ1biA9IHZpc2libGVQ
b3NpdGlvbi5pbmxpbmVSdW5BbmRPZmZzZXQoKS5ydW4pIHsKLSAgICAgICAgbGluZSA9IHJ1bi0+
bGluZSgpLT5uZXh0KCk7CisgICAgaWYgKGF1dG8gYm94ID0gdmlzaWJsZVBvc2l0aW9uLmlubGlu
ZUJveEFuZE9mZnNldCgpLmJveCkgeworICAgICAgICBsaW5lID0gYm94LT5saW5lKCktPm5leHQo
KTsKICAgICAgICAgLy8gV2Ugd2FudCB0byBza2lwIHplcm8gaGVpZ2h0IGJveGVzLgogICAgICAg
ICAvLyBUaGlzIGNvdWxkIGhhcHBlbiBpbiBjYXNlIGl0IGlzIGEgTGVnYWN5Um9vdElubGluZUJv
eCB3aXRoIHRyYWlsaW5nIGZsb2F0cy4KICAgICAgICAgaWYgKCFsaW5lIHx8ICFsaW5lLT5saW5l
Qm94SGVpZ2h0KCkgfHwgIWxpbmUtPmZpcnN0TGVhZkJveCgpKQpAQCAtMTA0NiwxMCArMTA0Niwx
MCBAQCBWaXNpYmxlUG9zaXRpb24gbmV4dExpbmVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVQb3NpdGlvbiwgaW50IGxpbgogICAgIGlmIChsaW5lKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBDYW4gYmUgd3JvbmcgZm9yIG11bHRpLWNvbHVtbiBsYXlvdXQgYW5kIHdpdGggdHJh
bnNmb3Jtcy4KICAgICAgICAgYXV0byBwb2ludEluTGluZSA9IGFic29sdXRlTGluZURpcmVjdGlv
blBvaW50VG9Mb2NhbFBvaW50SW5CbG9jayhsaW5lLCBsaW5lRGlyZWN0aW9uUG9pbnQpOwotICAg
ICAgICBhdXRvIHJ1biA9IGxpbmUtPmNsb3Nlc3RSdW5Gb3JQb2ludChwb2ludEluTGluZSwgaXNF
ZGl0YWJsZVBvc2l0aW9uKHApKTsKLSAgICAgICAgaWYgKCFydW4pCisgICAgICAgIGF1dG8gYm94
ID0gbGluZS0+Y2xvc2VzdEJveEZvclBvaW50KHBvaW50SW5MaW5lLCBpc0VkaXRhYmxlUG9zaXRp
b24ocCkpOworICAgICAgICBpZiAoIWJveCkKICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsKLSAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBydW4tPnJlbmRlcmVyKCk7CisgICAg
ICAgIGF1dG8mIHJlbmRlcmVyID0gYm94LT5yZW5kZXJlcigpOwogICAgICAgICBOb2RlKiBub2Rl
ID0gcmVuZGVyZXIubm9kZSgpOwogICAgICAgICBpZiAobm9kZSAmJiBlZGl0aW5nSWdub3Jlc0Nv
bnRlbnQoKm5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVO
b2RlKG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0lubGluZUl0ZXJhdG9yTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vSW5saW5lSXRlcmF0b3JMaW5lLmNwcAppbmRleCA0M2FlNWM0NGE3YmVkNzdjZjE1ZjRhODFm
YTQ4Y2ZkMDYxMDBmZTBmLi5hNjYxZThlZGE5ODliNThjZTQ0OTJlOTExZDJmMDFkMzk3YjM4Mzcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRl
cmF0b3JMaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5s
aW5lSXRlcmF0b3JMaW5lLmNwcApAQCAtMTE1LDQ2ICsxMTUsNDYgQEAgTGVhZkJveEl0ZXJhdG9y
IExpbmU6Omxhc3RMZWFmQm94KCkgY29uc3QKICAgICB9KTsKIH0KIAotTGVhZkJveEl0ZXJhdG9y
IExpbmU6OmNsb3Nlc3RSdW5Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRlbnRz
LCBib29sIGVkaXRhYmxlT25seSkgY29uc3QKK0xlYWZCb3hJdGVyYXRvciBMaW5lOjpjbG9zZXN0
Qm94Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250ZW50cywgYm9vbCBlZGl0YWJs
ZU9ubHkpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNsb3Nlc3RSdW5Gb3JMb2dpY2FsTGVmdFBvc2l0
aW9uKGlzSG9yaXpvbnRhbCgpID8gcG9pbnRJbkNvbnRlbnRzLngoKSA6IHBvaW50SW5Db250ZW50
cy55KCksIGVkaXRhYmxlT25seSk7CisgICAgcmV0dXJuIGNsb3Nlc3RCb3hGb3JMb2dpY2FsTGVm
dFBvc2l0aW9uKGlzSG9yaXpvbnRhbCgpID8gcG9pbnRJbkNvbnRlbnRzLngoKSA6IHBvaW50SW5D
b250ZW50cy55KCksIGVkaXRhYmxlT25seSk7CiB9CiAKLUxlYWZCb3hJdGVyYXRvciBMaW5lOjpj
bG9zZXN0UnVuRm9yTG9naWNhbExlZnRQb3NpdGlvbihpbnQgbGVmdFBvc2l0aW9uLCBib29sIGVk
aXRhYmxlT25seSkgY29uc3QKK0xlYWZCb3hJdGVyYXRvciBMaW5lOjpjbG9zZXN0Qm94Rm9yTG9n
aWNhbExlZnRQb3NpdGlvbihpbnQgbGVmdFBvc2l0aW9uLCBib29sIGVkaXRhYmxlT25seSkgY29u
c3QKIHsKLSAgICBhdXRvIGlzRWRpdGFibGUgPSBbJl0oYXV0byBydW4pIHsKLSAgICAgICAgcmV0
dXJuIHJ1biAmJiBydW4tPnJlbmRlcmVyKCkubm9kZSgpICYmIHJ1bi0+cmVuZGVyZXIoKS5ub2Rl
KCktPmhhc0VkaXRhYmxlU3R5bGUoKTsKKyAgICBhdXRvIGlzRWRpdGFibGUgPSBbJl0oYXV0byBi
b3gpIHsKKyAgICAgICAgcmV0dXJuIGJveCAmJiBib3gtPnJlbmRlcmVyKCkubm9kZSgpICYmIGJv
eC0+cmVuZGVyZXIoKS5ub2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICB9OwogCi0gICAg
YXV0byBmaXJzdFJ1biA9IHRoaXMtPmZpcnN0TGVhZkJveCgpOwotICAgIGF1dG8gbGFzdFJ1biA9
IHRoaXMtPmxhc3RMZWFmQm94KCk7CisgICAgYXV0byBmaXJzdEJveCA9IHRoaXMtPmZpcnN0TGVh
ZkJveCgpOworICAgIGF1dG8gbGFzdEJveCA9IHRoaXMtPmxhc3RMZWFmQm94KCk7CiAKLSAgICBp
ZiAoZmlyc3RSdW4gIT0gbGFzdFJ1bikgewotICAgICAgICBpZiAoZmlyc3RSdW4tPmlzTGluZUJy
ZWFrKCkpCi0gICAgICAgICAgICBmaXJzdFJ1biA9IGZpcnN0UnVuLT5uZXh0T25MaW5lSWdub3Jp
bmdMaW5lQnJlYWsoKTsKLSAgICAgICAgZWxzZSBpZiAobGFzdFJ1bi0+aXNMaW5lQnJlYWsoKSkK
LSAgICAgICAgICAgIGxhc3RSdW4gPSBsYXN0UnVuLT5wcmV2aW91c09uTGluZUlnbm9yaW5nTGlu
ZUJyZWFrKCk7CisgICAgaWYgKGZpcnN0Qm94ICE9IGxhc3RCb3gpIHsKKyAgICAgICAgaWYgKGZp
cnN0Qm94LT5pc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgZmlyc3RCb3ggPSBmaXJzdEJveC0+
bmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CisgICAgICAgIGVsc2UgaWYgKGxhc3RCb3gt
PmlzTGluZUJyZWFrKCkpCisgICAgICAgICAgICBsYXN0Qm94ID0gbGFzdEJveC0+cHJldmlvdXNP
bkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOwogICAgIH0KIAotICAgIGlmIChmaXJzdFJ1biA9PSBs
YXN0UnVuICYmICghZWRpdGFibGVPbmx5IHx8IGlzRWRpdGFibGUoZmlyc3RSdW4pKSkKLSAgICAg
ICAgcmV0dXJuIGZpcnN0UnVuOworICAgIGlmIChmaXJzdEJveCA9PSBsYXN0Qm94ICYmICghZWRp
dGFibGVPbmx5IHx8IGlzRWRpdGFibGUoZmlyc3RCb3gpKSkKKyAgICAgICAgcmV0dXJuIGZpcnN0
Qm94OwogCi0gICAgaWYgKGZpcnN0UnVuICYmIGxlZnRQb3NpdGlvbiA8PSBmaXJzdFJ1bi0+bG9n
aWNhbExlZnQoKSAmJiAhZmlyc3RSdW4tPnJlbmRlcmVyKCkuaXNMaXN0TWFya2VyKCkgJiYgKCFl
ZGl0YWJsZU9ubHkgfHwgaXNFZGl0YWJsZShmaXJzdFJ1bikpKQotICAgICAgICByZXR1cm4gZmly
c3RSdW47CisgICAgaWYgKGZpcnN0Qm94ICYmIGxlZnRQb3NpdGlvbiA8PSBmaXJzdEJveC0+bG9n
aWNhbExlZnQoKSAmJiAhZmlyc3RCb3gtPnJlbmRlcmVyKCkuaXNMaXN0TWFya2VyKCkgJiYgKCFl
ZGl0YWJsZU9ubHkgfHwgaXNFZGl0YWJsZShmaXJzdEJveCkpKQorICAgICAgICByZXR1cm4gZmly
c3RCb3g7CiAKLSAgICBpZiAobGFzdFJ1biAmJiBsZWZ0UG9zaXRpb24gPj0gbGFzdFJ1bi0+bG9n
aWNhbFJpZ2h0KCkgJiYgIWxhc3RSdW4tPnJlbmRlcmVyKCkuaXNMaXN0TWFya2VyKCkgJiYgKCFl
ZGl0YWJsZU9ubHkgfHwgaXNFZGl0YWJsZShsYXN0UnVuKSkpCi0gICAgICAgIHJldHVybiBsYXN0
UnVuOworICAgIGlmIChsYXN0Qm94ICYmIGxlZnRQb3NpdGlvbiA+PSBsYXN0Qm94LT5sb2dpY2Fs
UmlnaHQoKSAmJiAhbGFzdEJveC0+cmVuZGVyZXIoKS5pc0xpc3RNYXJrZXIoKSAmJiAoIWVkaXRh
YmxlT25seSB8fCBpc0VkaXRhYmxlKGxhc3RCb3gpKSkKKyAgICAgICAgcmV0dXJuIGxhc3RCb3g7
CiAKLSAgICBhdXRvIGNsb3Nlc3RSdW4gPSBsYXN0UnVuOwotICAgIGZvciAoYXV0byBydW4gPSBm
aXJzdFJ1bjsgcnVuOyBydW4gPSBydW4udHJhdmVyc2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJl
YWsoKSkgewotICAgICAgICBpZiAoIXJ1bi0+cmVuZGVyZXIoKS5pc0xpc3RNYXJrZXIoKSAmJiAo
IWVkaXRhYmxlT25seSB8fCBpc0VkaXRhYmxlKHJ1bikpKSB7Ci0gICAgICAgICAgICBpZiAobGVm
dFBvc2l0aW9uIDwgcnVuLT5sb2dpY2FsUmlnaHQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
cnVuOwotICAgICAgICAgICAgY2xvc2VzdFJ1biA9IHJ1bjsKKyAgICBhdXRvIGNsb3Nlc3RCb3gg
PSBsYXN0Qm94OworICAgIGZvciAoYXV0byBib3ggPSBmaXJzdEJveDsgYm94OyBib3ggPSBib3gu
dHJhdmVyc2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSkgeworICAgICAgICBpZiAoIWJv
eC0+cmVuZGVyZXIoKS5pc0xpc3RNYXJrZXIoKSAmJiAoIWVkaXRhYmxlT25seSB8fCBpc0VkaXRh
YmxlKGJveCkpKSB7CisgICAgICAgICAgICBpZiAobGVmdFBvc2l0aW9uIDwgYm94LT5sb2dpY2Fs
UmlnaHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYm94OworICAgICAgICAgICAgY2xvc2Vz
dEJveCA9IGJveDsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBjbG9zZXN0UnVuOwor
ICAgIHJldHVybiBjbG9zZXN0Qm94OwogfQogCiBpbnQgTGluZTo6YmxvY2tEaXJlY3Rpb25Qb2lu
dEluTGluZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vSW5saW5lSXRlcmF0b3JMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vSW5saW5lSXRlcmF0b3JMaW5lLmgKaW5kZXggZmVkOGZjOTIzMjVhZDBkNmQzMzQ3OGYw
ZTY3NDAxNzQ0MmQ4N2FmZS4uZTY3N2Q3OGM1OWY2Mjc5ZTI1YjE3ZGJjNjkxZmM1MWQ2Njc1NDQy
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0
ZXJhdG9yTGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9Jbmxp
bmVJdGVyYXRvckxpbmUuaApAQCAtODcsOCArODcsOCBAQCBwdWJsaWM6CiAgICAgTGluZUl0ZXJh
dG9yIG5leHQoKSBjb25zdDsKICAgICBMaW5lSXRlcmF0b3IgcHJldmlvdXMoKSBjb25zdDsKIAot
ICAgIExlYWZCb3hJdGVyYXRvciBjbG9zZXN0UnVuRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBv
aW50SW5Db250ZW50cywgYm9vbCBlZGl0YWJsZU9ubHkpIGNvbnN0OwotICAgIExlYWZCb3hJdGVy
YXRvciBjbG9zZXN0UnVuRm9yTG9naWNhbExlZnRQb3NpdGlvbihpbnQgcG9zaXRpb24sIGJvb2wg
ZWRpdGFibGVPbmx5ID0gZmFsc2UpIGNvbnN0OworICAgIExlYWZCb3hJdGVyYXRvciBjbG9zZXN0
Qm94Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250ZW50cywgYm9vbCBlZGl0YWJs
ZU9ubHkpIGNvbnN0OworICAgIExlYWZCb3hJdGVyYXRvciBjbG9zZXN0Qm94Rm9yTG9naWNhbExl
ZnRQb3NpdGlvbihpbnQgcG9zaXRpb24sIGJvb2wgZWRpdGFibGVPbmx5ID0gZmFsc2UpIGNvbnN0
OwogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTGluZUl0ZXJhdG9yOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5jcHAKaW5kZXgg
ODlmOTFiZjA0NGNlNTNjNzM1MTY1ZmM4NWU5YTc2M2Q1NTU4YzFlOS4uNmJiYjUxMmRiMWE0YWQx
MjMzZDAzZGZkNDE0MjgwMzQ2OWFiNTYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwCkBAIC0xNjcsMzMgKzE2NywzMyBAQCBzdGF0
aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0Rm9yTGluZVBvc2l0aW9uKGNvbnN0IElubGlu
ZUl0ZXJhdG9yOjpMaW5lSXRlcgogICAgIHJldHVybiBjb250YWluaW5nQmxvY2suc3R5bGUoKS5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcmVjdCA6IHJlY3QudHJhbnNwb3NlZFJlY3QoKTsK
IH0KIAotc3RhdGljIExheW91dFJlY3QgY29tcHV0ZUNhcmV0UmVjdEZvclRleHQoY29uc3QgSW5s
aW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIENhcmV0UmVjdE1vZGUgY2FyZXRSZWN0TW9k
ZSkKK3N0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JUZXh0KGNvbnN0IElubGlu
ZUJveEFuZE9mZnNldCYgYm94QW5kT2Zmc2V0LCBDYXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUp
CiB7Ci0gICAgaWYgKCFydW5BbmRPZmZzZXQucnVuKQorICAgIGlmICghYm94QW5kT2Zmc2V0LmJv
eCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8mIHRleHRSdW4gPSBkb3duY2FzdDxJ
bmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yPihydW5BbmRPZmZzZXQucnVuKTsKLSAgICBh
dXRvIGxpbmUgPSB0ZXh0UnVuLT5saW5lKCk7CisgICAgYXV0byYgdGV4dEJveCA9IGRvd25jYXN0
PElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3I+KGJveEFuZE9mZnNldC5ib3gpOworICAg
IGF1dG8gbGluZSA9IHRleHRCb3gtPmxpbmUoKTsKIAotICAgIGZsb2F0IHBvc2l0aW9uID0gdGV4
dFJ1bi0+cG9zaXRpb25Gb3JPZmZzZXQocnVuQW5kT2Zmc2V0Lm9mZnNldCk7CisgICAgZmxvYXQg
cG9zaXRpb24gPSB0ZXh0Qm94LT5wb3NpdGlvbkZvck9mZnNldChib3hBbmRPZmZzZXQub2Zmc2V0
KTsKICAgICByZXR1cm4gY29tcHV0ZUNhcmV0UmVjdEZvckxpbmVQb3NpdGlvbihsaW5lLCBwb3Np
dGlvbiwgY2FyZXRSZWN0TW9kZSk7CiB9CiAKLXN0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJl
dFJlY3RGb3JMaW5lQnJlYWsoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQs
IENhcmV0UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkKK3N0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVD
YXJldFJlY3RGb3JMaW5lQnJlYWsoY29uc3QgSW5saW5lQm94QW5kT2Zmc2V0JiBib3hBbmRPZmZz
ZXQsIENhcmV0UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkKIHsKLSAgICBBU1NFUlQoIXJ1bkFuZE9m
ZnNldC5vZmZzZXQpOworICAgIEFTU0VSVCghYm94QW5kT2Zmc2V0Lm9mZnNldCk7CiAKLSAgICBp
ZiAoIXJ1bkFuZE9mZnNldC5ydW4pCisgICAgaWYgKCFib3hBbmRPZmZzZXQuYm94KQogICAgICAg
ICByZXR1cm4geyB9OwogCi0gICAgYXV0byBsaW5lID0gcnVuQW5kT2Zmc2V0LnJ1bi0+bGluZSgp
OworICAgIGF1dG8gbGluZSA9IGJveEFuZE9mZnNldC5ib3gtPmxpbmUoKTsKICAgICByZXR1cm4g
Y29tcHV0ZUNhcmV0UmVjdEZvckxpbmVQb3NpdGlvbihsaW5lLCBsaW5lLT5jb250ZW50TG9naWNh
bExlZnQoKSwgY2FyZXRSZWN0TW9kZSk7CiB9CiAKLXN0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVD
YXJldFJlY3RGb3JTVkdJbmxpbmVUZXh0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5k
T2Zmc2V0LCBDYXJldFJlY3RNb2RlKQorc3RhdGljIExheW91dFJlY3QgY29tcHV0ZUNhcmV0UmVj
dEZvclNWR0lubGluZVRleHQoY29uc3QgSW5saW5lQm94QW5kT2Zmc2V0JiBib3hBbmRPZmZzZXQs
IENhcmV0UmVjdE1vZGUpCiB7Ci0gICAgYXV0byogYm94ID0gcnVuQW5kT2Zmc2V0LnJ1biA/IHJ1
bkFuZE9mZnNldC5ydW4tPmxlZ2FjeUlubGluZUJveCgpIDogbnVsbHB0cjsKLSAgICBhdXRvIGNh
cmV0T2Zmc2V0ID0gcnVuQW5kT2Zmc2V0Lm9mZnNldDsKKyAgICBhdXRvKiBib3ggPSBib3hBbmRP
ZmZzZXQuYm94ID8gYm94QW5kT2Zmc2V0LmJveC0+bGVnYWN5SW5saW5lQm94KCkgOiBudWxscHRy
OworICAgIGF1dG8gY2FyZXRPZmZzZXQgPSBib3hBbmRPZmZzZXQub2Zmc2V0OwogCiAgICAgaWYg
KCFpczxMZWdhY3lJbmxpbmVUZXh0Qm94Pihib3gpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAt
MjE0LDcgKzIxNCw3IEBAIHN0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JTVkdJ
bmxpbmVUZXh0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuCiAgICAgcmV0dXJuIHsgeCwg
cmVjdC55KCksIGNhcmV0V2lkdGgsIHJlY3QuaGVpZ2h0KCkgfTsKIH0KIAotc3RhdGljIExheW91
dFJlY3QgY29tcHV0ZUNhcmV0UmVjdEZvckJveChjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBj
b25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgQ2FyZXRSZWN0TW9kZSBjYXJl
dFJlY3RNb2RlKQorc3RhdGljIExheW91dFJlY3QgY29tcHV0ZUNhcmV0UmVjdEZvckJveChjb25z
dCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBjb25zdCBJbmxpbmVCb3hBbmRPZmZzZXQmIGJveEFuZE9m
ZnNldCwgQ2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKQogewogICAgIC8vIFZpc2libGVQb3Np
dGlvbnMgYXQgb2Zmc2V0cyBpbnNpZGUgY29udGFpbmVycyBlaXRoZXIgYSkgcmVmZXIgdG8gdGhl
IHBvc2l0aW9ucyBiZWZvcmUvYWZ0ZXIKICAgICAvLyB0aG9zZSBjb250YWluZXJzICh0YWJsZXMg
YW5kIHNlbGVjdCBlbGVtZW50cykgb3IgYikgcmVmZXIgdG8gdGhlIHBvc2l0aW9uIGluc2lkZSBh
biBlbXB0eSBibG9jay4KQEAgLTIyMiwxMyArMjIyLDEzIEBAIHN0YXRpYyBMYXlvdXRSZWN0IGNv
bXB1dGVDYXJldFJlY3RGb3JCb3goY29uc3QgUmVuZGVyQm94JiByZW5kZXJlciwgY29uc3QgSW5s
aW5lCiAgICAgLy8gRklYTUU6IFBhaW50IHRoZSBjYXJldHMgaW5zaWRlIGVtcHR5IGJsb2NrcyBk
aWZmZXJlbnRseSB0aGFuIHRoZSBjYXJldHMgYmVmb3JlL2FmdGVyIGVsZW1lbnRzLgogCiAgICAg
TGF5b3V0UmVjdCByZWN0KHJlbmRlcmVyLmxvY2F0aW9uKCksIExheW91dFNpemUoY2FyZXRXaWR0
aCwgcmVuZGVyZXIuaGVpZ2h0KCkpKTsKLSAgICBib29sIGx0ciA9IHJ1bkFuZE9mZnNldC5ydW4g
PyBydW5BbmRPZmZzZXQucnVuLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgOiByZW5kZXJlci5z
dHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICBib29sIGx0ciA9IGJveEFuZE9m
ZnNldC5ib3ggPyBib3hBbmRPZmZzZXQuYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgOiBy
ZW5kZXJlci5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKIAotICAgIGlmICgoIXJ1
bkFuZE9mZnNldC5vZmZzZXQpIF4gbHRyKQorICAgIGlmICgoIWJveEFuZE9mZnNldC5vZmZzZXQp
IF4gbHRyKQogICAgICAgICByZWN0Lm1vdmUoTGF5b3V0U2l6ZShyZW5kZXJlci53aWR0aCgpIC0g
Y2FyZXRXaWR0aCwgMF9sdSkpOwogCi0gICAgaWYgKHJ1bkFuZE9mZnNldC5ydW4pIHsKLSAgICAg
ICAgYXV0byBsaW5lID0gcnVuQW5kT2Zmc2V0LnJ1bi0+bGluZSgpOworICAgIGlmIChib3hBbmRP
ZmZzZXQuYm94KSB7CisgICAgICAgIGF1dG8gbGluZSA9IGJveEFuZE9mZnNldC5ib3gtPmxpbmUo
KTsKICAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSBsaW5lLT50b3AoKTsKICAgICAgICAgcmVjdC5z
ZXRZKHRvcCk7CiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGxpbmUtPmJvdHRvbSgpIC0gdG9wKTsK
QEAgLTI2MywxMSArMjYzLDExIEBAIHN0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RG
b3JCb3goY29uc3QgUmVuZGVyQm94JiByZW5kZXJlciwgY29uc3QgSW5saW5lCiAgICAgcmV0dXJu
IHJlbmRlcmVyLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWN0IDogcmVjdC50cmFuc3Bv
c2VkUmVjdCgpOwogfQogCi1zdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0Rm9yQmxv
Y2soY29uc3QgUmVuZGVyQmxvY2smIHJlbmRlcmVyLCBjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQm
IHJ1bkFuZE9mZnNldCwgQ2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKQorc3RhdGljIExheW91
dFJlY3QgY29tcHV0ZUNhcmV0UmVjdEZvckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrJiByZW5kZXJl
ciwgY29uc3QgSW5saW5lQm94QW5kT2Zmc2V0JiBib3hBbmRPZmZzZXQsIENhcmV0UmVjdE1vZGUg
Y2FyZXRSZWN0TW9kZSkKIHsKICAgICAvLyBEbyB0aGUgbm9ybWFsIGNhbGN1bGF0aW9uIGluIG1v
c3QgY2FzZXMuCiAgICAgaWYgKHJlbmRlcmVyLmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVDYXJldFJlY3RGb3JCb3gocmVuZGVyZXIsIHJ1bkFuZE9mZnNldCwgY2FyZXRSZWN0
TW9kZSk7CisgICAgICAgIHJldHVybiBjb21wdXRlQ2FyZXRSZWN0Rm9yQm94KHJlbmRlcmVyLCBi
b3hBbmRPZmZzZXQsIGNhcmV0UmVjdE1vZGUpOwogCiAgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJl
Y3RGb3JFbXB0eUVsZW1lbnQocmVuZGVyZXIsIHJlbmRlcmVyLndpZHRoKCksIHJlbmRlcmVyLnRl
eHRJbmRlbnRPZmZzZXQoKSwgY2FyZXRSZWN0TW9kZSk7CiB9CkBAIC0yOTEsMjIgKzI5MSwyMiBA
QCBzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0Rm9ySW5saW5lKGNvbnN0IFJlbmRl
cklubGluZSYgcmVuZGVyZXIpCiAgICAgcmV0dXJuIGNhcmV0UmVjdDsKIH0KIAotTGF5b3V0UmVj
dCBjb21wdXRlTG9jYWxDYXJldFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29u
c3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIENhcmV0UmVjdE1vZGUgY2FyZXRS
ZWN0TW9kZSkKK0xheW91dFJlY3QgY29tcHV0ZUxvY2FsQ2FyZXRSZWN0KGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIsIGNvbnN0IElubGluZUJveEFuZE9mZnNldCYgYm94QW5kT2Zmc2V0LCBD
YXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUpCiB7CiAgICAgaWYgKGlzPFJlbmRlclNWR0lubGlu
ZVRleHQ+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJlY3RGb3JTVkdJ
bmxpbmVUZXh0KHJ1bkFuZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7CisgICAgICAgIHJldHVybiBj
b21wdXRlQ2FyZXRSZWN0Rm9yU1ZHSW5saW5lVGV4dChib3hBbmRPZmZzZXQsIGNhcmV0UmVjdE1v
ZGUpOwogCiAgICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVDYXJldFJlY3RGb3JUZXh0KHJ1bkFuZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7Cisg
ICAgICAgIHJldHVybiBjb21wdXRlQ2FyZXRSZWN0Rm9yVGV4dChib3hBbmRPZmZzZXQsIGNhcmV0
UmVjdE1vZGUpOwogCiAgICAgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIpKQotICAg
ICAgICByZXR1cm4gY29tcHV0ZUNhcmV0UmVjdEZvckxpbmVCcmVhayhydW5BbmRPZmZzZXQsIGNh
cmV0UmVjdE1vZGUpOworICAgICAgICByZXR1cm4gY29tcHV0ZUNhcmV0UmVjdEZvckxpbmVCcmVh
ayhib3hBbmRPZmZzZXQsIGNhcmV0UmVjdE1vZGUpOwogCiAgICAgaWYgKGlzPFJlbmRlckJsb2Nr
PihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBjb21wdXRlQ2FyZXRSZWN0Rm9yQmxvY2soZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSwgcnVuQW5kT2Zmc2V0LCBjYXJldFJlY3RNb2Rl
KTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJlY3RGb3JCbG9jayhkb3duY2FzdDxSZW5k
ZXJCbG9jaz4ocmVuZGVyZXIpLCBib3hBbmRPZmZzZXQsIGNhcmV0UmVjdE1vZGUpOwogCiAgICAg
aWYgKGlzPFJlbmRlckJveD4ocmVuZGVyZXIpKQotICAgICAgICByZXR1cm4gY29tcHV0ZUNhcmV0
UmVjdEZvckJveChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKSwgcnVuQW5kT2Zmc2V0LCBj
YXJldFJlY3RNb2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJlY3RGb3JCb3goZG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlciksIGJveEFuZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7
CiAKICAgICBpZiAoaXM8UmVuZGVySW5saW5lPihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBj
b21wdXRlQ2FyZXRSZWN0Rm9ySW5saW5lKGRvd25jYXN0PFJlbmRlcklubGluZT4ocmVuZGVyZXIp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRh
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmgK
aW5kZXggNzM2MmE4NDNiM2Y1NDc2YjhlMGUyYmE1ZWY3NWM1N2NhZTFiNzVmMy4uYWM2YjdlYzk3
ZmUyYmEyZTA5Zjc4OGVkYTZkOTc5NDA2MjNkM2JkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmgKQEAgLTM1LDYgKzM1LDYgQEAgZW51bSBj
bGFzcyBDYXJldFJlY3RNb2RlIHsKICAgICBFeHBhbmRUb0VuZE9mTGluZQogfTsKIAotTGF5b3V0
UmVjdCBjb21wdXRlTG9jYWxDYXJldFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW5s
aW5lUnVuQW5kT2Zmc2V0JiwgQ2FyZXRSZWN0TW9kZSA9IENhcmV0UmVjdE1vZGU6Ok5vcm1hbCk7
CitMYXlvdXRSZWN0IGNvbXB1dGVMb2NhbENhcmV0UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBJbmxpbmVCb3hBbmRPZmZzZXQmLCBDYXJldFJlY3RNb2RlID0gQ2FyZXRSZWN0TW9kZTo6
Tm9ybWFsKTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5jcHAKaW5kZXggNDA0NmZmYjg1ZGYyYjk3MTFkMDdjZmMyMWE1NmI4NmJmZmRiYTE0Yi4uNDhj
ZjFhZjVkYzE5ZDViNWE3M2ZhM2Q4ZjQ5YjZkOTYyYTAyNjljZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTMyODIsMTkgKzMyODIsMTkgQEAg
Ym9vbCBSZW5kZXJCbG9ja0Zsb3c6OmNvbnRhaW5zTm9uWmVyb0JpZGlMZXZlbCgpIGNvbnN0CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgUG9zaXRpb24gcG9zaXRpb25Gb3JSdW4oY29u
c3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBJbmxpbmVJdGVyYXRvcjo6Qm94SXRlcmF0b3IgcnVu
LCBib29sIHN0YXJ0KQorc3RhdGljIFBvc2l0aW9uIHBvc2l0aW9uRm9yUnVuKGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYgZmxvdywgSW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yIGJveCwgYm9vbCBz
dGFydCkKIHsKLSAgICBpZiAoIXJ1bikKKyAgICBpZiAoIWJveCkKICAgICAgICAgcmV0dXJuIFBv
c2l0aW9uKCk7CiAKLSAgICBpZiAoIXJ1bi0+cmVuZGVyZXIoKS5ub25Qc2V1ZG9Ob2RlKCkpCisg
ICAgaWYgKCFib3gtPnJlbmRlcmVyKCkubm9uUHNldWRvTm9kZSgpKQogICAgICAgICByZXR1cm4g
bWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihmbG93Lm5vblBzZXVkb0VsZW1lbnQoKSwgc3Rh
cnQgPyBmbG93LmNhcmV0TWluT2Zmc2V0KCkgOiBmbG93LmNhcmV0TWF4T2Zmc2V0KCkpOwogCi0g
ICAgaWYgKCFpczxJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yPihydW4pKQotICAgICAg
ICByZXR1cm4gbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihydW4tPnJlbmRlcmVyKCkubm9u
UHNldWRvTm9kZSgpLCBzdGFydCA/IHJ1bi0+cmVuZGVyZXIoKS5jYXJldE1pbk9mZnNldCgpIDog
cnVuLT5yZW5kZXJlcigpLmNhcmV0TWF4T2Zmc2V0KCkpOworICAgIGlmICghaXM8SW5saW5lSXRl
cmF0b3I6OlRleHRCb3hJdGVyYXRvcj4oYm94KSkKKyAgICAgICAgcmV0dXJuIG1ha2VEZXByZWNh
dGVkTGVnYWN5UG9zaXRpb24oYm94LT5yZW5kZXJlcigpLm5vblBzZXVkb05vZGUoKSwgc3RhcnQg
PyBib3gtPnJlbmRlcmVyKCkuY2FyZXRNaW5PZmZzZXQoKSA6IGJveC0+cmVuZGVyZXIoKS5jYXJl
dE1heE9mZnNldCgpKTsKIAotICAgIGF1dG8mIHRleHRSdW4gPSBkb3duY2FzdDxJbmxpbmVJdGVy
YXRvcjo6VGV4dEJveEl0ZXJhdG9yPihydW4pOwotICAgIHJldHVybiBtYWtlRGVwcmVjYXRlZExl
Z2FjeVBvc2l0aW9uKHRleHRSdW4tPnJlbmRlcmVyKCkubm9uUHNldWRvTm9kZSgpLCBzdGFydCA/
IHRleHRSdW4tPnN0YXJ0KCkgOiB0ZXh0UnVuLT5lbmQoKSk7CisgICAgYXV0byYgdGV4dEJveCA9
IGRvd25jYXN0PElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3I+KGJveCk7CisgICAgcmV0
dXJuIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24odGV4dEJveC0+cmVuZGVyZXIoKS5ub25Q
c2V1ZG9Ob2RlKCksIHN0YXJ0ID8gdGV4dEJveC0+c3RhcnQoKSA6IHRleHRCb3gtPmVuZCgpKTsK
IH0KIAogUmVuZGVyVGV4dCogUmVuZGVyQmxvY2tGbG93OjpmaW5kQ2xvc2VzdFRleHRBdEFic29s
dXRlUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCkBAIC0zMzUzLDkgKzMzNTMsOSBAQCBS
ZW5kZXJUZXh0KiBSZW5kZXJCbG9ja0Zsb3c6OmZpbmRDbG9zZXN0VGV4dEF0QWJzb2x1dGVQb2lu
dChjb25zdCBGbG9hdFBvaW50JiBwbwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgICAgICAgICBpZiAobG9jYWxQb2ludC55KCkgPiAqcHJldmlvdXNSb290SW5saW5lQm94
Qm90dG9tICYmIGxvY2FsUG9pbnQueSgpIDwgYm94LT5sb2dpY2FsVG9wKCkpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIHJ1biA9IGJveC0+bGluZSgpLT5jbG9zZXN0UnVuRm9yTG9naWNhbExlZnRQ
b3NpdGlvbihsb2NhbFBvaW50LngoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJ1biAmJiBpczxS
ZW5kZXJUZXh0PihydW4tPnJlbmRlcmVyKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y29uc3RfY2FzdDxSZW5kZXJUZXh0Kj4oJmRvd25jYXN0PFJlbmRlclRleHQ+KHJ1bi0+cmVuZGVy
ZXIoKSkpOworICAgICAgICAgICAgICAgIGF1dG8gY2xvc2VzdEJveCA9IGJveC0+bGluZSgpLT5j
bG9zZXN0Qm94Rm9yTG9naWNhbExlZnRQb3NpdGlvbihsb2NhbFBvaW50LngoKSk7CisgICAgICAg
ICAgICAgICAgaWYgKGNsb3Nlc3RCb3ggJiYgaXM8UmVuZGVyVGV4dD4oY2xvc2VzdEJveC0+cmVu
ZGVyZXIoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFJlbmRlclRl
eHQqPigmZG93bmNhc3Q8UmVuZGVyVGV4dD4oY2xvc2VzdEJveC0+cmVuZGVyZXIoKSkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHByZXZpb3VzUm9vdElubGluZUJveEJvdHRv
bSA9IGJveC0+bG9naWNhbEJvdHRvbSgpOwpAQCAtMzM3Niw3ICszMzc2LDcgQEAgVmlzaWJsZVBv
c2l0aW9uIFJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJl
bihjb25zdCBMYXlvdXQKICAgICBib29sIGJsb2Nrc0FyZUZsaXBwZWQgPSBzdHlsZSgpLmlzRmxp
cHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCk7CiAKICAgICAvLyBsb29rIGZvciB0aGUgY2xvc2VzdCBs
aW5lIGJveCBpbiB0aGUgcm9vdCBib3ggd2hpY2ggaXMgYXQgdGhlIHBhc3NlZC1pbiB5IGNvb3Jk
aW5hdGUKLSAgICBJbmxpbmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9yIGNsb3Nlc3RSdW47Cisg
ICAgSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBjbG9zZXN0Qm94OwogICAgIElubGlu
ZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3IgZmlyc3RMaW5lV2l0aENoaWxkcmVuOwogICAgIElubGlu
ZUl0ZXJhdG9yOjpMaW5lSXRlcmF0b3IgbGFzdExpbmVXaXRoQ2hpbGRyZW47CiAgICAgZm9yIChh
dXRvIGxpbmUgPSBmaXJzdExpbmU7IGxpbmU7IGxpbmUudHJhdmVyc2VOZXh0KCkpIHsKQEAgLTM0
MDYsNDkgKzM0MDYsNDkgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrRmxvdzo6cG9zaXRp
b25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBMYXlvdXQKICAgICAgICAgICAgICAg
ICAgICAgJiYgKHBvaW50SW5Mb2dpY2FsQ29udGVudHMueSgpID4gbmV4dExpbmVXaXRoQ2hpbGRy
ZW4tPmxpbmVCb3hUb3AoKSB8fCAoIWJsb2Nrc0FyZUZsaXBwZWQgJiYgcG9pbnRJbkxvZ2ljYWxD
b250ZW50cy55KCkgPT0gbmV4dExpbmVXaXRoQ2hpbGRyZW4tPmxpbmVCb3hUb3AoKSkpKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNs
b3Nlc3RSdW4gPSBsaW5lLT5jbG9zZXN0UnVuRm9yTG9naWNhbExlZnRQb3NpdGlvbihwb2ludElu
TG9naWNhbENvbnRlbnRzLngoKSk7Ci0gICAgICAgICAgICBpZiAoY2xvc2VzdFJ1bikKKyAgICAg
ICAgICAgIGNsb3Nlc3RCb3ggPSBsaW5lLT5jbG9zZXN0Qm94Rm9yTG9naWNhbExlZnRQb3NpdGlv
bihwb2ludEluTG9naWNhbENvbnRlbnRzLngoKSk7CisgICAgICAgICAgICBpZiAoY2xvc2VzdEJv
eCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wg
bW92ZUNhcmV0VG9Cb3VuZGFyeSA9IGZyYW1lKCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRN
b3ZlQ2FyZXRUb0hvcml6b250YWxCb3VuZGFyeVdoZW5QYXN0VG9wT3JCb3R0b20oKTsKIAotICAg
IGlmICghbW92ZUNhcmV0VG9Cb3VuZGFyeSAmJiAhY2xvc2VzdFJ1biAmJiBsYXN0TGluZVdpdGhD
aGlsZHJlbikgeworICAgIGlmICghbW92ZUNhcmV0VG9Cb3VuZGFyeSAmJiAhY2xvc2VzdEJveCAm
JiBsYXN0TGluZVdpdGhDaGlsZHJlbikgewogICAgICAgICAvLyB5IGNvb3JkaW5hdGUgaXMgYmVs
b3cgbGFzdCByb290IGxpbmUgYm94LCBwcmV0ZW5kIHdlIGhpdCBpdAotICAgICAgICBjbG9zZXN0
UnVuID0gbGFzdExpbmVXaXRoQ2hpbGRyZW4tPmNsb3Nlc3RSdW5Gb3JMb2dpY2FsTGVmdFBvc2l0
aW9uKHBvaW50SW5Mb2dpY2FsQ29udGVudHMueCgpKTsKKyAgICAgICAgY2xvc2VzdEJveCA9IGxh
c3RMaW5lV2l0aENoaWxkcmVuLT5jbG9zZXN0Qm94Rm9yTG9naWNhbExlZnRQb3NpdGlvbihwb2lu
dEluTG9naWNhbENvbnRlbnRzLngoKSk7CiAgICAgfQogCi0gICAgaWYgKGNsb3Nlc3RSdW4pIHsK
KyAgICBpZiAoY2xvc2VzdEJveCkgewogICAgICAgICBpZiAobW92ZUNhcmV0VG9Cb3VuZGFyeSkg
ewogICAgICAgICAgICAgTGF5b3V0VW5pdCBmaXJzdExpbmVXaXRoQ2hpbGRyZW5Ub3AgPSBzdGQ6
Om1pbihmaXJzdExpbmVXaXRoQ2hpbGRyZW4tPmVuY2xvc2luZ1RvcEZvckhpdFRlc3RpbmcoKSwg
TGF5b3V0VW5pdChmaXJzdExpbmVXaXRoQ2hpbGRyZW4tPnRvcCgpKSk7CiAgICAgICAgICAgICBp
ZiAocG9pbnRJbkxvZ2ljYWxDb250ZW50cy55KCkgPCBmaXJzdExpbmVXaXRoQ2hpbGRyZW5Ub3AK
ICAgICAgICAgICAgICAgICB8fCAoYmxvY2tzQXJlRmxpcHBlZCAmJiBwb2ludEluTG9naWNhbENv
bnRlbnRzLnkoKSA9PSBmaXJzdExpbmVXaXRoQ2hpbGRyZW5Ub3ApKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byBydW4gPSBmaXJzdExpbmVXaXRoQ2hpbGRyZW4tPmZpcnN0TGVhZkJveCgpOwotICAg
ICAgICAgICAgICAgIGlmIChydW4tPmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8gbmV4dCA9IHJ1bi0+bmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBydW4gPSBuZXh0OworICAgICAgICAgICAgICAgIGF1dG8g
Ym94ID0gZmlyc3RMaW5lV2l0aENoaWxkcmVuLT5maXJzdExlYWZCb3goKTsKKyAgICAgICAgICAg
ICAgICBpZiAoYm94LT5pc0xpbmVCcmVhaygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChh
dXRvIG5leHQgPSBib3gtPm5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYm94ID0gbmV4dDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgLy8geSBjb29yZGluYXRlIGlzIGFib3ZlIGZpcnN0IHJvb3QgbGluZSBib3gsIHNvIHJl
dHVybiB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0
aW9uRm9yUnVuKCp0aGlzLCBydW4sIHRydWUpOworICAgICAgICAgICAgICAgIHJldHVybiBwb3Np
dGlvbkZvclJ1bigqdGhpcywgYm94LCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIC8vIHBhc3MgdGhlIGJveCBhIHRvcCBwb3NpdGlvbiB0aGF0IGlzIGluc2lkZSBp
dAotICAgICAgICBMYXlvdXRQb2ludCBwb2ludChwb2ludEluTG9naWNhbENvbnRlbnRzLngoKSwg
Y2xvc2VzdFJ1bi0+bGluZSgpLT5ibG9ja0RpcmVjdGlvblBvaW50SW5MaW5lKCkpOworICAgICAg
ICBMYXlvdXRQb2ludCBwb2ludChwb2ludEluTG9naWNhbENvbnRlbnRzLngoKSwgY2xvc2VzdEJv
eC0+bGluZSgpLT5ibG9ja0RpcmVjdGlvblBvaW50SW5MaW5lKCkpOwogICAgICAgICBpZiAoIWlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBwb2ludCA9IHBvaW50LnRyYW5z
cG9zZWRQb2ludCgpOwotICAgICAgICBpZiAoY2xvc2VzdFJ1bi0+cmVuZGVyZXIoKS5pc1JlcGxh
Y2VkT3JJbmxpbmVCbG9jaygpKQotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnRS
ZXNwZWN0aW5nRWRpdGluZ0JvdW5kYXJpZXMoKnRoaXMsIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Jj4o
ZG93bmNhc3Q8UmVuZGVyQm94PihjbG9zZXN0UnVuLT5yZW5kZXJlcigpKSksIHBvaW50KTsKLSAg
ICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4oY2xvc2VzdFJ1bi0+cmVuZGVy
ZXIoKSkucG9zaXRpb25Gb3JQb2ludChwb2ludCwgbnVsbHB0cik7CisgICAgICAgIGlmIChjbG9z
ZXN0Qm94LT5yZW5kZXJlcigpLmlzUmVwbGFjZWRPcklubGluZUJsb2NrKCkpCisgICAgICAgICAg
ICByZXR1cm4gcG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcygqdGhp
cywgY29uc3RfY2FzdDxSZW5kZXJCb3gmPihkb3duY2FzdDxSZW5kZXJCb3g+KGNsb3Nlc3RCb3gt
PnJlbmRlcmVyKCkpKSwgcG9pbnQpOworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJP
YmplY3QmPihjbG9zZXN0Qm94LT5yZW5kZXJlcigpKS5wb3NpdGlvbkZvclBvaW50KHBvaW50LCBu
dWxscHRyKTsKICAgICB9CiAKICAgICBpZiAobGFzdExpbmVXaXRoQ2hpbGRyZW4pIHsKICAgICAg
ICAgLy8gV2UgaGl0IHRoaXMgY2FzZSBmb3IgTWFjIGJlaGF2aW9yIHdoZW4gdGhlIFkgY29vcmRp
bmF0ZSBpcyBiZWxvdyB0aGUgbGFzdCBib3guCiAgICAgICAgIEFTU0VSVChtb3ZlQ2FyZXRUb0Jv
dW5kYXJ5KTsKICAgICAgICAgSW5saW5lSXRlcmF0b3I6OkxpbmVMb2dpY2FsT3JkZXJDYWNoZSBv
cmRlckNhY2hlOwotICAgICAgICBpZiAoYXV0byBsb2dpY2FsbHlMYXN0UnVuID0gSW5saW5lSXRl
cmF0b3I6Omxhc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXJXaXRoTm9kZShsYXN0TGluZVdpdGhD
aGlsZHJlbiwgb3JkZXJDYWNoZSkpCi0gICAgICAgICAgICByZXR1cm4gcG9zaXRpb25Gb3JSdW4o
KnRoaXMsIGxvZ2ljYWxseUxhc3RSdW4sIGZhbHNlKTsKKyAgICAgICAgaWYgKGF1dG8gbG9naWNh
bGx5TGFzdEJveCA9IElubGluZUl0ZXJhdG9yOjpsYXN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVy
V2l0aE5vZGUobGFzdExpbmVXaXRoQ2hpbGRyZW4sIG9yZGVyQ2FjaGUpKQorICAgICAgICAgICAg
cmV0dXJuIHBvc2l0aW9uRm9yUnVuKCp0aGlzLCBsb2dpY2FsbHlMYXN0Qm94LCBmYWxzZSk7CiAg
ICAgfQogCiAgICAgLy8gQ2FuJ3QgcmVhY2ggdGhpcy4gV2UgaGF2ZSBhIHJvb3QgbGluZSBib3gs
IGJ1dCBpdCBoYXMgbm8ga2lkcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAppbmRleCBkMWNlMDdiZTM5NjU5YTVlYWZhNzI3NjU1YjMyOTQyZGY0M2EwOThmLi45Y2ZlZThi
OGI1OGYyYTgwYjdkYzBlNDJkMjk4MjdiMzIyNGNmNTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCkBAIC03OCw3ICs3OCw3IEBAIGNsYXNzIFZpc2libGVQb3NpdGlv
bjsKIGNsYXNzIFNlbGVjdGlvbkdlb21ldHJ5OwogI2VuZGlmCiAKLXN0cnVjdCBJbmxpbmVSdW5B
bmRPZmZzZXQ7CitzdHJ1Y3QgSW5saW5lQm94QW5kT2Zmc2V0Owogc3RydWN0IFBhaW50SW5mbzsK
IHN0cnVjdCBTaW1wbGVSYW5nZTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>