<?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>219345</bug_id>
          
          <creation_ts>2020-11-30 03:05:51 -0800</creation_ts>
          <short_desc>Move code from AxisScrollSnapOffsets to ScrollSnapOffsetsInfo</short_desc>
          <delta_ts>2021-07-07 07:17:56 -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>CSS</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>
          
          <blocked>145099</blocked>
    
    <blocked>219273</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>annulen</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1710556</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2020-11-30 03:05:51 -0800</bug_when>
    <thetext>The API exposed by AxisScrollSnapOffsets is written with a one-dimensional set of scroll snap offsets in mind. Moving this code to ScrollSnapOffsetsInfo is the first step toward rewriting the API to deal with ScrollSnapOffsetsInfo, which abstracts away the implementation details of scroll snap offsets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710560</commentid>
    <comment_count>1</comment_count>
      <attachid>415011</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2020-11-30 03:15:35 -0800</bug_when>
    <thetext>Created attachment 415011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710562</commentid>
    <comment_count>2</comment_count>
      <attachid>415013</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2020-11-30 03:30:37 -0800</bug_when>
    <thetext>Created attachment 415013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711576</commentid>
    <comment_count>3</comment_count>
      <attachid>415013</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-12-02 19:34:56 -0800</bug_when>
    <thetext>Comment on attachment 415013
Patch

This patch looks good. I see a lot of opportunities to modernize the moved code and use constexpr, range for-loops, etc etc. I think I&apos;ve seen different code styling for templates in other code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711630</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2020-12-03 01:38:34 -0800</bug_when>
    <thetext>Thanks very much for the review. I would definitely like to continue improving this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711632</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-12-03 01:51:05 -0800</bug_when>
    <thetext>Committed r270390: &lt;https://trac.webkit.org/changeset/270390&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 415013.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711633</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-03 01:52:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/71929518&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415011</attachid>
            <date>2020-11-30 03:15:35 -0800</date>
            <delta_ts>2020-11-30 04:19:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219345-20201130121533.patch</filename>
            <type>text/plain</type>
            <size>52617</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU4OTczNDk1NDJmNTQx
NTk1NGNkN2Q2MDgyNmQxYzg0YWVjYWZlMy4uZDUzZWI2ZTIzNmZiZDhhYzkwNTY1YWI3Mjg2NDBk
YjM2NDdkOGUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIwLTExLTMwICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBNb3ZlIGNvZGUg
ZnJvbSBBeGlzU2Nyb2xsU25hcE9mZnNldHMgdG8gU2Nyb2xsU25hcE9mZnNldHNJbmZvCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTkzNDUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMu
IFRoaXMgc2hvdWxkIG5vdCBtb2RpZnkgYmVoYXZpb3IuCisKKyAgICAgICAgKiBIZWFkZXJzLmNt
YWtlOiBSZW1vdmUgQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmggZnJvbSBoZWFkZXIgbGlzdC4KKyAg
ICAgICAgKiBTb3VyY2VzLnR4dDogVXBkYXRlIHNvdXJjZSBsaXN0LgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogcGFnZS9GcmFt
ZVZpZXcuY3BwOiBVcGRhdGUgaW5jbHVkZXMuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjppbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldFJhbmdlcyk6IEFkZGVkIGZyb20gQXhpc1Njcm9s
bFNuYXBPZmZzZXRzLgorICAgICAgICAoV2ViQ29yZTo6aW5kaWNlc09mTmVhcmVzdFNuYXBPZmZz
ZXRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjbG9zZXN0U25hcE9mZnNldCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUF4aXNQcm94aW1pdHlTbmFwT2Zmc2V0UmFuZ2VzKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjp1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKTogRGl0dG8u
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmg6IEFkZGVk
IGZ1bmN0aW9ucyBmcm9tIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIGFuZCBzdXJyb3VuZGVkCisg
ICAgICAgIHRoaXMgaGVhZGVyIGluIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNvIGl0IGNhbiBi
ZSBpbmNsdWRlZCB1bmNvbmRpdGlvbmFsbHkuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaDogVXBkYXRlZCBpbmNsdWRlcy4KKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3IuaDogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaDogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDogRGl0dG8uCisKIDIwMjAtMTEtMTYgIFNlcmdp
byBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1mbGV4
XSBJbWFnZXMgYXMgZmxleCBpdGVtcyBzaG91bGQgdXNlIHRoZSBvdmVycmlkaW5nTG9naWNhbEhl
aWdodCB3aGVuIGRlZmluZWQgdG8gY29tcHV0ZSB0aGUgbG9naWNhbCB3aWR0aApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCA3YTEwOWI4ZmYxZTAxMWY3Yjk4MWUzYjE0MTgzNmRkYmI0MjE1NDllLi4zOTAxZmY5NjQyNWE2
NGZmMWE0MGI2ZjkxMGU4MzgzNGM4MTQzMzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDIwLTExLTMwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAg
ICAgICBNb3ZlIGNvZGUgZnJvbSBBeGlzU2Nyb2xsU25hcE9mZnNldHMgdG8gU2Nyb2xsU25hcE9m
ZnNldHNJbmZvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTkzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHlJT1MubW06IFJlbW92ZSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBpbmNsdWRlLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVJT1MubW06IERpdHRvLgorCiAyMDIwLTExLTE5ICBXZW5zb24gSHNp
ZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNTkx
NTEpOiBUaGUgIkNvbnZlcnQgVGV4dCB0byBUcmFkaXRpb25hbCBDaGluZXNlIiBzZXJ2aWNlcyBt
ZW51IGFjdGlvbiBpcyBicm9rZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDAyM2UxNTNkYTNjNjdk
ZTE3YTI1MmJlZjFjYWIyNjg3ZDQzOTMwNmQuLjRlYWI5YWIzMTgzMDNhODJiY2ZiMjQyNzNjZWY5
MWI2YTVhNDc0MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtOTM2LDcgKzkzNiw2IEBAIHNldChX
ZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuaAogCiAgICAgcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5oCi0gICAgcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmgKICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaAogICAg
IHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmgKICAgICBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdDb29yZGluYXRvci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGFmY2Y0NWFhY2I0NzQ3
NDM2NDEzZjhhZTU5OWYzZGFlNGJlZGNkY2YuLjlmMzk4NzJmNGQxOTY4NjJlZmU3MWMwOTI4OTY4
OTYwODczYzhkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNzQzLDcgKzE3NDMsNyBAQCBwYWdlL2Nz
cC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0LmNwcAogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdERpcmVjdGl2ZS5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY3BwCi1wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwCitwYWdl
L3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJh
aW50cy5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhi
MjUxNGZkMmIyYjY1MzQwMjJiYjRkYWIyZDA2OGEwYmQwNTIwZmYuLjA4MmVjZmEzYjk2MjJkYTgx
YmZmZGY4OGJjM2U4YTg5MDU3NzU2YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUyMjQsNyArNTIyNCw2IEBACiAJCUY0NEE1
RjU5MUZFRDM4RjIwMDdGNTk0NCAvKiBMZWdhY3lOU1Bhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0QTVGNTcxRkVEMzgzMDAw
N0Y1OTQ0IC8qIExlZ2FjeU5TUGFzdGVib2FyZFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ0RUJCRDkxREI1RDIxNDAwMjc3MzM0IC8q
IFN0YXRpY1JhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNDRFQkJEODFEQjVEMjE0MDAyNzczMzQgLyogU3RhdGljUmFuZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDU3NzVDRTI0MTQzN0Q1
MDAyREYxQTAgLyogSW5saW5lUGF0aERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0NTc3NUNEMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRo
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NUMyMzFDMTk5NUI3
M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDY3MjkyODFFMERFNjg1MDBBQ0MzRDgg
LyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyogU2Nyb2xsU25hcE9m
ZnNldHNJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRjQ2QzQ0N0UyMzQ2NTQ1NDAwMzlBNzlEIC8qIENsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0NkM0NDdDMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291
cmNlLmggKi87IH07CiAJCUY0Nzg3NTU0MTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzNzUs
NiArOTM3NCw3IEBACiAJCTVCMzA2OTVBMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZm
ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdMRHJhd0J1
ZmZlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjMwNjk1QjE4QjNEMzQ1
MDA5OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJHTERyYXdCdWZmZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVCMzA2OTVDMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZmZXJzLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBXZWJHTERyYXdCdWZmZXJzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUI3QUI5RjYyNTY3REI3RTAwNjU5MkQwIC8qIFNjcm9sbFNuYXBPZmZzZXRz
SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxTbmFw
T2Zmc2V0c0luZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzAwMTUyMTI1
MDAxMTAwMDA5NEFBOTMgLyogVGV4dENvZGVjU2luZ2xlQnl0ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q29kZWNTaW5nbGVCeXRlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMwMDE1MjMyNTAwMTEwMTAwOTRBQTkzIC8qIFRleHRDb2Rl
Y1NpbmdsZUJ5dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvZGVj
U2luZ2xlQnl0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzM5MzA1RDFBQTBG
NkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gREZBQnl0ZWNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NDY4
LDggKzE2NDY4LDYgQEAKIAkJRjQ0RUJCRDgxREI1RDIxNDAwMjc3MzM0IC8qIFN0YXRpY1Jhbmdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY1JhbmdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NEVCQkRBMURCNUREOUQwMDI3NzMzNCAvKiBTdGF0
aWNSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0aWNS
YW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NTc3NUNEMjQxNDM3RDUw
MDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVQYXRoRGF0
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNDVDMjMxQjE5OTVCNzNCMDBBNkUy
RTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9m
ZnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NjI4QTlFMjM0RDNCQkYw
MEJDODg0QyAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtUGFzdGVib2FyZENvY29hLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNDYyRTc5RjI0MkFEQTNDMDAyMDREREQgLyogRHJhZ0Rh
dGFDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdE
YXRhQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NjJFN0EwMjQyQURB
M0QwMDIwNERERCAvKiBEcmFnSW1hZ2VDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERyYWdJbWFnZUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTg0MjIsOCArMTg0MjAsNiBAQAogCQkJCTFBRjYyRUUyMTREQTIyQTcwMDQxNTU2
QyAvKiBtYWMgKi8sCiAJCQkJMEZGRDRENUUxODY1MUZBMzAwNTEyRjZFIC8qIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwICovLAogCQkJCTBGRkQ0RDVGMTg2NTFGQTMwMDUxMkY2RSAvKiBB
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggKi8sCi0JCQkJRjQ1QzIzMUIxOTk1QjczQjAwQTZF
MkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAgKi8sCi0JCQkJRjQ1QzIzMUMxOTk1Qjcz
QjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oICovLAogCQkJCTBGNjA1QUVBMTVG
OTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5jcHAgKi8sCiAJCQkJMEY2MDVB
RUIxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8sCiAJCQkJMUFG
NjJFRTQxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLywKQEAg
LTE4NDczLDYgKzE4NDY5LDcgQEAKIAkJCQlBNkQ1QTk5QjE2MjlENzAwMDAyOTczMzAgLyogU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oICovLAogCQkJCTBGOTUxMEYyMjRGNDc2
OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwICovLAogCQkJCTBGOTUx
MEYwMjRGNDc2OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaCAqLywKKwkJ
CQk1QjdBQjlGNjI1NjdEQjdFMDA2NTkyRDAgLyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcCAq
LywKIAkJCQlGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyogU2Nyb2xsU25hcE9mZnNldHNJbmZv
LmggKi8sCiAJCQkJMEY2MzgzREIxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5n
VHJlZS5jcHAgKi8sCiAJCQkJMEY2MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Ny
b2xsaW5nVHJlZS5oICovLApAQCAtMzEwODQsNyArMzEwODEsNiBAQAogCQkJCTA3MDM2M0U2MTgx
QTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjlBRTIxMzUyMUFCQTQ4QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI5QUUyMTJEMjFBQjlFRUIwMDg2OTI4MyAvKiBBWElzb2xhdGVkVHJlZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJRjQ1QzIzMUUxOTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3Jv
bGxTbmFwT2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyMzgwRkJCOUMxRDAwNTEw
MjkzIC8qIEFYT2JqZWN0Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkxQzlGMkY5MUFFM0JF
QjAwMDk1QjYxQyAvKiBBWFRleHRTdGF0ZUNoYW5nZUludGVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3N0U3NzcwQkY0MTM0QTAwMTUyODcyIC8qIEJhY2tGb3J3YXJkQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGQ2N2I0NDAwMGE0ZTljYzky
MWNmZGQ5MGU5MDY0NTZiMzgzMmIxNWEuLjIxZmNmYjE2YjZkMTI2YWQ0Mzg3NjE4NmNjNTllZjcx
OTliMTY0YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTk2LDYgKzk2LDcgQEAK
ICNpbmNsdWRlICJTY3JpcHRSdW5uZXIuaCIKICNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9s
bFNuYXBPZmZzZXRzSW5mby5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCkBAIC0xMTcs
MTAgKzExOCw2IEBACiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKICNlbmRpZgogCi0j
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNl
dHMuaCIKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkxlZ2FjeVRpbGVDYWNoZS5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MjM5ODk4Yjk4MTMwYmQxMzJkY2VjZWRk
OGZkYzdiOGU0Y2NkMTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRz
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCi0K
LSNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCi0jaW5jbHVkZSAiTGVuZ3RoLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUg
IlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxh
YmxlQXJlYS5oIgotI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgotCi0jaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIGNsYXNzIEluc2V0T3JP
dXRzZXQgewotICAgIEluc2V0LAotICAgIE91dHNldAotfTsKLQotc3RhdGljIExheW91dFJlY3Qg
Y29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBj
b25zdCBMZW5ndGhCb3gmIGluc2V0T3JPdXRzZXRCb3gsIEluc2V0T3JPdXRzZXQgaW5zZXRPck91
dHNldCkKLXsKLSAgICBMYXlvdXRCb3hFeHRlbnQgZXh0ZW50cyh2YWx1ZUZvckxlbmd0aChpbnNl
dE9yT3V0c2V0Qm94LnRvcCgpLCByZWN0LmhlaWdodCgpKSwgdmFsdWVGb3JMZW5ndGgoaW5zZXRP
ck91dHNldEJveC5yaWdodCgpLCByZWN0LndpZHRoKCkpLCB2YWx1ZUZvckxlbmd0aChpbnNldE9y
T3V0c2V0Qm94LmJvdHRvbSgpLCByZWN0LmhlaWdodCgpKSwgdmFsdWVGb3JMZW5ndGgoaW5zZXRP
ck91dHNldEJveC5sZWZ0KCksIHJlY3Qud2lkdGgoKSkpOwotICAgIGF1dG8gc25hcFBvcnRPckFy
ZWEocmVjdCk7Ci0gICAgaWYgKGluc2V0T3JPdXRzZXQgPT0gSW5zZXRPck91dHNldDo6SW5zZXQp
Ci0gICAgICAgIHNuYXBQb3J0T3JBcmVhLmNvbnRyYWN0KGV4dGVudHMpOwotICAgIGVsc2UKLSAg
ICAgICAgc25hcFBvcnRPckFyZWEuZXhwYW5kKGV4dGVudHMpOwotICAgIHJldHVybiBzbmFwUG9y
dE9yQXJlYTsKLX0KLQotc3RhdGljIExheW91dFVuaXQgY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9m
ZnNldChMYXlvdXRVbml0IG1pbkxvY2F0aW9uLCBMYXlvdXRVbml0IG1heExvY2F0aW9uLCBTY3Jv
bGxTbmFwQXhpc0FsaWduVHlwZSBhbGlnbm1lbnQsIGJvb2wgYXhpc0lzRmxpcHBlZCkKLXsKLSAg
ICBzd2l0Y2ggKGFsaWdubWVudCkgewotICAgIGNhc2UgU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6
OlN0YXJ0OgotICAgICAgICByZXR1cm4gYXhpc0lzRmxpcHBlZCA/IG1heExvY2F0aW9uIDogbWlu
TG9jYXRpb247Ci0gICAgY2FzZSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Q2VudGVyOgotICAg
ICAgICByZXR1cm4gKG1pbkxvY2F0aW9uICsgbWF4TG9jYXRpb24pIC8gMjsKLSAgICBjYXNlIFNj
cm9sbFNuYXBBeGlzQWxpZ25UeXBlOjpFbmQ6Ci0gICAgICAgIHJldHVybiBheGlzSXNGbGlwcGVk
ID8gbWluTG9jYXRpb24gOiBtYXhMb2NhdGlvbjsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2Nyb2xsT2Zmc2V0UmFuZ2U8VD4mIHJhbmdlKQotewotICAgIHRzIDw8ICJzdGFydDogIiA8
PCByYW5nZS5zdGFydCA8PCAiIGVuZDogIiA8PCByYW5nZS5lbmQ7Ci0gICAgcmV0dXJuIHRzOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KLXN0YXRpYyB2b2lkIGluZGljZXNP
Zk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKExheW91dFR5cGUgb2Zmc2V0LCBjb25zdCBWZWN0b3I8
U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0UmFuZ2VzLCB1bnNpZ25l
ZCYgbG93ZXJJbmRleCwgdW5zaWduZWQmIHVwcGVySW5kZXgpCi17Ci0gICAgaWYgKHNuYXBPZmZz
ZXRSYW5nZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGxvd2VySW5kZXggPSBpbnZhbGlkU25hcE9m
ZnNldEluZGV4OwotICAgICAgICB1cHBlckluZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBsb3dlckluZGV4QXNJbnQgPSAtMTsK
LSAgICBpbnQgdXBwZXJJbmRleEFzSW50ID0gc25hcE9mZnNldFJhbmdlcy5zaXplKCk7Ci0gICAg
ZG8gewotICAgICAgICBpbnQgbWlkZGxlSW5kZXggPSAobG93ZXJJbmRleEFzSW50ICsgdXBwZXJJ
bmRleEFzSW50KSAvIDI7Ci0gICAgICAgIGF1dG8mIHJhbmdlID0gc25hcE9mZnNldFJhbmdlc1tt
aWRkbGVJbmRleF07Ci0gICAgICAgIGlmIChyYW5nZS5zdGFydCA8IG9mZnNldCAmJiBvZmZzZXQg
PCByYW5nZS5lbmQpIHsKLSAgICAgICAgICAgIGxvd2VySW5kZXhBc0ludCA9IG1pZGRsZUluZGV4
OwotICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0gbWlkZGxlSW5kZXg7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvZmZzZXQgPiByYW5nZS5lbmQpCi0g
ICAgICAgICAgICBsb3dlckluZGV4QXNJbnQgPSBtaWRkbGVJbmRleDsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0gbWlkZGxlSW5kZXg7Ci0gICAgfSB3aGlsZSAo
bG93ZXJJbmRleEFzSW50IDwgdXBwZXJJbmRleEFzSW50IC0gMSk7Ci0KLSAgICBpZiAob2Zmc2V0
IDw9IHNuYXBPZmZzZXRSYW5nZXMuZmlyc3QoKS5zdGFydCkKLSAgICAgICAgbG93ZXJJbmRleCA9
IGludmFsaWRTbmFwT2Zmc2V0SW5kZXg7Ci0gICAgZWxzZQotICAgICAgICBsb3dlckluZGV4ID0g
bG93ZXJJbmRleEFzSW50OwotCi0gICAgaWYgKG9mZnNldCA+PSBzbmFwT2Zmc2V0UmFuZ2VzLmxh
c3QoKS5lbmQpCi0gICAgICAgIHVwcGVySW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4Owot
ICAgIGVsc2UKLSAgICAgICAgdXBwZXJJbmRleCA9IHVwcGVySW5kZXhBc0ludDsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGU+Ci1zdGF0aWMgdm9pZCBpbmRpY2VzT2ZOZWFyZXN0
U25hcE9mZnNldHMoTGF5b3V0VHlwZSBvZmZzZXQsIGNvbnN0IFZlY3RvcjxMYXlvdXRUeXBlPiYg
c25hcE9mZnNldHMsIHVuc2lnbmVkJiBsb3dlckluZGV4LCB1bnNpZ25lZCYgdXBwZXJJbmRleCkK
LXsKLSAgICBsb3dlckluZGV4ID0gMDsKLSAgICB1cHBlckluZGV4ID0gc25hcE9mZnNldHMuc2l6
ZSgpIC0gMTsKLSAgICB3aGlsZSAobG93ZXJJbmRleCA8IHVwcGVySW5kZXggLSAxKSB7Ci0gICAg
ICAgIGludCBtaWRkbGVJbmRleCA9IChsb3dlckluZGV4ICsgdXBwZXJJbmRleCkgLyAyOwotICAg
ICAgICBhdXRvIG1pZGRsZU9mZnNldCA9IHNuYXBPZmZzZXRzW21pZGRsZUluZGV4XTsKLSAgICAg
ICAgaWYgKG9mZnNldCA9PSBtaWRkbGVPZmZzZXQpIHsKLSAgICAgICAgICAgIHVwcGVySW5kZXgg
PSBtaWRkbGVJbmRleDsKLSAgICAgICAgICAgIGxvd2VySW5kZXggPSBtaWRkbGVJbmRleDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9mZnNldCA+IG1pZGRs
ZU9mZnNldCkKLSAgICAgICAgICAgIGxvd2VySW5kZXggPSBtaWRkbGVJbmRleDsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRsZUluZGV4OwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQgY29tcHV0ZUF4aXNQcm94aW1pdHlTbmFwT2Zmc2V0UmFuZ2VzKGNvbnN0IFZl
Y3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxM
YXlvdXRVbml0Pj4mIG9mZnNldFJhbmdlcywgTGF5b3V0VW5pdCBzY3JvbGxQb3J0QXhpc0xlbmd0
aCkKLXsKLSAgICAvLyBUaGlzIGlzIGFuIGFyYml0cmFyeSBjaG9pY2UgZm9yIHdoYXQgaXQgbWVh
bnMgdG8gYmUgImluIHByb3hpbWl0eSIgb2YgYSBzbmFwIG9mZnNldC4gV2Ugc2hvdWxkIHBsYXkg
YXJvdW5kIHdpdGgKLSAgICAvLyB0aGlzIGFuZCBzZWUgd2hhdCBmZWVscyBiZXN0LgotICAgIHN0
YXRpYyBjb25zdCBmbG9hdCByYXRpb09mU2Nyb2xsUG9ydEF4aXNMZW5ndGhUb0JlQ29uc2lkZXJl
ZEZvclByb3hpbWl0eSA9IDAuMzsKLSAgICBpZiAoc25hcE9mZnNldHMuc2l6ZSgpIDwgMikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGV4dHJhIHJ1bGUgYWNjb3VudGluZyBmb3Igc2Ny
b2xsIG9mZnNldCByYW5nZXMgaW4gYmV0d2VlbiB0aGUgc2Nyb2xsIGRlc3RpbmF0aW9uIGFuZCBh
IHBvdGVudGlhbCBzbmFwIG9mZnNldAotICAgIC8vIGhhbmRsZXMgdGhlIGNvcm5lciBjYXNlIHdo
ZXJlIHRoZSB1c2VyIHNjcm9sbHMgd2l0aCBtb21lbnR1bSB2ZXJ5IGxpZ2h0bHkgYXdheSBmcm9t
IGEgc25hcCBvZmZzZXQsIHN1Y2ggdGhhdCB0aGUKLSAgICAvLyBwcmVkaWN0ZWQgc2Nyb2xsIGRl
c3RpbmF0aW9uIGlzIHN0aWxsIHdpdGhpbiBwcm94aW1pdHkgb2YgdGhlIHNuYXAgb2Zmc2V0LiBJ
biB0aGlzIGNhc2UsIHRoZSByZWd1bGFyIChtYW5kYXRvcnkKLSAgICAvLyBzY3JvbGwgc25hcHBp
bmcpIGJlaGF2aW9yIHdvdWxkIGJlIHRvIHNuYXAgdG8gdGhlIG5leHQgb2Zmc2V0IGluIHRoZSBk
aXJlY3Rpb24gb2YgbW9tZW50dW0gc2Nyb2xsaW5nLCBidXQKLSAgICAvLyBpbnN0ZWFkLCBpdCBp
cyBtb3JlIGludHVpdGl2ZSB0byBlaXRoZXIgcmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBzbmFwIHBv
c2l0aW9uICh3aGljaCB3ZSBhcmJpdHJhcmlseSBjaG9vc2UgaGVyZSkKLSAgICAvLyBvciBzY3Jv
bGwganVzdCBvdXRzaWRlIG9mIHRoZSBzbmFwIG9mZnNldCByYW5nZS4gVGhpcyBpcyBhbm90aGVy
IG1pbm9yIGJlaGF2aW9yIHR3ZWFrIHRoYXQgd2Ugc2hvdWxkIHBsYXkgYXJvdW5kCi0gICAgLy8g
d2l0aCB0byBzZWUgd2hhdCBmZWVscyBiZXN0LgotICAgIExheW91dFVuaXQgcHJveGltaXR5RGlz
dGFuY2UgeyByYXRpb09mU2Nyb2xsUG9ydEF4aXNMZW5ndGhUb0JlQ29uc2lkZXJlZEZvclByb3hp
bWl0eSAqIHNjcm9sbFBvcnRBeGlzTGVuZ3RoIH07Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAx
OyBpbmRleCA8IHNuYXBPZmZzZXRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvIHN0
YXJ0T2Zmc2V0ID0gc25hcE9mZnNldHNbaW5kZXggLSAxXSArIHByb3hpbWl0eURpc3RhbmNlOwot
ICAgICAgICBhdXRvIGVuZE9mZnNldCA9IHNuYXBPZmZzZXRzW2luZGV4XSAtIHByb3hpbWl0eURp
c3RhbmNlOwotICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPCBlbmRPZmZzZXQpCi0gICAgICAgICAg
ICBvZmZzZXRSYW5nZXMuYXBwZW5kKHsgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9KTsKLSAgICB9
Ci19Ci0KLXZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxl
QXJlYSYgc2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5nRWxlbWVudEJv
eCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5b3V0UmVjdCB2
aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzKQotewotICAgIGF1dG8gc2Nyb2xsU25h
cFR5cGUgPSBzY3JvbGxpbmdFbGVtZW50U3R5bGUuc2Nyb2xsU25hcFR5cGUoKTsKLSAgICBjb25z
dCBhdXRvJiBib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zID0gc2Nyb2xsaW5nRWxlbWVudEJv
eC52aWV3KCkuYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucygpOwotICAgIGlmIChzY3JvbGxT
bmFwVHlwZS5zdHJpY3RuZXNzID09IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpOb25lIHx8IGJveGVz
V2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNjcm9sbGFibGVB
cmVhLmNsZWFyU25hcE9mZnNldHMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZl
Y3RvcjxMYXlvdXRVbml0PiB2ZXJ0aWNhbFNuYXBPZmZzZXRzOwotICAgIFZlY3RvcjxMYXlvdXRV
bml0PiBob3Jpem9udGFsU25hcE9mZnNldHM7Ci0gICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdl
PExheW91dFVuaXQ+PiB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXM7Ci0gICAgVmVjdG9yPFNjcm9s
bE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiBob3Jpem9udGFsU25hcE9mZnNldFJhbmdlczsKLSAg
ICBIYXNoU2V0PGZsb2F0PiBzZWVuVmVydGljYWxTbmFwT2Zmc2V0czsKLSAgICBIYXNoU2V0PGZs
b2F0PiBzZWVuSG9yaXpvbnRhbFNuYXBPZmZzZXRzOwotICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNu
YXBPZmZzZXRzID0gc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6Qm90aCB8
fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlzOjpYQXhpcyB8fCBzY3JvbGxT
bmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlzOjpJbmxpbmU7Ci0gICAgYm9vbCBoYXNWZXJ0
aWNhbFNuYXBPZmZzZXRzID0gc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6
Qm90aCB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlzOjpZQXhpcyB8fCBz
Y3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlzOjpCbG9jazsKLQotICAgIGF1dG8g
bWF4U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbE9mZnNldCgpOwot
ICAgIGF1dG8gc2Nyb2xsUG9zaXRpb24gPSBMYXlvdXRQb2ludCB7IHNjcm9sbGFibGVBcmVhLnNj
cm9sbFBvc2l0aW9uKCkgfTsKLSAgICBib29sIHNjcm9sbGVySXNSVEwgPSAhc2Nyb2xsaW5nRWxl
bWVudEJveC5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLQotICAgIC8vIFRoZSBi
b3VuZHMgb2YgdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBzbmFwIHBvcnQsIHdoZXJlIHRoZSB0
b3AgbGVmdCBvZiB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5lcidzIGJvcmRlciBib3ggaXMgdGhlIG9y
aWdpbi4KLSAgICBhdXRvIHNjcm9sbFNuYXBQb3J0ID0gY29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JB
cmVhUmVjdCh2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzLCBzY3JvbGxpbmdFbGVt
ZW50U3R5bGUuc2Nyb2xsUGFkZGluZygpLCBJbnNldE9yT3V0c2V0OjpJbnNldCk7Ci0gICAgTE9H
X1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiQ29tcHV0aW5nIHNjcm9sbCBzbmFw
IG9mZnNldHMgZm9yICIgPDwgc2Nyb2xsYWJsZUFyZWEgPDwgIiBpbiBzbmFwIHBvcnQgIiA8PCBz
Y3JvbGxTbmFwUG9ydCk7Ci0gICAgZm9yIChhdXRvKiBjaGlsZCA6IGJveGVzV2l0aFNjcm9sbFNu
YXBQb3NpdGlvbnMpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5lbmNsb3NpbmdTY3JvbGxhYmxlQ29u
dGFpbmVyRm9yU25hcHBpbmcoKSAhPSAmc2Nyb2xsaW5nRWxlbWVudEJveCkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFRoZSBib3VuZHMgb2YgdGhlIGNoaWxkIGVsZW1lbnQn
cyBzbmFwIGFyZWEsIHdoZXJlIHRoZSB0b3AgbGVmdCBvZiB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5l
cidzIGJvcmRlciBib3ggaXMgdGhlIG9yaWdpbi4KLSAgICAgICAgLy8gVGhlIHNuYXAgYXJlYSBp
cyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBjaGlsZCBlbGVtZW50J3MgYm9yZGVyIGJveCwgYWZ0
ZXIgYXBwbHlpbmcgdHJhbnNmb3JtYXRpb25zLgotICAgICAgICAvLyBGSVhNRTogRm9yIG5vdywg
anVzdCBjb25zaWRlciB3aGV0aGVyIHRoZSBzY3JvbGxlciBpcyBSVEwuIFRoZSBiZWhhdmlvciBv
ZiBMVFIgYm94ZXMgaW5zaWRlIGEgUlRMIHNjcm9sbGVyIGlzIHBvb3JseSBkZWZpbmVkOiBodHRw
czovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvNTM2MS4KLSAgICAgICAgYXV0
byBzY3JvbGxTbmFwQXJlYSA9IExheW91dFJlY3QoY2hpbGQtPmxvY2FsVG9Db250YWluZXJRdWFk
KEZsb2F0UXVhZChjaGlsZC0+Ym9yZGVyQm91bmRpbmdCb3goKSksICZzY3JvbGxpbmdFbGVtZW50
Qm94KS5ib3VuZGluZ0JveCgpKTsKLQotICAgICAgICAvLyBsb2NhbFRvQ29udGFpbmVyUXVhZCB3
aWxsIHRyYW5zZm9ybSB0aGUgc2Nyb2xsIHNuYXAgYXJlYSBieSB0aGUgc2Nyb2xsIHBvc2l0aW9u
LCBleGNlcHQgaW4gdGhlIGNhc2UgdGhhdCB0aGlzIHBvc2l0aW9uIGlzCi0gICAgICAgIC8vIGNv
bWluZyBmcm9tIGEgU2Nyb2xsVmlldy4gV2Ugd2FudCB0aGUgdHJhbnNmb3JtZWQgYXJlYSwgYnV0
IHdpdGhvdXQgc2Nyb2xsIHBvc2l0aW9uIHRha2VuIGludG8gYWNjb3VudC4KLSAgICAgICAgaWYg
KCFzY3JvbGxhYmxlQXJlYS5pc1Njcm9sbFZpZXcoKSkKLSAgICAgICAgICAgIHNjcm9sbFNuYXBB
cmVhLm1vdmVCeShzY3JvbGxQb3NpdGlvbik7Ci0KLSAgICAgICAgc2Nyb2xsU25hcEFyZWEgPSBj
b21wdXRlU2Nyb2xsU25hcFBvcnRPckFyZWFSZWN0KHNjcm9sbFNuYXBBcmVhLCBjaGlsZC0+c3R5
bGUoKS5zY3JvbGxNYXJnaW4oKSwgSW5zZXRPck91dHNldDo6T3V0c2V0KTsKLSAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiICAgIENvbnNpZGVyaW5nIHNjcm9s
bCBzbmFwIHRhcmdldCBhcmVhICIgPDwgc2Nyb2xsU25hcEFyZWEpOwotICAgICAgICBhdXRvIGFs
aWdubWVudCA9IGNoaWxkLT5zdHlsZSgpLnNjcm9sbFNuYXBBbGlnbigpOwotICAgICAgICBpZiAo
aGFzSG9yaXpvbnRhbFNuYXBPZmZzZXRzICYmIGFsaWdubWVudC54ICE9IFNjcm9sbFNuYXBBeGlz
QWxpZ25UeXBlOjpOb25lKSB7Ci0gICAgICAgICAgICBhdXRvIGFic29sdXRlU2Nyb2xsWFBvc2l0
aW9uID0gY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwQXJlYS54KCksIHNj
cm9sbFNuYXBBcmVhLm1heFgoKSwgYWxpZ25tZW50LngsIHNjcm9sbGVySXNSVEwpIC0gY29tcHV0
ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwUG9ydC54KCksIHNjcm9sbFNuYXBQb3J0
Lm1heFgoKSwgYWxpZ25tZW50LngsIHNjcm9sbGVySXNSVEwpOwotICAgICAgICAgICAgYXV0byBh
YnNvbHV0ZVNjcm9sbE9mZnNldCA9IGNsYW1wVG88aW50PihzY3JvbGxhYmxlQXJlYS5zY3JvbGxP
ZmZzZXRGcm9tUG9zaXRpb24oeyByb3VuZFRvSW50KGFic29sdXRlU2Nyb2xsWFBvc2l0aW9uKSwg
MCB9KS54KCksIDAsIG1heFNjcm9sbE9mZnNldC54KCkpOwotICAgICAgICAgICAgaWYgKCFzZWVu
SG9yaXpvbnRhbFNuYXBPZmZzZXRzLmNvbnRhaW5zKGFic29sdXRlU2Nyb2xsT2Zmc2V0KSkgewot
ICAgICAgICAgICAgICAgIHNlZW5Ib3Jpem9udGFsU25hcE9mZnNldHMuYWRkKGFic29sdXRlU2Ny
b2xsT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBob3Jpem9udGFsU25hcE9mZnNldHMuYXBwZW5k
KGFic29sdXRlU2Nyb2xsT2Zmc2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBpZiAoaGFzVmVydGljYWxTbmFwT2Zmc2V0cyAmJiBhbGlnbm1lbnQueSAhPSBTY3JvbGxTbmFw
QXhpc0FsaWduVHlwZTo6Tm9uZSkgewotICAgICAgICAgICAgYXV0byBhYnNvbHV0ZVNjcm9sbFlQ
b3NpdGlvbiA9IGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xsU25hcEFyZWEueSgp
LCBzY3JvbGxTbmFwQXJlYS5tYXhZKCksIGFsaWdubWVudC55LCBmYWxzZSkgLSBjb21wdXRlU2Ny
b2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNuYXBQb3J0LnkoKSwgc2Nyb2xsU25hcFBvcnQubWF4
WSgpLCBhbGlnbm1lbnQueSwgZmFsc2UpOwotICAgICAgICAgICAgYXV0byBhYnNvbHV0ZVNjcm9s
bE9mZnNldCA9IGNsYW1wVG88aW50PihzY3JvbGxhYmxlQXJlYS5zY3JvbGxPZmZzZXRGcm9tUG9z
aXRpb24oeyAwLCByb3VuZFRvSW50KGFic29sdXRlU2Nyb2xsWVBvc2l0aW9uKSB9KS55KCksIDAs
IG1heFNjcm9sbE9mZnNldC55KCkpOwotICAgICAgICAgICAgaWYgKCFzZWVuVmVydGljYWxTbmFw
T2Zmc2V0cy5jb250YWlucyhhYnNvbHV0ZVNjcm9sbE9mZnNldCkpIHsKLSAgICAgICAgICAgICAg
ICBzZWVuVmVydGljYWxTbmFwT2Zmc2V0cy5hZGQoYWJzb2x1dGVTY3JvbGxPZmZzZXQpOwotICAg
ICAgICAgICAgICAgIHZlcnRpY2FsU25hcE9mZnNldHMuYXBwZW5kKGFic29sdXRlU2Nyb2xsT2Zm
c2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaG9yaXpv
bnRhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAgICBzdGQ6OnNvcnQoaG9yaXpvbnRh
bFNuYXBPZmZzZXRzLmJlZ2luKCksIGhvcml6b250YWxTbmFwT2Zmc2V0cy5lbmQoKSk7Ci0gICAg
ICAgIGlmIChzY3JvbGxTbmFwVHlwZS5zdHJpY3RuZXNzID09IFNjcm9sbFNuYXBTdHJpY3RuZXNz
OjpQcm94aW1pdHkpCi0gICAgICAgICAgICBjb21wdXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRS
YW5nZXMoaG9yaXpvbnRhbFNuYXBPZmZzZXRzLCBob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcywg
c2Nyb2xsU25hcFBvcnQud2lkdGgoKSk7Ci0KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9s
bFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVkIGhvcml6b250YWwgc2Nyb2xsIHNuYXAgb2Zm
c2V0czogIiA8PCBob3Jpem9udGFsU25hcE9mZnNldHMpOwotICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgaG9yaXpvbnRhbCBzY3JvbGwg
c25hcCBvZmZzZXQgcmFuZ2VzOiAiIDw8IGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKTsKLQot
ICAgICAgICBzY3JvbGxhYmxlQXJlYS5zZXRIb3Jpem9udGFsU25hcE9mZnNldHMoaG9yaXpvbnRh
bFNuYXBPZmZzZXRzKTsKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEuc2V0SG9yaXpvbnRhbFNuYXBP
ZmZzZXRSYW5nZXMoaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMpOwotICAgIH0gZWxzZQotICAg
ICAgICBzY3JvbGxhYmxlQXJlYS5jbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cygpOwotCi0gICAg
aWYgKCF2ZXJ0aWNhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAgICBzdGQ6OnNvcnQo
dmVydGljYWxTbmFwT2Zmc2V0cy5iZWdpbigpLCB2ZXJ0aWNhbFNuYXBPZmZzZXRzLmVuZCgpKTsK
LSAgICAgICAgaWYgKHNjcm9sbFNuYXBUeXBlLnN0cmljdG5lc3MgPT0gU2Nyb2xsU25hcFN0cmlj
dG5lc3M6OlByb3hpbWl0eSkKLSAgICAgICAgICAgIGNvbXB1dGVBeGlzUHJveGltaXR5U25hcE9m
ZnNldFJhbmdlcyh2ZXJ0aWNhbFNuYXBPZmZzZXRzLCB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMs
IHNjcm9sbFNuYXBQb3J0LmhlaWdodCgpKTsKLQotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Ny
b2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgdmVydGljYWwgc2Nyb2xsIHNuYXAgb2Zm
c2V0czogIiA8PCB2ZXJ0aWNhbFNuYXBPZmZzZXRzKTsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVkIHZlcnRpY2FsIHNjcm9sbCBzbmFw
IG9mZnNldCByYW5nZXM6ICIgPDwgdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKTsKLQotICAgICAg
ICBzY3JvbGxhYmxlQXJlYS5zZXRWZXJ0aWNhbFNuYXBPZmZzZXRzKHZlcnRpY2FsU25hcE9mZnNl
dHMpOwotICAgICAgICBzY3JvbGxhYmxlQXJlYS5zZXRWZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMo
dmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2Nyb2xsYWJs
ZUFyZWEuY2xlYXJWZXJ0aWNhbFNuYXBPZmZzZXRzKCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBMYXlvdXRUeXBlPgotTGF5b3V0VHlwZSBjbG9zZXN0U25hcE9mZnNldChjb25zdCBWZWN0b3I8
TGF5b3V0VHlwZT4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8
TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0UmFuZ2VzLCBMYXlvdXRUeXBlIHNjcm9sbERlc3RpbmF0
aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCkKLXsKLSAgICBB
U1NFUlQoc25hcE9mZnNldHMuc2l6ZSgpKTsKLSAgICBhY3RpdmVTbmFwSW5kZXggPSAwOwotCi0g
ICAgdW5zaWduZWQgbG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleDsKLSAgICB1bnNpZ25lZCB1cHBl
clNuYXBPZmZzZXRSYW5nZUluZGV4OwotICAgIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFu
Z2VzPExheW91dFR5cGU+KHNjcm9sbERlc3RpbmF0aW9uLCBzbmFwT2Zmc2V0UmFuZ2VzLCBsb3dl
clNuYXBPZmZzZXRSYW5nZUluZGV4LCB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4KTsKLSAgICBp
ZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCA9PSB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4
ICYmIHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXggIT0gaW52YWxpZFNuYXBPZmZzZXRJbmRleCkg
ewotICAgICAgICBhY3RpdmVTbmFwSW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OwotICAg
ICAgICByZXR1cm4gc2Nyb2xsRGVzdGluYXRpb247Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbERl
c3RpbmF0aW9uIDw9IHNuYXBPZmZzZXRzLmZpcnN0KCkpCi0gICAgICAgIHJldHVybiBzbmFwT2Zm
c2V0cy5maXJzdCgpOwotCi0gICAgYWN0aXZlU25hcEluZGV4ID0gc25hcE9mZnNldHMuc2l6ZSgp
IC0gMTsKLSAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPj0gc25hcE9mZnNldHMubGFzdCgpKQot
ICAgICAgICByZXR1cm4gc25hcE9mZnNldHMubGFzdCgpOwotCi0gICAgdW5zaWduZWQgbG93ZXJJ
bmRleDsKLSAgICB1bnNpZ25lZCB1cHBlckluZGV4OwotICAgIGluZGljZXNPZk5lYXJlc3RTbmFw
T2Zmc2V0czxMYXlvdXRUeXBlPihzY3JvbGxEZXN0aW5hdGlvbiwgc25hcE9mZnNldHMsIGxvd2Vy
SW5kZXgsIHVwcGVySW5kZXgpOwotICAgIExheW91dFR5cGUgbG93ZXJTbmFwUG9zaXRpb24gPSBz
bmFwT2Zmc2V0c1tsb3dlckluZGV4XTsKLSAgICBMYXlvdXRUeXBlIHVwcGVyU25hcFBvc2l0aW9u
ID0gc25hcE9mZnNldHNbdXBwZXJJbmRleF07Ci0gICAgaWYgKCFzdGQ6OmFicyh2ZWxvY2l0eSkp
IHsKLSAgICAgICAgYm9vbCBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPSBzY3JvbGxEZXN0
aW5hdGlvbiAtIGxvd2VyU25hcFBvc2l0aW9uIDw9IHVwcGVyU25hcFBvc2l0aW9uIC0gc2Nyb2xs
RGVzdGluYXRpb247Ci0gICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IGlzQ2xvc2VyVG9Mb3dlclNu
YXBQb3NpdGlvbiA/IGxvd2VySW5kZXggOiB1cHBlckluZGV4OwotICAgICAgICByZXR1cm4gaXND
bG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93ZXJTbmFwUG9zaXRpb24gOiB1cHBlclNuYXBQ
b3NpdGlvbjsKLSAgICB9Ci0KLSAgICAvLyBOb24temVybyB2ZWxvY2l0eSBpbmRpY2F0ZXMgYSBm
bGljayBnZXN0dXJlLiBFdmVuIGlmIGFub3RoZXIgc25hcCBwb2ludCBpcyBjbG9zZXIsIHdlIHNo
b3VsZCBjaG9vc2UgdGhlIG9uZSBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBmbGljayBnZXN0dXJl
Ci0gICAgLy8gYXMgbG9uZyBhcyBhIHNjcm9sbCBzbmFwIG9mZnNldCByYW5nZSBkb2VzIG5vdCBs
aWUgYmV0d2VlbiB0aGUgc2Nyb2xsIGRlc3RpbmF0aW9uIGFuZCB0aGUgdGFyZ2V0ZWQgc25hcCBv
ZmZzZXQuCi0gICAgaWYgKHZlbG9jaXR5IDwgMCkgewotICAgICAgICBpZiAobG93ZXJTbmFwT2Zm
c2V0UmFuZ2VJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4ICYmIGxvd2VyU25hcFBvc2l0
aW9uIDwgc25hcE9mZnNldFJhbmdlc1tsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4XS5lbmQpIHsK
LSAgICAgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IHVwcGVySW5kZXg7Ci0gICAgICAgICAgICBy
ZXR1cm4gdXBwZXJTbmFwUG9zaXRpb247Ci0gICAgICAgIH0KLSAgICAgICAgYWN0aXZlU25hcElu
ZGV4ID0gbG93ZXJJbmRleDsKLSAgICAgICAgcmV0dXJuIGxvd2VyU25hcFBvc2l0aW9uOwotICAg
IH0KLQotICAgIGlmICh1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4ICE9IGludmFsaWRTbmFwT2Zm
c2V0SW5kZXggJiYgc25hcE9mZnNldFJhbmdlc1t1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4XS5z
dGFydCA8IHVwcGVyU25hcFBvc2l0aW9uKSB7Ci0gICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IGxv
d2VySW5kZXg7Ci0gICAgICAgIHJldHVybiBsb3dlclNuYXBQb3NpdGlvbjsKLSAgICB9Ci0gICAg
YWN0aXZlU25hcEluZGV4ID0gdXBwZXJJbmRleDsKLSAgICByZXR1cm4gdXBwZXJTbmFwUG9zaXRp
b247Ci19Ci0KLUxheW91dFVuaXQgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91
dFVuaXQ+JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91
dFVuaXQ+PiYgc25hcE9mZnNldFJhbmdlcywgTGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlvbiwg
ZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgpCi17Ci0gICAgcmV0dXJu
IGNsb3Nlc3RTbmFwT2Zmc2V0PExheW91dFVuaXQ+KHNuYXBPZmZzZXRzLCBzbmFwT2Zmc2V0UmFu
Z2VzLCBzY3JvbGxEZXN0aW5hdGlvbiwgdmVsb2NpdHksIGFjdGl2ZVNuYXBJbmRleCk7Ci19Ci0K
LWZsb2F0IGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRz
LCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8ZmxvYXQ+PiYgc25hcE9mZnNldFJhbmdl
cywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0
aXZlU25hcEluZGV4KQotewotICAgIHJldHVybiBjbG9zZXN0U25hcE9mZnNldDxmbG9hdD4oc25h
cE9mZnNldHMsIHNuYXBPZmZzZXRSYW5nZXMsIHNjcm9sbERlc3RpbmF0aW9uLCB2ZWxvY2l0eSwg
YWN0aXZlU25hcEluZGV4KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gQ1NTX1NDUk9MTF9TTkFQCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiZGI2OGFlYmQ0MDI3YTEyZTE4ZWE1ZDc5NDA3OWY3YTliMDgyNjRjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQotCi0jaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFVu
aXQuaCIKLSNpbmNsdWRlICJTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCIKLSNpbmNsdWRlICJTY3Jv
bGxUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgSFRNTEVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJCb3g7Ci1jbGFzcyBSZW5kZXJT
dHlsZTsKLWNsYXNzIFNjcm9sbGFibGVBcmVhOwotCi0vLyBVcGRhdGUgdGhlIHNuYXAgb2Zmc2V0
cyBmb3IgdGhpcyBzY3JvbGxhYmxlIGFyZWEsIGdpdmVuIHRoZSBSZW5kZXJCb3ggb2YgdGhlIHNj
cm9sbCBjb250YWluZXIsIHRoZSBSZW5kZXJTdHlsZQotLy8gd2hpY2ggZGVmaW5lcyB0aGUgc2Ny
b2xsLXNuYXAgcHJvcGVydGllcywgYW5kIHRoZSB2aWV3cG9ydCByZWN0YW5nbGUgd2l0aCB0aGUg
b3JpZ2luIGF0IHRoZSB0b3AgbGVmdCBvZgotLy8gdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBi
b3JkZXIgYm94Lgotdm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKFNjcm9s
bGFibGVBcmVhJiwgY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdFbGVtZW50Qm94LCBjb25zdCBS
ZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLCBMYXlvdXRSZWN0IHZpZXdwb3J0UmVj
dEluQm9yZGVyQm94Q29vcmRpbmF0ZXMpOwotCi1jb25zdCB1bnNpZ25lZCBpbnZhbGlkU25hcE9m
ZnNldEluZGV4ID0gVUlOVF9NQVg7Ci1XRUJDT1JFX0VYUE9SVCBMYXlvdXRVbml0IGNsb3Nlc3RT
bmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIGNvbnN0IFZl
Y3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRSYW5nZXMsIExh
eW91dFVuaXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0
aXZlU25hcEluZGV4KTsKLVdFQkNPUkVfRVhQT1JUIGZsb2F0IGNsb3Nlc3RTbmFwT2Zmc2V0KGNv
bnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0
UmFuZ2U8ZmxvYXQ+PiYgc25hcE9mZnNldFJhbmdlcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24s
IGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0aXZlU25hcEluZGV4KTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKENTU19TQ1JPTExfU05BUCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5m
by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYwMzkzNzZjYzgxZDg0ODA2MThiYTE2Njg1N2U1ODFjOThhNTRi
ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uY3BwCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCIKKworI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCisKKyNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUg
IkxheW91dFJlY3QuaCIKKyNpbmNsdWRlICJMZW5ndGguaCIKKyNpbmNsdWRlICJSZW5kZXJCb3gu
aCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNp
bmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50
cy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgorc3Rh
dGljIHZvaWQgaW5kaWNlc09mTmVhcmVzdFNuYXBPZmZzZXRSYW5nZXMoTGF5b3V0VHlwZSBvZmZz
ZXQsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRUeXBlPj4mIHNuYXBPZmZz
ZXRSYW5nZXMsIHVuc2lnbmVkJiBsb3dlckluZGV4LCB1bnNpZ25lZCYgdXBwZXJJbmRleCkKK3sK
KyAgICBpZiAoc25hcE9mZnNldFJhbmdlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbG93ZXJJbmRl
eCA9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXg7CisgICAgICAgIHVwcGVySW5kZXggPSBpbnZhbGlk
U25hcE9mZnNldEluZGV4OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IGxvd2Vy
SW5kZXhBc0ludCA9IC0xOworICAgIGludCB1cHBlckluZGV4QXNJbnQgPSBzbmFwT2Zmc2V0UmFu
Z2VzLnNpemUoKTsKKyAgICBkbyB7CisgICAgICAgIGludCBtaWRkbGVJbmRleCA9IChsb3dlcklu
ZGV4QXNJbnQgKyB1cHBlckluZGV4QXNJbnQpIC8gMjsKKyAgICAgICAgYXV0byYgcmFuZ2UgPSBz
bmFwT2Zmc2V0UmFuZ2VzW21pZGRsZUluZGV4XTsKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0IDwg
b2Zmc2V0ICYmIG9mZnNldCA8IHJhbmdlLmVuZCkgeworICAgICAgICAgICAgbG93ZXJJbmRleEFz
SW50ID0gbWlkZGxlSW5kZXg7CisgICAgICAgICAgICB1cHBlckluZGV4QXNJbnQgPSBtaWRkbGVJ
bmRleDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9mZnNl
dCA+IHJhbmdlLmVuZCkKKyAgICAgICAgICAgIGxvd2VySW5kZXhBc0ludCA9IG1pZGRsZUluZGV4
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cHBlckluZGV4QXNJbnQgPSBtaWRkbGVJbmRl
eDsKKyAgICB9IHdoaWxlIChsb3dlckluZGV4QXNJbnQgPCB1cHBlckluZGV4QXNJbnQgLSAxKTsK
KworICAgIGlmIChvZmZzZXQgPD0gc25hcE9mZnNldFJhbmdlcy5maXJzdCgpLnN0YXJ0KQorICAg
ICAgICBsb3dlckluZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKKyAgICBlbHNlCisgICAg
ICAgIGxvd2VySW5kZXggPSBsb3dlckluZGV4QXNJbnQ7CisKKyAgICBpZiAob2Zmc2V0ID49IHNu
YXBPZmZzZXRSYW5nZXMubGFzdCgpLmVuZCkKKyAgICAgICAgdXBwZXJJbmRleCA9IGludmFsaWRT
bmFwT2Zmc2V0SW5kZXg7CisgICAgZWxzZQorICAgICAgICB1cHBlckluZGV4ID0gdXBwZXJJbmRl
eEFzSW50OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KK3N0YXRpYyB2b2lk
IGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0cyhMYXlvdXRUeXBlIG9mZnNldCwgY29uc3QgVmVj
dG9yPExheW91dFR5cGU+JiBzbmFwT2Zmc2V0cywgdW5zaWduZWQmIGxvd2VySW5kZXgsIHVuc2ln
bmVkJiB1cHBlckluZGV4KQoreworICAgIGxvd2VySW5kZXggPSAwOworICAgIHVwcGVySW5kZXgg
PSBzbmFwT2Zmc2V0cy5zaXplKCkgLSAxOworICAgIHdoaWxlIChsb3dlckluZGV4IDwgdXBwZXJJ
bmRleCAtIDEpIHsKKyAgICAgICAgaW50IG1pZGRsZUluZGV4ID0gKGxvd2VySW5kZXggKyB1cHBl
ckluZGV4KSAvIDI7CisgICAgICAgIGF1dG8gbWlkZGxlT2Zmc2V0ID0gc25hcE9mZnNldHNbbWlk
ZGxlSW5kZXhdOworICAgICAgICBpZiAob2Zmc2V0ID09IG1pZGRsZU9mZnNldCkgeworICAgICAg
ICAgICAgdXBwZXJJbmRleCA9IG1pZGRsZUluZGV4OworICAgICAgICAgICAgbG93ZXJJbmRleCA9
IG1pZGRsZUluZGV4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAob2Zmc2V0ID4gbWlkZGxlT2Zmc2V0KQorICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1pZGRs
ZUluZGV4OworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cHBlckluZGV4ID0gbWlkZGxlSW5k
ZXg7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KK0xheW91dFR5
cGUgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFR5cGU+JiBzbmFwT2Zmc2V0
cywgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFR5cGU+PiYgc25hcE9mZnNl
dFJhbmdlcywgTGF5b3V0VHlwZSBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVu
c2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgpCit7CisgICAgQVNTRVJUKHNuYXBPZmZzZXRzLnNpemUo
KSk7CisgICAgYWN0aXZlU25hcEluZGV4ID0gMDsKKworICAgIHVuc2lnbmVkIGxvd2VyU25hcE9m
ZnNldFJhbmdlSW5kZXg7CisgICAgdW5zaWduZWQgdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleDsK
KyAgICBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldFJhbmdlczxMYXlvdXRUeXBlPihzY3JvbGxE
ZXN0aW5hdGlvbiwgc25hcE9mZnNldFJhbmdlcywgbG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCwg
dXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCk7CisgICAgaWYgKGxvd2VyU25hcE9mZnNldFJhbmdl
SW5kZXggPT0gdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCAmJiB1cHBlclNuYXBPZmZzZXRSYW5n
ZUluZGV4ICE9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXgpIHsKKyAgICAgICAgYWN0aXZlU25hcElu
ZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKKyAgICAgICAgcmV0dXJuIHNjcm9sbERlc3Rp
bmF0aW9uOworICAgIH0KKworICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA8PSBzbmFwT2Zmc2V0
cy5maXJzdCgpKQorICAgICAgICByZXR1cm4gc25hcE9mZnNldHMuZmlyc3QoKTsKKworICAgIGFj
dGl2ZVNuYXBJbmRleCA9IHNuYXBPZmZzZXRzLnNpemUoKSAtIDE7CisgICAgaWYgKHNjcm9sbERl
c3RpbmF0aW9uID49IHNuYXBPZmZzZXRzLmxhc3QoKSkKKyAgICAgICAgcmV0dXJuIHNuYXBPZmZz
ZXRzLmxhc3QoKTsKKworICAgIHVuc2lnbmVkIGxvd2VySW5kZXg7CisgICAgdW5zaWduZWQgdXBw
ZXJJbmRleDsKKyAgICBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldHM8TGF5b3V0VHlwZT4oc2Ny
b2xsRGVzdGluYXRpb24sIHNuYXBPZmZzZXRzLCBsb3dlckluZGV4LCB1cHBlckluZGV4KTsKKyAg
ICBMYXlvdXRUeXBlIGxvd2VyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbbG93ZXJJbmRleF07
CisgICAgTGF5b3V0VHlwZSB1cHBlclNuYXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRzW3VwcGVySW5k
ZXhdOworICAgIGlmICghc3RkOjphYnModmVsb2NpdHkpKSB7CisgICAgICAgIGJvb2wgaXNDbG9z
ZXJUb0xvd2VyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb24gLSBsb3dlclNuYXBQb3Np
dGlvbiA8PSB1cHBlclNuYXBQb3NpdGlvbiAtIHNjcm9sbERlc3RpbmF0aW9uOworICAgICAgICBh
Y3RpdmVTbmFwSW5kZXggPSBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPyBsb3dlckluZGV4
IDogdXBwZXJJbmRleDsKKyAgICAgICAgcmV0dXJuIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlv
biA/IGxvd2VyU25hcFBvc2l0aW9uIDogdXBwZXJTbmFwUG9zaXRpb247CisgICAgfQorCisgICAg
Ly8gTm9uLXplcm8gdmVsb2NpdHkgaW5kaWNhdGVzIGEgZmxpY2sgZ2VzdHVyZS4gRXZlbiBpZiBh
bm90aGVyIHNuYXAgcG9pbnQgaXMgY2xvc2VyLCB3ZSBzaG91bGQgY2hvb3NlIHRoZSBvbmUgaW4g
dGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpY2sgZ2VzdHVyZQorICAgIC8vIGFzIGxvbmcgYXMgYSBz
Y3JvbGwgc25hcCBvZmZzZXQgcmFuZ2UgZG9lcyBub3QgbGllIGJldHdlZW4gdGhlIHNjcm9sbCBk
ZXN0aW5hdGlvbiBhbmQgdGhlIHRhcmdldGVkIHNuYXAgb2Zmc2V0LgorICAgIGlmICh2ZWxvY2l0
eSA8IDApIHsKKyAgICAgICAgaWYgKGxvd2VyU25hcE9mZnNldFJhbmdlSW5kZXggIT0gaW52YWxp
ZFNuYXBPZmZzZXRJbmRleCAmJiBsb3dlclNuYXBQb3NpdGlvbiA8IHNuYXBPZmZzZXRSYW5nZXNb
bG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleF0uZW5kKSB7CisgICAgICAgICAgICBhY3RpdmVTbmFw
SW5kZXggPSB1cHBlckluZGV4OworICAgICAgICAgICAgcmV0dXJuIHVwcGVyU25hcFBvc2l0aW9u
OworICAgICAgICB9CisgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IGxvd2VySW5kZXg7CisgICAg
ICAgIHJldHVybiBsb3dlclNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAodXBwZXJTbmFw
T2Zmc2V0UmFuZ2VJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4ICYmIHNuYXBPZmZzZXRS
YW5nZXNbdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleF0uc3RhcnQgPCB1cHBlclNuYXBQb3NpdGlv
bikgeworICAgICAgICBhY3RpdmVTbmFwSW5kZXggPSBsb3dlckluZGV4OworICAgICAgICByZXR1
cm4gbG93ZXJTbmFwUG9zaXRpb247CisgICAgfQorICAgIGFjdGl2ZVNuYXBJbmRleCA9IHVwcGVy
SW5kZXg7CisgICAgcmV0dXJuIHVwcGVyU25hcFBvc2l0aW9uOworfQorCitMYXlvdXRVbml0IGNs
b3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIGNv
bnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRSYW5n
ZXMsIExheW91dFVuaXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25l
ZCYgYWN0aXZlU25hcEluZGV4KQoreworICAgIHJldHVybiBjbG9zZXN0U25hcE9mZnNldDxMYXlv
dXRVbml0PihzbmFwT2Zmc2V0cywgc25hcE9mZnNldFJhbmdlcywgc2Nyb2xsRGVzdGluYXRpb24s
IHZlbG9jaXR5LCBhY3RpdmVTbmFwSW5kZXgpOworfQorCitmbG9hdCBjbG9zZXN0U25hcE9mZnNl
dChjb25zdCBWZWN0b3I8ZmxvYXQ+JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVjdG9yPFNjcm9sbE9m
ZnNldFJhbmdlPGZsb2F0Pj4mIHNuYXBPZmZzZXRSYW5nZXMsIGZsb2F0IHNjcm9sbERlc3RpbmF0
aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCkKK3sKKyAgICBy
ZXR1cm4gY2xvc2VzdFNuYXBPZmZzZXQ8ZmxvYXQ+KHNuYXBPZmZzZXRzLCBzbmFwT2Zmc2V0UmFu
Z2VzLCBzY3JvbGxEZXN0aW5hdGlvbiwgdmVsb2NpdHksIGFjdGl2ZVNuYXBJbmRleCk7Cit9CisK
K2VudW0gY2xhc3MgSW5zZXRPck91dHNldCB7CisgICAgSW5zZXQsCisgICAgT3V0c2V0Cit9Owor
CitzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlU2Nyb2xsU25hcFBvcnRPckFyZWFSZWN0KGNvbnN0
IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IExlbmd0aEJveCYgaW5zZXRPck91dHNldEJveCwgSW5z
ZXRPck91dHNldCBpbnNldE9yT3V0c2V0KQoreworICAgIExheW91dEJveEV4dGVudCBleHRlbnRz
KHZhbHVlRm9yTGVuZ3RoKGluc2V0T3JPdXRzZXRCb3gudG9wKCksIHJlY3QuaGVpZ2h0KCkpLCB2
YWx1ZUZvckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LnJpZ2h0KCksIHJlY3Qud2lkdGgoKSksIHZh
bHVlRm9yTGVuZ3RoKGluc2V0T3JPdXRzZXRCb3guYm90dG9tKCksIHJlY3QuaGVpZ2h0KCkpLCB2
YWx1ZUZvckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LmxlZnQoKSwgcmVjdC53aWR0aCgpKSk7Cisg
ICAgYXV0byBzbmFwUG9ydE9yQXJlYShyZWN0KTsKKyAgICBpZiAoaW5zZXRPck91dHNldCA9PSBJ
bnNldE9yT3V0c2V0OjpJbnNldCkKKyAgICAgICAgc25hcFBvcnRPckFyZWEuY29udHJhY3QoZXh0
ZW50cyk7CisgICAgZWxzZQorICAgICAgICBzbmFwUG9ydE9yQXJlYS5leHBhbmQoZXh0ZW50cyk7
CisgICAgcmV0dXJuIHNuYXBQb3J0T3JBcmVhOworfQorCitzdGF0aWMgTGF5b3V0VW5pdCBjb21w
dXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KExheW91dFVuaXQgbWluTG9jYXRpb24sIExheW91dFVu
aXQgbWF4TG9jYXRpb24sIFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlIGFsaWdubWVudCwgYm9vbCBh
eGlzSXNGbGlwcGVkKQoreworICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7CisgICAgY2FzZSBTY3Jv
bGxTbmFwQXhpc0FsaWduVHlwZTo6U3RhcnQ6CisgICAgICAgIHJldHVybiBheGlzSXNGbGlwcGVk
ID8gbWF4TG9jYXRpb24gOiBtaW5Mb2NhdGlvbjsKKyAgICBjYXNlIFNjcm9sbFNuYXBBeGlzQWxp
Z25UeXBlOjpDZW50ZXI6CisgICAgICAgIHJldHVybiAobWluTG9jYXRpb24gKyBtYXhMb2NhdGlv
bikgLyAyOworICAgIGNhc2UgU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6OkVuZDoKKyAgICAgICAg
cmV0dXJuIGF4aXNJc0ZsaXBwZWQgPyBtaW5Mb2NhdGlvbiA6IG1heExvY2F0aW9uOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxPZmZzZXRSYW5nZTxUPiYgcmFuZ2UpCit7Cisg
ICAgdHMgPDwgInN0YXJ0OiAiIDw8IHJhbmdlLnN0YXJ0IDw8ICIgZW5kOiAiIDw8IHJhbmdlLmVu
ZDsKKyAgICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVBeGlzUHJveGltaXR5
U25hcE9mZnNldFJhbmdlcyhjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBW
ZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBvZmZzZXRSYW5nZXMsIExheW91
dFVuaXQgc2Nyb2xsUG9ydEF4aXNMZW5ndGgpCit7CisgICAgLy8gVGhpcyBpcyBhbiBhcmJpdHJh
cnkgY2hvaWNlIGZvciB3aGF0IGl0IG1lYW5zIHRvIGJlICJpbiBwcm94aW1pdHkiIG9mIGEgc25h
cCBvZmZzZXQuIFdlIHNob3VsZCBwbGF5IGFyb3VuZCB3aXRoCisgICAgLy8gdGhpcyBhbmQgc2Vl
IHdoYXQgZmVlbHMgYmVzdC4KKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgcmF0aW9PZlNjcm9sbFBv
cnRBeGlzTGVuZ3RoVG9CZUNvbnNpZGVyZWRGb3JQcm94aW1pdHkgPSAwLjM7CisgICAgaWYgKHNu
YXBPZmZzZXRzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBleHRy
YSBydWxlIGFjY291bnRpbmcgZm9yIHNjcm9sbCBvZmZzZXQgcmFuZ2VzIGluIGJldHdlZW4gdGhl
IHNjcm9sbCBkZXN0aW5hdGlvbiBhbmQgYSBwb3RlbnRpYWwgc25hcCBvZmZzZXQKKyAgICAvLyBo
YW5kbGVzIHRoZSBjb3JuZXIgY2FzZSB3aGVyZSB0aGUgdXNlciBzY3JvbGxzIHdpdGggbW9tZW50
dW0gdmVyeSBsaWdodGx5IGF3YXkgZnJvbSBhIHNuYXAgb2Zmc2V0LCBzdWNoIHRoYXQgdGhlCisg
ICAgLy8gcHJlZGljdGVkIHNjcm9sbCBkZXN0aW5hdGlvbiBpcyBzdGlsbCB3aXRoaW4gcHJveGlt
aXR5IG9mIHRoZSBzbmFwIG9mZnNldC4gSW4gdGhpcyBjYXNlLCB0aGUgcmVndWxhciAobWFuZGF0
b3J5CisgICAgLy8gc2Nyb2xsIHNuYXBwaW5nKSBiZWhhdmlvciB3b3VsZCBiZSB0byBzbmFwIHRv
IHRoZSBuZXh0IG9mZnNldCBpbiB0aGUgZGlyZWN0aW9uIG9mIG1vbWVudHVtIHNjcm9sbGluZywg
YnV0CisgICAgLy8gaW5zdGVhZCwgaXQgaXMgbW9yZSBpbnR1aXRpdmUgdG8gZWl0aGVyIHJldHVy
biB0byB0aGUgb3JpZ2luYWwgc25hcCBwb3NpdGlvbiAod2hpY2ggd2UgYXJiaXRyYXJpbHkgY2hv
b3NlIGhlcmUpCisgICAgLy8gb3Igc2Nyb2xsIGp1c3Qgb3V0c2lkZSBvZiB0aGUgc25hcCBvZmZz
ZXQgcmFuZ2UuIFRoaXMgaXMgYW5vdGhlciBtaW5vciBiZWhhdmlvciB0d2VhayB0aGF0IHdlIHNo
b3VsZCBwbGF5IGFyb3VuZAorICAgIC8vIHdpdGggdG8gc2VlIHdoYXQgZmVlbHMgYmVzdC4KKyAg
ICBMYXlvdXRVbml0IHByb3hpbWl0eURpc3RhbmNlIHsgcmF0aW9PZlNjcm9sbFBvcnRBeGlzTGVu
Z3RoVG9CZUNvbnNpZGVyZWRGb3JQcm94aW1pdHkgKiBzY3JvbGxQb3J0QXhpc0xlbmd0aCB9Owor
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMTsgaW5kZXggPCBzbmFwT2Zmc2V0cy5zaXplKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgYXV0byBzdGFydE9mZnNldCA9IHNuYXBPZmZzZXRzW2luZGV4IC0g
MV0gKyBwcm94aW1pdHlEaXN0YW5jZTsKKyAgICAgICAgYXV0byBlbmRPZmZzZXQgPSBzbmFwT2Zm
c2V0c1tpbmRleF0gLSBwcm94aW1pdHlEaXN0YW5jZTsKKyAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0
IDwgZW5kT2Zmc2V0KQorICAgICAgICAgICAgb2Zmc2V0UmFuZ2VzLmFwcGVuZCh7IHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQgfSk7CisgICAgfQorfQorCit2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9y
U2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBjb25zdCBSZW5k
ZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiBzY3JvbGxpbmdF
bGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmlld3BvcnRSZWN0SW5Cb3JkZXJCb3hDb29yZGluYXRl
cykKK3sKKyAgICBhdXRvIHNjcm9sbFNuYXBUeXBlID0gc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNj
cm9sbFNuYXBUeXBlKCk7CisgICAgY29uc3QgYXV0byYgYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0
aW9ucyA9IHNjcm9sbGluZ0VsZW1lbnRCb3gudmlldygpLmJveGVzV2l0aFNjcm9sbFNuYXBQb3Np
dGlvbnMoKTsKKyAgICBpZiAoc2Nyb2xsU25hcFR5cGUuc3RyaWN0bmVzcyA9PSBTY3JvbGxTbmFw
U3RyaWN0bmVzczo6Tm9uZSB8fCBib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zLmlzRW1wdHko
KSkgeworICAgICAgICBzY3JvbGxhYmxlQXJlYS5jbGVhclNuYXBPZmZzZXRzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4gdmVydGljYWxTbmFwT2Zm
c2V0czsKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4gaG9yaXpvbnRhbFNuYXBPZmZzZXRzOworICAg
IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4gdmVydGljYWxTbmFwT2Zmc2V0
UmFuZ2VzOworICAgIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4gaG9yaXpv
bnRhbFNuYXBPZmZzZXRSYW5nZXM7CisgICAgSGFzaFNldDxmbG9hdD4gc2VlblZlcnRpY2FsU25h
cE9mZnNldHM7CisgICAgSGFzaFNldDxmbG9hdD4gc2Vlbkhvcml6b250YWxTbmFwT2Zmc2V0czsK
KyAgICBib29sIGhhc0hvcml6b250YWxTbmFwT2Zmc2V0cyA9IHNjcm9sbFNuYXBUeXBlLmF4aXMg
PT0gU2Nyb2xsU25hcEF4aXM6OkJvdGggfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxT
bmFwQXhpczo6WEF4aXMgfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6
SW5saW5lOworICAgIGJvb2wgaGFzVmVydGljYWxTbmFwT2Zmc2V0cyA9IHNjcm9sbFNuYXBUeXBl
LmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OkJvdGggfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBT
Y3JvbGxTbmFwQXhpczo6WUF4aXMgfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFw
QXhpczo6QmxvY2s7CisKKyAgICBhdXRvIG1heFNjcm9sbE9mZnNldCA9IHNjcm9sbGFibGVBcmVh
Lm1heGltdW1TY3JvbGxPZmZzZXQoKTsKKyAgICBhdXRvIHNjcm9sbFBvc2l0aW9uID0gTGF5b3V0
UG9pbnQgeyBzY3JvbGxhYmxlQXJlYS5zY3JvbGxQb3NpdGlvbigpIH07CisgICAgYm9vbCBzY3Jv
bGxlcklzUlRMID0gIXNjcm9sbGluZ0VsZW1lbnRCb3guc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCk7CisKKyAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBzY3JvbGxpbmcgY29udGFpbmVy
J3Mgc25hcCBwb3J0LCB3aGVyZSB0aGUgdG9wIGxlZnQgb2YgdGhlIHNjcm9sbGluZyBjb250YWlu
ZXIncyBib3JkZXIgYm94IGlzIHRoZSBvcmlnaW4uCisgICAgYXV0byBzY3JvbGxTbmFwUG9ydCA9
IGNvbXB1dGVTY3JvbGxTbmFwUG9ydE9yQXJlYVJlY3Qodmlld3BvcnRSZWN0SW5Cb3JkZXJCb3hD
b29yZGluYXRlcywgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNjcm9sbFBhZGRpbmcoKSwgSW5zZXRP
ck91dHNldDo6SW5zZXQpOworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0g
PDwgIkNvbXB1dGluZyBzY3JvbGwgc25hcCBvZmZzZXRzIGZvciAiIDw8IHNjcm9sbGFibGVBcmVh
IDw8ICIgaW4gc25hcCBwb3J0ICIgPDwgc2Nyb2xsU25hcFBvcnQpOworICAgIGZvciAoYXV0byog
Y2hpbGQgOiBib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zKSB7CisgICAgICAgIGlmIChjaGls
ZC0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lckZvclNuYXBwaW5nKCkgIT0gJnNjcm9sbGlu
Z0VsZW1lbnRCb3gpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBUaGUgYm91
bmRzIG9mIHRoZSBjaGlsZCBlbGVtZW50J3Mgc25hcCBhcmVhLCB3aGVyZSB0aGUgdG9wIGxlZnQg
b2YgdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBib3JkZXIgYm94IGlzIHRoZSBvcmlnaW4uCisg
ICAgICAgIC8vIFRoZSBzbmFwIGFyZWEgaXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgY2hpbGQg
ZWxlbWVudCdzIGJvcmRlciBib3gsIGFmdGVyIGFwcGx5aW5nIHRyYW5zZm9ybWF0aW9ucy4KKyAg
ICAgICAgLy8gRklYTUU6IEZvciBub3csIGp1c3QgY29uc2lkZXIgd2hldGhlciB0aGUgc2Nyb2xs
ZXIgaXMgUlRMLiBUaGUgYmVoYXZpb3Igb2YgTFRSIGJveGVzIGluc2lkZSBhIFJUTCBzY3JvbGxl
ciBpcyBwb29ybHkgZGVmaW5lZDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMv
aXNzdWVzLzUzNjEuCisgICAgICAgIGF1dG8gc2Nyb2xsU25hcEFyZWEgPSBMYXlvdXRSZWN0KGNo
aWxkLT5sb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFF1YWQoY2hpbGQtPmJvcmRlckJvdW5kaW5n
Qm94KCkpLCAmc2Nyb2xsaW5nRWxlbWVudEJveCkuYm91bmRpbmdCb3goKSk7CisKKyAgICAgICAg
Ly8gbG9jYWxUb0NvbnRhaW5lclF1YWQgd2lsbCB0cmFuc2Zvcm0gdGhlIHNjcm9sbCBzbmFwIGFy
ZWEgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbiwgZXhjZXB0IGluIHRoZSBjYXNlIHRoYXQgdGhpcyBw
b3NpdGlvbiBpcworICAgICAgICAvLyBjb21pbmcgZnJvbSBhIFNjcm9sbFZpZXcuIFdlIHdhbnQg
dGhlIHRyYW5zZm9ybWVkIGFyZWEsIGJ1dCB3aXRob3V0IHNjcm9sbCBwb3NpdGlvbiB0YWtlbiBp
bnRvIGFjY291bnQuCisgICAgICAgIGlmICghc2Nyb2xsYWJsZUFyZWEuaXNTY3JvbGxWaWV3KCkp
CisgICAgICAgICAgICBzY3JvbGxTbmFwQXJlYS5tb3ZlQnkoc2Nyb2xsUG9zaXRpb24pOworCisg
ICAgICAgIHNjcm9sbFNuYXBBcmVhID0gY29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdChz
Y3JvbGxTbmFwQXJlYSwgY2hpbGQtPnN0eWxlKCkuc2Nyb2xsTWFyZ2luKCksIEluc2V0T3JPdXRz
ZXQ6Ok91dHNldCk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0g
PDwgIiAgICBDb25zaWRlcmluZyBzY3JvbGwgc25hcCB0YXJnZXQgYXJlYSAiIDw8IHNjcm9sbFNu
YXBBcmVhKTsKKyAgICAgICAgYXV0byBhbGlnbm1lbnQgPSBjaGlsZC0+c3R5bGUoKS5zY3JvbGxT
bmFwQWxpZ24oKTsKKyAgICAgICAgaWYgKGhhc0hvcml6b250YWxTbmFwT2Zmc2V0cyAmJiBhbGln
bm1lbnQueCAhPSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Tm9uZSkgeworICAgICAgICAgICAg
YXV0byBhYnNvbHV0ZVNjcm9sbFhQb3NpdGlvbiA9IGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZz
ZXQoc2Nyb2xsU25hcEFyZWEueCgpLCBzY3JvbGxTbmFwQXJlYS5tYXhYKCksIGFsaWdubWVudC54
LCBzY3JvbGxlcklzUlRMKSAtIGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xsU25h
cFBvcnQueCgpLCBzY3JvbGxTbmFwUG9ydC5tYXhYKCksIGFsaWdubWVudC54LCBzY3JvbGxlcklz
UlRMKTsKKyAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxPZmZzZXQgPSBjbGFtcFRvPGlu
dD4oc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHsgcm91bmRUb0ludChh
YnNvbHV0ZVNjcm9sbFhQb3NpdGlvbiksIDAgfSkueCgpLCAwLCBtYXhTY3JvbGxPZmZzZXQueCgp
KTsKKyAgICAgICAgICAgIGlmICghc2Vlbkhvcml6b250YWxTbmFwT2Zmc2V0cy5jb250YWlucyhh
YnNvbHV0ZVNjcm9sbE9mZnNldCkpIHsKKyAgICAgICAgICAgICAgICBzZWVuSG9yaXpvbnRhbFNu
YXBPZmZzZXRzLmFkZChhYnNvbHV0ZVNjcm9sbE9mZnNldCk7CisgICAgICAgICAgICAgICAgaG9y
aXpvbnRhbFNuYXBPZmZzZXRzLmFwcGVuZChhYnNvbHV0ZVNjcm9sbE9mZnNldCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc1ZlcnRpY2FsU25hcE9mZnNldHMgJiYg
YWxpZ25tZW50LnkgIT0gU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6Ok5vbmUpIHsKKyAgICAgICAg
ICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxZUG9zaXRpb24gPSBjb21wdXRlU2Nyb2xsU25hcEFsaWdu
T2Zmc2V0KHNjcm9sbFNuYXBBcmVhLnkoKSwgc2Nyb2xsU25hcEFyZWEubWF4WSgpLCBhbGlnbm1l
bnQueSwgZmFsc2UpIC0gY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwUG9y
dC55KCksIHNjcm9sbFNuYXBQb3J0Lm1heFkoKSwgYWxpZ25tZW50LnksIGZhbHNlKTsKKyAgICAg
ICAgICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxPZmZzZXQgPSBjbGFtcFRvPGludD4oc2Nyb2xsYWJs
ZUFyZWEuc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHsgMCwgcm91bmRUb0ludChhYnNvbHV0ZVNj
cm9sbFlQb3NpdGlvbikgfSkueSgpLCAwLCBtYXhTY3JvbGxPZmZzZXQueSgpKTsKKyAgICAgICAg
ICAgIGlmICghc2VlblZlcnRpY2FsU25hcE9mZnNldHMuY29udGFpbnMoYWJzb2x1dGVTY3JvbGxP
ZmZzZXQpKSB7CisgICAgICAgICAgICAgICAgc2VlblZlcnRpY2FsU25hcE9mZnNldHMuYWRkKGFi
c29sdXRlU2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNuYXBPZmZzZXRz
LmFwcGVuZChhYnNvbHV0ZVNjcm9sbE9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoIWhvcml6b250YWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgc3RkOjpzb3J0KGhvcml6b250YWxTbmFwT2Zmc2V0cy5iZWdpbigpLCBob3Jpem9udGFs
U25hcE9mZnNldHMuZW5kKCkpOworICAgICAgICBpZiAoc2Nyb2xsU25hcFR5cGUuc3RyaWN0bmVz
cyA9PSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6UHJveGltaXR5KQorICAgICAgICAgICAgY29tcHV0
ZUF4aXNQcm94aW1pdHlTbmFwT2Zmc2V0UmFuZ2VzKGhvcml6b250YWxTbmFwT2Zmc2V0cywgaG9y
aXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMsIHNjcm9sbFNuYXBQb3J0LndpZHRoKCkpOworCisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21wdXRlZCBo
b3Jpem9udGFsIHNjcm9sbCBzbmFwIG9mZnNldHM6ICIgPDwgaG9yaXpvbnRhbFNuYXBPZmZzZXRz
KTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENv
bXB1dGVkIGhvcml6b250YWwgc2Nyb2xsIHNuYXAgb2Zmc2V0IHJhbmdlczogIiA8PCBob3Jpem9u
dGFsU25hcE9mZnNldFJhbmdlcyk7CisKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEuc2V0SG9yaXpv
bnRhbFNuYXBPZmZzZXRzKGhvcml6b250YWxTbmFwT2Zmc2V0cyk7CisgICAgICAgIHNjcm9sbGFi
bGVBcmVhLnNldEhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKGhvcml6b250YWxTbmFwT2Zmc2V0
UmFuZ2VzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEuY2xlYXJIb3Jpem9u
dGFsU25hcE9mZnNldHMoKTsKKworICAgIGlmICghdmVydGljYWxTbmFwT2Zmc2V0cy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgc3RkOjpzb3J0KHZlcnRpY2FsU25hcE9mZnNldHMuYmVnaW4oKSwgdmVy
dGljYWxTbmFwT2Zmc2V0cy5lbmQoKSk7CisgICAgICAgIGlmIChzY3JvbGxTbmFwVHlwZS5zdHJp
Y3RuZXNzID09IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpQcm94aW1pdHkpCisgICAgICAgICAgICBj
b21wdXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRSYW5nZXModmVydGljYWxTbmFwT2Zmc2V0cywg
dmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzLCBzY3JvbGxTbmFwUG9ydC5oZWlnaHQoKSk7CisKKyAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVk
IHZlcnRpY2FsIHNjcm9sbCBzbmFwIG9mZnNldHM6ICIgPDwgdmVydGljYWxTbmFwT2Zmc2V0cyk7
CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21w
dXRlZCB2ZXJ0aWNhbCBzY3JvbGwgc25hcCBvZmZzZXQgcmFuZ2VzOiAiIDw8IHZlcnRpY2FsU25h
cE9mZnNldFJhbmdlcyk7CisKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEuc2V0VmVydGljYWxTbmFw
T2Zmc2V0cyh2ZXJ0aWNhbFNuYXBPZmZzZXRzKTsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEuc2V0
VmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKHZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyk7CisgICAg
fSBlbHNlCisgICAgICAgIHNjcm9sbGFibGVBcmVhLmNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cygp
OworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaApp
bmRleCAzYWI2NDA2ODI2NGM1MDQwOGJhYjRlZTM4ZDJjY2Q0YTY0MWM3ODY3Li5mY2EzN2RlZjNh
MGM2YjY0YTczNjBiNjNiZGZkNTk0MzUxYmQwNjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaApAQCAtMjUsMTAgKzI1
LDE5IEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKwor
I2luY2x1ZGUgIkxheW91dFVuaXQuaCIKKyNpbmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2ludHMu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgTGF5b3V0UmVjdDsKK2NsYXNzIFNjcm9sbGFibGVBcmVhOworY2xhc3MgUmVuZGVyQm94Owor
Y2xhc3MgUmVuZGVyU3R5bGU7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IFNjcm9s
bE9mZnNldFJhbmdlIHsKICAgICBUIHN0YXJ0OwpAQCAtNDksNCArNTgsMTYgQEAgc3RydWN0IFNj
cm9sbFNuYXBPZmZzZXRzSW5mbyB7CiAgICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPFQ+PiB2
ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXM7CiB9OwogCitjb25zdCB1bnNpZ25lZCBpbnZhbGlkU25h
cE9mZnNldEluZGV4ID0gVUlOVF9NQVg7CisKKy8vIFVwZGF0ZSB0aGUgc25hcCBvZmZzZXRzIGZv
ciB0aGlzIHNjcm9sbGFibGUgYXJlYSwgZ2l2ZW4gdGhlIFJlbmRlckJveCBvZiB0aGUgc2Nyb2xs
IGNvbnRhaW5lciwgdGhlIFJlbmRlclN0eWxlCisvLyB3aGljaCBkZWZpbmVzIHRoZSBzY3JvbGwt
c25hcCBwcm9wZXJ0aWVzLCBhbmQgdGhlIHZpZXdwb3J0IHJlY3RhbmdsZSB3aXRoIHRoZSBvcmln
aW4gYXQgdGhlIHRvcCBsZWZ0IG9mCisvLyB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5lcidzIGJvcmRl
ciBib3guCit2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJs
ZUFyZWEmLCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRl
clN0eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmlld3BvcnRSZWN0SW5C
b3JkZXJCb3hDb29yZGluYXRlcyk7CisKK1dFQkNPUkVfRVhQT1JUIExheW91dFVuaXQgY2xvc2Vz
dFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgY29uc3Qg
VmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgc25hcE9mZnNldFJhbmdlcywg
TGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBh
Y3RpdmVTbmFwSW5kZXgpOworV0VCQ09SRV9FWFBPUlQgZmxvYXQgY2xvc2VzdFNuYXBPZmZzZXQo
Y29uc3QgVmVjdG9yPGZsb2F0PiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZz
ZXRSYW5nZTxmbG9hdD4+JiBzbmFwT2Zmc2V0UmFuZ2VzLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlv
biwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgpOworCiB9OyAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19TQ1JPTExfU05BUCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5oCmluZGV4IDdiNzRmOGE5MDUxZTM1OTljNGRiZjQyYmFmYzA4OWUxYmU0OGY0ZDEuLjFlMTMw
NWEyZjk5Y2JjYjhmMzk3NGNkYTRmMjdiYTI1ZjNlZmY4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaApAQCAtNDIsMTAg
KzQyLDYgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjZW5kaWYKIAotI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCi0jaW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCi0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBUZXh0U3RyZWFtOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxh
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNh
bGN1bGF0b3IuaAppbmRleCAyMWMzMTFjZDg5Yjc5NDA4NGE4NDkwZDVmYzliYTU1YTkzYjlhZWJk
Li43M2U5MmE2NGQyMzI1YzVlMWVhNTY4YzQ0ZDJkNmY4ZGRmYTZhNzUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNh
bGN1bGF0b3IuaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKIAotI2luY2x1ZGUgIkF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9T
Y3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaAppbmRleCAwYmNlNmI4YzQ3YWNmYjMxZWQ3NjViYjk4
NjA5MTBhY2RlMmFhZDMwLi5hZGY2ZTlhMjAzNWRlMDFiYmQ2YjNjNDI5MGY4NDdlYmMxODI4MjI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNu
YXBBbmltYXRvclN0YXRlLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCiAKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCIKICNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiTGF5b3V0
UG9pbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDMy
NmUyOGU2MGM0NzhiM2FhZDc2OWE2YzE0NWQzZTQ0YTEwMDU5ZDIuLmEzYTdkNTk1OWM2YTBlMzBk
NWMzZTlkNWI1ZDQ1NDY2MTQ3YjAxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcApAQCAtMTE3LDYgKzExNyw3IEBACiAjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24uaCIKICNpbmNsdWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCIKICNpbmNsdWRl
ICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbFNuYXBPZmZzZXRzSW5mby5oIgog
I2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKQEAgLTEzNSwxMCArMTM2LDYgQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25h
cE9mZnNldHMuaCIKLSNlbmRpZgotCiAjZGVmaW5lIE1JTl9JTlRFUlNFQ1RfRk9SX1JFVkVBTCAz
MgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJ
T1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KaW5kZXggNjJhZDk4NTA2OWUyMTIzYWRj
MzZiYzc4MWM3NmY1OTc2MWI3ODQ2My4uZDgxODlmZGM4OTI3NGYwOWM4ZWIyNjRhOGM1ZGE1ZjQ1
ODVkNWNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eUlPUy5tbQpAQCAtNDEsNyArNDEsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9T
Y3JvbGxpbmdTdGF0ZVRyZWUuaD4KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0jaW1w
b3J0IDxXZWJDb3JlL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9T
Y3JvbGxTbmFwT2Zmc2V0c0luZm8uaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsVHlwZXMuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlSU9TLm1tCmluZGV4IDRjMjg4ZTRiYWMxYjVlNDU5ZGVjNzRmYjNlM2I1YzhiNWJkY2Q4Zjcu
LmFiMzc0NzIwYTMyODQ3ZjdlNWNjNTdiYmM1Nzk3NGQxZTMwNDY1MGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1Mu
bW0KQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbXBvcnQgPHd0Zi9TZXRGb3JTY29wZS5oPgogCiAjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSNpbXBvcnQgPFdlYkNvcmUvQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oPgogI2Vu
ZGlmCiAK
</data>
<flag name="commit-queue"
          id="432077"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415013</attachid>
            <date>2020-11-30 03:30:37 -0800</date>
            <delta_ts>2020-12-03 01:51:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219345-20201130123035.patch</filename>
            <type>text/plain</type>
            <size>53514</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU4OTczNDk1NDJmNTQx
NTk1NGNkN2Q2MDgyNmQxYzg0YWVjYWZlMy4uZDUzZWI2ZTIzNmZiZDhhYzkwNTY1YWI3Mjg2NDBk
YjM2NDdkOGUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIwLTExLTMwICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBNb3ZlIGNvZGUg
ZnJvbSBBeGlzU2Nyb2xsU25hcE9mZnNldHMgdG8gU2Nyb2xsU25hcE9mZnNldHNJbmZvCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTkzNDUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMu
IFRoaXMgc2hvdWxkIG5vdCBtb2RpZnkgYmVoYXZpb3IuCisKKyAgICAgICAgKiBIZWFkZXJzLmNt
YWtlOiBSZW1vdmUgQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmggZnJvbSBoZWFkZXIgbGlzdC4KKyAg
ICAgICAgKiBTb3VyY2VzLnR4dDogVXBkYXRlIHNvdXJjZSBsaXN0LgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogcGFnZS9GcmFt
ZVZpZXcuY3BwOiBVcGRhdGUgaW5jbHVkZXMuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjppbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldFJhbmdlcyk6IEFkZGVkIGZyb20gQXhpc1Njcm9s
bFNuYXBPZmZzZXRzLgorICAgICAgICAoV2ViQ29yZTo6aW5kaWNlc09mTmVhcmVzdFNuYXBPZmZz
ZXRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjbG9zZXN0U25hcE9mZnNldCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUF4aXNQcm94aW1pdHlTbmFwT2Zmc2V0UmFuZ2VzKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjp1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKTogRGl0dG8u
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmg6IEFkZGVk
IGZ1bmN0aW9ucyBmcm9tIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIGFuZCBzdXJyb3VuZGVkCisg
ICAgICAgIHRoaXMgaGVhZGVyIGluIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNvIGl0IGNhbiBi
ZSBpbmNsdWRlZCB1bmNvbmRpdGlvbmFsbHkuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaDogVXBkYXRlZCBpbmNsdWRlcy4KKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3IuaDogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaDogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDogRGl0dG8uCisKIDIwMjAtMTEtMTYgIFNlcmdp
byBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1mbGV4
XSBJbWFnZXMgYXMgZmxleCBpdGVtcyBzaG91bGQgdXNlIHRoZSBvdmVycmlkaW5nTG9naWNhbEhl
aWdodCB3aGVuIGRlZmluZWQgdG8gY29tcHV0ZSB0aGUgbG9naWNhbCB3aWR0aApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCA3YTEwOWI4ZmYxZTAxMWY3Yjk4MWUzYjE0MTgzNmRkYmI0MjE1NDllLi4zOTAxZmY5NjQyNWE2
NGZmMWE0MGI2ZjkxMGU4MzgzNGM4MTQzMzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDIwLTExLTMwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAg
ICAgICBNb3ZlIGNvZGUgZnJvbSBBeGlzU2Nyb2xsU25hcE9mZnNldHMgdG8gU2Nyb2xsU25hcE9m
ZnNldHNJbmZvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTkzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHlJT1MubW06IFJlbW92ZSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBpbmNsdWRlLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVJT1MubW06IERpdHRvLgorCiAyMDIwLTExLTE5ICBXZW5zb24gSHNp
ZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNTkx
NTEpOiBUaGUgIkNvbnZlcnQgVGV4dCB0byBUcmFkaXRpb25hbCBDaGluZXNlIiBzZXJ2aWNlcyBt
ZW51IGFjdGlvbiBpcyBicm9rZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDAyM2UxNTNkYTNjNjdk
ZTE3YTI1MmJlZjFjYWIyNjg3ZDQzOTMwNmQuLjRlYWI5YWIzMTgzMDNhODJiY2ZiMjQyNzNjZWY5
MWI2YTVhNDc0MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtOTM2LDcgKzkzNiw2IEBAIHNldChX
ZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuaAogCiAgICAgcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5oCi0gICAgcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmgKICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaAogICAg
IHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmgKICAgICBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdDb29yZGluYXRvci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGFmY2Y0NWFhY2I0NzQ3
NDM2NDEzZjhhZTU5OWYzZGFlNGJlZGNkY2YuLjlmMzk4NzJmNGQxOTY4NjJlZmU3MWMwOTI4OTY4
OTYwODczYzhkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNzQzLDcgKzE3NDMsNyBAQCBwYWdlL2Nz
cC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0LmNwcAogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdERpcmVjdGl2ZS5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY3BwCi1wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwCitwYWdl
L3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJh
aW50cy5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhi
MjUxNGZkMmIyYjY1MzQwMjJiYjRkYWIyZDA2OGEwYmQwNTIwZmYuLjA4MmVjZmEzYjk2MjJkYTgx
YmZmZGY4OGJjM2U4YTg5MDU3NzU2YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUyMjQsNyArNTIyNCw2IEBACiAJCUY0NEE1
RjU5MUZFRDM4RjIwMDdGNTk0NCAvKiBMZWdhY3lOU1Bhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0QTVGNTcxRkVEMzgzMDAw
N0Y1OTQ0IC8qIExlZ2FjeU5TUGFzdGVib2FyZFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ0RUJCRDkxREI1RDIxNDAwMjc3MzM0IC8q
IFN0YXRpY1JhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNDRFQkJEODFEQjVEMjE0MDAyNzczMzQgLyogU3RhdGljUmFuZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDU3NzVDRTI0MTQzN0Q1
MDAyREYxQTAgLyogSW5saW5lUGF0aERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0NTc3NUNEMjQxNDM3RDUwMDJERjFBMCAvKiBJbmxpbmVQYXRo
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NUMyMzFDMTk5NUI3
M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDY3MjkyODFFMERFNjg1MDBBQ0MzRDgg
LyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyogU2Nyb2xsU25hcE9m
ZnNldHNJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRjQ2QzQ0N0UyMzQ2NTQ1NDAwMzlBNzlEIC8qIENsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0NkM0NDdDMjM0NjU0NTQwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291
cmNlLmggKi87IH07CiAJCUY0Nzg3NTU0MTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzNzUs
NiArOTM3NCw3IEBACiAJCTVCMzA2OTVBMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZm
ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdMRHJhd0J1
ZmZlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjMwNjk1QjE4QjNEMzQ1
MDA5OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJHTERyYXdCdWZmZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVCMzA2OTVDMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZmZXJzLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBXZWJHTERyYXdCdWZmZXJzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUI3QUI5RjYyNTY3REI3RTAwNjU5MkQwIC8qIFNjcm9sbFNuYXBPZmZzZXRz
SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxTbmFw
T2Zmc2V0c0luZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzAwMTUyMTI1
MDAxMTAwMDA5NEFBOTMgLyogVGV4dENvZGVjU2luZ2xlQnl0ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q29kZWNTaW5nbGVCeXRlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMwMDE1MjMyNTAwMTEwMTAwOTRBQTkzIC8qIFRleHRDb2Rl
Y1NpbmdsZUJ5dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvZGVj
U2luZ2xlQnl0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzM5MzA1RDFBQTBG
NkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gREZBQnl0ZWNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NDY4
LDggKzE2NDY4LDYgQEAKIAkJRjQ0RUJCRDgxREI1RDIxNDAwMjc3MzM0IC8qIFN0YXRpY1Jhbmdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY1JhbmdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NEVCQkRBMURCNUREOUQwMDI3NzMzNCAvKiBTdGF0
aWNSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0aWNS
YW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NTc3NUNEMjQxNDM3RDUw
MDJERjFBMCAvKiBJbmxpbmVQYXRoRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVQYXRoRGF0
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNDVDMjMxQjE5OTVCNzNCMDBBNkUy
RTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9m
ZnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NjI4QTlFMjM0RDNCQkYw
MEJDODg0QyAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtUGFzdGVib2FyZENvY29hLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNDYyRTc5RjI0MkFEQTNDMDAyMDREREQgLyogRHJhZ0Rh
dGFDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdE
YXRhQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NjJFN0EwMjQyQURB
M0QwMDIwNERERCAvKiBEcmFnSW1hZ2VDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERyYWdJbWFnZUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTg0MjIsOCArMTg0MjAsNiBAQAogCQkJCTFBRjYyRUUyMTREQTIyQTcwMDQxNTU2
QyAvKiBtYWMgKi8sCiAJCQkJMEZGRDRENUUxODY1MUZBMzAwNTEyRjZFIC8qIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwICovLAogCQkJCTBGRkQ0RDVGMTg2NTFGQTMwMDUxMkY2RSAvKiBB
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggKi8sCi0JCQkJRjQ1QzIzMUIxOTk1QjczQjAwQTZF
MkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAgKi8sCi0JCQkJRjQ1QzIzMUMxOTk1Qjcz
QjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oICovLAogCQkJCTBGNjA1QUVBMTVG
OTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5jcHAgKi8sCiAJCQkJMEY2MDVB
RUIxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8sCiAJCQkJMUFG
NjJFRTQxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLywKQEAg
LTE4NDczLDYgKzE4NDY5LDcgQEAKIAkJCQlBNkQ1QTk5QjE2MjlENzAwMDAyOTczMzAgLyogU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oICovLAogCQkJCTBGOTUxMEYyMjRGNDc2
OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwICovLAogCQkJCTBGOTUx
MEYwMjRGNDc2OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaCAqLywKKwkJ
CQk1QjdBQjlGNjI1NjdEQjdFMDA2NTkyRDAgLyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcCAq
LywKIAkJCQlGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyogU2Nyb2xsU25hcE9mZnNldHNJbmZv
LmggKi8sCiAJCQkJMEY2MzgzREIxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5n
VHJlZS5jcHAgKi8sCiAJCQkJMEY2MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Ny
b2xsaW5nVHJlZS5oICovLApAQCAtMzEwODQsNyArMzEwODEsNiBAQAogCQkJCTA3MDM2M0U2MTgx
QTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjlBRTIxMzUyMUFCQTQ4QTAwODY5MjgzIC8qIEFYSXNvbGF0ZWRPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI5QUUyMTJEMjFBQjlFRUIwMDg2OTI4MyAvKiBBWElzb2xhdGVkVHJlZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJRjQ1QzIzMUUxOTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3Jv
bGxTbmFwT2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyMzgwRkJCOUMxRDAwNTEw
MjkzIC8qIEFYT2JqZWN0Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkxQzlGMkY5MUFFM0JF
QjAwMDk1QjYxQyAvKiBBWFRleHRTdGF0ZUNoYW5nZUludGVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3N0U3NzcwQkY0MTM0QTAwMTUyODcyIC8qIEJhY2tGb3J3YXJkQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGQ2N2I0NDAwMGE0ZTljYzky
MWNmZGQ5MGU5MDY0NTZiMzgzMmIxNWEuLjIxZmNmYjE2YjZkMTI2YWQ0Mzg3NjE4NmNjNTllZjcx
OTliMTY0YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTk2LDYgKzk2LDcgQEAK
ICNpbmNsdWRlICJTY3JpcHRSdW5uZXIuaCIKICNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9s
bFNuYXBPZmZzZXRzSW5mby5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCkBAIC0xMTcs
MTAgKzExOCw2IEBACiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKICNlbmRpZgogCi0j
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNl
dHMuaCIKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkxlZ2FjeVRpbGVDYWNoZS5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MjM5ODk4Yjk4MTMwYmQxMzJkY2VjZWRk
OGZkYzdiOGU0Y2NkMTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRz
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCi0K
LSNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCi0jaW5jbHVkZSAiTGVuZ3RoLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUg
IlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxh
YmxlQXJlYS5oIgotI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgotCi0jaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIGNsYXNzIEluc2V0T3JP
dXRzZXQgewotICAgIEluc2V0LAotICAgIE91dHNldAotfTsKLQotc3RhdGljIExheW91dFJlY3Qg
Y29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBj
b25zdCBMZW5ndGhCb3gmIGluc2V0T3JPdXRzZXRCb3gsIEluc2V0T3JPdXRzZXQgaW5zZXRPck91
dHNldCkKLXsKLSAgICBMYXlvdXRCb3hFeHRlbnQgZXh0ZW50cyh2YWx1ZUZvckxlbmd0aChpbnNl
dE9yT3V0c2V0Qm94LnRvcCgpLCByZWN0LmhlaWdodCgpKSwgdmFsdWVGb3JMZW5ndGgoaW5zZXRP
ck91dHNldEJveC5yaWdodCgpLCByZWN0LndpZHRoKCkpLCB2YWx1ZUZvckxlbmd0aChpbnNldE9y
T3V0c2V0Qm94LmJvdHRvbSgpLCByZWN0LmhlaWdodCgpKSwgdmFsdWVGb3JMZW5ndGgoaW5zZXRP
ck91dHNldEJveC5sZWZ0KCksIHJlY3Qud2lkdGgoKSkpOwotICAgIGF1dG8gc25hcFBvcnRPckFy
ZWEocmVjdCk7Ci0gICAgaWYgKGluc2V0T3JPdXRzZXQgPT0gSW5zZXRPck91dHNldDo6SW5zZXQp
Ci0gICAgICAgIHNuYXBQb3J0T3JBcmVhLmNvbnRyYWN0KGV4dGVudHMpOwotICAgIGVsc2UKLSAg
ICAgICAgc25hcFBvcnRPckFyZWEuZXhwYW5kKGV4dGVudHMpOwotICAgIHJldHVybiBzbmFwUG9y
dE9yQXJlYTsKLX0KLQotc3RhdGljIExheW91dFVuaXQgY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9m
ZnNldChMYXlvdXRVbml0IG1pbkxvY2F0aW9uLCBMYXlvdXRVbml0IG1heExvY2F0aW9uLCBTY3Jv
bGxTbmFwQXhpc0FsaWduVHlwZSBhbGlnbm1lbnQsIGJvb2wgYXhpc0lzRmxpcHBlZCkKLXsKLSAg
ICBzd2l0Y2ggKGFsaWdubWVudCkgewotICAgIGNhc2UgU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6
OlN0YXJ0OgotICAgICAgICByZXR1cm4gYXhpc0lzRmxpcHBlZCA/IG1heExvY2F0aW9uIDogbWlu
TG9jYXRpb247Ci0gICAgY2FzZSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Q2VudGVyOgotICAg
ICAgICByZXR1cm4gKG1pbkxvY2F0aW9uICsgbWF4TG9jYXRpb24pIC8gMjsKLSAgICBjYXNlIFNj
cm9sbFNuYXBBeGlzQWxpZ25UeXBlOjpFbmQ6Ci0gICAgICAgIHJldHVybiBheGlzSXNGbGlwcGVk
ID8gbWluTG9jYXRpb24gOiBtYXhMb2NhdGlvbjsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2Nyb2xsT2Zmc2V0UmFuZ2U8VD4mIHJhbmdlKQotewotICAgIHRzIDw8ICJzdGFydDogIiA8
PCByYW5nZS5zdGFydCA8PCAiIGVuZDogIiA8PCByYW5nZS5lbmQ7Ci0gICAgcmV0dXJuIHRzOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KLXN0YXRpYyB2b2lkIGluZGljZXNP
Zk5lYXJlc3RTbmFwT2Zmc2V0UmFuZ2VzKExheW91dFR5cGUgb2Zmc2V0LCBjb25zdCBWZWN0b3I8
U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0UmFuZ2VzLCB1bnNpZ25l
ZCYgbG93ZXJJbmRleCwgdW5zaWduZWQmIHVwcGVySW5kZXgpCi17Ci0gICAgaWYgKHNuYXBPZmZz
ZXRSYW5nZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGxvd2VySW5kZXggPSBpbnZhbGlkU25hcE9m
ZnNldEluZGV4OwotICAgICAgICB1cHBlckluZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBsb3dlckluZGV4QXNJbnQgPSAtMTsK
LSAgICBpbnQgdXBwZXJJbmRleEFzSW50ID0gc25hcE9mZnNldFJhbmdlcy5zaXplKCk7Ci0gICAg
ZG8gewotICAgICAgICBpbnQgbWlkZGxlSW5kZXggPSAobG93ZXJJbmRleEFzSW50ICsgdXBwZXJJ
bmRleEFzSW50KSAvIDI7Ci0gICAgICAgIGF1dG8mIHJhbmdlID0gc25hcE9mZnNldFJhbmdlc1tt
aWRkbGVJbmRleF07Ci0gICAgICAgIGlmIChyYW5nZS5zdGFydCA8IG9mZnNldCAmJiBvZmZzZXQg
PCByYW5nZS5lbmQpIHsKLSAgICAgICAgICAgIGxvd2VySW5kZXhBc0ludCA9IG1pZGRsZUluZGV4
OwotICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0gbWlkZGxlSW5kZXg7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvZmZzZXQgPiByYW5nZS5lbmQpCi0g
ICAgICAgICAgICBsb3dlckluZGV4QXNJbnQgPSBtaWRkbGVJbmRleDsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdXBwZXJJbmRleEFzSW50ID0gbWlkZGxlSW5kZXg7Ci0gICAgfSB3aGlsZSAo
bG93ZXJJbmRleEFzSW50IDwgdXBwZXJJbmRleEFzSW50IC0gMSk7Ci0KLSAgICBpZiAob2Zmc2V0
IDw9IHNuYXBPZmZzZXRSYW5nZXMuZmlyc3QoKS5zdGFydCkKLSAgICAgICAgbG93ZXJJbmRleCA9
IGludmFsaWRTbmFwT2Zmc2V0SW5kZXg7Ci0gICAgZWxzZQotICAgICAgICBsb3dlckluZGV4ID0g
bG93ZXJJbmRleEFzSW50OwotCi0gICAgaWYgKG9mZnNldCA+PSBzbmFwT2Zmc2V0UmFuZ2VzLmxh
c3QoKS5lbmQpCi0gICAgICAgIHVwcGVySW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4Owot
ICAgIGVsc2UKLSAgICAgICAgdXBwZXJJbmRleCA9IHVwcGVySW5kZXhBc0ludDsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGU+Ci1zdGF0aWMgdm9pZCBpbmRpY2VzT2ZOZWFyZXN0
U25hcE9mZnNldHMoTGF5b3V0VHlwZSBvZmZzZXQsIGNvbnN0IFZlY3RvcjxMYXlvdXRUeXBlPiYg
c25hcE9mZnNldHMsIHVuc2lnbmVkJiBsb3dlckluZGV4LCB1bnNpZ25lZCYgdXBwZXJJbmRleCkK
LXsKLSAgICBsb3dlckluZGV4ID0gMDsKLSAgICB1cHBlckluZGV4ID0gc25hcE9mZnNldHMuc2l6
ZSgpIC0gMTsKLSAgICB3aGlsZSAobG93ZXJJbmRleCA8IHVwcGVySW5kZXggLSAxKSB7Ci0gICAg
ICAgIGludCBtaWRkbGVJbmRleCA9IChsb3dlckluZGV4ICsgdXBwZXJJbmRleCkgLyAyOwotICAg
ICAgICBhdXRvIG1pZGRsZU9mZnNldCA9IHNuYXBPZmZzZXRzW21pZGRsZUluZGV4XTsKLSAgICAg
ICAgaWYgKG9mZnNldCA9PSBtaWRkbGVPZmZzZXQpIHsKLSAgICAgICAgICAgIHVwcGVySW5kZXgg
PSBtaWRkbGVJbmRleDsKLSAgICAgICAgICAgIGxvd2VySW5kZXggPSBtaWRkbGVJbmRleDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9mZnNldCA+IG1pZGRs
ZU9mZnNldCkKLSAgICAgICAgICAgIGxvd2VySW5kZXggPSBtaWRkbGVJbmRleDsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRsZUluZGV4OwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQgY29tcHV0ZUF4aXNQcm94aW1pdHlTbmFwT2Zmc2V0UmFuZ2VzKGNvbnN0IFZl
Y3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxM
YXlvdXRVbml0Pj4mIG9mZnNldFJhbmdlcywgTGF5b3V0VW5pdCBzY3JvbGxQb3J0QXhpc0xlbmd0
aCkKLXsKLSAgICAvLyBUaGlzIGlzIGFuIGFyYml0cmFyeSBjaG9pY2UgZm9yIHdoYXQgaXQgbWVh
bnMgdG8gYmUgImluIHByb3hpbWl0eSIgb2YgYSBzbmFwIG9mZnNldC4gV2Ugc2hvdWxkIHBsYXkg
YXJvdW5kIHdpdGgKLSAgICAvLyB0aGlzIGFuZCBzZWUgd2hhdCBmZWVscyBiZXN0LgotICAgIHN0
YXRpYyBjb25zdCBmbG9hdCByYXRpb09mU2Nyb2xsUG9ydEF4aXNMZW5ndGhUb0JlQ29uc2lkZXJl
ZEZvclByb3hpbWl0eSA9IDAuMzsKLSAgICBpZiAoc25hcE9mZnNldHMuc2l6ZSgpIDwgMikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGV4dHJhIHJ1bGUgYWNjb3VudGluZyBmb3Igc2Ny
b2xsIG9mZnNldCByYW5nZXMgaW4gYmV0d2VlbiB0aGUgc2Nyb2xsIGRlc3RpbmF0aW9uIGFuZCBh
IHBvdGVudGlhbCBzbmFwIG9mZnNldAotICAgIC8vIGhhbmRsZXMgdGhlIGNvcm5lciBjYXNlIHdo
ZXJlIHRoZSB1c2VyIHNjcm9sbHMgd2l0aCBtb21lbnR1bSB2ZXJ5IGxpZ2h0bHkgYXdheSBmcm9t
IGEgc25hcCBvZmZzZXQsIHN1Y2ggdGhhdCB0aGUKLSAgICAvLyBwcmVkaWN0ZWQgc2Nyb2xsIGRl
c3RpbmF0aW9uIGlzIHN0aWxsIHdpdGhpbiBwcm94aW1pdHkgb2YgdGhlIHNuYXAgb2Zmc2V0LiBJ
biB0aGlzIGNhc2UsIHRoZSByZWd1bGFyIChtYW5kYXRvcnkKLSAgICAvLyBzY3JvbGwgc25hcHBp
bmcpIGJlaGF2aW9yIHdvdWxkIGJlIHRvIHNuYXAgdG8gdGhlIG5leHQgb2Zmc2V0IGluIHRoZSBk
aXJlY3Rpb24gb2YgbW9tZW50dW0gc2Nyb2xsaW5nLCBidXQKLSAgICAvLyBpbnN0ZWFkLCBpdCBp
cyBtb3JlIGludHVpdGl2ZSB0byBlaXRoZXIgcmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBzbmFwIHBv
c2l0aW9uICh3aGljaCB3ZSBhcmJpdHJhcmlseSBjaG9vc2UgaGVyZSkKLSAgICAvLyBvciBzY3Jv
bGwganVzdCBvdXRzaWRlIG9mIHRoZSBzbmFwIG9mZnNldCByYW5nZS4gVGhpcyBpcyBhbm90aGVy
IG1pbm9yIGJlaGF2aW9yIHR3ZWFrIHRoYXQgd2Ugc2hvdWxkIHBsYXkgYXJvdW5kCi0gICAgLy8g
d2l0aCB0byBzZWUgd2hhdCBmZWVscyBiZXN0LgotICAgIExheW91dFVuaXQgcHJveGltaXR5RGlz
dGFuY2UgeyByYXRpb09mU2Nyb2xsUG9ydEF4aXNMZW5ndGhUb0JlQ29uc2lkZXJlZEZvclByb3hp
bWl0eSAqIHNjcm9sbFBvcnRBeGlzTGVuZ3RoIH07Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAx
OyBpbmRleCA8IHNuYXBPZmZzZXRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvIHN0
YXJ0T2Zmc2V0ID0gc25hcE9mZnNldHNbaW5kZXggLSAxXSArIHByb3hpbWl0eURpc3RhbmNlOwot
ICAgICAgICBhdXRvIGVuZE9mZnNldCA9IHNuYXBPZmZzZXRzW2luZGV4XSAtIHByb3hpbWl0eURp
c3RhbmNlOwotICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPCBlbmRPZmZzZXQpCi0gICAgICAgICAg
ICBvZmZzZXRSYW5nZXMuYXBwZW5kKHsgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9KTsKLSAgICB9
Ci19Ci0KLXZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxl
QXJlYSYgc2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5nRWxlbWVudEJv
eCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5b3V0UmVjdCB2
aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzKQotewotICAgIGF1dG8gc2Nyb2xsU25h
cFR5cGUgPSBzY3JvbGxpbmdFbGVtZW50U3R5bGUuc2Nyb2xsU25hcFR5cGUoKTsKLSAgICBjb25z
dCBhdXRvJiBib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zID0gc2Nyb2xsaW5nRWxlbWVudEJv
eC52aWV3KCkuYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucygpOwotICAgIGlmIChzY3JvbGxT
bmFwVHlwZS5zdHJpY3RuZXNzID09IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpOb25lIHx8IGJveGVz
V2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNjcm9sbGFibGVB
cmVhLmNsZWFyU25hcE9mZnNldHMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZl
Y3RvcjxMYXlvdXRVbml0PiB2ZXJ0aWNhbFNuYXBPZmZzZXRzOwotICAgIFZlY3RvcjxMYXlvdXRV
bml0PiBob3Jpem9udGFsU25hcE9mZnNldHM7Ci0gICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdl
PExheW91dFVuaXQ+PiB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXM7Ci0gICAgVmVjdG9yPFNjcm9s
bE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiBob3Jpem9udGFsU25hcE9mZnNldFJhbmdlczsKLSAg
ICBIYXNoU2V0PGZsb2F0PiBzZWVuVmVydGljYWxTbmFwT2Zmc2V0czsKLSAgICBIYXNoU2V0PGZs
b2F0PiBzZWVuSG9yaXpvbnRhbFNuYXBPZmZzZXRzOwotICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNu
YXBPZmZzZXRzID0gc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6Qm90aCB8
fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlzOjpYQXhpcyB8fCBzY3JvbGxT
bmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlzOjpJbmxpbmU7Ci0gICAgYm9vbCBoYXNWZXJ0
aWNhbFNuYXBPZmZzZXRzID0gc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6
Qm90aCB8fCBzY3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlzOjpZQXhpcyB8fCBz
Y3JvbGxTbmFwVHlwZS5heGlzID09IFNjcm9sbFNuYXBBeGlzOjpCbG9jazsKLQotICAgIGF1dG8g
bWF4U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbE9mZnNldCgpOwot
ICAgIGF1dG8gc2Nyb2xsUG9zaXRpb24gPSBMYXlvdXRQb2ludCB7IHNjcm9sbGFibGVBcmVhLnNj
cm9sbFBvc2l0aW9uKCkgfTsKLSAgICBib29sIHNjcm9sbGVySXNSVEwgPSAhc2Nyb2xsaW5nRWxl
bWVudEJveC5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLQotICAgIC8vIFRoZSBi
b3VuZHMgb2YgdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBzbmFwIHBvcnQsIHdoZXJlIHRoZSB0
b3AgbGVmdCBvZiB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5lcidzIGJvcmRlciBib3ggaXMgdGhlIG9y
aWdpbi4KLSAgICBhdXRvIHNjcm9sbFNuYXBQb3J0ID0gY29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JB
cmVhUmVjdCh2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzLCBzY3JvbGxpbmdFbGVt
ZW50U3R5bGUuc2Nyb2xsUGFkZGluZygpLCBJbnNldE9yT3V0c2V0OjpJbnNldCk7Ci0gICAgTE9H
X1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiQ29tcHV0aW5nIHNjcm9sbCBzbmFw
IG9mZnNldHMgZm9yICIgPDwgc2Nyb2xsYWJsZUFyZWEgPDwgIiBpbiBzbmFwIHBvcnQgIiA8PCBz
Y3JvbGxTbmFwUG9ydCk7Ci0gICAgZm9yIChhdXRvKiBjaGlsZCA6IGJveGVzV2l0aFNjcm9sbFNu
YXBQb3NpdGlvbnMpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5lbmNsb3NpbmdTY3JvbGxhYmxlQ29u
dGFpbmVyRm9yU25hcHBpbmcoKSAhPSAmc2Nyb2xsaW5nRWxlbWVudEJveCkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFRoZSBib3VuZHMgb2YgdGhlIGNoaWxkIGVsZW1lbnQn
cyBzbmFwIGFyZWEsIHdoZXJlIHRoZSB0b3AgbGVmdCBvZiB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5l
cidzIGJvcmRlciBib3ggaXMgdGhlIG9yaWdpbi4KLSAgICAgICAgLy8gVGhlIHNuYXAgYXJlYSBp
cyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBjaGlsZCBlbGVtZW50J3MgYm9yZGVyIGJveCwgYWZ0
ZXIgYXBwbHlpbmcgdHJhbnNmb3JtYXRpb25zLgotICAgICAgICAvLyBGSVhNRTogRm9yIG5vdywg
anVzdCBjb25zaWRlciB3aGV0aGVyIHRoZSBzY3JvbGxlciBpcyBSVEwuIFRoZSBiZWhhdmlvciBv
ZiBMVFIgYm94ZXMgaW5zaWRlIGEgUlRMIHNjcm9sbGVyIGlzIHBvb3JseSBkZWZpbmVkOiBodHRw
czovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvNTM2MS4KLSAgICAgICAgYXV0
byBzY3JvbGxTbmFwQXJlYSA9IExheW91dFJlY3QoY2hpbGQtPmxvY2FsVG9Db250YWluZXJRdWFk
KEZsb2F0UXVhZChjaGlsZC0+Ym9yZGVyQm91bmRpbmdCb3goKSksICZzY3JvbGxpbmdFbGVtZW50
Qm94KS5ib3VuZGluZ0JveCgpKTsKLQotICAgICAgICAvLyBsb2NhbFRvQ29udGFpbmVyUXVhZCB3
aWxsIHRyYW5zZm9ybSB0aGUgc2Nyb2xsIHNuYXAgYXJlYSBieSB0aGUgc2Nyb2xsIHBvc2l0aW9u
LCBleGNlcHQgaW4gdGhlIGNhc2UgdGhhdCB0aGlzIHBvc2l0aW9uIGlzCi0gICAgICAgIC8vIGNv
bWluZyBmcm9tIGEgU2Nyb2xsVmlldy4gV2Ugd2FudCB0aGUgdHJhbnNmb3JtZWQgYXJlYSwgYnV0
IHdpdGhvdXQgc2Nyb2xsIHBvc2l0aW9uIHRha2VuIGludG8gYWNjb3VudC4KLSAgICAgICAgaWYg
KCFzY3JvbGxhYmxlQXJlYS5pc1Njcm9sbFZpZXcoKSkKLSAgICAgICAgICAgIHNjcm9sbFNuYXBB
cmVhLm1vdmVCeShzY3JvbGxQb3NpdGlvbik7Ci0KLSAgICAgICAgc2Nyb2xsU25hcEFyZWEgPSBj
b21wdXRlU2Nyb2xsU25hcFBvcnRPckFyZWFSZWN0KHNjcm9sbFNuYXBBcmVhLCBjaGlsZC0+c3R5
bGUoKS5zY3JvbGxNYXJnaW4oKSwgSW5zZXRPck91dHNldDo6T3V0c2V0KTsKLSAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiICAgIENvbnNpZGVyaW5nIHNjcm9s
bCBzbmFwIHRhcmdldCBhcmVhICIgPDwgc2Nyb2xsU25hcEFyZWEpOwotICAgICAgICBhdXRvIGFs
aWdubWVudCA9IGNoaWxkLT5zdHlsZSgpLnNjcm9sbFNuYXBBbGlnbigpOwotICAgICAgICBpZiAo
aGFzSG9yaXpvbnRhbFNuYXBPZmZzZXRzICYmIGFsaWdubWVudC54ICE9IFNjcm9sbFNuYXBBeGlz
QWxpZ25UeXBlOjpOb25lKSB7Ci0gICAgICAgICAgICBhdXRvIGFic29sdXRlU2Nyb2xsWFBvc2l0
aW9uID0gY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwQXJlYS54KCksIHNj
cm9sbFNuYXBBcmVhLm1heFgoKSwgYWxpZ25tZW50LngsIHNjcm9sbGVySXNSVEwpIC0gY29tcHV0
ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwUG9ydC54KCksIHNjcm9sbFNuYXBQb3J0
Lm1heFgoKSwgYWxpZ25tZW50LngsIHNjcm9sbGVySXNSVEwpOwotICAgICAgICAgICAgYXV0byBh
YnNvbHV0ZVNjcm9sbE9mZnNldCA9IGNsYW1wVG88aW50PihzY3JvbGxhYmxlQXJlYS5zY3JvbGxP
ZmZzZXRGcm9tUG9zaXRpb24oeyByb3VuZFRvSW50KGFic29sdXRlU2Nyb2xsWFBvc2l0aW9uKSwg
MCB9KS54KCksIDAsIG1heFNjcm9sbE9mZnNldC54KCkpOwotICAgICAgICAgICAgaWYgKCFzZWVu
SG9yaXpvbnRhbFNuYXBPZmZzZXRzLmNvbnRhaW5zKGFic29sdXRlU2Nyb2xsT2Zmc2V0KSkgewot
ICAgICAgICAgICAgICAgIHNlZW5Ib3Jpem9udGFsU25hcE9mZnNldHMuYWRkKGFic29sdXRlU2Ny
b2xsT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBob3Jpem9udGFsU25hcE9mZnNldHMuYXBwZW5k
KGFic29sdXRlU2Nyb2xsT2Zmc2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBpZiAoaGFzVmVydGljYWxTbmFwT2Zmc2V0cyAmJiBhbGlnbm1lbnQueSAhPSBTY3JvbGxTbmFw
QXhpc0FsaWduVHlwZTo6Tm9uZSkgewotICAgICAgICAgICAgYXV0byBhYnNvbHV0ZVNjcm9sbFlQ
b3NpdGlvbiA9IGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xsU25hcEFyZWEueSgp
LCBzY3JvbGxTbmFwQXJlYS5tYXhZKCksIGFsaWdubWVudC55LCBmYWxzZSkgLSBjb21wdXRlU2Ny
b2xsU25hcEFsaWduT2Zmc2V0KHNjcm9sbFNuYXBQb3J0LnkoKSwgc2Nyb2xsU25hcFBvcnQubWF4
WSgpLCBhbGlnbm1lbnQueSwgZmFsc2UpOwotICAgICAgICAgICAgYXV0byBhYnNvbHV0ZVNjcm9s
bE9mZnNldCA9IGNsYW1wVG88aW50PihzY3JvbGxhYmxlQXJlYS5zY3JvbGxPZmZzZXRGcm9tUG9z
aXRpb24oeyAwLCByb3VuZFRvSW50KGFic29sdXRlU2Nyb2xsWVBvc2l0aW9uKSB9KS55KCksIDAs
IG1heFNjcm9sbE9mZnNldC55KCkpOwotICAgICAgICAgICAgaWYgKCFzZWVuVmVydGljYWxTbmFw
T2Zmc2V0cy5jb250YWlucyhhYnNvbHV0ZVNjcm9sbE9mZnNldCkpIHsKLSAgICAgICAgICAgICAg
ICBzZWVuVmVydGljYWxTbmFwT2Zmc2V0cy5hZGQoYWJzb2x1dGVTY3JvbGxPZmZzZXQpOwotICAg
ICAgICAgICAgICAgIHZlcnRpY2FsU25hcE9mZnNldHMuYXBwZW5kKGFic29sdXRlU2Nyb2xsT2Zm
c2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaG9yaXpv
bnRhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAgICBzdGQ6OnNvcnQoaG9yaXpvbnRh
bFNuYXBPZmZzZXRzLmJlZ2luKCksIGhvcml6b250YWxTbmFwT2Zmc2V0cy5lbmQoKSk7Ci0gICAg
ICAgIGlmIChzY3JvbGxTbmFwVHlwZS5zdHJpY3RuZXNzID09IFNjcm9sbFNuYXBTdHJpY3RuZXNz
OjpQcm94aW1pdHkpCi0gICAgICAgICAgICBjb21wdXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRS
YW5nZXMoaG9yaXpvbnRhbFNuYXBPZmZzZXRzLCBob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcywg
c2Nyb2xsU25hcFBvcnQud2lkdGgoKSk7Ci0KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9s
bFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVkIGhvcml6b250YWwgc2Nyb2xsIHNuYXAgb2Zm
c2V0czogIiA8PCBob3Jpem9udGFsU25hcE9mZnNldHMpOwotICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgaG9yaXpvbnRhbCBzY3JvbGwg
c25hcCBvZmZzZXQgcmFuZ2VzOiAiIDw8IGhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKTsKLQot
ICAgICAgICBzY3JvbGxhYmxlQXJlYS5zZXRIb3Jpem9udGFsU25hcE9mZnNldHMoaG9yaXpvbnRh
bFNuYXBPZmZzZXRzKTsKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEuc2V0SG9yaXpvbnRhbFNuYXBP
ZmZzZXRSYW5nZXMoaG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMpOwotICAgIH0gZWxzZQotICAg
ICAgICBzY3JvbGxhYmxlQXJlYS5jbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cygpOwotCi0gICAg
aWYgKCF2ZXJ0aWNhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAgICBzdGQ6OnNvcnQo
dmVydGljYWxTbmFwT2Zmc2V0cy5iZWdpbigpLCB2ZXJ0aWNhbFNuYXBPZmZzZXRzLmVuZCgpKTsK
LSAgICAgICAgaWYgKHNjcm9sbFNuYXBUeXBlLnN0cmljdG5lc3MgPT0gU2Nyb2xsU25hcFN0cmlj
dG5lc3M6OlByb3hpbWl0eSkKLSAgICAgICAgICAgIGNvbXB1dGVBeGlzUHJveGltaXR5U25hcE9m
ZnNldFJhbmdlcyh2ZXJ0aWNhbFNuYXBPZmZzZXRzLCB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMs
IHNjcm9sbFNuYXBQb3J0LmhlaWdodCgpKTsKLQotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Ny
b2xsU25hcCwgc3RyZWFtIDw8ICIgPT4gQ29tcHV0ZWQgdmVydGljYWwgc2Nyb2xsIHNuYXAgb2Zm
c2V0czogIiA8PCB2ZXJ0aWNhbFNuYXBPZmZzZXRzKTsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVkIHZlcnRpY2FsIHNjcm9sbCBzbmFw
IG9mZnNldCByYW5nZXM6ICIgPDwgdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKTsKLQotICAgICAg
ICBzY3JvbGxhYmxlQXJlYS5zZXRWZXJ0aWNhbFNuYXBPZmZzZXRzKHZlcnRpY2FsU25hcE9mZnNl
dHMpOwotICAgICAgICBzY3JvbGxhYmxlQXJlYS5zZXRWZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMo
dmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2Nyb2xsYWJs
ZUFyZWEuY2xlYXJWZXJ0aWNhbFNuYXBPZmZzZXRzKCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBMYXlvdXRUeXBlPgotTGF5b3V0VHlwZSBjbG9zZXN0U25hcE9mZnNldChjb25zdCBWZWN0b3I8
TGF5b3V0VHlwZT4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8
TGF5b3V0VHlwZT4+JiBzbmFwT2Zmc2V0UmFuZ2VzLCBMYXlvdXRUeXBlIHNjcm9sbERlc3RpbmF0
aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCkKLXsKLSAgICBB
U1NFUlQoc25hcE9mZnNldHMuc2l6ZSgpKTsKLSAgICBhY3RpdmVTbmFwSW5kZXggPSAwOwotCi0g
ICAgdW5zaWduZWQgbG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleDsKLSAgICB1bnNpZ25lZCB1cHBl
clNuYXBPZmZzZXRSYW5nZUluZGV4OwotICAgIGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0UmFu
Z2VzPExheW91dFR5cGU+KHNjcm9sbERlc3RpbmF0aW9uLCBzbmFwT2Zmc2V0UmFuZ2VzLCBsb3dl
clNuYXBPZmZzZXRSYW5nZUluZGV4LCB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4KTsKLSAgICBp
ZiAobG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCA9PSB1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4
ICYmIHVwcGVyU25hcE9mZnNldFJhbmdlSW5kZXggIT0gaW52YWxpZFNuYXBPZmZzZXRJbmRleCkg
ewotICAgICAgICBhY3RpdmVTbmFwSW5kZXggPSBpbnZhbGlkU25hcE9mZnNldEluZGV4OwotICAg
ICAgICByZXR1cm4gc2Nyb2xsRGVzdGluYXRpb247Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbERl
c3RpbmF0aW9uIDw9IHNuYXBPZmZzZXRzLmZpcnN0KCkpCi0gICAgICAgIHJldHVybiBzbmFwT2Zm
c2V0cy5maXJzdCgpOwotCi0gICAgYWN0aXZlU25hcEluZGV4ID0gc25hcE9mZnNldHMuc2l6ZSgp
IC0gMTsKLSAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPj0gc25hcE9mZnNldHMubGFzdCgpKQot
ICAgICAgICByZXR1cm4gc25hcE9mZnNldHMubGFzdCgpOwotCi0gICAgdW5zaWduZWQgbG93ZXJJ
bmRleDsKLSAgICB1bnNpZ25lZCB1cHBlckluZGV4OwotICAgIGluZGljZXNPZk5lYXJlc3RTbmFw
T2Zmc2V0czxMYXlvdXRUeXBlPihzY3JvbGxEZXN0aW5hdGlvbiwgc25hcE9mZnNldHMsIGxvd2Vy
SW5kZXgsIHVwcGVySW5kZXgpOwotICAgIExheW91dFR5cGUgbG93ZXJTbmFwUG9zaXRpb24gPSBz
bmFwT2Zmc2V0c1tsb3dlckluZGV4XTsKLSAgICBMYXlvdXRUeXBlIHVwcGVyU25hcFBvc2l0aW9u
ID0gc25hcE9mZnNldHNbdXBwZXJJbmRleF07Ci0gICAgaWYgKCFzdGQ6OmFicyh2ZWxvY2l0eSkp
IHsKLSAgICAgICAgYm9vbCBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPSBzY3JvbGxEZXN0
aW5hdGlvbiAtIGxvd2VyU25hcFBvc2l0aW9uIDw9IHVwcGVyU25hcFBvc2l0aW9uIC0gc2Nyb2xs
RGVzdGluYXRpb247Ci0gICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IGlzQ2xvc2VyVG9Mb3dlclNu
YXBQb3NpdGlvbiA/IGxvd2VySW5kZXggOiB1cHBlckluZGV4OwotICAgICAgICByZXR1cm4gaXND
bG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93ZXJTbmFwUG9zaXRpb24gOiB1cHBlclNuYXBQ
b3NpdGlvbjsKLSAgICB9Ci0KLSAgICAvLyBOb24temVybyB2ZWxvY2l0eSBpbmRpY2F0ZXMgYSBm
bGljayBnZXN0dXJlLiBFdmVuIGlmIGFub3RoZXIgc25hcCBwb2ludCBpcyBjbG9zZXIsIHdlIHNo
b3VsZCBjaG9vc2UgdGhlIG9uZSBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBmbGljayBnZXN0dXJl
Ci0gICAgLy8gYXMgbG9uZyBhcyBhIHNjcm9sbCBzbmFwIG9mZnNldCByYW5nZSBkb2VzIG5vdCBs
aWUgYmV0d2VlbiB0aGUgc2Nyb2xsIGRlc3RpbmF0aW9uIGFuZCB0aGUgdGFyZ2V0ZWQgc25hcCBv
ZmZzZXQuCi0gICAgaWYgKHZlbG9jaXR5IDwgMCkgewotICAgICAgICBpZiAobG93ZXJTbmFwT2Zm
c2V0UmFuZ2VJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4ICYmIGxvd2VyU25hcFBvc2l0
aW9uIDwgc25hcE9mZnNldFJhbmdlc1tsb3dlclNuYXBPZmZzZXRSYW5nZUluZGV4XS5lbmQpIHsK
LSAgICAgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IHVwcGVySW5kZXg7Ci0gICAgICAgICAgICBy
ZXR1cm4gdXBwZXJTbmFwUG9zaXRpb247Ci0gICAgICAgIH0KLSAgICAgICAgYWN0aXZlU25hcElu
ZGV4ID0gbG93ZXJJbmRleDsKLSAgICAgICAgcmV0dXJuIGxvd2VyU25hcFBvc2l0aW9uOwotICAg
IH0KLQotICAgIGlmICh1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4ICE9IGludmFsaWRTbmFwT2Zm
c2V0SW5kZXggJiYgc25hcE9mZnNldFJhbmdlc1t1cHBlclNuYXBPZmZzZXRSYW5nZUluZGV4XS5z
dGFydCA8IHVwcGVyU25hcFBvc2l0aW9uKSB7Ci0gICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IGxv
d2VySW5kZXg7Ci0gICAgICAgIHJldHVybiBsb3dlclNuYXBQb3NpdGlvbjsKLSAgICB9Ci0gICAg
YWN0aXZlU25hcEluZGV4ID0gdXBwZXJJbmRleDsKLSAgICByZXR1cm4gdXBwZXJTbmFwUG9zaXRp
b247Ci19Ci0KLUxheW91dFVuaXQgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91
dFVuaXQ+JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91
dFVuaXQ+PiYgc25hcE9mZnNldFJhbmdlcywgTGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlvbiwg
ZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgpCi17Ci0gICAgcmV0dXJu
IGNsb3Nlc3RTbmFwT2Zmc2V0PExheW91dFVuaXQ+KHNuYXBPZmZzZXRzLCBzbmFwT2Zmc2V0UmFu
Z2VzLCBzY3JvbGxEZXN0aW5hdGlvbiwgdmVsb2NpdHksIGFjdGl2ZVNuYXBJbmRleCk7Ci19Ci0K
LWZsb2F0IGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRz
LCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8ZmxvYXQ+PiYgc25hcE9mZnNldFJhbmdl
cywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0
aXZlU25hcEluZGV4KQotewotICAgIHJldHVybiBjbG9zZXN0U25hcE9mZnNldDxmbG9hdD4oc25h
cE9mZnNldHMsIHNuYXBPZmZzZXRSYW5nZXMsIHNjcm9sbERlc3RpbmF0aW9uLCB2ZWxvY2l0eSwg
YWN0aXZlU25hcEluZGV4KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gQ1NTX1NDUk9MTF9TTkFQCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiZGI2OGFlYmQ0MDI3YTEyZTE4ZWE1ZDc5NDA3OWY3YTliMDgyNjRjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQotCi0jaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFVu
aXQuaCIKLSNpbmNsdWRlICJTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCIKLSNpbmNsdWRlICJTY3Jv
bGxUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgSFRNTEVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJCb3g7Ci1jbGFzcyBSZW5kZXJT
dHlsZTsKLWNsYXNzIFNjcm9sbGFibGVBcmVhOwotCi0vLyBVcGRhdGUgdGhlIHNuYXAgb2Zmc2V0
cyBmb3IgdGhpcyBzY3JvbGxhYmxlIGFyZWEsIGdpdmVuIHRoZSBSZW5kZXJCb3ggb2YgdGhlIHNj
cm9sbCBjb250YWluZXIsIHRoZSBSZW5kZXJTdHlsZQotLy8gd2hpY2ggZGVmaW5lcyB0aGUgc2Ny
b2xsLXNuYXAgcHJvcGVydGllcywgYW5kIHRoZSB2aWV3cG9ydCByZWN0YW5nbGUgd2l0aCB0aGUg
b3JpZ2luIGF0IHRoZSB0b3AgbGVmdCBvZgotLy8gdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBi
b3JkZXIgYm94Lgotdm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKFNjcm9s
bGFibGVBcmVhJiwgY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdFbGVtZW50Qm94LCBjb25zdCBS
ZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLCBMYXlvdXRSZWN0IHZpZXdwb3J0UmVj
dEluQm9yZGVyQm94Q29vcmRpbmF0ZXMpOwotCi1jb25zdCB1bnNpZ25lZCBpbnZhbGlkU25hcE9m
ZnNldEluZGV4ID0gVUlOVF9NQVg7Ci1XRUJDT1JFX0VYUE9SVCBMYXlvdXRVbml0IGNsb3Nlc3RT
bmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIGNvbnN0IFZl
Y3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRSYW5nZXMsIExh
eW91dFVuaXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0
aXZlU25hcEluZGV4KTsKLVdFQkNPUkVfRVhQT1JUIGZsb2F0IGNsb3Nlc3RTbmFwT2Zmc2V0KGNv
bnN0IFZlY3RvcjxmbG9hdD4mIHNuYXBPZmZzZXRzLCBjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0
UmFuZ2U8ZmxvYXQ+PiYgc25hcE9mZnNldFJhbmdlcywgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24s
IGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0aXZlU25hcEluZGV4KTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKENTU19TQ1JPTExfU05BUCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5m
by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYwMzkzNzZjYzgxZDg0ODA2MThiYTE2Njg1N2U1ODFjOThhNTRi
ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uY3BwCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCIKKworI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCisKKyNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUg
IkxheW91dFJlY3QuaCIKKyNpbmNsdWRlICJMZW5ndGguaCIKKyNpbmNsdWRlICJSZW5kZXJCb3gu
aCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNp
bmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50
cy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlPgorc3Rh
dGljIHZvaWQgaW5kaWNlc09mTmVhcmVzdFNuYXBPZmZzZXRSYW5nZXMoTGF5b3V0VHlwZSBvZmZz
ZXQsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRUeXBlPj4mIHNuYXBPZmZz
ZXRSYW5nZXMsIHVuc2lnbmVkJiBsb3dlckluZGV4LCB1bnNpZ25lZCYgdXBwZXJJbmRleCkKK3sK
KyAgICBpZiAoc25hcE9mZnNldFJhbmdlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbG93ZXJJbmRl
eCA9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXg7CisgICAgICAgIHVwcGVySW5kZXggPSBpbnZhbGlk
U25hcE9mZnNldEluZGV4OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IGxvd2Vy
SW5kZXhBc0ludCA9IC0xOworICAgIGludCB1cHBlckluZGV4QXNJbnQgPSBzbmFwT2Zmc2V0UmFu
Z2VzLnNpemUoKTsKKyAgICBkbyB7CisgICAgICAgIGludCBtaWRkbGVJbmRleCA9IChsb3dlcklu
ZGV4QXNJbnQgKyB1cHBlckluZGV4QXNJbnQpIC8gMjsKKyAgICAgICAgYXV0byYgcmFuZ2UgPSBz
bmFwT2Zmc2V0UmFuZ2VzW21pZGRsZUluZGV4XTsKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0IDwg
b2Zmc2V0ICYmIG9mZnNldCA8IHJhbmdlLmVuZCkgeworICAgICAgICAgICAgbG93ZXJJbmRleEFz
SW50ID0gbWlkZGxlSW5kZXg7CisgICAgICAgICAgICB1cHBlckluZGV4QXNJbnQgPSBtaWRkbGVJ
bmRleDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9mZnNl
dCA+IHJhbmdlLmVuZCkKKyAgICAgICAgICAgIGxvd2VySW5kZXhBc0ludCA9IG1pZGRsZUluZGV4
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cHBlckluZGV4QXNJbnQgPSBtaWRkbGVJbmRl
eDsKKyAgICB9IHdoaWxlIChsb3dlckluZGV4QXNJbnQgPCB1cHBlckluZGV4QXNJbnQgLSAxKTsK
KworICAgIGlmIChvZmZzZXQgPD0gc25hcE9mZnNldFJhbmdlcy5maXJzdCgpLnN0YXJ0KQorICAg
ICAgICBsb3dlckluZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKKyAgICBlbHNlCisgICAg
ICAgIGxvd2VySW5kZXggPSBsb3dlckluZGV4QXNJbnQ7CisKKyAgICBpZiAob2Zmc2V0ID49IHNu
YXBPZmZzZXRSYW5nZXMubGFzdCgpLmVuZCkKKyAgICAgICAgdXBwZXJJbmRleCA9IGludmFsaWRT
bmFwT2Zmc2V0SW5kZXg7CisgICAgZWxzZQorICAgICAgICB1cHBlckluZGV4ID0gdXBwZXJJbmRl
eEFzSW50OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KK3N0YXRpYyB2b2lk
IGluZGljZXNPZk5lYXJlc3RTbmFwT2Zmc2V0cyhMYXlvdXRUeXBlIG9mZnNldCwgY29uc3QgVmVj
dG9yPExheW91dFR5cGU+JiBzbmFwT2Zmc2V0cywgdW5zaWduZWQmIGxvd2VySW5kZXgsIHVuc2ln
bmVkJiB1cHBlckluZGV4KQoreworICAgIGxvd2VySW5kZXggPSAwOworICAgIHVwcGVySW5kZXgg
PSBzbmFwT2Zmc2V0cy5zaXplKCkgLSAxOworICAgIHdoaWxlIChsb3dlckluZGV4IDwgdXBwZXJJ
bmRleCAtIDEpIHsKKyAgICAgICAgaW50IG1pZGRsZUluZGV4ID0gKGxvd2VySW5kZXggKyB1cHBl
ckluZGV4KSAvIDI7CisgICAgICAgIGF1dG8gbWlkZGxlT2Zmc2V0ID0gc25hcE9mZnNldHNbbWlk
ZGxlSW5kZXhdOworICAgICAgICBpZiAob2Zmc2V0ID09IG1pZGRsZU9mZnNldCkgeworICAgICAg
ICAgICAgdXBwZXJJbmRleCA9IG1pZGRsZUluZGV4OworICAgICAgICAgICAgbG93ZXJJbmRleCA9
IG1pZGRsZUluZGV4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAob2Zmc2V0ID4gbWlkZGxlT2Zmc2V0KQorICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1pZGRs
ZUluZGV4OworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cHBlckluZGV4ID0gbWlkZGxlSW5k
ZXg7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5b3V0VHlwZT4KK0xheW91dFR5
cGUgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFR5cGU+JiBzbmFwT2Zmc2V0
cywgY29uc3QgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFR5cGU+PiYgc25hcE9mZnNl
dFJhbmdlcywgTGF5b3V0VHlwZSBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVu
c2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgpCit7CisgICAgQVNTRVJUKHNuYXBPZmZzZXRzLnNpemUo
KSk7CisgICAgYWN0aXZlU25hcEluZGV4ID0gMDsKKworICAgIHVuc2lnbmVkIGxvd2VyU25hcE9m
ZnNldFJhbmdlSW5kZXg7CisgICAgdW5zaWduZWQgdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleDsK
KyAgICBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldFJhbmdlczxMYXlvdXRUeXBlPihzY3JvbGxE
ZXN0aW5hdGlvbiwgc25hcE9mZnNldFJhbmdlcywgbG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCwg
dXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCk7CisgICAgaWYgKGxvd2VyU25hcE9mZnNldFJhbmdl
SW5kZXggPT0gdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleCAmJiB1cHBlclNuYXBPZmZzZXRSYW5n
ZUluZGV4ICE9IGludmFsaWRTbmFwT2Zmc2V0SW5kZXgpIHsKKyAgICAgICAgYWN0aXZlU25hcElu
ZGV4ID0gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKKyAgICAgICAgcmV0dXJuIHNjcm9sbERlc3Rp
bmF0aW9uOworICAgIH0KKworICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA8PSBzbmFwT2Zmc2V0
cy5maXJzdCgpKQorICAgICAgICByZXR1cm4gc25hcE9mZnNldHMuZmlyc3QoKTsKKworICAgIGFj
dGl2ZVNuYXBJbmRleCA9IHNuYXBPZmZzZXRzLnNpemUoKSAtIDE7CisgICAgaWYgKHNjcm9sbERl
c3RpbmF0aW9uID49IHNuYXBPZmZzZXRzLmxhc3QoKSkKKyAgICAgICAgcmV0dXJuIHNuYXBPZmZz
ZXRzLmxhc3QoKTsKKworICAgIHVuc2lnbmVkIGxvd2VySW5kZXg7CisgICAgdW5zaWduZWQgdXBw
ZXJJbmRleDsKKyAgICBpbmRpY2VzT2ZOZWFyZXN0U25hcE9mZnNldHM8TGF5b3V0VHlwZT4oc2Ny
b2xsRGVzdGluYXRpb24sIHNuYXBPZmZzZXRzLCBsb3dlckluZGV4LCB1cHBlckluZGV4KTsKKyAg
ICBMYXlvdXRUeXBlIGxvd2VyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbbG93ZXJJbmRleF07
CisgICAgTGF5b3V0VHlwZSB1cHBlclNuYXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRzW3VwcGVySW5k
ZXhdOworICAgIGlmICghc3RkOjphYnModmVsb2NpdHkpKSB7CisgICAgICAgIGJvb2wgaXNDbG9z
ZXJUb0xvd2VyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb24gLSBsb3dlclNuYXBQb3Np
dGlvbiA8PSB1cHBlclNuYXBQb3NpdGlvbiAtIHNjcm9sbERlc3RpbmF0aW9uOworICAgICAgICBh
Y3RpdmVTbmFwSW5kZXggPSBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPyBsb3dlckluZGV4
IDogdXBwZXJJbmRleDsKKyAgICAgICAgcmV0dXJuIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlv
biA/IGxvd2VyU25hcFBvc2l0aW9uIDogdXBwZXJTbmFwUG9zaXRpb247CisgICAgfQorCisgICAg
Ly8gTm9uLXplcm8gdmVsb2NpdHkgaW5kaWNhdGVzIGEgZmxpY2sgZ2VzdHVyZS4gRXZlbiBpZiBh
bm90aGVyIHNuYXAgcG9pbnQgaXMgY2xvc2VyLCB3ZSBzaG91bGQgY2hvb3NlIHRoZSBvbmUgaW4g
dGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpY2sgZ2VzdHVyZQorICAgIC8vIGFzIGxvbmcgYXMgYSBz
Y3JvbGwgc25hcCBvZmZzZXQgcmFuZ2UgZG9lcyBub3QgbGllIGJldHdlZW4gdGhlIHNjcm9sbCBk
ZXN0aW5hdGlvbiBhbmQgdGhlIHRhcmdldGVkIHNuYXAgb2Zmc2V0LgorICAgIGlmICh2ZWxvY2l0
eSA8IDApIHsKKyAgICAgICAgaWYgKGxvd2VyU25hcE9mZnNldFJhbmdlSW5kZXggIT0gaW52YWxp
ZFNuYXBPZmZzZXRJbmRleCAmJiBsb3dlclNuYXBQb3NpdGlvbiA8IHNuYXBPZmZzZXRSYW5nZXNb
bG93ZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleF0uZW5kKSB7CisgICAgICAgICAgICBhY3RpdmVTbmFw
SW5kZXggPSB1cHBlckluZGV4OworICAgICAgICAgICAgcmV0dXJuIHVwcGVyU25hcFBvc2l0aW9u
OworICAgICAgICB9CisgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9IGxvd2VySW5kZXg7CisgICAg
ICAgIHJldHVybiBsb3dlclNuYXBQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAodXBwZXJTbmFw
T2Zmc2V0UmFuZ2VJbmRleCAhPSBpbnZhbGlkU25hcE9mZnNldEluZGV4ICYmIHNuYXBPZmZzZXRS
YW5nZXNbdXBwZXJTbmFwT2Zmc2V0UmFuZ2VJbmRleF0uc3RhcnQgPCB1cHBlclNuYXBQb3NpdGlv
bikgeworICAgICAgICBhY3RpdmVTbmFwSW5kZXggPSBsb3dlckluZGV4OworICAgICAgICByZXR1
cm4gbG93ZXJTbmFwUG9zaXRpb247CisgICAgfQorICAgIGFjdGl2ZVNuYXBJbmRleCA9IHVwcGVy
SW5kZXg7CisgICAgcmV0dXJuIHVwcGVyU25hcFBvc2l0aW9uOworfQorCitMYXlvdXRVbml0IGNs
b3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIGNv
bnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHNuYXBPZmZzZXRSYW5n
ZXMsIExheW91dFVuaXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5LCB1bnNpZ25l
ZCYgYWN0aXZlU25hcEluZGV4KQoreworICAgIHJldHVybiBjbG9zZXN0U25hcE9mZnNldDxMYXlv
dXRVbml0PihzbmFwT2Zmc2V0cywgc25hcE9mZnNldFJhbmdlcywgc2Nyb2xsRGVzdGluYXRpb24s
IHZlbG9jaXR5LCBhY3RpdmVTbmFwSW5kZXgpOworfQorCitmbG9hdCBjbG9zZXN0U25hcE9mZnNl
dChjb25zdCBWZWN0b3I8ZmxvYXQ+JiBzbmFwT2Zmc2V0cywgY29uc3QgVmVjdG9yPFNjcm9sbE9m
ZnNldFJhbmdlPGZsb2F0Pj4mIHNuYXBPZmZzZXRSYW5nZXMsIGZsb2F0IHNjcm9sbERlc3RpbmF0
aW9uLCBmbG9hdCB2ZWxvY2l0eSwgdW5zaWduZWQmIGFjdGl2ZVNuYXBJbmRleCkKK3sKKyAgICBy
ZXR1cm4gY2xvc2VzdFNuYXBPZmZzZXQ8ZmxvYXQ+KHNuYXBPZmZzZXRzLCBzbmFwT2Zmc2V0UmFu
Z2VzLCBzY3JvbGxEZXN0aW5hdGlvbiwgdmVsb2NpdHksIGFjdGl2ZVNuYXBJbmRleCk7Cit9CisK
K2VudW0gY2xhc3MgSW5zZXRPck91dHNldCB7CisgICAgSW5zZXQsCisgICAgT3V0c2V0Cit9Owor
CitzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlU2Nyb2xsU25hcFBvcnRPckFyZWFSZWN0KGNvbnN0
IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IExlbmd0aEJveCYgaW5zZXRPck91dHNldEJveCwgSW5z
ZXRPck91dHNldCBpbnNldE9yT3V0c2V0KQoreworICAgIExheW91dEJveEV4dGVudCBleHRlbnRz
KHZhbHVlRm9yTGVuZ3RoKGluc2V0T3JPdXRzZXRCb3gudG9wKCksIHJlY3QuaGVpZ2h0KCkpLCB2
YWx1ZUZvckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LnJpZ2h0KCksIHJlY3Qud2lkdGgoKSksIHZh
bHVlRm9yTGVuZ3RoKGluc2V0T3JPdXRzZXRCb3guYm90dG9tKCksIHJlY3QuaGVpZ2h0KCkpLCB2
YWx1ZUZvckxlbmd0aChpbnNldE9yT3V0c2V0Qm94LmxlZnQoKSwgcmVjdC53aWR0aCgpKSk7Cisg
ICAgYXV0byBzbmFwUG9ydE9yQXJlYShyZWN0KTsKKyAgICBpZiAoaW5zZXRPck91dHNldCA9PSBJ
bnNldE9yT3V0c2V0OjpJbnNldCkKKyAgICAgICAgc25hcFBvcnRPckFyZWEuY29udHJhY3QoZXh0
ZW50cyk7CisgICAgZWxzZQorICAgICAgICBzbmFwUG9ydE9yQXJlYS5leHBhbmQoZXh0ZW50cyk7
CisgICAgcmV0dXJuIHNuYXBQb3J0T3JBcmVhOworfQorCitzdGF0aWMgTGF5b3V0VW5pdCBjb21w
dXRlU2Nyb2xsU25hcEFsaWduT2Zmc2V0KExheW91dFVuaXQgbWluTG9jYXRpb24sIExheW91dFVu
aXQgbWF4TG9jYXRpb24sIFNjcm9sbFNuYXBBeGlzQWxpZ25UeXBlIGFsaWdubWVudCwgYm9vbCBh
eGlzSXNGbGlwcGVkKQoreworICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7CisgICAgY2FzZSBTY3Jv
bGxTbmFwQXhpc0FsaWduVHlwZTo6U3RhcnQ6CisgICAgICAgIHJldHVybiBheGlzSXNGbGlwcGVk
ID8gbWF4TG9jYXRpb24gOiBtaW5Mb2NhdGlvbjsKKyAgICBjYXNlIFNjcm9sbFNuYXBBeGlzQWxp
Z25UeXBlOjpDZW50ZXI6CisgICAgICAgIHJldHVybiAobWluTG9jYXRpb24gKyBtYXhMb2NhdGlv
bikgLyAyOworICAgIGNhc2UgU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6OkVuZDoKKyAgICAgICAg
cmV0dXJuIGF4aXNJc0ZsaXBwZWQgPyBtaW5Mb2NhdGlvbiA6IG1heExvY2F0aW9uOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxPZmZzZXRSYW5nZTxUPiYgcmFuZ2UpCit7Cisg
ICAgdHMgPDwgInN0YXJ0OiAiIDw8IHJhbmdlLnN0YXJ0IDw8ICIgZW5kOiAiIDw8IHJhbmdlLmVu
ZDsKKyAgICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVBeGlzUHJveGltaXR5
U25hcE9mZnNldFJhbmdlcyhjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBW
ZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5pdD4+JiBvZmZzZXRSYW5nZXMsIExheW91
dFVuaXQgc2Nyb2xsUG9ydEF4aXNMZW5ndGgpCit7CisgICAgLy8gVGhpcyBpcyBhbiBhcmJpdHJh
cnkgY2hvaWNlIGZvciB3aGF0IGl0IG1lYW5zIHRvIGJlICJpbiBwcm94aW1pdHkiIG9mIGEgc25h
cCBvZmZzZXQuIFdlIHNob3VsZCBwbGF5IGFyb3VuZCB3aXRoCisgICAgLy8gdGhpcyBhbmQgc2Vl
IHdoYXQgZmVlbHMgYmVzdC4KKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgcmF0aW9PZlNjcm9sbFBv
cnRBeGlzTGVuZ3RoVG9CZUNvbnNpZGVyZWRGb3JQcm94aW1pdHkgPSAwLjM7CisgICAgaWYgKHNu
YXBPZmZzZXRzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBleHRy
YSBydWxlIGFjY291bnRpbmcgZm9yIHNjcm9sbCBvZmZzZXQgcmFuZ2VzIGluIGJldHdlZW4gdGhl
IHNjcm9sbCBkZXN0aW5hdGlvbiBhbmQgYSBwb3RlbnRpYWwgc25hcCBvZmZzZXQKKyAgICAvLyBo
YW5kbGVzIHRoZSBjb3JuZXIgY2FzZSB3aGVyZSB0aGUgdXNlciBzY3JvbGxzIHdpdGggbW9tZW50
dW0gdmVyeSBsaWdodGx5IGF3YXkgZnJvbSBhIHNuYXAgb2Zmc2V0LCBzdWNoIHRoYXQgdGhlCisg
ICAgLy8gcHJlZGljdGVkIHNjcm9sbCBkZXN0aW5hdGlvbiBpcyBzdGlsbCB3aXRoaW4gcHJveGlt
aXR5IG9mIHRoZSBzbmFwIG9mZnNldC4gSW4gdGhpcyBjYXNlLCB0aGUgcmVndWxhciAobWFuZGF0
b3J5CisgICAgLy8gc2Nyb2xsIHNuYXBwaW5nKSBiZWhhdmlvciB3b3VsZCBiZSB0byBzbmFwIHRv
IHRoZSBuZXh0IG9mZnNldCBpbiB0aGUgZGlyZWN0aW9uIG9mIG1vbWVudHVtIHNjcm9sbGluZywg
YnV0CisgICAgLy8gaW5zdGVhZCwgaXQgaXMgbW9yZSBpbnR1aXRpdmUgdG8gZWl0aGVyIHJldHVy
biB0byB0aGUgb3JpZ2luYWwgc25hcCBwb3NpdGlvbiAod2hpY2ggd2UgYXJiaXRyYXJpbHkgY2hv
b3NlIGhlcmUpCisgICAgLy8gb3Igc2Nyb2xsIGp1c3Qgb3V0c2lkZSBvZiB0aGUgc25hcCBvZmZz
ZXQgcmFuZ2UuIFRoaXMgaXMgYW5vdGhlciBtaW5vciBiZWhhdmlvciB0d2VhayB0aGF0IHdlIHNo
b3VsZCBwbGF5IGFyb3VuZAorICAgIC8vIHdpdGggdG8gc2VlIHdoYXQgZmVlbHMgYmVzdC4KKyAg
ICBMYXlvdXRVbml0IHByb3hpbWl0eURpc3RhbmNlIHsgcmF0aW9PZlNjcm9sbFBvcnRBeGlzTGVu
Z3RoVG9CZUNvbnNpZGVyZWRGb3JQcm94aW1pdHkgKiBzY3JvbGxQb3J0QXhpc0xlbmd0aCB9Owor
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMTsgaW5kZXggPCBzbmFwT2Zmc2V0cy5zaXplKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgYXV0byBzdGFydE9mZnNldCA9IHNuYXBPZmZzZXRzW2luZGV4IC0g
MV0gKyBwcm94aW1pdHlEaXN0YW5jZTsKKyAgICAgICAgYXV0byBlbmRPZmZzZXQgPSBzbmFwT2Zm
c2V0c1tpbmRleF0gLSBwcm94aW1pdHlEaXN0YW5jZTsKKyAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0
IDwgZW5kT2Zmc2V0KQorICAgICAgICAgICAgb2Zmc2V0UmFuZ2VzLmFwcGVuZCh7IHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQgfSk7CisgICAgfQorfQorCit2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9y
U2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBjb25zdCBSZW5k
ZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiBzY3JvbGxpbmdF
bGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmlld3BvcnRSZWN0SW5Cb3JkZXJCb3hDb29yZGluYXRl
cykKK3sKKyAgICBhdXRvIHNjcm9sbFNuYXBUeXBlID0gc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNj
cm9sbFNuYXBUeXBlKCk7CisgICAgY29uc3QgYXV0byYgYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0
aW9ucyA9IHNjcm9sbGluZ0VsZW1lbnRCb3gudmlldygpLmJveGVzV2l0aFNjcm9sbFNuYXBQb3Np
dGlvbnMoKTsKKyAgICBpZiAoc2Nyb2xsU25hcFR5cGUuc3RyaWN0bmVzcyA9PSBTY3JvbGxTbmFw
U3RyaWN0bmVzczo6Tm9uZSB8fCBib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zLmlzRW1wdHko
KSkgeworICAgICAgICBzY3JvbGxhYmxlQXJlYS5jbGVhclNuYXBPZmZzZXRzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4gdmVydGljYWxTbmFwT2Zm
c2V0czsKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4gaG9yaXpvbnRhbFNuYXBPZmZzZXRzOworICAg
IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4gdmVydGljYWxTbmFwT2Zmc2V0
UmFuZ2VzOworICAgIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4gaG9yaXpv
bnRhbFNuYXBPZmZzZXRSYW5nZXM7CisgICAgSGFzaFNldDxmbG9hdD4gc2VlblZlcnRpY2FsU25h
cE9mZnNldHM7CisgICAgSGFzaFNldDxmbG9hdD4gc2Vlbkhvcml6b250YWxTbmFwT2Zmc2V0czsK
KyAgICBib29sIGhhc0hvcml6b250YWxTbmFwT2Zmc2V0cyA9IHNjcm9sbFNuYXBUeXBlLmF4aXMg
PT0gU2Nyb2xsU25hcEF4aXM6OkJvdGggfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxT
bmFwQXhpczo6WEF4aXMgfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFwQXhpczo6
SW5saW5lOworICAgIGJvb2wgaGFzVmVydGljYWxTbmFwT2Zmc2V0cyA9IHNjcm9sbFNuYXBUeXBl
LmF4aXMgPT0gU2Nyb2xsU25hcEF4aXM6OkJvdGggfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBT
Y3JvbGxTbmFwQXhpczo6WUF4aXMgfHwgc2Nyb2xsU25hcFR5cGUuYXhpcyA9PSBTY3JvbGxTbmFw
QXhpczo6QmxvY2s7CisKKyAgICBhdXRvIG1heFNjcm9sbE9mZnNldCA9IHNjcm9sbGFibGVBcmVh
Lm1heGltdW1TY3JvbGxPZmZzZXQoKTsKKyAgICBhdXRvIHNjcm9sbFBvc2l0aW9uID0gTGF5b3V0
UG9pbnQgeyBzY3JvbGxhYmxlQXJlYS5zY3JvbGxQb3NpdGlvbigpIH07CisgICAgYm9vbCBzY3Jv
bGxlcklzUlRMID0gIXNjcm9sbGluZ0VsZW1lbnRCb3guc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCk7CisKKyAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBzY3JvbGxpbmcgY29udGFpbmVy
J3Mgc25hcCBwb3J0LCB3aGVyZSB0aGUgdG9wIGxlZnQgb2YgdGhlIHNjcm9sbGluZyBjb250YWlu
ZXIncyBib3JkZXIgYm94IGlzIHRoZSBvcmlnaW4uCisgICAgYXV0byBzY3JvbGxTbmFwUG9ydCA9
IGNvbXB1dGVTY3JvbGxTbmFwUG9ydE9yQXJlYVJlY3Qodmlld3BvcnRSZWN0SW5Cb3JkZXJCb3hD
b29yZGluYXRlcywgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNjcm9sbFBhZGRpbmcoKSwgSW5zZXRP
ck91dHNldDo6SW5zZXQpOworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0g
PDwgIkNvbXB1dGluZyBzY3JvbGwgc25hcCBvZmZzZXRzIGZvciAiIDw8IHNjcm9sbGFibGVBcmVh
IDw8ICIgaW4gc25hcCBwb3J0ICIgPDwgc2Nyb2xsU25hcFBvcnQpOworICAgIGZvciAoYXV0byog
Y2hpbGQgOiBib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zKSB7CisgICAgICAgIGlmIChjaGls
ZC0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lckZvclNuYXBwaW5nKCkgIT0gJnNjcm9sbGlu
Z0VsZW1lbnRCb3gpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBUaGUgYm91
bmRzIG9mIHRoZSBjaGlsZCBlbGVtZW50J3Mgc25hcCBhcmVhLCB3aGVyZSB0aGUgdG9wIGxlZnQg
b2YgdGhlIHNjcm9sbGluZyBjb250YWluZXIncyBib3JkZXIgYm94IGlzIHRoZSBvcmlnaW4uCisg
ICAgICAgIC8vIFRoZSBzbmFwIGFyZWEgaXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgY2hpbGQg
ZWxlbWVudCdzIGJvcmRlciBib3gsIGFmdGVyIGFwcGx5aW5nIHRyYW5zZm9ybWF0aW9ucy4KKyAg
ICAgICAgLy8gRklYTUU6IEZvciBub3csIGp1c3QgY29uc2lkZXIgd2hldGhlciB0aGUgc2Nyb2xs
ZXIgaXMgUlRMLiBUaGUgYmVoYXZpb3Igb2YgTFRSIGJveGVzIGluc2lkZSBhIFJUTCBzY3JvbGxl
ciBpcyBwb29ybHkgZGVmaW5lZDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMv
aXNzdWVzLzUzNjEuCisgICAgICAgIGF1dG8gc2Nyb2xsU25hcEFyZWEgPSBMYXlvdXRSZWN0KGNo
aWxkLT5sb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFF1YWQoY2hpbGQtPmJvcmRlckJvdW5kaW5n
Qm94KCkpLCAmc2Nyb2xsaW5nRWxlbWVudEJveCkuYm91bmRpbmdCb3goKSk7CisKKyAgICAgICAg
Ly8gbG9jYWxUb0NvbnRhaW5lclF1YWQgd2lsbCB0cmFuc2Zvcm0gdGhlIHNjcm9sbCBzbmFwIGFy
ZWEgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbiwgZXhjZXB0IGluIHRoZSBjYXNlIHRoYXQgdGhpcyBw
b3NpdGlvbiBpcworICAgICAgICAvLyBjb21pbmcgZnJvbSBhIFNjcm9sbFZpZXcuIFdlIHdhbnQg
dGhlIHRyYW5zZm9ybWVkIGFyZWEsIGJ1dCB3aXRob3V0IHNjcm9sbCBwb3NpdGlvbiB0YWtlbiBp
bnRvIGFjY291bnQuCisgICAgICAgIGlmICghc2Nyb2xsYWJsZUFyZWEuaXNTY3JvbGxWaWV3KCkp
CisgICAgICAgICAgICBzY3JvbGxTbmFwQXJlYS5tb3ZlQnkoc2Nyb2xsUG9zaXRpb24pOworCisg
ICAgICAgIHNjcm9sbFNuYXBBcmVhID0gY29tcHV0ZVNjcm9sbFNuYXBQb3J0T3JBcmVhUmVjdChz
Y3JvbGxTbmFwQXJlYSwgY2hpbGQtPnN0eWxlKCkuc2Nyb2xsTWFyZ2luKCksIEluc2V0T3JPdXRz
ZXQ6Ok91dHNldCk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0g
PDwgIiAgICBDb25zaWRlcmluZyBzY3JvbGwgc25hcCB0YXJnZXQgYXJlYSAiIDw8IHNjcm9sbFNu
YXBBcmVhKTsKKyAgICAgICAgYXV0byBhbGlnbm1lbnQgPSBjaGlsZC0+c3R5bGUoKS5zY3JvbGxT
bmFwQWxpZ24oKTsKKyAgICAgICAgaWYgKGhhc0hvcml6b250YWxTbmFwT2Zmc2V0cyAmJiBhbGln
bm1lbnQueCAhPSBTY3JvbGxTbmFwQXhpc0FsaWduVHlwZTo6Tm9uZSkgeworICAgICAgICAgICAg
YXV0byBhYnNvbHV0ZVNjcm9sbFhQb3NpdGlvbiA9IGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZz
ZXQoc2Nyb2xsU25hcEFyZWEueCgpLCBzY3JvbGxTbmFwQXJlYS5tYXhYKCksIGFsaWdubWVudC54
LCBzY3JvbGxlcklzUlRMKSAtIGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoc2Nyb2xsU25h
cFBvcnQueCgpLCBzY3JvbGxTbmFwUG9ydC5tYXhYKCksIGFsaWdubWVudC54LCBzY3JvbGxlcklz
UlRMKTsKKyAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxPZmZzZXQgPSBjbGFtcFRvPGlu
dD4oc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHsgcm91bmRUb0ludChh
YnNvbHV0ZVNjcm9sbFhQb3NpdGlvbiksIDAgfSkueCgpLCAwLCBtYXhTY3JvbGxPZmZzZXQueCgp
KTsKKyAgICAgICAgICAgIGlmICghc2Vlbkhvcml6b250YWxTbmFwT2Zmc2V0cy5jb250YWlucyhh
YnNvbHV0ZVNjcm9sbE9mZnNldCkpIHsKKyAgICAgICAgICAgICAgICBzZWVuSG9yaXpvbnRhbFNu
YXBPZmZzZXRzLmFkZChhYnNvbHV0ZVNjcm9sbE9mZnNldCk7CisgICAgICAgICAgICAgICAgaG9y
aXpvbnRhbFNuYXBPZmZzZXRzLmFwcGVuZChhYnNvbHV0ZVNjcm9sbE9mZnNldCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc1ZlcnRpY2FsU25hcE9mZnNldHMgJiYg
YWxpZ25tZW50LnkgIT0gU2Nyb2xsU25hcEF4aXNBbGlnblR5cGU6Ok5vbmUpIHsKKyAgICAgICAg
ICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxZUG9zaXRpb24gPSBjb21wdXRlU2Nyb2xsU25hcEFsaWdu
T2Zmc2V0KHNjcm9sbFNuYXBBcmVhLnkoKSwgc2Nyb2xsU25hcEFyZWEubWF4WSgpLCBhbGlnbm1l
bnQueSwgZmFsc2UpIC0gY29tcHV0ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChzY3JvbGxTbmFwUG9y
dC55KCksIHNjcm9sbFNuYXBQb3J0Lm1heFkoKSwgYWxpZ25tZW50LnksIGZhbHNlKTsKKyAgICAg
ICAgICAgIGF1dG8gYWJzb2x1dGVTY3JvbGxPZmZzZXQgPSBjbGFtcFRvPGludD4oc2Nyb2xsYWJs
ZUFyZWEuc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHsgMCwgcm91bmRUb0ludChhYnNvbHV0ZVNj
cm9sbFlQb3NpdGlvbikgfSkueSgpLCAwLCBtYXhTY3JvbGxPZmZzZXQueSgpKTsKKyAgICAgICAg
ICAgIGlmICghc2VlblZlcnRpY2FsU25hcE9mZnNldHMuY29udGFpbnMoYWJzb2x1dGVTY3JvbGxP
ZmZzZXQpKSB7CisgICAgICAgICAgICAgICAgc2VlblZlcnRpY2FsU25hcE9mZnNldHMuYWRkKGFi
c29sdXRlU2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNuYXBPZmZzZXRz
LmFwcGVuZChhYnNvbHV0ZVNjcm9sbE9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoIWhvcml6b250YWxTbmFwT2Zmc2V0cy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgc3RkOjpzb3J0KGhvcml6b250YWxTbmFwT2Zmc2V0cy5iZWdpbigpLCBob3Jpem9udGFs
U25hcE9mZnNldHMuZW5kKCkpOworICAgICAgICBpZiAoc2Nyb2xsU25hcFR5cGUuc3RyaWN0bmVz
cyA9PSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6UHJveGltaXR5KQorICAgICAgICAgICAgY29tcHV0
ZUF4aXNQcm94aW1pdHlTbmFwT2Zmc2V0UmFuZ2VzKGhvcml6b250YWxTbmFwT2Zmc2V0cywgaG9y
aXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMsIHNjcm9sbFNuYXBQb3J0LndpZHRoKCkpOworCisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21wdXRlZCBo
b3Jpem9udGFsIHNjcm9sbCBzbmFwIG9mZnNldHM6ICIgPDwgaG9yaXpvbnRhbFNuYXBPZmZzZXRz
KTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENv
bXB1dGVkIGhvcml6b250YWwgc2Nyb2xsIHNuYXAgb2Zmc2V0IHJhbmdlczogIiA8PCBob3Jpem9u
dGFsU25hcE9mZnNldFJhbmdlcyk7CisKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEuc2V0SG9yaXpv
bnRhbFNuYXBPZmZzZXRzKGhvcml6b250YWxTbmFwT2Zmc2V0cyk7CisgICAgICAgIHNjcm9sbGFi
bGVBcmVhLnNldEhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKGhvcml6b250YWxTbmFwT2Zmc2V0
UmFuZ2VzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEuY2xlYXJIb3Jpem9u
dGFsU25hcE9mZnNldHMoKTsKKworICAgIGlmICghdmVydGljYWxTbmFwT2Zmc2V0cy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgc3RkOjpzb3J0KHZlcnRpY2FsU25hcE9mZnNldHMuYmVnaW4oKSwgdmVy
dGljYWxTbmFwT2Zmc2V0cy5lbmQoKSk7CisgICAgICAgIGlmIChzY3JvbGxTbmFwVHlwZS5zdHJp
Y3RuZXNzID09IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpQcm94aW1pdHkpCisgICAgICAgICAgICBj
b21wdXRlQXhpc1Byb3hpbWl0eVNuYXBPZmZzZXRSYW5nZXModmVydGljYWxTbmFwT2Zmc2V0cywg
dmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzLCBzY3JvbGxTbmFwUG9ydC5oZWlnaHQoKSk7CisKKyAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiID0+IENvbXB1dGVk
IHZlcnRpY2FsIHNjcm9sbCBzbmFwIG9mZnNldHM6ICIgPDwgdmVydGljYWxTbmFwT2Zmc2V0cyk7
CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIiA9PiBDb21w
dXRlZCB2ZXJ0aWNhbCBzY3JvbGwgc25hcCBvZmZzZXQgcmFuZ2VzOiAiIDw8IHZlcnRpY2FsU25h
cE9mZnNldFJhbmdlcyk7CisKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEuc2V0VmVydGljYWxTbmFw
T2Zmc2V0cyh2ZXJ0aWNhbFNuYXBPZmZzZXRzKTsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEuc2V0
VmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzKHZlcnRpY2FsU25hcE9mZnNldFJhbmdlcyk7CisgICAg
fSBlbHNlCisgICAgICAgIHNjcm9sbGFibGVBcmVhLmNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cygp
OworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaApp
bmRleCAzYWI2NDA2ODI2NGM1MDQwOGJhYjRlZTM4ZDJjY2Q0YTY0MWM3ODY3Li5mY2EzN2RlZjNh
MGM2YjY0YTczNjBiNjNiZGZkNTk0MzUxYmQwNjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaApAQCAtMjUsMTAgKzI1
LDE5IEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKwor
I2luY2x1ZGUgIkxheW91dFVuaXQuaCIKKyNpbmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2ludHMu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgTGF5b3V0UmVjdDsKK2NsYXNzIFNjcm9sbGFibGVBcmVhOworY2xhc3MgUmVuZGVyQm94Owor
Y2xhc3MgUmVuZGVyU3R5bGU7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IFNjcm9s
bE9mZnNldFJhbmdlIHsKICAgICBUIHN0YXJ0OwpAQCAtNDksNCArNTgsMTYgQEAgc3RydWN0IFNj
cm9sbFNuYXBPZmZzZXRzSW5mbyB7CiAgICAgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPFQ+PiB2
ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXM7CiB9OwogCitjb25zdCB1bnNpZ25lZCBpbnZhbGlkU25h
cE9mZnNldEluZGV4ID0gVUlOVF9NQVg7CisKKy8vIFVwZGF0ZSB0aGUgc25hcCBvZmZzZXRzIGZv
ciB0aGlzIHNjcm9sbGFibGUgYXJlYSwgZ2l2ZW4gdGhlIFJlbmRlckJveCBvZiB0aGUgc2Nyb2xs
IGNvbnRhaW5lciwgdGhlIFJlbmRlclN0eWxlCisvLyB3aGljaCBkZWZpbmVzIHRoZSBzY3JvbGwt
c25hcCBwcm9wZXJ0aWVzLCBhbmQgdGhlIHZpZXdwb3J0IHJlY3RhbmdsZSB3aXRoIHRoZSBvcmln
aW4gYXQgdGhlIHRvcCBsZWZ0IG9mCisvLyB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5lcidzIGJvcmRl
ciBib3guCit2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJs
ZUFyZWEmLCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRl
clN0eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmlld3BvcnRSZWN0SW5C
b3JkZXJCb3hDb29yZGluYXRlcyk7CisKK1dFQkNPUkVfRVhQT1JUIExheW91dFVuaXQgY2xvc2Vz
dFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgY29uc3Qg
VmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPExheW91dFVuaXQ+PiYgc25hcE9mZnNldFJhbmdlcywg
TGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBh
Y3RpdmVTbmFwSW5kZXgpOworV0VCQ09SRV9FWFBPUlQgZmxvYXQgY2xvc2VzdFNuYXBPZmZzZXQo
Y29uc3QgVmVjdG9yPGZsb2F0PiYgc25hcE9mZnNldHMsIGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZz
ZXRSYW5nZTxmbG9hdD4+JiBzbmFwT2Zmc2V0UmFuZ2VzLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlv
biwgZmxvYXQgdmVsb2NpdHksIHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgpOworCiB9OyAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19TQ1JPTExfU05BUCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5oCmluZGV4IDdiNzRmOGE5MDUxZTM1OTljNGRiZjQyYmFmYzA4OWUxYmU0OGY0ZDEuLjFlMTMw
NWEyZjk5Y2JjYjhmMzk3NGNkYTRmMjdiYTI1ZjNlZmY4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaApAQCAtNDIsMTAg
KzQyLDYgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjZW5kaWYKIAotI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCi0jaW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCi0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBUZXh0U3RyZWFtOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxh
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNh
bGN1bGF0b3IuaAppbmRleCAyMWMzMTFjZDg5Yjc5NDA4NGE4NDkwZDVmYzliYTU1YTkzYjlhZWJk
Li43M2U5MmE2NGQyMzI1YzVlMWVhNTY4YzQ0ZDJkNmY4ZGRmYTZhNzUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNhbGN1bGF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdNb21lbnR1bUNh
bGN1bGF0b3IuaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKIAotI2luY2x1ZGUgIkF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRl
eCA4NTFhMDJmY2JiM2U5NzY5MWJmMDFkOWIyMTA5NzFkOWFlNmQ3OTQ5Li4zNjg1ZGIwMTM4ZmEx
ZmI4NzZhYWRiNmM3NWZkMTg1MjNjNzg0YzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGFibGVBcmVhLmgKQEAgLTM4MywxMSArMzgzLDExIEBAIHByaXZhdGU6CiAgICAgLy8gVGhp
cyBmdW5jdGlvbiBzaG91bGQgYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIHRvIHBlcmZvcm0g
dGhlIGFjdHVhbAogICAgIC8vIHNjcm9sbCBvZiB0aGUgY29udGVudC4KICAgICB2aXJ0dWFsIHZv
aWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpID0gMDsKLSAgICBTY3JvbGxT
bmFwT2Zmc2V0c0luZm88TGF5b3V0VW5pdD4mIGVuc3VyZVNuYXBPZmZzZXRzSW5mbygpOwogCiAg
ICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IG1fc2Nyb2xsQW5pbWF0
b3I7CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIFNjcm9sbFNuYXBPZmZzZXRz
SW5mbzxMYXlvdXRVbml0PiYgZW5zdXJlU25hcE9mZnNldHNJbmZvKCk7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFNjcm9sbFNuYXBPZmZzZXRzSW5mbzxMYXlvdXRVbml0Pj4gbV9zbmFwT2Zmc2V0c0lu
Zm87CiAgICAgdW5zaWduZWQgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4IHsgMCB9
OwogICAgIHVuc2lnbmVkIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXggeyAwIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGUuaAppbmRleCAwYmNlNmI4YzQ3YWNmYjMxZWQ3NjViYjk4NjA5MTBhY2RlMmFhZDMw
Li5hZGY2ZTlhMjAzNWRlMDFiYmQ2YjNjNDI5MGY4NDdlYmMxODI4MjI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRl
LmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAKLSNp
bmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiTGF5b3V0UG9pbnQuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDMyNmUyOGU2MGM0NzhiM2Fh
ZDc2OWE2YzE0NWQzZTQ0YTEwMDU5ZDIuLmEzYTdkNTk1OWM2YTBlMzBkNWMzZTlkNWI1ZDQ1NDY2
MTQ3YjAxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAt
MTE3LDYgKzExNyw3IEBACiAjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNp
bmNsdWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRv
ci5oIgorI2luY2x1ZGUgIlNjcm9sbFNuYXBPZmZzZXRzSW5mby5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaCIKQEAgLTEzNSwxMCArMTM2LDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCIKLSNl
bmRpZgotCiAjZGVmaW5lIE1JTl9JTlRFUlNFQ1RfRk9SX1JFVkVBTCAzMgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXll
clRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHlJT1MubW0KaW5kZXggNjJhZDk4NTA2OWUyMTIzYWRjMzZiYzc4MWM3NmY1OTc2
MWI3ODQ2My4uZDgxODlmZGM4OTI3NGYwOWM4ZWIyNjRhOGM1ZGE1ZjQ1ODVkNWNkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlP
Uy5tbQpAQCAtNDEsNyArNDEsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZVRy
ZWUuaD4KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0jaW1wb3J0IDxXZWJDb3JlL0F4
aXNTY3JvbGxTbmFwT2Zmc2V0cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0
c0luZm8uaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsVHlwZXMuaD4KICNpbXBvcnQgPFdlYkNv
cmUvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlSU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5
ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCmluZGV4
IDRjMjg4ZTRiYWMxYjVlNDU5ZGVjNzRmYjNlM2I1YzhiNWJkY2Q4ZjcuLmFiMzc0NzIwYTMyODQ3
ZjdlNWNjNTdiYmM1Nzk3NGQxZTMwNDY1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUv
aW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KQEAgLTQ1LDcgKzQ1
LDYgQEAKICNpbXBvcnQgPHd0Zi9TZXRGb3JTY29wZS5oPgogCiAjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKLSNpbXBvcnQgPFdlYkNvcmUvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oPgogI2VuZGlmCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>