<?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>21355</bug_id>
          
          <creation_ts>2008-10-03 21:41:08 -0700</creation_ts>
          <short_desc>Move SecurityOrigin out of platform/ to page/</short_desc>
          <delta_ts>2008-10-03 22:17:09 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</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>21354</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>94032</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-03 21:41:08 -0700</bug_when>
    <thetext>It should have never been in platform.  Bad Sam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94039</commentid>
    <comment_count>1</comment_count>
      <attachid>24081</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-03 22:12:29 -0700</bug_when>
    <thetext>Created attachment 24081
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94040</commentid>
    <comment_count>2</comment_count>
      <attachid>24081</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-03 22:12:59 -0700</bug_when>
    <thetext>Comment on attachment 24081
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94041</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-03 22:17:09 -0700</bug_when>
    <thetext>Fixed in r37282.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24081</attachid>
            <date>2008-10-03 22:12:29 -0700</date>
            <delta_ts>2008-10-03 22:12:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>secOrigin.diff</filename>
            <type>text/plain</type>
            <size>56646</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3Mjgx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMDgtMTAt
MDMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMzU1CisgICAgICAgIE1vdmUgU2VjdXJpdHlPcmlnaW4gb3V0
IG9mIHBsYXRmb3JtLyB0byBwYWdlLy4KKworICAgICAgICBJdCB3YXMgYSBsYXllcmluZyB2aW9s
YXRpb24gZm9yIFNlY3VyaXR5T3JpZ2luIHRvIGJlIGluIHBsYXRmb3JtCisgICAgICAgIGFzIGl0
IGRlcGVuZGVkIG9uIEZyYW1lTG9hZGVyLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2lu
LmNwcDogQ29waWVkIGZyb20gcGxhdGZvcm0vU2VjdXJpdHlPcmlnaW4uY3BwLgorICAgICAgICAq
IHBhZ2UvU2VjdXJpdHlPcmlnaW4uaDogQ29waWVkIGZyb20gcGxhdGZvcm0vU2VjdXJpdHlPcmln
aW4uaC4KKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luSGFzaC5oOiBDb3BpZWQgZnJvbSBw
bGF0Zm9ybS9TZWN1cml0eU9yaWdpbkhhc2guaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TZWN1cml0
eU9yaWdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vU2VjdXJpdHlPcmlnaW4u
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TZWN1cml0eU9yaWdpbkhhc2guaDogUmVt
b3ZlZC4KKwogMjAwOC0xMC0wMyAgTWFyY28gQmFyaXNpb25lICA8bWFyY28uYmFyaXNpb25lQGNv
bGxhYm9yYS5jby51az4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbHAgVG9rZXIuCkluZGV4OiBH
TlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBHTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzcy
NjYpCisrKyBHTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTUwMSw2ICsxNTAxLDkg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmggXAog
CVdlYkNvcmUvcGFnZS9TY3JlZW4uY3BwIFwKIAlXZWJDb3JlL3BhZ2UvU2NyZWVuLmggXAorCVdl
YkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAgXAorCVdlYkNvcmUvcGFnZS9TZWN1cml0eU9y
aWdpbi5oIFwKKwlXZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW5IYXNoLmggXAogCVdlYkNvcmUv
cGFnZS9TZXR0aW5ncy5jcHAgXAogCVdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIFwKIAlXZWJDb3Jl
L3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwIFwKQEAgLTE1NjQsOSArMTU2Nyw2IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TZWFyY2hQb3B1cE1l
bnUuaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9TZWN1cml0eU9yaWdpbi5jcHAgXAotCVdlYkNvcmUv
cGxhdGZvcm0vU2VjdXJpdHlPcmlnaW4uaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9TZWN1cml0eU9y
aWdpbkhhc2guaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1NoYXJlZFRp
bWVyLmggXApJbmRleDogV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS5wcm8JKHJl
dmlzaW9uIDM3MjY2KQorKysgV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTc4Myw2ICs3
ODMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL1BhZ2UuY3BwIFwKICAgICBwYWdlL1BhZ2VH
cm91cC5jcHAgXAogICAgIHBhZ2UvUHJpbnRDb250ZXh0LmNwcCBcCisgICAgcGFnZS9TZWN1cml0
eU9yaWdpbi5jcHAgXAogICAgIHBhZ2UvU2NyZWVuLmNwcCBcCiAgICAgcGFnZS9TZXR0aW5ncy5j
cHAgXAogICAgIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwIFwKQEAgLTg0MSw3ICs4NDIsNiBAQCBT
T1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIFwKICAgICBwbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcCBcCiAjICAgIHBsYXRmb3JtL1NlYXJjaFBvcHVwTWVudS5jcHAgXAotICAg
IHBsYXRmb3JtL1NlY3VyaXR5T3JpZ2luLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9TZWdtZW50
ZWRTdHJpbmcuY3BwIFwKICAgICBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIFwKICAgICBwbGF0
Zm9ybS90ZXh0L1N0cmluZy5jcHAgXApJbmRleDogV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmVTb3VyY2VzLmJrbAkocmV2aXNpb24gMzcyNjYpCisrKyBXZWJDb3JlU291
cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTY3Myw2ICs2NzMsNyBAQCBUaGlzIGZpbGUgY29u
dGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAgIHBhZ2UvUGFnZS5jcHAKICAgICAg
ICAgcGFnZS9QYWdlR3JvdXAuY3BwCiAgICAgICAgIHBhZ2UvU2NyZWVuLmNwcAorICAgICAgICBw
YWdlL1NlY3VyaXR5T3JpZ2luLmNwcAogICAgICAgICBwYWdlL1NldHRpbmdzLmNwcAogICAgICAg
ICBwYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAogICAgIDwvc2V0PgpAQCAtNzA0LDcgKzcwNSw2IEBA
IFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgcGxhdGZv
cm0vdGV4dC9SZWd1bGFyRXhwcmVzc2lvbi5jcHAKICAgICAgICAgcGxhdGZvcm0vU2Nyb2xsYmFy
LmNwcAogICAgICAgICBwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAotICAgICAgICBwbGF0Zm9ybS9T
ZWN1cml0eU9yaWdpbi5jcHAKICAgICAgICAgcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
dGV4dC9TdHJpbmcuY3BwCkluZGV4OiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMzcyNjYp
CisrKyBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQ4
MCw2ICsyNDgwLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBhZ2VcU2VjdXJpdHlPcmlnaW4uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxTZWN1cml0eU9yaWdpbi5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGFnZVxTZXR0aW5ncy5jcHAiDQogCQkJCT4NCiAJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpAQCAt
MzM4NCwxNCArMzM5Miw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNlY3VyaXR5T3JpZ2luLmNwcCINCi0JCQkJPg0KLQkJ
CTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNlY3Vy
aXR5T3JpZ2luLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxTaGFyZWRCdWZmZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxl
Pg0KSW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDM3MjY2KQorKysg
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NTIs
NyArNTUyLDYgQEAKIAkJNTEyREQ4RkQwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVGYWN0b3J5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJERDhG
MzBEOTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZUZhY3RvcnkuaCAqLzsgfTsKIAkJNTEzRjE0NTMw
QUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzRjE0NTEwQUI2MzRDNDAwMDk0RERGIC8qIEljb25M
b2FkZXIuY3BwICovOyB9OwogCQk1MTNGMTQ1NDBBQjYzNEM0MDAwOTREREYgLyogSWNvbkxvYWRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzRjE0
NTIwQUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuaCAqLzsgfTsKLQkJNTE0MDc1QzYwRDUz
RUNGRTAwQkMyRDg1IC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0MDc1QzUwRDUzRUNGRTAwQkMyRDg1IC8qIFNl
Y3VyaXR5T3JpZ2luSGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUxNDE4NUVFMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3Jh
cHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0
MTg1RUMwQ0Q2NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggKi87IH07CiAJ
CTUxNDE4NUVGMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTQxODVFRDBDRDY1
RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovOyB9OwogCQk1MTRCM0Y3
MzBDNzIyMDQ3MDAwNTMwREYgLyogRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0QjNGNzIwQzcyMjA0NzAwMDUzMERGIC8qIEZpbGVT
eXN0ZW0uaCAqLzsgfTsKQEAgLTM2MjYsOCArMzYyNSw2IEBACiAJCUJDMDBGMDM3MEUwQTE5REIw
MEZEMDRFMyAvKiBET01GaWxlSW50ZXJuYWwuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBGMDAwMEUwQTE4NTUwMEZEMDRF
MyAvKiBET01GaWxlSW50ZXJuYWwuaCAqLzsgfTsKIAkJQkMwMEYwMzgwRTBBMTlEQjAwRkQwNEUz
IC8qIERPTUZpbGVMaXN0LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRjAwMTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmls
ZUxpc3QuaCAqLzsgfTsKIAkJQkMwMEYwMzkwRTBBMTlEQjAwRkQwNEUzIC8qIERPTUZpbGVMaXN0
SW50ZXJuYWwuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDBGMDAzMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlTGlzdElu
dGVybmFsLmggKi87IH07Ci0JCUJDMDE0Qzc0MENDNTU3OUQwMDlDNEIyMCAvKiBTZWN1cml0eU9y
aWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzAxNEM3MjBDQzU1NzlEMDA5QzRCMjAgLyogU2VjdXJpdHlPcmlnaW4uY3BwICovOyB9OwotCQlC
QzAxNEM3NTBDQzU1NzlEMDA5QzRCMjAgLyogU2VjdXJpdHlPcmlnaW4uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDE0QzczMENDNTU3OUQwMDlDNEIy
MCAvKiBTZWN1cml0eU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUJDMDJBNEI3MEUwOTk3QjkwMDRCNkQyQiAvKiBDU1NQYXJzZXJWYWx1
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDJB
NEI2MEUwOTk3QjkwMDRCNkQyQiAvKiBDU1NQYXJzZXJWYWx1ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzAyQTU0MDBFMDk5QzVBMDA0QjZE
MkIgLyogQ1NTUGFyc2VyVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDJBNTNGMEUwOTlDNUEwMDRCNkQyQiAvKiBDU1NQYXJzZXJWYWx1
ZXMuY3BwICovOyB9OwogCQlCQzAyQTYzQzBFMDlBOUNGMDA0QjZEMkIgLyogQ1NTRnVuY3Rpb25W
YWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
MkE2M0IwRTA5QTlDRjAwNEI2RDJCIC8qIENTU0Z1bmN0aW9uVmFsdWUuaCAqLzsgfTsKQEAgLTM5
NzYsNiArMzk3Myw5IEBACiAJCUJDQ0Q3NERDMEE0QzhEMzUwMDVGREE2RCAvKiBIVE1MVmlld1Nv
dXJjZURvY3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0NENzREQjBBNEM4RDM1MDA1RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5o
ICovOyB9OwogCQlCQ0NENzRFNTBBNEM4RERGMDA1RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1
bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0NENzRFNDBBNEM4RERGMDA1RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAgKi87
IH07CiAJCUJDQ0ZCQUU4MEI1MTUyRUQwMDAxRjFENyAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQ0ZCQUU3MEI1MTUyRUQwMDAx
RjFENyAvKiBUb2tlbml6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlCQ0QwRTBGQTBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW4u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEMEUw
RjcwRTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luLmNwcCAqLzsgfTsKKwkJQkNEMEUw
RkIwRTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QwRTBGODBFOTcyQzM1MDAyNjVERUEgLyog
U2VjdXJpdHlPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlCQ0QwRTBGQzBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW5IYXNo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QwRTBG
OTBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW5IYXNoLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNEMEZCRDAwREJENjI1RTAwQjJG
NjMwIC8qIERPTUFic3RyYWN0Vmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRDBGQkNGMERCRDYyNUUwMEIyRjYzMCAvKiBET01BYnN0cmFjdFZp
ZXcubW0gKi87IH07CiAJCUJDRDBGQzRGMERCRDcyMEIwMEIyRjYzMCAvKiBET01SR0JDb2xvcklu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0QwRkM0RTBEQkQ3MjBCMDBCMkY2MzAgLyogRE9NUkdCQ29sb3JJbnRlcm5hbC5oICovOyB9Owog
CQlCQ0Q0MUFCQjBDMDYwREU4MDBDMEU0NDYgLyogSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRDQx
QUJBMEMwNjBERTgwMEMwRTQ0NiAvKiBKU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwICov
OyB9OwpAQCAtNTI1Myw3ICs1MjUzLDYgQEAKIAkJNTEyREQ4RjMwRDkxRTZBRjAwMEY4OUVFIC8q
IEFyY2hpdmVGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyY2hp
dmVGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxM0YxNDUxMEFCNjM0
QzQwMDA5NERERiAvKiBJY29uTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJY29uTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTEzRjE0NTIwQUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEljb25Mb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNTE0MDc1QzUwRDUzRUNGRTAwQkMyRDg1IC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWN1cml0eU9yaWdpbkhhc2guaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0MTg1RUMwQ0Q2NUYwNDAwNzYzQzk5IC8qIENo
YW5nZVZlcnNpb25XcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENo
YW5nZVZlcnNpb25XcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNDE4
NUVEMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNEIzRjcyMEM3MjIwNDcwMDA1MzBERiAvKiBG
aWxlU3lzdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVTeXN0ZW0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxNjEsOCArODE2MCw2IEBACiAJCUJD
MDBGMDExMEUwQTE4OTUwMEZEMDRFMyAvKiBKU0ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNGaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBG
MDEyMEUwQTE4OTUwMEZEMDRFMyAvKiBKU0ZpbGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmlsZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzAwRjAxMzBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxlTGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ZpbGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUJDMDE0QzcyMENDNTU3OUQwMDlDNEIyMCAvKiBTZWN1cml0eU9yaWdpbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VjdXJpdHlPcmlnaW4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzAxNEM3MzBDQzU1NzlEMDA5QzRC
MjAgLyogU2VjdXJpdHlPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNlY3VyaXR5T3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDJBNEI2
MEUwOTk3QjkwMDRCNkQyQiAvKiBDU1NQYXJzZXJWYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ1NTUGFyc2VyVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDMDJBNTNGMEUwOTlDNUEwMDRCNkQyQiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUGFyc2VyVmFsdWVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMkE2M0IwRTA5QTlDRjAwNEI2RDJCIC8q
IENTU0Z1bmN0aW9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NT
RnVuY3Rpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODUyOSw2ICs4
NTI2LDkgQEAKIAkJQkNDRDc0REIwQTRDOEQzNTAwNUZEQTZEIC8qIEhUTUxWaWV3U291cmNlRG9j
dW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxWaWV3U291cmNl
RG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNDRDc0RTQwQTRDOERE
RjAwNUZEQTZEIC8qIEhUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0NGQkFFNzBCNTE1MkVEMDAwMUYxRDcgLyogVG9rZW5p
emVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbml6ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNEMEUwRjcwRTk3MkMzNTAwMjY1REVBIC8qIFNl
Y3VyaXR5T3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNl
Y3VyaXR5T3JpZ2luLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNEMEUwRjgw
RTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNlY3VyaXR5T3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUJDRDBFMEY5MEU5NzJDMzUwMDI2NURFQSAvKiBTZWN1cml0eU9yaWdpbkhhc2guaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJpdHlPcmlnaW5IYXNoLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRDBGQkNGMERCRDYyNUUwMEIyRjYzMCAvKiBET01B
YnN0cmFjdFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBE
T01BYnN0cmFjdFZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRDBGQzRF
MERCRDcyMEIwMEIyRjYzMCAvKiBET01SR0JDb2xvckludGVybmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERPTVJHQkNvbG9ySW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkNENDFBQkEwQzA2MERFODAwQzBFNDQ2IC8qIEpTSFRNTEZyYW1lU2V0
RWxlbWVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTk1ODMsNiArOTU4Myw5IEBACiAJCQkJQkNFQzAxQkEwQzI3NERBQzAwOUY0RUM5IC8q
IFNjcmVlbi5jcHAgKi8sCiAJCQkJQkNFQzAxQkIwQzI3NERBQzAwOUY0RUM5IC8qIFNjcmVlbi5o
ICovLAogCQkJCUJDRUMwMUJDMEMyNzREQUMwMDlGNEVDOSAvKiBTY3JlZW4uaWRsICovLAorCQkJ
CUJDRDBFMEY3MEU5NzJDMzUwMDI2NURFQSAvKiBTZWN1cml0eU9yaWdpbi5jcHAgKi8sCisJCQkJ
QkNEMEUwRjgwRTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luLmggKi8sCisJCQkJQkNE
MEUwRjkwRTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oICovLAogCQkJCTE0
QzlBNUU5MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgKi8sCiAJCQkJRjU4Nzg2M0Ew
MkRFM0ExNDAxRUE0MTIyIC8qIFNldHRpbmdzLmggKi8sCiAJCQkJQkM4MjQzRTYwRDBDRkQ3NTAw
NDYwQzhGIC8qIFdpbmRvd0ZlYXR1cmVzLmNwcCAqLywKQEAgLTEzMTY4LDkgKzEzMTcxLDYgQEAK
IAkJCQlCQzI0NDFDMzBFOEI2NUQwMDA1NTMyMEYgLyogU2Nyb2xsVmlldy5jcHAgKi8sCiAJCQkJ
QkM2RDZFMjUwOUFGOTQzNTAwRjU5NzU5IC8qIFNjcm9sbFZpZXcuaCAqLywKIAkJCQlBQjcxNzA4
ODBCMzExODA4MDAxNzEyM0UgLyogU2VhcmNoUG9wdXBNZW51LmggKi8sCi0JCQkJQkMwMTRDNzIw
Q0M1NTc5RDAwOUM0QjIwIC8qIFNlY3VyaXR5T3JpZ2luLmNwcCAqLywKLQkJCQlCQzAxNEM3MzBD
QzU1NzlEMDA5QzRCMjAgLyogU2VjdXJpdHlPcmlnaW4uaCAqLywKLQkJCQk1MTQwNzVDNTBENTNF
Q0ZFMDBCQzJEODUgLyogU2VjdXJpdHlPcmlnaW5IYXNoLmggKi8sCiAJCQkJMUE0QTk1NEIwQjRF
RENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5jcHAgKi8sCiAJCQkJMUE0QTk1NEMwQjRFREND
QjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5oICovLAogCQkJCTkzMzA5RUEwMDk5RUI3OEMwMDU2
RTU4MSAvKiBTaGFyZWRUaW1lci5oICovLApAQCAtMTU0OTIsNyArMTU0OTIsNiBAQAogCQkJCTkz
QzA5Qzg2MEIwNjU3QUEwMDVBQkQ0RCAvKiBTY3JvbGxUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM2RDZFMjYwOUFGOTQzNTAwRjU5NzU5IC8qIFNjcm9sbFZpZXcuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFCNzE3MDg5MEIzMTE4MDgwMDE3MTIzRSAvKiBTZWFyY2hQb3B1cE1lbnUuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUJDMDE0Qzc1MENDNTU3OUQwMDlDNEIyMCAvKiBTZWN1cml0eU9yaWdp
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21l
bnRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMEMwOTlFNjQ5MjAwNTZFNTgx
IC8qIFNlbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMEUwOTlFNjQ5MjAwNTZF
NTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTU2NjYsNyAr
MTU2NjUsNiBAQAogCQkJCUIyMzdDOEE4MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTRFRUZGQzkwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9D
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5QjNFNEUwRDNDMUU4NDAwQjRBOTJC
IC8qIFN0cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE0MDc1QzYwRDUzRUNGRTAw
QkMyRDg1IC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBOTI2
N0QwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblF1b3RhTWFuYWdlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTFBOTI2N0YwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblVzYWdlUmVjb3JkLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1RENGODM2RDBENTkxNTk4MDA5NTNCQzYgLyogUGx1Z2luSW5mb1N0
b3JlLmggaW4gSGVhZGVycyAqLywKQEAgLTE1OTU1LDYgKzE1OTUzLDggQEAKIAkJCQlCQzNCN0FG
NDBFOTE5Q0E5MDBENTQwNjUgLyogSlNFdmVudFRhcmdldE5vZGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDNjA5MDFGMEU5MUI4RUMwMDBDNjhCNSAvKiBKU0V2ZW50VGFyZ2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzNCQzI5QzBFOTFBQjBGMDA4MzU1ODggLyogSG9zdFdpbmRvdy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQkNEMEUwRkIwRTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2lu
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0QwRTBGQzBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJp
dHlPcmlnaW5IYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3MzgzLDcgKzE3MzgzLDYgQEAKIAkJ
CQlCQ0FBOTBDMzBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzNTM2NzZCMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQUI3MTcwQTAwQjMxMTkzQjAwMTcxMjNFIC8qIFNlYXJjaFBvcHVwTWVu
dU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUJDMDE0Qzc0MENDNTU3OUQwMDlDNEIyMCAvKiBT
ZWN1cml0eU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREEyRTBEMDA2QzFEMDBF
RjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTBC
MDk5RTY0OTIwMDU2RTU4MSAvKiBTZWxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMz
MDlFMEQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0xNzgwNSw2ICsxNzgwNCw3IEBACiAJCQkJQkMzQjdCMjEwRTkxQUFGNDAwRDU0
MDY1IC8qIEpTRXZlbnRUYXJnZXROb2RlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
NjA5MDIwMEU5MUI4RUMwMDBDNjhCNSAvKiBKU0V2ZW50VGFyZ2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3RDAzMThFMEU5MzU0MDMwMEUyNEFDRCAvKiBKU0ltYWdlRGF0YUN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlCQ0QwRTBGQTBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlP
cmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gMzcyNjYpCShm
cm9tIHBsYXRmb3JtL1NlY3VyaXR5T3JpZ2luLmNwcDozNzI2NikKKysrIHBhZ2UvU2VjdXJpdHlP
cmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKworI2luY2x1ZGUgIkNTdHJpbmcu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29s
IGlzRGVmYXVsdFBvcnRGb3JQcm90b2NvbCh1bnNpZ25lZCBzaG9ydCBwb3J0LCBjb25zdCBTdHJp
bmcmIHByb3RvY29sKQoreworICAgIGlmIChwcm90b2NvbC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgdW5zaWduZWQ+IGRlZmF1
bHRQb3J0czsKKyAgICBpZiAoZGVmYXVsdFBvcnRzLmlzRW1wdHkoKSkgeworICAgICAgICBkZWZh
dWx0UG9ydHMuc2V0KCJodHRwIiwgODApOworICAgICAgICBkZWZhdWx0UG9ydHMuc2V0KCJodHRw
cyIsIDQ0Myk7CisgICAgICAgIGRlZmF1bHRQb3J0cy5zZXQoImZ0cCIsIDIxKTsKKyAgICAgICAg
ZGVmYXVsdFBvcnRzLnNldCgiZnRwcyIsIDk5MCk7CisgICAgfQorICAgIHJldHVybiBkZWZhdWx0
UG9ydHMuZ2V0KHByb3RvY29sKSA9PSBwb3J0OworfQorCitTZWN1cml0eU9yaWdpbjo6U2VjdXJp
dHlPcmlnaW4oY29uc3QgS1VSTCYgdXJsKQorICAgIDogbV9wcm90b2NvbCh1cmwucHJvdG9jb2wo
KS5pc051bGwoKSA/ICIiIDogdXJsLnByb3RvY29sKCkubG93ZXIoKSkKKyAgICAsIG1faG9zdCh1
cmwuaG9zdCgpLmlzTnVsbCgpID8gIiIgOiB1cmwuaG9zdCgpLmxvd2VyKCkpCisgICAgLCBtX3Bv
cnQodXJsLnBvcnQoKSkKKyAgICAsIG1fbm9BY2Nlc3MoZmFsc2UpCisgICAgLCBtX2RvbWFpbldh
c1NldEluRE9NKGZhbHNlKQoreworICAgIC8vIFRoZXNlIHByb3RvY29scyBkbyBub3QgY3JlYXRl
IHNlY3VyaXR5IG9yaWdpbnM7IHRoZSBvd25lciBmcmFtZSBwcm92aWRlcyB0aGUgb3JpZ2luCisg
ICAgaWYgKG1fcHJvdG9jb2wgPT0gImFib3V0IiB8fCBtX3Byb3RvY29sID09ICJqYXZhc2NyaXB0
IikKKyAgICAgICAgbV9wcm90b2NvbCA9ICIiOworCisgICAgLy8gZGF0YTogVVJMcyBhcmUgbm90
IGFsbG93ZWQgYWNjZXNzIHRvIGFueXRoaW5nIG90aGVyIHRoYW4gdGhlbXNlbHZlcy4KKyAgICBp
ZiAobV9wcm90b2NvbCA9PSAiZGF0YSIpCisgICAgICAgIG1fbm9BY2Nlc3MgPSB0cnVlOworCisg
ICAgLy8gZG9jdW1lbnQuZG9tYWluIHN0YXJ0cyBhcyBtX2hvc3QsIGJ1dCBjYW4gYmUgc2V0IGJ5
IHRoZSBET00uCisgICAgbV9kb21haW4gPSBtX2hvc3Q7CisKKyAgICAvLyBCeSBkZWZhdWx0LCBv
bmx5IGxvY2FsIFNlY3VyaXR5T3JpZ2lucyBjYW4gbG9hZCBsb2NhbCByZXNvdXJjZXMuCisgICAg
bV9jYW5Mb2FkTG9jYWxSZXNvdXJjZXMgPSBpc0xvY2FsKCk7CisKKyAgICBpZiAoaXNEZWZhdWx0
UG9ydEZvclByb3RvY29sKG1fcG9ydCwgbV9wcm90b2NvbCkpCisgICAgICAgIG1fcG9ydCA9IDA7
Cit9CisKK1NlY3VyaXR5T3JpZ2luOjpTZWN1cml0eU9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdp
biogb3RoZXIpCisgICAgOiBtX3Byb3RvY29sKG90aGVyLT5tX3Byb3RvY29sLmNvcHkoKSkKKyAg
ICAsIG1faG9zdChvdGhlci0+bV9ob3N0LmNvcHkoKSkKKyAgICAsIG1fZG9tYWluKG90aGVyLT5t
X2RvbWFpbi5jb3B5KCkpCisgICAgLCBtX3BvcnQob3RoZXItPm1fcG9ydCkKKyAgICAsIG1fbm9B
Y2Nlc3Mob3RoZXItPm1fbm9BY2Nlc3MpCisgICAgLCBtX2RvbWFpbldhc1NldEluRE9NKG90aGVy
LT5tX2RvbWFpbldhc1NldEluRE9NKQorICAgICwgbV9jYW5Mb2FkTG9jYWxSZXNvdXJjZXMob3Ro
ZXItPm1fY2FuTG9hZExvY2FsUmVzb3VyY2VzKQoreworfQorCitib29sIFNlY3VyaXR5T3JpZ2lu
Ojppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm90b2NvbC5pc0VtcHR5KCk7Cit9
CisKK1Bhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoY29u
c3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VjdXJpdHlPcmlnaW4o
dXJsKSk7Cit9CisKK1Bhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2luOjpj
cmVhdGVFbXB0eSgpCit7CisgICAgcmV0dXJuIGNyZWF0ZShLVVJMKCkpOworfQorCitQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6Y29weSgpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTZWN1cml0eU9yaWdpbih0aGlzKSk7Cit9CisKK3ZvaWQgU2VjdXJpdHlP
cmlnaW46OnNldERvbWFpbkZyb21ET00oY29uc3QgU3RyaW5nJiBuZXdEb21haW4pCit7CisgICAg
bV9kb21haW5XYXNTZXRJbkRPTSA9IHRydWU7CisgICAgbV9kb21haW4gPSBuZXdEb21haW4ubG93
ZXIoKTsKK30KKworYm9vbCBTZWN1cml0eU9yaWdpbjo6Y2FuQWNjZXNzKGNvbnN0IFNlY3VyaXR5
T3JpZ2luKiBvdGhlcikgY29uc3QKK3sgIAorICAgIGlmIChpc0xvY2FsKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgaWYgKG1fbm9BY2Nlc3MgfHwgb3RoZXItPm1fbm9BY2Nlc3MpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEhlcmUgYXJlIHR3byBjYXNlcyB3aGVyZSB3
ZSBzaG91bGQgcGVybWl0IGFjY2VzczoKKyAgICAvLworICAgIC8vIDEpIE5laXRoZXIgZG9jdW1l
bnQgaGFzIHNldCBkb2N1bWVudC5kb21haW4uICBJbiB0aGlzIGNhc2UsIHdlIGluc2lzdAorICAg
IC8vICAgIHRoYXQgdGhlIHNjaGVtZSwgaG9zdCwgYW5kIHBvcnQgb2YgdGhlIFVSTHMgbWF0Y2gu
CisgICAgLy8KKyAgICAvLyAyKSBCb3RoIGRvY3VtZW50cyBoYXZlIHNldCBkb2N1bWVudC5kb21h
aW4uICBJbiB0aGlzIGNhc2UsIHdlIGluc2lzdAorICAgIC8vICAgIHRoYXQgdGhlIGRvY3VtZW50
cyBoYXZlIHNldCBkb2N1bWVudC5kb21haW4gdG8gdGhlIHNhbWUgdmFsdWUgYW5kCisgICAgLy8g
ICAgdGhhdCB0aGUgc2NoZW1lIG9mIHRoZSBVUkxzIG1hdGNoLgorICAgIC8vCisgICAgLy8gVGhp
cyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiBGaXJlZm94IDIgYW5kIEludGVybmV0IEV4cGxvcmVy
IDYuCisgICAgLy8KKyAgICAvLyBJbnRlcm5ldCBFeHBsb3JlciA3IGFuZCBPcGVyYSA5IGFyZSBt
b3JlIHN0cmljdCBpbiB0aGF0IHRoZXkgcmVxdWlyZQorICAgIC8vIHRoZSBwb3J0IG51bWJlcnMg
dG8gbWF0Y2ggd2hlbiBib3RoIHBhZ2VzIGhhdmUgZG9jdW1lbnQuZG9tYWluIHNldC4KKyAgICAv
LworICAgIC8vIEZJWE1FOiBFdmFsdWF0ZSB3aGV0aGVyIHdlIGNhbiB0aWdodGVuIHRoaXMgcG9s
aWN5IHRvIHJlcXVpcmUgbWF0Y2hlZAorICAgIC8vICAgICAgICBwb3J0IG51bWJlcnMuCisgICAg
Ly8KKyAgICAvLyBPcGVyYSA5IGFsbG93cyBhY2Nlc3Mgd2hlbiBvbmx5IG9uZSBwYWdlIGhhcyBz
ZXQgZG9jdW1lbnQuZG9tYWluLCBidXQKKyAgICAvLyB0aGlzIGlzIGEgc2VjdXJpdHkgdnVsbmVy
YWJpbGl0eS4KKworICAgIGlmIChtX3Byb3RvY29sID09IG90aGVyLT5tX3Byb3RvY29sKSB7Cisg
ICAgICAgIGlmICghbV9kb21haW5XYXNTZXRJbkRPTSAmJiAhb3RoZXItPm1fZG9tYWluV2FzU2V0
SW5ET00pIHsKKyAgICAgICAgICAgIGlmIChtX2hvc3QgPT0gb3RoZXItPm1faG9zdCAmJiBtX3Bv
cnQgPT0gb3RoZXItPm1fcG9ydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfSBlbHNlIGlmIChtX2RvbWFpbldhc1NldEluRE9NICYmIG90aGVyLT5tX2RvbWFpbldhc1Nl
dEluRE9NKSB7CisgICAgICAgICAgICBpZiAobV9kb21haW4gPT0gb3RoZXItPm1fZG9tYWluKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTZWN1cml0eU9yaWdpbjo6Y2FuUmVxdWVzdChjb25z
dCBLVVJMJiB1cmwpIGNvbnN0Cit7CisgICAgaWYgKGlzTG9jYWwoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAobV9ub0FjY2VzcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiB0YXJnZXRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKHVybCk7CisKKyAgICAvLyBXZSBjYWxsIGlzU2FtZVNjaGVtZUhvc3RQb3J0IGhlcmUg
aW5zdGVhZCBvZiBjYW5BY2Nlc3MgYmVjYXVzZSB3ZSB3YW50CisgICAgLy8gdG8gaWdub3JlIGRv
Y3VtZW50LmRvbWFpbiBlZmZlY3RzLgorICAgIHJldHVybiBpc1NhbWVTY2hlbWVIb3N0UG9ydCh0
YXJnZXRPcmlnaW4uZ2V0KCkpOworfQorCit2b2lkIFNlY3VyaXR5T3JpZ2luOjpncmFudExvYWRM
b2NhbFJlc291cmNlcygpCit7CisgICAgLy8gVGhpcyBtZXRob2QgZXhpc3RzIG9ubHkgdG8gc3Vw
cG9ydCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyCisgICAgLy8gdmVyc2lvbnMg
b2YgV2ViS2l0LiAgR3JhbnRpbmcgcHJpdmlsZWdlcyB0byBzb21lLCBidXQgbm90IGFsbCwgZG9j
dW1lbnRzCisgICAgLy8gaW4gYSBTZWN1cml0eU9yaWdpbiBpcyBhIHNlY3VyaXR5IGhhemFyZCBi
ZWNhdXNlIHRoZSBkb2N1bWVudHMgd2l0aG91dAorICAgIC8vIHRoZSBwcml2aWxlZ2UgY2FuIG9i
dGFpbiB0aGUgcHJpdmlsZWdlIGJ5IGluamVjdGluZyBzY3JpcHQgaW50byB0aGUKKyAgICAvLyBk
b2N1bWVudHMgdGhhdCBoYXZlIGJlZW4gZ3JhbnRlZCB0aGUgcHJpdmlsZWdlLgorICAgIEFTU0VS
VChGcmFtZUxvYWRlcjo6YWxsb3dTdWJzdGl0dXRlRGF0YUFjY2Vzc1RvTG9jYWwoKSk7CisgICAg
bV9jYW5Mb2FkTG9jYWxSZXNvdXJjZXMgPSB0cnVlOworfQorCitib29sIFNlY3VyaXR5T3JpZ2lu
Ojppc0xvY2FsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRnJhbWVMb2FkZXI6OnNob3VsZFRyZWF0
U2NoZW1lQXNMb2NhbChtX3Byb3RvY29sKTsKK30KKworYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNT
ZWN1cmVUcmFuc2l0aW9uVG8oY29uc3QgS1VSTCYgdXJsKSBjb25zdAoreyAKKyAgICAvLyBOZXcg
d2luZG93IGNyZWF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uCisgICAgaWYgKGlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG90aGVyID0g
U2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwpOworICAgIHJldHVybiBjYW5BY2Nlc3Mob3RoZXIu
Z2V0KCkpOworfQorCitTdHJpbmcgU2VjdXJpdHlPcmlnaW46OnRvU3RyaW5nKCkgY29uc3QKK3sK
KyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAo
bV9ub0FjY2VzcykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKG1fcHJvdG9j
b2wgPT0gImZpbGUiKQorICAgICAgICByZXR1cm4gU3RyaW5nKCJmaWxlOi8vIik7CisKKyAgICBW
ZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KG1fcHJvdG9j
b2wubGVuZ3RoKCkgKyBtX2hvc3QubGVuZ3RoKCkgKyAxMCk7CisgICAgYXBwZW5kKHJlc3VsdCwg
bV9wcm90b2NvbCk7CisgICAgYXBwZW5kKHJlc3VsdCwgIjovLyIpOworICAgIGFwcGVuZChyZXN1
bHQsIG1faG9zdCk7CisKKyAgICBpZiAobV9wb3J0KSB7CisgICAgICAgIGFwcGVuZChyZXN1bHQs
ICI6Iik7CisgICAgICAgIGFwcGVuZChyZXN1bHQsIFN0cmluZzo6bnVtYmVyKG1fcG9ydCkpOwor
ICAgIH0KKworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7Cit9CisKK1Bhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgb3JpZ2luU3RyaW5nKQoreworICAgIHJldHVybiBTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlKEtVUkwob3JpZ2luU3RyaW5nKSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIFNlcGFyYXRv
ckNoYXJhY3RlciA9ICdfJzsKKworUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gU2VjdXJpdHlP
cmlnaW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkZW50aWZpZXIpCit7IAorICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIGEgZmlyc3Qgc2VwYXJh
dG9yCisgICAgaW50IHNlcGFyYXRvcjEgPSBkYXRhYmFzZUlkZW50aWZpZXIuZmluZChTZXBhcmF0
b3JDaGFyYWN0ZXIpOworICAgIGlmIChzZXBhcmF0b3IxID09IC0xKQorICAgICAgICByZXR1cm4g
Y3JlYXRlKEtVUkwoKSk7CisgICAgICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIGEgc2Vj
b25kIHNlcGFyYXRvcgorICAgIGludCBzZXBhcmF0b3IyID0gZGF0YWJhc2VJZGVudGlmaWVyLmZp
bmQoU2VwYXJhdG9yQ2hhcmFjdGVyLCBzZXBhcmF0b3IxICsgMSk7CisgICAgaWYgKHNlcGFyYXRv
cjIgPT0gLTEpCisgICAgICAgIHJldHVybiBjcmVhdGUoS1VSTCgpKTsKKyAgICAgICAgCisgICAg
Ly8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm90IGEgdGhpcmQgc2VwYXJhdG9yCisgICAgaWYgKGRhdGFi
YXNlSWRlbnRpZmllci5yZXZlcnNlRmluZChTZXBhcmF0b3JDaGFyYWN0ZXIpICE9IHNlcGFyYXRv
cjIpCisgICAgICAgIHJldHVybiBjcmVhdGUoS1VSTCgpKTsKKyAgICAgICAgCisgICAgLy8gTWFr
ZSBzdXJlIHRoZSBwb3J0IHNlY3Rpb24gaXMgYSB2YWxpZCBwb3J0IG51bWJlciBvciBkb2Vzbid0
IGV4aXN0CisgICAgYm9vbCBwb3J0T2theTsKKyAgICBpbnQgcG9ydCA9IGRhdGFiYXNlSWRlbnRp
Zmllci5yaWdodChkYXRhYmFzZUlkZW50aWZpZXIubGVuZ3RoKCkgLSBzZXBhcmF0b3IyIC0gMSku
dG9JbnQoJnBvcnRPa2F5KTsKKyAgICBpZiAoIXBvcnRPa2F5ICYmIHNlcGFyYXRvcjIgKyAxID09
IHN0YXRpY19jYXN0PGludD4oZGF0YWJhc2VJZGVudGlmaWVyLmxlbmd0aCgpKSkKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZShLVVJMKCkpOworICAgIAorICAgIGlmIChwb3J0IDwgMCB8fCBwb3J0ID4g
NjU1MzUpCisgICAgICAgIHJldHVybiBjcmVhdGUoS1VSTCgpKTsKKyAgICAgICAgCisgICAgLy8g
U3BsaXQgb3V0IHRoZSAzIHNlY3Rpb25zIG9mIGRhdGEKKyAgICBTdHJpbmcgcHJvdG9jb2wgPSBk
YXRhYmFzZUlkZW50aWZpZXIuc3Vic3RyaW5nKDAsIHNlcGFyYXRvcjEpOworICAgIFN0cmluZyBo
b3N0ID0gZGF0YWJhc2VJZGVudGlmaWVyLnN1YnN0cmluZyhzZXBhcmF0b3IxICsgMSwgc2VwYXJh
dG9yMiAtIHNlcGFyYXRvcjEgLSAxKTsKKyAgICByZXR1cm4gY3JlYXRlKEtVUkwocHJvdG9jb2wg
KyAiOi8vIiArIGhvc3QgKyAiOiIgKyBTdHJpbmc6Om51bWJlcihwb3J0KSkpOworfQorCitTdHJp
bmcgU2VjdXJpdHlPcmlnaW46OmRhdGFiYXNlSWRlbnRpZmllcigpIGNvbnN0IAoreworICAgIHN0
YXRpYyBTdHJpbmcgc2VwYXJhdG9yU3RyaW5nID0gU3RyaW5nKCZTZXBhcmF0b3JDaGFyYWN0ZXIs
IDEpOworICAgIHJldHVybiBtX3Byb3RvY29sICsgc2VwYXJhdG9yU3RyaW5nICsgbV9ob3N0ICsg
c2VwYXJhdG9yU3RyaW5nICsgU3RyaW5nOjpudW1iZXIobV9wb3J0KTsgCit9CisKK2Jvb2wgU2Vj
dXJpdHlPcmlnaW46OmVxdWFsKGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBvdGhlcikgY29uc3QgCit7
CisgICAgaWYgKCFpc1NhbWVTY2hlbWVIb3N0UG9ydChvdGhlcikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChtX2RvbWFpbldhc1NldEluRE9NICE9IG90aGVyLT5tX2RvbWFpbldh
c1NldEluRE9NKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9kb21haW5XYXNT
ZXRJbkRPTSAmJiBtX2RvbWFpbiAhPSBvdGhlci0+bV9kb21haW4pCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNlY3VyaXR5T3JpZ2luOjppc1Nh
bWVTY2hlbWVIb3N0UG9ydChjb25zdCBTZWN1cml0eU9yaWdpbiogb3RoZXIpIGNvbnN0IAorewor
ICAgIGlmIChtX2hvc3QgIT0gb3RoZXItPm1faG9zdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG1fcHJvdG9jb2wgIT0gb3RoZXItPm1fcHJvdG9jb2wpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChtX3BvcnQgIT0gb3RoZXItPm1fcG9ydCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IHBhZ2UvU2VjdXJpdHlPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL1NlY3Vy
aXR5T3JpZ2luLmgJKHJldmlzaW9uIDM3MjY2KQkoZnJvbSBwbGF0Zm9ybS9TZWN1cml0eU9yaWdp
bi5oOjM3MjY2KQorKysgcGFnZS9TZWN1cml0eU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFNlY3VyaXR5T3JpZ2luX2gKKyNkZWZpbmUgU2VjdXJpdHlP
cmlnaW5faAorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEtVUkw7Cisg
ICAgCisgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW4gOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxT
ZWN1cml0eU9yaWdpbj4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IGNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIoY29uc3QgU3RyaW5n
Jik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBjcmVhdGVGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4gY3JlYXRlKGNvbnN0IEtVUkwmKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IGNyZWF0ZUVtcHR5KCk7CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgZGVl
cCBjb3B5IG9mIHRoaXMgU2VjdXJpdHlPcmlnaW4uICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwKKyAg
ICAgICAgLy8gd2hlbiBtYXJzaGFsbGluZyBhIFNlY3VyaXR5T3JpZ2luIHRvIGFub3RoZXIgdGhy
ZWFkLgorICAgICAgICBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBjb3B5KCk7CisKKyAgICAg
ICAgLy8gU2V0IHRoZSBkb21haW4gcHJvcGVydHkgb2YgdGhpcyBzZWN1cml0eSBvcmlnaW4gdG8g
bmV3RG9tYWluLiAgVGhpcworICAgICAgICAvLyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB3aGV0
aGVyIG5ld0RvbWFpbiBpcyBhIHN1ZmZpeCBvZiB0aGUgY3VycmVudAorICAgICAgICAvLyBkb21h
aW4uICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB2YWxpZGF0aW5nIG5ld0RvbWFpbi4K
KyAgICAgICAgdm9pZCBzZXREb21haW5Gcm9tRE9NKGNvbnN0IFN0cmluZyYgbmV3RG9tYWluKTsK
KworICAgICAgICBTdHJpbmcgcHJvdG9jb2woKSBjb25zdCB7IHJldHVybiBtX3Byb3RvY29sOyB9
CisgICAgICAgIFN0cmluZyBob3N0KCkgY29uc3QgeyByZXR1cm4gbV9ob3N0OyB9CisgICAgICAg
IFN0cmluZyBkb21haW4oKSBjb25zdCB7IHJldHVybiBtX2RvbWFpbjsgfQorICAgICAgICB1bnNp
Z25lZCBzaG9ydCBwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9wb3J0OyB9CisKKyAgICAgICAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoaXMgU2VjdXJpdHlPcmlnaW4gY2FuIHNjcmlwdCBvYmplY3RzIGlu
IHRoZSBnaXZlbgorICAgICAgICAvLyBTZWN1cml0eU9yaWdpbi4gIEZvciBleGFtcGxlLCBjYWxs
IHRoaXMgZnVuY3Rpb24gYmVmb3JlIGFsbG93aW5nCisgICAgICAgIC8vIHNjcmlwdCBmcm9tIG9u
ZSBzZWN1cml0eSBvcmlnaW4gdG8gcmVhZCBvciB3cml0ZSBvYmplY3RzIGZyb20KKyAgICAgICAg
Ly8gYW5vdGhlciBTZWN1cml0eU9yaWdpbi4KKyAgICAgICAgYm9vbCBjYW5BY2Nlc3MoY29uc3Qg
U2VjdXJpdHlPcmlnaW4qKSBjb25zdDsKKworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhp
cyBTZWN1cml0eU9yaWdpbiBjYW4gcmVhZCBjb250ZW50IHJldHJpZXZlZCBmcm9tCisgICAgICAg
IC8vIHRoZSBnaXZlbiBVUkwuICBGb3IgZXhhbXBsZSwgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9y
ZSBpc3N1aW5nCisgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0cy4KKyAgICAgICAgYm9vbCBjYW5S
ZXF1ZXN0KGNvbnN0IEtVUkwmKSBjb25zdDsKKworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhpcyBTZWN1cml0eU9yaWdpbiBjYW4gbG9hZCBsb2NhbCByZXNvdXJjZXMsIHN1Y2gKKyAgICAg
ICAgLy8gYXMgaW1hZ2VzLCBpZnJhbWVzLCBhbmQgc3R5bGUgc2hlZXRzLCBhbmQgY2FuIGxpbmsg
dG8gbG9jYWwgVVJMcy4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGNhbGwgdGhpcyBmdW5jdGlv
biBiZWZvcmUgY3JlYXRpbmcgYW4gaWZyYW1lIHRvIGEKKyAgICAgICAgLy8gZmlsZTovLyBVUkwu
CisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGU6IEEgU2VjdXJpdHlPcmlnaW4gbWlnaHQgYmUg
YWxsb3dlZCB0byBsb2FkIGxvY2FsIHJlc291cmNlcworICAgICAgICAvLyAgICAgICB3aXRob3V0
IGJlaW5nIGFibGUgdG8gaXNzdWUgYW4gWE1MSHR0cFJlcXVlc3QgZm9yIGEgbG9jYWwgVVJMLgor
ICAgICAgICAvLyAgICAgICBUbyBkZXRlcm1pbmUgd2hldGhlciB0aGUgU2VjdXJpdHlPcmlnaW4g
Y2FuIGlzc3VlIGFuCisgICAgICAgIC8vICAgICAgIFhNTEh0dHBSZXF1ZXN0IGZvciBhIFVSTCwg
Y2FsbCBjYW5SZXF1ZXN0KHVybCkuCisgICAgICAgIGJvb2wgY2FuTG9hZExvY2FsUmVzb3VyY2Vz
KCkgY29uc3QgeyByZXR1cm4gbV9jYW5Mb2FkTG9jYWxSZXNvdXJjZXM7IH0KKworICAgICAgICAv
LyBFeHBsaWNpdGx5IGdyYW50IHRoZSBhYmlsaXR5IHRvIGxvYWQgbG9jYWwgcmVzb3VyY2VzIHRv
IHRoaXMKKyAgICAgICAgLy8gU2VjdXJpdHlPcmlnaW4uCisgICAgICAgIC8vCisgICAgICAgIC8v
IE5vdGU6IFRoaXMgbWV0aG9kIGV4aXN0cyBvbmx5IHRvIHN1cHBvcnQgYmFja3dhcmRzIGNvbXBh
dGliaWxpdHkKKyAgICAgICAgLy8gICAgICAgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBXZWJLaXQu
CisgICAgICAgIHZvaWQgZ3JhbnRMb2FkTG9jYWxSZXNvdXJjZXMoKTsKKworICAgICAgICBib29s
IGlzU2VjdXJlVHJhbnNpdGlvblRvKGNvbnN0IEtVUkwmKSBjb25zdDsKKworICAgICAgICAvLyBU
aGUgbG9jYWwgU2VjdXJpdHlPcmlnaW4gaXMgdGhlIG1vc3QgcHJpdmlsZWdlZCBTZWN1cml0eU9y
aWdpbi4KKyAgICAgICAgLy8gVGhlIGxvY2FsIFNlY3VyaXR5T3JpZ2luIGNhbiBzY3JpcHQgYW55
IGRvY3VtZW50LCBuYXZpZ2F0ZSB0byBsb2NhbAorICAgICAgICAvLyByZXNvdXJjZXMsIGFuZCBj
YW4gc2V0IGFyYml0cmFyeSBoZWFkZXJzIG9uIFhNTEh0dHBSZXF1ZXN0cy4KKyAgICAgICAgYm9v
bCBpc0xvY2FsKCkgY29uc3Q7CisKKyAgICAgICAgLy8gVGhlIGVtcHR5IFNlY3VyaXR5T3JpZ2lu
IGlzIHRoZSBsZWFzdCBwcml2aWxlZ2VkIFNlY3VyaXR5T3JpZ2luLgorICAgICAgICBib29sIGlz
RW1wdHkoKSBjb25zdDsKKworICAgICAgICAvLyBDb252ZXJ0IHRoaXMgU2VjdXJpdHlPcmlnaW4g
aW50byBhIHN0cmluZy4gIFRoZSBzdHJpbmcKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gb2Yg
YSBTZWN1cml0eU9yaWdpbiBpcyBzaW1pbGFyIHRvIGEgVVJMLCBleGNlcHQgaXQKKyAgICAgICAg
Ly8gbGFja3MgYSBwYXRoIGNvbXBvbmVudC4gIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZG9l
cyBub3QgZW5jb2RlCisgICAgICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgU2VjdXJpdHlPcmlnaW4n
cyBkb21haW4gcHJvcGVydHkuICBUaGUgZW1wdHkKKyAgICAgICAgLy8gU2VjdXJpdHlPcmlnaW4g
aXMgcmVwcmVzZW50ZWQgd2l0aCB0aGUgbnVsbCBzdHJpbmcuCisgICAgICAgIFN0cmluZyB0b1N0
cmluZygpIGNvbnN0OworCisgICAgICAgIC8vIFNlcmlhbGl6ZSB0aGUgc2VjdXJpdHkgb3JpZ2lu
IGZvciBzdG9yYWdlIGluIHRoZSBkYXRhYmFzZS4gVGhpcyBmb3JtYXQgaXMKKyAgICAgICAgLy8g
ZGVwcmVjYXRlZCBhbmQgc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgY29tcGF0aWJpbGl0eSB3aXRo
IG9sZCBkYXRhYmFzZXM7CisgICAgICAgIC8vIHVzZSB0b1N0cmluZygpIGFuZCBjcmVhdGVGcm9t
U3RyaW5nKCkgaW5zdGVhZC4KKyAgICAgICAgU3RyaW5nIGRhdGFiYXNlSWRlbnRpZmllcigpIGNv
bnN0OworCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3IgZXF1YWxpdHkgYmV0d2Vl
biBTZWN1cml0eU9yaWdpbnMsIG5vdCB3aGV0aGVyCisgICAgICAgIC8vIG9uZSBvcmlnaW4gY2Fu
IGFjY2VzcyBhbm90aGVyLiAgSXQgaXMgdXNlZCBmb3IgaGFzaCB0YWJsZSBrZXlzLgorICAgICAg
ICAvLyBGb3IgYWNjZXNzIGNoZWNrcywgdXNlIGNhbkFjY2VzcygpLgorICAgICAgICAvLyBGSVhN
RTogSWYgdGhpcyBtZXRob2QgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGZvciBoYXNoIHRhYmxlIGtl
eXMsIGl0CisgICAgICAgIC8vIHNob3VsZCBiZSByZWZhY3RvcmVkIGludG8gU2VjdXJpdHlPcmln
aW5IYXNoLgorICAgICAgICBib29sIGVxdWFsKGNvbnN0IFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7
CisKKyAgICAgICAgLy8gVGhpcyBtZXRob2QgY2hlY2tzIGZvciBlcXVhbGl0eSwgaWdub3Jpbmcg
dGhlIHZhbHVlIG9mIGRvY3VtZW50LmRvbWFpbgorICAgICAgICAvLyAoYW5kIHdoZXRoZXIgaXQg
d2FzIHNldCkgYnV0IGNvbnNpZGVyaW5nIHRoZSBob3N0LiBJdCBpcyB1c2VkIGZvciBwb3N0TWVz
c2FnZS4KKyAgICAgICAgYm9vbCBpc1NhbWVTY2hlbWVIb3N0UG9ydChjb25zdCBTZWN1cml0eU9y
aWdpbiopIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZXhwbGljaXQgU2VjdXJpdHlP
cmlnaW4oY29uc3QgS1VSTCYpOworICAgICAgICBleHBsaWNpdCBTZWN1cml0eU9yaWdpbihjb25z
dCBTZWN1cml0eU9yaWdpbiopOworCisgICAgICAgIFN0cmluZyBtX3Byb3RvY29sOworICAgICAg
ICBTdHJpbmcgbV9ob3N0OworICAgICAgICBTdHJpbmcgbV9kb21haW47CisgICAgICAgIHVuc2ln
bmVkIHNob3J0IG1fcG9ydDsKKyAgICAgICAgYm9vbCBtX25vQWNjZXNzOworICAgICAgICBib29s
IG1fZG9tYWluV2FzU2V0SW5ET007CisgICAgICAgIGJvb2wgbV9jYW5Mb2FkTG9jYWxSZXNvdXJj
ZXM7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2VjdXJp
dHlPcmlnaW5faApJbmRleDogcGFnZS9TZWN1cml0eU9yaWdpbkhhc2guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBwYWdlL1NlY3VyaXR5T3JpZ2luSGFzaC5oCShyZXZpc2lvbiAzNzI2NikJKGZyb20gcGxhdGZv
cm0vU2VjdXJpdHlPcmlnaW5IYXNoLmg6MzcyNjYpCisrKyBwYWdlL1NlY3VyaXR5T3JpZ2luSGFz
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VjdXJpdHlPcmln
aW5IYXNoX2gKKyNkZWZpbmUgU2VjdXJpdHlPcmlnaW5IYXNoX2gKKworI2luY2x1ZGUgIktVUkwu
aCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5IYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgaGFzaENvZGVzWzNdID0geworICAgICAgICAgICAgb3JpZ2luLT5wcm90
b2NvbCgpLmltcGwoKSA/IG9yaWdpbi0+cHJvdG9jb2woKS5pbXBsKCktPmhhc2goKSA6IDAsCisg
ICAgICAgICAgICBvcmlnaW4tPmhvc3QoKS5pbXBsKCkgPyBvcmlnaW4tPmhvc3QoKS5pbXBsKCkt
Pmhhc2goKSA6IDAsCisgICAgICAgICAgICBvcmlnaW4tPnBvcnQoKQorICAgICAgICB9OworICAg
ICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hh
cio+KGhhc2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVDaGFyKSk7CisgICAg
fQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4m
IG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNoKG9yaWdpbi5nZXQoKSk7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgZXF1YWwoU2VjdXJpdHlPcmlnaW4qIGEsIFNlY3VyaXR5T3Jp
Z2luKiBiKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRoZSBoYXNoIGZ1bmN0aW9uIGFib3Zl
IGNvbXBhcmVzIHRocmVlIHNwZWNpZmljIGZpZWxkcy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIHRv
IGNvbXBhcmUgdGhvc2UgdGhyZWUgc3BlY2lmaWMgZmllbGRzIHNob3VsZCBiZSBtb3ZlZCBoZXJl
IGZyb20KKyAgICAgICAgLy8gU2VjdXJpdHlPcmlnaW4gYXMgbWVudGlvbmVkIGluIFNlY3VyaXR5
T3JpZ2luLmggc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IGNoYW5nZQorICAgICAgICAvLyBlcXVh
bCB3aXRob3V0IGNoYW5naW5nIGhhc2ggdG8gbWF0Y2ggaXQuCisgICAgICAgIGlmICghYSB8fCAh
YikKKyAgICAgICAgICAgIHJldHVybiBhID09IGI7CisgICAgICAgIHJldHVybiBhLT5lcXVhbChi
KTsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoU2VjdXJpdHlPcmlnaW4qIGEsIGNvbnN0
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4mIGIpCisgICAgeworICAgICAgICByZXR1cm4gZXF1YWwo
YSwgYi5nZXQoKSk7CisgICAgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4mIGEsIFNlY3VyaXR5T3JpZ2luKiBiKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVxdWFsKGEuZ2V0KCksIGIpOworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+JiBhLCBjb25zdCBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
JiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVxdWFsKGEuZ2V0KCksIGIuZ2V0KCkpOworICAg
IH0KKworICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVk
ID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDog
cGxhdGZvcm0vU2VjdXJpdHlPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL1NlY3Vy
aXR5T3JpZ2luLmNwcAkocmV2aXNpb24gMzcyNjYpCisrKyBwbGF0Zm9ybS9TZWN1cml0eU9yaWdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgaXNE
ZWZhdWx0UG9ydEZvclByb3RvY29sKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2wpCi17Ci0gICAgaWYgKHByb3RvY29sLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZD4gZGVmYXVsdFBv
cnRzOwotICAgIGlmIChkZWZhdWx0UG9ydHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlZmF1bHRQ
b3J0cy5zZXQoImh0dHAiLCA4MCk7Ci0gICAgICAgIGRlZmF1bHRQb3J0cy5zZXQoImh0dHBzIiwg
NDQzKTsKLSAgICAgICAgZGVmYXVsdFBvcnRzLnNldCgiZnRwIiwgMjEpOwotICAgICAgICBkZWZh
dWx0UG9ydHMuc2V0KCJmdHBzIiwgOTkwKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlZmF1bHRQb3J0
cy5nZXQocHJvdG9jb2wpID09IHBvcnQ7Ci19Ci0KLVNlY3VyaXR5T3JpZ2luOjpTZWN1cml0eU9y
aWdpbihjb25zdCBLVVJMJiB1cmwpCi0gICAgOiBtX3Byb3RvY29sKHVybC5wcm90b2NvbCgpLmlz
TnVsbCgpID8gIiIgOiB1cmwucHJvdG9jb2woKS5sb3dlcigpKQotICAgICwgbV9ob3N0KHVybC5o
b3N0KCkuaXNOdWxsKCkgPyAiIiA6IHVybC5ob3N0KCkubG93ZXIoKSkKLSAgICAsIG1fcG9ydCh1
cmwucG9ydCgpKQotICAgICwgbV9ub0FjY2VzcyhmYWxzZSkKLSAgICAsIG1fZG9tYWluV2FzU2V0
SW5ET00oZmFsc2UpCi17Ci0gICAgLy8gVGhlc2UgcHJvdG9jb2xzIGRvIG5vdCBjcmVhdGUgc2Vj
dXJpdHkgb3JpZ2luczsgdGhlIG93bmVyIGZyYW1lIHByb3ZpZGVzIHRoZSBvcmlnaW4KLSAgICBp
ZiAobV9wcm90b2NvbCA9PSAiYWJvdXQiIHx8IG1fcHJvdG9jb2wgPT0gImphdmFzY3JpcHQiKQot
ICAgICAgICBtX3Byb3RvY29sID0gIiI7Ci0KLSAgICAvLyBkYXRhOiBVUkxzIGFyZSBub3QgYWxs
b3dlZCBhY2Nlc3MgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiB0aGVtc2VsdmVzLgotICAgIGlmICht
X3Byb3RvY29sID09ICJkYXRhIikKLSAgICAgICAgbV9ub0FjY2VzcyA9IHRydWU7Ci0KLSAgICAv
LyBkb2N1bWVudC5kb21haW4gc3RhcnRzIGFzIG1faG9zdCwgYnV0IGNhbiBiZSBzZXQgYnkgdGhl
IERPTS4KLSAgICBtX2RvbWFpbiA9IG1faG9zdDsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIG9ubHkg
bG9jYWwgU2VjdXJpdHlPcmlnaW5zIGNhbiBsb2FkIGxvY2FsIHJlc291cmNlcy4KLSAgICBtX2Nh
bkxvYWRMb2NhbFJlc291cmNlcyA9IGlzTG9jYWwoKTsKLQotICAgIGlmIChpc0RlZmF1bHRQb3J0
Rm9yUHJvdG9jb2wobV9wb3J0LCBtX3Byb3RvY29sKSkKLSAgICAgICAgbV9wb3J0ID0gMDsKLX0K
LQotU2VjdXJpdHlPcmlnaW46OlNlY3VyaXR5T3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBv
dGhlcikKLSAgICA6IG1fcHJvdG9jb2wob3RoZXItPm1fcHJvdG9jb2wuY29weSgpKQotICAgICwg
bV9ob3N0KG90aGVyLT5tX2hvc3QuY29weSgpKQotICAgICwgbV9kb21haW4ob3RoZXItPm1fZG9t
YWluLmNvcHkoKSkKLSAgICAsIG1fcG9ydChvdGhlci0+bV9wb3J0KQotICAgICwgbV9ub0FjY2Vz
cyhvdGhlci0+bV9ub0FjY2VzcykKLSAgICAsIG1fZG9tYWluV2FzU2V0SW5ET00ob3RoZXItPm1f
ZG9tYWluV2FzU2V0SW5ET00pCi0gICAgLCBtX2NhbkxvYWRMb2NhbFJlc291cmNlcyhvdGhlci0+
bV9jYW5Mb2FkTG9jYWxSZXNvdXJjZXMpCi17Ci19Ci0KLWJvb2wgU2VjdXJpdHlPcmlnaW46Omlz
RW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3Byb3RvY29sLmlzRW1wdHkoKTsKLX0KLQot
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShjb25zdCBL
VVJMJiB1cmwpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWN1cml0eU9yaWdpbih1cmwp
KTsKLX0KLQotUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZUVtcHR5KCkKLXsKLSAgICByZXR1cm4gY3JlYXRlKEtVUkwoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2luOjpjb3B5KCkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlY3VyaXR5T3JpZ2luKHRoaXMpKTsKLX0KLQotdm9pZCBTZWN1cml0eU9yaWdp
bjo6c2V0RG9tYWluRnJvbURPTShjb25zdCBTdHJpbmcmIG5ld0RvbWFpbikKLXsKLSAgICBtX2Rv
bWFpbldhc1NldEluRE9NID0gdHJ1ZTsKLSAgICBtX2RvbWFpbiA9IG5ld0RvbWFpbi5sb3dlcigp
OwotfQotCi1ib29sIFNlY3VyaXR5T3JpZ2luOjpjYW5BY2Nlc3MoY29uc3QgU2VjdXJpdHlPcmln
aW4qIG90aGVyKSBjb25zdAoteyAgCi0gICAgaWYgKGlzTG9jYWwoKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAobV9ub0FjY2VzcyB8fCBvdGhlci0+bV9ub0FjY2VzcykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSGVyZSBhcmUgdHdvIGNhc2VzIHdoZXJlIHdlIHNo
b3VsZCBwZXJtaXQgYWNjZXNzOgotICAgIC8vCi0gICAgLy8gMSkgTmVpdGhlciBkb2N1bWVudCBo
YXMgc2V0IGRvY3VtZW50LmRvbWFpbi4gIEluIHRoaXMgY2FzZSwgd2UgaW5zaXN0Ci0gICAgLy8g
ICAgdGhhdCB0aGUgc2NoZW1lLCBob3N0LCBhbmQgcG9ydCBvZiB0aGUgVVJMcyBtYXRjaC4KLSAg
ICAvLwotICAgIC8vIDIpIEJvdGggZG9jdW1lbnRzIGhhdmUgc2V0IGRvY3VtZW50LmRvbWFpbi4g
IEluIHRoaXMgY2FzZSwgd2UgaW5zaXN0Ci0gICAgLy8gICAgdGhhdCB0aGUgZG9jdW1lbnRzIGhh
dmUgc2V0IGRvY3VtZW50LmRvbWFpbiB0byB0aGUgc2FtZSB2YWx1ZSBhbmQKLSAgICAvLyAgICB0
aGF0IHRoZSBzY2hlbWUgb2YgdGhlIFVSTHMgbWF0Y2guCi0gICAgLy8KLSAgICAvLyBUaGlzIG1h
dGNoZXMgdGhlIGJlaGF2aW9yIG9mIEZpcmVmb3ggMiBhbmQgSW50ZXJuZXQgRXhwbG9yZXIgNi4K
LSAgICAvLwotICAgIC8vIEludGVybmV0IEV4cGxvcmVyIDcgYW5kIE9wZXJhIDkgYXJlIG1vcmUg
c3RyaWN0IGluIHRoYXQgdGhleSByZXF1aXJlCi0gICAgLy8gdGhlIHBvcnQgbnVtYmVycyB0byBt
YXRjaCB3aGVuIGJvdGggcGFnZXMgaGF2ZSBkb2N1bWVudC5kb21haW4gc2V0LgotICAgIC8vCi0g
ICAgLy8gRklYTUU6IEV2YWx1YXRlIHdoZXRoZXIgd2UgY2FuIHRpZ2h0ZW4gdGhpcyBwb2xpY3kg
dG8gcmVxdWlyZSBtYXRjaGVkCi0gICAgLy8gICAgICAgIHBvcnQgbnVtYmVycy4KLSAgICAvLwot
ICAgIC8vIE9wZXJhIDkgYWxsb3dzIGFjY2VzcyB3aGVuIG9ubHkgb25lIHBhZ2UgaGFzIHNldCBk
b2N1bWVudC5kb21haW4sIGJ1dAotICAgIC8vIHRoaXMgaXMgYSBzZWN1cml0eSB2dWxuZXJhYmls
aXR5LgotCi0gICAgaWYgKG1fcHJvdG9jb2wgPT0gb3RoZXItPm1fcHJvdG9jb2wpIHsKLSAgICAg
ICAgaWYgKCFtX2RvbWFpbldhc1NldEluRE9NICYmICFvdGhlci0+bV9kb21haW5XYXNTZXRJbkRP
TSkgewotICAgICAgICAgICAgaWYgKG1faG9zdCA9PSBvdGhlci0+bV9ob3N0ICYmIG1fcG9ydCA9
PSBvdGhlci0+bV9wb3J0KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
IGVsc2UgaWYgKG1fZG9tYWluV2FzU2V0SW5ET00gJiYgb3RoZXItPm1fZG9tYWluV2FzU2V0SW5E
T00pIHsKLSAgICAgICAgICAgIGlmIChtX2RvbWFpbiA9PSBvdGhlci0+bV9kb21haW4pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFNlY3VyaXR5T3JpZ2luOjpjYW5SZXF1ZXN0KGNvbnN0IEtV
UkwmIHVybCkgY29uc3QKLXsKLSAgICBpZiAoaXNMb2NhbCgpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGlmIChtX25vQWNjZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHRhcmdldE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGUodXJsKTsKLQotICAgIC8vIFdlIGNhbGwgaXNTYW1lU2NoZW1lSG9zdFBvcnQgaGVyZSBpbnN0
ZWFkIG9mIGNhbkFjY2VzcyBiZWNhdXNlIHdlIHdhbnQKLSAgICAvLyB0byBpZ25vcmUgZG9jdW1l
bnQuZG9tYWluIGVmZmVjdHMuCi0gICAgcmV0dXJuIGlzU2FtZVNjaGVtZUhvc3RQb3J0KHRhcmdl
dE9yaWdpbi5nZXQoKSk7Ci19Ci0KLXZvaWQgU2VjdXJpdHlPcmlnaW46OmdyYW50TG9hZExvY2Fs
UmVzb3VyY2VzKCkKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBleGlzdHMgb25seSB0byBzdXBwb3J0
IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIKLSAgICAvLyB2ZXJzaW9ucyBvZiBX
ZWJLaXQuICBHcmFudGluZyBwcml2aWxlZ2VzIHRvIHNvbWUsIGJ1dCBub3QgYWxsLCBkb2N1bWVu
dHMKLSAgICAvLyBpbiBhIFNlY3VyaXR5T3JpZ2luIGlzIGEgc2VjdXJpdHkgaGF6YXJkIGJlY2F1
c2UgdGhlIGRvY3VtZW50cyB3aXRob3V0Ci0gICAgLy8gdGhlIHByaXZpbGVnZSBjYW4gb2J0YWlu
IHRoZSBwcml2aWxlZ2UgYnkgaW5qZWN0aW5nIHNjcmlwdCBpbnRvIHRoZQotICAgIC8vIGRvY3Vt
ZW50cyB0aGF0IGhhdmUgYmVlbiBncmFudGVkIHRoZSBwcml2aWxlZ2UuCi0gICAgQVNTRVJUKEZy
YW1lTG9hZGVyOjphbGxvd1N1YnN0aXR1dGVEYXRhQWNjZXNzVG9Mb2NhbCgpKTsKLSAgICBtX2Nh
bkxvYWRMb2NhbFJlc291cmNlcyA9IHRydWU7Ci19Ci0KLWJvb2wgU2VjdXJpdHlPcmlnaW46Omlz
TG9jYWwoKSBjb25zdAotewotICAgIHJldHVybiBGcmFtZUxvYWRlcjo6c2hvdWxkVHJlYXRTY2hl
bWVBc0xvY2FsKG1fcHJvdG9jb2wpOwotfQotCi1ib29sIFNlY3VyaXR5T3JpZ2luOjppc1NlY3Vy
ZVRyYW5zaXRpb25Ubyhjb25zdCBLVVJMJiB1cmwpIGNvbnN0Ci17IAotICAgIC8vIE5ldyB3aW5k
b3cgY3JlYXRlZCBieSB0aGUgYXBwbGljYXRpb24KLSAgICBpZiAoaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3RoZXIgPSBTZWN1
cml0eU9yaWdpbjo6Y3JlYXRlKHVybCk7Ci0gICAgcmV0dXJuIGNhbkFjY2VzcyhvdGhlci5nZXQo
KSk7Ci19Ci0KLVN0cmluZyBTZWN1cml0eU9yaWdpbjo6dG9TdHJpbmcoKSBjb25zdAotewotICAg
IGlmIChpc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChtX25v
QWNjZXNzKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAobV9wcm90b2NvbCA9
PSAiZmlsZSIpCi0gICAgICAgIHJldHVybiBTdHJpbmcoImZpbGU6Ly8iKTsKLQotICAgIFZlY3Rv
cjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobV9wcm90b2NvbC5s
ZW5ndGgoKSArIG1faG9zdC5sZW5ndGgoKSArIDEwKTsKLSAgICBhcHBlbmQocmVzdWx0LCBtX3By
b3RvY29sKTsKLSAgICBhcHBlbmQocmVzdWx0LCAiOi8vIik7Ci0gICAgYXBwZW5kKHJlc3VsdCwg
bV9ob3N0KTsKLQotICAgIGlmIChtX3BvcnQpIHsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgIjoi
KTsKLSAgICAgICAgYXBwZW5kKHJlc3VsdCwgU3RyaW5nOjpudW1iZXIobV9wb3J0KSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKLX0KLQotUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJiBvcmlnaW5TdHJpbmcpCi17Ci0gICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUo
S1VSTChvcmlnaW5TdHJpbmcpKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgU2VwYXJhdG9yQ2hh
cmFjdGVyID0gJ18nOwotCi1QYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlRnJvbURhdGFiYXNlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRl
bnRpZmllcikKLXsgCi0gICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3MgYSBmaXJzdCBzZXBhcmF0b3IK
LSAgICBpbnQgc2VwYXJhdG9yMSA9IGRhdGFiYXNlSWRlbnRpZmllci5maW5kKFNlcGFyYXRvckNo
YXJhY3Rlcik7Ci0gICAgaWYgKHNlcGFyYXRvcjEgPT0gLTEpCi0gICAgICAgIHJldHVybiBjcmVh
dGUoS1VSTCgpKTsKLSAgICAgICAgCi0gICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3MgYSBzZWNvbmQg
c2VwYXJhdG9yCi0gICAgaW50IHNlcGFyYXRvcjIgPSBkYXRhYmFzZUlkZW50aWZpZXIuZmluZChT
ZXBhcmF0b3JDaGFyYWN0ZXIsIHNlcGFyYXRvcjEgKyAxKTsKLSAgICBpZiAoc2VwYXJhdG9yMiA9
PSAtMSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZShLVVJMKCkpOwotICAgICAgICAKLSAgICAvLyBN
YWtlIHN1cmUgdGhlcmUncyBub3QgYSB0aGlyZCBzZXBhcmF0b3IKLSAgICBpZiAoZGF0YWJhc2VJ
ZGVudGlmaWVyLnJldmVyc2VGaW5kKFNlcGFyYXRvckNoYXJhY3RlcikgIT0gc2VwYXJhdG9yMikK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZShLVVJMKCkpOwotICAgICAgICAKLSAgICAvLyBNYWtlIHN1
cmUgdGhlIHBvcnQgc2VjdGlvbiBpcyBhIHZhbGlkIHBvcnQgbnVtYmVyIG9yIGRvZXNuJ3QgZXhp
c3QKLSAgICBib29sIHBvcnRPa2F5OwotICAgIGludCBwb3J0ID0gZGF0YWJhc2VJZGVudGlmaWVy
LnJpZ2h0KGRhdGFiYXNlSWRlbnRpZmllci5sZW5ndGgoKSAtIHNlcGFyYXRvcjIgLSAxKS50b0lu
dCgmcG9ydE9rYXkpOwotICAgIGlmICghcG9ydE9rYXkgJiYgc2VwYXJhdG9yMiArIDEgPT0gc3Rh
dGljX2Nhc3Q8aW50PihkYXRhYmFzZUlkZW50aWZpZXIubGVuZ3RoKCkpKQotICAgICAgICByZXR1
cm4gY3JlYXRlKEtVUkwoKSk7Ci0gICAgCi0gICAgaWYgKHBvcnQgPCAwIHx8IHBvcnQgPiA2NTUz
NSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZShLVVJMKCkpOwotICAgICAgICAKLSAgICAvLyBTcGxp
dCBvdXQgdGhlIDMgc2VjdGlvbnMgb2YgZGF0YQotICAgIFN0cmluZyBwcm90b2NvbCA9IGRhdGFi
YXNlSWRlbnRpZmllci5zdWJzdHJpbmcoMCwgc2VwYXJhdG9yMSk7Ci0gICAgU3RyaW5nIGhvc3Qg
PSBkYXRhYmFzZUlkZW50aWZpZXIuc3Vic3RyaW5nKHNlcGFyYXRvcjEgKyAxLCBzZXBhcmF0b3Iy
IC0gc2VwYXJhdG9yMSAtIDEpOwotICAgIHJldHVybiBjcmVhdGUoS1VSTChwcm90b2NvbCArICI6
Ly8iICsgaG9zdCArICI6IiArIFN0cmluZzo6bnVtYmVyKHBvcnQpKSk7Ci19Ci0KLVN0cmluZyBT
ZWN1cml0eU9yaWdpbjo6ZGF0YWJhc2VJZGVudGlmaWVyKCkgY29uc3QgCi17Ci0gICAgc3RhdGlj
IFN0cmluZyBzZXBhcmF0b3JTdHJpbmcgPSBTdHJpbmcoJlNlcGFyYXRvckNoYXJhY3RlciwgMSk7
Ci0gICAgcmV0dXJuIG1fcHJvdG9jb2wgKyBzZXBhcmF0b3JTdHJpbmcgKyBtX2hvc3QgKyBzZXBh
cmF0b3JTdHJpbmcgKyBTdHJpbmc6Om51bWJlcihtX3BvcnQpOyAKLX0KLQotYm9vbCBTZWN1cml0
eU9yaWdpbjo6ZXF1YWwoY29uc3QgU2VjdXJpdHlPcmlnaW4qIG90aGVyKSBjb25zdCAKLXsKLSAg
ICBpZiAoIWlzU2FtZVNjaGVtZUhvc3RQb3J0KG90aGVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKG1fZG9tYWluV2FzU2V0SW5ET00gIT0gb3RoZXItPm1fZG9tYWluV2FzU2V0
SW5ET00pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2RvbWFpbldhc1NldElu
RE9NICYmIG1fZG9tYWluICE9IG90aGVyLT5tX2RvbWFpbikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU2VjdXJpdHlPcmlnaW46OmlzU2FtZVNj
aGVtZUhvc3RQb3J0KGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBvdGhlcikgY29uc3QgCi17Ci0gICAg
aWYgKG1faG9zdCAhPSBvdGhlci0+bV9ob3N0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAobV9wcm90b2NvbCAhPSBvdGhlci0+bV9wcm90b2NvbCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKG1fcG9ydCAhPSBvdGhlci0+bV9wb3J0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogcGxhdGZvcm0vU2VjdXJpdHlPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9T
ZWN1cml0eU9yaWdpbi5oCShyZXZpc2lvbiAzNzI2NikKKysrIHBsYXRmb3JtL1NlY3VyaXR5T3Jp
Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2VjdXJpdHlP
cmlnaW5faAotI2RlZmluZSBTZWN1cml0eU9yaWdpbl9oCi0KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0gICAgY2xhc3MgS1VSTDsKLSAgICAKLSAgICBjbGFzcyBTZWN1cml0eU9yaWdpbiA6
IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNlY3VyaXR5T3JpZ2luPiB7Ci0gICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gY3JlYXRlRnJvbURhdGFi
YXNlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IGNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBjcmVhdGUoY29uc3QgS1VSTCYpOwot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gY3JlYXRlRW1wdHkoKTsK
LQotICAgICAgICAvLyBDcmVhdGUgYSBkZWVwIGNvcHkgb2YgdGhpcyBTZWN1cml0eU9yaWdpbi4g
IFRoaXMgbWV0aG9kIGlzIHVzZWZ1bAotICAgICAgICAvLyB3aGVuIG1hcnNoYWxsaW5nIGEgU2Vj
dXJpdHlPcmlnaW4gdG8gYW5vdGhlciB0aHJlYWQuCi0gICAgICAgIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IGNvcHkoKTsKLQotICAgICAgICAvLyBTZXQgdGhlIGRvbWFpbiBwcm9wZXJ0eSBv
ZiB0aGlzIHNlY3VyaXR5IG9yaWdpbiB0byBuZXdEb21haW4uICBUaGlzCi0gICAgICAgIC8vIGZ1
bmN0aW9uIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgbmV3RG9tYWluIGlzIGEgc3VmZml4IG9mIHRo
ZSBjdXJyZW50Ci0gICAgICAgIC8vIGRvbWFpbi4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUg
Zm9yIHZhbGlkYXRpbmcgbmV3RG9tYWluLgotICAgICAgICB2b2lkIHNldERvbWFpbkZyb21ET00o
Y29uc3QgU3RyaW5nJiBuZXdEb21haW4pOwotCi0gICAgICAgIFN0cmluZyBwcm90b2NvbCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvdG9jb2w7IH0KLSAgICAgICAgU3RyaW5nIGhvc3QoKSBjb25zdCB7
IHJldHVybiBtX2hvc3Q7IH0KLSAgICAgICAgU3RyaW5nIGRvbWFpbigpIGNvbnN0IHsgcmV0dXJu
IG1fZG9tYWluOyB9Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IHBvcnQoKSBjb25zdCB7IHJldHVy
biBtX3BvcnQ7IH0KLQotICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBTZWN1cml0eU9y
aWdpbiBjYW4gc2NyaXB0IG9iamVjdHMgaW4gdGhlIGdpdmVuCi0gICAgICAgIC8vIFNlY3VyaXR5
T3JpZ2luLiAgRm9yIGV4YW1wbGUsIGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgYWxsb3dpbmcK
LSAgICAgICAgLy8gc2NyaXB0IGZyb20gb25lIHNlY3VyaXR5IG9yaWdpbiB0byByZWFkIG9yIHdy
aXRlIG9iamVjdHMgZnJvbQotICAgICAgICAvLyBhbm90aGVyIFNlY3VyaXR5T3JpZ2luLgotICAg
ICAgICBib29sIGNhbkFjY2Vzcyhjb25zdCBTZWN1cml0eU9yaWdpbiopIGNvbnN0OwotCi0gICAg
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFNlY3VyaXR5T3JpZ2luIGNhbiByZWFkIGNvbnRl
bnQgcmV0cmlldmVkIGZyb20KLSAgICAgICAgLy8gdGhlIGdpdmVuIFVSTC4gIEZvciBleGFtcGxl
LCBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGlzc3VpbmcKLSAgICAgICAgLy8gWE1MSHR0cFJl
cXVlc3RzLgotICAgICAgICBib29sIGNhblJlcXVlc3QoY29uc3QgS1VSTCYpIGNvbnN0OwotCi0g
ICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFNlY3VyaXR5T3JpZ2luIGNhbiBsb2FkIGxv
Y2FsIHJlc291cmNlcywgc3VjaAotICAgICAgICAvLyBhcyBpbWFnZXMsIGlmcmFtZXMsIGFuZCBz
dHlsZSBzaGVldHMsIGFuZCBjYW4gbGluayB0byBsb2NhbCBVUkxzLgotICAgICAgICAvLyBGb3Ig
ZXhhbXBsZSwgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBjcmVhdGluZyBhbiBpZnJhbWUgdG8g
YQotICAgICAgICAvLyBmaWxlOi8vIFVSTC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gTm90ZTog
QSBTZWN1cml0eU9yaWdpbiBtaWdodCBiZSBhbGxvd2VkIHRvIGxvYWQgbG9jYWwgcmVzb3VyY2Vz
Ci0gICAgICAgIC8vICAgICAgIHdpdGhvdXQgYmVpbmcgYWJsZSB0byBpc3N1ZSBhbiBYTUxIdHRw
UmVxdWVzdCBmb3IgYSBsb2NhbCBVUkwuCi0gICAgICAgIC8vICAgICAgIFRvIGRldGVybWluZSB3
aGV0aGVyIHRoZSBTZWN1cml0eU9yaWdpbiBjYW4gaXNzdWUgYW4KLSAgICAgICAgLy8gICAgICAg
WE1MSHR0cFJlcXVlc3QgZm9yIGEgVVJMLCBjYWxsIGNhblJlcXVlc3QodXJsKS4KLSAgICAgICAg
Ym9vbCBjYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSBjb25zdCB7IHJldHVybiBtX2NhbkxvYWRMb2Nh
bFJlc291cmNlczsgfQotCi0gICAgICAgIC8vIEV4cGxpY2l0bHkgZ3JhbnQgdGhlIGFiaWxpdHkg
dG8gbG9hZCBsb2NhbCByZXNvdXJjZXMgdG8gdGhpcwotICAgICAgICAvLyBTZWN1cml0eU9yaWdp
bi4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gTm90ZTogVGhpcyBtZXRob2QgZXhpc3RzIG9ubHkg
dG8gc3VwcG9ydCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotICAgICAgICAvLyAgICAgICB3aXRo
IG9sZGVyIHZlcnNpb25zIG9mIFdlYktpdC4KLSAgICAgICAgdm9pZCBncmFudExvYWRMb2NhbFJl
c291cmNlcygpOwotCi0gICAgICAgIGJvb2wgaXNTZWN1cmVUcmFuc2l0aW9uVG8oY29uc3QgS1VS
TCYpIGNvbnN0OwotCi0gICAgICAgIC8vIFRoZSBsb2NhbCBTZWN1cml0eU9yaWdpbiBpcyB0aGUg
bW9zdCBwcml2aWxlZ2VkIFNlY3VyaXR5T3JpZ2luLgotICAgICAgICAvLyBUaGUgbG9jYWwgU2Vj
dXJpdHlPcmlnaW4gY2FuIHNjcmlwdCBhbnkgZG9jdW1lbnQsIG5hdmlnYXRlIHRvIGxvY2FsCi0g
ICAgICAgIC8vIHJlc291cmNlcywgYW5kIGNhbiBzZXQgYXJiaXRyYXJ5IGhlYWRlcnMgb24gWE1M
SHR0cFJlcXVlc3RzLgotICAgICAgICBib29sIGlzTG9jYWwoKSBjb25zdDsKLQotICAgICAgICAv
LyBUaGUgZW1wdHkgU2VjdXJpdHlPcmlnaW4gaXMgdGhlIGxlYXN0IHByaXZpbGVnZWQgU2VjdXJp
dHlPcmlnaW4uCi0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotCi0gICAgICAgIC8vIENv
bnZlcnQgdGhpcyBTZWN1cml0eU9yaWdpbiBpbnRvIGEgc3RyaW5nLiAgVGhlIHN0cmluZwotICAg
ICAgICAvLyByZXByZXNlbnRhdGlvbiBvZiBhIFNlY3VyaXR5T3JpZ2luIGlzIHNpbWlsYXIgdG8g
YSBVUkwsIGV4Y2VwdCBpdAotICAgICAgICAvLyBsYWNrcyBhIHBhdGggY29tcG9uZW50LiAgVGhl
IHN0cmluZyByZXByZXNlbnRhdGlvbiBkb2VzIG5vdCBlbmNvZGUKLSAgICAgICAgLy8gdGhlIHZh
bHVlIG9mIHRoZSBTZWN1cml0eU9yaWdpbidzIGRvbWFpbiBwcm9wZXJ0eS4gIFRoZSBlbXB0eQot
ICAgICAgICAvLyBTZWN1cml0eU9yaWdpbiBpcyByZXByZXNlbnRlZCB3aXRoIHRoZSBudWxsIHN0
cmluZy4KLSAgICAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gU2Vy
aWFsaXplIHRoZSBzZWN1cml0eSBvcmlnaW4gZm9yIHN0b3JhZ2UgaW4gdGhlIGRhdGFiYXNlLiBU
aGlzIGZvcm1hdCBpcwotICAgICAgICAvLyBkZXByZWNhdGVkIGFuZCBzaG91bGQgYmUgdXNlZCBv
bmx5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGRhdGFiYXNlczsKLSAgICAgICAgLy8gdXNl
IHRvU3RyaW5nKCkgYW5kIGNyZWF0ZUZyb21TdHJpbmcoKSBpbnN0ZWFkLgotICAgICAgICBTdHJp
bmcgZGF0YWJhc2VJZGVudGlmaWVyKCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gVGhpcyBtZXRob2Qg
Y2hlY2tzIGZvciBlcXVhbGl0eSBiZXR3ZWVuIFNlY3VyaXR5T3JpZ2lucywgbm90IHdoZXRoZXIK
LSAgICAgICAgLy8gb25lIG9yaWdpbiBjYW4gYWNjZXNzIGFub3RoZXIuICBJdCBpcyB1c2VkIGZv
ciBoYXNoIHRhYmxlIGtleXMuCi0gICAgICAgIC8vIEZvciBhY2Nlc3MgY2hlY2tzLCB1c2UgY2Fu
QWNjZXNzKCkuCi0gICAgICAgIC8vIEZJWE1FOiBJZiB0aGlzIG1ldGhvZCBpcyByZWFsbHkgb25s
eSB1c2VmdWwgZm9yIGhhc2ggdGFibGUga2V5cywgaXQKLSAgICAgICAgLy8gc2hvdWxkIGJlIHJl
ZmFjdG9yZWQgaW50byBTZWN1cml0eU9yaWdpbkhhc2guCi0gICAgICAgIGJvb2wgZXF1YWwoY29u
c3QgU2VjdXJpdHlPcmlnaW4qKSBjb25zdDsKLQotICAgICAgICAvLyBUaGlzIG1ldGhvZCBjaGVj
a3MgZm9yIGVxdWFsaXR5LCBpZ25vcmluZyB0aGUgdmFsdWUgb2YgZG9jdW1lbnQuZG9tYWluCi0g
ICAgICAgIC8vIChhbmQgd2hldGhlciBpdCB3YXMgc2V0KSBidXQgY29uc2lkZXJpbmcgdGhlIGhv
c3QuIEl0IGlzIHVzZWQgZm9yIHBvc3RNZXNzYWdlLgotICAgICAgICBib29sIGlzU2FtZVNjaGVt
ZUhvc3RQb3J0KGNvbnN0IFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICBleHBsaWNpdCBTZWN1cml0eU9yaWdpbihjb25zdCBLVVJMJik7Ci0gICAgICAgIGV4
cGxpY2l0IFNlY3VyaXR5T3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luKik7Ci0KLSAgICAgICAg
U3RyaW5nIG1fcHJvdG9jb2w7Ci0gICAgICAgIFN0cmluZyBtX2hvc3Q7Ci0gICAgICAgIFN0cmlu
ZyBtX2RvbWFpbjsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgbV9wb3J0OwotICAgICAgICBib29s
IG1fbm9BY2Nlc3M7Ci0gICAgICAgIGJvb2wgbV9kb21haW5XYXNTZXRJbkRPTTsKLSAgICAgICAg
Ym9vbCBtX2NhbkxvYWRMb2NhbFJlc291cmNlczsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBTZWN1cml0eU9yaWdpbl9oCkluZGV4OiBwbGF0Zm9ybS9TZWN1
cml0eU9yaWdpbkhhc2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9TZWN1cml0eU9yaWdpbkhh
c2guaAkocmV2aXNpb24gMzcyNjYpCisrKyBwbGF0Zm9ybS9TZWN1cml0eU9yaWdpbkhhc2guaAko
d29ya2luZyBjb3B5KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNlY3VyaXR5T3JpZ2luSGFz
aF9oCi0jZGVmaW5lIFNlY3VyaXR5T3JpZ2luSGFzaF9oCi0KLSNpbmNsdWRlICJLVVJMLmgiCi0j
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IFNlY3VyaXR5T3JpZ2luSGFzaCB7Ci0gICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLSAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGhhc2hDb2Rlc1szXSA9IHsKLSAgICAgICAgICAgIG9yaWdpbi0+cHJvdG9jb2wo
KS5pbXBsKCkgPyBvcmlnaW4tPnByb3RvY29sKCkuaW1wbCgpLT5oYXNoKCkgOiAwLAotICAgICAg
ICAgICAgb3JpZ2luLT5ob3N0KCkuaW1wbCgpID8gb3JpZ2luLT5ob3N0KCkuaW1wbCgpLT5oYXNo
KCkgOiAwLAotICAgICAgICAgICAgb3JpZ2luLT5wb3J0KCkKLSAgICAgICAgfTsKLSAgICAgICAg
cmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPiho
YXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOwotICAgIH0KLSAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+JiBvcmln
aW4pCi0gICAgewotICAgICAgICByZXR1cm4gaGFzaChvcmlnaW4uZ2V0KCkpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBib29sIGVxdWFsKFNlY3VyaXR5T3JpZ2luKiBhLCBTZWN1cml0eU9yaWdpbiog
YikKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGUgaGFzaCBmdW5jdGlvbiBhYm92ZSBjb21w
YXJlcyB0aHJlZSBzcGVjaWZpYyBmaWVsZHMuCi0gICAgICAgIC8vIFRoaXMgY29kZSB0byBjb21w
YXJlIHRob3NlIHRocmVlIHNwZWNpZmljIGZpZWxkcyBzaG91bGQgYmUgbW92ZWQgaGVyZSBmcm9t
Ci0gICAgICAgIC8vIFNlY3VyaXR5T3JpZ2luIGFzIG1lbnRpb25lZCBpbiBTZWN1cml0eU9yaWdp
bi5oIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBjaGFuZ2UKLSAgICAgICAgLy8gZXF1YWwgd2l0
aG91dCBjaGFuZ2luZyBoYXNoIHRvIG1hdGNoIGl0LgotICAgICAgICBpZiAoIWEgfHwgIWIpCi0g
ICAgICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgICAgICByZXR1cm4gYS0+ZXF1YWwoYik7Ci0g
ICAgfQotICAgIHN0YXRpYyBib29sIGVxdWFsKFNlY3VyaXR5T3JpZ2luKiBhLCBjb25zdCBSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVxdWFsKGEsIGIu
Z2V0KCkpOwotICAgIH0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+JiBhLCBTZWN1cml0eU9yaWdpbiogYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cXVhbChhLmdldCgpLCBiKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiYgYSwgY29uc3QgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiYgYikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcXVhbChhLmdldCgpLCBiLmdldCgpKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZh
bHNlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
</data>
<flag name="review"
          id="10916"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>