<?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>17307</bug_id>
          
          <creation_ts>2008-02-11 01:35:00 -0800</creation_ts>
          <short_desc>KURL (and the rest of WebCore) needs unit testing</short_desc>
          <delta_ts>2023-05-22 03:40:36 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>37641</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>annevk</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>fishd</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>70211</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-11 01:35:00 -0800</bug_when>
    <thetext>KURL (and the rest of WebCore) needs unit testing

I copied the unit tests from Google&apos;s open source URL parsing library google-url into WebCore tonight.  I then built a clean-room implementation of enough of their testing framework (gunit.h) (although I have access to the source of such at work, I&apos;ve not yet taken advantage of such).

This patch is incomplete, since in order to actually test anything in WebCore we have to expose a bunch of extra symbols from JavaScriptCore and WebCore.  For my local copy, I just exposed all symbols to make it build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70213</commentid>
    <comment_count>1</comment_count>
      <attachid>19062</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-11 01:37:01 -0800</bug_when>
    <thetext>Created attachment 19062
First (hackish) pass at adding unit testing to WebCore

 .../JavaScriptCore.xcodeproj/project.pbxproj       |    3 +
 WebCore/Configurations/Unit Tests.xcconfig         |    5 +
 WebCore/WebCore.xcodeproj/project.pbxproj          |  126 ++++++++
 WebCore/unit-tests/TestCase.cpp                    |   29 ++
 WebCore/unit-tests/TestCase.h                      |   71 ++++
 WebCore/unit-tests/TestController.cpp              |   50 +++
 WebCore/unit-tests/TestController.h                |   47 +++
 WebCore/unit-tests/main.cpp                        |   18 +
 WebCore/unit-tests/platform/KURL_tests.cpp         |  339 ++++++++++++++++++++
 9 files changed, 688 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70216</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-11 01:40:28 -0800</bug_when>
    <thetext>Btw, for any of those of you curious as to what the actual output of this is:
FAIL: resolve_cases[i].expected_valid == output.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:187)
.
FAIL: resolve_cases[i].expected_valid == outputw.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:194)
.
FAIL: resolve_cases[i].expected_valid == output.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:187)
.
FAIL: resolve_cases[i].expected_valid == outputw.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:194)
.
FAIL: resolve_cases[i].expected_valid == output.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:187)
.
FAIL: resolve_cases[i].expected_valid == outputw.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:194)
.
FAIL: resolve_cases[i].expected_valid == output.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:187)
.
FAIL: resolve_cases[i].expected_valid == outputw.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:194)
.
FAIL: resolve_cases[i].expected_valid == output.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:187)

FAIL: resolve_cases[i].expected == output.spec() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:188)

FAIL: resolve_cases[i].expected_valid == outputw.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:194)

FAIL: resolve_cases[i].expected == outputw.spec() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:195)

FAIL: resolve_cases[i].expected_valid == output.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:187)
.
FAIL: resolve_cases[i].expected_valid == outputw.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:194)
.
FAIL: resolve_cases[i].expected_valid == output.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:187)

FAIL: resolve_cases[i].expected == output.spec() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:188)

FAIL: resolve_cases[i].expected_valid == outputw.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:194)

FAIL: resolve_cases[i].expected == outputw.spec() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:195)
....
FAIL: replace_cases[i].expected == url.spec() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:252)

FAIL: replace_cases[i].expected == url.spec() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:252)
..
FAIL: ip_tests[i].expected_ip == url.HostIsIPAddress() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:290)
....
FAIL: url.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:79)
..........
FAIL: &quot;q=a&quot; == url.query() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:93)
.
FAIL: url_1.DomainIs(google_domain) (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:298)
.
FAIL: url_3.DomainIs(google_domain) (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:304)
..
FAIL: url_6.DomainIs(&quot;.com.&quot;) (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:313)
......
FAIL: cases[i].expected == path_request (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:271)
.
FAIL: cases[i].expected == path_request (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:271)
.
FAIL: &quot;http://google.com:foo/&quot; == url.possibly_invalid_spec() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:150)
...
FAIL: &quot;google.com&quot; == url.host() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:155)

FAIL: &quot;foo&quot; == url.port() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:156)
.
FAIL: &quot;/&quot; == url.path() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:158)
...
FAIL: cases[i].expected == empty_path.spec() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:212)

FAIL: cases[i].expected == empty_path.spec() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:212)
......
FAIL: &quot;&quot; == url.port() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:106)
....
FAIL: &quot;http://www.google.com/asdf&quot; == url_1.spec() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:332)

FAIL: &quot;http://www.google.com/foo&quot; == url_2.spec() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:336)

FAIL: url2.is_valid() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:117)
........
FAIL: &quot;q=a&quot; == url2.query() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:127)
.......
FAIL: &quot;&quot; == invalid2.port() (/Stuff/Projects/WebKit/WebCore/unit-tests/platform/KURL_tests.cpp:139)
....
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70346</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-02-11 17:57:44 -0800</bug_when>
    <thetext>&gt; we have to expose a bunch of extra symbols from JavaScriptCore and WebCore

perhaps it would be better to link to the underlying object files instead of trying to export more symbols.  this kind of thing can be much easier to arrange if an intermediate static library is created.  then you can link that static library into your unit tests executable as well as into the final dylib, dll, or whatever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74609</commentid>
    <comment_count>4</comment_count>
      <attachid>19920</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-03-21 01:14:56 -0700</bug_when>
    <thetext>Created attachment 19920
Fix embed.src and object.data updating

 LayoutTests/ChangeLog                              |   13 +++++
 .../dynamic-frame-load-after-layout-expected.txt   |   29 ++++++++++++
 .../frames/dynamic-frame-load-after-layout.html    |   27 +++++++++++
 .../dynamic-frame-replace-after-load-expected.txt  |   34 ++++++++++++++
 .../frames/dynamic-frame-replace-after-load.html   |   48 ++++++++++++++++++++
 WebCore/ChangeLog                                  |   17 +++++++
 WebCore/html/HTMLEmbedElement.cpp                  |   17 ++++++-
 WebCore/html/HTMLEmbedElement.h                    |    1 +
 WebCore/html/HTMLObjectElement.cpp                 |    6 ++-
 9 files changed, 188 insertions(+), 4 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74610</commentid>
    <comment_count>5</comment_count>
      <attachid>19920</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-03-21 01:15:45 -0700</bug_when>
    <thetext>Comment on attachment 19920
Fix embed.src and object.data updating

wrong bug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212845</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-04-15 07:35:35 -0700</bug_when>
    <thetext>Please note:  WebKit/chromium/tests/KURLTests.cpp

(That is surely not in the ideal location for a WebCore unit test though.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1956890</commentid>
    <comment_count>7</comment_count>
    <who name="Anne van Kesteren">annevk</who>
    <bug_when>2023-05-22 03:40:36 -0700</bug_when>
    <thetext>We no longer use KURL.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19062</attachid>
            <date>2008-02-11 01:37:01 -0800</date>
            <delta_ts>2010-06-11 10:53:34 -0700</delta_ts>
            <desc>First (hackish) pass at adding unit testing to WebCore</desc>
            <filename>First-hackish-pass-at-adding-unit-testing-to-WebCore.patch</filename>
            <type>text/plain</type>
            <size>35818</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YTUwNmY0MDI4NGU0YWVkOWYzZTFmYzc5NDE3MDE1MDA0Y2Y5ZWQ0MwpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggYzUzZjIzNi4uMTgwMjMwNCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTkzLDYgKzE1OTMsNyBA
QAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJl
ZmVyZW5jZSA9IDFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2Nv
bmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJRVhQT1JURURfU1lNQk9MU19GSUxF
ID0gIiI7CiAJCQkJSU5TVEFMTF9QQVRIID0gIiQoQlVJTFRfUFJPRFVDVFNfRElSKSI7CiAJCQl9
OwogCQkJbmFtZSA9IERlYnVnOwpAQCAtMTYwMSw2ICsxNjAyLDcgQEAKIAkJCWlzYSA9IFhDQnVp
bGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAxQzkwNTE0
MzBCQTlFOEE3MDA4MUU5RDAgLyogSmF2YVNjcmlwdENvcmUueGNjb25maWcgKi87CiAJCQlidWls
ZFNldHRpbmdzID0geworCQkJCUVYUE9SVEVEX1NZTUJPTFNfRklMRSA9ICIiOwogCQkJCUlOU1RB
TExfUEFUSCA9ICIkKEJVSUxUX1BST0RVQ1RTX0RJUikiOwogCQkJfTsKIAkJCW5hbWUgPSBSZWxl
YXNlOwpAQCAtMTYwOSw2ICsxNjExLDcgQEAKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9u
OwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAxQzkwNTE0MzBCQTlFOEE3MDA4MUU5
RDAgLyogSmF2YVNjcmlwdENvcmUueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0gewor
CQkJCUVYUE9SVEVEX1NZTUJPTFNfRklMRSA9ICIiOwogCQkJCVNFQ1RPUkRFUl9GTEFHUyA9ICgK
IAkJCQkJIi1zZWN0b3JkZXIiLAogCQkJCQlfX1RFWFQsCmRpZmYgLS1naXQgYS9XZWJDb3JlL0Nv
bmZpZ3VyYXRpb25zL1VuaXQgVGVzdHMueGNjb25maWcgYi9XZWJDb3JlL0NvbmZpZ3VyYXRpb25z
L1VuaXQgVGVzdHMueGNjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MTRjZjhjOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvVW5pdCBU
ZXN0cy54Y2NvbmZpZwkKQEAgLTAsMCArMSw1IEBACitGRUFUVVJFX0RFRklORVMgPSBFTkFCTEVf
REFUQUJBU0UgRU5BQkxFX0lDT05EQVRBQkFTRSBFTkFCTEVfU1ZHIEVOQUJMRV9TVkdfRk9OVFMg
RU5BQkxFX1NWR19BU19JTUFHRSBFTkFCTEVfU1ZHX1VTRSBFTkFCTEVfU1ZHX0ZPUkVJR05fT0JK
RUNUIEVOQUJMRV9YUEFUSCBFTkFCTEVfWFNMVCBFTkFCTEVfVklERU87CitHQ0NfUFJFRklYX0hF
QURFUiA9IFdlYkNvcmVQcmVmaXguaDsKK0dDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAk
KERFQlVHX0RFRklORVMpICQoRkVBVFVSRV9ERUZJTkVTKSAkKEdDQ19QUkVQUk9DRVNTT1JfREVG
SU5JVElPTlMpOworSEVBREVSX1NFQVJDSF9QQVRIUyA9IEZvcndhcmRpbmdIZWFkZXJzIGljdSAk
KEhFQURFUl9TRUFSQ0hfUEFUSFMpOworUFJPRFVDVF9OQU1FID0gd2Via2l0LXVuaXQtdGVzdHM7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGI2ZjdiOWYu
LjAyNWM1MTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xOTU2LDYgKzE5NTYsMTIgQEAKIAkJQTgwRjNCQjYwQ0NEQ0UyNDAwMkREOTkwIC8qIERPTVNW
R1BhdGhTZWdNb3ZldG9BYnNJbnRlcm5hbC5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFNTQ0MDUwQ0E5RDFDMTAwOTdEMDlC
IC8qIERPTVNWR1BhdGhTZWdNb3ZldG9BYnNJbnRlcm5hbC5oICovOyB9OwogCQlBODBGNDM1MjBD
Q0RFNjA0MDAyREQ5OTAgLyogRE9NU1ZHQW5pbWF0ZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVBQ0VGODYwQUNERDA0QTAw
MTIxNEZGIC8qIERPTVNWR0FuaW1hdGVFbGVtZW50SW50ZXJuYWwuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQlBODBGNDM1RDBDQ0RFNjNDMDAyREQ5OTAgLyogRE9N
U1ZHQW5pbWF0ZUVsZW1lbnRJbnRlcm5hbC5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVBQ0VGODYwQUNERDA0QTAwMTIxNEZG
IC8qIERPTVNWR0FuaW1hdGVFbGVtZW50SW50ZXJuYWwuaCAqLzsgfTsKKwkJQTgxMDAzNTYwRDYw
MjRDOTAwQ0ZGREIwIC8qIEtVUkxfdGVzdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxMDAzNTUwRDYwMjRDOTAwQ0ZGREIwIC8qIEtVUkxfdGVz
dHMuY3BwICovOyB9OworCQlBODEwMDM1ODBENjAyNEVFMDBDRkZEQjAgLyogbWFpbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEwMDM1NzBENjAy
NEVFMDBDRkZEQjAgLyogbWFpbi5jcHAgKi87IH07CisJCUE4MTAwNjI5MEQ2MDMzNjQwMENGRkRC
MCAvKiBUZXN0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODEwMDYyODBENjAzMzY0MDBDRkZEQjAgLyogVGVzdENvbnRyb2xsZXIu
Y3BwICovOyB9OworCQlBODEwMDYyQzBENjAzMzcyMDBDRkZEQjAgLyogVGVzdENhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxMDA2MkIwRDYw
MzM3MjAwQ0ZGREIwIC8qIFRlc3RDYXNlLmNwcCAqLzsgfTsKKwkJQTgxMDA5RDgwRDYwNDI3RDAw
Q0ZGREIwIC8qIFdlYktpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBODEwMDlENzBENjA0MjdEMDBDRkZEQjAgLyogV2ViS2l0LmZy
YW1ld29yayAqLzsgfTsKKwkJQTgxMDBDREQwRDYwNDVDRDAwQ0ZGREIwIC8qIEphdmFTY3JpcHRD
b3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4MTAwQ0RDMEQ2MDQ1Q0QwMENGRkRCMCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdv
cmsgKi87IH07CiAJCUE4MTM2OUNBMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MSXNJbmRleEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2
OUFFMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSXNJbmRleEVsZW1lbnQuaCAqLzsgfTsKIAkJQTgx
MzY5Q0IwOTczNzRGNjAwRDc0NDYzIC8qIEhUTUxJc0luZGV4RWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEzNjlBRjA5NzM3NEY1MDBE
NzQ0NjMgLyogSFRNTElzSW5kZXhFbGVtZW50LmNwcCAqLzsgfTsKIAkJQTgxMzY5Q0MwOTczNzRG
NjAwRDc0NDYzIC8qIEhUTUxJbnB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUIwMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSW5w
dXRFbGVtZW50LmggKi87IH07CkBAIC0zNzkyLDYgKzM3OTgsMTMgQEAKIC8qIEVuZCBQQlhCdWls
ZFJ1bGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlv
biAqLworCQlBODEwMENDMjBENjA0NTQ1MDBDRkZEQjAgLyogUEJYQ29udGFpbmVySXRlbVByb3h5
ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9y
dGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJ
cHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gOTNGMTk4QTUwODI0NUU1
OTAwMUU5QUJDOworCQkJcmVtb3RlSW5mbyA9IFdlYkNvcmU7CisJCX07CiAJCUREMDQxRkYwMDlE
OUUzMjUwMDEwQUYyQSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhDb250YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQw
MjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC02MDExLDYgKzYwMjQsMTYgQEAK
IAkJQTgwRjM5NTUwQ0NEOTc5NjAwMkREOTkwIC8qIERPTVNWR0RlZmluaXRpb25TcmNFbGVtZW50
SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRGVmaW5p
dGlvblNyY0VsZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
ODBGMzk1NjBDQ0Q5Nzk2MDAyREQ5OTAgLyogRE9NU1ZHRGVmaW5pdGlvblNyY0VsZW1lbnQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdEZWZpbml0aW9u
U3JjRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRjM5NTcwQ0NE
OTc5NjAwMkREOTkwIC8qIERPTVNWR0RlZmluaXRpb25TcmNFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNWR0RlZmluaXRpb25TcmNFbGVtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MTAwMzRCMEQ2MDI0MTAwMENGRkRCMCAvKiB3ZWJr
aXQtdW5pdC10ZXN0cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBw
YXRoID0gIndlYmtpdC11bml0LXRlc3RzIjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKKwkJQTgxMDAzNTUwRDYwMjRDOTAwQ0ZGREIwIC8qIEtVUkxfdGVzdHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS1VSTF90ZXN0cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MTAwMzU3MEQ2MDI0RUUwMENGRkRCMCAvKiBtYWluLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG1haW4uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBODEwMDYyNzBENjAzMzY0MDBDRkZEQjAgLyogVGVzdENv
bnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVzdENvbnRyb2xs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTgxMDA2MjgwRDYwMzM2NDAwQ0ZG
REIwIC8qIFRlc3RDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRlc3RDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTgxMDA2MkEwRDYwMzM3MjAwQ0ZGREIwIC8qIFRlc3RDYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRlc3RDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE4MTAwNjJCMEQ2MDMzNzIwMENGRkRCMCAvKiBUZXN0Q2FzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXN0Q2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE4MTAwNjNGMEQ2MDM0QjMwMENGRkRCMCAvKiBVbml0IFRlc3RzLnhjY29uZmln
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9ICJVbml0IFRlc3RzLnhjY29uZmlnIjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTgxMDA5RDcwRDYwNDI3RDAwQ0ZGREIwIC8q
IFdlYktpdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IFdlYktpdC5mcmFtZXdvcms7IHBh
dGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9XZWJLaXQuZnJhbWV3b3JrOyBzb3VyY2VU
cmVlID0gIjxhYnNvbHV0ZT4iOyB9OworCQlBODEwMENEQzBENjA0NUNEMDBDRkZEQjAgLyogSmF2
YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBKYXZhU2NyaXB0Q29yZS5m
cmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9KYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCUE4MTM2OUFFMDk3
Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSXNJbmRleEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEhUTUxJc0luZGV4RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBODEzNjlBRjA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElzSW5kZXhFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MSXNJbmRleEVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODEzNjlCMDA5NzM3NEY1
MDBENzQ0NjMgLyogSFRNTElucHV0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSFRNTElucHV0RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzkzNSw2ICs3OTU4LDE1IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CisJCUE4MTAwMzQ5MEQ2MDI0MTAwMENGRkRCMCAvKiBGcmFt
ZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJQTgxMDA5RDgwRDYw
NDI3RDAwQ0ZGREIwIC8qIFdlYktpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQlB
ODEwMENERDBENjA0NUNEMDBDRkZEQjAgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZy
YW1ld29ya3MgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CisJCX07CiAvKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwog
CiAvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCkBAIC03OTQyLDYgKzc5NzQsNyBAQAogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk5M0YxOUIxQTA4MjQ1RTVBMDAx
RTlBQkMgLyogV2ViQ29yZS5mcmFtZXdvcmsgKi8sCisJCQkJQTgxMDAzNEIwRDYwMjQxMDAwQ0ZG
REIwIC8qIHdlYmtpdC11bml0LXRlc3RzICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsK
IAkJCXNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsKQEAgLTc5NTEsNiArNzk4NCw4IEBACiAJCTA4
NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBXZWJLaXQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUE4MTAwQ0RDMEQ2MDQ1Q0QwMENGRkRCMCAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8sCisJCQkJQTgxMDA5RDcwRDYwNDI3RDAwQ0ZGREIwIC8q
IFdlYktpdC5mcmFtZXdvcmsgKi8sCiAJCQkJNjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8qIGNv
bmZpZy5oICovLAogCQkJCUVERUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4
LmggKi8sCiAJCQkJOTMwNzA2MTMwOUUwQ0E4MjAwQjE3RkU0IC8qIERlcml2ZWRTb3VyY2VzLm1h
a2UgKi8sCkBAIC03OTcxLDYgKzgwMDYsNyBAQAogCQkJCTFBRTgyRUM5MENBQUUxNzcwMDIyMzdB
RSAvKiBzdG9yYWdlICovLAogCQkJCUIyMjI3N0NBMEQwMEJGMUUwMDcxQjc4MiAvKiBzdmcgKi8s
CiAJCQkJRTFGMDQyNDMwOTgzOTM4OTAwNjY5NEVBIC8qIHhtbCAqLywKKwkJCQlBODEwMDM1MzBE
NjAyNEM5MDBDRkZEQjAgLyogdW5pdC10ZXN0cyAqLywKIAkJCQk2NTY1ODBFQzA5RDEyQjIwMDAw
RTYxRDcgLyogRGVyaXZlZCBTb3VyY2VzICovLAogCQkJCTA4OUMxNjY1RkU4NDExNThDMDJBQUMw
NyAvKiBSZXNvdXJjZXMgKi8sCiAJCQkJMDg2N0Q2OUFGRTg0MDI4RkMwMkFBQzA3IC8qIEZyYW1l
d29ya3MgKi8sCkBAIC04MTM3LDYgKzgxNzMsNyBAQAogCQkxQ0RENDQ2NjBCQTlDODAwMDBGOTAx
NDcgLyogQ29uZmlndXJhdGlvbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCUE4MTAwNjNGMEQ2MDM0QjMwMENGRkRCMCAvKiBVbml0IFRlc3RzLnhjY29u
ZmlnICovLAogCQkJCTFDREQ0NUU2MEJBOUM4NDYwMEY5MDE0NyAvKiBCYXNlLnhjY29uZmlnICov
LAogCQkJCTFDREQ0NUU0MEJBOUM4NDYwMEY5MDE0NyAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcg
Ki8sCiAJCQkJMUNERDQ1RTUwQkE5Qzg0NjAwRjkwMTQ3IC8qIFdlYkNvcmUueGNjb25maWcgKi8s
CkBAIC0xMDAxNSw2ICsxMDA1MiwyNyBAQAogCQkJdGFiV2lkdGggPSA0OwogCQkJdXNlc1RhYnMg
PSAwOwogCQl9OworCQlBODEwMDM1MzBENjAyNEM5MDBDRkZEQjAgLyogdW5pdC10ZXN0cyAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTgxMDAzNTQwRDYw
MjRDOTAwQ0ZGREIwIC8qIHBsYXRmb3JtICovLAorCQkJCUE4MTAwMzU3MEQ2MDI0RUUwMENGRkRC
MCAvKiBtYWluLmNwcCAqLywKKwkJCQlBODEwMDYyNzBENjAzMzY0MDBDRkZEQjAgLyogVGVzdENv
bnRyb2xsZXIuaCAqLywKKwkJCQlBODEwMDYyODBENjAzMzY0MDBDRkZEQjAgLyogVGVzdENvbnRy
b2xsZXIuY3BwICovLAorCQkJCUE4MTAwNjJBMEQ2MDMzNzIwMENGRkRCMCAvKiBUZXN0Q2FzZS5o
ICovLAorCQkJCUE4MTAwNjJCMEQ2MDMzNzIwMENGRkRCMCAvKiBUZXN0Q2FzZS5jcHAgKi8sCisJ
CQkpOworCQkJcGF0aCA9ICJ1bml0LXRlc3RzIjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CisJCUE4MTAwMzU0MEQ2MDI0QzkwMENGRkRCMCAvKiBwbGF0Zm9ybSAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTgxMDAzNTUwRDYwMjRDOTAw
Q0ZGREIwIC8qIEtVUkxfdGVzdHMuY3BwICovLAorCQkJKTsKKwkJCXBhdGggPSBwbGF0Zm9ybTsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUE4M0I3OTA4MENDQUZGMkIwMDBC
MDgyNSAvKiBIVE1MICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
QEAgLTE0MjY2LDYgKzE0MzI0LDIzIEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0gOTNGMTlCMUEw
ODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovOwogCQkJcHJvZHVjdFR5cGUg
PSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5mcmFtZXdvcmsiOwogCQl9OworCQlBODEwMDM0QTBE
NjAyNDEwMDBDRkZEQjAgLyogVW5pdCBUZXN0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRh
cmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBBODEwMDM1MDBENjAyNDM2MDBDRkZE
QjAgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIlVuaXQg
VGVzdHMiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJQTgxMDAzNDgwRDYwMjQxMDAwQ0ZG
REIwIC8qIFNvdXJjZXMgKi8sCisJCQkJQTgxMDAzNDkwRDYwMjQxMDAwQ0ZGREIwIC8qIEZyYW1l
d29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNp
ZXMgPSAoCisJCQkJQTgxMDBDQzMwRDYwNDU0NTAwQ0ZGREIwIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCisJCQkpOworCQkJbmFtZSA9ICJVbml0IFRlc3RzIjsKKwkJCXByb2R1Y3ROYW1lID0g
IlVuaXQgVGVzdHMiOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEE4MTAwMzRCMEQ2MDI0MTAwMENG
RkRCMCAvKiB3ZWJraXQtdW5pdC10ZXN0cyAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBs
ZS5wcm9kdWN0LXR5cGUudG9vbCI7CisJCX07CiAvKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rp
b24gKi8KIAogLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCkBAIC0xNDI5MCw2ICsxNDM2
NSw3IEBACiAJCQl0YXJnZXRzID0gKAogCQkJCTkzRjE5OEE1MDgyNDVFNTkwMDFFOUFCQyAvKiBX
ZWJDb3JlICovLAogCQkJCUREMDQxRkJFMDlEOUREQkUwMDEwQUYyQSAvKiBEZXJpdmVkIFNvdXJj
ZXMgKi8sCisJCQkJQTgxMDAzNEEwRDYwMjQxMDAwQ0ZGREIwIC8qIFVuaXQgVGVzdHMgKi8sCiAJ
CQkpOwogCQl9OwogLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwpAQCAtMTU4MzEsOSArMTU5
MDcsMjUgQEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKKwkJQTgxMDAzNDgwRDYwMjQxMDAwQ0ZGREIwIC8qIFNvdXJjZXMgKi8gPSB7CisJ
CQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlBODEwMDM1NjBENjAyNEM5MDBDRkZEQjAgLyogS1VS
TF90ZXN0cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBODEwMDM1ODBENjAyNEVFMDBDRkZEQjAg
LyogbWFpbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBODEwMDYyOTBENjAzMzY0MDBDRkZEQjAg
LyogVGVzdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTgxMDA2MkMwRDYwMzM3
MjAwQ0ZGREIwIC8qIFRlc3RDYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogLyogRW5kIFBCWFNvdXJj
ZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBz
ZWN0aW9uICovCisJCUE4MTAwQ0MzMEQ2MDQ1NDUwMENGRkRCMCAvKiBQQlhUYXJnZXREZXBlbmRl
bmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDkz
RjE5OEE1MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlICovOworCQkJdGFyZ2V0UHJveHkgPSBB
ODEwMENDMjBENjA0NTQ1MDBDRkZEQjAgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOworCQl9
OwogCQlERDA0MUZGMTA5RDlFMzI1MDAxMEFGMkEgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKIAkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQgPSBERDA0MUZCRTA5
RDlEREJFMDAxMEFGMkEgLyogRGVyaXZlZCBTb3VyY2VzICovOwpAQCAtMTU4NTgsNiArMTU5NTAs
NyBAQAogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAxQ0RENDVFNTBCQTlDODQ2MDBG
OTAxNDcgLyogV2ViQ29yZS54Y2NvbmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CiAJCQkJ
REVCVUdfREVGSU5FUyA9IERJU0FCTEVfVEhSRUFEX0NIRUNLOworCQkJCUVYUE9SVEVEX1NZTUJP
TFNfRklMRSA9ICIiOwogCQkJCUlOU1RBTExfUEFUSCA9ICIkKEJVSUxUX1BST0RVQ1RTX0RJUiki
OwogCQkJfTsKIAkJCW5hbWUgPSBEZWJ1ZzsKQEAgLTE1ODY3LDYgKzE1OTYwLDcgQEAKIAkJCWJh
c2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMUNERDQ1RTUwQkE5Qzg0NjAwRjkwMTQ3IC8qIFdl
YkNvcmUueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0gewogCQkJCURFQlVHX0RFRklO
RVMgPSBOREVCVUc7CisJCQkJRVhQT1JURURfU1lNQk9MU19GSUxFID0gIiI7CiAJCQkJSU5TVEFM
TF9QQVRIID0gIiQoQlVJTFRfUFJPRFVDVFNfRElSKSI7CiAJCQl9OwogCQkJbmFtZSA9IFJlbGVh
c2U7CkBAIC0xNTg3Niw2ICsxNTk3MCw3IEBACiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5j
ZSA9IDFDREQ0NUU1MEJBOUM4NDYwMEY5MDE0NyAvKiBXZWJDb3JlLnhjY29uZmlnICovOwogCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKIAkJCQlERUJVR19ERUZJTkVTID0gTkRFQlVHOworCQkJCUVYUE9S
VEVEX1NZTUJPTFNfRklMRSA9ICIiOwogCQkJCVNFQ1RPUkRFUl9GTEFHUyA9ICgKIAkJCQkJIi1z
ZWN0b3JkZXIiLAogCQkJCQlfX1RFWFQsCkBAIC0xNTkxMCw2ICsxNjAwNSwyNyBAQAogCQkJfTsK
IAkJCW5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQlBODEwMDM0RDBENjAyNDExMDBDRkZEQjAg
LyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQTgxMDA2M0YwRDYwMzRCMzAwQ0ZGREIwIC8qIFVuaXQg
VGVzdHMueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJfTsKKwkJCW5hbWUg
PSBEZWJ1ZzsKKwkJfTsKKwkJQTgxMDAzNEUwRDYwMjQxMTAwQ0ZGREIwIC8qIFJlbGVhc2UgKi8g
PSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9u
UmVmZXJlbmNlID0gQTgxMDA2M0YwRDYwMzRCMzAwQ0ZGREIwIC8qIFVuaXQgVGVzdHMueGNjb25m
aWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOwor
CQl9OworCQlBODEwMDM0RjBENjAyNDExMDBDRkZEQjAgLyogUHJvZHVjdGlvbiAqLyA9IHsKKwkJ
CWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVu
Y2UgPSBBODEwMDYzRjBENjAzNEIzMDBDRkZEQjAgLyogVW5pdCBUZXN0cy54Y2NvbmZpZyAqLzsK
KwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQl9OworCQkJbmFtZSA9IFByb2R1Y3Rpb247CisJCX07
CiAJCUREMDQxRkMyMDlEOUREREMwMDEwQUYyQSAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAxQ0RE
NDVFNTBCQTlDODQ2MDBGOTAxNDcgLyogV2ViQ29yZS54Y2NvbmZpZyAqLzsKQEAgLTE1OTU3LDYg
KzE2MDczLDE2IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlk
ZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQlBODEwMDM1MDBE
NjAyNDM2MDBDRkZEQjAgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVU
YXJnZXQgIlVuaXQgVGVzdHMiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsK
KwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJQTgxMDAzNEQwRDYwMjQxMTAwQ0ZGREIw
IC8qIERlYnVnICovLAorCQkJCUE4MTAwMzRFMEQ2MDI0MTEwMENGRkRCMCAvKiBSZWxlYXNlICov
LAorCQkJCUE4MTAwMzRGMEQ2MDI0MTEwMENGRkRCMCAvKiBQcm9kdWN0aW9uICovLAorCQkJKTsK
KwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1
cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCUREMDQxRkMxMDlEOUREREMwMDEwQUYy
QSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiRGVy
aXZlZCBTb3VyY2VzIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQli
dWlsZENvbmZpZ3VyYXRpb25zID0gKApkaWZmIC0tZ2l0IGEvV2ViQ29yZS91bml0LXRlc3RzL1Rl
c3RDYXNlLmNwcCBiL1dlYkNvcmUvdW5pdC10ZXN0cy9UZXN0Q2FzZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBlMDlkYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvdW5pdC10ZXN0cy9UZXN0Q2FzZS5jcHAKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdENh
c2UuaCIKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS91bml0LXRlc3RzL1Rlc3RDYXNlLmggYi9XZWJD
b3JlL3VuaXQtdGVzdHMvVGVzdENhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jYjVjMDM1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS91bml0LXRlc3RzL1Rlc3RD
YXNlLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBUZXN0Q2FzZV9oCisjZGVmaW5lIFRlc3RDYXNlX2gKKworY2xhc3MgVGVzdENhc2Ugewor
cHVibGljOgorICAgIFRlc3RDYXNlKCkge30KKyAgICB2aXJ0dWFsIH5UZXN0Q2FzZSgpIHsgfQor
ICAgIAorICAgIHZpcnR1YWwgdm9pZCBydW5UZXN0KCkgPSAwOworfTsKKworc3RhdGljIGlubGlu
ZSB2b2lkIGV4cGVjdEZ1bmN0aW9uKGJvb2wgcmVzdWx0LCBjb25zdCBjaGFyKiB0ZXN0U3RyaW5n
LCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSkKK3sKKyAgICBpZiAocmVzdWx0KQorICAgICAg
ICBwcmludGYoIi4iKTsKKyAgICBlbHNlCisgICAgICAgIHByaW50ZigiXG5GQUlMOiAlcyAoJXM6
JWQpXG4iLCB0ZXN0U3RyaW5nLCBmaWxlLCBsaW5lKTsKK30KKworI2RlZmluZSBFWFBFQ1QodGVz
dCkgXAorICAgIGV4cGVjdEZ1bmN0aW9uKHRlc3QsICN0ZXN0LCBfX0ZJTEVfXywgX19MSU5FX18p
OworCisjZGVmaW5lIEVYUEVDVF9UUlVFKHRlc3QpIFwKKyAgICBFWFBFQ1QodGVzdCk7CisKKyNk
ZWZpbmUgRVhQRUNUX0ZBTFNFKHRlc3QpIFwKKyAgICBFWFBFQ1QoISh0ZXN0KSk7CisKKyNkZWZp
bmUgRVhQRUNUX0VRKGEsIGIpIFwKKyAgICBFWFBFQ1QoYSA9PSBiKTsKKworI2RlZmluZSBERUZJ
TkVfVEVTVF9DTEFTUyhDbGFzc05hbWUpIFwKK2NsYXNzIENsYXNzTmFtZSA6IHB1YmxpYyBUZXN0
Q2FzZSB7IFwKK3B1YmxpYzogXAorICAgIENsYXNzTmFtZSgpIHsgXAorICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2hhcmVkKCkucmVnaXN0ZXJUZXN0Q2FzZSh0aGlzKTsgXAorICAgIH0gXAorICAg
IHZpcnR1YWwgdm9pZCBydW5UZXN0KCk7IFwKK307IFwKK3N0YXRpYyBDbGFzc05hbWUgQ2xhc3NO
YW1lIyNzaGFyZWQ7IFwKK3ZvaWQgQ2xhc3NOYW1lOjpydW5UZXN0KCkKKworI2RlZmluZSBURVNU
KFNldCwgTmFtZSkgXAorICAgIERFRklORV9URVNUX0NMQVNTKFNldCMjTmFtZSkKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3VuaXQtdGVzdHMvVGVzdENvbnRyb2xsZXIuY3BwIGIvV2Vi
Q29yZS91bml0LXRlc3RzL1Rlc3RDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iNmQ0ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS91bml0LXRl
c3RzL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+ICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0Q29udHJv
bGxlci5oIgorI2luY2x1ZGUgIlRlc3RDYXNlLmgiCisKK1Rlc3RDb250cm9sbGVyJiBUZXN0Q29u
dHJvbGxlcjo6c2hhcmVkKCkKK3sKKyAgICBzdGF0aWMgVGVzdENvbnRyb2xsZXIgc2hhcmVkSW5z
dGFuY2U7CisgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOworfQorCit2b2lkIFRlc3RDb250cm9s
bGVyOjpyZWdpc3RlclRlc3RDYXNlKFRlc3RDYXNlKiB0ZXN0Q2FzZSkKK3sKKyAgICBtX3Rlc3RD
YXNlcy5hZGQodGVzdENhc2UpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpydW5UZXN0cygp
Cit7CisgICAgSGFzaFNldDxUZXN0Q2FzZSo+OjppdGVyYXRvciBpdHIgPSBtX3Rlc3RDYXNlcy5i
ZWdpbigpOworICAgIEhhc2hTZXQ8VGVzdENhc2UqPjo6aXRlcmF0b3IgZW5kID0gbV90ZXN0Q2Fz
ZXMuZW5kKCk7CisgICAgZm9yICg7IGl0ciAhPSBlbmQ7ICsraXRyKSB7CisgICAgICAgICgqaXRy
KS0+cnVuVGVzdCgpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS91bml0LXRlc3Rz
L1Rlc3RDb250cm9sbGVyLmggYi9XZWJDb3JlL3VuaXQtdGVzdHMvVGVzdENvbnRyb2xsZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGVhYjNkCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS91bml0LXRlc3RzL1Rlc3RDb250cm9sbGVyLmgKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUZXN0Q29udHJvbGxlcl9o
CisjZGVmaW5lIFRlc3RDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisK
K2NsYXNzIFRlc3RDYXNlOworCitjbGFzcyBUZXN0Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAg
VGVzdENvbnRyb2xsZXIoKSB7fQorICAgIAorICAgIHN0YXRpYyBUZXN0Q29udHJvbGxlciYgc2hh
cmVkKCk7CisgICAgCisgICAgdm9pZCByZWdpc3RlclRlc3RDYXNlKFRlc3RDYXNlKik7CisKKyAg
ICB2b2lkIHJ1blRlc3RzKCk7CisgICAgCitwcml2YXRlOgorICAgIEhhc2hTZXQ8VGVzdENhc2Uq
PiBtX3Rlc3RDYXNlczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS91bml0LXRl
c3RzL21haW4uY3BwIGIvV2ViQ29yZS91bml0LXRlc3RzL21haW4uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZTk0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3VuaXQtdGVzdHMvbWFpbi5jcHAKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqICBtYWluLmNwcAor
ICogIFdlYkNvcmUKKyAqCisgKiAgQ3JlYXRlZCBieSBFcmljIFNlaWRlbCBvbiAyLzEwLzA4Lgor
ICogIENvcHlyaWdodCAyMDA4IEFwcGxlIENvbXB1dGVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0Q29udHJvbGxl
ci5oIgorCitpbnQgbWFpbih2b2lkKQoreworICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5y
dW5UZXN0cygpOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS91bml0LXRl
c3RzL3BsYXRmb3JtL0tVUkxfdGVzdHMuY3BwIGIvV2ViQ29yZS91bml0LXRlc3RzL3BsYXRmb3Jt
L0tVUkxfdGVzdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTNh
ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3VuaXQtdGVzdHMvcGxhdGZvcm0vS1VSTF90
ZXN0cy5jcHAKQEAgLTAsMCArMSwzMzkgQEAKKy8vIENvcHlyaWdodCAyMDA3LCAyMDA4IEdvb2ds
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLyBBdXRob3I6IGJyZXR0d0Bnb29nbGUuY29t
IChCcmV0dCBXaWxzb24pCisvLyBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6Cisv
LyAKKy8vICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vICAg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorLy8gICBkaXN0cmlidXRpb24uCisvLyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vICAgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vIAor
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgor
I2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUg
IlRlc3RDYXNlLmgiCisKKyNkZWZpbmUgQVJSQVlTSVpFKGEpIFwKKyAgICAoaW50KSgoc2l6ZW9m
KGEpIC8gc2l6ZW9mKCooYSkpKSAvIFwKKyAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KCEoc2l6ZW9m
KGEpICUgc2l6ZW9mKCooYSkpKSkpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBE
dW1teSB3cmFwcGVyIHRvIHBhc3MgR1VSTCB0ZXN0cworY2xhc3MgR1VSTCA6IHB1YmxpYyBXZWJD
b3JlOjpLVVJMIHsKK3B1YmxpYzoKKyAgICBHVVJMKCkgOiBLVVJMKCkgeyB9CisgICAgR1VSTChj
b25zdCBjaGFyKiBzKSA6IEtVUkwocykgeyB9CisgICAgR1VSTChjb25zdCBHVVJMJiBiYXNlLCBj
b25zdCBjaGFyKiBzKSA6IEtVUkwoYmFzZSwgcykgeyB9CisgICAgCisgICAgYm9vbCBpc192YWxp
ZCgpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIEtVUkwgZG9lcyBub3QgZXhwb3NlIGFueSAiaXNWYWxp
ZCgpIiBtZXRob2QKKyAgICBib29sIFNjaGVtZUlzKGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIHBy
b3RvY29sKCkgPT0gczsgfQorICAgIGJvb2wgU2NoZW1lSXNGaWxlKCkgeyByZXR1cm4gaXNMb2Nh
bEZpbGUoKTsgfQorICAgIERlcHJlY2F0ZWRTdHJpbmcgc2NoZW1lKCkgeyByZXR1cm4gcHJvdG9j
b2woKTsgfQorICAgIERlcHJlY2F0ZWRTdHJpbmcgdXNlcm5hbWUoKSB7IHJldHVybiB1c2VyKCk7
IH0KKyAgICBEZXByZWNhdGVkU3RyaW5nIHBhc3N3b3JkKCkgeyByZXR1cm4gcGFzcygpOyB9Cisg
ICAgCisgICAgRGVwcmVjYXRlZFN0cmluZyBzcGVjKCkgeyByZXR1cm4gZGVwcmVjYXRlZFN0cmlu
ZygpOyB9CisgICAgRGVwcmVjYXRlZFN0cmluZyBwb3NzaWJseV9pbnZhbGlkX3NwZWMoKSB7IHJl
dHVybiBkZXByZWNhdGVkU3RyaW5nKCk7IH0KKyAgICBEZXByZWNhdGVkU3RyaW5nIFBhdGhGb3JS
ZXF1ZXN0KCkgeyByZXR1cm4gcGF0aCgpOyB9CisgICAgCisgICAgYm9vbCBIb3N0SXNJUEFkZHJl
c3MoKSB7IHJldHVybiBmYWxzZTsgfSAvLyBOb3QgaW1wbGVtZW50ZWQgZm9yIEtVUkwKKyAgICAK
KyAgICBHVVJMIEdldFdpdGhFbXB0eVBhdGgoKSB7IHJldHVybiAqdGhpczsgfQorICAgIAorICAg
IERlcHJlY2F0ZWRTdHJpbmcgcG9ydCgpIHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJl
cihLVVJMOjpwb3J0KCkpOyB9CisgICAgaW50IEludFBvcnQoKSB7IHJldHVybiBLVVJMOjpwb3J0
KCk7IH0KKyAgICAKKyAgICBHVVJMIFJlc29sdmUoY29uc3QgY2hhciogcykgeyByZXR1cm4gR1VS
TCgqdGhpcywgcyk7IH0KKyAgICAKKyAgICBib29sIERvbWFpbklzKGNvbnN0IGNoYXIqIHMpIHsg
cmV0dXJuIGhvc3QoKSA9PSBzOyB9Cit9OworCisvLyBUZXN0IHRoZSBiYXNpYyBjcmVhdGlvbiBh
bmQgcXVlcnlpbmcgb2YgY29tcG9uZW50cyBpbiBhIEdVUkwuIFdlIGFzc3VtZQorLy8gdGhlIHBh
cnNlciBpcyBhbHJlYWR5IHRlc3RlZCBhbmQgd29ya3MsIHNvIHdlIGFyZSBtb3N0bHkgaW50ZXJl
c3RlZCBpZiB0aGUKKy8vIG9iamVjdCBkb2VzIHRoZSByaWdodCB0aGluZyB3aXRoIHRoZSByZXN1
bHRzLgorVEVTVChHVVJMVGVzdCwgQ29tcG9uZW50cykgeworICBHVVJMIHVybCgiaHR0cDovL3Vz
ZXI6cGFzc0Bnb29nbGUuY29tOjk5L2ZvbztiYXI/cT1hI3JlZiIpOworICBFWFBFQ1RfVFJVRSh1
cmwuaXNfdmFsaWQoKSk7CisgIEVYUEVDVF9UUlVFKHVybC5TY2hlbWVJcygiaHR0cCIpKTsKKyAg
RVhQRUNUX0ZBTFNFKHVybC5TY2hlbWVJc0ZpbGUoKSk7CisKKyAgLy8gVGhpcyBpcyB0aGUgbmFy
cm93IHZlcnNpb24gb2YgdGhlIFVSTCwgd2hpY2ggc2hvdWxkIG1hdGNoIHRoZSB3aWRlIGlucHV0
LgorICBFWFBFQ1RfRVEoImh0dHA6Ly91c2VyOnBhc3NAZ29vZ2xlLmNvbTo5OS9mb287YmFyP3E9
YSNyZWYiLCB1cmwuc3BlYygpKTsKKworICBFWFBFQ1RfRVEoImh0dHAiLCB1cmwuc2NoZW1lKCkp
OworICBFWFBFQ1RfRVEoInVzZXIiLCB1cmwudXNlcm5hbWUoKSk7CisgIEVYUEVDVF9FUSgicGFz
cyIsIHVybC5wYXNzd29yZCgpKTsKKyAgRVhQRUNUX0VRKCJnb29nbGUuY29tIiwgdXJsLmhvc3Qo
KSk7CisgIEVYUEVDVF9FUSgiOTkiLCB1cmwucG9ydCgpKTsKKyAgRVhQRUNUX0VRKDk5LCB1cmwu
SW50UG9ydCgpKTsKKyAgRVhQRUNUX0VRKCIvZm9vO2JhciIsIHVybC5wYXRoKCkpOworICBFWFBF
Q1RfRVEoInE9YSIsIHVybC5xdWVyeSgpKTsKKyAgRVhQRUNUX0VRKCJyZWYiLCB1cmwucmVmKCkp
OworfQorCitURVNUKEdVUkxUZXN0LCBFbXB0eSkgeworICBHVVJMIHVybDsKKyAgRVhQRUNUX0ZB
TFNFKHVybC5pc192YWxpZCgpKTsKKyAgRVhQRUNUX0VRKCIiLCB1cmwuc3BlYygpKTsKKworICBF
WFBFQ1RfRVEoIiIsIHVybC5zY2hlbWUoKSk7CisgIEVYUEVDVF9FUSgiIiwgdXJsLnVzZXJuYW1l
KCkpOworICBFWFBFQ1RfRVEoIiIsIHVybC5wYXNzd29yZCgpKTsKKyAgRVhQRUNUX0VRKCIiLCB1
cmwuaG9zdCgpKTsKKyAgRVhQRUNUX0VRKCIiLCB1cmwucG9ydCgpKTsKKyAgRVhQRUNUX0VRKDAs
IHVybC5JbnRQb3J0KCkpOworICBFWFBFQ1RfRVEoIiIsIHVybC5wYXRoKCkpOworICBFWFBFQ1Rf
RVEoIiIsIHVybC5xdWVyeSgpKTsKKyAgRVhQRUNUX0VRKCIiLCB1cmwucmVmKCkpOworfQorCitU
RVNUKEdVUkxUZXN0LCBDb3B5KSB7CisgIEdVUkwgdXJsKCJodHRwOi8vdXNlcjpwYXNzQGdvb2ds
ZS5jb206OTkvZm9vO2Jhcj9xPWEjcmVmIik7CisKKyAgR1VSTCB1cmwyKHVybCk7CisgIEVYUEVD
VF9UUlVFKHVybDIuaXNfdmFsaWQoKSk7CisKKyAgRVhQRUNUX0VRKCJodHRwOi8vdXNlcjpwYXNz
QGdvb2dsZS5jb206OTkvZm9vO2Jhcj9xPWEjcmVmIiwgdXJsMi5zcGVjKCkpOworICBFWFBFQ1Rf
RVEoImh0dHAiLCB1cmwyLnNjaGVtZSgpKTsKKyAgRVhQRUNUX0VRKCJ1c2VyIiwgdXJsMi51c2Vy
bmFtZSgpKTsKKyAgRVhQRUNUX0VRKCJwYXNzIiwgdXJsMi5wYXNzd29yZCgpKTsKKyAgRVhQRUNU
X0VRKCJnb29nbGUuY29tIiwgdXJsMi5ob3N0KCkpOworICBFWFBFQ1RfRVEoIjk5IiwgdXJsMi5w
b3J0KCkpOworICBFWFBFQ1RfRVEoOTksIHVybDIuSW50UG9ydCgpKTsKKyAgRVhQRUNUX0VRKCIv
Zm9vO2JhciIsIHVybDIucGF0aCgpKTsKKyAgRVhQRUNUX0VRKCJxPWEiLCB1cmwyLnF1ZXJ5KCkp
OworICBFWFBFQ1RfRVEoInJlZiIsIHVybDIucmVmKCkpOworCisgIC8vIENvcHlpbmcgb2YgaW52
YWxpZCBVUkwgc2hvdWxkIGJlIGludmFsaWQKKyAgR1VSTCBpbnZhbGlkOworICBHVVJMIGludmFs
aWQyKGludmFsaWQpOworICBFWFBFQ1RfRkFMU0UoaW52YWxpZDIuaXNfdmFsaWQoKSk7CisgIEVY
UEVDVF9FUSgiIiwgaW52YWxpZDIuc3BlYygpKTsKKyAgRVhQRUNUX0VRKCIiLCBpbnZhbGlkMi5z
Y2hlbWUoKSk7CisgIEVYUEVDVF9FUSgiIiwgaW52YWxpZDIudXNlcm5hbWUoKSk7CisgIEVYUEVD
VF9FUSgiIiwgaW52YWxpZDIucGFzc3dvcmQoKSk7CisgIEVYUEVDVF9FUSgiIiwgaW52YWxpZDIu
aG9zdCgpKTsKKyAgRVhQRUNUX0VRKCIiLCBpbnZhbGlkMi5wb3J0KCkpOworICBFWFBFQ1RfRVEo
MCwgaW52YWxpZDIuSW50UG9ydCgpKTsKKyAgRVhQRUNUX0VRKCIiLCBpbnZhbGlkMi5wYXRoKCkp
OworICBFWFBFQ1RfRVEoIiIsIGludmFsaWQyLnF1ZXJ5KCkpOworICBFWFBFQ1RfRVEoIiIsIGlu
dmFsaWQyLnJlZigpKTsKK30KKworLy8gR2l2ZW4gYW4gaW52YWxpZCBVUkwsIHdlIHNob3VsZCBz
dGlsbCBnZXQgbW9zdCBvZiB0aGUgY29tcG9uZW50cy4KK1RFU1QoR1VSTFRlc3QsIEludmFsaWQp
IHsKKyAgR1VSTCB1cmwoImh0dHA6Z29vZ2xlLmNvbTpmb28iKTsKKyAgRVhQRUNUX0ZBTFNFKHVy
bC5pc192YWxpZCgpKTsKKyAgRVhQRUNUX0VRKCJodHRwOi8vZ29vZ2xlLmNvbTpmb28vIiwgdXJs
LnBvc3NpYmx5X2ludmFsaWRfc3BlYygpKTsKKworICBFWFBFQ1RfRVEoImh0dHAiLCB1cmwuc2No
ZW1lKCkpOworICBFWFBFQ1RfRVEoIiIsIHVybC51c2VybmFtZSgpKTsKKyAgRVhQRUNUX0VRKCIi
LCB1cmwucGFzc3dvcmQoKSk7CisgIEVYUEVDVF9FUSgiZ29vZ2xlLmNvbSIsIHVybC5ob3N0KCkp
OworICBFWFBFQ1RfRVEoImZvbyIsIHVybC5wb3J0KCkpOworICBFWFBFQ1RfRVEoMCwgdXJsLklu
dFBvcnQoKSk7CisgIEVYUEVDVF9FUSgiLyIsIHVybC5wYXRoKCkpOworICBFWFBFQ1RfRVEoIiIs
IHVybC5xdWVyeSgpKTsKKyAgRVhQRUNUX0VRKCIiLCB1cmwucmVmKCkpOworfQorCitURVNUKEdV
UkxUZXN0LCBSZXNvbHZlKSB7CisgIC8vIFRoZSB0cmlja3kgY2FzZXMgZm9yIHJlbGF0aXZlIFVS
TCByZXNvbHZpbmcgYXJlIHRlc3RlZCBpbiB0aGUKKyAgLy8gY2Fub25pY2FsaXplciB1bml0IHRl
c3QuIEhlcmUsIHdlIGp1c3QgdGVzdCB0aGF0IHRoZSBHVVJMIGludGVncmF0aW9uCisgIC8vIHdv
cmtzIHByb3Blcmx5LgorICBzdHJ1Y3QgUmVzb2x2ZUNhc2UgeworICAgIGNvbnN0IGNoYXIqIGJh
c2U7CisgICAgY29uc3QgY2hhciogcmVsYXRpdmU7CisgICAgYm9vbCBleHBlY3RlZF92YWxpZDsK
KyAgICBjb25zdCBjaGFyKiBleHBlY3RlZDsKKyAgfSByZXNvbHZlX2Nhc2VzW10gPSB7CisgICAg
eyJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwgImZvby5odG1sIiwgdHJ1ZSwgImh0dHA6Ly93d3cu
Z29vZ2xlLmNvbS9mb28uaHRtbCJ9LAorICAgIHsiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsICJo
dHRwOi8vaW1hZ2VzLmdvb2dsZS5jb20vZm9vLmh0bWwiLCB0cnVlLCAiaHR0cDovL2ltYWdlcy5n
b29nbGUuY29tL2Zvby5odG1sIn0sCisgICAgeyJodHRwOi8vd3d3Lmdvb2dsZS5jb20vYmxhaC9i
bG9vP2MjZCIsICIuLi8uLi8uLi9oZWxsby8uL3dvcmxkLmh0bWw/YSNiIiwgdHJ1ZSwgImh0dHA6
Ly93d3cuZ29vZ2xlLmNvbS9oZWxsby93b3JsZC5odG1sP2EjYiJ9LAorICAgIHsiaHR0cDovL3d3
dy5nb29nbGUuY29tL2ZvbyNiYXIiLCAiI2NvbSIsIHRydWUsICJodHRwOi8vd3d3Lmdvb2dsZS5j
b20vZm9vI2NvbSJ9LAorICAgIHsiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsICJIdHRwczppbWFn
ZXMuZ29vZ2xlLmNvbSIsIHRydWUsICJodHRwczovL2ltYWdlcy5nb29nbGUuY29tLyJ9LAorICAg
IHsiZGF0YTpibGFoYmxhaCIsICJodHRwOi8vZ29vZ2xlLmNvbS8iLCB0cnVlLCAiaHR0cDovL2dv
b2dsZS5jb20vIn0sCisgICAgeyJkYXRhOmJsYWhibGFoIiwgImh0dHA6Z29vZ2xlLmNvbSIsIHRy
dWUsICJodHRwOi8vZ29vZ2xlLmNvbS8ifSwKKyAgICB7ImRhdGE6YmxhaGJsYWgiLCAiZmlsZS5o
dG1sIiwgZmFsc2UsICIifSwKKyAgfTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZU0la
RShyZXNvbHZlX2Nhc2VzKTsgaSsrKSB7CisgICAgLy8gOC1iaXQgY29kZSBwYXRoLgorICAgIEdV
UkwgaW5wdXQocmVzb2x2ZV9jYXNlc1tpXS5iYXNlKTsKKyAgICBHVVJMIG91dHB1dCA9IGlucHV0
LlJlc29sdmUocmVzb2x2ZV9jYXNlc1tpXS5yZWxhdGl2ZSk7CisgICAgRVhQRUNUX0VRKHJlc29s
dmVfY2FzZXNbaV0uZXhwZWN0ZWRfdmFsaWQsIG91dHB1dC5pc192YWxpZCgpKTsKKyAgICBFWFBF
Q1RfRVEocmVzb2x2ZV9jYXNlc1tpXS5leHBlY3RlZCwgb3V0cHV0LnNwZWMoKSk7CisKKyAgICAv
LyBXaWRlIGNvZGUgcGF0aC4KKyAgICBHVVJMIGlucHV0dyhyZXNvbHZlX2Nhc2VzW2ldLmJhc2Up
OworICAgIEdVUkwgb3V0cHV0dyA9CisgICAgICAgIGlucHV0LlJlc29sdmUocmVzb2x2ZV9jYXNl
c1tpXS5yZWxhdGl2ZSk7CisgICAgRVhQRUNUX0VRKHJlc29sdmVfY2FzZXNbaV0uZXhwZWN0ZWRf
dmFsaWQsIG91dHB1dHcuaXNfdmFsaWQoKSk7CisgICAgRVhQRUNUX0VRKHJlc29sdmVfY2FzZXNb
aV0uZXhwZWN0ZWQsIG91dHB1dHcuc3BlYygpKTsKKyAgfQorfQorCitURVNUKEdVUkxUZXN0LCBH
ZXRXaXRoRW1wdHlQYXRoKSB7CisgIHN0cnVjdCBUZXN0Q2FzZSB7CisgICAgY29uc3QgY2hhciog
aW5wdXQ7CisgICAgY29uc3QgY2hhciogZXhwZWN0ZWQ7CisgIH0gY2FzZXNbXSA9IHsKKyAgICB7
Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbSIsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIn0sCisgICAg
eyJqYXZhc2NyaXB0OndpbmRvdy5hbGVydChcImhlbGxvLCB3b3JsZFwiKTsiLCAiIn0sCisgICAg
eyJodHRwOi8vd3d3Lmdvb2dsZS5jb20vZm9vL2Jhci5odG1sP2Jhej0yMiIsICJodHRwOi8vd3d3
Lmdvb2dsZS5jb20vIn0sCisgIH07CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWVNJWkUo
Y2FzZXMpOyBpKyspIHsKKyAgICBHVVJMIHVybChjYXNlc1tpXS5pbnB1dCk7CisgICAgR1VSTCBl
bXB0eV9wYXRoID0gdXJsLkdldFdpdGhFbXB0eVBhdGgoKTsKKyAgICBFWFBFQ1RfRVEoY2FzZXNb
aV0uZXhwZWN0ZWQsIGVtcHR5X3BhdGguc3BlYygpKTsKKyAgfQorfQorCitURVNUKEdVUkxUZXN0
LCBSZXBsYWNlbWVudHMpIHsKKyAgLy8gVGhlIHVybCBjYW5vbmljYWxpemVyIHJlcGxhY2VtZW50
IHRlc3Qgd2lsbCBoYW5kbGUgbW9zdCBvZiB0aGVzZSBjYXNlLgorICAvLyBUaGUgbW9zdCBpbXBv
cnRhbnQgdGhpbmcgdG8gZG8gaGVyZSBpcyB0byBjaGVjayB0aGF0IHRoZSBwcm9wZXIKKyAgLy8g
Y2Fub25pY2FsaXplciBnZXRzIGNhbGxlZCBiYXNlZCBvbiB0aGUgc2NoZW1lIG9mIHRoZSBpbnB1
dC4KKyAgc3RydWN0IFJlcGxhY2VDYXNlIHsKKyAgICBjb25zdCBjaGFyKiBiYXNlOworICAgIGNv
bnN0IGNoYXIqIHNjaGVtZTsKKyAgICBjb25zdCBjaGFyKiB1c2VybmFtZTsKKyAgICBjb25zdCBj
aGFyKiBwYXNzd29yZDsKKyAgICBjb25zdCBjaGFyKiBob3N0OworICAgIGNvbnN0IGNoYXIqIHBv
cnQ7CisgICAgY29uc3QgY2hhciogcGF0aDsKKyAgICBjb25zdCBjaGFyKiBxdWVyeTsKKyAgICBj
b25zdCBjaGFyKiByZWY7CisgICAgY29uc3QgY2hhciogZXhwZWN0ZWQ7CisgIH0gcmVwbGFjZV9j
YXNlc1tdID0geworICAgIHsiaHR0cDovL3d3dy5nb29nbGUuY29tL2Zvby9iYXIuaHRtbD9mb28j
YmFyIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIi8iLCAiIiwgIiIsICJodHRwOi8v
d3d3Lmdvb2dsZS5jb20vIn0sCisgICAgeyJodHRwOi8vd3d3Lmdvb2dsZS5jb20vZm9vL2Jhci5o
dG1sP2ZvbyNiYXIiLCAiamF2YXNjcmlwdCIsICIiLCAiIiwgIiIsICIiLCAid2luZG93Lm9wZW4o
J2ZvbycpOyIsICIiLCAiIiwgImphdmFzY3JpcHQ6d2luZG93Lm9wZW4oJ2ZvbycpOyJ9LAorICAg
IHsiZmlsZTovLy9DOi9mb28vYmFyLnR4dCIsICJodHRwIiwgTlVMTCwgTlVMTCwgInd3dy5nb29n
bGUuY29tIiwgIjk5IiwgIi9mb28iLCJzZWFyY2giLCAicmVmIiwgImh0dHA6Ly93d3cuZ29vZ2xl
LmNvbTo5OS9mb28/c2VhcmNoI3JlZiJ9LAorI2lmZGVmIFdJTjMyCisgICAgeyJodHRwOi8vd3d3
Lmdvb2dsZS5jb20vZm9vL2Jhci5odG1sP2ZvbyNiYXIiLCAiZmlsZSIsICIiLCAiIiwgIiIsICIi
LCAiYzpcXCIsICIiLCAiIiwgImZpbGU6Ly8vQzovIn0sCisjZW5kaWYKKyAgfTsKKworICBmb3Ig
KGludCBpID0gMDsgaSA8IEFSUkFZU0laRShyZXBsYWNlX2Nhc2VzKTsgaSsrKSB7CisgICAgY29u
c3QgUmVwbGFjZUNhc2UmIGN1ciA9IHJlcGxhY2VfY2FzZXNbaV07CisgICAgR1VSTCB1cmwoY3Vy
LmJhc2UpOworICAgIHVybC5zZXRQcm90b2NvbChjdXIuc2NoZW1lKTsKKyAgICB1cmwuc2V0VXNl
cihjdXIudXNlcm5hbWUpOworICAgIHVybC5zZXRQYXNzKGN1ci5wYXNzd29yZCk7CisgICAgdXJs
LnNldEhvc3QoY3VyLmhvc3QpOworICAgIHVybC5zZXRQb3J0KFN0cmluZyhjdXIucG9ydCkudG9J
bnQoKSk7CisgICAgdXJsLnNldFBhdGgoY3VyLnBhdGgpOworICAgIHVybC5zZXRRdWVyeShjdXIu
cXVlcnkpOworICAgIHVybC5zZXRSZWYoY3VyLnJlZik7CisKKyAgICBFWFBFQ1RfRVEocmVwbGFj
ZV9jYXNlc1tpXS5leHBlY3RlZCwgdXJsLnNwZWMoKSk7CisgIH0KK30KKworVEVTVChHVVJMVGVz
dCwgUGF0aEZvclJlcXVlc3QpIHsKKyAgc3RydWN0IFRlc3RDYXNlIHsKKyAgICBjb25zdCBjaGFy
KiBpbnB1dDsKKyAgICBjb25zdCBjaGFyKiBleHBlY3RlZDsKKyAgfSBjYXNlc1tdID0geworICAg
IHsiaHR0cDovL3d3dy5nb29nbGUuY29tIiwgIi8ifSwKKyAgICB7Imh0dHA6Ly93d3cuZ29vZ2xl
LmNvbS8iLCAiLyJ9LAorICAgIHsiaHR0cDovL3d3dy5nb29nbGUuY29tL2Zvby9iYXIuaHRtbD9i
YXo9MjIiLCAiL2Zvby9iYXIuaHRtbD9iYXo9MjIifSwKKyAgICB7Imh0dHA6Ly93d3cuZ29vZ2xl
LmNvbS9mb28vYmFyLmh0bWwjcmVmIiwgIi9mb28vYmFyLmh0bWwifSwKKyAgICB7Imh0dHA6Ly93
d3cuZ29vZ2xlLmNvbS9mb28vYmFyLmh0bWw/cXVlcnkjcmVmIiwgIi9mb28vYmFyLmh0bWw/cXVl
cnkifSwKKyAgfTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZU0laRShjYXNlcyk7IGkr
KykgeworICAgIEdVUkwgdXJsKGNhc2VzW2ldLmlucHV0KTsKKyAgICBEZXByZWNhdGVkU3RyaW5n
IHBhdGhfcmVxdWVzdCA9IHVybC5QYXRoRm9yUmVxdWVzdCgpOworICAgIEVYUEVDVF9FUShjYXNl
c1tpXS5leHBlY3RlZCwgcGF0aF9yZXF1ZXN0KTsKKyAgfQorfQorCitURVNUKEdVUkxUZXN0LCBJ
UEFkZHJlc3MpIHsKKyAgc3RydWN0IElQVGVzdCB7CisgICAgY29uc3QgY2hhciogc3BlYzsKKyAg
ICBib29sIGV4cGVjdGVkX2lwOworICB9IGlwX3Rlc3RzW10gPSB7CisgICAgeyJodHRwOi8vd3d3
Lmdvb2dsZS5jb20vIiwgZmFsc2V9LAorICAgIHsiaHR0cDovLzE5Mi4xNjguOS4xLyIsIHRydWV9
LAorICAgIHsiaHR0cDovLzE5Mi4xNjguOS4xLjIvIiwgZmFsc2V9LAorICAgIHsiaHR0cDovLzE5
Mi4xNjgubS4xLyIsIGZhbHNlfSwKKyAgICB7IiIsIGZhbHNlfSwKKyAgICB7InNvbWUgcmFuZG9t
IGlucHV0ISIsIGZhbHNlfSwKKyAgfTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZU0la
RShpcF90ZXN0cyk7IGkrKykgeworICAgIEdVUkwgdXJsKGlwX3Rlc3RzW2ldLnNwZWMpOworICAg
IEVYUEVDVF9FUShpcF90ZXN0c1tpXS5leHBlY3RlZF9pcCwgdXJsLkhvc3RJc0lQQWRkcmVzcygp
KTsKKyAgfQorfQorCitURVNUKEdVUkxUZXN0LCBEb21haW5JcykgeworICBjb25zdCBjaGFyIGdv
b2dsZV9kb21haW5bXSA9ICJnb29nbGUuY29tIjsKKworICBHVVJMIHVybF8xKCJodHRwOi8vd3d3
Lmdvb2dsZS5jb206OTkvZm9vIik7CisgIEVYUEVDVF9UUlVFKHVybF8xLkRvbWFpbklzKGdvb2ds
ZV9kb21haW4pKTsKKworICBHVVJMIHVybF8yKCJodHRwOi8vZ29vZ2xlLmNvbTo5OS9mb28iKTsK
KyAgRVhQRUNUX1RSVUUodXJsXzIuRG9tYWluSXMoZ29vZ2xlX2RvbWFpbikpOworCisgIEdVUkwg
dXJsXzMoImh0dHA6Ly9nb29nbGUuY29tLi9mb28iKTsKKyAgRVhQRUNUX1RSVUUodXJsXzMuRG9t
YWluSXMoZ29vZ2xlX2RvbWFpbikpOworCisgIEdVUkwgdXJsXzQoImh0dHA6Ly9nb29nbGUuY29t
L2ZvbyIpOworICBFWFBFQ1RfRkFMU0UodXJsXzQuRG9tYWluSXMoImdvb2dsZS5jb20uIikpOwor
CisgIEdVUkwgdXJsXzUoImh0dHA6Ly9nb29nbGUuY29tLi9mb28iKTsKKyAgRVhQRUNUX1RSVUUo
dXJsXzUuRG9tYWluSXMoImdvb2dsZS5jb20uIikpOworCisgIEdVUkwgdXJsXzYoImh0dHA6Ly93
d3cuZ29vZ2xlLmNvbS4vZm9vIik7CisgIEVYUEVDVF9UUlVFKHVybF82LkRvbWFpbklzKCIuY29t
LiIpKTsKKworICBHVVJMIHVybF83KCJodHRwOi8vd3d3LmJhbGFiYWxhLmNvbS9mb28iKTsKKyAg
RVhQRUNUX0ZBTFNFKHVybF83LkRvbWFpbklzKGdvb2dsZV9kb21haW4pKTsKKworICBHVVJMIHVy
bF84KCJodHRwOi8vd3d3Lmdvb2dsZS5jb20uY24vZm9vIik7CisgIEVYUEVDVF9GQUxTRSh1cmxf
OC5Eb21haW5Jcyhnb29nbGVfZG9tYWluKSk7CisKKyAgR1VSTCB1cmxfOSgiaHR0cDovL3d3dy5p
YW1ub3Rnb29nbGUuY29tL2ZvbyIpOworICBFWFBFQ1RfRkFMU0UodXJsXzkuRG9tYWluSXMoZ29v
Z2xlX2RvbWFpbikpOworCisgIEdVUkwgdXJsXzEwKCJodHRwOi8vd3d3LmlhbW5vdGdvb2dsZS5j
b20uLi9mb28iKTsKKyAgRVhQRUNUX0ZBTFNFKHVybF8xMC5Eb21haW5JcygiLmNvbSIpKTsKK30K
KworLy8gTmV3bGluZXMgc2hvdWxkIGJlIHN0cmlwcGVkIGZyb20gaW5wdXRzLgorVEVTVChHVVJM
VGVzdCwgTmV3bGluZXMpIHsKKyAgLy8gQ29uc3RydWN0b3IuCisgIEdVUkwgdXJsXzEoIiBcdCBo
dFxudHA6Ly9cdHd3dy5nb29ccmdsZS5jb20vYXNcbmRmIFxuICIpOworICBFWFBFQ1RfRVEoImh0
dHA6Ly93d3cuZ29vZ2xlLmNvbS9hc2RmIiwgdXJsXzEuc3BlYygpKTsKKworICAvLyBSZWxhdGl2
ZSBwYXRoIHJlc29sdmVyLgorICBHVVJMIHVybF8yID0gdXJsXzEuUmVzb2x2ZSgiIFxuIC9mb1x0
b1xyICIpOworICBFWFBFQ1RfRVEoImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9mb28iLCB1cmxfMi5z
cGVjKCkpOworCisgIC8vIE5vdGUgdGhhdCBuZXdsaW5lcyBhcmUgTk9UIHN0cmlwcGVkIGZyb20g
UmVwbGFjZUNvbXBvbmVudHMuCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19920</attachid>
            <date>2008-03-21 01:14:56 -0700</date>
            <delta_ts>2008-03-21 01:15:45 -0700</delta_ts>
            <desc>Fix embed.src and object.data updating</desc>
            <filename>Fix-embed.src-and-object.data-updating.patch</filename>
            <type>text/plain</type>
            <size>11531</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">Y2Q0ZGUxODEwNWVmNjE0ZjI2ODU2MmE5NzU1ZWQ4NjMwZTcyMWQyZApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBjYTBlNjEu
LmQ4MDcwMDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOC0wMy0yMCAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICBNb2RpZnlpbmcgZW1iZWQuc3JjIG9yIG9iamVjdC5kYXRhIGFm
dGVyIGxheW91dAorICAgICAgICBoYXMgbm8gaW1tZWRpYXRlIGVmZmVjdC4KKyAgICAgICAgaHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzAKKworICAgICAgICAqIGZh
c3QvZnJhbWVzL2R5bmFtaWMtZnJhbWUtbG9hZC1hZnRlci1sYXlvdXQtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZyYW1lcy9keW5hbWljLWZyYW1lLWxvYWQtYWZ0ZXItbGF5
b3V0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZnJhbWVzL2R5bmFtaWMtZnJhbWUtcmVw
bGFjZS1hZnRlci1sb2FkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mcmFt
ZXMvZHluYW1pYy1mcmFtZS1yZXBsYWNlLWFmdGVyLWxvYWQuaHRtbDogQWRkZWQuCisKIDIwMDgt
MDMtMjAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbmRlcnMgQ2FybHNzb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1l
cy9keW5hbWljLWZyYW1lLWxvYWQtYWZ0ZXItbGF5b3V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvZnJhbWVzL2R5bmFtaWMtZnJhbWUtbG9hZC1hZnRlci1sYXlvdXQtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNzI2NTcKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9keW5hbWljLWZyYW1lLWxvYWQtYWZ0
ZXItbGF5b3V0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI5IEBACitsYXllciBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0
ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0CisgICAg
ICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkgc2l6ZSA3ODR4MTgKKyAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzM0eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggMzM0OiAiVGhlcmUgc2hvdWxkIGJlIHRocmVlIDEwMHgxMDAgZ3JlZW4gc3F1YXJl
cyBiZWxvdy4iCisgICAgICBSZW5kZXJCbG9jayAoYW5vbnltb3VzKSBhdCAoMCwzNCkgc2l6ZSA3
ODR4MTAwCisgICAgICAgIFJlbmRlclBhcnRPYmplY3Qge09CSkVDVH0gYXQgKDEwLDApIHNpemUg
MTAweDEwMCBbYmdjb2xvcj0jRkYwMDAwXQorICAgICAgICAgIGxheWVyIGF0ICgwLDApIHNpemUg
MTAweDEwMAorICAgICAgICAgICAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAg
ICAgICAgICBsYXllciBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgICAgICAgIFJlbmRlclNW
R1Jvb3Qge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICAgICAgICAgIFJlbmRlclBh
dGgge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xv
cj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAwTDEwMC4wMCwxMDAuMDBM
MC4wMCwxMDAuMDAiXQorICAgICAgICBSZW5kZXJQYXJ0T2JqZWN0IHtFTUJFRH0gYXQgKDEyMCww
KSBzaXplIDEwMHgxMDAgW2JnY29sb3I9I0ZGMDAwMF0KKyAgICAgICAgICBsYXllciBhdCAoMCww
KSBzaXplIDEwMHgxMDAKKyAgICAgICAgICAgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSAxMDB4
MTAwCisgICAgICAgICAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICAgICAgICBS
ZW5kZXJTVkdSb290IHtzdmd9IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgICAgICAgICBS
ZW5kZXJQYXRoIHtyZWN0fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAgW2ZpbGw9e1t0eXBlPVNPTElE
XSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0iTTAuMDAsMC4wMEwxMDAuMDAsMC4wMEwxMDAuMDAs
MTAwLjAwTDAuMDAsMTAwLjAwIl0KKyAgICAgICAgUmVuZGVyUGFydE9iamVjdCB7SUZSQU1FfSBh
dCAoMjMwLDApIHNpemUgMTAweDEwMCBbYmdjb2xvcj0jRkYwMDAwXQorICAgICAgICAgIGxheWVy
IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgICAgICAgUmVuZGVyVmlldyBhdCAoMCwwKSBz
aXplIDEwMHgxMDAKKyAgICAgICAgICBsYXllciBhdCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAg
ICAgICAgIFJlbmRlclNWR1Jvb3Qge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICAg
ICAgICAgIFJlbmRlclBhdGgge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmlsbD17W3R5
cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4wMCwwLjAw
TDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDAsMCkgc2l6ZSAweDAKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNp
emUgMHgwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9keW5hbWljLWZyYW1l
LWxvYWQtYWZ0ZXItbGF5b3V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9keW5hbWlj
LWZyYW1lLWxvYWQtYWZ0ZXItbGF5b3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOTdlZGQyYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJh
bWVzL2R5bmFtaWMtZnJhbWUtbG9hZC1hZnRlci1sYXlvdXQuaHRtbApAQCAtMCwwICsxLDI3IEBA
Cis8c3R5bGU+CitvYmplY3QsIGVtYmVkLCBpZnJhbWUgeworICAgIG1hcmdpbi1sZWZ0OiAxMHB4
OworICAgIHdpZHRoOiAxMDBweDsKKyAgICBoZWlnaHQ6IDEwMHB4OworICAgIGJhY2tncm91bmQ6
IHJlZDsKKyAgICBib3JkZXI6IDBweDsKK30KKzwvc3R5bGU+Cis8Ym9keT4KKyAgICA8cD5UaGVy
ZSBzaG91bGQgYmUgdGhyZWUgMTAweDEwMCBncmVlbiBzcXVhcmVzIGJlbG93LjwvcD4KKzxzY3Jp
cHQ+CisgICAgdmFyIHN2Z0FzRGF0YSA9ICJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYt
ODtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6
ZG1jaUlIZHBaSFJvUFNJeE1EQndlQ0lnYUdWcFoyaDBQU0l4TURCd2VDSSUyQkRRb2dJRHh5WldO
MElIZHBaSFJvUFNJeE1EQndlQ0lnYUdWcFoyaDBQU0l4TURCd2VDSWdabWxzYkQwaVozSmxaVzRp
THo0TkNqd3ZjM1puUGcwSyI7CisKKyAgICB2YXIgb2JqZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgib2JqZWN0Iik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvYmplY3QpOwor
ICAgIG9iamVjdC5kYXRhID0gc3ZnQXNEYXRhOworCisgICAgdmFyIGVtYmVkID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZW1iZWQiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVt
YmVkKTsKKyAgICBlbWJlZC5zcmMgPSBzdmdBc0RhdGE7CisKKyAgICB2YXIgaWZyYW1lID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChpZnJhbWUpOworICAgIGlmcmFtZS5zcmMgPSBzdmdBc0RhdGE7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2R5bmFtaWMtZnJhbWUt
cmVwbGFjZS1hZnRlci1sb2FkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVz
L2R5bmFtaWMtZnJhbWUtcmVwbGFjZS1hZnRlci1sb2FkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTEwZjUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9mcmFtZXMvZHluYW1pYy1mcmFtZS1yZXBsYWNlLWFmdGVyLWxvYWQtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzQgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAor
ICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBS
ZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKKyAgICAgIFJlbmRlckJsb2Nr
IHtQfSBhdCAoMCwwKSBzaXplIDc4NHgxOAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSAzMzR4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMzQ6
ICJUaGVyZSBzaG91bGQgYmUgdGhyZWUgMTAweDEwMCBncmVlbiBzcXVhcmVzIGJlbG93LiIKKyAg
ICAgIFJlbmRlckJsb2NrIChhbm9ueW1vdXMpIGF0ICgwLDM0KSBzaXplIDc4NHgxMDQKKyAgICAg
ICAgUmVuZGVyUGFydE9iamVjdCB7T0JKRUNUfSBhdCAoMTAsMCkgc2l6ZSAxMDB4MTAwIFtiZ2Nv
bG9yPSNGRjAwMDBdCisgICAgICAgICAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAg
ICAgICAgICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgICAgIGxheWVy
IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgICAgICAgUmVuZGVyU1ZHUm9vdCB7c3ZnfSBh
dCAoMCwwKSBzaXplIDEwMHgxMDAKKyAgICAgICAgICAgICAgUmVuZGVyUGF0aCB7cmVjdH0gYXQg
KDAsMCkgc2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0g
W2RhdGE9Ik0wLjAwLDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJd
CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMTEwLDg2KSBzaXplIDR4MTgKKyAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMTEwLDg2KSB3aWR0aCA0OiAiICIKKyAgICAgICAgUmVuZGVyUGFy
dE9iamVjdCB7RU1CRUR9IGF0ICgxMjQsMCkgc2l6ZSAxMDB4MTAwIFtiZ2NvbG9yPSNGRjAwMDBd
CisgICAgICAgICAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisgICAgICAgICAgICBSZW5k
ZXJWaWV3IGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgICAgIGxheWVyIGF0ICgwLDApIHNp
emUgMTAweDEwMAorICAgICAgICAgICAgUmVuZGVyU1ZHUm9vdCB7c3ZnfSBhdCAoMCwwKSBzaXpl
IDEwMHgxMDAKKyAgICAgICAgICAgICAgUmVuZGVyUGF0aCB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAx
MDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAw
LDAuMDBMMTAwLjAwLDAuMDBMMTAwLjAwLDEwMC4wMEwwLjAwLDEwMC4wMCJdCisgICAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoMjI0LDg2KSBzaXplIDR4MTgKKyAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMjI0LDg2KSB3aWR0aCA0OiAiICIKKyAgICAgICAgUmVuZGVyUGFydE9iamVjdCB7SUZS
QU1FfSBhdCAoMjM4LDApIHNpemUgMTAweDEwMCBbYmdjb2xvcj0jRkYwMDAwXQorICAgICAgICAg
IGxheWVyIGF0ICgwLDApIHNpemUgMTAweDEwMAorICAgICAgICAgICAgUmVuZGVyVmlldyBhdCAo
MCwwKSBzaXplIDEwMHgxMDAKKyAgICAgICAgICBsYXllciBhdCAoMCwwKSBzaXplIDEwMHgxMDAK
KyAgICAgICAgICAgIFJlbmRlclNWR1Jvb3Qge3N2Z30gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCisg
ICAgICAgICAgICAgIFJlbmRlclBhdGgge3JlY3R9IGF0ICgwLDApIHNpemUgMTAweDEwMCBbZmls
bD17W3R5cGU9U09MSURdIFtjb2xvcj0jMDA4MDAwXX1dIFtkYXRhPSJNMC4wMCwwLjAwTDEwMC4w
MCwwLjAwTDEwMC4wMCwxMDAuMDBMMC4wMCwxMDAuMDAiXQorICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgMHgwCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4
MApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvZHluYW1pYy1mcmFtZS1yZXBs
YWNlLWFmdGVyLWxvYWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2R5bmFtaWMtZnJh
bWUtcmVwbGFjZS1hZnRlci1sb2FkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNjMzNjU2NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVz
L2R5bmFtaWMtZnJhbWUtcmVwbGFjZS1hZnRlci1sb2FkLmh0bWwKQEAgLTAsMCArMSw0OCBAQAor
PHN0eWxlPgorb2JqZWN0LCBlbWJlZCwgaWZyYW1lIHsKKyAgICBtYXJnaW4tbGVmdDogMTBweDsK
KyAgICB3aWR0aDogMTAwcHg7CisgICAgaGVpZ2h0OiAxMDBweDsKKyAgICBiYWNrZ3JvdW5kOiBy
ZWQ7CisgICAgYm9yZGVyOiAwcHg7Cit9Cis8L3N0eWxlPgorPGJvZHkgb25sb2FkPSJzZXRUaW1l
b3V0KGNvbnRpbnVlVGVzdCwgMCkiPgorICAgIDxwPlRoZXJlIHNob3VsZCBiZSB0aHJlZSAxMDB4
MTAwIGdyZWVuIHNxdWFyZXMgYmVsb3cuPC9wPgorICAgIDxvYmplY3QgZGF0YT0icmVzb3VyY2Vz
L3JlZF9yZWN0LnN2ZyI+PC9vYmplY3Q+CisgICAgPGVtYmVkIHNyYz0icmVzb3VyY2VzL3JlZF9y
ZWN0LnN2ZyIgLz4KKyAgICA8aWZyYW1lIHNyYz0icmVzb3VyY2VzL3JlZF9yZWN0LnN2ZyI+PC9p
ZnJhbWU+CisgICAgPHNjcmlwdD4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKKyAgICB2
YXIgb2JqZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdOwor
ICAgIHZhciBlbWJlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJlbWJlZCIpWzBd
OworICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWZyYW1l
IilbMF07CisgICAgCisgICAgdmFyIGhhdmVTdGFydGVkVGVzdCA9IGZhbHNlOworICAgIAorICAg
IGZ1bmN0aW9uIGxvYWRDb21wbGV0ZWQoZXZlbnQpCisgICAgeworICAgICAgICBpZiAoIWhhdmVT
dGFydGVkVGVzdCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZXZlbnQudGFyZ2V0LmRv
bmVMb2FkaW5nID0gdHJ1ZTsKKyAgICAgICAgaWYgKG9iamVjdC5kb25lTG9hZGluZyAmJiBlbWJl
ZC5kb25lTG9hZGluZyAmJiBpZnJhbWUuZG9uZUxvYWRpbmcpIHsKKyAgICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgb2JqZWN0Lm9u
bG9hZCA9IGxvYWRDb21wbGV0ZWQ7CisgICAgZW1iZWQub25sb2FkID0gbG9hZENvbXBsZXRlZDsK
KyAgICBpZnJhbWUub25sb2FkID0gbG9hZENvbXBsZXRlZDsKKworICAgIGZ1bmN0aW9uIGNvbnRp
bnVlVGVzdCgpCisgICAgeworICAgICAgICBoYXZlU3RhcnRlZFRlc3QgPSB0cnVlOworICAgICAg
ICBvYmplY3Quc2V0QXR0cmlidXRlKCJkYXRhIiwgInJlc291cmNlcy9ncmVlbl9yZWN0LnN2ZyIp
OworICAgICAgICBlbWJlZC5zZXRBdHRyaWJ1dGUoInNyYyIsICJyZXNvdXJjZXMvZ3JlZW5fcmVj
dC5zdmciKTsKKyAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgic3JjIiwgInJlc291cmNlcy9n
cmVlbl9yZWN0LnN2ZyIpOworICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTE3YzVlZi4u
YjRjNzliZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAwOC0wMy0yMCAgRXJpYyBTZWlkZWwgIDxlcmljQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTW9kaWZ5aW5nIGVtYmVkLnNyYyBvciBvYmplY3QuZGF0YSBhZnRlciBsYXlvdXQKKyAgICAg
ICAgaGFzIG5vIGltbWVkaWF0ZSBlZmZlY3QuCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MjcwCisKKyAgICAgICAgVGVzdHM6CisgICAgICAgICAtIGZh
c3QvZnJhbWVzL2R5bmFtaWMtZnJhbWUtbG9hZC1hZnRlci1sYXlvdXQuaHRtbAorICAgICAgICAg
LSBmYXN0L2ZyYW1lcy9keW5hbWljLWZyYW1lLXJlcGxhY2UtYWZ0ZXItbG9hZC5odG1sCisKKyAg
ICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVtYmVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBjYWxsIHNldE5lZWRzTGF5b3V0
CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBjYWxsIHNldE5lZWRz
TGF5b3V0CisKIDIwMDgtMDMtMjAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVu
dC5jcHAKaW5kZXggZGY3MzI5My4uMmIyNGU4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hU
TUxFbWJlZEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNw
cApAQCAtMTA4LDkgKzEwOCwxMyBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKICAgICAgICAgaW50IHBvcyA9IG1fc2Vy
dmljZVR5cGUuZmluZCgiOyIpOwogICAgICAgICBpZiAocG9zICE9IC0xKQogICAgICAgICAgICAg
bV9zZXJ2aWNlVHlwZSA9IG1fc2VydmljZVR5cGUubGVmdChwb3MpOwotICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGNvZGVBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyKQorICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvZGVBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBz
cmNBdHRyKSB7CiAgICAgICAgIG1fdXJsID0gcGFyc2VVUkwodmFsdWUuc3RyaW5nKCkpOwotICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBwbHVnaW5wYWdlQXR0ciB8fCBhdHRyLT5uYW1lKCkg
PT0gcGx1Z2luc3BhZ2VBdHRyKQorICAgICAgICBpZiAocmVuZGVyZXIoKSkgeworICAgICAgICAg
ICAgbV9uZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIHNldENoYW5nZWQoKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHBsdWdpbnBhZ2VBdHRy
IHx8IGF0dHItPm5hbWUoKSA9PSBwbHVnaW5zcGFnZUF0dHIpCiAgICAgICAgIG1fcGx1Z2luUGFn
ZSA9IHZhbHVlOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBoaWRkZW5BdHRyKSB7CiAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS5zdHJpbmcoKSwgInllcyIpIHx8IGVx
dWFsSWdub3JpbmdDYXNlKHZhbHVlLnN0cmluZygpLCAidHJ1ZSIpKSB7CkBAIC0yMDEsNiArMjA1
LDE1IEBAIHZvaWQgSFRNTEVtYmVkRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiAgICAg
SFRNTFBsdWdJbkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKIH0KIAordm9pZCBIVE1M
RW1iZWRFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaCkKK3sKKyAgICBpZiAobV9u
ZWVkV2lkZ2V0VXBkYXRlICYmIHJlbmRlcmVyKCkpIHsKKyAgICAgICAgZGV0YWNoKCk7CisgICAg
ICAgIGF0dGFjaCgpOworICAgIH0KKyAgICBIVE1MUGx1Z0luRWxlbWVudDo6cmVjYWxjU3R5bGUo
Y2gpOworfQorCiB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmli
dXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCiB7CiAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6
OmF0dHJpYnV0ZUNoYW5nZWQoYXR0ciwgcHJlc2VydmVEZWNscyk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1l
bnQuaAppbmRleCA1YzZjZTY3Li42Zjk3NjZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRN
TEVtYmVkRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgKQEAg
LTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1
bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmly
dHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xz
ID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CiAg
ICAgCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0Owog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwIGIvV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAppbmRleCAwNDc2MGZhLi4yMTdhM2I2IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKQEAgLTEwNCw4ICsxMDQsMTAgQEAgdm9pZCBIVE1M
T2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRy
KQogICAgICAgICAgIG1faW1hZ2VMb2FkZXIuY2xlYXIoKTsKICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBkYXRhQXR0cikgewogICAgICAgICBtX3VybCA9IHBhcnNlVVJMKHZhbCk7Ci0g
ICAgICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICAgIG1fbmVlZFdpZGdldFVwZGF0ZSA9IHRy
dWU7CisgICAgICAgIGlmIChyZW5kZXJlcigpKSB7CisgICAgICAgICAgICBtX25lZWRXaWRnZXRV
cGRhdGUgPSB0cnVlOworICAgICAgICAgICAgc2V0Q2hhbmdlZCgpOworICAgICAgICB9CiAgICAg
ICAgIGlmIChyZW5kZXJlcigpICYmIGlzSW1hZ2VUeXBlKCkpIHsKICAgICAgICAgICBpZiAoIW1f
aW1hZ2VMb2FkZXIpCiAgICAgICAgICAgICAgIG1faW1hZ2VMb2FkZXIuc2V0KG5ldyBIVE1MSW1h
Z2VMb2FkZXIodGhpcykpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>