<?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>225356</bug_id>
          
          <creation_ts>2021-05-04 09:19:33 -0700</creation_ts>
          <short_desc>CustomPaintImage being in platform/graphics is a layering violation</short_desc>
          <delta_ts>2021-05-14 20:34:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>mkwst</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1756554</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-04 09:19:33 -0700</bug_when>
    <thetext>CustomPaintImage being in platform/graphics is a layering violation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756555</commentid>
    <comment_count>1</comment_count>
      <attachid>427676</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-04 09:21:44 -0700</bug_when>
    <thetext>Created attachment 427676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758921</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-11 09:20:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/77848911&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760327</commentid>
    <comment_count>3</comment_count>
      <attachid>428696</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-14 18:03:17 -0700</bug_when>
    <thetext>Created attachment 428696
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760328</commentid>
    <comment_count>4</comment_count>
      <attachid>428697</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-14 18:04:35 -0700</bug_when>
    <thetext>Created attachment 428697
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760344</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-14 20:34:24 -0700</bug_when>
    <thetext>Committed r277529 (237757@main): &lt;https://commits.webkit.org/237757@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428697.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427676</attachid>
            <date>2021-05-04 09:21:44 -0700</date>
            <delta_ts>2021-05-14 18:03:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225356-20210504092144.patch</filename>
            <type>text/plain</type>
            <size>35760</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Njk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDIxLTA1LTA0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDdXN0b21QYWludEltYWdlIGJlaW5n
IGluIHBsYXRmb3JtL2dyYXBoaWNzIGlzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUzNTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBsYXllcmluZyB2aW9s
YXRpb24gZm9yIGEgZmlsZSBpbiBwbGF0Zm9ybS8gdG8gcmVmZXJlbmNlIGNsYXNzZXMKKyAgICAg
ICAgbGlrZSBSZW5kZXJFbGVtZW50IG9yIFBhaW50V29ya2xldEdsb2JhbFNjb3BlLiBUaGlzIGZp
eGVzIHRoaXMgYnkgbW92aW5nCisgICAgICAgIEN1c3RvbVBhaW50SW1hZ2Ugb3V0IG9mIHBsYXRm
b3JtL2dyYXBoaWNzIHRvIGh0bWwvLCBuZXh0IHRvIHRoZSBleGlzdGluZworICAgICAgICBDdXN0
b21QYWludENhbnZhcyBjbGFzcy4gVGhpcyBhbHNvIHJlbW92ZXMgdGhlIHVudXNlZCBpc0N1c3Rv
bVBhaW50SW1hZ2UoKQorICAgICAgICBmdW5jdGlvbi4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBodG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcC4KKyAgICAgICAgKiBodG1sL0N1
c3RvbVBhaW50SW1hZ2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0N1
c3RvbVBhaW50SW1hZ2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0N1c3RvbVBhaW50SW1hZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmlzQ3VzdG9tUGFpbnRJbWFnZSBj
b25zdCk6IERlbGV0ZWQuCisKIDIwMjEtMDUtMDQgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtXZWJYUl0gUmVtb3ZlIHJlbmFtZWQgSURMIGZpbGVzIGluIFhjb2Rl
IHByb2plY3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNzY5NTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTE1OSw2ICsxMTU5LDcgQEAg
aHRtbC9DYW52YXNCYXNlLmNwcAogaHRtbC9DaGVja2JveElucHV0VHlwZS5jcHAKIGh0bWwvQ29s
b3JJbnB1dFR5cGUuY3BwCiBodG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAoraHRtbC9DdXN0b21Q
YWludEltYWdlLmNwcAogaHRtbC9ET01Gb3JtRGF0YS5jcHAKIGh0bWwvRE9NVG9rZW5MaXN0LmNw
cAogaHRtbC9ET01VUkwuY3BwCkBAIC0xOTQ2LDcgKzE5NDcsNiBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclNwYWNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0N1c3Rv
bVBhaW50SW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3Iu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyLmNwcApJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjc2OTU1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA5LDcgKzE0MDksNiBAQAogCQk0QjZC
NUNDMDIxNjQzODY0MDA2MDM4MTcgLyogUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCNkI1Q0JGMjE2NDM4NjQw
MDYwMzgxNyAvKiBQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oICovOyB9OwogCQk0QjZFODc2OTIx
NzZENjkyMDA0MjBFNUUgLyogQ1NTUGFpbnRJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjZFODc2ODIxNzZENjkyMDA0MjBFNUUgLyog
Q1NTUGFpbnRJbWFnZVZhbHVlLmggKi87IH07CiAJCTRCNkZBNkY0MEMzOUU0OEMwMDA4NzAxMSAv
KiBTbWFydFJlcGxhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRCNkZBNkYyMEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk0QjdBRTQ5MzIxNzdC
NTZGMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI3QUU0OTIyMTc3QjU2RjAwQzU5OTU5IC8qIEN1c3Rv
bVBhaW50SW1hZ2UuaCAqLzsgfTsKIAkJNEJBRTk1QjEwQjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRv
ckRlbGV0ZUFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEJBRTk1QjAwQjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTRCQUZEMENC
MjE5MEVCRDYwMEMwQUI2NCAvKiBDU1NQYWludFNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCQUZEMENBMjE5MEVCRDYwMEMwQUI2NCAvKiBDU1NQ
YWludFNpemUuaCAqLzsgfTsKIAkJNEJBRkQwQ0YyMTkwRjlCNTAwQzBBQjY0IC8qIFN0eWxlUHJv
cGVydHlNYXBSZWFkT25seS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEJBRkQwQ0UyMTkwRjlCNDAwQzBBQjY0IC8qIFN0eWxlUHJvcGVydHlNYXBSZWFk
T25seS5oICovOyB9OwpAQCAtODU1MSw4ICs4NTUwLDYgQEAKIAkJNEI2RTg3NkIyMTc2RDhBMTAw
NDIwRTVFIC8qIENTU1BhaW50SW1hZ2VWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQ
YWludEltYWdlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QjZGQTZG
MjBDMzlFNDhDMDAwODcwMTEgLyogU21hcnRSZXBsYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNtYXJ0UmVwbGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0QjZGQTZGNjBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU21hcnRSZXBsYWNlQ0YuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3VzdG9t
UGFpbnRJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdXN0b21QYWludEltYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRCN0FFNDk1MjE3N0I2M0UwMEM1OTk1OSAvKiBDdXN0b21Q
YWludEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEN1c3RvbVBhaW50SW1hZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkFFOTVCMDBCMkZBOUNFMDBBRUQ4QTAgLyog
RWRpdG9yRGVsZXRlQWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVk
aXRvckRlbGV0ZUFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkFGRDBD
QTIxOTBFQkQ2MDBDMEFCNjQgLyogQ1NTUGFpbnRTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1Bh
aW50U2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkFGRDBDRDIxOTBFQkU5
MDBDMEFCNjQgLyogQ1NTUGFpbnRTaXplLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDU1NQYWludFNpemUuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQyNzcsNiArMTQyNzQsOCBAQAogCQlCQzgyNDMy
NjBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDODI0M0U2MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJlcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaW5kb3dGZWF0dXJlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDODI0M0U3MEQwQ0ZENzUwMDQ2MEM4RiAv
KiBXaW5kb3dGZWF0dXJlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXaW5k
b3dGZWF0dXJlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzg0RjQzOTI2NDFB
QjE0MDBGNTdDMUMgLyogQ3VzdG9tUGFpbnRJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
dXN0b21QYWludEltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM4NEY0
M0EyNjQxQUIxNDAwRjU3QzFDIC8qIEN1c3RvbVBhaW50SW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q3VzdG9tUGFpbnRJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzhBRTM0
QzEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQzhBRTM0RDEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYWJsZUFyZWEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4Qjg1M0MwRTdDN0YxMTAwQUI2OTg0IC8qIFNj
cm9sbGJhclRoZW1lTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9s
bGJhclRoZW1lTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzU4NCw2ICsy
MzU4Myw4IEBACiAJCQkJRjU1QjNEODAxMjUxRjEyRDAwM0VGMjY5IC8qIENvbG9ySW5wdXRUeXBl
LmggKi8sCiAJCQkJNEIxRTEzRTkyMTc5MEQ3RTAwNDJDRjk4IC8qIEN1c3RvbVBhaW50Q2FudmFz
LmNwcCAqLywKIAkJCQk0QjFFMTNFNjIxNzkwRDY2MDA0MkNGOTggLyogQ3VzdG9tUGFpbnRDYW52
YXMuaCAqLywKKwkJCQlCQzg0RjQzOTI2NDFBQjE0MDBGNTdDMUMgLyogQ3VzdG9tUGFpbnRJbWFn
ZS5jcHAgKi8sCisJCQkJQkM4NEY0M0EyNjQxQUIxNDAwRjU3QzFDIC8qIEN1c3RvbVBhaW50SW1h
Z2UuaCAqLywKIAkJCQlFNTE3NjcwMjIwQjg4QzE0MDBENDExNjcgLyogRGF0YUxpc3RTdWdnZXN0
aW9uSW5mb3JtYXRpb24uaCAqLywKIAkJCQlGNTVCM0Q4MTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0
ZUlucHV0VHlwZS5jcHAgKi8sCiAJCQkJRjU1QjNEODIxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJ
bnB1dFR5cGUuaCAqLywKQEAgLTI2ODU0LDggKzI2ODU1LDYgQEAKIAkJCQk3MkJBQzNBNzIzRTE3
MzI4MDA4RDc0MUMgLyogQ29uY3JldGVJbWFnZUJ1ZmZlci5oICovLAogCQkJCTJEMkZDMDU0MTQ2
MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgKi8sCiAJCQkJMkQy
RkMwNTUxNDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmggKi8sCi0J
CQkJNEI3QUU0OTUyMTc3QjYzRTAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuY3BwICovLAot
CQkJCTRCN0FFNDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggKi8sCiAJ
CQkJQThDQjQxMDIwRTg1QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJheS5oICovLAogCQkJCTU1NTEz
MDAwMUU3Q0NDQ0EwMEE2OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMuaCAqLywKIAkJCQk0OUZDN0E0
RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLywKQEAgLTMx
NDQyLDcgKzMxNDQxLDYgQEAKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAgLyogQU5HTEVJ
bnN0YW5jZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMkFCMEVGQUM5MDYwMDlE
MENBRiAvKiBBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxRUZDRURDMjAyQjM4QTkw
MEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ0OUQ4NjRG
MjY0MEM5QzUwMDAxMjJERSAvKiBIaWdobGlnaHRWaXNpYmlsaXR5LmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTMxOTg0ODAxMUExRDgxN0IwMEExMzMxOCAvKiBBbmltYXRpb25F
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzExQUQxMjYyMzZEODZFNTAwNkZGMzdDIC8qIEFu
aW1hdGlvbkV2ZW50QmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjExMiw3ICszMjExMCw2IEBA
CiAJCQkJNjJDRDMyNUExMTU3RTU3QzAwNjNCMEE3IC8qIEN1c3RvbUV2ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1QzVEMjM4NTIyN0EwNjUyMDAwQjlCREEgLyogQ3VzdG9tSGVhZGVyRmllbGRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QjFFMTNFNzIxNzkwRDY2MDA0MkNGOTggLyogQ3VzdG9t
UGFpbnRDYW52YXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTRCN0FFNDkzMjE3N0I1NkYwMEM1OTk1
OSAvKiBDdXN0b21QYWludEltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENCNDEzRTBFODYz
M0ZEMDAzMkM0RjAgLyogRGFzaEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkEyMTE1
MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTI0
MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMzI2NjEsNiArMzI2NTgsNyBAQAogCQkJCTQ0MzBEMDBCMjU3NUE4M0UwMDQ2RDQwMSAvKiBI
aWdobGlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQ0ZBQkJEMThDMEFGNzgwMDZGODQ1MCAv
KiBIaWdobGlnaHREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDMwRDAwRDI1NzVBOEE1MDA0
NkQ0MDEgLyogSGlnaGxpZ2h0UmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0OUQ4NjRG
MjY0MEM5QzUwMDAxMjJERSAvKiBIaWdobGlnaHRWaXNpYmlsaXR5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzk0RDE1NDBDMjc1QzhCMDA2QkM2MTcgLyogSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTdEQ0UyMDIxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTc0MUQxMTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0u
aCBpbiBIZWFkZXJzICovLApAQCAtMzQ4OTksNyArMzQ4OTcsNiBAQAogCQkJCUU0NkI0MUY5MUNC
MjRFNzAwMDhGMTFERSAvKiBTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQ5OThBRUQyMTNGQjIyNEQwMDkwQjFBQSAvKiBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4QTQ4NDc4MEU1MjcyQzUwMEMzRkU3NiAvKiBTY3Jp
cHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUg
LyogU3R5bGVTY29wZU9yZGluYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRTRFMkE4MUUzQjE3
MTAwMDIzQkI4QSAvKiBTY3JpcHRFbGVtZW50Q2FjaGVkU2NyaXB0RmV0Y2hlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMTIyM0JBMjYwMjQ0RkUwMEIwQTBCNiAvKiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTIx
NCw2ICszNTIxMSw3IEBACiAJCQkJRTQ5NDZFQUYxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVs
ZUltcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NEYzN0UyMzY2MTYyNjAwM0FBNUM3IC8q
IFN0eWxlUnVsZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NjFENjVGMUJCMEM4MEQwMENC
NTY0NSAvKiBTdHlsZVNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEQ4NkU2RDI2NDAzOTRD
MDBCNjI0MjUgLyogU3R5bGVTY29wZU9yZGluYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTRBNEY0
OEFBMTZCMERGQzAwMEVEQkIyOSAvKiBTdHlsZVNjb3BlUnVsZVNldHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUY0N0E1RTNFMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTlENjM4MDEwMUFGMTczMjIwMDMxQTE1QyAvKiBTdHlsZVNl
bGZBbGlnbm1lbnREYXRhLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9DdXN0b21QYWludEltYWdlLmNwcAkocmV2aXNpb24gMjc2OTU1KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcDoyNzY5NTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ3VzdG9tUGFpbnRJbWFnZS5oIgorCisjaWYgRU5BQkxFKENTU19QQUlOVElOR19B
UEkpCisKKyNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRl
ICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNs
dWRlICJDU1NQcm9wZXJ0eVBhcnNlci5oIgorI2luY2x1ZGUgIkN1c3RvbVBhaW50Q2FudmFzLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCaXRtYXAuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQ1NTUGFpbnRDYWxsYmFjay5o
IgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJQYWludFJl
bmRlcmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTdHlsZVByb3BlcnR5TWFwLmgiCisjaW5jbHVkZSAiVHlwZWRPTUNTU0ltYWdlVmFsdWUuaCIK
KyNpbmNsdWRlICJUeXBlZE9NQ1NTVW5pdFZhbHVlLmgiCisjaW5jbHVkZSAiVHlwZWRPTUNTU1Vu
cGFyc2VkVmFsdWUuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db25zdHJ1Y3REYXRhLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3VzdG9tUGFpbnRJbWFnZTo6Q3VzdG9tUGFpbnRJ
bWFnZShQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6UGFpbnREZWZpbml0aW9uJiBkZWZpbml0aW9u
LCBjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlckVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBhcmd1bWVudHMpCisgICAgOiBtX3BhaW50RGVmaW5pdGlvbihtYWtlV2Vh
a1B0cihkZWZpbml0aW9uKSkKKyAgICAsIG1faW5wdXRQcm9wZXJ0aWVzKGRlZmluaXRpb24uaW5w
dXRQcm9wZXJ0aWVzKQorICAgICwgbV9lbGVtZW50KG1ha2VXZWFrUHRyKGVsZW1lbnQpKQorICAg
ICwgbV9hcmd1bWVudHMoYXJndW1lbnRzKQoreworICAgIHNldENvbnRhaW5lclNpemUoc2l6ZSk7
Cit9CisKK0N1c3RvbVBhaW50SW1hZ2U6On5DdXN0b21QYWludEltYWdlKCkgPSBkZWZhdWx0Owor
CitzdGF0aWMgUmVmUHRyPFR5cGVkT01DU1NTdHlsZVZhbHVlPiBleHRyYWN0Q29tcHV0ZWRQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgQ29tcHV0
ZWRTdHlsZUV4dHJhY3RvciBleHRyYWN0b3IoJmVsZW1lbnQpOworCisgICAgaWYgKGlzQ3VzdG9t
UHJvcGVydHlOYW1lKG5hbWUpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBleHRyYWN0b3IuY3Vz
dG9tUHJvcGVydHlWYWx1ZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIFN0eWxlUHJvcGVydHlNYXBS
ZWFkT25seTo6Y3VzdG9tUHJvcGVydHlWYWx1ZU9yRGVmYXVsdChuYW1lLCBlbGVtZW50LmRvY3Vt
ZW50KCksIHZhbHVlLmdldCgpLCAmZWxlbWVudCk7CisgICAgfQorCisgICAgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChuYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byB2YWx1ZSA9IGV4dHJhY3Rvci5w
cm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQsIERvTm90VXBkYXRlTGF5b3V0KTsKKyAgICByZXR1cm4g
U3R5bGVQcm9wZXJ0eU1hcFJlYWRPbmx5OjpyZWlmeVZhbHVlKHZhbHVlLmdldCgpLCBlbGVtZW50
LmRvY3VtZW50KCksICZlbGVtZW50KTsKK30KKworY2xhc3MgSGFzaE1hcFN0eWxlUHJvcGVydHlN
YXAgZmluYWwgOiBwdWJsaWMgU3R5bGVQcm9wZXJ0eU1hcCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxTdHlsZVByb3BlcnR5TWFwPiBjcmVhdGUoSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxUeXBl
ZE9NQ1NTU3R5bGVWYWx1ZT4+JiYgbWFwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSGFzaE1hcFN0eWxlUHJvcGVydHlNYXAoV1RGTW92ZShtYXApKSk7CisgICAgfQorCisg
ICAgc3RhdGljIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4gZXh0cmFjdENvbXB1dGVkUHJv
cGVydHkoY29uc3QgU3RyaW5nJiBuYW1lLCBFbGVtZW50JiBlbGVtZW50KQorICAgIHsKKyAgICAg
ICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBleHRyYWN0b3IoJmVsZW1lbnQpOworCisgICAgICAg
IGlmIChpc0N1c3RvbVByb3BlcnR5TmFtZShuYW1lKSkgeworICAgICAgICAgICAgYXV0byB2YWx1
ZSA9IGV4dHJhY3Rvci5jdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUpOworICAgICAgICAgICAgcmV0
dXJuIFN0eWxlUHJvcGVydHlNYXBSZWFkT25seTo6Y3VzdG9tUHJvcGVydHlWYWx1ZU9yRGVmYXVs
dChuYW1lLCBlbGVtZW50LmRvY3VtZW50KCksIHZhbHVlLmdldCgpLCAmZWxlbWVudCk7CisgICAg
ICAgIH0KKworICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlE
KG5hbWUpOworICAgICAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICBhdXRvIHZhbHVlID0gZXh0cmFjdG9yLnByb3BlcnR5VmFsdWUocHJv
cGVydHlJRCwgRG9Ob3RVcGRhdGVMYXlvdXQpOworICAgICAgICByZXR1cm4gU3R5bGVQcm9wZXJ0
eU1hcFJlYWRPbmx5OjpyZWlmeVZhbHVlKHZhbHVlLmdldCgpLCBlbGVtZW50LmRvY3VtZW50KCks
ICZlbGVtZW50KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgSGFzaE1hcFN0eWxl
UHJvcGVydHlNYXAoSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4+
JiYgbWFwKQorICAgICAgICA6IG1fbWFwKFdURk1vdmUobWFwKSkKKyAgICB7CisgICAgfQorCisg
ICAgdm9pZCBjbGVhckVsZW1lbnQoKSBvdmVycmlkZSB7IH0KKworICAgIFJlZlB0cjxUeXBlZE9N
Q1NTU3R5bGVWYWx1ZT4gZ2V0KGNvbnN0IFN0cmluZyYgcHJvcGVydHkpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1ha2VSZWZQdHIobV9tYXAuZ2V0KHByb3BlcnR5KSk7IH0KKworICAgIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8VHlwZWRPTUNTU1N0eWxlVmFsdWU+PiBtX21hcDsKK307CisKK0ltYWdl
RHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkb0N1c3RvbVBhaW50KEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgZGVzdFNpemUpCit7CisgICAgaWYgKCFt
X2VsZW1lbnQgfHwgIW1fZWxlbWVudC0+ZWxlbWVudCgpIHx8ICFtX3BhaW50RGVmaW5pdGlvbikK
KyAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKKworICAgIEpTQzo6
SlNWYWx1ZSBwYWludENvbnN0cnVjdG9yID0gbV9wYWludERlZmluaXRpb24tPnBhaW50Q29uc3Ry
dWN0b3I7CisKKyAgICBpZiAoIXBhaW50Q29uc3RydWN0b3IpCisgICAgICAgIHJldHVybiBJbWFn
ZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7CisKKyAgICBBU1NFUlQoIW1fZWxlbWVudC0+bmVlZHNM
YXlvdXQoKSk7CisgICAgQVNTRVJUKCFtX2VsZW1lbnQtPmVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5u
ZWVkc1N0eWxlUmVjYWxjKCkpOworCisgICAgSlNDU1NQYWludENhbGxiYWNrJiBjYWxsYmFjayA9
IHN0YXRpY19jYXN0PEpTQ1NTUGFpbnRDYWxsYmFjayY+KG1fcGFpbnREZWZpbml0aW9uLT5wYWlu
dENhbGxiYWNrLmdldCgpKTsKKyAgICBhdXRvKiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gY2Fs
bGJhY2suc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCkKKyAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKKwor
ICAgIGF1dG8gY2FudmFzID0gQ3VzdG9tUGFpbnRDYW52YXM6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgZGVzdFNpemUud2lkdGgoKSwgZGVzdFNpemUuaGVpZ2h0KCkpOworICAgIEV4
Y2VwdGlvbk9yPFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4+IGNvbnRleHRPckV4Y2Vw
dGlvbiA9IGNhbnZhcy0+Z2V0Q29udGV4dCgpOworCisgICAgaWYgKGNvbnRleHRPckV4Y2VwdGlv
bi5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90
aGluZzsKKyAgICBhdXRvIGNvbnRleHQgPSBjb250ZXh0T3JFeGNlcHRpb24ucmVsZWFzZVJldHVy
blZhbHVlKCk7CisKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFR5cGVkT01DU1NTdHlsZVZh
bHVlPj4gcHJvcGVydHlWYWx1ZXM7CisKKyAgICBpZiAoYXV0byogZWxlbWVudCA9IG1fZWxlbWVu
dC0+ZWxlbWVudCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG1faW5wdXRQcm9wZXJ0
aWVzKQorICAgICAgICAgICAgcHJvcGVydHlWYWx1ZXMuYWRkKG5hbWUsIGV4dHJhY3RDb21wdXRl
ZFByb3BlcnR5KG5hbWUsICplbGVtZW50KSk7CisgICAgfQorCisgICAgYXV0byBzaXplID0gQ1NT
UGFpbnRTaXplOjpjcmVhdGUoZGVzdFNpemUud2lkdGgoKSwgZGVzdFNpemUuaGVpZ2h0KCkpOwor
ICAgIFJlZjxTdHlsZVByb3BlcnR5TWFwUmVhZE9ubHk+IHByb3BlcnR5TWFwID0gSGFzaE1hcFN0
eWxlUHJvcGVydHlNYXA6OmNyZWF0ZShXVEZNb3ZlKHByb3BlcnR5VmFsdWVzKSk7CisKKyAgICBh
dXRvJiB2bSA9IHBhaW50Q29uc3RydWN0b3IuZ2V0T2JqZWN0KCktPnZtKCk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpwYWludENvbnN0cnVjdG9yLmdldE9i
amVjdCgpLT5nbG9iYWxPYmplY3QoKTsKKworICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3Qg
PSBnbG9iYWxPYmplY3Q7CisgICAgSlNDOjpBcmdMaXN0IG5vQXJnczsKKyAgICBKU0M6OkpTVmFs
dWUgdGhpc09iamVjdCA9IHsgSlNDOjpjb25zdHJ1Y3QoJmxleGljYWxHbG9iYWxPYmplY3QsIHBh
aW50Q29uc3RydWN0b3IsIG5vQXJncywgIkZhaWxlZCB0byBjb25zdHJ1Y3QgcGFpbnQgY2xhc3Mi
KSB9OworCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBy
ZXBvcnRFeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKKyAgICB9CisKKyAg
ICBhdXRvIHJlc3VsdCA9IGNhbGxiYWNrLmhhbmRsZUV2ZW50KFdURk1vdmUodGhpc09iamVjdCks
ICpjb250ZXh0LCBzaXplLCBwcm9wZXJ0eU1hcCwgbV9hcmd1bWVudHMpOworICAgIGlmIChyZXN1
bHQudHlwZSgpICE9IENhbGxiYWNrUmVzdWx0VHlwZTo6U3VjY2VzcykKKyAgICAgICAgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKKworICAgIGNhbnZhcy0+cmVwbGF5RGlzcGxh
eUxpc3QoJmRlc3RDb250ZXh0KTsKKworICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZERy
YXc7Cit9CisKK0ltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7
CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRlc3RDb250ZXh0KTsK
KyAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVP
cGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBkZXN0Q29udGV4dC5jbGlwKGRl
c3RSZWN0KTsKKyAgICBkZXN0Q29udGV4dC50cmFuc2xhdGUoZGVzdFJlY3QubG9jYXRpb24oKSk7
CisgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKKyAgICAgICAgZGVz
dENvbnRleHQuc2NhbGUoZGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCkpOworICAgIGRl
c3RDb250ZXh0LnRyYW5zbGF0ZSgtc3JjUmVjdC5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gZG9D
dXN0b21QYWludChkZXN0Q29udGV4dCwgc2l6ZSgpKTsKK30KKwordm9pZCBDdXN0b21QYWludElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKK3sKKyAgICAvLyBBbGxvdyB0aGUgZ2VuZXJhdG9yIHRvIHByb3ZpZGUgdmlzdWFsbHkt
ZXF1aXZhbGVudCB0aWxpbmcgcGFyYW1ldGVycyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgorICAg
IEZsb2F0U2l6ZSBhZGp1c3RlZFNpemUgPSBzaXplKCk7CisgICAgRmxvYXRSZWN0IGFkanVzdGVk
U3JjUmVjdCA9IHNyY1JlY3Q7CisKKyAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNv
bnRleHQncyBzY2FsZSB0byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCisgICAgQWZm
aW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgZG91YmxlIHhTY2Fs
ZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueFNjYWxlKCkpOworICAgIGRvdWJsZSB5U2NhbGUgPSBm
YWJzKGRlc3RDb250ZXh0Q1RNLnlTY2FsZSgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWRqdXN0
ZWRQYXR0ZXJuQ1RNID0gcGF0dGVyblRyYW5zZm9ybTsKKyAgICBhZGp1c3RlZFBhdHRlcm5DVE0u
c2NhbGUoMS4wIC8geFNjYWxlLCAxLjAgLyB5U2NhbGUpOworICAgIGFkanVzdGVkU3JjUmVjdC5z
Y2FsZSh4U2NhbGUsIHlTY2FsZSk7CisKKyAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGFkanVzdGVkU2l6ZSwgRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCLCBkZXN0Q29udGV4dCk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBkb0N1c3RvbVBhaW50KGJ1ZmZlci0+Y29udGV4dCgpLCBhZGp1c3RlZFNpemUpOworCisg
ICAgaWYgKGRlc3RDb250ZXh0LmRyYXdMdW1pbmFuY2VNYXNrKCkpCisgICAgICAgIGJ1ZmZlci0+
Y29udmVydFRvTHVtaW5hbmNlTWFzaygpOworCisgICAgYnVmZmVyLT5kcmF3UGF0dGVybihkZXN0
Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgYWRqdXN0ZWRQYXR0ZXJuQ1RNLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgZGVzdENvbnRleHQuc2V0RHJhd0x1bWluYW5j
ZU1hc2soZmFsc2UpOworfQorCit9CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Q3VzdG9tUGFpbnRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vz
dG9tUGFpbnRJbWFnZS5oCShyZXZpc2lvbiAyNzY5NTUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuaDoyNzY5NTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKKworI2luY2x1ZGUgIkdlbmVy
YXRlZEltYWdlLmgiCisjaW5jbHVkZSAiUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1h
Z2VCdWZmZXI7CitjbGFzcyBSZW5kZXJFbGVtZW50OworCitjbGFzcyBDdXN0b21QYWludEltYWdl
IGZpbmFsIDogcHVibGljIEdlbmVyYXRlZEltYWdlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PEN1c3RvbVBhaW50SW1hZ2U+IGNyZWF0ZShQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6UGFpbnRE
ZWZpbml0aW9uJiBkZWZpbml0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlckVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDdXN0b21QYWludEltYWdlKGRlZmluaXRpb24sIHNp
emUsIGVsZW1lbnQsIGFyZ3VtZW50cykpOworICAgIH0KKworICAgIHZpcnR1YWwgfkN1c3RvbVBh
aW50SW1hZ2UoKTsKKyAgICBib29sIGlzQ3VzdG9tUGFpbnRJbWFnZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKworcHJpdmF0ZToKKyAgICBDdXN0b21QYWludEltYWdlKFBhaW50
V29ya2xldEdsb2JhbFNjb3BlOjpQYWludERlZmluaXRpb24mLCBjb25zdCBGbG9hdFNpemUmLCBS
ZW5kZXJFbGVtZW50JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cyk7CisKKyAgICBJ
bWFnZURyYXdSZXN1bHQgZG9DdXN0b21QYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFNpemUmKTsKKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisKKyAgICBXZWFrUHRyPFBhaW50V29y
a2xldEdsb2JhbFNjb3BlOjpQYWludERlZmluaXRpb24+IG1fcGFpbnREZWZpbml0aW9uOworICAg
IFZlY3RvcjxTdHJpbmc+IG1faW5wdXRQcm9wZXJ0aWVzOworICAgIFdlYWtQdHI8UmVuZGVyRWxl
bWVudD4gbV9lbGVtZW50OworICAgIFZlY3RvcjxTdHJpbmc+IG1fYXJndW1lbnRzOworfTsKKwor
fQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0lNQUdFKEN1c3RvbVBhaW50SW1hZ2UpCisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5oCShyZXZpc2lvbiAy
NzY5NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB+
Q3VzdG9tUGFpbnRJbWFnZSgpOwotICAgIGJvb2wgaXNDdXN0b21QYWludEltYWdlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiBwcml2YXRlOgogICAgIEN1c3RvbVBhaW50SW1h
Z2UoUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OlBhaW50RGVmaW5pdGlvbiYsIGNvbnN0IEZsb2F0
U2l6ZSYsIFJlbmRlckVsZW1lbnQmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3Rv
bVBhaW50SW1hZ2UuY3BwCShyZXZpc2lvbiAyNzY5NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIx
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ3VzdG9tUGFpbnRJbWFnZS5oIgotCi0jaWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCi0K
LSNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJDU1NJ
bWFnZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRlICJD
U1NQcm9wZXJ0eVBhcnNlci5oIgotI2luY2x1ZGUgIkN1c3RvbVBhaW50Q2FudmFzLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCaXRtYXAuaCIKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQ1NTUGFpbnRDYWxsYmFjay5oIgotI2lu
Y2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlICJQYWludFJlbmRlcmlu
Z0NvbnRleHQyRC5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTdHls
ZVByb3BlcnR5TWFwLmgiCi0jaW5jbHVkZSAiVHlwZWRPTUNTU0ltYWdlVmFsdWUuaCIKLSNpbmNs
dWRlICJUeXBlZE9NQ1NTVW5pdFZhbHVlLmgiCi0jaW5jbHVkZSAiVHlwZWRPTUNTU1VucGFyc2Vk
VmFsdWUuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db25zdHJ1Y3REYXRhLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotQ3VzdG9tUGFpbnRJbWFnZTo6Q3VzdG9tUGFpbnRJbWFnZShQ
YWludFdvcmtsZXRHbG9iYWxTY29wZTo6UGFpbnREZWZpbml0aW9uJiBkZWZpbml0aW9uLCBjb25z
dCBGbG9hdFNpemUmIHNpemUsIFJlbmRlckVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBhcmd1bWVudHMpCi0gICAgOiBtX3BhaW50RGVmaW5pdGlvbihtYWtlV2Vha1B0cihk
ZWZpbml0aW9uKSkKLSAgICAsIG1faW5wdXRQcm9wZXJ0aWVzKGRlZmluaXRpb24uaW5wdXRQcm9w
ZXJ0aWVzKQotICAgICwgbV9lbGVtZW50KG1ha2VXZWFrUHRyKGVsZW1lbnQpKQotICAgICwgbV9h
cmd1bWVudHMoYXJndW1lbnRzKQotewotICAgIHNldENvbnRhaW5lclNpemUoc2l6ZSk7Ci19Ci0K
LUN1c3RvbVBhaW50SW1hZ2U6On5DdXN0b21QYWludEltYWdlKCkgPSBkZWZhdWx0OwotCi1zdGF0
aWMgUmVmUHRyPFR5cGVkT01DU1NTdHlsZVZhbHVlPiBleHRyYWN0Q29tcHV0ZWRQcm9wZXJ0eShj
b25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgQ29tcHV0ZWRTdHls
ZUV4dHJhY3RvciBleHRyYWN0b3IoJmVsZW1lbnQpOwotCi0gICAgaWYgKGlzQ3VzdG9tUHJvcGVy
dHlOYW1lKG5hbWUpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBleHRyYWN0b3IuY3VzdG9tUHJv
cGVydHlWYWx1ZShuYW1lKTsKLSAgICAgICAgcmV0dXJuIFN0eWxlUHJvcGVydHlNYXBSZWFkT25s
eTo6Y3VzdG9tUHJvcGVydHlWYWx1ZU9yRGVmYXVsdChuYW1lLCBlbGVtZW50LmRvY3VtZW50KCks
IHZhbHVlLmdldCgpLCAmZWxlbWVudCk7Ci0gICAgfQotCi0gICAgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlEID0gY3NzUHJvcGVydHlJRChuYW1lKTsKLSAgICBpZiAoIXByb3BlcnR5SUQpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byB2YWx1ZSA9IGV4dHJhY3Rvci5wcm9wZXJ0
eVZhbHVlKHByb3BlcnR5SUQsIERvTm90VXBkYXRlTGF5b3V0KTsKLSAgICByZXR1cm4gU3R5bGVQ
cm9wZXJ0eU1hcFJlYWRPbmx5OjpyZWlmeVZhbHVlKHZhbHVlLmdldCgpLCBlbGVtZW50LmRvY3Vt
ZW50KCksICZlbGVtZW50KTsKLX0KLQotY2xhc3MgSGFzaE1hcFN0eWxlUHJvcGVydHlNYXAgZmlu
YWwgOiBwdWJsaWMgU3R5bGVQcm9wZXJ0eU1hcCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxT
dHlsZVByb3BlcnR5TWFwPiBjcmVhdGUoSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxUeXBlZE9NQ1NT
U3R5bGVWYWx1ZT4+JiYgbWFwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SGFzaE1hcFN0eWxlUHJvcGVydHlNYXAoV1RGTW92ZShtYXApKSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4gZXh0cmFjdENvbXB1dGVkUHJvcGVydHko
Y29uc3QgU3RyaW5nJiBuYW1lLCBFbGVtZW50JiBlbGVtZW50KQotICAgIHsKLSAgICAgICAgQ29t
cHV0ZWRTdHlsZUV4dHJhY3RvciBleHRyYWN0b3IoJmVsZW1lbnQpOwotCi0gICAgICAgIGlmIChp
c0N1c3RvbVByb3BlcnR5TmFtZShuYW1lKSkgewotICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGV4
dHJhY3Rvci5jdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIFN0
eWxlUHJvcGVydHlNYXBSZWFkT25seTo6Y3VzdG9tUHJvcGVydHlWYWx1ZU9yRGVmYXVsdChuYW1l
LCBlbGVtZW50LmRvY3VtZW50KCksIHZhbHVlLmdldCgpLCAmZWxlbWVudCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKG5hbWUp
OwotICAgICAgICBpZiAoIXByb3BlcnR5SUQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgICAgICBhdXRvIHZhbHVlID0gZXh0cmFjdG9yLnByb3BlcnR5VmFsdWUocHJvcGVydHlJ
RCwgRG9Ob3RVcGRhdGVMYXlvdXQpOwotICAgICAgICByZXR1cm4gU3R5bGVQcm9wZXJ0eU1hcFJl
YWRPbmx5OjpyZWlmeVZhbHVlKHZhbHVlLmdldCgpLCBlbGVtZW50LmRvY3VtZW50KCksICZlbGVt
ZW50KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgSGFzaE1hcFN0eWxlUHJvcGVy
dHlNYXAoSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4+JiYgbWFw
KQotICAgICAgICA6IG1fbWFwKFdURk1vdmUobWFwKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9p
ZCBjbGVhckVsZW1lbnQoKSBvdmVycmlkZSB7IH0KLQotICAgIFJlZlB0cjxUeXBlZE9NQ1NTU3R5
bGVWYWx1ZT4gZ2V0KGNvbnN0IFN0cmluZyYgcHJvcGVydHkpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1ha2VSZWZQdHIobV9tYXAuZ2V0KHByb3BlcnR5KSk7IH0KLQotICAgIEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8VHlwZWRPTUNTU1N0eWxlVmFsdWU+PiBtX21hcDsKLX07Ci0KLUltYWdlRHJhd1Jl
c3VsdCBDdXN0b21QYWludEltYWdlOjpkb0N1c3RvbVBhaW50KEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgZGVzdFNpemUpCi17Ci0gICAgaWYgKCFtX2VsZW1l
bnQgfHwgIW1fZWxlbWVudC0+ZWxlbWVudCgpIHx8ICFtX3BhaW50RGVmaW5pdGlvbikKLSAgICAg
ICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQotICAgIEpTQzo6SlNWYWx1
ZSBwYWludENvbnN0cnVjdG9yID0gbV9wYWludERlZmluaXRpb24tPnBhaW50Q29uc3RydWN0b3I7
Ci0KLSAgICBpZiAoIXBhaW50Q29uc3RydWN0b3IpCi0gICAgICAgIHJldHVybiBJbWFnZURyYXdS
ZXN1bHQ6OkRpZE5vdGhpbmc7Ci0KLSAgICBBU1NFUlQoIW1fZWxlbWVudC0+bmVlZHNMYXlvdXQo
KSk7Ci0gICAgQVNTRVJUKCFtX2VsZW1lbnQtPmVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5uZWVkc1N0
eWxlUmVjYWxjKCkpOwotCi0gICAgSlNDU1NQYWludENhbGxiYWNrJiBjYWxsYmFjayA9IHN0YXRp
Y19jYXN0PEpTQ1NTUGFpbnRDYWxsYmFjayY+KG1fcGFpbnREZWZpbml0aW9uLT5wYWludENhbGxi
YWNrLmdldCgpKTsKLSAgICBhdXRvKiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gY2FsbGJhY2su
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCkKLSAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQotICAgIGF1
dG8gY2FudmFzID0gQ3VzdG9tUGFpbnRDYW52YXM6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgZGVzdFNpemUud2lkdGgoKSwgZGVzdFNpemUuaGVpZ2h0KCkpOwotICAgIEV4Y2VwdGlv
bk9yPFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4+IGNvbnRleHRPckV4Y2VwdGlvbiA9
IGNhbnZhcy0+Z2V0Q29udGV4dCgpOwotCi0gICAgaWYgKGNvbnRleHRPckV4Y2VwdGlvbi5oYXNF
eGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsK
LSAgICBhdXRvIGNvbnRleHQgPSBjb250ZXh0T3JFeGNlcHRpb24ucmVsZWFzZVJldHVyblZhbHVl
KCk7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFR5cGVkT01DU1NTdHlsZVZhbHVlPj4g
cHJvcGVydHlWYWx1ZXM7Ci0KLSAgICBpZiAoYXV0byogZWxlbWVudCA9IG1fZWxlbWVudC0+ZWxl
bWVudCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG1faW5wdXRQcm9wZXJ0aWVzKQot
ICAgICAgICAgICAgcHJvcGVydHlWYWx1ZXMuYWRkKG5hbWUsIGV4dHJhY3RDb21wdXRlZFByb3Bl
cnR5KG5hbWUsICplbGVtZW50KSk7Ci0gICAgfQotCi0gICAgYXV0byBzaXplID0gQ1NTUGFpbnRT
aXplOjpjcmVhdGUoZGVzdFNpemUud2lkdGgoKSwgZGVzdFNpemUuaGVpZ2h0KCkpOwotICAgIFJl
ZjxTdHlsZVByb3BlcnR5TWFwUmVhZE9ubHk+IHByb3BlcnR5TWFwID0gSGFzaE1hcFN0eWxlUHJv
cGVydHlNYXA6OmNyZWF0ZShXVEZNb3ZlKHByb3BlcnR5VmFsdWVzKSk7Ci0KLSAgICBhdXRvJiB2
bSA9IHBhaW50Q29uc3RydWN0b3IuZ2V0T2JqZWN0KCktPnZtKCk7Ci0gICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpwYWludENvbnN0cnVjdG9yLmdldE9iamVjdCgp
LT5nbG9iYWxPYmplY3QoKTsKLQotICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9i
YWxPYmplY3Q7Ci0gICAgSlNDOjpBcmdMaXN0IG5vQXJnczsKLSAgICBKU0M6OkpTVmFsdWUgdGhp
c09iamVjdCA9IHsgSlNDOjpjb25zdHJ1Y3QoJmxleGljYWxHbG9iYWxPYmplY3QsIHBhaW50Q29u
c3RydWN0b3IsIG5vQXJncywgIkZhaWxlZCB0byBjb25zdHJ1Y3QgcGFpbnQgY2xhc3MiKSB9Owot
Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICByZXBvcnRF
eGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICAg
ICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLSAgICB9Ci0KLSAgICBhdXRv
IHJlc3VsdCA9IGNhbGxiYWNrLmhhbmRsZUV2ZW50KFdURk1vdmUodGhpc09iamVjdCksICpjb250
ZXh0LCBzaXplLCBwcm9wZXJ0eU1hcCwgbV9hcmd1bWVudHMpOwotICAgIGlmIChyZXN1bHQudHlw
ZSgpICE9IENhbGxiYWNrUmVzdWx0VHlwZTo6U3VjY2VzcykKLSAgICAgICAgcmV0dXJuIEltYWdl
RHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQotICAgIGNhbnZhcy0+cmVwbGF5RGlzcGxheUxpc3Qo
JmRlc3RDb250ZXh0KTsKLQotICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZERyYXc7Ci19
Ci0KLUltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRlc3RDb250ZXh0KTsKLSAgICBk
ZXN0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRv
cigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLSAgICBkZXN0Q29udGV4dC5jbGlwKGRlc3RSZWN0
KTsKLSAgICBkZXN0Q29udGV4dC50cmFuc2xhdGUoZGVzdFJlY3QubG9jYXRpb24oKSk7Ci0gICAg
aWYgKGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKLSAgICAgICAgZGVzdENvbnRl
eHQuc2NhbGUoZGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCkpOwotICAgIGRlc3RDb250
ZXh0LnRyYW5zbGF0ZSgtc3JjUmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gZG9DdXN0b21Q
YWludChkZXN0Q29udGV4dCwgc2l6ZSgpKTsKLX0KLQotdm9pZCBDdXN0b21QYWludEltYWdlOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICAvLyBBbGxvdyB0aGUgZ2VuZXJhdG9yIHRvIHByb3ZpZGUgdmlzdWFsbHktZXF1aXZh
bGVudCB0aWxpbmcgcGFyYW1ldGVycyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgotICAgIEZsb2F0
U2l6ZSBhZGp1c3RlZFNpemUgPSBzaXplKCk7Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dCA9IHNyY1JlY3Q7Ci0KLSAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQn
cyBzY2FsZSB0byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZmaW5lVHJh
bnNmb3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4
dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgZG91YmxlIHhTY2FsZSA9IGZh
YnMoZGVzdENvbnRleHRDVE0ueFNjYWxlKCkpOwotICAgIGRvdWJsZSB5U2NhbGUgPSBmYWJzKGRl
c3RDb250ZXh0Q1RNLnlTY2FsZSgpKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYWRqdXN0ZWRQYXR0
ZXJuQ1RNID0gcGF0dGVyblRyYW5zZm9ybTsKLSAgICBhZGp1c3RlZFBhdHRlcm5DVE0uc2NhbGUo
MS4wIC8geFNjYWxlLCAxLjAgLyB5U2NhbGUpOwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZSh4
U2NhbGUsIHlTY2FsZSk7Ci0KLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGFkanVzdGVkU2l6ZSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
LCBkZXN0Q29udGV4dCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBk
b0N1c3RvbVBhaW50KGJ1ZmZlci0+Y29udGV4dCgpLCBhZGp1c3RlZFNpemUpOwotCi0gICAgaWYg
KGRlc3RDb250ZXh0LmRyYXdMdW1pbmFuY2VNYXNrKCkpCi0gICAgICAgIGJ1ZmZlci0+Y29udmVy
dFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgYnVmZmVyLT5kcmF3UGF0dGVybihkZXN0Q29udGV4
dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgYWRqdXN0ZWRQYXR0ZXJuQ1RNLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgZGVzdENvbnRleHQuc2V0RHJhd0x1bWluYW5jZU1hc2so
ZmFsc2UpOwotfQotCi19Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmgJKHJldmlzaW9uIDI3Njk1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdf
QVBJKQotCi0jaW5jbHVkZSAiR2VuZXJhdGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJQYWludFdvcmts
ZXRHbG9iYWxTY29wZS5oIgotCi0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIFJlbmRlckVsZW1lbnQ7Ci0K
LWNsYXNzIEN1c3RvbVBhaW50SW1hZ2UgZmluYWwgOiBwdWJsaWMgR2VuZXJhdGVkSW1hZ2Ugewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8Q3VzdG9tUGFpbnRJbWFnZT4gY3JlYXRlKFBhaW50V29y
a2xldEdsb2JhbFNjb3BlOjpQYWludERlZmluaXRpb24mIGRlZmluaXRpb24sIGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgUmVuZGVyRWxlbWVudCYgZWxlbWVudCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFyZ3VtZW50cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEN1c3RvbVBh
aW50SW1hZ2UoZGVmaW5pdGlvbiwgc2l6ZSwgZWxlbWVudCwgYXJndW1lbnRzKSk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB+Q3VzdG9tUGFpbnRJbWFnZSgpOwotICAgIGJvb2wgaXNDdXN0b21QYWlu
dEltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcml2YXRlOgotICAg
IEN1c3RvbVBhaW50SW1hZ2UoUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OlBhaW50RGVmaW5pdGlv
biYsIGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlckVsZW1lbnQmLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYXJndW1lbnRzKTsKLQotICAgIEltYWdlRHJhd1Jlc3VsdCBkb0N1c3RvbVBhaW50KEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0U2l6ZSYpOwotCi0gICAgSW1hZ2VEcmF3UmVzdWx0IGRy
YXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7
Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsK
LQotICAgIFdlYWtQdHI8UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OlBhaW50RGVmaW5pdGlvbj4g
bV9wYWludERlZmluaXRpb247Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9pbnB1dFByb3BlcnRpZXM7
Ci0gICAgV2Vha1B0cjxSZW5kZXJFbGVtZW50PiBtX2VsZW1lbnQ7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gbV9hcmd1bWVudHM7Ci19OwotCi19Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfSU1BR0Uo
Q3VzdG9tUGFpbnRJbWFnZSkKLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5oCShyZXZpc2lvbiAyNzY5NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNHcmFkaWVudEltYWdlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUERGRG9jdW1lbnRJbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ3VzdG9tUGFpbnRJbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lS25vd25U
b0JlT3BhcXVlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0FuaW1hdGVkKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0K
</data>
<flag name="commit-queue"
          id="448358"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428696</attachid>
            <date>2021-05-14 18:03:17 -0700</date>
            <delta_ts>2021-05-14 18:04:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225356-20210504092144.patch</filename>
            <type>text/plain</type>
            <size>34459</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Njk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDIxLTA1LTA0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDdXN0b21QYWludEltYWdlIGJlaW5n
IGluIHBsYXRmb3JtL2dyYXBoaWNzIGlzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUzNTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBsYXllcmluZyB2aW9s
YXRpb24gZm9yIGEgZmlsZSBpbiBwbGF0Zm9ybS8gdG8gcmVmZXJlbmNlIGNsYXNzZXMKKyAgICAg
ICAgbGlrZSBSZW5kZXJFbGVtZW50IG9yIFBhaW50V29ya2xldEdsb2JhbFNjb3BlLiBUaGlzIGZp
eGVzIHRoaXMgYnkgbW92aW5nCisgICAgICAgIEN1c3RvbVBhaW50SW1hZ2Ugb3V0IG9mIHBsYXRm
b3JtL2dyYXBoaWNzIHRvIGh0bWwvLCBuZXh0IHRvIHRoZSBleGlzdGluZworICAgICAgICBDdXN0
b21QYWludENhbnZhcyBjbGFzcy4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0N1c3Rv
bVBhaW50SW1hZ2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9DdXN0b21QYWludEltYWdlLmNwcC4KKyAgICAgICAgKiBodG1sL0N1c3RvbVBhaW50SW1h
Z2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9t
UGFpbnRJbWFnZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1h
Z2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50
SW1hZ2UuaDogUmVtb3ZlZC4KKwogMjAyMS0wNS0wNCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBs
ZS5jb20+CiAKICAgICAgICAgW1dlYlhSXSBSZW1vdmUgcmVuYW1lZCBJREwgZmlsZXMgaW4gWGNv
ZGUgcHJvamVjdApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI3Njk1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTU5LDYgKzExNTksNyBA
QCBodG1sL0NhbnZhc0Jhc2UuY3BwCiBodG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcAogaHRtbC9D
b2xvcklucHV0VHlwZS5jcHAKIGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCitodG1sL0N1c3Rv
bVBhaW50SW1hZ2UuY3BwCiBodG1sL0RPTUZvcm1EYXRhLmNwcAogaHRtbC9ET01Ub2tlbkxpc3Qu
Y3BwCiBodG1sL0RPTVVSTC5jcHAKQEAgLTE5NDYsNyArMTk0Nyw2IEBAIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yU3BhY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvQ3Vz
dG9tUGFpbnRJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuY3BwCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyNzY5NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0MDksNyArMTQwOSw2IEBACiAJCTRC
NkI1Q0MwMjE2NDM4NjQwMDYwMzgxNyAvKiBQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI2QjVDQkYyMTY0Mzg2
NDAwNjAzODE3IC8qIFBhaW50V29ya2xldEdsb2JhbFNjb3BlLmggKi87IH07CiAJCTRCNkU4NzY5
MjE3NkQ2OTIwMDQyMEU1RSAvKiBDU1NQYWludEltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCNkU4NzY4MjE3NkQ2OTIwMDQyMEU1RSAv
KiBDU1NQYWludEltYWdlVmFsdWUuaCAqLzsgfTsKIAkJNEI2RkE2RjQwQzM5RTQ4QzAwMDg3MDEx
IC8qIFNtYXJ0UmVwbGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEI2RkE2RjIwQzM5RTQ4QzAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTRCN0FFNDkzMjE3
N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3Vz
dG9tUGFpbnRJbWFnZS5oICovOyB9OwogCQk0QkFFOTVCMTBCMkZBOUNFMDBBRUQ4QTAgLyogRWRp
dG9yRGVsZXRlQWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0QkFFOTVCMDBCMkZBOUNFMDBBRUQ4QTAgLyogRWRpdG9yRGVsZXRlQWN0aW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEJBRkQw
Q0IyMTkwRUJENjAwQzBBQjY0IC8qIENTU1BhaW50U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJBRkQwQ0EyMTkwRUJENjAwQzBBQjY0IC8qIENT
U1BhaW50U2l6ZS5oICovOyB9OwogCQk0QkFGRDBDRjIxOTBGOUI1MDBDMEFCNjQgLyogU3R5bGVQ
cm9wZXJ0eU1hcFJlYWRPbmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QkFGRDBDRTIxOTBGOUI0MDBDMEFCNjQgLyogU3R5bGVQcm9wZXJ0eU1hcFJl
YWRPbmx5LmggKi87IH07CkBAIC04NTUxLDggKzg1NTAsNiBAQAogCQk0QjZFODc2QjIxNzZEOEEx
MDA0MjBFNUUgLyogQ1NTUGFpbnRJbWFnZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENT
U1BhaW50SW1hZ2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCNkZB
NkYyMEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU21hcnRSZXBsYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTRCNkZBNkY2MEMzOUU0QTEwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2VDRi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFydFJlcGxhY2VDRi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRCN0FFNDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0
b21QYWludEltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEN1c3RvbVBhaW50SW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNEI3QUU0OTUyMTc3QjYzRTAwQzU5OTU5IC8qIEN1c3Rv
bVBhaW50SW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3VzdG9tUGFpbnRJbWFnZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCQUU5NUIwMEIyRkE5Q0UwMEFFRDhBMCAv
KiBFZGl0b3JEZWxldGVBY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RWRpdG9yRGVsZXRlQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCQUZE
MENBMjE5MEVCRDYwMEMwQUI2NCAvKiBDU1NQYWludFNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NT
UGFpbnRTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCQUZEMENEMjE5MEVC
RTkwMEMwQUI2NCAvKiBDU1NQYWludFNpemUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENTU1BhaW50U2l6ZS5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDI3Nyw2ICsxNDI3NCw4IEBACiAJCUJDODI0
MzI2MEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTFRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkM4MjQzRTYwRDBDRkQ3NTAwNDYwQzhGIC8qIFdpbmRvd0ZlYXR1cmVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdpbmRvd0ZlYXR1cmVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MjQzRTcwRDBDRkQ3NTAwNDYwQzhG
IC8qIFdpbmRvd0ZlYXR1cmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdp
bmRvd0ZlYXR1cmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDODRGNDM5MjY0
MUFCMTQwMEY1N0MxQyAvKiBDdXN0b21QYWludEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEN1c3RvbVBhaW50SW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzg0
RjQzQTI2NDFBQjE0MDBGNTdDMUMgLyogQ3VzdG9tUGFpbnRJbWFnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDdXN0b21QYWludEltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEFF
MzRDMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDOEFFMzREMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJl
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzhCODUzQzBFN0M3RjExMDBBQjY5ODQgLyog
U2Nyb2xsYmFyVGhlbWVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
b2xsYmFyVGhlbWVNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNTg0LDYg
KzIzNTgzLDggQEAKIAkJCQlGNTVCM0Q4MDEyNTFGMTJEMDAzRUYyNjkgLyogQ29sb3JJbnB1dFR5
cGUuaCAqLywKIAkJCQk0QjFFMTNFOTIxNzkwRDdFMDA0MkNGOTggLyogQ3VzdG9tUGFpbnRDYW52
YXMuY3BwICovLAogCQkJCTRCMUUxM0U2MjE3OTBENjYwMDQyQ0Y5OCAvKiBDdXN0b21QYWludENh
bnZhcy5oICovLAorCQkJCUJDODRGNDM5MjY0MUFCMTQwMEY1N0MxQyAvKiBDdXN0b21QYWludElt
YWdlLmNwcCAqLywKKwkJCQlCQzg0RjQzQTI2NDFBQjE0MDBGNTdDMUMgLyogQ3VzdG9tUGFpbnRJ
bWFnZS5oICovLAogCQkJCUU1MTc2NzAyMjBCODhDMTQwMEQ0MTE2NyAvKiBEYXRhTGlzdFN1Z2dl
c3Rpb25JbmZvcm1hdGlvbi5oICovLAogCQkJCUY1NUIzRDgxMTI1MUYxMkQwMDNFRjI2OSAvKiBE
YXRlSW5wdXRUeXBlLmNwcCAqLywKIAkJCQlGNTVCM0Q4MjEyNTFGMTJEMDAzRUYyNjkgLyogRGF0
ZUlucHV0VHlwZS5oICovLApAQCAtMjY4NTQsOCArMjY4NTUsNiBAQAogCQkJCTcyQkFDM0E3MjNF
MTczMjgwMDhENzQxQyAvKiBDb25jcmV0ZUltYWdlQnVmZmVyLmggKi8sCiAJCQkJMkQyRkMwNTQx
NDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcCAqLywKIAkJCQky
RDJGQzA1NTE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuaCAqLywK
LQkJCQk0QjdBRTQ5NTIxNzdCNjNFMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5jcHAgKi8s
Ci0JCQkJNEI3QUU0OTIyMTc3QjU2RjAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuaCAqLywK
IAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyogRGFzaEFycmF5LmggKi8sCiAJCQkJNTU1
MTMwMDAxRTdDQ0NDQTAwQTY5RTM4IC8qIERlY29kaW5nT3B0aW9ucy5oICovLAogCQkJCTQ5RkM3
QTRGMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLApAQCAt
MzE0NDIsNyArMzE0NDEsNiBAQAogCQkJCTMxQTc5NUM3MTg4OEJDQjIwMDM4MkY5MCAvKiBBTkdM
RUluc3RhbmNlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTEyQUIwRUZBQzkwNjAw
OUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzFFRkNFREMyMDJCMzhB
OTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDQ5RDg2
NEYyNjQwQzlDNTAwMDEyMkRFIC8qIEhpZ2hsaWdodFZpc2liaWxpdHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5ODQ4MDExQTFEODE3QjAwQTEzMzE4IC8qIEFuaW1hdGlv
bkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTFBRDEyNjIzNkQ4NkU1MDA2RkYzN0MgLyog
QW5pbWF0aW9uRXZlbnRCYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTMyMTEyLDcgKzMyMTEwLDYg
QEAKIAkJCQk2MkNEMzI1QTExNTdFNTdDMDA2M0IwQTcgLyogQ3VzdG9tRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDNUQyMzg1MjI3QTA2NTIwMDBCOUJEQSAvKiBDdXN0b21IZWFkZXJGaWVs
ZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMUUxM0U3MjE3OTBENjYwMDQyQ0Y5OCAvKiBDdXN0
b21QYWludENhbnZhcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNEI3QUU0OTMyMTc3QjU2RjAwQzU5
OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0I0MTNFMEU4
NjMzRkQwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTIx
MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZB
MjQxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zMjY2MSw2ICszMjY1OCw3IEBACiAJCQkJNDQzMEQwMEIyNTc1QTgzRTAwNDZENDAxIC8q
IEhpZ2hsaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RDRkFCQkQxOEMwQUY3ODAwNkY4NDUw
IC8qIEhpZ2hsaWdodERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0MzBEMDBEMjU3NUE4QTUw
MDQ2RDQwMSAvKiBIaWdobGlnaHRSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDQ5RDg2
NEYyNjQwQzlDNTAwMDEyMkRFIC8qIEhpZ2hsaWdodFZpc2liaWxpdHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTREMTU0MEMyNzVDOEIwMDZCQzYxNyAvKiBIaXN0b3J5LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5N0RDRTIwMjEwODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxNzQxRDExMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRl
bS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDg5OSw3ICszNDg5Nyw2IEBACiAJCQkJRTQ2QjQxRjkx
Q0IyNEU3MDAwOEYxMURFIC8qIFNjcmlwdERpc2FsbG93ZWRTY29wZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDk5OEFFRDIxM0ZCMjI0RDAwOTBCMUFBIC8qIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhBNDg0NzgwRTUyNzJDNTAwQzNGRTc2IC8qIFNj
cmlwdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0RDg2RTZEMjY0MDM5NEMwMEI2MjQy
NSAvKiBTdHlsZVNjb3BlT3JkaW5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNFNEUyQTgxRTNC
MTcxMDAwMjNCQjhBIC8qIFNjcmlwdEVsZW1lbnRDYWNoZWRTY3JpcHRGZXRjaGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTFDOUQ5QjBFQjM2ODEyMDBFNDA5REIgLyogU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDExMjIzQkEyNjAyNDRGRTAwQjBBMEI2IC8q
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM1
MjE0LDYgKzM1MjExLDcgQEAKIAkJCQlFNDk0NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVS
dWxlSW1wb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk0RjM3RTIzNjYxNjI2MDAzQUE1Qzcg
LyogU3R5bGVSdWxlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ2MUQ2NUYxQkIwQzgwRDAw
Q0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0RDg2RTZEMjY0MDM5
NEMwMEI2MjQyNSAvKiBTdHlsZVNjb3BlT3JkaW5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEE0
RjQ4QUExNkIwREZDMDAwRURCQjI5IC8qIFN0eWxlU2NvcGVSdWxlU2V0cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUQ2MzgwMTAxQUYxNzMyMjAwMzFBMTVDIC8qIFN0eWxl
U2VsZkFsaWdubWVudERhdGEuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9DdXN0b21QYWludEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCShyZXZpc2lvbiAyNzY5NTUpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOjI3Njk1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDdXN0b21QYWludEltYWdlLmgiCisKKyNpZiBFTkFCTEUoQ1NTX1BBSU5USU5H
X0FQSSkKKworI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIkNTU0ltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VyLmgiCisjaW5jbHVkZSAiQ3VzdG9tUGFpbnRDYW52YXMu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJpdG1hcC5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSlNDU1NQYWludENhbGxiYWNr
LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIlBhaW50
UmVuZGVyaW5nQ29udGV4dDJELmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorI2luY2x1
ZGUgIlN0eWxlUHJvcGVydHlNYXAuaCIKKyNpbmNsdWRlICJUeXBlZE9NQ1NTSW1hZ2VWYWx1ZS5o
IgorI2luY2x1ZGUgIlR5cGVkT01DU1NVbml0VmFsdWUuaCIKKyNpbmNsdWRlICJUeXBlZE9NQ1NT
VW5wYXJzZWRWYWx1ZS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbnN0cnVjdERhdGEu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDdXN0b21QYWludEltYWdlOjpDdXN0b21QYWlu
dEltYWdlKFBhaW50V29ya2xldEdsb2JhbFNjb3BlOjpQYWludERlZmluaXRpb24mIGRlZmluaXRp
b24sIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKKyAgICA6IG1fcGFpbnREZWZpbml0aW9uKG1ha2VX
ZWFrUHRyKGRlZmluaXRpb24pKQorICAgICwgbV9pbnB1dFByb3BlcnRpZXMoZGVmaW5pdGlvbi5p
bnB1dFByb3BlcnRpZXMpCisgICAgLCBtX2VsZW1lbnQobWFrZVdlYWtQdHIoZWxlbWVudCkpCisg
ICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCit7CisgICAgc2V0Q29udGFpbmVyU2l6ZShzaXpl
KTsKK30KKworQ3VzdG9tUGFpbnRJbWFnZTo6fkN1c3RvbVBhaW50SW1hZ2UoKSA9IGRlZmF1bHQ7
CisKK3N0YXRpYyBSZWZQdHI8VHlwZWRPTUNTU1N0eWxlVmFsdWU+IGV4dHJhY3RDb21wdXRlZFBy
b3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSwgRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBDb21w
dXRlZFN0eWxlRXh0cmFjdG9yIGV4dHJhY3RvcigmZWxlbWVudCk7CisKKyAgICBpZiAoaXNDdXN0
b21Qcm9wZXJ0eU5hbWUobmFtZSkpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGV4dHJhY3Rvci5j
dXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUpOworICAgICAgICByZXR1cm4gU3R5bGVQcm9wZXJ0eU1h
cFJlYWRPbmx5OjpjdXN0b21Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG5hbWUsIGVsZW1lbnQuZG9j
dW1lbnQoKSwgdmFsdWUuZ2V0KCksICZlbGVtZW50KTsKKyAgICB9CisKKyAgICBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKG5hbWUpOworICAgIGlmICghcHJvcGVydHlJ
RCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHZhbHVlID0gZXh0cmFjdG9y
LnByb3BlcnR5VmFsdWUocHJvcGVydHlJRCwgRG9Ob3RVcGRhdGVMYXlvdXQpOworICAgIHJldHVy
biBTdHlsZVByb3BlcnR5TWFwUmVhZE9ubHk6OnJlaWZ5VmFsdWUodmFsdWUuZ2V0KCksIGVsZW1l
bnQuZG9jdW1lbnQoKSwgJmVsZW1lbnQpOworfQorCitjbGFzcyBIYXNoTWFwU3R5bGVQcm9wZXJ0
eU1hcCBmaW5hbCA6IHB1YmxpYyBTdHlsZVByb3BlcnR5TWFwIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFN0eWxlUHJvcGVydHlNYXA+IGNyZWF0ZShIYXNoTWFwPFN0cmluZywgUmVmUHRyPFR5
cGVkT01DU1NTdHlsZVZhbHVlPj4mJiBtYXApCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBIYXNoTWFwU3R5bGVQcm9wZXJ0eU1hcChXVEZNb3ZlKG1hcCkpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgUmVmUHRyPFR5cGVkT01DU1NTdHlsZVZhbHVlPiBleHRyYWN0Q29tcHV0ZWRQ
cm9wZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQmIGVsZW1lbnQpCisgICAgeworICAg
ICAgICBDb21wdXRlZFN0eWxlRXh0cmFjdG9yIGV4dHJhY3RvcigmZWxlbWVudCk7CisKKyAgICAg
ICAgaWYgKGlzQ3VzdG9tUHJvcGVydHlOYW1lKG5hbWUpKSB7CisgICAgICAgICAgICBhdXRvIHZh
bHVlID0gZXh0cmFjdG9yLmN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSk7CisgICAgICAgICAgICBy
ZXR1cm4gU3R5bGVQcm9wZXJ0eU1hcFJlYWRPbmx5OjpjdXN0b21Qcm9wZXJ0eVZhbHVlT3JEZWZh
dWx0KG5hbWUsIGVsZW1lbnQuZG9jdW1lbnQoKSwgdmFsdWUuZ2V0KCksICZlbGVtZW50KTsKKyAg
ICAgICAgfQorCisgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5
SUQobmFtZSk7CisgICAgICAgIGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIGF1dG8gdmFsdWUgPSBleHRyYWN0b3IucHJvcGVydHlWYWx1ZShw
cm9wZXJ0eUlELCBEb05vdFVwZGF0ZUxheW91dCk7CisgICAgICAgIHJldHVybiBTdHlsZVByb3Bl
cnR5TWFwUmVhZE9ubHk6OnJlaWZ5VmFsdWUodmFsdWUuZ2V0KCksIGVsZW1lbnQuZG9jdW1lbnQo
KSwgJmVsZW1lbnQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBIYXNoTWFwU3R5
bGVQcm9wZXJ0eU1hcChIYXNoTWFwPFN0cmluZywgUmVmUHRyPFR5cGVkT01DU1NTdHlsZVZhbHVl
Pj4mJiBtYXApCisgICAgICAgIDogbV9tYXAoV1RGTW92ZShtYXApKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIGNsZWFyRWxlbWVudCgpIG92ZXJyaWRlIHsgfQorCisgICAgUmVmUHRyPFR5cGVk
T01DU1NTdHlsZVZhbHVlPiBnZXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSkgY29uc3QgZmluYWwg
eyByZXR1cm4gbWFrZVJlZlB0cihtX21hcC5nZXQocHJvcGVydHkpKTsgfQorCisgICAgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4+IG1fbWFwOworfTsKKworSW1h
Z2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRvQ3VzdG9tUGFpbnQoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBkZXN0U2l6ZSkKK3sKKyAgICBpZiAo
IW1fZWxlbWVudCB8fCAhbV9lbGVtZW50LT5lbGVtZW50KCkgfHwgIW1fcGFpbnREZWZpbml0aW9u
KQorICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOworCisgICAgSlND
OjpKU1ZhbHVlIHBhaW50Q29uc3RydWN0b3IgPSBtX3BhaW50RGVmaW5pdGlvbi0+cGFpbnRDb25z
dHJ1Y3RvcjsKKworICAgIGlmICghcGFpbnRDb25zdHJ1Y3RvcikKKyAgICAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKKworICAgIEFTU0VSVCghbV9lbGVtZW50LT5uZWVk
c0xheW91dCgpKTsKKyAgICBBU1NFUlQoIW1fZWxlbWVudC0+ZWxlbWVudCgpLT5kb2N1bWVudCgp
Lm5lZWRzU3R5bGVSZWNhbGMoKSk7CisKKyAgICBKU0NTU1BhaW50Q2FsbGJhY2smIGNhbGxiYWNr
ID0gc3RhdGljX2Nhc3Q8SlNDU1NQYWludENhbGxiYWNrJj4obV9wYWludERlZmluaXRpb24tPnBh
aW50Q2FsbGJhY2suZ2V0KCkpOworICAgIGF1dG8qIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBj
YWxsYmFjay5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRp
b25Db250ZXh0KQorICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwor
CisgICAgYXV0byBjYW52YXMgPSBDdXN0b21QYWludENhbnZhczo6Y3JlYXRlKCpzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBkZXN0U2l6ZS53aWR0aCgpLCBkZXN0U2l6ZS5oZWlnaHQoKSk7CisgICAg
RXhjZXB0aW9uT3I8UmVmUHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPj4gY29udGV4dE9yRXhj
ZXB0aW9uID0gY2FudmFzLT5nZXRDb250ZXh0KCk7CisKKyAgICBpZiAoY29udGV4dE9yRXhjZXB0
aW9uLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRO
b3RoaW5nOworICAgIGF1dG8gY29udGV4dCA9IGNvbnRleHRPckV4Y2VwdGlvbi5yZWxlYXNlUmV0
dXJuVmFsdWUoKTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8VHlwZWRPTUNTU1N0eWxl
VmFsdWU+PiBwcm9wZXJ0eVZhbHVlczsKKworICAgIGlmIChhdXRvKiBlbGVtZW50ID0gbV9lbGVt
ZW50LT5lbGVtZW50KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbnB1dFByb3Bl
cnRpZXMpCisgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlcy5hZGQobmFtZSwgZXh0cmFjdENvbXB1
dGVkUHJvcGVydHkobmFtZSwgKmVsZW1lbnQpKTsKKyAgICB9CisKKyAgICBhdXRvIHNpemUgPSBD
U1NQYWludFNpemU6OmNyZWF0ZShkZXN0U2l6ZS53aWR0aCgpLCBkZXN0U2l6ZS5oZWlnaHQoKSk7
CisgICAgUmVmPFN0eWxlUHJvcGVydHlNYXBSZWFkT25seT4gcHJvcGVydHlNYXAgPSBIYXNoTWFw
U3R5bGVQcm9wZXJ0eU1hcDo6Y3JlYXRlKFdURk1vdmUocHJvcGVydHlWYWx1ZXMpKTsKKworICAg
IGF1dG8mIHZtID0gcGFpbnRDb25zdHJ1Y3Rvci5nZXRPYmplY3QoKS0+dm0oKTsKKyAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gKnBhaW50Q29uc3RydWN0b3IuZ2V0
T2JqZWN0KCktPmdsb2JhbE9iamVjdCgpOworCisgICAgYXV0byYgbGV4aWNhbEdsb2JhbE9iamVj
dCA9IGdsb2JhbE9iamVjdDsKKyAgICBKU0M6OkFyZ0xpc3Qgbm9BcmdzOworICAgIEpTQzo6SlNW
YWx1ZSB0aGlzT2JqZWN0ID0geyBKU0M6OmNvbnN0cnVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwg
cGFpbnRDb25zdHJ1Y3Rvciwgbm9BcmdzLCAiRmFpbGVkIHRvIGNvbnN0cnVjdCBwYWludCBjbGFz
cyIpIH07CisKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAg
IHJlcG9ydEV4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUuZXhjZXB0aW9uKCkp
OworICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOworICAgIH0KKwor
ICAgIGF1dG8gcmVzdWx0ID0gY2FsbGJhY2suaGFuZGxlRXZlbnQoV1RGTW92ZSh0aGlzT2JqZWN0
KSwgKmNvbnRleHQsIHNpemUsIHByb3BlcnR5TWFwLCBtX2FyZ3VtZW50cyk7CisgICAgaWYgKHJl
c3VsdC50eXBlKCkgIT0gQ2FsbGJhY2tSZXN1bHRUeXBlOjpTdWNjZXNzKQorICAgICAgICByZXR1
cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOworCisgICAgY2FudmFzLT5yZXBsYXlEaXNw
bGF5TGlzdCgmZGVzdENvbnRleHQpOworCisgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlk
RHJhdzsKK30KKworSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQp
OworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0
ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LmNsaXAo
ZGVzdFJlY3QpOworICAgIGRlc3RDb250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlvbigp
KTsKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQorICAgICAgICBk
ZXN0Q29udGV4dC5zY2FsZShkZXN0UmVjdC5zaXplKCkgLyBzcmNSZWN0LnNpemUoKSk7CisgICAg
ZGVzdENvbnRleHQudHJhbnNsYXRlKC1zcmNSZWN0LmxvY2F0aW9uKCkpOworICAgIHJldHVybiBk
b0N1c3RvbVBhaW50KGRlc3RDb250ZXh0LCBzaXplKCkpOworfQorCit2b2lkIEN1c3RvbVBhaW50
SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQoreworICAgIC8vIEFsbG93IHRoZSBnZW5lcmF0b3IgdG8gcHJvdmlkZSB2aXN1YWxs
eS1lcXVpdmFsZW50IHRpbGluZyBwYXJhbWV0ZXJzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisg
ICAgRmxvYXRTaXplIGFkanVzdGVkU2l6ZSA9IHNpemUoKTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0
ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKworICAgIC8vIEZhY3RvciBpbiB0aGUgZGVzdGluYXRpb24g
Y29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0IHJlc29sdXRpb24KKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oR3JhcGhp
Y3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBkb3VibGUgeFNj
YWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7CisgICAgZG91YmxlIHlTY2FsZSA9
IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBhZGp1
c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOworICAgIGFkanVzdGVkUGF0dGVybkNU
TS5zY2FsZSgxLjAgLyB4U2NhbGUsIDEuMCAvIHlTY2FsZSk7CisgICAgYWRqdXN0ZWRTcmNSZWN0
LnNjYWxlKHhTY2FsZSwgeVNjYWxlKTsKKworICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoYWRqdXN0ZWRTaXplLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IsIGRlc3RDb250ZXh0KTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
OworICAgIGRvQ3VzdG9tUGFpbnQoYnVmZmVyLT5jb250ZXh0KCksIGFkanVzdGVkU2l6ZSk7CisK
KyAgICBpZiAoZGVzdENvbnRleHQuZHJhd0x1bWluYW5jZU1hc2soKSkKKyAgICAgICAgYnVmZmVy
LT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisKKyAgICBidWZmZXItPmRyYXdQYXR0ZXJuKGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBhZGp1c3RlZFBhdHRlcm5DVE0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBkZXN0Q29udGV4dC5zZXREcmF3THVtaW5h
bmNlTWFzayhmYWxzZSk7Cit9CisKK30KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9DdXN0b21QYWludEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9D
dXN0b21QYWludEltYWdlLmgJKHJldmlzaW9uIDI3Njk1NSkJKGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5oOjI3Njk1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQorCisjaW5jbHVkZSAiR2Vu
ZXJhdGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oIgorCisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bWFnZUJ1ZmZlcjsKK2NsYXNzIFJlbmRlckVsZW1lbnQ7CisKK2NsYXNzIEN1c3RvbVBhaW50SW1h
Z2UgZmluYWwgOiBwdWJsaWMgR2VuZXJhdGVkSW1hZ2UgeworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8Q3VzdG9tUGFpbnRJbWFnZT4gY3JlYXRlKFBhaW50V29ya2xldEdsb2JhbFNjb3BlOjpQYWlu
dERlZmluaXRpb24mIGRlZmluaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEN1c3RvbVBhaW50SW1hZ2UoZGVmaW5pdGlvbiwg
c2l6ZSwgZWxlbWVudCwgYXJndW1lbnRzKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+Q3VzdG9t
UGFpbnRJbWFnZSgpOworICAgIGJvb2wgaXNDdXN0b21QYWludEltYWdlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQorCitwcml2YXRlOgorICAgIEN1c3RvbVBhaW50SW1hZ2UoUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGU6OlBhaW50RGVmaW5pdGlvbiYsIGNvbnN0IEZsb2F0U2l6ZSYs
IFJlbmRlckVsZW1lbnQmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRzKTsKKworICAg
IEltYWdlRHJhd1Jlc3VsdCBkb0N1c3RvbVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0U2l6ZSYpOworCisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXcoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKworICAgIFdlYWtQdHI8UGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGU6OlBhaW50RGVmaW5pdGlvbj4gbV9wYWludERlZmluaXRpb247Cisg
ICAgVmVjdG9yPFN0cmluZz4gbV9pbnB1dFByb3BlcnRpZXM7CisgICAgV2Vha1B0cjxSZW5kZXJF
bGVtZW50PiBtX2VsZW1lbnQ7CisgICAgVmVjdG9yPFN0cmluZz4gbV9hcmd1bWVudHM7Cit9Owor
Cit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfSU1BR0UoQ3VzdG9tUGFpbnRJbWFnZSkKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q3VzdG9tUGFpbnRJbWFnZS5jcHAJKHJldmlzaW9uIDI3Njk1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCShub25leGlzdGVudCkKQEAg
LTEsMjE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDdXN0b21QYWludEltYWdlLmgiCi0KLSNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQ
SSkKLQotI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUg
IkNTU0ltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1
ZGUgIkNTU1Byb3BlcnR5UGFyc2VyLmgiCi0jaW5jbHVkZSAiQ3VzdG9tUGFpbnRDYW52YXMuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJpdG1hcC5oIgot
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNDU1NQYWludENhbGxiYWNrLmgi
Ci0jaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2luY2x1ZGUgIlBhaW50UmVu
ZGVyaW5nQ29udGV4dDJELmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUg
IlN0eWxlUHJvcGVydHlNYXAuaCIKLSNpbmNsdWRlICJUeXBlZE9NQ1NTSW1hZ2VWYWx1ZS5oIgot
I2luY2x1ZGUgIlR5cGVkT01DU1NVbml0VmFsdWUuaCIKLSNpbmNsdWRlICJUeXBlZE9NQ1NTVW5w
YXJzZWRWYWx1ZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbnN0cnVjdERhdGEuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DdXN0b21QYWludEltYWdlOjpDdXN0b21QYWludElt
YWdlKFBhaW50V29ya2xldEdsb2JhbFNjb3BlOjpQYWludERlZmluaXRpb24mIGRlZmluaXRpb24s
IGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyRWxlbWVudCYgZWxlbWVudCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGFyZ3VtZW50cykKLSAgICA6IG1fcGFpbnREZWZpbml0aW9uKG1ha2VXZWFr
UHRyKGRlZmluaXRpb24pKQotICAgICwgbV9pbnB1dFByb3BlcnRpZXMoZGVmaW5pdGlvbi5pbnB1
dFByb3BlcnRpZXMpCi0gICAgLCBtX2VsZW1lbnQobWFrZVdlYWtQdHIoZWxlbWVudCkpCi0gICAg
LCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi17Ci0gICAgc2V0Q29udGFpbmVyU2l6ZShzaXplKTsK
LX0KLQotQ3VzdG9tUGFpbnRJbWFnZTo6fkN1c3RvbVBhaW50SW1hZ2UoKSA9IGRlZmF1bHQ7Ci0K
LXN0YXRpYyBSZWZQdHI8VHlwZWRPTUNTU1N0eWxlVmFsdWU+IGV4dHJhY3RDb21wdXRlZFByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgbmFtZSwgRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBDb21wdXRl
ZFN0eWxlRXh0cmFjdG9yIGV4dHJhY3RvcigmZWxlbWVudCk7Ci0KLSAgICBpZiAoaXNDdXN0b21Q
cm9wZXJ0eU5hbWUobmFtZSkpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGV4dHJhY3Rvci5jdXN0
b21Qcm9wZXJ0eVZhbHVlKG5hbWUpOwotICAgICAgICByZXR1cm4gU3R5bGVQcm9wZXJ0eU1hcFJl
YWRPbmx5OjpjdXN0b21Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0KG5hbWUsIGVsZW1lbnQuZG9jdW1l
bnQoKSwgdmFsdWUuZ2V0KCksICZlbGVtZW50KTsKLSAgICB9Ci0KLSAgICBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKG5hbWUpOwotICAgIGlmICghcHJvcGVydHlJRCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHZhbHVlID0gZXh0cmFjdG9yLnBy
b3BlcnR5VmFsdWUocHJvcGVydHlJRCwgRG9Ob3RVcGRhdGVMYXlvdXQpOwotICAgIHJldHVybiBT
dHlsZVByb3BlcnR5TWFwUmVhZE9ubHk6OnJlaWZ5VmFsdWUodmFsdWUuZ2V0KCksIGVsZW1lbnQu
ZG9jdW1lbnQoKSwgJmVsZW1lbnQpOwotfQotCi1jbGFzcyBIYXNoTWFwU3R5bGVQcm9wZXJ0eU1h
cCBmaW5hbCA6IHB1YmxpYyBTdHlsZVByb3BlcnR5TWFwIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFN0eWxlUHJvcGVydHlNYXA+IGNyZWF0ZShIYXNoTWFwPFN0cmluZywgUmVmUHRyPFR5cGVk
T01DU1NTdHlsZVZhbHVlPj4mJiBtYXApCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBIYXNoTWFwU3R5bGVQcm9wZXJ0eU1hcChXVEZNb3ZlKG1hcCkpKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgUmVmUHRyPFR5cGVkT01DU1NTdHlsZVZhbHVlPiBleHRyYWN0Q29tcHV0ZWRQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQmIGVsZW1lbnQpCi0gICAgewotICAgICAg
ICBDb21wdXRlZFN0eWxlRXh0cmFjdG9yIGV4dHJhY3RvcigmZWxlbWVudCk7Ci0KLSAgICAgICAg
aWYgKGlzQ3VzdG9tUHJvcGVydHlOYW1lKG5hbWUpKSB7Ci0gICAgICAgICAgICBhdXRvIHZhbHVl
ID0gZXh0cmFjdG9yLmN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSk7Ci0gICAgICAgICAgICByZXR1
cm4gU3R5bGVQcm9wZXJ0eU1hcFJlYWRPbmx5OjpjdXN0b21Qcm9wZXJ0eVZhbHVlT3JEZWZhdWx0
KG5hbWUsIGVsZW1lbnQuZG9jdW1lbnQoKSwgdmFsdWUuZ2V0KCksICZlbGVtZW50KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQo
bmFtZSk7Ci0gICAgICAgIGlmICghcHJvcGVydHlJRCkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgIGF1dG8gdmFsdWUgPSBleHRyYWN0b3IucHJvcGVydHlWYWx1ZShwcm9w
ZXJ0eUlELCBEb05vdFVwZGF0ZUxheW91dCk7Ci0gICAgICAgIHJldHVybiBTdHlsZVByb3BlcnR5
TWFwUmVhZE9ubHk6OnJlaWZ5VmFsdWUodmFsdWUuZ2V0KCksIGVsZW1lbnQuZG9jdW1lbnQoKSwg
JmVsZW1lbnQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBIYXNoTWFwU3R5bGVQ
cm9wZXJ0eU1hcChIYXNoTWFwPFN0cmluZywgUmVmUHRyPFR5cGVkT01DU1NTdHlsZVZhbHVlPj4m
JiBtYXApCi0gICAgICAgIDogbV9tYXAoV1RGTW92ZShtYXApKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNsZWFyRWxlbWVudCgpIG92ZXJyaWRlIHsgfQotCi0gICAgUmVmUHRyPFR5cGVkT01D
U1NTdHlsZVZhbHVlPiBnZXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbWFrZVJlZlB0cihtX21hcC5nZXQocHJvcGVydHkpKTsgfQotCi0gICAgSGFzaE1hcDxT
dHJpbmcsIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4+IG1fbWFwOwotfTsKLQotSW1hZ2VE
cmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRvQ3VzdG9tUGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBkZXN0U2l6ZSkKLXsKLSAgICBpZiAoIW1f
ZWxlbWVudCB8fCAhbV9lbGVtZW50LT5lbGVtZW50KCkgfHwgIW1fcGFpbnREZWZpbml0aW9uKQot
ICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwotCi0gICAgSlNDOjpK
U1ZhbHVlIHBhaW50Q29uc3RydWN0b3IgPSBtX3BhaW50RGVmaW5pdGlvbi0+cGFpbnRDb25zdHJ1
Y3RvcjsKLQotICAgIGlmICghcGFpbnRDb25zdHJ1Y3RvcikKLSAgICAgICAgcmV0dXJuIEltYWdl
RHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQotICAgIEFTU0VSVCghbV9lbGVtZW50LT5uZWVkc0xh
eW91dCgpKTsKLSAgICBBU1NFUlQoIW1fZWxlbWVudC0+ZWxlbWVudCgpLT5kb2N1bWVudCgpLm5l
ZWRzU3R5bGVSZWNhbGMoKSk7Ci0KLSAgICBKU0NTU1BhaW50Q2FsbGJhY2smIGNhbGxiYWNrID0g
c3RhdGljX2Nhc3Q8SlNDU1NQYWludENhbGxiYWNrJj4obV9wYWludERlZmluaXRpb24tPnBhaW50
Q2FsbGJhY2suZ2V0KCkpOwotICAgIGF1dG8qIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBjYWxs
YmFjay5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25D
b250ZXh0KQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwotCi0g
ICAgYXV0byBjYW52YXMgPSBDdXN0b21QYWludENhbnZhczo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBkZXN0U2l6ZS53aWR0aCgpLCBkZXN0U2l6ZS5oZWlnaHQoKSk7Ci0gICAgRXhj
ZXB0aW9uT3I8UmVmUHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPj4gY29udGV4dE9yRXhjZXB0
aW9uID0gY2FudmFzLT5nZXRDb250ZXh0KCk7Ci0KLSAgICBpZiAoY29udGV4dE9yRXhjZXB0aW9u
Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3Ro
aW5nOwotICAgIGF1dG8gY29udGV4dCA9IGNvbnRleHRPckV4Y2VwdGlvbi5yZWxlYXNlUmV0dXJu
VmFsdWUoKTsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8VHlwZWRPTUNTU1N0eWxlVmFs
dWU+PiBwcm9wZXJ0eVZhbHVlczsKLQotICAgIGlmIChhdXRvKiBlbGVtZW50ID0gbV9lbGVtZW50
LT5lbGVtZW50KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbnB1dFByb3BlcnRp
ZXMpCi0gICAgICAgICAgICBwcm9wZXJ0eVZhbHVlcy5hZGQobmFtZSwgZXh0cmFjdENvbXB1dGVk
UHJvcGVydHkobmFtZSwgKmVsZW1lbnQpKTsKLSAgICB9Ci0KLSAgICBhdXRvIHNpemUgPSBDU1NQ
YWludFNpemU6OmNyZWF0ZShkZXN0U2l6ZS53aWR0aCgpLCBkZXN0U2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgUmVmPFN0eWxlUHJvcGVydHlNYXBSZWFkT25seT4gcHJvcGVydHlNYXAgPSBIYXNoTWFwU3R5
bGVQcm9wZXJ0eU1hcDo6Y3JlYXRlKFdURk1vdmUocHJvcGVydHlWYWx1ZXMpKTsKLQotICAgIGF1
dG8mIHZtID0gcGFpbnRDb25zdHJ1Y3Rvci5nZXRPYmplY3QoKS0+dm0oKTsKLSAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gKnBhaW50Q29uc3RydWN0b3IuZ2V0T2Jq
ZWN0KCktPmdsb2JhbE9iamVjdCgpOwotCi0gICAgYXV0byYgbGV4aWNhbEdsb2JhbE9iamVjdCA9
IGdsb2JhbE9iamVjdDsKLSAgICBKU0M6OkFyZ0xpc3Qgbm9BcmdzOwotICAgIEpTQzo6SlNWYWx1
ZSB0aGlzT2JqZWN0ID0geyBKU0M6OmNvbnN0cnVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgcGFp
bnRDb25zdHJ1Y3Rvciwgbm9BcmdzLCAiRmFpbGVkIHRvIGNvbnN0cnVjdCBwYWludCBjbGFzcyIp
IH07Ci0KLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHJl
cG9ydEV4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUuZXhjZXB0aW9uKCkpOwot
ICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwotICAgIH0KLQotICAg
IGF1dG8gcmVzdWx0ID0gY2FsbGJhY2suaGFuZGxlRXZlbnQoV1RGTW92ZSh0aGlzT2JqZWN0KSwg
KmNvbnRleHQsIHNpemUsIHByb3BlcnR5TWFwLCBtX2FyZ3VtZW50cyk7Ci0gICAgaWYgKHJlc3Vs
dC50eXBlKCkgIT0gQ2FsbGJhY2tSZXN1bHRUeXBlOjpTdWNjZXNzKQotICAgICAgICByZXR1cm4g
SW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwotCi0gICAgY2FudmFzLT5yZXBsYXlEaXNwbGF5
TGlzdCgmZGVzdENvbnRleHQpOwotCi0gICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkRHJh
dzsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsK
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwot
ICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9w
ZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwotICAgIGRlc3RDb250ZXh0LmNsaXAoZGVz
dFJlY3QpOwotICAgIGRlc3RDb250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsK
LSAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQotICAgICAgICBkZXN0
Q29udGV4dC5zY2FsZShkZXN0UmVjdC5zaXplKCkgLyBzcmNSZWN0LnNpemUoKSk7Ci0gICAgZGVz
dENvbnRleHQudHJhbnNsYXRlKC1zcmNSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBkb0N1
c3RvbVBhaW50KGRlc3RDb250ZXh0LCBzaXplKCkpOwotfQotCi12b2lkIEN1c3RvbVBhaW50SW1h
Z2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIC8vIEFsbG93IHRoZSBnZW5lcmF0b3IgdG8gcHJvdmlkZSB2aXN1YWxseS1l
cXVpdmFsZW50IHRpbGluZyBwYXJhbWV0ZXJzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCi0gICAg
RmxvYXRTaXplIGFkanVzdGVkU2l6ZSA9IHNpemUoKTsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRT
cmNSZWN0ID0gc3JjUmVjdDsKLQotICAgIC8vIEZhY3RvciBpbiB0aGUgZGVzdGluYXRpb24gY29u
dGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0IHJlc29sdXRpb24KLSAgICBBZmZp
bmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oR3JhcGhpY3ND
b250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKLSAgICBkb3VibGUgeFNjYWxl
ID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7Ci0gICAgZG91YmxlIHlTY2FsZSA9IGZh
YnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwotICAgIEFmZmluZVRyYW5zZm9ybSBhZGp1c3Rl
ZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIGFkanVzdGVkUGF0dGVybkNUTS5z
Y2FsZSgxLjAgLyB4U2NhbGUsIDEuMCAvIHlTY2FsZSk7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNj
YWxlKHhTY2FsZSwgeVNjYWxlKTsKLQotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoYWRqdXN0ZWRTaXplLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IsIGRlc3RDb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwot
ICAgIGRvQ3VzdG9tUGFpbnQoYnVmZmVyLT5jb250ZXh0KCksIGFkanVzdGVkU2l6ZSk7Ci0KLSAg
ICBpZiAoZGVzdENvbnRleHQuZHJhd0x1bWluYW5jZU1hc2soKSkKLSAgICAgICAgYnVmZmVyLT5j
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBidWZmZXItPmRyYXdQYXR0ZXJuKGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBhZGp1c3RlZFBhdHRlcm5DVE0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICBkZXN0Q29udGV4dC5zZXREcmF3THVtaW5hbmNl
TWFzayhmYWxzZSk7Ci19Ci0KLX0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuaAkocmV2aXNpb24gMjc2OTU1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5o
CShub25leGlzdGVudCkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKENTU19QQUlO
VElOR19BUEkpCi0KLSNpbmNsdWRlICJHZW5lcmF0ZWRJbWFnZS5oIgotI2luY2x1ZGUgIlBhaW50
V29ya2xldEdsb2JhbFNjb3BlLmgiCi0KLSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgUmVuZGVyRWxlbWVu
dDsKLQotY2xhc3MgQ3VzdG9tUGFpbnRJbWFnZSBmaW5hbCA6IHB1YmxpYyBHZW5lcmF0ZWRJbWFn
ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDdXN0b21QYWludEltYWdlPiBjcmVhdGUoUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGU6OlBhaW50RGVmaW5pdGlvbiYgZGVmaW5pdGlvbiwgY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBSZW5kZXJFbGVtZW50JiBlbGVtZW50LCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYXJndW1lbnRzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3Vz
dG9tUGFpbnRJbWFnZShkZWZpbml0aW9uLCBzaXplLCBlbGVtZW50LCBhcmd1bWVudHMpKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIH5DdXN0b21QYWludEltYWdlKCk7Ci0gICAgYm9vbCBpc0N1c3Rv
bVBhaW50SW1hZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLXByaXZhdGU6
Ci0gICAgQ3VzdG9tUGFpbnRJbWFnZShQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6UGFpbnREZWZp
bml0aW9uJiwgY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBhcmd1bWVudHMpOwotCi0gICAgSW1hZ2VEcmF3UmVzdWx0IGRvQ3VzdG9tUGFpbnQo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRTaXplJik7Ci0KLSAgICBJbWFnZURyYXdSZXN1
bHQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBm
aW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsOwotCi0gICAgV2Vha1B0cjxQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6UGFpbnREZWZpbml0
aW9uPiBtX3BhaW50RGVmaW5pdGlvbjsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX2lucHV0UHJvcGVy
dGllczsKLSAgICBXZWFrUHRyPFJlbmRlckVsZW1lbnQ+IG1fZWxlbWVudDsKLSAgICBWZWN0b3I8
U3RyaW5nPiBtX2FyZ3VtZW50czsKLX07Ci0KLX0KLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19J
TUFHRShDdXN0b21QYWludEltYWdlKQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428697</attachid>
            <date>2021-05-14 18:04:35 -0700</date>
            <delta_ts>2021-05-14 20:34:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225356-20210504092144.patch</filename>
            <type>text/plain</type>
            <size>32447</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Njk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDIxLTA1LTA0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBDdXN0b21QYWludEltYWdlIGJlaW5n
IGluIHBsYXRmb3JtL2dyYXBoaWNzIGlzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUzNTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBsYXllcmluZyB2aW9s
YXRpb24gZm9yIGEgZmlsZSBpbiBwbGF0Zm9ybS8gdG8gcmVmZXJlbmNlIGNsYXNzZXMKKyAgICAg
ICAgbGlrZSBSZW5kZXJFbGVtZW50IG9yIFBhaW50V29ya2xldEdsb2JhbFNjb3BlLiBUaGlzIGZp
eGVzIHRoaXMgYnkgbW92aW5nCisgICAgICAgIEN1c3RvbVBhaW50SW1hZ2Ugb3V0IG9mIHBsYXRm
b3JtL2dyYXBoaWNzIHRvIGh0bWwvLCBuZXh0IHRvIHRoZSBleGlzdGluZworICAgICAgICBDdXN0
b21QYWludENhbnZhcyBjbGFzcy4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0N1c3Rv
bVBhaW50SW1hZ2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9DdXN0b21QYWludEltYWdlLmNwcC4KKyAgICAgICAgKiBodG1sL0N1c3RvbVBhaW50SW1h
Z2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9t
UGFpbnRJbWFnZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1h
Z2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50
SW1hZ2UuaDogUmVtb3ZlZC4KKwogMjAyMS0wNS0wNCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBs
ZS5jb20+CiAKICAgICAgICAgW1dlYlhSXSBSZW1vdmUgcmVuYW1lZCBJREwgZmlsZXMgaW4gWGNv
ZGUgcHJvamVjdApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI3Njk1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTU5LDYgKzExNTksNyBA
QCBodG1sL0NhbnZhc0Jhc2UuY3BwCiBodG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcAogaHRtbC9D
b2xvcklucHV0VHlwZS5jcHAKIGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCitodG1sL0N1c3Rv
bVBhaW50SW1hZ2UuY3BwCiBodG1sL0RPTUZvcm1EYXRhLmNwcAogaHRtbC9ET01Ub2tlbkxpc3Qu
Y3BwCiBodG1sL0RPTVVSTC5jcHAKQEAgLTE5NDYsNyArMTk0Nyw2IEBAIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yU3BhY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvQ3Vz
dG9tUGFpbnRJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuY3BwCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyNzY5NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0MDksNyArMTQwOSw2IEBACiAJCTRC
NkI1Q0MwMjE2NDM4NjQwMDYwMzgxNyAvKiBQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI2QjVDQkYyMTY0Mzg2
NDAwNjAzODE3IC8qIFBhaW50V29ya2xldEdsb2JhbFNjb3BlLmggKi87IH07CiAJCTRCNkU4NzY5
MjE3NkQ2OTIwMDQyMEU1RSAvKiBDU1NQYWludEltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCNkU4NzY4MjE3NkQ2OTIwMDQyMEU1RSAv
KiBDU1NQYWludEltYWdlVmFsdWUuaCAqLzsgfTsKIAkJNEI2RkE2RjQwQzM5RTQ4QzAwMDg3MDEx
IC8qIFNtYXJ0UmVwbGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEI2RkE2RjIwQzM5RTQ4QzAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTRCN0FFNDkzMjE3
N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3Vz
dG9tUGFpbnRJbWFnZS5oICovOyB9OwogCQk0QkFFOTVCMTBCMkZBOUNFMDBBRUQ4QTAgLyogRWRp
dG9yRGVsZXRlQWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0QkFFOTVCMDBCMkZBOUNFMDBBRUQ4QTAgLyogRWRpdG9yRGVsZXRlQWN0aW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEJBRkQw
Q0IyMTkwRUJENjAwQzBBQjY0IC8qIENTU1BhaW50U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJBRkQwQ0EyMTkwRUJENjAwQzBBQjY0IC8qIENT
U1BhaW50U2l6ZS5oICovOyB9OwogCQk0QkFGRDBDRjIxOTBGOUI1MDBDMEFCNjQgLyogU3R5bGVQ
cm9wZXJ0eU1hcFJlYWRPbmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QkFGRDBDRTIxOTBGOUI0MDBDMEFCNjQgLyogU3R5bGVQcm9wZXJ0eU1hcFJl
YWRPbmx5LmggKi87IH07CkBAIC04NTUxLDggKzg1NTAsNiBAQAogCQk0QjZFODc2QjIxNzZEOEEx
MDA0MjBFNUUgLyogQ1NTUGFpbnRJbWFnZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENT
U1BhaW50SW1hZ2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCNkZB
NkYyMEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU21hcnRSZXBsYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTRCNkZBNkY2MEMzOUU0QTEwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2VDRi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFydFJlcGxhY2VDRi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRCN0FFNDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0
b21QYWludEltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEN1c3RvbVBhaW50SW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNEI3QUU0OTUyMTc3QjYzRTAwQzU5OTU5IC8qIEN1c3Rv
bVBhaW50SW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3VzdG9tUGFpbnRJbWFnZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCQUU5NUIwMEIyRkE5Q0UwMEFFRDhBMCAv
KiBFZGl0b3JEZWxldGVBY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RWRpdG9yRGVsZXRlQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCQUZE
MENBMjE5MEVCRDYwMEMwQUI2NCAvKiBDU1NQYWludFNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NT
UGFpbnRTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCQUZEMENEMjE5MEVC
RTkwMEMwQUI2NCAvKiBDU1NQYWludFNpemUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENTU1BhaW50U2l6ZS5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDI3Nyw2ICsxNDI3NCw4IEBACiAJCUJDODI0
MzI2MEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTFRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkM4MjQzRTYwRDBDRkQ3NTAwNDYwQzhGIC8qIFdpbmRvd0ZlYXR1cmVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdpbmRvd0ZlYXR1cmVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MjQzRTcwRDBDRkQ3NTAwNDYwQzhG
IC8qIFdpbmRvd0ZlYXR1cmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdp
bmRvd0ZlYXR1cmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDODRGNDM5MjY0
MUFCMTQwMEY1N0MxQyAvKiBDdXN0b21QYWludEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEN1c3RvbVBhaW50SW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzg0
RjQzQTI2NDFBQjE0MDBGNTdDMUMgLyogQ3VzdG9tUGFpbnRJbWFnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDdXN0b21QYWludEltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEFF
MzRDMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDOEFFMzREMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJl
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzhCODUzQzBFN0M3RjExMDBBQjY5ODQgLyog
U2Nyb2xsYmFyVGhlbWVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
b2xsYmFyVGhlbWVNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNTg0LDYg
KzIzNTgzLDggQEAKIAkJCQlGNTVCM0Q4MDEyNTFGMTJEMDAzRUYyNjkgLyogQ29sb3JJbnB1dFR5
cGUuaCAqLywKIAkJCQk0QjFFMTNFOTIxNzkwRDdFMDA0MkNGOTggLyogQ3VzdG9tUGFpbnRDYW52
YXMuY3BwICovLAogCQkJCTRCMUUxM0U2MjE3OTBENjYwMDQyQ0Y5OCAvKiBDdXN0b21QYWludENh
bnZhcy5oICovLAorCQkJCUJDODRGNDM5MjY0MUFCMTQwMEY1N0MxQyAvKiBDdXN0b21QYWludElt
YWdlLmNwcCAqLywKKwkJCQlCQzg0RjQzQTI2NDFBQjE0MDBGNTdDMUMgLyogQ3VzdG9tUGFpbnRJ
bWFnZS5oICovLAogCQkJCUU1MTc2NzAyMjBCODhDMTQwMEQ0MTE2NyAvKiBEYXRhTGlzdFN1Z2dl
c3Rpb25JbmZvcm1hdGlvbi5oICovLAogCQkJCUY1NUIzRDgxMTI1MUYxMkQwMDNFRjI2OSAvKiBE
YXRlSW5wdXRUeXBlLmNwcCAqLywKIAkJCQlGNTVCM0Q4MjEyNTFGMTJEMDAzRUYyNjkgLyogRGF0
ZUlucHV0VHlwZS5oICovLApAQCAtMjY4NTQsOCArMjY4NTUsNiBAQAogCQkJCTcyQkFDM0E3MjNF
MTczMjgwMDhENzQxQyAvKiBDb25jcmV0ZUltYWdlQnVmZmVyLmggKi8sCiAJCQkJMkQyRkMwNTQx
NDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcCAqLywKIAkJCQky
RDJGQzA1NTE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuaCAqLywK
LQkJCQk0QjdBRTQ5NTIxNzdCNjNFMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5jcHAgKi8s
Ci0JCQkJNEI3QUU0OTIyMTc3QjU2RjAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuaCAqLywK
IAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyogRGFzaEFycmF5LmggKi8sCiAJCQkJNTU1
MTMwMDAxRTdDQ0NDQTAwQTY5RTM4IC8qIERlY29kaW5nT3B0aW9ucy5oICovLAogCQkJCTQ5RkM3
QTRGMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLApAQCAt
MzIxMTIsNyArMzIxMTAsNiBAQAogCQkJCTYyQ0QzMjVBMTE1N0U1N0MwMDYzQjBBNyAvKiBDdXN0
b21FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1RDIzODUyMjdBMDY1MjAwMEI5QkRBIC8q
IEN1c3RvbUhlYWRlckZpZWxkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIxRTEzRTcyMTc5MEQ2
NjAwNDJDRjk4IC8qIEN1c3RvbVBhaW50Q2FudmFzLmggaW4gSGVhZGVycyAqLywKLQkJCQk0QjdB
RTQ5MzIxNzdCNTZGMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThDQjQxM0UwRTg2MzNGRDAwMzJDNEYwIC8qIERhc2hBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTdCQzZBMjExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5N0JDNkEyNDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VBdXRob3JpemVy
LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludElt
YWdlLmNwcAkocmV2aXNpb24gMjc2OTU1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcDoyNzY5NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9t
UGFpbnRJbWFnZS5oIgorCisjaWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCisKKyNpbmNsdWRl
ICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NJbWFnZVZhbHVl
LmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0
eVBhcnNlci5oIgorI2luY2x1ZGUgIkN1c3RvbVBhaW50Q2FudmFzLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCaXRtYXAuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQ1NTUGFpbnRDYWxsYmFjay5oIgorI2luY2x1ZGUgIkpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJQYWludFJlbmRlcmluZ0NvbnRleHQy
RC5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnR5
TWFwLmgiCisjaW5jbHVkZSAiVHlwZWRPTUNTU0ltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJUeXBl
ZE9NQ1NTVW5pdFZhbHVlLmgiCisjaW5jbHVkZSAiVHlwZWRPTUNTU1VucGFyc2VkVmFsdWUuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db25zdHJ1Y3REYXRhLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ3VzdG9tUGFpbnRJbWFnZTo6Q3VzdG9tUGFpbnRJbWFnZShQYWludFdvcmts
ZXRHbG9iYWxTY29wZTo6UGFpbnREZWZpbml0aW9uJiBkZWZpbml0aW9uLCBjb25zdCBGbG9hdFNp
emUmIHNpemUsIFJlbmRlckVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBh
cmd1bWVudHMpCisgICAgOiBtX3BhaW50RGVmaW5pdGlvbihtYWtlV2Vha1B0cihkZWZpbml0aW9u
KSkKKyAgICAsIG1faW5wdXRQcm9wZXJ0aWVzKGRlZmluaXRpb24uaW5wdXRQcm9wZXJ0aWVzKQor
ICAgICwgbV9lbGVtZW50KG1ha2VXZWFrUHRyKGVsZW1lbnQpKQorICAgICwgbV9hcmd1bWVudHMo
YXJndW1lbnRzKQoreworICAgIHNldENvbnRhaW5lclNpemUoc2l6ZSk7Cit9CisKK0N1c3RvbVBh
aW50SW1hZ2U6On5DdXN0b21QYWludEltYWdlKCkgPSBkZWZhdWx0OworCitzdGF0aWMgUmVmUHRy
PFR5cGVkT01DU1NTdHlsZVZhbHVlPiBleHRyYWN0Q29tcHV0ZWRQcm9wZXJ0eShjb25zdCBTdHJp
bmcmIG5hbWUsIEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3Rv
ciBleHRyYWN0b3IoJmVsZW1lbnQpOworCisgICAgaWYgKGlzQ3VzdG9tUHJvcGVydHlOYW1lKG5h
bWUpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBleHRyYWN0b3IuY3VzdG9tUHJvcGVydHlWYWx1
ZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIFN0eWxlUHJvcGVydHlNYXBSZWFkT25seTo6Y3VzdG9t
UHJvcGVydHlWYWx1ZU9yRGVmYXVsdChuYW1lLCBlbGVtZW50LmRvY3VtZW50KCksIHZhbHVlLmdl
dCgpLCAmZWxlbWVudCk7CisgICAgfQorCisgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0g
Y3NzUHJvcGVydHlJRChuYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgYXV0byB2YWx1ZSA9IGV4dHJhY3Rvci5wcm9wZXJ0eVZhbHVlKHBy
b3BlcnR5SUQsIERvTm90VXBkYXRlTGF5b3V0KTsKKyAgICByZXR1cm4gU3R5bGVQcm9wZXJ0eU1h
cFJlYWRPbmx5OjpyZWlmeVZhbHVlKHZhbHVlLmdldCgpLCBlbGVtZW50LmRvY3VtZW50KCksICZl
bGVtZW50KTsKK30KKworY2xhc3MgSGFzaE1hcFN0eWxlUHJvcGVydHlNYXAgZmluYWwgOiBwdWJs
aWMgU3R5bGVQcm9wZXJ0eU1hcCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTdHlsZVByb3Bl
cnR5TWFwPiBjcmVhdGUoSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1
ZT4+JiYgbWFwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSGFzaE1hcFN0
eWxlUHJvcGVydHlNYXAoV1RGTW92ZShtYXApKSk7CisgICAgfQorCisgICAgc3RhdGljIFJlZlB0
cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4gZXh0cmFjdENvbXB1dGVkUHJvcGVydHkoY29uc3QgU3Ry
aW5nJiBuYW1lLCBFbGVtZW50JiBlbGVtZW50KQorICAgIHsKKyAgICAgICAgQ29tcHV0ZWRTdHls
ZUV4dHJhY3RvciBleHRyYWN0b3IoJmVsZW1lbnQpOworCisgICAgICAgIGlmIChpc0N1c3RvbVBy
b3BlcnR5TmFtZShuYW1lKSkgeworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGV4dHJhY3Rvci5j
dXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIFN0eWxlUHJvcGVy
dHlNYXBSZWFkT25seTo6Y3VzdG9tUHJvcGVydHlWYWx1ZU9yRGVmYXVsdChuYW1lLCBlbGVtZW50
LmRvY3VtZW50KCksIHZhbHVlLmdldCgpLCAmZWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAg
ICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKG5hbWUpOworICAgICAg
ICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBhdXRvIHZhbHVlID0gZXh0cmFjdG9yLnByb3BlcnR5VmFsdWUocHJvcGVydHlJRCwgRG9Ob3RV
cGRhdGVMYXlvdXQpOworICAgICAgICByZXR1cm4gU3R5bGVQcm9wZXJ0eU1hcFJlYWRPbmx5Ojpy
ZWlmeVZhbHVlKHZhbHVlLmdldCgpLCBlbGVtZW50LmRvY3VtZW50KCksICZlbGVtZW50KTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgSGFzaE1hcFN0eWxlUHJvcGVydHlNYXAoSGFz
aE1hcDxTdHJpbmcsIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4+JiYgbWFwKQorICAgICAg
ICA6IG1fbWFwKFdURk1vdmUobWFwKSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjbGVhckVs
ZW1lbnQoKSBvdmVycmlkZSB7IH0KKworICAgIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4g
Z2V0KGNvbnN0IFN0cmluZyYgcHJvcGVydHkpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1ha2VSZWZQ
dHIobV9tYXAuZ2V0KHByb3BlcnR5KSk7IH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8
VHlwZWRPTUNTU1N0eWxlVmFsdWU+PiBtX21hcDsKK307CisKK0ltYWdlRHJhd1Jlc3VsdCBDdXN0
b21QYWludEltYWdlOjpkb0N1c3RvbVBhaW50KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0U2l6ZSYgZGVzdFNpemUpCit7CisgICAgaWYgKCFtX2VsZW1lbnQgfHwgIW1f
ZWxlbWVudC0+ZWxlbWVudCgpIHx8ICFtX3BhaW50RGVmaW5pdGlvbikKKyAgICAgICAgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKKworICAgIEpTQzo6SlNWYWx1ZSBwYWludENv
bnN0cnVjdG9yID0gbV9wYWludERlZmluaXRpb24tPnBhaW50Q29uc3RydWN0b3I7CisKKyAgICBp
ZiAoIXBhaW50Q29uc3RydWN0b3IpCisgICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRp
ZE5vdGhpbmc7CisKKyAgICBBU1NFUlQoIW1fZWxlbWVudC0+bmVlZHNMYXlvdXQoKSk7CisgICAg
QVNTRVJUKCFtX2VsZW1lbnQtPmVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5uZWVkc1N0eWxlUmVjYWxj
KCkpOworCisgICAgSlNDU1NQYWludENhbGxiYWNrJiBjYWxsYmFjayA9IHN0YXRpY19jYXN0PEpT
Q1NTUGFpbnRDYWxsYmFjayY+KG1fcGFpbnREZWZpbml0aW9uLT5wYWludENhbGxiYWNrLmdldCgp
KTsKKyAgICBhdXRvKiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gY2FsbGJhY2suc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAg
ICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKKworICAgIGF1dG8gY2FudmFz
ID0gQ3VzdG9tUGFpbnRDYW52YXM6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZGVz
dFNpemUud2lkdGgoKSwgZGVzdFNpemUuaGVpZ2h0KCkpOworICAgIEV4Y2VwdGlvbk9yPFJlZlB0
cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4+IGNvbnRleHRPckV4Y2VwdGlvbiA9IGNhbnZhcy0+
Z2V0Q29udGV4dCgpOworCisgICAgaWYgKGNvbnRleHRPckV4Y2VwdGlvbi5oYXNFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKKyAgICBhdXRv
IGNvbnRleHQgPSBjb250ZXh0T3JFeGNlcHRpb24ucmVsZWFzZVJldHVyblZhbHVlKCk7CisKKyAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFR5cGVkT01DU1NTdHlsZVZhbHVlPj4gcHJvcGVydHlW
YWx1ZXM7CisKKyAgICBpZiAoYXV0byogZWxlbWVudCA9IG1fZWxlbWVudC0+ZWxlbWVudCgpKSB7
CisgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG1faW5wdXRQcm9wZXJ0aWVzKQorICAgICAgICAg
ICAgcHJvcGVydHlWYWx1ZXMuYWRkKG5hbWUsIGV4dHJhY3RDb21wdXRlZFByb3BlcnR5KG5hbWUs
ICplbGVtZW50KSk7CisgICAgfQorCisgICAgYXV0byBzaXplID0gQ1NTUGFpbnRTaXplOjpjcmVh
dGUoZGVzdFNpemUud2lkdGgoKSwgZGVzdFNpemUuaGVpZ2h0KCkpOworICAgIFJlZjxTdHlsZVBy
b3BlcnR5TWFwUmVhZE9ubHk+IHByb3BlcnR5TWFwID0gSGFzaE1hcFN0eWxlUHJvcGVydHlNYXA6
OmNyZWF0ZShXVEZNb3ZlKHByb3BlcnR5VmFsdWVzKSk7CisKKyAgICBhdXRvJiB2bSA9IHBhaW50
Q29uc3RydWN0b3IuZ2V0T2JqZWN0KCktPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1
dG8mIGdsb2JhbE9iamVjdCA9ICpwYWludENvbnN0cnVjdG9yLmdldE9iamVjdCgpLT5nbG9iYWxP
YmplY3QoKTsKKworICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7
CisgICAgSlNDOjpBcmdMaXN0IG5vQXJnczsKKyAgICBKU0M6OkpTVmFsdWUgdGhpc09iamVjdCA9
IHsgSlNDOjpjb25zdHJ1Y3QoJmxleGljYWxHbG9iYWxPYmplY3QsIHBhaW50Q29uc3RydWN0b3Is
IG5vQXJncywgIkZhaWxlZCB0byBjb25zdHJ1Y3QgcGFpbnQgY2xhc3MiKSB9OworCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICByZXBvcnRFeGNlcHRpb24o
JmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKKyAgICB9CisKKyAgICBhdXRvIHJlc3VsdCA9
IGNhbGxiYWNrLmhhbmRsZUV2ZW50KFdURk1vdmUodGhpc09iamVjdCksICpjb250ZXh0LCBzaXpl
LCBwcm9wZXJ0eU1hcCwgbV9hcmd1bWVudHMpOworICAgIGlmIChyZXN1bHQudHlwZSgpICE9IENh
bGxiYWNrUmVzdWx0VHlwZTo6U3VjY2VzcykKKyAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsKKworICAgIGNhbnZhcy0+cmVwbGF5RGlzcGxheUxpc3QoJmRlc3RDb250
ZXh0KTsKKworICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZERyYXc7Cit9CisKK0ltYWdl
RHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRlc3RDb250ZXh0KTsKKyAgICBkZXN0Q29udGV4
dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRp
b25zLmJsZW5kTW9kZSgpKTsKKyAgICBkZXN0Q29udGV4dC5jbGlwKGRlc3RSZWN0KTsKKyAgICBk
ZXN0Q29udGV4dC50cmFuc2xhdGUoZGVzdFJlY3QubG9jYXRpb24oKSk7CisgICAgaWYgKGRlc3RS
ZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKKyAgICAgICAgZGVzdENvbnRleHQuc2NhbGUo
ZGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCkpOworICAgIGRlc3RDb250ZXh0LnRyYW5z
bGF0ZSgtc3JjUmVjdC5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gZG9DdXN0b21QYWludChkZXN0
Q29udGV4dCwgc2l6ZSgpKTsKK30KKwordm9pZCBDdXN0b21QYWludEltYWdlOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwKKyAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICAv
LyBBbGxvdyB0aGUgZ2VuZXJhdG9yIHRvIHByb3ZpZGUgdmlzdWFsbHktZXF1aXZhbGVudCB0aWxp
bmcgcGFyYW1ldGVycyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgorICAgIEZsb2F0U2l6ZSBhZGp1
c3RlZFNpemUgPSBzaXplKCk7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7CisKKyAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQncyBzY2FsZSB0
byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCisgICAgQWZmaW5lVHJhbnNmb3JtIGRl
c3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5p
dGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgZG91YmxlIHhTY2FsZSA9IGZhYnMoZGVzdENv
bnRleHRDVE0ueFNjYWxlKCkpOworICAgIGRvdWJsZSB5U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0
Q1RNLnlTY2FsZSgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWRqdXN0ZWRQYXR0ZXJuQ1RNID0g
cGF0dGVyblRyYW5zZm9ybTsKKyAgICBhZGp1c3RlZFBhdHRlcm5DVE0uc2NhbGUoMS4wIC8geFNj
YWxlLCAxLjAgLyB5U2NhbGUpOworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZSh4U2NhbGUsIHlT
Y2FsZSk7CisKKyAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKGFkanVzdGVkU2l6ZSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBkZXN0Q29u
dGV4dCk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBkb0N1c3RvbVBh
aW50KGJ1ZmZlci0+Y29udGV4dCgpLCBhZGp1c3RlZFNpemUpOworCisgICAgaWYgKGRlc3RDb250
ZXh0LmRyYXdMdW1pbmFuY2VNYXNrKCkpCisgICAgICAgIGJ1ZmZlci0+Y29udmVydFRvTHVtaW5h
bmNlTWFzaygpOworCisgICAgYnVmZmVyLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIGFkanVzdGVkU3JjUmVjdCwgYWRqdXN0ZWRQYXR0ZXJuQ1RNLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucyk7CisgICAgZGVzdENvbnRleHQuc2V0RHJhd0x1bWluYW5jZU1hc2soZmFsc2UpOwor
fQorCit9CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5o
CShyZXZpc2lvbiAyNzY5NTUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0N1c3RvbVBhaW50SW1hZ2UuaDoyNzY5NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3Rv
bVBhaW50SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKKworI2luY2x1ZGUgIkdlbmVyYXRlZEltYWdlLmgiCisj
aW5jbHVkZSAiUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaCIKKworI2luY2x1ZGUgPHd0Zi9XZWFr
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFz
cyBSZW5kZXJFbGVtZW50OworCitjbGFzcyBDdXN0b21QYWludEltYWdlIGZpbmFsIDogcHVibGlj
IEdlbmVyYXRlZEltYWdlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEN1c3RvbVBhaW50SW1h
Z2U+IGNyZWF0ZShQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6UGFpbnREZWZpbml0aW9uJiBkZWZp
bml0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlckVsZW1lbnQmIGVsZW1lbnQsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDdXN0b21QYWludEltYWdlKGRlZmluaXRpb24sIHNpemUsIGVsZW1lbnQsIGFy
Z3VtZW50cykpOworICAgIH0KKworICAgIHZpcnR1YWwgfkN1c3RvbVBhaW50SW1hZ2UoKTsKKyAg
ICBib29sIGlzQ3VzdG9tUGFpbnRJbWFnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KKworcHJpdmF0ZToKKyAgICBDdXN0b21QYWludEltYWdlKFBhaW50V29ya2xldEdsb2JhbFNj
b3BlOjpQYWludERlZmluaXRpb24mLCBjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cyk7CisKKyAgICBJbWFnZURyYXdSZXN1bHQg
ZG9DdXN0b21QYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFNpemUmKTsKKworICAg
IEltYWdlRHJhd1Jlc3VsdCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgZmluYWw7CisKKyAgICBXZWFrUHRyPFBhaW50V29ya2xldEdsb2JhbFNjb3Bl
OjpQYWludERlZmluaXRpb24+IG1fcGFpbnREZWZpbml0aW9uOworICAgIFZlY3RvcjxTdHJpbmc+
IG1faW5wdXRQcm9wZXJ0aWVzOworICAgIFdlYWtQdHI8UmVuZGVyRWxlbWVudD4gbV9lbGVtZW50
OworICAgIFZlY3RvcjxTdHJpbmc+IG1fYXJndW1lbnRzOworfTsKKworfQorCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0lNQUdFKEN1c3RvbVBhaW50SW1hZ2UpCisjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2Uu
Y3BwCShyZXZpc2lvbiAyNzY5NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9DdXN0b21QYWludEltYWdlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIxNCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3VzdG9tUGFp
bnRJbWFnZS5oIgotCi0jaWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCi0KLSNpbmNsdWRlICJD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgi
Ci0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eVBh
cnNlci5oIgotI2luY2x1ZGUgIkN1c3RvbVBhaW50Q2FudmFzLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCaXRtYXAuaCIKLSNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgotI2luY2x1ZGUgIkpTQ1NTUGFpbnRDYWxsYmFjay5oIgotI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlICJQYWludFJlbmRlcmluZ0NvbnRleHQyRC5o
IgotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5TWFw
LmgiCi0jaW5jbHVkZSAiVHlwZWRPTUNTU0ltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJUeXBlZE9N
Q1NTVW5pdFZhbHVlLmgiCi0jaW5jbHVkZSAiVHlwZWRPTUNTU1VucGFyc2VkVmFsdWUuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db25zdHJ1Y3REYXRhLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotQ3VzdG9tUGFpbnRJbWFnZTo6Q3VzdG9tUGFpbnRJbWFnZShQYWludFdvcmtsZXRH
bG9iYWxTY29wZTo6UGFpbnREZWZpbml0aW9uJiBkZWZpbml0aW9uLCBjb25zdCBGbG9hdFNpemUm
IHNpemUsIFJlbmRlckVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcmd1
bWVudHMpCi0gICAgOiBtX3BhaW50RGVmaW5pdGlvbihtYWtlV2Vha1B0cihkZWZpbml0aW9uKSkK
LSAgICAsIG1faW5wdXRQcm9wZXJ0aWVzKGRlZmluaXRpb24uaW5wdXRQcm9wZXJ0aWVzKQotICAg
ICwgbV9lbGVtZW50KG1ha2VXZWFrUHRyKGVsZW1lbnQpKQotICAgICwgbV9hcmd1bWVudHMoYXJn
dW1lbnRzKQotewotICAgIHNldENvbnRhaW5lclNpemUoc2l6ZSk7Ci19Ci0KLUN1c3RvbVBhaW50
SW1hZ2U6On5DdXN0b21QYWludEltYWdlKCkgPSBkZWZhdWx0OwotCi1zdGF0aWMgUmVmUHRyPFR5
cGVkT01DU1NTdHlsZVZhbHVlPiBleHRyYWN0Q29tcHV0ZWRQcm9wZXJ0eShjb25zdCBTdHJpbmcm
IG5hbWUsIEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBl
eHRyYWN0b3IoJmVsZW1lbnQpOwotCi0gICAgaWYgKGlzQ3VzdG9tUHJvcGVydHlOYW1lKG5hbWUp
KSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBleHRyYWN0b3IuY3VzdG9tUHJvcGVydHlWYWx1ZShu
YW1lKTsKLSAgICAgICAgcmV0dXJuIFN0eWxlUHJvcGVydHlNYXBSZWFkT25seTo6Y3VzdG9tUHJv
cGVydHlWYWx1ZU9yRGVmYXVsdChuYW1lLCBlbGVtZW50LmRvY3VtZW50KCksIHZhbHVlLmdldCgp
LCAmZWxlbWVudCk7Ci0gICAgfQotCi0gICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gY3Nz
UHJvcGVydHlJRChuYW1lKTsKLSAgICBpZiAoIXByb3BlcnR5SUQpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYXV0byB2YWx1ZSA9IGV4dHJhY3Rvci5wcm9wZXJ0eVZhbHVlKHByb3Bl
cnR5SUQsIERvTm90VXBkYXRlTGF5b3V0KTsKLSAgICByZXR1cm4gU3R5bGVQcm9wZXJ0eU1hcFJl
YWRPbmx5OjpyZWlmeVZhbHVlKHZhbHVlLmdldCgpLCBlbGVtZW50LmRvY3VtZW50KCksICZlbGVt
ZW50KTsKLX0KLQotY2xhc3MgSGFzaE1hcFN0eWxlUHJvcGVydHlNYXAgZmluYWwgOiBwdWJsaWMg
U3R5bGVQcm9wZXJ0eU1hcCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHlsZVByb3BlcnR5
TWFwPiBjcmVhdGUoSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4+
JiYgbWFwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSGFzaE1hcFN0eWxl
UHJvcGVydHlNYXAoV1RGTW92ZShtYXApKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZlB0cjxU
eXBlZE9NQ1NTU3R5bGVWYWx1ZT4gZXh0cmFjdENvbXB1dGVkUHJvcGVydHkoY29uc3QgU3RyaW5n
JiBuYW1lLCBFbGVtZW50JiBlbGVtZW50KQotICAgIHsKLSAgICAgICAgQ29tcHV0ZWRTdHlsZUV4
dHJhY3RvciBleHRyYWN0b3IoJmVsZW1lbnQpOwotCi0gICAgICAgIGlmIChpc0N1c3RvbVByb3Bl
cnR5TmFtZShuYW1lKSkgewotICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGV4dHJhY3Rvci5jdXN0
b21Qcm9wZXJ0eVZhbHVlKG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIFN0eWxlUHJvcGVydHlN
YXBSZWFkT25seTo6Y3VzdG9tUHJvcGVydHlWYWx1ZU9yRGVmYXVsdChuYW1lLCBlbGVtZW50LmRv
Y3VtZW50KCksIHZhbHVlLmdldCgpLCAmZWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKG5hbWUpOwotICAgICAgICBp
ZiAoIXByb3BlcnR5SUQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBh
dXRvIHZhbHVlID0gZXh0cmFjdG9yLnByb3BlcnR5VmFsdWUocHJvcGVydHlJRCwgRG9Ob3RVcGRh
dGVMYXlvdXQpOwotICAgICAgICByZXR1cm4gU3R5bGVQcm9wZXJ0eU1hcFJlYWRPbmx5OjpyZWlm
eVZhbHVlKHZhbHVlLmdldCgpLCBlbGVtZW50LmRvY3VtZW50KCksICZlbGVtZW50KTsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgSGFzaE1hcFN0eWxlUHJvcGVydHlNYXAoSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4+JiYgbWFwKQotICAgICAgICA6
IG1fbWFwKFdURk1vdmUobWFwKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckVsZW1l
bnQoKSBvdmVycmlkZSB7IH0KLQotICAgIFJlZlB0cjxUeXBlZE9NQ1NTU3R5bGVWYWx1ZT4gZ2V0
KGNvbnN0IFN0cmluZyYgcHJvcGVydHkpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1ha2VSZWZQdHIo
bV9tYXAuZ2V0KHByb3BlcnR5KSk7IH0KLQotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8VHlw
ZWRPTUNTU1N0eWxlVmFsdWU+PiBtX21hcDsKLX07Ci0KLUltYWdlRHJhd1Jlc3VsdCBDdXN0b21Q
YWludEltYWdlOjpkb0N1c3RvbVBhaW50KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0U2l6ZSYgZGVzdFNpemUpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIW1fZWxl
bWVudC0+ZWxlbWVudCgpIHx8ICFtX3BhaW50RGVmaW5pdGlvbikKLSAgICAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQotICAgIEpTQzo6SlNWYWx1ZSBwYWludENvbnN0
cnVjdG9yID0gbV9wYWludERlZmluaXRpb24tPnBhaW50Q29uc3RydWN0b3I7Ci0KLSAgICBpZiAo
IXBhaW50Q29uc3RydWN0b3IpCi0gICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5v
dGhpbmc7Ci0KLSAgICBBU1NFUlQoIW1fZWxlbWVudC0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNT
RVJUKCFtX2VsZW1lbnQtPmVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5uZWVkc1N0eWxlUmVjYWxjKCkp
OwotCi0gICAgSlNDU1NQYWludENhbGxiYWNrJiBjYWxsYmFjayA9IHN0YXRpY19jYXN0PEpTQ1NT
UGFpbnRDYWxsYmFjayY+KG1fcGFpbnREZWZpbml0aW9uLT5wYWludENhbGxiYWNrLmdldCgpKTsK
LSAgICBhdXRvKiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gY2FsbGJhY2suc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAgICAg
cmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQotICAgIGF1dG8gY2FudmFzID0g
Q3VzdG9tUGFpbnRDYW52YXM6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZGVzdFNp
emUud2lkdGgoKSwgZGVzdFNpemUuaGVpZ2h0KCkpOwotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxQ
YWludFJlbmRlcmluZ0NvbnRleHQyRD4+IGNvbnRleHRPckV4Y2VwdGlvbiA9IGNhbnZhcy0+Z2V0
Q29udGV4dCgpOwotCi0gICAgaWYgKGNvbnRleHRPckV4Y2VwdGlvbi5oYXNFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLSAgICBhdXRvIGNv
bnRleHQgPSBjb250ZXh0T3JFeGNlcHRpb24ucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0KLSAgICBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPFR5cGVkT01DU1NTdHlsZVZhbHVlPj4gcHJvcGVydHlWYWx1
ZXM7Ci0KLSAgICBpZiAoYXV0byogZWxlbWVudCA9IG1fZWxlbWVudC0+ZWxlbWVudCgpKSB7Ci0g
ICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG1faW5wdXRQcm9wZXJ0aWVzKQotICAgICAgICAgICAg
cHJvcGVydHlWYWx1ZXMuYWRkKG5hbWUsIGV4dHJhY3RDb21wdXRlZFByb3BlcnR5KG5hbWUsICpl
bGVtZW50KSk7Ci0gICAgfQotCi0gICAgYXV0byBzaXplID0gQ1NTUGFpbnRTaXplOjpjcmVhdGUo
ZGVzdFNpemUud2lkdGgoKSwgZGVzdFNpemUuaGVpZ2h0KCkpOwotICAgIFJlZjxTdHlsZVByb3Bl
cnR5TWFwUmVhZE9ubHk+IHByb3BlcnR5TWFwID0gSGFzaE1hcFN0eWxlUHJvcGVydHlNYXA6OmNy
ZWF0ZShXVEZNb3ZlKHByb3BlcnR5VmFsdWVzKSk7Ci0KLSAgICBhdXRvJiB2bSA9IHBhaW50Q29u
c3RydWN0b3IuZ2V0T2JqZWN0KCktPnZtKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2
bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8m
IGdsb2JhbE9iamVjdCA9ICpwYWludENvbnN0cnVjdG9yLmdldE9iamVjdCgpLT5nbG9iYWxPYmpl
Y3QoKTsKLQotICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7Ci0g
ICAgSlNDOjpBcmdMaXN0IG5vQXJnczsKLSAgICBKU0M6OkpTVmFsdWUgdGhpc09iamVjdCA9IHsg
SlNDOjpjb25zdHJ1Y3QoJmxleGljYWxHbG9iYWxPYmplY3QsIHBhaW50Q29uc3RydWN0b3IsIG5v
QXJncywgIkZhaWxlZCB0byBjb25zdHJ1Y3QgcGFpbnQgY2xhc3MiKSB9OwotCi0gICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICByZXBvcnRFeGNlcHRpb24oJmxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLSAgICB9Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGNh
bGxiYWNrLmhhbmRsZUV2ZW50KFdURk1vdmUodGhpc09iamVjdCksICpjb250ZXh0LCBzaXplLCBw
cm9wZXJ0eU1hcCwgbV9hcmd1bWVudHMpOwotICAgIGlmIChyZXN1bHQudHlwZSgpICE9IENhbGxi
YWNrUmVzdWx0VHlwZTo6U3VjY2VzcykKLSAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6
RGlkTm90aGluZzsKLQotICAgIGNhbnZhcy0+cmVwbGF5RGlzcGxheUxpc3QoJmRlc3RDb250ZXh0
KTsKLQotICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZERyYXc7Ci19Ci0KLUltYWdlRHJh
d1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRlc3RDb250ZXh0KTsKLSAgICBkZXN0Q29udGV4dC5z
ZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25z
LmJsZW5kTW9kZSgpKTsKLSAgICBkZXN0Q29udGV4dC5jbGlwKGRlc3RSZWN0KTsKLSAgICBkZXN0
Q29udGV4dC50cmFuc2xhdGUoZGVzdFJlY3QubG9jYXRpb24oKSk7Ci0gICAgaWYgKGRlc3RSZWN0
LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKLSAgICAgICAgZGVzdENvbnRleHQuc2NhbGUoZGVz
dFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCkpOwotICAgIGRlc3RDb250ZXh0LnRyYW5zbGF0
ZSgtc3JjUmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gZG9DdXN0b21QYWludChkZXN0Q29u
dGV4dCwgc2l6ZSgpKTsKLX0KLQotdm9pZCBDdXN0b21QYWludEltYWdlOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICAvLyBB
bGxvdyB0aGUgZ2VuZXJhdG9yIHRvIHByb3ZpZGUgdmlzdWFsbHktZXF1aXZhbGVudCB0aWxpbmcg
cGFyYW1ldGVycyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgotICAgIEZsb2F0U2l6ZSBhZGp1c3Rl
ZFNpemUgPSBzaXplKCk7Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7
Ci0KLSAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQncyBzY2FsZSB0byBn
ZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RD
b250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVs
eUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgZG91YmxlIHhTY2FsZSA9IGZhYnMoZGVzdENvbnRl
eHRDVE0ueFNjYWxlKCkpOwotICAgIGRvdWJsZSB5U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0Q1RN
LnlTY2FsZSgpKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYWRqdXN0ZWRQYXR0ZXJuQ1RNID0gcGF0
dGVyblRyYW5zZm9ybTsKLSAgICBhZGp1c3RlZFBhdHRlcm5DVE0uc2NhbGUoMS4wIC8geFNjYWxl
LCAxLjAgLyB5U2NhbGUpOwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZSh4U2NhbGUsIHlTY2Fs
ZSk7Ci0KLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVm
ZmVyKGFkanVzdGVkU2l6ZSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBkZXN0Q29udGV4
dCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBkb0N1c3RvbVBhaW50
KGJ1ZmZlci0+Y29udGV4dCgpLCBhZGp1c3RlZFNpemUpOwotCi0gICAgaWYgKGRlc3RDb250ZXh0
LmRyYXdMdW1pbmFuY2VNYXNrKCkpCi0gICAgICAgIGJ1ZmZlci0+Y29udmVydFRvTHVtaW5hbmNl
TWFzaygpOwotCi0gICAgYnVmZmVyLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgYWRqdXN0ZWRQYXR0ZXJuQ1RNLCBwaGFzZSwgc3BhY2luZywgb3B0
aW9ucyk7Ci0gICAgZGVzdENvbnRleHQuc2V0RHJhd0x1bWluYW5jZU1hc2soZmFsc2UpOwotfQot
Ci19Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3Rv
bVBhaW50SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9DdXN0b21QYWludEltYWdlLmgJKHJldmlzaW9uIDI3Njk1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQotCi0jaW5j
bHVkZSAiR2VuZXJhdGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJQYWludFdvcmtsZXRHbG9iYWxTY29w
ZS5oIgotCi0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIFJlbmRlckVsZW1lbnQ7Ci0KLWNsYXNzIEN1c3Rv
bVBhaW50SW1hZ2UgZmluYWwgOiBwdWJsaWMgR2VuZXJhdGVkSW1hZ2UgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8Q3VzdG9tUGFpbnRJbWFnZT4gY3JlYXRlKFBhaW50V29ya2xldEdsb2JhbFNj
b3BlOjpQYWludERlZmluaXRpb24mIGRlZmluaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
UmVuZGVyRWxlbWVudCYgZWxlbWVudCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50cykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEN1c3RvbVBhaW50SW1hZ2UoZGVm
aW5pdGlvbiwgc2l6ZSwgZWxlbWVudCwgYXJndW1lbnRzKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB+Q3VzdG9tUGFpbnRJbWFnZSgpOwotICAgIGJvb2wgaXNDdXN0b21QYWludEltYWdlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcml2YXRlOgotICAgIEN1c3RvbVBhaW50
SW1hZ2UoUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OlBhaW50RGVmaW5pdGlvbiYsIGNvbnN0IEZs
b2F0U2l6ZSYsIFJlbmRlckVsZW1lbnQmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnRz
KTsKLQotICAgIEltYWdlRHJhd1Jlc3VsdCBkb0N1c3RvbVBhaW50KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0U2l6ZSYpOwotCi0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXcoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCBk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLQotICAgIFdlYWtQ
dHI8UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OlBhaW50RGVmaW5pdGlvbj4gbV9wYWludERlZmlu
aXRpb247Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9pbnB1dFByb3BlcnRpZXM7Ci0gICAgV2Vha1B0
cjxSZW5kZXJFbGVtZW50PiBtX2VsZW1lbnQ7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9hcmd1bWVu
dHM7Ci19OwotCi19Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfSU1BR0UoQ3VzdG9tUGFpbnRJ
bWFnZSkKLSNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>