<?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>111621</bug_id>
          
          <creation_ts>2013-03-06 13:44:03 -0800</creation_ts>
          <short_desc>Dashboard cleanup: Move all dashboard ui related code into ui.js.</short_desc>
          <delta_ts>2013-03-06 19:50:25 -0800</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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julie Parent">jparent</reporter>
          <assigned_to name="Julie Parent">jparent</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>849266</commentid>
    <comment_count>0</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-03-06 13:44:03 -0800</bug_when>
    <thetext>Dashboard cleanup: Move all dashboard ui related code into ui.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849270</commentid>
    <comment_count>1</comment_count>
      <attachid>191824</attachid>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-03-06 13:48:37 -0800</bug_when>
    <thetext>Created attachment 191824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849274</commentid>
    <comment_count>2</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-03-06 13:55:09 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=191824&amp;action=review

A few random thoughts. I don&apos;t feel strongly about any of these, so feel free to ignore them and/or do them in a followup patch.

&gt; Tools/TestResultServer/static-dashboards/ui.js:35
&gt; +ui.hidePopup = function()

How about ui.popup.hide/ui.popup.show?

&gt; Tools/TestResultServer/static-dashboards/ui.js:67
&gt; +ui.checkboxHTML = function(queryParameter, label, isChecked, opt_extraJavaScript)

How about we move all these HTML returning things into their own namespace as well:
ui.html.checkbox
ui.html.testTypeSwitcher
ui.html._topLink
etc.

&gt; Tools/TestResultServer/static-dashboards/ui.js:193
&gt; +document.addEventListener(&apos;mousedown&apos;, function(e) {
&gt; +    // Clear the open popup, unless the click was inside the popup.
&gt; +    var popup = $(&apos;popup&apos;);
&gt; +    if (popup &amp;&amp; e.target != popup &amp;&amp; !(popup.compareDocumentPosition(e.target) &amp; 16))
&gt; +        ui.hidePopup();
&gt; +}, false);

Can we add this event listener in showPopup and remove it in hidePopup?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849489</commentid>
    <comment_count>3</comment_count>
      <attachid>191869</attachid>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-03-06 17:00:08 -0800</bug_when>
    <thetext>Created attachment 191869
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849490</commentid>
    <comment_count>4</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-03-06 17:00:40 -0800</bug_when>
    <thetext>Addressed all of Ojan&apos;s comments.  Much prettier now, and no longer have mousedown handlers laying around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849596</commentid>
    <comment_count>5</comment_count>
      <attachid>191869</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-03-06 18:47:32 -0800</bug_when>
    <thetext>Comment on attachment 191869
Patch

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

Please remove the comment before committing.

&gt; Tools/TestResultServer/static-dashboards/ui.js:30
&gt; +// @fileoverview Common utilities for generating ui for use in the
&gt; +// dashboards.

This isn&apos;t google style....we don&apos;t need what comments that state the obvious. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849608</commentid>
    <comment_count>6</comment_count>
      <attachid>191889</attachid>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-03-06 19:01:17 -0800</bug_when>
    <thetext>Created attachment 191889
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849668</commentid>
    <comment_count>7</comment_count>
      <attachid>191889</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-06 19:50:21 -0800</bug_when>
    <thetext>Comment on attachment 191889
Patch for landing

Clearing flags on attachment: 191889

Committed r145028: &lt;http://trac.webkit.org/changeset/145028&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849669</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-06 19:50:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191824</attachid>
            <date>2013-03-06 13:48:37 -0800</date>
            <delta_ts>2013-03-06 17:00:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111621-20130306134442.patch</filename>
            <type>text/plain</type>
            <size>26694</size>
            <attacher name="Julie Parent">jparent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0OTY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmQ0MDUyMzc1MTZiZGQ1YTVhMjUxNDA1ZTNkZDYyNDFi
ZGI2MDhiYS4uMDM5ZjdmYTNmNjFjMTJlOTBjMGZjNDZmYzIyYjMxZTgwOGRkNDNlYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMz
IEBACiAyMDEzLTAzLTA2ICBKdWxpZSBQYXJlbnQgIDxqcGFyZW50QGNocm9taXVtLm9yZz4KIAor
ICAgICAgICBEYXNoYm9hcmQgY2xlYW51cDogTW92ZSBhbGwgZGFzaGJvYXJkIHVpIHJlbGF0ZWQg
Y29kZSBpbnRvIHVpLmpzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTExNjIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBDcmVhdGVzIHVpLmpzLCBhIHBhY2thZ2UgZm9yIHRoZSBjb21tb24g
VUkgY29kZSB0aGUgdmFyaW91cworICAgICAgICBkYXNoYm9hcmRzIHVzZSAocG9wdXBzLCBodG1s
IGdlbmVyYXRpb24sIGV0YykuICBOYW1lc3BhY2VzIHRoZQorICAgICAgICBjb2RlIGFuZCBtYWtl
cyBtZXRob2RzIHByaXZhdGUgdGhhdCBjYW4gYmUuCisKKyAgICAgICAgKiBUZXN0UmVzdWx0U2Vy
dmVyL3N0YXRpYy1kYXNoYm9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWw6CisgICAgICAgICog
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qczoKKyAg
ICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNo
Ym9hcmQuaHRtbDoKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L2ZsYWtpbmVzc19kYXNoYm9hcmQuanM6CisgICAgICAgIChzaG93UG9wdXBGb3JCdWlsZCk6Cisg
ICAgICAgIChodG1sRm9yTmF2QmFyKToKKyAgICAgICAgKGdlbmVyYXRlUGFnZUZvckluZGl2aWR1
YWxUZXN0cy5pZik6CisgICAgICAgIChnZW5lcmF0ZVBhZ2VGb3JJbmRpdmlkdWFsVGVzdHMpOgor
ICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rh
c2hib2FyZF9lbWJlZGRlZF91bml0dGVzdHMuanM6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX3VuaXR0ZXN0cy5qczoKKyAg
ICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3J1bi1lbWJlZGRlZC11
bml0dGVzdHMuaHRtbDoKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9h
cmRzL3J1bi11bml0dGVzdHMuaHRtbDoKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRp
Yy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmh0bWw6CisgICAgICAgICogVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmh0bWw6CisgICAgICAgICogVGVzdFJl
c3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy91aS5qczogQWRkZWQuCisgICAgICAgICguKToK
KworMjAxMy0wMy0wNiAgSnVsaWUgUGFyZW50ICA8anBhcmVudEBjaHJvbWl1bS5vcmc+CisKICAg
ICAgICAgRGFzaGJvYXJkIGNsZWFudXA6IHJlbW92ZSBkYXNoYm9hcmQgdGltZSBsb2dnaW5nLgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExNjA4CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYWdn
cmVnYXRlX3Jlc3VsdHMuaHRtbCBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuaHRtbAppbmRleCBhNzM1MTEyMmNiMGEwNzI4NGQzNDdh
MmRkNjY5NjMxMmVhOTBlNWNlLi5lNzU2OWUzZWZlNjFlM2RkNGRjZGZjZjExODg4N2RiZDYzZWY2
NzMzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0
aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5odG1sCkBAIC01NCw2ICs1NCw3IEBAIGlt
ZyB7CiA8c2NyaXB0IHNyYz0ibG9hZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJzdHJp
bmcuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJ1aS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogLy8gQGZpbGVvdmVy
dmlldyBDcmVhdGVzIGEgZGFzaGJvYXJkIGZvciB0cmFja2luZyBudW1iZXIgb2YgcGFzc2VzL2Zh
aWx1cmVzIHBlciBydW4uCiAvLwpAQCAtNjgsNyArNjksNyBAQCBpbWcgewogLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCiBmdW5jdGlvbiBnZW5lcmF0ZVBhZ2UoKQogewotICAgIHZhciBodG1sID0gaHRt
bEZvclRlc3RUeXBlU3dpdGNoZXIodHJ1ZSkgKyAnPGJyPic7CisgICAgdmFyIGh0bWwgPSB1aS5o
dG1sRm9yVGVzdFR5cGVTd2l0Y2hlcih0cnVlKSArICc8YnI+JzsKICAgICBmb3IgKHZhciBidWls
ZGVyIGluIGN1cnJlbnRCdWlsZGVycygpKQogICAgICAgICBodG1sICs9IGh0bWxGb3JCdWlsZGVy
KGJ1aWxkZXIpOwogICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gaHRtbDsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jh
c2UuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2Fy
ZF9iYXNlLmpzCmluZGV4IDRmYzEzZjMxNjNiYzYxZjNiYzJjNzRmMWU3ZDExOTE2MzMwNjc1ZDku
LjU1NzJlN2Q5YzE2MDE0NDAwMjdhMjhjOWFkM2JiZDIwNmU2NmFlN2YgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMK
KysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRf
YmFzZS5qcwpAQCAtNTQ4LDM4ICs1NDgsNiBAQCBmdW5jdGlvbiBqb2luUGFyYW1ldGVycyhzdGF0
ZU9iamVjdCkKICAgICByZXR1cm4gc3RhdGUuam9pbignJicpOwogfQogCi1mdW5jdGlvbiBoaWRl
UG9wdXAoKQotewotICAgIHZhciBwb3B1cCA9ICQoJ3BvcHVwJyk7Ci0gICAgaWYgKHBvcHVwKQot
ICAgICAgICBwb3B1cC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBvcHVwKTsKLX0KLQotZnVuY3Rp
b24gc2hvd1BvcHVwKHRhcmdldCwgaHRtbCkKLXsKLSAgICB2YXIgcG9wdXAgPSAkKCdwb3B1cCcp
OwotICAgIGlmICghcG9wdXApIHsKLSAgICAgICAgcG9wdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTsKLSAgICAgICAgcG9wdXAuaWQgPSAncG9wdXAnOwotICAgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKHBvcHVwKTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgaHRtbCBmaXJz
dCBzbyB0aGF0IHdlIGNhbiBnZXQgYWNjdXJhdGUgc2l6ZSBtZXRyaWNzIG9uIHRoZSBwb3B1cC4K
LSAgICBwb3B1cC5pbm5lckhUTUwgPSBodG1sOwotCi0gICAgdmFyIHRhcmdldFJlY3QgPSB0YXJn
ZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0KLSAgICB2YXIgeCA9IE1hdGgubWluKHRhcmdl
dFJlY3QubGVmdCAtIDEwLCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBw
b3B1cC5vZmZzZXRXaWR0aCk7Ci0gICAgeCA9IE1hdGgubWF4KDAsIHgpOwotICAgIHBvcHVwLnN0
eWxlLmxlZnQgPSB4ICsgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0ICsgJ3B4JzsKLQotICAgIHZh
ciB5ID0gdGFyZ2V0UmVjdC50b3AgKyB0YXJnZXRSZWN0LmhlaWdodDsKLSAgICBpZiAoeSArIHBv
cHVwLm9mZnNldEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQp
Ci0gICAgICAgIHkgPSB0YXJnZXRSZWN0LnRvcCAtIHBvcHVwLm9mZnNldEhlaWdodDsKLSAgICB5
ID0gTWF0aC5tYXgoMCwgeSk7Ci0gICAgcG9wdXAuc3R5bGUudG9wID0geSArIGRvY3VtZW50LmJv
ZHkuc2Nyb2xsVG9wICsgJ3B4JzsKLX0KLQogLy8gQ3JlYXRlIGEgbmV3IGZ1bmN0aW9uIHdpdGgg
c29tZSBvZiBpdHMgYXJndWVtZW50cwogLy8gcHJlLWZpbGxlZC4KIC8vIFRha2VuIGZyb20gZ29v
Zy5wYXJ0aWFsIGluIHRoZSBDbG9zdXJlIGxpYnJhcnkuCkBAIC01OTksNyArNTY3LDcgQEAgZnVu
Y3Rpb24gcGFydGlhbChmbiwgdmFyX2FyZ3MpCiAgICAgfTsKIH07CiAKLS8vIFJldHVybnMgdGhl
IGFwcHJvcHJpYXRlIGV4cGVjdGF0aW9zbiBtYXAgZm9yIHRoZSBjdXJyZW50IHRlc3RUeXBlLgor
Ly8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgZXhwZWN0YXRpb25zIG1hcCBmb3IgdGhlIGN1cnJl
bnQgdGVzdFR5cGUuCiBmdW5jdGlvbiBleHBlY3RhdGlvbnNNYXAoKQogewogICAgIHJldHVybiBp
c0xheW91dFRlc3RSZXN1bHRzKCkgPyBMQVlPVVRfVEVTVF9FWFBFQ1RBVElPTlNfTUFQXyA6IEdU
RVNUX0VYUEVDVEFUSU9OU19NQVBfOwpAQCAtNjE1LDEyNiArNTgzLDYgQEAgZnVuY3Rpb24gcXVl
cnlQYXJhbWV0ZXJWYWx1ZShwYXJhbWV0ZXIpCiAgICAgcmV0dXJuIGdfY3VycmVudFN0YXRlW3Bh
cmFtZXRlcl0gfHwgZ19jcm9zc0Rhc2hib2FyZFN0YXRlW3BhcmFtZXRlcl07CiB9CiAKLWZ1bmN0
aW9uIGNoZWNrYm94SFRNTChxdWVyeVBhcmFtZXRlciwgbGFiZWwsIGlzQ2hlY2tlZCwgb3B0X2V4
dHJhSmF2YVNjcmlwdCkKLXsKLSAgICB2YXIganMgPSBvcHRfZXh0cmFKYXZhU2NyaXB0IHx8ICcn
OwotICAgIHJldHVybiAnPGxhYmVsIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDJlbSI+JyArCi0gICAg
ICAgICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIG9uY2hhbmdlPSJ0b2dnbGVRdWVyeVBhcmFtZXRl
cihcJycgKyBxdWVyeVBhcmFtZXRlciArICdcJyk7JyArIGpzICsgJyIgJyArCi0gICAgICAgICAg
ICAoaXNDaGVja2VkID8gJ2NoZWNrZWQnIDogJycpICsgJz4nICsgbGFiZWwgKwotICAgICAgICAn
PC9sYWJlbD4gJzsKLX0KLQotZnVuY3Rpb24gc2VsZWN0SFRNTChsYWJlbCwgcXVlcnlQYXJhbWV0
ZXIsIG9wdGlvbnMpCi17Ci0gICAgdmFyIGh0bWwgPSAnPGxhYmVsIHN0eWxlPSJwYWRkaW5nLWxl
ZnQ6IDJlbSI+JyArIGxhYmVsICsgJzogJyArCi0gICAgICAgICc8c2VsZWN0IG9uY2hhbmdlPSJz
ZXRRdWVyeVBhcmFtZXRlcihcJycgKyBxdWVyeVBhcmFtZXRlciArICdcJywgdGhpc1t0aGlzLnNl
bGVjdGVkSW5kZXhdLnZhbHVlKSI+JzsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9u
cy5sZW5ndGg7IGkrKykgewotICAgICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW2ldOwotICAgICAg
ICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPSInICsgdmFsdWUgKyAnIiAnICsKLSAgICAgICAgICAg
IChxdWVyeVBhcmFtZXRlclZhbHVlKHF1ZXJ5UGFyYW1ldGVyKSA9PSB2YWx1ZSA/ICdzZWxlY3Rl
ZCcgOiAnJykgKwotICAgICAgICAgICAgJz4nICsgdmFsdWUgKyAnPC9vcHRpb24+JwotICAgIH0K
LSAgICBodG1sICs9ICc8L3NlbGVjdD48L2xhYmVsPiAnOwotICAgIHJldHVybiBodG1sOwotfQot
Ci0vLyBSZXR1cm5zIHRoZSBIVE1MIGZvciB0aGUgc2VsZWN0IGVsZW1lbnQgdG8gc3dpdGNoIHRv
IGRpZmZlcmVudCB0ZXN0VHlwZXMuCi1mdW5jdGlvbiBodG1sRm9yVGVzdFR5cGVTd2l0Y2hlcihv
cHRfbm9CdWlsZGVyTWVudSwgb3B0X2V4dHJhSHRtbCwgb3B0X2luY2x1ZGVOb25lQnVpbGRlcikK
LXsKLSAgICB2YXIgaHRtbCA9ICc8ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNoZWQi
Pic7Ci0gICAgaHRtbCArPSAnJyArCi0gICAgICAgIGh0bWxGb3JEYXNoYm9hcmRMaW5rKCdTdGF0
cycsICdhZ2dyZWdhdGVfcmVzdWx0cy5odG1sJykgKwotICAgICAgICBodG1sRm9yRGFzaGJvYXJk
TGluaygnVGltZWxpbmUnLCAndGltZWxpbmVfZXhwbG9yZXIuaHRtbCcpICsKLSAgICAgICAgaHRt
bEZvckRhc2hib2FyZExpbmsoJ1Jlc3VsdHMnLCAnZmxha2luZXNzX2Rhc2hib2FyZC5odG1sJykg
KwotICAgICAgICBodG1sRm9yRGFzaGJvYXJkTGluaygnVHJlZW1hcCcsICd0cmVlbWFwLmh0bWwn
KTsKLQotICAgIGh0bWwgKz0gc2VsZWN0SFRNTCgnVGVzdCB0eXBlJywgJ3Rlc3RUeXBlJywgVEVT
VF9UWVBFUyk7Ci0KLSAgICBpZiAoIW9wdF9ub0J1aWxkZXJNZW51KSB7Ci0gICAgICAgIHZhciBi
dWlsZGVyc0Zvck1lbnUgPSBPYmplY3Qua2V5cyhjdXJyZW50QnVpbGRlcnMoKSk7Ci0gICAgICAg
IGlmIChvcHRfaW5jbHVkZU5vbmVCdWlsZGVyKQotICAgICAgICAgICAgYnVpbGRlcnNGb3JNZW51
LnVuc2hpZnQoJy0tLS0tLS0tLS0tLS0tJyk7Ci0gICAgICAgIGh0bWwgKz0gc2VsZWN0SFRNTCgn
QnVpbGRlcicsICdidWlsZGVyJywgYnVpbGRlcnNGb3JNZW51KTsKLSAgICB9Ci0KLSAgICBodG1s
ICs9IHNlbGVjdEhUTUwoJ0dyb3VwJywgJ2dyb3VwJywKLSAgICAgICAgT2JqZWN0LmtleXMoY3Vy
cmVudEJ1aWxkZXJHcm91cENhdGVnb3J5KCkpKTsKLQotICAgIGlmICghaXNUcmVlTWFwKCkpCi0g
ICAgICAgIGh0bWwgKz0gY2hlY2tib3hIVE1MKCdzaG93QWxsUnVucycsICdTaG93IGFsbCBydW5z
JywgZ19jcm9zc0Rhc2hib2FyZFN0YXRlLnNob3dBbGxSdW5zKTsKLQotICAgIGlmIChvcHRfZXh0
cmFIdG1sKQotICAgICAgICBodG1sICs9IG9wdF9leHRyYUh0bWw7Ci0gICAgcmV0dXJuIGh0bWwg
KyAnPC9kaXY+JzsKLX0KLQotZnVuY3Rpb24gbG9hZERhc2hib2FyZChmaWxlTmFtZSkKLXsKLSAg
ICB2YXIgcGF0aE5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7Ci0gICAgcGF0aE5hbWUg
PSBwYXRoTmFtZS5zdWJzdHJpbmcoMCwgcGF0aE5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpOwot
ICAgIHdpbmRvdy5sb2NhdGlvbiA9IHBhdGhOYW1lICsgZmlsZU5hbWUgKyB3aW5kb3cubG9jYXRp
b24uaGFzaDsKLX0KLQotZnVuY3Rpb24gaHRtbEZvclRvcExpbmsoaHRtbCwgb25DbGljaywgaXNT
ZWxlY3RlZCkKLXsKLSAgICB2YXIgY3NzVGV4dCA9IGlzU2VsZWN0ZWQgPyAnZm9udC13ZWlnaHQ6
IGJvbGQ7JyA6ICdjb2xvcjpibHVlO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBv
aW50ZXI7JzsKLSAgICBjc3NUZXh0ICs9ICdtYXJnaW46IDAgNXB4Oyc7Ci0gICAgcmV0dXJuICc8
c3BhbiBzdHlsZT0iJyArIGNzc1RleHQgKyAnIiBvbmNsaWNrPSInICsgb25DbGljayArICciPicg
KyBodG1sICsgJzwvc3Bhbj4nOwotfQotCi1mdW5jdGlvbiBodG1sRm9yRGFzaGJvYXJkTGluayho
dG1sLCBmaWxlTmFtZSkKLXsKLSAgICB2YXIgcGF0aE5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0
aG5hbWU7Ci0gICAgdmFyIGN1cnJlbnRGaWxlTmFtZSA9IHBhdGhOYW1lLnN1YnN0cmluZyhwYXRo
TmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7Ci0gICAgdmFyIGlzU2VsZWN0ZWQgPSBjdXJyZW50
RmlsZU5hbWUgPT0gZmlsZU5hbWU7Ci0gICAgdmFyIG9uQ2xpY2sgPSAnbG9hZERhc2hib2FyZChc
JycgKyBmaWxlTmFtZSArICdcJyknOwotICAgIHJldHVybiBodG1sRm9yVG9wTGluayhodG1sLCBv
bkNsaWNrLCBpc1NlbGVjdGVkKTsKLX0KLQotZnVuY3Rpb24gcmV2aXNpb25MaW5rKHJlc3VsdHMs
IGluZGV4LCBrZXksIHNpbmdsZVVybFRlbXBsYXRlLCByYW5nZVVybFRlbXBsYXRlKQotewotICAg
IHZhciBjdXJyZW50UmV2aXNpb24gPSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXhdLCAxMCk7
Ci0gICAgdmFyIHByZXZpb3VzUmV2aXNpb24gPSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXgg
KyAxXSwgMTApOwotCi0gICAgZnVuY3Rpb24gc2luZ2xlVXJsKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBzaW5nbGVVcmxUZW1wbGF0ZS5yZXBsYWNlKCc8cmV2PicsIGN1cnJlbnRSZXZpc2lvbik7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcmFuZ2VVcmwoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHJhbmdlVXJsVGVtcGxhdGUucmVwbGFjZSgnPHJldjE+JywgY3VycmVudFJldmlzaW9uKS5yZXBs
YWNlKCc8cmV2Mj4nLCBwcmV2aW91c1JldmlzaW9uICsgMSk7Ci0gICAgfQotCi0gICAgaWYgKGN1
cnJlbnRSZXZpc2lvbiA9PSBwcmV2aW91c1JldmlzaW9uKQotICAgICAgICByZXR1cm4gJ0F0IDxh
IGhyZWY9IicgKyBzaW5nbGVVcmwoKSArICciPnInICsgY3VycmVudFJldmlzaW9uICAgICsgJzwv
YT4nOwotICAgIGVsc2UgaWYgKGN1cnJlbnRSZXZpc2lvbiAtIHByZXZpb3VzUmV2aXNpb24gPT0g
MSkKLSAgICAgICAgcmV0dXJuICc8YSBocmVmPSInICsgc2luZ2xlVXJsKCkgKyAnIj5yJyArIGN1
cnJlbnRSZXZpc2lvbiAgICArICc8L2E+JzsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAnPGEg
aHJlZj0iJyArIHJhbmdlVXJsKCkgKyAnIj5yJyArIChwcmV2aW91c1JldmlzaW9uICsgMSkgKyAn
IHRvIHInICsgY3VycmVudFJldmlzaW9uICsgJzwvYT4nOwotfQotCi1mdW5jdGlvbiBjaHJvbWl1
bVJldmlzaW9uTGluayhyZXN1bHRzLCBpbmRleCkKLXsKLSAgICByZXR1cm4gcmV2aXNpb25MaW5r
KAotICAgICAgICByZXN1bHRzLAotICAgICAgICBpbmRleCwKLSAgICAgICAgQ0hST01FX1JFVklT
SU9OU19LRVksCi0gICAgICAgICdodHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21l
P3ZpZXc9cmV2JnJldmlzaW9uPTxyZXY+JywKLSAgICAgICAgJ2h0dHA6Ly9idWlsZC5jaHJvbWl1
bS5vcmcvZi9jaHJvbWl1bS9wZXJmL2Rhc2hib2FyZC91aS9jaGFuZ2Vsb2cuaHRtbD91cmw9L3Ry
dW5rL3NyYyZyYW5nZT08cmV2Mj46PHJldjE+Jm1vZGU9aHRtbCcpOwotfQotCi1mdW5jdGlvbiB3
ZWJLaXRSZXZpc2lvbkxpbmsocmVzdWx0cywgaW5kZXgpCi17Ci0gICAgcmV0dXJuIHJldmlzaW9u
TGluaygKLSAgICAgICAgcmVzdWx0cywKLSAgICAgICAgaW5kZXgsCi0gICAgICAgIFdFQktJVF9S
RVZJU0lPTlNfS0VZLAotICAgICAgICAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQv
PHJldj4nLAotICAgICAgICAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9sb2cvdHJ1bmsvP3Jldj08
cmV2MT4mc3RvcF9yZXY9PHJldjI+JmxpbWl0PTEwMCZ2ZXJib3NlPW9uJyk7Ci19Ci0KIC8vICJE
ZWNvbXByZXNzZXMiIHRoZSBSTEUtZW5jb2Rpbmcgb2YgdGVzdCByZXN1bHRzIHNvIHRoYXQgd2Ug
Y2FuIHF1ZXJ5IGl0CiAvLyBieSBidWlsZCBpbmRleCBhbmQgdGVzdCBuYW1lLgogLy8KQEAgLTgz
MSwxMyArNjc5LDYgQEAgZnVuY3Rpb24gZGVjb21wcmVzc1Jlc3VsdHMoYnVpbGRlclJlc3VsdHMp
CiAgICAgfTsKIH0KIAotZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZnVu
Y3Rpb24oZSkgewotICAgIC8vIENsZWFyIHRoZSBvcGVuIHBvcHVwLCB1bmxlc3MgdGhlIGNsaWNr
IHdhcyBpbnNpZGUgdGhlIHBvcHVwLgotICAgIHZhciBwb3B1cCA9ICQoJ3BvcHVwJyk7Ci0gICAg
aWYgKHBvcHVwICYmIGUudGFyZ2V0ICE9IHBvcHVwICYmICEocG9wdXAuY29tcGFyZURvY3VtZW50
UG9zaXRpb24oZS50YXJnZXQpICYgMTYpKQotICAgICAgICBoaWRlUG9wdXAoKTsKLX0sIGZhbHNl
KTsKLQogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKICAgICBn
X3Jlc291cmNlTG9hZGVyID0gbmV3IGxvYWRlci5Mb2FkZXIoKTsKICAgICBnX3Jlc291cmNlTG9h
ZGVyLmxvYWQoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5odG1sIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwKaW5kZXggOTY1OGFm
MWU0MGU5ZjZjOGM2Y2VmNzI5NGRhMjdjODE5NjQ0ZWNkMy4uMGZmZTI2ZmNiNzU1MjljNWE4MmE4
Zjg1ZmQxY2M3ZjUyZmE3ZmY5NCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwKKysrIGIvVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwK
QEAgLTM0LDQgKzM0LDUgQEAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIDxzY3JpcHQgc3JjPSJsb2FkZXIuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9InN0cmluZy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
ZGFzaGJvYXJkX2Jhc2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InVpLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJmbGFraW5lc3NfZGFzaGJvYXJkLmpzIj48L3NjcmlwdD4KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNz
X2Rhc2hib2FyZC5qcyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMv
Zmxha2luZXNzX2Rhc2hib2FyZC5qcwppbmRleCBhYjQ4OTliOGE2MDczMzk2YThlMDNhYTVkOWYy
YTVhMWEzYzIyMGFlLi5mZTgyZDczZWE0ZTg4ODcxNGM4ZDc1YmY0ZjhkNDdlMjViNWUxZThiIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtp
bmVzc19kYXNoYm9hcmQuanMKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFz
aGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmpzCkBAIC0xMTUzLDcgKzExNTMsNyBAQCBmdW5j
dGlvbiBsaW5rSFRNTFRvT3BlbldpbmRvdyh1cmwsIHRleHQpCiAgICAgcmV0dXJuICc8YSBocmVm
PSInICsgdXJsICsgJyIgdGFyZ2V0PSJfYmxhbmsiPicgKyB0ZXh0ICsgJzwvYT4nOwogfQogCi0v
LyBGSVhNRTogcmVwbGFjZWQgd2l0aCBjaHJvbWl1bVJldmlzaW9uTGluay93ZWJLaXRSZXZpc2lv
bkxpbmsKKy8vIEZJWE1FOiByZXBsYWNlZCB3aXRoIHVpLmNocm9taXVtUmV2aXNpb25MaW5rL3Vp
LndlYktpdFJldmlzaW9uTGluawogZnVuY3Rpb24gY3JlYXRlQmxhbWVMaXN0SFRNTChyZXZpc2lv
bnMsIGluZGV4LCB1cmxCYXNlLCBzZXBhcmF0b3IsIHJlcG8pCiB7CiAgICAgdmFyIHRoaXNSZXZp
c2lvbiA9IHJldmlzaW9uc1tpbmRleF07CkBAIC0xMjUwLDcgKzEyNTAsNyBAQCBmdW5jdGlvbiBz
aG93UG9wdXBGb3JCdWlsZChlLCBidWlsZGVyLCBpbmRleCwgb3B0X3Rlc3ROYW1lKQogICAgICAg
ICBodG1sICs9ICc8bGk+JyArIGxpbmtIVE1MVG9PcGVuV2luZG93KGJ1aWxkQmFzZVBhdGggKyBw
YXRoVG9GYWlsdXJlTG9nKG9wdF90ZXN0TmFtZSksICdGYWlsdXJlIGxvZycpICsgJzwvbGk+JzsK
IAogICAgIGh0bWwgKz0gJzwvdWw+JzsKLSAgICBzaG93UG9wdXAoZS50YXJnZXQsIGh0bWwpOwor
ICAgIHVpLnNob3dQb3B1cChlLnRhcmdldCwgaHRtbCk7CiB9CiAKIGZ1bmN0aW9uIGh0bWxGb3JU
ZXN0UmVzdWx0cyh0ZXN0KQpAQCAtMjM5NSw3ICsyMzk1LDcgQEAgZnVuY3Rpb24gaHRtbEZvcklu
ZGl2aWR1YWxUZXN0cyh0ZXN0cykKIGZ1bmN0aW9uIGh0bWxGb3JOYXZCYXIoKQogewogICAgIHZh
ciBleHRyYUhUTUwgPSAnJzsKLSAgICB2YXIgaHRtbCA9IGh0bWxGb3JUZXN0VHlwZVN3aXRjaGVy
KGZhbHNlLCBleHRyYUhUTUwsIGlzQ3Jvc3NCdWlsZGVyVmlldygpKTsKKyAgICB2YXIgaHRtbCA9
IHVpLmh0bWxGb3JUZXN0VHlwZVN3aXRjaGVyKGZhbHNlLCBleHRyYUhUTUwsIGlzQ3Jvc3NCdWls
ZGVyVmlldygpKTsKICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPWZvcm1zPjxmb3JtIGlkPXJlc3Vs
dC1mb3JtICcgKwogICAgICAgICAnb25zdWJtaXQ9InNldFF1ZXJ5UGFyYW1ldGVyKFwncmVzdWx0
XCcsIHJlc3VsdC52YWx1ZSk7JyArCiAgICAgICAgICdyZXR1cm4gZmFsc2U7Ij5TaG93IGFsbCB0
ZXN0cyB3aXRoIHJlc3VsdDogJyArCkBAIC0yNTg2LDcgKzI1ODYsNyBAQCBmdW5jdGlvbiBwb3N0
SGVpZ2h0Q2hhbmdlZE1lc3NhZ2UoKQogfQogCiBpZiAod2luZG93ICE9IHBhcmVudCkKLSAgICB3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIGhpZGVQb3B1cCk7CisgICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB1aS5oaWRlUG9wdXApOwogCiBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgewogICAgIGlmIChlLmtleUlkZW50aWZp
ZXIgPT0gJ1UrMDAzRicgfHwgZS5rZXlJZGVudGlmaWVyID09ICdVKzAwQkYnKSB7CkBAIC0yNTk2
LDYgKzI1OTYsNiBAQCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rp
b24oZSkgewogICAgIH0gZWxzZSBpZiAoZS5rZXlJZGVudGlmaWVyID09ICdVKzAwMUInKSB7CiAg
ICAgICAgIC8vIGVzY2FwZSBrZXkKICAgICAgICAgaGlkZUxlZ2VuZCgpOwotICAgICAgICBoaWRl
UG9wdXAoKTsKKyAgICAgICAgdWkuaGlkZVBvcHVwKCk7CiAgICAgfQogfSwgZmFsc2UpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5l
c3NfZGFzaGJvYXJkX2VtYmVkZGVkX3VuaXR0ZXN0cy5qcyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF9lbWJlZGRlZF91bml0dGVz
dHMuanMKaW5kZXggNTU5OWIzZTY1YzgwN2VhOWFmY2ZjMTc5MGNkMGFhODA1YjFkMDRmYS4uMWY5
ZjA0MGM5MjYwMWU1MzFiNDU2MWMyNmUwMDIwZTUyOGY0MTRhZCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX2Vt
YmVkZGVkX3VuaXR0ZXN0cy5qcworKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfZW1iZWRkZWRfdW5pdHRlc3RzLmpzCkBAIC0y
Nyw3ICsyNyw3IEBACiAvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiB0ZXN0KCdoaWRlUG9wdXBPbkJsdXInLCAy
LCBmdW5jdGlvbigpIHsKLSAgICBzaG93UG9wdXAoZG9jdW1lbnQuYm9keSwgJ2R1bW15IGNvbnRl
bnQnKTsKKyAgICB1aS5zaG93UG9wdXAoZG9jdW1lbnQuYm9keSwgJ2R1bW15IGNvbnRlbnQnKTsK
ICAgICBvayhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcG9wdXAnKSk7CiAKICAgICAvLyBDYXVz
ZSB0aGUgd2luZG93IHRvIGJlIGJsdXJyZWQuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdW5pdHRlc3RzLmpz
IGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFz
aGJvYXJkX3VuaXR0ZXN0cy5qcwppbmRleCBkYmRjZTM1MjgwYTExMmRkN2IyNDE3N2M5NzA5MDcw
NjE0OTM1YmYwLi5jMzcyNGVmYWRhODQ3ODJjOThjZGRhZGYyMWY5YTQwYmZhNGZmZmYzIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVz
c19kYXNoYm9hcmRfdW5pdHRlc3RzLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF91bml0dGVzdHMuanMKQEAgLTM2Miwx
MCArMzYyLDEwIEBAIHRlc3QoJ2hlYWRlckZvclRlc3RUYWJsZUh0bWwnLCAxLCBmdW5jdGlvbigp
IHsKICAgICBlcXVhbChjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQnKS5sZW5ndGgs
IDUpOwogfSk7CiAKLXRlc3QoJ2h0bWxGb3JUZXN0VHlwZVN3aXRjaGVyR3JvdXAnLCA2LCBmdW5j
dGlvbigpIHsKK3Rlc3QoJ3VpLmh0bWxGb3JUZXN0VHlwZVN3aXRjaGVyR3JvdXAnLCA2LCBmdW5j
dGlvbigpIHsKICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7CiAgICAgZ19jcm9zc0Rhc2hib2FyZFN0YXRlLnRlc3RUeXBlID0gJ3VpX3Rlc3RzJzsKLSAg
ICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbEZvclRlc3RUeXBlU3dpdGNoZXIodHJ1ZSk7Cisg
ICAgY29udGFpbmVyLmlubmVySFRNTCA9IHVpLmh0bWxGb3JUZXN0VHlwZVN3aXRjaGVyKHRydWUp
OwogICAgIHZhciBzZWxlY3RzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NlbGVjdCcp
OwogICAgIGVxdWFsKHNlbGVjdHMubGVuZ3RoLCAyKTsKICAgICB2YXIgZ3JvdXAgPSBzZWxlY3Rz
WzFdOwpAQCAtMzczLDcgKzM3Myw3IEBAIHRlc3QoJ2h0bWxGb3JUZXN0VHlwZVN3aXRjaGVyR3Jv
dXAnLCA2LCBmdW5jdGlvbigpIHsKICAgICBlcXVhbChncm91cC5jaGlsZHJlbi5sZW5ndGgsIDMp
OwogCiAgICAgZ19jcm9zc0Rhc2hib2FyZFN0YXRlLnRlc3RUeXBlID0gJ2xheW91dC10ZXN0cyc7
Ci0gICAgY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWxGb3JUZXN0VHlwZVN3aXRjaGVyKHRydWUp
OworICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSB1aS5odG1sRm9yVGVzdFR5cGVTd2l0Y2hlcih0
cnVlKTsKICAgICB2YXIgc2VsZWN0cyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdzZWxl
Y3QnKTsKICAgICBlcXVhbChzZWxlY3RzLmxlbmd0aCwgMik7CiAgICAgdmFyIGdyb3VwID0gc2Vs
ZWN0c1sxXTsKQEAgLTY0Nyw5ICs2NDcsOSBAQCB0ZXN0KCdzb3J0VGVzdHMnLCA0LCBmdW5jdGlv
bigpIHsKIH0pOwogCiB0ZXN0KCdwb3B1cCcsIDIsIGZ1bmN0aW9uKCkgewotICAgIHNob3dQb3B1
cChkb2N1bWVudC5ib2R5LCAnZHVtbXkgY29udGVudCcpOworICAgIHVpLnNob3dQb3B1cChkb2N1
bWVudC5ib2R5LCAnZHVtbXkgY29udGVudCcpOwogICAgIG9rKGRvY3VtZW50LnF1ZXJ5U2VsZWN0
b3IoJyNwb3B1cCcpKTsKLSAgICBoaWRlUG9wdXAoKTsKKyAgICB1aS5oaWRlUG9wdXAoKTsKICAg
ICBvayghZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3BvcHVwJykpOwogfSk7CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvcnVuLWVtYmVkZGVk
LXVuaXR0ZXN0cy5odG1sIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy9ydW4tZW1iZWRkZWQtdW5pdHRlc3RzLmh0bWwKaW5kZXggMTQzMjM1ZjNkZmMxNmYxZWU5YjQy
YTE0YzRmZmFmYTUwNzdlZDNjMS4uYjE5MWMwYmFhZGIzZDA1NWI5ZGI3NjcxZjhhOWFmNzQ0OGU0
ODA3ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy9ydW4tZW1iZWRkZWQtdW5pdHRlc3RzLmh0bWwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9ydW4tZW1iZWRkZWQtdW5pdHRlc3RzLmh0bWwKQEAgLTQ5LDYg
KzQ5LDcgQEAgd2luZG93LnBhcmVudCA9IG51bGw7CiAKIDxzY3JpcHQgc3JjPSJzdHJpbmcuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJ1aS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0ibG9hZGVyLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJsb2FkZXJfdW5pdHRlc3RzLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQ+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L3J1bi11bml0dGVzdHMuaHRtbCBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvcnVuLXVuaXR0ZXN0cy5odG1sCmluZGV4IDFmZGI5OTg2OWE1ZmJjZDg5NmEyOTg3MGFj
ZDg1Yzc5NmJjNzI5NmYuLjBmY2E3MDZhZTkwOGI4MmQ4M2MyMjA1ZWM2ZTM2ZWE3NGJhMjhjMzIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvcnVu
LXVuaXR0ZXN0cy5odG1sCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvcnVuLXVuaXR0ZXN0cy5odG1sCkBAIC00Myw2ICs0Myw3IEBAIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KIDxzY3JpcHQgc3JjPSJidWlsZGVyc191bml0dGVzdHMuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9InN0cmluZy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
ZGFzaGJvYXJkX2Jhc2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InVpLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJsb2FkZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImxvYWRl
cl91bml0dGVzdHMuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbCBi
L1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9y
ZXIuaHRtbAppbmRleCAzYTU5NDRhODgwNjYwYWM2OTdiMjIxZjYyZDM5YTc0YWMwMTRkZGVkLi40
M2VmODEwNWVlMmZmYzIxOTFmODYyMDZkY2NlZGVlNWJkMThjZTVkIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmh0
bWwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90aW1lbGlu
ZV9leHBsb3Jlci5odG1sCkBAIC0xMDAsNiArMTAwLDcgQEAgYm9keSB7CiA8c2NyaXB0IHNyYz0i
bG9hZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJzdHJpbmcuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ1
aS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogdmFyIEZBSUxJTkdfVEVTVFNfREFUQVNFVF9OQU1F
ID0gJ0ZhaWxpbmcgdGVzdHMnOwogCkBAIC0xMzYsOCArMTM3LDggQEAgZnVuY3Rpb24gZ2VuZXJh
dGVQYWdlKCkKIAogICAgIGluaXRDdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzKCk7CiAKLSAgICAk
KCd0ZXN0LXR5cGUtc3dpdGNoZXInKS5pbm5lckhUTUwgPSBodG1sRm9yVGVzdFR5cGVTd2l0Y2hl
ciggZmFsc2UsCi0gICAgICAgIGNoZWNrYm94SFRNTCgnaWdub3JlRmxha3lUZXN0cycsICdJZ25v
cmUgZmxha3kgdGVzdHMnLCBnX2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzLCAnZ19jdXJy
ZW50QnVpbGRJbmRleCA9IC0xJykKKyAgICAkKCd0ZXN0LXR5cGUtc3dpdGNoZXInKS5pbm5lckhU
TUwgPSB1aS5odG1sRm9yVGVzdFR5cGVTd2l0Y2hlciggZmFsc2UsCisgICAgICAgIHVpLmNoZWNr
Ym94SFRNTCgnaWdub3JlRmxha3lUZXN0cycsICdJZ25vcmUgZmxha3kgdGVzdHMnLCBnX2N1cnJl
bnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzLCAnZ19jdXJyZW50QnVpbGRJbmRleCA9IC0xJykKICAg
ICApOwogCiAgICAgdXBkYXRlVGltZWxpbmVGb3JCdWlsZGVyKCk7CkBAIC0zMDksOCArMzEwLDgg
QEAgZnVuY3Rpb24gdXBkYXRlQnVpbGRJbnNwZWN0b3IocmVzdWx0cywgYnVpbGRlciwgZHlncmFw
aCwgaW5kZXgpCiAKICAgICAvLyBSZXZpc2lvbiBsaW5rKHMpCiAgICAgaWYgKCFzaG91bGRTaG93
V2ViS2l0UmV2aXNpb25zT25seSgpKQotICAgICAgICBhZGRSb3coJ0Nocm9taXVtIGNoYW5nZTon
LCBjaHJvbWl1bVJldmlzaW9uTGluayhyZXN1bHRzLCBpbmRleCkpOwotICAgIGFkZFJvdygnV2Vi
S2l0IGNoYW5nZTonLCB3ZWJLaXRSZXZpc2lvbkxpbmsocmVzdWx0cywgaW5kZXgpKTsKKyAgICAg
ICAgYWRkUm93KCdDaHJvbWl1bSBjaGFuZ2U6JywgdWkuY2hyb21pdW1SZXZpc2lvbkxpbmsocmVz
dWx0cywgaW5kZXgpKTsKKyAgICBhZGRSb3coJ1dlYktpdCBjaGFuZ2U6JywgdWkud2ViS2l0UmV2
aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4KSk7CiAKICAgICAvLyBUZXN0IHN0YXR1cy9jb3VudHMK
ICAgICBhZGRSb3coJycsICcnKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
c3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5odG1sIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmh0bWwKaW5kZXggMjUyYWM4MTE5NmQ1YjQwOTZlZmEy
ZDdkNWFmOGZiNTEyMDBlZDdhOC4uYTNiOTkxZjlhNmI5Y2YwYTA3Zjk5MjZiNDExOGRmYjlhMDcy
MDk5ZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy90cmVlbWFwLmh0bWwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy90cmVlbWFwLmh0bWwKQEAgLTExMSw2ICsxMTEsNyBAQCB0ZCB7CiA8c2NyaXB0IHNyYz0i
bG9hZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJzdHJpbmcuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ1
aS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0nd2VidHJlZW1hcC5qcyc+PC9zY3JpcHQ+CiAK
IDxkaXYgaWQ9J2hlYWRlci1jb250YWluZXInPjwvZGl2PgpAQCAtMjMwLDcgKzIzMSw3IEBAIHZh
ciBnX3dlYlRyZWU7CiAKIGZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCiB7Ci0gICAgJCgnaGVhZGVy
LWNvbnRhaW5lcicpLmlubmVySFRNTCA9IGh0bWxGb3JUZXN0VHlwZVN3aXRjaGVyKCk7CisgICAg
JCgnaGVhZGVyLWNvbnRhaW5lcicpLmlubmVySFRNTCA9IHVpLmh0bWxGb3JUZXN0VHlwZVN3aXRj
aGVyKCk7CiAKICAgICBnX2lzR2VuZXJhdGluZ1BhZ2UgPSB0cnVlOwogCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3VpLmpzIGIvVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy91aS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDA0MTli
YzBhMzc4NDMwZTI2MWFiNGFlNzFlYjA4MGMxYzFjZmY2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy91aS5qcwpAQCAtMCwwICsxLDE5
NSBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8g
ICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
Ly8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKy8vIEBmaWxlb3ZlcnZpZXcgQ29tbW9uIHV0aWxpdGllcyBmb3IgZ2VuZXJhdGluZyB1
aSBmb3IgdXNlIGluIHRoZQorLy8gZGFzaGJvYXJkcy4KK3ZhciB1aSA9IHVpIHx8IHt9OworCiso
ZnVuY3Rpb24oKSB7CisKK3VpLmhpZGVQb3B1cCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgcG9w
dXAgPSAkKCdwb3B1cCcpOworICAgIGlmIChwb3B1cCkKKyAgICAgICAgcG9wdXAucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZChwb3B1cCk7Cit9CisKK3VpLnNob3dQb3B1cCA9IGZ1bmN0aW9uKHRhcmdl
dCwgaHRtbCkKK3sKKyAgICB2YXIgcG9wdXAgPSAkKCdwb3B1cCcpOworICAgIGlmICghcG9wdXAp
IHsKKyAgICAgICAgcG9wdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAg
ICAgcG9wdXAuaWQgPSAncG9wdXAnOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KHBvcHVwKTsKKyAgICB9CisKKyAgICAvLyBTZXQgaHRtbCBmaXJzdCBzbyB0aGF0IHdlIGNhbiBn
ZXQgYWNjdXJhdGUgc2l6ZSBtZXRyaWNzIG9uIHRoZSBwb3B1cC4KKyAgICBwb3B1cC5pbm5lckhU
TUwgPSBodG1sOworCisgICAgdmFyIHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7CisKKyAgICB2YXIgeCA9IE1hdGgubWluKHRhcmdldFJlY3QubGVmdCAtIDEwLCBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBwb3B1cC5vZmZzZXRXaWR0aCk7
CisgICAgeCA9IE1hdGgubWF4KDAsIHgpOworICAgIHBvcHVwLnN0eWxlLmxlZnQgPSB4ICsgZG9j
dW1lbnQuYm9keS5zY3JvbGxMZWZ0ICsgJ3B4JzsKKworICAgIHZhciB5ID0gdGFyZ2V0UmVjdC50
b3AgKyB0YXJnZXRSZWN0LmhlaWdodDsKKyAgICBpZiAoeSArIHBvcHVwLm9mZnNldEhlaWdodCA+
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpCisgICAgICAgIHkgPSB0YXJn
ZXRSZWN0LnRvcCAtIHBvcHVwLm9mZnNldEhlaWdodDsKKyAgICB5ID0gTWF0aC5tYXgoMCwgeSk7
CisgICAgcG9wdXAuc3R5bGUudG9wID0geSArIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wICsgJ3B4
JzsKK30KKwordWkuY2hlY2tib3hIVE1MID0gZnVuY3Rpb24ocXVlcnlQYXJhbWV0ZXIsIGxhYmVs
LCBpc0NoZWNrZWQsIG9wdF9leHRyYUphdmFTY3JpcHQpCit7CisgICAgdmFyIGpzID0gb3B0X2V4
dHJhSmF2YVNjcmlwdCB8fCAnJzsKKyAgICByZXR1cm4gJzxsYWJlbCBzdHlsZT0icGFkZGluZy1s
ZWZ0OiAyZW0iPicgKworICAgICAgICAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbmNoYW5nZT0i
dG9nZ2xlUXVlcnlQYXJhbWV0ZXIoXCcnICsgcXVlcnlQYXJhbWV0ZXIgKyAnXCcpOycgKyBqcyAr
ICciICcgKworICAgICAgICAgICAgKGlzQ2hlY2tlZCA/ICdjaGVja2VkJyA6ICcnKSArICc+JyAr
IGxhYmVsICsKKyAgICAgICAgJzwvbGFiZWw+ICc7Cit9CisKK3VpLnNlbGVjdEhUTUwgPSBmdW5j
dGlvbihsYWJlbCwgcXVlcnlQYXJhbWV0ZXIsIG9wdGlvbnMpCit7CisgICAgdmFyIGh0bWwgPSAn
PGxhYmVsIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDJlbSI+JyArIGxhYmVsICsgJzogJyArCisgICAg
ICAgICc8c2VsZWN0IG9uY2hhbmdlPSJzZXRRdWVyeVBhcmFtZXRlcihcJycgKyBxdWVyeVBhcmFt
ZXRlciArICdcJywgdGhpc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnZhbHVlKSI+JzsKKworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgdmFs
dWUgPSBvcHRpb25zW2ldOworICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPSInICsgdmFs
dWUgKyAnIiAnICsKKyAgICAgICAgICAgIChxdWVyeVBhcmFtZXRlclZhbHVlKHF1ZXJ5UGFyYW1l
dGVyKSA9PSB2YWx1ZSA/ICdzZWxlY3RlZCcgOiAnJykgKworICAgICAgICAgICAgJz4nICsgdmFs
dWUgKyAnPC9vcHRpb24+JworICAgIH0KKyAgICBodG1sICs9ICc8L3NlbGVjdD48L2xhYmVsPiAn
OworICAgIHJldHVybiBodG1sOworfQorCisvLyBSZXR1cm5zIHRoZSBIVE1MIGZvciB0aGUgc2Vs
ZWN0IGVsZW1lbnQgdG8gc3dpdGNoIHRvIGRpZmZlcmVudCB0ZXN0VHlwZXMuCit1aS5odG1sRm9y
VGVzdFR5cGVTd2l0Y2hlciA9IGZ1bmN0aW9uKG9wdF9ub0J1aWxkZXJNZW51LCBvcHRfZXh0cmFI
dG1sLCBvcHRfaW5jbHVkZU5vbmVCdWlsZGVyKQoreworICAgIHZhciBodG1sID0gJzxkaXYgc3R5
bGU9ImJvcmRlci1ib3R0b206MXB4IGRhc2hlZCI+JzsKKyAgICBodG1sICs9ICcnICsKKyAgICAg
ICAgdWkuX2h0bWxGb3JEYXNoYm9hcmRMaW5rKCdTdGF0cycsICdhZ2dyZWdhdGVfcmVzdWx0cy5o
dG1sJykgKworICAgICAgICB1aS5faHRtbEZvckRhc2hib2FyZExpbmsoJ1RpbWVsaW5lJywgJ3Rp
bWVsaW5lX2V4cGxvcmVyLmh0bWwnKSArCisgICAgICAgIHVpLl9odG1sRm9yRGFzaGJvYXJkTGlu
aygnUmVzdWx0cycsICdmbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwnKSArCisgICAgICAgIHVpLl9o
dG1sRm9yRGFzaGJvYXJkTGluaygnVHJlZW1hcCcsICd0cmVlbWFwLmh0bWwnKTsKKworICAgIGh0
bWwgKz0gdWkuc2VsZWN0SFRNTCgnVGVzdCB0eXBlJywgJ3Rlc3RUeXBlJywgVEVTVF9UWVBFUyk7
CisKKyAgICBpZiAoIW9wdF9ub0J1aWxkZXJNZW51KSB7CisgICAgICAgIHZhciBidWlsZGVyc0Zv
ck1lbnUgPSBPYmplY3Qua2V5cyhjdXJyZW50QnVpbGRlcnMoKSk7CisgICAgICAgIGlmIChvcHRf
aW5jbHVkZU5vbmVCdWlsZGVyKQorICAgICAgICAgICAgYnVpbGRlcnNGb3JNZW51LnVuc2hpZnQo
Jy0tLS0tLS0tLS0tLS0tJyk7CisgICAgICAgIGh0bWwgKz0gdWkuc2VsZWN0SFRNTCgnQnVpbGRl
cicsICdidWlsZGVyJywgYnVpbGRlcnNGb3JNZW51KTsKKyAgICB9CisKKyAgICBodG1sICs9IHVp
LnNlbGVjdEhUTUwoJ0dyb3VwJywgJ2dyb3VwJywKKyAgICAgICAgT2JqZWN0LmtleXMoY3VycmVu
dEJ1aWxkZXJHcm91cENhdGVnb3J5KCkpKTsKKworICAgIGlmICghaXNUcmVlTWFwKCkpCisgICAg
ICAgIGh0bWwgKz0gdWkuY2hlY2tib3hIVE1MKCdzaG93QWxsUnVucycsICdTaG93IGFsbCBydW5z
JywgZ19jcm9zc0Rhc2hib2FyZFN0YXRlLnNob3dBbGxSdW5zKTsKKworICAgIGlmIChvcHRfZXh0
cmFIdG1sKQorICAgICAgICBodG1sICs9IG9wdF9leHRyYUh0bWw7CisgICAgcmV0dXJuIGh0bWwg
KyAnPC9kaXY+JzsKK30KKwordWkuX2xvYWREYXNoYm9hcmQgPSBmdW5jdGlvbihmaWxlTmFtZSkK
K3sKKyAgICB2YXIgcGF0aE5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CisgICAgcGF0
aE5hbWUgPSBwYXRoTmFtZS5zdWJzdHJpbmcoMCwgcGF0aE5hbWUubGFzdEluZGV4T2YoJy8nKSAr
IDEpOworICAgIHdpbmRvdy5sb2NhdGlvbiA9IHBhdGhOYW1lICsgZmlsZU5hbWUgKyB3aW5kb3cu
bG9jYXRpb24uaGFzaDsKK30KKwordWkuX2h0bWxGb3JUb3BMaW5rID0gZnVuY3Rpb24oaHRtbCwg
b25DbGljaywgaXNTZWxlY3RlZCkKK3sKKyAgICB2YXIgY3NzVGV4dCA9IGlzU2VsZWN0ZWQgPyAn
Zm9udC13ZWlnaHQ6IGJvbGQ7JyA6ICdjb2xvcjpibHVlO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxp
bmU7Y3Vyc29yOnBvaW50ZXI7JzsKKyAgICBjc3NUZXh0ICs9ICdtYXJnaW46IDAgNXB4Oyc7Cisg
ICAgcmV0dXJuICc8c3BhbiBzdHlsZT0iJyArIGNzc1RleHQgKyAnIiBvbmNsaWNrPSInICsgb25D
bGljayArICciPicgKyBodG1sICsgJzwvc3Bhbj4nOworfQorCit1aS5faHRtbEZvckRhc2hib2Fy
ZExpbmsgPSBmdW5jdGlvbihodG1sLCBmaWxlTmFtZSkKK3sKKyAgICB2YXIgcGF0aE5hbWUgPSB3
aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CisgICAgdmFyIGN1cnJlbnRGaWxlTmFtZSA9IHBhdGhO
YW1lLnN1YnN0cmluZyhwYXRoTmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7CisgICAgdmFyIGlz
U2VsZWN0ZWQgPSBjdXJyZW50RmlsZU5hbWUgPT0gZmlsZU5hbWU7CisgICAgdmFyIG9uQ2xpY2sg
PSAndWkuX2xvYWREYXNoYm9hcmQoXCcnICsgZmlsZU5hbWUgKyAnXCcpJzsKKyAgICByZXR1cm4g
dWkuX2h0bWxGb3JUb3BMaW5rKGh0bWwsIG9uQ2xpY2ssIGlzU2VsZWN0ZWQpOworfQorCit1aS5f
cmV2aXNpb25MaW5rID0gZnVuY3Rpb24ocmVzdWx0cywgaW5kZXgsIGtleSwgc2luZ2xlVXJsVGVt
cGxhdGUsIHJhbmdlVXJsVGVtcGxhdGUpCit7CisgICAgdmFyIGN1cnJlbnRSZXZpc2lvbiA9IHBh
cnNlSW50KHJlc3VsdHNba2V5XVtpbmRleF0sIDEwKTsKKyAgICB2YXIgcHJldmlvdXNSZXZpc2lv
biA9IHBhcnNlSW50KHJlc3VsdHNba2V5XVtpbmRleCArIDFdLCAxMCk7CisKKyAgICBmdW5jdGlv
biBzaW5nbGVVcmwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNpbmdsZVVybFRlbXBsYXRlLnJl
cGxhY2UoJzxyZXY+JywgY3VycmVudFJldmlzaW9uKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBy
YW5nZVVybCgpCisgICAgeworICAgICAgICByZXR1cm4gcmFuZ2VVcmxUZW1wbGF0ZS5yZXBsYWNl
KCc8cmV2MT4nLCBjdXJyZW50UmV2aXNpb24pLnJlcGxhY2UoJzxyZXYyPicsIHByZXZpb3VzUmV2
aXNpb24gKyAxKTsKKyAgICB9CisKKyAgICBpZiAoY3VycmVudFJldmlzaW9uID09IHByZXZpb3Vz
UmV2aXNpb24pCisgICAgICAgIHJldHVybiAnQXQgPGEgaHJlZj0iJyArIHNpbmdsZVVybCgpICsg
JyI+cicgKyBjdXJyZW50UmV2aXNpb24gICAgKyAnPC9hPic7CisgICAgZWxzZSBpZiAoY3VycmVu
dFJldmlzaW9uIC0gcHJldmlvdXNSZXZpc2lvbiA9PSAxKQorICAgICAgICByZXR1cm4gJzxhIGhy
ZWY9IicgKyBzaW5nbGVVcmwoKSArICciPnInICsgY3VycmVudFJldmlzaW9uICAgICsgJzwvYT4n
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICc8YSBocmVmPSInICsgcmFuZ2VVcmwoKSArICci
PnInICsgKHByZXZpb3VzUmV2aXNpb24gKyAxKSArICcgdG8gcicgKyBjdXJyZW50UmV2aXNpb24g
KyAnPC9hPic7Cit9CisKK3VpLmNocm9taXVtUmV2aXNpb25MaW5rID0gZnVuY3Rpb24ocmVzdWx0
cywgaW5kZXgpCit7CisgICAgcmV0dXJuIHVpLl9yZXZpc2lvbkxpbmsoCisgICAgICAgIHJlc3Vs
dHMsCisgICAgICAgIGluZGV4LAorICAgICAgICBDSFJPTUVfUkVWSVNJT05TX0tFWSwKKyAgICAg
ICAgJ2h0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJvbWU/dmlldz1yZXYmcmV2aXNp
b249PHJldj4nLAorICAgICAgICAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVt
L3BlcmYvZGFzaGJvYXJkL3VpL2NoYW5nZWxvZy5odG1sP3VybD0vdHJ1bmsvc3JjJnJhbmdlPTxy
ZXYyPjo8cmV2MT4mbW9kZT1odG1sJyk7Cit9CisKK3VpLndlYktpdFJldmlzaW9uTGluayA9IGZ1
bmN0aW9uKHJlc3VsdHMsIGluZGV4KQoreworICAgIHJldHVybiB1aS5fcmV2aXNpb25MaW5rKAor
ICAgICAgICByZXN1bHRzLAorICAgICAgICBpbmRleCwKKyAgICAgICAgV0VCS0lUX1JFVklTSU9O
U19LRVksCisgICAgICAgICdodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC88cmV2Pics
CisgICAgICAgICdodHRwOi8vdHJhYy53ZWJraXQub3JnL2xvZy90cnVuay8/cmV2PTxyZXYxPiZz
dG9wX3Jldj08cmV2Mj4mbGltaXQ9MTAwJnZlcmJvc2U9b24nKTsKK30KKworCitkb2N1bWVudC5h
ZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKSB7CisgICAgLy8gQ2xlYXIg
dGhlIG9wZW4gcG9wdXAsIHVubGVzcyB0aGUgY2xpY2sgd2FzIGluc2lkZSB0aGUgcG9wdXAuCisg
ICAgdmFyIHBvcHVwID0gJCgncG9wdXAnKTsKKyAgICBpZiAocG9wdXAgJiYgZS50YXJnZXQgIT0g
cG9wdXAgJiYgIShwb3B1cC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlLnRhcmdldCkgJiAxNikp
CisgICAgICAgIHVpLmhpZGVQb3B1cCgpOworfSwgZmFsc2UpOworCit9KSgpOwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191869</attachid>
            <date>2013-03-06 17:00:08 -0800</date>
            <delta_ts>2013-03-06 19:01:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111621-20130306165614.patch</filename>
            <type>text/plain</type>
            <size>26950</size>
            <attacher name="Julie Parent">jparent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0OTY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmQ0MDUyMzc1MTZiZGQ1YTVhMjUxNDA1ZTNkZDYyNDFi
ZGI2MDhiYS4uY2VmNWQ3NWFiYmIxNDkwMzI3MmZjMjdjYjlmNzEwNGZjMmM1ZGJhOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM2
IEBACiAyMDEzLTAzLTA2ICBKdWxpZSBQYXJlbnQgIDxqcGFyZW50QGNocm9taXVtLm9yZz4KIAor
ICAgICAgICBEYXNoYm9hcmQgY2xlYW51cDogTW92ZSBhbGwgZGFzaGJvYXJkIHVpIHJlbGF0ZWQg
Y29kZSBpbnRvIHVpLmpzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTExNjIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBDcmVhdGVzIHVpLmpzLCBhIHBhY2thZ2UgZm9yIHRoZSBjb21tb24g
VUkgY29kZSB0aGUgdmFyaW91cworICAgICAgICBkYXNoYm9hcmRzIHVzZS4gSFRNTCBnZW5lcmF0
aW9uIGlzIG5vdyBpbiB0aGUgdWkuaHRtbCBuYW1lc3BhY2UKKyAgICAgICAgYW5kIHBvcHVwIGhh
bmRsaW5nIGlzIGluIHVpLnBvcHVwLgorICAgICAgICBBbHNvIG1vdmVzIHRoZSBldmVudCBsaXN0
ZW5pbmcgZm9yIHBvcHVwcyB0byB1aS5wb3B1cC5zaG93IGFuZAorICAgICAgICByZW1vdmVzIGl0
IG9uIHVpLnBvcHVwLmhpZCByYXRoZXIgdGhhbiBoYXZpbmcgbGlzdGVuZXIgYWx3YXlzCisgICAg
ICAgIGFyb3VuZC4KKworICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2Fy
ZHMvYWdncmVnYXRlX3Jlc3VsdHMuaHRtbDoKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0
YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzOgorICAgICAgICAqIFRlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5odG1sOgorICAgICAg
ICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2Fy
ZC5qczoKKyAgICAgICAgKHNob3dQb3B1cEZvckJ1aWxkKToKKyAgICAgICAgKGh0bWxGb3JOYXZC
YXIpOgorICAgICAgICAoZ2VuZXJhdGVQYWdlRm9ySW5kaXZpZHVhbFRlc3RzLmlmKToKKyAgICAg
ICAgKGdlbmVyYXRlUGFnZUZvckluZGl2aWR1YWxUZXN0cyk6CisgICAgICAgICogVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX2VtYmVkZGVkX3Vu
aXR0ZXN0cy5qczoKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L2ZsYWtpbmVzc19kYXNoYm9hcmRfdW5pdHRlc3RzLmpzOgorICAgICAgICAqIFRlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvcnVuLWVtYmVkZGVkLXVuaXR0ZXN0cy5odG1sOgorICAg
ICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvcnVuLXVuaXR0ZXN0cy5o
dG1sOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxp
bmVfZXhwbG9yZXIuaHRtbDoKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL3RyZWVtYXAuaHRtbDoKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL3VpLmpzOiBBZGRlZC4KKyAgICAgICAgKC4pOgorCisyMDEzLTAzLTA2ICBKdWxp
ZSBQYXJlbnQgIDxqcGFyZW50QGNocm9taXVtLm9yZz4KKwogICAgICAgICBEYXNoYm9hcmQgY2xl
YW51cDogcmVtb3ZlIGRhc2hib2FyZCB0aW1lIGxvZ2dpbmcuCiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE2MDgKIApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5odG1s
IGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVz
dWx0cy5odG1sCmluZGV4IGE3MzUxMTIyY2IwYTA3Mjg0ZDM0N2EyZGQ2Njk2MzEyZWE5MGU1Y2Uu
Ljk2MTcxYTlhYWZkYzA5ODM4OTRjNmI0MjU1NjZkMGFhODkxMTFlZmYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMu
aHRtbAorKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2FnZ3Jl
Z2F0ZV9yZXN1bHRzLmh0bWwKQEAgLTU0LDYgKzU0LDcgQEAgaW1nIHsKIDxzY3JpcHQgc3JjPSJs
b2FkZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9InN0cmluZy5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iZGFzaGJvYXJkX2Jhc2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InVp
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiAvLyBAZmlsZW92ZXJ2aWV3IENyZWF0ZXMgYSBkYXNo
Ym9hcmQgZm9yIHRyYWNraW5nIG51bWJlciBvZiBwYXNzZXMvZmFpbHVyZXMgcGVyIHJ1bi4KIC8v
CkBAIC02OCw3ICs2OSw3IEBAIGltZyB7CiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9u
IGdlbmVyYXRlUGFnZSgpCiB7Ci0gICAgdmFyIGh0bWwgPSBodG1sRm9yVGVzdFR5cGVTd2l0Y2hl
cih0cnVlKSArICc8YnI+JzsKKyAgICB2YXIgaHRtbCA9IHVpLmh0bWwudGVzdFR5cGVTd2l0Y2hl
cih0cnVlKSArICc8YnI+JzsKICAgICBmb3IgKHZhciBidWlsZGVyIGluIGN1cnJlbnRCdWlsZGVy
cygpKQogICAgICAgICBodG1sICs9IGh0bWxGb3JCdWlsZGVyKGJ1aWxkZXIpOwogICAgIGRvY3Vt
ZW50LmJvZHkuaW5uZXJIVE1MID0gaHRtbDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMgYi9Ub29scy9UZXN0UmVz
dWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCmluZGV4IDRmYzEz
ZjMxNjNiYzYxZjNiYzJjNzRmMWU3ZDExOTE2MzMwNjc1ZDkuLjU1NzJlN2Q5YzE2MDE0NDAwMjdh
MjhjOWFkM2JiZDIwNmU2NmFlN2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
c3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMKKysrIGIvVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qcwpAQCAtNTQ4LDM4ICs1
NDgsNiBAQCBmdW5jdGlvbiBqb2luUGFyYW1ldGVycyhzdGF0ZU9iamVjdCkKICAgICByZXR1cm4g
c3RhdGUuam9pbignJicpOwogfQogCi1mdW5jdGlvbiBoaWRlUG9wdXAoKQotewotICAgIHZhciBw
b3B1cCA9ICQoJ3BvcHVwJyk7Ci0gICAgaWYgKHBvcHVwKQotICAgICAgICBwb3B1cC5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKHBvcHVwKTsKLX0KLQotZnVuY3Rpb24gc2hvd1BvcHVwKHRhcmdldCwg
aHRtbCkKLXsKLSAgICB2YXIgcG9wdXAgPSAkKCdwb3B1cCcpOwotICAgIGlmICghcG9wdXApIHsK
LSAgICAgICAgcG9wdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAg
cG9wdXAuaWQgPSAncG9wdXAnOwotICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBv
cHVwKTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgaHRtbCBmaXJzdCBzbyB0aGF0IHdlIGNhbiBnZXQg
YWNjdXJhdGUgc2l6ZSBtZXRyaWNzIG9uIHRoZSBwb3B1cC4KLSAgICBwb3B1cC5pbm5lckhUTUwg
PSBodG1sOwotCi0gICAgdmFyIHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCk7Ci0KLSAgICB2YXIgeCA9IE1hdGgubWluKHRhcmdldFJlY3QubGVmdCAtIDEwLCBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBwb3B1cC5vZmZzZXRXaWR0aCk7Ci0g
ICAgeCA9IE1hdGgubWF4KDAsIHgpOwotICAgIHBvcHVwLnN0eWxlLmxlZnQgPSB4ICsgZG9jdW1l
bnQuYm9keS5zY3JvbGxMZWZ0ICsgJ3B4JzsKLQotICAgIHZhciB5ID0gdGFyZ2V0UmVjdC50b3Ag
KyB0YXJnZXRSZWN0LmhlaWdodDsKLSAgICBpZiAoeSArIHBvcHVwLm9mZnNldEhlaWdodCA+IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpCi0gICAgICAgIHkgPSB0YXJnZXRS
ZWN0LnRvcCAtIHBvcHVwLm9mZnNldEhlaWdodDsKLSAgICB5ID0gTWF0aC5tYXgoMCwgeSk7Ci0g
ICAgcG9wdXAuc3R5bGUudG9wID0geSArIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wICsgJ3B4JzsK
LX0KLQogLy8gQ3JlYXRlIGEgbmV3IGZ1bmN0aW9uIHdpdGggc29tZSBvZiBpdHMgYXJndWVtZW50
cwogLy8gcHJlLWZpbGxlZC4KIC8vIFRha2VuIGZyb20gZ29vZy5wYXJ0aWFsIGluIHRoZSBDbG9z
dXJlIGxpYnJhcnkuCkBAIC01OTksNyArNTY3LDcgQEAgZnVuY3Rpb24gcGFydGlhbChmbiwgdmFy
X2FyZ3MpCiAgICAgfTsKIH07CiAKLS8vIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGV4cGVjdGF0
aW9zbiBtYXAgZm9yIHRoZSBjdXJyZW50IHRlc3RUeXBlLgorLy8gUmV0dXJucyB0aGUgYXBwcm9w
cmlhdGUgZXhwZWN0YXRpb25zIG1hcCBmb3IgdGhlIGN1cnJlbnQgdGVzdFR5cGUuCiBmdW5jdGlv
biBleHBlY3RhdGlvbnNNYXAoKQogewogICAgIHJldHVybiBpc0xheW91dFRlc3RSZXN1bHRzKCkg
PyBMQVlPVVRfVEVTVF9FWFBFQ1RBVElPTlNfTUFQXyA6IEdURVNUX0VYUEVDVEFUSU9OU19NQVBf
OwpAQCAtNjE1LDEyNiArNTgzLDYgQEAgZnVuY3Rpb24gcXVlcnlQYXJhbWV0ZXJWYWx1ZShwYXJh
bWV0ZXIpCiAgICAgcmV0dXJuIGdfY3VycmVudFN0YXRlW3BhcmFtZXRlcl0gfHwgZ19jcm9zc0Rh
c2hib2FyZFN0YXRlW3BhcmFtZXRlcl07CiB9CiAKLWZ1bmN0aW9uIGNoZWNrYm94SFRNTChxdWVy
eVBhcmFtZXRlciwgbGFiZWwsIGlzQ2hlY2tlZCwgb3B0X2V4dHJhSmF2YVNjcmlwdCkKLXsKLSAg
ICB2YXIganMgPSBvcHRfZXh0cmFKYXZhU2NyaXB0IHx8ICcnOwotICAgIHJldHVybiAnPGxhYmVs
IHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDJlbSI+JyArCi0gICAgICAgICc8aW5wdXQgdHlwZT0iY2hl
Y2tib3giIG9uY2hhbmdlPSJ0b2dnbGVRdWVyeVBhcmFtZXRlcihcJycgKyBxdWVyeVBhcmFtZXRl
ciArICdcJyk7JyArIGpzICsgJyIgJyArCi0gICAgICAgICAgICAoaXNDaGVja2VkID8gJ2NoZWNr
ZWQnIDogJycpICsgJz4nICsgbGFiZWwgKwotICAgICAgICAnPC9sYWJlbD4gJzsKLX0KLQotZnVu
Y3Rpb24gc2VsZWN0SFRNTChsYWJlbCwgcXVlcnlQYXJhbWV0ZXIsIG9wdGlvbnMpCi17Ci0gICAg
dmFyIGh0bWwgPSAnPGxhYmVsIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDJlbSI+JyArIGxhYmVsICsg
JzogJyArCi0gICAgICAgICc8c2VsZWN0IG9uY2hhbmdlPSJzZXRRdWVyeVBhcmFtZXRlcihcJycg
KyBxdWVyeVBhcmFtZXRlciArICdcJywgdGhpc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnZhbHVlKSI+
JzsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykgewotICAg
ICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW2ldOwotICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZh
bHVlPSInICsgdmFsdWUgKyAnIiAnICsKLSAgICAgICAgICAgIChxdWVyeVBhcmFtZXRlclZhbHVl
KHF1ZXJ5UGFyYW1ldGVyKSA9PSB2YWx1ZSA/ICdzZWxlY3RlZCcgOiAnJykgKwotICAgICAgICAg
ICAgJz4nICsgdmFsdWUgKyAnPC9vcHRpb24+JwotICAgIH0KLSAgICBodG1sICs9ICc8L3NlbGVj
dD48L2xhYmVsPiAnOwotICAgIHJldHVybiBodG1sOwotfQotCi0vLyBSZXR1cm5zIHRoZSBIVE1M
IGZvciB0aGUgc2VsZWN0IGVsZW1lbnQgdG8gc3dpdGNoIHRvIGRpZmZlcmVudCB0ZXN0VHlwZXMu
Ci1mdW5jdGlvbiBodG1sRm9yVGVzdFR5cGVTd2l0Y2hlcihvcHRfbm9CdWlsZGVyTWVudSwgb3B0
X2V4dHJhSHRtbCwgb3B0X2luY2x1ZGVOb25lQnVpbGRlcikKLXsKLSAgICB2YXIgaHRtbCA9ICc8
ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNoZWQiPic7Ci0gICAgaHRtbCArPSAnJyAr
Ci0gICAgICAgIGh0bWxGb3JEYXNoYm9hcmRMaW5rKCdTdGF0cycsICdhZ2dyZWdhdGVfcmVzdWx0
cy5odG1sJykgKwotICAgICAgICBodG1sRm9yRGFzaGJvYXJkTGluaygnVGltZWxpbmUnLCAndGlt
ZWxpbmVfZXhwbG9yZXIuaHRtbCcpICsKLSAgICAgICAgaHRtbEZvckRhc2hib2FyZExpbmsoJ1Jl
c3VsdHMnLCAnZmxha2luZXNzX2Rhc2hib2FyZC5odG1sJykgKwotICAgICAgICBodG1sRm9yRGFz
aGJvYXJkTGluaygnVHJlZW1hcCcsICd0cmVlbWFwLmh0bWwnKTsKLQotICAgIGh0bWwgKz0gc2Vs
ZWN0SFRNTCgnVGVzdCB0eXBlJywgJ3Rlc3RUeXBlJywgVEVTVF9UWVBFUyk7Ci0KLSAgICBpZiAo
IW9wdF9ub0J1aWxkZXJNZW51KSB7Ci0gICAgICAgIHZhciBidWlsZGVyc0Zvck1lbnUgPSBPYmpl
Y3Qua2V5cyhjdXJyZW50QnVpbGRlcnMoKSk7Ci0gICAgICAgIGlmIChvcHRfaW5jbHVkZU5vbmVC
dWlsZGVyKQotICAgICAgICAgICAgYnVpbGRlcnNGb3JNZW51LnVuc2hpZnQoJy0tLS0tLS0tLS0t
LS0tJyk7Ci0gICAgICAgIGh0bWwgKz0gc2VsZWN0SFRNTCgnQnVpbGRlcicsICdidWlsZGVyJywg
YnVpbGRlcnNGb3JNZW51KTsKLSAgICB9Ci0KLSAgICBodG1sICs9IHNlbGVjdEhUTUwoJ0dyb3Vw
JywgJ2dyb3VwJywKLSAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudEJ1aWxkZXJHcm91cENhdGVn
b3J5KCkpKTsKLQotICAgIGlmICghaXNUcmVlTWFwKCkpCi0gICAgICAgIGh0bWwgKz0gY2hlY2ti
b3hIVE1MKCdzaG93QWxsUnVucycsICdTaG93IGFsbCBydW5zJywgZ19jcm9zc0Rhc2hib2FyZFN0
YXRlLnNob3dBbGxSdW5zKTsKLQotICAgIGlmIChvcHRfZXh0cmFIdG1sKQotICAgICAgICBodG1s
ICs9IG9wdF9leHRyYUh0bWw7Ci0gICAgcmV0dXJuIGh0bWwgKyAnPC9kaXY+JzsKLX0KLQotZnVu
Y3Rpb24gbG9hZERhc2hib2FyZChmaWxlTmFtZSkKLXsKLSAgICB2YXIgcGF0aE5hbWUgPSB3aW5k
b3cubG9jYXRpb24ucGF0aG5hbWU7Ci0gICAgcGF0aE5hbWUgPSBwYXRoTmFtZS5zdWJzdHJpbmco
MCwgcGF0aE5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpOwotICAgIHdpbmRvdy5sb2NhdGlvbiA9
IHBhdGhOYW1lICsgZmlsZU5hbWUgKyB3aW5kb3cubG9jYXRpb24uaGFzaDsKLX0KLQotZnVuY3Rp
b24gaHRtbEZvclRvcExpbmsoaHRtbCwgb25DbGljaywgaXNTZWxlY3RlZCkKLXsKLSAgICB2YXIg
Y3NzVGV4dCA9IGlzU2VsZWN0ZWQgPyAnZm9udC13ZWlnaHQ6IGJvbGQ7JyA6ICdjb2xvcjpibHVl
O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXI7JzsKLSAgICBjc3NUZXh0
ICs9ICdtYXJnaW46IDAgNXB4Oyc7Ci0gICAgcmV0dXJuICc8c3BhbiBzdHlsZT0iJyArIGNzc1Rl
eHQgKyAnIiBvbmNsaWNrPSInICsgb25DbGljayArICciPicgKyBodG1sICsgJzwvc3Bhbj4nOwot
fQotCi1mdW5jdGlvbiBodG1sRm9yRGFzaGJvYXJkTGluayhodG1sLCBmaWxlTmFtZSkKLXsKLSAg
ICB2YXIgcGF0aE5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7Ci0gICAgdmFyIGN1cnJl
bnRGaWxlTmFtZSA9IHBhdGhOYW1lLnN1YnN0cmluZyhwYXRoTmFtZS5sYXN0SW5kZXhPZignLycp
ICsgMSk7Ci0gICAgdmFyIGlzU2VsZWN0ZWQgPSBjdXJyZW50RmlsZU5hbWUgPT0gZmlsZU5hbWU7
Ci0gICAgdmFyIG9uQ2xpY2sgPSAnbG9hZERhc2hib2FyZChcJycgKyBmaWxlTmFtZSArICdcJykn
OwotICAgIHJldHVybiBodG1sRm9yVG9wTGluayhodG1sLCBvbkNsaWNrLCBpc1NlbGVjdGVkKTsK
LX0KLQotZnVuY3Rpb24gcmV2aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4LCBrZXksIHNpbmdsZVVy
bFRlbXBsYXRlLCByYW5nZVVybFRlbXBsYXRlKQotewotICAgIHZhciBjdXJyZW50UmV2aXNpb24g
PSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXhdLCAxMCk7Ci0gICAgdmFyIHByZXZpb3VzUmV2
aXNpb24gPSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXggKyAxXSwgMTApOwotCi0gICAgZnVu
Y3Rpb24gc2luZ2xlVXJsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzaW5nbGVVcmxUZW1wbGF0
ZS5yZXBsYWNlKCc8cmV2PicsIGN1cnJlbnRSZXZpc2lvbik7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gcmFuZ2VVcmwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJhbmdlVXJsVGVtcGxhdGUucmVw
bGFjZSgnPHJldjE+JywgY3VycmVudFJldmlzaW9uKS5yZXBsYWNlKCc8cmV2Mj4nLCBwcmV2aW91
c1JldmlzaW9uICsgMSk7Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRSZXZpc2lvbiA9PSBwcmV2
aW91c1JldmlzaW9uKQotICAgICAgICByZXR1cm4gJ0F0IDxhIGhyZWY9IicgKyBzaW5nbGVVcmwo
KSArICciPnInICsgY3VycmVudFJldmlzaW9uICAgICsgJzwvYT4nOwotICAgIGVsc2UgaWYgKGN1
cnJlbnRSZXZpc2lvbiAtIHByZXZpb3VzUmV2aXNpb24gPT0gMSkKLSAgICAgICAgcmV0dXJuICc8
YSBocmVmPSInICsgc2luZ2xlVXJsKCkgKyAnIj5yJyArIGN1cnJlbnRSZXZpc2lvbiAgICArICc8
L2E+JzsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAnPGEgaHJlZj0iJyArIHJhbmdlVXJsKCkg
KyAnIj5yJyArIChwcmV2aW91c1JldmlzaW9uICsgMSkgKyAnIHRvIHInICsgY3VycmVudFJldmlz
aW9uICsgJzwvYT4nOwotfQotCi1mdW5jdGlvbiBjaHJvbWl1bVJldmlzaW9uTGluayhyZXN1bHRz
LCBpbmRleCkKLXsKLSAgICByZXR1cm4gcmV2aXNpb25MaW5rKAotICAgICAgICByZXN1bHRzLAot
ICAgICAgICBpbmRleCwKLSAgICAgICAgQ0hST01FX1JFVklTSU9OU19LRVksCi0gICAgICAgICdo
dHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lP3ZpZXc9cmV2JnJldmlzaW9uPTxy
ZXY+JywKLSAgICAgICAgJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9wZXJm
L2Rhc2hib2FyZC91aS9jaGFuZ2Vsb2cuaHRtbD91cmw9L3RydW5rL3NyYyZyYW5nZT08cmV2Mj46
PHJldjE+Jm1vZGU9aHRtbCcpOwotfQotCi1mdW5jdGlvbiB3ZWJLaXRSZXZpc2lvbkxpbmsocmVz
dWx0cywgaW5kZXgpCi17Ci0gICAgcmV0dXJuIHJldmlzaW9uTGluaygKLSAgICAgICAgcmVzdWx0
cywKLSAgICAgICAgaW5kZXgsCi0gICAgICAgIFdFQktJVF9SRVZJU0lPTlNfS0VZLAotICAgICAg
ICAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvPHJldj4nLAotICAgICAgICAnaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9sb2cvdHJ1bmsvP3Jldj08cmV2MT4mc3RvcF9yZXY9PHJldjI+
JmxpbWl0PTEwMCZ2ZXJib3NlPW9uJyk7Ci19Ci0KIC8vICJEZWNvbXByZXNzZXMiIHRoZSBSTEUt
ZW5jb2Rpbmcgb2YgdGVzdCByZXN1bHRzIHNvIHRoYXQgd2UgY2FuIHF1ZXJ5IGl0CiAvLyBieSBi
dWlsZCBpbmRleCBhbmQgdGVzdCBuYW1lLgogLy8KQEAgLTgzMSwxMyArNjc5LDYgQEAgZnVuY3Rp
b24gZGVjb21wcmVzc1Jlc3VsdHMoYnVpbGRlclJlc3VsdHMpCiAgICAgfTsKIH0KIAotZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZnVuY3Rpb24oZSkgewotICAgIC8vIENs
ZWFyIHRoZSBvcGVuIHBvcHVwLCB1bmxlc3MgdGhlIGNsaWNrIHdhcyBpbnNpZGUgdGhlIHBvcHVw
LgotICAgIHZhciBwb3B1cCA9ICQoJ3BvcHVwJyk7Ci0gICAgaWYgKHBvcHVwICYmIGUudGFyZ2V0
ICE9IHBvcHVwICYmICEocG9wdXAuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZS50YXJnZXQpICYg
MTYpKQotICAgICAgICBoaWRlUG9wdXAoKTsKLX0sIGZhbHNlKTsKLQogd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKICAgICBnX3Jlc291cmNlTG9hZGVyID0gbmV3
IGxvYWRlci5Mb2FkZXIoKTsKICAgICBnX3Jlc291cmNlTG9hZGVyLmxvYWQoKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rh
c2hib2FyZC5odG1sIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9m
bGFraW5lc3NfZGFzaGJvYXJkLmh0bWwKaW5kZXggOTY1OGFmMWU0MGU5ZjZjOGM2Y2VmNzI5NGRh
MjdjODE5NjQ0ZWNkMy4uMGZmZTI2ZmNiNzU1MjljNWE4MmE4Zjg1ZmQxY2M3ZjUyZmE3ZmY5NCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFr
aW5lc3NfZGFzaGJvYXJkLmh0bWwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMt
ZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwKQEAgLTM0LDQgKzM0LDUgQEAgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIDxzY3JpcHQgc3JjPSJsb2FkZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
InN0cmluZy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iZGFzaGJvYXJkX2Jhc2UuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InVpLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJmbGFr
aW5lc3NfZGFzaGJvYXJkLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5qcyBiL1Rvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5q
cwppbmRleCBhYjQ4OTliOGE2MDczMzk2YThlMDNhYTVkOWYyYTVhMWEzYzIyMGFlLi5kMjhhYjc5
OGIzMmVkMTE2ODNlZjU2OWVjYmNiNDhlYmFlYTAzNGVmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuanMKKysr
IGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFz
aGJvYXJkLmpzCkBAIC0xMTUzLDcgKzExNTMsNyBAQCBmdW5jdGlvbiBsaW5rSFRNTFRvT3Blbldp
bmRvdyh1cmwsIHRleHQpCiAgICAgcmV0dXJuICc8YSBocmVmPSInICsgdXJsICsgJyIgdGFyZ2V0
PSJfYmxhbmsiPicgKyB0ZXh0ICsgJzwvYT4nOwogfQogCi0vLyBGSVhNRTogcmVwbGFjZWQgd2l0
aCBjaHJvbWl1bVJldmlzaW9uTGluay93ZWJLaXRSZXZpc2lvbkxpbmsKKy8vIEZJWE1FOiByZXBs
YWNlZCB3aXRoIHVpLmNocm9taXVtUmV2aXNpb25MaW5rL3VpLndlYktpdFJldmlzaW9uTGluawog
ZnVuY3Rpb24gY3JlYXRlQmxhbWVMaXN0SFRNTChyZXZpc2lvbnMsIGluZGV4LCB1cmxCYXNlLCBz
ZXBhcmF0b3IsIHJlcG8pCiB7CiAgICAgdmFyIHRoaXNSZXZpc2lvbiA9IHJldmlzaW9uc1tpbmRl
eF07CkBAIC0xMjUwLDcgKzEyNTAsNyBAQCBmdW5jdGlvbiBzaG93UG9wdXBGb3JCdWlsZChlLCBi
dWlsZGVyLCBpbmRleCwgb3B0X3Rlc3ROYW1lKQogICAgICAgICBodG1sICs9ICc8bGk+JyArIGxp
bmtIVE1MVG9PcGVuV2luZG93KGJ1aWxkQmFzZVBhdGggKyBwYXRoVG9GYWlsdXJlTG9nKG9wdF90
ZXN0TmFtZSksICdGYWlsdXJlIGxvZycpICsgJzwvbGk+JzsKIAogICAgIGh0bWwgKz0gJzwvdWw+
JzsKLSAgICBzaG93UG9wdXAoZS50YXJnZXQsIGh0bWwpOworICAgIHVpLnBvcHVwLnNob3coZS50
YXJnZXQsIGh0bWwpOwogfQogCiBmdW5jdGlvbiBodG1sRm9yVGVzdFJlc3VsdHModGVzdCkKQEAg
LTIzOTUsNyArMjM5NSw3IEBAIGZ1bmN0aW9uIGh0bWxGb3JJbmRpdmlkdWFsVGVzdHModGVzdHMp
CiBmdW5jdGlvbiBodG1sRm9yTmF2QmFyKCkKIHsKICAgICB2YXIgZXh0cmFIVE1MID0gJyc7Ci0g
ICAgdmFyIGh0bWwgPSBodG1sRm9yVGVzdFR5cGVTd2l0Y2hlcihmYWxzZSwgZXh0cmFIVE1MLCBp
c0Nyb3NzQnVpbGRlclZpZXcoKSk7CisgICAgdmFyIGh0bWwgPSB1aS5odG1sLnRlc3RUeXBlU3dp
dGNoZXIoZmFsc2UsIGV4dHJhSFRNTCwgaXNDcm9zc0J1aWxkZXJWaWV3KCkpOwogICAgIGh0bWwg
Kz0gJzxkaXYgY2xhc3M9Zm9ybXM+PGZvcm0gaWQ9cmVzdWx0LWZvcm0gJyArCiAgICAgICAgICdv
bnN1Ym1pdD0ic2V0UXVlcnlQYXJhbWV0ZXIoXCdyZXN1bHRcJywgcmVzdWx0LnZhbHVlKTsnICsK
ICAgICAgICAgJ3JldHVybiBmYWxzZTsiPlNob3cgYWxsIHRlc3RzIHdpdGggcmVzdWx0OiAnICsK
QEAgLTI1ODYsNyArMjU4Niw3IEBAIGZ1bmN0aW9uIHBvc3RIZWlnaHRDaGFuZ2VkTWVzc2FnZSgp
CiB9CiAKIGlmICh3aW5kb3cgIT0gcGFyZW50KQotICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCdibHVyJywgaGlkZVBvcHVwKTsKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cics
IHVpLnBvcHVwLmhpZGUpOwogCiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywg
ZnVuY3Rpb24oZSkgewogICAgIGlmIChlLmtleUlkZW50aWZpZXIgPT0gJ1UrMDAzRicgfHwgZS5r
ZXlJZGVudGlmaWVyID09ICdVKzAwQkYnKSB7CkBAIC0yNTk2LDYgKzI1OTYsNiBAQCBkb2N1bWVu
dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgewogICAgIH0gZWxzZSBp
ZiAoZS5rZXlJZGVudGlmaWVyID09ICdVKzAwMUInKSB7CiAgICAgICAgIC8vIGVzY2FwZSBrZXkK
ICAgICAgICAgaGlkZUxlZ2VuZCgpOwotICAgICAgICBoaWRlUG9wdXAoKTsKKyAgICAgICAgdWku
cG9wdXAuaGlkZSgpOwogICAgIH0KIH0sIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF9lbWJlZGRl
ZF91bml0dGVzdHMuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L2ZsYWtpbmVzc19kYXNoYm9hcmRfZW1iZWRkZWRfdW5pdHRlc3RzLmpzCmluZGV4IDU1OTliM2U2
NWM4MDdlYTlhZmNmYzE3OTBjZDBhYTgwNWIxZDA0ZmEuLjAzOTQ2N2E4NWExYTExNzdkMWE3Y2Mw
ODc3MjNhYzIyYTlmZWM1OWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF9lbWJlZGRlZF91bml0dGVzdHMuanMK
KysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3Nf
ZGFzaGJvYXJkX2VtYmVkZGVkX3VuaXR0ZXN0cy5qcwpAQCAtMjcsNyArMjcsNyBAQAogLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAogdGVzdCgnaGlkZVBvcHVwT25CbHVyJywgMiwgZnVuY3Rpb24oKSB7Ci0gICAg
c2hvd1BvcHVwKGRvY3VtZW50LmJvZHksICdkdW1teSBjb250ZW50Jyk7CisgICAgdWkucG9wdXAu
c2hvdyhkb2N1bWVudC5ib2R5LCAnZHVtbXkgY29udGVudCcpOwogICAgIG9rKGRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3IoJyNwb3B1cCcpKTsKIAogICAgIC8vIENhdXNlIHRoZSB3aW5kb3cgdG8gYmUg
Ymx1cnJlZC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF91bml0dGVzdHMuanMgYi9Ub29scy9UZXN0UmVzdWx0
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdW5pdHRlc3RzLmpz
CmluZGV4IGRiZGNlMzUyODBhMTEyZGQ3YjI0MTc3Yzk3MDkwNzA2MTQ5MzViZjAuLmYzYzU4ZmY0
M2E5MmVhZmZjYzYxNDkyMzZmNzFmN2I3YTA4NzQ4NWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF91bml0dGVz
dHMuanMKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFr
aW5lc3NfZGFzaGJvYXJkX3VuaXR0ZXN0cy5qcwpAQCAtMzY1LDcgKzM2NSw3IEBAIHRlc3QoJ2hl
YWRlckZvclRlc3RUYWJsZUh0bWwnLCAxLCBmdW5jdGlvbigpIHsKIHRlc3QoJ2h0bWxGb3JUZXN0
VHlwZVN3aXRjaGVyR3JvdXAnLCA2LCBmdW5jdGlvbigpIHsKICAgICB2YXIgY29udGFpbmVyID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgZ19jcm9zc0Rhc2hib2FyZFN0YXRl
LnRlc3RUeXBlID0gJ3VpX3Rlc3RzJzsKLSAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbEZv
clRlc3RUeXBlU3dpdGNoZXIodHJ1ZSk7CisgICAgY29udGFpbmVyLmlubmVySFRNTCA9IHVpLmh0
bWwudGVzdFR5cGVTd2l0Y2hlcih0cnVlKTsKICAgICB2YXIgc2VsZWN0cyA9IGNvbnRhaW5lci5x
dWVyeVNlbGVjdG9yQWxsKCdzZWxlY3QnKTsKICAgICBlcXVhbChzZWxlY3RzLmxlbmd0aCwgMik7
CiAgICAgdmFyIGdyb3VwID0gc2VsZWN0c1sxXTsKQEAgLTM3Myw3ICszNzMsNyBAQCB0ZXN0KCdo
dG1sRm9yVGVzdFR5cGVTd2l0Y2hlckdyb3VwJywgNiwgZnVuY3Rpb24oKSB7CiAgICAgZXF1YWwo
Z3JvdXAuY2hpbGRyZW4ubGVuZ3RoLCAzKTsKIAogICAgIGdfY3Jvc3NEYXNoYm9hcmRTdGF0ZS50
ZXN0VHlwZSA9ICdsYXlvdXQtdGVzdHMnOwotICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBodG1s
Rm9yVGVzdFR5cGVTd2l0Y2hlcih0cnVlKTsKKyAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdWku
aHRtbC50ZXN0VHlwZVN3aXRjaGVyKHRydWUpOwogICAgIHZhciBzZWxlY3RzID0gY29udGFpbmVy
LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NlbGVjdCcpOwogICAgIGVxdWFsKHNlbGVjdHMubGVuZ3RoLCAy
KTsKICAgICB2YXIgZ3JvdXAgPSBzZWxlY3RzWzFdOwpAQCAtNjQ3LDkgKzY0Nyw5IEBAIHRlc3Qo
J3NvcnRUZXN0cycsIDQsIGZ1bmN0aW9uKCkgewogfSk7CiAKIHRlc3QoJ3BvcHVwJywgMiwgZnVu
Y3Rpb24oKSB7Ci0gICAgc2hvd1BvcHVwKGRvY3VtZW50LmJvZHksICdkdW1teSBjb250ZW50Jyk7
CisgICAgdWkucG9wdXAuc2hvdyhkb2N1bWVudC5ib2R5LCAnZHVtbXkgY29udGVudCcpOwogICAg
IG9rKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwb3B1cCcpKTsKLSAgICBoaWRlUG9wdXAoKTsK
KyAgICB1aS5wb3B1cC5oaWRlKCk7CiAgICAgb2soIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNw
b3B1cCcpKTsKIH0pOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRp
Yy1kYXNoYm9hcmRzL3J1bi1lbWJlZGRlZC11bml0dGVzdHMuaHRtbCBiL1Rvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvcnVuLWVtYmVkZGVkLXVuaXR0ZXN0cy5odG1sCmlu
ZGV4IDE0MzIzNWYzZGZjMTZmMWVlOWI0MmExNGM0ZmZhZmE1MDc3ZWQzYzEuLmIxOTFjMGJhYWRi
M2QwNTViOWRiNzY3MWY4YTlhZjc0NDhlNDgwN2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvcnVuLWVtYmVkZGVkLXVuaXR0ZXN0cy5odG1sCisr
KyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvcnVuLWVtYmVkZGVk
LXVuaXR0ZXN0cy5odG1sCkBAIC00OSw2ICs0OSw3IEBAIHdpbmRvdy5wYXJlbnQgPSBudWxsOwog
CiA8c2NyaXB0IHNyYz0ic3RyaW5nLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJkYXNoYm9h
cmRfYmFzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0idWkuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9ImxvYWRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0ibG9hZGVyX3VuaXR0
ZXN0cy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9ydW4tdW5pdHRlc3RzLmh0bWwgYi9Ub29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3J1bi11bml0dGVzdHMuaHRtbAppbmRleCAx
ZmRiOTk4NjlhNWZiY2Q4OTZhMjk4NzBhY2Q4NWM3OTZiYzcyOTZmLi4wZmNhNzA2YWU5MDhiODJk
ODNjMjIwNWVjNmUzNmVhNzRiYTI4YzMyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2Vy
dmVyL3N0YXRpYy1kYXNoYm9hcmRzL3J1bi11bml0dGVzdHMuaHRtbAorKysgYi9Ub29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3J1bi11bml0dGVzdHMuaHRtbApAQCAtNDMs
NiArNDMsNyBAQCBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiA8c2NyaXB0IHNyYz0i
YnVpbGRlcnNfdW5pdHRlc3RzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJzdHJpbmcuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJ1aS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0ibG9hZGVyLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJsb2FkZXJfdW5pdHRlc3RzLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQ+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L3RpbWVsaW5lX2V4cGxvcmVyLmh0bWwgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmh0bWwKaW5kZXggM2E1OTQ0YTg4MDY2MGFjNjk3
YjIyMWY2MmQzOWE3NGFjMDE0ZGRlZC4uZjdiOGY5OTU3YmY0YTg3NWNiZjZmNGM0Yjg3ZmZiZjZl
NWE0Y2NmNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy90aW1lbGluZV9leHBsb3Jlci5odG1sCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
c3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbApAQCAtMTAwLDYgKzEwMCw3
IEBAIGJvZHkgewogPHNjcmlwdCBzcmM9ImxvYWRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0ic3RyaW5nLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJkYXNoYm9hcmRfYmFzZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0idWkuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KIHZhciBG
QUlMSU5HX1RFU1RTX0RBVEFTRVRfTkFNRSA9ICdGYWlsaW5nIHRlc3RzJzsKIApAQCAtMTM2LDgg
KzEzNyw4IEBAIGZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCiAKICAgICBpbml0Q3VycmVudEJ1aWxk
ZXJUZXN0UmVzdWx0cygpOwogCi0gICAgJCgndGVzdC10eXBlLXN3aXRjaGVyJykuaW5uZXJIVE1M
ID0gaHRtbEZvclRlc3RUeXBlU3dpdGNoZXIoIGZhbHNlLAotICAgICAgICBjaGVja2JveEhUTUwo
J2lnbm9yZUZsYWt5VGVzdHMnLCAnSWdub3JlIGZsYWt5IHRlc3RzJywgZ19jdXJyZW50U3RhdGUu
aWdub3JlRmxha3lUZXN0cywgJ2dfY3VycmVudEJ1aWxkSW5kZXggPSAtMScpCisgICAgJCgndGVz
dC10eXBlLXN3aXRjaGVyJykuaW5uZXJIVE1MID0gdWkuaHRtbC50ZXN0VHlwZVN3aXRjaGVyKCBm
YWxzZSwKKyAgICAgICAgdWkuaHRtbC5jaGVja2JveCgnaWdub3JlRmxha3lUZXN0cycsICdJZ25v
cmUgZmxha3kgdGVzdHMnLCBnX2N1cnJlbnRTdGF0ZS5pZ25vcmVGbGFreVRlc3RzLCAnZ19jdXJy
ZW50QnVpbGRJbmRleCA9IC0xJykKICAgICApOwogCiAgICAgdXBkYXRlVGltZWxpbmVGb3JCdWls
ZGVyKCk7CkBAIC0zMDksOCArMzEwLDggQEAgZnVuY3Rpb24gdXBkYXRlQnVpbGRJbnNwZWN0b3Io
cmVzdWx0cywgYnVpbGRlciwgZHlncmFwaCwgaW5kZXgpCiAKICAgICAvLyBSZXZpc2lvbiBsaW5r
KHMpCiAgICAgaWYgKCFzaG91bGRTaG93V2ViS2l0UmV2aXNpb25zT25seSgpKQotICAgICAgICBh
ZGRSb3coJ0Nocm9taXVtIGNoYW5nZTonLCBjaHJvbWl1bVJldmlzaW9uTGluayhyZXN1bHRzLCBp
bmRleCkpOwotICAgIGFkZFJvdygnV2ViS2l0IGNoYW5nZTonLCB3ZWJLaXRSZXZpc2lvbkxpbmso
cmVzdWx0cywgaW5kZXgpKTsKKyAgICAgICAgYWRkUm93KCdDaHJvbWl1bSBjaGFuZ2U6JywgdWku
aHRtbC5jaHJvbWl1bVJldmlzaW9uTGluayhyZXN1bHRzLCBpbmRleCkpOworICAgIGFkZFJvdygn
V2ViS2l0IGNoYW5nZTonLCB1aS5odG1sLndlYktpdFJldmlzaW9uTGluayhyZXN1bHRzLCBpbmRl
eCkpOwogCiAgICAgLy8gVGVzdCBzdGF0dXMvY291bnRzCiAgICAgYWRkUm93KCcnLCAnJyk7CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RyZWVt
YXAuaHRtbCBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1h
cC5odG1sCmluZGV4IDI1MmFjODExOTZkNWI0MDk2ZWZhMmQ3ZDVhZjhmYjUxMjAwZWQ3YTguLjQw
NDA2YzBiNDU5NGQ2MzE0MzdhMjI4ZTIxYmY3ZDZlMWI2NWI5YjEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5odG1sCisrKyBiL1Rv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5odG1sCkBAIC0x
MTEsNiArMTExLDcgQEAgdGQgewogPHNjcmlwdCBzcmM9ImxvYWRlci5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0ic3RyaW5nLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJkYXNoYm9hcmRf
YmFzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0idWkuanMiPjwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9J3dlYnRyZWVtYXAuanMnPjwvc2NyaXB0PgogCiA8ZGl2IGlkPSdoZWFkZXItY29udGFp
bmVyJz48L2Rpdj4KQEAgLTIzMCw3ICsyMzEsNyBAQCB2YXIgZ193ZWJUcmVlOwogCiBmdW5jdGlv
biBnZW5lcmF0ZVBhZ2UoKQogewotICAgICQoJ2hlYWRlci1jb250YWluZXInKS5pbm5lckhUTUwg
PSBodG1sRm9yVGVzdFR5cGVTd2l0Y2hlcigpOworICAgICQoJ2hlYWRlci1jb250YWluZXInKS5p
bm5lckhUTUwgPSB1aS5odG1sLnRlc3RUeXBlU3dpdGNoZXIoKTsKIAogICAgIGdfaXNHZW5lcmF0
aW5nUGFnZSA9IHRydWU7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvdWkuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL3VpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzMGQ5M2QzZWY0MGQ3NDMxMzIxZDA0NjA5NTdmZDMw
MTJiOGUyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRp
Yy1kYXNoYm9hcmRzL3VpLmpzCkBAIC0wLDAgKzEsMjAxIEBACisvLyBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
Ky8vICAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24u
CisvLyAgICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLy8gQGZpbGVvdmVydmlldyBD
b21tb24gdXRpbGl0aWVzIGZvciBnZW5lcmF0aW5nIHVpIGZvciB1c2UgaW4gdGhlCisvLyBkYXNo
Ym9hcmRzLgordmFyIHVpID0gdWkgfHwge307CisKKyhmdW5jdGlvbigpIHsKKwordWkucG9wdXAg
PSB7fTsKKwordWkucG9wdXAuaGlkZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgcG9wdXAgPSAk
KCdwb3B1cCcpOworICAgIGlmIChwb3B1cCkgeworICAgICAgICBwb3B1cC5wYXJlbnROb2RlLnJl
bW92ZUNoaWxkKHBvcHVwKTsKKyAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcign
bW91c2Vkb3duJywgdWkucG9wdXAuX2hhbmRsZU1vdXNlRG93biwgZmFsc2UpOworICAgIH0KK30K
KwordWkucG9wdXAuc2hvdyA9IGZ1bmN0aW9uKHRhcmdldCwgaHRtbCkKK3sKKyAgICB2YXIgcG9w
dXAgPSAkKCdwb3B1cCcpOworICAgIGlmICghcG9wdXApIHsKKyAgICAgICAgcG9wdXAgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgcG9wdXAuaWQgPSAncG9wdXAnOwor
ICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBvcHVwKTsKKyAgICAgICAgZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdWkucG9wdXAuX2hhbmRsZU1vdXNlRG93
biwgZmFsc2UpOworICAgIH0KKworICAgIC8vIFNldCBodG1sIGZpcnN0IHNvIHRoYXQgd2UgY2Fu
IGdldCBhY2N1cmF0ZSBzaXplIG1ldHJpY3Mgb24gdGhlIHBvcHVwLgorICAgIHBvcHVwLmlubmVy
SFRNTCA9IGh0bWw7CisKKyAgICB2YXIgdGFyZ2V0UmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKTsKKworICAgIHZhciB4ID0gTWF0aC5taW4odGFyZ2V0UmVjdC5sZWZ0IC0gMTAs
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIHBvcHVwLm9mZnNldFdpZHRo
KTsKKyAgICB4ID0gTWF0aC5tYXgoMCwgeCk7CisgICAgcG9wdXAuc3R5bGUubGVmdCA9IHggKyBk
b2N1bWVudC5ib2R5LnNjcm9sbExlZnQgKyAncHgnOworCisgICAgdmFyIHkgPSB0YXJnZXRSZWN0
LnRvcCArIHRhcmdldFJlY3QuaGVpZ2h0OworICAgIGlmICh5ICsgcG9wdXAub2Zmc2V0SGVpZ2h0
ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkKKyAgICAgICAgeSA9IHRh
cmdldFJlY3QudG9wIC0gcG9wdXAub2Zmc2V0SGVpZ2h0OworICAgIHkgPSBNYXRoLm1heCgwLCB5
KTsKKyAgICBwb3B1cC5zdHlsZS50b3AgPSB5ICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgKyAn
cHgnOworfQorCit1aS5wb3B1cC5faGFuZGxlTW91c2VEb3duID0gZnVuY3Rpb24oZSkgeworICAg
IC8vIENsZWFyIHRoZSBvcGVuIHBvcHVwLCB1bmxlc3MgdGhlIGNsaWNrIHdhcyBpbnNpZGUgdGhl
IHBvcHVwLgorICAgIHZhciBwb3B1cCA9ICQoJ3BvcHVwJyk7CisgICAgaWYgKHBvcHVwICYmIGUu
dGFyZ2V0ICE9IHBvcHVwICYmICEocG9wdXAuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZS50YXJn
ZXQpICYgMTYpKSAKKyAgICAgICAgdWkucG9wdXAuaGlkZSgpOyAgICAKK30KKwordWkuaHRtbCA9
IHt9OworCit1aS5odG1sLmNoZWNrYm94ID0gZnVuY3Rpb24ocXVlcnlQYXJhbWV0ZXIsIGxhYmVs
LCBpc0NoZWNrZWQsIG9wdF9leHRyYUphdmFTY3JpcHQpCit7CisgICAgdmFyIGpzID0gb3B0X2V4
dHJhSmF2YVNjcmlwdCB8fCAnJzsKKyAgICByZXR1cm4gJzxsYWJlbCBzdHlsZT0icGFkZGluZy1s
ZWZ0OiAyZW0iPicgKworICAgICAgICAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBvbmNoYW5nZT0i
dG9nZ2xlUXVlcnlQYXJhbWV0ZXIoXCcnICsgcXVlcnlQYXJhbWV0ZXIgKyAnXCcpOycgKyBqcyAr
ICciICcgKworICAgICAgICAgICAgKGlzQ2hlY2tlZCA/ICdjaGVja2VkJyA6ICcnKSArICc+JyAr
IGxhYmVsICsKKyAgICAgICAgJzwvbGFiZWw+ICc7Cit9CisKK3VpLmh0bWwuc2VsZWN0ID0gZnVu
Y3Rpb24obGFiZWwsIHF1ZXJ5UGFyYW1ldGVyLCBvcHRpb25zKQoreworICAgIHZhciBodG1sID0g
JzxsYWJlbCBzdHlsZT0icGFkZGluZy1sZWZ0OiAyZW0iPicgKyBsYWJlbCArICc6ICcgKworICAg
ICAgICAnPHNlbGVjdCBvbmNoYW5nZT0ic2V0UXVlcnlQYXJhbWV0ZXIoXCcnICsgcXVlcnlQYXJh
bWV0ZXIgKyAnXCcsIHRoaXNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSkiPic7CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHZh
bHVlID0gb3B0aW9uc1tpXTsKKyAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT0iJyArIHZh
bHVlICsgJyIgJyArCisgICAgICAgICAgICAocXVlcnlQYXJhbWV0ZXJWYWx1ZShxdWVyeVBhcmFt
ZXRlcikgPT0gdmFsdWUgPyAnc2VsZWN0ZWQnIDogJycpICsKKyAgICAgICAgICAgICc+JyArIHZh
bHVlICsgJzwvb3B0aW9uPicKKyAgICB9CisgICAgaHRtbCArPSAnPC9zZWxlY3Q+PC9sYWJlbD4g
JzsKKyAgICByZXR1cm4gaHRtbDsKK30KKworLy8gUmV0dXJucyB0aGUgSFRNTCBmb3IgdGhlIHNl
bGVjdCBlbGVtZW50IHRvIHN3aXRjaCB0byBkaWZmZXJlbnQgdGVzdFR5cGVzLgordWkuaHRtbC50
ZXN0VHlwZVN3aXRjaGVyID0gZnVuY3Rpb24ob3B0X25vQnVpbGRlck1lbnUsIG9wdF9leHRyYUh0
bWwsIG9wdF9pbmNsdWRlTm9uZUJ1aWxkZXIpCit7CisgICAgdmFyIGh0bWwgPSAnPGRpdiBzdHls
ZT0iYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkIj4nOworICAgIGh0bWwgKz0gJycgKworICAgICAg
ICB1aS5odG1sLl9kYXNoYm9hcmRMaW5rKCdTdGF0cycsICdhZ2dyZWdhdGVfcmVzdWx0cy5odG1s
JykgKworICAgICAgICB1aS5odG1sLl9kYXNoYm9hcmRMaW5rKCdUaW1lbGluZScsICd0aW1lbGlu
ZV9leHBsb3Jlci5odG1sJykgKworICAgICAgICB1aS5odG1sLl9kYXNoYm9hcmRMaW5rKCdSZXN1
bHRzJywgJ2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbCcpICsKKyAgICAgICAgdWkuaHRtbC5fZGFz
aGJvYXJkTGluaygnVHJlZW1hcCcsICd0cmVlbWFwLmh0bWwnKTsKKworICAgIGh0bWwgKz0gdWku
aHRtbC5zZWxlY3QoJ1Rlc3QgdHlwZScsICd0ZXN0VHlwZScsIFRFU1RfVFlQRVMpOworCisgICAg
aWYgKCFvcHRfbm9CdWlsZGVyTWVudSkgeworICAgICAgICB2YXIgYnVpbGRlcnNGb3JNZW51ID0g
T2JqZWN0LmtleXMoY3VycmVudEJ1aWxkZXJzKCkpOworICAgICAgICBpZiAob3B0X2luY2x1ZGVO
b25lQnVpbGRlcikKKyAgICAgICAgICAgIGJ1aWxkZXJzRm9yTWVudS51bnNoaWZ0KCctLS0tLS0t
LS0tLS0tLScpOworICAgICAgICBodG1sICs9IHVpLmh0bWwuc2VsZWN0KCdCdWlsZGVyJywgJ2J1
aWxkZXInLCBidWlsZGVyc0Zvck1lbnUpOworICAgIH0KKworICAgIGh0bWwgKz0gdWkuaHRtbC5z
ZWxlY3QoJ0dyb3VwJywgJ2dyb3VwJywKKyAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudEJ1aWxk
ZXJHcm91cENhdGVnb3J5KCkpKTsKKworICAgIGlmICghaXNUcmVlTWFwKCkpCisgICAgICAgIGh0
bWwgKz0gdWkuaHRtbC5jaGVja2JveCgnc2hvd0FsbFJ1bnMnLCAnU2hvdyBhbGwgcnVucycsIGdf
Y3Jvc3NEYXNoYm9hcmRTdGF0ZS5zaG93QWxsUnVucyk7CisKKyAgICBpZiAob3B0X2V4dHJhSHRt
bCkKKyAgICAgICAgaHRtbCArPSBvcHRfZXh0cmFIdG1sOworICAgIHJldHVybiBodG1sICsgJzwv
ZGl2Pic7Cit9CisKK3VpLmh0bWwuX2xvYWREYXNoYm9hcmQgPSBmdW5jdGlvbihmaWxlTmFtZSkK
K3sKKyAgICB2YXIgcGF0aE5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CisgICAgcGF0
aE5hbWUgPSBwYXRoTmFtZS5zdWJzdHJpbmcoMCwgcGF0aE5hbWUubGFzdEluZGV4T2YoJy8nKSAr
IDEpOworICAgIHdpbmRvdy5sb2NhdGlvbiA9IHBhdGhOYW1lICsgZmlsZU5hbWUgKyB3aW5kb3cu
bG9jYXRpb24uaGFzaDsKK30KKwordWkuaHRtbC5fdG9wTGluayA9IGZ1bmN0aW9uKGh0bWwsIG9u
Q2xpY2ssIGlzU2VsZWN0ZWQpCit7CisgICAgdmFyIGNzc1RleHQgPSBpc1NlbGVjdGVkID8gJ2Zv
bnQtd2VpZ2h0OiBib2xkOycgOiAnY29sb3I6Ymx1ZTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5l
O2N1cnNvcjpwb2ludGVyOyc7CisgICAgY3NzVGV4dCArPSAnbWFyZ2luOiAwIDVweDsnOworICAg
IHJldHVybiAnPHNwYW4gc3R5bGU9IicgKyBjc3NUZXh0ICsgJyIgb25jbGljaz0iJyArIG9uQ2xp
Y2sgKyAnIj4nICsgaHRtbCArICc8L3NwYW4+JzsKK30KKwordWkuaHRtbC5fZGFzaGJvYXJkTGlu
ayA9IGZ1bmN0aW9uKGh0bWwsIGZpbGVOYW1lKQoreworICAgIHZhciBwYXRoTmFtZSA9IHdpbmRv
dy5sb2NhdGlvbi5wYXRobmFtZTsKKyAgICB2YXIgY3VycmVudEZpbGVOYW1lID0gcGF0aE5hbWUu
c3Vic3RyaW5nKHBhdGhOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKTsKKyAgICB2YXIgaXNTZWxl
Y3RlZCA9IGN1cnJlbnRGaWxlTmFtZSA9PSBmaWxlTmFtZTsKKyAgICB2YXIgb25DbGljayA9ICd1
aS5odG1sLl9sb2FkRGFzaGJvYXJkKFwnJyArIGZpbGVOYW1lICsgJ1wnKSc7CisgICAgcmV0dXJu
IHVpLmh0bWwuX3RvcExpbmsoaHRtbCwgb25DbGljaywgaXNTZWxlY3RlZCk7Cit9CisKK3VpLmh0
bWwuX3JldmlzaW9uTGluayA9IGZ1bmN0aW9uKHJlc3VsdHMsIGluZGV4LCBrZXksIHNpbmdsZVVy
bFRlbXBsYXRlLCByYW5nZVVybFRlbXBsYXRlKQoreworICAgIHZhciBjdXJyZW50UmV2aXNpb24g
PSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXhdLCAxMCk7CisgICAgdmFyIHByZXZpb3VzUmV2
aXNpb24gPSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXggKyAxXSwgMTApOworCisgICAgZnVu
Y3Rpb24gc2luZ2xlVXJsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzaW5nbGVVcmxUZW1wbGF0
ZS5yZXBsYWNlKCc8cmV2PicsIGN1cnJlbnRSZXZpc2lvbik7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcmFuZ2VVcmwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJhbmdlVXJsVGVtcGxhdGUucmVw
bGFjZSgnPHJldjE+JywgY3VycmVudFJldmlzaW9uKS5yZXBsYWNlKCc8cmV2Mj4nLCBwcmV2aW91
c1JldmlzaW9uICsgMSk7CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRSZXZpc2lvbiA9PSBwcmV2
aW91c1JldmlzaW9uKQorICAgICAgICByZXR1cm4gJ0F0IDxhIGhyZWY9IicgKyBzaW5nbGVVcmwo
KSArICciPnInICsgY3VycmVudFJldmlzaW9uICAgICsgJzwvYT4nOworICAgIGVsc2UgaWYgKGN1
cnJlbnRSZXZpc2lvbiAtIHByZXZpb3VzUmV2aXNpb24gPT0gMSkKKyAgICAgICAgcmV0dXJuICc8
YSBocmVmPSInICsgc2luZ2xlVXJsKCkgKyAnIj5yJyArIGN1cnJlbnRSZXZpc2lvbiAgICArICc8
L2E+JzsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAnPGEgaHJlZj0iJyArIHJhbmdlVXJsKCkg
KyAnIj5yJyArIChwcmV2aW91c1JldmlzaW9uICsgMSkgKyAnIHRvIHInICsgY3VycmVudFJldmlz
aW9uICsgJzwvYT4nOworfQorCit1aS5odG1sLmNocm9taXVtUmV2aXNpb25MaW5rID0gZnVuY3Rp
b24ocmVzdWx0cywgaW5kZXgpCit7CisgICAgcmV0dXJuIHVpLmh0bWwuX3JldmlzaW9uTGluaygK
KyAgICAgICAgcmVzdWx0cywKKyAgICAgICAgaW5kZXgsCisgICAgICAgIENIUk9NRV9SRVZJU0lP
TlNfS0VZLAorICAgICAgICAnaHR0cDovL3NyYy5jaHJvbWl1bS5vcmcvdmlld3ZjL2Nocm9tZT92
aWV3PXJldiZyZXZpc2lvbj08cmV2PicsCisgICAgICAgICdodHRwOi8vYnVpbGQuY2hyb21pdW0u
b3JnL2YvY2hyb21pdW0vcGVyZi9kYXNoYm9hcmQvdWkvY2hhbmdlbG9nLmh0bWw/dXJsPS90cnVu
ay9zcmMmcmFuZ2U9PHJldjI+OjxyZXYxPiZtb2RlPWh0bWwnKTsKK30KKwordWkuaHRtbC53ZWJL
aXRSZXZpc2lvbkxpbmsgPSBmdW5jdGlvbihyZXN1bHRzLCBpbmRleCkKK3sKKyAgICByZXR1cm4g
dWkuaHRtbC5fcmV2aXNpb25MaW5rKAorICAgICAgICByZXN1bHRzLAorICAgICAgICBpbmRleCwK
KyAgICAgICAgV0VCS0lUX1JFVklTSU9OU19LRVksCisgICAgICAgICdodHRwOi8vdHJhYy53ZWJr
aXQub3JnL2NoYW5nZXNldC88cmV2PicsCisgICAgICAgICdodHRwOi8vdHJhYy53ZWJraXQub3Jn
L2xvZy90cnVuay8/cmV2PTxyZXYxPiZzdG9wX3Jldj08cmV2Mj4mbGltaXQ9MTAwJnZlcmJvc2U9
b24nKTsKK30KKworfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191889</attachid>
            <date>2013-03-06 19:01:17 -0800</date>
            <delta_ts>2013-03-06 19:50:21 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-111621-20130306185722.patch</filename>
            <type>text/plain</type>
            <size>26862</size>
            <attacher name="Julie Parent">jparent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0OTY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmQ0MDUyMzc1MTZiZGQ1YTVhMjUxNDA1ZTNkZDYyNDFi
ZGI2MDhiYS4uYjcyNDIxNTZhMzQ2NTAxYjhjY2YxMTY0YTZjMTBjMDNiNzg3YzY0MCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM2
IEBACiAyMDEzLTAzLTA2ICBKdWxpZSBQYXJlbnQgIDxqcGFyZW50QGNocm9taXVtLm9yZz4KIAor
ICAgICAgICBEYXNoYm9hcmQgY2xlYW51cDogTW92ZSBhbGwgZGFzaGJvYXJkIHVpIHJlbGF0ZWQg
Y29kZSBpbnRvIHVpLmpzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTExNjIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KKyAgICAg
ICAgCisgICAgICAgIENyZWF0ZXMgdWkuanMsIGEgcGFja2FnZSBmb3IgdGhlIGNvbW1vbiBVSSBj
b2RlIHRoZSB2YXJpb3VzCisgICAgICAgIGRhc2hib2FyZHMgdXNlLiBIVE1MIGdlbmVyYXRpb24g
aXMgbm93IGluIHRoZSB1aS5odG1sIG5hbWVzcGFjZQorICAgICAgICBhbmQgcG9wdXAgaGFuZGxp
bmcgaXMgaW4gdWkucG9wdXAuCisgICAgICAgIEFsc28gbW92ZXMgdGhlIGV2ZW50IGxpc3Rlbmlu
ZyBmb3IgcG9wdXBzIHRvIHVpLnBvcHVwLnNob3cgYW5kCisgICAgICAgIHJlbW92ZXMgaXQgb24g
dWkucG9wdXAuaGlkIHJhdGhlciB0aGFuIGhhdmluZyBsaXN0ZW5lciBhbHdheXMKKyAgICAgICAg
YXJvdW5kLgorCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9h
Z2dyZWdhdGVfcmVzdWx0cy5odG1sOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGlj
LWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanM6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWw6CisgICAgICAgICog
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmpz
OgorICAgICAgICAoc2hvd1BvcHVwRm9yQnVpbGQpOgorICAgICAgICAoaHRtbEZvck5hdkJhcik6
CisgICAgICAgIChnZW5lcmF0ZVBhZ2VGb3JJbmRpdmlkdWFsVGVzdHMuaWYpOgorICAgICAgICAo
Z2VuZXJhdGVQYWdlRm9ySW5kaXZpZHVhbFRlc3RzKToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2Vy
dmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfZW1iZWRkZWRfdW5pdHRl
c3RzLmpzOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxh
a2luZXNzX2Rhc2hib2FyZF91bml0dGVzdHMuanM6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9ydW4tZW1iZWRkZWQtdW5pdHRlc3RzLmh0bWw6CisgICAgICAg
ICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9ydW4tdW5pdHRlc3RzLmh0bWw6
CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90aW1lbGluZV9l
eHBsb3Jlci5odG1sOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2Fy
ZHMvdHJlZW1hcC5odG1sOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvdWkuanM6IEFkZGVkLgorICAgICAgICAoLik6CisKKzIwMTMtMDMtMDYgIEp1bGllIFBh
cmVudCAgPGpwYXJlbnRAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIERhc2hib2FyZCBjbGVhbnVw
OiByZW1vdmUgZGFzaGJvYXJkIHRpbWUgbG9nZ2luZy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTYwOAogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWwgYi9U
b29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRz
Lmh0bWwKaW5kZXggYTczNTExMjJjYjBhMDcyODRkMzQ3YTJkZDY2OTYzMTJlYTkwZTVjZS4uOTYx
NzFhOWFhZmRjMDk4Mzg5NGM2YjQyNTU2NmQwYWE4OTExMWVmZiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5odG1s
CisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYWdncmVnYXRl
X3Jlc3VsdHMuaHRtbApAQCAtNTQsNiArNTQsNyBAQCBpbWcgewogPHNjcmlwdCBzcmM9ImxvYWRl
ci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0ic3RyaW5nLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJkYXNoYm9hcmRfYmFzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0idWkuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdD4KIC8vIEBmaWxlb3ZlcnZpZXcgQ3JlYXRlcyBhIGRhc2hib2Fy
ZCBmb3IgdHJhY2tpbmcgbnVtYmVyIG9mIHBhc3Nlcy9mYWlsdXJlcyBwZXIgcnVuLgogLy8KQEAg
LTY4LDcgKzY5LDcgQEAgaW1nIHsKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogZnVuY3Rpb24gZ2Vu
ZXJhdGVQYWdlKCkKIHsKLSAgICB2YXIgaHRtbCA9IGh0bWxGb3JUZXN0VHlwZVN3aXRjaGVyKHRy
dWUpICsgJzxicj4nOworICAgIHZhciBodG1sID0gdWkuaHRtbC50ZXN0VHlwZVN3aXRjaGVyKHRy
dWUpICsgJzxicj4nOwogICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gY3VycmVudEJ1aWxkZXJzKCkp
CiAgICAgICAgIGh0bWwgKz0gaHRtbEZvckJ1aWxkZXIoYnVpbGRlcik7CiAgICAgZG9jdW1lbnQu
Ym9keS5pbm5lckhUTUwgPSBodG1sOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qcyBiL1Rvb2xzL1Rlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMKaW5kZXggNGZjMTNmMzE2
M2JjNjFmM2JjMmM3NGYxZTdkMTE5MTYzMzA2NzVkOS4uNTU3MmU3ZDljMTYwMTQ0MDAyN2EyOGM5
YWQzYmJkMjA2ZTY2YWU3ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0
aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qcworKysgYi9Ub29scy9UZXN0UmVzdWx0U2Vy
dmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCkBAIC01NDgsMzggKzU0OCw2
IEBAIGZ1bmN0aW9uIGpvaW5QYXJhbWV0ZXJzKHN0YXRlT2JqZWN0KQogICAgIHJldHVybiBzdGF0
ZS5qb2luKCcmJyk7CiB9CiAKLWZ1bmN0aW9uIGhpZGVQb3B1cCgpCi17Ci0gICAgdmFyIHBvcHVw
ID0gJCgncG9wdXAnKTsKLSAgICBpZiAocG9wdXApCi0gICAgICAgIHBvcHVwLnBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGQocG9wdXApOwotfQotCi1mdW5jdGlvbiBzaG93UG9wdXAodGFyZ2V0LCBodG1s
KQotewotICAgIHZhciBwb3B1cCA9ICQoJ3BvcHVwJyk7Ci0gICAgaWYgKCFwb3B1cCkgewotICAg
ICAgICBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICBwb3B1
cC5pZCA9ICdwb3B1cCc7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocG9wdXAp
OwotICAgIH0KLQotICAgIC8vIFNldCBodG1sIGZpcnN0IHNvIHRoYXQgd2UgY2FuIGdldCBhY2N1
cmF0ZSBzaXplIG1ldHJpY3Mgb24gdGhlIHBvcHVwLgotICAgIHBvcHVwLmlubmVySFRNTCA9IGh0
bWw7Ci0KLSAgICB2YXIgdGFyZ2V0UmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KTsKLQotICAgIHZhciB4ID0gTWF0aC5taW4odGFyZ2V0UmVjdC5sZWZ0IC0gMTAsIGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIHBvcHVwLm9mZnNldFdpZHRoKTsKLSAgICB4
ID0gTWF0aC5tYXgoMCwgeCk7Ci0gICAgcG9wdXAuc3R5bGUubGVmdCA9IHggKyBkb2N1bWVudC5i
b2R5LnNjcm9sbExlZnQgKyAncHgnOwotCi0gICAgdmFyIHkgPSB0YXJnZXRSZWN0LnRvcCArIHRh
cmdldFJlY3QuaGVpZ2h0OwotICAgIGlmICh5ICsgcG9wdXAub2Zmc2V0SGVpZ2h0ID4gZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkKLSAgICAgICAgeSA9IHRhcmdldFJlY3Qu
dG9wIC0gcG9wdXAub2Zmc2V0SGVpZ2h0OwotICAgIHkgPSBNYXRoLm1heCgwLCB5KTsKLSAgICBw
b3B1cC5zdHlsZS50b3AgPSB5ICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgKyAncHgnOwotfQot
CiAvLyBDcmVhdGUgYSBuZXcgZnVuY3Rpb24gd2l0aCBzb21lIG9mIGl0cyBhcmd1ZW1lbnRzCiAv
LyBwcmUtZmlsbGVkLgogLy8gVGFrZW4gZnJvbSBnb29nLnBhcnRpYWwgaW4gdGhlIENsb3N1cmUg
bGlicmFyeS4KQEAgLTU5OSw3ICs1NjcsNyBAQCBmdW5jdGlvbiBwYXJ0aWFsKGZuLCB2YXJfYXJn
cykKICAgICB9OwogfTsKIAotLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgZXhwZWN0YXRpb3Nu
IG1hcCBmb3IgdGhlIGN1cnJlbnQgdGVzdFR5cGUuCisvLyBSZXR1cm5zIHRoZSBhcHByb3ByaWF0
ZSBleHBlY3RhdGlvbnMgbWFwIGZvciB0aGUgY3VycmVudCB0ZXN0VHlwZS4KIGZ1bmN0aW9uIGV4
cGVjdGF0aW9uc01hcCgpCiB7CiAgICAgcmV0dXJuIGlzTGF5b3V0VGVzdFJlc3VsdHMoKSA/IExB
WU9VVF9URVNUX0VYUEVDVEFUSU9OU19NQVBfIDogR1RFU1RfRVhQRUNUQVRJT05TX01BUF87CkBA
IC02MTUsMTI2ICs1ODMsNiBAQCBmdW5jdGlvbiBxdWVyeVBhcmFtZXRlclZhbHVlKHBhcmFtZXRl
cikKICAgICByZXR1cm4gZ19jdXJyZW50U3RhdGVbcGFyYW1ldGVyXSB8fCBnX2Nyb3NzRGFzaGJv
YXJkU3RhdGVbcGFyYW1ldGVyXTsKIH0KIAotZnVuY3Rpb24gY2hlY2tib3hIVE1MKHF1ZXJ5UGFy
YW1ldGVyLCBsYWJlbCwgaXNDaGVja2VkLCBvcHRfZXh0cmFKYXZhU2NyaXB0KQotewotICAgIHZh
ciBqcyA9IG9wdF9leHRyYUphdmFTY3JpcHQgfHwgJyc7Ci0gICAgcmV0dXJuICc8bGFiZWwgc3R5
bGU9InBhZGRpbmctbGVmdDogMmVtIj4nICsKLSAgICAgICAgJzxpbnB1dCB0eXBlPSJjaGVja2Jv
eCIgb25jaGFuZ2U9InRvZ2dsZVF1ZXJ5UGFyYW1ldGVyKFwnJyArIHF1ZXJ5UGFyYW1ldGVyICsg
J1wnKTsnICsganMgKyAnIiAnICsKLSAgICAgICAgICAgIChpc0NoZWNrZWQgPyAnY2hlY2tlZCcg
OiAnJykgKyAnPicgKyBsYWJlbCArCi0gICAgICAgICc8L2xhYmVsPiAnOwotfQotCi1mdW5jdGlv
biBzZWxlY3RIVE1MKGxhYmVsLCBxdWVyeVBhcmFtZXRlciwgb3B0aW9ucykKLXsKLSAgICB2YXIg
aHRtbCA9ICc8bGFiZWwgc3R5bGU9InBhZGRpbmctbGVmdDogMmVtIj4nICsgbGFiZWwgKyAnOiAn
ICsKLSAgICAgICAgJzxzZWxlY3Qgb25jaGFuZ2U9InNldFF1ZXJ5UGFyYW1ldGVyKFwnJyArIHF1
ZXJ5UGFyYW1ldGVyICsgJ1wnLCB0aGlzW3RoaXMuc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4nOwot
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IHZhciB2YWx1ZSA9IG9wdGlvbnNbaV07Ci0gICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9
IicgKyB2YWx1ZSArICciICcgKwotICAgICAgICAgICAgKHF1ZXJ5UGFyYW1ldGVyVmFsdWUocXVl
cnlQYXJhbWV0ZXIpID09IHZhbHVlID8gJ3NlbGVjdGVkJyA6ICcnKSArCi0gICAgICAgICAgICAn
PicgKyB2YWx1ZSArICc8L29wdGlvbj4nCi0gICAgfQotICAgIGh0bWwgKz0gJzwvc2VsZWN0Pjwv
bGFiZWw+ICc7Ci0gICAgcmV0dXJuIGh0bWw7Ci19Ci0KLS8vIFJldHVybnMgdGhlIEhUTUwgZm9y
IHRoZSBzZWxlY3QgZWxlbWVudCB0byBzd2l0Y2ggdG8gZGlmZmVyZW50IHRlc3RUeXBlcy4KLWZ1
bmN0aW9uIGh0bWxGb3JUZXN0VHlwZVN3aXRjaGVyKG9wdF9ub0J1aWxkZXJNZW51LCBvcHRfZXh0
cmFIdG1sLCBvcHRfaW5jbHVkZU5vbmVCdWlsZGVyKQotewotICAgIHZhciBodG1sID0gJzxkaXYg
c3R5bGU9ImJvcmRlci1ib3R0b206MXB4IGRhc2hlZCI+JzsKLSAgICBodG1sICs9ICcnICsKLSAg
ICAgICAgaHRtbEZvckRhc2hib2FyZExpbmsoJ1N0YXRzJywgJ2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0
bWwnKSArCi0gICAgICAgIGh0bWxGb3JEYXNoYm9hcmRMaW5rKCdUaW1lbGluZScsICd0aW1lbGlu
ZV9leHBsb3Jlci5odG1sJykgKwotICAgICAgICBodG1sRm9yRGFzaGJvYXJkTGluaygnUmVzdWx0
cycsICdmbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwnKSArCi0gICAgICAgIGh0bWxGb3JEYXNoYm9h
cmRMaW5rKCdUcmVlbWFwJywgJ3RyZWVtYXAuaHRtbCcpOwotCi0gICAgaHRtbCArPSBzZWxlY3RI
VE1MKCdUZXN0IHR5cGUnLCAndGVzdFR5cGUnLCBURVNUX1RZUEVTKTsKLQotICAgIGlmICghb3B0
X25vQnVpbGRlck1lbnUpIHsKLSAgICAgICAgdmFyIGJ1aWxkZXJzRm9yTWVudSA9IE9iamVjdC5r
ZXlzKGN1cnJlbnRCdWlsZGVycygpKTsKLSAgICAgICAgaWYgKG9wdF9pbmNsdWRlTm9uZUJ1aWxk
ZXIpCi0gICAgICAgICAgICBidWlsZGVyc0Zvck1lbnUudW5zaGlmdCgnLS0tLS0tLS0tLS0tLS0n
KTsKLSAgICAgICAgaHRtbCArPSBzZWxlY3RIVE1MKCdCdWlsZGVyJywgJ2J1aWxkZXInLCBidWls
ZGVyc0Zvck1lbnUpOwotICAgIH0KLQotICAgIGh0bWwgKz0gc2VsZWN0SFRNTCgnR3JvdXAnLCAn
Z3JvdXAnLAotICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50QnVpbGRlckdyb3VwQ2F0ZWdvcnko
KSkpOwotCi0gICAgaWYgKCFpc1RyZWVNYXAoKSkKLSAgICAgICAgaHRtbCArPSBjaGVja2JveEhU
TUwoJ3Nob3dBbGxSdW5zJywgJ1Nob3cgYWxsIHJ1bnMnLCBnX2Nyb3NzRGFzaGJvYXJkU3RhdGUu
c2hvd0FsbFJ1bnMpOwotCi0gICAgaWYgKG9wdF9leHRyYUh0bWwpCi0gICAgICAgIGh0bWwgKz0g
b3B0X2V4dHJhSHRtbDsKLSAgICByZXR1cm4gaHRtbCArICc8L2Rpdj4nOwotfQotCi1mdW5jdGlv
biBsb2FkRGFzaGJvYXJkKGZpbGVOYW1lKQotewotICAgIHZhciBwYXRoTmFtZSA9IHdpbmRvdy5s
b2NhdGlvbi5wYXRobmFtZTsKLSAgICBwYXRoTmFtZSA9IHBhdGhOYW1lLnN1YnN0cmluZygwLCBw
YXRoTmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7Ci0gICAgd2luZG93LmxvY2F0aW9uID0gcGF0
aE5hbWUgKyBmaWxlTmFtZSArIHdpbmRvdy5sb2NhdGlvbi5oYXNoOwotfQotCi1mdW5jdGlvbiBo
dG1sRm9yVG9wTGluayhodG1sLCBvbkNsaWNrLCBpc1NlbGVjdGVkKQotewotICAgIHZhciBjc3NU
ZXh0ID0gaXNTZWxlY3RlZCA/ICdmb250LXdlaWdodDogYm9sZDsnIDogJ2NvbG9yOmJsdWU7dGV4
dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcjsnOwotICAgIGNzc1RleHQgKz0g
J21hcmdpbjogMCA1cHg7JzsKLSAgICByZXR1cm4gJzxzcGFuIHN0eWxlPSInICsgY3NzVGV4dCAr
ICciIG9uY2xpY2s9IicgKyBvbkNsaWNrICsgJyI+JyArIGh0bWwgKyAnPC9zcGFuPic7Ci19Ci0K
LWZ1bmN0aW9uIGh0bWxGb3JEYXNoYm9hcmRMaW5rKGh0bWwsIGZpbGVOYW1lKQotewotICAgIHZh
ciBwYXRoTmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTsKLSAgICB2YXIgY3VycmVudEZp
bGVOYW1lID0gcGF0aE5hbWUuc3Vic3RyaW5nKHBhdGhOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAx
KTsKLSAgICB2YXIgaXNTZWxlY3RlZCA9IGN1cnJlbnRGaWxlTmFtZSA9PSBmaWxlTmFtZTsKLSAg
ICB2YXIgb25DbGljayA9ICdsb2FkRGFzaGJvYXJkKFwnJyArIGZpbGVOYW1lICsgJ1wnKSc7Ci0g
ICAgcmV0dXJuIGh0bWxGb3JUb3BMaW5rKGh0bWwsIG9uQ2xpY2ssIGlzU2VsZWN0ZWQpOwotfQot
Ci1mdW5jdGlvbiByZXZpc2lvbkxpbmsocmVzdWx0cywgaW5kZXgsIGtleSwgc2luZ2xlVXJsVGVt
cGxhdGUsIHJhbmdlVXJsVGVtcGxhdGUpCi17Ci0gICAgdmFyIGN1cnJlbnRSZXZpc2lvbiA9IHBh
cnNlSW50KHJlc3VsdHNba2V5XVtpbmRleF0sIDEwKTsKLSAgICB2YXIgcHJldmlvdXNSZXZpc2lv
biA9IHBhcnNlSW50KHJlc3VsdHNba2V5XVtpbmRleCArIDFdLCAxMCk7Ci0KLSAgICBmdW5jdGlv
biBzaW5nbGVVcmwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNpbmdsZVVybFRlbXBsYXRlLnJl
cGxhY2UoJzxyZXY+JywgY3VycmVudFJldmlzaW9uKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBy
YW5nZVVybCgpCi0gICAgewotICAgICAgICByZXR1cm4gcmFuZ2VVcmxUZW1wbGF0ZS5yZXBsYWNl
KCc8cmV2MT4nLCBjdXJyZW50UmV2aXNpb24pLnJlcGxhY2UoJzxyZXYyPicsIHByZXZpb3VzUmV2
aXNpb24gKyAxKTsKLSAgICB9Ci0KLSAgICBpZiAoY3VycmVudFJldmlzaW9uID09IHByZXZpb3Vz
UmV2aXNpb24pCi0gICAgICAgIHJldHVybiAnQXQgPGEgaHJlZj0iJyArIHNpbmdsZVVybCgpICsg
JyI+cicgKyBjdXJyZW50UmV2aXNpb24gICAgKyAnPC9hPic7Ci0gICAgZWxzZSBpZiAoY3VycmVu
dFJldmlzaW9uIC0gcHJldmlvdXNSZXZpc2lvbiA9PSAxKQotICAgICAgICByZXR1cm4gJzxhIGhy
ZWY9IicgKyBzaW5nbGVVcmwoKSArICciPnInICsgY3VycmVudFJldmlzaW9uICAgICsgJzwvYT4n
OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuICc8YSBocmVmPSInICsgcmFuZ2VVcmwoKSArICci
PnInICsgKHByZXZpb3VzUmV2aXNpb24gKyAxKSArICcgdG8gcicgKyBjdXJyZW50UmV2aXNpb24g
KyAnPC9hPic7Ci19Ci0KLWZ1bmN0aW9uIGNocm9taXVtUmV2aXNpb25MaW5rKHJlc3VsdHMsIGlu
ZGV4KQotewotICAgIHJldHVybiByZXZpc2lvbkxpbmsoCi0gICAgICAgIHJlc3VsdHMsCi0gICAg
ICAgIGluZGV4LAotICAgICAgICBDSFJPTUVfUkVWSVNJT05TX0tFWSwKLSAgICAgICAgJ2h0dHA6
Ly9zcmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJvbWU/dmlldz1yZXYmcmV2aXNpb249PHJldj4n
LAotICAgICAgICAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL3BlcmYvZGFz
aGJvYXJkL3VpL2NoYW5nZWxvZy5odG1sP3VybD0vdHJ1bmsvc3JjJnJhbmdlPTxyZXYyPjo8cmV2
MT4mbW9kZT1odG1sJyk7Ci19Ci0KLWZ1bmN0aW9uIHdlYktpdFJldmlzaW9uTGluayhyZXN1bHRz
LCBpbmRleCkKLXsKLSAgICByZXR1cm4gcmV2aXNpb25MaW5rKAotICAgICAgICByZXN1bHRzLAot
ICAgICAgICBpbmRleCwKLSAgICAgICAgV0VCS0lUX1JFVklTSU9OU19LRVksCi0gICAgICAgICdo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC88cmV2PicsCi0gICAgICAgICdodHRwOi8v
dHJhYy53ZWJraXQub3JnL2xvZy90cnVuay8/cmV2PTxyZXYxPiZzdG9wX3Jldj08cmV2Mj4mbGlt
aXQ9MTAwJnZlcmJvc2U9b24nKTsKLX0KLQogLy8gIkRlY29tcHJlc3NlcyIgdGhlIFJMRS1lbmNv
ZGluZyBvZiB0ZXN0IHJlc3VsdHMgc28gdGhhdCB3ZSBjYW4gcXVlcnkgaXQKIC8vIGJ5IGJ1aWxk
IGluZGV4IGFuZCB0ZXN0IG5hbWUuCiAvLwpAQCAtODMxLDEzICs2NzksNiBAQCBmdW5jdGlvbiBk
ZWNvbXByZXNzUmVzdWx0cyhidWlsZGVyUmVzdWx0cykKICAgICB9OwogfQogCi1kb2N1bWVudC5h
ZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKSB7Ci0gICAgLy8gQ2xlYXIg
dGhlIG9wZW4gcG9wdXAsIHVubGVzcyB0aGUgY2xpY2sgd2FzIGluc2lkZSB0aGUgcG9wdXAuCi0g
ICAgdmFyIHBvcHVwID0gJCgncG9wdXAnKTsKLSAgICBpZiAocG9wdXAgJiYgZS50YXJnZXQgIT0g
cG9wdXAgJiYgIShwb3B1cC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlLnRhcmdldCkgJiAxNikp
Ci0gICAgICAgIGhpZGVQb3B1cCgpOwotfSwgZmFsc2UpOwotCiB3aW5kb3cuYWRkRXZlbnRMaXN0
ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgewogICAgIGdfcmVzb3VyY2VMb2FkZXIgPSBuZXcgbG9h
ZGVyLkxvYWRlcigpOwogICAgIGdfcmVzb3VyY2VMb2FkZXIubG9hZCgpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJv
YXJkLmh0bWwgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtp
bmVzc19kYXNoYm9hcmQuaHRtbAppbmRleCA5NjU4YWYxZTQwZTlmNmM4YzZjZWY3Mjk0ZGEyN2M4
MTk2NDRlY2QzLi4wZmZlMjZmY2I3NTUyOWM1YTgyYThmODVmZDFjYzdmNTJmYTdmZjk0IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVz
c19kYXNoYm9hcmQuaHRtbAorKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbApAQCAtMzQsNCArMzQsNSBAQCBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogPHNjcmlwdCBzcmM9ImxvYWRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0ic3Ry
aW5nLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJkYXNoYm9hcmRfYmFzZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0idWkuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImZsYWtpbmVz
c19kYXNoYm9hcmQuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmpzIGIvVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmpzCmlu
ZGV4IGFiNDg5OWI4YTYwNzMzOTZhOGUwM2FhNWQ5ZjJhNWExYTNjMjIwYWUuLmQyOGFiNzk4YjMy
ZWQxMTY4M2VmNTY5ZWNiY2I0OGViYWVhMDM0ZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5qcworKysgYi9U
b29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9h
cmQuanMKQEAgLTExNTMsNyArMTE1Myw3IEBAIGZ1bmN0aW9uIGxpbmtIVE1MVG9PcGVuV2luZG93
KHVybCwgdGV4dCkKICAgICByZXR1cm4gJzxhIGhyZWY9IicgKyB1cmwgKyAnIiB0YXJnZXQ9Il9i
bGFuayI+JyArIHRleHQgKyAnPC9hPic7CiB9CiAKLS8vIEZJWE1FOiByZXBsYWNlZCB3aXRoIGNo
cm9taXVtUmV2aXNpb25MaW5rL3dlYktpdFJldmlzaW9uTGluaworLy8gRklYTUU6IHJlcGxhY2Vk
IHdpdGggdWkuY2hyb21pdW1SZXZpc2lvbkxpbmsvdWkud2ViS2l0UmV2aXNpb25MaW5rCiBmdW5j
dGlvbiBjcmVhdGVCbGFtZUxpc3RIVE1MKHJldmlzaW9ucywgaW5kZXgsIHVybEJhc2UsIHNlcGFy
YXRvciwgcmVwbykKIHsKICAgICB2YXIgdGhpc1JldmlzaW9uID0gcmV2aXNpb25zW2luZGV4XTsK
QEAgLTEyNTAsNyArMTI1MCw3IEBAIGZ1bmN0aW9uIHNob3dQb3B1cEZvckJ1aWxkKGUsIGJ1aWxk
ZXIsIGluZGV4LCBvcHRfdGVzdE5hbWUpCiAgICAgICAgIGh0bWwgKz0gJzxsaT4nICsgbGlua0hU
TUxUb09wZW5XaW5kb3coYnVpbGRCYXNlUGF0aCArIHBhdGhUb0ZhaWx1cmVMb2cob3B0X3Rlc3RO
YW1lKSwgJ0ZhaWx1cmUgbG9nJykgKyAnPC9saT4nOwogCiAgICAgaHRtbCArPSAnPC91bD4nOwot
ICAgIHNob3dQb3B1cChlLnRhcmdldCwgaHRtbCk7CisgICAgdWkucG9wdXAuc2hvdyhlLnRhcmdl
dCwgaHRtbCk7CiB9CiAKIGZ1bmN0aW9uIGh0bWxGb3JUZXN0UmVzdWx0cyh0ZXN0KQpAQCAtMjM5
NSw3ICsyMzk1LDcgQEAgZnVuY3Rpb24gaHRtbEZvckluZGl2aWR1YWxUZXN0cyh0ZXN0cykKIGZ1
bmN0aW9uIGh0bWxGb3JOYXZCYXIoKQogewogICAgIHZhciBleHRyYUhUTUwgPSAnJzsKLSAgICB2
YXIgaHRtbCA9IGh0bWxGb3JUZXN0VHlwZVN3aXRjaGVyKGZhbHNlLCBleHRyYUhUTUwsIGlzQ3Jv
c3NCdWlsZGVyVmlldygpKTsKKyAgICB2YXIgaHRtbCA9IHVpLmh0bWwudGVzdFR5cGVTd2l0Y2hl
cihmYWxzZSwgZXh0cmFIVE1MLCBpc0Nyb3NzQnVpbGRlclZpZXcoKSk7CiAgICAgaHRtbCArPSAn
PGRpdiBjbGFzcz1mb3Jtcz48Zm9ybSBpZD1yZXN1bHQtZm9ybSAnICsKICAgICAgICAgJ29uc3Vi
bWl0PSJzZXRRdWVyeVBhcmFtZXRlcihcJ3Jlc3VsdFwnLCByZXN1bHQudmFsdWUpOycgKwogICAg
ICAgICAncmV0dXJuIGZhbHNlOyI+U2hvdyBhbGwgdGVzdHMgd2l0aCByZXN1bHQ6ICcgKwpAQCAt
MjU4Niw3ICsyNTg2LDcgQEAgZnVuY3Rpb24gcG9zdEhlaWdodENoYW5nZWRNZXNzYWdlKCkKIH0K
IAogaWYgKHdpbmRvdyAhPSBwYXJlbnQpCi0gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Js
dXInLCBoaWRlUG9wdXApOworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdWku
cG9wdXAuaGlkZSk7CiAKIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5j
dGlvbihlKSB7CiAgICAgaWYgKGUua2V5SWRlbnRpZmllciA9PSAnVSswMDNGJyB8fCBlLmtleUlk
ZW50aWZpZXIgPT0gJ1UrMDBCRicpIHsKQEAgLTI1OTYsNiArMjU5Niw2IEBAIGRvY3VtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7CiAgICAgfSBlbHNlIGlmIChl
LmtleUlkZW50aWZpZXIgPT0gJ1UrMDAxQicpIHsKICAgICAgICAgLy8gZXNjYXBlIGtleQogICAg
ICAgICBoaWRlTGVnZW5kKCk7Ci0gICAgICAgIGhpZGVQb3B1cCgpOworICAgICAgICB1aS5wb3B1
cC5oaWRlKCk7CiAgICAgfQogfSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX2VtYmVkZGVkX3Vu
aXR0ZXN0cy5qcyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxh
a2luZXNzX2Rhc2hib2FyZF9lbWJlZGRlZF91bml0dGVzdHMuanMKaW5kZXggNTU5OWIzZTY1Yzgw
N2VhOWFmY2ZjMTc5MGNkMGFhODA1YjFkMDRmYS4uMDM5NDY3YTg1YTFhMTE3N2QxYTdjYzA4Nzcy
M2FjMjJhOWZlYzU5ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMt
ZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX2VtYmVkZGVkX3VuaXR0ZXN0cy5qcworKysg
Yi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNo
Ym9hcmRfZW1iZWRkZWRfdW5pdHRlc3RzLmpzCkBAIC0yNyw3ICsyNyw3IEBACiAvLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogCiB0ZXN0KCdoaWRlUG9wdXBPbkJsdXInLCAyLCBmdW5jdGlvbigpIHsKLSAgICBzaG93
UG9wdXAoZG9jdW1lbnQuYm9keSwgJ2R1bW15IGNvbnRlbnQnKTsKKyAgICB1aS5wb3B1cC5zaG93
KGRvY3VtZW50LmJvZHksICdkdW1teSBjb250ZW50Jyk7CiAgICAgb2soZG9jdW1lbnQucXVlcnlT
ZWxlY3RvcignI3BvcHVwJykpOwogCiAgICAgLy8gQ2F1c2UgdGhlIHdpbmRvdyB0byBiZSBibHVy
cmVkLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy9mbGFraW5lc3NfZGFzaGJvYXJkX3VuaXR0ZXN0cy5qcyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF91bml0dGVzdHMuanMKaW5k
ZXggZGJkY2UzNTI4MGExMTJkZDdiMjQxNzdjOTcwOTA3MDYxNDkzNWJmMC4uZjNjNThmZjQzYTky
ZWFmZmNjNjE0OTIzNmY3MWY3YjdhMDg3NDg1ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX3VuaXR0ZXN0cy5q
cworKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVz
c19kYXNoYm9hcmRfdW5pdHRlc3RzLmpzCkBAIC0zNjUsNyArMzY1LDcgQEAgdGVzdCgnaGVhZGVy
Rm9yVGVzdFRhYmxlSHRtbCcsIDEsIGZ1bmN0aW9uKCkgewogdGVzdCgnaHRtbEZvclRlc3RUeXBl
U3dpdGNoZXJHcm91cCcsIDYsIGZ1bmN0aW9uKCkgewogICAgIHZhciBjb250YWluZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICBnX2Nyb3NzRGFzaGJvYXJkU3RhdGUudGVz
dFR5cGUgPSAndWlfdGVzdHMnOwotICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBodG1sRm9yVGVz
dFR5cGVTd2l0Y2hlcih0cnVlKTsKKyAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdWkuaHRtbC50
ZXN0VHlwZVN3aXRjaGVyKHRydWUpOwogICAgIHZhciBzZWxlY3RzID0gY29udGFpbmVyLnF1ZXJ5
U2VsZWN0b3JBbGwoJ3NlbGVjdCcpOwogICAgIGVxdWFsKHNlbGVjdHMubGVuZ3RoLCAyKTsKICAg
ICB2YXIgZ3JvdXAgPSBzZWxlY3RzWzFdOwpAQCAtMzczLDcgKzM3Myw3IEBAIHRlc3QoJ2h0bWxG
b3JUZXN0VHlwZVN3aXRjaGVyR3JvdXAnLCA2LCBmdW5jdGlvbigpIHsKICAgICBlcXVhbChncm91
cC5jaGlsZHJlbi5sZW5ndGgsIDMpOwogCiAgICAgZ19jcm9zc0Rhc2hib2FyZFN0YXRlLnRlc3RU
eXBlID0gJ2xheW91dC10ZXN0cyc7Ci0gICAgY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWxGb3JU
ZXN0VHlwZVN3aXRjaGVyKHRydWUpOworICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSB1aS5odG1s
LnRlc3RUeXBlU3dpdGNoZXIodHJ1ZSk7CiAgICAgdmFyIHNlbGVjdHMgPSBjb250YWluZXIucXVl
cnlTZWxlY3RvckFsbCgnc2VsZWN0Jyk7CiAgICAgZXF1YWwoc2VsZWN0cy5sZW5ndGgsIDIpOwog
ICAgIHZhciBncm91cCA9IHNlbGVjdHNbMV07CkBAIC02NDcsOSArNjQ3LDkgQEAgdGVzdCgnc29y
dFRlc3RzJywgNCwgZnVuY3Rpb24oKSB7CiB9KTsKIAogdGVzdCgncG9wdXAnLCAyLCBmdW5jdGlv
bigpIHsKLSAgICBzaG93UG9wdXAoZG9jdW1lbnQuYm9keSwgJ2R1bW15IGNvbnRlbnQnKTsKKyAg
ICB1aS5wb3B1cC5zaG93KGRvY3VtZW50LmJvZHksICdkdW1teSBjb250ZW50Jyk7CiAgICAgb2so
ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3BvcHVwJykpOwotICAgIGhpZGVQb3B1cCgpOworICAg
IHVpLnBvcHVwLmhpZGUoKTsKICAgICBvayghZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3BvcHVw
JykpOwogfSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvcnVuLWVtYmVkZGVkLXVuaXR0ZXN0cy5odG1sIGIvVG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9zdGF0aWMtZGFzaGJvYXJkcy9ydW4tZW1iZWRkZWQtdW5pdHRlc3RzLmh0bWwKaW5kZXgg
MTQzMjM1ZjNkZmMxNmYxZWU5YjQyYTE0YzRmZmFmYTUwNzdlZDNjMS4uYjE5MWMwYmFhZGIzZDA1
NWI5ZGI3NjcxZjhhOWFmNzQ0OGU0ODA3ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9zdGF0aWMtZGFzaGJvYXJkcy9ydW4tZW1iZWRkZWQtdW5pdHRlc3RzLmh0bWwKKysrIGIv
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9ydW4tZW1iZWRkZWQtdW5p
dHRlc3RzLmh0bWwKQEAgLTQ5LDYgKzQ5LDcgQEAgd2luZG93LnBhcmVudCA9IG51bGw7CiAKIDxz
Y3JpcHQgc3JjPSJzdHJpbmcuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9i
YXNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ1aS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0ibG9hZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJsb2FkZXJfdW5pdHRlc3Rz
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2Vy
dmVyL3N0YXRpYy1kYXNoYm9hcmRzL3J1bi11bml0dGVzdHMuaHRtbCBiL1Rvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvcnVuLXVuaXR0ZXN0cy5odG1sCmluZGV4IDFmZGI5
OTg2OWE1ZmJjZDg5NmEyOTg3MGFjZDg1Yzc5NmJjNzI5NmYuLjBmY2E3MDZhZTkwOGI4MmQ4M2My
MjA1ZWM2ZTM2ZWE3NGJhMjhjMzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
c3RhdGljLWRhc2hib2FyZHMvcnVuLXVuaXR0ZXN0cy5odG1sCisrKyBiL1Rvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvcnVuLXVuaXR0ZXN0cy5odG1sCkBAIC00Myw2ICs0
Myw3IEBAIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIDxzY3JpcHQgc3JjPSJidWls
ZGVyc191bml0dGVzdHMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9InN0cmluZy5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iZGFzaGJvYXJkX2Jhc2UuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InVpLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJsb2FkZXIuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9ImxvYWRlcl91bml0dGVzdHMuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGlt
ZWxpbmVfZXhwbG9yZXIuaHRtbCBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbAppbmRleCAzYTU5NDRhODgwNjYwYWM2OTdiMjIx
ZjYyZDM5YTc0YWMwMTRkZGVkLi5mN2I4Zjk5NTdiZjRhODc1Y2JmNmY0YzRiODdmZmJmNmU1YTRj
Y2Y2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L3RpbWVsaW5lX2V4cGxvcmVyLmh0bWwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0
aWMtZGFzaGJvYXJkcy90aW1lbGluZV9leHBsb3Jlci5odG1sCkBAIC0xMDAsNiArMTAwLDcgQEAg
Ym9keSB7CiA8c2NyaXB0IHNyYz0ibG9hZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJz
dHJpbmcuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJ1aS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogdmFyIEZBSUxJ
TkdfVEVTVFNfREFUQVNFVF9OQU1FID0gJ0ZhaWxpbmcgdGVzdHMnOwogCkBAIC0xMzYsOCArMTM3
LDggQEAgZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKCkKIAogICAgIGluaXRDdXJyZW50QnVpbGRlclRl
c3RSZXN1bHRzKCk7CiAKLSAgICAkKCd0ZXN0LXR5cGUtc3dpdGNoZXInKS5pbm5lckhUTUwgPSBo
dG1sRm9yVGVzdFR5cGVTd2l0Y2hlciggZmFsc2UsCi0gICAgICAgIGNoZWNrYm94SFRNTCgnaWdu
b3JlRmxha3lUZXN0cycsICdJZ25vcmUgZmxha3kgdGVzdHMnLCBnX2N1cnJlbnRTdGF0ZS5pZ25v
cmVGbGFreVRlc3RzLCAnZ19jdXJyZW50QnVpbGRJbmRleCA9IC0xJykKKyAgICAkKCd0ZXN0LXR5
cGUtc3dpdGNoZXInKS5pbm5lckhUTUwgPSB1aS5odG1sLnRlc3RUeXBlU3dpdGNoZXIoIGZhbHNl
LAorICAgICAgICB1aS5odG1sLmNoZWNrYm94KCdpZ25vcmVGbGFreVRlc3RzJywgJ0lnbm9yZSBm
bGFreSB0ZXN0cycsIGdfY3VycmVudFN0YXRlLmlnbm9yZUZsYWt5VGVzdHMsICdnX2N1cnJlbnRC
dWlsZEluZGV4ID0gLTEnKQogICAgICk7CiAKICAgICB1cGRhdGVUaW1lbGluZUZvckJ1aWxkZXIo
KTsKQEAgLTMwOSw4ICszMTAsOCBAQCBmdW5jdGlvbiB1cGRhdGVCdWlsZEluc3BlY3RvcihyZXN1
bHRzLCBidWlsZGVyLCBkeWdyYXBoLCBpbmRleCkKIAogICAgIC8vIFJldmlzaW9uIGxpbmsocykK
ICAgICBpZiAoIXNob3VsZFNob3dXZWJLaXRSZXZpc2lvbnNPbmx5KCkpCi0gICAgICAgIGFkZFJv
dygnQ2hyb21pdW0gY2hhbmdlOicsIGNocm9taXVtUmV2aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4
KSk7Ci0gICAgYWRkUm93KCdXZWJLaXQgY2hhbmdlOicsIHdlYktpdFJldmlzaW9uTGluayhyZXN1
bHRzLCBpbmRleCkpOworICAgICAgICBhZGRSb3coJ0Nocm9taXVtIGNoYW5nZTonLCB1aS5odG1s
LmNocm9taXVtUmV2aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4KSk7CisgICAgYWRkUm93KCdXZWJL
aXQgY2hhbmdlOicsIHVpLmh0bWwud2ViS2l0UmV2aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4KSk7
CiAKICAgICAvLyBUZXN0IHN0YXR1cy9jb3VudHMKICAgICBhZGRSb3coJycsICcnKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5o
dG1sIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmh0
bWwKaW5kZXggMjUyYWM4MTE5NmQ1YjQwOTZlZmEyZDdkNWFmOGZiNTEyMDBlZDdhOC4uNDA0MDZj
MGI0NTk0ZDYzMTQzN2EyMjhlMjFiZjdkNmUxYjY1YjliMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmh0bWwKKysrIGIvVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmh0bWwKQEAgLTExMSw2
ICsxMTEsNyBAQCB0ZCB7CiA8c2NyaXB0IHNyYz0ibG9hZGVyLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJzdHJpbmcuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ1aS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0nd2VidHJlZW1hcC5qcyc+PC9zY3JpcHQ+CiAKIDxkaXYgaWQ9J2hlYWRlci1jb250YWluZXIn
PjwvZGl2PgpAQCAtMjMwLDcgKzIzMSw3IEBAIHZhciBnX3dlYlRyZWU7CiAKIGZ1bmN0aW9uIGdl
bmVyYXRlUGFnZSgpCiB7Ci0gICAgJCgnaGVhZGVyLWNvbnRhaW5lcicpLmlubmVySFRNTCA9IGh0
bWxGb3JUZXN0VHlwZVN3aXRjaGVyKCk7CisgICAgJCgnaGVhZGVyLWNvbnRhaW5lcicpLmlubmVy
SFRNTCA9IHVpLmh0bWwudGVzdFR5cGVTd2l0Y2hlcigpOwogCiAgICAgZ19pc0dlbmVyYXRpbmdQ
YWdlID0gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMt
ZGFzaGJvYXJkcy91aS5qcyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2Fy
ZHMvdWkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uY2I0ZWJhOTE5YWVjMzJiODZhNWFiZDIxZGVjNzhkZmViODQ2
Y2Y0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvdWkuanMKQEAgLTAsMCArMSwxOTkgQEAKKy8vIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8g
ICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8v
ICAgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCit2YXIgdWkgPSB1aSB8fCB7fTsKKwor
KGZ1bmN0aW9uKCkgeworCit1aS5wb3B1cCA9IHt9OworCit1aS5wb3B1cC5oaWRlID0gZnVuY3Rp
b24oKQoreworICAgIHZhciBwb3B1cCA9ICQoJ3BvcHVwJyk7CisgICAgaWYgKHBvcHVwKSB7Cisg
ICAgICAgIHBvcHVwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocG9wdXApOworICAgICAgICBkb2N1
bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB1aS5wb3B1cC5faGFuZGxlTW91
c2VEb3duLCBmYWxzZSk7CisgICAgfQorfQorCit1aS5wb3B1cC5zaG93ID0gZnVuY3Rpb24odGFy
Z2V0LCBodG1sKQoreworICAgIHZhciBwb3B1cCA9ICQoJ3BvcHVwJyk7CisgICAgaWYgKCFwb3B1
cCkgeworICAgICAgICBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAg
ICAgICBwb3B1cC5pZCA9ICdwb3B1cCc7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQocG9wdXApOworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24n
LCB1aS5wb3B1cC5faGFuZGxlTW91c2VEb3duLCBmYWxzZSk7CisgICAgfQorCisgICAgLy8gU2V0
IGh0bWwgZmlyc3Qgc28gdGhhdCB3ZSBjYW4gZ2V0IGFjY3VyYXRlIHNpemUgbWV0cmljcyBvbiB0
aGUgcG9wdXAuCisgICAgcG9wdXAuaW5uZXJIVE1MID0gaHRtbDsKKworICAgIHZhciB0YXJnZXRS
ZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworCisgICAgdmFyIHggPSBNYXRo
Lm1pbih0YXJnZXRSZWN0LmxlZnQgLSAxMCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVu
dFdpZHRoIC0gcG9wdXAub2Zmc2V0V2lkdGgpOworICAgIHggPSBNYXRoLm1heCgwLCB4KTsKKyAg
ICBwb3B1cC5zdHlsZS5sZWZ0ID0geCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCArICdweCc7
CisKKyAgICB2YXIgeSA9IHRhcmdldFJlY3QudG9wICsgdGFyZ2V0UmVjdC5oZWlnaHQ7CisgICAg
aWYgKHkgKyBwb3B1cC5vZmZzZXRIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xp
ZW50SGVpZ2h0KQorICAgICAgICB5ID0gdGFyZ2V0UmVjdC50b3AgLSBwb3B1cC5vZmZzZXRIZWln
aHQ7CisgICAgeSA9IE1hdGgubWF4KDAsIHkpOworICAgIHBvcHVwLnN0eWxlLnRvcCA9IHkgKyBk
b2N1bWVudC5ib2R5LnNjcm9sbFRvcCArICdweCc7Cit9CisKK3VpLnBvcHVwLl9oYW5kbGVNb3Vz
ZURvd24gPSBmdW5jdGlvbihlKSB7CisgICAgLy8gQ2xlYXIgdGhlIG9wZW4gcG9wdXAsIHVubGVz
cyB0aGUgY2xpY2sgd2FzIGluc2lkZSB0aGUgcG9wdXAuCisgICAgdmFyIHBvcHVwID0gJCgncG9w
dXAnKTsKKyAgICBpZiAocG9wdXAgJiYgZS50YXJnZXQgIT0gcG9wdXAgJiYgIShwb3B1cC5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbihlLnRhcmdldCkgJiAxNikpIAorICAgICAgICB1aS5wb3B1cC5o
aWRlKCk7ICAgIAorfQorCit1aS5odG1sID0ge307CisKK3VpLmh0bWwuY2hlY2tib3ggPSBmdW5j
dGlvbihxdWVyeVBhcmFtZXRlciwgbGFiZWwsIGlzQ2hlY2tlZCwgb3B0X2V4dHJhSmF2YVNjcmlw
dCkKK3sKKyAgICB2YXIganMgPSBvcHRfZXh0cmFKYXZhU2NyaXB0IHx8ICcnOworICAgIHJldHVy
biAnPGxhYmVsIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDJlbSI+JyArCisgICAgICAgICc8aW5wdXQg
dHlwZT0iY2hlY2tib3giIG9uY2hhbmdlPSJ0b2dnbGVRdWVyeVBhcmFtZXRlcihcJycgKyBxdWVy
eVBhcmFtZXRlciArICdcJyk7JyArIGpzICsgJyIgJyArCisgICAgICAgICAgICAoaXNDaGVja2Vk
ID8gJ2NoZWNrZWQnIDogJycpICsgJz4nICsgbGFiZWwgKworICAgICAgICAnPC9sYWJlbD4gJzsK
K30KKwordWkuaHRtbC5zZWxlY3QgPSBmdW5jdGlvbihsYWJlbCwgcXVlcnlQYXJhbWV0ZXIsIG9w
dGlvbnMpCit7CisgICAgdmFyIGh0bWwgPSAnPGxhYmVsIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDJl
bSI+JyArIGxhYmVsICsgJzogJyArCisgICAgICAgICc8c2VsZWN0IG9uY2hhbmdlPSJzZXRRdWVy
eVBhcmFtZXRlcihcJycgKyBxdWVyeVBhcmFtZXRlciArICdcJywgdGhpc1t0aGlzLnNlbGVjdGVk
SW5kZXhdLnZhbHVlKSI+JzsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5n
dGg7IGkrKykgeworICAgICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW2ldOworICAgICAgICBodG1s
ICs9ICc8b3B0aW9uIHZhbHVlPSInICsgdmFsdWUgKyAnIiAnICsKKyAgICAgICAgICAgIChxdWVy
eVBhcmFtZXRlclZhbHVlKHF1ZXJ5UGFyYW1ldGVyKSA9PSB2YWx1ZSA/ICdzZWxlY3RlZCcgOiAn
JykgKworICAgICAgICAgICAgJz4nICsgdmFsdWUgKyAnPC9vcHRpb24+JworICAgIH0KKyAgICBo
dG1sICs9ICc8L3NlbGVjdD48L2xhYmVsPiAnOworICAgIHJldHVybiBodG1sOworfQorCisvLyBS
ZXR1cm5zIHRoZSBIVE1MIGZvciB0aGUgc2VsZWN0IGVsZW1lbnQgdG8gc3dpdGNoIHRvIGRpZmZl
cmVudCB0ZXN0VHlwZXMuCit1aS5odG1sLnRlc3RUeXBlU3dpdGNoZXIgPSBmdW5jdGlvbihvcHRf
bm9CdWlsZGVyTWVudSwgb3B0X2V4dHJhSHRtbCwgb3B0X2luY2x1ZGVOb25lQnVpbGRlcikKK3sK
KyAgICB2YXIgaHRtbCA9ICc8ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNoZWQiPic7
CisgICAgaHRtbCArPSAnJyArCisgICAgICAgIHVpLmh0bWwuX2Rhc2hib2FyZExpbmsoJ1N0YXRz
JywgJ2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWwnKSArCisgICAgICAgIHVpLmh0bWwuX2Rhc2hib2Fy
ZExpbmsoJ1RpbWVsaW5lJywgJ3RpbWVsaW5lX2V4cGxvcmVyLmh0bWwnKSArCisgICAgICAgIHVp
Lmh0bWwuX2Rhc2hib2FyZExpbmsoJ1Jlc3VsdHMnLCAnZmxha2luZXNzX2Rhc2hib2FyZC5odG1s
JykgKworICAgICAgICB1aS5odG1sLl9kYXNoYm9hcmRMaW5rKCdUcmVlbWFwJywgJ3RyZWVtYXAu
aHRtbCcpOworCisgICAgaHRtbCArPSB1aS5odG1sLnNlbGVjdCgnVGVzdCB0eXBlJywgJ3Rlc3RU
eXBlJywgVEVTVF9UWVBFUyk7CisKKyAgICBpZiAoIW9wdF9ub0J1aWxkZXJNZW51KSB7CisgICAg
ICAgIHZhciBidWlsZGVyc0Zvck1lbnUgPSBPYmplY3Qua2V5cyhjdXJyZW50QnVpbGRlcnMoKSk7
CisgICAgICAgIGlmIChvcHRfaW5jbHVkZU5vbmVCdWlsZGVyKQorICAgICAgICAgICAgYnVpbGRl
cnNGb3JNZW51LnVuc2hpZnQoJy0tLS0tLS0tLS0tLS0tJyk7CisgICAgICAgIGh0bWwgKz0gdWku
aHRtbC5zZWxlY3QoJ0J1aWxkZXInLCAnYnVpbGRlcicsIGJ1aWxkZXJzRm9yTWVudSk7CisgICAg
fQorCisgICAgaHRtbCArPSB1aS5odG1sLnNlbGVjdCgnR3JvdXAnLCAnZ3JvdXAnLAorICAgICAg
ICBPYmplY3Qua2V5cyhjdXJyZW50QnVpbGRlckdyb3VwQ2F0ZWdvcnkoKSkpOworCisgICAgaWYg
KCFpc1RyZWVNYXAoKSkKKyAgICAgICAgaHRtbCArPSB1aS5odG1sLmNoZWNrYm94KCdzaG93QWxs
UnVucycsICdTaG93IGFsbCBydW5zJywgZ19jcm9zc0Rhc2hib2FyZFN0YXRlLnNob3dBbGxSdW5z
KTsKKworICAgIGlmIChvcHRfZXh0cmFIdG1sKQorICAgICAgICBodG1sICs9IG9wdF9leHRyYUh0
bWw7CisgICAgcmV0dXJuIGh0bWwgKyAnPC9kaXY+JzsKK30KKwordWkuaHRtbC5fbG9hZERhc2hi
b2FyZCA9IGZ1bmN0aW9uKGZpbGVOYW1lKQoreworICAgIHZhciBwYXRoTmFtZSA9IHdpbmRvdy5s
b2NhdGlvbi5wYXRobmFtZTsKKyAgICBwYXRoTmFtZSA9IHBhdGhOYW1lLnN1YnN0cmluZygwLCBw
YXRoTmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7CisgICAgd2luZG93LmxvY2F0aW9uID0gcGF0
aE5hbWUgKyBmaWxlTmFtZSArIHdpbmRvdy5sb2NhdGlvbi5oYXNoOworfQorCit1aS5odG1sLl90
b3BMaW5rID0gZnVuY3Rpb24oaHRtbCwgb25DbGljaywgaXNTZWxlY3RlZCkKK3sKKyAgICB2YXIg
Y3NzVGV4dCA9IGlzU2VsZWN0ZWQgPyAnZm9udC13ZWlnaHQ6IGJvbGQ7JyA6ICdjb2xvcjpibHVl
O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXI7JzsKKyAgICBjc3NUZXh0
ICs9ICdtYXJnaW46IDAgNXB4Oyc7CisgICAgcmV0dXJuICc8c3BhbiBzdHlsZT0iJyArIGNzc1Rl
eHQgKyAnIiBvbmNsaWNrPSInICsgb25DbGljayArICciPicgKyBodG1sICsgJzwvc3Bhbj4nOwor
fQorCit1aS5odG1sLl9kYXNoYm9hcmRMaW5rID0gZnVuY3Rpb24oaHRtbCwgZmlsZU5hbWUpCit7
CisgICAgdmFyIHBhdGhOYW1lID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOworICAgIHZhciBj
dXJyZW50RmlsZU5hbWUgPSBwYXRoTmFtZS5zdWJzdHJpbmcocGF0aE5hbWUubGFzdEluZGV4T2Yo
Jy8nKSArIDEpOworICAgIHZhciBpc1NlbGVjdGVkID0gY3VycmVudEZpbGVOYW1lID09IGZpbGVO
YW1lOworICAgIHZhciBvbkNsaWNrID0gJ3VpLmh0bWwuX2xvYWREYXNoYm9hcmQoXCcnICsgZmls
ZU5hbWUgKyAnXCcpJzsKKyAgICByZXR1cm4gdWkuaHRtbC5fdG9wTGluayhodG1sLCBvbkNsaWNr
LCBpc1NlbGVjdGVkKTsKK30KKwordWkuaHRtbC5fcmV2aXNpb25MaW5rID0gZnVuY3Rpb24ocmVz
dWx0cywgaW5kZXgsIGtleSwgc2luZ2xlVXJsVGVtcGxhdGUsIHJhbmdlVXJsVGVtcGxhdGUpCit7
CisgICAgdmFyIGN1cnJlbnRSZXZpc2lvbiA9IHBhcnNlSW50KHJlc3VsdHNba2V5XVtpbmRleF0s
IDEwKTsKKyAgICB2YXIgcHJldmlvdXNSZXZpc2lvbiA9IHBhcnNlSW50KHJlc3VsdHNba2V5XVtp
bmRleCArIDFdLCAxMCk7CisKKyAgICBmdW5jdGlvbiBzaW5nbGVVcmwoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHNpbmdsZVVybFRlbXBsYXRlLnJlcGxhY2UoJzxyZXY+JywgY3VycmVudFJldmlz
aW9uKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByYW5nZVVybCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gcmFuZ2VVcmxUZW1wbGF0ZS5yZXBsYWNlKCc8cmV2MT4nLCBjdXJyZW50UmV2aXNpb24p
LnJlcGxhY2UoJzxyZXYyPicsIHByZXZpb3VzUmV2aXNpb24gKyAxKTsKKyAgICB9CisKKyAgICBp
ZiAoY3VycmVudFJldmlzaW9uID09IHByZXZpb3VzUmV2aXNpb24pCisgICAgICAgIHJldHVybiAn
QXQgPGEgaHJlZj0iJyArIHNpbmdsZVVybCgpICsgJyI+cicgKyBjdXJyZW50UmV2aXNpb24gICAg
KyAnPC9hPic7CisgICAgZWxzZSBpZiAoY3VycmVudFJldmlzaW9uIC0gcHJldmlvdXNSZXZpc2lv
biA9PSAxKQorICAgICAgICByZXR1cm4gJzxhIGhyZWY9IicgKyBzaW5nbGVVcmwoKSArICciPnIn
ICsgY3VycmVudFJldmlzaW9uICAgICsgJzwvYT4nOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
ICc8YSBocmVmPSInICsgcmFuZ2VVcmwoKSArICciPnInICsgKHByZXZpb3VzUmV2aXNpb24gKyAx
KSArICcgdG8gcicgKyBjdXJyZW50UmV2aXNpb24gKyAnPC9hPic7Cit9CisKK3VpLmh0bWwuY2hy
b21pdW1SZXZpc2lvbkxpbmsgPSBmdW5jdGlvbihyZXN1bHRzLCBpbmRleCkKK3sKKyAgICByZXR1
cm4gdWkuaHRtbC5fcmV2aXNpb25MaW5rKAorICAgICAgICByZXN1bHRzLAorICAgICAgICBpbmRl
eCwKKyAgICAgICAgQ0hST01FX1JFVklTSU9OU19LRVksCisgICAgICAgICdodHRwOi8vc3JjLmNo
cm9taXVtLm9yZy92aWV3dmMvY2hyb21lP3ZpZXc9cmV2JnJldmlzaW9uPTxyZXY+JywKKyAgICAg
ICAgJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9wZXJmL2Rhc2hib2FyZC91
aS9jaGFuZ2Vsb2cuaHRtbD91cmw9L3RydW5rL3NyYyZyYW5nZT08cmV2Mj46PHJldjE+Jm1vZGU9
aHRtbCcpOworfQorCit1aS5odG1sLndlYktpdFJldmlzaW9uTGluayA9IGZ1bmN0aW9uKHJlc3Vs
dHMsIGluZGV4KQoreworICAgIHJldHVybiB1aS5odG1sLl9yZXZpc2lvbkxpbmsoCisgICAgICAg
IHJlc3VsdHMsCisgICAgICAgIGluZGV4LAorICAgICAgICBXRUJLSVRfUkVWSVNJT05TX0tFWSwK
KyAgICAgICAgJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzxyZXY+JywKKyAgICAg
ICAgJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvbG9nL3RydW5rLz9yZXY9PHJldjE+JnN0b3BfcmV2
PTxyZXYyPiZsaW1pdD0xMDAmdmVyYm9zZT1vbicpOworfQorCit9KSgpOwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>