<?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>80709</bug_id>
          
          <creation_ts>2012-03-09 10:25:20 -0800</creation_ts>
          <short_desc>Convert regions parsing test to use testharness.js</short_desc>
          <delta_ts>2012-03-20 10:56:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.7</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="Jacob Goldstein">jacobg</reporter>
          <assigned_to name="Jacob Goldstein">jacobg</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>jacobg</cc>
    
    <cc>krit</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yosin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>574989</commentid>
    <comment_count>0</comment_count>
    <who name="Jacob Goldstein">jacobg</who>
    <bug_when>2012-03-09 10:25:20 -0800</bug_when>
    <thetext>Update test to use testharness.js for synergy between W3C and WebKit test style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575103</commentid>
    <comment_count>1</comment_count>
      <attachid>131079</attachid>
    <who name="Jacob Goldstein">jacobg</who>
    <bug_when>2012-03-09 12:52:28 -0800</bug_when>
    <thetext>Created attachment 131079
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575279</commentid>
    <comment_count>2</comment_count>
      <attachid>131079</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-09 15:06:34 -0800</bug_when>
    <thetext>Comment on attachment 131079
Patch

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

&gt; LayoutTests/fast/regions/webkit-flow-parsing-expected.txt:26
&gt; +Result	Test Name	Message
&gt; +Pass	testParse: Assigned none to property, expected return = none	
&gt; +Pass	testParse: Assigned first-flow to property, expected return = first-flow	
&gt; +Pass	testParse: Assigned &apos;first-flow&apos; to property, expected return = &apos;&apos;	
&gt; +Pass	testParse: Assigned ; to property, expected return = &apos;&apos;	
&gt; +Pass	testParse: Assigned 1 to property, expected return = &apos;&apos;	
&gt; +Pass	testParse: Assigned 1.2 to property, expected return = &apos;&apos;	
&gt; +Pass	testParse: Assigned -1 to property, expected return = &apos;&apos;	
&gt; +Pass	testParse: Assigned 12px to property, expected return = &apos;&apos;	
&gt; +Pass	testComputedStyle: Assigned none to property, expected return = none	
&gt; +Pass	testComputedStyle: Assigned \&quot;\&quot; to property, expected return = none	
&gt; +Pass	testComputedStyle: Assigned &apos;first-flow&apos; to property, expected return = none	
&gt; +Pass	testComputedStyle: Assigned first-flow to property, expected return = first-flow	
&gt; +Pass	testComputedStyle: Assigned 12px to property, expected return = none	
&gt; +Pass	testNotInherited: Assigned none, none to property, expected return = none	
&gt; +Pass	testNotInherited: Assigned none, child-flow to property, expected return = child-flow	
&gt; +Pass	testNotInherited: Assigned parent-flow, none to property, expected return = none	
&gt; +Pass	testNotInherited: Assigned parent-flow, child-flow to property, expected return = child-flow	

This is hard to read in a text dump.  Did the tests pass or fail/  The Result column appears to be empty.  Given that text dumps is the main way we look at these results, I&apos;m not sure this is an improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575309</commentid>
    <comment_count>3</comment_count>
    <who name="Jacob Goldstein">jacobg</who>
    <bug_when>2012-03-09 15:50:25 -0800</bug_when>
    <thetext>I understand your concern.  Some of this is user defined, and the output could also be improved via customizations to the testharnessreport.js file.

The message you see after &quot;Pass&quot;, for example, &quot;testParse: Assigned none to property, expected return = none&quot;, is the user defined string from the description argument of the assert_equals method.   assert_equals looks like this:

assert_equals(actual, expected, description)

All of the methods in testharness.js include a description argument that is output after the test result.  In the W3C test suite, the testharness.css file formats the output into a slightly more readable output.  Since we are dumping as text, that isn&apos;t possible, but other customizations in testharnessreport.js are.  I will look into this further.




(In reply to comment #2)
&gt; (From update of attachment 131079 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131079&amp;action=review
&gt; 
&gt; &gt; LayoutTests/fast/regions/webkit-flow-parsing-expected.txt:26
&gt; &gt; +Result	Test Name	Message
&gt; &gt; +Pass	testParse: Assigned none to property, expected return = none	
&gt; &gt; +Pass	testParse: Assigned first-flow to property, expected return = first-flow	
&gt; &gt; +Pass	testParse: Assigned &apos;first-flow&apos; to property, expected return = &apos;&apos;	
&gt; &gt; +Pass	testParse: Assigned ; to property, expected return = &apos;&apos;	
&gt; &gt; +Pass	testParse: Assigned 1 to property, expected return = &apos;&apos;	
&gt; &gt; +Pass	testParse: Assigned 1.2 to property, expected return = &apos;&apos;	
&gt; &gt; +Pass	testParse: Assigned -1 to property, expected return = &apos;&apos;	
&gt; &gt; +Pass	testParse: Assigned 12px to property, expected return = &apos;&apos;	
&gt; &gt; +Pass	testComputedStyle: Assigned none to property, expected return = none	
&gt; &gt; +Pass	testComputedStyle: Assigned \&quot;\&quot; to property, expected return = none	
&gt; &gt; +Pass	testComputedStyle: Assigned &apos;first-flow&apos; to property, expected return = none	
&gt; &gt; +Pass	testComputedStyle: Assigned first-flow to property, expected return = first-flow	
&gt; &gt; +Pass	testComputedStyle: Assigned 12px to property, expected return = none	
&gt; &gt; +Pass	testNotInherited: Assigned none, none to property, expected return = none	
&gt; &gt; +Pass	testNotInherited: Assigned none, child-flow to property, expected return = child-flow	
&gt; &gt; +Pass	testNotInherited: Assigned parent-flow, none to property, expected return = none	
&gt; &gt; +Pass	testNotInherited: Assigned parent-flow, child-flow to property, expected return = child-flow	
&gt; 
&gt; This is hard to read in a text dump.  Did the tests pass or fail/  The Result column appears to be empty.  Given that text dumps is the main way we look at these results, I&apos;m not sure this is an improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575324</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-09 16:13:59 -0800</bug_when>
    <thetext>It&apos;s interesting that the result came out much clearer in the bugzilla comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580944</commentid>
    <comment_count>5</comment_count>
      <attachid>132376</attachid>
    <who name="Jacob Goldstein">jacobg</who>
    <bug_when>2012-03-16 14:17:10 -0700</bug_when>
    <thetext>Created attachment 132376
Patch

Updated to format out from testharness.js such that an HTML table is no longer used and the text file produced by dumpAsText is readable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580948</commentid>
    <comment_count>6</comment_count>
    <who name="Jacob Goldstein">jacobg</who>
    <bug_when>2012-03-16 14:22:52 -0700</bug_when>
    <thetext>...for format out[put] from...

(In reply to comment #5)
&gt; Created an attachment (id=132376) [details]
&gt; Patch
&gt; 
&gt; Updated to format out from testharness.js such that an HTML table is no longer used and the text file produced by dumpAsText is readable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580966</commentid>
    <comment_count>7</comment_count>
      <attachid>132376</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-16 14:32:01 -0700</bug_when>
    <thetext>Comment on attachment 132376
Patch

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

&gt; LayoutTests/fast/regions/webkit-flow-parsing-expected.txt:19
&gt; +PASS Test Parse none 
&gt; +PASS Test Parse first-flow 
&gt; +PASS Test Parse &apos;first-flow&apos; 
&gt; +PASS Test Parse ; 
&gt; +PASS Test Parse 1 
&gt; +PASS Test Parse 1.2 
&gt; +PASS Test Parse -1 
&gt; +PASS Test Parse 12px 
&gt; +PASS Test Computed Style none 
&gt; +PASS Test Computed Style &apos;&apos; 
&gt; +PASS Test Computed Style &apos;first-flow&apos; 
&gt; +PASS Test Computed Style first-flow 
&gt; +PASS Test Computed Style 12px  
&gt; +PASS Test Non-Inherited none, none 
&gt; +PASS Test Non-Inherited none, child-flow 
&gt; +PASS Test Non-Inherited parent-flow, none 
&gt; +PASS Test Non-Inherited parent-flow, child-flow 

This output is much better.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583160</commentid>
    <comment_count>8</comment_count>
    <who name="Jacob Goldstein">jacobg</who>
    <bug_when>2012-03-20 09:54:19 -0700</bug_when>
    <thetext>Ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583194</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-20 10:26:39 -0700</bug_when>
    <thetext>It might make sense to move testharness.js to resources/w3c/ to signify the fact it&apos;s imported from w3c repository.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583228</commentid>
    <comment_count>10</comment_count>
      <attachid>132376</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 10:56:32 -0700</bug_when>
    <thetext>Comment on attachment 132376
Patch

Clearing flags on attachment: 132376

Committed r111411: &lt;http://trac.webkit.org/changeset/111411&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583229</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 10:56:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131079</attachid>
            <date>2012-03-09 12:52:28 -0800</date>
            <delta_ts>2012-03-16 14:17:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>80709.patch</filename>
            <type>text/plain</type>
            <size>74760</size>
            <attacher name="Jacob Goldstein">jacobg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NTU4MGVjLi5jMTI1ZDE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMDMt
MDkgIEphY29iIEdvbGRzdGVpbiAgPGphY29iZ0BhZG9iZS5jb20+CisKKyAgICAgICAgQ29udmVy
dCByZWdpb25zIHBhcnNpbmcgdGVzdCB0byB1c2UgdGVzdGhhcm5lc3MuanMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNzA5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qczogQWRkZWQuCisgICAgICAgICguKToKKyAgICAgICAgKiBmYXN0L2pzL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9yZWdp
b25zL3NjcmlwdC10ZXN0cy93ZWJraXQtZmxvdy1wYXJzaW5nLmpzOgorICAgICAgICAodGVzdFBh
cnNlKToKKyAgICAgICAgKHRlc3RDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKHRlc3ROb3RJbmhl
cml0ZWQpOgorICAgICAgICAodGVzdCk6CisgICAgICAgICogZmFzdC9yZWdpb25zL3dlYmtpdC1m
bG93LXBhcnNpbmctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvcmVnaW9ucy93ZWJraXQt
Zmxvdy1wYXJzaW5nLmh0bWw6CisKIDIwMTItMDMtMDkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBOb3RlIHRoYXQgZmFzdC9ldmVudHMvaW5wdXQtaW1hZ2Utc2Ny
b2xsZWQteC15Lmh0bWwgaXMgZmxha3kuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pz
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNzhh
NWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcwpAQCAtMCwwICsxLDE3NjEgQEAKKy8qDQorRGlzdHJpYnV0ZWQgdW5kZXIgYm90
aCB0aGUgVzNDIFRlc3QgU3VpdGUgTGljZW5zZSBbMV0gYW5kIHRoZSBXM0MNCiszLWNsYXVzZSBC
U0QgTGljZW5zZSBbMl0uIFRvIGNvbnRyaWJ1dGUgdG8gYSBXM0MgVGVzdCBTdWl0ZSwgc2VlIHRo
ZQ0KK3BvbGljaWVzIGFuZCBjb250cmlidXRpb24gZm9ybXMgWzNdLg0KKw0KK1sxXSBodHRwOi8v
d3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDgvMDQtdGVzdHN1aXRlLWxpY2Vuc2UNCitb
Ml0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDA4LzAzLWJzZC1saWNlbnNl
DQorWzNdIGh0dHA6Ly93d3cudzMub3JnLzIwMDQvMTAvMjctdGVzdGNhc2VzDQorKi8NCisNCisv
Kg0KKyAqID09IEludHJvZHVjdGlvbiA9PQ0KKyAqDQorICogVGhpcyBmaWxlIHByb3ZpZGVzIGEg
ZnJhbWV3b3JrIGZvciB3cml0aW5nIHRlc3RjYXNlcy4gSXQgaXMgaW50ZW5kZWQgdG8NCisgKiBw
cm92aWRlIGEgY29udmVuaWVudCBBUEkgZm9yIG1ha2luZyBjb21tb24gYXNzZXJ0aW9ucywgYW5k
IHRvIHdvcmsgYm90aA0KKyAqIGZvciB0ZXN0aW5nIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25v
dXMgRE9NIGZlYXR1cmVzIGluIGEgd2F5IHRoYXQNCisgKiBwcm9tb3RlcyBjbGVhciwgcm9idXN0
LCB0ZXN0cy4NCisgKg0KKyAqID09IEJhc2ljIFVzYWdlID09DQorICoNCisgKiBUbyB1c2UgdGhp
cyBmaWxlLCBpbXBvcnQgdGhlIHNjcmlwdCBhbmQgdGhlIHRlc3RoYXJuZXNzcmVwb3J0IHNjcmlw
dCBpbnRvDQorICogdGhlIHRlc3QgZG9jdW1lbnQ6DQorICogPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pg0KKyAqIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4NCisgKg0KKyAqIFdpdGhpbiBlYWNoIGZp
bGUgb25lIG1heSBkZWZpbmUgb25lIG9yIG1vcmUgdGVzdHMuIEVhY2ggdGVzdCBpcyBhdG9taWMN
CisgKiBpbiB0aGUgc2Vuc2UgdGhhdCBhIHNpbmdsZSB0ZXN0IGhhcyBhIHNpbmdsZSByZXN1bHQg
KHBhc3MvZmFpbC90aW1lb3V0KS4NCisgKiBXaXRoaW4gZWFjaCB0ZXN0IG9uZSBtYXkgaGF2ZSBh
IG51bWJlciBvZiBhc3NlcnRzLiBUaGUgdGVzdCBmYWlscyBhdCB0aGUNCisgKiBmaXJzdCBmYWls
aW5nIGFzc2VydCwgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlc3QgaXMgKHR5cGljYWxseSkg
bm90IHJ1bi4NCisgKg0KKyAqIElmIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIHRlc3RzIGlzIGEg
SFRNTCBmaWxlIHdpdGggYW4gZWxlbWVudCBvZiBpZCAibG9nIg0KKyAqIHRoaXMgd2lsbCBiZSBw
b3B1bGF0ZWQgd2l0aCBhIHRhYmxlIGNvbnRhaW5pbmcgdGhlIHRlc3QgcmVzdWx0cyBhZnRlciBh
bGwNCisgKiB0aGUgdGVzdHMgaGF2ZSBydW4uDQorICoNCisgKiBOT1RFOiBCeSBkZWZhdWx0IHRl
c3RzIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUgdGhlIGxvYWQgZXZlbnQgZmlyZXMuIEZvciB3YXlz
DQorICogICAgICAgdG8gY3JlYXRlIHRlc3RzIGFmdGVyIHRoZSBsb2FkIGV2ZW50LCBzZWUgIkRl
dGVybWluaW5nIHdoZW4gYWxsIHRlc3RzIGFyZQ0KKyAqICAgICAgIGNvbXBsZXRlIiwgYmVsb3cN
CisgKg0KKyAqID09IFN5bmNocm9ub3VzIFRlc3RzID09DQorICoNCisgKiBUbyBjcmVhdGUgYSBz
eW5jaHJvbm91cyB0ZXN0IHVzZSB0aGUgdGVzdCgpIGZ1bmN0aW9uOg0KKyAqDQorICogdGVzdCh0
ZXN0X2Z1bmN0aW9uLCBuYW1lLCBwcm9wZXJ0aWVzKQ0KKyAqDQorICogdGVzdF9mdW5jdGlvbiBp
cyBhIGZ1bmN0aW9uIHRoYXQgY29udGFpbnMgdGhlIGNvZGUgdG8gdGVzdC4gRm9yIGV4YW1wbGUg
YQ0KKyAqIHRyaXZpYWwgcGFzc2luZyB0ZXN0IHdvdWxkIGJlOg0KKyAqDQorICogdGVzdChmdW5j
dGlvbigpIHthc3NlcnRfdHJ1ZSh0cnVlKX0sICJhc3NlcnRfdHJ1ZSB3aXRoIHRydWUiKQ0KKyAq
DQorICogVGhlIGZ1bmN0aW9uIHBhc3NlZCBpbiBpcyBydW4gaW4gdGhlIHRlc3QoKSBjYWxsLg0K
KyAqDQorICogcHJvcGVydGllcyBpcyBhbiBvYmplY3QgdGhhdCBvdmVycmlkZXMgZGVmYXVsdCB0
ZXN0IHByb3BlcnRpZXMuIFRoZSByZWNvZ25pc2VkIHByb3BlcnRpZXMNCisgKiBhcmU6DQorICog
ICAgdGltZW91dCAtIHRoZSB0ZXN0IHRpbWVvdXQgaW4gbXMNCisgKg0KKyAqIGUuZy4NCisgKiB0
ZXN0KHRlc3RfZnVuY3Rpb24sICJTYW1wbGUgdGVzdCIsIHt0aW1lb3V0OjEwMDB9KQ0KKyAqDQor
ICogd291bGQgcnVuIHRlc3RfZnVuY3Rpb24gd2l0aCBhIHRpbWVvdXQgb2YgMXMuDQorICoNCisg
KiA9PSBBc3luY2hyb25vdXMgVGVzdHMgPT0NCisgKg0KKyAqIFRlc3RpbmcgYXN5bmNocm9ub3Vz
IGZlYXR1cmVzIGlzIHNvbWV3aGF0IG1vcmUgY29tcGxleCBzaW5jZSB0aGUgcmVzdWx0IG9mDQor
ICogYSB0ZXN0IG1heSBkZXBlbmQgb24gb25lIG9yIG1vcmUgZXZlbnRzIG9yIG90aGVyIGNhbGxi
YWNrcy4gVGhlIEFQSSBwcm92aWRlZA0KKyAqIGZvciB0ZXN0aW5nIHRoZXNlIGZlYXR1cmVzIGlz
IGluZGVuZGVkIHRvIGJlIHJhdGhlciBsb3ctbGV2ZWwgYnV0IGhvcGVmdWxseQ0KKyAqIGFwcGxp
Y2FibGUgdG8gbWFueSBzaXR1YXRpb25zLg0KKyAqDQorICogVG8gY3JlYXRlIGEgdGVzdCwgb25l
IHN0YXJ0cyBieSBnZXR0aW5nIGEgVGVzdCBvYmplY3QgdXNpbmcgYXN5bmNfdGVzdDoNCisgKg0K
KyAqIGFzeW5jX3Rlc3QobmFtZSwgcHJvcGVydGllcykNCisgKg0KKyAqIGUuZy4NCisgKiB2YXIg
dCA9IGFzeW5jX3Rlc3QoIlNpbXBsZSBhc3luYyB0ZXN0IikNCisgKg0KKyAqIEFzc2VydGlvbnMg
Y2FuIGJlIGFkZGVkIHRvIHRoZSB0ZXN0IGJ5IGNhbGxpbmcgdGhlIHN0ZXAgbWV0aG9kIG9mIHRo
ZSB0ZXN0DQorICogb2JqZWN0IHdpdGggYSBmdW5jdGlvbiBjb250YWluaW5nIHRoZSB0ZXN0IGFz
c2VydGlvbnM6DQorICoNCisgKiB0LnN0ZXAoZnVuY3Rpb24oKSB7YXNzZXJ0X3RydWUodHJ1ZSl9
KTsNCisgKg0KKyAqIFdoZW4gYWxsIHRoZSBzdGVwcyBhcmUgY29tcGxldGUsIHRoZSBkb25lKCkg
bWV0aG9kIG11c3QgYmUgY2FsbGVkOg0KKyAqDQorICogdC5kb25lKCk7DQorICoNCisgKiBUaGUg
cHJvcGVydGllcyBhcmd1bWVudCBpcyBpZGVudGljYWwgdG8gdGhhdCBmb3IgdGVzdCgpLg0KKyAq
DQorICogSW4gbWFueSBjYXNlcyBpdCBpcyBjb252ZW5pZW50IHRvIHJ1biBhIHN0ZXAgaW4gcmVz
cG9uc2UgdG8gYW4gZXZlbnQgb3IgYQ0KKyAqIGNhbGxiYWNrLiBBIGNvbnZlbmllbnQgbWV0aG9k
IG9mIGRvaW5nIHRoaXMgaXMgdGhyb3VnaCB0aGUgc3RlcF9mdW5jIG1ldGhvZA0KKyAqIHdoaWNo
IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCBydW5zIGEgdGVzdCBzdGVwLiBG
b3IgZXhhbXBsZQ0KKyAqDQorICogb2JqZWN0LnNvbWVfZXZlbnQgPSB0LnN0ZXBfZnVuYyhmdW5j
dGlvbihlKSB7YXNzZXJ0X3RydWUoZS5hKX0pOw0KKyAqDQorICogPT0gTWFraW5nIGFzc2VydGlv
bnMgPT0NCisgKg0KKyAqIEZ1bmN0aW9ucyBmb3IgbWFraW5nIGFzc2VydGlvbnMgc3RhcnQgYXNz
ZXJ0Xw0KKyAqIFRoZSBiZXN0IHdheSB0byBnZXQgYSBsaXN0IGlzIHRvIGxvb2sgaW4gdGhpcyBm
aWxlIGZvciBmdW5jdGlvbnMgbmFtZXMNCisgKiBtYXRjaGluZyB0aGF0IHBhdHRlcm4uIFRoZSBn
ZW5lcmFsIHNpZ25hdHVyZSBpcw0KKyAqDQorICogYXNzZXJ0X3NvbWV0aGluZyhhY3R1YWwsIGV4
cGVjdGVkLCBkZXNjcmlwdGlvbikNCisgKg0KKyAqIGFsdGhvdWdoIG5vdCBhbGwgYXNzZXJ0aW9u
cyBwcmVjaXNlbHkgbWF0Y2ggdGhpcyBwYXR0ZXJuIGUuZy4gYXNzZXJ0X3RydWUNCisgKiBvbmx5
IHRha2VzIGFjdHVhbCBhbmQgZGVzY3JpcHRpb24gYXMgYXJndW1lbnRzLg0KKyAqDQorICogVGhl
IGRlc2NyaXB0aW9uIHBhcmFtZXRlciBpcyB1c2VkIHRvIHByZXNlbnQgbW9yZSB1c2VmdWwgZXJy
b3IgbWVzc2FnZXMgd2hlbg0KKyAqIGEgdGVzdCBmYWlscw0KKyAqDQorICogTk9URTogQWxsIGFz
c2VydHMgbXVzdCBiZSBsb2NhdGVkIGluIGEgdGVzdCgpIG9yIGEgc3RlcCBvZiBhbiBhc3luY190
ZXN0KCkuDQorICogICAgICAgYXNzZXJ0cyBvdXRzaWRlIHRoZXNlIHBsYWNlcyB3b24ndCBiZSBk
ZXRlY3RlZCBjb3JyZWN0bHkgYnkgdGhlIGhhcm5lc3MNCisgKiAgICAgICBhbmQgbWF5IGNhdXNl
IGEgZmlsZSB0byBzdG9wIHRlc3RpbmcuDQorICoNCisgKiA9PSBTZXR1cCA9PQ0KKyAqDQorICog
U29tZXRpbWVzIHRlc3RzIHJlcXVpcmUgbm9uLXRyaXZpYWwgc2V0dXAgdGhhdCBtYXkgZmFpbC4g
Rm9yIHRoaXMgcHVycG9zZQ0KKyAqIHRoZXJlIGlzIGEgc2V0dXAoKSBmdW5jdGlvbiwgdGhhdCBt
YXkgYmUgY2FsbGVkIHdpdGggb25lIG9yIHR3byBhcmd1bWVudHMuDQorICogVGhlIHR3byBhcmd1
bWVudCB2ZXJzaW9uIGlzOg0KKyAqDQorICogc2V0dXAoZnVuYywgcHJvcGVydGllcykNCisgKg0K
KyAqIFRoZSBvbmUgYXJndW1lbnQgdmVyc2lvbnMgbWF5IG9taXQgZWl0aGVyIGFyZ3VtZW50Lg0K
KyAqIGZ1bmMgaXMgYSBmdW5jdGlvbiB0byBiZSBydW4gc3luY2hyb25vdXNseS4gc2V0dXAoKSBi
ZWNvbWVzIGEgbm8tb3Agb25jZQ0KKyAqIGFueSB0ZXN0cyBoYXZlIHJldHVybmVkIHJlc3VsdHMu
IFByb3BlcnRpZXMgYXJlIGdsb2JhbCBwcm9wZXJ0aWVzIG9mIHRoZSB0ZXN0DQorICogaGFybmVz
cy4gQ3VycmVudGx5IHJlY29nbmlzZWQgcHJvcGVydGllcyBhcmU6DQorICoNCisgKiB0aW1lb3V0
IC0gVGhlIHRpbWUgaW4gbXMgYWZ0ZXIgd2hpY2ggdGhlIGhhcm5lc3Mgc2hvdWxkIHN0b3Agd2Fp
dGluZyBmb3INCisgKiAgICAgICAgICAgdGVzdHMgdG8gY29tcGxldGUgKHRoaXMgaXMgZGlmZmVy
ZW50IHRvIHRoZSBwZXItdGVzdCB0aW1lb3V0DQorICogICAgICAgICAgIGJlY2F1c2UgYXN5bmMg
dGVzdHMgZG8gbm90IHN0YXJ0IHRoZWlyIHRpbWVyIHVudGlsIC5zdGVwIGlzIGNhbGxlZCkNCisg
Kg0KKyAqIGV4cGxpY2l0X2RvbmUgLSBXYWl0IGZvciBhbiBleHBsaWNpdCBjYWxsIHRvIGRvbmUo
KSBiZWZvcmUgZGVjbGFyaW5nIGFsbCB0ZXN0cw0KKyAqICAgICAgICAgICAgICAgICBjb21wbGV0
ZSAoc2VlIGJlbG93KQ0KKyAqDQorICogb3V0cHV0X2RvY3VtZW50IC0gVGhlIGRvY3VtZW50IHRv
IHdoaWNoIHJlc3VsdHMgc2hvdWxkIGJlIGxvZ2dlZC4gQnkgZGVmYXVsdCB0aGlzIGlzDQorICog
ICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgZG9jdW1lbnQgYnV0IGNvdWxkIGJlIGFuIGFu
Y2VzdG9yIGRvY3VtZW50IGluIHNvbWUgY2FzZXMNCisgKiAgICAgICAgICAgICAgICAgICBlLmcu
IGEgU1ZHIHRlc3QgbG9hZGVkIGluIGFuIEhUTUwgd3JhcHBlcg0KKyAqDQorICogPT0gRGV0ZXJt
aW5pbmcgd2hlbiBhbGwgdGVzdHMgYXJlIGNvbXBsZXRlID09DQorICoNCisgKiBCeSBkZWZhdWx0
IHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCBhc3N1bWUgdGhlcmUgYXJlIG5vIG1vcmUgcmVzdWx0cyB0
byBjb21lDQorICogd2hlbjoNCisgKiAxKSBUaGVyZSBhcmUgbm8gVGVzdCBvYmplY3RzIHRoYXQg
aGF2ZSBiZWVuIGNyZWF0ZWQgYnV0IG5vdCBjb21wbGV0ZWQNCisgKiAyKSBUaGUgbG9hZCBldmVu
dCBvbiB0aGUgZG9jdW1lbnQgaGFzIGZpcmVkDQorICoNCisgKiBUaGlzIGJlaGF2aW91ciBjYW4g
YmUgb3ZlcnJpZGRlbiBieSBzZXR0aW5nIHRoZSBleHBsaWNpdF9kb25lIHByb3BlcnR5IHRvIHRy
dWUNCisgKiBpbiBhIGNhbGwgdG8gc2V0dXAoKS4gSWYgZXhwbGljaXRfZG9uZSBpcyB0cnVlLCB0
aGUgdGVzdCBoYXJuZXNzIHdpbGwgbm90IGFzc3VtZQ0KKyAqIGl0IGlzIGRvbmUgdW50aWwgdGhl
IGdsb2JhbCBkb25lKCkgZnVuY3Rpb24gaXMgY2FsbGVkLiBPbmNlIGRvbmUoKSBpcyBjYWxsZWQs
IHRoZQ0KKyAqIHR3byBjb25kaXRpb25zIGFib3ZlIGFwcGx5IGxpa2Ugbm9ybWFsLg0KKyAqDQor
ICogPT0gR2VuZXJhdGluZyB0ZXN0cyA9PQ0KKyAqDQorICogTk9URTogdGhpcyBmdW5jdGlvbmFs
aXR5IG1heSBiZSByZW1vdmVkDQorICoNCisgKiBUaGVyZSBhcmUgc2NlbmFyaW9zIGluIHdoaWNo
IGlzIGlzIGRlc2lyYWJsZSB0byBjcmVhdGUgYSBsYXJnZSBudW1iZXIgb2YNCisgKiAoc3luY2hy
b25vdXMpIHRlc3RzIHRoYXQgYXJlIGludGVybmFsbHkgc2ltaWxhciBidXQgdmFyeSBpbiB0aGUg
cGFyYW1ldGVycw0KKyAqIHVzZWQuIFRvIG1ha2UgdGhpcyBlYXNpZXIsIHRoZSBnZW5lcmF0ZV90
ZXN0cyBmdW5jdGlvbiBhbGxvd3MgYSBzaW5nbGUNCisgKiBmdW5jdGlvbiB0byBiZSBjYWxsZWQg
d2l0aCBlYWNoIHNldCBvZiBwYXJhbWV0ZXJzIGluIGEgbGlzdDoNCisgKg0KKyAqIGdlbmVyYXRl
X3Rlc3RzKHRlc3RfZnVuY3Rpb24sIHBhcmFtZXRlcl9saXN0cykNCisgKg0KKyAqIEZvciBleGFt
cGxlOg0KKyAqDQorICogZ2VuZXJhdGVfdGVzdHMoYXNzZXJ0X2VxdWFscywgWw0KKyAqICAgICBb
IlN1bSBvbmUgYW5kIG9uZSIsIDErMSwgMl0sDQorICogICAgIFsiU3VtIG9uZSBhbmQgemVybyIs
IDErMCwgMV0NCisgKiAgICAgXSkNCisgKg0KKyAqIElzIGVxdWl2YWxlbnQgdG86DQorICoNCisg
KiB0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF9lcXVhbHMoMSsxLCAyKX0sICJTdW0gb25lIGFuZCBv
bmUiKQ0KKyAqIHRlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscygxKzAsIDEpfSwgIlN1bSBv
bmUgYW5kIHplcm8iKQ0KKyAqDQorICogTm90ZSB0aGF0IHRoZSBmaXJzdCBpdGVtIGluIGVhY2gg
cGFyYW1ldGVyIGxpc3QgY29ycmVzcG9uZHMgdG8gdGhlIG5hbWUgb2YNCisgKiB0aGUgdGVzdC4N
CisgKg0KKyAqID09IENhbGxiYWNrIEFQSSA9PQ0KKyAqDQorICogVGhlIGZyYW1ld29yayBwcm92
aWRlcyBjYWxsYmFja3MgY29ycmVzcG9uZGluZyB0byAzIGV2ZW50czoNCisgKg0KKyAqIHN0YXJ0
IC0gaGFwcGVucyB3aGVuIHRoZSBmaXJzdCBUZXN0IGlzIGNyZWF0ZWQNCisgKiByZXN1bHQgLSBo
YXBwZW5zIHdoZW4gYSB0ZXN0IHJlc3VsdCBpcyByZWNpZXZlZA0KKyAqIGNvbXBsZXRlIC0gaGFw
cGVucyB3aGVuIGFsbCByZXN1bHRzIGFyZSByZWNpZXZlZA0KKyAqDQorICogVGhlIHBhZ2UgZGVm
aW5pbmcgdGhlIHRlc3RzIG1heSBhZGQgY2FsbGJhY2tzIGZvciB0aGVzZSBldmVudHMgYnkgY2Fs
bGluZw0KKyAqIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoNCisgKg0KKyAqICAgYWRkX3N0YXJ0X2Nh
bGxiYWNrKGNhbGxiYWNrKSAtIGNhbGxiYWNrIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cw0KKyAq
ICAgYWRkX3Jlc3VsdF9jYWxsYmFjayhjYWxsYmFjaykgLSBjYWxsYmFjayBjYWxsZWQgd2l0aCBh
IHRlc3QgYXJndW1lbnQNCisgKiAgIGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGNhbGxiYWNrKSAt
IGNhbGxiYWNrIGNhbGxlZCB3aXRoIGFuIGFycmF5IG9mIHRlc3RzDQorICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYW4gc3RhdHVzIG9iamVjdA0KKyAqDQorICog
dGVzdHMgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6DQorICogICBzdGF0dXM6IEEgc3Rh
dHVzIGNvZGUuIFRoaXMgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBQQVNTLCBGQUlMLCBUSU1FT1VU
IGFuZA0KKyAqICAgICAgICAgICBOT1RSVU4gcHJvcGVydGllcyBvbiB0aGUgdGVzdCBvYmplY3QN
CisgKiAgIG1lc3NhZ2U6IEEgbWVzc2FnZSBpbmRpY2F0aW5nIHRoZSByZWFzb24gZm9yIGZhaWx1
cmUuIEluIHRoZSBmdXR1cmUgdGhpcw0KKyAqICAgICAgICAgICAgd2lsbCBhbHdheXMgYmUgYSBz
dHJpbmcNCisgKg0KKyAqICBUaGUgc3RhdHVzIG9iamVjdCBnaXZlcyB0aGUgb3ZlcmFsbCBzdGF0
dXMgb2YgdGhlIGhhcm5lc3MuIEl0IGhhcyB0aGUNCisgKiAgZm9sbG93aW5nIHByb3BlcnRpZXM6
DQorICogICAgc3RhdHVzOiBDYW4gYmUgY29tcGFyZWQgdG8gdGhlIE9LLCBFUlJPUiBhbmQgVElN
RU9VVCBwcm9wZXJ0aWVzDQorICogICAgbWVzc2FnZTogQW4gZXJyb3IgbWVzc2FnZSBzZXQgd2hl
biB0aGUgc3RhdHVzIGlzIEVSUk9SDQorICoNCisgKiA9PSBFeHRlcm5hbCBBUEkgPT0NCisgKg0K
KyAqIEluIG9yZGVyIHRvIGNvbGxlY3QgdGhlIHJlc3VsdHMgb2YgbXVsdGlwbGUgcGFnZXMgY29u
dGFpbmluZyB0ZXN0cywgdGhlIHRlc3QNCisgKiBoYXJuZXNzIHdpbGwsIHdoZW4gbG9hZGVkIGlu
IGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIGF0dGVtcHQgdG8gY2FsbA0KKyAqIGNlcnRhaW4g
ZnVuY3Rpb25zIGluIGVhY2ggYW5jZXN0b3IgYnJvd3NpbmcgY29udGV4dDoNCisgKg0KKyAqIHN0
YXJ0IC0gc3RhcnRfY2FsbGJhY2sNCisgKiByZXN1bHQgLSByZXN1bHRfY2FsbGJhY2sNCisgKiBj
b21wbGV0ZSAtIGNvbXBsZXRpb25fY2FsbGJhY2sNCisgKg0KKyAqIFRoZXNlIGFyZSBnaXZlbiB0
aGUgc2FtZSBhcmd1bWVudHMgYXMgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJuYWwgY2FsbGJhY2tz
DQorICogZGVzY3JpYmVkIGFib3ZlLg0KKyAqDQorICogPT0gTGlzdCBvZiBhc3NlcnRpb25zID09
DQorICoNCisgKiBhc3NlcnRfdHJ1ZShhY3R1YWwsIGRlc2NyaXB0aW9uKQ0KKyAqICAgYXNzZXJ0
cyB0aGF0IC9hY3R1YWwvIGlzIHN0cmljdGx5IHRydWUNCisgKg0KKyAqIGFzc2VydF9mYWxzZShh
Y3R1YWwsIGRlc2NyaXB0aW9uKQ0KKyAqICAgYXNzZXJ0cyB0aGF0IC9hY3R1YWwvIGlzIHN0cmlj
dGx5IGZhbHNlDQorICoNCisgKiBhc3NlcnRfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2Ny
aXB0aW9uKQ0KKyAqICAgYXNzZXJ0cyB0aGF0IC9hY3R1YWwvIGlzIHRoZSBzYW1lIHZhbHVlIGFz
IC9leHBlY3RlZC8NCisgKg0KKyAqIGFzc2VydF9ub3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQs
IGRlc2NyaXB0aW9uKQ0KKyAqICAgYXNzZXJ0cyB0aGF0IC9hY3R1YWwvIGlzIGEgZGlmZmVyZW50
IHZhbHVlIHRvIC9leHBlY3RlZC8uIFllcywgdGhpcyBtZWFucw0KKyAqICAgdGhhdCAiZXhwZWN0
ZWQiIGlzIGEgbWlzbm9tZXINCisgKg0KKyAqIGFzc2VydF9pbl9hcnJheShhY3R1YWwsIGV4cGVj
dGVkLCBkZXNjcmlwdGlvbikNCisgKiAgIGFzc2VydHMgdGhhdCAvZXhwZWN0ZWQvIGlzIGFuIEFy
cmF5LCBhbmQgL2FjdHVhbC8gaXMgZXF1YWwgdG8gb25lIG9mIHRoZQ0KKyAqICAgbWVtYmVycyAt
LSBleHBlY3RlZC5pbmRleE9mKGFjdHVhbCkgIT0gLTENCisgKg0KKyAqIGFzc2VydF9hcnJheV9l
cXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pDQorICogICBhc3NlcnRzIHRoYXQg
L2FjdHVhbC8gYW5kIC9leHBlY3RlZC8gaGF2ZSB0aGUgc2FtZSBsZW5ndGggYW5kIHRoZSB2YWx1
ZSBvZg0KKyAqICAgZWFjaCBpbmRleGVkIHByb3BlcnR5IGluIC9hY3R1YWwvIGlzIHRoZSBzdHJp
Y3RseSBlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZw0KKyAqICAgcHJvcGVydHkgdmFsdWUgaW4g
L2V4cGVjdGVkLw0KKyAqDQorICogYXNzZXJ0X2FwcHJveF9lcXVhbHMoYWN0dWFsLCBleHBlY3Rl
ZCwgZXBzaWxvbiwgZGVzY3JpcHRpb24pDQorICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gaXMg
YSBudW1iZXIgd2l0aGluICsvLSAvZXBzaWxvbi8gb2YgL2V4cGVjdGVkLw0KKyAqDQorICogYXNz
ZXJ0X3JlZ2V4cF9tYXRjaChhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCisgKiAgIGFz
c2VydHMgdGhhdCAvYWN0dWFsLyBtYXRjaGVzIHRoZSByZWdleHAgL2V4cGVjdGVkLw0KKyAqDQor
ICogYXNzZXJ0X293bl9wcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9u
KQ0KKyAqICAgYXNzZXJ0IHRoYXQgb2JqZWN0IGhhcyBvd24gcHJvcGVydHkgcHJvcGVydHlfbmFt
ZQ0KKyAqDQorICogYXNzZXJ0X2luaGVyaXRzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3Jp
cHRpb24pDQorICogICBhc3NlcnQgdGhhdCBvYmplY3QgZG9lcyBub3QgaGF2ZSBhbiBvd24gcHJv
cGVydHkgbmFtZWQgcHJvcGVydHlfbmFtZQ0KKyAqICAgYnV0IHRoYXQgcHJvcGVydHlfbmFtZSBp
cyBwcmVzZW50IGluIHRoZSBwcm90b3R5cGUgY2hhaW4gZm9yIG9iamVjdA0KKyAqDQorICogYXNz
ZXJ0X2lkbF9hdHRyaWJ1dGUob2JqZWN0LCBhdHRyaWJ1dGVfbmFtZSwgZGVzY3JpcHRpb24pDQor
ICogICBhc3NlcnQgdGhhdCBhbiBvYmplY3QgdGhhdCBpcyBhbiBpbnN0YW5jZSBvZiBzb21lIGlu
dGVyZmFjZSBoYXMgdGhlDQorICogICBhdHRyaWJ1dGUgYXR0cmlidXRlX25hbWUgZm9sbG93aW5n
IHRoZSBjb25kaXRpb25zIHNwZWNpZmllZCBieSBXZWJJREwNCisgKg0KKyAqIGFzc2VydF9yZWFk
b25seShvYmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KKyAqICAgYXNzZXJ0IHRo
YXQgcHJvcGVydHkgcHJvcGVydHlfbmFtZSBvbiBvYmplY3QgaXMgcmVhZG9ubHkNCisgKg0KKyAq
IGFzc2VydF90aHJvd3MoY29kZSwgZnVuYywgZGVzY3JpcHRpb24pDQorICogICBjb2RlIC0gYSBE
T01FeGNlcHRpb24vUmFuZ2VFeGNlcHRpb24gY29kZSBhcyBhIHN0cmluZywgZS5nLiAiSElFUkFS
Q0hZX1JFUVVFU1RfRVJSIg0KKyAqICAgZnVuYyAtIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgdGhy
b3cNCisgKg0KKyAqICAgYXNzZXJ0IHRoYXQgZnVuYyB0aHJvd3MgYSBET01FeGNlcHRpb24gb3Ig
UmFuZ2VFeGNlcHRpb24gKGFzIGFwcHJvcHJpYXRlKQ0KKyAqICAgd2l0aCB0aGUgZ2l2ZW4gY29k
ZS4gIElmIGFuIG9iamVjdCBpcyBwYXNzZWQgZm9yIGNvZGUgaW5zdGVhZCBvZiBhIHN0cmluZywN
CisgKiAgIGNoZWNrcyB0aGF0IHRoZSB0aHJvd24gZXhjZXB0aW9uIGhhcyBhIHByb3BlcnR5IGNh
bGxlZCAibmFtZSIgdGhhdCBtYXRjaGVzDQorICogICB0aGUgcHJvcGVydHkgb2YgY29kZSBjYWxs
ZWQgIm5hbWUiLiAgTm90ZSwgdGhpcyBmdW5jdGlvbiB3aWxsIHByb2JhYmx5IGJlDQorICogICBy
ZXdyaXR0ZW4gc29tZXRpbWUgdG8gbWFrZSBtb3JlIHNlbnNlLg0KKyAqDQorICogYXNzZXJ0X3Vu
cmVhY2hlZChkZXNjcmlwdGlvbikNCisgKiAgIGFzc2VydHMgaWYgY2FsbGVkLiBVc2VkIHRvIGVu
c3VyZSB0aGF0IHNvbWUgY29kZXBhdGggaXMgKm5vdCogdGFrZW4gZS5nLg0KKyAqICAgYW4gZXZl
bnQgZG9lcyBub3QgZmlyZS4NCisgKg0KKyAqIGFzc2VydF9leGlzdHMob2JqZWN0LCBwcm9wZXJ0
eV9uYW1lLCBkZXNjcmlwdGlvbikNCisgKiAgICoqKiBkZXByZWNhdGVkICoqKg0KKyAqICAgYXNz
ZXJ0cyB0aGF0IG9iamVjdCBoYXMgYW4gb3duIHByb3BlcnR5IHByb3BlcnR5X25hbWUNCisgKg0K
KyAqIGFzc2VydF9ub3RfZXhpc3RzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24p
DQorICogICAqKiogZGVwcmVjYXRlZCAqKioNCisgKiAgIGFzc2VydCB0aGF0IG9iamVjdCBkb2Vz
IG5vdCBoYXZlIG93biBwcm9wZXJ0eSBwcm9wZXJ0eV9uYW1lDQorICovDQorDQorKGZ1bmN0aW9u
ICgpDQorew0KKyAgICB2YXIgZGVidWcgPSBmYWxzZTsNCisgICAgLy8gZGVmYXVsdCB0aW1lb3V0
IGlzIDUgc2Vjb25kcywgdGVzdCBjYW4gb3ZlcnJpZGUgaWYgbmVlZGVkDQorICAgIHZhciBzZXR0
aW5ncyA9IHsNCisgICAgICBvdXRwdXQ6dHJ1ZSwNCisgICAgICB0aW1lb3V0OjUwMDAsDQorICAg
ICAgdGVzdF90aW1lb3V0OjIwMDANCisgICAgfTsNCisNCisgICAgdmFyIHhodG1sX25zID0gImh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOw0KKw0KKyAgICAvLyBzY3JpcHRfcHJlZml4IGlz
IHVzZWQgYnkgT3V0cHV0LnByb3RvdHlwZS5zaG93X3Jlc3VsdHMoKSB0byBmaWd1cmUgb3V0DQor
ICAgIC8vIHdoZXJlIHRvIGdldCB0ZXN0aGFybmVzcy5jc3MgZnJvbS4gIEl0J3MgZW5jbG9zZWQg
aW4gYW4gZXh0cmEgY2xvc3VyZSB0bw0KKyAgICAvLyBub3QgcG9sbHV0ZSB0aGUgbGlicmFyeSdz
IG5hbWVzcGFjZSB3aXRoIHZhcmlhYmxlcyBsaWtlICJzcmMiLg0KKyAgICB2YXIgc2NyaXB0X3By
ZWZpeCA9IG51bGw7DQorICAgIChmdW5jdGlvbiAoKQ0KKyAgICB7DQorICAgICAgICB2YXIgc2Ny
aXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTsNCisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykNCisgICAgICAgIHsNCisg
ICAgICAgICAgICBpZiAoc2NyaXB0c1tpXS5zcmMpDQorICAgICAgICAgICAgew0KKyAgICAgICAg
ICAgICAgICB2YXIgc3JjID0gc2NyaXB0c1tpXS5zcmM7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKHNjcmlwdHNbaV0uaHJlZikNCisgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgIC8vU1ZHIGNhc2UNCisgICAgICAgICAgICAgICAgdmFyIHNyYyA9IHNjcmlwdHNb
aV0uaHJlZi5iYXNlVmFsOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBpZiAoc3JjICYm
IHNyYy5zbGljZShzcmMubGVuZ3RoIC0gInRlc3RoYXJuZXNzLmpzIi5sZW5ndGgpID09PSAidGVz
dGhhcm5lc3MuanMiKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2NyaXB0X3By
ZWZpeCA9IHNyYy5zbGljZSgwLCBzcmMubGVuZ3RoIC0gInRlc3RoYXJuZXNzLmpzIi5sZW5ndGgp
Ow0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQor
ICAgIH0pKCk7DQorDQorICAgIC8qDQorICAgICAqIEFQSSBmdW5jdGlvbnMNCisgICAgICovDQor
DQorICAgIHZhciBuYW1lX2NvdW50ZXIgPSAwOw0KKyAgICBmdW5jdGlvbiBuZXh0X2RlZmF1bHRf
bmFtZSgpDQorICAgIHsNCisgICAgICAgIC8vRG9uJ3QgdXNlIGRvY3VtZW50LnRpdGxlIHRvIHdv
cmsgYXJvdW5kIGFuIE9wZXJhIGJ1ZyBpbiBYSFRNTCBkb2N1bWVudHMNCisgICAgICAgIHZhciBw
cmVmaXggPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGl0bGUiKS5sZW5ndGggPiAw
ID8NCisgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoInRpdGxlIilbMF0uZmlyc3RDaGlsZC5kYXRhIDoNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIlVudGl0bGVkIjsNCisgICAgICAgIHZhciBzdWZmaXggPSBuYW1lX2NvdW50ZXIgPiAwID8g
IiAiICsgbmFtZV9jb3VudGVyIDogIiI7DQorICAgICAgICBuYW1lX2NvdW50ZXIrKzsNCisgICAg
ICAgIHJldHVybiBwcmVmaXggKyBzdWZmaXg7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gdGVz
dChmdW5jLCBuYW1lLCBwcm9wZXJ0aWVzKQ0KKyAgICB7DQorICAgICAgICB2YXIgdGVzdF9uYW1l
ID0gbmFtZSA/IG5hbWUgOiBuZXh0X2RlZmF1bHRfbmFtZSgpOw0KKyAgICAgICAgcHJvcGVydGll
cyA9IHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzIDoge307DQorICAgICAgICB2YXIgdGVzdF9vYmog
PSBuZXcgVGVzdCh0ZXN0X25hbWUsIHByb3BlcnRpZXMpOw0KKyAgICAgICAgdGVzdF9vYmouc3Rl
cChmdW5jKTsNCisgICAgICAgIGlmICh0ZXN0X29iai5zdGF0dXMgPT09IHRlc3Rfb2JqLk5PVFJV
Tikgew0KKyAgICAgICAgICAgIHRlc3Rfb2JqLmRvbmUoKTsNCisgICAgICAgIH0NCisgICAgfQ0K
Kw0KKyAgICBmdW5jdGlvbiBhc3luY190ZXN0KG5hbWUsIHByb3BlcnRpZXMpDQorICAgIHsNCisg
ICAgICAgIHZhciB0ZXN0X25hbWUgPSBuYW1lID8gbmFtZSA6IG5leHRfZGVmYXVsdF9uYW1lKCk7
DQorICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyA/IHByb3BlcnRpZXMgOiB7fTsNCisg
ICAgICAgIHZhciB0ZXN0X29iaiA9IG5ldyBUZXN0KHRlc3RfbmFtZSwgcHJvcGVydGllcyk7DQor
ICAgICAgICByZXR1cm4gdGVzdF9vYmo7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gc2V0dXAo
ZnVuY19vcl9wcm9wZXJ0aWVzLCBtYXliZV9wcm9wZXJ0aWVzKQ0KKyAgICB7DQorICAgICAgICB2
YXIgZnVuYyA9IG51bGw7DQorICAgICAgICB2YXIgcHJvcGVydGllcyA9IHt9Ow0KKyAgICAgICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsNCisgICAgICAgICAgICBmdW5jID0gZnVuY19v
cl9wcm9wZXJ0aWVzOw0KKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSBtYXliZV9wcm9wZXJ0aWVz
Ow0KKyAgICAgICAgfSBlbHNlIGlmIChmdW5jX29yX3Byb3BlcnRpZXMgaW5zdGFuY2VvZiBGdW5j
dGlvbil7DQorICAgICAgICAgICAgZnVuYyA9IGZ1bmNfb3JfcHJvcGVydGllczsNCisgICAgICAg
IH0gZWxzZSB7DQorICAgICAgICAgICAgcHJvcGVydGllcyA9IGZ1bmNfb3JfcHJvcGVydGllczsN
CisgICAgICAgIH0NCisgICAgICAgIHRlc3RzLnNldHVwKGZ1bmMsIHByb3BlcnRpZXMpOw0KKyAg
ICAgICAgb3V0cHV0LnNldHVwKHByb3BlcnRpZXMpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9u
IGRvbmUoKSB7DQorICAgICAgICB0ZXN0cy5lbmRfd2FpdCgpOw0KKyAgICB9DQorDQorICAgIGZ1
bmN0aW9uIGdlbmVyYXRlX3Rlc3RzKGZ1bmMsIGFyZ3MpIHsNCisgICAgICAgIGZvckVhY2goYXJn
cywgZnVuY3Rpb24oeCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAg
dmFyIG5hbWUgPSB4WzBdOw0KKyAgICAgICAgICAgICAgICAgICAgdGVzdChmdW5jdGlvbigpDQor
ICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmMuYXBwbHkodGhpcywgeC5zbGljZSgxKSk7DQorICAgICAgICAgICAgICAgICAgICAgICAg
IH0sIG5hbWUpOw0KKyAgICAgICAgICAgICAgICB9KTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlv
biBvbl9ldmVudChvYmplY3QsIGV2ZW50LCBjYWxsYmFjaykNCisgICAgew0KKyAgICAgIG9iamVj
dC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjaywgZmFsc2UpOw0KKyAgICB9DQorDQor
ICAgIGV4cG9zZSh0ZXN0LCAndGVzdCcpOw0KKyAgICBleHBvc2UoYXN5bmNfdGVzdCwgJ2FzeW5j
X3Rlc3QnKTsNCisgICAgZXhwb3NlKGdlbmVyYXRlX3Rlc3RzLCAnZ2VuZXJhdGVfdGVzdHMnKTsN
CisgICAgZXhwb3NlKHNldHVwLCAnc2V0dXAnKTsNCisgICAgZXhwb3NlKGRvbmUsICdkb25lJyk7
DQorICAgIGV4cG9zZShvbl9ldmVudCwgJ29uX2V2ZW50Jyk7DQorDQorICAgIC8qDQorICAgICAq
IFJldHVybiBhIHN0cmluZyB0cnVuY2F0ZWQgdG8gdGhlIGdpdmVuIGxlbmd0aCwgd2l0aCAuLi4g
YWRkZWQgYXQgdGhlIGVuZA0KKyAgICAgKiBpZiBpdCB3YXMgbG9uZ2VyLg0KKyAgICAgKi8NCisg
ICAgZnVuY3Rpb24gdHJ1bmNhdGUocywgbGVuKQ0KKyAgICB7DQorICAgICAgICBpZiAocy5sZW5n
dGggPiBsZW4pIHsNCisgICAgICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCwgbGVuIC0gMykg
KyAiLi4uIjsNCisgICAgICAgIH0NCisgICAgICAgIHJldHVybiBzOw0KKyAgICB9DQorDQorICAg
IGZ1bmN0aW9uIGZvcm1hdF9zdHJpbmcoc3RyKSB7DQorICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDMyOyBpKyspIHsNCisgICAgICAgICAgICB2YXIgcmVwbGFjZSA9ICJcXCI7DQorICAgICAg
ICAgICAgc3dpdGNoIChpKSB7DQorICAgICAgICAgICAgY2FzZSAwOiByZXBsYWNlICs9ICIwIjsg
YnJlYWs7DQorICAgICAgICAgICAgY2FzZSAxOiByZXBsYWNlICs9ICJ4MDEiOyBicmVhazsNCisg
ICAgICAgICAgICBjYXNlIDI6IHJlcGxhY2UgKz0gIngwMiI7IGJyZWFrOw0KKyAgICAgICAgICAg
IGNhc2UgMzogcmVwbGFjZSArPSAieDAzIjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSA0OiBy
ZXBsYWNlICs9ICJ4MDQiOyBicmVhazsNCisgICAgICAgICAgICBjYXNlIDU6IHJlcGxhY2UgKz0g
IngwNSI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgNjogcmVwbGFjZSArPSAieDA2IjsgYnJl
YWs7DQorICAgICAgICAgICAgY2FzZSA3OiByZXBsYWNlICs9ICJ4MDciOyBicmVhazsNCisgICAg
ICAgICAgICBjYXNlIDg6IHJlcGxhY2UgKz0gImIiOyBicmVhazsNCisgICAgICAgICAgICBjYXNl
IDk6IHJlcGxhY2UgKz0gInQiOyBicmVhazsNCisgICAgICAgICAgICBjYXNlIDEwOiByZXBsYWNl
ICs9ICJuIjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAxMTogcmVwbGFjZSArPSAidiI7IGJy
ZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMTI6IHJlcGxhY2UgKz0gImYiOyBicmVhazsNCisgICAg
ICAgICAgICBjYXNlIDEzOiByZXBsYWNlICs9ICJyIjsgYnJlYWs7DQorICAgICAgICAgICAgY2Fz
ZSAxNDogcmVwbGFjZSArPSAieDBlIjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAxNTogcmVw
bGFjZSArPSAieDBmIjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAxNjogcmVwbGFjZSArPSAi
eDEwIjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAxNzogcmVwbGFjZSArPSAieDExIjsgYnJl
YWs7DQorICAgICAgICAgICAgY2FzZSAxODogcmVwbGFjZSArPSAieDEyIjsgYnJlYWs7DQorICAg
ICAgICAgICAgY2FzZSAxOTogcmVwbGFjZSArPSAieDEzIjsgYnJlYWs7DQorICAgICAgICAgICAg
Y2FzZSAyMDogcmVwbGFjZSArPSAieDE0IjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAyMTog
cmVwbGFjZSArPSAieDE1IjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAyMjogcmVwbGFjZSAr
PSAieDE2IjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAyMzogcmVwbGFjZSArPSAieDE3Ijsg
YnJlYWs7DQorICAgICAgICAgICAgY2FzZSAyNDogcmVwbGFjZSArPSAieDE4IjsgYnJlYWs7DQor
ICAgICAgICAgICAgY2FzZSAyNTogcmVwbGFjZSArPSAieDE5IjsgYnJlYWs7DQorICAgICAgICAg
ICAgY2FzZSAyNjogcmVwbGFjZSArPSAieDFhIjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAy
NzogcmVwbGFjZSArPSAieDFiIjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAyODogcmVwbGFj
ZSArPSAieDFjIjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAyOTogcmVwbGFjZSArPSAieDFk
IjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAzMDogcmVwbGFjZSArPSAieDFlIjsgYnJlYWs7
DQorICAgICAgICAgICAgY2FzZSAzMTogcmVwbGFjZSArPSAieDFmIjsgYnJlYWs7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKFJlZ0V4cChTdHJpbmcuZnJv
bUNoYXJDb2RlKGkpLCAiZyIpLCByZXBsYWNlKTsNCisgICAgICAgIH0NCisgICAgICAgIHJldHVy
biBzdHIucmVwbGFjZSgvIi9nLCAnXFwiJykNCisgICAgfQ0KKw0KKyAgICAvKg0KKyAgICAgKiBD
b252ZXJ0IGEgdmFsdWUgdG8gYSBuaWNlLCBodW1hbi1yZWFkYWJsZSBzdHJpbmcNCisgICAgICov
DQorICAgIGZ1bmN0aW9uIGZvcm1hdF92YWx1ZSh2YWwpDQorICAgIHsNCisgICAgICAgIGlmIChB
cnJheS5pc0FycmF5KHZhbCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuICJbIiAr
IHZhbC5tYXAoZm9ybWF0X3ZhbHVlKS5qb2luKCIsICIpICsgIl0iOw0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsKQ0KKyAgICAgICAgew0KKyAgICAgICAgY2FzZSAi
c3RyaW5nIjoNCisgICAgICAgICAgICByZXR1cm4gJyInICsgZm9ybWF0X3N0cmluZyh2YWwpICsg
JyInOw0KKyAgICAgICAgY2FzZSAiYm9vbGVhbiI6DQorICAgICAgICBjYXNlICJ1bmRlZmluZWQi
Og0KKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsKTsNCisgICAgICAgIGNhc2UgIm51bWJl
ciI6DQorICAgICAgICAgICAgLy8gSW4gSmF2YVNjcmlwdCwgLTAgPT09IDAgYW5kIFN0cmluZygt
MCkgPT0gIjAiLCBzbyB3ZSBoYXZlIHRvDQorICAgICAgICAgICAgLy8gc3BlY2lhbC1jYXNlLg0K
KyAgICAgICAgICAgIGlmICh2YWwgPT09IC0wICYmIDEvdmFsID09PSAtSW5maW5pdHkpDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gIi0wIjsNCisgICAgICAgICAgICB9
DQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWwpOw0KKyAgICAgICAgY2FzZSAib2JqZWN0
IjoNCisgICAgICAgICAgICBpZiAodmFsID09PSBudWxsKQ0KKyAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgcmV0dXJuICJudWxsIjsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAg
ICAgLy8gU3BlY2lhbC1jYXNlIE5vZGUgb2JqZWN0cywgc2luY2UgdGhvc2UgY29tZSB1cCBhIGxv
dCBpbiBteSB0ZXN0cy4gIEkNCisgICAgICAgICAgICAvLyBpZ25vcmUgbmFtZXNwYWNlcy4gIEkg
dXNlIGR1Y2stdHlwaW5nIGluc3RlYWQgb2YgaW5zdGFuY2VvZiwgYmVjYXVzZQ0KKyAgICAgICAg
ICAgIC8vIGluc3RhbmNlb2YgZG9lc24ndCB3b3JrIGlmIHRoZSBub2RlIGlzIGZyb20gYW5vdGhl
ciB3aW5kb3cgKGxpa2UgYW4NCisgICAgICAgICAgICAvLyBpZnJhbWUncyBjb250ZW50V2luZG93
KToNCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1
Zy5jZ2k/aWQ9MTIyOTUNCisgICAgICAgICAgICBpZiAoIm5vZGVUeXBlIiBpbiB2YWwNCisgICAg
ICAgICAgICAmJiAibm9kZU5hbWUiIGluIHZhbA0KKyAgICAgICAgICAgICYmICJub2RlVmFsdWUi
IGluIHZhbA0KKyAgICAgICAgICAgICYmICJjaGlsZE5vZGVzIiBpbiB2YWwpDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbC5ub2RlVHlwZSkNCisgICAgICAgICAg
ICAgICAgew0KKyAgICAgICAgICAgICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOg0KKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHJldCA9ICI8IiArIHZhbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7
DQorICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5hdHRyaWJ1dGVz
Lmxlbmd0aDsgaSsrKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldCArPSAiICIgKyB2YWwuYXR0cmlidXRlc1tpXS5uYW1lICsgJz0iJyArIHZhbC5h
dHRyaWJ1dGVzW2ldLnZhbHVlICsgJyInOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgICAgICAgICAgcmV0ICs9ICI+IiArIHZhbC5pbm5lckhUTUwgKyAiPC8iICsgdmFsLnRh
Z05hbWUudG9Mb3dlckNhc2UoKSArICI+IjsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAi
RWxlbWVudCBub2RlICIgKyB0cnVuY2F0ZShyZXQsIDYwKTsNCisgICAgICAgICAgICAgICAgY2Fz
ZSBOb2RlLlRFWFRfTk9ERToNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnVGV4dCBub2Rl
ICInICsgdHJ1bmNhdGUodmFsLmRhdGEsIDYwKSArICciJzsNCisgICAgICAgICAgICAgICAgY2Fz
ZSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToNCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAiUHJvY2Vzc2luZ0luc3RydWN0aW9uIG5vZGUgd2l0aCB0YXJnZXQgIiArIGZvcm1h
dF92YWx1ZSh0cnVuY2F0ZSh2YWwudGFyZ2V0LCA2MCkpICsgIiBhbmQgZGF0YSAiICsgZm9ybWF0
X3ZhbHVlKHRydW5jYXRlKHZhbC5kYXRhLCA2MCkpOw0KKyAgICAgICAgICAgICAgICBjYXNlIE5v
ZGUuQ09NTUVOVF9OT0RFOg0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb21tZW50IG5v
ZGUgPCEtLSIgKyB0cnVuY2F0ZSh2YWwuZGF0YSwgNjApICsgIi0tPiI7DQorICAgICAgICAgICAg
ICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9OT0RFOg0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJEb2N1bWVudCBub2RlIHdpdGggIiArIHZhbC5jaGlsZE5vZGVzLmxlbmd0aCArICh2YWwuY2hp
bGROb2Rlcy5sZW5ndGggPT0gMSA/ICIgY2hpbGQiIDogIiBjaGlsZHJlbiIpOw0KKyAgICAgICAg
ICAgICAgICBjYXNlIE5vZGUuRE9DVU1FTlRfVFlQRV9OT0RFOg0KKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJEb2N1bWVudFR5cGUgbm9kZSI7DQorICAgICAgICAgICAgICAgIGNhc2UgTm9k
ZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOg0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJE
b2N1bWVudEZyYWdtZW50IG5vZGUgd2l0aCAiICsgdmFsLmNoaWxkTm9kZXMubGVuZ3RoICsgKHZh
bC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxID8gIiBjaGlsZCIgOiAiIGNoaWxkcmVuIik7DQorICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIk5vZGUg
b2JqZWN0IG9mIHVua25vd24gdHlwZSI7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAg
ICB9DQorDQorICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQNCisgICAgICAg
IGRlZmF1bHQ6DQorICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgKyAnICInICsgdHJ1bmNh
dGUoU3RyaW5nKHZhbCksIDYwKSArICciJzsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBleHBv
c2UoZm9ybWF0X3ZhbHVlLCAiZm9ybWF0X3ZhbHVlIik7DQorDQorICAgIC8qDQorICAgICAqIEFz
c2VydGlvbnMNCisgICAgICovDQorDQorICAgIGZ1bmN0aW9uIGFzc2VydF90cnVlKGFjdHVhbCwg
ZGVzY3JpcHRpb24pDQorICAgIHsNCisgICAgICAgIGFzc2VydChhY3R1YWwgPT09IHRydWUsICJh
c3NlcnRfdHJ1ZSIsIGRlc2NyaXB0aW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImV4cGVjdGVkIHRydWUgZ290ICR7YWN0dWFsfSIsIHthY3R1YWw6YWN0dWFsfSk7DQorICAg
IH07DQorICAgIGV4cG9zZShhc3NlcnRfdHJ1ZSwgImFzc2VydF90cnVlIik7DQorDQorICAgIGZ1
bmN0aW9uIGFzc2VydF9mYWxzZShhY3R1YWwsIGRlc2NyaXB0aW9uKQ0KKyAgICB7DQorICAgICAg
ICBhc3NlcnQoYWN0dWFsID09PSBmYWxzZSwgImFzc2VydF9mYWxzZSIsIGRlc2NyaXB0aW9uLA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBmYWxzZSBnb3QgJHth
Y3R1YWx9Iiwge2FjdHVhbDphY3R1YWx9KTsNCisgICAgfTsNCisgICAgZXhwb3NlKGFzc2VydF9m
YWxzZSwgImFzc2VydF9mYWxzZSIpOw0KKw0KKyAgICBmdW5jdGlvbiBzYW1lX3ZhbHVlKHgsIHkp
IHsNCisgICAgICAgIGlmICh5ICE9PSB5KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8vTmFO
IGNhc2UNCisgICAgICAgICAgICByZXR1cm4geCAhPT0geDsNCisgICAgICAgIH0NCisgICAgICAg
IGVsc2UgaWYgKHggPT09IDAgJiYgeSA9PT0gMCkgew0KKyAgICAgICAgICAgIC8vRGlzdGluZ3Vp
c2ggKzAgYW5kIC0wDQorICAgICAgICAgICAgcmV0dXJuIDEveCA9PT0gMS95Ow0KKyAgICAgICAg
fQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8vdHlwaWNhbCBjYXNl
DQorICAgICAgICAgICAgcmV0dXJuIHggPT09IHk7DQorICAgICAgICB9DQorICAgIH0NCisNCisg
ICAgZnVuY3Rpb24gYXNzZXJ0X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikN
CisgICAgew0KKyAgICAgICAgIC8qDQorICAgICAgICAgICogVGVzdCBpZiB0d28gcHJpbWl0aXZl
cyBhcmUgZXF1YWwgb3IgdHdvIG9iamVjdHMNCisgICAgICAgICAgKiBhcmUgdGhlIHNhbWUgb2Jq
ZWN0DQorICAgICAgICAgICovDQorICAgICAgICBhc3NlcnQoc2FtZV92YWx1ZShhY3R1YWwsIGV4
cGVjdGVkKSwgImFzc2VydF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdv
dCAke2FjdHVhbH0iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0dWFsOmFjdHVhbH0pOw0KKyAgICB9Ow0KKyAgICBl
eHBvc2UoYXNzZXJ0X2VxdWFscywgImFzc2VydF9lcXVhbHMiKTsNCisNCisgICAgZnVuY3Rpb24g
YXNzZXJ0X25vdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pDQorICAgIHsN
CisgICAgICAgICAvKg0KKyAgICAgICAgICAqIFRlc3QgaWYgdHdvIHByaW1pdGl2ZXMgYXJlIHVu
ZXF1YWwgb3IgdHdvIG9iamVjdHMNCisgICAgICAgICAgKiBhcmUgZGlmZmVyZW50IG9iamVjdHMN
CisgICAgICAgICAgKi8NCisgICAgICAgIGFzc2VydCghc2FtZV92YWx1ZShhY3R1YWwsIGV4cGVj
dGVkKSwgImFzc2VydF9ub3RfZXF1YWxzIiwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnb3QgZGlzYWxsb3dlZCB2YWx1ZSAke2Fj
dHVhbH0iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
YWN0dWFsOmFjdHVhbH0pOw0KKyAgICB9Ow0KKyAgICBleHBvc2UoYXNzZXJ0X25vdF9lcXVhbHMs
ICJhc3NlcnRfbm90X2VxdWFscyIpOw0KKw0KKyAgICBmdW5jdGlvbiBhc3NlcnRfaW5fYXJyYXko
YWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pDQorICAgIHsNCisgICAgICAgIGFzc2VydChl
eHBlY3RlZC5pbmRleE9mKGFjdHVhbCkgIT0gLTEsICJhc3NlcnRfaW5fYXJyYXkiLCBkZXNjcmlw
dGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2
YWx1ZSAke2FjdHVhbH0gbm90IGluIGFycmF5ICR7ZXhwZWN0ZWR9IiwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthY3R1YWw6YWN0dWFsLCBleHBlY3Rl
ZDpleHBlY3RlZH0pOw0KKyAgICB9DQorICAgIGV4cG9zZShhc3NlcnRfaW5fYXJyYXksICJhc3Nl
cnRfaW5fYXJyYXkiKTsNCisNCisgICAgZnVuY3Rpb24gYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0
dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pDQorICAgIHsNCisgICAgICAgICAvL1RoaXMgbmVl
ZHMgdG8gYmUgaW1wcm92ZWQgYSBncmVhdCBkZWFsDQorICAgICAgICAgZnVuY3Rpb24gY2hlY2tf
ZXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCwgc3RhY2spDQorICAgICAgICAgew0KKyAgICAgICAgICAg
ICBzdGFjay5wdXNoKGFjdHVhbCk7DQorDQorICAgICAgICAgICAgIHZhciBwOw0KKyAgICAgICAg
ICAgICBmb3IgKHAgaW4gYWN0dWFsKQ0KKyAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
ICBhc3NlcnQoZXhwZWN0ZWQuaGFzT3duUHJvcGVydHkocCksICJhc3NlcnRfb2JqZWN0X2VxdWFs
cyIsIGRlc2NyaXB0aW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAidW5leHBlY3RlZCBwcm9wZXJ0eSAke3B9Iiwge3A6cH0pOw0KKw0KKyAg
ICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3R1YWxbcF0gPT09ICJvYmplY3QiICYmIGFjdHVh
bFtwXSAhPT0gbnVsbCkNCisgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhY2suaW5kZXhPZihhY3R1YWxbcF0pID09PSAtMSkNCisgICAgICAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2VxdWFsKGFjdHVhbFtwXSwg
ZXhwZWN0ZWRbcF0sIHN0YWNrKTsNCisgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAg
ICAgICAgICB9DQorICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGFjdHVhbFtwXSA9PT0gZXhwZWN0ZWRbcF0sICJh
c3NlcnRfb2JqZWN0X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvcGVydHkgJHtwfSBleHBlY3Rl
ZCAke2V4cGVjdGVkfSBnb3QgJHthY3R1YWx9IiwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6cCwgZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFj
dHVhbDphY3R1YWx9KTsNCisgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgfQ0KKyAg
ICAgICAgICAgICBmb3IgKHAgaW4gZXhwZWN0ZWQpDQorICAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgIGFzc2VydChhY3R1YWwuaGFzT3duUHJvcGVydHkocCksDQorICAgICAgICAgICAg
ICAgICAgICAgICAgImFzc2VydF9vYmplY3RfZXF1YWxzIiwgZGVzY3JpcHRpb24sDQorICAgICAg
ICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHByb3BlcnR5ICR7cH0gbWlzc2luZyIsIHtwOnB9
KTsNCisgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICBzdGFjay5wb3AoKTsNCisgICAgICAg
ICB9DQorICAgICAgICAgY2hlY2tfZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW10pOw0KKyAgICB9
Ow0KKyAgICBleHBvc2UoYXNzZXJ0X29iamVjdF9lcXVhbHMsICJhc3NlcnRfb2JqZWN0X2VxdWFs
cyIpOw0KKw0KKyAgICBmdW5jdGlvbiBhc3NlcnRfYXJyYXlfZXF1YWxzKGFjdHVhbCwgZXhwZWN0
ZWQsIGRlc2NyaXB0aW9uKQ0KKyAgICB7DQorICAgICAgICBhc3NlcnQoYWN0dWFsLmxlbmd0aCA9
PT0gZXhwZWN0ZWQubGVuZ3RoLA0KKyAgICAgICAgICAgICAgICJhc3NlcnRfYXJyYXlfZXF1YWxz
IiwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAgImxlbmd0aHMgZGlmZmVyLCBleHBlY3Rl
ZCAke2V4cGVjdGVkfSBnb3QgJHthY3R1YWx9IiwNCisgICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6
ZXhwZWN0ZWQubGVuZ3RoLCBhY3R1YWw6YWN0dWFsLmxlbmd0aH0pOw0KKw0KKyAgICAgICAgZm9y
ICh2YXIgaT0wOyBpIDwgYWN0dWFsLmxlbmd0aDsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIGFzc2VydChhY3R1YWwuaGFzT3duUHJvcGVydHkoaSkgPT09IGV4cGVjdGVkLmhhc093blBy
b3BlcnR5KGkpLA0KKyAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X2FycmF5X2VxdWFscyIsIGRl
c2NyaXB0aW9uLA0KKyAgICAgICAgICAgICAgICAgICAicHJvcGVydHkgJHtpfSwgcHJvcGVydHkg
ZXhwZWN0ZWQgdG8gYmUgJGV4cGVjdGVkIGJ1dCB3YXMgJGFjdHVhbCIsDQorICAgICAgICAgICAg
ICAgICAgIHtpOmksIGV4cGVjdGVkOmV4cGVjdGVkLmhhc093blByb3BlcnR5KGkpID8gInByZXNl
bnQiIDogIm1pc3NpbmciLA0KKyAgICAgICAgICAgICAgICAgICBhY3R1YWw6YWN0dWFsLmhhc093
blByb3BlcnR5KGkpID8gInByZXNlbnQiIDogIm1pc3NpbmcifSk7DQorICAgICAgICAgICAgYXNz
ZXJ0KGV4cGVjdGVkW2ldID09PSBhY3R1YWxbaV0sDQorICAgICAgICAgICAgICAgICAgICJhc3Nl
cnRfYXJyYXlfZXF1YWxzIiwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAgICAgICJwcm9w
ZXJ0eSAke2l9LCBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfSIsDQorICAg
ICAgICAgICAgICAgICAgIHtpOmksIGV4cGVjdGVkOmV4cGVjdGVkW2ldLCBhY3R1YWw6YWN0dWFs
W2ldfSk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZXhwb3NlKGFzc2VydF9hcnJheV9lcXVh
bHMsICJhc3NlcnRfYXJyYXlfZXF1YWxzIik7DQorDQorICAgIGZ1bmN0aW9uIGFzc2VydF9hcHBy
b3hfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGVwc2lsb24sIGRlc2NyaXB0aW9uKQ0KKyAgICB7
DQorICAgICAgICAvKg0KKyAgICAgICAgICogVGVzdCBpZiB0d28gcHJpbWl0aXZlIG51bWJlcnMg
YXJlIGVxdWFsIHdpdGhpbmcgKy8tIGVwc2lsb24NCisgICAgICAgICAqLw0KKyAgICAgICAgYXNz
ZXJ0KHR5cGVvZiBhY3R1YWwgPT09ICJudW1iZXIiLA0KKyAgICAgICAgICAgICAgICJhc3NlcnRf
YXBwcm94X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KKyAgICAgICAgICAgICAgICJleHBlY3RlZCBh
IG51bWJlciBidXQgZ290IGEgJHt0eXBlX2FjdHVhbH0iLA0KKyAgICAgICAgICAgICAgIHt0eXBl
X2FjdHVhbDp0eXBlb2YgYWN0dWFsfSk7DQorDQorICAgICAgICBhc3NlcnQoTWF0aC5hYnMoYWN0
dWFsIC0gZXhwZWN0ZWQpIDw9IGVwc2lsb24sDQorICAgICAgICAgICAgICAgImFzc2VydF9hcHBy
b3hfZXF1YWxzIiwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAgImV4cGVjdGVkICR7ZXhw
ZWN0ZWR9ICsvLSAke2Vwc2lsb259IGJ1dCBnb3QgJHthY3R1YWx9IiwNCisgICAgICAgICAgICAg
ICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWwsIGVwc2lsb246ZXBzaWxvbn0pOw0K
KyAgICB9Ow0KKyAgICBleHBvc2UoYXNzZXJ0X2FwcHJveF9lcXVhbHMsICJhc3NlcnRfYXBwcm94
X2VxdWFscyIpOw0KKw0KKyAgICBmdW5jdGlvbiBhc3NlcnRfcmVnZXhwX21hdGNoKGFjdHVhbCwg
ZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKSB7DQorICAgICAgICAvKg0KKyAgICAgICAgICogVGVzdCBp
ZiBhIHN0cmluZyAoYWN0dWFsKSBtYXRjaGVzIGEgcmVnZXhwIChleHBlY3RlZCkNCisgICAgICAg
ICAqLw0KKyAgICAgICAgYXNzZXJ0KGV4cGVjdGVkLnRlc3QoYWN0dWFsKSwNCisgICAgICAgICAg
ICAgICAiYXNzZXJ0X3JlZ2V4cF9tYXRjaCIsIGRlc2NyaXB0aW9uLA0KKyAgICAgICAgICAgICAg
ICJleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfSIsDQorICAgICAgICAgICAg
ICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsfSk7DQorICAgIH0NCisgICAgZXhw
b3NlKGFzc2VydF9yZWdleHBfbWF0Y2gsICJhc3NlcnRfcmVnZXhwX21hdGNoIik7DQorDQorDQor
ICAgIGZ1bmN0aW9uIF9hc3NlcnRfb3duX3Byb3BlcnR5KG5hbWUpIHsNCisgICAgICAgIHJldHVy
biBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIGFzc2VydChvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHlfbmFt
ZSksDQorICAgICAgICAgICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLA0KKyAgICAgICAgICAg
ICAgICAgICAiZXhwZWN0ZWQgcHJvcGVydHkgJHtwfSBtaXNzaW5nIiwge3A6cHJvcGVydHlfbmFt
ZX0pOw0KKyAgICAgICAgfTsNCisgICAgfQ0KKyAgICBleHBvc2UoX2Fzc2VydF9vd25fcHJvcGVy
dHkoImFzc2VydF9leGlzdHMiKSwgImFzc2VydF9leGlzdHMiKTsNCisgICAgZXhwb3NlKF9hc3Nl
cnRfb3duX3Byb3BlcnR5KCJhc3NlcnRfb3duX3Byb3BlcnR5IiksICJhc3NlcnRfb3duX3Byb3Bl
cnR5Iik7DQorDQorICAgIGZ1bmN0aW9uIGFzc2VydF9ub3RfZXhpc3RzKG9iamVjdCwgcHJvcGVy
dHlfbmFtZSwgZGVzY3JpcHRpb24pDQorICAgIHsNCisgICAgICAgIGFzc2VydCghb2JqZWN0Lmhh
c093blByb3BlcnR5KHByb3BlcnR5X25hbWUpLA0KKyAgICAgICAgICAgICAgICJhc3NlcnRfbm90
X2V4aXN0cyIsIGRlc2NyaXB0aW9uLA0KKyAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHByb3Bl
cnR5ICR7cH0gZm91bmQiLCB7cDpwcm9wZXJ0eV9uYW1lfSk7DQorICAgIH07DQorICAgIGV4cG9z
ZShhc3NlcnRfbm90X2V4aXN0cywgImFzc2VydF9ub3RfZXhpc3RzIik7DQorDQorICAgIGZ1bmN0
aW9uIF9hc3NlcnRfaW5oZXJpdHMobmFtZSkgew0KKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChv
YmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIGFzc2VydCh0eXBlb2Ygb2JqZWN0ID09PSAib2JqZWN0IiwNCisgICAgICAgICAgICAgICAg
ICAgbmFtZSwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAgICAgICJwcm92aWRlZCB2YWx1
ZSBpcyBub3QgYW4gb2JqZWN0Iik7DQorDQorICAgICAgICAgICAgYXNzZXJ0KCJoYXNPd25Qcm9w
ZXJ0eSIgaW4gb2JqZWN0LA0KKyAgICAgICAgICAgICAgICAgICBuYW1lLCBkZXNjcmlwdGlvbiwN
CisgICAgICAgICAgICAgICAgICAgInByb3ZpZGVkIHZhbHVlIGlzIGFuIG9iamVjdCBidXQgaGFz
IG5vIGhhc093blByb3BlcnR5IG1ldGhvZCIpOw0KKw0KKyAgICAgICAgICAgIGFzc2VydCghb2Jq
ZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5X25hbWUpLA0KKyAgICAgICAgICAgICAgICAgICBu
YW1lLCBkZXNjcmlwdGlvbiwNCisgICAgICAgICAgICAgICAgICAgInByb3BlcnR5ICR7cH0gZm91
bmQgb24gb2JqZWN0IGV4cGVjdGVkIGluIHByb3RvdHlwZSBjaGFpbiIsDQorICAgICAgICAgICAg
ICAgICAgIHtwOnByb3BlcnR5X25hbWV9KTsNCisNCisgICAgICAgICAgICBhc3NlcnQocHJvcGVy
dHlfbmFtZSBpbiBvYmplY3QsDQorICAgICAgICAgICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9u
LA0KKyAgICAgICAgICAgICAgICAgICAicHJvcGVydHkgJHtwfSBub3QgZm91bmQgaW4gcHJvdG90
eXBlIGNoYWluIiwNCisgICAgICAgICAgICAgICAgICAge3A6cHJvcGVydHlfbmFtZX0pOw0KKyAg
ICAgICAgfTsNCisgICAgfQ0KKyAgICBleHBvc2UoX2Fzc2VydF9pbmhlcml0cygiYXNzZXJ0X2lu
aGVyaXRzIiksICJhc3NlcnRfaW5oZXJpdHMiKTsNCisgICAgZXhwb3NlKF9hc3NlcnRfaW5oZXJp
dHMoImFzc2VydF9pZGxfYXR0cmlidXRlIiksICJhc3NlcnRfaWRsX2F0dHJpYnV0ZSIpOw0KKw0K
KyAgICBmdW5jdGlvbiBhc3NlcnRfcmVhZG9ubHkob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNj
cmlwdGlvbikNCisgICAgew0KKyAgICAgICAgIHZhciBpbml0aWFsX3ZhbHVlID0gb2JqZWN0W3By
b3BlcnR5X25hbWVdOw0KKyAgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgIC8vTm90ZSB0aGF0
IHRoaXMgY2FuIGhhdmUgc2lkZSBlZmZlY3RzIGluIHRoZSBjYXNlIHdoZXJlDQorICAgICAgICAg
ICAgIC8vdGhlIHByb3BlcnR5IGhhcyBQdXRGb3J3YXJkcw0KKyAgICAgICAgICAgICBvYmplY3Rb
cHJvcGVydHlfbmFtZV0gPSBpbml0aWFsX3ZhbHVlICsgImEiOyAvL1hYWCB1c2Ugc29tZSBvdGhl
ciB2YWx1ZSBoZXJlPw0KKyAgICAgICAgICAgICBhc3NlcnQob2JqZWN0W3Byb3BlcnR5X25hbWVd
ID09PSBpbml0aWFsX3ZhbHVlLA0KKyAgICAgICAgICAgICAgICAgICAgImFzc2VydF9yZWFkb25s
eSIsIGRlc2NyaXB0aW9uLA0KKyAgICAgICAgICAgICAgICAgICAgImNoYW5naW5nIHByb3BlcnR5
ICR7cH0gc3VjY2VlZGVkIiwNCisgICAgICAgICAgICAgICAgICAgIHtwOnByb3BlcnR5X25hbWV9
KTsNCisgICAgICAgICB9DQorICAgICAgICAgZmluYWxseQ0KKyAgICAgICAgIHsNCisgICAgICAg
ICAgICAgb2JqZWN0W3Byb3BlcnR5X25hbWVdID0gaW5pdGlhbF92YWx1ZTsNCisgICAgICAgICB9
DQorICAgIH07DQorICAgIGV4cG9zZShhc3NlcnRfcmVhZG9ubHksICJhc3NlcnRfcmVhZG9ubHki
KTsNCisNCisgICAgZnVuY3Rpb24gYXNzZXJ0X3Rocm93cyhjb2RlLCBmdW5jLCBkZXNjcmlwdGlv
bikNCisgICAgew0KKyAgICAgICAgdHJ5DQorICAgICAgICB7DQorICAgICAgICAgICAgZnVuYy5j
YWxsKHRoaXMpOw0KKyAgICAgICAgICAgIGFzc2VydChmYWxzZSwgImFzc2VydF90aHJvd3MiLCBk
ZXNjcmlwdGlvbiwNCisgICAgICAgICAgICAgICAgICAgIiR7ZnVuY30gZGlkIG5vdCB0aHJvdyIs
IHtmdW5jOmZ1bmN9KTsNCisgICAgICAgIH0NCisgICAgICAgIGNhdGNoKGUpDQorICAgICAgICB7
DQorICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBc3NlcnRpb25FcnJvcikgew0KKyAgICAg
ICAgICAgICAgICB0aHJvdyhlKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgaWYgKHR5
cGVvZiBjb2RlID09PSAib2JqZWN0IikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
IGFzc2VydCh0eXBlb2YgZSA9PSAib2JqZWN0IiAmJiAibmFtZSIgaW4gZSAmJiBlLm5hbWUgPT0g
Y29kZS5uYW1lLA0KKyAgICAgICAgICAgICAgICAgICAgICAgImFzc2VydF90aHJvd3MiLCBkZXNj
cmlwdGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3ICR7YWN0dWFs
fSAoJHthY3R1YWxfbmFtZX0pIGV4cGVjdGVkICR7ZXhwZWN0ZWR9ICgke2V4cGVjdGVkX25hbWV9
KSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Z1bmM6ZnVuYywgYWN0
dWFsOmUsIGFjdHVhbF9uYW1lOmUubmFtZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhwZWN0ZWQ6Y29kZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0ZWRfbmFtZTpjb2RlLm5hbWV9KTsNCisgICAgICAgICAgICAgICAgcmV0dXJu
Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICB2YXIgcmVxdWlyZWRfcHJvcHMgPSB7fTsN
CisgICAgICAgICAgICByZXF1aXJlZF9wcm9wcy5jb2RlID0gew0KKyAgICAgICAgICAgICAgICBJ
TkRFWF9TSVpFX0VSUjogMSwNCisgICAgICAgICAgICAgICAgSElFUkFSQ0hZX1JFUVVFU1RfRVJS
OiAzLA0KKyAgICAgICAgICAgICAgICBXUk9OR19ET0NVTUVOVF9FUlI6IDQsDQorICAgICAgICAg
ICAgICAgIElOVkFMSURfQ0hBUkFDVEVSX0VSUjogNSwNCisgICAgICAgICAgICAgICAgTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOiA3LA0KKyAgICAgICAgICAgICAgICBOT1RfRk9VTkRfRVJS
OiA4LA0KKyAgICAgICAgICAgICAgICBOT1RfU1VQUE9SVEVEX0VSUjogOSwNCisgICAgICAgICAg
ICAgICAgSU5WQUxJRF9TVEFURV9FUlI6IDExLA0KKyAgICAgICAgICAgICAgICBTWU5UQVhfRVJS
OiAxMiwNCisgICAgICAgICAgICAgICAgSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSOiAxMywNCisg
ICAgICAgICAgICAgICAgTkFNRVNQQUNFX0VSUjogMTQsDQorICAgICAgICAgICAgICAgIElOVkFM
SURfQUNDRVNTX0VSUjogMTUsDQorICAgICAgICAgICAgICAgIFRZUEVfTUlTTUFUQ0hfRVJSOiAx
NywNCisgICAgICAgICAgICAgICAgU0VDVVJJVFlfRVJSOiAxOCwNCisgICAgICAgICAgICAgICAg
TkVUV09SS19FUlI6IDE5LA0KKyAgICAgICAgICAgICAgICBBQk9SVF9FUlI6IDIwLA0KKyAgICAg
ICAgICAgICAgICBVUkxfTUlTTUFUQ0hfRVJSOiAyMSwNCisgICAgICAgICAgICAgICAgUVVPVEFf
RVhDRUVERURfRVJSOiAyMiwNCisgICAgICAgICAgICAgICAgVElNRU9VVF9FUlI6IDIzLA0KKyAg
ICAgICAgICAgICAgICBJTlZBTElEX05PREVfVFlQRV9FUlI6IDI0LA0KKyAgICAgICAgICAgICAg
ICBEQVRBX0NMT05FX0VSUjogMjUsDQorICAgICAgICAgICAgfVtjb2RlXTsNCisgICAgICAgICAg
ICBpZiAocmVxdWlyZWRfcHJvcHMuY29kZSA9PT0gdW5kZWZpbmVkKQ0KKyAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCdUZXN0IGJ1ZzogdW5y
ZWNvZ25pemVkIERPTUV4Y2VwdGlvbiBjb2RlICInICsgY29kZSArICciIHBhc3NlZCB0byBhc3Nl
cnRfdGhyb3dzKCknKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgcmVxdWlyZWRfcHJv
cHNbY29kZV0gPSByZXF1aXJlZF9wcm9wcy5jb2RlOw0KKyAgICAgICAgICAgIC8vVW5jb21tZW50
IHRoaXMgd2hlbiB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZXZlcnkgYnJvd3Nlcg0KKyAgICAgICAg
ICAgIC8vYWN0dWFsbHkgaW1wbGVtZW50cyB0aGUgc3BlYzsgb3RoZXJ3aXNlIGl0IGp1c3QgY3Jl
YXRlcw0KKyAgICAgICAgICAgIC8vemlsbGlvbnMgb2YgZmFpbHVyZXMuICBBbHNvIGRvIHJlcXVp
cmVkX3Byb3BzLnR5cGUuDQorICAgICAgICAgICAgLy9yZXF1aXJlZF9wcm9wcy5uYW1lID0gY29k
ZTsNCisgICAgICAgICAgICAvLw0KKyAgICAgICAgICAgIC8vV2UnZCBsaWtlIHRvIHRlc3QgdGhh
dCBlIGluc3RhbmNlb2YgdGhlIGFwcHJvcHJpYXRlIGludGVyZmFjZSwNCisgICAgICAgICAgICAv
L2J1dCB3ZSBjYW4ndCwgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgd2luZG93IGl0IHdhcyBj
cmVhdGVkDQorICAgICAgICAgICAgLy9pbi4gIEl0IG1pZ2h0IGJlIGFuIGluc3RhbmNlb2YgdGhl
IGFwcHJvcHJpYXRlIGludGVyZmFjZSBvbiBzb21lDQorICAgICAgICAgICAgLy91bmtub3duIG90
aGVyIHdpbmRvdy4gIFRPRE86IFdvcmsgYXJvdW5kIHRoaXMgc29tZWhvdz8NCisNCisgICAgICAg
ICAgICBhc3NlcnQodHlwZW9mIGUgPT0gIm9iamVjdCIsDQorICAgICAgICAgICAgICAgICAgICJh
c3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAgICAgICIke2Z1bmN9
IHRocmV3ICR7ZX0gd2l0aCB0eXBlICR7dHlwZX0sIG5vdCBhbiBvYmplY3QiLA0KKyAgICAgICAg
ICAgICAgICAgICB7ZnVuYzpmdW5jLCBlOmUsIHR5cGU6dHlwZW9mIGV9KTsNCisNCisgICAgICAg
ICAgICBmb3IgKHZhciBwcm9wIGluIHJlcXVpcmVkX3Byb3BzKQ0KKyAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBlID09ICJvYmplY3QiICYmIHByb3AgaW4gZSAm
JiBlW3Byb3BdID09IHJlcXVpcmVkX3Byb3BzW3Byb3BdLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAg
ICIke2Z1bmN9IHRocmV3ICR7ZX0gdGhhdCBpcyBub3QgYSBET01FeGNlcHRpb24gIiArIGNvZGUg
KyAiOiBwcm9wZXJ0eSAke3Byb3B9IGlzIGVxdWFsIHRvICR7YWN0dWFsfSwgZXhwZWN0ZWQgJHtl
eHBlY3RlZH0iLA0KKyAgICAgICAgICAgICAgICAgICAgICAge2Z1bmM6ZnVuYywgZTplLCBwcm9w
OnByb3AsIGFjdHVhbDplW3Byb3BdLCBleHBlY3RlZDpyZXF1aXJlZF9wcm9wc1twcm9wXX0pOw0K
KyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBleHBvc2UoYXNzZXJ0X3Ro
cm93cywgImFzc2VydF90aHJvd3MiKTsNCisNCisgICAgZnVuY3Rpb24gYXNzZXJ0X3VucmVhY2hl
ZChkZXNjcmlwdGlvbikgew0KKyAgICAgICAgIGFzc2VydChmYWxzZSwgImFzc2VydF91bnJlYWNo
ZWQiLCBkZXNjcmlwdGlvbiwNCisgICAgICAgICAgICAgICAgIlJlYWNoZWQgdW5yZWFjaGFibGUg
Y29kZSIpOw0KKyAgICB9DQorICAgIGV4cG9zZShhc3NlcnRfdW5yZWFjaGVkLCAiYXNzZXJ0X3Vu
cmVhY2hlZCIpOw0KKw0KKyAgICBmdW5jdGlvbiBUZXN0KG5hbWUsIHByb3BlcnRpZXMpDQorICAg
IHsNCisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7DQorICAgICAgICB0aGlzLnN0YXR1cyA9IHRo
aXMuTk9UUlVOOw0KKyAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gbnVsbDsNCisgICAgICAgIHRo
aXMuaXNfZG9uZSA9IGZhbHNlOw0KKw0KKyAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0aCA9IHBy
b3BlcnRpZXMudGltZW91dCA/IHByb3BlcnRpZXMudGltZW91dCA6IHNldHRpbmdzLnRlc3RfdGlt
ZW91dDsNCisNCisgICAgICAgIHRoaXMubWVzc2FnZSA9IG51bGw7DQorDQorICAgICAgICB2YXIg
dGhpc19vYmogPSB0aGlzOw0KKyAgICAgICAgdGhpcy5zdGVwcyA9IFtdOw0KKw0KKyAgICAgICAg
dGVzdHMucHVzaCh0aGlzKTsNCisgICAgfQ0KKw0KKyAgICBUZXN0LnByb3RvdHlwZSA9IHsNCisg
ICAgICAgIFBBU1M6MCwNCisgICAgICAgIEZBSUw6MSwNCisgICAgICAgIFRJTUVPVVQ6MiwNCisg
ICAgICAgIE5PVFJVTjozDQorICAgIH07DQorDQorDQorICAgIFRlc3QucHJvdG90eXBlLnN0ZXAg
PSBmdW5jdGlvbihmdW5jLCB0aGlzX29iaikNCisgICAgew0KKyAgICAgICAgLy9JbiBjYXNlIHRo
ZSB0ZXN0IGhhcyBhbHJlYWR5IGZhaWxlZA0KKyAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSB0
aGlzLk5PVFJVTikNCisgICAgICAgIHsNCisgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgfQ0K
Kw0KKyAgICAgICAgdGVzdHMuc3RhcnRlZCA9IHRydWU7DQorDQorICAgICAgICBpZiAodGhpcy50
aW1lb3V0X2lkID09PSBudWxsKSB7DQorICAgICAgICAgICAgdGhpcy5zZXRfdGltZW91dCgpOw0K
KyAgICAgICAgfQ0KKw0KKyAgICAgICAgdGhpcy5zdGVwcy5wdXNoKGZ1bmMpOw0KKw0KKyAgICAg
ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpDQorICAgICAgICB7DQorICAgICAgICAgICAg
dGhpc19vYmogPSB0aGlzOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgdHJ5DQorICAgICAgICB7
DQorICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzX29iaiwgQXJyYXkucHJvdG90eXBlLnNsaWNl
LmNhbGwoYXJndW1lbnRzLCAyKSk7DQorICAgICAgICB9DQorICAgICAgICBjYXRjaChlKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIC8vVGhpcyBjYW4gaGFwcGVuIGlmIHNvbWV0aGluZyBjYWxs
ZWQgc3luY2hyb25vdXNseSBpbnZva2VkIGFub3RoZXINCisgICAgICAgICAgICAvL3N0ZXANCisg
ICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgIT09IHRoaXMuTk9UUlVOKQ0KKyAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAg
ICB0aGlzLnN0YXR1cyA9IHRoaXMuRkFJTDsNCisgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBl
Lm1lc3NhZ2U7DQorICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnN0YWNrICE9ICJ1bmRlZmluZWQi
ICYmIHR5cGVvZiBlLm1lc3NhZ2UgPT0gInN0cmluZyIpIHsNCisgICAgICAgICAgICAgICAgLy9U
cnkgdG8gbWFrZSBpdCBtb3JlIGluZm9ybWF0aXZlIGZvciBzb21lIGV4Y2VwdGlvbnMsIGF0IGxl
YXN0DQorICAgICAgICAgICAgICAgIC8vaW4gR2Vja28gYW5kIFdlYktpdC4gIFRoaXMgcmVzdWx0
cyBpbiBhIHN0YWNrIGR1bXAgaW5zdGVhZCBvZg0KKyAgICAgICAgICAgICAgICAvL2p1c3QgZXJy
b3JzIGxpa2UgIkNhbm5vdCByZWFkIHByb3BlcnR5ICdwYXJlbnROb2RlJyBvZiBudWxsIg0KKyAg
ICAgICAgICAgICAgICAvL29yICJyb290IGlzIG51bGwiLiAgTWFrZXMgaXQgYSBsb3QgbG9uZ2Vy
LCBvZiBjb3Vyc2UuDQorICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSArPSAiKHN0YWNrOiAi
ICsgZS5zdGFjayArICIpIjsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgdGhpcy5kb25l
KCk7DQorICAgICAgICAgICAgaWYgKGRlYnVnICYmIGUuY29uc3RydWN0b3IgIT09IEFzc2VydGlv
bkVycm9yKSB7DQorICAgICAgICAgICAgICAgIHRocm93IGU7DQorICAgICAgICAgICAgfQ0KKyAg
ICAgICAgfQ0KKyAgICB9Ow0KKw0KKyAgICBUZXN0LnByb3RvdHlwZS5zdGVwX2Z1bmMgPSBmdW5j
dGlvbihmdW5jLCB0aGlzX29iaikNCisgICAgew0KKyAgICAgICAgdmFyIHRlc3RfdGhpcyA9IHRo
aXM7DQorDQorICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICB0aGlzX29iaiA9IHRlc3RfdGhpczsNCisgICAgICAgIH0NCisNCisgICAg
ICAgIHJldHVybiBmdW5jdGlvbigpDQorICAgICAgICB7DQorICAgICAgICAgICAgdGVzdF90aGlz
LnN0ZXAuYXBwbHkodGVzdF90aGlzLCBbZnVuYywgdGhpc19vYmpdLmNvbmNhdCgNCisgICAgICAg
ICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpOw0KKyAgICAg
ICAgfTsNCisgICAgfTsNCisNCisgICAgVGVzdC5wcm90b3R5cGUuc2V0X3RpbWVvdXQgPSBmdW5j
dGlvbigpDQorICAgIHsNCisgICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7DQorICAgICAgICB0
aGlzLnRpbWVvdXRfaWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpc19vYmoudGltZW91dCgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LCB0aGlzLnRpbWVvdXRfbGVuZ3RoKTsNCisgICAgfTsNCisNCisgICAgVGVz
dC5wcm90b3R5cGUudGltZW91dCA9IGZ1bmN0aW9uKCkNCisgICAgew0KKyAgICAgICAgdGhpcy5z
dGF0dXMgPSB0aGlzLlRJTUVPVVQ7DQorICAgICAgICB0aGlzLnRpbWVvdXRfaWQgPSBudWxsOw0K
KyAgICAgICAgdGhpcy5tZXNzYWdlID0gIlRlc3QgdGltZWQgb3V0IjsNCisgICAgICAgIHRoaXMu
ZG9uZSgpOw0KKyAgICB9Ow0KKw0KKyAgICBUZXN0LnByb3RvdHlwZS5kb25lID0gZnVuY3Rpb24o
KQ0KKyAgICB7DQorICAgICAgICBpZiAodGhpcy5pc19kb25lKSB7DQorICAgICAgICAgICAgcmV0
dXJuOw0KKyAgICAgICAgfQ0KKyAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dF9pZCk7
DQorICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IHRoaXMuTk9UUlVOKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gdGhpcy5QQVNTOw0KKyAgICAgICAgfQ0KKyAgICAg
ICAgdGhpcy5pc19kb25lID0gdHJ1ZTsNCisgICAgICAgIHRlc3RzLnJlc3VsdCh0aGlzKTsNCisg
ICAgfTsNCisNCisNCisgICAgLyoNCisgICAgICogSGFybmVzcw0KKyAgICAgKi8NCisNCisgICAg
ZnVuY3Rpb24gVGVzdHNTdGF0dXMoKQ0KKyAgICB7DQorICAgICAgICB0aGlzLnN0YXR1cyA9IG51
bGw7DQorICAgICAgICB0aGlzLm1lc3NhZ2UgPSBudWxsOw0KKyAgICB9DQorICAgIFRlc3RzU3Rh
dHVzLnByb3RvdHlwZSA9IHsNCisgICAgICAgIE9LOjAsDQorICAgICAgICBFUlJPUjoxLA0KKyAg
ICAgICAgVElNRU9VVDoyDQorICAgIH07DQorDQorICAgIGZ1bmN0aW9uIFRlc3RzKCkNCisgICAg
ew0KKyAgICAgICAgdGhpcy50ZXN0cyA9IFtdOw0KKyAgICAgICAgdGhpcy5udW1fcGVuZGluZyA9
IDA7DQorDQorICAgICAgICB0aGlzLnBoYXNlcyA9IHsNCisgICAgICAgICAgICBJTklUSUFMOjAs
DQorICAgICAgICAgICAgU0VUVVA6MSwNCisgICAgICAgICAgICBIQVZFX1RFU1RTOjIsDQorICAg
ICAgICAgICAgSEFWRV9SRVNVTFRTOjMsDQorICAgICAgICAgICAgQ09NUExFVEU6NA0KKyAgICAg
ICAgfTsNCisgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5JTklUSUFMOw0KKw0KKyAg
ICAgICAgLy9BbGwgdGVzdHMgY2FuJ3QgYmUgZG9uZSB1bnRpbCB0aGUgbG9hZCBldmVudCBmaXJl
cw0KKyAgICAgICAgdGhpcy5hbGxfbG9hZGVkID0gZmFsc2U7DQorICAgICAgICB0aGlzLndhaXRf
Zm9yX2ZpbmlzaCA9IGZhbHNlOw0KKyAgICAgICAgdGhpcy5wcm9jZXNzaW5nX2NhbGxiYWNrcyA9
IGZhbHNlOw0KKw0KKyAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0aCA9IHNldHRpbmdzLnRpbWVv
dXQ7DQorICAgICAgICB0aGlzLnRpbWVvdXRfaWQgPSBudWxsOw0KKyAgICAgICAgdGhpcy5zZXRf
dGltZW91dCgpOw0KKw0KKyAgICAgICAgdGhpcy5zdGFydF9jYWxsYmFja3MgPSBbXTsNCisgICAg
ICAgIHRoaXMudGVzdF9kb25lX2NhbGxiYWNrcyA9IFtdOw0KKyAgICAgICAgdGhpcy5hbGxfZG9u
ZV9jYWxsYmFja3MgPSBbXTsNCisNCisgICAgICAgIHRoaXMuc3RhdHVzID0gbmV3IFRlc3RzU3Rh
dHVzKCk7DQorDQorICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0KKw0KKyAgICAgICAgb25f
ZXZlbnQod2luZG93LCAibG9hZCIsDQorICAgICAgICAgICAgICAgICBmdW5jdGlvbigpDQorICAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgdGhpc19vYmouYWxsX2xvYWRl
ZCA9IHRydWU7DQorICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNfb2JqLmFsbF9kb25lKCkp
DQorICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
X29iai5jb21wbGV0ZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg
ICAgIH0pOw0KKyAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0ge307DQorICAgIH0NCisNCisgICAg
VGVzdHMucHJvdG90eXBlLnNldHVwID0gZnVuY3Rpb24oZnVuYywgcHJvcGVydGllcykNCisgICAg
ew0KKyAgICAgICAgaWYgKHRoaXMucGhhc2UgPj0gdGhpcy5waGFzZXMuSEFWRV9SRVNVTFRTKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisgICAgICAgIGlm
ICh0aGlzLnBoYXNlIDwgdGhpcy5waGFzZXMuU0VUVVApDQorICAgICAgICB7DQorICAgICAgICAg
ICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLlNFVFVQOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg
ICAgZm9yICh2YXIgcCBpbiBwcm9wZXJ0aWVzKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlm
IChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHApKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW3BdID0gcHJvcGVydGllc1twXTsNCisgICAgICAgICAg
ICB9DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAocHJvcGVydGllcy50aW1lb3V0KQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIHRoaXMudGltZW91dF9sZW5ndGggPSBwcm9wZXJ0aWVzLnRp
bWVvdXQ7DQorICAgICAgICAgICAgdGhpcy5zZXRfdGltZW91dCgpOw0KKyAgICAgICAgfQ0KKyAg
ICAgICAgaWYgKHByb3BlcnRpZXMuZXhwbGljaXRfZG9uZSkNCisgICAgICAgIHsNCisgICAgICAg
ICAgICB0aGlzLndhaXRfZm9yX2ZpbmlzaCA9IHRydWU7DQorICAgICAgICB9DQorDQorICAgICAg
ICBpZiAoZnVuYykNCisgICAgICAgIHsNCisgICAgICAgICAgICB0cnkNCisgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgIGZ1bmMoKTsNCisgICAgICAgICAgICB9IGNhdGNoKGUpDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cy5zdGF0dXMgPSB0aGlzLnN0
YXR1cy5FUlJPUjsNCisgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMubWVzc2FnZSA9IGU7DQor
ICAgICAgICAgICAgfTsNCisgICAgICAgIH0NCisgICAgfTsNCisNCisgICAgVGVzdHMucHJvdG90
eXBlLnNldF90aW1lb3V0ID0gZnVuY3Rpb24oKQ0KKyAgICB7DQorICAgICAgICB2YXIgdGhpc19v
YmogPSB0aGlzOw0KKyAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dF9pZCk7DQorICAg
ICAgICB0aGlzLnRpbWVvdXRfaWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc19vYmoudGltZW91dCgpOw0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnRpbWVvdXRfbGVuZ3Ro
KTsNCisgICAgfTsNCisNCisgICAgVGVzdHMucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbigp
IHsNCisgICAgICAgIHRoaXMuc3RhdHVzLnN0YXR1cyA9IHRoaXMuc3RhdHVzLlRJTUVPVVQ7DQor
ICAgICAgICB0aGlzLmNvbXBsZXRlKCk7DQorICAgIH07DQorDQorICAgIFRlc3RzLnByb3RvdHlw
ZS5lbmRfd2FpdCA9IGZ1bmN0aW9uKCkNCisgICAgew0KKyAgICAgICAgdGhpcy53YWl0X2Zvcl9m
aW5pc2ggPSBmYWxzZTsNCisgICAgICAgIGlmICh0aGlzLmFsbF9kb25lKCkpIHsNCisgICAgICAg
ICAgICB0aGlzLmNvbXBsZXRlKCk7DQorICAgICAgICB9DQorICAgIH07DQorDQorICAgIFRlc3Rz
LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24odGVzdCkNCisgICAgew0KKyAgICAgICAgaWYgKHRo
aXMucGhhc2UgPCB0aGlzLnBoYXNlcy5IQVZFX1RFU1RTKSB7DQorICAgICAgICAgICAgdGhpcy5u
b3RpZnlfc3RhcnQoKTsNCisgICAgICAgIH0NCisgICAgICAgIHRoaXMubnVtX3BlbmRpbmcrKzsN
CisgICAgICAgIHRoaXMudGVzdHMucHVzaCh0ZXN0KTsNCisgICAgfTsNCisNCisgICAgVGVzdHMu
cHJvdG90eXBlLmFsbF9kb25lID0gZnVuY3Rpb24oKSB7DQorICAgICAgICByZXR1cm4gKHRoaXMu
YWxsX2xvYWRlZCAmJiB0aGlzLm51bV9wZW5kaW5nID09PSAwICYmDQorICAgICAgICAgICAgICAg
ICF0aGlzLndhaXRfZm9yX2ZpbmlzaCAmJiAhdGhpcy5wcm9jZXNzaW5nX2NhbGxiYWNrcyk7DQor
ICAgIH07DQorDQorICAgIFRlc3RzLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKCkgew0KKyAg
ICAgICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLkhBVkVfVEVTVFM7DQorICAgICAgICB0aGlz
Lm5vdGlmeV9zdGFydCgpOw0KKyAgICB9Ow0KKw0KKyAgICBUZXN0cy5wcm90b3R5cGUubm90aWZ5
X3N0YXJ0ID0gZnVuY3Rpb24oKSB7DQorICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0KKyAg
ICAgICAgZm9yRWFjaCAodGhpcy5zdGFydF9jYWxsYmFja3MsDQorICAgICAgICAgICAgICAgICBm
dW5jdGlvbihjYWxsYmFjaykNCisgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayh0aGlzX29iai5wcm9wZXJ0aWVzKTsNCisgICAgICAgICAgICAgICAgIH0p
Ow0KKyAgICAgICAgZm9yRWFjaChhbmNlc3Rvcl93aW5kb3dzKCksDQorICAgICAgICAgICAgICAg
IGZ1bmN0aW9uKHcpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlm
KHcuc3RhcnRfY2FsbGJhY2spDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5DQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3LnN0YXJ0X2NhbGxiYWNrKHRoaXNfb2JqLnByb3BlcnRpZXMpOw0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBjYXRj
aChlKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGRlYnVnKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyhlKTsNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAg
ICAgIH0NCisgICAgICAgICAgICAgICAgfSk7DQorICAgIH07DQorDQorICAgIFRlc3RzLnByb3Rv
dHlwZS5yZXN1bHQgPSBmdW5jdGlvbih0ZXN0KQ0KKyAgICB7DQorICAgICAgICBpZiAodGhpcy5w
aGFzZSA+IHRoaXMucGhhc2VzLkhBVkVfUkVTVUxUUykNCisgICAgICAgIHsNCisgICAgICAgICAg
ICByZXR1cm47DQorICAgICAgICB9DQorICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMu
SEFWRV9SRVNVTFRTOw0KKyAgICAgICAgdGhpcy5udW1fcGVuZGluZy0tOw0KKyAgICAgICAgdGhp
cy5ub3RpZnlfcmVzdWx0KHRlc3QpOw0KKyAgICB9Ow0KKw0KKyAgICBUZXN0cy5wcm90b3R5cGUu
bm90aWZ5X3Jlc3VsdCA9IGZ1bmN0aW9uKHRlc3QpIHsNCisgICAgICAgIHZhciB0aGlzX29iaiA9
IHRoaXM7DQorICAgICAgICB0aGlzLnByb2Nlc3NpbmdfY2FsbGJhY2tzID0gdHJ1ZTsNCisgICAg
ICAgIGZvckVhY2godGhpcy50ZXN0X2RvbmVfY2FsbGJhY2tzLA0KKyAgICAgICAgICAgICAgICBm
dW5jdGlvbihjYWxsYmFjaykNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2sodGVzdCwgdGhpc19vYmopOw0KKyAgICAgICAgICAgICAgICB9KTsNCisNCisg
ICAgICAgIGZvckVhY2goYW5jZXN0b3Jfd2luZG93cygpLA0KKyAgICAgICAgICAgICAgICBmdW5j
dGlvbih3KQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBpZih3LnJl
c3VsdF9jYWxsYmFjaykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
ICAgICAgICB0cnkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHcucmVzdWx0X2NhbGxiYWNrKHRlc3QpOw0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChlKQ0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGVidWcpIHsN
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7DQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAg
ICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0pOw0KKyAgICAgICAgdGhpcy5wcm9jZXNz
aW5nX2NhbGxiYWNrcyA9IGZhbHNlOw0KKyAgICAgICAgaWYgKHRoaXNfb2JqLmFsbF9kb25lKCkp
DQorICAgICAgICB7DQorICAgICAgICAgICAgdGhpc19vYmouY29tcGxldGUoKTsNCisgICAgICAg
IH0NCisgICAgfTsNCisNCisgICAgVGVzdHMucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24o
KSB7DQorICAgICAgICBpZiAodGhpcy5waGFzZSA9PT0gdGhpcy5waGFzZXMuQ09NUExFVEUpIHsN
CisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorICAgICAgICB0aGlzLnBoYXNlID0g
dGhpcy5waGFzZXMuQ09NUExFVEU7DQorICAgICAgICB0aGlzLm5vdGlmeV9jb21wbGV0ZSgpOw0K
KyAgICB9Ow0KKw0KKyAgICBUZXN0cy5wcm90b3R5cGUubm90aWZ5X2NvbXBsZXRlID0gZnVuY3Rp
b24oKQ0KKyAgICB7DQorICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0X2lkKTsNCisg
ICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7DQorICAgICAgICBpZiAodGhpcy5zdGF0dXMuc3Rh
dHVzID09PSBudWxsKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHRoaXMuc3RhdHVzLnN0YXR1
cyA9IHRoaXMuc3RhdHVzLk9LOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZm9yRWFjaCAodGhp
cy5hbGxfZG9uZV9jYWxsYmFja3MsDQorICAgICAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFj
aykNCisgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh0
aGlzX29iai50ZXN0cywgdGhpc19vYmouc3RhdHVzKTsNCisgICAgICAgICAgICAgICAgIH0pOw0K
Kw0KKyAgICAgICAgZm9yRWFjaChhbmNlc3Rvcl93aW5kb3dzKCksDQorICAgICAgICAgICAgICAg
IGZ1bmN0aW9uKHcpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlm
KHcuY29tcGxldGlvbl9jYWxsYmFjaykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAg
ICAgICAgICAgICAgICAgICB0cnkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHcuY29tcGxldGlvbl9jYWxsYmFjayh0aGlzX29iai50ZXN0
cywgdGhpc19vYmouc3RhdHVzKTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAg
ICAgICAgICAgICAgICAgICAgY2F0Y2goZSkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsN
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0NCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfSk7DQorICAgIH07
DQorDQorICAgIHZhciB0ZXN0cyA9IG5ldyBUZXN0cygpOw0KKw0KKyAgICBmdW5jdGlvbiBhZGRf
c3RhcnRfY2FsbGJhY2soY2FsbGJhY2spIHsNCisgICAgICAgIHRlc3RzLnN0YXJ0X2NhbGxiYWNr
cy5wdXNoKGNhbGxiYWNrKTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBhZGRfcmVzdWx0X2Nh
bGxiYWNrKGNhbGxiYWNrKQ0KKyAgICB7DQorICAgICAgICB0ZXN0cy50ZXN0X2RvbmVfY2FsbGJh
Y2tzLnB1c2goY2FsbGJhY2spOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGFkZF9jb21wbGV0
aW9uX2NhbGxiYWNrKGNhbGxiYWNrKQ0KKyAgICB7DQorICAgICAgIHRlc3RzLmFsbF9kb25lX2Nh
bGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsNCisgICAgfQ0KKw0KKyAgICBleHBvc2UoYWRkX3N0YXJ0
X2NhbGxiYWNrLCAnYWRkX3N0YXJ0X2NhbGxiYWNrJyk7DQorICAgIGV4cG9zZShhZGRfcmVzdWx0
X2NhbGxiYWNrLCAnYWRkX3Jlc3VsdF9jYWxsYmFjaycpOw0KKyAgICBleHBvc2UoYWRkX2NvbXBs
ZXRpb25fY2FsbGJhY2ssICdhZGRfY29tcGxldGlvbl9jYWxsYmFjaycpOw0KKw0KKyAgICAvKg0K
KyAgICAgKiBPdXRwdXQgbGlzdGVuZXINCisgICAgKi8NCisNCisgICAgZnVuY3Rpb24gT3V0cHV0
KCkgew0KKyAgICAgIHRoaXMub3V0cHV0X2RvY3VtZW50ID0gbnVsbDsNCisgICAgICB0aGlzLm91
dHB1dF9ub2RlID0gbnVsbDsNCisgICAgICB0aGlzLmRvbmVfY291bnQgPSAwOw0KKyAgICAgIHRo
aXMuZW5hYmxlZCA9IHNldHRpbmdzLm91dHB1dDsNCisgICAgICB0aGlzLnBoYXNlID0gdGhpcy5J
TklUSUFMOw0KKyAgICB9DQorDQorICAgIE91dHB1dC5wcm90b3R5cGUuSU5JVElBTCA9IDA7DQor
ICAgIE91dHB1dC5wcm90b3R5cGUuU1RBUlRFRCA9IDE7DQorICAgIE91dHB1dC5wcm90b3R5cGUu
SEFWRV9SRVNVTFRTID0gMjsNCisgICAgT3V0cHV0LnByb3RvdHlwZS5DT01QTEVURSA9IDM7DQor
DQorICAgIE91dHB1dC5wcm90b3R5cGUuc2V0dXAgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7DQor
ICAgICAgICBpZiAodGhpcy5waGFzZSA+IHRoaXMuSU5JVElBTCkgew0KKyAgICAgICAgICAgIHJl
dHVybjsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vSWYgb3V0cHV0IGlzIGRpc2FibGVkIGlu
IHRlc3RoYXJuZXNzcmVwb3J0LmpzIHRoZSB0ZXN0IHNob3VsZG4ndCBiZQ0KKyAgICAgICAgLy9h
YmxlIHRvIG92ZXJyaWRlIHRoYXQNCisgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRoaXMuZW5hYmxl
ZCAmJiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgib3V0cHV0IikgPw0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm91dHB1dCA6IHNldHRpbmdz
Lm91dHB1dCk7DQorICAgIH07DQorDQorICAgIE91dHB1dC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0
aW9uKHByb3BlcnRpZXMpDQorICAgIHsNCisgICAgICAgIGlmICh0aGlzLnBoYXNlID49IHRoaXMu
U1RBUlRFRCkgew0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisgICAgICAgIGlm
IChwcm9wZXJ0aWVzLm91dHB1dF9kb2N1bWVudCkgew0KKyAgICAgICAgICAgIHRoaXMub3V0cHV0
X2RvY3VtZW50ID0gcHJvcGVydGllcy5vdXRwdXRfZG9jdW1lbnQ7DQorICAgICAgICB9IGVsc2Ug
ew0KKyAgICAgICAgICAgIHRoaXMub3V0cHV0X2RvY3VtZW50ID0gZG9jdW1lbnQ7DQorICAgICAg
ICB9DQorICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5TVEFSVEVEOw0KKyAgICB9Ow0KKw0KKyAg
ICBPdXRwdXQucHJvdG90eXBlLnJlc29sdmVfbG9nID0gZnVuY3Rpb24oKQ0KKyAgICB7DQorICAg
ICAgICBpZiAoIXRoaXMub3V0cHV0X2RvY3VtZW50KSB7DQorICAgICAgICAgICAgcmV0dXJuOw0K
KyAgICAgICAgfQ0KKyAgICAgICAgdmFyIG5vZGUgPSB0aGlzLm91dHB1dF9kb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgibG9nIik7DQorICAgICAgICBpZiAobm9kZSkgew0KKyAgICAgICAgICAgIHRo
aXMub3V0cHV0X25vZGUgPSBub2RlOw0KKyAgICAgICAgfQ0KKyAgICB9Ow0KKw0KKyAgICBPdXRw
dXQucHJvdG90eXBlLnNob3dfc3RhdHVzID0gZnVuY3Rpb24odGVzdCkNCisgICAgew0KKyAgICAg
ICAgaWYgKHRoaXMucGhhc2UgPCB0aGlzLlNUQVJURUQpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgdGhpcy5pbml0KCk7DQorICAgICAgICB9DQorICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCkN
CisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorICAgICAgICBp
ZiAodGhpcy5waGFzZSA8IHRoaXMuSEFWRV9SRVNVTFRTKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIHRoaXMucmVzb2x2ZV9sb2coKTsNCisgICAgICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5I
QVZFX1JFU1VMVFM7DQorICAgICAgICB9DQorICAgICAgICB0aGlzLmRvbmVfY291bnQrKzsNCisg
ICAgICAgIGlmICh0aGlzLm91dHB1dF9ub2RlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlm
ICh0aGlzLmRvbmVfY291bnQgPCAxMDANCisgICAgICAgICAgICB8fCAodGhpcy5kb25lX2NvdW50
IDwgMTAwMCAmJiB0aGlzLmRvbmVfY291bnQgJSAxMDAgPT0gMCkNCisgICAgICAgICAgICB8fCB0
aGlzLmRvbmVfY291bnQgJSAxMDAwID09IDApIHsNCisgICAgICAgICAgICAgICAgdGhpcy5vdXRw
dXRfbm9kZS50ZXh0Q29udGVudCA9ICJSdW5uaW5nLCAiDQorICAgICAgICAgICAgICAgICAgICAr
IHRoaXMuZG9uZV9jb3VudCArICIgY29tcGxldGUsICINCisgICAgICAgICAgICAgICAgICAgICsg
dGVzdHMubnVtX3BlbmRpbmcgKyAiIHJlbWFpbiI7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
fQ0KKyAgICB9Ow0KKw0KKyAgICBPdXRwdXQucHJvdG90eXBlLnNob3dfcmVzdWx0cyA9IGZ1bmN0
aW9uICh0ZXN0cywgaGFybmVzc19zdGF0dXMpDQorICAgIHsNCisgICAgICAgIGlmICh0aGlzLnBo
YXNlID49IHRoaXMuQ09NUExFVEUpIHsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9
DQorICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBy
ZXR1cm47DQorICAgICAgICB9DQorICAgICAgICBpZiAoIXRoaXMub3V0cHV0X25vZGUpIHsNCisg
ICAgICAgICAgICB0aGlzLnJlc29sdmVfbG9nKCk7DQorICAgICAgICB9DQorICAgICAgICB0aGlz
LnBoYXNlID0gdGhpcy5DT01QTEVURTsNCisNCisgICAgICAgIHZhciBsb2cgPSB0aGlzLm91dHB1
dF9ub2RlOw0KKyAgICAgICAgaWYgKCFsb2cpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0
dXJuOw0KKyAgICAgICAgfQ0KKyAgICAgICAgdmFyIG91dHB1dF9kb2N1bWVudCA9IHRoaXMub3V0
cHV0X2RvY3VtZW50Ow0KKw0KKyAgICAgICAgd2hpbGUgKGxvZy5sYXN0Q2hpbGQpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgbG9nLnJlbW92ZUNoaWxkKGxvZy5sYXN0Q2hpbGQpOw0KKyAgICAg
ICAgfQ0KKw0KKyAgICAgICAgaWYgKHNjcmlwdF9wcmVmaXggIT0gbnVsbCkgew0KKyAgICAgICAg
ICAgIHZhciBzdHlsZXNoZWV0ID0gb3V0cHV0X2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh4aHRt
bF9ucywgImxpbmsiKTsNCisgICAgICAgICAgICBzdHlsZXNoZWV0LnNldEF0dHJpYnV0ZSgicmVs
IiwgInN0eWxlc2hlZXQiKTsNCisgICAgICAgICAgICBzdHlsZXNoZWV0LnNldEF0dHJpYnV0ZSgi
aHJlZiIsIHNjcmlwdF9wcmVmaXggKyAidGVzdGhhcm5lc3MuY3NzIik7DQorICAgICAgICAgICAg
dmFyIGhlYWRzID0gb3V0cHV0X2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIik7
DQorICAgICAgICAgICAgaWYgKGhlYWRzLmxlbmd0aCkgew0KKyAgICAgICAgICAgICAgICBoZWFk
c1swXS5hcHBlbmRDaGlsZChzdHlsZXNoZWV0KTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9
DQorDQorICAgICAgICB2YXIgc3RhdHVzX3RleHQgPSB7fTsNCisgICAgICAgIHN0YXR1c190ZXh0
W1Rlc3QucHJvdG90eXBlLlBBU1NdID0gIlBhc3MiOw0KKyAgICAgICAgc3RhdHVzX3RleHRbVGVz
dC5wcm90b3R5cGUuRkFJTF0gPSAiRmFpbCI7DQorICAgICAgICBzdGF0dXNfdGV4dFtUZXN0LnBy
b3RvdHlwZS5USU1FT1VUXSA9ICJUaW1lb3V0IjsNCisgICAgICAgIHN0YXR1c190ZXh0W1Rlc3Qu
cHJvdG90eXBlLk5PVFJVTl0gPSAiTm90IFJ1biI7DQorDQorICAgICAgICB2YXIgc3RhdHVzX251
bWJlciA9IHt9Ow0KKyAgICAgICAgZm9yRWFjaCh0ZXN0cywgZnVuY3Rpb24odGVzdCkgew0KKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHN0YXR1c190ZXh0W3Rlc3Quc3RhdHVzXTsN
CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXNfbnVtYmVyLmhhc093blByb3BlcnR5KHN0
YXR1cykpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdHVzX251bWJlcltzdGF0dXNdICs9IDE7DQorICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c19udW1iZXJbc3RhdHVzXSA9IDE7DQor
ICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0pOw0KKw0KKyAgICAgICAg
ZnVuY3Rpb24gc3RhdHVzX2NsYXNzKHN0YXR1cykNCisgICAgICAgIHsNCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdHVzLnJlcGxhY2UoL1xzL2csICcnKS50b0xvd2VyQ2FzZSgpOw0KKyAgICAgICAg
fQ0KKw0KKyAgICAgICAgdmFyIHN1bW1hcnlfdGVtcGxhdGUgPSBbInNlY3Rpb24iLCB7ImlkIjoi
c3VtbWFyeSJ9LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoMiIsIHt9LCAi
U3VtbWFyeSJdLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJwIiwge30sICJG
b3VuZCAke251bV90ZXN0c30gdGVzdHMiXSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKHZhcnMpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgcnYgPSBbWyJkaXYiLCB7fV1dOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBpPTA7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKHN0YXR1c190ZXh0Lmhhc093blByb3BlcnR5KGkpKSB7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXNfbnVtYmVyLmhhc093blByb3BlcnR5KHN0
YXR1c190ZXh0W2ldKSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHN0YXR1cyA9IHN0YXR1c190ZXh0W2ldOw0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcnZbMF0ucHVzaChbImRpdiIsIHsiY2xhc3MiOnN0YXR1
c19jbGFzcyhzdGF0dXMpfSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFsibGFiZWwiLCB7fSwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImlucHV0Iiwge3R5cGU6ImNoZWNr
Ym94IiwgY2hlY2tlZDoiY2hlY2tlZCJ9XSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfbnVtYmVyW3N0YXR1c10gKyAiICIg
KyBzdGF0dXNdXSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrOw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcnY7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
XTsNCisNCisgICAgICAgIGxvZy5hcHBlbmRDaGlsZChyZW5kZXIoc3VtbWFyeV90ZW1wbGF0ZSwg
e251bV90ZXN0czp0ZXN0cy5sZW5ndGh9LCBvdXRwdXRfZG9jdW1lbnQpKTsNCisNCisgICAgICAg
IGZvckVhY2gob3V0cHV0X2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInNlY3Rpb24jc3VtbWFy
eSBsYWJlbCIpLA0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbihlbGVtZW50KQ0KKyAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBvbl9ldmVudChlbGVtZW50LCAiY2xpY2si
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZSkNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAob3V0cHV0X2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIikgPT09IG51bGwpDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdF9jbGFz
cyA9IGVsZW1lbnQucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoImNsYXNzIik7DQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0eWxlX2VsZW1lbnQgPSBvdXRwdXRfZG9jdW1l
bnQucXVlcnlTZWxlY3Rvcigic3R5bGUjaGlkZS0iICsgcmVzdWx0X2NsYXNzKTsNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRfZWxlbWVudCA9IGVsZW1lbnQucXVl
cnlTZWxlY3RvcigiaW5wdXQiKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXN0eWxlX2VsZW1lbnQgJiYgIWlucHV0X2VsZW1lbnQuY2hlY2tlZCkgew0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZV9lbGVtZW50ID0gb3V0cHV0X2RvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnROUyh4aHRtbF9ucywgInN0eWxlIik7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlX2VsZW1lbnQuaWQgPSAiaGlkZS0iICsgcmVzdWx0
X2NsYXNzOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZV9lbGVt
ZW50LmlubmVySFRNTCA9ICJ0YWJsZSNyZXN1bHRzID4gdGJvZHkgPiB0ci4iK3Jlc3VsdF9jbGFz
cysie2Rpc3BsYXk6bm9uZX0iOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXRfZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzdHlsZV9lbGVtZW50KTsNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0eWxlX2VsZW1lbnQgJiYg
aW5wdXRfZWxlbWVudC5jaGVja2VkKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0eWxlX2VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZV9lbGVtZW50
KTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsNCisgICAgICAgICAgICAgICAgfSk7DQorDQorICAgICAgICAvLyBU
aGlzIHVzZSBvZiBpbm5lckhUTUwgcGx1cyBtYW51YWwgZXNjYXBpbmcgaXMgbm90IHJlY29tbWVu
ZGVkIGluDQorICAgICAgICAvLyBnZW5lcmFsLCBidXQgaXMgbmVjZXNzYXJ5IGhlcmUgZm9yIHBl
cmZvcm1hbmNlLiAgVXNpbmcgdGV4dENvbnRlbnQNCisgICAgICAgIC8vIG9uIGVhY2ggaW5kaXZp
ZHVhbCA8dGQ+IGFkZHMgdGVucyBvZiBzZWNvbmRzIG9mIGV4ZWN1dGlvbiB0aW1lIGZvcg0KKyAg
ICAgICAgLy8gbGFyZ2UgdGVzdCBzdWl0ZXMgKHRlbnMgb2YgdGhvdXNhbmRzIG9mIHRlc3RzKS4N
CisgICAgICAgIGZ1bmN0aW9uIGVzY2FwZV9odG1sKHMpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgcmV0dXJuIHMucmVwbGFjZSgvXCYvZywgIiZhbXA7IikNCisgICAgICAgICAgICAgICAgLnJl
cGxhY2UoLzwvZywgIiZsdDsiKQ0KKyAgICAgICAgICAgICAgICAucmVwbGFjZSgvIi9nLCAiJnF1
b3Q7IikNCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgIiYjMzk7Iik7DQorICAgICAg
ICB9DQorDQorICAgICAgICBsb2cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c2VjdGlvbiIpKTsNCisgICAgICAgIHZhciBodG1sID0gIjxoMj5EZXRhaWxzPC9oMj48dGFibGUg
aWQ9J3Jlc3VsdHMnPiINCisgICAgICAgICAgICArICI8dGhlYWQ+PHRyPjx0aD5SZXN1bHQ8L3Ro
Pjx0aD5UZXN0IE5hbWU8L3RoPjx0aD5NZXNzYWdlPC90aD48L3RyPjwvdGhlYWQ+Ig0KKyAgICAg
ICAgICAgICsgIjx0Ym9keT4iOw0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5s
ZW5ndGg7IGkrKykgew0KKyAgICAgICAgICAgIGh0bWwgKz0gJzx0ciBjbGFzcz0iJw0KKyAgICAg
ICAgICAgICAgICArIGVzY2FwZV9odG1sKHN0YXR1c19jbGFzcyhzdGF0dXNfdGV4dFt0ZXN0c1tp
XS5zdGF0dXNdKSkNCisgICAgICAgICAgICAgICAgKyAnIj48dGQ+Jw0KKyAgICAgICAgICAgICAg
ICArIGVzY2FwZV9odG1sKHN0YXR1c190ZXh0W3Rlc3RzW2ldLnN0YXR1c10pDQorICAgICAgICAg
ICAgICAgICsgIjwvdGQ+PHRkPiINCisgICAgICAgICAgICAgICAgKyBlc2NhcGVfaHRtbChmb3Jt
YXRfc3RyaW5nKHRlc3RzW2ldLm5hbWUpKQ0KKyAgICAgICAgICAgICAgICArICI8L3RkPjx0ZD4i
DQorICAgICAgICAgICAgICAgICsgZXNjYXBlX2h0bWwodGVzdHNbaV0ubWVzc2FnZSA/IGZvcm1h
dF9zdHJpbmcodGVzdHNbaV0ubWVzc2FnZSkgOiAiICIpDQorICAgICAgICAgICAgICAgICsgIjwv
dGQ+PC90cj4iOw0KKyAgICAgICAgfQ0KKyAgICAgICAgbG9nLmxhc3RDaGlsZC5pbm5lckhUTUwg
PSBodG1sICsgIjwvdGJvZHk+PC90YWJsZT4iOw0KKyAgICB9Ow0KKw0KKyAgICB2YXIgb3V0cHV0
ID0gbmV3IE91dHB1dCgpOw0KKyAgICBhZGRfc3RhcnRfY2FsbGJhY2soZnVuY3Rpb24gKHByb3Bl
cnRpZXMpIHtvdXRwdXQuaW5pdChwcm9wZXJ0aWVzKTt9KTsNCisgICAgYWRkX3Jlc3VsdF9jYWxs
YmFjayhmdW5jdGlvbiAodGVzdCkge291dHB1dC5zaG93X3N0YXR1cyh0ZXN0cyk7fSk7DQorICAg
IGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGZ1bmN0aW9uICh0ZXN0cywgaGFybmVzc19zdGF0dXMp
IHtvdXRwdXQuc2hvd19yZXN1bHRzKHRlc3RzLCBoYXJuZXNzX3N0YXR1cyk7fSk7DQorDQorICAg
IC8qDQorICAgICAqIFRlbXBsYXRlIGNvZGUNCisgICAgICoNCisgICAgICogQSB0ZW1wbGF0ZSBp
cyBqdXN0IGEgamF2YXNjcmlwdCBzdHJ1Y3R1cmUuIEFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQg
YXM6DQorICAgICAqDQorICAgICAqIFt0YWdfbmFtZSwge2F0dHJfbmFtZTphdHRyX3ZhbHVlfSwg
Y2hpbGQxLCBjaGlsZDJdDQorICAgICAqDQorICAgICAqIHRoZSBjaGlsZHJlbiBjYW4gZWl0aGVy
IGJlIHN0cmluZ3MgKHdoaWNoIGFjdCBsaWtlIHRleHQgbm9kZXMpLCBvdGhlciB0ZW1wbGF0ZXMg
b3INCisgICAgICogZnVuY3Rpb25zIChzZWUgYmVsb3cpDQorICAgICAqDQorICAgICAqIEEgdGV4
dCBub2RlIGlzIHJlcHJlc2VudGVkIGFzDQorICAgICAqDQorICAgICAqIFsie3RleHR9IiwgdmFs
dWVdDQorICAgICAqDQorICAgICAqIFN0cmluZyB2YWx1ZXMgaGF2ZSBhIHNpbXBsZSBzdWJzdGl0
dXRpb24gc3ludGF4OyAke2Zvb30gcmVwcmVzZW50cyBhIHZhcmlhYmxlIGZvby4NCisgICAgICoN
CisgICAgICogSXQgaXMgcG9zc2libGUgdG8gZW1iZWQgbG9naWMgaW4gdGVtcGxhdGVzIGJ5IHVz
aW5nIGEgZnVuY3Rpb24gaW4gYSBwbGFjZSB3aGVyZSBhDQorICAgICAqIG5vZGUgd291bGQgdXN1
YWxseSBnby4gVGhlIGZ1bmN0aW9uIG11c3QgZWl0aGVyIHJldHVybiBwYXJ0IG9mIGEgdGVtcGxh
dGUgb3IgbnVsbC4NCisgICAgICoNCisgICAgICogSW4gY2FzZXMgd2hlcmUgYSBzZXQgb2Ygbm9k
ZXMgYXJlIHJlcXVpcmVkIGFzIG91dHB1dCByYXRoZXIgdGhhbiBhIHNpbmdsZSBub2RlDQorICAg
ICAqIHdpdGggY2hpbGRyZW4gaXQgaXMgcG9zc2libGUgdG8ganVzdCB1c2UgYSBsaXN0DQorICAg
ICAqIFtub2RlMSwgbm9kZTIsIG5vZGUzXQ0KKyAgICAgKg0KKyAgICAgKiBVc2FnZToNCisgICAg
ICoNCisgICAgICogcmVuZGVyKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKSAtIHRha2UgYSB0ZW1w
bGF0ZSBhbmQgYW4gb2JqZWN0IG1hcHBpbmcNCisgICAgICogdmFyaWFibGUgbmFtZXMgdG8gcGFy
YW1ldGVycyBhbmQgcmV0dXJuIGVpdGhlciBhIERPTSBub2RlIG9yIGEgbGlzdCBvZiBET00gbm9k
ZXMNCisgICAgICoNCisgICAgICogc3Vic3RpdHV0ZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucykg
LSB0YWtlIGEgdGVtcGxhdGUgYW5kIHZhcmlhYmxlIG1hcHBpbmcgb2JqZWN0LA0KKyAgICAgKiBt
YWtlIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb25zIGFuZCByZXR1cm4gdGhlIHN1YnN0aXR1dGVk
IHRlbXBsYXRlDQorICAgICAqDQorICAgICAqLw0KKw0KKyAgICBmdW5jdGlvbiBpc19zaW5nbGVf
bm9kZSh0ZW1wbGF0ZSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHR5cGVvZiB0ZW1wbGF0ZVsw
XSA9PT0gInN0cmluZyI7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gc3Vic3RpdHV0ZSh0ZW1w
bGF0ZSwgc3Vic3RpdHV0aW9ucykNCisgICAgew0KKyAgICAgICAgaWYgKHR5cGVvZiB0ZW1wbGF0
ZSA9PT0gImZ1bmN0aW9uIikgew0KKyAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IHRlbXBs
YXRlKHN1YnN0aXR1dGlvbnMpOw0KKyAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCkNCisgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgIHZhciBydiA9IHN1YnN0aXR1dGUocmVwbGFjZW1l
bnQsIHN1YnN0aXR1dGlvbnMpOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gcnY7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgIHJldHVybiBudWxsOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVs
c2UgaWYgKGlzX3NpbmdsZV9ub2RlKHRlbXBsYXRlKSkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICByZXR1cm4gc3Vic3RpdHV0ZV9zaW5nbGUodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMpOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBm
aWx0ZXIobWFwKHRlbXBsYXRlLCBmdW5jdGlvbih4KSB7DQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdWJzdGl0dXRlKHgsIHN1YnN0aXR1dGlvbnMpOw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBmdW5jdGlvbih4KSB7cmV0dXJuIHggIT09IG51
bGw7fSk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gc3Vic3RpdHV0ZV9z
aW5nbGUodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMpDQorICAgIHsNCisgICAgICAgIHZhciBzdWJz
dGl0dXRpb25fcmUgPSAvXCR7KFteIH1dKil9L2c7DQorDQorICAgICAgICBmdW5jdGlvbiBkb19z
dWJzdGl0dXRpb24oaW5wdXQpIHsNCisgICAgICAgICAgICB2YXIgY29tcG9uZW50cyA9IGlucHV0
LnNwbGl0KHN1YnN0aXR1dGlvbl9yZSk7DQorICAgICAgICAgICAgdmFyIHJ2ID0gW107DQorICAg
ICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNvbXBvbmVudHMubGVuZ3RoOyBpKz0yKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgcnYucHVzaChjb21wb25lbnRzW2ldKTsNCisgICAg
ICAgICAgICAgICAgaWYgKGNvbXBvbmVudHNbaSsxXSkNCisgICAgICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICAgICAgcnYucHVzaChTdHJpbmcoc3Vic3RpdHV0aW9uc1tjb21wb25lbnRz
W2krMV1dKSk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICAg
ICAgcmV0dXJuIHJ2Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgdmFyIHJ2ID0gW107DQorICAg
ICAgICBydi5wdXNoKGRvX3N1YnN0aXR1dGlvbihTdHJpbmcodGVtcGxhdGVbMF0pKS5qb2luKCIi
KSk7DQorDQorICAgICAgICBpZiAodGVtcGxhdGVbMF0gPT09ICJ7dGV4dH0iKSB7DQorICAgICAg
ICAgICAgc3Vic3RpdHV0ZV9jaGlsZHJlbih0ZW1wbGF0ZS5zbGljZSgxKSwgcnYpOw0KKyAgICAg
ICAgfSBlbHNlIHsNCisgICAgICAgICAgICBzdWJzdGl0dXRlX2F0dHJzKHRlbXBsYXRlWzFdLCBy
dik7DQorICAgICAgICAgICAgc3Vic3RpdHV0ZV9jaGlsZHJlbih0ZW1wbGF0ZS5zbGljZSgyKSwg
cnYpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZnVuY3Rpb24gc3Vic3RpdHV0ZV9hdHRycyhh
dHRycywgcnYpDQorICAgICAgICB7DQorICAgICAgICAgICAgcnZbMV0gPSB7fTsNCisgICAgICAg
ICAgICBmb3IgKHZhciBuYW1lIGluIHRlbXBsYXRlWzFdKQ0KKyAgICAgICAgICAgIHsNCisgICAg
ICAgICAgICAgICAgaWYgKGF0dHJzLmhhc093blByb3BlcnR5KG5hbWUpKQ0KKyAgICAgICAgICAg
ICAgICB7DQorICAgICAgICAgICAgICAgICAgICB2YXIgbmV3X25hbWUgPSBkb19zdWJzdGl0dXRp
b24obmFtZSkuam9pbigiIik7DQorICAgICAgICAgICAgICAgICAgICB2YXIgbmV3X3ZhbHVlID0g
ZG9fc3Vic3RpdHV0aW9uKGF0dHJzW25hbWVdKS5qb2luKCIiKTsNCisgICAgICAgICAgICAgICAg
ICAgIHJ2WzFdW25ld19uYW1lXSA9IG5ld192YWx1ZTsNCisgICAgICAgICAgICAgICAgfTsNCisg
ICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBmdW5jdGlvbiBzdWJzdGl0dXRl
X2NoaWxkcmVuKGNoaWxkcmVuLCBydikNCisgICAgICAgIHsNCisgICAgICAgICAgICBmb3IgKHZh
ciBpPTA7IGk8Y2hpbGRyZW4ubGVuZ3RoOyBpKyspDQorICAgICAgICAgICAgew0KKyAgICAgICAg
ICAgICAgICBpZiAoY2hpbGRyZW5baV0gaW5zdGFuY2VvZiBPYmplY3QpIHsNCisgICAgICAgICAg
ICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IHN1YnN0aXR1dGUoY2hpbGRyZW5baV0sIHN1YnN0
aXR1dGlvbnMpOw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ICE9PSBudWxs
KQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
c19zaW5nbGVfbm9kZShyZXBsYWNlbWVudCkpDQorICAgICAgICAgICAgICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydi5wdXNoKHJlcGxhY2VtZW50KTsNCisgICAg
ICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0
ZW5kKHJ2LCByZXBsYWNlbWVudCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGVs
c2UNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJ2LCBk
b19zdWJzdGl0dXRpb24oU3RyaW5nKGNoaWxkcmVuW2ldKSkpOw0KKyAgICAgICAgICAgICAgICB9
DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHJldHVybiBydjsNCisgICAgICAgIH0NCisN
CisgICAgICAgIHJldHVybiBydjsNCisgICAgfQ0KKw0KKyBmdW5jdGlvbiBtYWtlX2RvbV9zaW5n
bGUodGVtcGxhdGUsIGRvYykNCisgew0KKyAgICAgdmFyIG91dHB1dF9kb2N1bWVudCA9IGRvYyB8
fCBkb2N1bWVudDsNCisgICAgIGlmICh0ZW1wbGF0ZVswXSA9PT0gInt0ZXh0fSIpDQorICAgICB7
DQorICAgICAgICAgdmFyIGVsZW1lbnQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
IiIpOw0KKyAgICAgICAgIGZvciAodmFyIGk9MTsgaTx0ZW1wbGF0ZS5sZW5ndGg7IGkrKykNCisg
ICAgICAgICB7DQorICAgICAgICAgICAgIGVsZW1lbnQuZGF0YSArPSB0ZW1wbGF0ZVtpXTsNCisg
ICAgICAgICB9DQorICAgICB9DQorICAgICBlbHNlDQorICAgICB7DQorICAgICAgICAgdmFyIGVs
ZW1lbnQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhodG1sX25zLCB0ZW1wbGF0
ZVswXSk7DQorICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0ZW1wbGF0ZVsxXSkgew0KKyAgICAg
ICAgICAgICBpZiAodGVtcGxhdGVbMV0uaGFzT3duUHJvcGVydHkobmFtZSkpDQorICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHRlbXBs
YXRlWzFdW25hbWVdKTsNCisgICAgICAgICAgICAgfQ0KKyAgICAgICAgIH0NCisgICAgICAgICBm
b3IgKHZhciBpPTI7IGk8dGVtcGxhdGUubGVuZ3RoOyBpKyspDQorICAgICAgICAgew0KKyAgICAg
ICAgICAgICBpZiAodGVtcGxhdGVbaV0gaW5zdGFuY2VvZiBPYmplY3QpDQorICAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgIHZhciBzdWJfZWxlbWVudCA9IG1ha2VfZG9tKHRlbXBsYXRl
W2ldKTsNCisgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ViX2VsZW1lbnQp
Ow0KKyAgICAgICAgICAgICB9DQorICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgew0K
KyAgICAgICAgICAgICAgICAgdmFyIHRleHRfbm9kZSA9IG91dHB1dF9kb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSh0ZW1wbGF0ZVtpXSk7DQorICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENo
aWxkKHRleHRfbm9kZSk7DQorICAgICAgICAgICAgIH0NCisgICAgICAgICB9DQorICAgICB9DQor
DQorICAgICByZXR1cm4gZWxlbWVudDsNCisgfQ0KKw0KKw0KKw0KKyBmdW5jdGlvbiBtYWtlX2Rv
bSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucywgb3V0cHV0X2RvY3VtZW50KQ0KKyAgICB7DQorICAg
ICAgICBpZiAoaXNfc2luZ2xlX25vZGUodGVtcGxhdGUpKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICAgIHJldHVybiBtYWtlX2RvbV9zaW5nbGUodGVtcGxhdGUsIG91dHB1dF9kb2N1bWVudCk7DQor
ICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJu
IG1hcCh0ZW1wbGF0ZSwgZnVuY3Rpb24oeCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBtYWtlX2RvbV9zaW5nbGUoeCwgb3V0cHV0X2RvY3VtZW50KTsNCisgICAgICAgICAg
ICAgICAgICAgICAgIH0pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorIGZ1bmN0aW9uIHJlbmRl
cih0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucywgb3V0cHV0X2RvY3VtZW50KQ0KKyAgICB7DQorICAg
ICAgICByZXR1cm4gbWFrZV9kb20oc3Vic3RpdHV0ZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucyks
IG91dHB1dF9kb2N1bWVudCk7DQorICAgIH0NCisNCisgICAgLyoNCisgICAgICogVXRpbGl0eSBm
dW5jaW9ucw0KKyAgICAgKi8NCisgICAgZnVuY3Rpb24gYXNzZXJ0KGV4cGVjdGVkX3RydWUsIGZ1
bmN0aW9uX25hbWUsIGRlc2NyaXB0aW9uLCBlcnJvciwgc3Vic3RpdHV0aW9ucykNCisgICAgew0K
KyAgICAgICAgaWYgKGV4cGVjdGVkX3RydWUgIT09IHRydWUpDQorICAgICAgICB7DQorICAgICAg
ICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1ha2VfbWVzc2FnZShmdW5jdGlvbl9uYW1l
LCBkZXNjcmlwdGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yLCBzdWJzdGl0dXRpb25zKSk7DQorICAgICAgICB9DQorICAgIH0NCisN
CisgICAgZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSkNCisgICAgew0KKyAgICAgICAg
dGhpcy5tZXNzYWdlID0gbWVzc2FnZTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBtYWtlX21l
c3NhZ2UoZnVuY3Rpb25fbmFtZSwgZGVzY3JpcHRpb24sIGVycm9yLCBzdWJzdGl0dXRpb25zKQ0K
KyAgICB7DQorICAgICAgICBmb3IgKHZhciBwIGluIHN1YnN0aXR1dGlvbnMpIHsNCisgICAgICAg
ICAgICBpZiAoc3Vic3RpdHV0aW9ucy5oYXNPd25Qcm9wZXJ0eShwKSkgew0KKyAgICAgICAgICAg
ICAgICBzdWJzdGl0dXRpb25zW3BdID0gZm9ybWF0X3ZhbHVlKHN1YnN0aXR1dGlvbnNbcF0pOw0K
KyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIHZhciBub2RlX2Zvcm0gPSBzdWJz
dGl0dXRlKFsie3RleHR9IiwgIiR7ZnVuY3Rpb25fbmFtZX06ICR7ZGVzY3JpcHRpb259IiArIGVy
cm9yXSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKHtmdW5jdGlv
bl9uYW1lOmZ1bmN0aW9uX25hbWUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzY3JpcHRpb246KGRlc2NyaXB0aW9uP2Rlc2NyaXB0aW9uICsgIiAiOiIiKX0s
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9u
cykpOw0KKyAgICAgICAgcmV0dXJuIG5vZGVfZm9ybS5zbGljZSgxKS5qb2luKCIiKTsNCisgICAg
fQ0KKw0KKyAgICBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxhYmxlLCB0aGlzT2JqKSB7DQor
ICAgICAgICB2YXIgcnYgPSBbXTsNCisgICAgICAgIGZvciAodmFyIGk9MDsgaTxhcnJheS5sZW5n
dGg7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoYXJyYXkuaGFzT3duUHJvcGVy
dHkoaSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB2YXIgcGFzcyA9IGNhbGxh
YmxlLmNhbGwodGhpc09iaiwgYXJyYXlbaV0sIGksIGFycmF5KTsNCisgICAgICAgICAgICAgICAg
aWYgKHBhc3MpIHsNCisgICAgICAgICAgICAgICAgICAgIHJ2LnB1c2goYXJyYXlbaV0pOw0KKyAg
ICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgcmV0
dXJuIHJ2Ow0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIG1hcChhcnJheSwgY2FsbGFibGUsIHRo
aXNPYmopDQorICAgIHsNCisgICAgICAgIHZhciBydiA9IFtdOw0KKyAgICAgICAgcnYubGVuZ3Ro
ID0gYXJyYXkubGVuZ3RoOw0KKyAgICAgICAgZm9yICh2YXIgaT0wOyBpPGFycmF5Lmxlbmd0aDsg
aSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChhcnJheS5oYXNPd25Qcm9wZXJ0eShp
KSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJ2W2ldID0gY2FsbGFibGUuY2Fs
bCh0aGlzT2JqLCBhcnJheVtpXSwgaSwgYXJyYXkpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
IH0NCisgICAgICAgIHJldHVybiBydjsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBleHRlbmQo
YXJyYXksIGl0ZW1zKQ0KKyAgICB7DQorICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBs
eShhcnJheSwgaXRlbXMpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGZvckVhY2ggKGFycmF5
LCBjYWxsYmFjaywgdGhpc09iaikNCisgICAgew0KKyAgICAgICAgZm9yICh2YXIgaT0wOyBpPGFy
cmF5Lmxlbmd0aDsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChhcnJheS5oYXNP
d25Qcm9wZXJ0eShpKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGNhbGxiYWNr
LmNhbGwodGhpc09iaiwgYXJyYXlbaV0sIGksIGFycmF5KTsNCisgICAgICAgICAgICB9DQorICAg
ICAgICB9DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gbWVyZ2UoYSxiKQ0KKyAgICB7DQorICAg
ICAgICB2YXIgcnYgPSB7fTsNCisgICAgICAgIHZhciBwOw0KKyAgICAgICAgZm9yIChwIGluIGEp
DQorICAgICAgICB7DQorICAgICAgICAgICAgcnZbcF0gPSBhW3BdOw0KKyAgICAgICAgfQ0KKyAg
ICAgICAgZm9yIChwIGluIGIpIHsNCisgICAgICAgICAgICBydltwXSA9IGJbcF07DQorICAgICAg
ICB9DQorICAgICAgICByZXR1cm4gcnY7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gZXhwb3Nl
KG9iamVjdCwgbmFtZSkNCisgICAgew0KKyAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBuYW1lLnNw
bGl0KCIuIik7DQorICAgICAgICB2YXIgdGFyZ2V0ID0gd2luZG93Ow0KKyAgICAgICAgZm9yICh2
YXIgaT0wOyBpPGNvbXBvbmVudHMubGVuZ3RoIC0gMTsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGlmICghKGNvbXBvbmVudHNbaV0gaW4gdGFyZ2V0KSkNCisgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgIHRhcmdldFtjb21wb25lbnRzW2ldXSA9IHt9Ow0KKyAgICAgICAgICAg
IH0NCisgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRbY29tcG9uZW50c1tpXV07DQorICAgICAg
ICB9DQorICAgICAgICB0YXJnZXRbY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdXSA9
IG9iamVjdDsNCisgICAgfQ0KKw0KKyBmdW5jdGlvbiBhbmNlc3Rvcl93aW5kb3dzKCkgew0KKyAg
ICAgLy9HZXQgdGhlIHdpbmRvd3MgW3NlbGYgLi4uIHRvcF0gYXMgYW4gYXJyYXkNCisgICAgIGlm
ICgicmVzdWx0X2NhY2hlIiBpbiBhbmNlc3Rvcl93aW5kb3dzKQ0KKyAgICAgew0KKyAgICAgICAg
IHJldHVybiBhbmNlc3Rvcl93aW5kb3dzLnJlc3VsdF9jYWNoZTsNCisgICAgIH0NCisgICAgIHZh
ciBydiA9IFtzZWxmXTsNCisgICAgIHZhciB3ID0gc2VsZjsNCisgICAgIHdoaWxlICh3ICE9IHcu
cGFyZW50KQ0KKyAgICAgew0KKyAgICAgICAgIHcgPSB3LnBhcmVudDsNCisgICAgICAgICBydi5w
dXNoKHcpOw0KKyAgICAgfQ0KKyAgICAgYW5jZXN0b3Jfd2luZG93cy5yZXN1bHRfY2FjaGUgPSBy
djsNCisgICAgIHJldHVybiBydjsNCisgfQ0KKw0KK30pKCk7DQorLy8gdmltOiBzZXQgZXhwYW5k
dGFiIHNoaWZ0d2lkdGg9NCB0YWJzdG9wPTQ6ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDQ3ZGVjCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMKQEAgLTAsMCArMSwxNiBAQAorLyoNCisgKiBUSElTIEZJTEUgSU5URU5USU9OQUxMWSBMRUZU
IEJMQU5LDQorICoNCisgKiBNb3JlIHNwZWNpZmljYWxseSwgdGhpcyBmaWxlIGlzIGludGVuZGVk
IGZvciB2ZW5kb3JzIHRvIGltcGxlbWVudA0KKyAqIGNvZGUgbmVlZGVkIHRvIGludGVncmF0ZSB0
ZXN0aGFybmVzcy5qcyB0ZXN0cyB3aXRoIHRoZWlyIG93biB0ZXN0IHN5c3RlbXMuDQorICoNCisg
KiBUeXBpY2FsbHkgc3VjaCBpbnRlZ3JhdGlvbiB3aWxsIGF0dGFjaCBjYWxsYmFja3Mgd2hlbiBl
YWNoIHRlc3QgaXMNCisgKiBoYXMgcnVuLCB1c2luZyBhZGRfcmVzdWx0X2NhbGxiYWNrKGNhbGxi
YWNrKHRlc3QpKSwgb3Igd2hlbiB0aGUgd2hvbGUgdGVzdCBmaWxlIGhhcw0KKyAqIGNvbXBsZXRl
ZCwgdXNpbmcgYWRkX2NvbXBsZXRpb25fY2FsbGJhY2soY2FsbGJhY2sodGVzdHMsIGhhcm5lc3Nf
c3RhdHVzKSkuDQorICoNCisgKiBGb3IgbW9yZSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBjYWxs
YmFjayBmdW5jdGlvbnMgYW5kIHRoZQ0KKyAqIHBhcmFtZXRlcnMgdGhleSBhcmUgY2FsbGVkIHdp
dGggc2VlIHRlc3RoYXJuZXNzLmpzDQorICovDQoraWYgKHNlbGYubGF5b3V0VGVzdENvbnRyb2xs
ZXIpDQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsNCisNCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L3JlZ2lvbnMvc2NyaXB0LXRlc3RzL3dlYmtpdC1mbG93LXBh
cnNpbmcuanMgYi9MYXlvdXRUZXN0cy9mYXN0L3JlZ2lvbnMvc2NyaXB0LXRlc3RzL3dlYmtpdC1m
bG93LXBhcnNpbmcuanMKaW5kZXggMTFhYTNiNC4uZGI4NjkxYSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9yZWdpb25zL3NjcmlwdC10ZXN0cy93ZWJraXQtZmxvdy1wYXJzaW5nLmpzCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9zY3JpcHQtdGVzdHMvd2Via2l0LWZsb3ctcGFy
c2luZy5qcwpAQCAtMSw1MyArMSw0NyBAQAotZGVzY3JpcHRpb24oJ1Rlc3QgcGFyc2luZyBvZiB0
aGUgQ1NTIHdlYmtpdC1mbG93LWludG8gcHJvcGVydHkuJyk7Ci0KLWZ1bmN0aW9uIHRlc3QoZGVj
bGFyYXRpb24pIHsKLSAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
Ci0gICAgZGl2LnNldEF0dHJpYnV0ZSgic3R5bGUiLCBkZWNsYXJhdGlvbik7Ci0gICAgcmV0dXJu
IGRpdi5zdHlsZS53ZWJraXRGbG93SW50bzsKLX0KLQotZnVuY3Rpb24gdGVzdENvbXB1dGVkU3R5
bGUodmFsdWUpIHsKLSAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
Ci0gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOwotICAgIGRpdi5zdHlsZS5zZXRQ
cm9wZXJ0eSgiLXdlYmtpdC1mbG93LWludG8iLCB2YWx1ZSk7Ci0gICAgdmFyIHdlYmtpdEZsb3dD
b21wdXRlZFZhbHVlID0gZ2V0Q29tcHV0ZWRTdHlsZShkaXYpLmdldFByb3BlcnR5VmFsdWUoIi13
ZWJraXQtZmxvdy1pbnRvIik7Ci0gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOwot
ICAgIHJldHVybiB3ZWJraXRGbG93Q29tcHV0ZWRWYWx1ZTsKLX0KLQotZnVuY3Rpb24gdGVzdE5v
dEluaGVyaXRlZChwYXJlbnRWYWx1ZSwgY2hpbGRWYWx1ZSkgewotICAgIHZhciBwYXJlbnREaXYg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKHBhcmVudERpdik7Ci0gICAgcGFyZW50RGl2LnN0eWxlLnNldFByb3BlcnR5KCItd2Vi
a2l0LWZsb3ctaW50byIsIHBhcmVudFZhbHVlKTsKLQotICAgIHZhciBjaGlsZERpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHBhcmVudERpdi5hcHBlbmRDaGlsZChjaGls
ZERpdik7Ci0gICAgY2hpbGREaXYuc3R5bGUuc2V0UHJvcGVydHkoIi13ZWJraXQtZmxvdy1pbnRv
IiwgY2hpbGRWYWx1ZSk7Ci0KLSAgICB2YXIgY2hpbGRXZWJLaXRGbG93Q29tcHV0ZWRWYWx1ZSA9
IGdldENvbXB1dGVkU3R5bGUoY2hpbGREaXYpLmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtZmxv
dy1pbnRvIik7Ci0KLSAgICBwYXJlbnREaXYucmVtb3ZlQ2hpbGQoY2hpbGREaXYpOwotICAgIGRv
Y3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocGFyZW50RGl2KTsKLQotICAgIHJldHVybiBjaGlsZFdl
YktpdEZsb3dDb21wdXRlZFZhbHVlOwotfQotCi1zaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3Qo
Ii13ZWJraXQtZmxvdy1pbnRvOiBub25lIiknLCAibm9uZSIpOwotc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCd0ZXN0KCItd2Via2l0LWZsb3ctaW50bzogZmlyc3QtZmxvdyIpJywgImZpcnN0LWZsb3ci
KTsKLXNob3VsZEJlRXF1YWxUb1N0cmluZygndGVzdCgiLXdlYmtpdC1mbG93LWludG86IFwnZmly
c3QgZmxvd1wnIiknLCAiIik7Ci1zaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3QoIi13ZWJraXQt
Zmxvdy1pbnRvOiA7IiknLCAiIik7Ci1zaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3QoIi13ZWJr
aXQtZmxvdy1pbnRvOiAxIiknLCAiIik7Ci1zaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3QoIi13
ZWJraXQtZmxvdy1pbnRvOiAxLjIiKScsICIiKTsKLXNob3VsZEJlRXF1YWxUb1N0cmluZygndGVz
dCgiLXdlYmtpdC1mbG93LWludG86IC0xIiknLCAiIik7Ci1zaG91bGRCZUVxdWFsVG9TdHJpbmco
J3Rlc3QoIi13ZWJraXQtZmxvdy1pbnRvOiAxMnB4IiknLCAiIik7Ci0KLXNob3VsZEJlRXF1YWxU
b1N0cmluZygndGVzdENvbXB1dGVkU3R5bGUoIm5vbmUiKScsICJub25lIik7Ci1zaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ3Rlc3RDb21wdXRlZFN0eWxlKCIiKScsICJub25lIik7Ci1zaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ3Rlc3RDb21wdXRlZFN0eWxlKCJcJ2ZpcnN0LWZsb3dcJyIpJywgIm5vbmUi
KTsKLXNob3VsZEJlRXF1YWxUb1N0cmluZygndGVzdENvbXB1dGVkU3R5bGUoImZpcnN0LWZsb3ci
KScsICJmaXJzdC1mbG93Iik7Ci1zaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3RDb21wdXRlZFN0
eWxlKCIxMnB4IiknLCAibm9uZSIpOwotCi1zaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3ROb3RJ
bmhlcml0ZWQoIm5vbmUiLCAibm9uZSIpJywgIm5vbmUiKTsKLXNob3VsZEJlRXF1YWxUb1N0cmlu
ZygndGVzdE5vdEluaGVyaXRlZCgibm9uZSIsICJjaGlsZC1mbG93IiknLCAiY2hpbGQtZmxvdyIp
Owotc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0ZXN0Tm90SW5oZXJpdGVkKCJwYXJlbnQtZmxvdyIs
ICJub25lIiknLCAibm9uZSIpOwotc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0ZXN0Tm90SW5oZXJp
dGVkKCJwYXJlbnQtZmxvdyIsICJjaGlsZC1mbG93IiknLCAiY2hpbGQtZmxvdyIpOworZnVuY3Rp
b24gdGVzdFBhcnNlKGRlY2xhcmF0aW9uKSB7DQorICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsNCisgICAgZGl2LnNldEF0dHJpYnV0ZSgic3R5bGUiLCBkZWNsYXJh
dGlvbik7DQorICAgIHJldHVybiBkaXYuc3R5bGUud2Via2l0Rmxvd0ludG87DQorfQ0KKw0KK2Z1
bmN0aW9uIHRlc3RDb21wdXRlZFN0eWxlKHZhbHVlKSB7DQorICAgIHZhciBkaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsNCisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChk
aXYpOw0KKyAgICBkaXYuc3R5bGUuc2V0UHJvcGVydHkoIi13ZWJraXQtZmxvdy1pbnRvIiwgdmFs
dWUpOw0KKyAgICB2YXIgd2Via2l0Rmxvd0NvbXB1dGVkVmFsdWUgPSBnZXRDb21wdXRlZFN0eWxl
KGRpdikuZ2V0UHJvcGVydHlWYWx1ZSgiLXdlYmtpdC1mbG93LWludG8iKTsNCisgICAgZG9jdW1l
bnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOw0KKyAgICByZXR1cm4gd2Via2l0Rmxvd0NvbXB1dGVk
VmFsdWU7DQorfQ0KKw0KK2Z1bmN0aW9uIHRlc3ROb3RJbmhlcml0ZWQocGFyZW50VmFsdWUsIGNo
aWxkVmFsdWUpIHsNCisgICAgdmFyIHBhcmVudERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOw0KKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhcmVudERpdik7DQorICAg
IHBhcmVudERpdi5zdHlsZS5zZXRQcm9wZXJ0eSgiLXdlYmtpdC1mbG93LWludG8iLCBwYXJlbnRW
YWx1ZSk7DQorICAgIHZhciBjaGlsZERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
Ow0KKyAgICBwYXJlbnREaXYuYXBwZW5kQ2hpbGQoY2hpbGREaXYpOw0KKyAgICBjaGlsZERpdi5z
dHlsZS5zZXRQcm9wZXJ0eSgiLXdlYmtpdC1mbG93LWludG8iLCBjaGlsZFZhbHVlKTsNCisgICAg
dmFyIGNoaWxkV2ViS2l0Rmxvd0NvbXB1dGVkVmFsdWUgPSBnZXRDb21wdXRlZFN0eWxlKGNoaWxk
RGl2KS5nZXRQcm9wZXJ0eVZhbHVlKCItd2Via2l0LWZsb3ctaW50byIpOw0KKyAgICBwYXJlbnRE
aXYucmVtb3ZlQ2hpbGQoY2hpbGREaXYpOw0KKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxk
KHBhcmVudERpdik7DQorICAgIHJldHVybiBjaGlsZFdlYktpdEZsb3dDb21wdXRlZFZhbHVlOw0K
K30NCisNCit0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF9lcXVhbHModGVzdFBhcnNlKCItd2Via2l0
LWZsb3ctaW50bzogbm9uZSIpLCAibm9uZSIpfSwgInRlc3RQYXJzZTogQXNzaWduZWQgbm9uZSB0
byBwcm9wZXJ0eSwgZXhwZWN0ZWQgcmV0dXJuID0gbm9uZSIpOyANCit0ZXN0KGZ1bmN0aW9uKCkg
e2Fzc2VydF9lcXVhbHModGVzdFBhcnNlKCItd2Via2l0LWZsb3ctaW50bzogZmlyc3QtZmxvdyIp
LCAiZmlyc3QtZmxvdyIpfSwgInRlc3RQYXJzZTogQXNzaWduZWQgZmlyc3QtZmxvdyB0byBwcm9w
ZXJ0eSwgZXhwZWN0ZWQgcmV0dXJuID0gZmlyc3QtZmxvdyIpOw0KK3Rlc3QoZnVuY3Rpb24oKSB7
YXNzZXJ0X2VxdWFscyh0ZXN0UGFyc2UoIi13ZWJraXQtZmxvdy1pbnRvOiBcJ2ZpcnN0IGZsb3dc
JyIpLCAiIil9LCAidGVzdFBhcnNlOiBBc3NpZ25lZCAnZmlyc3QtZmxvdycgdG8gcHJvcGVydHks
IGV4cGVjdGVkIHJldHVybiA9ICcnIik7DQordGVzdChmdW5jdGlvbigpIHthc3NlcnRfZXF1YWxz
KHRlc3RQYXJzZSgiLXdlYmtpdC1mbG93LWludG86IDsiKSwgIiIpfSwgInRlc3RQYXJzZTogQXNz
aWduZWQgOyB0byBwcm9wZXJ0eSwgZXhwZWN0ZWQgcmV0dXJuID0gJyciKTsNCit0ZXN0KGZ1bmN0
aW9uKCkge2Fzc2VydF9lcXVhbHModGVzdFBhcnNlKCItd2Via2l0LWZsb3ctaW50bzogMSIpLCAi
Iil9LCAidGVzdFBhcnNlOiBBc3NpZ25lZCAxIHRvIHByb3BlcnR5LCBleHBlY3RlZCByZXR1cm4g
PSAnJyIpOw0KK3Rlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscyh0ZXN0UGFyc2UoIi13ZWJr
aXQtZmxvdy1pbnRvOiAxLjIiKSwgIiIpfSwgInRlc3RQYXJzZTogQXNzaWduZWQgMS4yIHRvIHBy
b3BlcnR5LCBleHBlY3RlZCByZXR1cm4gPSAnJyIpOw0KK3Rlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0
X2VxdWFscyh0ZXN0UGFyc2UoIi13ZWJraXQtZmxvdy1pbnRvOiAtMSIpLCAiIil9LCAidGVzdFBh
cnNlOiBBc3NpZ25lZCAtMSB0byBwcm9wZXJ0eSwgZXhwZWN0ZWQgcmV0dXJuID0gJyciKTsNCit0
ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF9lcXVhbHModGVzdFBhcnNlKCItd2Via2l0LWZsb3ctaW50
bzogMTJweCIpLCAiIil9LCAidGVzdFBhcnNlOiBBc3NpZ25lZCAxMnB4IHRvIHByb3BlcnR5LCBl
eHBlY3RlZCByZXR1cm4gPSAnJyIpOw0KKw0KK3Rlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFs
cyh0ZXN0Q29tcHV0ZWRTdHlsZSgibm9uZSIpLCAibm9uZSIpfSwgInRlc3RDb21wdXRlZFN0eWxl
OiBBc3NpZ25lZCBub25lIHRvIHByb3BlcnR5LCBleHBlY3RlZCByZXR1cm4gPSBub25lIik7DQor
dGVzdChmdW5jdGlvbigpIHthc3NlcnRfZXF1YWxzKHRlc3RDb21wdXRlZFN0eWxlKCIiKSwgIm5v
bmUiKX0sICJ0ZXN0Q29tcHV0ZWRTdHlsZTogQXNzaWduZWQgXCJcIiB0byBwcm9wZXJ0eSwgZXhw
ZWN0ZWQgcmV0dXJuID0gbm9uZSIpOw0KK3Rlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscyh0
ZXN0Q29tcHV0ZWRTdHlsZSgiXCdmaXJzdC1mbG93XCciKSwgIm5vbmUiKX0sICJ0ZXN0Q29tcHV0
ZWRTdHlsZTogQXNzaWduZWQgJ2ZpcnN0LWZsb3cnIHRvIHByb3BlcnR5LCBleHBlY3RlZCByZXR1
cm4gPSBub25lIik7DQordGVzdChmdW5jdGlvbigpIHthc3NlcnRfZXF1YWxzKHRlc3RDb21wdXRl
ZFN0eWxlKCJmaXJzdC1mbG93IiksICJmaXJzdC1mbG93Iil9LCAidGVzdENvbXB1dGVkU3R5bGU6
IEFzc2lnbmVkIGZpcnN0LWZsb3cgdG8gcHJvcGVydHksIGV4cGVjdGVkIHJldHVybiA9IGZpcnN0
LWZsb3ciKTsNCit0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF9lcXVhbHModGVzdENvbXB1dGVkU3R5
bGUoIjEycHgiKSwgIm5vbmUiKX0sICJ0ZXN0Q29tcHV0ZWRTdHlsZTogQXNzaWduZWQgMTJweCB0
byBwcm9wZXJ0eSwgZXhwZWN0ZWQgcmV0dXJuID0gbm9uZSIpOw0KKw0KK3Rlc3QoZnVuY3Rpb24o
KSB7YXNzZXJ0X2VxdWFscyh0ZXN0Tm90SW5oZXJpdGVkKCJub25lIiwgIm5vbmUiKSwgIm5vbmUi
KX0sICJ0ZXN0Tm90SW5oZXJpdGVkOiBBc3NpZ25lZCBub25lLCBub25lIHRvIHByb3BlcnR5LCBl
eHBlY3RlZCByZXR1cm4gPSBub25lIik7DQordGVzdChmdW5jdGlvbigpIHthc3NlcnRfZXF1YWxz
KHRlc3ROb3RJbmhlcml0ZWQoIm5vbmUiLCAiY2hpbGQtZmxvdyIpLCAiY2hpbGQtZmxvdyIpfSwg
InRlc3ROb3RJbmhlcml0ZWQ6IEFzc2lnbmVkIG5vbmUsIGNoaWxkLWZsb3cgdG8gcHJvcGVydHks
IGV4cGVjdGVkIHJldHVybiA9IGNoaWxkLWZsb3ciKTsNCit0ZXN0KGZ1bmN0aW9uKCkge2Fzc2Vy
dF9lcXVhbHModGVzdE5vdEluaGVyaXRlZCgicGFyZW50LWZsb3ciLCAibm9uZSIpLCAibm9uZSIp
fSwgInRlc3ROb3RJbmhlcml0ZWQ6IEFzc2lnbmVkIHBhcmVudC1mbG93LCBub25lIHRvIHByb3Bl
cnR5LCBleHBlY3RlZCByZXR1cm4gPSBub25lIik7DQordGVzdChmdW5jdGlvbigpIHthc3NlcnRf
ZXF1YWxzKHRlc3ROb3RJbmhlcml0ZWQoInBhcmVudC1mbG93IiwgImNoaWxkLWZsb3ciKSwgImNo
aWxkLWZsb3ciKX0sICJ0ZXN0Tm90SW5oZXJpdGVkOiBBc3NpZ25lZCBwYXJlbnQtZmxvdywgY2hp
bGQtZmxvdyB0byBwcm9wZXJ0eSwgZXhwZWN0ZWQgcmV0dXJuID0gY2hpbGQtZmxvdyIpOw0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy93ZWJraXQtZmxvdy1wYXJzaW5nLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy93ZWJraXQtZmxvdy1wYXJzaW5n
LWV4cGVjdGVkLnR4dAppbmRleCA2ZWJkYmIzLi5iNDJmMGU1IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L3JlZ2lvbnMvd2Via2l0LWZsb3ctcGFyc2luZy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9yZWdpb25zL3dlYmtpdC1mbG93LXBhcnNpbmctZXhwZWN0ZWQudHh0
CkBAIC0xLDI2ICsxLDI2IEBACi1UZXN0IHBhcnNpbmcgb2YgdGhlIENTUyB3ZWJraXQtZmxvdy1p
bnRvIHByb3BlcnR5LgorVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgdGhlIHdlYmtpdC1mbG93LWlu
dG8gcHJvcGVydHkgaXMgY29ycmVjdGx5IHBhcnNlZAorU3VtbWFyeQogCi1PbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCitGb3VuZCAxNyB0ZXN0cwogCisxNyBQYXNzCitEZXRhaWxzCiAKLVBBU1Mg
dGVzdCgiLXdlYmtpdC1mbG93LWludG86IG5vbmUiKSBpcyAibm9uZSIKLVBBU1MgdGVzdCgiLXdl
YmtpdC1mbG93LWludG86IGZpcnN0LWZsb3ciKSBpcyAiZmlyc3QtZmxvdyIKLVBBU1MgdGVzdCgi
LXdlYmtpdC1mbG93LWludG86ICdmaXJzdCBmbG93JyIpIGlzICIiCi1QQVNTIHRlc3QoIi13ZWJr
aXQtZmxvdy1pbnRvOiA7IikgaXMgIiIKLVBBU1MgdGVzdCgiLXdlYmtpdC1mbG93LWludG86IDEi
KSBpcyAiIgotUEFTUyB0ZXN0KCItd2Via2l0LWZsb3ctaW50bzogMS4yIikgaXMgIiIKLVBBU1Mg
dGVzdCgiLXdlYmtpdC1mbG93LWludG86IC0xIikgaXMgIiIKLVBBU1MgdGVzdCgiLXdlYmtpdC1m
bG93LWludG86IDEycHgiKSBpcyAiIgotUEFTUyB0ZXN0Q29tcHV0ZWRTdHlsZSgibm9uZSIpIGlz
ICJub25lIgotUEFTUyB0ZXN0Q29tcHV0ZWRTdHlsZSgiIikgaXMgIm5vbmUiCi1QQVNTIHRlc3RD
b21wdXRlZFN0eWxlKCInZmlyc3QtZmxvdyciKSBpcyAibm9uZSIKLVBBU1MgdGVzdENvbXB1dGVk
U3R5bGUoImZpcnN0LWZsb3ciKSBpcyAiZmlyc3QtZmxvdyIKLVBBU1MgdGVzdENvbXB1dGVkU3R5
bGUoIjEycHgiKSBpcyAibm9uZSIKLVBBU1MgdGVzdE5vdEluaGVyaXRlZCgibm9uZSIsICJub25l
IikgaXMgIm5vbmUiCi1QQVNTIHRlc3ROb3RJbmhlcml0ZWQoIm5vbmUiLCAiY2hpbGQtZmxvdyIp
IGlzICJjaGlsZC1mbG93IgotUEFTUyB0ZXN0Tm90SW5oZXJpdGVkKCJwYXJlbnQtZmxvdyIsICJu
b25lIikgaXMgIm5vbmUiCi1QQVNTIHRlc3ROb3RJbmhlcml0ZWQoInBhcmVudC1mbG93IiwgImNo
aWxkLWZsb3ciKSBpcyAiY2hpbGQtZmxvdyIKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKLQotVEVTVCBDT01QTEVURQotCitSZXN1bHQJVGVzdCBOYW1lCU1lc3NhZ2UKK1Bhc3MJdGVz
dFBhcnNlOiBBc3NpZ25lZCBub25lIHRvIHByb3BlcnR5LCBleHBlY3RlZCByZXR1cm4gPSBub25l
CQorUGFzcwl0ZXN0UGFyc2U6IEFzc2lnbmVkIGZpcnN0LWZsb3cgdG8gcHJvcGVydHksIGV4cGVj
dGVkIHJldHVybiA9IGZpcnN0LWZsb3cJCitQYXNzCXRlc3RQYXJzZTogQXNzaWduZWQgJ2ZpcnN0
LWZsb3cnIHRvIHByb3BlcnR5LCBleHBlY3RlZCByZXR1cm4gPSAnJwkKK1Bhc3MJdGVzdFBhcnNl
OiBBc3NpZ25lZCA7IHRvIHByb3BlcnR5LCBleHBlY3RlZCByZXR1cm4gPSAnJwkKK1Bhc3MJdGVz
dFBhcnNlOiBBc3NpZ25lZCAxIHRvIHByb3BlcnR5LCBleHBlY3RlZCByZXR1cm4gPSAnJwkKK1Bh
c3MJdGVzdFBhcnNlOiBBc3NpZ25lZCAxLjIgdG8gcHJvcGVydHksIGV4cGVjdGVkIHJldHVybiA9
ICcnCQorUGFzcwl0ZXN0UGFyc2U6IEFzc2lnbmVkIC0xIHRvIHByb3BlcnR5LCBleHBlY3RlZCBy
ZXR1cm4gPSAnJwkKK1Bhc3MJdGVzdFBhcnNlOiBBc3NpZ25lZCAxMnB4IHRvIHByb3BlcnR5LCBl
eHBlY3RlZCByZXR1cm4gPSAnJwkKK1Bhc3MJdGVzdENvbXB1dGVkU3R5bGU6IEFzc2lnbmVkIG5v
bmUgdG8gcHJvcGVydHksIGV4cGVjdGVkIHJldHVybiA9IG5vbmUJCitQYXNzCXRlc3RDb21wdXRl
ZFN0eWxlOiBBc3NpZ25lZCBcIlwiIHRvIHByb3BlcnR5LCBleHBlY3RlZCByZXR1cm4gPSBub25l
CQorUGFzcwl0ZXN0Q29tcHV0ZWRTdHlsZTogQXNzaWduZWQgJ2ZpcnN0LWZsb3cnIHRvIHByb3Bl
cnR5LCBleHBlY3RlZCByZXR1cm4gPSBub25lCQorUGFzcwl0ZXN0Q29tcHV0ZWRTdHlsZTogQXNz
aWduZWQgZmlyc3QtZmxvdyB0byBwcm9wZXJ0eSwgZXhwZWN0ZWQgcmV0dXJuID0gZmlyc3QtZmxv
dwkKK1Bhc3MJdGVzdENvbXB1dGVkU3R5bGU6IEFzc2lnbmVkIDEycHggdG8gcHJvcGVydHksIGV4
cGVjdGVkIHJldHVybiA9IG5vbmUJCitQYXNzCXRlc3ROb3RJbmhlcml0ZWQ6IEFzc2lnbmVkIG5v
bmUsIG5vbmUgdG8gcHJvcGVydHksIGV4cGVjdGVkIHJldHVybiA9IG5vbmUJCitQYXNzCXRlc3RO
b3RJbmhlcml0ZWQ6IEFzc2lnbmVkIG5vbmUsIGNoaWxkLWZsb3cgdG8gcHJvcGVydHksIGV4cGVj
dGVkIHJldHVybiA9IGNoaWxkLWZsb3cJCitQYXNzCXRlc3ROb3RJbmhlcml0ZWQ6IEFzc2lnbmVk
IHBhcmVudC1mbG93LCBub25lIHRvIHByb3BlcnR5LCBleHBlY3RlZCByZXR1cm4gPSBub25lCQor
UGFzcwl0ZXN0Tm90SW5oZXJpdGVkOiBBc3NpZ25lZCBwYXJlbnQtZmxvdywgY2hpbGQtZmxvdyB0
byBwcm9wZXJ0eSwgZXhwZWN0ZWQgcmV0dXJuID0gY2hpbGQtZmxvdwkKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvcmVnaW9ucy93ZWJraXQtZmxvdy1wYXJzaW5nLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L3JlZ2lvbnMvd2Via2l0LWZsb3ctcGFyc2luZy5odG1sCmluZGV4IDEyMTEyZDQu
LmE2OTE5NjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy93ZWJraXQtZmxv
dy1wYXJzaW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9yZWdpb25zL3dlYmtpdC1mbG93
LXBhcnNpbmcuaHRtbApAQCAtMSwxMCArMSwxNyBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08
Ym9keT4KLTxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvd2Via2l0LWZsb3ctcGFyc2luZy5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KKzwhRE9DVFlQRSBodG1sPg0KKzxo
dG1sPg0KKyAgICA8aGVhZD4NCisgICAgICAgIDx0aXRsZT5DU1MgUmVnaW9ucyBQYXJzaW5nIFRl
c3Q6IFBhcnNlIHdlYmtpdC1mbG93LWludG8gcHJvcGVydHk8L3RpdGxlPg0KKyAgICAgICAgPGxp
bmsgcmVsPSJhdXRob3IiIHRpdGxlPSJKYWNvYiBHb2xkc3RlaW4iIGhyZWY9Im1haWx0bzpqYWNv
YmdAYWRvYmUuY29tIi8+DQorICAgICAgICA8bGluayByZWw9ImhlbHAiIGhyZWY9Imh0dHA6Ly93
d3cudzMub3JnL1RSL2NzczMtcmVnaW9ucy8jcHJvcGVydGllcy1hbmQtcnVsZXMiLz4NCisgICAg
ICAgIDxtZXRhIG5hbWU9ImZsYWdzIiBjb250ZW50PSIiLz4NCisgICAgICAgIDxtZXRhIG5hbWU9
ImFzc2VydCIgY29udGVudD0iVmFsdWUgc3BlY2lmaWVkIGZvciB0aGUgd2Via2l0LWZsb3ctaW50
byBwcm9wZXJ0eSBzaG91bGQgYmUgcGFyc2VkIGNvcnJlY3RseS4iLz4NCisgICAgICAgIDxzY3Jp
cHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PiANCisgICAg
ICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwv
c2NyaXB0PiAgICAgICANCisgICAgPC9oZWFkPg0KKyAgICA8Ym9keT4NCisgICAgICAgIDxzcGFu
PlRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHRoZSB3ZWJraXQtZmxvdy1pbnRvIHByb3BlcnR5IGlz
IGNvcnJlY3RseSBwYXJzZWQ8L3NwYW4+DQorICAgICAgICA8ZGl2IGlkPSJsb2ciPjwvZGl2Pg0K
KyAgICA8L2JvZHk+DQorICAgIDxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvd2Via2l0LWZsb3ct
cGFyc2luZy5qcyI+PC9zY3JpcHQ+DQorPC9odG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132376</attachid>
            <date>2012-03-16 14:17:10 -0700</date>
            <delta_ts>2012-03-20 10:56:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>80709.patch</filename>
            <type>text/plain</type>
            <size>75121</size>
            <attacher name="Jacob Goldstein">jacobg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlNjIxY2MxNi4uNDhjMDdhNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAz
LTE2ICBKYWNvYiBHb2xkc3RlaW4gIDxqYWNvYmdAYWRvYmUuY29tPgorCisgICAgICAgIENvbnZl
cnQgcmVnaW9ucyBwYXJzaW5nIHRlc3QgdG8gdXNlIHRlc3RoYXJuZXNzLmpzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDcwOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9yZWdpb25zL3Njcmlw
dC10ZXN0cy93ZWJraXQtZmxvdy1wYXJzaW5nLmpzOgorICAgICAgICAodGVzdFBhcnNlKToKKyAg
ICAgICAgKHRlc3RDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKHRlc3ROb3RJbmhlcml0ZWQpOgor
ICAgICAgICAodGVzdCk6CisgICAgICAgICogZmFzdC9yZWdpb25zL3dlYmtpdC1mbG93LXBhcnNp
bmctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvcmVnaW9ucy93ZWJraXQtZmxvdy1wYXJz
aW5nLmh0bWw6CisgICAgICAgICogcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzOiBBZGRlZC4KKyAg
ICAgICAgKC4pOgorICAgICAgICAqIHJlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qczogQWRk
ZWQuCisgICAgICAgIChjb252ZXJ0UmVzdWx0KToKKwogMjAxMi0wMy0xNSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIENs
aXBib2FyZENocm9taXVtIGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdC9EYXRhVHJhbnNmZXJJdGVt
IHRvIHN1cHBvcnQgSFRNTCBzcGVjCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3JlZ2lv
bnMvc2NyaXB0LXRlc3RzL3dlYmtpdC1mbG93LXBhcnNpbmcuanMgYi9MYXlvdXRUZXN0cy9mYXN0
L3JlZ2lvbnMvc2NyaXB0LXRlc3RzL3dlYmtpdC1mbG93LXBhcnNpbmcuanMKaW5kZXggMTFhYTNi
NC4uY2QzZjYwNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9yZWdpb25zL3NjcmlwdC10
ZXN0cy93ZWJraXQtZmxvdy1wYXJzaW5nLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9u
cy9zY3JpcHQtdGVzdHMvd2Via2l0LWZsb3ctcGFyc2luZy5qcwpAQCAtMSw1MyArMSw1MSBAQAot
ZGVzY3JpcHRpb24oJ1Rlc3QgcGFyc2luZyBvZiB0aGUgQ1NTIHdlYmtpdC1mbG93LWludG8gcHJv
cGVydHkuJyk7Ci0KLWZ1bmN0aW9uIHRlc3QoZGVjbGFyYXRpb24pIHsKLSAgICB2YXIgZGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgZGl2LnNldEF0dHJpYnV0ZSgic3R5
bGUiLCBkZWNsYXJhdGlvbik7Ci0gICAgcmV0dXJuIGRpdi5zdHlsZS53ZWJraXRGbG93SW50bzsK
LX0KLQotZnVuY3Rpb24gdGVzdENvbXB1dGVkU3R5bGUodmFsdWUpIHsKLSAgICB2YXIgZGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChkaXYpOwotICAgIGRpdi5zdHlsZS5zZXRQcm9wZXJ0eSgiLXdlYmtpdC1mbG93LWludG8i
LCB2YWx1ZSk7Ci0gICAgdmFyIHdlYmtpdEZsb3dDb21wdXRlZFZhbHVlID0gZ2V0Q29tcHV0ZWRT
dHlsZShkaXYpLmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtZmxvdy1pbnRvIik7Ci0gICAgZG9j
dW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOwotICAgIHJldHVybiB3ZWJraXRGbG93Q29tcHV0
ZWRWYWx1ZTsKLX0KLQotZnVuY3Rpb24gdGVzdE5vdEluaGVyaXRlZChwYXJlbnRWYWx1ZSwgY2hp
bGRWYWx1ZSkgewotICAgIHZhciBwYXJlbnREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKLSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhcmVudERpdik7Ci0gICAgcGFy
ZW50RGl2LnN0eWxlLnNldFByb3BlcnR5KCItd2Via2l0LWZsb3ctaW50byIsIHBhcmVudFZhbHVl
KTsKLQotICAgIHZhciBjaGlsZERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwot
ICAgIHBhcmVudERpdi5hcHBlbmRDaGlsZChjaGlsZERpdik7Ci0gICAgY2hpbGREaXYuc3R5bGUu
c2V0UHJvcGVydHkoIi13ZWJraXQtZmxvdy1pbnRvIiwgY2hpbGRWYWx1ZSk7Ci0KLSAgICB2YXIg
Y2hpbGRXZWJLaXRGbG93Q29tcHV0ZWRWYWx1ZSA9IGdldENvbXB1dGVkU3R5bGUoY2hpbGREaXYp
LmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtZmxvdy1pbnRvIik7Ci0KLSAgICBwYXJlbnREaXYu
cmVtb3ZlQ2hpbGQoY2hpbGREaXYpOwotICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocGFy
ZW50RGl2KTsKLQotICAgIHJldHVybiBjaGlsZFdlYktpdEZsb3dDb21wdXRlZFZhbHVlOwotfQot
Ci1zaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3QoIi13ZWJraXQtZmxvdy1pbnRvOiBub25lIikn
LCAibm9uZSIpOwotc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0ZXN0KCItd2Via2l0LWZsb3ctaW50
bzogZmlyc3QtZmxvdyIpJywgImZpcnN0LWZsb3ciKTsKLXNob3VsZEJlRXF1YWxUb1N0cmluZygn
dGVzdCgiLXdlYmtpdC1mbG93LWludG86IFwnZmlyc3QgZmxvd1wnIiknLCAiIik7Ci1zaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ3Rlc3QoIi13ZWJraXQtZmxvdy1pbnRvOiA7IiknLCAiIik7Ci1zaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3QoIi13ZWJraXQtZmxvdy1pbnRvOiAxIiknLCAiIik7Ci1z
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3QoIi13ZWJraXQtZmxvdy1pbnRvOiAxLjIiKScsICIi
KTsKLXNob3VsZEJlRXF1YWxUb1N0cmluZygndGVzdCgiLXdlYmtpdC1mbG93LWludG86IC0xIikn
LCAiIik7Ci1zaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3QoIi13ZWJraXQtZmxvdy1pbnRvOiAx
MnB4IiknLCAiIik7Ci0KLXNob3VsZEJlRXF1YWxUb1N0cmluZygndGVzdENvbXB1dGVkU3R5bGUo
Im5vbmUiKScsICJub25lIik7Ci1zaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3RDb21wdXRlZFN0
eWxlKCIiKScsICJub25lIik7Ci1zaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3RDb21wdXRlZFN0
eWxlKCJcJ2ZpcnN0LWZsb3dcJyIpJywgIm5vbmUiKTsKLXNob3VsZEJlRXF1YWxUb1N0cmluZygn
dGVzdENvbXB1dGVkU3R5bGUoImZpcnN0LWZsb3ciKScsICJmaXJzdC1mbG93Iik7Ci1zaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ3Rlc3RDb21wdXRlZFN0eWxlKCIxMnB4IiknLCAibm9uZSIpOwotCi1z
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rlc3ROb3RJbmhlcml0ZWQoIm5vbmUiLCAibm9uZSIpJywg
Im5vbmUiKTsKLXNob3VsZEJlRXF1YWxUb1N0cmluZygndGVzdE5vdEluaGVyaXRlZCgibm9uZSIs
ICJjaGlsZC1mbG93IiknLCAiY2hpbGQtZmxvdyIpOwotc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd0
ZXN0Tm90SW5oZXJpdGVkKCJwYXJlbnQtZmxvdyIsICJub25lIiknLCAibm9uZSIpOwotc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCd0ZXN0Tm90SW5oZXJpdGVkKCJwYXJlbnQtZmxvdyIsICJjaGlsZC1m
bG93IiknLCAiY2hpbGQtZmxvdyIpOworZnVuY3Rpb24gdGVzdFBhcnNlKGRlY2xhcmF0aW9uKSB7
DQorICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsNCisgICAgZGl2
LnNldEF0dHJpYnV0ZSgic3R5bGUiLCBkZWNsYXJhdGlvbik7DQorICAgIHJldHVybiBkaXYuc3R5
bGUud2Via2l0Rmxvd0ludG87DQorfQ0KKw0KK2Z1bmN0aW9uIHRlc3RDb21wdXRlZFN0eWxlKHZh
bHVlKSB7DQorICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsNCisg
ICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOw0KKyAgICBkaXYuc3R5bGUuc2V0UHJv
cGVydHkoIi13ZWJraXQtZmxvdy1pbnRvIiwgdmFsdWUpOw0KKyAgICB2YXIgd2Via2l0Rmxvd0Nv
bXB1dGVkVmFsdWUgPSBnZXRDb21wdXRlZFN0eWxlKGRpdikuZ2V0UHJvcGVydHlWYWx1ZSgiLXdl
YmtpdC1mbG93LWludG8iKTsNCisgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOw0K
KyAgICByZXR1cm4gd2Via2l0Rmxvd0NvbXB1dGVkVmFsdWU7DQorfQ0KKw0KK2Z1bmN0aW9uIHRl
c3ROb3RJbmhlcml0ZWQocGFyZW50VmFsdWUsIGNoaWxkVmFsdWUpIHsNCisgICAgdmFyIHBhcmVu
dERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOw0KKyAgICBkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKHBhcmVudERpdik7DQorICAgIHBhcmVudERpdi5zdHlsZS5zZXRQcm9wZXJ0
eSgiLXdlYmtpdC1mbG93LWludG8iLCBwYXJlbnRWYWx1ZSk7DQorDQorICAgIHZhciBjaGlsZERp
diA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOw0KKyAgICBwYXJlbnREaXYuYXBwZW5k
Q2hpbGQoY2hpbGREaXYpOw0KKyAgICBjaGlsZERpdi5zdHlsZS5zZXRQcm9wZXJ0eSgiLXdlYmtp
dC1mbG93LWludG8iLCBjaGlsZFZhbHVlKTsNCisNCisgICAgdmFyIGNoaWxkV2ViS2l0Rmxvd0Nv
bXB1dGVkVmFsdWUgPSBnZXRDb21wdXRlZFN0eWxlKGNoaWxkRGl2KS5nZXRQcm9wZXJ0eVZhbHVl
KCItd2Via2l0LWZsb3ctaW50byIpOw0KKw0KKyAgICBwYXJlbnREaXYucmVtb3ZlQ2hpbGQoY2hp
bGREaXYpOw0KKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHBhcmVudERpdik7DQorDQor
ICAgIHJldHVybiBjaGlsZFdlYktpdEZsb3dDb21wdXRlZFZhbHVlOw0KK30NCisNCit0ZXN0KGZ1
bmN0aW9uKCkge2Fzc2VydF9lcXVhbHModGVzdFBhcnNlKCItd2Via2l0LWZsb3ctaW50bzogbm9u
ZSIpLCAibm9uZSIpfSwgIlRlc3QgUGFyc2Ugbm9uZSIpOyANCit0ZXN0KGZ1bmN0aW9uKCkge2Fz
c2VydF9lcXVhbHModGVzdFBhcnNlKCItd2Via2l0LWZsb3ctaW50bzogZmlyc3QtZmxvdyIpLCAi
Zmlyc3QtZmxvdyIpfSwgIlRlc3QgUGFyc2UgZmlyc3QtZmxvdyIpOw0KK3Rlc3QoZnVuY3Rpb24o
KSB7YXNzZXJ0X2VxdWFscyh0ZXN0UGFyc2UoIi13ZWJraXQtZmxvdy1pbnRvOiBcJ2ZpcnN0IGZs
b3dcJyIpLCAiIil9LCAiVGVzdCBQYXJzZSAnZmlyc3QtZmxvdyciKTsNCit0ZXN0KGZ1bmN0aW9u
KCkge2Fzc2VydF9lcXVhbHModGVzdFBhcnNlKCItd2Via2l0LWZsb3ctaW50bzogOyIpLCAiIil9
LCAiVGVzdCBQYXJzZSA7Iik7DQordGVzdChmdW5jdGlvbigpIHthc3NlcnRfZXF1YWxzKHRlc3RQ
YXJzZSgiLXdlYmtpdC1mbG93LWludG86IDEiKSwgIiIpfSwgIlRlc3QgUGFyc2UgMSIpOw0KK3Rl
c3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscyh0ZXN0UGFyc2UoIi13ZWJraXQtZmxvdy1pbnRv
OiAxLjIiKSwgIiIpfSwgIlRlc3QgUGFyc2UgMS4yIik7DQordGVzdChmdW5jdGlvbigpIHthc3Nl
cnRfZXF1YWxzKHRlc3RQYXJzZSgiLXdlYmtpdC1mbG93LWludG86IC0xIiksICIiKX0sICJUZXN0
IFBhcnNlIC0xIik7DQordGVzdChmdW5jdGlvbigpIHthc3NlcnRfZXF1YWxzKHRlc3RQYXJzZSgi
LXdlYmtpdC1mbG93LWludG86IDEycHgiKSwgIiIpfSwgIlRlc3QgUGFyc2UgMTJweCIpOw0KKw0K
K3Rlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscyh0ZXN0Q29tcHV0ZWRTdHlsZSgibm9uZSIp
LCAibm9uZSIpfSwgIlRlc3QgQ29tcHV0ZWQgU3R5bGUgbm9uZSIpOw0KK3Rlc3QoZnVuY3Rpb24o
KSB7YXNzZXJ0X2VxdWFscyh0ZXN0Q29tcHV0ZWRTdHlsZSgiIiksICJub25lIil9LCAiVGVzdCBD
b21wdXRlZCBTdHlsZSAnJyIpOw0KK3Rlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscyh0ZXN0
Q29tcHV0ZWRTdHlsZSgiXCdmaXJzdC1mbG93XCciKSwgIm5vbmUiKX0sICJUZXN0IENvbXB1dGVk
IFN0eWxlICdmaXJzdC1mbG93JyIpOw0KK3Rlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscyh0
ZXN0Q29tcHV0ZWRTdHlsZSgiZmlyc3QtZmxvdyIpLCAiZmlyc3QtZmxvdyIpfSwgIlRlc3QgQ29t
cHV0ZWQgU3R5bGUgZmlyc3QtZmxvdyIpOw0KK3Rlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFs
cyh0ZXN0Q29tcHV0ZWRTdHlsZSgiMTJweCIpLCAibm9uZSIpfSwgIlRlc3QgQ29tcHV0ZWQgU3R5
bGUgMTJweCAiKTsNCisNCit0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF9lcXVhbHModGVzdE5vdElu
aGVyaXRlZCgibm9uZSIsICJub25lIiksICJub25lIil9LCAiVGVzdCBOb24tSW5oZXJpdGVkIG5v
bmUsIG5vbmUiKTsNCit0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF9lcXVhbHModGVzdE5vdEluaGVy
aXRlZCgibm9uZSIsICJjaGlsZC1mbG93IiksICJjaGlsZC1mbG93Iil9LCAiVGVzdCBOb24tSW5o
ZXJpdGVkIG5vbmUsIGNoaWxkLWZsb3ciKTsNCit0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF9lcXVh
bHModGVzdE5vdEluaGVyaXRlZCgicGFyZW50LWZsb3ciLCAibm9uZSIpLCAibm9uZSIpfSwgIlRl
c3QgTm9uLUluaGVyaXRlZCBwYXJlbnQtZmxvdywgbm9uZSIpOw0KK3Rlc3QoZnVuY3Rpb24oKSB7
YXNzZXJ0X2VxdWFscyh0ZXN0Tm90SW5oZXJpdGVkKCJwYXJlbnQtZmxvdyIsICJjaGlsZC1mbG93
IiksICJjaGlsZC1mbG93Iil9LCAiVGVzdCBOb24tSW5oZXJpdGVkIHBhcmVudC1mbG93LCBjaGls
ZC1mbG93Iik7DQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9yZWdpb25zL3dlYmtpdC1m
bG93LXBhcnNpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9yZWdpb25zL3dlYmtp
dC1mbG93LXBhcnNpbmctZXhwZWN0ZWQudHh0CmluZGV4IDZlYmRiYjMuLjQzMDNjZTUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy93ZWJraXQtZmxvdy1wYXJzaW5nLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3JlZ2lvbnMvd2Via2l0LWZsb3ctcGFyc2lu
Zy1leHBlY3RlZC50eHQKQEAgLTEsMjYgKzEsMjAgQEAKLVRlc3QgcGFyc2luZyBvZiB0aGUgQ1NT
IHdlYmtpdC1mbG93LWludG8gcHJvcGVydHkuCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCB0aGUg
d2Via2l0LWZsb3ctaW50byBwcm9wZXJ0eSBpcyBjb3JyZWN0bHkgcGFyc2VkCiAKLU9uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KLQotCi1QQVNTIHRlc3QoIi13ZWJraXQtZmxvdy1pbnRvOiBub25l
IikgaXMgIm5vbmUiCi1QQVNTIHRlc3QoIi13ZWJraXQtZmxvdy1pbnRvOiBmaXJzdC1mbG93Iikg
aXMgImZpcnN0LWZsb3ciCi1QQVNTIHRlc3QoIi13ZWJraXQtZmxvdy1pbnRvOiAnZmlyc3QgZmxv
dyciKSBpcyAiIgotUEFTUyB0ZXN0KCItd2Via2l0LWZsb3ctaW50bzogOyIpIGlzICIiCi1QQVNT
IHRlc3QoIi13ZWJraXQtZmxvdy1pbnRvOiAxIikgaXMgIiIKLVBBU1MgdGVzdCgiLXdlYmtpdC1m
bG93LWludG86IDEuMiIpIGlzICIiCi1QQVNTIHRlc3QoIi13ZWJraXQtZmxvdy1pbnRvOiAtMSIp
IGlzICIiCi1QQVNTIHRlc3QoIi13ZWJraXQtZmxvdy1pbnRvOiAxMnB4IikgaXMgIiIKLVBBU1Mg
dGVzdENvbXB1dGVkU3R5bGUoIm5vbmUiKSBpcyAibm9uZSIKLVBBU1MgdGVzdENvbXB1dGVkU3R5
bGUoIiIpIGlzICJub25lIgotUEFTUyB0ZXN0Q29tcHV0ZWRTdHlsZSgiJ2ZpcnN0LWZsb3cnIikg
aXMgIm5vbmUiCi1QQVNTIHRlc3RDb21wdXRlZFN0eWxlKCJmaXJzdC1mbG93IikgaXMgImZpcnN0
LWZsb3ciCi1QQVNTIHRlc3RDb21wdXRlZFN0eWxlKCIxMnB4IikgaXMgIm5vbmUiCi1QQVNTIHRl
c3ROb3RJbmhlcml0ZWQoIm5vbmUiLCAibm9uZSIpIGlzICJub25lIgotUEFTUyB0ZXN0Tm90SW5o
ZXJpdGVkKCJub25lIiwgImNoaWxkLWZsb3ciKSBpcyAiY2hpbGQtZmxvdyIKLVBBU1MgdGVzdE5v
dEluaGVyaXRlZCgicGFyZW50LWZsb3ciLCAibm9uZSIpIGlzICJub25lIgotUEFTUyB0ZXN0Tm90
SW5oZXJpdGVkKCJwYXJlbnQtZmxvdyIsICJjaGlsZC1mbG93IikgaXMgImNoaWxkLWZsb3ciCi1Q
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKK1BBU1MgVGVz
dCBQYXJzZSBub25lIAorUEFTUyBUZXN0IFBhcnNlIGZpcnN0LWZsb3cgCitQQVNTIFRlc3QgUGFy
c2UgJ2ZpcnN0LWZsb3cnIAorUEFTUyBUZXN0IFBhcnNlIDsgCitQQVNTIFRlc3QgUGFyc2UgMSAK
K1BBU1MgVGVzdCBQYXJzZSAxLjIgCitQQVNTIFRlc3QgUGFyc2UgLTEgCitQQVNTIFRlc3QgUGFy
c2UgMTJweCAKK1BBU1MgVGVzdCBDb21wdXRlZCBTdHlsZSBub25lIAorUEFTUyBUZXN0IENvbXB1
dGVkIFN0eWxlICcnIAorUEFTUyBUZXN0IENvbXB1dGVkIFN0eWxlICdmaXJzdC1mbG93JyAKK1BB
U1MgVGVzdCBDb21wdXRlZCBTdHlsZSBmaXJzdC1mbG93IAorUEFTUyBUZXN0IENvbXB1dGVkIFN0
eWxlIDEycHggIAorUEFTUyBUZXN0IE5vbi1Jbmhlcml0ZWQgbm9uZSwgbm9uZSAKK1BBU1MgVGVz
dCBOb24tSW5oZXJpdGVkIG5vbmUsIGNoaWxkLWZsb3cgCitQQVNTIFRlc3QgTm9uLUluaGVyaXRl
ZCBwYXJlbnQtZmxvdywgbm9uZSAKK1BBU1MgVGVzdCBOb24tSW5oZXJpdGVkIHBhcmVudC1mbG93
LCBjaGlsZC1mbG93IAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3JlZ2lvbnMvd2Vi
a2l0LWZsb3ctcGFyc2luZy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9yZWdpb25zL3dlYmtpdC1m
bG93LXBhcnNpbmcuaHRtbAppbmRleCAxMjExMmQ0Li4wMzUzMDk2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L3JlZ2lvbnMvd2Via2l0LWZsb3ctcGFyc2luZy5odG1sCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvcmVnaW9ucy93ZWJraXQtZmxvdy1wYXJzaW5nLmh0bWwKQEAgLTEsMTAgKzEs
MTcgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KLTxo
dG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL3dlYmtpdC1mbG93LXBhcnNpbmcuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+
Ci08L2h0bWw+Cis8IURPQ1RZUEUgaHRtbD4NCis8aHRtbD4NCisgICAgPGhlYWQ+DQorICAgICAg
ICA8dGl0bGU+Q1NTIFJlZ2lvbnMgUGFyc2luZyBUZXN0OiBQYXJzZSB3ZWJraXQtZmxvdy1pbnRv
IHByb3BlcnR5PC90aXRsZT4NCisgICAgICAgIDxsaW5rIHJlbD0iYXV0aG9yIiB0aXRsZT0iSmFj
b2IgR29sZHN0ZWluIiBocmVmPSJtYWlsdG86amFjb2JnQGFkb2JlLmNvbSIvPg0KKyAgICAgICAg
PGxpbmsgcmVsPSJoZWxwIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXJlZ2lvbnMv
I3Byb3BlcnRpZXMtYW5kLXJ1bGVzIi8+DQorICAgICAgICA8bWV0YSBuYW1lPSJmbGFncyIgY29u
dGVudD0iIi8+DQorICAgICAgICA8bWV0YSBuYW1lPSJhc3NlcnQiIGNvbnRlbnQ9IlZhbHVlIHNw
ZWNpZmllZCBmb3IgdGhlIHdlYmtpdC1mbG93LWludG8gcHJvcGVydHkgc2hvdWxkIGJlIHBhcnNl
ZCBjb3JyZWN0bHkuIi8+DQorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4gDQorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4gICAgICAgDQorICAgIDwvaGVh
ZD4NCisgICAgPGJvZHk+DQorICAgICAgICA8c3Bhbj5UaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCB0
aGUgd2Via2l0LWZsb3ctaW50byBwcm9wZXJ0eSBpcyBjb3JyZWN0bHkgcGFyc2VkPC9zcGFuPg0K
KyAgICAgICAgPGRpdiBpZD0ibG9nIj48L2Rpdj4NCisgICAgICAgIDxzY3JpcHQgc3JjPSJzY3Jp
cHQtdGVzdHMvd2Via2l0LWZsb3ctcGFyc2luZy5qcyI+PC9zY3JpcHQ+DQorICAgIDwvYm9keT4N
Cis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIGIvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNzhhNWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMKQEAgLTAsMCArMSwxNzYxIEBACisvKg0KK0Rp
c3RyaWJ1dGVkIHVuZGVyIGJvdGggdGhlIFczQyBUZXN0IFN1aXRlIExpY2Vuc2UgWzFdIGFuZCB0
aGUgVzNDDQorMy1jbGF1c2UgQlNEIExpY2Vuc2UgWzJdLiBUbyBjb250cmlidXRlIHRvIGEgVzND
IFRlc3QgU3VpdGUsIHNlZSB0aGUNCitwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFsz
XS4NCisNCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDA4LzA0LXRl
c3RzdWl0ZS1saWNlbnNlDQorWzJdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwv
MjAwOC8wMy1ic2QtbGljZW5zZQ0KK1szXSBodHRwOi8vd3d3LnczLm9yZy8yMDA0LzEwLzI3LXRl
c3RjYXNlcw0KKyovDQorDQorLyoNCisgKiA9PSBJbnRyb2R1Y3Rpb24gPT0NCisgKg0KKyAqIFRo
aXMgZmlsZSBwcm92aWRlcyBhIGZyYW1ld29yayBmb3Igd3JpdGluZyB0ZXN0Y2FzZXMuIEl0IGlz
IGludGVuZGVkIHRvDQorICogcHJvdmlkZSBhIGNvbnZlbmllbnQgQVBJIGZvciBtYWtpbmcgY29t
bW9uIGFzc2VydGlvbnMsIGFuZCB0byB3b3JrIGJvdGgNCisgKiBmb3IgdGVzdGluZyBzeW5jaHJv
bm91cyBhbmQgYXN5bmNocm9ub3VzIERPTSBmZWF0dXJlcyBpbiBhIHdheSB0aGF0DQorICogcHJv
bW90ZXMgY2xlYXIsIHJvYnVzdCwgdGVzdHMuDQorICoNCisgKiA9PSBCYXNpYyBVc2FnZSA9PQ0K
KyAqDQorICogVG8gdXNlIHRoaXMgZmlsZSwgaW1wb3J0IHRoZSBzY3JpcHQgYW5kIHRoZSB0ZXN0
aGFybmVzc3JlcG9ydCBzY3JpcHQgaW50bw0KKyAqIHRoZSB0ZXN0IGRvY3VtZW50Og0KKyAqIDxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4NCisgKiA8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+DQorICoN
CisgKiBXaXRoaW4gZWFjaCBmaWxlIG9uZSBtYXkgZGVmaW5lIG9uZSBvciBtb3JlIHRlc3RzLiBF
YWNoIHRlc3QgaXMgYXRvbWljDQorICogaW4gdGhlIHNlbnNlIHRoYXQgYSBzaW5nbGUgdGVzdCBo
YXMgYSBzaW5nbGUgcmVzdWx0IChwYXNzL2ZhaWwvdGltZW91dCkuDQorICogV2l0aGluIGVhY2gg
dGVzdCBvbmUgbWF5IGhhdmUgYSBudW1iZXIgb2YgYXNzZXJ0cy4gVGhlIHRlc3QgZmFpbHMgYXQg
dGhlDQorICogZmlyc3QgZmFpbGluZyBhc3NlcnQsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSB0
ZXN0IGlzICh0eXBpY2FsbHkpIG5vdCBydW4uDQorICoNCisgKiBJZiB0aGUgZmlsZSBjb250YWlu
aW5nIHRoZSB0ZXN0cyBpcyBhIEhUTUwgZmlsZSB3aXRoIGFuIGVsZW1lbnQgb2YgaWQgImxvZyIN
CisgKiB0aGlzIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggYSB0YWJsZSBjb250YWluaW5nIHRoZSB0
ZXN0IHJlc3VsdHMgYWZ0ZXIgYWxsDQorICogdGhlIHRlc3RzIGhhdmUgcnVuLg0KKyAqDQorICog
Tk9URTogQnkgZGVmYXVsdCB0ZXN0cyBtdXN0IGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBsb2FkIGV2
ZW50IGZpcmVzLiBGb3Igd2F5cw0KKyAqICAgICAgIHRvIGNyZWF0ZSB0ZXN0cyBhZnRlciB0aGUg
bG9hZCBldmVudCwgc2VlICJEZXRlcm1pbmluZyB3aGVuIGFsbCB0ZXN0cyBhcmUNCisgKiAgICAg
ICBjb21wbGV0ZSIsIGJlbG93DQorICoNCisgKiA9PSBTeW5jaHJvbm91cyBUZXN0cyA9PQ0KKyAq
DQorICogVG8gY3JlYXRlIGEgc3luY2hyb25vdXMgdGVzdCB1c2UgdGhlIHRlc3QoKSBmdW5jdGlv
bjoNCisgKg0KKyAqIHRlc3QodGVzdF9mdW5jdGlvbiwgbmFtZSwgcHJvcGVydGllcykNCisgKg0K
KyAqIHRlc3RfZnVuY3Rpb24gaXMgYSBmdW5jdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBjb2RlIHRv
IHRlc3QuIEZvciBleGFtcGxlIGENCisgKiB0cml2aWFsIHBhc3NpbmcgdGVzdCB3b3VsZCBiZToN
CisgKg0KKyAqIHRlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X3RydWUodHJ1ZSl9LCAiYXNzZXJ0X3Ry
dWUgd2l0aCB0cnVlIikNCisgKg0KKyAqIFRoZSBmdW5jdGlvbiBwYXNzZWQgaW4gaXMgcnVuIGlu
IHRoZSB0ZXN0KCkgY2FsbC4NCisgKg0KKyAqIHByb3BlcnRpZXMgaXMgYW4gb2JqZWN0IHRoYXQg
b3ZlcnJpZGVzIGRlZmF1bHQgdGVzdCBwcm9wZXJ0aWVzLiBUaGUgcmVjb2duaXNlZCBwcm9wZXJ0
aWVzDQorICogYXJlOg0KKyAqICAgIHRpbWVvdXQgLSB0aGUgdGVzdCB0aW1lb3V0IGluIG1zDQor
ICoNCisgKiBlLmcuDQorICogdGVzdCh0ZXN0X2Z1bmN0aW9uLCAiU2FtcGxlIHRlc3QiLCB7dGlt
ZW91dDoxMDAwfSkNCisgKg0KKyAqIHdvdWxkIHJ1biB0ZXN0X2Z1bmN0aW9uIHdpdGggYSB0aW1l
b3V0IG9mIDFzLg0KKyAqDQorICogPT0gQXN5bmNocm9ub3VzIFRlc3RzID09DQorICoNCisgKiBU
ZXN0aW5nIGFzeW5jaHJvbm91cyBmZWF0dXJlcyBpcyBzb21ld2hhdCBtb3JlIGNvbXBsZXggc2lu
Y2UgdGhlIHJlc3VsdCBvZg0KKyAqIGEgdGVzdCBtYXkgZGVwZW5kIG9uIG9uZSBvciBtb3JlIGV2
ZW50cyBvciBvdGhlciBjYWxsYmFja3MuIFRoZSBBUEkgcHJvdmlkZWQNCisgKiBmb3IgdGVzdGlu
ZyB0aGVzZSBmZWF0dXJlcyBpcyBpbmRlbmRlZCB0byBiZSByYXRoZXIgbG93LWxldmVsIGJ1dCBo
b3BlZnVsbHkNCisgKiBhcHBsaWNhYmxlIHRvIG1hbnkgc2l0dWF0aW9ucy4NCisgKg0KKyAqIFRv
IGNyZWF0ZSBhIHRlc3QsIG9uZSBzdGFydHMgYnkgZ2V0dGluZyBhIFRlc3Qgb2JqZWN0IHVzaW5n
IGFzeW5jX3Rlc3Q6DQorICoNCisgKiBhc3luY190ZXN0KG5hbWUsIHByb3BlcnRpZXMpDQorICoN
CisgKiBlLmcuDQorICogdmFyIHQgPSBhc3luY190ZXN0KCJTaW1wbGUgYXN5bmMgdGVzdCIpDQor
ICoNCisgKiBBc3NlcnRpb25zIGNhbiBiZSBhZGRlZCB0byB0aGUgdGVzdCBieSBjYWxsaW5nIHRo
ZSBzdGVwIG1ldGhvZCBvZiB0aGUgdGVzdA0KKyAqIG9iamVjdCB3aXRoIGEgZnVuY3Rpb24gY29u
dGFpbmluZyB0aGUgdGVzdCBhc3NlcnRpb25zOg0KKyAqDQorICogdC5zdGVwKGZ1bmN0aW9uKCkg
e2Fzc2VydF90cnVlKHRydWUpfSk7DQorICoNCisgKiBXaGVuIGFsbCB0aGUgc3RlcHMgYXJlIGNv
bXBsZXRlLCB0aGUgZG9uZSgpIG1ldGhvZCBtdXN0IGJlIGNhbGxlZDoNCisgKg0KKyAqIHQuZG9u
ZSgpOw0KKyAqDQorICogVGhlIHByb3BlcnRpZXMgYXJndW1lbnQgaXMgaWRlbnRpY2FsIHRvIHRo
YXQgZm9yIHRlc3QoKS4NCisgKg0KKyAqIEluIG1hbnkgY2FzZXMgaXQgaXMgY29udmVuaWVudCB0
byBydW4gYSBzdGVwIGluIHJlc3BvbnNlIHRvIGFuIGV2ZW50IG9yIGENCisgKiBjYWxsYmFjay4g
QSBjb252ZW5pZW50IG1ldGhvZCBvZiBkb2luZyB0aGlzIGlzIHRocm91Z2ggdGhlIHN0ZXBfZnVu
YyBtZXRob2QNCisgKiB3aGljaCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQg
cnVucyBhIHRlc3Qgc3RlcC4gRm9yIGV4YW1wbGUNCisgKg0KKyAqIG9iamVjdC5zb21lX2V2ZW50
ID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkge2Fzc2VydF90cnVlKGUuYSl9KTsNCisgKg0KKyAq
ID09IE1ha2luZyBhc3NlcnRpb25zID09DQorICoNCisgKiBGdW5jdGlvbnMgZm9yIG1ha2luZyBh
c3NlcnRpb25zIHN0YXJ0IGFzc2VydF8NCisgKiBUaGUgYmVzdCB3YXkgdG8gZ2V0IGEgbGlzdCBp
cyB0byBsb29rIGluIHRoaXMgZmlsZSBmb3IgZnVuY3Rpb25zIG5hbWVzDQorICogbWF0Y2hpbmcg
dGhhdCBwYXR0ZXJuLiBUaGUgZ2VuZXJhbCBzaWduYXR1cmUgaXMNCisgKg0KKyAqIGFzc2VydF9z
b21ldGhpbmcoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pDQorICoNCisgKiBhbHRob3Vn
aCBub3QgYWxsIGFzc2VydGlvbnMgcHJlY2lzZWx5IG1hdGNoIHRoaXMgcGF0dGVybiBlLmcuIGFz
c2VydF90cnVlDQorICogb25seSB0YWtlcyBhY3R1YWwgYW5kIGRlc2NyaXB0aW9uIGFzIGFyZ3Vt
ZW50cy4NCisgKg0KKyAqIFRoZSBkZXNjcmlwdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCB0byBwcmVz
ZW50IG1vcmUgdXNlZnVsIGVycm9yIG1lc3NhZ2VzIHdoZW4NCisgKiBhIHRlc3QgZmFpbHMNCisg
Kg0KKyAqIE5PVEU6IEFsbCBhc3NlcnRzIG11c3QgYmUgbG9jYXRlZCBpbiBhIHRlc3QoKSBvciBh
IHN0ZXAgb2YgYW4gYXN5bmNfdGVzdCgpLg0KKyAqICAgICAgIGFzc2VydHMgb3V0c2lkZSB0aGVz
ZSBwbGFjZXMgd29uJ3QgYmUgZGV0ZWN0ZWQgY29ycmVjdGx5IGJ5IHRoZSBoYXJuZXNzDQorICog
ICAgICAgYW5kIG1heSBjYXVzZSBhIGZpbGUgdG8gc3RvcCB0ZXN0aW5nLg0KKyAqDQorICogPT0g
U2V0dXAgPT0NCisgKg0KKyAqIFNvbWV0aW1lcyB0ZXN0cyByZXF1aXJlIG5vbi10cml2aWFsIHNl
dHVwIHRoYXQgbWF5IGZhaWwuIEZvciB0aGlzIHB1cnBvc2UNCisgKiB0aGVyZSBpcyBhIHNldHVw
KCkgZnVuY3Rpb24sIHRoYXQgbWF5IGJlIGNhbGxlZCB3aXRoIG9uZSBvciB0d28gYXJndW1lbnRz
Lg0KKyAqIFRoZSB0d28gYXJndW1lbnQgdmVyc2lvbiBpczoNCisgKg0KKyAqIHNldHVwKGZ1bmMs
IHByb3BlcnRpZXMpDQorICoNCisgKiBUaGUgb25lIGFyZ3VtZW50IHZlcnNpb25zIG1heSBvbWl0
IGVpdGhlciBhcmd1bWVudC4NCisgKiBmdW5jIGlzIGEgZnVuY3Rpb24gdG8gYmUgcnVuIHN5bmNo
cm9ub3VzbHkuIHNldHVwKCkgYmVjb21lcyBhIG5vLW9wIG9uY2UNCisgKiBhbnkgdGVzdHMgaGF2
ZSByZXR1cm5lZCByZXN1bHRzLiBQcm9wZXJ0aWVzIGFyZSBnbG9iYWwgcHJvcGVydGllcyBvZiB0
aGUgdGVzdA0KKyAqIGhhcm5lc3MuIEN1cnJlbnRseSByZWNvZ25pc2VkIHByb3BlcnRpZXMgYXJl
Og0KKyAqDQorICogdGltZW91dCAtIFRoZSB0aW1lIGluIG1zIGFmdGVyIHdoaWNoIHRoZSBoYXJu
ZXNzIHNob3VsZCBzdG9wIHdhaXRpbmcgZm9yDQorICogICAgICAgICAgIHRlc3RzIHRvIGNvbXBs
ZXRlICh0aGlzIGlzIGRpZmZlcmVudCB0byB0aGUgcGVyLXRlc3QgdGltZW91dA0KKyAqICAgICAg
ICAgICBiZWNhdXNlIGFzeW5jIHRlc3RzIGRvIG5vdCBzdGFydCB0aGVpciB0aW1lciB1bnRpbCAu
c3RlcCBpcyBjYWxsZWQpDQorICoNCisgKiBleHBsaWNpdF9kb25lIC0gV2FpdCBmb3IgYW4gZXhw
bGljaXQgY2FsbCB0byBkb25lKCkgYmVmb3JlIGRlY2xhcmluZyBhbGwgdGVzdHMNCisgKiAgICAg
ICAgICAgICAgICAgY29tcGxldGUgKHNlZSBiZWxvdykNCisgKg0KKyAqIG91dHB1dF9kb2N1bWVu
dCAtIFRoZSBkb2N1bWVudCB0byB3aGljaCByZXN1bHRzIHNob3VsZCBiZSBsb2dnZWQuIEJ5IGRl
ZmF1bHQgdGhpcyBpcw0KKyAqICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IGRvY3VtZW50
IGJ1dCBjb3VsZCBiZSBhbiBhbmNlc3RvciBkb2N1bWVudCBpbiBzb21lIGNhc2VzDQorICogICAg
ICAgICAgICAgICAgICAgZS5nLiBhIFNWRyB0ZXN0IGxvYWRlZCBpbiBhbiBIVE1MIHdyYXBwZXIN
CisgKg0KKyAqID09IERldGVybWluaW5nIHdoZW4gYWxsIHRlc3RzIGFyZSBjb21wbGV0ZSA9PQ0K
KyAqDQorICogQnkgZGVmYXVsdCB0aGUgdGVzdCBoYXJuZXNzIHdpbGwgYXNzdW1lIHRoZXJlIGFy
ZSBubyBtb3JlIHJlc3VsdHMgdG8gY29tZQ0KKyAqIHdoZW46DQorICogMSkgVGhlcmUgYXJlIG5v
IFRlc3Qgb2JqZWN0cyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkIGJ1dCBub3QgY29tcGxldGVkDQor
ICogMikgVGhlIGxvYWQgZXZlbnQgb24gdGhlIGRvY3VtZW50IGhhcyBmaXJlZA0KKyAqDQorICog
VGhpcyBiZWhhdmlvdXIgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc2V0dGluZyB0aGUgZXhwbGljaXRf
ZG9uZSBwcm9wZXJ0eSB0byB0cnVlDQorICogaW4gYSBjYWxsIHRvIHNldHVwKCkuIElmIGV4cGxp
Y2l0X2RvbmUgaXMgdHJ1ZSwgdGhlIHRlc3QgaGFybmVzcyB3aWxsIG5vdCBhc3N1bWUNCisgKiBp
dCBpcyBkb25lIHVudGlsIHRoZSBnbG9iYWwgZG9uZSgpIGZ1bmN0aW9uIGlzIGNhbGxlZC4gT25j
ZSBkb25lKCkgaXMgY2FsbGVkLCB0aGUNCisgKiB0d28gY29uZGl0aW9ucyBhYm92ZSBhcHBseSBs
aWtlIG5vcm1hbC4NCisgKg0KKyAqID09IEdlbmVyYXRpbmcgdGVzdHMgPT0NCisgKg0KKyAqIE5P
VEU6IHRoaXMgZnVuY3Rpb25hbGl0eSBtYXkgYmUgcmVtb3ZlZA0KKyAqDQorICogVGhlcmUgYXJl
IHNjZW5hcmlvcyBpbiB3aGljaCBpcyBpcyBkZXNpcmFibGUgdG8gY3JlYXRlIGEgbGFyZ2UgbnVt
YmVyIG9mDQorICogKHN5bmNocm9ub3VzKSB0ZXN0cyB0aGF0IGFyZSBpbnRlcm5hbGx5IHNpbWls
YXIgYnV0IHZhcnkgaW4gdGhlIHBhcmFtZXRlcnMNCisgKiB1c2VkLiBUbyBtYWtlIHRoaXMgZWFz
aWVyLCB0aGUgZ2VuZXJhdGVfdGVzdHMgZnVuY3Rpb24gYWxsb3dzIGEgc2luZ2xlDQorICogZnVu
Y3Rpb24gdG8gYmUgY2FsbGVkIHdpdGggZWFjaCBzZXQgb2YgcGFyYW1ldGVycyBpbiBhIGxpc3Q6
DQorICoNCisgKiBnZW5lcmF0ZV90ZXN0cyh0ZXN0X2Z1bmN0aW9uLCBwYXJhbWV0ZXJfbGlzdHMp
DQorICoNCisgKiBGb3IgZXhhbXBsZToNCisgKg0KKyAqIGdlbmVyYXRlX3Rlc3RzKGFzc2VydF9l
cXVhbHMsIFsNCisgKiAgICAgWyJTdW0gb25lIGFuZCBvbmUiLCAxKzEsIDJdLA0KKyAqICAgICBb
IlN1bSBvbmUgYW5kIHplcm8iLCAxKzAsIDFdDQorICogICAgIF0pDQorICoNCisgKiBJcyBlcXVp
dmFsZW50IHRvOg0KKyAqDQorICogdGVzdChmdW5jdGlvbigpIHthc3NlcnRfZXF1YWxzKDErMSwg
Mil9LCAiU3VtIG9uZSBhbmQgb25lIikNCisgKiB0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF9lcXVh
bHMoMSswLCAxKX0sICJTdW0gb25lIGFuZCB6ZXJvIikNCisgKg0KKyAqIE5vdGUgdGhhdCB0aGUg
Zmlyc3QgaXRlbSBpbiBlYWNoIHBhcmFtZXRlciBsaXN0IGNvcnJlc3BvbmRzIHRvIHRoZSBuYW1l
IG9mDQorICogdGhlIHRlc3QuDQorICoNCisgKiA9PSBDYWxsYmFjayBBUEkgPT0NCisgKg0KKyAq
IFRoZSBmcmFtZXdvcmsgcHJvdmlkZXMgY2FsbGJhY2tzIGNvcnJlc3BvbmRpbmcgdG8gMyBldmVu
dHM6DQorICoNCisgKiBzdGFydCAtIGhhcHBlbnMgd2hlbiB0aGUgZmlyc3QgVGVzdCBpcyBjcmVh
dGVkDQorICogcmVzdWx0IC0gaGFwcGVucyB3aGVuIGEgdGVzdCByZXN1bHQgaXMgcmVjaWV2ZWQN
CisgKiBjb21wbGV0ZSAtIGhhcHBlbnMgd2hlbiBhbGwgcmVzdWx0cyBhcmUgcmVjaWV2ZWQNCisg
Kg0KKyAqIFRoZSBwYWdlIGRlZmluaW5nIHRoZSB0ZXN0cyBtYXkgYWRkIGNhbGxiYWNrcyBmb3Ig
dGhlc2UgZXZlbnRzIGJ5IGNhbGxpbmcNCisgKiB0aGUgZm9sbG93aW5nIG1ldGhvZHM6DQorICoN
CisgKiAgIGFkZF9zdGFydF9jYWxsYmFjayhjYWxsYmFjaykgLSBjYWxsYmFjayBjYWxsZWQgd2l0
aCBubyBhcmd1bWVudHMNCisgKiAgIGFkZF9yZXN1bHRfY2FsbGJhY2soY2FsbGJhY2spIC0gY2Fs
bGJhY2sgY2FsbGVkIHdpdGggYSB0ZXN0IGFyZ3VtZW50DQorICogICBhZGRfY29tcGxldGlvbl9j
YWxsYmFjayhjYWxsYmFjaykgLSBjYWxsYmFjayBjYWxsZWQgd2l0aCBhbiBhcnJheSBvZiB0ZXN0
cw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFuIHN0YXR1
cyBvYmplY3QNCisgKg0KKyAqIHRlc3RzIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOg0K
KyAqICAgc3RhdHVzOiBBIHN0YXR1cyBjb2RlLiBUaGlzIGNhbiBiZSBjb21wYXJlZCB0byB0aGUg
UEFTUywgRkFJTCwgVElNRU9VVCBhbmQNCisgKiAgICAgICAgICAgTk9UUlVOIHByb3BlcnRpZXMg
b24gdGhlIHRlc3Qgb2JqZWN0DQorICogICBtZXNzYWdlOiBBIG1lc3NhZ2UgaW5kaWNhdGluZyB0
aGUgcmVhc29uIGZvciBmYWlsdXJlLiBJbiB0aGUgZnV0dXJlIHRoaXMNCisgKiAgICAgICAgICAg
IHdpbGwgYWx3YXlzIGJlIGEgc3RyaW5nDQorICoNCisgKiAgVGhlIHN0YXR1cyBvYmplY3QgZ2l2
ZXMgdGhlIG92ZXJhbGwgc3RhdHVzIG9mIHRoZSBoYXJuZXNzLiBJdCBoYXMgdGhlDQorICogIGZv
bGxvd2luZyBwcm9wZXJ0aWVzOg0KKyAqICAgIHN0YXR1czogQ2FuIGJlIGNvbXBhcmVkIHRvIHRo
ZSBPSywgRVJST1IgYW5kIFRJTUVPVVQgcHJvcGVydGllcw0KKyAqICAgIG1lc3NhZ2U6IEFuIGVy
cm9yIG1lc3NhZ2Ugc2V0IHdoZW4gdGhlIHN0YXR1cyBpcyBFUlJPUg0KKyAqDQorICogPT0gRXh0
ZXJuYWwgQVBJID09DQorICoNCisgKiBJbiBvcmRlciB0byBjb2xsZWN0IHRoZSByZXN1bHRzIG9m
IG11bHRpcGxlIHBhZ2VzIGNvbnRhaW5pbmcgdGVzdHMsIHRoZSB0ZXN0DQorICogaGFybmVzcyB3
aWxsLCB3aGVuIGxvYWRlZCBpbiBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCBhdHRlbXB0IHRv
IGNhbGwNCisgKiBjZXJ0YWluIGZ1bmN0aW9ucyBpbiBlYWNoIGFuY2VzdG9yIGJyb3dzaW5nIGNv
bnRleHQ6DQorICoNCisgKiBzdGFydCAtIHN0YXJ0X2NhbGxiYWNrDQorICogcmVzdWx0IC0gcmVz
dWx0X2NhbGxiYWNrDQorICogY29tcGxldGUgLSBjb21wbGV0aW9uX2NhbGxiYWNrDQorICoNCisg
KiBUaGVzZSBhcmUgZ2l2ZW4gdGhlIHNhbWUgYXJndW1lbnRzIGFzIHRoZSBjb3JyZXNwb25kaW5n
IGludGVybmFsIGNhbGxiYWNrcw0KKyAqIGRlc2NyaWJlZCBhYm92ZS4NCisgKg0KKyAqID09IExp
c3Qgb2YgYXNzZXJ0aW9ucyA9PQ0KKyAqDQorICogYXNzZXJ0X3RydWUoYWN0dWFsLCBkZXNjcmlw
dGlvbikNCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyBzdHJpY3RseSB0cnVlDQorICoN
CisgKiBhc3NlcnRfZmFsc2UoYWN0dWFsLCBkZXNjcmlwdGlvbikNCisgKiAgIGFzc2VydHMgdGhh
dCAvYWN0dWFsLyBpcyBzdHJpY3RseSBmYWxzZQ0KKyAqDQorICogYXNzZXJ0X2VxdWFscyhhY3R1
YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBp
cyB0aGUgc2FtZSB2YWx1ZSBhcyAvZXhwZWN0ZWQvDQorICoNCisgKiBhc3NlcnRfbm90X2VxdWFs
cyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0
dWFsLyBpcyBhIGRpZmZlcmVudCB2YWx1ZSB0byAvZXhwZWN0ZWQvLiBZZXMsIHRoaXMgbWVhbnMN
CisgKiAgIHRoYXQgImV4cGVjdGVkIiBpcyBhIG1pc25vbWVyDQorICoNCisgKiBhc3NlcnRfaW5f
YXJyYXkoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pDQorICogICBhc3NlcnRzIHRoYXQg
L2V4cGVjdGVkLyBpcyBhbiBBcnJheSwgYW5kIC9hY3R1YWwvIGlzIGVxdWFsIHRvIG9uZSBvZiB0
aGUNCisgKiAgIG1lbWJlcnMgLS0gZXhwZWN0ZWQuaW5kZXhPZihhY3R1YWwpICE9IC0xDQorICoN
CisgKiBhc3NlcnRfYXJyYXlfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0K
KyAqICAgYXNzZXJ0cyB0aGF0IC9hY3R1YWwvIGFuZCAvZXhwZWN0ZWQvIGhhdmUgdGhlIHNhbWUg
bGVuZ3RoIGFuZCB0aGUgdmFsdWUgb2YNCisgKiAgIGVhY2ggaW5kZXhlZCBwcm9wZXJ0eSBpbiAv
YWN0dWFsLyBpcyB0aGUgc3RyaWN0bHkgZXF1YWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCisgKiAg
IHByb3BlcnR5IHZhbHVlIGluIC9leHBlY3RlZC8NCisgKg0KKyAqIGFzc2VydF9hcHByb3hfZXF1
YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGVwc2lsb24sIGRlc2NyaXB0aW9uKQ0KKyAqICAgYXNzZXJ0
cyB0aGF0IC9hY3R1YWwvIGlzIGEgbnVtYmVyIHdpdGhpbiArLy0gL2Vwc2lsb24vIG9mIC9leHBl
Y3RlZC8NCisgKg0KKyAqIGFzc2VydF9yZWdleHBfbWF0Y2goYWN0dWFsLCBleHBlY3RlZCwgZGVz
Y3JpcHRpb24pDQorICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gbWF0Y2hlcyB0aGUgcmVnZXhw
IC9leHBlY3RlZC8NCisgKg0KKyAqIGFzc2VydF9vd25fcHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0
eV9uYW1lLCBkZXNjcmlwdGlvbikNCisgKiAgIGFzc2VydCB0aGF0IG9iamVjdCBoYXMgb3duIHBy
b3BlcnR5IHByb3BlcnR5X25hbWUNCisgKg0KKyAqIGFzc2VydF9pbmhlcml0cyhvYmplY3QsIHBy
b3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KKyAqICAgYXNzZXJ0IHRoYXQgb2JqZWN0IGRvZXMg
bm90IGhhdmUgYW4gb3duIHByb3BlcnR5IG5hbWVkIHByb3BlcnR5X25hbWUNCisgKiAgIGJ1dCB0
aGF0IHByb3BlcnR5X25hbWUgaXMgcHJlc2VudCBpbiB0aGUgcHJvdG90eXBlIGNoYWluIGZvciBv
YmplY3QNCisgKg0KKyAqIGFzc2VydF9pZGxfYXR0cmlidXRlKG9iamVjdCwgYXR0cmlidXRlX25h
bWUsIGRlc2NyaXB0aW9uKQ0KKyAqICAgYXNzZXJ0IHRoYXQgYW4gb2JqZWN0IHRoYXQgaXMgYW4g
aW5zdGFuY2Ugb2Ygc29tZSBpbnRlcmZhY2UgaGFzIHRoZQ0KKyAqICAgYXR0cmlidXRlIGF0dHJp
YnV0ZV9uYW1lIGZvbGxvd2luZyB0aGUgY29uZGl0aW9ucyBzcGVjaWZpZWQgYnkgV2ViSURMDQor
ICoNCisgKiBhc3NlcnRfcmVhZG9ubHkob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlv
bikNCisgKiAgIGFzc2VydCB0aGF0IHByb3BlcnR5IHByb3BlcnR5X25hbWUgb24gb2JqZWN0IGlz
IHJlYWRvbmx5DQorICoNCisgKiBhc3NlcnRfdGhyb3dzKGNvZGUsIGZ1bmMsIGRlc2NyaXB0aW9u
KQ0KKyAqICAgY29kZSAtIGEgRE9NRXhjZXB0aW9uL1JhbmdlRXhjZXB0aW9uIGNvZGUgYXMgYSBz
dHJpbmcsIGUuZy4gIkhJRVJBUkNIWV9SRVFVRVNUX0VSUiINCisgKiAgIGZ1bmMgLSBhIGZ1bmN0
aW9uIHRoYXQgc2hvdWxkIHRocm93DQorICoNCisgKiAgIGFzc2VydCB0aGF0IGZ1bmMgdGhyb3dz
IGEgRE9NRXhjZXB0aW9uIG9yIFJhbmdlRXhjZXB0aW9uIChhcyBhcHByb3ByaWF0ZSkNCisgKiAg
IHdpdGggdGhlIGdpdmVuIGNvZGUuICBJZiBhbiBvYmplY3QgaXMgcGFzc2VkIGZvciBjb2RlIGlu
c3RlYWQgb2YgYSBzdHJpbmcsDQorICogICBjaGVja3MgdGhhdCB0aGUgdGhyb3duIGV4Y2VwdGlv
biBoYXMgYSBwcm9wZXJ0eSBjYWxsZWQgIm5hbWUiIHRoYXQgbWF0Y2hlcw0KKyAqICAgdGhlIHBy
b3BlcnR5IG9mIGNvZGUgY2FsbGVkICJuYW1lIi4gIE5vdGUsIHRoaXMgZnVuY3Rpb24gd2lsbCBw
cm9iYWJseSBiZQ0KKyAqICAgcmV3cml0dGVuIHNvbWV0aW1lIHRvIG1ha2UgbW9yZSBzZW5zZS4N
CisgKg0KKyAqIGFzc2VydF91bnJlYWNoZWQoZGVzY3JpcHRpb24pDQorICogICBhc3NlcnRzIGlm
IGNhbGxlZC4gVXNlZCB0byBlbnN1cmUgdGhhdCBzb21lIGNvZGVwYXRoIGlzICpub3QqIHRha2Vu
IGUuZy4NCisgKiAgIGFuIGV2ZW50IGRvZXMgbm90IGZpcmUuDQorICoNCisgKiBhc3NlcnRfZXhp
c3RzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pDQorICogICAqKiogZGVwcmVj
YXRlZCAqKioNCisgKiAgIGFzc2VydHMgdGhhdCBvYmplY3QgaGFzIGFuIG93biBwcm9wZXJ0eSBw
cm9wZXJ0eV9uYW1lDQorICoNCisgKiBhc3NlcnRfbm90X2V4aXN0cyhvYmplY3QsIHByb3BlcnR5
X25hbWUsIGRlc2NyaXB0aW9uKQ0KKyAqICAgKioqIGRlcHJlY2F0ZWQgKioqDQorICogICBhc3Nl
cnQgdGhhdCBvYmplY3QgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgcHJvcGVydHlfbmFtZQ0K
KyAqLw0KKw0KKyhmdW5jdGlvbiAoKQ0KK3sNCisgICAgdmFyIGRlYnVnID0gZmFsc2U7DQorICAg
IC8vIGRlZmF1bHQgdGltZW91dCBpcyA1IHNlY29uZHMsIHRlc3QgY2FuIG92ZXJyaWRlIGlmIG5l
ZWRlZA0KKyAgICB2YXIgc2V0dGluZ3MgPSB7DQorICAgICAgb3V0cHV0OnRydWUsDQorICAgICAg
dGltZW91dDo1MDAwLA0KKyAgICAgIHRlc3RfdGltZW91dDoyMDAwDQorICAgIH07DQorDQorICAg
IHZhciB4aHRtbF9ucyA9ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjsNCisNCisgICAg
Ly8gc2NyaXB0X3ByZWZpeCBpcyB1c2VkIGJ5IE91dHB1dC5wcm90b3R5cGUuc2hvd19yZXN1bHRz
KCkgdG8gZmlndXJlIG91dA0KKyAgICAvLyB3aGVyZSB0byBnZXQgdGVzdGhhcm5lc3MuY3NzIGZy
b20uICBJdCdzIGVuY2xvc2VkIGluIGFuIGV4dHJhIGNsb3N1cmUgdG8NCisgICAgLy8gbm90IHBv
bGx1dGUgdGhlIGxpYnJhcnkncyBuYW1lc3BhY2Ugd2l0aCB2YXJpYWJsZXMgbGlrZSAic3JjIi4N
CisgICAgdmFyIHNjcmlwdF9wcmVmaXggPSBudWxsOw0KKyAgICAoZnVuY3Rpb24gKCkNCisgICAg
ew0KKyAgICAgICAgdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
c2NyaXB0Iik7DQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyBp
KyspDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKHNjcmlwdHNbaV0uc3JjKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgdmFyIHNyYyA9IHNjcmlwdHNbaV0uc3JjOw0KKyAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlIGlmIChzY3JpcHRzW2ldLmhyZWYpDQorICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAvL1NWRyBjYXNlDQorICAgICAgICAgICAgICAg
IHZhciBzcmMgPSBzY3JpcHRzW2ldLmhyZWYuYmFzZVZhbDsNCisgICAgICAgICAgICB9DQorICAg
ICAgICAgICAgaWYgKHNyYyAmJiBzcmMuc2xpY2Uoc3JjLmxlbmd0aCAtICJ0ZXN0aGFybmVzcy5q
cyIubGVuZ3RoKSA9PT0gInRlc3RoYXJuZXNzLmpzIikNCisgICAgICAgICAgICB7DQorICAgICAg
ICAgICAgICAgIHNjcmlwdF9wcmVmaXggPSBzcmMuc2xpY2UoMCwgc3JjLmxlbmd0aCAtICJ0ZXN0
aGFybmVzcy5qcyIubGVuZ3RoKTsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAg
ICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9KSgpOw0KKw0KKyAgICAvKg0KKyAgICAgKiBBUEkgZnVu
Y3Rpb25zDQorICAgICAqLw0KKw0KKyAgICB2YXIgbmFtZV9jb3VudGVyID0gMDsNCisgICAgZnVu
Y3Rpb24gbmV4dF9kZWZhdWx0X25hbWUoKQ0KKyAgICB7DQorICAgICAgICAvL0Rvbid0IHVzZSBk
b2N1bWVudC50aXRsZSB0byB3b3JrIGFyb3VuZCBhbiBPcGVyYSBidWcgaW4gWEhUTUwgZG9jdW1l
bnRzDQorICAgICAgICB2YXIgcHJlZml4ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
InRpdGxlIikubGVuZ3RoID4gMCA/DQorICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0aXRsZSIpWzBdLmZpcnN0Q2hpbGQuZGF0YSA6DQorICAg
ICAgICAgICAgICAgICAgICAgICAgICJVbnRpdGxlZCI7DQorICAgICAgICB2YXIgc3VmZml4ID0g
bmFtZV9jb3VudGVyID4gMCA/ICIgIiArIG5hbWVfY291bnRlciA6ICIiOw0KKyAgICAgICAgbmFt
ZV9jb3VudGVyKys7DQorICAgICAgICByZXR1cm4gcHJlZml4ICsgc3VmZml4Ow0KKyAgICB9DQor
DQorICAgIGZ1bmN0aW9uIHRlc3QoZnVuYywgbmFtZSwgcHJvcGVydGllcykNCisgICAgew0KKyAg
ICAgICAgdmFyIHRlc3RfbmFtZSA9IG5hbWUgPyBuYW1lIDogbmV4dF9kZWZhdWx0X25hbWUoKTsN
CisgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzID8gcHJvcGVydGllcyA6IHt9Ow0KKyAg
ICAgICAgdmFyIHRlc3Rfb2JqID0gbmV3IFRlc3QodGVzdF9uYW1lLCBwcm9wZXJ0aWVzKTsNCisg
ICAgICAgIHRlc3Rfb2JqLnN0ZXAoZnVuYyk7DQorICAgICAgICBpZiAodGVzdF9vYmouc3RhdHVz
ID09PSB0ZXN0X29iai5OT1RSVU4pIHsNCisgICAgICAgICAgICB0ZXN0X29iai5kb25lKCk7DQor
ICAgICAgICB9DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gYXN5bmNfdGVzdChuYW1lLCBwcm9w
ZXJ0aWVzKQ0KKyAgICB7DQorICAgICAgICB2YXIgdGVzdF9uYW1lID0gbmFtZSA/IG5hbWUgOiBu
ZXh0X2RlZmF1bHRfbmFtZSgpOw0KKyAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgPyBw
cm9wZXJ0aWVzIDoge307DQorICAgICAgICB2YXIgdGVzdF9vYmogPSBuZXcgVGVzdCh0ZXN0X25h
bWUsIHByb3BlcnRpZXMpOw0KKyAgICAgICAgcmV0dXJuIHRlc3Rfb2JqOw0KKyAgICB9DQorDQor
ICAgIGZ1bmN0aW9uIHNldHVwKGZ1bmNfb3JfcHJvcGVydGllcywgbWF5YmVfcHJvcGVydGllcykN
CisgICAgew0KKyAgICAgICAgdmFyIGZ1bmMgPSBudWxsOw0KKyAgICAgICAgdmFyIHByb3BlcnRp
ZXMgPSB7fTsNCisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7DQorICAgICAg
ICAgICAgZnVuYyA9IGZ1bmNfb3JfcHJvcGVydGllczsNCisgICAgICAgICAgICBwcm9wZXJ0aWVz
ID0gbWF5YmVfcHJvcGVydGllczsNCisgICAgICAgIH0gZWxzZSBpZiAoZnVuY19vcl9wcm9wZXJ0
aWVzIGluc3RhbmNlb2YgRnVuY3Rpb24pew0KKyAgICAgICAgICAgIGZ1bmMgPSBmdW5jX29yX3By
b3BlcnRpZXM7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSBm
dW5jX29yX3Byb3BlcnRpZXM7DQorICAgICAgICB9DQorICAgICAgICB0ZXN0cy5zZXR1cChmdW5j
LCBwcm9wZXJ0aWVzKTsNCisgICAgICAgIG91dHB1dC5zZXR1cChwcm9wZXJ0aWVzKTsNCisgICAg
fQ0KKw0KKyAgICBmdW5jdGlvbiBkb25lKCkgew0KKyAgICAgICAgdGVzdHMuZW5kX3dhaXQoKTsN
CisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBnZW5lcmF0ZV90ZXN0cyhmdW5jLCBhcmdzKSB7DQor
ICAgICAgICBmb3JFYWNoKGFyZ3MsIGZ1bmN0aW9uKHgpDQorICAgICAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0geFswXTsNCisgICAgICAgICAgICAgICAgICAg
IHRlc3QoZnVuY3Rpb24oKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIHguc2xpY2UoMSkpOw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICB9LCBuYW1lKTsNCisgICAgICAgICAgICAgICAgfSk7DQorICAg
IH0NCisNCisgICAgZnVuY3Rpb24gb25fZXZlbnQob2JqZWN0LCBldmVudCwgY2FsbGJhY2spDQor
ICAgIHsNCisgICAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2ssIGZh
bHNlKTsNCisgICAgfQ0KKw0KKyAgICBleHBvc2UodGVzdCwgJ3Rlc3QnKTsNCisgICAgZXhwb3Nl
KGFzeW5jX3Rlc3QsICdhc3luY190ZXN0Jyk7DQorICAgIGV4cG9zZShnZW5lcmF0ZV90ZXN0cywg
J2dlbmVyYXRlX3Rlc3RzJyk7DQorICAgIGV4cG9zZShzZXR1cCwgJ3NldHVwJyk7DQorICAgIGV4
cG9zZShkb25lLCAnZG9uZScpOw0KKyAgICBleHBvc2Uob25fZXZlbnQsICdvbl9ldmVudCcpOw0K
Kw0KKyAgICAvKg0KKyAgICAgKiBSZXR1cm4gYSBzdHJpbmcgdHJ1bmNhdGVkIHRvIHRoZSBnaXZl
biBsZW5ndGgsIHdpdGggLi4uIGFkZGVkIGF0IHRoZSBlbmQNCisgICAgICogaWYgaXQgd2FzIGxv
bmdlci4NCisgICAgICovDQorICAgIGZ1bmN0aW9uIHRydW5jYXRlKHMsIGxlbikNCisgICAgew0K
KyAgICAgICAgaWYgKHMubGVuZ3RoID4gbGVuKSB7DQorICAgICAgICAgICAgcmV0dXJuIHMuc3Vi
c3RyaW5nKDAsIGxlbiAtIDMpICsgIi4uLiI7DQorICAgICAgICB9DQorICAgICAgICByZXR1cm4g
czsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBmb3JtYXRfc3RyaW5nKHN0cikgew0KKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKSB7DQorICAgICAgICAgICAgdmFyIHJlcGxh
Y2UgPSAiXFwiOw0KKyAgICAgICAgICAgIHN3aXRjaCAoaSkgew0KKyAgICAgICAgICAgIGNhc2Ug
MDogcmVwbGFjZSArPSAiMCI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMTogcmVwbGFjZSAr
PSAieDAxIjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAyOiByZXBsYWNlICs9ICJ4MDIiOyBi
cmVhazsNCisgICAgICAgICAgICBjYXNlIDM6IHJlcGxhY2UgKz0gIngwMyI7IGJyZWFrOw0KKyAg
ICAgICAgICAgIGNhc2UgNDogcmVwbGFjZSArPSAieDA0IjsgYnJlYWs7DQorICAgICAgICAgICAg
Y2FzZSA1OiByZXBsYWNlICs9ICJ4MDUiOyBicmVhazsNCisgICAgICAgICAgICBjYXNlIDY6IHJl
cGxhY2UgKz0gIngwNiI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgNzogcmVwbGFjZSArPSAi
eDA3IjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSA4OiByZXBsYWNlICs9ICJiIjsgYnJlYWs7
DQorICAgICAgICAgICAgY2FzZSA5OiByZXBsYWNlICs9ICJ0IjsgYnJlYWs7DQorICAgICAgICAg
ICAgY2FzZSAxMDogcmVwbGFjZSArPSAibiI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMTE6
IHJlcGxhY2UgKz0gInYiOyBicmVhazsNCisgICAgICAgICAgICBjYXNlIDEyOiByZXBsYWNlICs9
ICJmIjsgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSAxMzogcmVwbGFjZSArPSAiciI7IGJyZWFr
Ow0KKyAgICAgICAgICAgIGNhc2UgMTQ6IHJlcGxhY2UgKz0gIngwZSI7IGJyZWFrOw0KKyAgICAg
ICAgICAgIGNhc2UgMTU6IHJlcGxhY2UgKz0gIngwZiI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNh
c2UgMTY6IHJlcGxhY2UgKz0gIngxMCI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMTc6IHJl
cGxhY2UgKz0gIngxMSI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMTg6IHJlcGxhY2UgKz0g
IngxMiI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMTk6IHJlcGxhY2UgKz0gIngxMyI7IGJy
ZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMjA6IHJlcGxhY2UgKz0gIngxNCI7IGJyZWFrOw0KKyAg
ICAgICAgICAgIGNhc2UgMjE6IHJlcGxhY2UgKz0gIngxNSI7IGJyZWFrOw0KKyAgICAgICAgICAg
IGNhc2UgMjI6IHJlcGxhY2UgKz0gIngxNiI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMjM6
IHJlcGxhY2UgKz0gIngxNyI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMjQ6IHJlcGxhY2Ug
Kz0gIngxOCI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMjU6IHJlcGxhY2UgKz0gIngxOSI7
IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMjY6IHJlcGxhY2UgKz0gIngxYSI7IGJyZWFrOw0K
KyAgICAgICAgICAgIGNhc2UgMjc6IHJlcGxhY2UgKz0gIngxYiI7IGJyZWFrOw0KKyAgICAgICAg
ICAgIGNhc2UgMjg6IHJlcGxhY2UgKz0gIngxYyI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2Ug
Mjk6IHJlcGxhY2UgKz0gIngxZCI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMzA6IHJlcGxh
Y2UgKz0gIngxZSI7IGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMzE6IHJlcGxhY2UgKz0gIngx
ZiI7IGJyZWFrOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFj
ZShSZWdFeHAoU3RyaW5nLmZyb21DaGFyQ29kZShpKSwgImciKSwgcmVwbGFjZSk7DQorICAgICAg
ICB9DQorICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyIvZywgJ1xcIicpDQorICAgIH0NCisN
CisgICAgLyoNCisgICAgICogQ29udmVydCBhIHZhbHVlIHRvIGEgbmljZSwgaHVtYW4tcmVhZGFi
bGUgc3RyaW5nDQorICAgICAqLw0KKyAgICBmdW5jdGlvbiBmb3JtYXRfdmFsdWUodmFsKQ0KKyAg
ICB7DQorICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIHJldHVybiAiWyIgKyB2YWwubWFwKGZvcm1hdF92YWx1ZSkuam9pbigiLCAiKSArICJd
IjsNCisgICAgICAgIH0NCisNCisgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbCkNCisgICAgICAg
IHsNCisgICAgICAgIGNhc2UgInN0cmluZyI6DQorICAgICAgICAgICAgcmV0dXJuICciJyArIGZv
cm1hdF9zdHJpbmcodmFsKSArICciJzsNCisgICAgICAgIGNhc2UgImJvb2xlYW4iOg0KKyAgICAg
ICAgY2FzZSAidW5kZWZpbmVkIjoNCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbCk7DQor
ICAgICAgICBjYXNlICJudW1iZXIiOg0KKyAgICAgICAgICAgIC8vIEluIEphdmFTY3JpcHQsIC0w
ID09PSAwIGFuZCBTdHJpbmcoLTApID09ICIwIiwgc28gd2UgaGF2ZSB0bw0KKyAgICAgICAgICAg
IC8vIHNwZWNpYWwtY2FzZS4NCisgICAgICAgICAgICBpZiAodmFsID09PSAtMCAmJiAxL3ZhbCA9
PT0gLUluZmluaXR5KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuICIt
MCI7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsKTsNCisg
ICAgICAgIGNhc2UgIm9iamVjdCI6DQorICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCkNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiAibnVsbCI7DQorICAgICAgICAg
ICAgfQ0KKw0KKyAgICAgICAgICAgIC8vIFNwZWNpYWwtY2FzZSBOb2RlIG9iamVjdHMsIHNpbmNl
IHRob3NlIGNvbWUgdXAgYSBsb3QgaW4gbXkgdGVzdHMuICBJDQorICAgICAgICAgICAgLy8gaWdu
b3JlIG5hbWVzcGFjZXMuICBJIHVzZSBkdWNrLXR5cGluZyBpbnN0ZWFkIG9mIGluc3RhbmNlb2Ys
IGJlY2F1c2UNCisgICAgICAgICAgICAvLyBpbnN0YW5jZW9mIGRvZXNuJ3Qgd29yayBpZiB0aGUg
bm9kZSBpcyBmcm9tIGFub3RoZXIgd2luZG93IChsaWtlIGFuDQorICAgICAgICAgICAgLy8gaWZy
YW1lJ3MgY29udGVudFdpbmRvdyk6DQorICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcv
QnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTEyMjk1DQorICAgICAgICAgICAgaWYgKCJub2Rl
VHlwZSIgaW4gdmFsDQorICAgICAgICAgICAgJiYgIm5vZGVOYW1lIiBpbiB2YWwNCisgICAgICAg
ICAgICAmJiAibm9kZVZhbHVlIiBpbiB2YWwNCisgICAgICAgICAgICAmJiAiY2hpbGROb2RlcyIg
aW4gdmFsKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc3dpdGNoICh2YWwubm9k
ZVR5cGUpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgY2FzZSBOb2RlLkVM
RU1FTlRfTk9ERToNCisgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSAiPCIgKyB2YWwudGFn
TmFtZS50b0xvd2VyQ2FzZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB2YWwuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykNCisgICAgICAgICAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gIiAiICsgdmFsLmF0dHJpYnV0ZXNbaV0u
bmFtZSArICc9IicgKyB2YWwuYXR0cmlidXRlc1tpXS52YWx1ZSArICciJzsNCisgICAgICAgICAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIHJldCArPSAiPiIgKyB2YWwuaW5uZXJI
VE1MICsgIjwvIiArIHZhbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgKyAiPiI7DQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gIkVsZW1lbnQgbm9kZSAiICsgdHJ1bmNhdGUocmV0LCA2MCk7DQor
ICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6DQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gJ1RleHQgbm9kZSAiJyArIHRydW5jYXRlKHZhbC5kYXRhLCA2MCkgKyAnIic7DQor
ICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6DQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlByb2Nlc3NpbmdJbnN0cnVjdGlvbiBub2RlIHdp
dGggdGFyZ2V0ICIgKyBmb3JtYXRfdmFsdWUodHJ1bmNhdGUodmFsLnRhcmdldCwgNjApKSArICIg
YW5kIGRhdGEgIiArIGZvcm1hdF92YWx1ZSh0cnVuY2F0ZSh2YWwuZGF0YSwgNjApKTsNCisgICAg
ICAgICAgICAgICAgY2FzZSBOb2RlLkNPTU1FTlRfTk9ERToNCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAiQ29tbWVudCBub2RlIDwhLS0iICsgdHJ1bmNhdGUodmFsLmRhdGEsIDYwKSArICIt
LT4iOw0KKyAgICAgICAgICAgICAgICBjYXNlIE5vZGUuRE9DVU1FTlRfTk9ERToNCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAiRG9jdW1lbnQgbm9kZSB3aXRoICIgKyB2YWwuY2hpbGROb2Rl
cy5sZW5ndGggKyAodmFsLmNoaWxkTm9kZXMubGVuZ3RoID09IDEgPyAiIGNoaWxkIiA6ICIgY2hp
bGRyZW4iKTsNCisgICAgICAgICAgICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX1RZUEVfTk9ERToN
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiRG9jdW1lbnRUeXBlIG5vZGUiOw0KKyAgICAg
ICAgICAgICAgICBjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERToNCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiRG9jdW1lbnRGcmFnbWVudCBub2RlIHdpdGggIiArIHZhbC5jaGls
ZE5vZGVzLmxlbmd0aCArICh2YWwuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSA/ICIgY2hpbGQiIDog
IiBjaGlsZHJlbiIpOw0KKyAgICAgICAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJOb2RlIG9iamVjdCBvZiB1bmtub3duIHR5cGUiOw0KKyAgICAgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0
byBkZWZhdWx0DQorICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgIHJldHVybiB0eXBlb2Yg
dmFsICsgJyAiJyArIHRydW5jYXRlKFN0cmluZyh2YWwpLCA2MCkgKyAnIic7DQorICAgICAgICB9
DQorICAgIH0NCisgICAgZXhwb3NlKGZvcm1hdF92YWx1ZSwgImZvcm1hdF92YWx1ZSIpOw0KKw0K
KyAgICAvKg0KKyAgICAgKiBBc3NlcnRpb25zDQorICAgICAqLw0KKw0KKyAgICBmdW5jdGlvbiBh
c3NlcnRfdHJ1ZShhY3R1YWwsIGRlc2NyaXB0aW9uKQ0KKyAgICB7DQorICAgICAgICBhc3NlcnQo
YWN0dWFsID09PSB0cnVlLCAiYXNzZXJ0X3RydWUiLCBkZXNjcmlwdGlvbiwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCB0cnVlIGdvdCAke2FjdHVhbH0iLCB7YWN0
dWFsOmFjdHVhbH0pOw0KKyAgICB9Ow0KKyAgICBleHBvc2UoYXNzZXJ0X3RydWUsICJhc3NlcnRf
dHJ1ZSIpOw0KKw0KKyAgICBmdW5jdGlvbiBhc3NlcnRfZmFsc2UoYWN0dWFsLCBkZXNjcmlwdGlv
bikNCisgICAgew0KKyAgICAgICAgYXNzZXJ0KGFjdHVhbCA9PT0gZmFsc2UsICJhc3NlcnRfZmFs
c2UiLCBkZXNjcmlwdGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhw
ZWN0ZWQgZmFsc2UgZ290ICR7YWN0dWFsfSIsIHthY3R1YWw6YWN0dWFsfSk7DQorICAgIH07DQor
ICAgIGV4cG9zZShhc3NlcnRfZmFsc2UsICJhc3NlcnRfZmFsc2UiKTsNCisNCisgICAgZnVuY3Rp
b24gc2FtZV92YWx1ZSh4LCB5KSB7DQorICAgICAgICBpZiAoeSAhPT0geSkNCisgICAgICAgIHsN
CisgICAgICAgICAgICAvL05hTiBjYXNlDQorICAgICAgICAgICAgcmV0dXJuIHggIT09IHg7DQor
ICAgICAgICB9DQorICAgICAgICBlbHNlIGlmICh4ID09PSAwICYmIHkgPT09IDApIHsNCisgICAg
ICAgICAgICAvL0Rpc3Rpbmd1aXNoICswIGFuZCAtMA0KKyAgICAgICAgICAgIHJldHVybiAxL3gg
PT09IDEveTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAg
ICAgICAvL3R5cGljYWwgY2FzZQ0KKyAgICAgICAgICAgIHJldHVybiB4ID09PSB5Ow0KKyAgICAg
ICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGFzc2VydF9lcXVhbHMoYWN0dWFsLCBleHBl
Y3RlZCwgZGVzY3JpcHRpb24pDQorICAgIHsNCisgICAgICAgICAvKg0KKyAgICAgICAgICAqIFRl
c3QgaWYgdHdvIHByaW1pdGl2ZXMgYXJlIGVxdWFsIG9yIHR3byBvYmplY3RzDQorICAgICAgICAg
ICogYXJlIHRoZSBzYW1lIG9iamVjdA0KKyAgICAgICAgICAqLw0KKyAgICAgICAgYXNzZXJ0KHNh
bWVfdmFsdWUoYWN0dWFsLCBleHBlY3RlZCksICJhc3NlcnRfZXF1YWxzIiwgZGVzY3JpcHRpb24s
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVk
ICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9IiwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWx9
KTsNCisgICAgfTsNCisgICAgZXhwb3NlKGFzc2VydF9lcXVhbHMsICJhc3NlcnRfZXF1YWxzIik7
DQorDQorICAgIGZ1bmN0aW9uIGFzc2VydF9ub3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRl
c2NyaXB0aW9uKQ0KKyAgICB7DQorICAgICAgICAgLyoNCisgICAgICAgICAgKiBUZXN0IGlmIHR3
byBwcmltaXRpdmVzIGFyZSB1bmVxdWFsIG9yIHR3byBvYmplY3RzDQorICAgICAgICAgICogYXJl
IGRpZmZlcmVudCBvYmplY3RzDQorICAgICAgICAgICovDQorICAgICAgICBhc3NlcnQoIXNhbWVf
dmFsdWUoYWN0dWFsLCBleHBlY3RlZCksICJhc3NlcnRfbm90X2VxdWFscyIsIGRlc2NyaXB0aW9u
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ290IGRp
c2FsbG93ZWQgdmFsdWUgJHthY3R1YWx9IiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAge2FjdHVhbDphY3R1YWx9KTsNCisgICAgfTsNCisgICAgZXhwb3Nl
KGFzc2VydF9ub3RfZXF1YWxzLCAiYXNzZXJ0X25vdF9lcXVhbHMiKTsNCisNCisgICAgZnVuY3Rp
b24gYXNzZXJ0X2luX2FycmF5KGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KKyAgICB7
DQorICAgICAgICBhc3NlcnQoZXhwZWN0ZWQuaW5kZXhPZihhY3R1YWwpICE9IC0xLCAiYXNzZXJ0
X2luX2FycmF5IiwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAidmFsdWUgJHthY3R1YWx9IG5vdCBpbiBhcnJheSAke2V4cGVjdGVk
fSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YWN0
dWFsOmFjdHVhbCwgZXhwZWN0ZWQ6ZXhwZWN0ZWR9KTsNCisgICAgfQ0KKyAgICBleHBvc2UoYXNz
ZXJ0X2luX2FycmF5LCAiYXNzZXJ0X2luX2FycmF5Iik7DQorDQorICAgIGZ1bmN0aW9uIGFzc2Vy
dF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KKyAgICB7DQor
ICAgICAgICAgLy9UaGlzIG5lZWRzIHRvIGJlIGltcHJvdmVkIGEgZ3JlYXQgZGVhbA0KKyAgICAg
ICAgIGZ1bmN0aW9uIGNoZWNrX2VxdWFsKGV4cGVjdGVkLCBhY3R1YWwsIHN0YWNrKQ0KKyAgICAg
ICAgIHsNCisgICAgICAgICAgICAgc3RhY2sucHVzaChhY3R1YWwpOw0KKw0KKyAgICAgICAgICAg
ICB2YXIgcDsNCisgICAgICAgICAgICAgZm9yIChwIGluIGFjdHVhbCkNCisgICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAgYXNzZXJ0KGV4cGVjdGVkLmhhc093blByb3BlcnR5KHApLCAi
YXNzZXJ0X29iamVjdF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgcHJvcGVydHkgJHtw
fSIsIHtwOnB9KTsNCisNCisgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0dWFsW3BdID09
PSAib2JqZWN0IiAmJiBhY3R1YWxbcF0gIT09IG51bGwpDQorICAgICAgICAgICAgICAgICB7DQor
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmluZGV4T2YoYWN0dWFsW3BdKSA9PT0gLTEp
DQorICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGVj
a19lcXVhbChhY3R1YWxbcF0sIGV4cGVjdGVkW3BdLCBzdGFjayk7DQorICAgICAgICAgICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgZWxzZQ0KKyAg
ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgIGFzc2VydChhY3R1YWxbcF0g
PT09IGV4cGVjdGVkW3BdLCAiYXNzZXJ0X29iamVjdF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBy
b3BlcnR5ICR7cH0gZXhwZWN0ZWQgJHtleHBlY3RlZH0gZ290ICR7YWN0dWFsfSIsDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOnAsIGV4
cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsfSk7DQorICAgICAgICAgICAgICAgICB9DQor
ICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgZm9yIChwIGluIGV4cGVjdGVkKQ0KKyAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICBhc3NlcnQoYWN0dWFsLmhhc093blByb3BlcnR5
KHApLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICJhc3NlcnRfb2JqZWN0X2VxdWFscyIsIGRl
c2NyaXB0aW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBwcm9wZXJ0eSAk
e3B9IG1pc3NpbmciLCB7cDpwfSk7DQorICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgc3Rh
Y2sucG9wKCk7DQorICAgICAgICAgfQ0KKyAgICAgICAgIGNoZWNrX2VxdWFsKGFjdHVhbCwgZXhw
ZWN0ZWQsIFtdKTsNCisgICAgfTsNCisgICAgZXhwb3NlKGFzc2VydF9vYmplY3RfZXF1YWxzLCAi
YXNzZXJ0X29iamVjdF9lcXVhbHMiKTsNCisNCisgICAgZnVuY3Rpb24gYXNzZXJ0X2FycmF5X2Vx
dWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCisgICAgew0KKyAgICAgICAgYXNz
ZXJ0KGFjdHVhbC5sZW5ndGggPT09IGV4cGVjdGVkLmxlbmd0aCwNCisgICAgICAgICAgICAgICAi
YXNzZXJ0X2FycmF5X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KKyAgICAgICAgICAgICAgICJsZW5n
dGhzIGRpZmZlciwgZXhwZWN0ZWQgJHtleHBlY3RlZH0gZ290ICR7YWN0dWFsfSIsDQorICAgICAg
ICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLmxlbmd0aCwgYWN0dWFsOmFjdHVhbC5sZW5ndGh9
KTsNCisNCisgICAgICAgIGZvciAodmFyIGk9MDsgaSA8IGFjdHVhbC5sZW5ndGg7IGkrKykNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBhc3NlcnQoYWN0dWFsLmhhc093blByb3BlcnR5KGkpID09
PSBleHBlY3RlZC5oYXNPd25Qcm9wZXJ0eShpKSwNCisgICAgICAgICAgICAgICAgICAgImFzc2Vy
dF9hcnJheV9lcXVhbHMiLCBkZXNjcmlwdGlvbiwNCisgICAgICAgICAgICAgICAgICAgInByb3Bl
cnR5ICR7aX0sIHByb3BlcnR5IGV4cGVjdGVkIHRvIGJlICRleHBlY3RlZCBidXQgd2FzICRhY3R1
YWwiLA0KKyAgICAgICAgICAgICAgICAgICB7aTppLCBleHBlY3RlZDpleHBlY3RlZC5oYXNPd25Q
cm9wZXJ0eShpKSA/ICJwcmVzZW50IiA6ICJtaXNzaW5nIiwNCisgICAgICAgICAgICAgICAgICAg
YWN0dWFsOmFjdHVhbC5oYXNPd25Qcm9wZXJ0eShpKSA/ICJwcmVzZW50IiA6ICJtaXNzaW5nIn0p
Ow0KKyAgICAgICAgICAgIGFzc2VydChleHBlY3RlZFtpXSA9PT0gYWN0dWFsW2ldLA0KKyAgICAg
ICAgICAgICAgICAgICAiYXNzZXJ0X2FycmF5X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KKyAgICAg
ICAgICAgICAgICAgICAicHJvcGVydHkgJHtpfSwgZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdv
dCAke2FjdHVhbH0iLA0KKyAgICAgICAgICAgICAgICAgICB7aTppLCBleHBlY3RlZDpleHBlY3Rl
ZFtpXSwgYWN0dWFsOmFjdHVhbFtpXX0pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGV4cG9z
ZShhc3NlcnRfYXJyYXlfZXF1YWxzLCAiYXNzZXJ0X2FycmF5X2VxdWFscyIpOw0KKw0KKyAgICBm
dW5jdGlvbiBhc3NlcnRfYXBwcm94X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBlcHNpbG9uLCBk
ZXNjcmlwdGlvbikNCisgICAgew0KKyAgICAgICAgLyoNCisgICAgICAgICAqIFRlc3QgaWYgdHdv
IHByaW1pdGl2ZSBudW1iZXJzIGFyZSBlcXVhbCB3aXRoaW5nICsvLSBlcHNpbG9uDQorICAgICAg
ICAgKi8NCisgICAgICAgIGFzc2VydCh0eXBlb2YgYWN0dWFsID09PSAibnVtYmVyIiwNCisgICAg
ICAgICAgICAgICAiYXNzZXJ0X2FwcHJveF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwNCisgICAgICAg
ICAgICAgICAiZXhwZWN0ZWQgYSBudW1iZXIgYnV0IGdvdCBhICR7dHlwZV9hY3R1YWx9IiwNCisg
ICAgICAgICAgICAgICB7dHlwZV9hY3R1YWw6dHlwZW9mIGFjdHVhbH0pOw0KKw0KKyAgICAgICAg
YXNzZXJ0KE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8PSBlcHNpbG9uLA0KKyAgICAgICAg
ICAgICAgICJhc3NlcnRfYXBwcm94X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KKyAgICAgICAgICAg
ICAgICJleHBlY3RlZCAke2V4cGVjdGVkfSArLy0gJHtlcHNpbG9ufSBidXQgZ290ICR7YWN0dWFs
fSIsDQorICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsLCBl
cHNpbG9uOmVwc2lsb259KTsNCisgICAgfTsNCisgICAgZXhwb3NlKGFzc2VydF9hcHByb3hfZXF1
YWxzLCAiYXNzZXJ0X2FwcHJveF9lcXVhbHMiKTsNCisNCisgICAgZnVuY3Rpb24gYXNzZXJ0X3Jl
Z2V4cF9tYXRjaChhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikgew0KKyAgICAgICAgLyoN
CisgICAgICAgICAqIFRlc3QgaWYgYSBzdHJpbmcgKGFjdHVhbCkgbWF0Y2hlcyBhIHJlZ2V4cCAo
ZXhwZWN0ZWQpDQorICAgICAgICAgKi8NCisgICAgICAgIGFzc2VydChleHBlY3RlZC50ZXN0KGFj
dHVhbCksDQorICAgICAgICAgICAgICAgImFzc2VydF9yZWdleHBfbWF0Y2giLCBkZXNjcmlwdGlv
biwNCisgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVh
bH0iLA0KKyAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0dWFsOmFjdHVhbH0p
Ow0KKyAgICB9DQorICAgIGV4cG9zZShhc3NlcnRfcmVnZXhwX21hdGNoLCAiYXNzZXJ0X3JlZ2V4
cF9tYXRjaCIpOw0KKw0KKw0KKyAgICBmdW5jdGlvbiBfYXNzZXJ0X293bl9wcm9wZXJ0eShuYW1l
KSB7DQorICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNj
cmlwdGlvbikNCisgICAgICAgIHsNCisgICAgICAgICAgICBhc3NlcnQob2JqZWN0Lmhhc093blBy
b3BlcnR5KHByb3BlcnR5X25hbWUpLA0KKyAgICAgICAgICAgICAgICAgICBuYW1lLCBkZXNjcmlw
dGlvbiwNCisgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHByb3BlcnR5ICR7cH0gbWlzc2lu
ZyIsIHtwOnByb3BlcnR5X25hbWV9KTsNCisgICAgICAgIH07DQorICAgIH0NCisgICAgZXhwb3Nl
KF9hc3NlcnRfb3duX3Byb3BlcnR5KCJhc3NlcnRfZXhpc3RzIiksICJhc3NlcnRfZXhpc3RzIik7
DQorICAgIGV4cG9zZShfYXNzZXJ0X293bl9wcm9wZXJ0eSgiYXNzZXJ0X293bl9wcm9wZXJ0eSIp
LCAiYXNzZXJ0X293bl9wcm9wZXJ0eSIpOw0KKw0KKyAgICBmdW5jdGlvbiBhc3NlcnRfbm90X2V4
aXN0cyhvYmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KKyAgICB7DQorICAgICAg
ICBhc3NlcnQoIW9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eV9uYW1lKSwNCisgICAgICAg
ICAgICAgICAiYXNzZXJ0X25vdF9leGlzdHMiLCBkZXNjcmlwdGlvbiwNCisgICAgICAgICAgICAg
ICAidW5leHBlY3RlZCBwcm9wZXJ0eSAke3B9IGZvdW5kIiwge3A6cHJvcGVydHlfbmFtZX0pOw0K
KyAgICB9Ow0KKyAgICBleHBvc2UoYXNzZXJ0X25vdF9leGlzdHMsICJhc3NlcnRfbm90X2V4aXN0
cyIpOw0KKw0KKyAgICBmdW5jdGlvbiBfYXNzZXJ0X2luaGVyaXRzKG5hbWUpIHsNCisgICAgICAg
IHJldHVybiBmdW5jdGlvbiAob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikNCisg
ICAgICAgIHsNCisgICAgICAgICAgICBhc3NlcnQodHlwZW9mIG9iamVjdCA9PT0gIm9iamVjdCIs
DQorICAgICAgICAgICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLA0KKyAgICAgICAgICAgICAg
ICAgICAicHJvdmlkZWQgdmFsdWUgaXMgbm90IGFuIG9iamVjdCIpOw0KKw0KKyAgICAgICAgICAg
IGFzc2VydCgiaGFzT3duUHJvcGVydHkiIGluIG9iamVjdCwNCisgICAgICAgICAgICAgICAgICAg
bmFtZSwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAgICAgICJwcm92aWRlZCB2YWx1ZSBp
cyBhbiBvYmplY3QgYnV0IGhhcyBubyBoYXNPd25Qcm9wZXJ0eSBtZXRob2QiKTsNCisNCisgICAg
ICAgICAgICBhc3NlcnQoIW9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eV9uYW1lKSwNCisg
ICAgICAgICAgICAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAgICAg
ICJwcm9wZXJ0eSAke3B9IGZvdW5kIG9uIG9iamVjdCBleHBlY3RlZCBpbiBwcm90b3R5cGUgY2hh
aW4iLA0KKyAgICAgICAgICAgICAgICAgICB7cDpwcm9wZXJ0eV9uYW1lfSk7DQorDQorICAgICAg
ICAgICAgYXNzZXJ0KHByb3BlcnR5X25hbWUgaW4gb2JqZWN0LA0KKyAgICAgICAgICAgICAgICAg
ICBuYW1lLCBkZXNjcmlwdGlvbiwNCisgICAgICAgICAgICAgICAgICAgInByb3BlcnR5ICR7cH0g
bm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbiIsDQorICAgICAgICAgICAgICAgICAgIHtwOnBy
b3BlcnR5X25hbWV9KTsNCisgICAgICAgIH07DQorICAgIH0NCisgICAgZXhwb3NlKF9hc3NlcnRf
aW5oZXJpdHMoImFzc2VydF9pbmhlcml0cyIpLCAiYXNzZXJ0X2luaGVyaXRzIik7DQorICAgIGV4
cG9zZShfYXNzZXJ0X2luaGVyaXRzKCJhc3NlcnRfaWRsX2F0dHJpYnV0ZSIpLCAiYXNzZXJ0X2lk
bF9hdHRyaWJ1dGUiKTsNCisNCisgICAgZnVuY3Rpb24gYXNzZXJ0X3JlYWRvbmx5KG9iamVjdCwg
cHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pDQorICAgIHsNCisgICAgICAgICB2YXIgaW5pdGlh
bF92YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV9uYW1lXTsNCisgICAgICAgICB0cnkgew0KKyAgICAg
ICAgICAgICAvL05vdGUgdGhhdCB0aGlzIGNhbiBoYXZlIHNpZGUgZWZmZWN0cyBpbiB0aGUgY2Fz
ZSB3aGVyZQ0KKyAgICAgICAgICAgICAvL3RoZSBwcm9wZXJ0eSBoYXMgUHV0Rm9yd2FyZHMNCisg
ICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5X25hbWVdID0gaW5pdGlhbF92YWx1ZSArICJhIjsg
Ly9YWFggdXNlIHNvbWUgb3RoZXIgdmFsdWUgaGVyZT8NCisgICAgICAgICAgICAgYXNzZXJ0KG9i
amVjdFtwcm9wZXJ0eV9uYW1lXSA9PT0gaW5pdGlhbF92YWx1ZSwNCisgICAgICAgICAgICAgICAg
ICAgICJhc3NlcnRfcmVhZG9ubHkiLCBkZXNjcmlwdGlvbiwNCisgICAgICAgICAgICAgICAgICAg
ICJjaGFuZ2luZyBwcm9wZXJ0eSAke3B9IHN1Y2NlZWRlZCIsDQorICAgICAgICAgICAgICAgICAg
ICB7cDpwcm9wZXJ0eV9uYW1lfSk7DQorICAgICAgICAgfQ0KKyAgICAgICAgIGZpbmFsbHkNCisg
ICAgICAgICB7DQorICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV9uYW1lXSA9IGluaXRpYWxf
dmFsdWU7DQorICAgICAgICAgfQ0KKyAgICB9Ow0KKyAgICBleHBvc2UoYXNzZXJ0X3JlYWRvbmx5
LCAiYXNzZXJ0X3JlYWRvbmx5Iik7DQorDQorICAgIGZ1bmN0aW9uIGFzc2VydF90aHJvd3MoY29k
ZSwgZnVuYywgZGVzY3JpcHRpb24pDQorICAgIHsNCisgICAgICAgIHRyeQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIGZ1bmMuY2FsbCh0aGlzKTsNCisgICAgICAgICAgICBhc3NlcnQoZmFsc2Us
ICJhc3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAgICAgICIke2Z1
bmN9IGRpZCBub3QgdGhyb3ciLCB7ZnVuYzpmdW5jfSk7DQorICAgICAgICB9DQorICAgICAgICBj
YXRjaChlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgQXNzZXJ0
aW9uRXJyb3IpIHsNCisgICAgICAgICAgICAgICAgdGhyb3coZSk7DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgICAgIGlmICh0eXBlb2YgY29kZSA9PT0gIm9iamVjdCIpDQorICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICBhc3NlcnQodHlwZW9mIGUgPT0gIm9iamVjdCIgJiYgIm5hbWUi
IGluIGUgJiYgZS5uYW1lID09IGNvZGUubmFtZSwNCisgICAgICAgICAgICAgICAgICAgICAgICJh
c3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAgICAgICAgICAiJHtm
dW5jfSB0aHJldyAke2FjdHVhbH0gKCR7YWN0dWFsX25hbWV9KSBleHBlY3RlZCAke2V4cGVjdGVk
fSAoJHtleHBlY3RlZF9uYW1lfSkiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHtmdW5jOmZ1bmMsIGFjdHVhbDplLCBhY3R1YWxfbmFtZTplLm5hbWUsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOmNvZGUsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25hbWU6Y29kZS5uYW1lfSk7DQorICAg
ICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgdmFyIHJl
cXVpcmVkX3Byb3BzID0ge307DQorICAgICAgICAgICAgcmVxdWlyZWRfcHJvcHMuY29kZSA9IHsN
CisgICAgICAgICAgICAgICAgSU5ERVhfU0laRV9FUlI6IDEsDQorICAgICAgICAgICAgICAgIEhJ
RVJBUkNIWV9SRVFVRVNUX0VSUjogMywNCisgICAgICAgICAgICAgICAgV1JPTkdfRE9DVU1FTlRf
RVJSOiA0LA0KKyAgICAgICAgICAgICAgICBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IDUsDQorICAg
ICAgICAgICAgICAgIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogNywNCisgICAgICAgICAg
ICAgICAgTk9UX0ZPVU5EX0VSUjogOCwNCisgICAgICAgICAgICAgICAgTk9UX1NVUFBPUlRFRF9F
UlI6IDksDQorICAgICAgICAgICAgICAgIElOVkFMSURfU1RBVEVfRVJSOiAxMSwNCisgICAgICAg
ICAgICAgICAgU1lOVEFYX0VSUjogMTIsDQorICAgICAgICAgICAgICAgIElOVkFMSURfTU9ESUZJ
Q0FUSU9OX0VSUjogMTMsDQorICAgICAgICAgICAgICAgIE5BTUVTUEFDRV9FUlI6IDE0LA0KKyAg
ICAgICAgICAgICAgICBJTlZBTElEX0FDQ0VTU19FUlI6IDE1LA0KKyAgICAgICAgICAgICAgICBU
WVBFX01JU01BVENIX0VSUjogMTcsDQorICAgICAgICAgICAgICAgIFNFQ1VSSVRZX0VSUjogMTgs
DQorICAgICAgICAgICAgICAgIE5FVFdPUktfRVJSOiAxOSwNCisgICAgICAgICAgICAgICAgQUJP
UlRfRVJSOiAyMCwNCisgICAgICAgICAgICAgICAgVVJMX01JU01BVENIX0VSUjogMjEsDQorICAg
ICAgICAgICAgICAgIFFVT1RBX0VYQ0VFREVEX0VSUjogMjIsDQorICAgICAgICAgICAgICAgIFRJ
TUVPVVRfRVJSOiAyMywNCisgICAgICAgICAgICAgICAgSU5WQUxJRF9OT0RFX1RZUEVfRVJSOiAy
NCwNCisgICAgICAgICAgICAgICAgREFUQV9DTE9ORV9FUlI6IDI1LA0KKyAgICAgICAgICAgIH1b
Y29kZV07DQorICAgICAgICAgICAgaWYgKHJlcXVpcmVkX3Byb3BzLmNvZGUgPT09IHVuZGVmaW5l
ZCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25F
cnJvcignVGVzdCBidWc6IHVucmVjb2duaXplZCBET01FeGNlcHRpb24gY29kZSAiJyArIGNvZGUg
KyAnIiBwYXNzZWQgdG8gYXNzZXJ0X3Rocm93cygpJyk7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgICAgIHJlcXVpcmVkX3Byb3BzW2NvZGVdID0gcmVxdWlyZWRfcHJvcHMuY29kZTsNCisgICAg
ICAgICAgICAvL1VuY29tbWVudCB0aGlzIHdoZW4gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGV2ZXJ5
IGJyb3dzZXINCisgICAgICAgICAgICAvL2FjdHVhbGx5IGltcGxlbWVudHMgdGhlIHNwZWM7IG90
aGVyd2lzZSBpdCBqdXN0IGNyZWF0ZXMNCisgICAgICAgICAgICAvL3ppbGxpb25zIG9mIGZhaWx1
cmVzLiAgQWxzbyBkbyByZXF1aXJlZF9wcm9wcy50eXBlLg0KKyAgICAgICAgICAgIC8vcmVxdWly
ZWRfcHJvcHMubmFtZSA9IGNvZGU7DQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICAvL1dl
J2QgbGlrZSB0byB0ZXN0IHRoYXQgZSBpbnN0YW5jZW9mIHRoZSBhcHByb3ByaWF0ZSBpbnRlcmZh
Y2UsDQorICAgICAgICAgICAgLy9idXQgd2UgY2FuJ3QsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3
aGF0IHdpbmRvdyBpdCB3YXMgY3JlYXRlZA0KKyAgICAgICAgICAgIC8vaW4uICBJdCBtaWdodCBi
ZSBhbiBpbnN0YW5jZW9mIHRoZSBhcHByb3ByaWF0ZSBpbnRlcmZhY2Ugb24gc29tZQ0KKyAgICAg
ICAgICAgIC8vdW5rbm93biBvdGhlciB3aW5kb3cuICBUT0RPOiBXb3JrIGFyb3VuZCB0aGlzIHNv
bWVob3c/DQorDQorICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBlID09ICJvYmplY3QiLA0KKyAg
ICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLA0KKyAgICAgICAg
ICAgICAgICAgICAiJHtmdW5jfSB0aHJldyAke2V9IHdpdGggdHlwZSAke3R5cGV9LCBub3QgYW4g
b2JqZWN0IiwNCisgICAgICAgICAgICAgICAgICAge2Z1bmM6ZnVuYywgZTplLCB0eXBlOnR5cGVv
ZiBlfSk7DQorDQorICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiByZXF1aXJlZF9wcm9wcykN
CisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgZSA9PSAib2Jq
ZWN0IiAmJiBwcm9wIGluIGUgJiYgZVtwcm9wXSA9PSByZXF1aXJlZF9wcm9wc1twcm9wXSwNCisg
ICAgICAgICAgICAgICAgICAgICAgICJhc3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sDQorICAg
ICAgICAgICAgICAgICAgICAgICAiJHtmdW5jfSB0aHJldyAke2V9IHRoYXQgaXMgbm90IGEgRE9N
RXhjZXB0aW9uICIgKyBjb2RlICsgIjogcHJvcGVydHkgJHtwcm9wfSBpcyBlcXVhbCB0byAke2Fj
dHVhbH0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9IiwNCisgICAgICAgICAgICAgICAgICAgICAgIHtm
dW5jOmZ1bmMsIGU6ZSwgcHJvcDpwcm9wLCBhY3R1YWw6ZVtwcm9wXSwgZXhwZWN0ZWQ6cmVxdWly
ZWRfcHJvcHNbcHJvcF19KTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisg
ICAgZXhwb3NlKGFzc2VydF90aHJvd3MsICJhc3NlcnRfdGhyb3dzIik7DQorDQorICAgIGZ1bmN0
aW9uIGFzc2VydF91bnJlYWNoZWQoZGVzY3JpcHRpb24pIHsNCisgICAgICAgICBhc3NlcnQoZmFs
c2UsICJhc3NlcnRfdW5yZWFjaGVkIiwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAgICJS
ZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUiKTsNCisgICAgfQ0KKyAgICBleHBvc2UoYXNzZXJ0X3Vu
cmVhY2hlZCwgImFzc2VydF91bnJlYWNoZWQiKTsNCisNCisgICAgZnVuY3Rpb24gVGVzdChuYW1l
LCBwcm9wZXJ0aWVzKQ0KKyAgICB7DQorICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOw0KKyAgICAg
ICAgdGhpcy5zdGF0dXMgPSB0aGlzLk5PVFJVTjsNCisgICAgICAgIHRoaXMudGltZW91dF9pZCA9
IG51bGw7DQorICAgICAgICB0aGlzLmlzX2RvbmUgPSBmYWxzZTsNCisNCisgICAgICAgIHRoaXMu
dGltZW91dF9sZW5ndGggPSBwcm9wZXJ0aWVzLnRpbWVvdXQgPyBwcm9wZXJ0aWVzLnRpbWVvdXQg
OiBzZXR0aW5ncy50ZXN0X3RpbWVvdXQ7DQorDQorICAgICAgICB0aGlzLm1lc3NhZ2UgPSBudWxs
Ow0KKw0KKyAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsNCisgICAgICAgIHRoaXMuc3RlcHMg
PSBbXTsNCisNCisgICAgICAgIHRlc3RzLnB1c2godGhpcyk7DQorICAgIH0NCisNCisgICAgVGVz
dC5wcm90b3R5cGUgPSB7DQorICAgICAgICBQQVNTOjAsDQorICAgICAgICBGQUlMOjEsDQorICAg
ICAgICBUSU1FT1VUOjIsDQorICAgICAgICBOT1RSVU46Mw0KKyAgICB9Ow0KKw0KKw0KKyAgICBU
ZXN0LnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24oZnVuYywgdGhpc19vYmopDQorICAgIHsNCisg
ICAgICAgIC8vSW4gY2FzZSB0aGUgdGVzdCBoYXMgYWxyZWFkeSBmYWlsZWQNCisgICAgICAgIGlm
ICh0aGlzLnN0YXR1cyAhPT0gdGhpcy5OT1RSVU4pDQorICAgICAgICB7DQorICAgICAgICAgIHJl
dHVybjsNCisgICAgICAgIH0NCisNCisgICAgICAgIHRlc3RzLnN0YXJ0ZWQgPSB0cnVlOw0KKw0K
KyAgICAgICAgaWYgKHRoaXMudGltZW91dF9pZCA9PT0gbnVsbCkgew0KKyAgICAgICAgICAgIHRo
aXMuc2V0X3RpbWVvdXQoKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHRoaXMuc3RlcHMucHVz
aChmdW5jKTsNCisNCisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIHRoaXNfb2JqID0gdGhpczsNCisgICAgICAgIH0NCisNCisgICAg
ICAgIHRyeQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpc19vYmosIEFy
cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMikpOw0KKyAgICAgICAgfQ0KKyAg
ICAgICAgY2F0Y2goZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvL1RoaXMgY2FuIGhhcHBl
biBpZiBzb21ldGhpbmcgY2FsbGVkIHN5bmNocm9ub3VzbHkgaW52b2tlZCBhbm90aGVyDQorICAg
ICAgICAgICAgLy9zdGVwDQorICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSB0aGlzLk5P
VFJVTikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSB0aGlzLkZBSUw7DQorICAgICAgICAg
ICAgdGhpcy5tZXNzYWdlID0gZS5tZXNzYWdlOw0KKyAgICAgICAgICAgIGlmICh0eXBlb2YgZS5z
dGFjayAhPSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgZS5tZXNzYWdlID09ICJzdHJpbmciKSB7DQor
ICAgICAgICAgICAgICAgIC8vVHJ5IHRvIG1ha2UgaXQgbW9yZSBpbmZvcm1hdGl2ZSBmb3Igc29t
ZSBleGNlcHRpb25zLCBhdCBsZWFzdA0KKyAgICAgICAgICAgICAgICAvL2luIEdlY2tvIGFuZCBX
ZWJLaXQuICBUaGlzIHJlc3VsdHMgaW4gYSBzdGFjayBkdW1wIGluc3RlYWQgb2YNCisgICAgICAg
ICAgICAgICAgLy9qdXN0IGVycm9ycyBsaWtlICJDYW5ub3QgcmVhZCBwcm9wZXJ0eSAncGFyZW50
Tm9kZScgb2YgbnVsbCINCisgICAgICAgICAgICAgICAgLy9vciAicm9vdCBpcyBudWxsIi4gIE1h
a2VzIGl0IGEgbG90IGxvbmdlciwgb2YgY291cnNlLg0KKyAgICAgICAgICAgICAgICB0aGlzLm1l
c3NhZ2UgKz0gIihzdGFjazogIiArIGUuc3RhY2sgKyAiKSI7DQorICAgICAgICAgICAgfQ0KKyAg
ICAgICAgICAgIHRoaXMuZG9uZSgpOw0KKyAgICAgICAgICAgIGlmIChkZWJ1ZyAmJiBlLmNvbnN0
cnVjdG9yICE9PSBBc3NlcnRpb25FcnJvcikgew0KKyAgICAgICAgICAgICAgICB0aHJvdyBlOw0K
KyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfTsNCisNCisgICAgVGVzdC5wcm90b3R5
cGUuc3RlcF9mdW5jID0gZnVuY3Rpb24oZnVuYywgdGhpc19vYmopDQorICAgIHsNCisgICAgICAg
IHZhciB0ZXN0X3RoaXMgPSB0aGlzOw0KKw0KKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgg
PT09IDEpDQorICAgICAgICB7DQorICAgICAgICAgICAgdGhpc19vYmogPSB0ZXN0X3RoaXM7DQor
ICAgICAgICB9DQorDQorICAgICAgICByZXR1cm4gZnVuY3Rpb24oKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgICAgIHRlc3RfdGhpcy5zdGVwLmFwcGx5KHRlc3RfdGhpcywgW2Z1bmMsIHRoaXNfb2Jq
XS5jb25jYXQoDQorICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFy
Z3VtZW50cykpKTsNCisgICAgICAgIH07DQorICAgIH07DQorDQorICAgIFRlc3QucHJvdG90eXBl
LnNldF90aW1lb3V0ID0gZnVuY3Rpb24oKQ0KKyAgICB7DQorICAgICAgICB2YXIgdGhpc19vYmog
PSB0aGlzOw0KKyAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gc2V0VGltZW91dChmdW5jdGlvbigp
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLnRpbWVvdXQoKTsNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy50aW1lb3V0X2xlbmd0aCk7DQor
ICAgIH07DQorDQorICAgIFRlc3QucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbigpDQorICAg
IHsNCisgICAgICAgIHRoaXMuc3RhdHVzID0gdGhpcy5USU1FT1VUOw0KKyAgICAgICAgdGhpcy50
aW1lb3V0X2lkID0gbnVsbDsNCisgICAgICAgIHRoaXMubWVzc2FnZSA9ICJUZXN0IHRpbWVkIG91
dCI7DQorICAgICAgICB0aGlzLmRvbmUoKTsNCisgICAgfTsNCisNCisgICAgVGVzdC5wcm90b3R5
cGUuZG9uZSA9IGZ1bmN0aW9uKCkNCisgICAgew0KKyAgICAgICAgaWYgKHRoaXMuaXNfZG9uZSkg
ew0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisgICAgICAgIGNsZWFyVGltZW91
dCh0aGlzLnRpbWVvdXRfaWQpOw0KKyAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSB0aGlzLk5P
VFJVTikNCisgICAgICAgIHsNCisgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuUEFTUzsN
CisgICAgICAgIH0NCisgICAgICAgIHRoaXMuaXNfZG9uZSA9IHRydWU7DQorICAgICAgICB0ZXN0
cy5yZXN1bHQodGhpcyk7DQorICAgIH07DQorDQorDQorICAgIC8qDQorICAgICAqIEhhcm5lc3MN
CisgICAgICovDQorDQorICAgIGZ1bmN0aW9uIFRlc3RzU3RhdHVzKCkNCisgICAgew0KKyAgICAg
ICAgdGhpcy5zdGF0dXMgPSBudWxsOw0KKyAgICAgICAgdGhpcy5tZXNzYWdlID0gbnVsbDsNCisg
ICAgfQ0KKyAgICBUZXN0c1N0YXR1cy5wcm90b3R5cGUgPSB7DQorICAgICAgICBPSzowLA0KKyAg
ICAgICAgRVJST1I6MSwNCisgICAgICAgIFRJTUVPVVQ6Mg0KKyAgICB9Ow0KKw0KKyAgICBmdW5j
dGlvbiBUZXN0cygpDQorICAgIHsNCisgICAgICAgIHRoaXMudGVzdHMgPSBbXTsNCisgICAgICAg
IHRoaXMubnVtX3BlbmRpbmcgPSAwOw0KKw0KKyAgICAgICAgdGhpcy5waGFzZXMgPSB7DQorICAg
ICAgICAgICAgSU5JVElBTDowLA0KKyAgICAgICAgICAgIFNFVFVQOjEsDQorICAgICAgICAgICAg
SEFWRV9URVNUUzoyLA0KKyAgICAgICAgICAgIEhBVkVfUkVTVUxUUzozLA0KKyAgICAgICAgICAg
IENPTVBMRVRFOjQNCisgICAgICAgIH07DQorICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFz
ZXMuSU5JVElBTDsNCisNCisgICAgICAgIC8vQWxsIHRlc3RzIGNhbid0IGJlIGRvbmUgdW50aWwg
dGhlIGxvYWQgZXZlbnQgZmlyZXMNCisgICAgICAgIHRoaXMuYWxsX2xvYWRlZCA9IGZhbHNlOw0K
KyAgICAgICAgdGhpcy53YWl0X2Zvcl9maW5pc2ggPSBmYWxzZTsNCisgICAgICAgIHRoaXMucHJv
Y2Vzc2luZ19jYWxsYmFja3MgPSBmYWxzZTsNCisNCisgICAgICAgIHRoaXMudGltZW91dF9sZW5n
dGggPSBzZXR0aW5ncy50aW1lb3V0Ow0KKyAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gbnVsbDsN
CisgICAgICAgIHRoaXMuc2V0X3RpbWVvdXQoKTsNCisNCisgICAgICAgIHRoaXMuc3RhcnRfY2Fs
bGJhY2tzID0gW107DQorICAgICAgICB0aGlzLnRlc3RfZG9uZV9jYWxsYmFja3MgPSBbXTsNCisg
ICAgICAgIHRoaXMuYWxsX2RvbmVfY2FsbGJhY2tzID0gW107DQorDQorICAgICAgICB0aGlzLnN0
YXR1cyA9IG5ldyBUZXN0c1N0YXR1cygpOw0KKw0KKyAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhp
czsNCisNCisgICAgICAgIG9uX2V2ZW50KHdpbmRvdywgImxvYWQiLA0KKyAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24oKQ0KKyAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAg
IHRoaXNfb2JqLmFsbF9sb2FkZWQgPSB0cnVlOw0KKyAgICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzX29iai5hbGxfZG9uZSgpKQ0KKyAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpc19vYmouY29tcGxldGUoKTsNCisgICAgICAgICAgICAgICAgICAg
ICB9DQorICAgICAgICAgICAgICAgICB9KTsNCisgICAgICAgIHRoaXMucHJvcGVydGllcyA9IHt9
Ow0KKyAgICB9DQorDQorICAgIFRlc3RzLnByb3RvdHlwZS5zZXR1cCA9IGZ1bmN0aW9uKGZ1bmMs
IHByb3BlcnRpZXMpDQorICAgIHsNCisgICAgICAgIGlmICh0aGlzLnBoYXNlID49IHRoaXMucGhh
c2VzLkhBVkVfUkVTVUxUUykNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm47DQorICAg
ICAgICB9DQorICAgICAgICBpZiAodGhpcy5waGFzZSA8IHRoaXMucGhhc2VzLlNFVFVQKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5TRVRVUDsNCisg
ICAgICAgIH0NCisNCisgICAgICAgIGZvciAodmFyIHAgaW4gcHJvcGVydGllcykNCisgICAgICAg
IHsNCisgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwKSkNCisgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgIHRoaXMucHJvcGVydGllc1twXSA9IHByb3BlcnRp
ZXNbcF07DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKHByb3Bl
cnRpZXMudGltZW91dCkNCisgICAgICAgIHsNCisgICAgICAgICAgICB0aGlzLnRpbWVvdXRfbGVu
Z3RoID0gcHJvcGVydGllcy50aW1lb3V0Ow0KKyAgICAgICAgICAgIHRoaXMuc2V0X3RpbWVvdXQo
KTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChwcm9wZXJ0aWVzLmV4cGxpY2l0X2RvbmUpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgdGhpcy53YWl0X2Zvcl9maW5pc2ggPSB0cnVlOw0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGZ1bmMpDQorICAgICAgICB7DQorICAgICAgICAgICAg
dHJ5DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBmdW5jKCk7DQorICAgICAgICAg
ICAgfSBjYXRjaChlKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdGhpcy5zdGF0
dXMuc3RhdHVzID0gdGhpcy5zdGF0dXMuRVJST1I7DQorICAgICAgICAgICAgICAgIHRoaXMuc3Rh
dHVzLm1lc3NhZ2UgPSBlOw0KKyAgICAgICAgICAgIH07DQorICAgICAgICB9DQorICAgIH07DQor
DQorICAgIFRlc3RzLnByb3RvdHlwZS5zZXRfdGltZW91dCA9IGZ1bmN0aW9uKCkNCisgICAgew0K
KyAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsNCisgICAgICAgIGNsZWFyVGltZW91dCh0aGlz
LnRpbWVvdXRfaWQpOw0KKyAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gc2V0VGltZW91dChmdW5j
dGlvbigpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNf
b2JqLnRpbWVvdXQoKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwg
dGhpcy50aW1lb3V0X2xlbmd0aCk7DQorICAgIH07DQorDQorICAgIFRlc3RzLnByb3RvdHlwZS50
aW1lb3V0ID0gZnVuY3Rpb24oKSB7DQorICAgICAgICB0aGlzLnN0YXR1cy5zdGF0dXMgPSB0aGlz
LnN0YXR1cy5USU1FT1VUOw0KKyAgICAgICAgdGhpcy5jb21wbGV0ZSgpOw0KKyAgICB9Ow0KKw0K
KyAgICBUZXN0cy5wcm90b3R5cGUuZW5kX3dhaXQgPSBmdW5jdGlvbigpDQorICAgIHsNCisgICAg
ICAgIHRoaXMud2FpdF9mb3JfZmluaXNoID0gZmFsc2U7DQorICAgICAgICBpZiAodGhpcy5hbGxf
ZG9uZSgpKSB7DQorICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSgpOw0KKyAgICAgICAgfQ0KKyAg
ICB9Ow0KKw0KKyAgICBUZXN0cy5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKHRlc3QpDQorICAg
IHsNCisgICAgICAgIGlmICh0aGlzLnBoYXNlIDwgdGhpcy5waGFzZXMuSEFWRV9URVNUUykgew0K
KyAgICAgICAgICAgIHRoaXMubm90aWZ5X3N0YXJ0KCk7DQorICAgICAgICB9DQorICAgICAgICB0
aGlzLm51bV9wZW5kaW5nKys7DQorICAgICAgICB0aGlzLnRlc3RzLnB1c2godGVzdCk7DQorICAg
IH07DQorDQorICAgIFRlc3RzLnByb3RvdHlwZS5hbGxfZG9uZSA9IGZ1bmN0aW9uKCkgew0KKyAg
ICAgICAgcmV0dXJuICh0aGlzLmFsbF9sb2FkZWQgJiYgdGhpcy5udW1fcGVuZGluZyA9PT0gMCAm
Jg0KKyAgICAgICAgICAgICAgICAhdGhpcy53YWl0X2Zvcl9maW5pc2ggJiYgIXRoaXMucHJvY2Vz
c2luZ19jYWxsYmFja3MpOw0KKyAgICB9Ow0KKw0KKyAgICBUZXN0cy5wcm90b3R5cGUuc3RhcnQg
PSBmdW5jdGlvbigpIHsNCisgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5IQVZFX1RF
U1RTOw0KKyAgICAgICAgdGhpcy5ub3RpZnlfc3RhcnQoKTsNCisgICAgfTsNCisNCisgICAgVGVz
dHMucHJvdG90eXBlLm5vdGlmeV9zdGFydCA9IGZ1bmN0aW9uKCkgew0KKyAgICAgICAgdmFyIHRo
aXNfb2JqID0gdGhpczsNCisgICAgICAgIGZvckVhY2ggKHRoaXMuc3RhcnRfY2FsbGJhY2tzLA0K
KyAgICAgICAgICAgICAgICAgZnVuY3Rpb24oY2FsbGJhY2spDQorICAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodGhpc19vYmoucHJvcGVydGllcyk7DQor
ICAgICAgICAgICAgICAgICB9KTsNCisgICAgICAgIGZvckVhY2goYW5jZXN0b3Jfd2luZG93cygp
LA0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbih3KQ0KKyAgICAgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgICAgICBpZih3LnN0YXJ0X2NhbGxiYWNrKQ0KKyAgICAgICAgICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5zdGFydF9jYWxsYmFjayh0aGlz
X29iai5wcm9wZXJ0aWVzKTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAg
ICAgICAgICAgICAgICAgY2F0Y2goZSkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coZSk7DQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICB9
DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0pOw0KKyAgICB9Ow0K
Kw0KKyAgICBUZXN0cy5wcm90b3R5cGUucmVzdWx0ID0gZnVuY3Rpb24odGVzdCkNCisgICAgew0K
KyAgICAgICAgaWYgKHRoaXMucGhhc2UgPiB0aGlzLnBoYXNlcy5IQVZFX1JFU1VMVFMpDQorICAg
ICAgICB7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgfQ0KKyAgICAgICAgdGhpcy5w
aGFzZSA9IHRoaXMucGhhc2VzLkhBVkVfUkVTVUxUUzsNCisgICAgICAgIHRoaXMubnVtX3BlbmRp
bmctLTsNCisgICAgICAgIHRoaXMubm90aWZ5X3Jlc3VsdCh0ZXN0KTsNCisgICAgfTsNCisNCisg
ICAgVGVzdHMucHJvdG90eXBlLm5vdGlmeV9yZXN1bHQgPSBmdW5jdGlvbih0ZXN0KSB7DQorICAg
ICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0KKyAgICAgICAgdGhpcy5wcm9jZXNzaW5nX2NhbGxi
YWNrcyA9IHRydWU7DQorICAgICAgICBmb3JFYWNoKHRoaXMudGVzdF9kb25lX2NhbGxiYWNrcywN
CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oY2FsbGJhY2spDQorICAgICAgICAgICAgICAgIHsN
CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRlc3QsIHRoaXNfb2JqKTsNCisgICAgICAg
ICAgICAgICAgfSk7DQorDQorICAgICAgICBmb3JFYWNoKGFuY2VzdG9yX3dpbmRvd3MoKSwNCisg
ICAgICAgICAgICAgICAgZnVuY3Rpb24odykNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAg
ICAgICAgICAgICAgaWYody5yZXN1bHRfY2FsbGJhY2spDQorICAgICAgICAgICAgICAgICAgICB7
DQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQorICAgICAgICAgICAgICAgICAgICAgICAg
ew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LnJlc3VsdF9jYWxsYmFjayh0ZXN0KTsN
CisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgY2F0
Y2goZSkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmKGRlYnVnKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
dyBlOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9KTsNCisg
ICAgICAgIHRoaXMucHJvY2Vzc2luZ19jYWxsYmFja3MgPSBmYWxzZTsNCisgICAgICAgIGlmICh0
aGlzX29iai5hbGxfZG9uZSgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHRoaXNfb2JqLmNv
bXBsZXRlKCk7DQorICAgICAgICB9DQorICAgIH07DQorDQorICAgIFRlc3RzLnByb3RvdHlwZS5j
b21wbGV0ZSA9IGZ1bmN0aW9uKCkgew0KKyAgICAgICAgaWYgKHRoaXMucGhhc2UgPT09IHRoaXMu
cGhhc2VzLkNPTVBMRVRFKSB7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgfQ0KKyAg
ICAgICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLkNPTVBMRVRFOw0KKyAgICAgICAgdGhpcy5u
b3RpZnlfY29tcGxldGUoKTsNCisgICAgfTsNCisNCisgICAgVGVzdHMucHJvdG90eXBlLm5vdGlm
eV9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkNCisgICAgew0KKyAgICAgICAgY2xlYXJUaW1lb3V0KHRo
aXMudGltZW91dF9pZCk7DQorICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0KKyAgICAgICAg
aWYgKHRoaXMuc3RhdHVzLnN0YXR1cyA9PT0gbnVsbCkNCisgICAgICAgIHsNCisgICAgICAgICAg
ICB0aGlzLnN0YXR1cy5zdGF0dXMgPSB0aGlzLnN0YXR1cy5PSzsNCisgICAgICAgIH0NCisNCisg
ICAgICAgIGZvckVhY2ggKHRoaXMuYWxsX2RvbmVfY2FsbGJhY2tzLA0KKyAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24oY2FsbGJhY2spDQorICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgICAgICAgY2FsbGJhY2sodGhpc19vYmoudGVzdHMsIHRoaXNfb2JqLnN0YXR1cyk7DQorICAg
ICAgICAgICAgICAgICB9KTsNCisNCisgICAgICAgIGZvckVhY2goYW5jZXN0b3Jfd2luZG93cygp
LA0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbih3KQ0KKyAgICAgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgICAgICBpZih3LmNvbXBsZXRpb25fY2FsbGJhY2spDQorICAgICAgICAgICAg
ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQorICAgICAgICAgICAgICAg
ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LmNvbXBsZXRpb25fY2Fs
bGJhY2sodGhpc19vYmoudGVzdHMsIHRoaXNfb2JqLnN0YXR1cyk7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKGUpDQorICAgICAgICAg
ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWcp
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRocm93IGU7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAg
ICAgICAgIH0pOw0KKyAgICB9Ow0KKw0KKyAgICB2YXIgdGVzdHMgPSBuZXcgVGVzdHMoKTsNCisN
CisgICAgZnVuY3Rpb24gYWRkX3N0YXJ0X2NhbGxiYWNrKGNhbGxiYWNrKSB7DQorICAgICAgICB0
ZXN0cy5zdGFydF9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7DQorICAgIH0NCisNCisgICAgZnVu
Y3Rpb24gYWRkX3Jlc3VsdF9jYWxsYmFjayhjYWxsYmFjaykNCisgICAgew0KKyAgICAgICAgdGVz
dHMudGVzdF9kb25lX2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsNCisgICAgfQ0KKw0KKyAgICBm
dW5jdGlvbiBhZGRfY29tcGxldGlvbl9jYWxsYmFjayhjYWxsYmFjaykNCisgICAgew0KKyAgICAg
ICB0ZXN0cy5hbGxfZG9uZV9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7DQorICAgIH0NCisNCisg
ICAgZXhwb3NlKGFkZF9zdGFydF9jYWxsYmFjaywgJ2FkZF9zdGFydF9jYWxsYmFjaycpOw0KKyAg
ICBleHBvc2UoYWRkX3Jlc3VsdF9jYWxsYmFjaywgJ2FkZF9yZXN1bHRfY2FsbGJhY2snKTsNCisg
ICAgZXhwb3NlKGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrLCAnYWRkX2NvbXBsZXRpb25fY2FsbGJh
Y2snKTsNCisNCisgICAgLyoNCisgICAgICogT3V0cHV0IGxpc3RlbmVyDQorICAgICovDQorDQor
ICAgIGZ1bmN0aW9uIE91dHB1dCgpIHsNCisgICAgICB0aGlzLm91dHB1dF9kb2N1bWVudCA9IG51
bGw7DQorICAgICAgdGhpcy5vdXRwdXRfbm9kZSA9IG51bGw7DQorICAgICAgdGhpcy5kb25lX2Nv
dW50ID0gMDsNCisgICAgICB0aGlzLmVuYWJsZWQgPSBzZXR0aW5ncy5vdXRwdXQ7DQorICAgICAg
dGhpcy5waGFzZSA9IHRoaXMuSU5JVElBTDsNCisgICAgfQ0KKw0KKyAgICBPdXRwdXQucHJvdG90
eXBlLklOSVRJQUwgPSAwOw0KKyAgICBPdXRwdXQucHJvdG90eXBlLlNUQVJURUQgPSAxOw0KKyAg
ICBPdXRwdXQucHJvdG90eXBlLkhBVkVfUkVTVUxUUyA9IDI7DQorICAgIE91dHB1dC5wcm90b3R5
cGUuQ09NUExFVEUgPSAzOw0KKw0KKyAgICBPdXRwdXQucHJvdG90eXBlLnNldHVwID0gZnVuY3Rp
b24ocHJvcGVydGllcykgew0KKyAgICAgICAgaWYgKHRoaXMucGhhc2UgPiB0aGlzLklOSVRJQUwp
IHsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorDQorICAgICAgICAvL0lmIG91
dHB1dCBpcyBkaXNhYmxlZCBpbiB0ZXN0aGFybmVzc3JlcG9ydC5qcyB0aGUgdGVzdCBzaG91bGRu
J3QgYmUNCisgICAgICAgIC8vYWJsZSB0byBvdmVycmlkZSB0aGF0DQorICAgICAgICB0aGlzLmVu
YWJsZWQgPSB0aGlzLmVuYWJsZWQgJiYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoIm91dHB1
dCIpID8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGll
cy5vdXRwdXQgOiBzZXR0aW5ncy5vdXRwdXQpOw0KKyAgICB9Ow0KKw0KKyAgICBPdXRwdXQucHJv
dG90eXBlLmluaXQgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKQ0KKyAgICB7DQorICAgICAgICBpZiAo
dGhpcy5waGFzZSA+PSB0aGlzLlNUQVJURUQpIHsNCisgICAgICAgICAgICByZXR1cm47DQorICAg
ICAgICB9DQorICAgICAgICBpZiAocHJvcGVydGllcy5vdXRwdXRfZG9jdW1lbnQpIHsNCisgICAg
ICAgICAgICB0aGlzLm91dHB1dF9kb2N1bWVudCA9IHByb3BlcnRpZXMub3V0cHV0X2RvY3VtZW50
Ow0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICB0aGlzLm91dHB1dF9kb2N1bWVudCA9
IGRvY3VtZW50Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMuU1RBUlRF
RDsNCisgICAgfTsNCisNCisgICAgT3V0cHV0LnByb3RvdHlwZS5yZXNvbHZlX2xvZyA9IGZ1bmN0
aW9uKCkNCisgICAgew0KKyAgICAgICAgaWYgKCF0aGlzLm91dHB1dF9kb2N1bWVudCkgew0KKyAg
ICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisgICAgICAgIHZhciBub2RlID0gdGhpcy5v
dXRwdXRfZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpOw0KKyAgICAgICAgaWYgKG5vZGUp
IHsNCisgICAgICAgICAgICB0aGlzLm91dHB1dF9ub2RlID0gbm9kZTsNCisgICAgICAgIH0NCisg
ICAgfTsNCisNCisgICAgT3V0cHV0LnByb3RvdHlwZS5zaG93X3N0YXR1cyA9IGZ1bmN0aW9uKHRl
c3QpDQorICAgIHsNCisgICAgICAgIGlmICh0aGlzLnBoYXNlIDwgdGhpcy5TVEFSVEVEKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIHRoaXMuaW5pdCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAg
aWYgKCF0aGlzLmVuYWJsZWQpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgaWYgKHRoaXMucGhhc2UgPCB0aGlzLkhBVkVfUkVTVUxUUykNCisg
ICAgICAgIHsNCisgICAgICAgICAgICB0aGlzLnJlc29sdmVfbG9nKCk7DQorICAgICAgICAgICAg
dGhpcy5waGFzZSA9IHRoaXMuSEFWRV9SRVNVTFRTOw0KKyAgICAgICAgfQ0KKyAgICAgICAgdGhp
cy5kb25lX2NvdW50Kys7DQorICAgICAgICBpZiAodGhpcy5vdXRwdXRfbm9kZSkNCisgICAgICAg
IHsNCisgICAgICAgICAgICBpZiAodGhpcy5kb25lX2NvdW50IDwgMTAwDQorICAgICAgICAgICAg
fHwgKHRoaXMuZG9uZV9jb3VudCA8IDEwMDAgJiYgdGhpcy5kb25lX2NvdW50ICUgMTAwID09IDAp
DQorICAgICAgICAgICAgfHwgdGhpcy5kb25lX2NvdW50ICUgMTAwMCA9PSAwKSB7DQorICAgICAg
ICAgICAgICAgIHRoaXMub3V0cHV0X25vZGUudGV4dENvbnRlbnQgPSAiUnVubmluZywgIg0KKyAg
ICAgICAgICAgICAgICAgICAgKyB0aGlzLmRvbmVfY291bnQgKyAiIGNvbXBsZXRlLCAiDQorICAg
ICAgICAgICAgICAgICAgICArIHRlc3RzLm51bV9wZW5kaW5nICsgIiByZW1haW4iOw0KKyAgICAg
ICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfTsNCisNCisgICAgT3V0cHV0LnByb3RvdHlwZS5z
aG93X3Jlc3VsdHMgPSBmdW5jdGlvbiAodGVzdHMsIGhhcm5lc3Nfc3RhdHVzKQ0KKyAgICB7DQor
ICAgICAgICBpZiAodGhpcy5waGFzZSA+PSB0aGlzLkNPTVBMRVRFKSB7DQorICAgICAgICAgICAg
cmV0dXJuOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKCF0aGlz
Lm91dHB1dF9ub2RlKSB7DQorICAgICAgICAgICAgdGhpcy5yZXNvbHZlX2xvZygpOw0KKyAgICAg
ICAgfQ0KKyAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMuQ09NUExFVEU7DQorDQorICAgICAgICB2
YXIgbG9nID0gdGhpcy5vdXRwdXRfbm9kZTsNCisgICAgICAgIGlmICghbG9nKQ0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisgICAgICAgIHZhciBvdXRwdXRf
ZG9jdW1lbnQgPSB0aGlzLm91dHB1dF9kb2N1bWVudDsNCisNCisgICAgICAgIHdoaWxlIChsb2cu
bGFzdENoaWxkKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGxvZy5yZW1vdmVDaGlsZChsb2cu
bGFzdENoaWxkKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChzY3JpcHRfcHJlZml4ICE9
IG51bGwpIHsNCisgICAgICAgICAgICB2YXIgc3R5bGVzaGVldCA9IG91dHB1dF9kb2N1bWVudC5j
cmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJsaW5rIik7DQorICAgICAgICAgICAgc3R5bGVzaGVl
dC5zZXRBdHRyaWJ1dGUoInJlbCIsICJzdHlsZXNoZWV0Iik7DQorICAgICAgICAgICAgc3R5bGVz
aGVldC5zZXRBdHRyaWJ1dGUoImhyZWYiLCBzY3JpcHRfcHJlZml4ICsgInRlc3RoYXJuZXNzLmNz
cyIpOw0KKyAgICAgICAgICAgIHZhciBoZWFkcyA9IG91dHB1dF9kb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiaGVhZCIpOw0KKyAgICAgICAgICAgIGlmIChoZWFkcy5sZW5ndGgpIHsNCisg
ICAgICAgICAgICAgICAgaGVhZHNbMF0uYXBwZW5kQ2hpbGQoc3R5bGVzaGVldCk7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgdmFyIHN0YXR1c190ZXh0ID0ge307DQor
ICAgICAgICBzdGF0dXNfdGV4dFtUZXN0LnByb3RvdHlwZS5QQVNTXSA9ICJQYXNzIjsNCisgICAg
ICAgIHN0YXR1c190ZXh0W1Rlc3QucHJvdG90eXBlLkZBSUxdID0gIkZhaWwiOw0KKyAgICAgICAg
c3RhdHVzX3RleHRbVGVzdC5wcm90b3R5cGUuVElNRU9VVF0gPSAiVGltZW91dCI7DQorICAgICAg
ICBzdGF0dXNfdGV4dFtUZXN0LnByb3RvdHlwZS5OT1RSVU5dID0gIk5vdCBSdW4iOw0KKw0KKyAg
ICAgICAgdmFyIHN0YXR1c19udW1iZXIgPSB7fTsNCisgICAgICAgIGZvckVhY2godGVzdHMsIGZ1
bmN0aW9uKHRlc3QpIHsNCisgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBzdGF0dXNf
dGV4dFt0ZXN0LnN0YXR1c107DQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzX251bWJl
ci5oYXNPd25Qcm9wZXJ0eShzdGF0dXMpKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXR1c19udW1iZXJbc3RhdHVzXSArPSAxOw0KKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfbnVt
YmVyW3N0YXR1c10gPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAg
ICB9KTsNCisNCisgICAgICAgIGZ1bmN0aW9uIHN0YXR1c19jbGFzcyhzdGF0dXMpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1cy5yZXBsYWNlKC9ccy9nLCAnJykudG9Mb3dl
ckNhc2UoKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHZhciBzdW1tYXJ5X3RlbXBsYXRlID0g
WyJzZWN0aW9uIiwgeyJpZCI6InN1bW1hcnkifSwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFsiaDIiLCB7fSwgIlN1bW1hcnkiXSwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFsicCIsIHt9LCAiRm91bmQgJHtudW1fdGVzdHN9IHRlc3RzIl0sDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih2YXJzKSB7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHJ2ID0gW1siZGl2Iiwge31dXTsNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaT0wOw0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdoaWxlIChzdGF0dXNfdGV4dC5oYXNPd25Qcm9wZXJ0eShpKSkgew0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzX251bWJl
ci5oYXNPd25Qcm9wZXJ0eShzdGF0dXNfdGV4dFtpXSkpIHsNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBzdGF0dXNfdGV4dFtpXTsNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ2WzBdLnB1c2goWyJk
aXYiLCB7ImNsYXNzIjpzdGF0dXNfY2xhc3Moc3RhdHVzKX0sDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImxhYmVsIiwge30sDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJp
bnB1dCIsIHt0eXBlOiJjaGVja2JveCIsIGNoZWNrZWQ6ImNoZWNrZWQifV0sDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX251
bWJlcltzdGF0dXNdICsgIiAiICsgc3RhdHVzXV0pOw0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGkrKzsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ2Ow0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfV07DQorDQorICAgICAgICBsb2cuYXBwZW5kQ2hpbGQocmVuZGVy
KHN1bW1hcnlfdGVtcGxhdGUsIHtudW1fdGVzdHM6dGVzdHMubGVuZ3RofSwgb3V0cHV0X2RvY3Vt
ZW50KSk7DQorDQorICAgICAgICBmb3JFYWNoKG91dHB1dF9kb2N1bWVudC5xdWVyeVNlbGVjdG9y
QWxsKCJzZWN0aW9uI3N1bW1hcnkgbGFiZWwiKSwNCisgICAgICAgICAgICAgICAgZnVuY3Rpb24o
ZWxlbWVudCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgb25fZXZl
bnQoZWxlbWVudCwgImNsaWNrIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKGUpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG91dHB1dF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVz
dWx0cyIpID09PSBudWxsKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciByZXN1bHRfY2xhc3MgPSBlbGVtZW50LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCJj
bGFzcyIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZV9lbGVt
ZW50ID0gb3V0cHV0X2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInN0eWxlI2hpZGUtIiArIHJlc3Vs
dF9jbGFzcyk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0X2Vs
ZW1lbnQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0Iik7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzdHlsZV9lbGVtZW50ICYmICFpbnB1dF9lbGVtZW50LmNo
ZWNrZWQpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVfZWxl
bWVudCA9IG91dHB1dF9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJzdHlsZSIp
Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZV9lbGVtZW50Lmlk
ID0gImhpZGUtIiArIHJlc3VsdF9jbGFzczsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGVfZWxlbWVudC5pbm5lckhUTUwgPSAidGFibGUjcmVzdWx0cyA+IHRib2R5
ID4gdHIuIityZXN1bHRfY2xhc3MrIntkaXNwbGF5Om5vbmV9IjsNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3R5
bGVfZWxlbWVudCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChzdHlsZV9lbGVtZW50ICYmIGlucHV0X2VsZW1lbnQuY2hlY2tlZCkgew0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZV9lbGVtZW50LnBhcmVudE5vZGUucmVtb3Zl
Q2hpbGQoc3R5bGVfZWxlbWVudCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQorICAgICAgICAgICAgICAgIH0p
Ow0KKw0KKyAgICAgICAgLy8gVGhpcyB1c2Ugb2YgaW5uZXJIVE1MIHBsdXMgbWFudWFsIGVzY2Fw
aW5nIGlzIG5vdCByZWNvbW1lbmRlZCBpbg0KKyAgICAgICAgLy8gZ2VuZXJhbCwgYnV0IGlzIG5l
Y2Vzc2FyeSBoZXJlIGZvciBwZXJmb3JtYW5jZS4gIFVzaW5nIHRleHRDb250ZW50DQorICAgICAg
ICAvLyBvbiBlYWNoIGluZGl2aWR1YWwgPHRkPiBhZGRzIHRlbnMgb2Ygc2Vjb25kcyBvZiBleGVj
dXRpb24gdGltZSBmb3INCisgICAgICAgIC8vIGxhcmdlIHRlc3Qgc3VpdGVzICh0ZW5zIG9mIHRo
b3VzYW5kcyBvZiB0ZXN0cykuDQorICAgICAgICBmdW5jdGlvbiBlc2NhcGVfaHRtbChzKQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1wmL2csICImYW1wOyIpDQor
ICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88L2csICImbHQ7IikNCisgICAgICAgICAgICAgICAg
LnJlcGxhY2UoLyIvZywgIiZxdW90OyIpDQorICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2cs
ICImIzM5OyIpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbG9nLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iKSk7DQorICAgICAgICB2YXIgaHRtbCA9ICI8aDI+
RGV0YWlsczwvaDI+PHRhYmxlIGlkPSdyZXN1bHRzJz4iDQorICAgICAgICAgICAgKyAiPHRoZWFk
Pjx0cj48dGg+UmVzdWx0PC90aD48dGg+VGVzdCBOYW1lPC90aD48dGg+TWVzc2FnZTwvdGg+PC90
cj48L3RoZWFkPiINCisgICAgICAgICAgICArICI8dGJvZHk+IjsNCisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsNCisgICAgICAgICAgICBodG1sICs9ICc8
dHIgY2xhc3M9IicNCisgICAgICAgICAgICAgICAgKyBlc2NhcGVfaHRtbChzdGF0dXNfY2xhc3Mo
c3RhdHVzX3RleHRbdGVzdHNbaV0uc3RhdHVzXSkpDQorICAgICAgICAgICAgICAgICsgJyI+PHRk
PicNCisgICAgICAgICAgICAgICAgKyBlc2NhcGVfaHRtbChzdGF0dXNfdGV4dFt0ZXN0c1tpXS5z
dGF0dXNdKQ0KKyAgICAgICAgICAgICAgICArICI8L3RkPjx0ZD4iDQorICAgICAgICAgICAgICAg
ICsgZXNjYXBlX2h0bWwoZm9ybWF0X3N0cmluZyh0ZXN0c1tpXS5uYW1lKSkNCisgICAgICAgICAg
ICAgICAgKyAiPC90ZD48dGQ+Ig0KKyAgICAgICAgICAgICAgICArIGVzY2FwZV9odG1sKHRlc3Rz
W2ldLm1lc3NhZ2UgPyBmb3JtYXRfc3RyaW5nKHRlc3RzW2ldLm1lc3NhZ2UpIDogIiAiKQ0KKyAg
ICAgICAgICAgICAgICArICI8L3RkPjwvdHI+IjsNCisgICAgICAgIH0NCisgICAgICAgIGxvZy5s
YXN0Q2hpbGQuaW5uZXJIVE1MID0gaHRtbCArICI8L3Rib2R5PjwvdGFibGU+IjsNCisgICAgfTsN
CisNCisgICAgdmFyIG91dHB1dCA9IG5ldyBPdXRwdXQoKTsNCisgICAgYWRkX3N0YXJ0X2NhbGxi
YWNrKGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7b3V0cHV0LmluaXQocHJvcGVydGllcyk7fSk7DQor
ICAgIGFkZF9yZXN1bHRfY2FsbGJhY2soZnVuY3Rpb24gKHRlc3QpIHtvdXRwdXQuc2hvd19zdGF0
dXModGVzdHMpO30pOw0KKyAgICBhZGRfY29tcGxldGlvbl9jYWxsYmFjayhmdW5jdGlvbiAodGVz
dHMsIGhhcm5lc3Nfc3RhdHVzKSB7b3V0cHV0LnNob3dfcmVzdWx0cyh0ZXN0cywgaGFybmVzc19z
dGF0dXMpO30pOw0KKw0KKyAgICAvKg0KKyAgICAgKiBUZW1wbGF0ZSBjb2RlDQorICAgICAqDQor
ICAgICAqIEEgdGVtcGxhdGUgaXMganVzdCBhIGphdmFzY3JpcHQgc3RydWN0dXJlLiBBbiBlbGVt
ZW50IGlzIHJlcHJlc2VudGVkIGFzOg0KKyAgICAgKg0KKyAgICAgKiBbdGFnX25hbWUsIHthdHRy
X25hbWU6YXR0cl92YWx1ZX0sIGNoaWxkMSwgY2hpbGQyXQ0KKyAgICAgKg0KKyAgICAgKiB0aGUg
Y2hpbGRyZW4gY2FuIGVpdGhlciBiZSBzdHJpbmdzICh3aGljaCBhY3QgbGlrZSB0ZXh0IG5vZGVz
KSwgb3RoZXIgdGVtcGxhdGVzIG9yDQorICAgICAqIGZ1bmN0aW9ucyAoc2VlIGJlbG93KQ0KKyAg
ICAgKg0KKyAgICAgKiBBIHRleHQgbm9kZSBpcyByZXByZXNlbnRlZCBhcw0KKyAgICAgKg0KKyAg
ICAgKiBbInt0ZXh0fSIsIHZhbHVlXQ0KKyAgICAgKg0KKyAgICAgKiBTdHJpbmcgdmFsdWVzIGhh
dmUgYSBzaW1wbGUgc3Vic3RpdHV0aW9uIHN5bnRheDsgJHtmb299IHJlcHJlc2VudHMgYSB2YXJp
YWJsZSBmb28uDQorICAgICAqDQorICAgICAqIEl0IGlzIHBvc3NpYmxlIHRvIGVtYmVkIGxvZ2lj
IGluIHRlbXBsYXRlcyBieSB1c2luZyBhIGZ1bmN0aW9uIGluIGEgcGxhY2Ugd2hlcmUgYQ0KKyAg
ICAgKiBub2RlIHdvdWxkIHVzdWFsbHkgZ28uIFRoZSBmdW5jdGlvbiBtdXN0IGVpdGhlciByZXR1
cm4gcGFydCBvZiBhIHRlbXBsYXRlIG9yIG51bGwuDQorICAgICAqDQorICAgICAqIEluIGNhc2Vz
IHdoZXJlIGEgc2V0IG9mIG5vZGVzIGFyZSByZXF1aXJlZCBhcyBvdXRwdXQgcmF0aGVyIHRoYW4g
YSBzaW5nbGUgbm9kZQ0KKyAgICAgKiB3aXRoIGNoaWxkcmVuIGl0IGlzIHBvc3NpYmxlIHRvIGp1
c3QgdXNlIGEgbGlzdA0KKyAgICAgKiBbbm9kZTEsIG5vZGUyLCBub2RlM10NCisgICAgICoNCisg
ICAgICogVXNhZ2U6DQorICAgICAqDQorICAgICAqIHJlbmRlcih0ZW1wbGF0ZSwgc3Vic3RpdHV0
aW9ucykgLSB0YWtlIGEgdGVtcGxhdGUgYW5kIGFuIG9iamVjdCBtYXBwaW5nDQorICAgICAqIHZh
cmlhYmxlIG5hbWVzIHRvIHBhcmFtZXRlcnMgYW5kIHJldHVybiBlaXRoZXIgYSBET00gbm9kZSBv
ciBhIGxpc3Qgb2YgRE9NIG5vZGVzDQorICAgICAqDQorICAgICAqIHN1YnN0aXR1dGUodGVtcGxh
dGUsIHN1YnN0aXR1dGlvbnMpIC0gdGFrZSBhIHRlbXBsYXRlIGFuZCB2YXJpYWJsZSBtYXBwaW5n
IG9iamVjdCwNCisgICAgICogbWFrZSB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9ucyBhbmQgcmV0
dXJuIHRoZSBzdWJzdGl0dXRlZCB0ZW1wbGF0ZQ0KKyAgICAgKg0KKyAgICAgKi8NCisNCisgICAg
ZnVuY3Rpb24gaXNfc2luZ2xlX25vZGUodGVtcGxhdGUpDQorICAgIHsNCisgICAgICAgIHJldHVy
biB0eXBlb2YgdGVtcGxhdGVbMF0gPT09ICJzdHJpbmciOw0KKyAgICB9DQorDQorICAgIGZ1bmN0
aW9uIHN1YnN0aXR1dGUodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMpDQorICAgIHsNCisgICAgICAg
IGlmICh0eXBlb2YgdGVtcGxhdGUgPT09ICJmdW5jdGlvbiIpIHsNCisgICAgICAgICAgICB2YXIg
cmVwbGFjZW1lbnQgPSB0ZW1wbGF0ZShzdWJzdGl0dXRpb25zKTsNCisgICAgICAgICAgICBpZiAo
cmVwbGFjZW1lbnQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB2YXIgcnYgPSBz
dWJzdGl0dXRlKHJlcGxhY2VtZW50LCBzdWJzdGl0dXRpb25zKTsNCisgICAgICAgICAgICAgICAg
cmV0dXJuIHJ2Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAg
ICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCisgICAgICAgICAgICB9DQorICAg
ICAgICB9DQorICAgICAgICBlbHNlIGlmIChpc19zaW5nbGVfbm9kZSh0ZW1wbGF0ZSkpDQorICAg
ICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVfc2luZ2xlKHRlbXBsYXRlLCBz
dWJzdGl0dXRpb25zKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisg
ICAgICAgICAgICByZXR1cm4gZmlsdGVyKG1hcCh0ZW1wbGF0ZSwgZnVuY3Rpb24oeCkgew0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZSh4LCBzdWJz
dGl0dXRpb25zKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgZnVuY3Rpb24o
eCkge3JldHVybiB4ICE9PSBudWxsO30pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1
bmN0aW9uIHN1YnN0aXR1dGVfc2luZ2xlKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKQ0KKyAgICB7
DQorICAgICAgICB2YXIgc3Vic3RpdHV0aW9uX3JlID0gL1wkeyhbXiB9XSopfS9nOw0KKw0KKyAg
ICAgICAgZnVuY3Rpb24gZG9fc3Vic3RpdHV0aW9uKGlucHV0KSB7DQorICAgICAgICAgICAgdmFy
IGNvbXBvbmVudHMgPSBpbnB1dC5zcGxpdChzdWJzdGl0dXRpb25fcmUpOw0KKyAgICAgICAgICAg
IHZhciBydiA9IFtdOw0KKyAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxjb21wb25lbnRzLmxl
bmd0aDsgaSs9MikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJ2LnB1c2goY29t
cG9uZW50c1tpXSk7DQorICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRzW2krMV0pDQorICAg
ICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHJ2LnB1c2goU3RyaW5nKHN1YnN0
aXR1dGlvbnNbY29tcG9uZW50c1tpKzFdXSkpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgIHJldHVybiBydjsNCisgICAgICAgIH0NCisNCisgICAgICAg
IHZhciBydiA9IFtdOw0KKyAgICAgICAgcnYucHVzaChkb19zdWJzdGl0dXRpb24oU3RyaW5nKHRl
bXBsYXRlWzBdKSkuam9pbigiIikpOw0KKw0KKyAgICAgICAgaWYgKHRlbXBsYXRlWzBdID09PSAi
e3RleHR9Iikgew0KKyAgICAgICAgICAgIHN1YnN0aXR1dGVfY2hpbGRyZW4odGVtcGxhdGUuc2xp
Y2UoMSksIHJ2KTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgc3Vic3RpdHV0ZV9h
dHRycyh0ZW1wbGF0ZVsxXSwgcnYpOw0KKyAgICAgICAgICAgIHN1YnN0aXR1dGVfY2hpbGRyZW4o
dGVtcGxhdGUuc2xpY2UoMiksIHJ2KTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGZ1bmN0aW9u
IHN1YnN0aXR1dGVfYXR0cnMoYXR0cnMsIHJ2KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJ2
WzFdID0ge307DQorICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0ZW1wbGF0ZVsxXSkNCisg
ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGlmIChhdHRycy5oYXNPd25Qcm9wZXJ0eShu
YW1lKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdmFyIG5ld19u
YW1lID0gZG9fc3Vic3RpdHV0aW9uKG5hbWUpLmpvaW4oIiIpOw0KKyAgICAgICAgICAgICAgICAg
ICAgdmFyIG5ld192YWx1ZSA9IGRvX3N1YnN0aXR1dGlvbihhdHRyc1tuYW1lXSkuam9pbigiIik7
DQorICAgICAgICAgICAgICAgICAgICBydlsxXVtuZXdfbmFtZV0gPSBuZXdfdmFsdWU7DQorICAg
ICAgICAgICAgICAgIH07DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg
ZnVuY3Rpb24gc3Vic3RpdHV0ZV9jaGlsZHJlbihjaGlsZHJlbiwgcnYpDQorICAgICAgICB7DQor
ICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNoaWxkcmVuLmxlbmd0aDsgaSsrKQ0KKyAgICAg
ICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldIGluc3RhbmNlb2YgT2Jq
ZWN0KSB7DQorICAgICAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBzdWJzdGl0dXRl
KGNoaWxkcmVuW2ldLCBzdWJzdGl0dXRpb25zKTsNCisgICAgICAgICAgICAgICAgICAgIGlmIChy
ZXBsYWNlbWVudCAhPT0gbnVsbCkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNfc2luZ2xlX25vZGUocmVwbGFjZW1lbnQpKQ0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnYucHVzaChy
ZXBsYWNlbWVudCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4dGVuZChydiwgcmVwbGFjZW1lbnQpOw0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0K
KyAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgICAgIGV4dGVuZChydiwgZG9fc3Vic3RpdHV0aW9uKFN0cmluZyhjaGlsZHJlbltpXSkpKTsN
CisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICByZXR1cm4g
cnY7DQorICAgICAgICB9DQorDQorICAgICAgICByZXR1cm4gcnY7DQorICAgIH0NCisNCisgZnVu
Y3Rpb24gbWFrZV9kb21fc2luZ2xlKHRlbXBsYXRlLCBkb2MpDQorIHsNCisgICAgIHZhciBvdXRw
dXRfZG9jdW1lbnQgPSBkb2MgfHwgZG9jdW1lbnQ7DQorICAgICBpZiAodGVtcGxhdGVbMF0gPT09
ICJ7dGV4dH0iKQ0KKyAgICAgew0KKyAgICAgICAgIHZhciBlbGVtZW50ID0gb3V0cHV0X2RvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKCIiKTsNCisgICAgICAgICBmb3IgKHZhciBpPTE7IGk8dGVtcGxh
dGUubGVuZ3RoOyBpKyspDQorICAgICAgICAgew0KKyAgICAgICAgICAgICBlbGVtZW50LmRhdGEg
Kz0gdGVtcGxhdGVbaV07DQorICAgICAgICAgfQ0KKyAgICAgfQ0KKyAgICAgZWxzZQ0KKyAgICAg
ew0KKyAgICAgICAgIHZhciBlbGVtZW50ID0gb3V0cHV0X2RvY3VtZW50LmNyZWF0ZUVsZW1lbnRO
Uyh4aHRtbF9ucywgdGVtcGxhdGVbMF0pOw0KKyAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGVt
cGxhdGVbMV0pIHsNCisgICAgICAgICAgICAgaWYgKHRlbXBsYXRlWzFdLmhhc093blByb3BlcnR5
KG5hbWUpKQ0KKyAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0
dHJpYnV0ZShuYW1lLCB0ZW1wbGF0ZVsxXVtuYW1lXSk7DQorICAgICAgICAgICAgIH0NCisgICAg
ICAgICB9DQorICAgICAgICAgZm9yICh2YXIgaT0yOyBpPHRlbXBsYXRlLmxlbmd0aDsgaSsrKQ0K
KyAgICAgICAgIHsNCisgICAgICAgICAgICAgaWYgKHRlbXBsYXRlW2ldIGluc3RhbmNlb2YgT2Jq
ZWN0KQ0KKyAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICB2YXIgc3ViX2VsZW1lbnQg
PSBtYWtlX2RvbSh0ZW1wbGF0ZVtpXSk7DQorICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVu
ZENoaWxkKHN1Yl9lbGVtZW50KTsNCisgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICBlbHNl
DQorICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgIHZhciB0ZXh0X25vZGUgPSBvdXRw
dXRfZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGVtcGxhdGVbaV0pOw0KKyAgICAgICAgICAgICAg
ICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0X25vZGUpOw0KKyAgICAgICAgICAgICB9DQorICAg
ICAgICAgfQ0KKyAgICAgfQ0KKw0KKyAgICAgcmV0dXJuIGVsZW1lbnQ7DQorIH0NCisNCisNCisN
CisgZnVuY3Rpb24gbWFrZV9kb20odGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMsIG91dHB1dF9kb2N1
bWVudCkNCisgICAgew0KKyAgICAgICAgaWYgKGlzX3NpbmdsZV9ub2RlKHRlbXBsYXRlKSkNCisg
ICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gbWFrZV9kb21fc2luZ2xlKHRlbXBsYXRlLCBv
dXRwdXRfZG9jdW1lbnQpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIHJldHVybiBtYXAodGVtcGxhdGUsIGZ1bmN0aW9uKHgpIHsNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZV9kb21fc2luZ2xlKHgsIG91dHB1dF9kb2N1
bWVudCk7DQorICAgICAgICAgICAgICAgICAgICAgICB9KTsNCisgICAgICAgIH0NCisgICAgfQ0K
Kw0KKyBmdW5jdGlvbiByZW5kZXIodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMsIG91dHB1dF9kb2N1
bWVudCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIG1ha2VfZG9tKHN1YnN0aXR1dGUodGVtcGxh
dGUsIHN1YnN0aXR1dGlvbnMpLCBvdXRwdXRfZG9jdW1lbnQpOw0KKyAgICB9DQorDQorICAgIC8q
DQorICAgICAqIFV0aWxpdHkgZnVuY2lvbnMNCisgICAgICovDQorICAgIGZ1bmN0aW9uIGFzc2Vy
dChleHBlY3RlZF90cnVlLCBmdW5jdGlvbl9uYW1lLCBkZXNjcmlwdGlvbiwgZXJyb3IsIHN1YnN0
aXR1dGlvbnMpDQorICAgIHsNCisgICAgICAgIGlmIChleHBlY3RlZF90cnVlICE9PSB0cnVlKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtYWtlX21l
c3NhZ2UoZnVuY3Rpb25fbmFtZSwgZGVzY3JpcHRpb24sDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwgc3Vic3RpdHV0aW9ucykpOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG1lc3NhZ2Up
DQorICAgIHsNCisgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7DQorICAgIH0NCisNCisg
ICAgZnVuY3Rpb24gbWFrZV9tZXNzYWdlKGZ1bmN0aW9uX25hbWUsIGRlc2NyaXB0aW9uLCBlcnJv
ciwgc3Vic3RpdHV0aW9ucykNCisgICAgew0KKyAgICAgICAgZm9yICh2YXIgcCBpbiBzdWJzdGl0
dXRpb25zKSB7DQorICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbnMuaGFzT3duUHJvcGVydHko
cCkpIHsNCisgICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uc1twXSA9IGZvcm1hdF92YWx1ZShz
dWJzdGl0dXRpb25zW3BdKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICB2
YXIgbm9kZV9mb3JtID0gc3Vic3RpdHV0ZShbInt0ZXh0fSIsICIke2Z1bmN0aW9uX25hbWV9OiAk
e2Rlc2NyaXB0aW9ufSIgKyBlcnJvcl0sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtZXJnZSh7ZnVuY3Rpb25fbmFtZTpmdW5jdGlvbl9uYW1lLA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOihkZXNjcmlwdGlvbj9kZXNj
cmlwdGlvbiArICIgIjoiIil9LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN1YnN0aXR1dGlvbnMpKTsNCisgICAgICAgIHJldHVybiBub2RlX2Zvcm0uc2xpY2Uo
MSkuam9pbigiIik7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxs
YWJsZSwgdGhpc09iaikgew0KKyAgICAgICAgdmFyIHJ2ID0gW107DQorICAgICAgICBmb3IgKHZh
ciBpPTA7IGk8YXJyYXkubGVuZ3RoOyBpKyspDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYg
KGFycmF5Lmhhc093blByb3BlcnR5KGkpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgdmFyIHBhc3MgPSBjYWxsYWJsZS5jYWxsKHRoaXNPYmosIGFycmF5W2ldLCBpLCBhcnJheSk7
DQorICAgICAgICAgICAgICAgIGlmIChwYXNzKSB7DQorICAgICAgICAgICAgICAgICAgICBydi5w
dXNoKGFycmF5W2ldKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAg
ICAgIH0NCisgICAgICAgIHJldHVybiBydjsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBtYXAo
YXJyYXksIGNhbGxhYmxlLCB0aGlzT2JqKQ0KKyAgICB7DQorICAgICAgICB2YXIgcnYgPSBbXTsN
CisgICAgICAgIHJ2Lmxlbmd0aCA9IGFycmF5Lmxlbmd0aDsNCisgICAgICAgIGZvciAodmFyIGk9
MDsgaTxhcnJheS5sZW5ndGg7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoYXJy
YXkuaGFzT3duUHJvcGVydHkoaSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBy
dltpXSA9IGNhbGxhYmxlLmNhbGwodGhpc09iaiwgYXJyYXlbaV0sIGksIGFycmF5KTsNCisgICAg
ICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICByZXR1cm4gcnY7DQorICAgIH0NCisNCisg
ICAgZnVuY3Rpb24gZXh0ZW5kKGFycmF5LCBpdGVtcykNCisgICAgew0KKyAgICAgICAgQXJyYXku
cHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXksIGl0ZW1zKTsNCisgICAgfQ0KKw0KKyAgICBmdW5j
dGlvbiBmb3JFYWNoIChhcnJheSwgY2FsbGJhY2ssIHRoaXNPYmopDQorICAgIHsNCisgICAgICAg
IGZvciAodmFyIGk9MDsgaTxhcnJheS5sZW5ndGg7IGkrKykNCisgICAgICAgIHsNCisgICAgICAg
ICAgICBpZiAoYXJyYXkuaGFzT3duUHJvcGVydHkoaSkpDQorICAgICAgICAgICAgew0KKyAgICAg
ICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNPYmosIGFycmF5W2ldLCBpLCBhcnJheSk7DQor
ICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIG1lcmdl
KGEsYikNCisgICAgew0KKyAgICAgICAgdmFyIHJ2ID0ge307DQorICAgICAgICB2YXIgcDsNCisg
ICAgICAgIGZvciAocCBpbiBhKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJ2W3BdID0gYVtw
XTsNCisgICAgICAgIH0NCisgICAgICAgIGZvciAocCBpbiBiKSB7DQorICAgICAgICAgICAgcnZb
cF0gPSBiW3BdOw0KKyAgICAgICAgfQ0KKyAgICAgICAgcmV0dXJuIHJ2Ow0KKyAgICB9DQorDQor
ICAgIGZ1bmN0aW9uIGV4cG9zZShvYmplY3QsIG5hbWUpDQorICAgIHsNCisgICAgICAgIHZhciBj
b21wb25lbnRzID0gbmFtZS5zcGxpdCgiLiIpOw0KKyAgICAgICAgdmFyIHRhcmdldCA9IHdpbmRv
dzsNCisgICAgICAgIGZvciAodmFyIGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aCAtIDE7IGkrKykN
CisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoIShjb21wb25lbnRzW2ldIGluIHRhcmdldCkp
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB0YXJnZXRbY29tcG9uZW50c1tpXV0g
PSB7fTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2NvbXBv
bmVudHNbaV1dOw0KKyAgICAgICAgfQ0KKyAgICAgICAgdGFyZ2V0W2NvbXBvbmVudHNbY29tcG9u
ZW50cy5sZW5ndGggLSAxXV0gPSBvYmplY3Q7DQorICAgIH0NCisNCisgZnVuY3Rpb24gYW5jZXN0
b3Jfd2luZG93cygpIHsNCisgICAgIC8vR2V0IHRoZSB3aW5kb3dzIFtzZWxmIC4uLiB0b3BdIGFz
IGFuIGFycmF5DQorICAgICBpZiAoInJlc3VsdF9jYWNoZSIgaW4gYW5jZXN0b3Jfd2luZG93cykN
CisgICAgIHsNCisgICAgICAgICByZXR1cm4gYW5jZXN0b3Jfd2luZG93cy5yZXN1bHRfY2FjaGU7
DQorICAgICB9DQorICAgICB2YXIgcnYgPSBbc2VsZl07DQorICAgICB2YXIgdyA9IHNlbGY7DQor
ICAgICB3aGlsZSAodyAhPSB3LnBhcmVudCkNCisgICAgIHsNCisgICAgICAgICB3ID0gdy5wYXJl
bnQ7DQorICAgICAgICAgcnYucHVzaCh3KTsNCisgICAgIH0NCisgICAgIGFuY2VzdG9yX3dpbmRv
d3MucmVzdWx0X2NhY2hlID0gcnY7DQorICAgICByZXR1cm4gcnY7DQorIH0NCisNCit9KSgpOw0K
Ky8vIHZpbTogc2V0IGV4cGFuZHRhYiBzaGlmdHdpZHRoPTQgdGFic3RvcD00OgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyBiL0xheW91dFRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTY2ODg5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzCkBA
IC0wLDAgKzEsNzQgQEAKKy8qDQorICogVEhJUyBGSUxFIElOVEVOVElPTkFMTFkgTEVGVCBCTEFO
Sw0KKyAqDQorICogTW9yZSBzcGVjaWZpY2FsbHksIHRoaXMgZmlsZSBpcyBpbnRlbmRlZCBmb3Ig
dmVuZG9ycyB0byBpbXBsZW1lbnQNCisgKiBjb2RlIG5lZWRlZCB0byBpbnRlZ3JhdGUgdGVzdGhh
cm5lc3MuanMgdGVzdHMgd2l0aCB0aGVpciBvd24gdGVzdCBzeXN0ZW1zLg0KKyAqDQorICogVHlw
aWNhbGx5IHN1Y2ggaW50ZWdyYXRpb24gd2lsbCBhdHRhY2ggY2FsbGJhY2tzIHdoZW4gZWFjaCB0
ZXN0IGlzDQorICogaGFzIHJ1biwgdXNpbmcgYWRkX3Jlc3VsdF9jYWxsYmFjayhjYWxsYmFjayh0
ZXN0KSksIG9yIHdoZW4gdGhlIHdob2xlIHRlc3QgZmlsZSBoYXMNCisgKiBjb21wbGV0ZWQsIHVz
aW5nIGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGNhbGxiYWNrKHRlc3RzLCBoYXJuZXNzX3N0YXR1
cykpLg0KKyAqDQorICogRm9yIG1vcmUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgY2FsbGJhY2sg
ZnVuY3Rpb25zIGFuZCB0aGUNCisgKiBwYXJhbWV0ZXJzIHRoZXkgYXJlIGNhbGxlZCB3aXRoIHNl
ZSB0ZXN0aGFybmVzcy5qcw0KKyAqLw0KKw0KKy8vIFNldHVwIGZvciBXZWJLaXQgSmF2YVNjcmlw
dCB0ZXN0cw0KK2lmIChzZWxmLmxheW91dFRlc3RDb250cm9sbGVyKQ0KKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7DQorDQorLy8gRnVuY3Rpb24gdXNlZCB0byBjb252ZXJ0
IHRoZSB0ZXN0IHN0YXR1cyBjb2RlIGludG8NCisvLyB0aGUgY29ycmVzcG9uZGluZyBzdHJpbmcN
CitmdW5jdGlvbiBjb252ZXJ0UmVzdWx0KHJlc3VsdFN0YXR1cyl7DQorCWlmKHJlc3VsdFN0YXR1
cyA9PSAwKQ0KKwkJcmV0dXJuKCJQQVNTIik7DQorCWVsc2UgaWYocmVzdWx0U3RhdHVzID09IDEp
DQorCQlyZXR1cm4oIkZBSUwiKTsNCisJZWxzZSBpZihyZXN1bHRTdGF0dXMgPT0gMikNCisJCXJl
dHVybigiVElNRU9VVCIpOw0KKwllbHNlDQorCQlyZXR1cm4oIk5PVFJVTiIpOw0KK30NCisNCisv
KiBEaXNhYmxlIHRoZSBkZWZhdWx0IG91dHB1dCBvZiB0ZXN0aGFybmVzcy5qcy4gIFRoZSBkZWZh
dWx0IG91dHB1dCBmb3JtYXRzDQorKiAgdGVzdCByZXN1bHRzIGludG8gYW4gSFRNTCB0YWJsZS4g
IFdoZW4gdGhhdCB0YWJsZSBpcyBkdW1wZWQgYXMgdGV4dCwgbm8NCisqICBzcGFjaW5nIGJldHdl
ZW4gY2VsbHMgaXMgcHJlc2VydmVkLCBhbmQgaXQgaXMgdGhlcmVmb3JlIG5vdCByZWFkYWJsZS4g
QnkNCisqICBzZXR0aW5nIG91dHB1dCB0byBmYWxzZSwgdGhlIEhUTUwgdGFibGUgd2lsbCBub3Qg
YmUgY3JlYXRlZA0KKyovDQorc2V0dXAoeyJvdXRwdXQiOmZhbHNlfSk7DQorDQorLyogIFVzaW5n
IGEgY2FsbGJhY2sgZnVuY3Rpb24sIHRlc3QgcmVzdWx0cyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBw
YWdlIGluIGEgDQorKiAgIG1hbm5lciB0aGF0IGFsbG93cyBkdW1wQXNUZXh0IHRvIHByb2R1Y2Ug
cmVhZGFibGUgdGVzdCByZXN1bHRzDQorKi8NCithZGRfY29tcGxldGlvbl9jYWxsYmFjayhmdW5j
dGlvbiAodGVzdHMsIGhhcm5lc3Nfc3RhdHVzKXsNCisJDQorCS8vIENyZWF0ZSBlbGVtZW50IHRv
IGhvbGQgcmVzdWx0cw0KKwl2YXIgcmVzdWx0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInBy
ZSIpOw0KKwkNCisJLy8gRGVjbGFyZSByZXN1bHQgc3RyaW5nDQorCXZhciByZXN1bHRTdHIgPSAi
XG4iOw0KKwkNCisJLy8gQ2hlY2sgaGFybmVzc19zdGF0dXMuICBJZiBpdCBpcyBub3QgMCwgdGVz
dHMgZGlkIG5vdA0KKwkvLyBleGVjdXRlIGNvcnJlY3RseSwgb3V0cHV0IHRoZSBlcnJvciBjb2Rl
IGFuZCBtZXNzYWdlDQorCWlmKGhhcm5lc3Nfc3RhdHVzLnN0YXR1cyAhPSAwKXsNCisJCXJlc3Vs
dFN0ciArPSAiSGFybmVzcyBFcnJvci4gaGFybmVzc19zdGF0dXMuc3RhdHVzID0gIiArIA0KKwkJ
CQkJIGhhcm5lc3Nfc3RhdHVzLnN0YXR1cyArDQorCQkJCQkgIiAsIGhhcm5lc3Nfc3RhdHVzLm1l
c3NhZ2UgPSAiICsNCisJCQkJCSBoYXJuZXNzX3N0YXR1cy5tZXNzYWdlOw0KKwl9DQorCWVsc2Ug
ew0KKwkJLy8gSXRlcmF0ZSB0aHJvdWdoIHRlc3RzIGFycmF5IGFuZCBidWlsZCBzdHJpbmcgdGhh
dCBjb250YWlucw0KKwkJLy8gcmVzdWx0cyBmb3IgYWxsIHRlc3RzDQorCQlmb3IodmFyIGk9MDsg
aTx0ZXN0cy5sZW5ndGg7IGkrKyl7CQkJCSANCisJCQlyZXN1bHRTdHIgKz0gY29udmVydFJlc3Vs
dCh0ZXN0c1tpXS5zdGF0dXMpICsgIiAiICsgDQorCQkJCQkJKCAodGVzdHNbaV0ubmFtZSE9bnVs
bCkgPyB0ZXN0c1tpXS5uYW1lIDogIiIgKSArICIgIiArDQorCQkJCQkJKCAodGVzdHNbaV0ubWVz
c2FnZSE9bnVsbCkgPyB0ZXN0c1tpXS5tZXNzYWdlIDogIiIgKSArIA0KKwkJCQkJCSJcbiI7DQor
CQl9CQkJDQorCX0NCisNCisJLy8gU2V0IHJlc3VsdHMgZWxlbWVudCdzIGlubmVySFRNTCB0byB0
aGUgcmVzdWx0cyBzdHJpbmcNCisJcmVzdWx0cy5pbm5lckhUTUwgPSByZXN1bHRTdHI7DQorDQor
CS8vIEFkZCByZXN1bHRzIGVsZW1lbnQgdG8gZG9jdW1lbnQNCisJZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChyZXN1bHRzKTsNCit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>