<?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>213815</bug_id>
          
          <creation_ts>2020-06-30 13:37:33 -0700</creation_ts>
          <short_desc>Rename ManifestParser.h/cpp to ApplicationCacheManifestParser.h/cpp to make it clear its not the ApplicationManifestParser (a different thing entirely).</short_desc>
          <delta_ts>2020-06-30 16:55:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1667716</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-30 13:37:33 -0700</bug_when>
    <thetext>Rename ManifestParser.h/cpp to ApplicationCacheManifestParser.h/cpp to make it clear its not the ApplicationManifestParser (a different thing entirely).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667718</commentid>
    <comment_count>1</comment_count>
      <attachid>403238</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-30 13:38:22 -0700</bug_when>
    <thetext>Created attachment 403238
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667748</commentid>
    <comment_count>2</comment_count>
      <attachid>403238</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-30 14:44:11 -0700</bug_when>
    <thetext>Comment on attachment 403238
Patch

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

&gt; Source/WebCore/loader/appcache/ApplicationCacheManifestParser.cpp:53
&gt; +template&lt;typename CharacterType&gt; static constexpr bool isManifestNewline(CharacterType character)

This seems like a pretty standard definition of isNewline. Just saying.

&gt; Source/WebCore/loader/appcache/ApplicationCacheManifestParser.h:36
&gt; +    FallbackURLVector fallbackURLs;

Seems a slight shame that we have to include ApplicationCache.h just to get the definition of this vector type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667749</commentid>
    <comment_count>3</comment_count>
      <attachid>403238</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-30 14:44:29 -0700</bug_when>
    <thetext>Comment on attachment 403238
Patch

Couldn’t set commit-queue+ without seeing more EWS results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667750</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-30 14:49:58 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 403238 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403238&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/appcache/ApplicationCacheManifestParser.cpp:53
&gt; &gt; +template&lt;typename CharacterType&gt; static constexpr bool isManifestNewline(CharacterType character)
&gt; 
&gt; This seems like a pretty standard definition of isNewline. Just saying.

You don&apos;t know about these newfangled emoji newlines in Unicode 12?

&gt; 
&gt; &gt; Source/WebCore/loader/appcache/ApplicationCacheManifestParser.h:36
&gt; &gt; +    FallbackURLVector fallbackURLs;
&gt; 
&gt; Seems a slight shame that we have to include ApplicationCache.h just to get
&gt; the definition of this vector type.

Yeah. That&apos;s silly. Will fix (just not in this rename, too scared of messing up svn add / svn removes right now).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667768</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-30 15:43:06 -0700</bug_when>
    <thetext>Committed r263775: &lt;https://trac.webkit.org/changeset/263775&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403238.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667769</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-30 15:44:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/64959544&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667790</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-30 16:55:02 -0700</bug_when>
    <thetext>Noticed some &quot;manfest&quot; in the patch instead of &quot;manifest&quot;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403238</attachid>
            <date>2020-06-30 13:38:22 -0700</date>
            <delta_ts>2020-06-30 15:43:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213815-20200630133821.patch</filename>
            <type>text/plain</type>
            <size>35868</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mzc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA2LTMwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgTWFuaWZlc3RQYXJzZXIu
aC9jcHAgdG8gQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmgvY3BwIHRvIG1ha2UgaXQg
Y2xlYXIgaXRzIG5vdCB0aGUgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlciAoYSBkaWZmZXJlbnQg
dGhpbmcgZW50aXJlbHkpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTM4MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdy
b3VwLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlm
ZXN0UGFyc2VyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L01hbmlmZXN0UGFyc2VyLmNwcC4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZU1hbmlmZXN0UGFyc2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5oLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9N
YW5pZmVzdFBhcnNlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL01h
bmlmZXN0UGFyc2VyLmg6IFJlbW92ZWQuCisKIDIwMjAtMDYtMzAgIFBlbmcgTGl1ICA8cGVuZy5s
aXU2QGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgdGhlIHN1cHBvcnQgb2YgRlVMTFNDUkVF
Tl9BUEkgaW4gV2ViS2l0VGVzdFJ1bm5lcgpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI2
Mzc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
NTg4LDExICsxNTg4LDExIEBAIGxvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAogbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCiBsb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZUdyb3VwLmNwcAogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0
LmNwcAorbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHAK
IGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCiBsb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlTG9hZGVyLmNwcAogbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAogbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0
aW9uQ2FjaGUuY3BwCi1sb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwCiAKIGxvYWRl
ci9hcmNoaXZlL0FyY2hpdmUuY3BwCiBsb2FkZXIvYXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDI2Mzc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTE2LDcgKzUxNiw3IEBACiAJ
CTFBOEY2QkJGMERCNTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEY2QkI0MERCNTVD
REMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9ICgpOyB9OyB9OwogCQkxQThGNkJDMTBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQThGNkJCNjBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRpb25DYWNoZVJl
c291cmNlLmggKi87IH07CiAJCTFBOEY2QkMzMERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBsaWNh
dGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQThGNkJCODBEQjU1Q0RDMDAxREI3OTQgLyogRE9NQXBwbGljYXRpb25DYWNoZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07Ci0JCTFBOEY2QkM2MERCNTVDREMwMDFE
Qjc5NCAvKiBNYW5pZmVzdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE4RjZCQkIwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2Vy
LmggKi87IH07CisJCTFBOEY2QkM2MERCNTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hl
TWFuaWZlc3RQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBOEY2QkJCMERCNTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlTWFuaWZl
c3RQYXJzZXIuaCAqLzsgfTsKIAkJMUE5MjdGRDIxNDE2QTE1QjAwM0E4M0M4IC8qIG5wYXBpLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkyN0ZDRjE0
MTZBMTVCMDAzQTgzQzggLyogbnBhcGkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxQTkyN0ZEMzE0MTZBMTVCMDAzQTgzQzggLyogbnBydW50aW1l
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkyN0ZE
MDE0MTZBMTVCMDAzQTgzQzggLyogbnBydW50aW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUE5MjdGRDQxNDE2QTE1QjAwM0E4M0M4IC8qIG5w
dHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
OTI3RkQxMTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYzMjQsOCArNjMyNCw4IEBACiAJCTFBOEY2
QkI3MERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBsaWNhdGlvbkNhY2hlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQThGNkJCODBEQjU1Q0RDMDAxREI3OTQgLyogRE9N
QXBwbGljYXRpb25DYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01B
cHBsaWNhdGlvbkNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOEY2QkI5
MERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBsaWNhdGlvbkNhY2hlLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBET01BcHBsaWNhdGlvbkNhY2hlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUE4RjZCQkEwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hbmlmZXN0UGFyc2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE4RjZCQkIwREI1NUNEQzAwMURCNzk0IC8q
IE1hbmlmZXN0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hbmlm
ZXN0UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBOEY2QkJBMERCNTVD
REMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFy
c2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUE4RjZCQkIwREI1NUNEQzAw
MURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MjdGQ0YxNDE2QTE1QjAwM0E4M0M4IC8qIG5w
YXBpLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG5wYXBpLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTI3RkQwMTQxNkExNUIwMDNBODNDOCAvKiBucHJ1bnRp
bWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbnBydW50aW1lLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTI3RkQxMTQxNkExNUIwMDNBODNDOCAvKiBucHR5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG5wdHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NTc0LDYgKzE3NTc0LDggQEAKIAkJCQkxQThGNkJC
NDBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRpb25DYWNoZUdyb3VwLmggKi8sCiAJCQkJMjRG
NTRFQUExMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAqLywKIAkJ
CQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLywK
KwkJCQkxQThGNkJCQTBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0
UGFyc2VyLmNwcCAqLywKKwkJCQkxQThGNkJCQjBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRp
b25DYWNoZU1hbmlmZXN0UGFyc2VyLmggKi8sCiAJCQkJMUE4RjZCQjUwREI1NUNEQzAwMURCNzk0
IC8qIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgKi8sCiAJCQkJMUE4RjZCQjYwREI1NUNE
QzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oICovLAogCQkJCTQxOTQ1Njk0
MjAzNTAyQTUwMDRCQTI3NyAvKiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VMb2FkZXIuY3BwICov
LApAQCAtMTc1ODMsOCArMTc1ODUsNiBAQAogCQkJCTFBOEY2QkI3MERCNTVDREMwMDFEQjc5NCAv
KiBET01BcHBsaWNhdGlvbkNhY2hlLmNwcCAqLywKIAkJCQkxQThGNkJCODBEQjU1Q0RDMDAxREI3
OTQgLyogRE9NQXBwbGljYXRpb25DYWNoZS5oICovLAogCQkJCTFBOEY2QkI5MERCNTVDREMwMDFE
Qjc5NCAvKiBET01BcHBsaWNhdGlvbkNhY2hlLmlkbCAqLywKLQkJCQkxQThGNkJCQTBEQjU1Q0RD
MDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuY3BwICovLAotCQkJCTFBOEY2QkJCMERCNTVDREMw
MDFEQjc5NCAvKiBNYW5pZmVzdFBhcnNlci5oICovLAogCQkJKTsKIAkJCXBhdGggPSBhcHBjYWNo
ZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yOTc3Nyw2ICsyOTc3Nyw3IEBACiAJ
CQkJMUE4RjZCQkQwREI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBOEY2QkJGMERCNTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hl
R3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTI0RjU0RUFEMTAxRkU5MTQwMDBBRTc0MSAvKiBB
cHBsaWNhdGlvbkNhY2hlSG9zdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE4RjZCQzYwREI1NUNE
QzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUE4RjZCQzEwREI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyQUFDNTkwREMyQTNCMTAwQTIwRDlBIC8qIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2M0JENEE1RjFGNzc4
RTlGMDA0Mzg3MjIgLyogQXBwbGljYXRpb25NYW5pZmVzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MjE3NSw3ICszMjE3Niw2IEBACiAJCQkJOTNBODA2MTcxRTAzQjUxQzAwOEExRjI2IC8qIExvbmdS
YW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZFRkFGMTIxRTVGQjlGMTAwRTdGMzRCIC8qIExv
d1Bvd2VyTW9kZU5vdGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QUU2QzkzQzFCRTBDNjAx
MDBFMTlFMDMgLyogTWFpblRocmVhZFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkx
QThGNkJDNjBEQjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUU0NTFDNjMyMjM5NDAzMUEwMDk5MzE5MCAvKiBNYXJnaW5UeXBlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0UxODY2NDUxRjcyRTVCNDAwQTBDQUI2IC8qIE1hcmtlZFRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzMzA5REY4MDk5RTY0OTIwMDU2RTU4MSAvKiBtYXJrdXAuaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHJldmlzaW9uIDI2Mzc1OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNh
Y2hlLmgiCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKKyNpbmNsdWRlICJBcHBs
aWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VMb2FkZXIuaCIK
ICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgpAQCAtNDIsNyArNDMsNiBAQAog
I2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJWYWx1ZXMu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJNYW5p
ZmVzdFBhcnNlci5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25TY2hlZHVsZXIuaCIKICNpbmNsdWRl
ICJOZXR3b3JrTG9hZE1ldHJpY3MuaCIKICNpbmNsdWRlICJQYWdlLmgiCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZU1hbmlmZXN0UGFyc2VyLmNwcAkocmV2aXNpb24gMjYzNzU4KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwOjI2Mzc1OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk1hbmlmZXN0UGFyc2VyLmgiCisKKyNpbmNsdWRlICJQYXJzaW5nVXRpbGl0aWVz
LmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgPHd0Zi9VUkwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nVmlldy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xh
c3MgQXBwbGljYXRpb25DYWNoZVBhcnNlck1vZGUgeyBFeHBsaWNpdCwgRmFsbGJhY2ssIE9ubGlu
ZUFsbG93bGlzdCwgVW5rbm93biB9OworCitzdGF0aWMgU3RyaW5nVmlldyBtYW5pZmVzdFBhdGgo
Y29uc3QgVVJMJiBtYW5pZmVzdFVSTCkKK3sKKyAgICBhdXRvIG1hbmlmZXN0UGF0aCA9IG1hbmlm
ZXN0VVJMLnBhdGgoKTsKKyAgICBBU1NFUlQobWFuaWZlc3RQYXRoWzBdID09ICcvJyk7CisgICAg
bWFuaWZlc3RQYXRoID0gbWFuaWZlc3RQYXRoLnN1YnN0cmluZygwLCBtYW5pZmVzdFBhdGgucmV2
ZXJzZUZpbmQoJy8nKSArIDEpOworICAgIEFTU0VSVChtYW5pZmVzdFBhdGhbMF0gPT0gbWFuaWZl
c3RQYXRoW21hbmlmZXN0UGF0aC5sZW5ndGgoKSAtIDFdKTsKKyAgICByZXR1cm4gbWFuaWZlc3RQ
YXRoOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNNYW5pZmVzdFdoaXRlc3BhY2UoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpCit7
CisgICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09ICdcdCc7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c01hbmlmZXN0TmV3bGluZShDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4g
Y2hhcmFjdGVyID09ICdcbicgfHwgY2hhcmFjdGVyID09ICdccic7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc01hbmlmZXN0V2hp
dGVzcGFjZU9yTmV3bGluZShDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4g
aXNNYW5pZmVzdFdoaXRlc3BhY2UoY2hhcmFjdGVyKSB8fCBpc01hbmlmZXN0TmV3bGluZShjaGFy
YWN0ZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgVVJM
IG1ha2VNYW5pZmVzdFVSTChjb25zdCBVUkwmIG1hbmlmZXN0VVJMLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzdGFydCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQoreworICAgIFVSTCB1cmwobWFu
aWZlc3RVUkwsIFN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpKTsKKyAgICB1cmwucmVtb3ZlRnJh
Z21lbnRJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIHVybDsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIGNhY2hlTWFu
aWZlc3RJZGVudGlmaWVyW10gPSB7ICdDJywgJ0EnLCAnQycsICdIJywgJ0UnLCAnICcsICdNJywg
J0EnLCAnTicsICdJJywgJ0YnLCAnRScsICdTJywgJ1QnIH07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBzdGF0aWMgY29uc3RleHByIENoYXJhY3RlclR5cGUgY2FjaGVNb2RlSWRl
bnRpZmllcltdID0geyAnQycsICdBJywgJ0MnLCAnSCcsICdFJyB9OwordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIGZhbGxiYWNr
TW9kZUlkZW50aWZpZXJbXSA9IHsgJ0YnLCAnQScsICdMJywgJ0wnLCAnQicsICdBJywgJ0MnLCAn
SycgfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBjb25zdGV4cHIg
Q2hhcmFjdGVyVHlwZSBuZXR3b3JrTW9kZUlkZW50aWZpZXJbXSA9IHsgJ04nLCAnRScsICdUJywg
J1cnLCAnTycsICdSJywgJ0snIH07CisKK09wdGlvbmFsPEFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVz
dD4gcGFyc2VBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QoY29uc3QgVVJMJiBtYW5pZmVzdFVSTCwg
Y29uc3QgU3RyaW5nJiBtYW5pZmVzdE1JTUVUeXBlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKQoreworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciBjYWNoZU1hbmlmZXN0TUlN
RVR5cGVbXSA9ICJ0ZXh0L2NhY2hlLW1hbmlmZXN0IjsKKyAgICBib29sIGFsbG93RmFsbGJhY2tO
YW1lc3BhY2VPdXRzaWRlTWFuZmVzdFBhdGggPSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShtYW5pZmVzdE1JTUVUeXBlLCBjYWNoZU1hbmlmZXN0TUlNRVR5cGUpOworICAgIGF1dG8gbWFu
aWZlc3RQYXRoID0gV2ViQ29yZTo6bWFuaWZlc3RQYXRoKG1hbmlmZXN0VVJMKTsKKworICAgIGF1
dG8gbWFuaWZlc3RTdHJpbmcgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoQVNDSUlMaXRl
cmFsOjpmcm9tTGl0ZXJhbFVuc2FmZShjYWNoZU1hbmlmZXN0TUlNRVR5cGUpLCAiVVRGLTgiKS0+
ZGVjb2RlQW5kRmx1c2goZGF0YSwgbGVuZ3RoKTsKKworICAgIHJldHVybiByZWFkQ2hhcmFjdGVy
c0ZvclBhcnNpbmcobWFuaWZlc3RTdHJpbmcsIFsmXShhdXRvIGJ1ZmZlcikgLT4gT3B0aW9uYWw8
QXBwbGljYXRpb25DYWNoZU1hbmlmZXN0PiB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUg
PSB0eXBlbmFtZSBkZWNsdHlwZShidWZmZXIpOjpDaGFyYWN0ZXJUeXBlOworICAgIAorICAgICAg
ICBBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QgbWFuaWZlc3Q7CisgICAgICAgIGF1dG8gbW9kZSA9
IEFwcGxpY2F0aW9uQ2FjaGVQYXJzZXJNb2RlOjpFeHBsaWNpdDsKKworICAgICAgICAvLyBMb29r
IGZvciB0aGUgbWFnaWMgc2lnbmF0dXJlOiAiXlx4RkVGRj9DQUNIRSBNQU5JRkVTVFsgXHRdPyIg
KHRoZSBCT00gaXMgcmVtb3ZlZCBieSBUZXh0UmVzb3VyY2VEZWNvZGVyKS4KKyAgICAgICAgLy8g
RXhhbXBsZTogIkNBQ0hFIE1BTklGRVNUICNjb21tZW50IiBpcyBhIHZhbGlkIHNpZ25hdHVyZS4K
KyAgICAgICAgLy8gRXhhbXBsZTogIkNBQ0hFIE1BTklGRVNUO1YyIiBpcyBub3QuCisgICAgICAg
IGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KGJ1ZmZlciwgY2FjaGVNYW5pZmVzdElkZW50aWZp
ZXI8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAKKyAgICAgICAgaWYgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgIWlzTWFu
aWZlc3RXaGl0ZXNwYWNlT3JOZXdsaW5lKCpidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgICAgICAvLyBTa2lwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisg
ICAgICAgIHNraXBVbnRpbDxDaGFyYWN0ZXJUeXBlLCBpc01hbmlmZXN0TmV3bGluZT4oYnVmZmVy
KTsKKworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNl
CisgICAgICAgICAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNNYW5pZmVzdFdoaXRlc3Bh
Y2VPck5ld2xpbmU+KGJ1ZmZlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChidWZm
ZXIuYXRFbmQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgYXV0byBsaW5lU3RhcnQgPSBidWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gRmluZCB0aGUgZW5kIG9mIHRoZSBsaW5lCisgICAgICAgICAgICBza2lw
VW50aWw8Q2hhcmFjdGVyVHlwZSwgaXNNYW5pZmVzdE5ld2xpbmU+KGJ1ZmZlcik7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIExpbmUgaXMgYSBjb21tZW50LCBza2lwIHRvIHRoZSBuZXh0
IGxpbmUuCisgICAgICAgICAgICBpZiAoKmxpbmVTdGFydCA9PSAnIycpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdldCByaWQgb2YgdHJh
aWxpbmcgd2hpdGVzcGFjZQorICAgICAgICAgICAgYXV0byBsaW5lRW5kID0gYnVmZmVyLnBvc2l0
aW9uKCkgLSAxOworICAgICAgICAgICAgd2hpbGUgKGxpbmVFbmQgPiBsaW5lU3RhcnQgJiYgaXNN
YW5pZmVzdFdoaXRlc3BhY2UoKmxpbmVFbmQpKQorICAgICAgICAgICAgICAgIC0tbGluZUVuZDsK
KworICAgICAgICAgICAgYXV0byBsaW5lQnVmZmVyID0gU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGxp
bmVTdGFydCwgbGluZUVuZCArIDEgfTsKKworICAgICAgICAgICAgaWYgKGxpbmVCdWZmZXJbbGlu
ZUJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSAtIDFdID09ICc6JykgeworICAgICAgICAgICAgICAg
IGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkobGluZUJ1ZmZlciwgY2FjaGVNb2RlSWRlbnRpZmll
cjxDaGFyYWN0ZXJUeXBlPikgJiYgbGluZUJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA9PSAxKSB7
CisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBBcHBsaWNhdGlvbkNhY2hlUGFyc2VyTW9kZTo6
RXhwbGljaXQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KGxpbmVCdWZmZXIs
IGZhbGxiYWNrTW9kZUlkZW50aWZpZXI8Q2hhcmFjdGVyVHlwZT4pICYmIGxpbmVCdWZmZXIubGVu
Z3RoUmVtYWluaW5nKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBtb2RlID0gQXBwbGlj
YXRpb25DYWNoZVBhcnNlck1vZGU6OkZhbGxiYWNrOworICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNraXBDaGFyYWN0
ZXJzRXhhY3RseShsaW5lQnVmZmVyLCBuZXR3b3JrTW9kZUlkZW50aWZpZXI8Q2hhcmFjdGVyVHlw
ZT4pICYmIGxpbmVCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPT0gMSkgeworICAgICAgICAgICAg
ICAgICAgICBtb2RlID0gQXBwbGljYXRpb25DYWNoZVBhcnNlck1vZGU6Ok9ubGluZUFsbG93bGlz
dDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gSWYgdGhlIGxpbmUgKGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgd2hp
dGVzcGFjZSkgZW5kcyB3aXRoIGEgJzonIGFuZCBpc24ndCBvbmUgb2YgdGhlIGtub3duIG1vZGUK
KyAgICAgICAgICAgICAgICAvLyBoZWFkZXJzLCB0cmFuc2l0aW9uIHRvIHRoZSAnVW5rbm93bicg
bW9kZS4KKyAgICAgICAgICAgICAgICBtb2RlID0gQXBwbGljYXRpb25DYWNoZVBhcnNlck1vZGU6
OlVua25vd247CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
CisgICAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQXBwbGljYXRp
b25DYWNoZVBhcnNlck1vZGU6OlVua25vd246CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZVBhcnNlck1vZGU6
OkV4cGxpY2l0OiB7CisgICAgICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBh
cmF0aW5nIHRoZSBVUkwgZnJvbSBzdWJzZXF1ZW50IGlnbm9yZWQgdG9rZW5zLgorICAgICAgICAg
ICAgICAgIHNraXBVbnRpbDxDaGFyYWN0ZXJUeXBlLCBpc01hbmlmZXN0V2hpdGVzcGFjZT4obGlu
ZUJ1ZmZlcik7CisKKyAgICAgICAgICAgICAgICBhdXRvIHVybCA9IG1ha2VNYW5pZmVzdFVSTCht
YW5pZmVzdFVSTCwgbGluZVN0YXJ0LCBsaW5lQnVmZmVyLnBvc2l0aW9uKCkpOworICAgICAgICAg
ICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVND
SUlDYXNlKHVybC5wcm90b2NvbCgpLCBtYW5pZmVzdFVSTC5wcm90b2NvbCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKG1hbmlmZXN0VVJMLnByb3RvY29sSXMoImh0dHBzIikgJiYgIXByb3RvY29sSG9zdEFuZFBv
cnRBcmVFcXVhbChtYW5pZmVzdFVSTCwgdXJsKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbWFuaWZlc3QuZXhwbGljaXRV
UkxzLmFkZCh1cmwuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVQYXJzZXJNb2RlOjpP
bmxpbmVBbGxvd2xpc3Q6IHsKKyAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNl
IHNlcGFyYXRpbmcgdGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCisgICAg
ICAgICAgICAgICAgc2tpcFVudGlsPENoYXJhY3RlclR5cGUsIGlzTWFuaWZlc3RXaGl0ZXNwYWNl
PihsaW5lQnVmZmVyKTsKKworICAgICAgICAgICAgICAgIGlmIChsaW5lQnVmZmVyLnBvc2l0aW9u
KCkgLSBsaW5lU3RhcnQgPT0gMSAmJiAqbGluZVN0YXJ0ID09ICcqJykgeworICAgICAgICAgICAg
ICAgICAgICAvLyBXaWxkY2FyZCB3YXMgZm91bmQuCisgICAgICAgICAgICAgICAgICAgIG1hbmlm
ZXN0LmFsbG93QWxsTmV0d29ya1JlcXVlc3RzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGF1dG8gdXJsID0gbWFrZU1hbmlmZXN0VVJMKG1hbmlmZXN0VVJMLCBsaW5lU3RhcnQs
IGxpbmVCdWZmZXIucG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKCF1cmwuaXNWYWxp
ZCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UodXJsLnByb3RvY29sKCks
IG1hbmlmZXN0VVJMLnByb3RvY29sKCkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgICAgIG1hbmlmZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVuZCh1cmwp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVQYXJzZXJNb2RlOjpGYWxsYmFjazog
eworICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUg
dHdvIFVSTHMKKyAgICAgICAgICAgICAgICBza2lwVW50aWw8Q2hhcmFjdGVyVHlwZSwgaXNNYW5p
ZmVzdFdoaXRlc3BhY2U+KGxpbmVCdWZmZXIpOworCisgICAgICAgICAgICAgICAgaWYgKGxpbmVC
dWZmZXIuYXRFbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSB3YXMgbm8gd2hp
dGVzcGFjZSBzZXBhcmF0aW5nIHRoZSBVUkxzLgorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhdXRvIG5hbWVzcGFjZVVS
TCA9IG1ha2VNYW5pZmVzdFVSTChtYW5pZmVzdFVSTCwgbGluZVN0YXJ0LCBsaW5lQnVmZmVyLnBv
c2l0aW9uKCkpOworICAgICAgICAgICAgICAgIGlmICghbmFtZXNwYWNlVVJMLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBpZiAoIXBy
b3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVSTCwgbmFtZXNwYWNlVVJMKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAvLyBBbHRob3Vn
aCA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb2ZmbGluZS5odG1sI3Bh
cnNpbmctY2FjaGUtbWFuaWZlc3RzPiAoMDcvMDYvMjAxNykgc2FpZHMKKyAgICAgICAgICAgICAg
ICAvLyB0aGF0IHdlIHNob3VsZCBhbHdheXMgcHJlZml4IG1hdGNoIHRoZSBtYW5pZmVzdCBwYXRo
IHdlIG9ubHkgZG8gc28gaWYgdGhlIG1hbmlmZXN0IHdhcyBzZXJ2ZWQgd2l0aCBhIG5vbi0KKyAg
ICAgICAgICAgICAgICAvLyBzdGFuZGFyZCBIVFRQIENvbnRlbnQtVHlwZSBoZWFkZXIgZm9yIHdl
YiBjb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgIGlmICghYWxsb3dGYWxsYmFja05hbWVz
cGFjZU91dHNpZGVNYW5mZXN0UGF0aCAmJiAhbmFtZXNwYWNlVVJMLnBhdGgoKS5zdGFydHNXaXRo
KG1hbmlmZXN0UGF0aCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICAgICAgLy8gU2tpcCB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgZmFsbGJhY2sgbmFtZXNwYWNl
IGZyb20gVVJMLgorICAgICAgICAgICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc01h
bmlmZXN0V2hpdGVzcGFjZT4obGluZUJ1ZmZlcik7CisKKyAgICAgICAgICAgICAgICBhdXRvIGZh
bGxiYWNrU3RhcnQgPSBsaW5lQnVmZmVyLnBvc2l0aW9uKCk7CisKKyAgICAgICAgICAgICAgICAv
LyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcgdGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQg
aWdub3JlZCB0b2tlbnMuCisgICAgICAgICAgICAgICAgc2tpcFVudGlsPENoYXJhY3RlclR5cGUs
IGlzTWFuaWZlc3RXaGl0ZXNwYWNlPihsaW5lQnVmZmVyKTsKKworICAgICAgICAgICAgICAgIGF1
dG8gZmFsbGJhY2tVUkwgPSBtYWtlTWFuaWZlc3RVUkwobWFuaWZlc3RVUkwsIGZhbGxiYWNrU3Rh
cnQsIGxpbmVCdWZmZXIucG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKCFmYWxsYmFj
a1VSTC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobWFuaWZlc3RVUkwsIGZh
bGxiYWNrVVJMKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
ICAgICBtYW5pZmVzdC5mYWxsYmFja1VSTHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5hbWVzcGFj
ZVVSTCwgZmFsbGJhY2tVUkwpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWFuaWZlc3Q7CisgICAg
fSk7Cit9CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCShy
ZXZpc2lvbiAyNjM3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQs
NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNYW5pZmVzdFBhcnNl
ci5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5oIgogCiAjaW5j
bHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIu
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
TWFuaWZlc3RQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmgJKHJldmlzaW9uIDI2Mzc1OCkJ
KGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL01hbmlmZXN0UGFyc2VyLmg6MjYz
NzU4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVN
YW5pZmVzdFBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0IHsK
KyAgICBWZWN0b3I8VVJMPiBvbmxpbmVBbGxvd2VkVVJMczsKKyAgICBIYXNoU2V0PFN0cmluZz4g
ZXhwbGljaXRVUkxzOworICAgIEZhbGxiYWNrVVJMVmVjdG9yIGZhbGxiYWNrVVJMczsKKyAgICBi
b29sIGFsbG93QWxsTmV0d29ya1JlcXVlc3RzIHsgZmFsc2UgfTsgLy8gV2lsZGNhcmQgZm91bmQg
aW4gTkVUV09SSyBzZWN0aW9uLgorfTsKKworT3B0aW9uYWw8QXBwbGljYXRpb25DYWNoZU1hbmlm
ZXN0PiBwYXJzZUFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdChjb25zdCBVUkwmIG1hbmlmZXN0VVJM
LCBjb25zdCBTdHJpbmcmIG1hbmlmZXN0TUlNRVR5cGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFy
c2VyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRp
dmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL01hbmlmZXN0UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwCShyZXZpc2lvbiAyNjM3
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3Bw
CShub25leGlzdGVudCkKQEAgLTEsMjM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiTWFuaWZlc3RQYXJzZXIuaCIKLQotI2luY2x1ZGUgIlBhcnNpbmdVdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSA8d3RmL1VSTC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdWaWV3Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBjbGFzcyBBcHBs
aWNhdGlvbkNhY2hlUGFyc2VyTW9kZSB7IEV4cGxpY2l0LCBGYWxsYmFjaywgT25saW5lQWxsb3ds
aXN0LCBVbmtub3duIH07Ci0KLXN0YXRpYyBTdHJpbmdWaWV3IG1hbmlmZXN0UGF0aChjb25zdCBV
UkwmIG1hbmlmZXN0VVJMKQotewotICAgIGF1dG8gbWFuaWZlc3RQYXRoID0gbWFuaWZlc3RVUkwu
cGF0aCgpOwotICAgIEFTU0VSVChtYW5pZmVzdFBhdGhbMF0gPT0gJy8nKTsKLSAgICBtYW5pZmVz
dFBhdGggPSBtYW5pZmVzdFBhdGguc3Vic3RyaW5nKDAsIG1hbmlmZXN0UGF0aC5yZXZlcnNlRmlu
ZCgnLycpICsgMSk7Ci0gICAgQVNTRVJUKG1hbmlmZXN0UGF0aFswXSA9PSBtYW5pZmVzdFBhdGhb
bWFuaWZlc3RQYXRoLmxlbmd0aCgpIC0gMV0pOwotICAgIHJldHVybiBtYW5pZmVzdFBhdGg7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc01hbmlmZXN0V2hpdGVzcGFjZShDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikKLXsKLSAgICBy
ZXR1cm4gY2hhcmFjdGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JzsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGNvbnN0ZXhwciBib29sIGlzTWFuaWZl
c3ROZXdsaW5lKENoYXJhY3RlclR5cGUgY2hhcmFjdGVyKQotewotICAgIHJldHVybiBjaGFyYWN0
ZXIgPT0gJ1xuJyB8fCBjaGFyYWN0ZXIgPT0gJ1xyJzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljIGNvbnN0ZXhwciBib29sIGlzTWFuaWZlc3RXaGl0ZXNwYWNl
T3JOZXdsaW5lKENoYXJhY3RlclR5cGUgY2hhcmFjdGVyKQotewotICAgIHJldHVybiBpc01hbmlm
ZXN0V2hpdGVzcGFjZShjaGFyYWN0ZXIpIHx8IGlzTWFuaWZlc3ROZXdsaW5lKGNoYXJhY3Rlcik7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBVUkwgbWFrZU1h
bmlmZXN0VVJMKGNvbnN0IFVSTCYgbWFuaWZlc3RVUkwsIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0
YXJ0LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCi17Ci0gICAgVVJMIHVybChtYW5pZmVzdFVS
TCwgU3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCkpOwotICAgIHVybC5yZW1vdmVGcmFnbWVudElk
ZW50aWZpZXIoKTsKLSAgICByZXR1cm4gdXJsOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgY29uc3RleHByIENoYXJhY3RlclR5cGUgY2FjaGVNYW5pZmVzdElk
ZW50aWZpZXJbXSA9IHsgJ0MnLCAnQScsICdDJywgJ0gnLCAnRScsICcgJywgJ00nLCAnQScsICdO
JywgJ0knLCAnRicsICdFJywgJ1MnLCAnVCcgfTsKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBjYWNoZU1vZGVJZGVudGlmaWVy
W10gPSB7ICdDJywgJ0EnLCAnQycsICdIJywgJ0UnIH07Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgY29uc3RleHByIENoYXJhY3RlclR5cGUgZmFsbGJhY2tNb2RlSWRl
bnRpZmllcltdID0geyAnRicsICdBJywgJ0wnLCAnTCcsICdCJywgJ0EnLCAnQycsICdLJyB9Owot
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGNvbnN0ZXhwciBDaGFyYWN0
ZXJUeXBlIG5ldHdvcmtNb2RlSWRlbnRpZmllcltdID0geyAnTicsICdFJywgJ1QnLCAnVycsICdP
JywgJ1InLCAnSycgfTsKLQotT3B0aW9uYWw8QXBwbGljYXRpb25DYWNoZU1hbmlmZXN0PiBwYXJz
ZUFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdChjb25zdCBVUkwmIG1hbmlmZXN0VVJMLCBjb25zdCBT
dHJpbmcmIG1hbmlmZXN0TUlNRVR5cGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyIGNhY2hlTWFuaWZlc3RNSU1FVHlwZVtd
ID0gInRleHQvY2FjaGUtbWFuaWZlc3QiOwotICAgIGJvb2wgYWxsb3dGYWxsYmFja05hbWVzcGFj
ZU91dHNpZGVNYW5mZXN0UGF0aCA9IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1hbmlm
ZXN0TUlNRVR5cGUsIGNhY2hlTWFuaWZlc3RNSU1FVHlwZSk7Ci0gICAgYXV0byBtYW5pZmVzdFBh
dGggPSBXZWJDb3JlOjptYW5pZmVzdFBhdGgobWFuaWZlc3RVUkwpOwotCi0gICAgYXV0byBtYW5p
ZmVzdFN0cmluZyA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShBU0NJSUxpdGVyYWw6OmZy
b21MaXRlcmFsVW5zYWZlKGNhY2hlTWFuaWZlc3RNSU1FVHlwZSksICJVVEYtOCIpLT5kZWNvZGVB
bmRGbHVzaChkYXRhLCBsZW5ndGgpOwotCi0gICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9yUGFy
c2luZyhtYW5pZmVzdFN0cmluZywgWyZdKGF1dG8gYnVmZmVyKSAtPiBPcHRpb25hbDxBcHBsaWNh
dGlvbkNhY2hlTWFuaWZlc3Q+IHsKLSAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVu
YW1lIGRlY2x0eXBlKGJ1ZmZlcik6OkNoYXJhY3RlclR5cGU7Ci0gICAgCi0gICAgICAgIEFwcGxp
Y2F0aW9uQ2FjaGVNYW5pZmVzdCBtYW5pZmVzdDsKLSAgICAgICAgYXV0byBtb2RlID0gQXBwbGlj
YXRpb25DYWNoZVBhcnNlck1vZGU6OkV4cGxpY2l0OwotCi0gICAgICAgIC8vIExvb2sgZm9yIHRo
ZSBtYWdpYyBzaWduYXR1cmU6ICJeXHhGRUZGP0NBQ0hFIE1BTklGRVNUWyBcdF0/IiAodGhlIEJP
TSBpcyByZW1vdmVkIGJ5IFRleHRSZXNvdXJjZURlY29kZXIpLgotICAgICAgICAvLyBFeGFtcGxl
OiAiQ0FDSEUgTUFOSUZFU1QgI2NvbW1lbnQiIGlzIGEgdmFsaWQgc2lnbmF0dXJlLgotICAgICAg
ICAvLyBFeGFtcGxlOiAiQ0FDSEUgTUFOSUZFU1Q7VjIiIGlzIG5vdC4KLSAgICAgICAgaWYgKCFz
a2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCBjYWNoZU1hbmlmZXN0SWRlbnRpZmllcjxDaGFy
YWN0ZXJUeXBlPikpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIAotICAg
ICAgICBpZiAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhaXNNYW5pZmVzdFdo
aXRlc3BhY2VPck5ld2xpbmUoKmJ1ZmZlcikpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgICAgIC8vIFNraXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KLSAgICAgICAg
c2tpcFVudGlsPENoYXJhY3RlclR5cGUsIGlzTWFuaWZlc3ROZXdsaW5lPihidWZmZXIpOwotCi0g
ICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2UKLSAgICAg
ICAgICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc01hbmlmZXN0V2hpdGVzcGFjZU9yTmV3
bGluZT4oYnVmZmVyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGJ1ZmZlci5hdEVu
ZCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBh
dXRvIGxpbmVTdGFydCA9IGJ1ZmZlci5wb3NpdGlvbigpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBGaW5kIHRoZSBlbmQgb2YgdGhlIGxpbmUKLSAgICAgICAgICAgIHNraXBVbnRpbDxD
aGFyYWN0ZXJUeXBlLCBpc01hbmlmZXN0TmV3bGluZT4oYnVmZmVyKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gTGluZSBpcyBhIGNvbW1lbnQsIHNraXAgdG8gdGhlIG5leHQgbGluZS4K
LSAgICAgICAgICAgIGlmICgqbGluZVN0YXJ0ID09ICcjJykKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IHJpZCBvZiB0cmFpbGluZyB3
aGl0ZXNwYWNlCi0gICAgICAgICAgICBhdXRvIGxpbmVFbmQgPSBidWZmZXIucG9zaXRpb24oKSAt
IDE7Ci0gICAgICAgICAgICB3aGlsZSAobGluZUVuZCA+IGxpbmVTdGFydCAmJiBpc01hbmlmZXN0
V2hpdGVzcGFjZSgqbGluZUVuZCkpCi0gICAgICAgICAgICAgICAgLS1saW5lRW5kOwotCi0gICAg
ICAgICAgICBhdXRvIGxpbmVCdWZmZXIgPSBTdHJpbmdQYXJzaW5nQnVmZmVyIHsgbGluZVN0YXJ0
LCBsaW5lRW5kICsgMSB9OwotCi0gICAgICAgICAgICBpZiAobGluZUJ1ZmZlcltsaW5lQnVmZmVy
Lmxlbmd0aFJlbWFpbmluZygpIC0gMV0gPT0gJzonKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNr
aXBDaGFyYWN0ZXJzRXhhY3RseShsaW5lQnVmZmVyLCBjYWNoZU1vZGVJZGVudGlmaWVyPENoYXJh
Y3RlclR5cGU+KSAmJiBsaW5lQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpID09IDEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbW9kZSA9IEFwcGxpY2F0aW9uQ2FjaGVQYXJzZXJNb2RlOjpFeHBsaWNp
dDsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkobGluZUJ1ZmZlciwgZmFsbGJh
Y2tNb2RlSWRlbnRpZmllcjxDaGFyYWN0ZXJUeXBlPikgJiYgbGluZUJ1ZmZlci5sZW5ndGhSZW1h
aW5pbmcoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1vZGUgPSBBcHBsaWNhdGlvbkNh
Y2hlUGFyc2VyTW9kZTo6RmFsbGJhY2s7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFj
dGx5KGxpbmVCdWZmZXIsIG5ldHdvcmtNb2RlSWRlbnRpZmllcjxDaGFyYWN0ZXJUeXBlPikgJiYg
bGluZUJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1vZGUgPSBBcHBsaWNhdGlvbkNhY2hlUGFyc2VyTW9kZTo6T25saW5lQWxsb3dsaXN0OwotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgbGluZSAoZXhjbHVkaW5nIHRoZSB0cmFpbGluZyB3aGl0ZXNwYWNl
KSBlbmRzIHdpdGggYSAnOicgYW5kIGlzbid0IG9uZSBvZiB0aGUga25vd24gbW9kZQotICAgICAg
ICAgICAgICAgIC8vIGhlYWRlcnMsIHRyYW5zaXRpb24gdG8gdGhlICdVbmtub3duJyBtb2RlLgot
ICAgICAgICAgICAgICAgIG1vZGUgPSBBcHBsaWNhdGlvbkNhY2hlUGFyc2VyTW9kZTo6VW5rbm93
bjsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAKLSAgICAg
ICAgICAgIHN3aXRjaCAobW9kZSkgewotICAgICAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hl
UGFyc2VyTW9kZTo6VW5rbm93bjoKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlUGFyc2VyTW9kZTo6RXhwbGlj
aXQ6IHsKLSAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB3aGl0ZXNwYWNlIHNlcGFyYXRpbmcg
dGhlIFVSTCBmcm9tIHN1YnNlcXVlbnQgaWdub3JlZCB0b2tlbnMuCi0gICAgICAgICAgICAgICAg
c2tpcFVudGlsPENoYXJhY3RlclR5cGUsIGlzTWFuaWZlc3RXaGl0ZXNwYWNlPihsaW5lQnVmZmVy
KTsKLQotICAgICAgICAgICAgICAgIGF1dG8gdXJsID0gbWFrZU1hbmlmZXN0VVJMKG1hbmlmZXN0
VVJMLCBsaW5lU3RhcnQsIGxpbmVCdWZmZXIucG9zaXRpb24oKSk7Ci0gICAgICAgICAgICAgICAg
aWYgKCF1cmwuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
dXJsLnByb3RvY29sKCksIG1hbmlmZXN0VVJMLnByb3RvY29sKCkpKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobWFu
aWZlc3RVUkwucHJvdG9jb2xJcygiaHR0cHMiKSAmJiAhcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVx
dWFsKG1hbmlmZXN0VVJMLCB1cmwpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtYW5pZmVzdC5leHBsaWNpdFVSTHMuYWRk
KHVybC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZVBhcnNlck1vZGU6Ok9ubGluZUFs
bG93bGlzdDogewotICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIHdoaXRlc3BhY2Ugc2VwYXJh
dGluZyB0aGUgVVJMIGZyb20gc3Vic2VxdWVudCBpZ25vcmVkIHRva2Vucy4KLSAgICAgICAgICAg
ICAgICBza2lwVW50aWw8Q2hhcmFjdGVyVHlwZSwgaXNNYW5pZmVzdFdoaXRlc3BhY2U+KGxpbmVC
dWZmZXIpOwotCi0gICAgICAgICAgICAgICAgaWYgKGxpbmVCdWZmZXIucG9zaXRpb24oKSAtIGxp
bmVTdGFydCA9PSAxICYmICpsaW5lU3RhcnQgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFdpbGRjYXJkIHdhcyBmb3VuZC4KLSAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3QuYWxs
b3dBbGxOZXR3b3JrUmVxdWVzdHMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
YXV0byB1cmwgPSBtYWtlTWFuaWZlc3RVUkwobWFuaWZlc3RVUkwsIGxpbmVTdGFydCwgbGluZUJ1
ZmZlci5wb3NpdGlvbigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2woKSwgbWFuaWZl
c3RVUkwucHJvdG9jb2woKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICAgICAgbWFuaWZlc3Qub25saW5lQWxsb3dlZFVSTHMuYXBwZW5kKHVybCk7Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZVBhcnNlck1vZGU6OkZhbGxiYWNrOiB7Ci0gICAg
ICAgICAgICAgICAgLy8gTG9vayBmb3Igd2hpdGVzcGFjZSBzZXBhcmF0aW5nIHRoZSB0d28gVVJM
cwotICAgICAgICAgICAgICAgIHNraXBVbnRpbDxDaGFyYWN0ZXJUeXBlLCBpc01hbmlmZXN0V2hp
dGVzcGFjZT4obGluZUJ1ZmZlcik7Ci0KLSAgICAgICAgICAgICAgICBpZiAobGluZUJ1ZmZlci5h
dEVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBubyB3aGl0ZXNwYWNl
IHNlcGFyYXRpbmcgdGhlIFVSTHMuCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGF1dG8gbmFtZXNwYWNlVVJMID0gbWFr
ZU1hbmlmZXN0VVJMKG1hbmlmZXN0VVJMLCBsaW5lU3RhcnQsIGxpbmVCdWZmZXIucG9zaXRpb24o
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFuYW1lc3BhY2VVUkwuaXNWYWxpZCgpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIGlmICghcHJvdG9jb2xI
b3N0QW5kUG9ydEFyZUVxdWFsKG1hbmlmZXN0VVJMLCBuYW1lc3BhY2VVUkwpKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIC8vIEFsdGhvdWdoIDxodHRw
czovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vZmZsaW5lLmh0bWwjcGFyc2luZy1j
YWNoZS1tYW5pZmVzdHM+ICgwNy8wNi8yMDE3KSBzYWlkcwotICAgICAgICAgICAgICAgIC8vIHRo
YXQgd2Ugc2hvdWxkIGFsd2F5cyBwcmVmaXggbWF0Y2ggdGhlIG1hbmlmZXN0IHBhdGggd2Ugb25s
eSBkbyBzbyBpZiB0aGUgbWFuaWZlc3Qgd2FzIHNlcnZlZCB3aXRoIGEgbm9uLQotICAgICAgICAg
ICAgICAgIC8vIHN0YW5kYXJkIEhUVFAgQ29udGVudC1UeXBlIGhlYWRlciBmb3Igd2ViIGNvbXBh
dGliaWxpdHkuCi0gICAgICAgICAgICAgICAgaWYgKCFhbGxvd0ZhbGxiYWNrTmFtZXNwYWNlT3V0
c2lkZU1hbmZlc3RQYXRoICYmICFuYW1lc3BhY2VVUkwucGF0aCgpLnN0YXJ0c1dpdGgobWFuaWZl
c3RQYXRoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBTa2lwIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyBmYWxsYmFjayBuYW1lc3BhY2UgZnJvbSBV
UkwuCi0gICAgICAgICAgICAgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzTWFuaWZlc3RX
aGl0ZXNwYWNlPihsaW5lQnVmZmVyKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gZmFsbGJhY2tT
dGFydCA9IGxpbmVCdWZmZXIucG9zaXRpb24oKTsKLQotICAgICAgICAgICAgICAgIC8vIExvb2sg
Zm9yIHdoaXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUgVVJMIGZyb20gc3Vic2VxdWVudCBpZ25vcmVk
IHRva2Vucy4KLSAgICAgICAgICAgICAgICBza2lwVW50aWw8Q2hhcmFjdGVyVHlwZSwgaXNNYW5p
ZmVzdFdoaXRlc3BhY2U+KGxpbmVCdWZmZXIpOwotCi0gICAgICAgICAgICAgICAgYXV0byBmYWxs
YmFja1VSTCA9IG1ha2VNYW5pZmVzdFVSTChtYW5pZmVzdFVSTCwgZmFsbGJhY2tTdGFydCwgbGlu
ZUJ1ZmZlci5wb3NpdGlvbigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZhbGxiYWNrVVJMLmlz
VmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVSTCwgZmFsbGJhY2tV
UkwpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIG1h
bmlmZXN0LmZhbGxiYWNrVVJMcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobmFtZXNwYWNlVVJMLCBm
YWxsYmFja1VSTCkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtYW5pZmVzdDsKLSAgICB9KTsKLX0K
LQotfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L01hbmlmZXN0UGFyc2VyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMg
LTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNlci5oCShy
ZXZpc2lvbiAyNjM3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvTWFuaWZl
c3RQYXJzZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJBcHBsaWNhdGlvbkNhY2hlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0IHsKLSAgICBW
ZWN0b3I8VVJMPiBvbmxpbmVBbGxvd2VkVVJMczsKLSAgICBIYXNoU2V0PFN0cmluZz4gZXhwbGlj
aXRVUkxzOwotICAgIEZhbGxiYWNrVVJMVmVjdG9yIGZhbGxiYWNrVVJMczsKLSAgICBib29sIGFs
bG93QWxsTmV0d29ya1JlcXVlc3RzIHsgZmFsc2UgfTsgLy8gV2lsZGNhcmQgZm91bmQgaW4gTkVU
V09SSyBzZWN0aW9uLgotfTsKLQotT3B0aW9uYWw8QXBwbGljYXRpb25DYWNoZU1hbmlmZXN0PiBw
YXJzZUFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdChjb25zdCBVUkwmIG1hbmlmZXN0VVJMLCBjb25z
dCBTdHJpbmcmIG1hbmlmZXN0TUlNRVR5cGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0
ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkK
</data>

          </attachment>
      

    </bug>

</bugzilla>