<?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>62509</bug_id>
          
          <creation_ts>2011-06-12 02:34:41 -0700</creation_ts>
          <short_desc>Factor IconController out of FrameLoader</short_desc>
          <delta_ts>2011-06-13 13:36:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>29947</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>japhet</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>419279</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-12 02:34:41 -0700</bug_when>
    <thetext>Factor IconController out of FrameLoader</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419280</commentid>
    <comment_count>1</comment_count>
      <attachid>96873</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-12 02:38:51 -0700</bug_when>
    <thetext>Created attachment 96873
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419283</commentid>
    <comment_count>2</comment_count>
      <attachid>96873</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-12 03:52:47 -0700</bug_when>
    <thetext>Comment on attachment 96873
Patch

Attachment 96873 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/8826893</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419287</commentid>
    <comment_count>3</comment_count>
      <attachid>96877</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-12 04:11:26 -0700</bug_when>
    <thetext>Created attachment 96877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419728</commentid>
    <comment_count>4</comment_count>
      <attachid>96877</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-06-13 11:39:04 -0700</bug_when>
    <thetext>Comment on attachment 96877
Patch

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

This is awesome. Just one question :)

&gt; Source/WebCore/loader/icon/IconController.h:51
&gt; +    KURL url();
&gt; +    IconURLs urls(int iconTypes);

Is there anything we can do to make these names more distinct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419742</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-13 11:51:08 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 96877 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96877&amp;action=review
&gt; 
&gt; This is awesome. Just one question :)
&gt; 
&gt; &gt; Source/WebCore/loader/icon/IconController.h:51
&gt; &gt; +    KURL url();
&gt; &gt; +    IconURLs urls(int iconTypes);
&gt; 
&gt; Is there anything we can do to make these names more distinct?

Sure.  We can rename urls to urlsForTypes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419814</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-13 13:36:08 -0700</bug_when>
    <thetext>Committed r88682: &lt;http://trac.webkit.org/changeset/88682&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96873</attachid>
            <date>2011-06-12 02:38:51 -0700</date>
            <delta_ts>2011-06-12 04:11:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62509-20110612023850.patch</filename>
            <type>text/plain</type>
            <size>43553</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NjExKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDYtMTIgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGYWN0b3IgSWNvbkNvbnRyb2xsZXIgb3V0IG9mIEZyYW1lTG9hZGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjUwOQor
CisgICAgICAgIFRoaXMgbmV3IGNsYXNzIGNvbnRhaW5zIGFsbCB0aGUgaWNvbi1yZWxhdGVkIGxv
Z2ljIGZyb20gRnJhbWVMb2FkZXIuCisgICAgICAgIFRoZSBpY29uLXJlbGF0ZWQgbG9naWMgYW5k
IHN0YXRlIGhhcyBhbG1vc3QgemVybyBpbnRlcmFjdGlvbiB3aXRoIHRoZQorICAgICAgICByZXN0
IG9mIEZyYW1lTG9hZGVyIGFuZCBpcyBiZXR0ZXIgaGFuZGxlZCBhcyBhIHNlcGFyYXRlIGNvbmNl
cm4uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBsaWNpdENsb3NlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpzZXRJY29uVVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNv
dXJjZUFnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVu
dExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6aWNvbkxvYWRE
ZWNpc2lvbkF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6Y29u
dGludWVJY29uTG9hZFdpdGhEZWNpc2lvbik6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RvcCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aWNvbik6CisgICAgICAg
ICogbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uTG9h
ZGVyOjpzdGFydExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkxvYWRlcjo6ZmluaXNo
TG9hZGluZyk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkxvYWRlci5oOgorCiAyMDExLTA2
LTExICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTk4OSw2ICs5ODksNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgbG9hZGVyL2NhY2hl
L0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCiAgICAgbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNw
cAogCisgICAgbG9hZGVyL2ljb24vSWNvbkNvbnRyb2xsZXIuY3BwCiAgICAgbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcAogICAgIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuY3BwCiAg
ICAgbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkocmV2aXNpb24gODg2MTApCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDkzLDYgKzIwOTMsOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlQYXJzZXIuaCBcCiAJ
U291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25Db250cm9sbGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkNvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlQ2xpZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC02NzUsNiArNjc1LDcgQEAKICAgICAgICAgICAgICds
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2Fj
aGUvTWVtb3J5Q2FjaGUuaCcsCisgICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvbkNvbnRyb2xs
ZXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgnLAogICAgICAg
ICAgICAgJ2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaCcsCiAgICAgICAgICAgICAnbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlQ2xpZW50LmgnLApAQCAtMzQwNSw2ICszNDA2LDcgQEAKICAg
ICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oJywKICAgICAgICAg
ICAgICdsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIv
Y2YvUmVzb3VyY2VMb2FkZXJDRk5ldC5jcHAnLAorICAgICAgICAgICAgJ2xvYWRlci9pY29uL0lj
b25Db250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
LmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5jcHAnLAog
ICAgICAgICAgICAgJ2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwJywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiA4ODYxMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NzAsNiArODcwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgbG9hZGVyL0Zy
YW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcCBcCiAgICAgbG9hZGVyL0hpc3RvcnlDb250cm9sbGVy
LmNwcCBcCiAgICAgbG9hZGVyL0ZUUERpcmVjdG9yeVBhcnNlci5jcHAgXAorICAgIGxvYWRlci9p
Y29uL0ljb25Db250cm9sbGVyLmNwcCBcCiAgICAgbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFz
ZS5jcHAgXAogICAgIGxvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwIFwKICAgICBsb2FkZXIvSW1h
Z2VMb2FkZXIuY3BwIFwKQEAgLTE4MTksNiArMTgyMCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGxv
YWRlci9GcmFtZUxvYWRlci5oIFwKICAgICBsb2FkZXIvRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUu
aCBcCiAgICAgbG9hZGVyL0ZUUERpcmVjdG9yeVBhcnNlci5oIFwKKyAgICBsb2FkZXIvaWNvbi9J
Y29uQ29udHJvbGxlci5oIFwKICAgICBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaCBcCiAgICAg
bG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oIFwKICAgICBsb2FkZXIvaWNvbi9JY29uTG9h
ZGVyLmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHJldmlzaW9uIDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1OTE3LDYgKzI1OTE3LDE0IEBACiAJ
CQkJTmFtZT0iaWNvbiIKIAkJCQk+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxs
b2FkZXJcaWNvblxJY29uQ29udHJvbGxlci5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJ
PEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcaWNvblxJY29uQ29udHJvbGxlci5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
bG9hZGVyXGljb25cSWNvbkRhdGFiYXNlLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTY2LDYgKzMxNjYsOCBAQAogCQk5N0M0
NzFEQzEyRjkyNUJEMDA4NjM1NEIgLyogQ29udGVudFNlY3VyaXR5UG9saWN5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0M0NzFEQTEyRjkyNUJEMDA4
NjM1NEIgLyogQ29udGVudFNlY3VyaXR5UG9saWN5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTdEQ0UyMDExMDgwN0M3NTAwNTdEMzk0IC8qIEhp
c3RvcnlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3RENFMUZGMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5j
cHAgKi87IH07CiAJCTk3RENFMjAyMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdEQ0Uy
MDAxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTdFQkJCQzAxM0E0QjZENDAwNEFB
MUYxIC8qIEljb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3RUJCQkJFMTNBNEI2RDQwMDRBQTFGMSAvKiBJY29uQ29udHJvbGxl
ci5jcHAgKi87IH07CisJCTk3RUJCQkMxMTNBNEI2RDQwMDRBQTFGMSAvKiBJY29uQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdFQkJC
QkYxM0E0QjZENDAwNEFBMUYxIC8qIEljb25Db250cm9sbGVyLmggKi87IH07CiAJCTk3RUY3REZF
MTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0VGN0RGRDEwN0U1NUI3MDBEN0M0
OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwICovOyB9OwogCQk5OEVCMUY5NTEzMTNGRTA1
MDBEMEUxRUEgLyogTm90SW1wbGVtZW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk4RUIxRjk0MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1l
bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTlCNDE3MDY0MTI1NjYyQjMwMDZCMjhGQyAvKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNDE3MDYyMTI1
NjYyQjMwMDZCMjhGQyAvKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTc3OSw2ICs5NzgxLDggQEAK
IAkJOTdDNDcxREExMkY5MjVCRDAwODYzNTRCIC8qIENvbnRlbnRTZWN1cml0eVBvbGljeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50U2VjdXJpdHlQb2xpY3kuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdEQ0UxRkYxMDgwN0M3NTAwNTdEMzk0IC8q
IEhpc3RvcnlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEhpc3RvcnlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTdEQ0UyMDAxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhpc3RvcnlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk3RUJCQkJFMTNBNEI2RDQwMDRBQTFGMSAvKiBJY29uQ29udHJv
bGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJY29uQ29udHJv
bGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3RUJCQkJGMTNBNEI2RDQw
MDRBQTFGMSAvKiBJY29uQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJY29uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0VG
N0RGRDEwN0U1NUI3MDBEN0M0OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OEVCMUY5NDEzMTNGRTA1MDBEMEUxRUEgLyog
Tm90SW1wbGVtZW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90SW1w
bGVtZW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI0MTcwNjIxMjU2NjJC
MzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEzOTY5LDYgKzEzOTczLDggQEAKIAkJNTEyNkU2QjYwQTJFM0FF
RjAwNUMyOUZBIC8qIGljb24gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTk3RUJCQkJFMTNBNEI2RDQwMDRBQTFGMSAvKiBJY29uQ29udHJvbGxlci5jcHAg
Ki8sCisJCQkJOTdFQkJCQkYxM0E0QjZENDAwNEFBMUYxIC8qIEljb25Db250cm9sbGVyLmggKi8s
CiAJCQkJNTEyNkU2QjkwQTJFM0IxMjAwNUMyOUZBIC8qIEljb25EYXRhYmFzZS5jcHAgKi8sCiAJ
CQkJNTEyNkU2QkEwQTJFM0IxMjAwNUMyOUZBIC8qIEljb25EYXRhYmFzZS5oICovLAogCQkJCTUx
Njk1Mzk1MTMyOUEzQzgwMEI5MkQwNCAvKiBJY29uRGF0YWJhc2VCYXNlLmNwcCAqLywKQEAgLTIz
MTczLDYgKzIzMTc5LDcgQEAKIAkJCQlGREYwOURDOTEzOTlCNjIyMDA2ODhFNUIgLyogSlNCaXF1
YWRGaWx0ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUE4NUI2QzEzOEQ1NzNBMDBFQ0I3
QjMgLyogU3RyZWFtRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QTg1Qjc4MTM4RDU4RUUw
MEVDQjdCMyAvKiBKU1N0cmVhbUV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0VCQkJDMTEz
QTRCNkQ0MDA0QUExRjEgLyogSWNvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjU5
MDYsNiArMjU5MTMsNyBAQAogCQkJCUZERjA5REM4MTM5OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVh
ZEZpbHRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlBODVCNkIxMzhENTczQTAwRUNC
N0IzIC8qIFN0cmVhbUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QTg1Qjc3MTM4RDU4
RUUwMEVDQjdCMyAvKiBKU1N0cmVhbUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3RUJC
QkMwMTNBNEI2RDQwMDRBQTFGMSAvKiBJY29uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gODg2MTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTE1LDEyICsyMTE1
LDEwIEBAIHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogICAgIC8vIEJ1dCB0aG9zZSBh
ZGQgYSBkeW5hbWljIGNvbXBvbmVudCB0byB0aGUgZmF2aWNvbiB0aGF0IGhhcyBVSSAKICAgICAv
LyByYW1pZmljYXRpb25zLCBhbmQgd2UgbmVlZCB0byBkZWNpZGUgd2hhdCBpcyB0aGUgUmlnaHQg
VGhpbmcgVG8gRG8odG0pCiAgICAgRnJhbWUqIGYgPSBmcmFtZSgpOwotICAgIGlmIChmKQotICAg
ICAgICBmLT5sb2FkZXIoKS0+c3RhcnRJY29uTG9hZGVyKCk7Ci0KLSAgICAvLyBSZXN1bWUgdGhl
IGFuaW1hdGlvbnMgKG9yIHN0YXJ0IHRoZW0pCi0gICAgaWYgKGYpCisgICAgaWYgKGYpIHsKKyAg
ICAgICAgZi0+bG9hZGVyKCktPmljb24oKS0+c3RhcnRMb2FkZXIoKTsKICAgICAgICAgZi0+YW5p
bWF0aW9uKCktPnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudCh0aGlzKTsKKyAgICB9CiAKICAg
ICBJbWFnZUxvYWRlcjo6ZGlzcGF0Y2hQZW5kaW5nQmVmb3JlTG9hZEV2ZW50cygpOwogICAgIElt
YWdlTG9hZGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkRXZlbnRzKCk7CkBAIC00MzE4LDcgKzQzMTYs
NyBAQCB2b2lkIERvY3VtZW50OjpzZXRJY29uVVJMKGNvbnN0IFN0cmluZyYgCiAgICAgZWxzZSBp
ZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKICAgICAgICAgc2V0SWNvblVSTChuZXdVUkwpOwogICAg
IGlmIChGcmFtZSogZiA9IGZyYW1lKCkpCi0gICAgICAgIGYtPmxvYWRlcigpLT5zZXRJY29uVVJM
KG5ld1VSTCk7CisgICAgICAgIGYtPmxvYWRlcigpLT5pY29uKCktPnNldFVSTChuZXdVUkwpOwog
fQogCiB2b2lkIERvY3VtZW50OjpzZXRJY29uVVJMKGNvbnN0IEljb25VUkwmIGljb25VUkwpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuY3BwCShyZXZpc2lvbiA4ODYxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNyw3
IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZVIKICAgICAgICAgICAg
IGlmIChyZXNwb25zZS5taW1lVHlwZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXNv
dXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgY2FjaGVkUmVzb3VyY2UtPnJlc3Bv
bnNlKCkubWltZVR5cGUoKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdG
cmFnbWVudElkZW50aWZpZXIocmVzcG9uc2UudXJsKCksIGxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+
aWNvblVSTCgpKSkKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIo
cmVzcG9uc2UudXJsKCksIGxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+aWNvbigpLT51cmwoKSkpCiAg
ICAgICAgICAgICB0eXBlID0gSW5zcGVjdG9yUGFnZUFnZW50OjpJbWFnZVJlc291cmNlOwogICAg
ICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKHJlc3BvbnNlLnVy
bCgpLCBsb2FkZXItPnVybCgpKSAmJiB0eXBlID09IEluc3BlY3RvclBhZ2VBZ2VudDo6T3RoZXJS
ZXNvdXJjZSkKICAgICAgICAgICAgIHR5cGUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OkRvY3VtZW50
UmVzb3VyY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJ
KHJldmlzaW9uIDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODY1LDcgKzg2NSw3IEBAIHZvaWQgRG9jdW1lbnRMb2Fk
ZXI6OnRyYW5zZmVyTG9hZGluZ1Jlc28KIHZvaWQgRG9jdW1lbnRMb2FkZXI6Omljb25Mb2FkRGVj
aXNpb25BdmFpbGFibGUoKQogewogICAgIGlmIChtX2ZyYW1lKQotICAgICAgICBtX2ZyYW1lLT5s
b2FkZXIoKS0+aWNvbkxvYWREZWNpc2lvblJlY2VpdmVkKGljb25EYXRhYmFzZSgpLnN5bmNocm9u
b3VzTG9hZERlY2lzaW9uRm9ySWNvblVSTChLVVJMKGZyYW1lTG9hZGVyKCktPmljb25VUkwoKSks
IHRoaXMpKTsKKyAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmljb24oKS0+bG9hZERlY2lzaW9u
UmVjZWl2ZWQoaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJM
KGZyYW1lTG9hZGVyKCktPmljb24oKS0+dXJsKCksIHRoaXMpKTsKIH0KIAogc3RhdGljIHZvaWQg
aWNvbkxvYWREZWNpc2lvbkNhbGxiYWNrKEljb25Mb2FkRGVjaXNpb24gZGVjaXNpb24sIHZvaWQq
IGNvbnRleHQpCkBAIC04ODYsNyArODg2LDcgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6Y29udGlu
dWVJY29uTG9hZFdpdAogICAgIEFTU0VSVChtX2ljb25Mb2FkRGVjaXNpb25DYWxsYmFjayk7CiAg
ICAgbV9pY29uTG9hZERlY2lzaW9uQ2FsbGJhY2sgPSAwOwogICAgIGlmIChtX2ZyYW1lKQotICAg
ICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y29udGludWVJY29uTG9hZFdpdGhEZWNpc2lvbihkZWNp
c2lvbik7CisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5pY29uKCktPmNvbnRpbnVlTG9hZFdp
dGhEZWNpc2lvbihkZWNpc2lvbik7CiB9CiAKIHN0YXRpYyB2b2lkIGljb25EYXRhQ2FsbGJhY2so
U2hhcmVkQnVmZmVyKiwgdm9pZCopCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAJKHJldmlzaW9uIDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsOSArNzEsNiBAQAogI2luY2x1ZGUgIkhUTUxP
YmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJIaXN0
b3J5SXRlbS5oIgotI2luY2x1ZGUgIkljb25EYXRhYmFzZS5oIgotI2luY2x1ZGUgIkljb25Mb2Fk
ZXIuaCIKLSNpbmNsdWRlICJJY29uVVJMLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKQEAgLTE4Niw2ICsxODMsNyBAQCBGcmFtZUxvYWRlcjo6RnJhbWVMb2FkZXIoRnJh
bWUqIGZyYW1lLCBGCiAgICAgLCBtX2hpc3RvcnkoZnJhbWUpCiAgICAgLCBtX25vdGlmZXIoZnJh
bWUpCiAgICAgLCBtX3N1YmZyYW1lTG9hZGVyKGZyYW1lKQorICAgICwgbV9pY29uKGZyYW1lKQog
ICAgICwgbV9zdGF0ZShGcmFtZVN0YXRlQ29tbWl0dGVkUGFnZSkKICAgICAsIG1fbG9hZFR5cGUo
RnJhbWVMb2FkVHlwZVN0YW5kYXJkKQogICAgICwgbV9kZWxlZ2F0ZUlzSGFuZGxpbmdQcm92aXNp
b25hbExvYWRFcnJvcihmYWxzZSkKQEAgLTQ1Miw5ICs0NTAsOCBAQCB2b2lkIEZyYW1lTG9hZGVy
OjpzdG9wKCkKICAgICAgICAgcGFyc2VyLT5zdG9wUGFyc2luZygpOwogICAgICAgICBwYXJzZXIt
PmZpbmlzaCgpOwogICAgIH0KLQotICAgIGlmIChtX2ljb25Mb2FkZXIpCi0gICAgICAgIG1faWNv
bkxvYWRlci0+c3RvcExvYWRpbmcoKTsKKyAgICAKKyAgICBpY29uKCktPnN0b3BMb2FkZXIoKTsK
IH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6Y2xvc2VVUkwoKQpAQCAtNDY5LDgyICs0NjYsNiBAQCBi
b29sIEZyYW1lTG9hZGVyOjpjbG9zZVVSTCgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUtVUkwg
RnJhbWVMb2FkZXI6Omljb25VUkwoKQotewotICAgIEljb25VUkxzIHVybHMgPSBpY29uVVJMcyhG
YXZpY29uKTsKLSAgICByZXR1cm4gdXJscy5pc0VtcHR5KCkgPyBLVVJMKCkgOiB1cmxzWzBdLm1f
aWNvblVSTDsKLX0KLQotSWNvblVSTHMgRnJhbWVMb2FkZXI6Omljb25VUkxzKGludCBpY29uVHlw
ZXMpCi17Ci0gICAgSWNvblVSTHMgaWNvblVSTHM7Ci0gICAgLy8gSWYgdGhpcyBpc24ndCBhIHRv
cCBsZXZlbCBmcmFtZSwgcmV0dXJuCi0gICAgaWYgKG1fZnJhbWUtPnRyZWUoKSAmJiBtX2ZyYW1l
LT50cmVlKCktPnBhcmVudCgpKQotICAgICAgICByZXR1cm4gaWNvblVSTHM7Ci0KLSAgICBpZiAo
aWNvblR5cGVzICYgRmF2aWNvbiAmJiAhZmlsbEljb25VUkwoRmF2aWNvbiwgJmljb25VUkxzKSkK
LSAgICAgICAgaWNvblVSTHMuYXBwZW5kKGdldERlZmF1bHRJY29uVVJMKEZhdmljb24pKTsKLQot
I2lmIEVOQUJMRShUT1VDSF9JQ09OX0xPQURJTkcpCi0gICAgYm9vbCBoYXZlUHJlY29tcG9zZWRJ
Y29uID0gZmFsc2U7Ci0gICAgaWYgKGljb25UeXBlcyAmIFRvdWNoUHJlY29tcG9zZWRJY29uKQot
ICAgICAgICBoYXZlUHJlY29tcG9zZWRJY29uID0gZmlsbEljb25VUkwoVG91Y2hQcmVjb21wb3Nl
ZEljb24sICZpY29uVVJMcyk7Ci0KLSAgICBib29sIGhhdmVUb3VjaEljb24gPSBmYWxzZTsKLSAg
ICBpZiAoaWNvblR5cGVzICYgVG91Y2hJY29uKQotICAgICAgICBoYXZlVG91Y2hJY29uID0gZmls
bEljb25VUkwoVG91Y2hJY29uLCAmaWNvblVSTHMpOwotCi0gICAgLy8gT25seSByZXR1cm4gdGhl
IGRlZmF1bHQgdG91Y2ggaWNvbnMgd2hlbiB0aGUgYm90aCB3ZXJlIHJlcXVpcmVkIGFuZCBuZWl0
aGVyIHdhcyBnb3R0ZW4uCi0gICAgaWYgKGljb25UeXBlcyAmIFRvdWNoUHJlY29tcG9zZWRJY29u
ICYmIGljb25UeXBlcyAmIFRvdWNoSWNvbiAmJiAhaGF2ZVByZWNvbXBvc2VkSWNvbiAmJiAhaGF2
ZVRvdWNoSWNvbikgewotICAgICAgICBpY29uVVJMcy5hcHBlbmQoZ2V0RGVmYXVsdEljb25VUkwo
VG91Y2hQcmVjb21wb3NlZEljb24pKTsKLSAgICAgICAgaWNvblVSTHMuYXBwZW5kKGdldERlZmF1
bHRJY29uVVJMKFRvdWNoSWNvbikpOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBpY29uVVJM
czsKLX0KLQotYm9vbCBGcmFtZUxvYWRlcjo6ZmlsbEljb25VUkwoSWNvblR5cGUgaWNvblR5cGUs
IEljb25VUkxzKiBpY29uVVJMcykKLXsKLSAgICAvLyBJZiB3ZSBoYXZlIGFuIGljb25VUkwgZnJv
bSBhIExpbmsgZWxlbWVudCwgcmV0dXJuIHRoYXQKLSAgICBJY29uVVJMIHVybCA9IG1fZnJhbWUt
PmRvY3VtZW50KCktPmljb25VUkwoaWNvblR5cGUpOwotICAgIGlmICh1cmwubV9pY29uVVJMLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWNvblVSTHMtPmFwcGVuZCh1
cmwpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUljb25VUkwgRnJhbWVMb2FkZXI6OmdldERl
ZmF1bHRJY29uVVJMKEljb25UeXBlIGljb25UeXBlKQotewotICAgIC8vIERvbid0IHJldHVybiBh
IGZhdmljb24gaWNvblVSTCB1bmxlc3Mgd2UncmUgaHR0cCBvciBodHRwcwotICAgIEtVUkwgZG9j
dW1lbnRVUkwgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsKLSAgICBpZiAoIWRvY3VtZW50
VVJMLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIHJldHVybiBJY29uVVJMKCk7Ci0K
LSAgICBLVVJMIHVybDsKLSAgICBib29sIGNvdWxkU2V0UHJvdG9jb2wgPSB1cmwuc2V0UHJvdG9j
b2woZG9jdW1lbnRVUkwucHJvdG9jb2woKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChjb3VsZFNldFBy
b3RvY29sLCBjb3VsZFNldFByb3RvY29sKTsKLSAgICB1cmwuc2V0SG9zdChkb2N1bWVudFVSTC5o
b3N0KCkpOwotICAgIGlmIChkb2N1bWVudFVSTC5oYXNQb3J0KCkpCi0gICAgICAgIHVybC5zZXRQ
b3J0KGRvY3VtZW50VVJMLnBvcnQoKSk7Ci0gICAgaWYgKGljb25UeXBlID09IEZhdmljb24pIHsK
LSAgICAgICAgdXJsLnNldFBhdGgoIi9mYXZpY29uLmljbyIpOwotICAgICAgICByZXR1cm4gSWNv
blVSTChLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgRmF2aWNvbik7Ci0gICAgfQotI2lmIEVO
QUJMRShUT1VDSF9JQ09OX0xPQURJTkcpCi0gICAgaWYgKGljb25UeXBlID09IFRvdWNoUHJlY29t
cG9zZWRJY29uKSB7Ci0gICAgICAgIHVybC5zZXRQYXRoKCIvYXBwbGUtdG91Y2gtaWNvbi1wcmVj
b21wb3NlZC5wbmciKTsKLSAgICAgICAgcmV0dXJuIEljb25VUkwoS1VSTChQYXJzZWRVUkxTdHJp
bmcsIHVybCksIFRvdWNoUHJlY29tcG9zZWRJY29uKTsKLSAgICB9Ci0gICAgaWYgKGljb25UeXBl
ID09IFRvdWNoSWNvbikgewotICAgICAgICB1cmwuc2V0UGF0aCgiL2FwcGxlLXRvdWNoLWljb24u
cG5nIik7Ci0gICAgICAgIHJldHVybiBJY29uVVJMKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwp
LCBUb3VjaEljb24pOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBJY29uVVJMKCk7Ci19Ci0K
IGJvb2wgRnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwoY29uc3QgS1VSTCYgdXJsKQogewogICAgIGlm
IChtX2ZyYW1lLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPnJlZGlyZWN0U2NoZWR1bGVkRHVyaW5n
TG9hZCgpKSB7CkBAIC03MzcsMTE1ICs2NTgsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpkaWRFbmRE
b2N1bWVudCgpCiAgICAgbV9pc0xvYWRpbmdNYWluUmVzb3VyY2UgPSBmYWxzZTsKIH0KIAotLy8g
Q2FsbGJhY2sgZm9yIHRoZSBvbGQtc3R5bGUgc3luY2hyb25vdXMgSWNvbkRhdGFiYXNlIGludGVy
ZmFjZS4KLXZvaWQgRnJhbWVMb2FkZXI6Omljb25Mb2FkRGVjaXNpb25SZWNlaXZlZChJY29uTG9h
ZERlY2lzaW9uIGljb25Mb2FkRGVjaXNpb24pCi17Ci0gICAgaWYgKCFtX21heUxvYWRJY29uTGF0
ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBMT0coSWNvbkRhdGFiYXNlLCAiRnJhbWVMb2FkZXIg
JXAgd2FzIHRvbGQgYSBsb2FkIGRlY2lzaW9uIGlzIGF2YWlsYWJsZSBmb3IgaXRzIGljb24iLCB0
aGlzKTsKLSAgICBjb250aW51ZUljb25Mb2FkV2l0aERlY2lzaW9uKGljb25Mb2FkRGVjaXNpb24p
OwotICAgIG1fbWF5TG9hZEljb25MYXRlciA9IGZhbHNlOwotfQotCi12b2lkIEZyYW1lTG9hZGVy
OjpzdGFydEljb25Mb2FkZXIoKQotewotICAgIC8vIEZJWE1FOiBXZSBraWNrIG9mZiB0aGUgaWNv
biBsb2FkZXIgd2hlbiB0aGUgZnJhbWUgaXMgZG9uZSByZWNlaXZpbmcgaXRzIG1haW4gcmVzb3Vy
Y2UuCi0gICAgLy8gQnV0IHdlIHNob3VsZCBpbnN0ZWFkIGRvIGl0IHdoZW4gd2UncmUgZG9uZSBw
YXJzaW5nIHRoZSBoZWFkIGVsZW1lbnQuCi0gICAgaWYgKCFpc0xvYWRpbmdNYWluRnJhbWUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFpY29uRGF0YWJhc2UoKS5pc0VuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEtVUkwgdXJsKGljb25VUkwoKSk7Ci0gICAgU3Ry
aW5nIHVybFN0cmluZyh1cmwuc3RyaW5nKCkpOwotICAgIGlmICh1cmxTdHJpbmcuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBQZW9wbGUgd2hvIHdhbnQgdG8gYXZvaWQgbG9h
ZGluZyBpbWFnZXMgZ2VuZXJhbGx5IHdhbnQgdG8gYXZvaWQgbG9hZGluZyBhbGwgaW1hZ2VzLCB1
bmxlc3MgYW4gZXhjZXB0aW9uIGhhcyBiZWVuIG1hZGUgZm9yIHNpdGUgaWNvbnMuCi0gICAgLy8g
Tm93IHRoYXQgd2UndmUgYWNjb3VudGVkIGZvciBVUkwgbWFwcGluZywgYXZvaWQgc3RhcnRpbmcg
dGhlIG5ldHdvcmsgbG9hZCBpZiBpbWFnZXMgYXJlbid0IHNldCB0byBkaXNwbGF5IGF1dG9tYXRp
Y2FsbHkuCi0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKLSAg
ICBpZiAoc2V0dGluZ3MgJiYgIXNldHRpbmdzLT5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSAm
JiAhc2V0dGluZ3MtPmxvYWRzU2l0ZUljb25zSWdub3JpbmdJbWFnZUxvYWRpbmdTZXR0aW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHdlJ3JlIHJlbG9hZGluZyB0aGUgcGFnZSwg
YWx3YXlzIHN0YXJ0IHRoZSBpY29uIGxvYWQgbm93LgotICAgIGlmIChsb2FkVHlwZSgpID09IEZy
YW1lTG9hZFR5cGVSZWxvYWQgJiYgbG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJv
bU9yaWdpbikgewotICAgICAgICBjb250aW51ZUljb25Mb2FkV2l0aERlY2lzaW9uKEljb25Mb2Fk
WWVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpY29uRGF0YWJhc2UoKS5z
dXBwb3J0c0FzeW5jaHJvbm91c01vZGUoKSkgewotICAgICAgICBtX2RvY3VtZW50TG9hZGVyLT5n
ZXRJY29uTG9hZERlY2lzaW9uRm9ySWNvblVSTCh1cmxTdHJpbmcpOwotICAgICAgICAvLyBDb21t
aXQgdGhlIGljb24gdXJsIG1hcHBpbmcgdG8gdGhlIGRhdGFiYXNlIGp1c3QgaW4gY2FzZSB3ZSBk
b24ndCBlbmQgdXAgbG9hZGluZyBsYXRlci4KLSAgICAgICAgY29tbWl0SWNvblVSTFRvSWNvbkRh
dGFiYXNlKHVybCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgSWNvbkxvYWRE
ZWNpc2lvbiBkZWNpc2lvbiA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzTG9hZERlY2lzaW9u
Rm9ySWNvblVSTCh1cmxTdHJpbmcsIG1fZG9jdW1lbnRMb2FkZXIuZ2V0KCkpOwotCi0gICAgaWYg
KGRlY2lzaW9uID09IEljb25Mb2FkVW5rbm93bikgewotICAgICAgICAvLyBJbiB0aGlzIGNhc2Us
IHdlIG1heSBlbmQgdXAgbG9hZGluZyB0aGUgaWNvbiBsYXRlciwgYnV0IHdlIHN0aWxsIHdhbnQg
dG8gY29tbWl0IHRoZSBpY29uIHVybCBtYXBwaW5nIHRvIHRoZSBkYXRhYmFzZQotICAgICAgICAv
LyBqdXN0IGluIGNhc2Ugd2UgZG9uJ3QgZW5kIHVwIGxvYWRpbmcgbGF0ZXIgLSBpZiB3ZSBjb21t
aXQgdGhlIG1hcHBpbmcgYSBzZWNvbmQgdGltZSBhZnRlciB0aGUgbG9hZCwgdGhhdCdzIG5vIGJp
ZyBkZWFsCi0gICAgICAgIC8vIFdlIGFsc28gdGVsbCB0aGUgY2xpZW50IHRvIHJlZ2lzdGVyIGZv
ciB0aGUgbm90aWZpY2F0aW9uIHRoYXQgdGhlIGljb24gaXMgcmVjZWl2ZWQgbm93IHNvIGl0IGlz
bid0IG1pc3NlZCBpbiBjYXNlIHRoZSAKLSAgICAgICAgLy8gaWNvbiBpcyBsYXRlciByZWFkIGlu
IGZyb20gZGlzawotICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiRnJhbWVMb2FkZXIgJXAgbWln
aHQgbG9hZCBpY29uICVzIGxhdGVyIiwgdGhpcywgdXJsU3RyaW5nLmFzY2lpKCkuZGF0YSgpKTsK
LSAgICAgICAgbV9tYXlMb2FkSWNvbkxhdGVyID0gdHJ1ZTsgICAgCi0gICAgICAgIG1fY2xpZW50
LT5yZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oKTsKLSAgICAgICAgY29tbWl0SWNvblVSTFRv
SWNvbkRhdGFiYXNlKHVybCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb250aW51
ZUljb25Mb2FkV2l0aERlY2lzaW9uKGRlY2lzaW9uKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlcjo6
Y29udGludWVJY29uTG9hZFdpdGhEZWNpc2lvbihJY29uTG9hZERlY2lzaW9uIGljb25Mb2FkRGVj
aXNpb24pCi17Ci0gICAgQVNTRVJUKGljb25Mb2FkRGVjaXNpb24gIT0gSWNvbkxvYWRVbmtub3du
KTsKLSAgICAKLSAgICAvLyAgRklYTUUgKDxyZGFyOi8vcHJvYmxlbS85MTY4NjA1PikgLSBXZSBz
aG91bGQgc3VwcG9ydCBpbi1tZW1vcnktb25seSBwcml2YXRlIGJyb3dzaW5nIGljb25zIGluIGFz
eW5jaHJvbm91cyBpY29uIGRhdGFiYXNlIG1vZGUuCi0gICAgaWYgKGljb25EYXRhYmFzZSgpLnN1
cHBvcnRzQXN5bmNocm9ub3VzTW9kZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+
cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
IGlmIChpY29uTG9hZERlY2lzaW9uID09IEljb25Mb2FkTm8pIHsKLSAgICAgICAgS1VSTCB1cmwo
aWNvblVSTCgpKTsKLSAgICAgICAgU3RyaW5nIHVybFN0cmluZyh1cmwuc3RyaW5nKCkpOwotICAg
ICAgICAKLSAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIkZyYW1lTG9hZGVyOjpzdGFydEljb25M
b2FkZXIoKSAtIFRvbGQgbm90IHRvIGxvYWQgdGhpcyBpY29uLCBjb21taXR0aW5nIGljb25VUkwg
JXMgdG8gZGF0YWJhc2UgZm9yIHBhZ2VVUkwgbWFwcGluZyIsIHVybFN0cmluZy5hc2NpaSgpLmRh
dGEoKSk7Ci0gICAgICAgIGNvbW1pdEljb25VUkxUb0ljb25EYXRhYmFzZSh1cmwpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKGljb25EYXRhYmFzZSgpLnN1cHBvcnRzQXN5bmNocm9ub3VzTW9kZSgp
KSB7Ci0gICAgICAgICAgICBtX2RvY3VtZW50TG9hZGVyLT5nZXRJY29uRGF0YUZvckljb25VUkwo
dXJsU3RyaW5nKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgLy8gV2Ugd2VyZSB0b2xkIG5vdCB0byBsb2FkIHRoaXMgaWNvbiAtIHRoYXQgbWVhbnMg
dGhpcyBpY29uIGlzIGFscmVhZHkga25vd24gYnkgdGhlIGRhdGFiYXNlCi0gICAgICAgIC8vIElm
IHRoZSBpY29uIGRhdGEgaGFzbid0IGJlZW4gcmVhZCBpbiBmcm9tIGRpc2sgeWV0LCBraWNrIG9m
ZiB0aGUgcmVhZCBvZiB0aGUgaWNvbiBmcm9tIHRoZSBkYXRhYmFzZSB0byBtYWtlIHN1cmUgc29t
ZW9uZQotICAgICAgICAvLyBoYXMgZG9uZSBpdC4gVGhpcyBpcyBhZnRlciByZWdpc3RlcmluZyBm
b3IgdGhlIG5vdGlmaWNhdGlvbiBzbyB0aGUgV2ViVmlldyBjYW4gY2FsbCB0aGUgYXBwcm9wcmlh
dGUgZGVsZWdhdGUgbWV0aG9kLgotICAgICAgICAvLyBPdGhlcndpc2UgaWYgdGhlIGljb24gZGF0
YSAqaXMqIGF2YWlsYWJsZSwgbm90aWZ5IHRoZSBkZWxlZ2F0ZQotICAgICAgICBpZiAoIWljb25E
YXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkRhdGFLbm93bkZvckljb25VUkwodXJsU3RyaW5nKSkg
ewotICAgICAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIlRvbGQgbm90IHRvIGxvYWQgaWNvbiAl
cyBidXQgaWNvbiBkYXRhIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIC0gcmVnaXN0ZXJpbmcgZm9yIG5v
dGlmaWNhdGlvbiBhbmQgcmVxdWVzdGluZyBsb2FkIGZyb20gZGlzayIsIHVybFN0cmluZy5hc2Np
aSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBtX2NsaWVudC0+cmVnaXN0ZXJGb3JJY29uTm90aWZp
Y2F0aW9uKCk7Ci0gICAgICAgICAgICBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25Gb3JQ
YWdlVVJMKG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLCBJbnRTaXplKDAsIDAp
KTsKLSAgICAgICAgICAgIGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwo
b3JpZ2luYWxSZXF1ZXN0VVJMKCkuc3RyaW5nKCksIEludFNpemUoMCwgMCkpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZFJlY2VpdmVJY29uKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuOwotICAgIH0gCi0gICAgCi0gICAgaWYgKCFtX2lj
b25Mb2FkZXIpCi0gICAgICAgIG1faWNvbkxvYWRlciA9IEljb25Mb2FkZXI6OmNyZWF0ZShtX2Zy
YW1lKTsKLSAgICAgICAgCi0gICAgbV9pY29uTG9hZGVyLT5zdGFydExvYWRpbmcoKTsKLX0KLQot
dm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0SWNvblVSTFRvSWNvbkRhdGFiYXNlKGNvbnN0IEtVUkwm
IGljb24pCi17Ci0gICAgTE9HKEljb25EYXRhYmFzZSwgIkNvbW1pdHRpbmcgaWNvblVSTCAlcyB0
byBkYXRhYmFzZSBmb3IgcGFnZVVSTHMgJXMgYW5kICVzIiwgaWNvbi5zdHJpbmcoKS5hc2NpaSgp
LmRhdGEoKSwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCksIG9yaWdpbmFsUmVxdWVzdFVSTCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICBp
Y29uRGF0YWJhc2UoKS5zZXRJY29uVVJMRm9yUGFnZVVSTChpY29uLnN0cmluZygpLCBtX2ZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgaWNvbkRhdGFiYXNlKCkuc2V0SWNv
blVSTEZvclBhZ2VVUkwoaWNvbi5zdHJpbmcoKSwgb3JpZ2luYWxSZXF1ZXN0VVJMKCkuc3RyaW5n
KCkpOwotfQotCiB2b2lkIEZyYW1lTG9hZGVyOjpmaW5pc2hlZFBhcnNpbmcoKQogewogICAgIG1f
ZnJhbWUtPmluamVjdFVzZXJTY3JpcHRzKEluamVjdEF0RG9jdW1lbnRFbmQpOwpAQCAtMzQzMCwx
NiArMzI0Miw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNldFRpdGxlKGNvbnN0IFN0cmluZ1cKICAg
ICBkb2N1bWVudExvYWRlcigpLT5zZXRUaXRsZSh0aXRsZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2Fk
ZXI6OnNldEljb25VUkwoY29uc3QgSWNvblVSTCYgaWNvblVSTCkKLXsKLSAgICBkb2N1bWVudExv
YWRlcigpLT5zZXRJY29uVVJMKGljb25VUkwpOwotfQotCi1LVVJMIEZyYW1lTG9hZGVyOjpvcmln
aW5hbFJlcXVlc3RVUkwoKSBjb25zdAotewotICAgIHJldHVybiBhY3RpdmVEb2N1bWVudExvYWRl
cigpLT5vcmlnaW5hbFJlcXVlc3QoKS51cmwoKTsKLX0KLQogU3RyaW5nIEZyYW1lTG9hZGVyOjpy
ZWZlcnJlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZG9jdW1lbnRMb2FkZXIgPyBtX2RvY3Vt
ZW50TG9hZGVyLT5yZXF1ZXN0KCkuaHR0cFJlZmVycmVyKCkgOiAiIjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA4ODYxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
clR5cGVzLmgiCiAjaW5jbHVkZSAiSGlzdG9yeUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJJY29u
RGF0YWJhc2VCYXNlLmgiCisjaW5jbHVkZSAiSWNvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJ
Y29uVVJMLmgiCiAjaW5jbHVkZSAiUG9saWN5Q2hlY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNl
TG9hZE5vdGlmaWVyLmgiCkBAIC02NSw3ICs2NSw2IEBAIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50
OwogY2xhc3MgRnJhbWVOZXR3b3JraW5nQ29udGV4dDsKIGNsYXNzIEhpc3RvcnlJdGVtOwogY2xh
c3MgSFRNTEZvcm1FbGVtZW50OwotY2xhc3MgSWNvbkxvYWRlcjsKIGNsYXNzIE5hdmlnYXRpb25B
Y3Rpb247CiBjbGFzcyBOZXR3b3JraW5nQ29udGV4dDsKIGNsYXNzIFBhZ2U7CkBAIC0xMDIsNiAr
MTAxLDcgQEAgcHVibGljOgogICAgIEhpc3RvcnlDb250cm9sbGVyKiBoaXN0b3J5KCkgY29uc3Qg
eyByZXR1cm4gJm1faGlzdG9yeTsgfQogICAgIFJlc291cmNlTG9hZE5vdGlmaWVyKiBub3RpZmll
cigpIGNvbnN0IHsgcmV0dXJuICZtX25vdGlmZXI7IH0KICAgICBTdWJmcmFtZUxvYWRlciogc3Vi
ZnJhbWVMb2FkZXIoKSBjb25zdCB7IHJldHVybiAmbV9zdWJmcmFtZUxvYWRlcjsgfQorICAgIElj
b25Db250cm9sbGVyKiBpY29uKCkgY29uc3QgeyByZXR1cm4gJm1faWNvbjsgfQogCiAgICAgLy8g
RklYTUU6IFRoaXMgaXMgbm90IGNvb2wsIHBlb3BsZS4gVGhlcmUgYXJlIHRvbyBtYW55IGRpZmZl
cmVudCBmdW5jdGlvbnMgdGhhdCBhbGwgc3RhcnQgbG9hZHMuCiAgICAgLy8gV2Ugc2hvdWxkIGFp
bSB0byBjb25zb2xpZGF0ZSB0aGVzZSBpbnRvIGEgc21hbGxlciBzZXQgb2YgZnVuY3Rpb25zLCBh
bmQgdHJ5IHRvIHJldXNlIG1vcmUgb2YKQEAgLTE1Niw2ICsxNTYsNyBAQCBwdWJsaWM6CiAjaWYg
VVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKICAgICBib29sIGNhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3Qg
UHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpOwogI2VuZGlmCisgICAgLy8gRklYTUU6
IFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgYWNjZXNzb3JzIGlzIHZlcnkgc3VidGxlISBU
aGV5IG5lZWQgYmV0dGVyIG5hbWVzLgogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgb3JpZ2lu
YWxSZXF1ZXN0KCkgY29uc3Q7CiAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBpbml0aWFsUmVx
dWVzdCgpIGNvbnN0OwogICAgIHZvaWQgcmVjZWl2ZWRNYWluUmVzb3VyY2VFcnJvcihjb25zdCBS
ZXNvdXJjZUVycm9yJiwgYm9vbCBpc0NvbXBsZXRlKTsKQEAgLTIzNCwxMyArMjM1LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgZGlkRW5kRG9jdW1lbnQoKTsKICAgICB2b2lkIHdpbGxTZXRFbmNvZGlu
ZygpOwogCi0gICAgLy8gUmV0dXJucyBmYXZpY29uLgotICAgIEtVUkwgaWNvblVSTCgpOwotCi0g
ICAgLy8gUmV0dXJucyB0aGUgZ2l2ZW4gaWNvblR5cGVzJyBJY29uVVJMcywgaWNvblR5cGVzIGNv
dWxkIGJlIGFueSBjb21iaW5hdGlvbiBvZiBJY29uVHlwZS4KLSAgICBJY29uVVJMcyBpY29uVVJM
cyhpbnQgaWNvblR5cGVzKTsKLSAgICB2b2lkIGNvbW1pdEljb25VUkxUb0ljb25EYXRhYmFzZShj
b25zdCBLVVJMJik7Ci0KICAgICBLVVJMIGJhc2VVUkwoKSBjb25zdDsKIAogICAgIHZvaWQgaGFu
ZGxlZE9ubG9hZEV2ZW50cygpOwpAQCAtMjg5LDE3ICsyODMsMTIgQEAgcHVibGljOgogICAgIHZv
aWQgY2FuY2VsQW5kQ2xlYXIoKTsKIAogICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nV2l0
aERpcmVjdGlvbiYpOwotICAgIHZvaWQgc2V0SWNvblVSTChjb25zdCBJY29uVVJMJik7CiAKICAg
ICB2b2lkIGNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpOwogICAgIGJvb2wgaXNMb2FkaW5nRnJvbUNh
Y2hlZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZTsgfQogCiAg
ICAgRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUqIHN0YXRlTWFjaGluZSgpIGNvbnN0IHsgcmV0dXJu
ICZtX3N0YXRlTWFjaGluZTsgfQogCi0gICAgdm9pZCBzdGFydEljb25Mb2FkZXIoKTsKLSAgICB2
b2lkIGljb25Mb2FkRGVjaXNpb25SZWNlaXZlZChJY29uTG9hZERlY2lzaW9uKTsKLSAgICB2b2lk
IGNvbnRpbnVlSWNvbkxvYWRXaXRoRGVjaXNpb24oSWNvbkxvYWREZWNpc2lvbik7Ci0KICAgICBi
b29sIHNob3VsZEFsbG93TmF2aWdhdGlvbihGcmFtZSogdGFyZ2V0RnJhbWUpIGNvbnN0OwogICAg
IEZyYW1lKiBmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7
CiAKQEAgLTQzMSwxNSArNDIwLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZUNoZWNr
TG9hZENvbXBsZXRlKCk7CiAgICAgdm9pZCBzdGFydENoZWNrQ29tcGxldGVUaW1lcigpOwogCi0g
ICAgS1VSTCBvcmlnaW5hbFJlcXVlc3RVUkwoKSBjb25zdDsKLQogICAgIGJvb2wgc2hvdWxkVHJl
YXRVUkxBc1NhbWVBc0N1cnJlbnQoY29uc3QgS1VSTCYpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRh
dGVTYW5kYm94RmxhZ3MoKTsKIAotICAgIGJvb2wgZmlsbEljb25VUkwoSWNvblR5cGUsIEljb25V
UkxzKik7Ci0gICAgSWNvblVSTCBnZXREZWZhdWx0SWNvblVSTChJY29uVHlwZSk7Ci0KICAgICBG
cmFtZSogbV9mcmFtZTsKICAgICBGcmFtZUxvYWRlckNsaWVudCogbV9jbGllbnQ7CiAKQEAgLTQ0
OCw2ICs0MzIsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgUmVzb3VyY2VMb2FkTm90aWZpZXIg
bV9ub3RpZmVyOwogICAgIG11dGFibGUgU3ViZnJhbWVMb2FkZXIgbV9zdWJmcmFtZUxvYWRlcjsK
ICAgICBtdXRhYmxlIEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lIG1fc3RhdGVNYWNoaW5lOworICAg
IG11dGFibGUgSWNvbkNvbnRyb2xsZXIgbV9pY29uOwogCiAgICAgRnJhbWVTdGF0ZSBtX3N0YXRl
OwogICAgIEZyYW1lTG9hZFR5cGUgbV9sb2FkVHlwZTsKQEAgLTQ4MCw5ICs0NjUsNiBAQCBwcml2
YXRlOgogCiAgICAgS1VSTCBtX3dvcmtpbmdVUkw7CiAKLSAgICBPd25QdHI8SWNvbkxvYWRlcj4g
bV9pY29uTG9hZGVyOwotICAgIGJvb2wgbV9tYXlMb2FkSWNvbkxhdGVyOwotCiAgICAgYm9vbCBt
X25lZWRzQ2xlYXI7CiAKICAgICBLVVJMIG1fc3VibWl0dGVkRm9ybVVSTDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDkuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgS3JpcyBKb3JkYW4gPGtyaXNqb3JkYW5AZ21haWwu
Y29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJY29uQ29udHJvbGxlci5oIgor
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRl
ICJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJY29uRGF0YWJhc2VCYXNlLmgiCisjaW5jbHVk
ZSAiSWNvbkxvYWRlci5oIgorI2luY2x1ZGUgIkljb25VUkwuaCIKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworSWNvbkNvbnRyb2xsZXI6Okljb25Db250cm9sbGVyKEZyYW1lKiBmcmFt
ZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3dhaXRpbmdGb3JMb2FkRGVjaXNpb24o
ZmFsc2UpCit7Cit9CisKK0ljb25Db250cm9sbGVyOjp+SWNvbkNvbnRyb2xsZXIoKQoreworfQor
CitLVVJMIEljb25Db250cm9sbGVyOjp1cmwoKQoreworICAgIEljb25VUkxzIGljb25VUkxzID0g
dXJscyhGYXZpY29uKTsKKyAgICByZXR1cm4gaWNvblVSTHMuaXNFbXB0eSgpID8gS1VSTCgpIDog
aWNvblVSTHNbMF0ubV9pY29uVVJMOworfQorCitJY29uVVJMcyBJY29uQ29udHJvbGxlcjo6dXJs
cyhpbnQgaWNvblR5cGVzKQoreworICAgIEljb25VUkxzIGljb25VUkxzOworICAgIGlmIChtX2Zy
YW1lLT50cmVlKCkgJiYgbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IGljb25VUkxzOworCisgICAgaWYgKGljb25UeXBlcyAmIEZhdmljb24gJiYgIWFwcGVuZFRvSWNv
blVSTHMoRmF2aWNvbiwgJmljb25VUkxzKSkKKyAgICAgICAgaWNvblVSTHMuYXBwZW5kKGRlZmF1
bHRVUkwoRmF2aWNvbikpOworCisjaWYgRU5BQkxFKFRPVUNIX0lDT05fTE9BRElORykKKyAgICBi
b29sIGhhdmVQcmVjb21wb3NlZEljb24gPSBmYWxzZTsKKyAgICBpZiAoaWNvblR5cGVzICYgVG91
Y2hQcmVjb21wb3NlZEljb24pCisgICAgICAgIGhhdmVQcmVjb21wb3NlZEljb24gPSBhcHBlbmRU
b0ljb25VUkxzKFRvdWNoUHJlY29tcG9zZWRJY29uLCAmaWNvblVSTHMpOworCisgICAgYm9vbCBo
YXZlVG91Y2hJY29uID0gZmFsc2U7CisgICAgaWYgKGljb25UeXBlcyAmIFRvdWNoSWNvbikKKyAg
ICAgICAgaGF2ZVRvdWNoSWNvbiA9IGFwcGVuZFRvSWNvblVSTHMoVG91Y2hJY29uLCAmaWNvblVS
THMpOworCisgICAgLy8gT25seSByZXR1cm4gdGhlIGRlZmF1bHQgdG91Y2ggaWNvbnMgd2hlbiB0
aGUgYm90aCB3ZXJlIHJlcXVpcmVkIGFuZCBuZWl0aGVyIHdhcyBnb3R0ZW4uCisgICAgaWYgKGlj
b25UeXBlcyAmIFRvdWNoUHJlY29tcG9zZWRJY29uICYmIGljb25UeXBlcyAmIFRvdWNoSWNvbiAm
JiAhaGF2ZVByZWNvbXBvc2VkSWNvbiAmJiAhaGF2ZVRvdWNoSWNvbikgeworICAgICAgICBpY29u
VVJMcy5hcHBlbmQoZGVmYXVsdFVSTChUb3VjaFByZWNvbXBvc2VkSWNvbikpOworICAgICAgICBp
Y29uVVJMcy5hcHBlbmQoZGVmYXVsdFVSTChUb3VjaEljb24pKTsKKyAgICB9CisjZW5kaWYKKyAg
ICByZXR1cm4gaWNvblVSTHM7Cit9CisKK3ZvaWQgSWNvbkNvbnRyb2xsZXI6OmNvbW1pdFRvRGF0
YWJhc2UoY29uc3QgS1VSTCYgaWNvbikKK3sKKyAgICBMT0coSWNvbkRhdGFiYXNlLCAiQ29tbWl0
dGluZyBpY29uVVJMICVzIHRvIGRhdGFiYXNlIGZvciBwYWdlVVJMcyAlcyBhbmQgJXMiLCBpY29u
LnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJp
bmcoKS5hc2NpaSgpLmRhdGEoKSwgbV9mcmFtZS0+bG9hZGVyKCktPmluaXRpYWxSZXF1ZXN0KCku
dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIGljb25EYXRhYmFzZSgpLnNldElj
b25VUkxGb3JQYWdlVVJMKGljb24uc3RyaW5nKCksIG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
LnN0cmluZygpKTsKKyAgICBpY29uRGF0YWJhc2UoKS5zZXRJY29uVVJMRm9yUGFnZVVSTChpY29u
LnN0cmluZygpLCBtX2ZyYW1lLT5sb2FkZXIoKS0+aW5pdGlhbFJlcXVlc3QoKS51cmwoKS5zdHJp
bmcoKSk7Cit9CisKK3ZvaWQgSWNvbkNvbnRyb2xsZXI6OnNldFVSTChjb25zdCBJY29uVVJMJiBp
Y29uVVJMKQoreworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5zZXRJ
Y29uVVJMKGljb25VUkwpOworfQorCit2b2lkIEljb25Db250cm9sbGVyOjpzdGFydExvYWRlcigp
Cit7CisgICAgLy8gRklYTUU6IFdlIGtpY2sgb2ZmIHRoZSBpY29uIGxvYWRlciB3aGVuIHRoZSBm
cmFtZSBpcyBkb25lIHJlY2VpdmluZyBpdHMgbWFpbiByZXNvdXJjZS4KKyAgICAvLyBCdXQgd2Ug
c2hvdWxkIGluc3RlYWQgZG8gaXQgd2hlbiB3ZSdyZSBkb25lIHBhcnNpbmcgdGhlIGhlYWQgZWxl
bWVudC4KKyAgICBpZiAoIW1fZnJhbWUtPmxvYWRlcigpLT5pc0xvYWRpbmdNYWluRnJhbWUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpY29uRGF0YWJhc2UoKS5pc0VuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgS1VSTCBpY29uVVJMKHVybCgpKTsKKyAgICBTdHJpbmcg
dXJsU3RyaW5nKGljb25VUkwuc3RyaW5nKCkpOworICAgIGlmICh1cmxTdHJpbmcuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQZW9wbGUgd2hvIHdhbnQgdG8gYXZvaWQgbG9h
ZGluZyBpbWFnZXMgZ2VuZXJhbGx5IHdhbnQgdG8gYXZvaWQgbG9hZGluZyBhbGwgaW1hZ2VzLCB1
bmxlc3MgYW4gZXhjZXB0aW9uIGhhcyBiZWVuIG1hZGUgZm9yIHNpdGUgaWNvbnMuCisgICAgLy8g
Tm93IHRoYXQgd2UndmUgYWNjb3VudGVkIGZvciBVUkwgbWFwcGluZywgYXZvaWQgc3RhcnRpbmcg
dGhlIG5ldHdvcmsgbG9hZCBpZiBpbWFnZXMgYXJlbid0IHNldCB0byBkaXNwbGF5IGF1dG9tYXRp
Y2FsbHkuCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAg
ICBpZiAoc2V0dGluZ3MgJiYgIXNldHRpbmdzLT5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSAm
JiAhc2V0dGluZ3MtPmxvYWRzU2l0ZUljb25zSWdub3JpbmdJbWFnZUxvYWRpbmdTZXR0aW5nKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHdlJ3JlIHJlbG9hZGluZyB0aGUgcGFnZSwg
YWx3YXlzIHN0YXJ0IHRoZSBpY29uIGxvYWQgbm93LgorICAgIC8vIEZJWE1FOiBIb3cgY2FuIHRo
aXMgY29uZGl0aW9uIGV2ZXIgYmUgdHJ1ZT8KKyAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmxv
YWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZCAmJiBtX2ZyYW1lLT5sb2FkZXIoKS0+bG9h
ZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbikgeworICAgICAgICBjb250
aW51ZUxvYWRXaXRoRGVjaXNpb24oSWNvbkxvYWRZZXMpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGljb25EYXRhYmFzZSgpLnN1cHBvcnRzQXN5bmNocm9ub3VzTW9kZSgpKSB7
CisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5nZXRJY29uTG9h
ZERlY2lzaW9uRm9ySWNvblVSTCh1cmxTdHJpbmcpOworICAgICAgICAvLyBDb21taXQgdGhlIGlj
b24gdXJsIG1hcHBpbmcgdG8gdGhlIGRhdGFiYXNlIGp1c3QgaW4gY2FzZSB3ZSBkb24ndCBlbmQg
dXAgbG9hZGluZyBsYXRlci4KKyAgICAgICAgY29tbWl0VG9EYXRhYmFzZShpY29uVVJMKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEljb25Mb2FkRGVjaXNpb24gZGVjaXNpb24gPSBp
Y29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0xvYWREZWNpc2lvbkZvckljb25VUkwodXJsU3RyaW5n
LCBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CisKKyAgICBpZiAoZGVjaXNp
b24gPT0gSWNvbkxvYWRVbmtub3duKSB7CisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgbWF5
IGVuZCB1cCBsb2FkaW5nIHRoZSBpY29uIGxhdGVyLCBidXQgd2Ugc3RpbGwgd2FudCB0byBjb21t
aXQgdGhlIGljb24gdXJsIG1hcHBpbmcgdG8gdGhlIGRhdGFiYXNlCisgICAgICAgIC8vIGp1c3Qg
aW4gY2FzZSB3ZSBkb24ndCBlbmQgdXAgbG9hZGluZyBsYXRlciAtIGlmIHdlIGNvbW1pdCB0aGUg
bWFwcGluZyBhIHNlY29uZCB0aW1lIGFmdGVyIHRoZSBsb2FkLCB0aGF0J3Mgbm8gYmlnIGRlYWwK
KyAgICAgICAgLy8gV2UgYWxzbyB0ZWxsIHRoZSBjbGllbnQgdG8gcmVnaXN0ZXIgZm9yIHRoZSBu
b3RpZmljYXRpb24gdGhhdCB0aGUgaWNvbiBpcyByZWNlaXZlZCBub3cgc28gaXQgaXNuJ3QgbWlz
c2VkIGluIGNhc2UgdGhlIAorICAgICAgICAvLyBpY29uIGlzIGxhdGVyIHJlYWQgaW4gZnJvbSBk
aXNrCisgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJJY29uQ29udHJvbGxlciAlcCBtaWdodCBs
b2FkIGljb24gJXMgbGF0ZXIiLCB0aGlzLCB1cmxTdHJpbmcuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICBtX3dhaXRpbmdGb3JMb2FkRGVjaXNpb24gPSB0cnVlOyAgICAKKyAgICAgICAgbV9mcmFt
ZS0+bG9hZGVyKCktPmNsaWVudCgpLT5yZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oKTsKKyAg
ICAgICAgY29tbWl0VG9EYXRhYmFzZShpY29uVVJMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNvbnRpbnVlTG9hZFdpdGhEZWNpc2lvbihkZWNpc2lvbik7Cit9CisKK3ZvaWQgSWNv
bkNvbnRyb2xsZXI6OnN0b3BMb2FkZXIoKQoreworICAgIGlmIChtX2ljb25Mb2FkZXIpCisgICAg
ICAgIG1faWNvbkxvYWRlci0+c3RvcExvYWRpbmcoKTsKK30KKworLy8gQ2FsbGJhY2sgZm9yIHRo
ZSBvbGQtc3R5bGUgc3luY2hyb25vdXMgSWNvbkRhdGFiYXNlIGludGVyZmFjZS4KK3ZvaWQgSWNv
bkNvbnRyb2xsZXI6OmxvYWREZWNpc2lvblJlY2VpdmVkKEljb25Mb2FkRGVjaXNpb24gaWNvbkxv
YWREZWNpc2lvbikKK3sKKyAgICBpZiAoIW1fd2FpdGluZ0ZvckxvYWREZWNpc2lvbikKKyAgICAg
ICAgcmV0dXJuOworICAgIExPRyhJY29uRGF0YWJhc2UsICJJY29uQ29udHJvbGxlciAlcCB3YXMg
dG9sZCBhIGxvYWQgZGVjaXNpb24gaXMgYXZhaWxhYmxlIGZvciBpdHMgaWNvbiIsIHRoaXMpOwor
ICAgIGNvbnRpbnVlTG9hZFdpdGhEZWNpc2lvbihpY29uTG9hZERlY2lzaW9uKTsKKyAgICBtX3dh
aXRpbmdGb3JMb2FkRGVjaXNpb24gPSBmYWxzZTsKK30KKwordm9pZCBJY29uQ29udHJvbGxlcjo6
Y29udGludWVMb2FkV2l0aERlY2lzaW9uKEljb25Mb2FkRGVjaXNpb24gaWNvbkxvYWREZWNpc2lv
bikKK3sKKyAgICBBU1NFUlQoaWNvbkxvYWREZWNpc2lvbiAhPSBJY29uTG9hZFVua25vd24pOwor
CisgICAgLy8gIEZJWE1FICg8cmRhcjovL3Byb2JsZW0vOTE2ODYwNT4pIC0gV2Ugc2hvdWxkIHN1
cHBvcnQgaW4tbWVtb3J5LW9ubHkgcHJpdmF0ZSBicm93c2luZyBpY29ucyBpbiBhc3luY2hyb25v
dXMgaWNvbiBkYXRhYmFzZSBtb2RlLgorICAgIGlmIChpY29uRGF0YWJhc2UoKS5zdXBwb3J0c0Fz
eW5jaHJvbm91c01vZGUoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVC
cm93c2luZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGljb25Mb2FkRGVj
aXNpb24gPT0gSWNvbkxvYWRObykgeworICAgICAgICBLVVJMIGljb25VUkwodXJsKCkpOworICAg
ICAgICBTdHJpbmcgdXJsU3RyaW5nKGljb25VUkwuc3RyaW5nKCkpOworCisgICAgICAgIExPRyhJ
Y29uRGF0YWJhc2UsICJJY29uQ29udHJvbGxlcjo6c3RhcnRMb2FkZXIoKSAtIFRvbGQgbm90IHRv
IGxvYWQgdGhpcyBpY29uLCBjb21taXR0aW5nIGljb25VUkwgJXMgdG8gZGF0YWJhc2UgZm9yIHBh
Z2VVUkwgbWFwcGluZyIsIHVybFN0cmluZy5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGNvbW1p
dFRvRGF0YWJhc2UoaWNvblVSTCk7CisKKyAgICAgICAgaWYgKGljb25EYXRhYmFzZSgpLnN1cHBv
cnRzQXN5bmNocm9ub3VzTW9kZSgpKSB7CisgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKS0+Z2V0SWNvbkRhdGFGb3JJY29uVVJMKHVybFN0cmluZyk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSB3ZXJlIHRvbGQgbm90
IHRvIGxvYWQgdGhpcyBpY29uIC0gdGhhdCBtZWFucyB0aGlzIGljb24gaXMgYWxyZWFkeSBrbm93
biBieSB0aGUgZGF0YWJhc2UKKyAgICAgICAgLy8gSWYgdGhlIGljb24gZGF0YSBoYXNuJ3QgYmVl
biByZWFkIGluIGZyb20gZGlzayB5ZXQsIGtpY2sgb2ZmIHRoZSByZWFkIG9mIHRoZSBpY29uIGZy
b20gdGhlIGRhdGFiYXNlIHRvIG1ha2Ugc3VyZSBzb21lb25lCisgICAgICAgIC8vIGhhcyBkb25l
IGl0LiBUaGlzIGlzIGFmdGVyIHJlZ2lzdGVyaW5nIGZvciB0aGUgbm90aWZpY2F0aW9uIHNvIHRo
ZSBXZWJWaWV3IGNhbiBjYWxsIHRoZSBhcHByb3ByaWF0ZSBkZWxlZ2F0ZSBtZXRob2QuCisgICAg
ICAgIC8vIE90aGVyd2lzZSBpZiB0aGUgaWNvbiBkYXRhICppcyogYXZhaWxhYmxlLCBub3RpZnkg
dGhlIGRlbGVnYXRlCisgICAgICAgIGlmICghaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29u
RGF0YUtub3duRm9ySWNvblVSTCh1cmxTdHJpbmcpKSB7CisgICAgICAgICAgICBMT0coSWNvbkRh
dGFiYXNlLCAiVG9sZCBub3QgdG8gbG9hZCBpY29uICVzIGJ1dCBpY29uIGRhdGEgaXMgbm90IHll
dCBhdmFpbGFibGUgLSByZWdpc3RlcmluZyBmb3Igbm90aWZpY2F0aW9uIGFuZCByZXF1ZXN0aW5n
IGxvYWQgZnJvbSBkaXNrIiwgdXJsU3RyaW5nLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9u
KCk7CisgICAgICAgICAgICBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25Gb3JQYWdlVVJM
KG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLCBJbnRTaXplKDAsIDApKTsKKyAg
ICAgICAgICAgIGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwobV9mcmFt
ZS0+bG9hZGVyKCktPmluaXRpYWxSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCksIEludFNpemUoMCwg
MCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKS0+ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpOworCisgICAgICAgIHJldHVybjsKKyAgICB9
IAorCisgICAgaWYgKCFtX2ljb25Mb2FkZXIpCisgICAgICAgIG1faWNvbkxvYWRlciA9IEljb25M
b2FkZXI6OmNyZWF0ZShtX2ZyYW1lKTsKKworICAgIG1faWNvbkxvYWRlci0+c3RhcnRMb2FkaW5n
KCk7Cit9CisKK2Jvb2wgSWNvbkNvbnRyb2xsZXI6OmFwcGVuZFRvSWNvblVSTHMoSWNvblR5cGUg
aWNvblR5cGUsIEljb25VUkxzKiBpY29uVVJMcykKK3sKKyAgICBJY29uVVJMIHVybCA9IG1fZnJh
bWUtPmRvY3VtZW50KCktPmljb25VUkwoaWNvblR5cGUpOworICAgIGlmICh1cmwubV9pY29uVVJM
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWNvblVSTHMtPmFwcGVu
ZCh1cmwpOworICAgIHJldHVybiB0cnVlOworfQorCitJY29uVVJMIEljb25Db250cm9sbGVyOjpk
ZWZhdWx0VVJMKEljb25UeXBlIGljb25UeXBlKQoreworICAgIC8vIERvbid0IHJldHVybiBhIGZh
dmljb24gaWNvblVSTCB1bmxlc3Mgd2UncmUgaHR0cCBvciBodHRwcworICAgIEtVUkwgZG9jdW1l
bnRVUkwgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsKKyAgICBpZiAoIWRvY3VtZW50VVJM
LnByb3RvY29sSW5IVFRQRmFtaWx5KCkpCisgICAgICAgIHJldHVybiBJY29uVVJMKCk7CisKKyAg
ICBLVVJMIHVybDsKKyAgICBib29sIGNvdWxkU2V0UHJvdG9jb2wgPSB1cmwuc2V0UHJvdG9jb2wo
ZG9jdW1lbnRVUkwucHJvdG9jb2woKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb3VsZFNldFByb3Rv
Y29sLCBjb3VsZFNldFByb3RvY29sKTsKKyAgICB1cmwuc2V0SG9zdChkb2N1bWVudFVSTC5ob3N0
KCkpOworICAgIGlmIChkb2N1bWVudFVSTC5oYXNQb3J0KCkpCisgICAgICAgIHVybC5zZXRQb3J0
KGRvY3VtZW50VVJMLnBvcnQoKSk7CisgICAgaWYgKGljb25UeXBlID09IEZhdmljb24pIHsKKyAg
ICAgICAgdXJsLnNldFBhdGgoIi9mYXZpY29uLmljbyIpOworICAgICAgICByZXR1cm4gSWNvblVS
TCh1cmwsIEZhdmljb24pOworICAgIH0KKyNpZiBFTkFCTEUoVE9VQ0hfSUNPTl9MT0FESU5HKQor
ICAgIGlmIChpY29uVHlwZSA9PSBUb3VjaFByZWNvbXBvc2VkSWNvbikgeworICAgICAgICB1cmwu
c2V0UGF0aCgiL2FwcGxlLXRvdWNoLWljb24tcHJlY29tcG9zZWQucG5nIik7CisgICAgICAgIHJl
dHVybiBJY29uVVJMKHVybCwgVG91Y2hQcmVjb21wb3NlZEljb24pOworICAgIH0KKyAgICBpZiAo
aWNvblR5cGUgPT0gVG91Y2hJY29uKSB7CisgICAgICAgIHVybC5zZXRQYXRoKCIvYXBwbGUtdG91
Y2gtaWNvbi5wbmciKTsKKyAgICAgICAgcmV0dXJuIEljb25VUkwodXJsLCBUb3VjaEljb24pOwor
ICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBJY29uVVJMKCk7Cit9CisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICho
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMDkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJY29u
Q29udHJvbGxlcl9oCisjZGVmaW5lIEljb25Db250cm9sbGVyX2gKKworI2luY2x1ZGUgIkljb25E
YXRhYmFzZUJhc2UuaCIKKyNpbmNsdWRlICJJY29uVVJMLmgiCisjaW5jbHVkZSAiS1VSTC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYW1lOworY2xhc3MgSWNvbkxvYWRlcjsK
KworY2xhc3MgSWNvbkNvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEljb25D
b250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBJY29uQ29udHJvbGxlcihGcmFtZSopOworICAgIH5JY29uQ29udHJvbGxlcigpOwor
CisgICAgS1VSTCB1cmwoKTsKKyAgICBJY29uVVJMcyB1cmxzKGludCBpY29uVHlwZXMpOworCisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBpbnRvIGl0cyBvbmUg
Y2FsbGVyIQorICAgIHZvaWQgc2V0VVJMKGNvbnN0IEljb25VUkwmKTsKKworICAgIHZvaWQgc3Rh
cnRMb2FkZXIoKTsKKyAgICB2b2lkIHN0b3BMb2FkZXIoKTsKKworICAgIHZvaWQgbG9hZERlY2lz
aW9uUmVjZWl2ZWQoSWNvbkxvYWREZWNpc2lvbik7CisgICAgdm9pZCBjb250aW51ZUxvYWRXaXRo
RGVjaXNpb24oSWNvbkxvYWREZWNpc2lvbik7CisKKyAgICB2b2lkIGNvbW1pdFRvRGF0YWJhc2Uo
Y29uc3QgS1VSTCYgaWNvbik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBhcHBlbmRUb0ljb25VUkxz
KEljb25UeXBlLCBJY29uVVJMcyopOworICAgIEljb25VUkwgZGVmYXVsdFVSTChJY29uVHlwZSk7
CisKKyAgICBGcmFtZSogbV9mcmFtZTsKKworICAgIE93blB0cjxJY29uTG9hZGVyPiBtX2ljb25M
b2FkZXI7CisgICAgYm9vbCBtX3dhaXRpbmdGb3JMb2FkRGVjaXNpb247Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2lj
b24vSWNvbkxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2lj
b24vSWNvbkxvYWRlci5jcHAJKHJldmlzaW9uIDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvbkxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDEyICs2OSwxMiBA
QCB2b2lkIEljb25Mb2FkZXI6OnN0YXJ0TG9hZGluZygpCiAgICAgLy8gU3VicmVzb3VyY2VMb2Fk
ZXI6OmNyZWF0ZSByZXR1cm5zLgogICAgIG1fbG9hZElzSW5Qcm9ncmVzcyA9IHRydWU7CiAKLSAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KG1fZnJhbWUtPmxvYWRlcigpLT5pY29u
VVJMKCkpOworICAgIFJlc291cmNlUmVxdWVzdCByZXNvdXJjZVJlcXVlc3QobV9mcmFtZS0+bG9h
ZGVyKCktPmljb24oKS0+dXJsKCkpOwogICAgIHJlc291cmNlUmVxdWVzdC5zZXRQcmlvcml0eShS
ZXNvdXJjZUxvYWRQcmlvcml0eUxvdyk7CiAKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+
IGxvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9h
ZChtX2ZyYW1lLCB0aGlzLCByZXNvdXJjZVJlcXVlc3QpOwogICAgIGlmICghbG9hZGVyKQotICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzdGFydCBsb2FkIGZvciBpY29uIGF0IHVybCAlcyIs
IG1fZnJhbWUtPmxvYWRlcigpLT5pY29uVVJMKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwor
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzdGFydCBsb2FkIGZvciBpY29uIGF0IHVybCAl
cyIsIG1fZnJhbWUtPmxvYWRlcigpLT5pY29uKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0
YSgpKTsKIAogICAgIC8vIFN0b3JlIHRoZSBoYW5kbGUgc28gd2UgY2FuIGNhbmNlbCB0aGUgbG9h
ZCBpZiBzdG9wTG9hZGluZyBpcyBjYWxsZWQgbGF0ZXIuCiAgICAgLy8gQnV0IG9ubHkgZG8gaXQg
aWYgdGhlIGxvYWQgaGFzbid0IGFscmVhZHkgY29tcGxldGVkLgpAQCAtMTU3LDcgKzE1Nyw3IEBA
IHZvaWQgSWNvbkxvYWRlcjo6ZmluaXNoTG9hZGluZyhjb25zdCBLVVIKICAgICAKICAgICBpZiAo
IWljb25VUkwuaXNFbXB0eSgpICYmIG1fbG9hZElzSW5Qcm9ncmVzcykgewogICAgICAgICBMT0co
SWNvbkRhdGFiYXNlLCAiSWNvbkxvYWRlcjo6ZmluaXNoTG9hZGluZygpIC0gQ29tbWl0dGluZyBp
Y29uVVJMICVzIHRvIGRhdGFiYXNlIiwgaWNvblVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7
Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jb21taXRJY29uVVJMVG9JY29uRGF0YWJhc2Uo
aWNvblVSTCk7CisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5pY29uKCktPmNvbW1pdFRvRGF0
YWJhc2UoaWNvblVSTCk7CiAgICAgICAgIC8vIFNldHRpbmcgdGhlIGljb24gZGF0YSBvbmx5IGFm
dGVyIGNvbW1pdHRpbmcgdG8gdGhlIGRhdGFiYXNlIGVuc3VyZXMgdGhhdCB0aGUgZGF0YSBpcwog
ICAgICAgICAvLyBrZXB0IGluIG1lbW9yeSAoc28gaXQgZG9lcyBub3QgaGF2ZSB0byBiZSByZWFk
IGZyb20gdGhlIGRhdGFiYXNlIGFzeW5jaHJvbm91c2x5KSwgc2luY2UKICAgICAgICAgLy8gdGhl
cmUgaXMgYSBwYWdlIFVSTCByZWZlcmVuY2luZyBpdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9pY29uL0ljb25Mb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uTG9hZGVyLmgJKHJldmlzaW9uIDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL2ljb24vSWNvbkxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMiArNDIsMTIg
QEAgY2xhc3MgSWNvbkxvYWRlciA6IHByaXZhdGUgU3VicmVzb3VyY2VMbwogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzT3duUHRyPEljb25Mb2FkZXI+IGNyZWF0ZShGcmFtZSopOwogICAgIH5JY29u
TG9hZGVyKCk7Ci0gICAgCisKICAgICB2b2lkIHN0YXJ0TG9hZGluZygpOwogICAgIHZvaWQgc3Rv
cExvYWRpbmcoKTsKIAogcHJpdmF0ZToKLSAgICBJY29uTG9hZGVyKEZyYW1lKik7CisgICAgZXhw
bGljaXQgSWNvbkxvYWRlcihGcmFtZSopOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBj
aGFyKiwgaW50KTsKQEAgLTU1LDcgKzU1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoU3VicmVzb3Vy
Y2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotICAgIAorCiAgICAg
dm9pZCBmaW5pc2hMb2FkaW5nKGNvbnN0IEtVUkwmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZGF0YSk7CiAgICAgdm9pZCBjbGVhckxvYWRpbmdTdGF0ZSgpOwogCkBAIC02Myw3ICs2Myw3IEBA
IHByaXZhdGU6CiAKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IG1fcmVzb3VyY2VMb2Fk
ZXI7CiAgICAgYm9vbCBtX2xvYWRJc0luUHJvZ3Jlc3M7Ci19OyAvLyBjbGFzcyBJY29uTG9hZGVy
Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCShyZXZpc2lvbiA4ODYxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDYtMTIgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGYWN0b3IgSWNvbkNvbnRyb2xsZXIgb3V0IG9mIEZyYW1lTG9hZGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjUwOQor
CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lSW1wbDo6aWNvblVSTHMpOgorCiAyMDExLTA2LTEwICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2
aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZp
c2lvbiA4ODYxMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMSw3ICs1MzEsNyBAQCBXZWJWZWN0b3I8V2ViSWNvblVS
TD4gV2ViRnJhbWVJbXBsOjppY29uCiAgICAgLy8gVGhlIFVSTCB0byB0aGUgaWNvbiBtYXkgYmUg
aW4gdGhlIGhlYWRlci4gQXMgc3VjaCwgb25seQogICAgIC8vIGFzayB0aGUgbG9hZGVyIGZvciB0
aGUgaWNvbiBpZiBpdCdzIGZpbmlzaGVkIGxvYWRpbmcuCiAgICAgaWYgKGZyYW1lTG9hZGVyLT5z
dGF0ZSgpID09IEZyYW1lU3RhdGVDb21wbGV0ZSkKLSAgICAgICAgcmV0dXJuIGZyYW1lTG9hZGVy
LT5pY29uVVJMcyhpY29uVHlwZXMpOworICAgICAgICByZXR1cm4gZnJhbWVMb2FkZXItPmljb24o
KS0+dXJscyhpY29uVHlwZXMpOwogICAgIHJldHVybiBXZWJWZWN0b3I8V2ViSWNvblVSTD4oKTsK
IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96877</attachid>
            <date>2011-06-12 04:11:26 -0700</date>
            <delta_ts>2011-06-13 11:51:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62509-20110612041125.patch</filename>
            <type>text/plain</type>
            <size>43594</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NjExKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDYtMTIgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGYWN0b3IgSWNvbkNvbnRyb2xsZXIgb3V0IG9mIEZyYW1lTG9hZGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjUwOQor
CisgICAgICAgIFRoaXMgbmV3IGNsYXNzIGNvbnRhaW5zIGFsbCB0aGUgaWNvbi1yZWxhdGVkIGxv
Z2ljIGZyb20gRnJhbWVMb2FkZXIuCisgICAgICAgIFRoZSBpY29uLXJlbGF0ZWQgbG9naWMgYW5k
IHN0YXRlIGhhcyBhbG1vc3QgemVybyBpbnRlcmFjdGlvbiB3aXRoIHRoZQorICAgICAgICByZXN0
IG9mIEZyYW1lTG9hZGVyIGFuZCBpcyBiZXR0ZXIgaGFuZGxlZCBhcyBhIHNlcGFyYXRlIGNvbmNl
cm4uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBsaWNpdENsb3NlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpzZXRJY29uVVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNv
dXJjZUFnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVu
dExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6aWNvbkxvYWRE
ZWNpc2lvbkF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6Y29u
dGludWVJY29uTG9hZFdpdGhEZWNpc2lvbik6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RvcCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aWNvbik6CisgICAgICAg
ICogbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uTG9h
ZGVyOjpzdGFydExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkxvYWRlcjo6ZmluaXNo
TG9hZGluZyk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkxvYWRlci5oOgorCiAyMDExLTA2
LTExICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTk4OSw2ICs5ODksNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgbG9hZGVyL2NhY2hl
L0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCiAgICAgbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNw
cAogCisgICAgbG9hZGVyL2ljb24vSWNvbkNvbnRyb2xsZXIuY3BwCiAgICAgbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcAogICAgIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuY3BwCiAg
ICAgbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkocmV2aXNpb24gODg2MTApCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDkzLDYgKzIwOTMsOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9GVFBEaXJlY3RvcnlQYXJzZXIuaCBcCiAJ
U291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25Db250cm9sbGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkNvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlQ2xpZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC02NzUsNiArNjc1LDcgQEAKICAgICAgICAgICAgICds
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2Fj
aGUvTWVtb3J5Q2FjaGUuaCcsCisgICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvbkNvbnRyb2xs
ZXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgnLAogICAgICAg
ICAgICAgJ2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaCcsCiAgICAgICAgICAgICAnbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlQ2xpZW50LmgnLApAQCAtMzQwNSw2ICszNDA2LDcgQEAKICAg
ICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oJywKICAgICAgICAg
ICAgICdsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIv
Y2YvUmVzb3VyY2VMb2FkZXJDRk5ldC5jcHAnLAorICAgICAgICAgICAgJ2xvYWRlci9pY29uL0lj
b25Db250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
LmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5jcHAnLAog
ICAgICAgICAgICAgJ2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwJywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiA4ODYxMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NzAsNiArODcwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgbG9hZGVyL0Zy
YW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcCBcCiAgICAgbG9hZGVyL0hpc3RvcnlDb250cm9sbGVy
LmNwcCBcCiAgICAgbG9hZGVyL0ZUUERpcmVjdG9yeVBhcnNlci5jcHAgXAorICAgIGxvYWRlci9p
Y29uL0ljb25Db250cm9sbGVyLmNwcCBcCiAgICAgbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFz
ZS5jcHAgXAogICAgIGxvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwIFwKICAgICBsb2FkZXIvSW1h
Z2VMb2FkZXIuY3BwIFwKQEAgLTE4MTksNiArMTgyMCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGxv
YWRlci9GcmFtZUxvYWRlci5oIFwKICAgICBsb2FkZXIvRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUu
aCBcCiAgICAgbG9hZGVyL0ZUUERpcmVjdG9yeVBhcnNlci5oIFwKKyAgICBsb2FkZXIvaWNvbi9J
Y29uQ29udHJvbGxlci5oIFwKICAgICBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaCBcCiAgICAg
bG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oIFwKICAgICBsb2FkZXIvaWNvbi9JY29uTG9h
ZGVyLmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHJldmlzaW9uIDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1OTE3LDYgKzI1OTE3LDE0IEBACiAJ
CQkJTmFtZT0iaWNvbiIKIAkJCQk+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxs
b2FkZXJcaWNvblxJY29uQ29udHJvbGxlci5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJ
PEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcaWNvblxJY29uQ29udHJvbGxlci5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
bG9hZGVyXGljb25cSWNvbkRhdGFiYXNlLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTY2LDYgKzMxNjYsOCBAQAogCQk5N0M0
NzFEQzEyRjkyNUJEMDA4NjM1NEIgLyogQ29udGVudFNlY3VyaXR5UG9saWN5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0M0NzFEQTEyRjkyNUJEMDA4
NjM1NEIgLyogQ29udGVudFNlY3VyaXR5UG9saWN5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTdEQ0UyMDExMDgwN0M3NTAwNTdEMzk0IC8qIEhp
c3RvcnlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3RENFMUZGMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5j
cHAgKi87IH07CiAJCTk3RENFMjAyMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdEQ0Uy
MDAxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTdFQkJCQzAxM0E0QjZENDAwNEFB
MUYxIC8qIEljb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3RUJCQkJFMTNBNEI2RDQwMDRBQTFGMSAvKiBJY29uQ29udHJvbGxl
ci5jcHAgKi87IH07CisJCTk3RUJCQkMxMTNBNEI2RDQwMDRBQTFGMSAvKiBJY29uQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdFQkJC
QkYxM0E0QjZENDAwNEFBMUYxIC8qIEljb25Db250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTdFRjdERkUxMDdFNTVCNzAwRDdDNDlD
IC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3RUY3REZEMTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250
cm9sbGVyQmFzZS5jcHAgKi87IH07CiAJCTk4RUIxRjk1MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJ
bXBsZW1lbnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUI0MTcwNjQxMjU2NjJC
MzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI0MTcwNjIxMjU2NjJCMzAwNkIyOEZDIC8q
IEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC05Nzc5LDYgKzk3ODEsOCBAQAogCQk5N0M0NzFEQTEyRjky
NUJEMDA4NjM1NEIgLyogQ29udGVudFNlY3VyaXR5UG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvbnRlbnRTZWN1cml0eVBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5N0RDRTFGRjEwODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGlzdG9yeUNvbnRy
b2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0RDRTIwMDEwODA3Qzc1
MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSGlzdG9yeUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTdFQkJCQkUxM0E0QjZENDAwNEFBMUYxIC8qIEljb25Db250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEljb25Db250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdFQkJCQkYxM0E0QjZENDAwNEFBMUYxIC8qIEljb25D
b250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEljb25Db250cm9s
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3RUY3REZEMTA3RTU1QjcwMEQ3
QzQ5QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk4RUIxRjk0MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRlZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3RJbXBsZW1lbnRlZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjQxNzA2MjEyNTY2MkIzMDA2QjI4RkMgLyogQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTM5NjksNiArMTM5NzMsOCBAQAogCQk1MTI2RTZCNjBBMkUzQUVGMDA1QzI5RkEgLyogaWNv
biAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJOTdFQkJC
QkUxM0E0QjZENDAwNEFBMUYxIC8qIEljb25Db250cm9sbGVyLmNwcCAqLywKKwkJCQk5N0VCQkJC
RjEzQTRCNkQ0MDA0QUExRjEgLyogSWNvbkNvbnRyb2xsZXIuaCAqLywKIAkJCQk1MTI2RTZCOTBB
MkUzQjEyMDA1QzI5RkEgLyogSWNvbkRhdGFiYXNlLmNwcCAqLywKIAkJCQk1MTI2RTZCQTBBMkUz
QjEyMDA1QzI5RkEgLyogSWNvbkRhdGFiYXNlLmggKi8sCiAJCQkJNTE2OTUzOTUxMzI5QTNDODAw
QjkyRDA0IC8qIEljb25EYXRhYmFzZUJhc2UuY3BwICovLApAQCAtMjMxNzMsNiArMjMxNzksNyBA
QAogCQkJCUZERjA5REM5MTM5OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ5QTg1QjZDMTM4RDU3M0EwMEVDQjdCMyAvKiBTdHJlYW1FdmVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlBODVCNzgxMzhENThFRTAwRUNCN0IzIC8qIEpTU3Ry
ZWFtRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTk3RUJCQkMxMTNBNEI2RDQwMDRBQTFGMSAv
KiBJY29uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTkwNiw2ICsyNTkxMyw3IEBA
CiAJCQkJRkRGMDlEQzgxMzk5QjYyMjAwNjg4RTVCIC8qIEpTQmlxdWFkRmlsdGVyTm9kZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0OUE4NUI2QjEzOEQ1NzNBMDBFQ0I3QjMgLyogU3RyZWFtRXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlBODVCNzcxMzhENThFRTAwRUNCN0IzIC8qIEpT
U3RyZWFtRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTdFQkJCQzAxM0E0QjZENDAwNEFB
MUYxIC8qIEljb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCShyZXZpc2lvbiA4ODYxMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMTUsMTIgKzIxMTUsMTAgQEAgdm9pZCBEb2N1
bWVudDo6aW1wbGljaXRDbG9zZSgpCiAgICAgLy8gQnV0IHRob3NlIGFkZCBhIGR5bmFtaWMgY29t
cG9uZW50IHRvIHRoZSBmYXZpY29uIHRoYXQgaGFzIFVJIAogICAgIC8vIHJhbWlmaWNhdGlvbnMs
IGFuZCB3ZSBuZWVkIHRvIGRlY2lkZSB3aGF0IGlzIHRoZSBSaWdodCBUaGluZyBUbyBEbyh0bSkK
ICAgICBGcmFtZSogZiA9IGZyYW1lKCk7Ci0gICAgaWYgKGYpCi0gICAgICAgIGYtPmxvYWRlcigp
LT5zdGFydEljb25Mb2FkZXIoKTsKLQotICAgIC8vIFJlc3VtZSB0aGUgYW5pbWF0aW9ucyAob3Ig
c3RhcnQgdGhlbSkKLSAgICBpZiAoZikKKyAgICBpZiAoZikgeworICAgICAgICBmLT5sb2FkZXIo
KS0+aWNvbigpLT5zdGFydExvYWRlcigpOwogICAgICAgICBmLT5hbmltYXRpb24oKS0+cmVzdW1l
QW5pbWF0aW9uc0ZvckRvY3VtZW50KHRoaXMpOworICAgIH0KIAogICAgIEltYWdlTG9hZGVyOjpk
aXNwYXRjaFBlbmRpbmdCZWZvcmVMb2FkRXZlbnRzKCk7CiAgICAgSW1hZ2VMb2FkZXI6OmRpc3Bh
dGNoUGVuZGluZ0xvYWRFdmVudHMoKTsKQEAgLTQzMTgsNyArNDMxNiw3IEBAIHZvaWQgRG9jdW1l
bnQ6OnNldEljb25VUkwoY29uc3QgU3RyaW5nJiAKICAgICBlbHNlIGlmICghbWltZVR5cGUuaXNF
bXB0eSgpKQogICAgICAgICBzZXRJY29uVVJMKG5ld1VSTCk7CiAgICAgaWYgKEZyYW1lKiBmID0g
ZnJhbWUoKSkKLSAgICAgICAgZi0+bG9hZGVyKCktPnNldEljb25VUkwobmV3VVJMKTsKKyAgICAg
ICAgZi0+bG9hZGVyKCktPmljb24oKS0+c2V0VVJMKG5ld1VSTCk7CiB9CiAKIHZvaWQgRG9jdW1l
bnQ6OnNldEljb25VUkwoY29uc3QgSWNvblVSTCYgaWNvblVSTCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAJKHJldmlz
aW9uIDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlUgogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm1p
bWVUeXBlKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNl
dFN0cmluZygibWltZVR5cGUiLCBjYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgp
KTsKICAgICAgICAgfQotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmll
cihyZXNwb25zZS51cmwoKSwgbG9hZGVyLT5mcmFtZUxvYWRlcigpLT5pY29uVVJMKCkpKQorICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihyZXNwb25zZS51cmwoKSwg
bG9hZGVyLT5mcmFtZUxvYWRlcigpLT5pY29uKCktPnVybCgpKSkKICAgICAgICAgICAgIHR5cGUg
PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OkltYWdlUmVzb3VyY2U7CiAgICAgICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIocmVzcG9uc2UudXJsKCksIGxvYWRlci0+dXJs
KCkpICYmIHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlKQogICAgICAg
ICAgICAgdHlwZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gODg2MTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NjUsNyArODY1LDcgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6dHJhbnNmZXJMb2Fk
aW5nUmVzbwogdm9pZCBEb2N1bWVudExvYWRlcjo6aWNvbkxvYWREZWNpc2lvbkF2YWlsYWJsZSgp
CiB7CiAgICAgaWYgKG1fZnJhbWUpCi0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5pY29uTG9h
ZERlY2lzaW9uUmVjZWl2ZWQoaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNMb2FkRGVjaXNpb25G
b3JJY29uVVJMKEtVUkwoZnJhbWVMb2FkZXIoKS0+aWNvblVSTCgpKSwgdGhpcykpOworICAgICAg
ICBtX2ZyYW1lLT5sb2FkZXIoKS0+aWNvbigpLT5sb2FkRGVjaXNpb25SZWNlaXZlZChpY29uRGF0
YWJhc2UoKS5zeW5jaHJvbm91c0xvYWREZWNpc2lvbkZvckljb25VUkwoZnJhbWVMb2FkZXIoKS0+
aWNvbigpLT51cmwoKSwgdGhpcykpOwogfQogCiBzdGF0aWMgdm9pZCBpY29uTG9hZERlY2lzaW9u
Q2FsbGJhY2soSWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiwgdm9pZCogY29udGV4dCkKQEAgLTg4
Niw3ICs4ODYsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpjb250aW51ZUljb25Mb2FkV2l0CiAg
ICAgQVNTRVJUKG1faWNvbkxvYWREZWNpc2lvbkNhbGxiYWNrKTsKICAgICBtX2ljb25Mb2FkRGVj
aXNpb25DYWxsYmFjayA9IDA7CiAgICAgaWYgKG1fZnJhbWUpCi0gICAgICAgIG1fZnJhbWUtPmxv
YWRlcigpLT5jb250aW51ZUljb25Mb2FkV2l0aERlY2lzaW9uKGRlY2lzaW9uKTsKKyAgICAgICAg
bV9mcmFtZS0+bG9hZGVyKCktPmljb24oKS0+Y29udGludWVMb2FkV2l0aERlY2lzaW9uKGRlY2lz
aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgaWNvbkRhdGFDYWxsYmFjayhTaGFyZWRCdWZmZXIqLCB2
b2lkKikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24g
ODg2MTApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MSw5ICs3MSw2IEBACiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCi0jaW5j
bHVkZSAiSWNvbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiSWNvbkxvYWRlci5oIgotI2luY2x1ZGUg
Ikljb25VUkwuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtMTg2
LDYgKzE4Myw3IEBAIEZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcihGcmFtZSogZnJhbWUsIEYKICAg
ICAsIG1faGlzdG9yeShmcmFtZSkKICAgICAsIG1fbm90aWZlcihmcmFtZSkKICAgICAsIG1fc3Vi
ZnJhbWVMb2FkZXIoZnJhbWUpCisgICAgLCBtX2ljb24oZnJhbWUpCiAgICAgLCBtX3N0YXRlKEZy
YW1lU3RhdGVDb21taXR0ZWRQYWdlKQogICAgICwgbV9sb2FkVHlwZShGcmFtZUxvYWRUeXBlU3Rh
bmRhcmQpCiAgICAgLCBtX2RlbGVnYXRlSXNIYW5kbGluZ1Byb3Zpc2lvbmFsTG9hZEVycm9yKGZh
bHNlKQpAQCAtNDUyLDkgKzQ1MCw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0b3AoKQogICAgICAg
ICBwYXJzZXItPnN0b3BQYXJzaW5nKCk7CiAgICAgICAgIHBhcnNlci0+ZmluaXNoKCk7CiAgICAg
fQotCi0gICAgaWYgKG1faWNvbkxvYWRlcikKLSAgICAgICAgbV9pY29uTG9hZGVyLT5zdG9wTG9h
ZGluZygpOworICAgIAorICAgIGljb24oKS0+c3RvcExvYWRlcigpOwogfQogCiBib29sIEZyYW1l
TG9hZGVyOjpjbG9zZVVSTCgpCkBAIC00NjksODIgKzQ2Niw2IEBAIGJvb2wgRnJhbWVMb2FkZXI6
OmNsb3NlVVJMKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotS1VSTCBGcmFtZUxvYWRlcjo6aWNv
blVSTCgpCi17Ci0gICAgSWNvblVSTHMgdXJscyA9IGljb25VUkxzKEZhdmljb24pOwotICAgIHJl
dHVybiB1cmxzLmlzRW1wdHkoKSA/IEtVUkwoKSA6IHVybHNbMF0ubV9pY29uVVJMOwotfQotCi1J
Y29uVVJMcyBGcmFtZUxvYWRlcjo6aWNvblVSTHMoaW50IGljb25UeXBlcykKLXsKLSAgICBJY29u
VVJMcyBpY29uVVJMczsKLSAgICAvLyBJZiB0aGlzIGlzbid0IGEgdG9wIGxldmVsIGZyYW1lLCBy
ZXR1cm4KLSAgICBpZiAobV9mcmFtZS0+dHJlZSgpICYmIG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50
KCkpCi0gICAgICAgIHJldHVybiBpY29uVVJMczsKLQotICAgIGlmIChpY29uVHlwZXMgJiBGYXZp
Y29uICYmICFmaWxsSWNvblVSTChGYXZpY29uLCAmaWNvblVSTHMpKQotICAgICAgICBpY29uVVJM
cy5hcHBlbmQoZ2V0RGVmYXVsdEljb25VUkwoRmF2aWNvbikpOwotCi0jaWYgRU5BQkxFKFRPVUNI
X0lDT05fTE9BRElORykKLSAgICBib29sIGhhdmVQcmVjb21wb3NlZEljb24gPSBmYWxzZTsKLSAg
ICBpZiAoaWNvblR5cGVzICYgVG91Y2hQcmVjb21wb3NlZEljb24pCi0gICAgICAgIGhhdmVQcmVj
b21wb3NlZEljb24gPSBmaWxsSWNvblVSTChUb3VjaFByZWNvbXBvc2VkSWNvbiwgJmljb25VUkxz
KTsKLQotICAgIGJvb2wgaGF2ZVRvdWNoSWNvbiA9IGZhbHNlOwotICAgIGlmIChpY29uVHlwZXMg
JiBUb3VjaEljb24pCi0gICAgICAgIGhhdmVUb3VjaEljb24gPSBmaWxsSWNvblVSTChUb3VjaElj
b24sICZpY29uVVJMcyk7Ci0KLSAgICAvLyBPbmx5IHJldHVybiB0aGUgZGVmYXVsdCB0b3VjaCBp
Y29ucyB3aGVuIHRoZSBib3RoIHdlcmUgcmVxdWlyZWQgYW5kIG5laXRoZXIgd2FzIGdvdHRlbi4K
LSAgICBpZiAoaWNvblR5cGVzICYgVG91Y2hQcmVjb21wb3NlZEljb24gJiYgaWNvblR5cGVzICYg
VG91Y2hJY29uICYmICFoYXZlUHJlY29tcG9zZWRJY29uICYmICFoYXZlVG91Y2hJY29uKSB7Ci0g
ICAgICAgIGljb25VUkxzLmFwcGVuZChnZXREZWZhdWx0SWNvblVSTChUb3VjaFByZWNvbXBvc2Vk
SWNvbikpOwotICAgICAgICBpY29uVVJMcy5hcHBlbmQoZ2V0RGVmYXVsdEljb25VUkwoVG91Y2hJ
Y29uKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIGljb25VUkxzOwotfQotCi1ib29sIEZy
YW1lTG9hZGVyOjpmaWxsSWNvblVSTChJY29uVHlwZSBpY29uVHlwZSwgSWNvblVSTHMqIGljb25V
UkxzKQotewotICAgIC8vIElmIHdlIGhhdmUgYW4gaWNvblVSTCBmcm9tIGEgTGluayBlbGVtZW50
LCByZXR1cm4gdGhhdAotICAgIEljb25VUkwgdXJsID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aWNv
blVSTChpY29uVHlwZSk7Ci0gICAgaWYgKHVybC5tX2ljb25VUkwuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpY29uVVJMcy0+YXBwZW5kKHVybCk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotSWNvblVSTCBGcmFtZUxvYWRlcjo6Z2V0RGVmYXVsdEljb25VUkwoSWNv
blR5cGUgaWNvblR5cGUpCi17Ci0gICAgLy8gRG9uJ3QgcmV0dXJuIGEgZmF2aWNvbiBpY29uVVJM
IHVubGVzcyB3ZSdyZSBodHRwIG9yIGh0dHBzCi0gICAgS1VSTCBkb2N1bWVudFVSTCA9IG1fZnJh
bWUtPmRvY3VtZW50KCktPnVybCgpOwotICAgIGlmICghZG9jdW1lbnRVUkwucHJvdG9jb2xJbkhU
VFBGYW1pbHkoKSkKLSAgICAgICAgcmV0dXJuIEljb25VUkwoKTsKLQotICAgIEtVUkwgdXJsOwot
ICAgIGJvb2wgY291bGRTZXRQcm90b2NvbCA9IHVybC5zZXRQcm90b2NvbChkb2N1bWVudFVSTC5w
cm90b2NvbCgpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGNvdWxkU2V0UHJvdG9jb2wsIGNvdWxkU2V0
UHJvdG9jb2wpOwotICAgIHVybC5zZXRIb3N0KGRvY3VtZW50VVJMLmhvc3QoKSk7Ci0gICAgaWYg
KGRvY3VtZW50VVJMLmhhc1BvcnQoKSkKLSAgICAgICAgdXJsLnNldFBvcnQoZG9jdW1lbnRVUkwu
cG9ydCgpKTsKLSAgICBpZiAoaWNvblR5cGUgPT0gRmF2aWNvbikgewotICAgICAgICB1cmwuc2V0
UGF0aCgiL2Zhdmljb24uaWNvIik7Ci0gICAgICAgIHJldHVybiBJY29uVVJMKEtVUkwoUGFyc2Vk
VVJMU3RyaW5nLCB1cmwpLCBGYXZpY29uKTsKLSAgICB9Ci0jaWYgRU5BQkxFKFRPVUNIX0lDT05f
TE9BRElORykKLSAgICBpZiAoaWNvblR5cGUgPT0gVG91Y2hQcmVjb21wb3NlZEljb24pIHsKLSAg
ICAgICAgdXJsLnNldFBhdGgoIi9hcHBsZS10b3VjaC1pY29uLXByZWNvbXBvc2VkLnBuZyIpOwot
ICAgICAgICByZXR1cm4gSWNvblVSTChLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgVG91Y2hQ
cmVjb21wb3NlZEljb24pOwotICAgIH0KLSAgICBpZiAoaWNvblR5cGUgPT0gVG91Y2hJY29uKSB7
Ci0gICAgICAgIHVybC5zZXRQYXRoKCIvYXBwbGUtdG91Y2gtaWNvbi5wbmciKTsKLSAgICAgICAg
cmV0dXJuIEljb25VUkwoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIFRvdWNoSWNvbik7Ci0g
ICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIEljb25VUkwoKTsKLX0KLQogYm9vbCBGcmFtZUxvYWRl
cjo6ZGlkT3BlblVSTChjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgaWYgKG1fZnJhbWUtPm5hdmln
YXRpb25TY2hlZHVsZXIoKS0+cmVkaXJlY3RTY2hlZHVsZWREdXJpbmdMb2FkKCkpIHsKQEAgLTcz
NywxMTUgKzY1OCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRpZEVuZERvY3VtZW50KCkKICAgICBt
X2lzTG9hZGluZ01haW5SZXNvdXJjZSA9IGZhbHNlOwogfQogCi0vLyBDYWxsYmFjayBmb3IgdGhl
IG9sZC1zdHlsZSBzeW5jaHJvbm91cyBJY29uRGF0YWJhc2UgaW50ZXJmYWNlLgotdm9pZCBGcmFt
ZUxvYWRlcjo6aWNvbkxvYWREZWNpc2lvblJlY2VpdmVkKEljb25Mb2FkRGVjaXNpb24gaWNvbkxv
YWREZWNpc2lvbikKLXsKLSAgICBpZiAoIW1fbWF5TG9hZEljb25MYXRlcikKLSAgICAgICAgcmV0
dXJuOwotICAgIExPRyhJY29uRGF0YWJhc2UsICJGcmFtZUxvYWRlciAlcCB3YXMgdG9sZCBhIGxv
YWQgZGVjaXNpb24gaXMgYXZhaWxhYmxlIGZvciBpdHMgaWNvbiIsIHRoaXMpOwotICAgIGNvbnRp
bnVlSWNvbkxvYWRXaXRoRGVjaXNpb24oaWNvbkxvYWREZWNpc2lvbik7Ci0gICAgbV9tYXlMb2Fk
SWNvbkxhdGVyID0gZmFsc2U7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXI6OnN0YXJ0SWNvbkxvYWRl
cigpCi17Ci0gICAgLy8gRklYTUU6IFdlIGtpY2sgb2ZmIHRoZSBpY29uIGxvYWRlciB3aGVuIHRo
ZSBmcmFtZSBpcyBkb25lIHJlY2VpdmluZyBpdHMgbWFpbiByZXNvdXJjZS4KLSAgICAvLyBCdXQg
d2Ugc2hvdWxkIGluc3RlYWQgZG8gaXQgd2hlbiB3ZSdyZSBkb25lIHBhcnNpbmcgdGhlIGhlYWQg
ZWxlbWVudC4KLSAgICBpZiAoIWlzTG9hZGluZ01haW5GcmFtZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIWljb25EYXRhYmFzZSgpLmlzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgS1VSTCB1cmwoaWNvblVSTCgpKTsKLSAgICBTdHJpbmcgdXJsU3RyaW5nKHVy
bC5zdHJpbmcoKSk7Ci0gICAgaWYgKHVybFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIFBlb3BsZSB3aG8gd2FudCB0byBhdm9pZCBsb2FkaW5nIGltYWdlcyBnZW5l
cmFsbHkgd2FudCB0byBhdm9pZCBsb2FkaW5nIGFsbCBpbWFnZXMsIHVubGVzcyBhbiBleGNlcHRp
b24gaGFzIGJlZW4gbWFkZSBmb3Igc2l0ZSBpY29ucy4KLSAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBh
Y2NvdW50ZWQgZm9yIFVSTCBtYXBwaW5nLCBhdm9pZCBzdGFydGluZyB0aGUgbmV0d29yayBsb2Fk
IGlmIGltYWdlcyBhcmVuJ3Qgc2V0IHRvIGRpc3BsYXkgYXV0b21hdGljYWxseS4KLSAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwotICAgIGlmIChzZXR0aW5ncyAm
JiAhc2V0dGluZ3MtPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpICYmICFzZXR0aW5ncy0+bG9h
ZHNTaXRlSWNvbnNJZ25vcmluZ0ltYWdlTG9hZGluZ1NldHRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gSWYgd2UncmUgcmVsb2FkaW5nIHRoZSBwYWdlLCBhbHdheXMgc3RhcnQgdGhl
IGljb24gbG9hZCBub3cuCi0gICAgaWYgKGxvYWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlwZVJlbG9h
ZCAmJiBsb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2luKSB7Ci0gICAg
ICAgIGNvbnRpbnVlSWNvbkxvYWRXaXRoRGVjaXNpb24oSWNvbkxvYWRZZXMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGljb25EYXRhYmFzZSgpLnN1cHBvcnRzQXN5bmNocm9u
b3VzTW9kZSgpKSB7Ci0gICAgICAgIG1fZG9jdW1lbnRMb2FkZXItPmdldEljb25Mb2FkRGVjaXNp
b25Gb3JJY29uVVJMKHVybFN0cmluZyk7Ci0gICAgICAgIC8vIENvbW1pdCB0aGUgaWNvbiB1cmwg
bWFwcGluZyB0byB0aGUgZGF0YWJhc2UganVzdCBpbiBjYXNlIHdlIGRvbid0IGVuZCB1cCBsb2Fk
aW5nIGxhdGVyLgotICAgICAgICBjb21taXRJY29uVVJMVG9JY29uRGF0YWJhc2UodXJsKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBJY29uTG9hZERlY2lzaW9uIGRlY2lzaW9u
ID0gaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKHVybFN0
cmluZywgbV9kb2N1bWVudExvYWRlci5nZXQoKSk7Ci0KLSAgICBpZiAoZGVjaXNpb24gPT0gSWNv
bkxvYWRVbmtub3duKSB7Ci0gICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgbWF5IGVuZCB1cCBs
b2FkaW5nIHRoZSBpY29uIGxhdGVyLCBidXQgd2Ugc3RpbGwgd2FudCB0byBjb21taXQgdGhlIGlj
b24gdXJsIG1hcHBpbmcgdG8gdGhlIGRhdGFiYXNlCi0gICAgICAgIC8vIGp1c3QgaW4gY2FzZSB3
ZSBkb24ndCBlbmQgdXAgbG9hZGluZyBsYXRlciAtIGlmIHdlIGNvbW1pdCB0aGUgbWFwcGluZyBh
IHNlY29uZCB0aW1lIGFmdGVyIHRoZSBsb2FkLCB0aGF0J3Mgbm8gYmlnIGRlYWwKLSAgICAgICAg
Ly8gV2UgYWxzbyB0ZWxsIHRoZSBjbGllbnQgdG8gcmVnaXN0ZXIgZm9yIHRoZSBub3RpZmljYXRp
b24gdGhhdCB0aGUgaWNvbiBpcyByZWNlaXZlZCBub3cgc28gaXQgaXNuJ3QgbWlzc2VkIGluIGNh
c2UgdGhlIAotICAgICAgICAvLyBpY29uIGlzIGxhdGVyIHJlYWQgaW4gZnJvbSBkaXNrCi0gICAg
ICAgIExPRyhJY29uRGF0YWJhc2UsICJGcmFtZUxvYWRlciAlcCBtaWdodCBsb2FkIGljb24gJXMg
bGF0ZXIiLCB0aGlzLCB1cmxTdHJpbmcuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBtX21heUxv
YWRJY29uTGF0ZXIgPSB0cnVlOyAgICAKLSAgICAgICAgbV9jbGllbnQtPnJlZ2lzdGVyRm9ySWNv
bk5vdGlmaWNhdGlvbigpOwotICAgICAgICBjb21taXRJY29uVVJMVG9JY29uRGF0YWJhc2UodXJs
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRpbnVlSWNvbkxvYWRXaXRoRGVj
aXNpb24oZGVjaXNpb24pOwotfQotCi12b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUljb25Mb2Fk
V2l0aERlY2lzaW9uKEljb25Mb2FkRGVjaXNpb24gaWNvbkxvYWREZWNpc2lvbikKLXsKLSAgICBB
U1NFUlQoaWNvbkxvYWREZWNpc2lvbiAhPSBJY29uTG9hZFVua25vd24pOwotICAgIAotICAgIC8v
ICBGSVhNRSAoPHJkYXI6Ly9wcm9ibGVtLzkxNjg2MDU+KSAtIFdlIHNob3VsZCBzdXBwb3J0IGlu
LW1lbW9yeS1vbmx5IHByaXZhdGUgYnJvd3NpbmcgaWNvbnMgaW4gYXN5bmNocm9ub3VzIGljb24g
ZGF0YWJhc2UgbW9kZS4KLSAgICBpZiAoaWNvbkRhdGFiYXNlKCkuc3VwcG9ydHNBc3luY2hyb25v
dXNNb2RlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdF
bmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgaWYgKGljb25Mb2FkRGVj
aXNpb24gPT0gSWNvbkxvYWRObykgewotICAgICAgICBLVVJMIHVybChpY29uVVJMKCkpOwotICAg
ICAgICBTdHJpbmcgdXJsU3RyaW5nKHVybC5zdHJpbmcoKSk7Ci0gICAgICAgIAotICAgICAgICBM
T0coSWNvbkRhdGFiYXNlLCAiRnJhbWVMb2FkZXI6OnN0YXJ0SWNvbkxvYWRlcigpIC0gVG9sZCBu
b3QgdG8gbG9hZCB0aGlzIGljb24sIGNvbW1pdHRpbmcgaWNvblVSTCAlcyB0byBkYXRhYmFzZSBm
b3IgcGFnZVVSTCBtYXBwaW5nIiwgdXJsU3RyaW5nLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAg
Y29tbWl0SWNvblVSTFRvSWNvbkRhdGFiYXNlKHVybCk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
aWNvbkRhdGFiYXNlKCkuc3VwcG9ydHNBc3luY2hyb25vdXNNb2RlKCkpIHsKLSAgICAgICAgICAg
IG1fZG9jdW1lbnRMb2FkZXItPmdldEljb25EYXRhRm9ySWNvblVSTCh1cmxTdHJpbmcpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBXZSB3ZXJl
IHRvbGQgbm90IHRvIGxvYWQgdGhpcyBpY29uIC0gdGhhdCBtZWFucyB0aGlzIGljb24gaXMgYWxy
ZWFkeSBrbm93biBieSB0aGUgZGF0YWJhc2UKLSAgICAgICAgLy8gSWYgdGhlIGljb24gZGF0YSBo
YXNuJ3QgYmVlbiByZWFkIGluIGZyb20gZGlzayB5ZXQsIGtpY2sgb2ZmIHRoZSByZWFkIG9mIHRo
ZSBpY29uIGZyb20gdGhlIGRhdGFiYXNlIHRvIG1ha2Ugc3VyZSBzb21lb25lCi0gICAgICAgIC8v
IGhhcyBkb25lIGl0LiBUaGlzIGlzIGFmdGVyIHJlZ2lzdGVyaW5nIGZvciB0aGUgbm90aWZpY2F0
aW9uIHNvIHRoZSBXZWJWaWV3IGNhbiBjYWxsIHRoZSBhcHByb3ByaWF0ZSBkZWxlZ2F0ZSBtZXRo
b2QuCi0gICAgICAgIC8vIE90aGVyd2lzZSBpZiB0aGUgaWNvbiBkYXRhICppcyogYXZhaWxhYmxl
LCBub3RpZnkgdGhlIGRlbGVnYXRlCi0gICAgICAgIGlmICghaWNvbkRhdGFiYXNlKCkuc3luY2hy
b25vdXNJY29uRGF0YUtub3duRm9ySWNvblVSTCh1cmxTdHJpbmcpKSB7Ci0gICAgICAgICAgICBM
T0coSWNvbkRhdGFiYXNlLCAiVG9sZCBub3QgdG8gbG9hZCBpY29uICVzIGJ1dCBpY29uIGRhdGEg
aXMgbm90IHlldCBhdmFpbGFibGUgLSByZWdpc3RlcmluZyBmb3Igbm90aWZpY2F0aW9uIGFuZCBy
ZXF1ZXN0aW5nIGxvYWQgZnJvbSBkaXNrIiwgdXJsU3RyaW5nLmFzY2lpKCkuZGF0YSgpKTsKLSAg
ICAgICAgICAgIG1fY2xpZW50LT5yZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oKTsKLSAgICAg
ICAgICAgIGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwobV9mcmFtZS0+
ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIEludFNpemUoMCwgMCkpOwotICAgICAgICAgICAg
aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChvcmlnaW5hbFJlcXVlc3RV
UkwoKS5zdHJpbmcoKSwgSW50U2l6ZSgwLCAwKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKTsKLSAgICAgICAgICAgIAotICAg
ICAgICByZXR1cm47Ci0gICAgfSAKLSAgICAKLSAgICBpZiAoIW1faWNvbkxvYWRlcikKLSAgICAg
ICAgbV9pY29uTG9hZGVyID0gSWNvbkxvYWRlcjo6Y3JlYXRlKG1fZnJhbWUpOwotICAgICAgICAK
LSAgICBtX2ljb25Mb2FkZXItPnN0YXJ0TG9hZGluZygpOwotfQotCi12b2lkIEZyYW1lTG9hZGVy
Ojpjb21taXRJY29uVVJMVG9JY29uRGF0YWJhc2UoY29uc3QgS1VSTCYgaWNvbikKLXsKLSAgICBM
T0coSWNvbkRhdGFiYXNlLCAiQ29tbWl0dGluZyBpY29uVVJMICVzIHRvIGRhdGFiYXNlIGZvciBw
YWdlVVJMcyAlcyBhbmQgJXMiLCBpY29uLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtX2ZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgb3JpZ2luYWxSZXF1
ZXN0VVJMKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgIGljb25EYXRhYmFzZSgpLnNl
dEljb25VUkxGb3JQYWdlVVJMKGljb24uc3RyaW5nKCksIG1fZnJhbWUtPmRvY3VtZW50KCktPnVy
bCgpLnN0cmluZygpKTsKLSAgICBpY29uRGF0YWJhc2UoKS5zZXRJY29uVVJMRm9yUGFnZVVSTChp
Y29uLnN0cmluZygpLCBvcmlnaW5hbFJlcXVlc3RVUkwoKS5zdHJpbmcoKSk7Ci19Ci0KIHZvaWQg
RnJhbWVMb2FkZXI6OmZpbmlzaGVkUGFyc2luZygpCiB7CiAgICAgbV9mcmFtZS0+aW5qZWN0VXNl
clNjcmlwdHMoSW5qZWN0QXREb2N1bWVudEVuZCk7CkBAIC0zNDMwLDE2ICszMjQyLDYgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6c2V0VGl0bGUoY29uc3QgU3RyaW5nVwogICAgIGRvY3VtZW50TG9hZGVy
KCktPnNldFRpdGxlKHRpdGxlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6c2V0SWNvblVSTChj
b25zdCBJY29uVVJMJiBpY29uVVJMKQotewotICAgIGRvY3VtZW50TG9hZGVyKCktPnNldEljb25V
UkwoaWNvblVSTCk7Ci19Ci0KLUtVUkwgRnJhbWVMb2FkZXI6Om9yaWdpbmFsUmVxdWVzdFVSTCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFjdGl2ZURvY3VtZW50TG9hZGVyKCktPm9yaWdpbmFsUmVx
dWVzdCgpLnVybCgpOwotfQotCiBTdHJpbmcgRnJhbWVMb2FkZXI6OnJlZmVycmVyKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9kb2N1bWVudExvYWRlciA/IG1fZG9jdW1lbnRMb2FkZXItPnJlcXVl
c3QoKS5odHRwUmVmZXJyZXIoKSA6ICIiOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmgJKHJldmlzaW9uIDg4NjEwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJGcmFtZUxv
YWRlclN0YXRlTWFjaGluZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNs
dWRlICJIaXN0b3J5Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkljb25EYXRhYmFzZUJhc2UuaCIK
KyNpbmNsdWRlICJJY29uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkljb25VUkwuaCIKICNpbmNs
dWRlICJQb2xpY3lDaGVja2VyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkTm90aWZpZXIuaCIK
QEAgLTY1LDcgKzY1LDYgQEAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnQ7CiBjbGFzcyBGcmFtZU5l
dHdvcmtpbmdDb250ZXh0OwogY2xhc3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBIVE1MRm9ybUVsZW1l
bnQ7Ci1jbGFzcyBJY29uTG9hZGVyOwogY2xhc3MgTmF2aWdhdGlvbkFjdGlvbjsKIGNsYXNzIE5l
dHdvcmtpbmdDb250ZXh0OwogY2xhc3MgUGFnZTsKQEAgLTEwMiw2ICsxMDEsNyBAQCBwdWJsaWM6
CiAgICAgSGlzdG9yeUNvbnRyb2xsZXIqIGhpc3RvcnkoKSBjb25zdCB7IHJldHVybiAmbV9oaXN0
b3J5OyB9CiAgICAgUmVzb3VyY2VMb2FkTm90aWZpZXIqIG5vdGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gJm1fbm90aWZlcjsgfQogICAgIFN1YmZyYW1lTG9hZGVyKiBzdWJmcmFtZUxvYWRlcigpIGNv
bnN0IHsgcmV0dXJuICZtX3N1YmZyYW1lTG9hZGVyOyB9CisgICAgSWNvbkNvbnRyb2xsZXIqIGlj
b24oKSBjb25zdCB7IHJldHVybiAmbV9pY29uOyB9CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBu
b3QgY29vbCwgcGVvcGxlLiBUaGVyZSBhcmUgdG9vIG1hbnkgZGlmZmVyZW50IGZ1bmN0aW9ucyB0
aGF0IGFsbCBzdGFydCBsb2Fkcy4KICAgICAvLyBXZSBzaG91bGQgYWltIHRvIGNvbnNvbGlkYXRl
IHRoZXNlIGludG8gYSBzbWFsbGVyIHNldCBvZiBmdW5jdGlvbnMsIGFuZCB0cnkgdG8gcmV1c2Ug
bW9yZSBvZgpAQCAtMTU2LDYgKzE1Niw3IEBAIHB1YmxpYzoKICNpZiBVU0UoUFJPVEVDVElPTl9T
UEFDRV9BVVRIX0NBTExCQUNLKQogICAgIGJvb2wgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZShSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBQcm90ZWN0aW9uU3BhY2Um
IHByb3RlY3Rpb25TcGFjZSk7CiAjZW5kaWYKKyAgICAvLyBGSVhNRTogVGhlIGRpZmZlcmVuY2Ug
YmV0d2VlbiB0aGVzZSBhY2Nlc3NvcnMgaXMgdmVyeSBzdWJ0bGUhIFRoZXkgbmVlZCBiZXR0ZXIg
bmFtZXMuCiAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QoKSBjb25z
dDsKICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGluaXRpYWxSZXF1ZXN0KCkgY29uc3Q7CiAg
ICAgdm9pZCByZWNlaXZlZE1haW5SZXNvdXJjZUVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImLCBi
b29sIGlzQ29tcGxldGUpOwpAQCAtMjM0LDEzICsyMzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aWRFbmREb2N1bWVudCgpOwogICAgIHZvaWQgd2lsbFNldEVuY29kaW5nKCk7CiAKLSAgICAvLyBS
ZXR1cm5zIGZhdmljb24uCi0gICAgS1VSTCBpY29uVVJMKCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRo
ZSBnaXZlbiBpY29uVHlwZXMnIEljb25VUkxzLCBpY29uVHlwZXMgY291bGQgYmUgYW55IGNvbWJp
bmF0aW9uIG9mIEljb25UeXBlLgotICAgIEljb25VUkxzIGljb25VUkxzKGludCBpY29uVHlwZXMp
OwotICAgIHZvaWQgY29tbWl0SWNvblVSTFRvSWNvbkRhdGFiYXNlKGNvbnN0IEtVUkwmKTsKLQog
ICAgIEtVUkwgYmFzZVVSTCgpIGNvbnN0OwogCiAgICAgdm9pZCBoYW5kbGVkT25sb2FkRXZlbnRz
KCk7CkBAIC0yODksMTcgKzI4MywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYW5jZWxBbmRDbGVh
cigpOwogCiAgICAgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJik7Ci0g
ICAgdm9pZCBzZXRJY29uVVJMKGNvbnN0IEljb25VUkwmKTsKIAogICAgIHZvaWQgY29tbWl0UHJv
dmlzaW9uYWxMb2FkKCk7CiAgICAgYm9vbCBpc0xvYWRpbmdGcm9tQ2FjaGVkUGFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlOyB9CiAKICAgICBGcmFtZUxvYWRlclN0
YXRlTWFjaGluZSogc3RhdGVNYWNoaW5lKCkgY29uc3QgeyByZXR1cm4gJm1fc3RhdGVNYWNoaW5l
OyB9CiAKLSAgICB2b2lkIHN0YXJ0SWNvbkxvYWRlcigpOwotICAgIHZvaWQgaWNvbkxvYWREZWNp
c2lvblJlY2VpdmVkKEljb25Mb2FkRGVjaXNpb24pOwotICAgIHZvaWQgY29udGludWVJY29uTG9h
ZFdpdGhEZWNpc2lvbihJY29uTG9hZERlY2lzaW9uKTsKLQogICAgIGJvb2wgc2hvdWxkQWxsb3dO
YXZpZ2F0aW9uKEZyYW1lKiB0YXJnZXRGcmFtZSkgY29uc3Q7CiAgICAgRnJhbWUqIGZpbmRGcmFt
ZUZvck5hdmlnYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKIApAQCAtNDMxLDE1ICs0
MjAsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjaGVkdWxlQ2hlY2tMb2FkQ29tcGxldGUoKTsK
ICAgICB2b2lkIHN0YXJ0Q2hlY2tDb21wbGV0ZVRpbWVyKCk7CiAKLSAgICBLVVJMIG9yaWdpbmFs
UmVxdWVzdFVSTCgpIGNvbnN0OwotCiAgICAgYm9vbCBzaG91bGRUcmVhdFVSTEFzU2FtZUFzQ3Vy
cmVudChjb25zdCBLVVJMJikgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZVNhbmRib3hGbGFncygp
OwogCi0gICAgYm9vbCBmaWxsSWNvblVSTChJY29uVHlwZSwgSWNvblVSTHMqKTsKLSAgICBJY29u
VVJMIGdldERlZmF1bHRJY29uVVJMKEljb25UeXBlKTsKLQogICAgIEZyYW1lKiBtX2ZyYW1lOwog
ICAgIEZyYW1lTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKIApAQCAtNDQ4LDYgKzQzMiw3IEBAIHBy
aXZhdGU6CiAgICAgbXV0YWJsZSBSZXNvdXJjZUxvYWROb3RpZmllciBtX25vdGlmZXI7CiAgICAg
bXV0YWJsZSBTdWJmcmFtZUxvYWRlciBtX3N1YmZyYW1lTG9hZGVyOwogICAgIG11dGFibGUgRnJh
bWVMb2FkZXJTdGF0ZU1hY2hpbmUgbV9zdGF0ZU1hY2hpbmU7CisgICAgbXV0YWJsZSBJY29uQ29u
dHJvbGxlciBtX2ljb247CiAKICAgICBGcmFtZVN0YXRlIG1fc3RhdGU7CiAgICAgRnJhbWVMb2Fk
VHlwZSBtX2xvYWRUeXBlOwpAQCAtNDgwLDkgKzQ2NSw2IEBAIHByaXZhdGU6CiAKICAgICBLVVJM
IG1fd29ya2luZ1VSTDsKIAotICAgIE93blB0cjxJY29uTG9hZGVyPiBtX2ljb25Mb2FkZXI7Ci0g
ICAgYm9vbCBtX21heUxvYWRJY29uTGF0ZXI7Ci0KICAgICBib29sIG1fbmVlZHNDbGVhcjsKIAog
ICAgIEtVUkwgbV9zdWJtaXR0ZWRGb3JtVVJMOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ljb24vSWNvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9pY29uL0ljb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAwOS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBLcmlzIEpvcmRhbiA8a3Jpc2pvcmRhbkBnbWFpbC5jb20+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkljb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkljb25EYXRhYmFzZS5o
IgorI2luY2x1ZGUgIkljb25EYXRhYmFzZUJhc2UuaCIKKyNpbmNsdWRlICJJY29uTG9hZGVyLmgi
CisjaW5jbHVkZSAiSWNvblVSTC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJ
Y29uQ29udHJvbGxlcjo6SWNvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFt
ZShmcmFtZSkKKyAgICAsIG1fd2FpdGluZ0ZvckxvYWREZWNpc2lvbihmYWxzZSkKK3sKK30KKwor
SWNvbkNvbnRyb2xsZXI6On5JY29uQ29udHJvbGxlcigpCit7Cit9CisKK0tVUkwgSWNvbkNvbnRy
b2xsZXI6OnVybCgpCit7CisgICAgSWNvblVSTHMgaWNvblVSTHMgPSB1cmxzKEZhdmljb24pOwor
ICAgIHJldHVybiBpY29uVVJMcy5pc0VtcHR5KCkgPyBLVVJMKCkgOiBpY29uVVJMc1swXS5tX2lj
b25VUkw7Cit9CisKK0ljb25VUkxzIEljb25Db250cm9sbGVyOjp1cmxzKGludCBpY29uVHlwZXMp
Cit7CisgICAgSWNvblVSTHMgaWNvblVSTHM7CisgICAgaWYgKG1fZnJhbWUtPnRyZWUoKSAmJiBt
X2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKQorICAgICAgICByZXR1cm4gaWNvblVSTHM7CisKKyAg
ICBpZiAoaWNvblR5cGVzICYgRmF2aWNvbiAmJiAhYXBwZW5kVG9JY29uVVJMcyhGYXZpY29uLCAm
aWNvblVSTHMpKQorICAgICAgICBpY29uVVJMcy5hcHBlbmQoZGVmYXVsdFVSTChGYXZpY29uKSk7
CisKKyNpZiBFTkFCTEUoVE9VQ0hfSUNPTl9MT0FESU5HKQorICAgIGJvb2wgaGF2ZVByZWNvbXBv
c2VkSWNvbiA9IGZhbHNlOworICAgIGlmIChpY29uVHlwZXMgJiBUb3VjaFByZWNvbXBvc2VkSWNv
bikKKyAgICAgICAgaGF2ZVByZWNvbXBvc2VkSWNvbiA9IGFwcGVuZFRvSWNvblVSTHMoVG91Y2hQ
cmVjb21wb3NlZEljb24sICZpY29uVVJMcyk7CisKKyAgICBib29sIGhhdmVUb3VjaEljb24gPSBm
YWxzZTsKKyAgICBpZiAoaWNvblR5cGVzICYgVG91Y2hJY29uKQorICAgICAgICBoYXZlVG91Y2hJ
Y29uID0gYXBwZW5kVG9JY29uVVJMcyhUb3VjaEljb24sICZpY29uVVJMcyk7CisKKyAgICAvLyBP
bmx5IHJldHVybiB0aGUgZGVmYXVsdCB0b3VjaCBpY29ucyB3aGVuIHRoZSBib3RoIHdlcmUgcmVx
dWlyZWQgYW5kIG5laXRoZXIgd2FzIGdvdHRlbi4KKyAgICBpZiAoaWNvblR5cGVzICYgVG91Y2hQ
cmVjb21wb3NlZEljb24gJiYgaWNvblR5cGVzICYgVG91Y2hJY29uICYmICFoYXZlUHJlY29tcG9z
ZWRJY29uICYmICFoYXZlVG91Y2hJY29uKSB7CisgICAgICAgIGljb25VUkxzLmFwcGVuZChkZWZh
dWx0VVJMKFRvdWNoUHJlY29tcG9zZWRJY29uKSk7CisgICAgICAgIGljb25VUkxzLmFwcGVuZChk
ZWZhdWx0VVJMKFRvdWNoSWNvbikpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBpY29uVVJM
czsKK30KKwordm9pZCBJY29uQ29udHJvbGxlcjo6Y29tbWl0VG9EYXRhYmFzZShjb25zdCBLVVJM
JiBpY29uKQoreworICAgIExPRyhJY29uRGF0YWJhc2UsICJDb21taXR0aW5nIGljb25VUkwgJXMg
dG8gZGF0YWJhc2UgZm9yIHBhZ2VVUkxzICVzIGFuZCAlcyIsIGljb24uc3RyaW5nKCkuYXNjaWko
KS5kYXRhKCksIG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0
YSgpLCBtX2ZyYW1lLT5sb2FkZXIoKS0+aW5pdGlhbFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgaWNvbkRhdGFiYXNlKCkuc2V0SWNvblVSTEZvclBhZ2VVUkwo
aWNvbi5zdHJpbmcoKSwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAg
IGljb25EYXRhYmFzZSgpLnNldEljb25VUkxGb3JQYWdlVVJMKGljb24uc3RyaW5nKCksIG1fZnJh
bWUtPmxvYWRlcigpLT5pbml0aWFsUmVxdWVzdCgpLnVybCgpLnN0cmluZygpKTsKK30KKwordm9p
ZCBJY29uQ29udHJvbGxlcjo6c2V0VVJMKGNvbnN0IEljb25VUkwmIGljb25VUkwpCit7CisgICAg
bV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnNldEljb25VUkwoaWNvblVSTCk7
Cit9CisKK3ZvaWQgSWNvbkNvbnRyb2xsZXI6OnN0YXJ0TG9hZGVyKCkKK3sKKyAgICAvLyBGSVhN
RTogV2Uga2ljayBvZmYgdGhlIGljb24gbG9hZGVyIHdoZW4gdGhlIGZyYW1lIGlzIGRvbmUgcmVj
ZWl2aW5nIGl0cyBtYWluIHJlc291cmNlLgorICAgIC8vIEJ1dCB3ZSBzaG91bGQgaW5zdGVhZCBk
byBpdCB3aGVuIHdlJ3JlIGRvbmUgcGFyc2luZyB0aGUgaGVhZCBlbGVtZW50LgorICAgIGlmICgh
bV9mcmFtZS0+bG9hZGVyKCktPmlzTG9hZGluZ01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIWljb25EYXRhYmFzZSgpLmlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBLVVJMIGljb25VUkwodXJsKCkpOworICAgIFN0cmluZyB1cmxTdHJpbmcoaWNvblVS
TC5zdHJpbmcoKSk7CisgICAgaWYgKHVybFN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFBlb3BsZSB3aG8gd2FudCB0byBhdm9pZCBsb2FkaW5nIGltYWdlcyBnZW5l
cmFsbHkgd2FudCB0byBhdm9pZCBsb2FkaW5nIGFsbCBpbWFnZXMsIHVubGVzcyBhbiBleGNlcHRp
b24gaGFzIGJlZW4gbWFkZSBmb3Igc2l0ZSBpY29ucy4KKyAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBh
Y2NvdW50ZWQgZm9yIFVSTCBtYXBwaW5nLCBhdm9pZCBzdGFydGluZyB0aGUgbmV0d29yayBsb2Fk
IGlmIGltYWdlcyBhcmVuJ3Qgc2V0IHRvIGRpc3BsYXkgYXV0b21hdGljYWxseS4KKyAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIGlmIChzZXR0aW5ncyAm
JiAhc2V0dGluZ3MtPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpICYmICFzZXR0aW5ncy0+bG9h
ZHNTaXRlSWNvbnNJZ25vcmluZ0ltYWdlTG9hZGluZ1NldHRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gSWYgd2UncmUgcmVsb2FkaW5nIHRoZSBwYWdlLCBhbHdheXMgc3RhcnQgdGhl
IGljb24gbG9hZCBub3cuCisgICAgLy8gRklYTUU6IEhvdyBjYW4gdGhpcyBjb25kaXRpb24gZXZl
ciBiZSB0cnVlPworICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZFR5cGUoKSA9PSBGcmFt
ZUxvYWRUeXBlUmVsb2FkICYmIG1fZnJhbWUtPmxvYWRlcigpLT5sb2FkVHlwZSgpID09IEZyYW1l
TG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2luKSB7CisgICAgICAgIGNvbnRpbnVlTG9hZFdpdGhEZWNp
c2lvbihJY29uTG9hZFllcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaWNv
bkRhdGFiYXNlKCkuc3VwcG9ydHNBc3luY2hyb25vdXNNb2RlKCkpIHsKKyAgICAgICAgbV9mcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmdldEljb25Mb2FkRGVjaXNpb25Gb3JJY29u
VVJMKHVybFN0cmluZyk7CisgICAgICAgIC8vIENvbW1pdCB0aGUgaWNvbiB1cmwgbWFwcGluZyB0
byB0aGUgZGF0YWJhc2UganVzdCBpbiBjYXNlIHdlIGRvbid0IGVuZCB1cCBsb2FkaW5nIGxhdGVy
LgorICAgICAgICBjb21taXRUb0RhdGFiYXNlKGljb25VUkwpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgSWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiA9IGljb25EYXRhYmFzZSgpLnN5
bmNocm9ub3VzTG9hZERlY2lzaW9uRm9ySWNvblVSTCh1cmxTdHJpbmcsIG1fZnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpKTsKKworICAgIGlmIChkZWNpc2lvbiA9PSBJY29uTG9hZFVu
a25vd24pIHsKKyAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBtYXkgZW5kIHVwIGxvYWRpbmcg
dGhlIGljb24gbGF0ZXIsIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIGNvbW1pdCB0aGUgaWNvbiB1cmwg
bWFwcGluZyB0byB0aGUgZGF0YWJhc2UKKyAgICAgICAgLy8ganVzdCBpbiBjYXNlIHdlIGRvbid0
IGVuZCB1cCBsb2FkaW5nIGxhdGVyIC0gaWYgd2UgY29tbWl0IHRoZSBtYXBwaW5nIGEgc2Vjb25k
IHRpbWUgYWZ0ZXIgdGhlIGxvYWQsIHRoYXQncyBubyBiaWcgZGVhbAorICAgICAgICAvLyBXZSBh
bHNvIHRlbGwgdGhlIGNsaWVudCB0byByZWdpc3RlciBmb3IgdGhlIG5vdGlmaWNhdGlvbiB0aGF0
IHRoZSBpY29uIGlzIHJlY2VpdmVkIG5vdyBzbyBpdCBpc24ndCBtaXNzZWQgaW4gY2FzZSB0aGUg
CisgICAgICAgIC8vIGljb24gaXMgbGF0ZXIgcmVhZCBpbiBmcm9tIGRpc2sKKyAgICAgICAgTE9H
KEljb25EYXRhYmFzZSwgIkljb25Db250cm9sbGVyICVwIG1pZ2h0IGxvYWQgaWNvbiAlcyBsYXRl
ciIsIHRoaXMsIHVybFN0cmluZy5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIG1fd2FpdGluZ0Zv
ckxvYWREZWNpc2lvbiA9IHRydWU7ICAgIAorICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbigpOworICAgICAgICBjb21taXRUb0Rh
dGFiYXNlKGljb25VUkwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29udGludWVM
b2FkV2l0aERlY2lzaW9uKGRlY2lzaW9uKTsKK30KKwordm9pZCBJY29uQ29udHJvbGxlcjo6c3Rv
cExvYWRlcigpCit7CisgICAgaWYgKG1faWNvbkxvYWRlcikKKyAgICAgICAgbV9pY29uTG9hZGVy
LT5zdG9wTG9hZGluZygpOworfQorCisvLyBDYWxsYmFjayBmb3IgdGhlIG9sZC1zdHlsZSBzeW5j
aHJvbm91cyBJY29uRGF0YWJhc2UgaW50ZXJmYWNlLgordm9pZCBJY29uQ29udHJvbGxlcjo6bG9h
ZERlY2lzaW9uUmVjZWl2ZWQoSWNvbkxvYWREZWNpc2lvbiBpY29uTG9hZERlY2lzaW9uKQorewor
ICAgIGlmICghbV93YWl0aW5nRm9yTG9hZERlY2lzaW9uKQorICAgICAgICByZXR1cm47CisgICAg
TE9HKEljb25EYXRhYmFzZSwgIkljb25Db250cm9sbGVyICVwIHdhcyB0b2xkIGEgbG9hZCBkZWNp
c2lvbiBpcyBhdmFpbGFibGUgZm9yIGl0cyBpY29uIiwgdGhpcyk7CisgICAgY29udGludWVMb2Fk
V2l0aERlY2lzaW9uKGljb25Mb2FkRGVjaXNpb24pOworICAgIG1fd2FpdGluZ0ZvckxvYWREZWNp
c2lvbiA9IGZhbHNlOworfQorCit2b2lkIEljb25Db250cm9sbGVyOjpjb250aW51ZUxvYWRXaXRo
RGVjaXNpb24oSWNvbkxvYWREZWNpc2lvbiBpY29uTG9hZERlY2lzaW9uKQoreworICAgIEFTU0VS
VChpY29uTG9hZERlY2lzaW9uICE9IEljb25Mb2FkVW5rbm93bik7CisKKyAgICAvLyAgRklYTUUg
KDxyZGFyOi8vcHJvYmxlbS85MTY4NjA1PikgLSBXZSBzaG91bGQgc3VwcG9ydCBpbi1tZW1vcnkt
b25seSBwcml2YXRlIGJyb3dzaW5nIGljb25zIGluIGFzeW5jaHJvbm91cyBpY29uIGRhdGFiYXNl
IG1vZGUuCisgICAgaWYgKGljb25EYXRhYmFzZSgpLnN1cHBvcnRzQXN5bmNocm9ub3VzTW9kZSgp
ICYmIG1fZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaWNvbkxvYWREZWNpc2lvbiA9PSBJY29uTG9h
ZE5vKSB7CisgICAgICAgIEtVUkwgaWNvblVSTCh1cmwoKSk7CisgICAgICAgIFN0cmluZyB1cmxT
dHJpbmcoaWNvblVSTC5zdHJpbmcoKSk7CisKKyAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIklj
b25Db250cm9sbGVyOjpzdGFydExvYWRlcigpIC0gVG9sZCBub3QgdG8gbG9hZCB0aGlzIGljb24s
IGNvbW1pdHRpbmcgaWNvblVSTCAlcyB0byBkYXRhYmFzZSBmb3IgcGFnZVVSTCBtYXBwaW5nIiwg
dXJsU3RyaW5nLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgY29tbWl0VG9EYXRhYmFzZShpY29u
VVJMKTsKKworICAgICAgICBpZiAoaWNvbkRhdGFiYXNlKCkuc3VwcG9ydHNBc3luY2hyb25vdXNN
b2RlKCkpIHsKKyAgICAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5nZXRJY29uRGF0YUZvckljb25VUkwodXJsU3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIHdlcmUgdG9sZCBub3QgdG8gbG9hZCB0aGlzIGlj
b24gLSB0aGF0IG1lYW5zIHRoaXMgaWNvbiBpcyBhbHJlYWR5IGtub3duIGJ5IHRoZSBkYXRhYmFz
ZQorICAgICAgICAvLyBJZiB0aGUgaWNvbiBkYXRhIGhhc24ndCBiZWVuIHJlYWQgaW4gZnJvbSBk
aXNrIHlldCwga2ljayBvZmYgdGhlIHJlYWQgb2YgdGhlIGljb24gZnJvbSB0aGUgZGF0YWJhc2Ug
dG8gbWFrZSBzdXJlIHNvbWVvbmUKKyAgICAgICAgLy8gaGFzIGRvbmUgaXQuIFRoaXMgaXMgYWZ0
ZXIgcmVnaXN0ZXJpbmcgZm9yIHRoZSBub3RpZmljYXRpb24gc28gdGhlIFdlYlZpZXcgY2FuIGNh
bGwgdGhlIGFwcHJvcHJpYXRlIGRlbGVnYXRlIG1ldGhvZC4KKyAgICAgICAgLy8gT3RoZXJ3aXNl
IGlmIHRoZSBpY29uIGRhdGEgKmlzKiBhdmFpbGFibGUsIG5vdGlmeSB0aGUgZGVsZWdhdGUKKyAg
ICAgICAgaWYgKCFpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25EYXRhS25vd25Gb3JJY29u
VVJMKHVybFN0cmluZykpIHsKKyAgICAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJUb2xkIG5v
dCB0byBsb2FkIGljb24gJXMgYnV0IGljb24gZGF0YSBpcyBub3QgeWV0IGF2YWlsYWJsZSAtIHJl
Z2lzdGVyaW5nIGZvciBub3RpZmljYXRpb24gYW5kIHJlcXVlc3RpbmcgbG9hZCBmcm9tIGRpc2si
LCB1cmxTdHJpbmcuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVy
KCktPmNsaWVudCgpLT5yZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oKTsKKyAgICAgICAgICAg
IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwobV9mcmFtZS0+ZG9jdW1l
bnQoKS0+dXJsKCkuc3RyaW5nKCksIEludFNpemUoMCwgMCkpOworICAgICAgICAgICAgaWNvbkRh
dGFiYXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChtX2ZyYW1lLT5sb2FkZXIoKS0+aW5p
dGlhbFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSwgSW50U2l6ZSgwLCAwKSk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERp
ZFJlY2VpdmVJY29uKCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0gCisKKyAgICBpZiAoIW1f
aWNvbkxvYWRlcikKKyAgICAgICAgbV9pY29uTG9hZGVyID0gSWNvbkxvYWRlcjo6Y3JlYXRlKG1f
ZnJhbWUpOworCisgICAgbV9pY29uTG9hZGVyLT5zdGFydExvYWRpbmcoKTsKK30KKworYm9vbCBJ
Y29uQ29udHJvbGxlcjo6YXBwZW5kVG9JY29uVVJMcyhJY29uVHlwZSBpY29uVHlwZSwgSWNvblVS
THMqIGljb25VUkxzKQoreworICAgIEljb25VUkwgdXJsID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
aWNvblVSTChpY29uVHlwZSk7CisgICAgaWYgKHVybC5tX2ljb25VUkwuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpY29uVVJMcy0+YXBwZW5kKHVybCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0ljb25VUkwgSWNvbkNvbnRyb2xsZXI6OmRlZmF1bHRVUkwoSWNvblR5
cGUgaWNvblR5cGUpCit7CisgICAgLy8gRG9uJ3QgcmV0dXJuIGEgZmF2aWNvbiBpY29uVVJMIHVu
bGVzcyB3ZSdyZSBodHRwIG9yIGh0dHBzCisgICAgS1VSTCBkb2N1bWVudFVSTCA9IG1fZnJhbWUt
PmRvY3VtZW50KCktPnVybCgpOworICAgIGlmICghZG9jdW1lbnRVUkwucHJvdG9jb2xJbkhUVFBG
YW1pbHkoKSkKKyAgICAgICAgcmV0dXJuIEljb25VUkwoKTsKKworICAgIEtVUkwgdXJsOworICAg
IGJvb2wgY291bGRTZXRQcm90b2NvbCA9IHVybC5zZXRQcm90b2NvbChkb2N1bWVudFVSTC5wcm90
b2NvbCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvdWxkU2V0UHJvdG9jb2wsIGNvdWxkU2V0UHJv
dG9jb2wpOworICAgIHVybC5zZXRIb3N0KGRvY3VtZW50VVJMLmhvc3QoKSk7CisgICAgaWYgKGRv
Y3VtZW50VVJMLmhhc1BvcnQoKSkKKyAgICAgICAgdXJsLnNldFBvcnQoZG9jdW1lbnRVUkwucG9y
dCgpKTsKKyAgICBpZiAoaWNvblR5cGUgPT0gRmF2aWNvbikgeworICAgICAgICB1cmwuc2V0UGF0
aCgiL2Zhdmljb24uaWNvIik7CisgICAgICAgIHJldHVybiBJY29uVVJMKHVybCwgRmF2aWNvbik7
CisgICAgfQorI2lmIEVOQUJMRShUT1VDSF9JQ09OX0xPQURJTkcpCisgICAgaWYgKGljb25UeXBl
ID09IFRvdWNoUHJlY29tcG9zZWRJY29uKSB7CisgICAgICAgIHVybC5zZXRQYXRoKCIvYXBwbGUt
dG91Y2gtaWNvbi1wcmVjb21wb3NlZC5wbmciKTsKKyAgICAgICAgcmV0dXJuIEljb25VUkwodXJs
LCBUb3VjaFByZWNvbXBvc2VkSWNvbik7CisgICAgfQorICAgIGlmIChpY29uVHlwZSA9PSBUb3Vj
aEljb24pIHsKKyAgICAgICAgdXJsLnNldFBhdGgoIi9hcHBsZS10b3VjaC1pY29uLnBuZyIpOwor
ICAgICAgICByZXR1cm4gSWNvblVSTCh1cmwsIFRvdWNoSWNvbik7CisgICAgfQorI2VuZGlmCisg
ICAgcmV0dXJuIEljb25VUkwoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ljb24vSWNvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uQ29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL2ljb24vSWNvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAwOS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEljb25Db250cm9sbGVyX2gKKyNk
ZWZpbmUgSWNvbkNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlQmFzZS5oIgor
I2luY2x1ZGUgIkljb25VUkwuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFzcyBJY29uTG9hZGVyOworCitjbGFzcyBJY29uQ29u
dHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSWNvbkNvbnRyb2xsZXIpOworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEljb25Db250
cm9sbGVyKEZyYW1lKik7CisgICAgfkljb25Db250cm9sbGVyKCk7CisKKyAgICBLVVJMIHVybCgp
OworICAgIEljb25VUkxzIHVybHMoaW50IGljb25UeXBlcyk7CisKKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGlubGluZSB0aGlzIGZ1bmN0aW9uIGludG8gaXRzIG9uZSBjYWxsZXIhCisgICAgdm9p
ZCBzZXRVUkwoY29uc3QgSWNvblVSTCYpOworCisgICAgdm9pZCBzdGFydExvYWRlcigpOworICAg
IHZvaWQgc3RvcExvYWRlcigpOworCisgICAgdm9pZCBsb2FkRGVjaXNpb25SZWNlaXZlZChJY29u
TG9hZERlY2lzaW9uKTsKKyAgICB2b2lkIGNvbnRpbnVlTG9hZFdpdGhEZWNpc2lvbihJY29uTG9h
ZERlY2lzaW9uKTsKKworICAgIHZvaWQgY29tbWl0VG9EYXRhYmFzZShjb25zdCBLVVJMJiBpY29u
KTsKKworcHJpdmF0ZToKKyAgICBib29sIGFwcGVuZFRvSWNvblVSTHMoSWNvblR5cGUsIEljb25V
UkxzKik7CisgICAgSWNvblVSTCBkZWZhdWx0VVJMKEljb25UeXBlKTsKKworICAgIEZyYW1lKiBt
X2ZyYW1lOworCisgICAgT3duUHRyPEljb25Mb2FkZXI+IG1faWNvbkxvYWRlcjsKKyAgICBib29s
IG1fd2FpdGluZ0ZvckxvYWREZWNpc2lvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNw
cAkocmV2aXNpb24gODg2MTApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIHZvaWQgSWNvbkxvYWRl
cjo6c3RhcnRMb2FkaW5nKCkKICAgICAvLyBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlIHJldHVy
bnMuCiAgICAgbV9sb2FkSXNJblByb2dyZXNzID0gdHJ1ZTsKIAotICAgIFJlc291cmNlUmVxdWVz
dCByZXNvdXJjZVJlcXVlc3QobV9mcmFtZS0+bG9hZGVyKCktPmljb25VUkwoKSk7CisgICAgUmVz
b3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdChtX2ZyYW1lLT5sb2FkZXIoKS0+aWNvbigpLT51
cmwoKSk7CiAgICAgcmVzb3VyY2VSZXF1ZXN0LnNldFByaW9yaXR5KFJlc291cmNlTG9hZFByaW9y
aXR5TG93KTsKIAogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gcmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKG1fZnJhbWUsIHRoaXMs
IHJlc291cmNlUmVxdWVzdCk7CiAgICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIHN0YXJ0IGxvYWQgZm9yIGljb24gYXQgdXJsICVzIiwgbV9mcmFtZS0+bG9hZGVy
KCktPmljb25VUkwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHN0YXJ0IGxvYWQgZm9yIGljb24gYXQgdXJsICVzIiwgbV9mcmFtZS0+bG9h
ZGVyKCktPmljb24oKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogCiAgICAgLy8g
U3RvcmUgdGhlIGhhbmRsZSBzbyB3ZSBjYW4gY2FuY2VsIHRoZSBsb2FkIGlmIHN0b3BMb2FkaW5n
IGlzIGNhbGxlZCBsYXRlci4KICAgICAvLyBCdXQgb25seSBkbyBpdCBpZiB0aGUgbG9hZCBoYXNu
J3QgYWxyZWFkeSBjb21wbGV0ZWQuCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBJY29uTG9hZGVy
OjpmaW5pc2hMb2FkaW5nKGNvbnN0IEtVUgogICAgIAogICAgIGlmICghaWNvblVSTC5pc0VtcHR5
KCkgJiYgbV9sb2FkSXNJblByb2dyZXNzKSB7CiAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJJ
Y29uTG9hZGVyOjpmaW5pc2hMb2FkaW5nKCkgLSBDb21taXR0aW5nIGljb25VUkwgJXMgdG8gZGF0
YWJhc2UiLCBpY29uVVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgbV9mcmFt
ZS0+bG9hZGVyKCktPmNvbW1pdEljb25VUkxUb0ljb25EYXRhYmFzZShpY29uVVJMKTsKKyAgICAg
ICAgbV9mcmFtZS0+bG9hZGVyKCktPmljb24oKS0+Y29tbWl0VG9EYXRhYmFzZShpY29uVVJMKTsK
ICAgICAgICAgLy8gU2V0dGluZyB0aGUgaWNvbiBkYXRhIG9ubHkgYWZ0ZXIgY29tbWl0dGluZyB0
byB0aGUgZGF0YWJhc2UgZW5zdXJlcyB0aGF0IHRoZSBkYXRhIGlzCiAgICAgICAgIC8vIGtlcHQg
aW4gbWVtb3J5IChzbyBpdCBkb2VzIG5vdCBoYXZlIHRvIGJlIHJlYWQgZnJvbSB0aGUgZGF0YWJh
c2UgYXN5bmNocm9ub3VzbHkpLCBzaW5jZQogICAgICAgICAvLyB0aGVyZSBpcyBhIHBhZ2UgVVJM
IHJlZmVyZW5jaW5nIGl0LgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxv
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2Fk
ZXIuaAkocmV2aXNpb24gODg2MTApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29u
TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEyICs0MiwxMiBAQCBjbGFzcyBJY29uTG9h
ZGVyIDogcHJpdmF0ZSBTdWJyZXNvdXJjZUxvCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25Q
dHI8SWNvbkxvYWRlcj4gY3JlYXRlKEZyYW1lKik7CiAgICAgfkljb25Mb2FkZXIoKTsKLSAgICAK
KwogICAgIHZvaWQgc3RhcnRMb2FkaW5nKCk7CiAgICAgdm9pZCBzdG9wTG9hZGluZygpOwogCiBw
cml2YXRlOgotICAgIEljb25Mb2FkZXIoRnJhbWUqKTsKKyAgICBleHBsaWNpdCBJY29uTG9hZGVy
KEZyYW1lKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291
cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOwpAQCAt
NTUsNyArNTUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291
cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogCiAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAgCisKICAgICB2b2lkIGZpbmlzaExvYWRp
bmcoY29uc3QgS1VSTCYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhKTsKICAgICB2b2lk
IGNsZWFyTG9hZGluZ1N0YXRlKCk7CiAKQEAgLTYzLDcgKzYzLDcgQEAgcHJpdmF0ZToKIAogICAg
IFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9yZXNvdXJjZUxvYWRlcjsKICAgICBib29sIG1f
bG9hZElzSW5Qcm9ncmVzczsKLX07IC8vIGNsYXNzIEljb25Mb2FkZXIKK307CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDg4NjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wNi0xMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEZhY3RvciBJY29uQ29udHJvbGxlciBvdXQgb2YgRnJhbWVMb2FkZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNTA5CisKKyAgICAgICAgKiBzcmMv
V2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjppY29uVVJM
cyk6CisKIDIwMTEtMDYtMTAgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDg4NjEwKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMxLDcgKzUzMSw3IEBAIFdlYlZlY3RvcjxXZWJJY29uVVJMPiBXZWJGcmFtZUltcGw6
Omljb24KICAgICAvLyBUaGUgVVJMIHRvIHRoZSBpY29uIG1heSBiZSBpbiB0aGUgaGVhZGVyLiBB
cyBzdWNoLCBvbmx5CiAgICAgLy8gYXNrIHRoZSBsb2FkZXIgZm9yIHRoZSBpY29uIGlmIGl0J3Mg
ZmluaXNoZWQgbG9hZGluZy4KICAgICBpZiAoZnJhbWVMb2FkZXItPnN0YXRlKCkgPT0gRnJhbWVT
dGF0ZUNvbXBsZXRlKQotICAgICAgICByZXR1cm4gZnJhbWVMb2FkZXItPmljb25VUkxzKGljb25U
eXBlcyk7CisgICAgICAgIHJldHVybiBmcmFtZUxvYWRlci0+aWNvbigpLT51cmxzKGljb25UeXBl
cyk7CiAgICAgcmV0dXJuIFdlYlZlY3RvcjxXZWJJY29uVVJMPigpOwogfQogCg==
</data>
<flag name="review"
          id="90666"
          type_id="1"
          status="+"
          setter="japhet"
    />
    <flag name="commit-queue"
          id="90667"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>