<?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>38296</bug_id>
          
          <creation_ts>2010-04-28 17:21:54 -0700</creation_ts>
          <short_desc>Import Sputnik JavaScript test suite</short_desc>
          <delta_ts>2010-04-29 17:11: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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>218703</commentid>
    <comment_count>0</comment_count>
      <attachid>54639</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-28 17:21:54 -0700</bug_when>
    <thetext>Created attachment 54639
translation script

Some notes:
- This contains both conformance tests that the web page runs, and other tests from source checkout.
- It would be better to use run-javascriptcore-tests for these tests, but also more difficult to make a nice test runner. Someone can do that later.
- Sputnik checkout contains tests that need to be processed before use. I&apos;ve processed them to something like script-tests, but monolithic for better loading speed.
- Sputnik tests often have several subtests, but bail out after the first error. There seems to be work in progress to distinguish hard failures from simple ones, and some tests use FAIL and ERROR distinctly - but since Google&apos;s own runner doesn&apos;t seem to distinguish those, I also didn&apos;t.
- Several Unicode tests are disabled, because they are too slow due to iterating lots of code points.

To import the tests, one needs to get a source checkout as below, edit sputnik.py, and run the attached script.

-    self.test_root = path.join(root, &apos;tests&apos;, &apos;Conformance&apos;)
+    self.test_root = path.join(root, &apos;tests&apos;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218710</commentid>
    <comment_count>1</comment_count>
      <attachid>54642</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-28 17:33:30 -0700</bug_when>
    <thetext>Created attachment 54642
partial patch

The complete patch is 23 megabytes, uploading a part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218712</commentid>
    <comment_count>2</comment_count>
      <attachid>54642</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-28 17:36:03 -0700</bug_when>
    <thetext>Comment on attachment 54642
partial patch

rs=me

Is there a way to reduce the total amount of boilerplate? Since this suite was made by the V8 team, I assume that the failures are JavaScriptCore-specific, so we need to expect success on the Chromium platform. How will we do that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218717</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-28 17:45:15 -0700</bug_when>
    <thetext>&gt; Is there a way to reduce the total amount of boilerplate?

It was my intentional choice to have monolithic tests for faster loads (but I didn&apos;t measure how much that helps). But I don&apos;t feel very strongly about either approach - hopefully, these tests will be moved to run-javascriptcore-tests in foreseeable future.

&gt; we need to expect success on the Chromium platform. How will we do that?

Someone from Chromium team usually updates expectations later, since build.webkit.org doesn&apos;t list Chromium results, as far as I can tell. I&apos;m quite worried about timeouts on slower bots though - there are several tests that took noticeable time on my Mac Pro.

V8 fails more of these tests than JSC does, according to &lt;http://sputnik.googlelabs.com/compare&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219160</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-29 13:47:06 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/58534&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219172</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-29 14:07:48 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/58534 might have broken GTK Linux 64-bit Release and Qt Linux Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/58533
http://trac.webkit.org/changeset/58534</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219190</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-29 14:36:22 -0700</bug_when>
    <thetext>Added the whole directory to Skipped list, since there are mysterious (and different) failures on all platforms besides SnowLeopard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219281</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-29 17:01:46 -0700</bug_when>
    <thetext>Paths in the test suite are way too long for svn on Windows. Subversion only supports up to 256 or 260 when used with relative paths, but up to 32K with absolute paths. I had to shorten the paths manually for checkout to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219286</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-29 17:11:36 -0700</bug_when>
    <thetext>Filed http://code.google.com/p/sputniktests/issues/detail?id=25</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>54639</attachid>
            <date>2010-04-28 17:21:54 -0700</date>
            <delta_ts>2010-04-28 17:21:54 -0700</delta_ts>
            <desc>translation script</desc>
            <filename>translate-sputnik</filename>
            <type>text/plain</type>
            <size>3915</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsCgp1c2UgRmluZEJpbjsKdXNlIGxpYiAkRmluZEJpbjo6QmluOwoKdXNl
IEZpbGU6OkJhc2VuYW1lOwp1c2UgRmlsZTo6Q29weTsKdXNlIEZpbGU6OkZpbmQ7CnVzZSBGaWxl
OjpQYXRoOwp1c2UgR2V0b3B0OjpMb25nOwp1c2Ugd2Via2l0ZGlyczsKCnN1YiBkaXJlY3RvcnlG
aWx0ZXI7CnN1YiBmaW5kVGVzdHMoJCk7CgpteSAkcmVzdWx0ID0gR2V0T3B0aW9ucygKICAgICJo
ZWxwIiAgICAgICA9PiBcJHNob3dIZWxwLAopOwoKaWYgKCEkcmVzdWx0IHx8ICRzaG93SGVscCkg
ewogICAgcHJpbnQgU1RERVJSIGJhc2VuYW1lKCQwKSAuICIgWy1ofC0taGVscF0gW3BhdGggdG8g
dXBzdHJlYW0gY2hlY2tvdXQgZGlyZWN0b3J5XVxuIjsKICAgIGV4aXQgMTsKfQoKc2V0Q29uZmln
dXJhdGlvbigpOwpteSAkcHJvZHVjdERpciA9IHByb2R1Y3REaXIoKTsKCmNoZGlyV2ViS2l0KCk7
CgpteSAkc3B1dG5pa1BhdGggPSAiTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrdGVzdHMtcmVh
ZC1vbmx5IjsKaWYgKHNjYWxhcihAQVJHVikgIT0gMCkgewogICAgJHNwdXRuaWtQYXRoID0gQEFS
R1ZbMF07Cn0KCm15ICRvdXRwdXREaXJlY3RvcnkgPSAiTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0
bmlrIjsKCm1rcGF0aCgkb3V0cHV0RGlyZWN0b3J5KTsKY29weSgiJHNwdXRuaWtQYXRoL0FVVEhP
UlMiLCAiJG91dHB1dERpcmVjdG9yeS9BVVRIT1JTIik7CmNvcHkoIiRzcHV0bmlrUGF0aC9MSUNF
TlNFIiwgIiRvdXRwdXREaXJlY3RvcnkvTElDRU5TRSIpOwoKb3BlbiBTUFVUTklLX0ZSQU1FV09S
SywgIj4kc3B1dG5pa1BhdGgvbGliL2ZyYW1ld29yay5qcyIgb3IgZGllICJDYW5ub3Qgb3Zlcndy
aXRlIGZyYW1ld29yay5qcyI7CmNsb3NlIFNQVVROSUtfRlJBTUVXT1JLOwoKbXkgQHRlc3RQYXRo
cyA9IGZpbmRUZXN0cygkc3B1dG5pa1BhdGgpOwoKZm9yIG15ICR0ZXN0UGF0aCAoQHRlc3RQYXRo
cykgewogICAgbXkgKCR0ZXN0bmFtZSwgJHBhdGgsICRzdWZmaXgpID0gZmlsZXBhcnNlKCR0ZXN0
UGF0aCwgIi5qcyIpOwogICAgJHBhdGggPX4gcy8uKlwvdGVzdHNcLyguKikvXDEvOwogICAgbWtw
YXRoKCIkb3V0cHV0RGlyZWN0b3J5LyRwYXRoIik7CgogICAgbXkgJG91dHB1dE5hbWUgPSAiJG91
dHB1dERpcmVjdG9yeS8kcGF0aCR0ZXN0bmFtZS5odG1sIjsKCiAgICBwcmludCAiJG91dHB1dE5h
bWVcbiI7CiAgICBvcGVuIEhUTUwsICI+JG91dHB1dE5hbWUiIG9yIGRpZSAiQ2Fubm90IG9wZW4g
b3V0cHV0IGZpbGUiOwoKICAgIHByaW50IEhUTUwgPDxFT0YKPGh0bWw+CjxoZWFkPgo8bWV0YSBj
aGFyc2V0PSd1dGYtOCc+CjxzdHlsZT4KLnBhc3MgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAg
ICBjb2xvcjogZ3JlZW47Cn0KLmZhaWwgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xv
cjogcmVkOwp9Cjwvc3R5bGU+Cgo8c2NyaXB0PgppZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQogICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwoKZnVuY3Rpb24gU3B1
dG5pa0Vycm9yKG1lc3NhZ2UpCnsKICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Cn0KClNwdXRu
aWtFcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKQp7CiAgICByZXR1cm4gJ1Nw
dXRuaWtFcnJvcjogJyArIHRoaXMubWVzc2FnZTsKfTsKCnZhciBzcHV0bmlrRXhjZXB0aW9uOwoK
ZnVuY3Rpb24gdGVzdFByaW50KG1zZykKewogICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFw
cGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5h
bWVzcGFjZSAKICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cn0KCmZ1bmN0aW9u
IGVzY2FwZUhUTUwodGV4dCkKewogICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC8m
L2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsKfQoKZnVuY3Rpb24gcHJpbnRUZXN0
UGFzc2VkKG1zZykKewogICAgdGVzdFByaW50KCc8c3Bhbj48c3BhbiBjbGFzcz0icGFzcyI+UEFT
Uzwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Cn0KCmZ1bmN0aW9uIHBy
aW50VGVzdEZhaWxlZChtc2cpCnsKICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4gY2xhc3M9ImZh
aWwiPkZBSUw8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOwp9CgpmdW5j
dGlvbiB0ZXN0RmFpbGVkKG1zZykKewogICAgdGhyb3cgbmV3IFNwdXRuaWtFcnJvcihtc2cpOwp9
Cgp2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cjwvc2NyaXB0PgoKPC9oZWFkPgo8Ym9k
eT4KPHA+JHRlc3RuYW1lPC9wPgo8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KPHNjcmlwdD4KdHJ5
IHsKRU9GCjsKICAgIGNoZGlyICRzcHV0bmlrUGF0aCBvciBkaWU7CiAgICBteSAkcHJvY2Vzc2Vk
VGVzdCA9IGAvdXNyL2Jpbi9weXRob24gdG9vbHMvc3B1dG5pay5weSAtLWNvbW1hbmQganNjIC0t
Y2F0ICRwYXRoJHRlc3RuYW1lYDsKICAgIGNoZGlyV2ViS2l0KCk7CiAgICBwcmludCBIVE1MICRw
cm9jZXNzZWRUZXN0OwoKICAgIG15ICRleHBlY3RlZEZhaWx1cmUgPSAiMCI7CiAgICBpZiAoJHBy
b2Nlc3NlZFRlc3QgPX4vXEBuZWdhdGl2ZS8pIHsKICAgICAgICAkZXhwZWN0ZWRGYWlsdXJlID0g
IjEiOwogICAgfQoKICAgIHByaW50IEhUTUwgPDxFT0YKfSBjYXRjaCAoZXgpIHsKICAgIHNwdXRu
aWtFeGNlcHRpb24gPSBleDsKfQoKdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cjwvc2Ny
aXB0PgoKPHNjcmlwdD4KRU9GCjsKCiAgICBpZiAoJGV4cGVjdGVkRmFpbHVyZSkgewogICAgICAg
IHByaW50IEhUTUwgPDxFT0YKaWYgKCFzdWNjZXNzZnVsbHlQYXJzZWQpCiAgICBwcmludFRlc3RQ
YXNzZWQoJ0V4cGVjdGVkIHBhcnNpbmcgZmFpbHVyZScpOwplbHNlIGlmIChzcHV0bmlrRXhjZXB0
aW9uKQogICAgcHJpbnRUZXN0UGFzc2VkKHNwdXRuaWtFeGNlcHRpb24pOwplbHNlCiAgICBwcmlu
dFRlc3RGYWlsZWQoIk5vIGVycm9yIGRldGVjdGVkIik7CkVPRgo7IH0gZWxzZSB7CiAgICAgICAg
cHJpbnQgSFRNTCA8PEVPRgppZiAoIXN1Y2Nlc3NmdWxseVBhcnNlZCkKICAgIHByaW50VGVzdEZh
aWxlZCgnc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIG5vdCBzZXQnKTsKZWxzZSBpZiAoc3B1dG5pa0V4
Y2VwdGlvbikKICAgIHByaW50VGVzdEZhaWxlZChzcHV0bmlrRXhjZXB0aW9uKTsKZWxzZQogICAg
cHJpbnRUZXN0UGFzc2VkKCIiKTsKRU9GCjsgfQoKICAgIHByaW50IEhUTUwgPDxFT0YKdGVzdFBy
aW50KCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVURTwvc3Bhbj4nKTsKPC9z
Y3JpcHQ+CjwvYm9keT4KPC9odG1sPgpFT0YKOwogICAgY2xvc2UgSFRNTDsKfQoKc3ViIGRpcmVj
dG9yeUZpbHRlcgp7CiAgICByZXR1cm4gKCkgaWYgYmFzZW5hbWUoJEZpbGU6OkZpbmQ6OmRpcikg
ZXEgIi5zdm4iOwogICAgcmV0dXJuIEBfOwp9CgpzdWIgZmluZFRlc3RzKCQpCnsKICAgIG15ICgk
cGF0aCkgPSBAXzsKICAgIG15IEB0ZXN0RmlsZXM7CgogICAgJHBhdGggPSAkcGF0aCAuICIvdGVz
dHMiOwoKICAgIHByaW50ICJMb29raW5nIGZvciB0ZXN0cyBpbiAiIC4gICRwYXRoIC4gIlxuIjsK
CiAgICBteSAkZmlsZUZpbHRlciA9IHN1YiB7CiAgICAgICAgcHVzaCBAdGVzdEZpbGVzLCAkRmls
ZTo6RmluZDo6bmFtZSBpZiBzdWJzdHIoJF8sIC0zKSBlcSAiLmpzIjsKICAgIH07CgogICAgZmlu
ZCh7IHByZXByb2Nlc3MgPT4gXCZkaXJlY3RvcnlGaWx0ZXIsIHdhbnRlZCA9PiAkZmlsZUZpbHRl
ciB9LCAkcGF0aCk7CgogICAgcmV0dXJuIEB0ZXN0RmlsZXM7Cn0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54642</attachid>
            <date>2010-04-28 17:33:30 -0700</date>
            <delta_ts>2010-04-28 17:36:02 -0700</delta_ts>
            <desc>partial patch</desc>
            <filename>sputnik.txt</filename>
            <type>text/plain</type>
            <size>103997</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU4MzE5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMDQtMjEgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkK
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzgyOTYK
KyAgICAgICAgSW1wb3J0IFNwdXRuaWsgSmF2YVNjcmlwdCB0ZXN0IHN1aXRlCisKKyAgICAgICAg
KiBmYXN0L2pzL3NwdXRuaWs6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvc3B1dG5pay9BVVRI
T1JTOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3NwdXRuaWsvQ29uZm9ybWFuY2U6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvanMvc3B1dG5pay9JbXBsZW1lbnRhdGlvbl9EaWFnbm9zdGljczog
QWRkZWQuCisgICAgICAgICogZmFzdC9qcy9zcHV0bmlrL0xJQ0VOU0U6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pz
L3NwdXRuaWsvVW5pY29kZTogQWRkZWQuCisKKyAgICAgICAgKiBmYXN0L2pzL3NjcmlwdC10ZXN0
cy9zcHV0bmlrLVMxNS40LjQuMTJfQTNfVDMuanM6IERlbGV0ZWQuCisgICAgICAgICogZmFzdC9q
cy9zcHV0bmlrLVMxNS40LjQuMTJfQTNfVDMtZXhwZWN0ZWQudHh0OiBEZWxldGVkLgorICAgICAg
ICAqIGZhc3QvanMvc3B1dG5pay1TMTUuNC40LjEyX0EzX1QzLmh0bWw6IERlbGV0ZWQuCisKIDIw
MTAtMDQtMjcgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9q
cy9zY3JpcHQtdGVzdHMvc3B1dG5pay1TMTUuNC40LjEyX0EzX1QzLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL3NwdXRuaWstUzE1LjQuNC4xMl9BM19U
My5qcwkocmV2aXNpb24gNTgzMTkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0
cy9zcHV0bmlrLVMxNS40LjQuMTJfQTNfVDMuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAs
MCBAQAotLyoKLSAgICBDb3B5cmlnaHQgMjAwOSB0aGUgU3B1dG5payBhdXRob3JzLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICAgIAotICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAgIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAg
ICBtZXQ6Ci0gICAgCi0gICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gICAgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICAgICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCi0gICAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gICAgICAgICAgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAgICAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgICAgICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gICAgCi0g
ICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gICAgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAgICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
ICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICAgIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICAgIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0qLwotCi1kZXNjcmlwdGlvbignU3B1dG5payB0ZXN0IFMxNS40LjQuMTJfQTNf
VDMuJyk7Ci0KLSRFUlJPUiA9IHRlc3RGYWlsZWQ7Ci0KLS8qKgotICogQG5hbWU6IFMxNS40LjQu
MTJfQTNfVDM7Ci0gKiBAc2VjdGlvbjogMTUuNC40LjEyOwotICogQGFzc2VydGlvbjogQ2hlY2sg
VG9VaW50MzIobGVuZ3RoKSBmb3Igbm9uIEFycmF5IG9iamVjdHM7Ci0gKiBAZGVzY3JpcHRpb246
IGxlbmd0aCBpcyBhcmJpdHJhcmlseTsgCi0qLwotCi12YXIgb2JqID0ge307Ci1vYmouc3BsaWNl
ID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTsKLW9ials0Mjk0OTY3Mjk0XSA9ICJ4IjsKLW9iai5s
ZW5ndGggPSAtMTsKLXZhciBhcnIgPSBvYmouc3BsaWNlKDQyOTQ5NjcyOTQsMSk7Ci0KLS8vQ0hF
Q0sjMQotaWYgKGFyci5sZW5ndGggIT09IDEpIHsKLSAgJEVSUk9SKCcjMTogdmFyIG9iaiA9IHt9
OyBvYmouc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTsgb2JqWzQyOTQ5NjcyOTRdID0g
IngiOyBvYmoubGVuZ3RoID0gLTE7IHZhciBhcnIgPSBvYmouc3BsaWNlKDQyOTQ5NjcyOTQsMSk7
IGFyci5sZW5ndGggPT09IDEuIEFjdHVhbDogJyArIChhcnIubGVuZ3RoKSk7Ci19Ci0KLS8vQ0hF
Q0sjMgotaWYgKGFyclswXSAhPT0gIngiKSB7Ci0gICAkRVJST1IoJyMyOiB2YXIgb2JqID0ge307
IG9iai5zcGxpY2UgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlOyBvYmpbNDI5NDk2NzI5NF0gPSAi
eCI7IG9iai5sZW5ndGggPSAxOyB2YXIgYXJyID0gb2JqLnNwbGljZSg0Mjk0OTY3Mjk0LDEpOyBh
cnJbMF0gPT09ICJ4Ii4gQWN0dWFsOiAnICsgKGFyclswXSkpOwotfSAKLQotLy9DSEVDSyMzCi1p
ZiAob2JqLmxlbmd0aCAhPT0gNDI5NDk2NzI5NCkgewotICAgJEVSUk9SKCcjMzogdmFyIG9iaiA9
IHt9OyBvYmouc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTsgb2JqWzQyOTQ5NjcyOTRd
ID0gIngiOyBvYmoubGVuZ3RoID0gMTsgdmFyIGFyciA9IG9iai5zcGxpY2UoNDI5NDk2NzI5NCwx
KTsgb2JqLmxlbmd0aCA9PT0gNDI5NDk2NzI5NC4gQWN0dWFsOiAnICsgKG9iai5sZW5ndGgpKTsK
LX0KLQotLy9DSEVDSyM0Ci1pZiAob2JqWzQyOTQ5NjcyOTRdICE9PSB1bmRlZmluZWQpIHsKLSAg
ICRFUlJPUignIzQ6IHZhciBvYmogPSB7fTsgb2JqLnNwbGljZSA9IEFycmF5LnByb3RvdHlwZS5z
cGxpY2U7IG9ials0Mjk0OTY3Mjk0XSA9ICJ4Ijsgb2JqLmxlbmd0aCA9IDE7IHZhciBhcnIgPSBv
Ymouc3BsaWNlKDQyOTQ5NjcyOTQsMSk7IG9ials0Mjk0OTY3Mjk0XSA9PT0gdW5kZWZpbmVkLiBB
Y3R1YWw6ICcgKyAob2JqWzQyOTQ5NjcyOTRdKSk7Ci19IAotCi12YXIgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay1TMTUuNC40LjEy
X0EzX1QzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Nw
dXRuaWstUzE1LjQuNC4xMl9BM19UMy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU4MzE5KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrLVMxNS40LjQuMTJfQTNfVDMtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzAsMCBAQAotU3B1dG5payB0ZXN0IFMxNS40LjQuMTJf
QTNfVDMuCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1QQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9qcy9zcHV0bmlrLVMxNS40LjQuMTJfQTNfVDMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3NwdXRuaWstUzE1LjQuNC4xMl9BM19UMy5odG1sCShyZXZpc2lvbiA1ODMx
OSkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay1TMTUuNC40LjEyX0EzX1QzLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KLTxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9zcHV0bmlrLVMxNS40LjQuMTJfQTNfVDMuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5
PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24v
UzExLjEzLjJfUjIuM19UNS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19UNS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9T
MTEuMTMuMl9SMi4zX1Q1LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBA
CitTMTEuMTMuMl9SMi4zX1Q1CisKK1BBU1MgCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzEyLjYuNF9SMS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMi42LjRf
UjEuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdy
ZXNzaW9uL1MxMi42LjRfUjEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjggQEAKKzxo
dG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSd1dGYtOCc+Cis8c3R5bGU+CisucGFzcyB7Cisg
ICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IGdyZWVuOworfQorLmZhaWwgeworICAg
IGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiByZWQ7Cit9Cis8L3N0eWxlPgorCis8c2Ny
aXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIFNwdXRuaWtFcnJvcihtZXNzYWdlKQor
eworICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Cit9CisKK1NwdXRuaWtFcnJvci5wcm90b3R5
cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKQoreworICAgIHJldHVybiAnU3B1dG5pa0Vycm9yOiAn
ICsgdGhpcy5tZXNzYWdlOworfTsKKwordmFyIHNwdXRuaWtFeGNlcHRpb247CisKK2Z1bmN0aW9u
IHRlc3RQcmludChtc2cpCit7CisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJzcGFuIik7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRD
aGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0IGZpcnN0IHNvIFhIVE1MIGtub3dzIHRoZSBuYW1lc3Bh
Y2UgCisgICAgc3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsKK30KKworZnVuY3Rpb24g
ZXNjYXBlSFRNTCh0ZXh0KQoreworICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCkucmVwbGFjZSgv
Ji9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7Iik7Cit9CisKK2Z1bmN0aW9uIHByaW50
VGVzdFBhc3NlZChtc2cpCit7CisgICAgdGVzdFByaW50KCc8c3Bhbj48c3BhbiBjbGFzcz0icGFz
cyI+UEFTUzwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Cit9CisKK2Z1
bmN0aW9uIHByaW50VGVzdEZhaWxlZChtc2cpCit7CisgICAgdGVzdFByaW50KCc8c3Bhbj48c3Bh
biBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+
Jyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWlsZWQobXNnKQoreworICAgIHRocm93IG5ldyBTcHV0
bmlrRXJyb3IobXNnKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworPC9z
Y3JpcHQ+CisKKzwvaGVhZD4KKzxib2R5PgorPHA+UzEyLjYuNF9SMTwvcD4KKzxkaXYgaWQ9J2Nv
bnNvbGUnPjwvZGl2PgorPHNjcmlwdD4KK3RyeSB7CisKKy8qKgorICogQG5hbWU6IFMxMi42LjRf
UjE7CisgKiBAc2VjdGlvbjogMTIuNi40LCA5Ljk7CisgKiBAZGVzY3JpcHRpb246IFRoZSBmb3It
aW4gc3RhdGVtZW50IG11c3Qgbm90IHRocm93IFR5cGVFcnJvciBmb3IgdW5kZWZpbmVkCisgKiB2
YWx1ZXMsIGNhdXNlIGl0J3MgYSBidWcgaW4gdGhlIFN0YW5kYXJkOyAKKyovCisKKy8vIENIRUNL
IzEKK3RyeXsKKyAgdmFyIHgxID0gMTsKKyAgZm9yKHZhciB5MSBpbiB1bmRlZmluZWQpIHgxID0g
MjsKKyAgaWYgKHgxID09PSAxKSB7CisgICAgdGVzdFByaW50KCIjMTogcGFzc2VkIik7CisgIH0g
ZWxzZSB7CisgICAgdGVzdEZhaWxlZCgiIzE6IFRoZSBmb3ItaW4gc3RhdGVtZW50IG11c3Qgbm90
IGZ1bGxmaWxsLCB0aGUgdmFsdWUgd2FzIGNoYW5nZWQiKTsKKyAgfQorfSAKK2NhdGNoKGUpewor
ICBpZihlIGluc3RhbmNlb2YgVHlwZUVycm9yKXsKKyAgICB0ZXN0RmFpbGVkKCIjMTogVGhlIGZv
ci1pbiBzdGF0ZW1lbnQgbXVzdCBub3QgdGhyb3cgVHlwZUVycm9yIGZvciB1bmRlZmluZWQgdmFs
dWVzLCBjYXVzZSBpdCdzIGEgYnVnIGluIHRoZSBTdGFuZGFyZCIpOworICB9IGVsc2UgeworICAg
IHRlc3RGYWlsZWQoIiMxOiBUaGUgZm9yLWluIHN0YXRlbWVudCBtdXN0IG5vdCB0aHJvdyBFcnJv
ciBmb3IgdW5kZWZpbmVkIHZhbHVlcywgY2F1c2UgaXQncyBhIGJ1ZyBpbiB0aGUgU3RhbmRhcmQi
KTsKKyAgfQorfQorCisvLyBDSEVDSyMyCit0cnl7CisgIHZhciB4MiA9IDE7CisgIGZvcih2YXIg
eTIgaW4gdGhpcy5mb28pIHgyID0gMjsKKyAgaWYgKHgyID09PSAxKSB7CisgICAgdGVzdFByaW50
KCIjMTogcGFzc2VkIik7CisgIH0gZWxzZSB7CisgICAgdGVzdEZhaWxlZCgiIzE6IFRoZSBmb3It
aW4gc3RhdGVtZW50IG11c3Qgbm90IGZ1bGxmaWxsLCB0aGUgdmFsdWUgd2FzIGNoYW5nZWQiKTsK
KyAgfQorfSAKK2NhdGNoKGUpeworICBpZihlIGluc3RhbmNlb2YgVHlwZUVycm9yKXsKKyAgICB0
ZXN0RmFpbGVkKCIjMTogVGhlIGZvci1pbiBzdGF0ZW1lbnQgbXVzdCBub3QgdGhyb3cgVHlwZUVy
cm9yIGZvciB1bmRlZmluZWQgdmFsdWVzLCBjYXVzZSBpdCdzIGEgYnVnIGluIHRoZSBTdGFuZGFy
ZCIpOworICB9IGVsc2UgeworICAgIHRlc3RGYWlsZWQoIiMxOiBUaGUgZm9yLWluIHN0YXRlbWVu
dCBtdXN0IG5vdCB0aHJvdyBFcnJvciBmb3IgdW5kZWZpbmVkIHZhbHVlcywgY2F1c2UgaXQncyBh
IGJ1ZyBpbiB0aGUgU3RhbmRhcmQiKTsKKyAgfQorfQorCit9IGNhdGNoIChleCkgeworICAgIHNw
dXRuaWtFeGNlcHRpb24gPSBleDsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK2lmICghc3VjY2Vzc2Z1bGx5UGFyc2VkKQorICAgIHBy
aW50VGVzdEZhaWxlZCgnc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIG5vdCBzZXQnKTsKK2Vsc2UgaWYg
KHNwdXRuaWtFeGNlcHRpb24pCisgICAgcHJpbnRUZXN0RmFpbGVkKHNwdXRuaWtFeGNlcHRpb24p
OworZWxzZQorICAgIHByaW50VGVzdFBhc3NlZCgiIik7Cit0ZXN0UHJpbnQoJzxiciAvPjxzcGFu
IGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9T
MTEuMTMuMl9SMi4zX1Q3LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1Q3LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1Mx
MS4xMy4yX1IyLjNfVDctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAK
K1MxMS4xMy4yX1IyLjNfVDcKKworUEFTUyAKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1QxMS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1Mx
MS4xMy4yX1IyLjNfVDExLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pz
L3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1QxMS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEwNiBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4K
KzxzdHlsZT4KKy5wYXNzIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogZ3Jl
ZW47Cit9CisuZmFpbCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHJlZDsK
K30KKzwvc3R5bGU+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gU3B1
dG5pa0Vycm9yKG1lc3NhZ2UpCit7CisgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKK30KKwor
U3B1dG5pa0Vycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpCit7CisgICAgcmV0
dXJuICdTcHV0bmlrRXJyb3I6ICcgKyB0aGlzLm1lc3NhZ2U7Cit9OworCit2YXIgc3B1dG5pa0V4
Y2VwdGlvbjsKKworZnVuY3Rpb24gdGVzdFByaW50KG1zZykKK3sKKyAgICB2YXIgc3BhbiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhU
TUwga25vd3MgdGhlIG5hbWVzcGFjZSAKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIg
Lz4nOworfQorCitmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCit7CisgICAgcmV0dXJuIHRleHQu
dG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsK
K30KKworZnVuY3Rpb24gcHJpbnRUZXN0UGFzc2VkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxz
cGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsg
Jzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0
ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBl
SFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpCit7
CisgICAgdGhyb3cgbmV3IFNwdXRuaWtFcnJvcihtc2cpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHk+Cis8cD5TMTEuMTMu
Ml9SMi4zX1QxMTwvcD4KKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorPHNjcmlwdD4KK3RyeSB7
CisKKy8qKgorICogQG5hbWU6IFMxMS4xMy4yX1IyLjNfVDExOworICogQHNlY3Rpb246IDExLjEz
LjI7CisgKiBAZGVzY3JpcHRpb246IFJlc3VsdCBpcyBub3QgVG9JbnQzMihVbmRlZmluZWQpIHwg
VG9JbnQzMihBc3NpZ25tZW50RXhwcmVzc2lvbik7CisqLworCisvL0NIRUNLIzEKK3RyeSB7ICAK
KyAgeCB8PSBuZXcgU3RyaW5nKCItMSIpOworICBpZiAoeCA9PT0gLTEpIHsKKyAgICB0ZXN0RmFp
bGVkKCcjMTogUmVzdWx0IGlzIG5vdCBUb0ludDMyKFVuZGVmaW5lZCkgfCBUb0ludDMyKEFzc2ln
bm1lbnRFeHByZXNzaW9uKScpOworICB9ICBlbHNlIHsKKyAgICB0ZXN0RmFpbGVkKCcjMTogeCB8
PSBuZXcgU3RyaW5nKCItMSIpIHRocm93IFJlZmVyZW5jZUVycm9yJyk7CisgIH0gCit9CitjYXRj
aCAoZSkgeworICBpZiAoKGUgaW5zdGFuY2VvZiBSZWZlcmVuY2VFcnJvcikgIT09IHRydWUpIHsK
KyAgICB0ZXN0RmFpbGVkKCcjMTogeCB8PSBuZXcgU3RyaW5nKCItMSIpIHRocm93IFJlZmVyZW5j
ZUVycm9yJyk7ICAKKyAgfQorfQorCit9IGNhdGNoIChleCkgeworICAgIHNwdXRuaWtFeGNlcHRp
b24gPSBleDsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4K
KworPHNjcmlwdD4KK2lmICghc3VjY2Vzc2Z1bGx5UGFyc2VkKQorICAgIHByaW50VGVzdEZhaWxl
ZCgnc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIG5vdCBzZXQnKTsKK2Vsc2UgaWYgKHNwdXRuaWtFeGNl
cHRpb24pCisgICAgcHJpbnRUZXN0RmFpbGVkKHNwdXRuaWtFeGNlcHRpb24pOworZWxzZQorICAg
IHByaW50VGVzdFBhc3NlZCgiIik7Cit0ZXN0UHJpbnQoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNz
Ij5URVNUIENPTVBMRVRFPC9zcGFuPicpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4z
X1Q5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRu
aWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1Q5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMS4xMy4yX1IyLjNf
VDktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK1MxMS4xMy4yX1Iy
LjNfVDkKKworUEFTUyAKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjFfUjEtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMV9S
MS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRu
aWsvUmVncmVzc2lvbi9TMTUuMS4xLjFfUjEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYgQEAKK1MxNS4xLjEuMV9SMQorCitQQVNTIAorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMV9SMi4y
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsv
UmVncmVzc2lvbi9TMTUuMS4xLjFfUjIuMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjFfUjIuMi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorUzE1LjEuMS4xX1IyLjIKKwor
RkFJTCBTcHV0bmlrRXJyb3I6ICMxOiBOYU4gPSAxOyBpc0Zpbml0ZShOYU4pID09PSB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jl
c3Npb24vUzE1LjEuMS4xX1IzLjEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMV9SMy4xLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9u
L1MxNS4xLjEuMV9SMy4xLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBA
CitTMTUuMS4xLjFfUjMuMQorCitQQVNTIAorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMl9SMS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24v
UzE1LjEuMS4yX1IxLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMl9SMS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNiBAQAorUzE1LjEuMS4yX1IxCisKK1BBU1MgCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzE1
LjEuMS4yX1IyLjItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
anMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMl9SMi4yLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEu
Ml9SMi4yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACitTMTUuMS4x
LjJfUjIuMgorCitGQUlMIFNwdXRuaWtFcnJvcjogIzE6IEluZmluaXR5ID0gMDsgaXNGaW5pdGUo
SW5maW5pdHkpID09PSB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzE1LjEuMS4yX1IzLjEtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4x
LjEuMl9SMy4xLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
anMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMl9SMy4xLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2IEBACitTMTUuMS4xLjJfUjMuMQorCitQQVNTIAorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1Mx
Mi42LjRfUjItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
c3B1dG5pay9SZWdyZXNzaW9uL1MxMi42LjRfUjItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzEyLjYuNF9SMi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorUzEyLjYuNF9SMgorCisjMTog
cGFzc2VkCisjMTogcGFzc2VkCitQQVNTIAorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMS4xMy4yX1IyLjNfVDEwLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVz
c2lvbi9TMTEuMTMuMl9SMi4zX1QxMC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1QxMC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorUzExLjEzLjJfUjIuM19UMTAK
KworUEFTUyAKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Nw
dXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1QxLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19UMS5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24v
UzExLjEzLjJfUjIuM19UMS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorPGh0
bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KKzxzdHlsZT4KKy5wYXNzIHsKKyAg
ICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogZ3JlZW47Cit9CisuZmFpbCB7CisgICAg
Zm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHJlZDsKK30KKzwvc3R5bGU+CisKKzxzY3Jp
cHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gU3B1dG5pa0Vycm9yKG1lc3NhZ2UpCit7
CisgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKK30KKworU3B1dG5pa0Vycm9yLnByb3RvdHlw
ZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpCit7CisgICAgcmV0dXJuICdTcHV0bmlrRXJyb3I6ICcg
KyB0aGlzLm1lc3NhZ2U7Cit9OworCit2YXIgc3B1dG5pa0V4Y2VwdGlvbjsKKworZnVuY3Rpb24g
dGVzdFByaW50KG1zZykKK3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InNwYW4iKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENo
aWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFj
ZSAKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBl
c2NhcGVIVE1MKHRleHQpCit7CisgICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC8m
L2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsKK30KKworZnVuY3Rpb24gcHJpbnRU
ZXN0UGFzc2VkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNz
Ij5QQVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVu
Y3Rpb24gcHJpbnRUZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFu
IGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4n
KTsKK30KKworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpCit7CisgICAgdGhyb3cgbmV3IFNwdXRu
aWtFcnJvcihtc2cpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3Nj
cmlwdD4KKworPC9oZWFkPgorPGJvZHk+Cis8cD5TMTEuMTMuMl9SMi4zX1QxPC9wPgorPGRpdiBp
ZD0nY29uc29sZSc+PC9kaXY+Cis8c2NyaXB0PgordHJ5IHsKKworLyoqCisgKiBAbmFtZTogUzEx
LjEzLjJfUjIuM19UMTsKKyAqIEBzZWN0aW9uOiAxMS4xMy4yOworICogQGRlc2NyaXB0aW9uOiBS
ZXN1bHQgaXMgbm90IFRvTnVtYmVyKFVuZGVmaW5lZCkgKiBUb051bWJlcihBc3NpZ25tZW50RXhw
cmVzc2lvbik7CisqLworCisvL0NIRUNLIzEKK3RyeSB7ICAKKyAgeCAqPSBuZXcgU3RyaW5nKCIt
MSIpOworICBpZiAoaXNOYU4oeCkgPT09IHRydWUpIHsKKyAgICB0ZXN0RmFpbGVkKCcjMTogUmVz
dWx0IGlzIG5vdCBUb051bWJlcjMyKFVuZGVmaW5lZCkgKiBUb051bWJlcjMyKEFzc2lnbm1lbnRF
eHByZXNzaW9uKScpOworICB9ICBlbHNlIHsKKyAgICB0ZXN0RmFpbGVkKCcjMTogeCAqPSBuZXcg
U3RyaW5nKCItMSIpIHRocm93IFJlZmVyZW5jZUVycm9yJyk7CisgIH0gCit9CitjYXRjaCAoZSkg
eworICBpZiAoKGUgaW5zdGFuY2VvZiBSZWZlcmVuY2VFcnJvcikgIT09IHRydWUpIHsKKyAgICB0
ZXN0RmFpbGVkKCcjMTogeCAqPSBuZXcgU3RyaW5nKCItMSIpIHRocm93IFJlZmVyZW5jZUVycm9y
Jyk7ICAKKyAgfQorfQorCit9IGNhdGNoIChleCkgeworICAgIHNwdXRuaWtFeGNlcHRpb24gPSBl
eDsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNj
cmlwdD4KK2lmICghc3VjY2Vzc2Z1bGx5UGFyc2VkKQorICAgIHByaW50VGVzdEZhaWxlZCgnc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIG5vdCBzZXQnKTsKK2Vsc2UgaWYgKHNwdXRuaWtFeGNlcHRpb24p
CisgICAgcHJpbnRUZXN0RmFpbGVkKHNwdXRuaWtFeGNlcHRpb24pOworZWxzZQorICAgIHByaW50
VGVzdFBhc3NlZCgiIik7Cit0ZXN0UHJpbnQoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNU
IENPTVBMRVRFPC9zcGFuPicpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1QzLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24v
UzExLjEzLjJfUjIuM19UMy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19UMy5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEwNiBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4K
KzxzdHlsZT4KKy5wYXNzIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogZ3Jl
ZW47Cit9CisuZmFpbCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHJlZDsK
K30KKzwvc3R5bGU+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gU3B1
dG5pa0Vycm9yKG1lc3NhZ2UpCit7CisgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKK30KKwor
U3B1dG5pa0Vycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpCit7CisgICAgcmV0
dXJuICdTcHV0bmlrRXJyb3I6ICcgKyB0aGlzLm1lc3NhZ2U7Cit9OworCit2YXIgc3B1dG5pa0V4
Y2VwdGlvbjsKKworZnVuY3Rpb24gdGVzdFByaW50KG1zZykKK3sKKyAgICB2YXIgc3BhbiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhU
TUwga25vd3MgdGhlIG5hbWVzcGFjZSAKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIg
Lz4nOworfQorCitmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCit7CisgICAgcmV0dXJuIHRleHQu
dG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsK
K30KKworZnVuY3Rpb24gcHJpbnRUZXN0UGFzc2VkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxz
cGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsg
Jzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0
ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBl
SFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpCit7
CisgICAgdGhyb3cgbmV3IFNwdXRuaWtFcnJvcihtc2cpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHk+Cis8cD5TMTEuMTMu
Ml9SMi4zX1QzPC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+Cis8c2NyaXB0PgordHJ5IHsK
KworLyoqCisgKiBAbmFtZTogUzExLjEzLjJfUjIuM19UMzsKKyAqIEBzZWN0aW9uOiAxMS4xMy4y
OworICogQGRlc2NyaXB0aW9uOiBSZXN1bHQgaXMgbm90IFRvTnVtYmVyKFVuZGVmaW5lZCkgJSBU
b051bWJlcihBc3NpZ25tZW50RXhwcmVzc2lvbik7CisqLworCisvL0NIRUNLIzEKK3RyeSB7ICAK
KyAgeCAlPSBuZXcgU3RyaW5nKCItMSIpOworICBpZiAoaXNOYU4oeCkgPT09IHRydWUpIHsKKyAg
ICB0ZXN0RmFpbGVkKCcjMTogUmVzdWx0IGlzIG5vdCBUb051bWJlcjMyKFVuZGVmaW5lZCkgJSBU
b051bWJlcjMyKEFzc2lnbm1lbnRFeHByZXNzaW9uKScpOworICB9ICBlbHNlIHsKKyAgICB0ZXN0
RmFpbGVkKCcjMTogeCAlPSBuZXcgU3RyaW5nKCItMSIpIHRocm93IFJlZmVyZW5jZUVycm9yJyk7
CisgIH0gCit9CitjYXRjaCAoZSkgeworICBpZiAoKGUgaW5zdGFuY2VvZiBSZWZlcmVuY2VFcnJv
cikgIT09IHRydWUpIHsKKyAgICB0ZXN0RmFpbGVkKCcjMTogeCAlPSBuZXcgU3RyaW5nKCItMSIp
IHRocm93IFJlZmVyZW5jZUVycm9yJyk7ICAKKyAgfQorfQorCit9IGNhdGNoIChleCkgeworICAg
IHNwdXRuaWtFeGNlcHRpb24gPSBleDsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK2lmICghc3VjY2Vzc2Z1bGx5UGFyc2VkKQorICAg
IHByaW50VGVzdEZhaWxlZCgnc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIG5vdCBzZXQnKTsKK2Vsc2Ug
aWYgKHNwdXRuaWtFeGNlcHRpb24pCisgICAgcHJpbnRUZXN0RmFpbGVkKHNwdXRuaWtFeGNlcHRp
b24pOworZWxzZQorICAgIHByaW50VGVzdFBhc3NlZCgiIik7Cit0ZXN0UHJpbnQoJzxiciAvPjxz
cGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lv
bi9TMTEuMTMuMl9SMi4zX1Q1Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9q
cy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19UNS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19U
NS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNyBAQAorPGh0bWw+Cis8aGVhZD4KKzxt
ZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KKzxzdHlsZT4KKy5wYXNzIHsKKyAgICBmb250LXdlaWdodDog
Ym9sZDsKKyAgICBjb2xvcjogZ3JlZW47Cit9CisuZmFpbCB7CisgICAgZm9udC13ZWlnaHQ6IGJv
bGQ7CisgICAgY29sb3I6IHJlZDsKK30KKzwvc3R5bGU+CisKKzxzY3JpcHQ+CitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKworZnVuY3Rpb24gU3B1dG5pa0Vycm9yKG1lc3NhZ2UpCit7CisgICAgdGhpcy5tZXNz
YWdlID0gbWVzc2FnZTsKK30KKworU3B1dG5pa0Vycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1
bmN0aW9uICgpCit7CisgICAgcmV0dXJuICdTcHV0bmlrRXJyb3I6ICcgKyB0aGlzLm1lc3NhZ2U7
Cit9OworCit2YXIgc3B1dG5pa0V4Y2VwdGlvbjsKKworZnVuY3Rpb24gdGVzdFByaW50KG1zZykK
K3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBp
bnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZSAKKyAgICBzcGFuLmlu
bmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQp
Cit7CisgICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJl
cGxhY2UoLzwvZywgIiZsdDsiKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0UGFzc2VkKG1zZykK
K3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9zcGFuPiAn
ICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0
RmFpbGVkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJmYWlsIj5G
QUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rp
b24gdGVzdEZhaWxlZChtc2cpCit7CisgICAgdGhyb3cgbmV3IFNwdXRuaWtFcnJvcihtc2cpOwor
fQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKworPC9oZWFk
PgorPGJvZHk+Cis8cD5TMTEuMTMuMl9SMi4zX1Q1PC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9k
aXY+Cis8c2NyaXB0PgordHJ5IHsKKworLyoqCisgKiBAbmFtZTogUzExLjEzLjJfUjIuM19UNTsK
KyAqIEBzZWN0aW9uOiAxMS4xMy4yOworICogQGRlc2NyaXB0aW9uOiBSZXN1bHQgaXMgbm90IFRv
TnVtYmVyKFVuZGVmaW5lZCkgLSBUb051bWJlcihBc3NpZ25tZW50RXhwcmVzc2lvbik7CisqLwor
CisvL0NIRUNLIzEKK3RyeSB7ICAKKyAgeCAtPSBuZXcgU3RyaW5nKCItMSIpOworICBpZiAoaXNO
YU4oeCkgPT09IHRydWUpIHsKKyAgICB0ZXN0RmFpbGVkKCcjMTogUmVzdWx0IGlzIG5vdCBUb051
bWJlcjMyKFVuZGVmaW5lZCkgLSBUb051bWJlcjMyKEFzc2lnbm1lbnRFeHByZXNzaW9uKScpOwor
ICB9ICBlbHNlIHsKKyAgICB0ZXN0RmFpbGVkKCcjMTogeCAtPSBuZXcgU3RyaW5nKCItMSIpIHRo
cm93IFJlZmVyZW5jZUVycm9yJyk7CisgIH0gCit9CitjYXRjaCAoZSkgeworICBpZiAoKGUgaW5z
dGFuY2VvZiBSZWZlcmVuY2VFcnJvcikgIT09IHRydWUpIHsKKyAgICB0ZXN0RmFpbGVkKCcjMTog
eCAtPSBuZXcgU3RyaW5nKCItMSIpIHRocm93IFJlZmVyZW5jZUVycm9yJyk7ICAKKyAgfQorfQor
CisKK30gY2F0Y2ggKGV4KSB7CisgICAgc3B1dG5pa0V4Y2VwdGlvbiA9IGV4OworfQorCit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0PgoraWYgKCFz
dWNjZXNzZnVsbHlQYXJzZWQpCisgICAgcHJpbnRUZXN0RmFpbGVkKCdzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgbm90IHNldCcpOworZWxzZSBpZiAoc3B1dG5pa0V4Y2VwdGlvbikKKyAgICBwcmludFRl
c3RGYWlsZWQoc3B1dG5pa0V4Y2VwdGlvbik7CitlbHNlCisgICAgcHJpbnRUZXN0UGFzc2VkKCIi
KTsKK3Rlc3RQcmludCgnPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3Nw
YW4+Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMS4xMy4yX1IyLjNfVDcuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4z
X1Q3Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVn
cmVzc2lvbi9TMTEuMTMuMl9SMi4zX1Q3Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2
IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0ndXRmLTgnPgorPHN0eWxlPgorLnBh
c3MgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiBncmVlbjsKK30KKy5mYWls
IHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogcmVkOworfQorPC9zdHlsZT4K
KworPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBTcHV0bmlrRXJyb3IobWVz
c2FnZSkKK3sKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworfQorCitTcHV0bmlrRXJyb3Iu
cHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkKK3sKKyAgICByZXR1cm4gJ1NwdXRuaWtF
cnJvcjogJyArIHRoaXMubWVzc2FnZTsKK307CisKK3ZhciBzcHV0bmlrRXhjZXB0aW9uOworCitm
dW5jdGlvbiB0ZXN0UHJpbnQobXNnKQoreworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIiku
YXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0aGUg
bmFtZXNwYWNlIAorICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1
bmN0aW9uIGVzY2FwZUhUTUwodGV4dCkKK3sKKyAgICByZXR1cm4gdGV4dC50b1N0cmluZygpLnJl
cGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0OyIpOworfQorCitmdW5jdGlv
biBwcmludFRlc3RQYXNzZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4gY2xh
c3M9InBhc3MiPlBBU1M8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOwor
fQorCitmdW5jdGlvbiBwcmludFRlc3RGYWlsZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNw
YW4+PHNwYW4gY2xhc3M9ImZhaWwiPkZBSUw8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAn
PC9zcGFuPicpOworfQorCitmdW5jdGlvbiB0ZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0aHJvdyBu
ZXcgU3B1dG5pa0Vycm9yKG1zZyk7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxz
ZTsKKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keT4KKzxwPlMxMS4xMy4yX1IyLjNfVDc8L3A+
Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+Cit0cnkgeworCisvKioKKyAqIEBu
YW1lOiBTMTEuMTMuMl9SMi4zX1Q3OworICogQHNlY3Rpb246IDExLjEzLjI7CisgKiBAZGVzY3Jp
cHRpb246IFJlc3VsdCBpcyBub3QgVG9JbnQzMihVbmRlZmluZWQpID4+IFRvSW50MzIoQXNzaWdu
bWVudEV4cHJlc3Npb24pOworKi8KKworLy9DSEVDSyMxCit0cnkgeyAgCisgIHggPj49IG5ldyBT
dHJpbmcoIi0xIik7CisgIGlmICh4ID09PSAwKSB7CisgICAgdGVzdEZhaWxlZCgnIzE6IFJlc3Vs
dCBpcyBub3QgVG9JbnQzMihVbmRlZmluZWQpID4+IFRvSW50MzIoQXNzaWdubWVudEV4cHJlc3Np
b24pJyk7CisgIH0gIGVsc2UgeworICAgIHRlc3RGYWlsZWQoJyMxOiB4ID4+PSBuZXcgU3RyaW5n
KCItMSIpIHRocm93IFJlZmVyZW5jZUVycm9yJyk7CisgIH0gCit9CitjYXRjaCAoZSkgeworICBp
ZiAoKGUgaW5zdGFuY2VvZiBSZWZlcmVuY2VFcnJvcikgIT09IHRydWUpIHsKKyAgICB0ZXN0RmFp
bGVkKCcjMTogeCA+Pj0gbmV3IFN0cmluZygiLTEiKSB0aHJvdyBSZWZlcmVuY2VFcnJvcicpOyAg
CisgIH0KK30KKworfSBjYXRjaCAoZXgpIHsKKyAgICBzcHV0bmlrRXhjZXB0aW9uID0gZXg7Cit9
CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQ+
CitpZiAoIXN1Y2Nlc3NmdWxseVBhcnNlZCkKKyAgICBwcmludFRlc3RGYWlsZWQoJ3N1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyBub3Qgc2V0Jyk7CitlbHNlIGlmIChzcHV0bmlrRXhjZXB0aW9uKQorICAg
IHByaW50VGVzdEZhaWxlZChzcHV0bmlrRXhjZXB0aW9uKTsKK2Vsc2UKKyAgICBwcmludFRlc3RQ
YXNzZWQoIiIpOwordGVzdFByaW50KCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01Q
TEVURTwvc3Bhbj4nKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19UOS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMS4x
My4yX1IyLjNfVDkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc3B1
dG5pay9SZWdyZXNzaW9uL1MxMS4xMy4yX1IyLjNfVDkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDYgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSd1dGYtOCc+Cis8c3R5
bGU+CisucGFzcyB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IGdyZWVuOwor
fQorLmZhaWwgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiByZWQ7Cit9Cis8
L3N0eWxlPgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIFNwdXRuaWtF
cnJvcihtZXNzYWdlKQoreworICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Cit9CisKK1NwdXRu
aWtFcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKQoreworICAgIHJldHVybiAn
U3B1dG5pa0Vycm9yOiAnICsgdGhpcy5tZXNzYWdlOworfTsKKwordmFyIHNwdXRuaWtFeGNlcHRp
b247CisKK2Z1bmN0aW9uIHRlc3RQcmludChtc2cpCit7CisgICAgdmFyIHNwYW4gPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNv
bnNvbGUiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0IGZpcnN0IHNvIFhIVE1MIGtu
b3dzIHRoZSBuYW1lc3BhY2UgCisgICAgc3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsK
K30KKworZnVuY3Rpb24gZXNjYXBlSFRNTCh0ZXh0KQoreworICAgIHJldHVybiB0ZXh0LnRvU3Ry
aW5nKCkucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7Iik7Cit9CisK
K2Z1bmN0aW9uIHByaW50VGVzdFBhc3NlZChtc2cpCit7CisgICAgdGVzdFByaW50KCc8c3Bhbj48
c3BhbiBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3Nw
YW4+Jyk7Cit9CisKK2Z1bmN0aW9uIHByaW50VGVzdEZhaWxlZChtc2cpCit7CisgICAgdGVzdFBy
aW50KCc8c3Bhbj48c3BhbiBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwo
bXNnKSArICc8L3NwYW4+Jyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWlsZWQobXNnKQoreworICAg
IHRocm93IG5ldyBTcHV0bmlrRXJyb3IobXNnKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IGZhbHNlOworPC9zY3JpcHQ+CisKKzwvaGVhZD4KKzxib2R5PgorPHA+UzExLjEzLjJfUjIu
M19UOTwvcD4KKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorPHNjcmlwdD4KK3RyeSB7CisKKy8q
KgorICogQG5hbWU6IFMxMS4xMy4yX1IyLjNfVDk7CisgKiBAc2VjdGlvbjogMTEuMTMuMjsKKyAq
IEBkZXNjcmlwdGlvbjogUmVzdWx0IGlzIG5vdCBUb0ludDMyKFVuZGVmaW5lZCkgJiBUb0ludDMy
KEFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyovCisKKy8vQ0hFQ0sjMQordHJ5IHsgIAorICB4ICY9
IG5ldyBTdHJpbmcoIi0xIik7CisgIGlmICh4ID09PSAwKSB7CisgICAgdGVzdEZhaWxlZCgnIzE6
IFJlc3VsdCBpcyBub3QgVG9JbnQzMihVbmRlZmluZWQpICYgVG9JbnQzMihBc3NpZ25tZW50RXhw
cmVzc2lvbiknKTsKKyAgfSAgZWxzZSB7CisgICAgdGVzdEZhaWxlZCgnIzE6IHggJj0gbmV3IFN0
cmluZygiLTEiKSB0aHJvdyBSZWZlcmVuY2VFcnJvcicpOworICB9IAorfQorY2F0Y2ggKGUpIHsK
KyAgaWYgKChlIGluc3RhbmNlb2YgUmVmZXJlbmNlRXJyb3IpICE9PSB0cnVlKSB7CisgICAgdGVz
dEZhaWxlZCgnIzE6IHggJj0gbmV3IFN0cmluZygiLTEiKSB0aHJvdyBSZWZlcmVuY2VFcnJvcicp
OyAgCisgIH0KK30KKworfSBjYXRjaCAoZXgpIHsKKyAgICBzcHV0bmlrRXhjZXB0aW9uID0gZXg7
Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3Jp
cHQ+CitpZiAoIXN1Y2Nlc3NmdWxseVBhcnNlZCkKKyAgICBwcmludFRlc3RGYWlsZWQoJ3N1Y2Nl
c3NmdWxseVBhcnNlZCBpcyBub3Qgc2V0Jyk7CitlbHNlIGlmIChzcHV0bmlrRXhjZXB0aW9uKQor
ICAgIHByaW50VGVzdEZhaWxlZChzcHV0bmlrRXhjZXB0aW9uKTsKK2Vsc2UKKyAgICBwcmludFRl
c3RQYXNzZWQoIiIpOwordGVzdFByaW50KCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBD
T01QTEVURTwvc3Bhbj4nKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzE1LjEuMS4xX1IxLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzE1LjEu
MS4xX1IxLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsv
UmVncmVzc2lvbi9TMTUuMS4xLjFfUjEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDIg
QEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSd1dGYtOCc+Cis8c3R5bGU+CisucGFz
cyB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IGdyZWVuOworfQorLmZhaWwg
eworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiByZWQ7Cit9Cis8L3N0eWxlPgor
Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIFNwdXRuaWtFcnJvcihtZXNz
YWdlKQoreworICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Cit9CisKK1NwdXRuaWtFcnJvci5w
cm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKQoreworICAgIHJldHVybiAnU3B1dG5pa0Vy
cm9yOiAnICsgdGhpcy5tZXNzYWdlOworfTsKKwordmFyIHNwdXRuaWtFeGNlcHRpb247CisKK2Z1
bmN0aW9uIHRlc3RQcmludChtc2cpCit7CisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5h
cHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0IGZpcnN0IHNvIFhIVE1MIGtub3dzIHRoZSBu
YW1lc3BhY2UgCisgICAgc3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsKK30KKworZnVu
Y3Rpb24gZXNjYXBlSFRNTCh0ZXh0KQoreworICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCkucmVw
bGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7Iik7Cit9CisKK2Z1bmN0aW9u
IHByaW50VGVzdFBhc3NlZChtc2cpCit7CisgICAgdGVzdFByaW50KCc8c3Bhbj48c3BhbiBjbGFz
cz0icGFzcyI+UEFTUzwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Cit9
CisKK2Z1bmN0aW9uIHByaW50VGVzdEZhaWxlZChtc2cpCit7CisgICAgdGVzdFByaW50KCc8c3Bh
bj48c3BhbiBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8
L3NwYW4+Jyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWlsZWQobXNnKQoreworICAgIHRocm93IG5l
dyBTcHV0bmlrRXJyb3IobXNnKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNl
OworPC9zY3JpcHQ+CisKKzwvaGVhZD4KKzxib2R5PgorPHA+UzE1LjEuMS4xX1IxPC9wPgorPGRp
diBpZD0nY29uc29sZSc+PC9kaXY+Cis8c2NyaXB0PgordHJ5IHsKKworLyoqCisgKiBAbmFtZTog
UzE1LjEuMS4xX1IxOworICogQHNlY3Rpb246IDE1LjEuMS4xLCA5LjM7CisgKiBAZGVzY3JpcHRp
b246IFRoZSBOYU4gaXMgbm90IFJlYWRPbmx5LCBjaGVjayBOdW1iZXIgZm9yIHJlc2V0dGFiaWxp
dHkgb2YgcmVzdWx0OworKi8KKworLy8gQ0hFQ0sjMQorTmFOID0gdHJ1ZTsKK051bWJlcigpOwor
aWYgKE5hTiAhPT0gdHJ1ZSkgeworICBOYU4gPSB0cnVlOworICBOdW1iZXIoKTsKKyAgaWYgKE5h
TiA9PT0gdHJ1ZSkgeworICAgIHRlc3RGYWlsZWQoJyMxOiBSZXNldHRhYmlsaXR5IG9mIHJlc3Vs
dCcpOworICB9Cit9CisKK30gY2F0Y2ggKGV4KSB7CisgICAgc3B1dG5pa0V4Y2VwdGlvbiA9IGV4
OworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8c2Ny
aXB0PgoraWYgKCFzdWNjZXNzZnVsbHlQYXJzZWQpCisgICAgcHJpbnRUZXN0RmFpbGVkKCdzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgbm90IHNldCcpOworZWxzZSBpZiAoc3B1dG5pa0V4Y2VwdGlvbikK
KyAgICBwcmludFRlc3RGYWlsZWQoc3B1dG5pa0V4Y2VwdGlvbik7CitlbHNlCisgICAgcHJpbnRU
ZXN0UGFzc2VkKCIiKTsKK3Rlc3RQcmludCgnPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1Qg
Q09NUExFVEU8L3NwYW4+Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMl9SMS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4x
LjEuMl9SMS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlr
L1JlZ3Jlc3Npb24vUzE1LjEuMS4yX1IxLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAy
IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0ndXRmLTgnPgorPHN0eWxlPgorLnBh
c3MgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiBncmVlbjsKK30KKy5mYWls
IHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogcmVkOworfQorPC9zdHlsZT4K
KworPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBTcHV0bmlrRXJyb3IobWVz
c2FnZSkKK3sKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworfQorCitTcHV0bmlrRXJyb3Iu
cHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkKK3sKKyAgICByZXR1cm4gJ1NwdXRuaWtF
cnJvcjogJyArIHRoaXMubWVzc2FnZTsKK307CisKK3ZhciBzcHV0bmlrRXhjZXB0aW9uOworCitm
dW5jdGlvbiB0ZXN0UHJpbnQobXNnKQoreworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIiku
YXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0aGUg
bmFtZXNwYWNlIAorICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1
bmN0aW9uIGVzY2FwZUhUTUwodGV4dCkKK3sKKyAgICByZXR1cm4gdGV4dC50b1N0cmluZygpLnJl
cGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0OyIpOworfQorCitmdW5jdGlv
biBwcmludFRlc3RQYXNzZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4gY2xh
c3M9InBhc3MiPlBBU1M8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOwor
fQorCitmdW5jdGlvbiBwcmludFRlc3RGYWlsZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNw
YW4+PHNwYW4gY2xhc3M9ImZhaWwiPkZBSUw8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAn
PC9zcGFuPicpOworfQorCitmdW5jdGlvbiB0ZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0aHJvdyBu
ZXcgU3B1dG5pa0Vycm9yKG1zZyk7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxz
ZTsKKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keT4KKzxwPlMxNS4xLjEuMl9SMTwvcD4KKzxk
aXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorPHNjcmlwdD4KK3RyeSB7CisKKy8qKgorICogQG5hbWU6
IFMxNS4xLjEuMl9SMTsKKyAqIEBzZWN0aW9uOiAxNS4xLjEuMiwgOS4zOworICogQGRlc2NyaXB0
aW9uOiBUaGUgSW5maW5pdHkgaXMgbm90IFJlYWRPbmx5LCBjaGVjayBOdW1iZXIgZm9yIHJlc2V0
dGFiaWxpdHkgb2YgcmVzdWx0OworKi8KKworLy8gQ0hFQ0sjMQorSW5maW5pdHkgPSBmYWxzZTsK
K051bWJlcigpOworaWYgKEluZmluaXR5ICE9PSBmYWxzZSkgeworICBJbmZpbml0eSA9IGZhbHNl
OworICBOdW1iZXIoKTsKKyAgaWYgKEluZmluaXR5ID09PSBmYWxzZSkgeworICAgIHRlc3RGYWls
ZWQoJyMxOiBSZXNldHRhYmlsaXR5IG9mIHJlc3VsdCcpOworICB9Cit9IAorCit9IGNhdGNoIChl
eCkgeworICAgIHNwdXRuaWtFeGNlcHRpb24gPSBleDsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK2lmICghc3VjY2Vzc2Z1bGx5UGFy
c2VkKQorICAgIHByaW50VGVzdEZhaWxlZCgnc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIG5vdCBzZXQn
KTsKK2Vsc2UgaWYgKHNwdXRuaWtFeGNlcHRpb24pCisgICAgcHJpbnRUZXN0RmFpbGVkKHNwdXRu
aWtFeGNlcHRpb24pOworZWxzZQorICAgIHByaW50VGVzdFBhc3NlZCgiIik7Cit0ZXN0UHJpbnQo
JzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsv
UmVncmVzc2lvbi9TMTUuMS4xLjFfUjMuMS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMV9SMy4xLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjFf
UjMuMS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMiBAQAorPGh0bWw+Cis8aGVhZD4K
KzxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KKzxzdHlsZT4KKy5wYXNzIHsKKyAgICBmb250LXdlaWdo
dDogYm9sZDsKKyAgICBjb2xvcjogZ3JlZW47Cit9CisuZmFpbCB7CisgICAgZm9udC13ZWlnaHQ6
IGJvbGQ7CisgICAgY29sb3I6IHJlZDsKK30KKzwvc3R5bGU+CisKKzxzY3JpcHQ+CitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKworZnVuY3Rpb24gU3B1dG5pa0Vycm9yKG1lc3NhZ2UpCit7CisgICAgdGhpcy5t
ZXNzYWdlID0gbWVzc2FnZTsKK30KKworU3B1dG5pa0Vycm9yLnByb3RvdHlwZS50b1N0cmluZyA9
IGZ1bmN0aW9uICgpCit7CisgICAgcmV0dXJuICdTcHV0bmlrRXJyb3I6ICcgKyB0aGlzLm1lc3Nh
Z2U7Cit9OworCit2YXIgc3B1dG5pa0V4Y2VwdGlvbjsKKworZnVuY3Rpb24gdGVzdFByaW50KG1z
ZykKK3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4pOyAv
LyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZSAKKyAgICBzcGFu
LmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBlc2NhcGVIVE1MKHRl
eHQpCit7CisgICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csICImYW1wOyIp
LnJlcGxhY2UoLzwvZywgIiZsdDsiKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0UGFzc2VkKG1z
ZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9zcGFu
PiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gcHJpbnRU
ZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJmYWls
Ij5GQUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVu
Y3Rpb24gdGVzdEZhaWxlZChtc2cpCit7CisgICAgdGhyb3cgbmV3IFNwdXRuaWtFcnJvcihtc2cp
OworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKworPC9o
ZWFkPgorPGJvZHk+Cis8cD5TMTUuMS4xLjFfUjMuMTwvcD4KKzxkaXYgaWQ9J2NvbnNvbGUnPjwv
ZGl2PgorPHNjcmlwdD4KK3RyeSB7CisKKy8qKgorICogQG5hbWU6IFMxNS4xLjEuMV9SMy4xOwor
ICogQHNlY3Rpb246IDE1LjEuMS4xLCAxNS4xLjIuNDsKKyAqIEBkZXNjcmlwdGlvbjogVGhlIE5h
TiBpcyBub3QgUmVhZE9ubHksIGNoZWNrIGlzTmFOIGZvciByZXNldHRhYmlsaXR5IG9mIHJlc3Vs
dDsKKyovCisKKy8vIENIRUNLIzEKK05hTiA9IDE7Citpc05hTigpOworaWYgKE5hTiAhPT0gMSkg
eworICBOYU4gPSAxOworICBpc05hTigpOworICBpZiAoTmFOID09PSAxKSB7CisgICAgdGVzdEZh
aWxlZCgnIzE6IGlzTmFOIHJlc2V0dGFiaWxpdHkgb2YgcmVzdWx0IGZvciBOYU4gdmFsdWUnKTsK
KyAgfQorfQorCit9IGNhdGNoIChleCkgeworICAgIHNwdXRuaWtFeGNlcHRpb24gPSBleDsKK30K
KwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdD4K
K2lmICghc3VjY2Vzc2Z1bGx5UGFyc2VkKQorICAgIHByaW50VGVzdEZhaWxlZCgnc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIG5vdCBzZXQnKTsKK2Vsc2UgaWYgKHNwdXRuaWtFeGNlcHRpb24pCisgICAg
cHJpbnRUZXN0RmFpbGVkKHNwdXRuaWtFeGNlcHRpb24pOworZWxzZQorICAgIHByaW50VGVzdFBh
c3NlZCgiIik7Cit0ZXN0UHJpbnQoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBM
RVRFPC9zcGFuPicpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjFfUjIuMi5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEu
MV9SMi4yLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsv
UmVncmVzc2lvbi9TMTUuMS4xLjFfUjIuMi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk3
IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0ndXRmLTgnPgorPHN0eWxlPgorLnBh
c3MgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiBncmVlbjsKK30KKy5mYWls
IHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogcmVkOworfQorPC9zdHlsZT4K
KworPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBTcHV0bmlrRXJyb3IobWVz
c2FnZSkKK3sKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworfQorCitTcHV0bmlrRXJyb3Iu
cHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkKK3sKKyAgICByZXR1cm4gJ1NwdXRuaWtF
cnJvcjogJyArIHRoaXMubWVzc2FnZTsKK307CisKK3ZhciBzcHV0bmlrRXhjZXB0aW9uOworCitm
dW5jdGlvbiB0ZXN0UHJpbnQobXNnKQoreworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIiku
YXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0aGUg
bmFtZXNwYWNlIAorICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1
bmN0aW9uIGVzY2FwZUhUTUwodGV4dCkKK3sKKyAgICByZXR1cm4gdGV4dC50b1N0cmluZygpLnJl
cGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0OyIpOworfQorCitmdW5jdGlv
biBwcmludFRlc3RQYXNzZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4gY2xh
c3M9InBhc3MiPlBBU1M8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOwor
fQorCitmdW5jdGlvbiBwcmludFRlc3RGYWlsZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNw
YW4+PHNwYW4gY2xhc3M9ImZhaWwiPkZBSUw8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAn
PC9zcGFuPicpOworfQorCitmdW5jdGlvbiB0ZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0aHJvdyBu
ZXcgU3B1dG5pa0Vycm9yKG1zZyk7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxz
ZTsKKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keT4KKzxwPlMxNS4xLjEuMV9SMi4yPC9wPgor
PGRpdiBpZD0nY29uc29sZSc+PC9kaXY+Cis8c2NyaXB0PgordHJ5IHsKKworLyoqCisgKiBAbmFt
ZTogUzE1LjEuMS4xX1IyLjI7CisgKiBAc2VjdGlvbjogMTUuMS4xLjEsIDE1LjEuMiwgMTUuMS4z
OworICogQGRlc2NyaXB0aW9uOiBUaGUgTmFOIGlzIG5vdCBSZWFkT25seSwgY2hlY2sgaXNGaW5p
dGUgRnVuY3Rpb25zIHRoYXQgdXNlIFRvTnVtYmVyOyAKKyovCisKKy8vIENIRUNLIzEKK05hTiA9
IDE7CitpZiAoaXNGaW5pdGUoTmFOKSAhPT0gdHJ1ZSkgeworICB0ZXN0RmFpbGVkKCcjMTogTmFO
ID0gMTsgaXNGaW5pdGUoTmFOKSA9PT0gdHJ1ZScpOyAKK30KKworfSBjYXRjaCAoZXgpIHsKKyAg
ICBzcHV0bmlrRXhjZXB0aW9uID0gZXg7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitpZiAoIXN1Y2Nlc3NmdWxseVBhcnNlZCkKKyAg
ICBwcmludFRlc3RGYWlsZWQoJ3N1Y2Nlc3NmdWxseVBhcnNlZCBpcyBub3Qgc2V0Jyk7CitlbHNl
IGlmIChzcHV0bmlrRXhjZXB0aW9uKQorICAgIHByaW50VGVzdEZhaWxlZChzcHV0bmlrRXhjZXB0
aW9uKTsKK2Vsc2UKKyAgICBwcmludFRlc3RQYXNzZWQoIiIpOwordGVzdFByaW50KCc8YnIgLz48
c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVURTwvc3Bhbj4nKTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Np
b24vUzE1LjEuMS4yX1IzLjEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pz
L3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjJfUjMuMS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzE1LjEuMS4yX1IzLjEuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDIgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBj
aGFyc2V0PSd1dGYtOCc+Cis8c3R5bGU+CisucGFzcyB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7
CisgICAgY29sb3I6IGdyZWVuOworfQorLmZhaWwgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOwor
ICAgIGNvbG9yOiByZWQ7Cit9Cis8L3N0eWxlPgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisKK2Z1bmN0aW9uIFNwdXRuaWtFcnJvcihtZXNzYWdlKQoreworICAgIHRoaXMubWVzc2FnZSA9
IG1lc3NhZ2U7Cit9CisKK1NwdXRuaWtFcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlv
biAoKQoreworICAgIHJldHVybiAnU3B1dG5pa0Vycm9yOiAnICsgdGhpcy5tZXNzYWdlOworfTsK
KwordmFyIHNwdXRuaWtFeGNlcHRpb247CisKK2Z1bmN0aW9uIHRlc3RQcmludChtc2cpCit7Cisg
ICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0
IGl0IGZpcnN0IHNvIFhIVE1MIGtub3dzIHRoZSBuYW1lc3BhY2UgCisgICAgc3Bhbi5pbm5lckhU
TUwgPSBtc2cgKyAnPGJyIC8+JzsKK30KKworZnVuY3Rpb24gZXNjYXBlSFRNTCh0ZXh0KQorewor
ICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNl
KC88L2csICImbHQ7Iik7Cit9CisKK2Z1bmN0aW9uIHByaW50VGVzdFBhc3NlZChtc2cpCit7Cisg
ICAgdGVzdFByaW50KCc8c3Bhbj48c3BhbiBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4gJyArIGVz
Y2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Cit9CisKK2Z1bmN0aW9uIHByaW50VGVzdEZhaWxl
ZChtc2cpCit7CisgICAgdGVzdFByaW50KCc8c3Bhbj48c3BhbiBjbGFzcz0iZmFpbCI+RkFJTDwv
c3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Cit9CisKK2Z1bmN0aW9uIHRl
c3RGYWlsZWQobXNnKQoreworICAgIHRocm93IG5ldyBTcHV0bmlrRXJyb3IobXNnKTsKK30KKwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworPC9zY3JpcHQ+CisKKzwvaGVhZD4KKzxi
b2R5PgorPHA+UzE1LjEuMS4yX1IzLjE8L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKzxz
Y3JpcHQ+Cit0cnkgeworCisvKioKKyAqIEBuYW1lOiBTMTUuMS4xLjJfUjMuMTsKKyAqIEBzZWN0
aW9uOiAxNS4xLjEuMiwgMTUuMS4yLjQ7CisgKiBAZGVzY3JpcHRpb246IFRoZSBJbmZpbml0eSBp
cyBub3QgUmVhZE9ubHksIGNoZWNrIGlzTmFOIGZvciByZXNldHRhYmlsaXR5IG9mIHJlc3VsdDsK
KyovCisKKy8vIENIRUNLIzEKK0luZmluaXR5ID0gIjAiOworaXNOYU4oKTsKK2lmIChJbmZpbml0
eSAhPT0gIjAiKSB7CisgIEluZmluaXR5ID0gIjAiOworICBpc05hTigpOworICBpZiAoSW5maW5p
dHkgPT09ICIwIikgeworICAgIHRlc3RGYWlsZWQoJyMxOiBpc05hTiByZXNldHRhYmlsaXR5IG9m
IHJlc3VsdCBmb3IgSW5maW5pdHkgdmFsdWUnKTsKKyAgfQorfQorCit9IGNhdGNoIChleCkgewor
ICAgIHNwdXRuaWtFeGNlcHRpb24gPSBleDsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK2lmICghc3VjY2Vzc2Z1bGx5UGFyc2VkKQor
ICAgIHByaW50VGVzdEZhaWxlZCgnc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIG5vdCBzZXQnKTsKK2Vs
c2UgaWYgKHNwdXRuaWtFeGNlcHRpb24pCisgICAgcHJpbnRUZXN0RmFpbGVkKHNwdXRuaWtFeGNl
cHRpb24pOworZWxzZQorICAgIHByaW50VGVzdFBhc3NlZCgiIik7Cit0ZXN0UHJpbnQoJzxiciAv
PjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVz
c2lvbi9TMTUuMS4xLjJfUjIuMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
anMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMl9SMi4yLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjJfUjIuMi5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk3IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEg
Y2hhcnNldD0ndXRmLTgnPgorPHN0eWxlPgorLnBhc3MgeworICAgIGZvbnQtd2VpZ2h0OiBib2xk
OworICAgIGNvbG9yOiBncmVlbjsKK30KKy5mYWlsIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsK
KyAgICBjb2xvcjogcmVkOworfQorPC9zdHlsZT4KKworPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworCitmdW5jdGlvbiBTcHV0bmlrRXJyb3IobWVzc2FnZSkKK3sKKyAgICB0aGlzLm1lc3NhZ2Ug
PSBtZXNzYWdlOworfQorCitTcHV0bmlrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rp
b24gKCkKK3sKKyAgICByZXR1cm4gJ1NwdXRuaWtFcnJvcjogJyArIHRoaXMubWVzc2FnZTsKK307
CisKK3ZhciBzcHV0bmlrRXhjZXB0aW9uOworCitmdW5jdGlvbiB0ZXN0UHJpbnQobXNnKQorewor
ICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2Vy
dCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0aGUgbmFtZXNwYWNlIAorICAgIHNwYW4uaW5uZXJI
VE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1bmN0aW9uIGVzY2FwZUhUTUwodGV4dCkKK3sK
KyAgICByZXR1cm4gdGV4dC50b1N0cmluZygpLnJlcGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFj
ZSgvPC9nLCAiJmx0OyIpOworfQorCitmdW5jdGlvbiBwcmludFRlc3RQYXNzZWQobXNnKQorewor
ICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4gY2xhc3M9InBhc3MiPlBBU1M8L3NwYW4+ICcgKyBl
c2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOworfQorCitmdW5jdGlvbiBwcmludFRlc3RGYWls
ZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4gY2xhc3M9ImZhaWwiPkZBSUw8
L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOworfQorCitmdW5jdGlvbiB0
ZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0aHJvdyBuZXcgU3B1dG5pa0Vycm9yKG1zZyk7Cit9CisK
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8
Ym9keT4KKzxwPlMxNS4xLjEuMl9SMi4yPC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+Cis8
c2NyaXB0PgordHJ5IHsKKworLyoqCisgKiBAbmFtZTogUzE1LjEuMS4yX1IyLjI7CisgKiBAc2Vj
dGlvbjogMTUuMS4xLjIsIDE1LjEuMiwgMTUuMS4zOworICogQGRlc2NyaXB0aW9uOiBUaGUgSW5m
aW5pdHkgaXMgbm90IFJlYWRPbmx5LCBjaGVjayBpc0Zpbml0ZSBGdW5jdGlvbnMgdGhhdCB1c2Ug
VG9OdW1iZXI7IAorKi8KKworLy8gQ0hFQ0sjMQorSW5maW5pdHkgPSAwOworaWYgKGlzRmluaXRl
KEluZmluaXR5KSAhPT0gdHJ1ZSkgeworICB0ZXN0RmFpbGVkKCcjMTogSW5maW5pdHkgPSAwOyBp
c0Zpbml0ZShJbmZpbml0eSkgPT09IHRydWUnKTsgCit9CisKK30gY2F0Y2ggKGV4KSB7CisgICAg
c3B1dG5pa0V4Y2VwdGlvbiA9IGV4OworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0PgoraWYgKCFzdWNjZXNzZnVsbHlQYXJzZWQpCisgICAg
cHJpbnRUZXN0RmFpbGVkKCdzdWNjZXNzZnVsbHlQYXJzZWQgaXMgbm90IHNldCcpOworZWxzZSBp
ZiAoc3B1dG5pa0V4Y2VwdGlvbikKKyAgICBwcmludFRlc3RGYWlsZWQoc3B1dG5pa0V4Y2VwdGlv
bik7CitlbHNlCisgICAgcHJpbnRUZXN0UGFzc2VkKCIiKTsKK3Rlc3RQcmludCgnPGJyIC8+PHNw
YW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9u
L1MxMS4xMy4yX1IyLjNfVDItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMS4xMy4yX1IyLjNfVDItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24v
UzExLjEzLjJfUjIuM19UMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBA
QAorUzExLjEzLjJfUjIuM19UMgorCitQQVNTIAorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMS4xMy4yX1IyLjNfVDQtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdy
ZXNzaW9uL1MxMS4xMy4yX1IyLjNfVDQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19UNC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorUzExLjEzLjJfUjIuM19UNAor
CitQQVNTIAorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3B1
dG5pay9SZWdyZXNzaW9uL1MxMS4xMy4yX1IyLjNfVDYtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMS4xMy4yX1IyLjNf
VDYtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0
bmlrL1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19UNi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNiBAQAorUzExLjEzLjJfUjIuM19UNgorCitQQVNTIAorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMS4x
My4yX1IyLjNfVDEwLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0
bmlrL1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19UMTAuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMS4xMy4yX1IyLjNfVDEwLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEg
Y2hhcnNldD0ndXRmLTgnPgorPHN0eWxlPgorLnBhc3MgeworICAgIGZvbnQtd2VpZ2h0OiBib2xk
OworICAgIGNvbG9yOiBncmVlbjsKK30KKy5mYWlsIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsK
KyAgICBjb2xvcjogcmVkOworfQorPC9zdHlsZT4KKworPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworCitmdW5jdGlvbiBTcHV0bmlrRXJyb3IobWVzc2FnZSkKK3sKKyAgICB0aGlzLm1lc3NhZ2Ug
PSBtZXNzYWdlOworfQorCitTcHV0bmlrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rp
b24gKCkKK3sKKyAgICByZXR1cm4gJ1NwdXRuaWtFcnJvcjogJyArIHRoaXMubWVzc2FnZTsKK307
CisKK3ZhciBzcHV0bmlrRXhjZXB0aW9uOworCitmdW5jdGlvbiB0ZXN0UHJpbnQobXNnKQorewor
ICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2Vy
dCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0aGUgbmFtZXNwYWNlIAorICAgIHNwYW4uaW5uZXJI
VE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1bmN0aW9uIGVzY2FwZUhUTUwodGV4dCkKK3sK
KyAgICByZXR1cm4gdGV4dC50b1N0cmluZygpLnJlcGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFj
ZSgvPC9nLCAiJmx0OyIpOworfQorCitmdW5jdGlvbiBwcmludFRlc3RQYXNzZWQobXNnKQorewor
ICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4gY2xhc3M9InBhc3MiPlBBU1M8L3NwYW4+ICcgKyBl
c2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOworfQorCitmdW5jdGlvbiBwcmludFRlc3RGYWls
ZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4gY2xhc3M9ImZhaWwiPkZBSUw8
L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOworfQorCitmdW5jdGlvbiB0
ZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0aHJvdyBuZXcgU3B1dG5pa0Vycm9yKG1zZyk7Cit9CisK
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8
Ym9keT4KKzxwPlMxMS4xMy4yX1IyLjNfVDEwPC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+
Cis8c2NyaXB0PgordHJ5IHsKKworLyoqCisgKiBAbmFtZTogUzExLjEzLjJfUjIuM19UMTA7Cisg
KiBAc2VjdGlvbjogMTEuMTMuMjsKKyAqIEBkZXNjcmlwdGlvbjogUmVzdWx0IGlzIG5vdCBUb0lu
dDMyKFVuZGVmaW5lZCkgXiBUb0ludDMyKEFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyovCisKKy8v
Q0hFQ0sjMQordHJ5IHsgIAorICB4IF49IG5ldyBTdHJpbmcoIi0xIik7CisgIGlmICh4ID09PSAt
MSkgeworICAgIHRlc3RGYWlsZWQoJyMxOiBSZXN1bHQgaXMgbm90IFRvSW50MzIoVW5kZWZpbmVk
KSBeIFRvSW50MzIoQXNzaWdubWVudEV4cHJlc3Npb24pJyk7CisgIH0gIGVsc2UgeworICAgIHRl
c3RGYWlsZWQoJyMxOiB4IF49IG5ldyBTdHJpbmcoIi0xIikgdGhyb3cgUmVmZXJlbmNlRXJyb3In
KTsKKyAgfSAKK30KK2NhdGNoIChlKSB7CisgIGlmICgoZSBpbnN0YW5jZW9mIFJlZmVyZW5jZUVy
cm9yKSAhPT0gdHJ1ZSkgeworICAgIHRlc3RGYWlsZWQoJyMxOiB4IF49IG5ldyBTdHJpbmcoIi0x
IikgdGhyb3cgUmVmZXJlbmNlRXJyb3InKTsgIAorICB9Cit9CisKK30gY2F0Y2ggKGV4KSB7Cisg
ICAgc3B1dG5pa0V4Y2VwdGlvbiA9IGV4OworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0PgoraWYgKCFzdWNjZXNzZnVsbHlQYXJzZWQpCisg
ICAgcHJpbnRUZXN0RmFpbGVkKCdzdWNjZXNzZnVsbHlQYXJzZWQgaXMgbm90IHNldCcpOworZWxz
ZSBpZiAoc3B1dG5pa0V4Y2VwdGlvbikKKyAgICBwcmludFRlc3RGYWlsZWQoc3B1dG5pa0V4Y2Vw
dGlvbik7CitlbHNlCisgICAgcHJpbnRUZXN0UGFzc2VkKCIiKTsKK3Rlc3RQcmludCgnPGJyIC8+
PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNz
aW9uL1MxMi42LjRfUjIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Nw
dXRuaWsvUmVncmVzc2lvbi9TMTIuNi40X1IyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTIuNi40X1IyLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTI4IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0ndXRm
LTgnPgorPHN0eWxlPgorLnBhc3MgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9y
OiBncmVlbjsKK30KKy5mYWlsIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjog
cmVkOworfQorPC9zdHlsZT4KKworPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlv
biBTcHV0bmlrRXJyb3IobWVzc2FnZSkKK3sKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwor
fQorCitTcHV0bmlrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkKK3sKKyAg
ICByZXR1cm4gJ1NwdXRuaWtFcnJvcjogJyArIHRoaXMubWVzc2FnZTsKK307CisKK3ZhciBzcHV0
bmlrRXhjZXB0aW9uOworCitmdW5jdGlvbiB0ZXN0UHJpbnQobXNnKQoreworICAgIHZhciBzcGFu
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBz
byBYSFRNTCBrbm93cyB0aGUgbmFtZXNwYWNlIAorICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsg
JzxiciAvPic7Cit9CisKK2Z1bmN0aW9uIGVzY2FwZUhUTUwodGV4dCkKK3sKKyAgICByZXR1cm4g
dGV4dC50b1N0cmluZygpLnJlcGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0
OyIpOworfQorCitmdW5jdGlvbiBwcmludFRlc3RQYXNzZWQobXNnKQoreworICAgIHRlc3RQcmlu
dCgnPHNwYW4+PHNwYW4gY2xhc3M9InBhc3MiPlBBU1M8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1z
ZykgKyAnPC9zcGFuPicpOworfQorCitmdW5jdGlvbiBwcmludFRlc3RGYWlsZWQobXNnKQorewor
ICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4gY2xhc3M9ImZhaWwiPkZBSUw8L3NwYW4+ICcgKyBl
c2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOworfQorCitmdW5jdGlvbiB0ZXN0RmFpbGVkKG1z
ZykKK3sKKyAgICB0aHJvdyBuZXcgU3B1dG5pa0Vycm9yKG1zZyk7Cit9CisKK3ZhciBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keT4KKzxwPlMx
Mi42LjRfUjI8L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+Cit0cnkgewor
CisvKioKKyAqIEBuYW1lOiBTMTIuNi40X1IyOworICogQHNlY3Rpb246IDEyLjYuNCwgOS45Owor
ICogQGRlc2NyaXB0aW9uOiBUaGUgZm9yLWluIHN0YXRlbWVudCBtdXN0IG5vdCB0aHJvdyBUeXBl
RXJyb3IgZm9yIG51bGwKKyAqIHZhbHVlcywgY2F1c2UgaXQncyBhIGJ1ZyBpbiB0aGUgU3RhbmRh
cmQ7IAorKi8KKworLy8gQ0hFQ0sjMQordHJ5eworICB2YXIgeDEgPSAxOworICBmb3IodmFyIHkx
IGluIG51bGwpIHgxID0gMjsKKyAgaWYgKHgxID09PSAxKSB7CisgICAgdGVzdFByaW50KCIjMTog
cGFzc2VkIik7CisgIH0gZWxzZSB7CisgICAgdGVzdEZhaWxlZCgiIzE6IFRoZSBmb3ItaW4gc3Rh
dGVtZW50IG11c3Qgbm90IGZ1bGxmaWxsLCB0aGUgdmFsdWUgd2FzIGNoYW5nZWQiKTsKKyAgfQor
fSAKK2NhdGNoKGUpeworICBpZihlIGluc3RhbmNlb2YgVHlwZUVycm9yKXsKKyAgICB0ZXN0RmFp
bGVkKCIjMTogVGhlIGZvci1pbiBzdGF0ZW1lbnQgbXVzdCBub3QgdGhyb3cgVHlwZUVycm9yIGZv
ciBudWxsIHZhbHVlcywgY2F1c2UgaXQncyBhIGJ1ZyBpbiB0aGUgU3RhbmRhcmQiKTsKKyAgfSBl
bHNlIHsKKyAgICB0ZXN0RmFpbGVkKCIjMTogVGhlIGZvci1pbiBzdGF0ZW1lbnQgbXVzdCBub3Qg
dGhyb3cgRXJyb3IgZm9yIG51bGwgdmFsdWVzLCBjYXVzZSBpdCdzIGEgYnVnIGluIHRoZSBTdGFu
ZGFyZCIpOworICB9Cit9CisKKy8vIENIRUNLIzIKK3RyeXsKKyAgdmFyIHgyID0gMTsKKyAgZm9y
KHZhciB5MiBpbiAnYmJiJy5tYXRjaCgvYWFhLykpIHgyID0gMjsKKyAgaWYgKHgyID09PSAxKSB7
CisgICAgdGVzdFByaW50KCIjMTogcGFzc2VkIik7CisgIH0gZWxzZSB7CisgICAgdGVzdEZhaWxl
ZCgiIzE6IFRoZSBmb3ItaW4gc3RhdGVtZW50IG11c3Qgbm90IGZ1bGxmaWxsLCB0aGUgdmFsdWUg
d2FzIGNoYW5nZWQiKTsKKyAgfQorfSAKK2NhdGNoKGUpeworICBpZihlIGluc3RhbmNlb2YgVHlw
ZUVycm9yKXsKKyAgICB0ZXN0RmFpbGVkKCIjMTogVGhlIGZvci1pbiBzdGF0ZW1lbnQgbXVzdCBu
b3QgdGhyb3cgVHlwZUVycm9yIGZvciBudWxsIHZhbHVlcywgY2F1c2UgaXQncyBhIGJ1ZyBpbiB0
aGUgU3RhbmRhcmQiKTsKKyAgfSBlbHNlIHsKKyAgICB0ZXN0RmFpbGVkKCIjMTogVGhlIGZvci1p
biBzdGF0ZW1lbnQgbXVzdCBub3QgdGhyb3cgRXJyb3IgZm9yIG51bGwgdmFsdWVzLCBjYXVzZSBp
dCdzIGEgYnVnIGluIHRoZSBTdGFuZGFyZCIpOworICB9Cit9CisKK30gY2F0Y2ggKGV4KSB7Cisg
ICAgc3B1dG5pa0V4Y2VwdGlvbiA9IGV4OworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0PgoraWYgKCFzdWNjZXNzZnVsbHlQYXJzZWQpCisg
ICAgcHJpbnRUZXN0RmFpbGVkKCdzdWNjZXNzZnVsbHlQYXJzZWQgaXMgbm90IHNldCcpOworZWxz
ZSBpZiAoc3B1dG5pa0V4Y2VwdGlvbikKKyAgICBwcmludFRlc3RGYWlsZWQoc3B1dG5pa0V4Y2Vw
dGlvbik7CitlbHNlCisgICAgcHJpbnRUZXN0UGFzc2VkKCIiKTsKK3Rlc3RQcmludCgnPGJyIC8+
PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNz
aW9uL1MxMS4xMy4yX1IyLjNfVDgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMS4xMy4yX1IyLjNfVDgtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Np
b24vUzExLjEzLjJfUjIuM19UOC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NiBAQAorUzExLjEzLjJfUjIuM19UOAorCitQQVNTIAorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMV9SMi4xLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVn
cmVzc2lvbi9TMTUuMS4xLjFfUjIuMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjFfUjIuMS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorUzE1LjEuMS4xX1IyLjEKKworRkFJ
TCBTcHV0bmlrRXJyb3I6ICMxOiBOYU4gPSAxOyBpc05hTihOYU4pID09PSBmYWxzZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9u
L1MxNS4xLjEuMl9SMi4xLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjJfUjIuMS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUu
MS4xLjJfUjIuMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorUzE1
LjEuMS4yX1IyLjEKKworRkFJTCBTcHV0bmlrRXJyb3I6ICMxOiBJbmZpbml0eSA9ICJzdHJpbmci
OyBpc05hTihJbmZpbml0eSkgPT09IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjFfUjMuMi1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Np
b24vUzE1LjEuMS4xX1IzLjItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzE1LjEuMS4xX1IzLjItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK1MxNS4xLjEuMV9SMy4yCisKK1BBU1MgCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jl
c3Npb24vUzE1LjEuMS4xX1I0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjFfUjQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzE1
LjEuMS4xX1I0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACitTMTUu
MS4xLjFfUjQKKworRkFJTCBTcHV0bmlrRXJyb3I6ICMxOiBOYU4gPSB0cnVlOyBOYU4rKzsgTmFO
ID09PSAyCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0
bmlrL1JlZ3Jlc3Npb24vUzE1LjEuMS4yX1IzLjItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMl9SMy4yLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9S
ZWdyZXNzaW9uL1MxNS4xLjEuMl9SMy4yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2IEBACitTMTUuMS4xLjJfUjMuMgorCitQQVNTIAorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMl9SNC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1Jl
Z3Jlc3Npb24vUzE1LjEuMS4yX1I0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMl9SNC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorUzE1LjEuMS4yX1I0CisKK0ZBSUwgU3B1
dG5pa0Vycm9yOiAjMTogSW5maW5pdHkgPSB0cnVlOyBJbmZpbml0eSsrOyBJbmZpbml0eSA9PT0g
MgorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9S
ZWdyZXNzaW9uL1MxMi42LjRfUjEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMi42LjRfUjEtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzEy
LjYuNF9SMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorUzEyLjYu
NF9SMQorCisjMTogcGFzc2VkCisjMTogcGFzc2VkCitQQVNTIAorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMS4xMy4yX1Iy
LjNfVDExLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Nw
dXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1QxMS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9S
Mi4zX1QxMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorUzExLjEz
LjJfUjIuM19UMTEKKworUEFTUyAKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1QyLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzExLjEzLjJf
UjIuM19UMi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlr
L1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19UMi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwNiBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KKzxzdHlsZT4K
Ky5wYXNzIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogZ3JlZW47Cit9Cisu
ZmFpbCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHJlZDsKK30KKzwvc3R5
bGU+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gU3B1dG5pa0Vycm9y
KG1lc3NhZ2UpCit7CisgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKK30KKworU3B1dG5pa0Vy
cm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpCit7CisgICAgcmV0dXJuICdTcHV0
bmlrRXJyb3I6ICcgKyB0aGlzLm1lc3NhZ2U7Cit9OworCit2YXIgc3B1dG5pa0V4Y2VwdGlvbjsK
KworZnVuY3Rpb24gdGVzdFByaW50KG1zZykKK3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29s
ZSIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3Mg
dGhlIG5hbWVzcGFjZSAKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQor
CitmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCit7CisgICAgcmV0dXJuIHRleHQudG9TdHJpbmco
KS5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsKK30KKworZnVu
Y3Rpb24gcHJpbnRUZXN0UGFzc2VkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFu
IGNsYXNzPSJwYXNzIj5QQVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4n
KTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQo
JzxzcGFuPjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cp
ICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpCit7CisgICAgdGhy
b3cgbmV3IFNwdXRuaWtFcnJvcihtc2cpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
ZmFsc2U7Cis8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHk+Cis8cD5TMTEuMTMuMl9SMi4zX1Qy
PC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+Cis8c2NyaXB0PgordHJ5IHsKKworLyoqCisg
KiBAbmFtZTogUzExLjEzLjJfUjIuM19UMjsKKyAqIEBzZWN0aW9uOiAxMS4xMy4yOworICogQGRl
c2NyaXB0aW9uOiBSZXN1bHQgaXMgbm90IFRvTnVtYmVyKFVuZGVmaW5lZCkgLyBUb051bWJlcihB
c3NpZ25tZW50RXhwcmVzc2lvbik7CisqLworCisvL0NIRUNLIzEKK3RyeSB7ICAKKyAgeCAvPSBu
ZXcgU3RyaW5nKCItMSIpOworICBpZiAoaXNOYU4oeCkgPT09IHRydWUpIHsKKyAgICB0ZXN0RmFp
bGVkKCcjMTogUmVzdWx0IGlzIG5vdCBUb051bWJlcjMyKFVuZGVmaW5lZCkgLyBUb051bWJlcjMy
KEFzc2lnbm1lbnRFeHByZXNzaW9uKScpOworICB9ICBlbHNlIHsKKyAgICB0ZXN0RmFpbGVkKCcj
MTogeCAvPSBuZXcgU3RyaW5nKCItMSIpIHRocm93IFJlZmVyZW5jZUVycm9yJyk7CisgIH0gCit9
CitjYXRjaCAoZSkgeworICBpZiAoKGUgaW5zdGFuY2VvZiBSZWZlcmVuY2VFcnJvcikgIT09IHRy
dWUpIHsKKyAgICB0ZXN0RmFpbGVkKCcjMTogeCAvPSBuZXcgU3RyaW5nKCItMSIpIHRocm93IFJl
ZmVyZW5jZUVycm9yJyk7ICAKKyAgfQorfQorCit9IGNhdGNoIChleCkgeworICAgIHNwdXRuaWtF
eGNlcHRpb24gPSBleDsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Nj
cmlwdD4KKworPHNjcmlwdD4KK2lmICghc3VjY2Vzc2Z1bGx5UGFyc2VkKQorICAgIHByaW50VGVz
dEZhaWxlZCgnc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIG5vdCBzZXQnKTsKK2Vsc2UgaWYgKHNwdXRu
aWtFeGNlcHRpb24pCisgICAgcHJpbnRUZXN0RmFpbGVkKHNwdXRuaWtFeGNlcHRpb24pOworZWxz
ZQorICAgIHByaW50VGVzdFBhc3NlZCgiIik7Cit0ZXN0UHJpbnQoJzxiciAvPjxzcGFuIGNsYXNz
PSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMu
Ml9SMi4zX1Q0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlr
L1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19UNC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19UNC5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJz
ZXQ9J3V0Zi04Jz4KKzxzdHlsZT4KKy5wYXNzIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAg
ICBjb2xvcjogZ3JlZW47Cit9CisuZmFpbCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAg
Y29sb3I6IHJlZDsKK30KKzwvc3R5bGU+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwor
ZnVuY3Rpb24gU3B1dG5pa0Vycm9yKG1lc3NhZ2UpCit7CisgICAgdGhpcy5tZXNzYWdlID0gbWVz
c2FnZTsKK30KKworU3B1dG5pa0Vycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgp
Cit7CisgICAgcmV0dXJuICdTcHV0bmlrRXJyb3I6ICcgKyB0aGlzLm1lc3NhZ2U7Cit9OworCit2
YXIgc3B1dG5pa0V4Y2VwdGlvbjsKKworZnVuY3Rpb24gdGVzdFByaW50KG1zZykKK3sKKyAgICB2
YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQg
Zmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZSAKKyAgICBzcGFuLmlubmVySFRNTCA9
IG1zZyArICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCit7CisgICAg
cmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwv
ZywgIiZsdDsiKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0UGFzc2VkKG1zZykKK3sKKyAgICB0
ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9zcGFuPiAnICsgZXNjYXBl
SFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0RmFpbGVkKG1z
ZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFu
PiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gdGVzdEZh
aWxlZChtc2cpCit7CisgICAgdGhyb3cgbmV3IFNwdXRuaWtFcnJvcihtc2cpOworfQorCit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHk+
Cis8cD5TMTEuMTMuMl9SMi4zX1Q0PC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+Cis8c2Ny
aXB0PgordHJ5IHsKKworLyoqCisgKiBAbmFtZTogUzExLjEzLjJfUjIuM19UNDsKKyAqIEBzZWN0
aW9uOiAxMS4xMy4yOworICogQGRlc2NyaXB0aW9uOiBSZXN1bHQgaXMgbm90IFRvTnVtYmVyKFVu
ZGVmaW5lZCkgKyBUb051bWJlcihBc3NpZ25tZW50RXhwcmVzc2lvbik7CisqLworCisvL0NIRUNL
IzEKK3RyeSB7ICAKKyAgeCArPSBuZXcgU3RyaW5nKCItMSIpOworICBpZiAoaXNOYU4oeCkgPT09
IHRydWUpIHsKKyAgICB0ZXN0RmFpbGVkKCcjMTogUmVzdWx0IGlzIG5vdCBUb051bWJlcjMyKFVu
ZGVmaW5lZCkgKyBUb051bWJlcjMyKEFzc2lnbm1lbnRFeHByZXNzaW9uKScpOworICB9ICBlbHNl
IHsKKyAgICB0ZXN0RmFpbGVkKCcjMTogeCArPSBuZXcgU3RyaW5nKCItMSIpIHRocm93IFJlZmVy
ZW5jZUVycm9yJyk7CisgIH0gCit9CitjYXRjaCAoZSkgeworICBpZiAoKGUgaW5zdGFuY2VvZiBS
ZWZlcmVuY2VFcnJvcikgIT09IHRydWUpIHsKKyAgICB0ZXN0RmFpbGVkKCcjMTogeCArPSBuZXcg
U3RyaW5nKCItMSIpIHRocm93IFJlZmVyZW5jZUVycm9yJyk7ICAKKyAgfQorfQorCit9IGNhdGNo
IChleCkgeworICAgIHNwdXRuaWtFeGNlcHRpb24gPSBleDsKK30KKwordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK2lmICghc3VjY2Vzc2Z1bGx5
UGFyc2VkKQorICAgIHByaW50VGVzdEZhaWxlZCgnc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIG5vdCBz
ZXQnKTsKK2Vsc2UgaWYgKHNwdXRuaWtFeGNlcHRpb24pCisgICAgcHJpbnRUZXN0RmFpbGVkKHNw
dXRuaWtFeGNlcHRpb24pOworZWxzZQorICAgIHByaW50VGVzdFBhc3NlZCgiIik7Cit0ZXN0UHJp
bnQoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRu
aWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1Q2Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzExLjEzLjJfUjIuM19UNi5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzEx
LjEzLjJfUjIuM19UNi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorPGh0bWw+
Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KKzxzdHlsZT4KKy5wYXNzIHsKKyAgICBm
b250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogZ3JlZW47Cit9CisuZmFpbCB7CisgICAgZm9u
dC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHJlZDsKK30KKzwvc3R5bGU+CisKKzxzY3JpcHQ+
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gU3B1dG5pa0Vycm9yKG1lc3NhZ2UpCit7Cisg
ICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKK30KKworU3B1dG5pa0Vycm9yLnByb3RvdHlwZS50
b1N0cmluZyA9IGZ1bmN0aW9uICgpCit7CisgICAgcmV0dXJuICdTcHV0bmlrRXJyb3I6ICcgKyB0
aGlzLm1lc3NhZ2U7Cit9OworCit2YXIgc3B1dG5pa0V4Y2VwdGlvbjsKKworZnVuY3Rpb24gdGVz
dFByaW50KG1zZykKK3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxk
KHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZSAK
KyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBlc2Nh
cGVIVE1MKHRleHQpCit7CisgICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2cs
ICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0
UGFzc2VkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5Q
QVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rp
b24gcHJpbnRUZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNs
YXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsK
K30KKworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpCit7CisgICAgdGhyb3cgbmV3IFNwdXRuaWtF
cnJvcihtc2cpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3Njcmlw
dD4KKworPC9oZWFkPgorPGJvZHk+Cis8cD5TMTEuMTMuMl9SMi4zX1Q2PC9wPgorPGRpdiBpZD0n
Y29uc29sZSc+PC9kaXY+Cis8c2NyaXB0PgordHJ5IHsKKworLyoqCisgKiBAbmFtZTogUzExLjEz
LjJfUjIuM19UNjsKKyAqIEBzZWN0aW9uOiAxMS4xMy4yOworICogQGRlc2NyaXB0aW9uOiBSZXN1
bHQgaXMgbm90IFRvSW50MzIoVW5kZWZpbmVkKSA8PCBUb0ludDMyKEFzc2lnbm1lbnRFeHByZXNz
aW9uKTsKKyovCisKKy8vQ0hFQ0sjMQordHJ5IHsgIAorICB4IDw8PSBuZXcgU3RyaW5nKCItMSIp
OworICBpZiAoeCA9PT0gMCkgeworICAgIHRlc3RGYWlsZWQoJyMxOiBSZXN1bHQgaXMgbm90IFRv
SW50MzIoVW5kZWZpbmVkKSA8PCBUb0ludDMyKEFzc2lnbm1lbnRFeHByZXNzaW9uKScpOworICB9
ICBlbHNlIHsKKyAgICB0ZXN0RmFpbGVkKCcjMTogeCA8PD0gbmV3IFN0cmluZygiLTEiKSB0aHJv
dyBSZWZlcmVuY2VFcnJvcicpOworICB9IAorfQorY2F0Y2ggKGUpIHsKKyAgaWYgKChlIGluc3Rh
bmNlb2YgUmVmZXJlbmNlRXJyb3IpICE9PSB0cnVlKSB7CisgICAgdGVzdEZhaWxlZCgnIzE6IHgg
PDw9IG5ldyBTdHJpbmcoIi0xIikgdGhyb3cgUmVmZXJlbmNlRXJyb3InKTsgIAorICB9Cit9CisK
K30gY2F0Y2ggKGV4KSB7CisgICAgc3B1dG5pa0V4Y2VwdGlvbiA9IGV4OworfQorCit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0PgoraWYgKCFzdWNj
ZXNzZnVsbHlQYXJzZWQpCisgICAgcHJpbnRUZXN0RmFpbGVkKCdzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgbm90IHNldCcpOworZWxzZSBpZiAoc3B1dG5pa0V4Y2VwdGlvbikKKyAgICBwcmludFRlc3RG
YWlsZWQoc3B1dG5pa0V4Y2VwdGlvbik7CitlbHNlCisgICAgcHJpbnRUZXN0UGFzc2VkKCIiKTsK
K3Rlc3RQcmludCgnPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+
Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvc3B1dG5pay9SZWdyZXNzaW9uL1MxMS4xMy4yX1IyLjNfVDguaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1Q4
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVz
c2lvbi9TMTEuMTMuMl9SMi4zX1Q4Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBA
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0ndXRmLTgnPgorPHN0eWxlPgorLnBhc3Mg
eworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiBncmVlbjsKK30KKy5mYWlsIHsK
KyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogcmVkOworfQorPC9zdHlsZT4KKwor
PHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBTcHV0bmlrRXJyb3IobWVzc2Fn
ZSkKK3sKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworfQorCitTcHV0bmlrRXJyb3IucHJv
dG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkKK3sKKyAgICByZXR1cm4gJ1NwdXRuaWtFcnJv
cjogJyArIHRoaXMubWVzc2FnZTsKK307CisKK3ZhciBzcHV0bmlrRXhjZXB0aW9uOworCitmdW5j
dGlvbiB0ZXN0UHJpbnQobXNnKQoreworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic3BhbiIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBw
ZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0aGUgbmFt
ZXNwYWNlIAorICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1bmN0
aW9uIGVzY2FwZUhUTUwodGV4dCkKK3sKKyAgICByZXR1cm4gdGV4dC50b1N0cmluZygpLnJlcGxh
Y2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0OyIpOworfQorCitmdW5jdGlvbiBw
cmludFRlc3RQYXNzZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4gY2xhc3M9
InBhc3MiPlBBU1M8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOworfQor
CitmdW5jdGlvbiBwcmludFRlc3RGYWlsZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNwYW4+
PHNwYW4gY2xhc3M9ImZhaWwiPkZBSUw8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9z
cGFuPicpOworfQorCitmdW5jdGlvbiB0ZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0aHJvdyBuZXcg
U3B1dG5pa0Vycm9yKG1zZyk7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsK
Kzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keT4KKzxwPlMxMS4xMy4yX1IyLjNfVDg8L3A+Cis8
ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+Cit0cnkgeworCisvKioKKyAqIEBuYW1l
OiBTMTEuMTMuMl9SMi4zX1Q4OworICogQHNlY3Rpb246IDExLjEzLjI7CisgKiBAZGVzY3JpcHRp
b246IFJlc3VsdCBpcyBub3QgVG9JbnQzMihVbmRlZmluZWQpID4+PiBUb0ludDMyKEFzc2lnbm1l
bnRFeHByZXNzaW9uKTsKKyovCisKKy8vQ0hFQ0sjMQordHJ5IHsgIAorICB4ID4+Pj0gbmV3IFN0
cmluZygiLTEiKTsKKyAgaWYgKHggPT09IDApIHsKKyAgICB0ZXN0RmFpbGVkKCcjMTogUmVzdWx0
IGlzIG5vdCBUb0ludDMyKFVuZGVmaW5lZCkgPj4+IFRvSW50MzIoQXNzaWdubWVudEV4cHJlc3Np
b24pJyk7CisgIH0gIGVsc2UgeworICAgIHRlc3RGYWlsZWQoJyMxOiB4ID4+Pj0gbmV3IFN0cmlu
ZygiLTEiKSB0aHJvdyBSZWZlcmVuY2VFcnJvcicpOworICB9IAorfQorY2F0Y2ggKGUpIHsKKyAg
aWYgKChlIGluc3RhbmNlb2YgUmVmZXJlbmNlRXJyb3IpICE9PSB0cnVlKSB7CisgICAgdGVzdEZh
aWxlZCgnIzE6IHggPj4+PSBuZXcgU3RyaW5nKCItMSIpIHRocm93IFJlZmVyZW5jZUVycm9yJyk7
ICAKKyAgfQorfQorCit9IGNhdGNoIChleCkgeworICAgIHNwdXRuaWtFeGNlcHRpb24gPSBleDsK
K30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlw
dD4KK2lmICghc3VjY2Vzc2Z1bGx5UGFyc2VkKQorICAgIHByaW50VGVzdEZhaWxlZCgnc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIG5vdCBzZXQnKTsKK2Vsc2UgaWYgKHNwdXRuaWtFeGNlcHRpb24pCisg
ICAgcHJpbnRUZXN0RmFpbGVkKHNwdXRuaWtFeGNlcHRpb24pOworZWxzZQorICAgIHByaW50VGVz
dFBhc3NlZCgiIik7Cit0ZXN0UHJpbnQoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENP
TVBMRVRFPC9zcGFuPicpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjFfUjIuMS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4x
LjEuMV9SMi4xLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRu
aWsvUmVncmVzc2lvbi9TMTUuMS4xLjFfUjIuMS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDk3IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0ndXRmLTgnPgorPHN0eWxlPgor
LnBhc3MgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiBncmVlbjsKK30KKy5m
YWlsIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogcmVkOworfQorPC9zdHls
ZT4KKworPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBTcHV0bmlrRXJyb3Io
bWVzc2FnZSkKK3sKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworfQorCitTcHV0bmlrRXJy
b3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkKK3sKKyAgICByZXR1cm4gJ1NwdXRu
aWtFcnJvcjogJyArIHRoaXMubWVzc2FnZTsKK307CisKK3ZhciBzcHV0bmlrRXhjZXB0aW9uOwor
CitmdW5jdGlvbiB0ZXN0UHJpbnQobXNnKQoreworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xl
IikuYXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0
aGUgbmFtZXNwYWNlIAorICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisK
K2Z1bmN0aW9uIGVzY2FwZUhUTUwodGV4dCkKK3sKKyAgICByZXR1cm4gdGV4dC50b1N0cmluZygp
LnJlcGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0OyIpOworfQorCitmdW5j
dGlvbiBwcmludFRlc3RQYXNzZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4g
Y2xhc3M9InBhc3MiPlBBU1M8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicp
OworfQorCitmdW5jdGlvbiBwcmludFRlc3RGYWlsZWQobXNnKQoreworICAgIHRlc3RQcmludCgn
PHNwYW4+PHNwYW4gY2xhc3M9ImZhaWwiPkZBSUw8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykg
KyAnPC9zcGFuPicpOworfQorCitmdW5jdGlvbiB0ZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0aHJv
dyBuZXcgU3B1dG5pa0Vycm9yKG1zZyk7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBm
YWxzZTsKKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keT4KKzxwPlMxNS4xLjEuMV9SMi4xPC9w
PgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+Cis8c2NyaXB0PgordHJ5IHsKKworLyoqCisgKiBA
bmFtZTogUzE1LjEuMS4xX1IyLjE7CisgKiBAc2VjdGlvbjogMTUuMS4xLjEsIDE1LjEuMiwgMTUu
MS4zOworICogQGRlc2NyaXB0aW9uOiBUaGUgTmFOIGlzIG5vdCBSZWFkT25seSwgY2hlY2sgaXNO
YU4gRnVuY3Rpb25zIHRoYXQgdXNlIFRvTnVtYmVyOyAKKyovCisKKy8vIENIRUNLIzEKK05hTiA9
IDE7CitpZiAoaXNOYU4oTmFOKSAhPT0gZmFsc2UpIHsKKyAgdGVzdEZhaWxlZCgnIzE6IE5hTiA9
IDE7IGlzTmFOKE5hTikgPT09IGZhbHNlJyk7IAorfQorCit9IGNhdGNoIChleCkgeworICAgIHNw
dXRuaWtFeGNlcHRpb24gPSBleDsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK2lmICghc3VjY2Vzc2Z1bGx5UGFyc2VkKQorICAgIHBy
aW50VGVzdEZhaWxlZCgnc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIG5vdCBzZXQnKTsKK2Vsc2UgaWYg
KHNwdXRuaWtFeGNlcHRpb24pCisgICAgcHJpbnRUZXN0RmFpbGVkKHNwdXRuaWtFeGNlcHRpb24p
OworZWxzZQorICAgIHByaW50VGVzdFBhc3NlZCgiIik7Cit0ZXN0UHJpbnQoJzxiciAvPjxzcGFu
IGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9T
MTEuMTMuMl9SMi4zX1QxLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1QxLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1Mx
MS4xMy4yX1IyLjNfVDEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAK
K1MxMS4xMy4yX1IyLjNfVDEKKworUEFTUyAKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjJfUjIuMS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4x
LjEuMl9SMi4xLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRu
aWsvUmVncmVzc2lvbi9TMTUuMS4xLjJfUjIuMS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDk3IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0ndXRmLTgnPgorPHN0eWxlPgor
LnBhc3MgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiBncmVlbjsKK30KKy5m
YWlsIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogcmVkOworfQorPC9zdHls
ZT4KKworPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBTcHV0bmlrRXJyb3Io
bWVzc2FnZSkKK3sKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworfQorCitTcHV0bmlrRXJy
b3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkKK3sKKyAgICByZXR1cm4gJ1NwdXRu
aWtFcnJvcjogJyArIHRoaXMubWVzc2FnZTsKK307CisKK3ZhciBzcHV0bmlrRXhjZXB0aW9uOwor
CitmdW5jdGlvbiB0ZXN0UHJpbnQobXNnKQoreworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xl
IikuYXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0
aGUgbmFtZXNwYWNlIAorICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisK
K2Z1bmN0aW9uIGVzY2FwZUhUTUwodGV4dCkKK3sKKyAgICByZXR1cm4gdGV4dC50b1N0cmluZygp
LnJlcGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0OyIpOworfQorCitmdW5j
dGlvbiBwcmludFRlc3RQYXNzZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4g
Y2xhc3M9InBhc3MiPlBBU1M8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicp
OworfQorCitmdW5jdGlvbiBwcmludFRlc3RGYWlsZWQobXNnKQoreworICAgIHRlc3RQcmludCgn
PHNwYW4+PHNwYW4gY2xhc3M9ImZhaWwiPkZBSUw8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykg
KyAnPC9zcGFuPicpOworfQorCitmdW5jdGlvbiB0ZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0aHJv
dyBuZXcgU3B1dG5pa0Vycm9yKG1zZyk7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBm
YWxzZTsKKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keT4KKzxwPlMxNS4xLjEuMl9SMi4xPC9w
PgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+Cis8c2NyaXB0PgordHJ5IHsKKworLyoqCisgKiBA
bmFtZTogUzE1LjEuMS4yX1IyLjE7CisgKiBAc2VjdGlvbjogMTUuMS4xLjIsIDE1LjEuMiwgMTUu
MS4zOworICogQGRlc2NyaXB0aW9uOiBUaGUgSW5maW5pdHkgaXMgbm90IFJlYWRPbmx5LCBjaGVj
ayBpc05hTiBGdW5jdGlvbnMgdGhhdCB1c2UgVG9OdW1iZXI7IAorKi8KKworLy8gQ0hFQ0sjMQor
SW5maW5pdHkgPSAic3RyaW5nIjsKK2lmIChpc05hTihJbmZpbml0eSkgIT09IHRydWUpIHsKKyAg
dGVzdEZhaWxlZCgnIzE6IEluZmluaXR5ID0gInN0cmluZyI7IGlzTmFOKEluZmluaXR5KSA9PT0g
dHJ1ZScpOyAKK30KKworfSBjYXRjaCAoZXgpIHsKKyAgICBzcHV0bmlrRXhjZXB0aW9uID0gZXg7
Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3Jp
cHQ+CitpZiAoIXN1Y2Nlc3NmdWxseVBhcnNlZCkKKyAgICBwcmludFRlc3RGYWlsZWQoJ3N1Y2Nl
c3NmdWxseVBhcnNlZCBpcyBub3Qgc2V0Jyk7CitlbHNlIGlmIChzcHV0bmlrRXhjZXB0aW9uKQor
ICAgIHByaW50VGVzdEZhaWxlZChzcHV0bmlrRXhjZXB0aW9uKTsKK2Vsc2UKKyAgICBwcmludFRl
c3RQYXNzZWQoIiIpOwordGVzdFByaW50KCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBD
T01QTEVURTwvc3Bhbj4nKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzE1LjEuMS4xX1IzLjIuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUu
MS4xLjFfUjMuMi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0
bmlrL1JlZ3Jlc3Npb24vUzE1LjEuMS4xX1IzLjIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDIgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSd1dGYtOCc+Cis8c3R5bGU+
CisucGFzcyB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IGdyZWVuOworfQor
LmZhaWwgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiByZWQ7Cit9Cis8L3N0
eWxlPgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIFNwdXRuaWtFcnJv
cihtZXNzYWdlKQoreworICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Cit9CisKK1NwdXRuaWtF
cnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKQoreworICAgIHJldHVybiAnU3B1
dG5pa0Vycm9yOiAnICsgdGhpcy5tZXNzYWdlOworfTsKKwordmFyIHNwdXRuaWtFeGNlcHRpb247
CisKK2Z1bmN0aW9uIHRlc3RQcmludChtc2cpCit7CisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNv
bGUiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0IGZpcnN0IHNvIFhIVE1MIGtub3dz
IHRoZSBuYW1lc3BhY2UgCisgICAgc3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsKK30K
KworZnVuY3Rpb24gZXNjYXBlSFRNTCh0ZXh0KQoreworICAgIHJldHVybiB0ZXh0LnRvU3RyaW5n
KCkucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7Iik7Cit9CisKK2Z1
bmN0aW9uIHByaW50VGVzdFBhc3NlZChtc2cpCit7CisgICAgdGVzdFByaW50KCc8c3Bhbj48c3Bh
biBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+
Jyk7Cit9CisKK2Z1bmN0aW9uIHByaW50VGVzdEZhaWxlZChtc2cpCit7CisgICAgdGVzdFByaW50
KCc8c3Bhbj48c3BhbiBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNn
KSArICc8L3NwYW4+Jyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWlsZWQobXNnKQoreworICAgIHRo
cm93IG5ldyBTcHV0bmlrRXJyb3IobXNnKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IGZhbHNlOworPC9zY3JpcHQ+CisKKzwvaGVhZD4KKzxib2R5PgorPHA+UzE1LjEuMS4xX1IzLjI8
L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+Cit0cnkgeworCisvKioKKyAq
IEBuYW1lOiBTMTUuMS4xLjFfUjMuMjsKKyAqIEBzZWN0aW9uOiAxNS4xLjEuMSwgMTUuMS4yLjQ7
CisgKiBAZGVzY3JpcHRpb246IFRoZSBOYU4gaXMgbm90IFJlYWRPbmx5LCBjaGVjayBpc0Zpbml0
ZSBmb3IgcmVzZXR0YWJpbGl0eSBvZiByZXN1bHQKKyovCisKKy8vIENIRUNLIzEKK05hTiA9IDE7
Citpc0Zpbml0ZSgpOworaWYgKE5hTiAhPT0gMSkgeworICBOYU4gPSAxOworICBpc0Zpbml0ZSgp
OworICBpZiAoTmFOID09PSAxKSB7CisgICAgdGVzdEZhaWxlZCgnIzE6IGlzRmluaXRlIHJlc2V0
dGFiaWxpdHkgb2YgcmVzdWx0IGZvciBOYU4gdmFsdWUnKTsKKyAgfQorfQorCit9IGNhdGNoIChl
eCkgeworICAgIHNwdXRuaWtFeGNlcHRpb24gPSBleDsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK2lmICghc3VjY2Vzc2Z1bGx5UGFy
c2VkKQorICAgIHByaW50VGVzdEZhaWxlZCgnc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIG5vdCBzZXQn
KTsKK2Vsc2UgaWYgKHNwdXRuaWtFeGNlcHRpb24pCisgICAgcHJpbnRUZXN0RmFpbGVkKHNwdXRu
aWtFeGNlcHRpb24pOworZWxzZQorICAgIHByaW50VGVzdFBhc3NlZCgiIik7Cit0ZXN0UHJpbnQo
JzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsv
UmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1QzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTEuMTMuMl9SMi4zX1QzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9S
ZWdyZXNzaW9uL1MxMS4xMy4yX1IyLjNfVDMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYgQEAKK1MxMS4xMy4yX1IyLjNfVDMKKworUEFTUyAKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjFf
UjQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVz
c2lvbi9TMTUuMS4xLjFfUjQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
anMvc3B1dG5pay9SZWdyZXNzaW9uL1MxNS4xLjEuMV9SNC5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIyMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KKzxz
dHlsZT4KKy5wYXNzIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogZ3JlZW47
Cit9CisuZmFpbCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHJlZDsKK30K
Kzwvc3R5bGU+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gU3B1dG5p
a0Vycm9yKG1lc3NhZ2UpCit7CisgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKK30KKworU3B1
dG5pa0Vycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpCit7CisgICAgcmV0dXJu
ICdTcHV0bmlrRXJyb3I6ICcgKyB0aGlzLm1lc3NhZ2U7Cit9OworCit2YXIgc3B1dG5pa0V4Y2Vw
dGlvbjsKKworZnVuY3Rpb24gdGVzdFByaW50KG1zZykKK3sKKyAgICB2YXIgc3BhbiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwg
a25vd3MgdGhlIG5hbWVzcGFjZSAKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4n
OworfQorCitmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCit7CisgICAgcmV0dXJuIHRleHQudG9T
dHJpbmcoKS5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsKK30K
KworZnVuY3Rpb24gcHJpbnRUZXN0UGFzc2VkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFu
PjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwv
c3Bhbj4nKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0ZXN0
UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBlSFRN
TChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpCit7Cisg
ICAgdGhyb3cgbmV3IFNwdXRuaWtFcnJvcihtc2cpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHk+Cis8cD5TMTUuMS4xLjFf
UjQ8L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+Cit0cnkgeworCisvKioK
KyAqIEBuYW1lOiBTMTUuMS4xLjFfUjQ7CisgKiBAc2VjdGlvbjogMTUuMS4xLjEsIDExOworICog
QGRlc2NyaXB0aW9uOiBUaGUgTmFOIGlzIG5vdCBSZWFkT25seSwgY2hlY2sgT3BlcmF0b3JzIHRo
YXQgdXNlIFRvTnVtYmVyOyAgIAorKi8KKworLy8gQ0hFQ0sjMQorTmFOID0gdHJ1ZTsgCitOYU4r
KzsgCitpZiAoTmFOICE9PSAyKSB7CisgIHRlc3RGYWlsZWQoJyMxOiBOYU4gPSB0cnVlOyBOYU4r
KzsgTmFOID09PSAyJyk7Cit9IAorCisvLyBDSEVDSyMyCitOYU4gPSB0cnVlOyAKK05hTi0tOyAK
K2lmIChOYU4gIT09IDApIHsKKyAgdGVzdEZhaWxlZCgnIzI6IE5hTiA9IHRydWU7IE5hTi0tOyBO
YU4gPT09IDAnKTsKK30gCisKKy8vIENIRUNLIzMKK05hTiA9IHRydWU7IAorKytOYU47IAoraWYg
KE5hTiAhPT0gMikgeworICB0ZXN0RmFpbGVkKCcjMzogTmFOID0gdHJ1ZTsgKytOYU47IE5hTiA9
PT0gMicpOworfSAKKworLy8gQ0hFQ0sjNAorTmFOID0gdHJ1ZTsgCistLU5hTjsKK2lmIChOYU4g
IT09IDApIHsKKyAgdGVzdEZhaWxlZCgnIzQ6IE5hTiA9IHRydWU7IC0tTmFOOyBOYU4gPT09IDAn
KTsKK30gCisKKy8vIENIRUNLIzUKK05hTiA9IHRydWU7IAorK05hTjsgCitpZiAoTmFOICE9PSB0
cnVlKSB7CisgIHRlc3RGYWlsZWQoJyM1OiBOYU4gPSB0cnVlOyArTmFOOyBOYU4gPT09IHRydWUn
KTsKKworfSAKKy8vIENIRUNLIzYKK05hTiA9IHRydWU7IAorLU5hTjsKK2lmIChOYU4gIT09IHRy
dWUpIHsKKyAgdGVzdEZhaWxlZCgnIzY6IE5hTiA9IHRydWU7IC1OYU47IE5hTiA9PT0gdHJ1ZScp
OworfSAKKy8vIENIRUNLIzcKK05hTiA9IHRydWU7IAorTmFOICogMTsKK2lmIChOYU4gIT09IHRy
dWUpIHsKKyAgdGVzdEZhaWxlZCgnIzc6IE5hTiA9IHRydWU7IE5hTiAqIDE7IE5hTiA9PT0gdHJ1
ZScpOworfSAKKworLy8gQ0hFQ0sjOAorTmFOID0gdHJ1ZTsgCitOYU4gLyAxOworaWYgKE5hTiAh
PT0gdHJ1ZSkgeworICB0ZXN0RmFpbGVkKCcjODogTmFOID0gdHJ1ZTsgTmFOIC8gMTsgTmFOID09
PSB0cnVlJyk7Cit9IAorCisvLyBDSEVDSyM5CitOYU4gPSB0cnVlOyAKK05hTiAlIDE7CitpZiAo
TmFOICE9PSB0cnVlKSB7CisgIHRlc3RGYWlsZWQoJyM5OiBOYU4gPSB0cnVlOyBOYU4gJSAxOyBO
YU4gPT09IHRydWUnKTsKK30gCisKKy8vIENIRUNLIzEwCitOYU4gPSB0cnVlOyAKK05hTiArIDE7
CitpZiAoTmFOICE9PSB0cnVlKSB7CisgIHRlc3RGYWlsZWQoJyMxMDogTmFOID0gdHJ1ZTsgTmFO
ICsgMTsgTmFOID09PSB0cnVlJyk7Cit9IAorCisvLyBDSEVDSyMxMQorTmFOID0gdHJ1ZTsgCitO
YU4gLSAxOworaWYgKE5hTiAhPT0gdHJ1ZSkgeworICB0ZXN0RmFpbGVkKCcjMTE6IE5hTiA9IHRy
dWU7IE5hTiAtIDE7IE5hTiA9PT0gdHJ1ZScpOworfSAKKworLy8gQ0hFQ0sjMTIKK05hTiA9IHRy
dWU7IAorTmFOID4gMTsKK2lmIChOYU4gIT09IHRydWUpIHsKKyAgdGVzdEZhaWxlZCgnIzEyOiBO
YU4gPSB0cnVlOyBOYU4gPiAxOyBOYU4gPT09IHRydWUnKTsKK30gCisKKy8vIENIRUNLIzEzCitO
YU4gPSB0cnVlOyAKK05hTiA8IDE7CitpZiAoTmFOICE9PSB0cnVlKSB7CisgIHRlc3RGYWlsZWQo
JyMxMzogTmFOID0gdHJ1ZTsgTmFOIDwgMTsgTmFOID09PSB0cnVlJyk7Cit9IAorCisvLyBDSEVD
SyMxNAorTmFOID0gdHJ1ZTsgCitOYU4gPj0gMTsKK2lmIChOYU4gIT09IHRydWUpIHsKKyAgdGVz
dEZhaWxlZCgnIzE0OiBOYU4gPSB0cnVlOyBOYU4gPj0gMTsgTmFOID09PSB0cnVlJyk7Cit9IAor
CisvLyBDSEVDSyMxNQorTmFOID0gdHJ1ZTsgCitOYU4gPD0gMTsKK2lmIChOYU4gIT09IHRydWUp
IHsKKyAgdGVzdEZhaWxlZCgnIzE1OiBOYU4gPSB0cnVlOyBOYU4gPD0gMTsgTmFOID09PSB0cnVl
Jyk7Cit9IAorCisvLyBDSEVDSyMxNgorTmFOID0gdHJ1ZTsgCitOYU4gPT0gdHJ1ZTsKK2lmIChO
YU4gIT09IHRydWUpIHsKKyAgdGVzdEZhaWxlZCgnIzE2OiBOYU4gPSB0cnVlOyBOYU4gPT0gdHJ1
ZTsgTmFOID09PSB0cnVlJyk7Cit9IAorCisvLyBDSEVDSyMxNworTmFOID0gdHJ1ZTsgCitOYU4g
IT0gMTsKK2lmIChOYU4gIT09IHRydWUpIHsKKyAgdGVzdEZhaWxlZCgnIzE3OiBOYU4gPSB0cnVl
OyBOYU4gIT0gMTsgTmFOID09PSB0cnVlJyk7Cit9IAorCisvLyBDSEVDSyMxOAorTmFOID0gdHJ1
ZTsgCitOYU4gPT09IHRydWU7CitpZiAoTmFOICE9PSB0cnVlKSB7CisgIHRlc3RGYWlsZWQoJyMx
ODogTmFOID0gdHJ1ZTsgTmFOID09PSB0cnVlOyBOYU4gPT09IHRydWUnKTsKK30gCisKKy8vIENI
RUNLIzE5CitOYU4gPSB0cnVlOyAKK05hTiAhPT0gdHJ1ZTsKK2lmIChOYU4gIT09IHRydWUpIHsK
KyAgdGVzdEZhaWxlZCgnIzE5OiBOYU4gPSB0cnVlOyBOYU4gIT09IHRydWU7IE5hTiA9PT0gdHJ1
ZScpOworfSAKKworfSBjYXRjaCAoZXgpIHsKKyAgICBzcHV0bmlrRXhjZXB0aW9uID0gZXg7Cit9
CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQ+
CitpZiAoIXN1Y2Nlc3NmdWxseVBhcnNlZCkKKyAgICBwcmludFRlc3RGYWlsZWQoJ3N1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyBub3Qgc2V0Jyk7CitlbHNlIGlmIChzcHV0bmlrRXhjZXB0aW9uKQorICAg
IHByaW50VGVzdEZhaWxlZChzcHV0bmlrRXhjZXB0aW9uKTsKK2Vsc2UKKyAgICBwcmludFRlc3RQ
YXNzZWQoIiIpOwordGVzdFByaW50KCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01Q
TEVURTwvc3Bhbj4nKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1JlZ3Jlc3Npb24vUzE1LjEuMS4yX1IzLjIuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4x
LjJfUjMuMi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlr
L1JlZ3Jlc3Npb24vUzE1LjEuMS4yX1IzLjIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MDIgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSd1dGYtOCc+Cis8c3R5bGU+Cisu
cGFzcyB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IGdyZWVuOworfQorLmZh
aWwgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiByZWQ7Cit9Cis8L3N0eWxl
PgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIFNwdXRuaWtFcnJvciht
ZXNzYWdlKQoreworICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Cit9CisKK1NwdXRuaWtFcnJv
ci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKQoreworICAgIHJldHVybiAnU3B1dG5p
a0Vycm9yOiAnICsgdGhpcy5tZXNzYWdlOworfTsKKwordmFyIHNwdXRuaWtFeGNlcHRpb247CisK
K2Z1bmN0aW9uIHRlc3RQcmludChtc2cpCit7CisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUi
KS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0IGZpcnN0IHNvIFhIVE1MIGtub3dzIHRo
ZSBuYW1lc3BhY2UgCisgICAgc3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsKK30KKwor
ZnVuY3Rpb24gZXNjYXBlSFRNTCh0ZXh0KQoreworICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCku
cmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7Iik7Cit9CisKK2Z1bmN0
aW9uIHByaW50VGVzdFBhc3NlZChtc2cpCit7CisgICAgdGVzdFByaW50KCc8c3Bhbj48c3BhbiBj
bGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7
Cit9CisKK2Z1bmN0aW9uIHByaW50VGVzdEZhaWxlZChtc2cpCit7CisgICAgdGVzdFByaW50KCc8
c3Bhbj48c3BhbiBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSAr
ICc8L3NwYW4+Jyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWlsZWQobXNnKQoreworICAgIHRocm93
IG5ldyBTcHV0bmlrRXJyb3IobXNnKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZh
bHNlOworPC9zY3JpcHQ+CisKKzwvaGVhZD4KKzxib2R5PgorPHA+UzE1LjEuMS4yX1IzLjI8L3A+
Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+Cit0cnkgeworCisvKioKKyAqIEBu
YW1lOiBTMTUuMS4xLjJfUjMuMjsKKyAqIEBzZWN0aW9uOiAxNS4xLjEuMiwgMTUuMS4yLjQ7Cisg
KiBAZGVzY3JpcHRpb246IFRoZSBJbmZpbml0eSBpcyBub3QgUmVhZE9ubHksIGNoZWNrIGlzRmlu
aXRlIGZvciByZXNldHRhYmlsaXR5IG9mIHJlc3VsdAorKi8KKworLy8gQ0hFQ0sjMQorSW5maW5p
dHkgPSAwOworaXNGaW5pdGUoKTsKK2lmIChJbmZpbml0eSAhPT0gMCkgeworICBJbmZpbml0eSA9
IDA7CisgIGlzRmluaXRlKCk7CisgIGlmIChJbmZpbml0eSA9PT0gMCkgeworICAgIHRlc3RGYWls
ZWQoJyMxOiBpc0Zpbml0ZSByZXNldHRhYmlsaXR5IG9mIHJlc3VsdCBmb3IgSW5maW5pdHkgdmFs
dWUnKTsKKyAgfQorfQorCit9IGNhdGNoIChleCkgeworICAgIHNwdXRuaWtFeGNlcHRpb24gPSBl
eDsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNj
cmlwdD4KK2lmICghc3VjY2Vzc2Z1bGx5UGFyc2VkKQorICAgIHByaW50VGVzdEZhaWxlZCgnc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIG5vdCBzZXQnKTsKK2Vsc2UgaWYgKHNwdXRuaWtFeGNlcHRpb24p
CisgICAgcHJpbnRUZXN0RmFpbGVkKHNwdXRuaWtFeGNlcHRpb24pOworZWxzZQorICAgIHByaW50
VGVzdFBhc3NlZCgiIik7Cit0ZXN0UHJpbnQoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNU
IENPTVBMRVRFPC9zcGFuPicpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUuMS4xLjJfUjQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvUmVncmVzc2lvbi9TMTUu
MS4xLjJfUjQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5p
ay9SZWdyZXNzaW9uL1MxNS4xLjEuMl9SNC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIy
MyBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KKzxzdHlsZT4KKy5w
YXNzIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogZ3JlZW47Cit9CisuZmFp
bCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHJlZDsKK30KKzwvc3R5bGU+
CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gU3B1dG5pa0Vycm9yKG1l
c3NhZ2UpCit7CisgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKK30KKworU3B1dG5pa0Vycm9y
LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpCit7CisgICAgcmV0dXJuICdTcHV0bmlr
RXJyb3I6ICcgKyB0aGlzLm1lc3NhZ2U7Cit9OworCit2YXIgc3B1dG5pa0V4Y2VwdGlvbjsKKwor
ZnVuY3Rpb24gdGVzdFByaW50KG1zZykKK3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIp
LmFwcGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhl
IG5hbWVzcGFjZSAKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitm
dW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCit7CisgICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5y
ZXBsYWNlKC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsKK30KKworZnVuY3Rp
b24gcHJpbnRUZXN0UGFzc2VkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNs
YXNzPSJwYXNzIj5QQVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsK
K30KKworZnVuY3Rpb24gcHJpbnRUZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxz
cGFuPjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsg
Jzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpCit7CisgICAgdGhyb3cg
bmV3IFNwdXRuaWtFcnJvcihtc2cpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFs
c2U7Cis8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHk+Cis8cD5TMTUuMS4xLjJfUjQ8L3A+Cis8
ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+Cit0cnkgeworCisvKioKKyAqIEBuYW1l
OiBTMTUuMS4xLjJfUjQ7CisgKiBAc2VjdGlvbjogMTUuMS4xLjIsIDExOworICogQGRlc2NyaXB0
aW9uOiBUaGUgSW5maW5pdHkgaXMgbm90IFJlYWRPbmx5LCBjaGVjayBPcGVyYXRvcnMgdGhhdCB1
c2UgVG9OdW1iZXI7ICAgCisqLworCisvLyBDSEVDSyMxCitJbmZpbml0eSA9IHRydWU7IAorSW5m
aW5pdHkrKzsgCitpZiAoSW5maW5pdHkgIT09IDIpIHsKKyAgdGVzdEZhaWxlZCgnIzE6IEluZmlu
aXR5ID0gdHJ1ZTsgSW5maW5pdHkrKzsgSW5maW5pdHkgPT09IDInKTsKK30gCisKKy8vIENIRUNL
IzIKK0luZmluaXR5ID0gdHJ1ZTsgCitJbmZpbml0eS0tOyAKK2lmIChJbmZpbml0eSAhPT0gMCkg
eworICB0ZXN0RmFpbGVkKCcjMjogSW5maW5pdHkgPSB0cnVlOyBJbmZpbml0eS0tOyBJbmZpbml0
eSA9PT0gMCcpOworfSAKKworLy8gQ0hFQ0sjMworSW5maW5pdHkgPSB0cnVlOyAKKysrSW5maW5p
dHk7IAoraWYgKEluZmluaXR5ICE9PSAyKSB7CisgIHRlc3RGYWlsZWQoJyMzOiBJbmZpbml0eSA9
IHRydWU7ICsrSW5maW5pdHk7IEluZmluaXR5ID09PSAyJyk7Cit9IAorCisvLyBDSEVDSyM0CitJ
bmZpbml0eSA9IHRydWU7IAorLS1JbmZpbml0eTsKK2lmIChJbmZpbml0eSAhPT0gMCkgeworICB0
ZXN0RmFpbGVkKCcjNDogSW5maW5pdHkgPSB0cnVlOyAtLUluZmluaXR5OyBJbmZpbml0eSA9PT0g
MCcpOworfSAKKworLy8gQ0hFQ0sjNQorSW5maW5pdHkgPSB0cnVlOyAKKytJbmZpbml0eTsgCitp
ZiAoSW5maW5pdHkgIT09IHRydWUpIHsKKyAgdGVzdEZhaWxlZCgnIzU6IEluZmluaXR5ID0gdHJ1
ZTsgK0luZmluaXR5OyBJbmZpbml0eSA9PT0gdHJ1ZScpOworCit9IAorLy8gQ0hFQ0sjNgorSW5m
aW5pdHkgPSB0cnVlOyAKKy1JbmZpbml0eTsKK2lmIChJbmZpbml0eSAhPT0gdHJ1ZSkgeworICB0
ZXN0RmFpbGVkKCcjNjogSW5maW5pdHkgPSB0cnVlOyAtSW5maW5pdHk7IEluZmluaXR5ID09PSB0
cnVlJyk7Cit9IAorLy8gQ0hFQ0sjNworSW5maW5pdHkgPSB0cnVlOyAKK0luZmluaXR5ICogMTsK
K2lmIChJbmZpbml0eSAhPT0gdHJ1ZSkgeworICB0ZXN0RmFpbGVkKCcjNzogSW5maW5pdHkgPSB0
cnVlOyBJbmZpbml0eSAqIDE7IEluZmluaXR5ID09PSB0cnVlJyk7Cit9IAorCisvLyBDSEVDSyM4
CitJbmZpbml0eSA9IHRydWU7IAorSW5maW5pdHkgLyAxOworaWYgKEluZmluaXR5ICE9PSB0cnVl
KSB7CisgIHRlc3RGYWlsZWQoJyM4OiBJbmZpbml0eSA9IHRydWU7IEluZmluaXR5IC8gMTsgSW5m
aW5pdHkgPT09IHRydWUnKTsKK30gCisKKy8vIENIRUNLIzkKK0luZmluaXR5ID0gdHJ1ZTsgCitJ
bmZpbml0eSAlIDE7CitpZiAoSW5maW5pdHkgIT09IHRydWUpIHsKKyAgdGVzdEZhaWxlZCgnIzk6
IEluZmluaXR5ID0gdHJ1ZTsgSW5maW5pdHkgJSAxOyBJbmZpbml0eSA9PT0gdHJ1ZScpOworfSAK
KworLy8gQ0hFQ0sjMTAKK0luZmluaXR5ID0gdHJ1ZTsgCitJbmZpbml0eSArIDE7CitpZiAoSW5m
aW5pdHkgIT09IHRydWUpIHsKKyAgdGVzdEZhaWxlZCgnIzEwOiBJbmZpbml0eSA9IHRydWU7IElu
ZmluaXR5ICsgMTsgSW5maW5pdHkgPT09IHRydWUnKTsKK30gCisKKy8vIENIRUNLIzExCitJbmZp
bml0eSA9IHRydWU7IAorSW5maW5pdHkgLSAxOworaWYgKEluZmluaXR5ICE9PSB0cnVlKSB7Cisg
IHRlc3RGYWlsZWQoJyMxMTogSW5maW5pdHkgPSB0cnVlOyBJbmZpbml0eSAtIDE7IEluZmluaXR5
ID09PSB0cnVlJyk7Cit9IAorCisvLyBDSEVDSyMxMgorSW5maW5pdHkgPSB0cnVlOyAKK0luZmlu
aXR5ID4gMTsKK2lmIChJbmZpbml0eSAhPT0gdHJ1ZSkgeworICB0ZXN0RmFpbGVkKCcjMTI6IElu
ZmluaXR5ID0gdHJ1ZTsgSW5maW5pdHkgPiAxOyBJbmZpbml0eSA9PT0gdHJ1ZScpOworfSAKKwor
Ly8gQ0hFQ0sjMTMKK0luZmluaXR5ID0gdHJ1ZTsgCitJbmZpbml0eSA8IDE7CitpZiAoSW5maW5p
dHkgIT09IHRydWUpIHsKKyAgdGVzdEZhaWxlZCgnIzEzOiBJbmZpbml0eSA9IHRydWU7IEluZmlu
aXR5IDwgMTsgSW5maW5pdHkgPT09IHRydWUnKTsKK30gCisKKy8vIENIRUNLIzE0CitJbmZpbml0
eSA9IHRydWU7IAorSW5maW5pdHkgPj0gMTsKK2lmIChJbmZpbml0eSAhPT0gdHJ1ZSkgeworICB0
ZXN0RmFpbGVkKCcjMTQ6IEluZmluaXR5ID0gdHJ1ZTsgSW5maW5pdHkgPj0gMTsgSW5maW5pdHkg
PT09IHRydWUnKTsKK30gCisKKy8vIENIRUNLIzE1CitJbmZpbml0eSA9IHRydWU7IAorSW5maW5p
dHkgPD0gMTsKK2lmIChJbmZpbml0eSAhPT0gdHJ1ZSkgeworICB0ZXN0RmFpbGVkKCcjMTU6IElu
ZmluaXR5ID0gdHJ1ZTsgSW5maW5pdHkgPD0gMTsgSW5maW5pdHkgPT09IHRydWUnKTsKK30gCisK
Ky8vIENIRUNLIzE2CitJbmZpbml0eSA9IHRydWU7IAorSW5maW5pdHkgPT0gdHJ1ZTsKK2lmIChJ
bmZpbml0eSAhPT0gdHJ1ZSkgeworICB0ZXN0RmFpbGVkKCcjMTY6IEluZmluaXR5ID0gdHJ1ZTsg
SW5maW5pdHkgPT0gdHJ1ZTsgSW5maW5pdHkgPT09IHRydWUnKTsKK30gCisKKy8vIENIRUNLIzE3
CitJbmZpbml0eSA9IHRydWU7IAorSW5maW5pdHkgIT0gMTsKK2lmIChJbmZpbml0eSAhPT0gdHJ1
ZSkgeworICB0ZXN0RmFpbGVkKCcjMTc6IEluZmluaXR5ID0gdHJ1ZTsgSW5maW5pdHkgIT0gMTsg
SW5maW5pdHkgPT09IHRydWUnKTsKK30gCisKKy8vIENIRUNLIzE4CitJbmZpbml0eSA9IHRydWU7
IAorSW5maW5pdHkgPT09IHRydWU7CitpZiAoSW5maW5pdHkgIT09IHRydWUpIHsKKyAgdGVzdEZh
aWxlZCgnIzE4OiBJbmZpbml0eSA9IHRydWU7IEluZmluaXR5ID09PSB0cnVlOyBJbmZpbml0eSA9
PT0gdHJ1ZScpOworfSAKKworLy8gQ0hFQ0sjMTkKK0luZmluaXR5ID0gdHJ1ZTsgCitJbmZpbml0
eSAhPT0gdHJ1ZTsKK2lmIChJbmZpbml0eSAhPT0gdHJ1ZSkgeworICB0ZXN0RmFpbGVkKCcjMTk6
IEluZmluaXR5ID0gdHJ1ZTsgSW5maW5pdHkgIT09IHRydWU7IEluZmluaXR5ID09PSB0cnVlJyk7
Cit9IAorCit9IGNhdGNoIChleCkgeworICAgIHNwdXRuaWtFeGNlcHRpb24gPSBleDsKK30KKwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK2lm
ICghc3VjY2Vzc2Z1bGx5UGFyc2VkKQorICAgIHByaW50VGVzdEZhaWxlZCgnc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIG5vdCBzZXQnKTsKK2Vsc2UgaWYgKHNwdXRuaWtFeGNlcHRpb24pCisgICAgcHJp
bnRUZXN0RmFpbGVkKHNwdXRuaWtFeGNlcHRpb24pOworZWxzZQorICAgIHByaW50VGVzdFBhc3Nl
ZCgiIik7Cit0ZXN0UHJpbnQoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRF
PC9zcGFuPicpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL3NwdXRuaWsvTElDRU5TRQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2pzL3NwdXRuaWsvTElDRU5TRQkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMv
c3B1dG5pay9MSUNFTlNFCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2IEBACitDb3B5cmlnaHQg
MjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1JlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZAorICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0Eg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3NwdXRuaWsvQVVUSE9SUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2pzL3NwdXRuaWsvQVVUSE9SUwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
anMvc3B1dG5pay9BVVRIT1JTCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKyMgQmVsb3cg
aXMgYSBsaXN0IG9mIHBlb3BsZSBhbmQgb3JnYW5pemF0aW9ucyB0aGF0IGhhdmUgY29udHJpYnV0
ZWQKKyMgdG8gdGhlIFNwdXRuaWsgcHJvamVjdC4gIE5hbWVzIHNob3VsZCBiZSBhZGRlZCB0byB0
aGUgbGlzdCBsaWtlIHNvOgorIworIyAgIE5hbWUvT3JnYW5pemF0aW9uIDxlbWFpbCBhZGRyZXNz
PgorCitHb29nbGUgSW5jLgorCitvdXRvZmhhbndlbGwKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9qcy9zcHV0bmlrL1VuaWNvZGUvVW5pY29kZV8yMTgvUzcuNl9BNS4yX1QxMC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL1VuaWNvZGUvVW5p
Y29kZV8yMTgvUzcuNl9BNS4yX1QxMC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvVW5pY29kZS9Vbmljb2RlXzIxOC9TNy42X0E1LjJfVDEw
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACitTNy42X0E1LjJfVDEw
CisKK0ZBSUwgU3B1dG5pa0Vycm9yOiAjMzBGQiAKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvVW5pY29kZS9Vbmljb2RlXzIxOC9TNy42X0EzLjIu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvVW5pY29kZS9V
bmljb2RlXzIxOC9TNy42X0EzLjIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvanMvc3B1dG5pay9Vbmljb2RlL1VuaWNvZGVfMjE4L1M3LjZfQTMuMi5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIwNyBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9J3V0
Zi04Jz4KKzxzdHlsZT4KKy5wYXNzIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xv
cjogZ3JlZW47Cit9CisuZmFpbCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6
IHJlZDsKK30KKzwvc3R5bGU+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rp
b24gU3B1dG5pa0Vycm9yKG1lc3NhZ2UpCit7CisgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsK
K30KKworU3B1dG5pa0Vycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpCit7Cisg
ICAgcmV0dXJuICdTcHV0bmlrRXJyb3I6ICcgKyB0aGlzLm1lc3NhZ2U7Cit9OworCit2YXIgc3B1
dG5pa0V4Y2VwdGlvbjsKKworZnVuY3Rpb24gdGVzdFByaW50KG1zZykKK3sKKyAgICB2YXIgc3Bh
biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qg
c28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZSAKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyAr
ICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCit7CisgICAgcmV0dXJu
IHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZs
dDsiKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0UGFzc2VkKG1zZykKK3sKKyAgICB0ZXN0UHJp
bnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTCht
c2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0RmFpbGVkKG1zZykKK3sK
KyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsg
ZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gdGVzdEZhaWxlZCht
c2cpCit7CisgICAgdGhyb3cgbmV3IFNwdXRuaWtFcnJvcihtc2cpOworfQorCit2YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHk+Cis8cD5T
Ny42X0EzLjI8L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+Cit0cnkgewor
CisvKioKKyAqIEBuYW1lOiBTNy42X0EzLjI7CisgKiBAc2VjdGlvbjogNy42OworICogQGFzc2Vy
dGlvbjogSWRlbnRpZmllck5hbWUgbXVzdCBiZWdpbiBvbmx5IElkZW50aWZpZXJTdGFydCBjaGFy
YWN0ZXI7CisgKiBAZGVzY3JpcHRpb246IENvbXBsZXggdGVzdCB3aXRoIGV2YWw7IAorKi8KKwor
Ly9DSEVDSworTHUgPSBbWzB4MDA0MSwgMHgwMDVBXSwgWzB4MDBDMCwgMHgwMEQ2XSwgWzB4MDBE
OCwgMHgwMERFXSwgWzB4MDEwMCwgMHgwMTAwXSwgWzB4MDEwMiwgMHgwMTAyXSwgWzB4MDEwNCwg
MHgwMTA0XSwgWzB4MDEwNiwgMHgwMTA2XSwgWzB4MDEwOCwgMHgwMTA4XSwgWzB4MDEwQSwgMHgw
MTBBXSwgWzB4MDEwQywgMHgwMTBDXSwgWzB4MDEwRSwgMHgwMTBFXSwgWzB4MDExMCwgMHgwMTEw
XSwgWzB4MDExMiwgMHgwMTEyXSwgWzB4MDExNCwgMHgwMTE0XSwgWzB4MDExNiwgMHgwMTE2XSwg
WzB4MDExOCwgMHgwMTE4XSwgWzB4MDExQSwgMHgwMTFBXSwgWzB4MDExQywgMHgwMTFDXSwgWzB4
MDExRSwgMHgwMTFFXSwgWzB4MDEyMCwgMHgwMTIwXSwgWzB4MDEyMiwgMHgwMTIyXSwgWzB4MDEy
NCwgMHgwMTI0XSwgWzB4MDEyNiwgMHgwMTI2XSwgWzB4MDEyOCwgMHgwMTI4XSwgWzB4MDEyQSwg
MHgwMTJBXSwgWzB4MDEyQywgMHgwMTJDXSwgWzB4MDEyRSwgMHgwMTJFXSwgWzB4MDEzMCwgMHgw
MTMwXSwgWzB4MDEzMiwgMHgwMTMyXSwgWzB4MDEzNCwgMHgwMTM0XSwgWzB4MDEzNiwgMHgwMTM2
XSwgWzB4MDEzOSwgMHgwMTM5XSwgWzB4MDEzQiwgMHgwMTNCXSwgWzB4MDEzRCwgMHgwMTNEXSwg
WzB4MDEzRiwgMHgwMTNGXSwgWzB4MDE0MSwgMHgwMTQxXSwgWzB4MDE0MywgMHgwMTQzXSwgWzB4
MDE0NSwgMHgwMTQ1XSwgWzB4MDE0NywgMHgwMTQ3XSwgWzB4MDE0QSwgMHgwMTRBXSwgWzB4MDE0
QywgMHgwMTRDXSwgWzB4MDE0RSwgMHgwMTRFXSwgWzB4MDE1MCwgMHgwMTUwXSwgWzB4MDE1Miwg
MHgwMTUyXSwgWzB4MDE1NCwgMHgwMTU0XSwgWzB4MDE1NiwgMHgwMTU2XSwgWzB4MDE1OCwgMHgw
MTU4XSwgWzB4MDE1QSwgMHgwMTVBXSwgWzB4MDE1QywgMHgwMTVDXSwgWzB4MDE1RSwgMHgwMTVF
XSwgWzB4MDE2MCwgMHgwMTYwXSwgWzB4MDE2MiwgMHgwMTYyXSwgWzB4MDE2NCwgMHgwMTY0XSwg
WzB4MDE2NiwgMHgwMTY2XSwgWzB4MDE2OCwgMHgwMTY4XSwgWzB4MDE2QSwgMHgwMTZBXSwgWzB4
MDE2QywgMHgwMTZDXSwgWzB4MDE2RSwgMHgwMTZFXSwgWzB4MDE3MCwgMHgwMTcwXSwgWzB4MDE3
MiwgMHgwMTcyXSwgWzB4MDE3NCwgMHgwMTc0XSwgWzB4MDE3NiwgMHgwMTc2XSwgWzB4MDE3OCwg
MHgwMTc5XSwgWzB4MDE3QiwgMHgwMTdCXSwgWzB4MDE3RCwgMHgwMTdEXSwgWzB4MDE4MSwgMHgw
MTgyXSwgWzB4MDE4NCwgMHgwMTg0XSwgWzB4MDE4NiwgMHgwMTg3XSwgWzB4MDE4OSwgMHgwMThC
XSwgWzB4MDE4RSwgMHgwMTkxXSwgWzB4MDE5MywgMHgwMTk0XSwgWzB4MDE5NiwgMHgwMTk4XSwg
WzB4MDE5QywgMHgwMTlEXSwgWzB4MDE5RiwgMHgwMUEwXSwgWzB4MDFBMiwgMHgwMUEyXSwgWzB4
MDFBNCwgMHgwMUE0XSwgWzB4MDFBNiwgMHgwMUE3XSwgWzB4MDFBOSwgMHgwMUE5XSwgWzB4MDFB
QywgMHgwMUFDXSwgWzB4MDFBRSwgMHgwMUFGXSwgWzB4MDFCMSwgMHgwMUIzXSwgWzB4MDFCNSwg
MHgwMUI1XSwgWzB4MDFCNywgMHgwMUI4XSwgWzB4MDFCQywgMHgwMUJDXSwgWzB4MDFDNCwgMHgw
MUM0XSwgWzB4MDFDNywgMHgwMUM3XSwgWzB4MDFDQSwgMHgwMUNBXSwgWzB4MDFDRCwgMHgwMUNE
XSwgWzB4MDFDRiwgMHgwMUNGXSwgWzB4MDFEMSwgMHgwMUQxXSwgWzB4MDFEMywgMHgwMUQzXSwg
WzB4MDFENSwgMHgwMUQ1XSwgWzB4MDFENywgMHgwMUQ3XSwgWzB4MDFEOSwgMHgwMUQ5XSwgWzB4
MDFEQiwgMHgwMURCXSwgWzB4MDFERSwgMHgwMURFXSwgWzB4MDFFMCwgMHgwMUUwXSwgWzB4MDFF
MiwgMHgwMUUyXSwgWzB4MDFFNCwgMHgwMUU0XSwgWzB4MDFFNiwgMHgwMUU2XSwgWzB4MDFFOCwg
MHgwMUU4XSwgWzB4MDFFQSwgMHgwMUVBXSwgWzB4MDFFQywgMHgwMUVDXSwgWzB4MDFFRSwgMHgw
MUVFXSwgWzB4MDFGMSwgMHgwMUYxXSwgWzB4MDFGNCwgMHgwMUY0XSwgWzB4MDFGQSwgMHgwMUZB
XSwgWzB4MDFGQywgMHgwMUZDXSwgWzB4MDFGRSwgMHgwMUZFXSwgWzB4MDIwMCwgMHgwMjAwXSwg
WzB4MDIwMiwgMHgwMjAyXSwgWzB4MDIwNCwgMHgwMjA0XSwgWzB4MDIwNiwgMHgwMjA2XSwgWzB4
MDIwOCwgMHgwMjA4XSwgWzB4MDIwQSwgMHgwMjBBXSwgWzB4MDIwQywgMHgwMjBDXSwgWzB4MDIw
RSwgMHgwMjBFXSwgWzB4MDIxMCwgMHgwMjEwXSwgWzB4MDIxMiwgMHgwMjEyXSwgWzB4MDIxNCwg
MHgwMjE0XSwgWzB4MDIxNiwgMHgwMjE2XSwgWzB4MDM4NiwgMHgwMzg2XSwgWzB4MDM4OCwgMHgw
MzhBXSwgWzB4MDM4QywgMHgwMzhDXSwgWzB4MDM4RSwgMHgwMzhGXSwgWzB4MDM5MSwgMHgwM0Ex
XSwgWzB4MDNBMywgMHgwM0FCXSwgWzB4MDNEMiwgMHgwM0Q0XSwgWzB4MDNEQSwgMHgwM0RBXSwg
WzB4MDNEQywgMHgwM0RDXSwgWzB4MDNERSwgMHgwM0RFXSwgWzB4MDNFMCwgMHgwM0UwXSwgWzB4
MDNFMiwgMHgwM0UyXSwgWzB4MDNFNCwgMHgwM0U0XSwgWzB4MDNFNiwgMHgwM0U2XSwgWzB4MDNF
OCwgMHgwM0U4XSwgWzB4MDNFQSwgMHgwM0VBXSwgWzB4MDNFQywgMHgwM0VDXSwgWzB4MDNFRSwg
MHgwM0VFXSwgWzB4MDQwMSwgMHgwNDBDXSwgWzB4MDQwRSwgMHgwNDJGXSwgWzB4MDQ2MCwgMHgw
NDYwXSwgWzB4MDQ2MiwgMHgwNDYyXSwgWzB4MDQ2NCwgMHgwNDY0XSwgWzB4MDQ2NiwgMHgwNDY2
XSwgWzB4MDQ2OCwgMHgwNDY4XSwgWzB4MDQ2QSwgMHgwNDZBXSwgWzB4MDQ2QywgMHgwNDZDXSwg
WzB4MDQ2RSwgMHgwNDZFXSwgWzB4MDQ3MCwgMHgwNDcwXSwgWzB4MDQ3MiwgMHgwNDcyXSwgWzB4
MDQ3NCwgMHgwNDc0XSwgWzB4MDQ3NiwgMHgwNDc2XSwgWzB4MDQ3OCwgMHgwNDc4XSwgWzB4MDQ3
QSwgMHgwNDdBXSwgWzB4MDQ3QywgMHgwNDdDXSwgWzB4MDQ3RSwgMHgwNDdFXSwgWzB4MDQ4MCwg
MHgwNDgwXSwgWzB4MDQ5MCwgMHgwNDkwXSwgWzB4MDQ5MiwgMHgwNDkyXSwgWzB4MDQ5NCwgMHgw
NDk0XSwgWzB4MDQ5NiwgMHgwNDk2XSwgWzB4MDQ5OCwgMHgwNDk4XSwgWzB4MDQ5QSwgMHgwNDlB
XSwgWzB4MDQ5QywgMHgwNDlDXSwgWzB4MDQ5RSwgMHgwNDlFXSwgWzB4MDRBMCwgMHgwNEEwXSwg
WzB4MDRBMiwgMHgwNEEyXSwgWzB4MDRBNCwgMHgwNEE0XSwgWzB4MDRBNiwgMHgwNEE2XSwgWzB4
MDRBOCwgMHgwNEE4XSwgWzB4MDRBQSwgMHgwNEFBXSwgWzB4MDRBQywgMHgwNEFDXSwgWzB4MDRB
RSwgMHgwNEFFXSwgWzB4MDRCMCwgMHgwNEIwXSwgWzB4MDRCMiwgMHgwNEIyXSwgWzB4MDRCNCwg
MHgwNEI0XSwgWzB4MDRCNiwgMHgwNEI2XSwgWzB4MDRCOCwgMHgwNEI4XSwgWzB4MDRCQSwgMHgw
NEJBXSwgWzB4MDRCQywgMHgwNEJDXSwgWzB4MDRCRSwgMHgwNEJFXSwgWzB4MDRDMSwgMHgwNEMx
XSwgWzB4MDRDMywgMHgwNEMzXSwgWzB4MDRDNywgMHgwNEM3XSwgWzB4MDRDQiwgMHgwNENCXSwg
WzB4MDREMCwgMHgwNEQwXSwgWzB4MDREMiwgMHgwNEQyXSwgWzB4MDRENCwgMHgwNEQ0XSwgWzB4
MDRENiwgMHgwNEQ2XSwgWzB4MDREOCwgMHgwNEQ4XSwgWzB4MDREQSwgMHgwNERBXSwgWzB4MDRE
QywgMHgwNERDXSwgWzB4MDRERSwgMHgwNERFXSwgWzB4MDRFMCwgMHgwNEUwXSwgWzB4MDRFMiwg
MHgwNEUyXSwgWzB4MDRFNCwgMHgwNEU0XSwgWzB4MDRFNiwgMHgwNEU2XSwgWzB4MDRFOCwgMHgw
NEU4XSwgWzB4MDRFQSwgMHgwNEVBXSwgWzB4MDRFRSwgMHgwNEVFXSwgWzB4MDRGMCwgMHgwNEYw
XSwgWzB4MDRGMiwgMHgwNEYyXSwgWzB4MDRGNCwgMHgwNEY0XSwgWzB4MDRGOCwgMHgwNEY4XSwg
WzB4MDUzMSwgMHgwNTU2XSwgWzB4MTBBMCwgMHgxMEM1XSwgWzB4MUUwMCwgMHgxRTAwXSwgWzB4
MUUwMiwgMHgxRTAyXSwgWzB4MUUwNCwgMHgxRTA0XSwgWzB4MUUwNiwgMHgxRTA2XSwgWzB4MUUw
OCwgMHgxRTA4XSwgWzB4MUUwQSwgMHgxRTBBXSwgWzB4MUUwQywgMHgxRTBDXSwgWzB4MUUwRSwg
MHgxRTBFXSwgWzB4MUUxMCwgMHgxRTEwXSwgWzB4MUUxMiwgMHgxRTEyXSwgWzB4MUUxNCwgMHgx
RTE0XSwgWzB4MUUxNiwgMHgxRTE2XSwgWzB4MUUxOCwgMHgxRTE4XSwgWzB4MUUxQSwgMHgxRTFB
XSwgWzB4MUUxQywgMHgxRTFDXSwgWzB4MUUxRSwgMHgxRTFFXSwgWzB4MUUyMCwgMHgxRTIwXSwg
WzB4MUUyMiwgMHgxRTIyXSwgWzB4MUUyNCwgMHgxRTI0XSwgWzB4MUUyNiwgMHgxRTI2XSwgWzB4
MUUyOCwgMHgxRTI4XSwgWzB4MUUyQSwgMHgxRTJBXSwgWzB4MUUyQywgMHgxRTJDXSwgWzB4MUUy
RSwgMHgxRTJFXSwgWzB4MUUzMCwgMHgxRTMwXSwgWzB4MUUzMiwgMHgxRTMyXSwgWzB4MUUzNCwg
MHgxRTM0XSwgWzB4MUUzNiwgMHgxRTM2XSwgWzB4MUUzOCwgMHgxRTM4XSwgWzB4MUUzQSwgMHgx
RTNBXSwgWzB4MUUzQywgMHgxRTNDXSwgWzB4MUUzRSwgMHgxRTNFXSwgWzB4MUU0MCwgMHgxRTQw
XSwgWzB4MUU0MiwgMHgxRTQyXSwgWzB4MUU0NCwgMHgxRTQ0XSwgWzB4MUU0NiwgMHgxRTQ2XSwg
WzB4MUU0OCwgMHgxRTQ4XSwgWzB4MUU0QSwgMHgxRTRBXSwgWzB4MUU0QywgMHgxRTRDXSwgWzB4
MUU0RSwgMHgxRTRFXSwgWzB4MUU1MCwgMHgxRTUwXSwgWzB4MUU1MiwgMHgxRTUyXSwgWzB4MUU1
NCwgMHgxRTU0XSwgWzB4MUU1NiwgMHgxRTU2XSwgWzB4MUU1OCwgMHgxRTU4XSwgWzB4MUU1QSwg
MHgxRTVBXSwgWzB4MUU1QywgMHgxRTVDXSwgWzB4MUU1RSwgMHgxRTVFXSwgWzB4MUU2MCwgMHgx
RTYwXSwgWzB4MUU2MiwgMHgxRTYyXSwgWzB4MUU2NCwgMHgxRTY0XSwgWzB4MUU2NiwgMHgxRTY2
XSwgWzB4MUU2OCwgMHgxRTY4XSwgWzB4MUU2QSwgMHgxRTZBXSwgWzB4MUU2QywgMHgxRTZDXSwg
WzB4MUU2RSwgMHgxRTZFXSwgWzB4MUU3MCwgMHgxRTcwXSwgWzB4MUU3MiwgMHgxRTcyXSwgWzB4
MUU3NCwgMHgxRTc0XSwgWzB4MUU3NiwgMHgxRTc2XSwgWzB4MUU3OCwgMHgxRTc4XSwgWzB4MUU3
QSwgMHgxRTdBXSwgWzB4MUU3QywgMHgxRTdDXSwgWzB4MUU3RSwgMHgxRTdFXSwgWzB4MUU4MCwg
MHgxRTgwXSwgWzB4MUU4MiwgMHgxRTgyXSwgWzB4MUU4NCwgMHgxRTg0XSwgWzB4MUU4NiwgMHgx
RTg2XSwgWzB4MUU4OCwgMHgxRTg4XSwgWzB4MUU4QSwgMHgxRThBXSwgWzB4MUU4QywgMHgxRThD
XSwgWzB4MUU4RSwgMHgxRThFXSwgWzB4MUU5MCwgMHgxRTkwXSwgWzB4MUU5MiwgMHgxRTkyXSwg
WzB4MUU5NCwgMHgxRTk0XSwgWzB4MUVBMCwgMHgxRUEwXSwgWzB4MUVBMiwgMHgxRUEyXSwgWzB4
MUVBNCwgMHgxRUE0XSwgWzB4MUVBNiwgMHgxRUE2XSwgWzB4MUVBOCwgMHgxRUE4XSwgWzB4MUVB
QSwgMHgxRUFBXSwgWzB4MUVBQywgMHgxRUFDXSwgWzB4MUVBRSwgMHgxRUFFXSwgWzB4MUVCMCwg
MHgxRUIwXSwgWzB4MUVCMiwgMHgxRUIyXSwgWzB4MUVCNCwgMHgxRUI0XSwgWzB4MUVCNiwgMHgx
RUI2XSwgWzB4MUVCOCwgMHgxRUI4XSwgWzB4MUVCQSwgMHgxRUJBXSwgWzB4MUVCQywgMHgxRUJD
XSwgWzB4MUVCRSwgMHgxRUJFXSwgWzB4MUVDMCwgMHgxRUMwXSwgWzB4MUVDMiwgMHgxRUMyXSwg
WzB4MUVDNCwgMHgxRUM0XSwgWzB4MUVDNiwgMHgxRUM2XSwgWzB4MUVDOCwgMHgxRUM4XSwgWzB4
MUVDQSwgMHgxRUNBXSwgWzB4MUVDQywgMHgxRUNDXSwgWzB4MUVDRSwgMHgxRUNFXSwgWzB4MUVE
MCwgMHgxRUQwXSwgWzB4MUVEMiwgMHgxRUQyXSwgWzB4MUVENCwgMHgxRUQ0XSwgWzB4MUVENiwg
MHgxRUQ2XSwgWzB4MUVEOCwgMHgxRUQ4XSwgWzB4MUVEQSwgMHgxRURBXSwgWzB4MUVEQywgMHgx
RURDXSwgWzB4MUVERSwgMHgxRURFXSwgWzB4MUVFMCwgMHgxRUUwXSwgWzB4MUVFMiwgMHgxRUUy
XSwgWzB4MUVFNCwgMHgxRUU0XSwgWzB4MUVFNiwgMHgxRUU2XSwgWzB4MUVFOCwgMHgxRUU4XSwg
WzB4MUVFQSwgMHgxRUVBXSwgWzB4MUVFQywgMHgxRUVDXSwgWzB4MUVFRSwgMHgxRUVFXSwgWzB4
MUVGMCwgMHgxRUYwXSwgWzB4MUVGMiwgMHgxRUYyXSwgWzB4MUVGNCwgMHgxRUY0XSwgWzB4MUVG
NiwgMHgxRUY2XSwgWzB4MUVGOCwgMHgxRUY4XSwgWzB4MUYwOCwgMHgxRjBGXSwgWzB4MUYxOCwg
MHgxRjFEXSwgWzB4MUYyOCwgMHgxRjJGXSwgWzB4MUYzOCwgMHgxRjNGXSwgWzB4MUY0OCwgMHgx
RjREXSwgWzB4MUY1OSwgMHgxRjU5XSwgWzB4MUY1QiwgMHgxRjVCXSwgWzB4MUY1RCwgMHgxRjVE
XSwgWzB4MUY1RiwgMHgxRjVGXSwgWzB4MUY2OCwgMHgxRjZGXSwgWzB4MUY4OCwgMHgxRjhGXSwg
WzB4MUY5OCwgMHgxRjlGXSwgWzB4MUZBOCwgMHgxRkFGXSwgWzB4MUZCOCwgMHgxRkJDXSwgWzB4
MUZDOCwgMHgxRkNDXSwgWzB4MUZEOCwgMHgxRkRCXSwgWzB4MUZFOCwgMHgxRkVDXSwgWzB4MUZG
OCwgMHgxRkZDXSwgWzB4MjEwMiwgMHgyMTAyXSwgWzB4MjEwNywgMHgyMTA3XSwgWzB4MjEwQiwg
MHgyMTBEXSwgWzB4MjExMCwgMHgyMTEyXSwgWzB4MjExNSwgMHgyMTE1XSwgWzB4MjExOSwgMHgy
MTFEXSwgWzB4MjEyNCwgMHgyMTI0XSwgWzB4MjEyNiwgMHgyMTI2XSwgWzB4MjEyOCwgMHgyMTI4
XSwgWzB4MjEyQSwgMHgyMTJEXSwgWzB4MjEzMCwgMHgyMTMxXSwgWzB4MjEzMywgMHgyMTMzXSwg
WzB4RkYyMSwgMHhGRjNBXV07CitMbCA9IFtbMHgwMDYxLCAweDAwN0FdLCBbMHgwMEFBLCAweDAw
QUFdLCBbMHgwMEI1LCAweDAwQjVdLCBbMHgwMEJBLCAweDAwQkFdLCBbMHgwMERGLCAweDAwRjZd
LCBbMHgwMEY4LCAweDAwRkZdLCBbMHgwMTAxLCAweDAxMDFdLCBbMHgwMTAzLCAweDAxMDNdLCBb
MHgwMTA1LCAweDAxMDVdLCBbMHgwMTA3LCAweDAxMDddLCBbMHgwMTA5LCAweDAxMDldLCBbMHgw
MTBCLCAweDAxMEJdLCBbMHgwMTBELCAweDAxMERdLCBbMHgwMTBGLCAweDAxMEZdLCBbMHgwMTEx
LCAweDAxMTFdLCBbMHgwMTEzLCAweDAxMTNdLCBbMHgwMTE1LCAweDAxMTVdLCBbMHgwMTE3LCAw
eDAxMTddLCBbMHgwMTE5LCAweDAxMTldLCBbMHgwMTFCLCAweDAxMUJdLCBbMHgwMTFELCAweDAx
MURdLCBbMHgwMTFGLCAweDAxMUZdLCBbMHgwMTIxLCAweDAxMjFdLCBbMHgwMTIzLCAweDAxMjNd
LCBbMHgwMTI1LCAweDAxMjVdLCBbMHgwMTI3LCAweDAxMjddLCBbMHgwMTI5LCAweDAxMjldLCBb
MHgwMTJCLCAweDAxMkJdLCBbMHgwMTJELCAweDAxMkRdLCBbMHgwMTJGLCAweDAxMkZdLCBbMHgw
MTMxLCAweDAxMzFdLCBbMHgwMTMzLCAweDAxMzNdLCBbMHgwMTM1LCAweDAxMzVdLCBbMHgwMTM3
LCAweDAxMzhdLCBbMHgwMTNBLCAweDAxM0FdLCBbMHgwMTNDLCAweDAxM0NdLCBbMHgwMTNFLCAw
eDAxM0VdLCBbMHgwMTQwLCAweDAxNDBdLCBbMHgwMTQyLCAweDAxNDJdLCBbMHgwMTQ0LCAweDAx
NDRdLCBbMHgwMTQ2LCAweDAxNDZdLCBbMHgwMTQ4LCAweDAxNDldLCBbMHgwMTRCLCAweDAxNEJd
LCBbMHgwMTRELCAweDAxNERdLCBbMHgwMTRGLCAweDAxNEZdLCBbMHgwMTUxLCAweDAxNTFdLCBb
MHgwMTUzLCAweDAxNTNdLCBbMHgwMTU1LCAweDAxNTVdLCBbMHgwMTU3LCAweDAxNTddLCBbMHgw
MTU5LCAweDAxNTldLCBbMHgwMTVCLCAweDAxNUJdLCBbMHgwMTVELCAweDAxNURdLCBbMHgwMTVG
LCAweDAxNUZdLCBbMHgwMTYxLCAweDAxNjFdLCBbMHgwMTYzLCAweDAxNjNdLCBbMHgwMTY1LCAw
eDAxNjVdLCBbMHgwMTY3LCAweDAxNjddLCBbMHgwMTY5LCAweDAxNjldLCBbMHgwMTZCLCAweDAx
NkJdLCBbMHgwMTZELCAweDAxNkRdLCBbMHgwMTZGLCAweDAxNkZdLCBbMHgwMTcxLCAweDAxNzFd
LCBbMHgwMTczLCAweDAxNzNdLCBbMHgwMTc1LCAweDAxNzVdLCBbMHgwMTc3LCAweDAxNzddLCBb
MHgwMTdBLCAweDAxN0FdLCBbMHgwMTdDLCAweDAxN0NdLCBbMHgwMTdFLCAweDAxODBdLCBbMHgw
MTgzLCAweDAxODNdLCBbMHgwMTg1LCAweDAxODVdLCBbMHgwMTg4LCAweDAxODhdLCBbMHgwMThD
LCAweDAxOERdLCBbMHgwMTkyLCAweDAxOTJdLCBbMHgwMTk1LCAweDAxOTVdLCBbMHgwMTk5LCAw
eDAxOUJdLCBbMHgwMTlFLCAweDAxOUVdLCBbMHgwMUExLCAweDAxQTFdLCBbMHgwMUEzLCAweDAx
QTNdLCBbMHgwMUE1LCAweDAxQTVdLCBbMHgwMUE4LCAweDAxQThdLCBbMHgwMUFCLCAweDAxQUJd
LCBbMHgwMUFELCAweDAxQURdLCBbMHgwMUIwLCAweDAxQjBdLCBbMHgwMUI0LCAweDAxQjRdLCBb
MHgwMUI2LCAweDAxQjZdLCBbMHgwMUI5LCAweDAxQkFdLCBbMHgwMUJELCAweDAxQkRdLCBbMHgw
MUM2LCAweDAxQzZdLCBbMHgwMUM5LCAweDAxQzldLCBbMHgwMUNDLCAweDAxQ0NdLCBbMHgwMUNF
LCAweDAxQ0VdLCBbMHgwMUQwLCAweDAxRDBdLCBbMHgwMUQyLCAweDAxRDJdLCBbMHgwMUQ0LCAw
eDAxRDRdLCBbMHgwMUQ2LCAweDAxRDZdLCBbMHgwMUQ4LCAweDAxRDhdLCBbMHgwMURBLCAweDAx
REFdLCBbMHgwMURDLCAweDAxRERdLCBbMHgwMURGLCAweDAxREZdLCBbMHgwMUUxLCAweDAxRTFd
LCBbMHgwMUUzLCAweDAxRTNdLCBbMHgwMUU1LCAweDAxRTVdLCBbMHgwMUU3LCAweDAxRTddLCBb
MHgwMUU5LCAweDAxRTldLCBbMHgwMUVCLCAweDAxRUJdLCBbMHgwMUVELCAweDAxRURdLCBbMHgw
MUVGLCAweDAxRjBdLCBbMHgwMUYzLCAweDAxRjNdLCBbMHgwMUY1LCAweDAxRjVdLCBbMHgwMUZC
LCAweDAxRkJdLCBbMHgwMUZELCAweDAxRkRdLCBbMHgwMUZGLCAweDAxRkZdLCBbMHgwMjAxLCAw
eDAyMDFdLCBbMHgwMjAzLCAweDAyMDNdLCBbMHgwMjA1LCAweDAyMDVdLCBbMHgwMjA3LCAweDAy
MDddLCBbMHgwMjA5LCAweDAyMDldLCBbMHgwMjBCLCAweDAyMEJdLCBbMHgwMjBELCAweDAyMERd
LCBbMHgwMjBGLCAweDAyMEZdLCBbMHgwMjExLCAweDAyMTFdLCBbMHgwMjEzLCAweDAyMTNdLCBb
MHgwMjE1LCAweDAyMTVdLCBbMHgwMjE3LCAweDAyMTddLCBbMHgwMjUwLCAweDAyQThdLCBbMHgw
MzkwLCAweDAzOTBdLCBbMHgwM0FDLCAweDAzQ0VdLCBbMHgwM0QwLCAweDAzRDFdLCBbMHgwM0Q1
LCAweDAzRDZdLCBbMHgwM0UzLCAweDAzRTNdLCBbMHgwM0U1LCAweDAzRTVdLCBbMHgwM0U3LCAw
eDAzRTddLCBbMHgwM0U5LCAweDAzRTldLCBbMHgwM0VCLCAweDAzRUJdLCBbMHgwM0VELCAweDAz
RURdLCBbMHgwM0VGLCAweDAzRjJdLCBbMHgwNDMwLCAweDA0NEZdLCBbMHgwNDUxLCAweDA0NUNd
LCBbMHgwNDVFLCAweDA0NUZdLCBbMHgwNDYxLCAweDA0NjFdLCBbMHgwNDYzLCAweDA0NjNdLCBb
MHgwNDY1LCAweDA0NjVdLCBbMHgwNDY3LCAweDA0NjddLCBbMHgwNDY5LCAweDA0NjldLCBbMHgw
NDZCLCAweDA0NkJdLCBbMHgwNDZELCAweDA0NkRdLCBbMHgwNDZGLCAweDA0NkZdLCBbMHgwNDcx
LCAweDA0NzFdLCBbMHgwNDczLCAweDA0NzNdLCBbMHgwNDc1LCAweDA0NzVdLCBbMHgwNDc3LCAw
eDA0NzddLCBbMHgwNDc5LCAweDA0NzldLCBbMHgwNDdCLCAweDA0N0JdLCBbMHgwNDdELCAweDA0
N0RdLCBbMHgwNDdGLCAweDA0N0ZdLCBbMHgwNDgxLCAweDA0ODFdLCBbMHgwNDkxLCAweDA0OTFd
LCBbMHgwNDkzLCAweDA0OTNdLCBbMHgwNDk1LCAweDA0OTVdLCBbMHgwNDk3LCAweDA0OTddLCBb
MHgwNDk5LCAweDA0OTldLCBbMHgwNDlCLCAweDA0OUJdLCBbMHgwNDlELCAweDA0OURdLCBbMHgw
NDlGLCAweDA0OUZdLCBbMHgwNEExLCAweDA0QTFdLCBbMHgwNEEzLCAweDA0QTNdLCBbMHgwNEE1
LCAweDA0QTVdLCBbMHgwNEE3LCAweDA0QTddLCBbMHgwNEE5LCAweDA0QTldLCBbMHgwNEFCLCAw
eDA0QUJdLCBbMHgwNEFELCAweDA0QURdLCBbMHgwNEFGLCAweDA0QUZdLCBbMHgwNEIxLCAweDA0
QjFdLCBbMHgwNEIzLCAweDA0QjNdLCBbMHgwNEI1LCAweDA0QjVdLCBbMHgwNEI3LCAweDA0Qjdd
LCBbMHgwNEI5LCAweDA0QjldLCBbMHgwNEJCLCAweDA0QkJdLCBbMHgwNEJELCAweDA0QkRdLCBb
MHgwNEJGLCAweDA0QkZdLCBbMHgwNEMyLCAweDA0QzJdLCBbMHgwNEM0LCAweDA0QzRdLCBbMHgw
NEM4LCAweDA0QzhdLCBbMHgwNENDLCAweDA0Q0NdLCBbMHgwNEQxLCAweDA0RDFdLCBbMHgwNEQz
LCAweDA0RDNdLCBbMHgwNEQ1LCAweDA0RDVdLCBbMHgwNEQ3LCAweDA0RDddLCBbMHgwNEQ5LCAw
eDA0RDldLCBbMHgwNERCLCAweDA0REJdLCBbMHgwNERELCAweDA0RERdLCBbMHgwNERGLCAweDA0
REZdLCBbMHgwNEUxLCAweDA0RTFdLCBbMHgwNEUzLCAweDA0RTNdLCBbMHgwNEU1LCAweDA0RTVd
LCBbMHgwNEU3LCAweDA0RTddLCBbMHgwNEU5LCAweDA0RTldLCBbMHgwNEVCLCAweDA0RUJdLCBb
MHgwNEVGLCAweDA0RUZdLCBbMHgwNEYxLCAweDA0RjFdLCBbMHgwNEYzLCAweDA0RjNdLCBbMHgw
NEY1LCAweDA0RjVdLCBbMHgwNEY5LCAweDA0RjldLCBbMHgwNTYxLCAweDA1ODddLCBbMHgxMEQw
LCAweDEwRjZdLCBbMHgxRTAxLCAweDFFMDFdLCBbMHgxRTAzLCAweDFFMDNdLCBbMHgxRTA1LCAw
eDFFMDVdLCBbMHgxRTA3LCAweDFFMDddLCBbMHgxRTA5LCAweDFFMDldLCBbMHgxRTBCLCAweDFF
MEJdLCBbMHgxRTBELCAweDFFMERdLCBbMHgxRTBGLCAweDFFMEZdLCBbMHgxRTExLCAweDFFMTFd
LCBbMHgxRTEzLCAweDFFMTNdLCBbMHgxRTE1LCAweDFFMTVdLCBbMHgxRTE3LCAweDFFMTddLCBb
MHgxRTE5LCAweDFFMTldLCBbMHgxRTFCLCAweDFFMUJdLCBbMHgxRTFELCAweDFFMURdLCBbMHgx
RTFGLCAweDFFMUZdLCBbMHgxRTIxLCAweDFFMjFdLCBbMHgxRTIzLCAweDFFMjNdLCBbMHgxRTI1
LCAweDFFMjVdLCBbMHgxRTI3LCAweDFFMjddLCBbMHgxRTI5LCAweDFFMjldLCBbMHgxRTJCLCAw
eDFFMkJdLCBbMHgxRTJELCAweDFFMkRdLCBbMHgxRTJGLCAweDFFMkZdLCBbMHgxRTMxLCAweDFF
MzFdLCBbMHgxRTMzLCAweDFFMzNdLCBbMHgxRTM1LCAweDFFMzVdLCBbMHgxRTM3LCAweDFFMzdd
LCBbMHgxRTM5LCAweDFFMzldLCBbMHgxRTNCLCAweDFFM0JdLCBbMHgxRTNELCAweDFFM0RdLCBb
MHgxRTNGLCAweDFFM0ZdLCBbMHgxRTQxLCAweDFFNDFdLCBbMHgxRTQzLCAweDFFNDNdLCBbMHgx
RTQ1LCAweDFFNDVdLCBbMHgxRTQ3LCAweDFFNDddLCBbMHgxRTQ5LCAweDFFNDldLCBbMHgxRTRC
LCAweDFFNEJdLCBbMHgxRTRELCAweDFFNERdLCBbMHgxRTRGLCAweDFFNEZdLCBbMHgxRTUxLCAw
eDFFNTFdLCBbMHgxRTUzLCAweDFFNTNdLCBbMHgxRTU1LCAweDFFNTVdLCBbMHgxRTU3LCAweDFF
NTddLCBbMHgxRTU5LCAweDFFNTldLCBbMHgxRTVCLCAweDFFNUJdLCBbMHgxRTVELCAweDFFNURd
LCBbMHgxRTVGLCAweDFFNUZdLCBbMHgxRTYxLCAweDFFNjFdLCBbMHgxRTYzLCAweDFFNjNdLCBb
MHgxRTY1LCAweDFFNjVdLCBbMHgxRTY3LCAweDFFNjddLCBbMHgxRTY5LCAweDFFNjldLCBbMHgx
RTZCLCAweDFFNkJdLCBbMHgxRTZELCAweDFFNkRdLCBbMHgxRTZGLCAweDFFNkZdLCBbMHgxRTcx
LCAweDFFNzFdLCBbMHgxRTczLCAweDFFNzNdLCBbMHgxRTc1LCAweDFFNzVdLCBbMHgxRTc3LCAw
eDFFNzddLCBbMHgxRTc5LCAweDFFNzldLCBbMHgxRTdCLCAweDFFN0JdLCBbMHgxRTdELCAweDFF
N0RdLCBbMHgxRTdGLCAweDFFN0ZdLCBbMHgxRTgxLCAweDFFODFdLCBbMHgxRTgzLCAweDFFODNd
LCBbMHgxRTg1LCAweDFFODVdLCBbMHgxRTg3LCAweDFFODddLCBbMHgxRTg5LCAweDFFODldLCBb
MHgxRThCLCAweDFFOEJdLCBbMHgxRThELCAweDFFOERdLCBbMHgxRThGLCAweDFFOEZdLCBbMHgx
RTkxLCAweDFFOTFdLCBbMHgxRTkzLCAweDFFOTNdLCBbMHgxRTk1LCAweDFFOUJdLCBbMHgxRUEx
LCAweDFFQTFdLCBbMHgxRUEzLCAweDFFQTNdLCBbMHgxRUE1LCAweDFFQTVdLCBbMHgxRUE3LCAw
eDFFQTddLCBbMHgxRUE5LCAweDFFQTldLCBbMHgxRUFCLCAweDFFQUJdLCBbMHgxRUFELCAweDFF
QURdLCBbMHgxRUFGLCAweDFFQUZdLCBbMHgxRUIxLCAweDFFQjFdLCBbMHgxRUIzLCAweDFFQjNd
LCBbMHgxRUI1LCAweDFFQjVdLCBbMHgxRUI3LCAweDFFQjddLCBbMHgxRUI5LCAweDFFQjldLCBb
MHgxRUJCLCAweDFFQkJdLCBbMHgxRUJELCAweDFFQkRdLCBbMHgxRUJGLCAweDFFQkZdLCBbMHgx
RUMxLCAweDFFQzFdLCBbMHgxRUMzLCAweDFFQzNdLCBbMHgxRUM1LCAweDFFQzVdLCBbMHgxRUM3
LCAweDFFQzddLCBbMHgxRUM5LCAweDFFQzldLCBbMHgxRUNCLCAweDFFQ0JdLCBbMHgxRUNELCAw
eDFFQ0RdLCBbMHgxRUNGLCAweDFFQ0ZdLCBbMHgxRUQxLCAweDFFRDFdLCBbMHgxRUQzLCAweDFF
RDNdLCBbMHgxRUQ1LCAweDFFRDVdLCBbMHgxRUQ3LCAweDFFRDddLCBbMHgxRUQ5LCAweDFFRDld
LCBbMHgxRURCLCAweDFFREJdLCBbMHgxRURELCAweDFFRERdLCBbMHgxRURGLCAweDFFREZdLCBb
MHgxRUUxLCAweDFFRTFdLCBbMHgxRUUzLCAweDFFRTNdLCBbMHgxRUU1LCAweDFFRTVdLCBbMHgx
RUU3LCAweDFFRTddLCBbMHgxRUU5LCAweDFFRTldLCBbMHgxRUVCLCAweDFFRUJdLCBbMHgxRUVE
LCAweDFFRURdLCBbMHgxRUVGLCAweDFFRUZdLCBbMHgxRUYxLCAweDFFRjFdLCBbMHgxRUYzLCAw
eDFFRjNdLCBbMHgxRUY1LCAweDFFRjVdLCBbMHgxRUY3LCAweDFFRjddLCBbMHgxRUY5LCAweDFF
RjldLCBbMHgxRjAwLCAweDFGMDddLCBbMHgxRjEwLCAweDFGMTVdLCBbMHgxRjIwLCAweDFGMjdd
LCBbMHgxRjMwLCAweDFGMzddLCBbMHgxRjQwLCAweDFGNDVdLCBbMHgxRjUwLCAweDFGNTddLCBb
MHgxRjYwLCAweDFGNjddLCBbMHgxRjcwLCAweDFGN0RdLCBbMHgxRjgwLCAweDFGODddLCBbMHgx
RjkwLCAweDFGOTddLCBbMHgxRkEwLCAweDFGQTddLCBbMHgxRkIwLCAweDFGQjRdLCBbMHgxRkI2
LCAweDFGQjddLCBbMHgxRkJFLCAweDFGQkVdLCBbMHgxRkMyLCAweDFGQzRdLCBbMHgxRkM2LCAw
eDFGQzddLCBbMHgxRkQwLCAweDFGRDNdLCBbMHgxRkQ2LCAweDFGRDddLCBbMHgxRkUwLCAweDFG
RTddLCBbMHgxRkYyLCAweDFGRjRdLCBbMHgxRkY2LCAweDFGRjddLCBbMHgyMDdGLCAweDIwN0Zd
LCBbMHgyMTBBLCAweDIxMEFdLCBbMHgyMTBFLCAweDIxMEZdLCBbMHgyMTEzLCAweDIxMTNdLCBb
MHgyMTE4LCAweDIxMThdLCBbMHgyMTJFLCAweDIxMkZdLCBbMHgyMTM0LCAweDIxMzRdLCBbMHhG
QjAwLCAweEZCMDZdLCBbMHhGQjEzLCAweEZCMTddLCBbMHhGRjQxLCAweEZGNUFdXTsKK0x0ID0g
W1sweDAxQzUsIDB4MDFDNV0sIFsweDAxQzgsIDB4MDFDOF0sIFsweDAxQ0IsIDB4MDFDQl0sIFsw
eDAxRjIsIDB4MDFGMl1dOworTG0gPSBbWzB4MDJCMCwgMHgwMkI4XSwgWzB4MDJCQiwgMHgwMkMx
XSwgWzB4MDJEMCwgMHgwMkQxXSwgWzB4MDJFMCwgMHgwMkU0XSwgWzB4MDM3QSwgMHgwMzdBXSwg
WzB4MDU1OSwgMHgwNTU5XSwgWzB4MDY0MCwgMHgwNjQwXSwgWzB4MDZFNSwgMHgwNkU2XSwgWzB4
MEU0NiwgMHgwRTQ2XSwgWzB4MEVDNiwgMHgwRUM2XSwgWzB4MzAwNSwgMHgzMDA1XSwgWzB4MzAz
MSwgMHgzMDM1XSwgWzB4MzA5RCwgMHgzMDlFXSwgWzB4MzBGQywgMHgzMEZFXSwgWzB4RkY3MCwg
MHhGRjcwXSwgWzB4RkY5RSwgMHhGRjlGXV07CitMbyA9IFtbMHgwMUFBLCAweDAxQUFdLCBbMHgw
MUJCLCAweDAxQkJdLCBbMHgwMUJFLCAweDAxQzNdLCBbMHgwM0YzLCAweDAzRjNdLCBbMHgwNEMw
LCAweDA0QzBdLCBbMHgwNUQwLCAweDA1RUFdLCBbMHgwNUYwLCAweDA1RjJdLCBbMHgwNjIxLCAw
eDA2M0FdLCBbMHgwNjQxLCAweDA2NEFdLCBbMHgwNjcxLCAweDA2QjddLCBbMHgwNkJBLCAweDA2
QkVdLCBbMHgwNkMwLCAweDA2Q0VdLCBbMHgwNkQwLCAweDA2RDNdLCBbMHgwNkQ1LCAweDA2RDVd
LCBbMHgwOTA1LCAweDA5MzldLCBbMHgwOTNELCAweDA5M0RdLCBbMHgwOTUwLCAweDA5NTBdLCBb
MHgwOTU4LCAweDA5NjFdLCBbMHgwOTg1LCAweDA5OENdLCBbMHgwOThGLCAweDA5OTBdLCBbMHgw
OTkzLCAweDA5QThdLCBbMHgwOUFBLCAweDA5QjBdLCBbMHgwOUIyLCAweDA5QjJdLCBbMHgwOUI2
LCAweDA5QjldLCBbMHgwOURDLCAweDA5RERdLCBbMHgwOURGLCAweDA5RTFdLCBbMHgwOUYwLCAw
eDA5RjFdLCBbMHgwQTA1LCAweDBBMEFdLCBbMHgwQTBGLCAweDBBMTBdLCBbMHgwQTEzLCAweDBB
MjhdLCBbMHgwQTJBLCAweDBBMzBdLCBbMHgwQTMyLCAweDBBMzNdLCBbMHgwQTM1LCAweDBBMzZd
LCBbMHgwQTM4LCAweDBBMzldLCBbMHgwQTU5LCAweDBBNUNdLCBbMHgwQTVFLCAweDBBNUVdLCBb
MHgwQTcyLCAweDBBNzRdLCBbMHgwQTg1LCAweDBBOEJdLCBbMHgwQThELCAweDBBOERdLCBbMHgw
QThGLCAweDBBOTFdLCBbMHgwQTkzLCAweDBBQThdLCBbMHgwQUFBLCAweDBBQjBdLCBbMHgwQUIy
LCAweDBBQjNdLCBbMHgwQUI1LCAweDBBQjldLCBbMHgwQUJELCAweDBBQkRdLCBbMHgwQUQwLCAw
eDBBRDBdLCBbMHgwQUUwLCAweDBBRTBdLCBbMHgwQjA1LCAweDBCMENdLCBbMHgwQjBGLCAweDBC
MTBdLCBbMHgwQjEzLCAweDBCMjhdLCBbMHgwQjJBLCAweDBCMzBdLCBbMHgwQjMyLCAweDBCMzNd
LCBbMHgwQjM2LCAweDBCMzldLCBbMHgwQjNELCAweDBCM0RdLCBbMHgwQjVDLCAweDBCNURdLCBb
MHgwQjVGLCAweDBCNjFdLCBbMHgwQjg1LCAweDBCOEFdLCBbMHgwQjhFLCAweDBCOTBdLCBbMHgw
QjkyLCAweDBCOTVdLCBbMHgwQjk5LCAweDBCOUFdLCBbMHgwQjlDLCAweDBCOUNdLCBbMHgwQjlF
LCAweDBCOUZdLCBbMHgwQkEzLCAweDBCQTRdLCBbMHgwQkE4LCAweDBCQUFdLCBbMHgwQkFFLCAw
eDBCQjVdLCBbMHgwQkI3LCAweDBCQjldLCBbMHgwQzA1LCAweDBDMENdLCBbMHgwQzBFLCAweDBD
MTBdLCBbMHgwQzEyLCAweDBDMjhdLCBbMHgwQzJBLCAweDBDMzNdLCBbMHgwQzM1LCAweDBDMzld
LCBbMHgwQzYwLCAweDBDNjFdLCBbMHgwQzg1LCAweDBDOENdLCBbMHgwQzhFLCAweDBDOTBdLCBb
MHgwQzkyLCAweDBDQThdLCBbMHgwQ0FBLCAweDBDQjNdLCBbMHgwQ0I1LCAweDBDQjldLCBbMHgw
Q0RFLCAweDBDREVdLCBbMHgwQ0UwLCAweDBDRTFdLCBbMHgwRDA1LCAweDBEMENdLCBbMHgwRDBF
LCAweDBEMTBdLCBbMHgwRDEyLCAweDBEMjhdLCBbMHgwRDJBLCAweDBEMzldLCBbMHgwRDYwLCAw
eDBENjFdLCBbMHgwRTAxLCAweDBFMzBdLCBbMHgwRTMyLCAweDBFMzNdLCBbMHgwRTQwLCAweDBF
NDVdLCBbMHgwRTgxLCAweDBFODJdLCBbMHgwRTg0LCAweDBFODRdLCBbMHgwRTg3LCAweDBFODhd
LCBbMHgwRThBLCAweDBFOEFdLCBbMHgwRThELCAweDBFOERdLCBbMHgwRTk0LCAweDBFOTddLCBb
MHgwRTk5LCAweDBFOUZdLCBbMHgwRUExLCAweDBFQTNdLCBbMHgwRUE1LCAweDBFQTVdLCBbMHgw
RUE3LCAweDBFQTddLCBbMHgwRUFBLCAweDBFQUJdLCBbMHgwRUFELCAweDBFQjBdLCBbMHgwRUIy
LCAweDBFQjNdLCBbMHgwRUJELCAweDBFQkRdLCBbMHgwRUMwLCAweDBFQzRdLCBbMHgwRURDLCAw
eDBFRERdLCBbMHgwRjAwLCAweDBGMDBdLCBbMHgwRjQwLCAweDBGNDddLCBbMHgwRjQ5LCAweDBG
NjldLCBbMHgwRjg4LCAweDBGOEJdLCBbMHgxMTAwLCAweDExNTldLCBbMHgxMTVGLCAweDExQTJd
LCBbMHgxMUE4LCAweDExRjldLCBbMHgyMTM1LCAweDIxMzhdLCBbMHgzMDA2LCAweDMwMDZdLCBb
MHgzMDQxLCAweDMwOTRdLCBbMHgzMEExLCAweDMwRkFdLCBbMHgzMTA1LCAweDMxMkNdLCBbMHgz
MTMxLCAweDMxOEVdLCBbMHg0RTAwLCAweDlGQTVdLCBbMHhBQzAwLCAweEQ3QTNdLCBbMHhGOTAw
LCAweEZBMkRdLCBbMHhGQjFGLCAweEZCMjhdLCBbMHhGQjJBLCAweEZCMzZdLCBbMHhGQjM4LCAw
eEZCM0NdLCBbMHhGQjNFLCAweEZCM0VdLCBbMHhGQjQwLCAweEZCNDFdLCBbMHhGQjQzLCAweEZC
NDRdLCBbMHhGQjQ2LCAweEZCQjFdLCBbMHhGQkQzLCAweEZEM0RdLCBbMHhGRDUwLCAweEZEOEZd
LCBbMHhGRDkyLCAweEZEQzddLCBbMHhGREYwLCAweEZERkJdLCBbMHhGRTcwLCAweEZFNzJdLCBb
MHhGRTc0LCAweEZFNzRdLCBbMHhGRTc2LCAweEZFRkNdLCBbMHhGRjY2LCAweEZGNkZdLCBbMHhG
RjcxLCAweEZGOURdLCBbMHhGRkEwLCAweEZGQkVdLCBbMHhGRkMyLCAweEZGQzddLCBbMHhGRkNB
LCAweEZGQ0ZdLCBbMHhGRkQyLCAweEZGRDddLCBbMHhGRkRBLCAweEZGRENdXTsKK05sID0gW1sw
eDIxNjAsIDB4MjE4Ml0sIFsweDMwMDcsIDB4MzAwN10sIFsweDMwMjEsIDB4MzAyOV1dOworCitV
bmljb2RlTGV0dGVyTHUgPSBbXTsKK1VuaWNvZGVMZXR0ZXJMbCA9IFtdOworVW5pY29kZUxldHRl
ckx0ID0gW107CitVbmljb2RlTGV0dGVyTG0gPSBbXTsKK1VuaWNvZGVMZXR0ZXJMbyA9IFtdOwor
VW5pY29kZUxldHRlck5sID0gW107CisKK2ZvciAoaW5kZXhJID0gMDsgaW5kZXhJIDwgTHUubGVu
Z3RoOyBpbmRleEkrKykgeworICBmb3IgKGluZGV4SiA9IEx1W2luZGV4SV1bMF07IGluZGV4SiA8
PSBMdVtpbmRleEldWzFdOyBpbmRleEorKykgeworICAgIFVuaWNvZGVMZXR0ZXJMdVtpbmRleEpd
ID0gdHJ1ZTsKKyAgfQorfQorZm9yIChpbmRleEkgPSAwOyBpbmRleEkgPCBMbC5sZW5ndGg7IGlu
ZGV4SSsrKSB7CisgIGZvciAoaW5kZXhKID0gTGxbaW5kZXhJXVswXTsgaW5kZXhKIDw9IExsW2lu
ZGV4SV1bMV07IGluZGV4SisrKSB7CisgICAgVW5pY29kZUxldHRlckxsW2luZGV4Sl0gPSB0cnVl
OworICB9Cit9ICAKK2ZvciAoaW5kZXhJID0gMDsgaW5kZXhJIDwgTHQubGVuZ3RoOyBpbmRleEkr
KykgeworICBmb3IgKGluZGV4SiA9IEx0W2luZGV4SV1bMF07IGluZGV4SiA8PSBMdFtpbmRleEld
WzFdOyBpbmRleEorKykgeworICAgIFVuaWNvZGVMZXR0ZXJMdFtpbmRleEpdID0gdHJ1ZTsKKyAg
fQorfQorZm9yIChpbmRleEkgPSAwOyBpbmRleEkgPCBMbS5sZW5ndGg7IGluZGV4SSsrKSB7Cisg
IGZvciAoaW5kZXhKID0gTG1baW5kZXhJXVswXTsgaW5kZXhKIDw9IExtW2luZGV4SV1bMV07IGlu
ZGV4SisrKSB7CisgICAgVW5pY29kZUxldHRlckxtW2luZGV4Sl0gPSB0cnVlOworICB9Cit9Citm
b3IgKGluZGV4SSA9IDA7IGluZGV4SSA8IExvLmxlbmd0aDsgaW5kZXhJKyspIHsKKyAgZm9yIChp
bmRleEogPSBMb1tpbmRleEldWzBdOyBpbmRleEogPD0gTG9baW5kZXhJXVsxXTsgaW5kZXhKKysp
IHsKKyAgICBVbmljb2RlTGV0dGVyTG9baW5kZXhKXSA9IHRydWU7CisgIH0KK30KK2ZvciAoaW5k
ZXhJID0gMDsgaW5kZXhJIDwgTmwubGVuZ3RoOyBpbmRleEkrKykgeworICBmb3IgKGluZGV4SiA9
IE5sW2luZGV4SV1bMF07IGluZGV4SiA8PSBObFtpbmRleEldWzFdOyBpbmRleEorKykgeworICAg
IFVuaWNvZGVMZXR0ZXJObFtpbmRleEpdID0gdHJ1ZTsKKyAgfQorfQorCitlcnJvckNvdW50ID0g
MDsKK2NvdW50ID0gMDsKK3ZhciBpbmRleFA7Cit2YXIgaW5kZXhPID0gMDsKK2ZvciAoaW5kZXgg
PSAwOyBpbmRleCA8PSA2NTUzNTsgaW5kZXgrKykgeyAgCisgIGlmICgoVW5pY29kZUxldHRlckx1
W2luZGV4XSA9PT0gdW5kZWZpbmVkKSAmJiAoVW5pY29kZUxldHRlckxsW2luZGV4XSA9PT0gdW5k
ZWZpbmVkKSAmJiAoVW5pY29kZUxldHRlckx0W2luZGV4XSA9PT0gdW5kZWZpbmVkKSAmJiAoVW5p
Y29kZUxldHRlckxtW2luZGV4XSA9PT0gdW5kZWZpbmVkKSAmJiAoVW5pY29kZUxldHRlckxvW2lu
ZGV4XSA9PT0gdW5kZWZpbmVkKSAmJiAoVW5pY29kZUxldHRlck5sW2luZGV4XSA9PT0gdW5kZWZp
bmVkKSAmJiAoaW5kZXggIT09IDB4MDAyNCkgICYmIChpbmRleCAhPT0gMHgwMDVGKSkgeyAgIAor
ICAgIHRyeSB7CisgICAgICB2YXIgaWRlbnRpZmllciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaW5k
ZXgpOyAgICAKKyAgICAgIGV2YWwoInZhciAiICsgaWRlbnRpZmllciArICI9MSIpOworICAgICAg
aWYgKGVycm9yQ291bnQgPT09IDApIHsgCisgICAgICAgIGluZGV4TyA9IGluZGV4OyAKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIGlmICgoaW5kZXggLSBpbmRleFApICE9PSAxKSB7ICAgICAgICAg
ICAgIAorICAgICAgICAgIGlmICgoaW5kZXhQIC0gaW5kZXhPKSAhPT0gMCkgeworICAgICAgICAg
ICAgdmFyIGhleFAgPSBkZWNpbWFsVG9IZXhTdHJpbmcoaW5kZXhQKTsKKyAgICAgICAgICAgIHZh
ciBoZXhPID0gZGVjaW1hbFRvSGV4U3RyaW5nKGluZGV4Tyk7CisgICAgICAgICAgICB0ZXN0RmFp
bGVkKCcjJyArIGhleE8gKyAnLScgKyBoZXhQICsgJyAnKTsKKyAgICAgICAgICB9IAorICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGhleFAgPSBkZWNpbWFsVG9IZXhTdHJpbmcoaW5k
ZXhQKTsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoJyMnICsgaGV4UCArICcgJyk7CisgICAgICAg
ICAgfSAgCisgICAgICAgICAgaW5kZXhPID0gaW5kZXg7CisgICAgICAgIH0gICAgICAgICAKKyAg
ICAgIH0KKyAgICAgIGluZGV4UCA9IGluZGV4OworICAgICAgZXJyb3JDb3VudCsrOyAgICAKKyAg
ICB9IGNhdGNoIChlKSB7ICAgICAgCisgICAgfQorICAgIGNvdW50Kys7CisgIH0gIAorfQorCitp
ZiAoZXJyb3JDb3VudCA+IDApIHsKKyAgaWYgKChpbmRleFAgLSBpbmRleE8pICE9PSAwKSB7Cisg
ICAgdmFyIGhleFAgPSBkZWNpbWFsVG9IZXhTdHJpbmcoaW5kZXhQKTsKKyAgICB2YXIgaGV4TyA9
IGRlY2ltYWxUb0hleFN0cmluZyhpbmRleE8pOworICAgIHRlc3RGYWlsZWQoJyMnICsgaGV4TyAr
ICctJyArIGhleFAgKyAnICcpOworICB9IGVsc2UgeworICAgIHZhciBoZXhQID0gZGVjaW1hbFRv
SGV4U3RyaW5nKGluZGV4UCk7CisgICAgdGVzdEZhaWxlZCgnIycgKyBoZXhQICsgJyAnKTsKKyAg
fSAgICAgCisgIHRlc3RGYWlsZWQoJ1RvdGFsIGVycm9yOiAnICsgZXJyb3JDb3VudCArICcgYmFk
IFVuaWNvZGUgY2hhcmFjdGVyIGluICcgKyBjb3VudCArICcgJyk7Cit9CisKK2Z1bmN0aW9uIGRl
Y2ltYWxUb0hleFN0cmluZyhuKSB7CisgIG4gPSBOdW1iZXIobik7CisgIHZhciBoID0gIiI7Cisg
IGZvciAodmFyIGkgPSAzOyBpID49IDA7IGktLSkgeworICAgIGlmIChuID49IE1hdGgucG93KDE2
LCBpKSkgeworICAgICAgdmFyIHQgPSBNYXRoLmZsb29yKG4gLyBNYXRoLnBvdygxNiwgaSkpOwor
ICAgICAgbiAtPSB0ICogTWF0aC5wb3coMTYsIGkpOworICAgICAgaWYgKCB0ID49IDEwICkgewor
ICAgICAgICBpZiAoIHQgPT0gMTAgKSB7IGggKz0gIkEiOyB9CisgICAgICAgIGlmICggdCA9PSAx
MSApIHsgaCArPSAiQiI7IH0KKyAgICAgICAgaWYgKCB0ID09IDEyICkgeyBoICs9ICJDIjsgfQor
ICAgICAgICBpZiAoIHQgPT0gMTMgKSB7IGggKz0gIkQiOyB9CisgICAgICAgIGlmICggdCA9PSAx
NCApIHsgaCArPSAiRSI7IH0KKyAgICAgICAgaWYgKCB0ID09IDE1ICkgeyBoICs9ICJGIjsgfQor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgaCArPSBTdHJpbmcodCk7CisgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgIGggKz0gIjAiOworICAgIH0KKyAgfQorICByZXR1cm4gaDsKK30KKworfSBj
YXRjaCAoZXgpIHsKKyAgICBzcHV0bmlrRXhjZXB0aW9uID0gZXg7Cit9CisKK3ZhciBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitpZiAoIXN1Y2Nlc3Nm
dWxseVBhcnNlZCkKKyAgICBwcmludFRlc3RGYWlsZWQoJ3N1Y2Nlc3NmdWxseVBhcnNlZCBpcyBu
b3Qgc2V0Jyk7CitlbHNlIGlmIChzcHV0bmlrRXhjZXB0aW9uKQorICAgIHByaW50VGVzdEZhaWxl
ZChzcHV0bmlrRXhjZXB0aW9uKTsKK2Vsc2UKKyAgICBwcmludFRlc3RQYXNzZWQoIiIpOwordGVz
dFByaW50KCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVURTwvc3Bhbj4nKTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="38660"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>