<?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>110842</bug_id>
          
          <creation_ts>2013-02-25 21:25:17 -0800</creation_ts>
          <short_desc>Use perf.webkit.org JSON format in results page</short_desc>
          <delta_ts>2013-02-28 23:36:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>111145</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>dbates</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>mjs</cc>
    
    <cc>morrita</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>841601</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-25 21:25:17 -0800</bug_when>
    <thetext>Now that we&apos;re uploading results to perf.webkit.org using new JSON format, we should use the same format in results page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841612</commentid>
    <comment_count>1</comment_count>
      <attachid>190200</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-25 21:43:09 -0800</bug_when>
    <thetext>Created attachment 190200
Updated the results page template</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841687</commentid>
    <comment_count>2</comment_count>
      <attachid>190217</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-25 23:49:48 -0800</bug_when>
    <thetext>Created attachment 190217
Also change the default JSON format</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841689</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-25 23:52:32 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=190217) [details]
&gt; Also change the default JSON format

Turns out that I had to make more changes at once in order to not break various features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842441</commentid>
    <comment_count>4</comment_count>
      <attachid>190217</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-02-26 15:38:24 -0800</bug_when>
    <thetext>Comment on attachment 190217
Also change the default JSON format

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

python code looks fine. A couple of minor JS comments, but you probably want someone more familiar w/ JS and/or this code to review that.

&gt; PerformanceTests/resources/results-template.html:574
&gt; +        addTests(entry.tests, &apos;&apos;);

maybe I&apos;m missing something, but why make this a function to only call it once?

&gt; PerformanceTests/resources/statistics.js:84
&gt; +    var tDistributionQuantiles = {

Can you add a comment about what the values in this table are and where they come from, for those of us who are less informed in such things?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842445</commentid>
    <comment_count>5</comment_count>
      <attachid>190217</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-26 15:40:53 -0800</bug_when>
    <thetext>Comment on attachment 190217
Also change the default JSON format

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

&gt; PerformanceTests/resources/results-template.html:226
&gt; +    var unit = {&apos;FrameRate&apos;: &apos;fps&apos;,
&gt; +        &apos;Runs&apos;: &apos;runs/s&apos;,
&gt; +        &apos;Time&apos;: &apos;ms&apos;,
&gt; +        &apos;Malloc&apos;: &apos;bytes&apos;,
&gt; +        &apos;JSHeap&apos;: &apos;bytes&apos;}[metric];

I&apos;d cut this in two lines.

&gt; PerformanceTests/resources/results-template.html:370
&gt; -        min: minIsZero ? 0 : Math.min.apply(Math, results.map(function (result, index) { return result.min(); })) * 0.98,
&gt; -        max: Math.max.apply(Math, results.map(function (result, index) { return result.max(); })) * (minIsZero ? 1.1 : 1.01)}});
&gt; +        min: minIsZero ? 0 : overallMin - (overallMax - overallMin) * 0.1,
&gt; +        max: minIsZero ? overallMax * 1.1 : overallMax + (overallMax - overallMin) * 0.1}});

For clarity?: var margin = (overallMax - overallMin) * 0.1;

&gt; PerformanceTests/resources/statistics.js:37
&gt; +        return values.length ? values.reduce(function (a, b) { return a + b; }) : 0;

return values.reduce(function (a, b) { return a + b; }, 0)?

&gt; PerformanceTests/resources/statistics.js:41
&gt; +        return values.length ? values.reduce(function (sum, value) { return sum + value * value;}, 0) : 0;

ditto

&gt; PerformanceTests/resources/statistics.js:45
&gt; +    // See https://rniwa.com/2012-11-10/sample-standard-deviation-in-terms-of-sum-and-square-sum-of-samples/

hehe

&gt; PerformanceTests/resources/statistics.js:49
&gt; +        return Math.sqrt(squareSum / (numberOfSamples - 1) - sum * sum / (numberOfSamples - 1) / numberOfSamples);

I&apos;d split this on multiple lines.
And do (sum * sum) * numberOfSamples / (numberOfSamples - 1)

&gt; PerformanceTests/resources/statistics.js:86
&gt; +    var tDistributionQuantiles = {
&gt; +        0.9: [
&gt; +            3.077684, 1.885618, 1.637744, 1.533206, 1.475884, 1.439756, 1.414924, 1.396815, 1.383029, 1.372184,

Aren&apos;t those the one-tail numbers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842447</commentid>
    <comment_count>6</comment_count>
      <attachid>190217</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-26 15:42:34 -0800</bug_when>
    <thetext>Comment on attachment 190217
Also change the default JSON format

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

&gt;&gt; PerformanceTests/resources/results-template.html:574
&gt;&gt; +        addTests(entry.tests, &apos;&apos;);
&gt; 
&gt; maybe I&apos;m missing something, but why make this a function to only call it once?

It&apos;s recursive. See lines 569-570.

&gt;&gt; PerformanceTests/resources/statistics.js:84
&gt;&gt; +    var tDistributionQuantiles = {
&gt; 
&gt; Can you add a comment about what the values in this table are and where they come from, for those of us who are less informed in such things?

It&apos;s these http://www.math.uni-magdeburg.de/~rooff/statistics2/tabstud.pdf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842453</commentid>
    <comment_count>7</comment_count>
      <attachid>190217</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-26 15:44:48 -0800</bug_when>
    <thetext>Comment on attachment 190217
Also change the default JSON format

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

&gt;&gt; PerformanceTests/resources/statistics.js:86
&gt;&gt; +            3.077684, 1.885618, 1.637744, 1.533206, 1.475884, 1.439756, 1.414924, 1.396815, 1.383029, 1.372184,
&gt; 
&gt; Aren&apos;t those the one-tail numbers?

That&apos;s a good point. tDistributionCDFTail?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842458</commentid>
    <comment_count>8</comment_count>
      <attachid>190217</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-02-26 15:47:00 -0800</bug_when>
    <thetext>Comment on attachment 190217
Also change the default JSON format

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

&gt;&gt;&gt; PerformanceTests/resources/results-template.html:574
&gt;&gt;&gt; +        addTests(entry.tests, &apos;&apos;);
&gt;&gt; 
&gt;&gt; maybe I&apos;m missing something, but why make this a function to only call it once?
&gt; 
&gt; It&apos;s recursive. See lines 569-570.

Ah, right :).

&gt;&gt;&gt; PerformanceTests/resources/statistics.js:84
&gt;&gt;&gt; +    var tDistributionQuantiles = {
&gt;&gt; 
&gt;&gt; Can you add a comment about what the values in this table are and where they come from, for those of us who are less informed in such things?
&gt; 
&gt; It&apos;s these http://www.math.uni-magdeburg.de/~rooff/statistics2/tabstud.pdf

I meant add a comment to the code :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842462</commentid>
    <comment_count>9</comment_count>
      <attachid>190217</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-26 15:50:56 -0800</bug_when>
    <thetext>Comment on attachment 190217
Also change the default JSON format

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

&gt;&gt;&gt;&gt; PerformanceTests/resources/statistics.js:84
&gt;&gt;&gt;&gt; +    var tDistributionQuantiles = {
&gt;&gt;&gt; 
&gt;&gt;&gt; Can you add a comment about what the values in this table are and where they come from, for those of us who are less informed in such things?
&gt;&gt; 
&gt;&gt; It&apos;s these http://www.math.uni-magdeburg.de/~rooff/statistics2/tabstud.pdf
&gt; 
&gt; I meant add a comment to the code :).

I can&apos;t think of any useful comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842464</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-26 15:52:09 -0800</bug_when>
    <thetext>&gt; I&apos;d split this on multiple lines.
&gt; And do (sum * sum) * numberOfSamples / (numberOfSamples - 1)
&gt; 
&gt; &gt; PerformanceTests/resources/statistics.js:86
&gt; &gt; +    var tDistributionQuantiles = {
&gt; &gt; +        0.9: [
&gt; &gt; +            3.077684, 1.885618, 1.637744, 1.533206, 1.475884, 1.439756, 1.414924, 1.396815, 1.383029, 1.372184,
&gt; 
&gt; Aren&apos;t those the one-tail numbers?

Okay, Ryosuke just showed me. It is the one tail numbers, but he does the computation for a two-tails interval:
    var quantile = (1 - (1 - probability) / 2);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842471</commentid>
    <comment_count>11</comment_count>
      <attachid>190217</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-26 15:59:50 -0800</bug_when>
    <thetext>Comment on attachment 190217
Also change the default JSON format

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

&gt;&gt;&gt; PerformanceTests/resources/statistics.js:86
&gt;&gt;&gt; +            3.077684, 1.885618, 1.637744, 1.533206, 1.475884, 1.439756, 1.414924, 1.396815, 1.383029, 1.372184,
&gt;&gt; 
&gt;&gt; Aren&apos;t those the one-tail numbers?
&gt; 
&gt; That&apos;s a good point. tDistributionCDFTail?

Ugh.. what the heck I&apos;m talking about. It should be called tDistributionInverseCDF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842606</commentid>
    <comment_count>12</comment_count>
      <attachid>190419</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-26 19:11:54 -0800</bug_when>
    <thetext>Created attachment 190419
Fixed per comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842646</commentid>
    <comment_count>13</comment_count>
      <attachid>190419</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-26 20:28:59 -0800</bug_when>
    <thetext>Comment on attachment 190419
Fixed per comments

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

I don&apos;t like sum as an attribute for sum(values) because it is confusing with Statistics.sum. &quot;sumValues&quot; or &quot;accumulatedValues&quot; maybe?

&gt; PerformanceTests/resources/statistics.js:46
&gt; +    this.sampleStandardDeviation = function (numberOfSamples, sum, squareSum) {

I would have this private (_sampleStandardDeviation?) for now.

&gt; PerformanceTests/resources/statistics.js:61
&gt; +    this.confidenceIntervalDelta = function (confidenceLevel, numberOfSamples, sum, squareSum) {

I would have this private for now (starting with a _?), and have an other function taking values and returning the confidence interval.

&gt; PerformanceTests/resources/statistics.js:75
&gt; +        // d = c * S/sqrt(numberOfSamples) where c ~ t-distribution(degreesOfFreedom) and S is the sample standard deviation.

For clarity? // confidenceInterval = t-distribution@confidenceLevel * standardDeviation / sqrt(numberOfSamples)

&gt; PerformanceTests/resources/statistics.js:77
&gt; +        return deltas[degreesOfFreedom - 1] * this.sampleStandardDeviation(numberOfSamples, sum, squareSum) / Math.sqrt(numberOfSamples);

I think you meant to use delta here instead of deltas[degreesOfFreedom - 1].

&gt; Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py:264
&gt; +        if description:
&gt; +            contents_for_perf_webkit[&apos;description&apos;] = description
&gt; +
&gt; +        for key, value in {&apos;buildTime&apos;: self._datetime_in_ES5_compatible_iso_format(self._utc_timestamp),
&gt; +            &apos;platform&apos;: platform, &apos;revisions&apos;: revisions_for_perf_webkit,
&gt; +            &apos;builderName&apos;: builder_name, &apos;buildNumber&apos;: int(build_number) if build_number else None}.items():
&gt; +            if value:
&gt; +                contents_for_perf_webkit[key] = value

Please move the dictionary out of the loop.

Why is description handled differently from the other keys?
Can they really all evaluate to None? In which case would &quot;buildTime&quot; or &quot;platform&quot; be none?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842647</commentid>
    <comment_count>14</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-26 20:29:42 -0800</bug_when>
    <thetext>If you continue like that, I&apos;ll need to have someone send me my statistics textbooks :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842662</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-26 21:03:58 -0800</bug_when>
    <thetext>Committed r144141: &lt;http://trac.webkit.org/changeset/144141&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190200</attachid>
            <date>2013-02-25 21:43:09 -0800</date>
            <delta_ts>2013-02-25 23:49:45 -0800</delta_ts>
            <desc>Updated the results page template</desc>
            <filename>bug-110842-20130225213928.patch</filename>
            <type>text/plain</type>
            <size>24054</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDQwMDYpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTAyLTI1ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBwZXJmLndlYmtp
dC5vcmcgSlNPTiBmb3JtYXQgaW4gcmVzdWx0cyBwYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA4NDIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGVkIHRoZSByZXN1bHRzIHBhZ2UgdGVtcGxh
dGUgdG8gdXNlIHRoZSBuZXcgSlNPTiBmb3JtYXQuCisKKyAgICAgICAgU2luY2UgbmV3IEpTT04g
Zm9ybWF0IGRvZXNuJ3QgY29udGFpbiBzdGF0aXN0aWNzIHN1Y2ggYXMgc3RkZXYgYW5kIG1pbiwg
YWRkZWQgc3RhdGlzdGljcy5qcyB0byBjb21wdXRlCisgICAgICAgIHRoZXNlIHZhbHVlcy4gQWxz
byB1c2UgOTUlIHBlcmNlbnRpbGUgY29uZmlkZW5jZSBpbnRlcnZhbCBpbnN0ZWFkIG9mIHN0YW5k
YXJkIGRldmlhdGlvbiBpbiB2YXJpb3VzIHBsYWNlcy4KKworICAgICAgICAqIHJlc291cmNlcy9y
ZXN1bHRzLXRlbXBsYXRlLmh0bWw6IEFkZGVkIHN0YXRpc3RpY3MuanMgYXMgZGVwZW5kZW5jeS4K
KyAgICAgICAgKFRlc3RSZXN1bHQpOiBVcGRhdGVkIHRvIHRha2UgYSBtZXRyaWMgaW5zdGVhZCBv
ZiBpdHMgdGVzdC4gUmVwbGFjZWQgc3RkZXYoKSB3aXRoIGNvbmZpZGVuY2VJbnRlcnZhbERlbHRh
KCkKKyAgICAgICAgbm93IHRoYXQgd2UgaGF2ZSBhIGZhbmN5IFN0YXRpc3RpY3MgY2xhc3MuCisK
KyAgICAgICAgKFRlc3RSdW4ud2Via2l0UmV2aXNpb24pOgorICAgICAgICAoUGVyZlRlc3RNZXRy
aWMpOiBSZW5hbWVkIGZyb20gUGVyZlRlc3Qgc2luY2UgdGhpcyBvYmplY3Qgbm93IGVuY2Fwc3Vs
YXRlcyBlYWNoIG1lYXN1cmVtZW50IChzdWNoIGFzIHRpbWUsCisgICAgICAgIEpTIGhlYXAsIGFu
ZCBtYWxsb2MpIGluIHRlc3QuIEFsc28gYWRkZWQgYSBjb252ZXJzaW9uIHRhYmxlIGZyb20gYSBt
ZXRyaWMgbmFtZSB0byBhIHVuaXQgc2luY2UgbmV3IGZvcm1hdAorICAgICAgICBkb2Vzbid0IGNv
bnRhaW4gdW5pdHMuCisgICAgICAgIChQZXJmVGVzdE1ldHJpYy5uYW1lKTogVXBkYXRlZCB0byBj
b21wdXRlIHRoZSBmdWxsIG1ldHJpYyBuYW1lIGZyb20gdGVzdCBuYW1lIGFuZCBtZXRyaWMgbmFt
ZSwgbWF0Y2hpbmcKKyAgICAgICAgdGhlIG9sZCBiZWhhdmlvci4KKyAgICAgICAgKFBlcmZUZXN0
TWV0cmljLmlzTWVtb3J5VGVzdCk6IEV4cGxpY2l0bHkgbG9vayBmb3IgJ0pTSGVhcCcgYW5kICdN
YWxsb2MnIHRlc3RzLgorICAgICAgICAoUGVyZlRlc3RNZXRyaWMuc21hbGxlcklzQmV0dGVyKToK
KworICAgICAgICAoYXR0YWNoUGxvdCk6IERlbGV0ZWQgdGhlIGNvZGUgdG8gZGVhbCB3aXRoIHRl
c3RzIHRoYXQgZG9uJ3QgcHJvdmlkZSBpbmRpdmlkdWFsIGl0ZXJhdGlvbiBtZWFzdXJlbWVudAor
ICAgICAgICBzaW5jZSBzdWNoIHRlc3RzIG5vIGxvbmdlciBleGlzdC4gQWxzbyBmaXhlZCB1cCB0
aGUgY29kZSBjb21wdXRlIHktYXhpcyByYW5nZS4KKworICAgICAgICAoY3JlYXRlVGFibGVSb3cu
bWFya3VwRm9yUnVuKTogVXBkYXRlZCB0byB1c2UgY29uZmlkZW5jZUludGVydmFsRGVsdGEoKSBp
bnN0ZWFkIG9mIHN0ZGV2KCkuCisgICAgICAgIAorICAgICAgICAoaW5pdC5hZGRUZXN0cyk6IEFk
ZGVkLiBSZWN1cnNpdmVseSBhZGQgbWV0cmljcy4KKworICAgICAgICAqIHJlc291cmNlcy9zdGF0
aXN0aWNzLmpzOiBBZGRlZC4gSW1wb3J0ZWQgZnJvbSBwZXJmLndlYmtpdC5vcmcuCisgICAgICAg
IChTdGF0aXN0aWNzLm1heCk6CisgICAgICAgIChTdGF0aXN0aWNzLm1pbik6CisgICAgICAgIChT
dGF0aXN0aWNzLnN1bSk6CisgICAgICAgIChTdGF0aXN0aWNzLnNxdWFyZVN1bSk6CisgICAgICAg
IChTdGF0aXN0aWNzLnNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uKToKKyAgICAgICAgKFN0YXRpc3Rp
Y3Muc3VwcG9ydGVkQ29uZmlkZW5jZUludGVydmFsUHJvYmFiaWxpdGllcyk6CisgICAgICAgIChT
dGF0aXN0aWNzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKToKKyAgICAgICAgKFN0YXRpc3RpY3Mu
Y29uZmlkZW5jZUludGVydmFsKToKKwogMjAxMy0wMi0xMSAgQWxleGVpIEZpbGlwcG92ICA8YWxw
aEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogU3BsaXQgUHJvZmlsZXIg
ZG9tYWluIGluIHByb3RvY29sIGludG8gUHJvZmlsZXIgYW5kIEhlYXBQcm9maWxlcgpJbmRleDog
UGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvcmVzdWx0cy10ZW1wbGF0ZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL3Jlc3VsdHMtdGVtcGxhdGUuaHRtbAko
cmV2aXNpb24gMTQ0MDAyKQorKysgUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvcmVzdWx0cy10
ZW1wbGF0ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsOCArMTM3LDkgQEAgUmVmZXJlbmNl
IDxzcGFuIGlkPSJyZWZlcmVuY2UiIGNsYXNzPSJjaAogPHNjcmlwdD4KIAogKGZ1bmN0aW9uICgp
IHsKLSAgICB2YXIgalF1ZXJ5ID0gWydQZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2Vz
L2Ryb21hZW8vd2ViL2xpYi9qcXVlcnktMS42LjQuanMnXTsKLSAgICB2YXIgcGx1Z2lucyA9IFsn
UGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LmZsb3QubWluLmpzJywgJ1BlcmZvcm1h
bmNlVGVzdHMvcmVzb3VyY2VzL2pxdWVyeS50YWJsZXNvcnRlci5taW4uanMnXTsKKyAgICB2YXIg
alF1ZXJ5ID0gJ1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIv
bGliL2pxdWVyeS0xLjYuNC5qcyc7CisgICAgdmFyIHBsdWdpbnMgPSBbJ1BlcmZvcm1hbmNlVGVz
dHMvcmVzb3VyY2VzL2pxdWVyeS5mbG90Lm1pbi5qcycsICdQZXJmb3JtYW5jZVRlc3RzL3Jlc291
cmNlcy9qcXVlcnkudGFibGVzb3J0ZXIubWluLmpzJywKKyAgICAgICAgJ1BlcmZvcm1hbmNlVGVz
dHMvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanMnXTsKICAgICB2YXIgbG9jYWxQYXRoID0gJyVBYnNv
bHV0ZVBhdGhUb1dlYktpdFRydW5rJSc7CiAgICAgdmFyIHJlbW90ZVBhdGggPSAnaHR0cHM6Ly9z
dm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuayc7CiAgICAgdmFyIG51bWJlck9m
RmFpbHVyZXMgPSAwOwpAQCAtMTgzLDI3ICsxODQsMjkgQEAgUmVmZXJlbmNlIDxzcGFuIGlkPSJy
ZWZlcmVuY2UiIGNsYXNzPSJjaAogICAgICAgICB9KTsKIH0pKCk7CiAKLWZ1bmN0aW9uIFRlc3RS
ZXN1bHQoYXNzb2NpYXRlZFRlc3QsIHJlc3VsdCwgYXNzb2NpYXRlZFJ1bikgewotICAgIHRoaXMu
dW5pdCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc3VsdC51bml0OyB9Ci0gICAgdGhpcy50ZXN0
ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzb2NpYXRlZFRlc3Q7IH0KLSAgICB0aGlzLnZhbHVl
cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc3VsdC52YWx1ZXMgPyByZXN1bHQudmFsdWVzLm1h
cChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGFzc29jaWF0ZWRUZXN0LnNjYWxpbmdGYWN0b3Io
KSAqIHZhbHVlOyB9KSA6IHVuZGVmaW5lZDsgfQotICAgIHRoaXMudW5zY2FsZWRNZWFuID0gZnVu
Y3Rpb24gKCkgeyByZXR1cm4gcmVzdWx0LmF2ZzsgfQotICAgIHRoaXMubWVhbiA9IGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIGFzc29jaWF0ZWRUZXN0LnNjYWxpbmdGYWN0b3IoKSAqIHJlc3VsdC5hdmc7
IH0KLSAgICB0aGlzLm1pbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc29jaWF0ZWRUZXN0LnNj
YWxpbmdGYWN0b3IoKSAqIHJlc3VsdC5taW47IH0KLSAgICB0aGlzLm1heCA9IGZ1bmN0aW9uICgp
IHsgcmV0dXJuIGFzc29jaWF0ZWRUZXN0LnNjYWxpbmdGYWN0b3IoKSAqIHJlc3VsdC5tYXg7IH0K
LSAgICB0aGlzLnN0ZGV2ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzb2NpYXRlZFRlc3Quc2Nh
bGluZ0ZhY3RvcigpICogcmVzdWx0LnN0ZGV2OyB9Ci0gICAgdGhpcy5zdGRldlJhdGlvID0gZnVu
Y3Rpb24gKCkgeyByZXR1cm4gcmVzdWx0LnN0ZGV2IC8gcmVzdWx0LmF2ZzsgfQotICAgIHRoaXMu
cGVyY2VudERpZmZlcmVuY2UgPSBmdW5jdGlvbihvdGhlcikgeyByZXR1cm4gKG90aGVyLm1lYW4o
KSAtIHRoaXMubWVhbigpKSAvIHRoaXMubWVhbigpOyB9CitmdW5jdGlvbiBUZXN0UmVzdWx0KG1l
dHJpYywgdmFsdWVzLCBhc3NvY2lhdGVkUnVuKSB7CisgICAgdGhpcy50ZXN0ID0gZnVuY3Rpb24g
KCkgeyByZXR1cm4gbWV0cmljOyB9CisgICAgdGhpcy52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7IHJl
dHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gbWV0cmljLnNjYWxpbmdG
YWN0b3IoKSAqIHZhbHVlOyB9KTsgfQorICAgIHRoaXMudW5zY2FsZWRNZWFuID0gZnVuY3Rpb24g
KCkgeyByZXR1cm4gU3RhdGlzdGljcy5zdW0odmFsdWVzKSAvIHZhbHVlcy5sZW5ndGg7IH0KKyAg
ICB0aGlzLm1lYW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3Rvcigp
ICogdGhpcy51bnNjYWxlZE1lYW4oKTsgfQorICAgIHRoaXMubWluID0gZnVuY3Rpb24gKCkgeyBy
ZXR1cm4gbWV0cmljLnNjYWxpbmdGYWN0b3IoKSAqIFN0YXRpc3RpY3MubWluKHZhbHVlcyk7IH0K
KyAgICB0aGlzLm1heCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9y
KCkgKiBTdGF0aXN0aWNzLm1heCh2YWx1ZXMpOyB9CisgICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2
YWxEZWx0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFj
dG9yKCkgKiBTdGF0aXN0aWNzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKDAuOTUsIHZhbHVlcy5s
ZW5ndGgsCisgICAgICAgICAgICBTdGF0aXN0aWNzLnN1bSh2YWx1ZXMpLCBTdGF0aXN0aWNzLnNx
dWFyZVN1bSh2YWx1ZXMpKTsKKyAgICB9CisgICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0
YVJhdGlvID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0
YSgpIC8gdGhpcy5tZWFuKCk7IH0KKyAgICB0aGlzLnBlcmNlbnREaWZmZXJlbmNlID0gZnVuY3Rp
b24ob3RoZXIpIHsgcmV0dXJuIChvdGhlci51bnNjYWxlZE1lYW4oKSAtIHRoaXMudW5zY2FsZWRN
ZWFuKCkpIC8gdGhpcy51bnNjYWxlZE1lYW4oKTsgfQogICAgIHRoaXMuaXNTdGF0aXN0aWNhbGx5
U2lnbmlmaWNhbnQgPSBmdW5jdGlvbiAob3RoZXIpIHsKICAgICAgICAgdmFyIGRpZmYgPSBNYXRo
LmFicyhvdGhlci5tZWFuKCkgLSB0aGlzLm1lYW4oKSk7Ci0gICAgICAgIHJldHVybiBkaWZmID4g
dGhpcy5zdGRldigpICYmIGRpZmYgPiBvdGhlci5zdGRldigpOworICAgICAgICByZXR1cm4gZGlm
ZiA+IHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKSAmJiBkaWZmID4gb3RoZXIuY29uZmlk
ZW5jZUludGVydmFsRGVsdGEoKTsKICAgICB9CiAgICAgdGhpcy5ydW4gPSBmdW5jdGlvbiAoKSB7
IHJldHVybiBhc3NvY2lhdGVkUnVuOyB9CiB9CiAKIGZ1bmN0aW9uIFRlc3RSdW4oZW50cnkpIHsK
ICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZW50cnlbJ2Rlc2Ny
aXB0aW9uJ107IH0KLSAgICB0aGlzLndlYmtpdFJldmlzaW9uID0gZnVuY3Rpb24gKCkgeyByZXR1
cm4gZW50cnlbJ3dlYmtpdC1yZXZpc2lvbiddOyB9CisgICAgdGhpcy53ZWJraXRSZXZpc2lvbiA9
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudHJ5WydyZXZpc2lvbnMnXVsnV2ViS2l0J11bJ3Jldmlz
aW9uJ107IH0KICAgICB0aGlzLmxhYmVsID0gZnVuY3Rpb24gKCkgewogICAgICAgICB2YXIgbGFi
ZWwgPSAncicgKyB0aGlzLndlYmtpdFJldmlzaW9uKCk7CiAgICAgICAgIGlmICh0aGlzLmRlc2Ny
aXB0aW9uKCkpCkBAIC0yMTIsMTAgKzIxNSwxNSBAQCBmdW5jdGlvbiBUZXN0UnVuKGVudHJ5KSB7
CiAgICAgfQogfQogCi1mdW5jdGlvbiBQZXJmVGVzdChuYW1lKSB7CitmdW5jdGlvbiBQZXJmVGVz
dE1ldHJpYyhuYW1lLCBtZXRyaWMpIHsKICAgICB2YXIgdGVzdFJlc3VsdHMgPSBbXTsKICAgICB2
YXIgY2FjaGVkVW5pdCA9IG51bGw7CiAgICAgdmFyIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSBudWxs
OworICAgIHZhciB1bml0ID0geydGcmFtZVJhdGUnOiAnZnBzJywKKyAgICAgICAgJ1J1bnMnOiAn
cnVucy9zJywKKyAgICAgICAgJ1RpbWUnOiAnbXMnLAorICAgICAgICAnTWFsbG9jJzogJ2J5dGVz
JywKKyAgICAgICAgJ0pTSGVhcCc6ICdieXRlcyd9W21ldHJpY107CiAKICAgICAvLyBXZSBjYW4n
dCBkbyB0aGlzIGluIFRlc3RSZXN1bHQgYmVjYXVzZSBhbGwgcmVzdWx0cyBmb3IgZWFjaCB0ZXN0
IG5lZWQgdG8gc2hhcmUgdGhlIHNhbWUgdW5pdCBhbmQgdGhlIHNhbWUgc2NhbGluZyBmYWN0b3Iu
CiAgICAgZnVuY3Rpb24gY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpIHsKQEAgLTIyNCw3
ICsyMzIsNiBAQCBmdW5jdGlvbiBQZXJmVGVzdChuYW1lKSB7CiAgICAgICAgIGlmICghdGVzdFJl
c3VsdHMubGVuZ3RoIHx8IGNhY2hlZFVuaXQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgdmFyIHVuaXQgPSB0ZXN0UmVzdWx0c1swXS51bml0KCk7IC8vIEZJWE1FOiBXZSBzaG91bGQg
dmVyaWZ5IHRoYXQgYWxsIHJlc3VsdHMgaGF2ZSB0aGUgc2FtZSB1bml0LgogICAgICAgICB2YXIg
bWVhbiA9IHRlc3RSZXN1bHRzWzBdLnVuc2NhbGVkTWVhbigpOyAvLyBGSVhNRTogV2Ugc2hvdWxk
IGxvb2sgYXQgYWxsIHZhbHVlcy4KICAgICAgICAgdmFyIGtpbG8gPSB1bml0ID09ICdieXRlcycg
PyAxMDI0IDogMTAwMDsKICAgICAgICAgaWYgKG1lYW4gPiAxMCAqIGtpbG8gKiBraWxvICYmIHVu
aXQgIT0gJ21zJykgewpAQCAtMjM5LDggKzI0Niw4IEBAIGZ1bmN0aW9uIFBlcmZUZXN0KG5hbWUp
IHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRoaXMubmFtZSA9IGZ1bmN0aW9uICgpIHsgcmV0
dXJuIG5hbWU7IH0KLSAgICB0aGlzLmlzTWVtb3J5VGVzdCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJu
IG5hbWUuaW5kZXhPZignOicpID49IDA7IH0KKyAgICB0aGlzLm5hbWUgPSBmdW5jdGlvbiAoKSB7
IHJldHVybiBuYW1lICsgJzonICsgbWV0cmljOyB9CisgICAgdGhpcy5pc01lbW9yeVRlc3QgPSBm
dW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWMgPT0gJ0pTSGVhcCcgfHwgbWV0cmljID09ICdNYWxs
b2MnOyB9CiAgICAgdGhpcy5hZGRSZXN1bHQgPSBmdW5jdGlvbiAobmV3UmVzdWx0KSB7CiAgICAg
ICAgIHRlc3RSZXN1bHRzLnB1c2gobmV3UmVzdWx0KTsKICAgICAgICAgY2FjaGVkVW5pdCA9IG51
bGw7CkBAIC0yNTUsNyArMjYyLDcgQEAgZnVuY3Rpb24gUGVyZlRlc3QobmFtZSkgewogICAgICAg
ICBjb21wdXRlU2NhbGluZ0ZhY3RvcklmTmVlZGVkKCk7CiAgICAgICAgIHJldHVybiBjYWNoZWRV
bml0OwogICAgIH0KLSAgICB0aGlzLnNtYWxsZXJJc0JldHRlciA9IGZ1bmN0aW9uICgpIHsgcmV0
dXJuIHRlc3RSZXN1bHRzWzBdLnVuaXQoKSA9PSAnbXMnIHx8IHRlc3RSZXN1bHRzWzBdLnVuaXQo
KSA9PSAnYnl0ZXMnOyB9CisgICAgdGhpcy5zbWFsbGVySXNCZXR0ZXIgPSBmdW5jdGlvbiAoKSB7
IHJldHVybiB1bml0ID09ICdtcycgfHwgdW5pdCA9PSAnYnl0ZXMnOyB9CiB9CiAKIHZhciBwbG90
Q29sb3IgPSAncmdiKDIzMCw1MCw1MCknOwpAQCAtMzUzLDIyICszNjAsMTQgQEAgZnVuY3Rpb24g
YXR0YWNoUGxvdCh0ZXN0LCBwbG90Q29udGFpbmVyLAogICAgICAgICByZXR1cm4gbmV3VmFsdWVz
ID8gdmFsdWVzLmNvbmNhdChuZXdWYWx1ZXMubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4g
W2luZGV4LCB2YWx1ZV07IH0pKSA6IHZhbHVlczsKICAgICB9LCBbXSk7CiAKLSAgICB2YXIgcGxv
dERhdGEgPSBbXTsKLSAgICBpZiAodmFsdWVzLmxlbmd0aCkKLSAgICAgICAgcGxvdERhdGEgPSBb
JC5leHRlbmQodHJ1ZSwge30sIHN1YnBvaW50c1Bsb3RPcHRpb25zLCB7ZGF0YTogdmFsdWVzfSld
OwotICAgIGVsc2UgewotICAgICAgICBmdW5jdGlvbiBtYWtlU3VicG9pbnRzKGlkLCBjYWxsYmFj
aykgeyByZXR1cm4gJC5leHRlbmQodHJ1ZSwge30sIHN1YnBvaW50c1Bsb3RPcHRpb25zLCB7aWQ6
IGlkLCBkYXRhOiByZXN1bHRzLm1hcChjYWxsYmFjayl9KTsgfQotICAgICAgICBwbG90RGF0YSA9
IFttYWtlU3VicG9pbnRzKCdtaW4nLCBmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4g
W2luZGV4LCByZXN1bHQubWluKCldOyB9KSwKLSAgICAgICAgbWFrZVN1YnBvaW50cygnbWF4Jywg
ZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIFtpbmRleCwgcmVzdWx0Lm1heCgpXTsg
fSksCi0gICAgICAgIG1ha2VTdWJwb2ludHMoJy0mIzk2MzsnLCBmdW5jdGlvbiAocmVzdWx0LCBp
bmRleCkgeyByZXR1cm4gW2luZGV4LCByZXN1bHQubWVhbigpIC0gcmVzdWx0LnN0ZGV2KCldOyB9
KSwKLSAgICAgICAgbWFrZVN1YnBvaW50cygnKyYjOTYzOycsIGZ1bmN0aW9uIChyZXN1bHQsIGlu
ZGV4KSB7IHJldHVybiBbaW5kZXgsIHJlc3VsdC5tZWFuKCkgKyByZXN1bHQuc3RkZXYoKV07IH0p
XTsKLSAgICB9Ci0KKyAgICB2YXIgcGxvdERhdGEgPSBbJC5leHRlbmQodHJ1ZSwge30sIHN1YnBv
aW50c1Bsb3RPcHRpb25zLCB7ZGF0YTogdmFsdWVzfSldOwogICAgIHBsb3REYXRhLnB1c2goe2lk
OiAnJm11OycsIGRhdGE6IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJl
dHVybiBbaW5kZXgsIHJlc3VsdC5tZWFuKCldOyB9KSwgY29sb3I6IHBsb3RDb2xvcn0pOwogCisg
ICAgdmFyIG92ZXJhbGxNYXggPSBTdGF0aXN0aWNzLm1heChyZXN1bHRzLm1hcChmdW5jdGlvbiAo
cmVzdWx0LCBpbmRleCkgeyByZXR1cm4gcmVzdWx0Lm1heCgpOyB9KSk7CisgICAgdmFyIG92ZXJh
bGxNaW4gPSBTdGF0aXN0aWNzLm1pbihyZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRl
eCkgeyByZXR1cm4gcmVzdWx0Lm1pbigpOyB9KSk7CiAgICAgdmFyIGN1cnJlbnRQbG90T3B0aW9u
cyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBtYWluUGxvdE9wdGlvbnMsIHt5YXhpczogewotICAgICAg
ICBtaW46IG1pbklzWmVybyA/IDAgOiBNYXRoLm1pbi5hcHBseShNYXRoLCByZXN1bHRzLm1hcChm
dW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gcmVzdWx0Lm1pbigpOyB9KSkgKiAwLjk4
LAotICAgICAgICBtYXg6IE1hdGgubWF4LmFwcGx5KE1hdGgsIHJlc3VsdHMubWFwKGZ1bmN0aW9u
IChyZXN1bHQsIGluZGV4KSB7IHJldHVybiByZXN1bHQubWF4KCk7IH0pKSAqIChtaW5Jc1plcm8g
PyAxLjEgOiAxLjAxKX19KTsKKyAgICAgICAgbWluOiBtaW5Jc1plcm8gPyAwIDogb3ZlcmFsbE1p
biAtIChvdmVyYWxsTWF4IC0gb3ZlcmFsbE1pbikgKiAwLjEsCisgICAgICAgIG1heDogbWluSXNa
ZXJvID8gb3ZlcmFsbE1heCAqIDEuMSA6IG92ZXJhbGxNYXggKyAob3ZlcmFsbE1heCAtIG92ZXJh
bGxNaW4pICogMC4xfX0pOwogCiAgICAgY3VycmVudFBsb3RPcHRpb25zLnhheGlzLm1heCA9IHJl
c3VsdHMubGVuZ3RoIC0gMC41OwogICAgIGN1cnJlbnRQbG90T3B0aW9ucy54YXhpcy50aWNrcyA9
IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJldHVybiBbaW5kZXgsIHJl
c3VsdC5ydW4oKS5sYWJlbCgpXTsgfSk7CkBAIC00NzUsMTMgKzQ3NCwxMyBAQCBmdW5jdGlvbiBj
cmVhdGVUYWJsZVJvdyhydW5zLCB0ZXN0LCByZWZlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICB2YXIgc3RhdGlzdGljcyA9ICcmc2lnbWE7PScgKyB0b0ZpeGVkV2lkdGhQcmVj
aXNpb24ocmVzdWx0LnN0ZGV2KCkpICsgJywgbWluPScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24o
cmVzdWx0Lm1pbigpKQorICAgICAgICB2YXIgc3RhdGlzdGljcyA9ICcmc2lnbWE7PScgKyB0b0Zp
eGVkV2lkdGhQcmVjaXNpb24ocmVzdWx0LmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKCkpICsgJywg
bWluPScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVzdWx0Lm1pbigpKQogICAgICAgICAgICAg
KyAnLCBtYXg9JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZXN1bHQubWF4KCkpICsgJ1xuJyAr
IHJlZ3Jlc3Npb25BbmFseXNpczsKIAogICAgICAgICAvLyBUYWJsZXNvcnRlciBkb2Vzbid0IGtu
b3cgYWJvdXQgdGhlIHNlY29uZCBjZWxsIHNvIHB1dCB0aGUgY29tcGFyaXNvbiBpbiB0aGUgaW52
aXNpYmxlIGVsZW1lbnQuCiAgICAgICAgIHJldHVybiAnPHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxl
PSInICsgc3RhdGlzdGljcyArICciPicgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVzdWx0Lm1l
YW4oKSkgKyBoaWRkZW5WYWx1ZQotICAgICAgICAgICAgKyAnPC90ZD48dGQgY2xhc3M9InN0ZGV2
IiB0aXRsZT0iJyArIHN0YXRpc3RpY3MgKyAnIj4mcGx1c21uOyAnCi0gICAgICAgICAgICArIGZv
cm1hdFBlcmNlbnRhZ2UocmVzdWx0LnN0ZGV2UmF0aW8oKSkgKyB3YXJuaW5nICsgJzwvdGQ+JyAr
IGNvbXBhcmlzb25DZWxsOworICAgICAgICAgICAgKyAnPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVu
Y2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iJyArIHN0YXRpc3RpY3MgKyAnIj4mcGx1c21uOyAnCisg
ICAgICAgICAgICArIGZvcm1hdFBlcmNlbnRhZ2UocmVzdWx0LmNvbmZpZGVuY2VJbnRlcnZhbERl
bHRhUmF0aW8oKSkgKyB3YXJuaW5nICsgJzwvdGQ+JyArIGNvbXBhcmlzb25DZWxsOwogICAgIH0K
IAogICAgIGZ1bmN0aW9uIG1hcmt1cEZvck1pc3NpbmdSdW4oaXNSZWZlcmVuY2UpIHsKQEAgLTU0
NywyNCArNTQ2LDQyIEBAIGZ1bmN0aW9uIGluaXQoKSB7CiAgICAgfSk7CiAKICAgICB2YXIgcnVu
cyA9IFtdOwotICAgIHZhciB0ZXN0cyA9IHt9OworICAgIHZhciBtZXRyaWNzID0ge307CiAgICAg
JC5lYWNoKEpTT04ucGFyc2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pzb24nKS50ZXh0Q29u
dGVudCksIGZ1bmN0aW9uIChpbmRleCwgZW50cnkpIHsKICAgICAgICAgdmFyIHJ1biA9IG5ldyBU
ZXN0UnVuKGVudHJ5KTsKICAgICAgICAgcnVucy5wdXNoKHJ1bik7Ci0gICAgICAgICQuZWFjaChl
bnRyeS5yZXN1bHRzLCBmdW5jdGlvbiAodGVzdCwgcmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAo
IXRlc3RzW3Rlc3RdKQotICAgICAgICAgICAgICAgIHRlc3RzW3Rlc3RdID0gbmV3IFBlcmZUZXN0
KHRlc3QpOwotICAgICAgICAgICAgdGVzdHNbdGVzdF0uYWRkUmVzdWx0KG5ldyBUZXN0UmVzdWx0
KHRlc3RzW3Rlc3RdLCByZXN1bHQsIHJ1bikpOwotICAgICAgICB9KTsKKworICAgICAgICBmdW5j
dGlvbiBhZGRUZXN0cyh0ZXN0cywgcGFyZW50RnVsbE5hbWUpIHsKKyAgICAgICAgICAgIGZvciAo
dmFyIHRlc3ROYW1lIGluIHRlc3RzKSB7CisgICAgICAgICAgICAgICAgdmFyIGZ1bGxUZXN0TmFt
ZSA9IHBhcmVudEZ1bGxOYW1lICsgJy8nICsgdGVzdE5hbWU7CisgICAgICAgICAgICAgICAgdmFy
IHJhd01ldHJpY3MgPSB0ZXN0c1t0ZXN0TmFtZV0ubWV0cmljczsKKworICAgICAgICAgICAgICAg
IGZvciAodmFyIG1ldHJpY05hbWUgaW4gcmF3TWV0cmljcykgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgZnVsbE1ldHJpY05hbWUgPSBmdWxsVGVzdE5hbWUgKyAnOicgKyBtZXRyaWNOYW1lOwor
ICAgICAgICAgICAgICAgICAgICB2YXIgbWV0cmljID0gbWV0cmljc1tmdWxsTWV0cmljTmFtZV07
CisgICAgICAgICAgICAgICAgICAgIGlmICghbWV0cmljKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtZXRyaWMgPSBuZXcgUGVyZlRlc3RNZXRyaWMoZnVsbFRlc3ROYW1lLCBtZXRyaWNOYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3NbZnVsbE1ldHJpY05hbWVdID0gbWV0
cmljOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1ldHJpYy5h
ZGRSZXN1bHQobmV3IFRlc3RSZXN1bHQobWV0cmljLCByYXdNZXRyaWNzW21ldHJpY05hbWVdLmN1
cnJlbnQsIHJ1bikpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0
ZXN0c1t0ZXN0TmFtZV0udGVzdHMpCisgICAgICAgICAgICAgICAgICAgIGFkZFRlc3RzKHRlc3Rz
W3Rlc3ROYW1lXS50ZXN0cywgZnVsbFRlc3ROYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGFkZFRlc3RzKGVudHJ5LnRlc3RzLCAnJyk7CiAgICAgfSk7CiAKICAgICB2
YXIgc2hvdWxkSWdub3JlTWVtb3J5PSB0cnVlOwogICAgIHZhciByZWZlcmVuY2VJbmRleCA9IDA7
Ci0gICAgY3JlYXRlVGFibGUodGVzdHMsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJl
bmNlSW5kZXgpOworCisgICAgY3JlYXRlVGFibGUobWV0cmljcywgcnVucywgc2hvdWxkSWdub3Jl
TWVtb3J5LCByZWZlcmVuY2VJbmRleCk7CiAKICAgICAkKCcjdGltZS1tZW1vcnknKS5iaW5kKCdj
aGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQsIGNoZWNrZWRFbGVtZW50KSB7CiAgICAgICAgIHNob3Vs
ZElnbm9yZU1lbW9yeSA9IGNoZWNrZWRFbGVtZW50LnRleHRDb250ZW50ID09ICdUaW1lJzsKLSAg
ICAgICAgY3JlYXRlVGFibGUodGVzdHMsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJl
bmNlSW5kZXgpOworICAgICAgICBjcmVhdGVUYWJsZShtZXRyaWNzLCBydW5zLCBzaG91bGRJZ25v
cmVNZW1vcnksIHJlZmVyZW5jZUluZGV4KTsKICAgICB9KTsKIAogICAgIHJ1bnMubWFwKGZ1bmN0
aW9uIChydW4sIGluZGV4KSB7CkBAIC01NzMsNyArNTkwLDcgQEAgZnVuY3Rpb24gaW5pdCgpIHsK
IAogICAgICQoJyNyZWZlcmVuY2UnKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQsIGNo
ZWNrZWRFbGVtZW50KSB7CiAgICAgICAgIHJlZmVyZW5jZUluZGV4ID0gcGFyc2VJbnQoY2hlY2tl
ZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKTsKLSAgICAgICAgY3JlYXRlVGFibGUodGVz
dHMsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgpOworICAgICAgICBj
cmVhdGVUYWJsZShtZXRyaWNzLCBydW5zLCBzaG91bGRJZ25vcmVNZW1vcnksIHJlZmVyZW5jZUlu
ZGV4KTsKICAgICB9KTsKIAogICAgICQoJy5jaGVja2JveCcpLmVhY2goZnVuY3Rpb24gKGluZGV4
LCBjaGVja2JveCkgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlzdGlj
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9zdGF0aXN0aWNz
LmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlzdGlj
cy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCit2
YXIgU3RhdGlzdGljcyA9IG5ldyAoZnVuY3Rpb24gKCkgeworCisgICAgdGhpcy5tYXggPSBmdW5j
dGlvbiAodmFsdWVzKSB7CisgICAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseShNYXRoLCB2YWx1
ZXMpOworICAgIH0KKworICAgIHRoaXMubWluID0gZnVuY3Rpb24gKHZhbHVlcykgeworICAgICAg
ICByZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCwgdmFsdWVzKTsKKyAgICB9CisKKyAgICB0aGlz
LnN1bSA9IGZ1bmN0aW9uICh2YWx1ZXMpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlcy5sZW5ndGgg
PyB2YWx1ZXMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhICsgYjsgfSkgOiAwOwor
ICAgIH0KKworICAgIHRoaXMuc3F1YXJlU3VtID0gZnVuY3Rpb24gKHZhbHVlcykgeworICAgICAg
ICByZXR1cm4gdmFsdWVzLmxlbmd0aCA/IHZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgdmFs
dWUpIHsgcmV0dXJuIHN1bSArIHZhbHVlICogdmFsdWU7fSwgMCkgOiAwOworICAgIH0KKworICAg
IC8vIFdpdGggc3VtIGFuZCBzdW0gb2Ygc3F1YXJlcywgd2UgY2FuIGNvbXB1dGUgdGhlIHNhbXBs
ZSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gTygxKS4KKyAgICAvLyBTZWUgaHR0cHM6Ly9ybml3YS5j
b20vMjAxMi0xMS0xMC9zYW1wbGUtc3RhbmRhcmQtZGV2aWF0aW9uLWluLXRlcm1zLW9mLXN1bS1h
bmQtc3F1YXJlLXN1bS1vZi1zYW1wbGVzLworICAgIHRoaXMuc2FtcGxlU3RhbmRhcmREZXZpYXRp
b24gPSBmdW5jdGlvbiAobnVtYmVyT2ZTYW1wbGVzLCBzdW0sIHNxdWFyZVN1bSkgeworICAgICAg
ICBpZiAobnVtYmVyT2ZTYW1wbGVzIDwgMikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gTWF0aC5zcXJ0KHNxdWFyZVN1bSAvIChudW1iZXJPZlNhbXBsZXMgLSAxKSAtIHN1
bSAqIHN1bSAvIChudW1iZXJPZlNhbXBsZXMgLSAxKSAvIG51bWJlck9mU2FtcGxlcyk7CisgICAg
fQorCisgICAgdGhpcy5zdXBwb3J0ZWRDb25maWRlbmNlSW50ZXJ2YWxQcm9iYWJpbGl0aWVzID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc3VwcG9ydGVkUHJvYmFiaWxpdGllcyA9IFtdOwor
ICAgICAgICBmb3IgKHZhciBxdWFudGlsZSBpbiB0RGlzdHJpYnV0aW9uUXVhbnRpbGVzKQorICAg
ICAgICAgICAgc3VwcG9ydGVkUHJvYmFiaWxpdGllcy5wdXNoKCgxIC0gKDEgLSBxdWFudGlsZSkg
KiAyKS50b0ZpeGVkKDIpKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZFByb2JhYmlsaXRpZXMK
KyAgICB9CisKKyAgICAvLyBDb21wdXRlcyB0aGUgZGVsdGEgZCBzLnQuIChtZWFuIC0gZCwgbWVh
biArIGQpIGlzIHRoZSBjb25maWRlbmNlIGludGVydmFsIHdpdGggdGhlIHNwZWNpZmllZCBwcm9i
YWJpbGl0eSBpbiBPKDEpLgorICAgIHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEgPSBmdW5j
dGlvbiAocHJvYmFiaWxpdHksIG51bWJlck9mU2FtcGxlcywgc3VtLCBzcXVhcmVTdW0pIHsKKyAg
ICAgICAgdmFyIHF1YW50aWxlID0gKDEgLSAoMSAtIHByb2JhYmlsaXR5KSAvIDIpOworICAgICAg
ICBpZiAoIShxdWFudGlsZSBpbiB0RGlzdHJpYnV0aW9uUXVhbnRpbGVzKSkgeworICAgICAgICAg
ICAgdGhyb3cgJ1dlIG9ubHkgc3VwcG9ydCAnICsgdGhpcy5zdXBwb3J0ZWRDb25maWRlbmNlSW50
ZXJ2YWxQcm9iYWJpbGl0aWVzKCkubWFwKGZ1bmN0aW9uIChwcm9iYWJpbGl0eSkKKyAgICAgICAg
ICAgIHsgcmV0dXJuIHByb2JhYmlsaXR5ICogMTAwICsgJyUnOyB9ICkuam9pbignLCAnKSArICcg
Y29uZmlkZW5jZSBpbnRlcnZhbHMuJzsKKyAgICAgICAgfQorICAgICAgICBpZiAobnVtYmVyT2ZT
YW1wbGVzIC0gMiA8IDApCisgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICB2YXIgZGVs
dGFzID0gdERpc3RyaWJ1dGlvblF1YW50aWxlc1txdWFudGlsZV07CisgICAgICAgIHZhciBkZWdy
ZWVzT2ZGcmVlZG9tID0gbnVtYmVyT2ZTYW1wbGVzIC0gMTsKKyAgICAgICAgaWYgKGRlZ3JlZXNP
ZkZyZWVkb20gPiBkZWx0YXMubGVuZ3RoKQorICAgICAgICAgICAgdGhyb3cgJ1dlIG9ubHkgc3Vw
cG9ydCB1cCB0byAnICsgZGVsdGFzLmxlbmd0aCArICcgZGVncmVlcyBvZiBmcmVlZG9tJzsKKwor
ICAgICAgICAvLyBkID0gYyAqIFMvc3FydChudW1iZXJPZlNhbXBsZXMpIHdoZXJlIGMgfiB0LWRp
c3RyaWJ1dGlvbihkZWdyZWVzT2ZGcmVlZG9tKSBhbmQgUyBpcyB0aGUgc2FtcGxlIHN0YW5kYXJk
IGRldmlhdGlvbi4KKyAgICAgICAgcmV0dXJuIGRlbHRhc1tkZWdyZWVzT2ZGcmVlZG9tIC0gMV0g
KiB0aGlzLnNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uKG51bWJlck9mU2FtcGxlcywgc3VtLCBzcXVh
cmVTdW0pIC8gTWF0aC5zcXJ0KG51bWJlck9mU2FtcGxlcyk7CisgICAgfQorCisgICAgdGhpcy5j
b25maWRlbmNlSW50ZXJ2YWwgPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9iYWJpbGl0eSkgeworICAg
ICAgICB2YXIgc3VtID0gdGhpcy5zdW0odmFsdWVzKTsKKyAgICAgICAgdmFyIG1lYW4gPSBzdW0g
LyB2YWx1ZXMubGVuZ3RoOworICAgICAgICB2YXIgZGVsdGEgPSB0aGlzLmNvbmZpZGVuY2VJbnRl
cnZhbERlbHRhKHByb2JhYmlsaXR5IHx8IDAuOTUsIHZhbHVlcy5sZW5ndGgsIHN1bSwgdGhpcy5z
cXVhcmVTdW0odmFsdWVzKSk7CisgICAgICAgIHJldHVybiBbbWVhbiAtIGRlbHRhLCBtZWFuICsg
ZGVsdGFdOworICAgIH0KKworICAgIHZhciB0RGlzdHJpYnV0aW9uUXVhbnRpbGVzID0geworICAg
ICAgICAwLjk6IFsKKyAgICAgICAgICAgIDMuMDc3Njg0LCAxLjg4NTYxOCwgMS42Mzc3NDQsIDEu
NTMzMjA2LCAxLjQ3NTg4NCwgMS40Mzk3NTYsIDEuNDE0OTI0LCAxLjM5NjgxNSwgMS4zODMwMjks
IDEuMzcyMTg0LAorICAgICAgICAgICAgMS4zNjM0MzAsIDEuMzU2MjE3LCAxLjM1MDE3MSwgMS4z
NDUwMzAsIDEuMzQwNjA2LCAxLjMzNjc1NywgMS4zMzMzNzksIDEuMzMwMzkxLCAxLjMyNzcyOCwg
MS4zMjUzNDEsCisgICAgICAgICAgICAxLjMyMzE4OCwgMS4zMjEyMzcsIDEuMzE5NDYwLCAxLjMx
NzgzNiwgMS4zMTYzNDUsIDEuMzE0OTcyLCAxLjMxMzcwMywgMS4zMTI1MjcsIDEuMzExNDM0LCAx
LjMxMDQxNSwKKyAgICAgICAgICAgIDEuMzA5NDY0LCAxLjMwODU3MywgMS4zMDc3MzcsIDEuMzA2
OTUyLCAxLjMwNjIxMiwgMS4zMDU1MTQsIDEuMzA0ODU0LCAxLjMwNDIzMCwgMS4zMDM2MzksIDEu
MzAzMDc3LAorICAgICAgICAgICAgMS4zMDI1NDMsIDEuMzAyMDM1LCAxLjMwMTU1MiwgMS4zMDEw
OTAsIDEuMzAwNjQ5LCAxLjMwMDIyOCwgMS4yOTk4MjUsIDEuMjk5NDM5LCAxLjI5OTA2OSwgMS4y
OTg3MTQsCisKKyAgICAgICAgICAgIDEuMjk4MzczLCAxLjI5ODA0NSwgMS4yOTc3MzAsIDEuMjk3
NDI2LCAxLjI5NzEzNCwgMS4yOTY4NTMsIDEuMjk2NTgxLCAxLjI5NjMxOSwgMS4yOTYwNjYsIDEu
Mjk1ODIxLAorICAgICAgICAgICAgMS4yOTU1ODUsIDEuMjk1MzU2LCAxLjI5NTEzNCwgMS4yOTQ5
MjAsIDEuMjk0NzEyLCAxLjI5NDUxMSwgMS4yOTQzMTUsIDEuMjk0MTI2LCAxLjI5Mzk0MiwgMS4y
OTM3NjMsCisgICAgICAgICAgICAxLjI5MzU4OSwgMS4yOTM0MjEsIDEuMjkzMjU2LCAxLjI5MzA5
NywgMS4yOTI5NDEsIDEuMjkyNzkwLCAxLjI5MjY0MywgMS4yOTI1MDAsIDEuMjkyMzYwLCAxLjI5
MjIyNCwKKyAgICAgICAgICAgIDEuMjkyMDkxLCAxLjI5MTk2MSwgMS4yOTE4MzUsIDEuMjkxNzEx
LCAxLjI5MTU5MSwgMS4yOTE0NzMsIDEuMjkxMzU4LCAxLjI5MTI0NiwgMS4yOTExMzYsIDEuMjkx
MDI5LAorICAgICAgICAgICAgMS4yOTA5MjQsIDEuMjkwODIxLCAxLjI5MDcyMSwgMS4yOTA2MjMs
IDEuMjkwNTI3LCAxLjI5MDQzMiwgMS4yOTAzNDAsIDEuMjkwMjUwLCAxLjI5MDE2MSwgMS4yOTAw
NzVdLAorICAgICAgICAwLjk1OiBbCisgICAgICAgICAgICA2LjMxMzc1MiwgMi45MTk5ODYsIDIu
MzUzMzYzLCAyLjEzMTg0NywgMi4wMTUwNDgsIDEuOTQzMTgwLCAxLjg5NDU3OSwgMS44NTk1NDgs
IDEuODMzMTEzLCAxLjgxMjQ2MSwKKyAgICAgICAgICAgIDEuNzk1ODg1LCAxLjc4MjI4OCwgMS43
NzA5MzMsIDEuNzYxMzEwLCAxLjc1MzA1MCwgMS43NDU4ODQsIDEuNzM5NjA3LCAxLjczNDA2NCwg
MS43MjkxMzMsIDEuNzI0NzE4LAorICAgICAgICAgICAgMS43MjA3NDMsIDEuNzE3MTQ0LCAxLjcx
Mzg3MiwgMS43MTA4ODIsIDEuNzA4MTQxLCAxLjcwNTYxOCwgMS43MDMyODgsIDEuNzAxMTMxLCAx
LjY5OTEyNywgMS42OTcyNjEsCisgICAgICAgICAgICAxLjY5NTUxOSwgMS42OTM4ODksIDEuNjky
MzYwLCAxLjY5MDkyNCwgMS42ODk1NzIsIDEuNjg4Mjk4LCAxLjY4NzA5NCwgMS42ODU5NTQsIDEu
Njg0ODc1LCAxLjY4Mzg1MSwKKyAgICAgICAgICAgIDEuNjgyODc4LCAxLjY4MTk1MiwgMS42ODEw
NzEsIDEuNjgwMjMwLCAxLjY3OTQyNywgMS42Nzg2NjAsIDEuNjc3OTI3LCAxLjY3NzIyNCwgMS42
NzY1NTEsIDEuNjc1OTA1LAorCisgICAgICAgICAgICAxLjY3NTI4NSwgMS42NzQ2ODksIDEuNjc0
MTE2LCAxLjY3MzU2NSwgMS42NzMwMzQsIDEuNjcyNTIyLCAxLjY3MjAyOSwgMS42NzE1NTMsIDEu
NjcxMDkzLCAxLjY3MDY0OSwKKyAgICAgICAgICAgIDEuNjcwMjE5LCAxLjY2OTgwNCwgMS42Njk0
MDIsIDEuNjY5MDEzLCAxLjY2ODYzNiwgMS42NjgyNzEsIDEuNjY3OTE2LCAxLjY2NzU3MiwgMS42
NjcyMzksIDEuNjY2OTE0LAorICAgICAgICAgICAgMS42NjY2MDAsIDEuNjY2Mjk0LCAxLjY2NTk5
NiwgMS42NjU3MDcsIDEuNjY1NDI1LCAxLjY2NTE1MSwgMS42NjQ4ODUsIDEuNjY0NjI1LCAxLjY2
NDM3MSwgMS42NjQxMjUsCisgICAgICAgICAgICAxLjY2Mzg4NCwgMS42NjM2NDksIDEuNjYzNDIw
LCAxLjY2MzE5NywgMS42NjI5NzgsIDEuNjYyNzY1LCAxLjY2MjU1NywgMS42NjIzNTQsIDEuNjYy
MTU1LCAxLjY2MTk2MSwKKyAgICAgICAgICAgIDEuNjYxNzcxLCAxLjY2MTU4NSwgMS42NjE0MDQs
IDEuNjYxMjI2LCAxLjY2MTA1MiwgMS42NjA4ODEsIDEuNjYwNzE1LCAxLjY2MDU1MSwgMS42NjAz
OTEsIDEuNjYwMjM0XSwKKyAgICAgICAgMC45NzU6IFsKKyAgICAgICAgICAgIDEyLjcwNjIwNSwg
NC4zMDI2NTMsIDMuMTgyNDQ2LCAyLjc3NjQ0NSwgMi41NzA1ODIsIDIuNDQ2OTEyLCAyLjM2NDYy
NCwgMi4zMDYwMDQsIDIuMjYyMTU3LCAyLjIyODEzOSwKKyAgICAgICAgICAgIDIuMjAwOTg1LCAy
LjE3ODgxMywgMi4xNjAzNjksIDIuMTQ0Nzg3LCAyLjEzMTQ1MCwgMi4xMTk5MDUsIDIuMTA5ODE2
LCAyLjEwMDkyMiwgMi4wOTMwMjQsIDIuMDg1OTYzLAorICAgICAgICAgICAgMi4wNzk2MTQsIDIu
MDczODczLCAyLjA2ODY1OCwgMi4wNjM4OTksIDIuMDU5NTM5LCAyLjA1NTUyOSwgMi4wNTE4MzEs
IDIuMDQ4NDA3LCAyLjA0NTIzMCwgMi4wNDIyNzIsCisgICAgICAgICAgICAyLjAzOTUxMywgMi4w
MzY5MzMsIDIuMDM0NTE1LCAyLjAzMjI0NSwgMi4wMzAxMDgsIDIuMDI4MDk0LCAyLjAyNjE5Miwg
Mi4wMjQzOTQsIDIuMDIyNjkxLCAyLjAyMTA3NSwKKyAgICAgICAgICAgIDIuMDE5NTQxLCAyLjAx
ODA4MiwgMi4wMTY2OTIsIDIuMDE1MzY4LCAyLjAxNDEwMywgMi4wMTI4OTYsIDIuMDExNzQxLCAy
LjAxMDYzNSwgMi4wMDk1NzUsIDIuMDA4NTU5LAorCisgICAgICAgICAgICAyLjAwNzU4NCwgMi4w
MDY2NDcsIDIuMDA1NzQ2LCAyLjAwNDg3OSwgMi4wMDQwNDUsIDIuMDAzMjQxLCAyLjAwMjQ2NSwg
Mi4wMDE3MTcsIDIuMDAwOTk1LCAyLjAwMDI5OCwKKyAgICAgICAgICAgIDEuOTk5NjI0LCAxLjk5
ODk3MiwgMS45OTgzNDEsIDEuOTk3NzMwLCAxLjk5NzEzOCwgMS45OTY1NjQsIDEuOTk2MDA4LCAx
Ljk5NTQ2OSwgMS45OTQ5NDUsIDEuOTk0NDM3LAorICAgICAgICAgICAgMS45OTM5NDMsIDEuOTkz
NDY0LCAxLjk5Mjk5NywgMS45OTI1NDMsIDEuOTkyMTAyLCAxLjk5MTY3MywgMS45OTEyNTQsIDEu
OTkwODQ3LCAxLjk5MDQ1MCwgMS45OTAwNjMsCisgICAgICAgICAgICAxLjk4OTY4NiwgMS45ODkz
MTksIDEuOTg4OTYwLCAxLjk4ODYxMCwgMS45ODgyNjgsIDEuOTg3OTM0LCAxLjk4NzYwOCwgMS45
ODcyOTAsIDEuOTg2OTc5LCAxLjk4NjY3NSwKKyAgICAgICAgICAgIDEuOTg2Mzc3LCAxLjk4NjA4
NiwgMS45ODU4MDIsIDEuOTg1NTIzLCAxLjk4NTI1MSwgMS45ODQ5ODQsIDEuOTg0NzIzLCAxLjk4
NDQ2NywgMS45ODQyMTcsIDEuOTgzOTcyXSwKKyAgICAgICAgMC45OTogWworICAgICAgICAgICAg
MzEuODIwNTE2LCA2Ljk2NDU1NywgNC41NDA3MDMsIDMuNzQ2OTQ3LCAzLjM2NDkzMCwgMy4xNDI2
NjgsIDIuOTk3OTUyLCAyLjg5NjQ1OSwgMi44MjE0MzgsIDIuNzYzNzY5LAorICAgICAgICAgICAg
Mi43MTgwNzksIDIuNjgwOTk4LCAyLjY1MDMwOSwgMi42MjQ0OTQsIDIuNjAyNDgwLCAyLjU4MzQ4
NywgMi41NjY5MzQsIDIuNTUyMzgwLCAyLjUzOTQ4MywgMi41Mjc5NzcsCisgICAgICAgICAgICAy
LjUxNzY0OCwgMi41MDgzMjUsIDIuNDk5ODY3LCAyLjQ5MjE1OSwgMi40ODUxMDcsIDIuNDc4NjMw
LCAyLjQ3MjY2MCwgMi40NjcxNDAsIDIuNDYyMDIxLCAyLjQ1NzI2MiwKKyAgICAgICAgICAgIDIu
NDUyODI0LCAyLjQ0ODY3OCwgMi40NDQ3OTQsIDIuNDQxMTUwLCAyLjQzNzcyMywgMi40MzQ0OTQs
IDIuNDMxNDQ3LCAyLjQyODU2OCwgMi40MjU4NDEsIDIuNDIzMjU3LAorICAgICAgICAgICAgMi40
MjA4MDMsIDIuNDE4NDcwLCAyLjQxNjI1MCwgMi40MTQxMzQsIDIuNDEyMTE2LCAyLjQxMDE4OCwg
Mi40MDgzNDUsIDIuNDA2NTgxLCAyLjQwNDg5MiwgMi40MDMyNzIsCisKKyAgICAgICAgICAgIDIu
NDAxNzE4LCAyLjQwMDIyNSwgMi4zOTg3OTAsIDIuMzk3NDEwLCAyLjM5NjA4MSwgMi4zOTQ4MDEs
IDIuMzkzNTY4LCAyLjM5MjM3NywgMi4zOTEyMjksIDIuMzkwMTE5LAorICAgICAgICAgICAgMi4z
ODkwNDcsIDIuMzg4MDExLCAyLjM4NzAwOCwgMi4zODYwMzcsIDIuMzg1MDk3LCAyLjM4NDE4Niwg
Mi4zODMzMDIsIDIuMzgyNDQ2LCAyLjM4MTYxNSwgMi4zODA4MDcsCisgICAgICAgICAgICAyLjM4
MDAyNCwgMi4zNzkyNjIsIDIuMzc4NTIyLCAyLjM3NzgwMiwgMi4zNzcxMDIsIDIuMzc2NDIwLCAy
LjM3NTc1NywgMi4zNzUxMTEsIDIuMzc0NDgyLCAyLjM3Mzg2OCwKKyAgICAgICAgICAgIDIuMzcz
MjcwLCAyLjM3MjY4NywgMi4zNzIxMTksIDIuMzcxNTY0LCAyLjM3MTAyMiwgMi4zNzA0OTMsIDIu
MzY5OTc3LCAyLjM2OTQ3MiwgMi4zNjg5NzksIDIuMzY4NDk3LAorICAgICAgICAgICAgMi4zNjgw
MjYsIDIuMzY3NTY2LCAyLjM2NzExNSwgMi4zNjY2NzQsIDIuMzY2MjQzLCAyLjM2NTgyMSwgMi4z
NjU0MDcsIDIuMzY1MDAyLCAyLjM2NDYwNiwgMi4zNjQyMTddCisgICAgfTsKKworfSkoKTsKKwor
aWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICBmb3IgKHZhciBrZXkgaW4g
U3RhdGlzdGljcykKKyAgICAgICAgbW9kdWxlLmV4cG9ydHNba2V5XSA9IFN0YXRpc3RpY3Nba2V5
XTsKK30KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE0NDAwNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDEzLTAyLTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgorCisgICAgICAgIFVzZSBwZXJmLndlYmtpdC5vcmcgSlNPTiBmb3JtYXQgaW4gcmVzdWx0
cyBwYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTA4NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBH
ZW5lcmF0ZSByZXN1bHRzIHBhZ2Ugd2l0aCBwZXJmLndlYmtpdC5vcmcgSlNPTiBvdXRwdXQuCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1
bm5lci5weToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fZ2VuZXJhdGVfb3V0cHV0X2ZpbGVz
KTogVXNlIHBlcmZfd2Via2l0X291dHB1dC4KKwogMjAxMy0wMi0yNSAgRGlyayBQcmFua2UgIDxk
cHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGb3Jnb3QgdG8gZGVsZXRlIGEgbm8tbG9u
Z2VyLW5lZWRlZCB1bml0IHRlc3QgYWZ0ZXIgcjE0Mzk4MC4KSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVu
bmVyLnB5CShyZXZpc2lvbiAxNDQwMDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZv
cm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weQkod29ya2luZyBjb3B5KQpAQCAtMzM3LDcg
KzMzNyw3IEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogCiAgICAgICAgICAgICBh
YnNvbHV0ZV9wYXRoX3RvX3RydW5rID0gZmlsZXN5c3RlbS5kaXJuYW1lKHNlbGYuX3BvcnQucGVy
Zl90ZXN0c19kaXIoKSkKICAgICAgICAgICAgIHJlc3VsdHNfcGFnZSA9IHRlbXBsYXRlLnJlcGxh
Y2UoJyVBYnNvbHV0ZVBhdGhUb1dlYktpdFRydW5rJScsIGFic29sdXRlX3BhdGhfdG9fdHJ1bmsp
Ci0gICAgICAgICAgICByZXN1bHRzX3BhZ2UgPSByZXN1bHRzX3BhZ2UucmVwbGFjZSgnJVBlZm9y
bWFuY2VUZXN0c1Jlc3VsdHNKU09OJScsIGpzb25fb3V0cHV0KQorICAgICAgICAgICAgcmVzdWx0
c19wYWdlID0gcmVzdWx0c19wYWdlLnJlcGxhY2UoJyVQZWZvcm1hbmNlVGVzdHNSZXN1bHRzSlNP
TiUnLCBqc29uLmR1bXBzKHBlcmZfd2Via2l0X291dHB1dCkpCiAKICAgICAgICAgICAgIGZpbGVz
eXN0ZW0ud3JpdGVfdGV4dF9maWxlKHJlc3VsdHNfcGFnZV9wYXRoLCByZXN1bHRzX3BhZ2UpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190217</attachid>
            <date>2013-02-25 23:49:48 -0800</date>
            <delta_ts>2013-02-26 19:11:50 -0800</delta_ts>
            <desc>Also change the default JSON format</desc>
            <filename>bug-110842-20130225234606.patch</filename>
            <type>text/plain</type>
            <size>42176</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDQwMDYpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTAyLTI1ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBwZXJmLndlYmtp
dC5vcmcgSlNPTiBmb3JtYXQgaW4gcmVzdWx0cyBwYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA4NDIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGVkIHRoZSByZXN1bHRzIHBhZ2UgdGVtcGxh
dGUgdG8gdXNlIHRoZSBuZXcgSlNPTiBmb3JtYXQuCisKKyAgICAgICAgU2luY2UgbmV3IEpTT04g
Zm9ybWF0IGRvZXNuJ3QgY29udGFpbiBzdGF0aXN0aWNzIHN1Y2ggYXMgc3RkZXYgYW5kIG1pbiwg
YWRkZWQgc3RhdGlzdGljcy5qcyB0byBjb21wdXRlCisgICAgICAgIHRoZXNlIHZhbHVlcy4gQWxz
byB1c2UgOTUlIHBlcmNlbnRpbGUgY29uZmlkZW5jZSBpbnRlcnZhbCBpbnN0ZWFkIG9mIHN0YW5k
YXJkIGRldmlhdGlvbiBpbiB2YXJpb3VzIHBsYWNlcy4KKworICAgICAgICAqIHJlc291cmNlcy9y
ZXN1bHRzLXRlbXBsYXRlLmh0bWw6IEFkZGVkIHN0YXRpc3RpY3MuanMgYXMgZGVwZW5kZW5jeS4K
KyAgICAgICAgKFRlc3RSZXN1bHQpOiBVcGRhdGVkIHRvIHRha2UgYSBtZXRyaWMgaW5zdGVhZCBv
ZiBpdHMgdGVzdC4gUmVwbGFjZWQgc3RkZXYoKSB3aXRoIGNvbmZpZGVuY2VJbnRlcnZhbERlbHRh
KCkKKyAgICAgICAgbm93IHRoYXQgd2UgaGF2ZSBhIGZhbmN5IFN0YXRpc3RpY3MgY2xhc3MuCisK
KyAgICAgICAgKFRlc3RSdW4ud2Via2l0UmV2aXNpb24pOgorICAgICAgICAoUGVyZlRlc3RNZXRy
aWMpOiBSZW5hbWVkIGZyb20gUGVyZlRlc3Qgc2luY2UgdGhpcyBvYmplY3Qgbm93IGVuY2Fwc3Vs
YXRlcyBlYWNoIG1lYXN1cmVtZW50IChzdWNoIGFzIHRpbWUsCisgICAgICAgIEpTIGhlYXAsIGFu
ZCBtYWxsb2MpIGluIHRlc3QuIEFsc28gYWRkZWQgYSBjb252ZXJzaW9uIHRhYmxlIGZyb20gYSBt
ZXRyaWMgbmFtZSB0byBhIHVuaXQgc2luY2UgbmV3IGZvcm1hdAorICAgICAgICBkb2Vzbid0IGNv
bnRhaW4gdW5pdHMuCisgICAgICAgIChQZXJmVGVzdE1ldHJpYy5uYW1lKTogVXBkYXRlZCB0byBj
b21wdXRlIHRoZSBmdWxsIG1ldHJpYyBuYW1lIGZyb20gdGVzdCBuYW1lIGFuZCBtZXRyaWMgbmFt
ZSwgbWF0Y2hpbmcKKyAgICAgICAgdGhlIG9sZCBiZWhhdmlvci4KKyAgICAgICAgKFBlcmZUZXN0
TWV0cmljLmlzTWVtb3J5VGVzdCk6IEV4cGxpY2l0bHkgbG9vayBmb3IgJ0pTSGVhcCcgYW5kICdN
YWxsb2MnIHRlc3RzLgorICAgICAgICAoUGVyZlRlc3RNZXRyaWMuc21hbGxlcklzQmV0dGVyKToK
KworICAgICAgICAoYXR0YWNoUGxvdCk6IERlbGV0ZWQgdGhlIGNvZGUgdG8gZGVhbCB3aXRoIHRl
c3RzIHRoYXQgZG9uJ3QgcHJvdmlkZSBpbmRpdmlkdWFsIGl0ZXJhdGlvbiBtZWFzdXJlbWVudAor
ICAgICAgICBzaW5jZSBzdWNoIHRlc3RzIG5vIGxvbmdlciBleGlzdC4gQWxzbyBmaXhlZCB1cCB0
aGUgY29kZSBjb21wdXRlIHktYXhpcyByYW5nZS4KKworICAgICAgICAoY3JlYXRlVGFibGVSb3cu
bWFya3VwRm9yUnVuKTogVXBkYXRlZCB0byB1c2UgY29uZmlkZW5jZUludGVydmFsRGVsdGEoKSBp
bnN0ZWFkIG9mIHN0ZGV2KCkuCisgICAgICAgIAorICAgICAgICAoaW5pdC5hZGRUZXN0cyk6IEFk
ZGVkLiBSZWN1cnNpdmVseSBhZGQgbWV0cmljcy4KKworICAgICAgICAqIHJlc291cmNlcy9zdGF0
aXN0aWNzLmpzOiBBZGRlZC4gSW1wb3J0ZWQgZnJvbSBwZXJmLndlYmtpdC5vcmcuCisgICAgICAg
IChTdGF0aXN0aWNzLm1heCk6CisgICAgICAgIChTdGF0aXN0aWNzLm1pbik6CisgICAgICAgIChT
dGF0aXN0aWNzLnN1bSk6CisgICAgICAgIChTdGF0aXN0aWNzLnNxdWFyZVN1bSk6CisgICAgICAg
IChTdGF0aXN0aWNzLnNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uKToKKyAgICAgICAgKFN0YXRpc3Rp
Y3Muc3VwcG9ydGVkQ29uZmlkZW5jZUludGVydmFsUHJvYmFiaWxpdGllcyk6CisgICAgICAgIChT
dGF0aXN0aWNzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKToKKyAgICAgICAgKFN0YXRpc3RpY3Mu
Y29uZmlkZW5jZUludGVydmFsKToKKwogMjAxMy0wMi0xMSAgQWxleGVpIEZpbGlwcG92ICA8YWxw
aEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogU3BsaXQgUHJvZmlsZXIg
ZG9tYWluIGluIHByb3RvY29sIGludG8gUHJvZmlsZXIgYW5kIEhlYXBQcm9maWxlcgpJbmRleDog
UGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvcmVzdWx0cy10ZW1wbGF0ZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL3Jlc3VsdHMtdGVtcGxhdGUuaHRtbAko
cmV2aXNpb24gMTQ0MDAyKQorKysgUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvcmVzdWx0cy10
ZW1wbGF0ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsOCArMTM3LDkgQEAgUmVmZXJlbmNl
IDxzcGFuIGlkPSJyZWZlcmVuY2UiIGNsYXNzPSJjaAogPHNjcmlwdD4KIAogKGZ1bmN0aW9uICgp
IHsKLSAgICB2YXIgalF1ZXJ5ID0gWydQZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2Vz
L2Ryb21hZW8vd2ViL2xpYi9qcXVlcnktMS42LjQuanMnXTsKLSAgICB2YXIgcGx1Z2lucyA9IFsn
UGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LmZsb3QubWluLmpzJywgJ1BlcmZvcm1h
bmNlVGVzdHMvcmVzb3VyY2VzL2pxdWVyeS50YWJsZXNvcnRlci5taW4uanMnXTsKKyAgICB2YXIg
alF1ZXJ5ID0gJ1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIv
bGliL2pxdWVyeS0xLjYuNC5qcyc7CisgICAgdmFyIHBsdWdpbnMgPSBbJ1BlcmZvcm1hbmNlVGVz
dHMvcmVzb3VyY2VzL2pxdWVyeS5mbG90Lm1pbi5qcycsICdQZXJmb3JtYW5jZVRlc3RzL3Jlc291
cmNlcy9qcXVlcnkudGFibGVzb3J0ZXIubWluLmpzJywKKyAgICAgICAgJ1BlcmZvcm1hbmNlVGVz
dHMvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanMnXTsKICAgICB2YXIgbG9jYWxQYXRoID0gJyVBYnNv
bHV0ZVBhdGhUb1dlYktpdFRydW5rJSc7CiAgICAgdmFyIHJlbW90ZVBhdGggPSAnaHR0cHM6Ly9z
dm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuayc7CiAgICAgdmFyIG51bWJlck9m
RmFpbHVyZXMgPSAwOwpAQCAtMTgzLDI3ICsxODQsMjkgQEAgUmVmZXJlbmNlIDxzcGFuIGlkPSJy
ZWZlcmVuY2UiIGNsYXNzPSJjaAogICAgICAgICB9KTsKIH0pKCk7CiAKLWZ1bmN0aW9uIFRlc3RS
ZXN1bHQoYXNzb2NpYXRlZFRlc3QsIHJlc3VsdCwgYXNzb2NpYXRlZFJ1bikgewotICAgIHRoaXMu
dW5pdCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc3VsdC51bml0OyB9Ci0gICAgdGhpcy50ZXN0
ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzb2NpYXRlZFRlc3Q7IH0KLSAgICB0aGlzLnZhbHVl
cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc3VsdC52YWx1ZXMgPyByZXN1bHQudmFsdWVzLm1h
cChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGFzc29jaWF0ZWRUZXN0LnNjYWxpbmdGYWN0b3Io
KSAqIHZhbHVlOyB9KSA6IHVuZGVmaW5lZDsgfQotICAgIHRoaXMudW5zY2FsZWRNZWFuID0gZnVu
Y3Rpb24gKCkgeyByZXR1cm4gcmVzdWx0LmF2ZzsgfQotICAgIHRoaXMubWVhbiA9IGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIGFzc29jaWF0ZWRUZXN0LnNjYWxpbmdGYWN0b3IoKSAqIHJlc3VsdC5hdmc7
IH0KLSAgICB0aGlzLm1pbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc29jaWF0ZWRUZXN0LnNj
YWxpbmdGYWN0b3IoKSAqIHJlc3VsdC5taW47IH0KLSAgICB0aGlzLm1heCA9IGZ1bmN0aW9uICgp
IHsgcmV0dXJuIGFzc29jaWF0ZWRUZXN0LnNjYWxpbmdGYWN0b3IoKSAqIHJlc3VsdC5tYXg7IH0K
LSAgICB0aGlzLnN0ZGV2ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzb2NpYXRlZFRlc3Quc2Nh
bGluZ0ZhY3RvcigpICogcmVzdWx0LnN0ZGV2OyB9Ci0gICAgdGhpcy5zdGRldlJhdGlvID0gZnVu
Y3Rpb24gKCkgeyByZXR1cm4gcmVzdWx0LnN0ZGV2IC8gcmVzdWx0LmF2ZzsgfQotICAgIHRoaXMu
cGVyY2VudERpZmZlcmVuY2UgPSBmdW5jdGlvbihvdGhlcikgeyByZXR1cm4gKG90aGVyLm1lYW4o
KSAtIHRoaXMubWVhbigpKSAvIHRoaXMubWVhbigpOyB9CitmdW5jdGlvbiBUZXN0UmVzdWx0KG1l
dHJpYywgdmFsdWVzLCBhc3NvY2lhdGVkUnVuKSB7CisgICAgdGhpcy50ZXN0ID0gZnVuY3Rpb24g
KCkgeyByZXR1cm4gbWV0cmljOyB9CisgICAgdGhpcy52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7IHJl
dHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gbWV0cmljLnNjYWxpbmdG
YWN0b3IoKSAqIHZhbHVlOyB9KTsgfQorICAgIHRoaXMudW5zY2FsZWRNZWFuID0gZnVuY3Rpb24g
KCkgeyByZXR1cm4gU3RhdGlzdGljcy5zdW0odmFsdWVzKSAvIHZhbHVlcy5sZW5ndGg7IH0KKyAg
ICB0aGlzLm1lYW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3Rvcigp
ICogdGhpcy51bnNjYWxlZE1lYW4oKTsgfQorICAgIHRoaXMubWluID0gZnVuY3Rpb24gKCkgeyBy
ZXR1cm4gbWV0cmljLnNjYWxpbmdGYWN0b3IoKSAqIFN0YXRpc3RpY3MubWluKHZhbHVlcyk7IH0K
KyAgICB0aGlzLm1heCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9y
KCkgKiBTdGF0aXN0aWNzLm1heCh2YWx1ZXMpOyB9CisgICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2
YWxEZWx0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFj
dG9yKCkgKiBTdGF0aXN0aWNzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKDAuOTUsIHZhbHVlcy5s
ZW5ndGgsCisgICAgICAgICAgICBTdGF0aXN0aWNzLnN1bSh2YWx1ZXMpLCBTdGF0aXN0aWNzLnNx
dWFyZVN1bSh2YWx1ZXMpKTsKKyAgICB9CisgICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0
YVJhdGlvID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0
YSgpIC8gdGhpcy5tZWFuKCk7IH0KKyAgICB0aGlzLnBlcmNlbnREaWZmZXJlbmNlID0gZnVuY3Rp
b24ob3RoZXIpIHsgcmV0dXJuIChvdGhlci51bnNjYWxlZE1lYW4oKSAtIHRoaXMudW5zY2FsZWRN
ZWFuKCkpIC8gdGhpcy51bnNjYWxlZE1lYW4oKTsgfQogICAgIHRoaXMuaXNTdGF0aXN0aWNhbGx5
U2lnbmlmaWNhbnQgPSBmdW5jdGlvbiAob3RoZXIpIHsKICAgICAgICAgdmFyIGRpZmYgPSBNYXRo
LmFicyhvdGhlci5tZWFuKCkgLSB0aGlzLm1lYW4oKSk7Ci0gICAgICAgIHJldHVybiBkaWZmID4g
dGhpcy5zdGRldigpICYmIGRpZmYgPiBvdGhlci5zdGRldigpOworICAgICAgICByZXR1cm4gZGlm
ZiA+IHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKSAmJiBkaWZmID4gb3RoZXIuY29uZmlk
ZW5jZUludGVydmFsRGVsdGEoKTsKICAgICB9CiAgICAgdGhpcy5ydW4gPSBmdW5jdGlvbiAoKSB7
IHJldHVybiBhc3NvY2lhdGVkUnVuOyB9CiB9CiAKIGZ1bmN0aW9uIFRlc3RSdW4oZW50cnkpIHsK
ICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZW50cnlbJ2Rlc2Ny
aXB0aW9uJ107IH0KLSAgICB0aGlzLndlYmtpdFJldmlzaW9uID0gZnVuY3Rpb24gKCkgeyByZXR1
cm4gZW50cnlbJ3dlYmtpdC1yZXZpc2lvbiddOyB9CisgICAgdGhpcy53ZWJraXRSZXZpc2lvbiA9
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudHJ5WydyZXZpc2lvbnMnXVsnV2ViS2l0J11bJ3Jldmlz
aW9uJ107IH0KICAgICB0aGlzLmxhYmVsID0gZnVuY3Rpb24gKCkgewogICAgICAgICB2YXIgbGFi
ZWwgPSAncicgKyB0aGlzLndlYmtpdFJldmlzaW9uKCk7CiAgICAgICAgIGlmICh0aGlzLmRlc2Ny
aXB0aW9uKCkpCkBAIC0yMTIsMTAgKzIxNSwxNSBAQCBmdW5jdGlvbiBUZXN0UnVuKGVudHJ5KSB7
CiAgICAgfQogfQogCi1mdW5jdGlvbiBQZXJmVGVzdChuYW1lKSB7CitmdW5jdGlvbiBQZXJmVGVz
dE1ldHJpYyhuYW1lLCBtZXRyaWMpIHsKICAgICB2YXIgdGVzdFJlc3VsdHMgPSBbXTsKICAgICB2
YXIgY2FjaGVkVW5pdCA9IG51bGw7CiAgICAgdmFyIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSBudWxs
OworICAgIHZhciB1bml0ID0geydGcmFtZVJhdGUnOiAnZnBzJywKKyAgICAgICAgJ1J1bnMnOiAn
cnVucy9zJywKKyAgICAgICAgJ1RpbWUnOiAnbXMnLAorICAgICAgICAnTWFsbG9jJzogJ2J5dGVz
JywKKyAgICAgICAgJ0pTSGVhcCc6ICdieXRlcyd9W21ldHJpY107CiAKICAgICAvLyBXZSBjYW4n
dCBkbyB0aGlzIGluIFRlc3RSZXN1bHQgYmVjYXVzZSBhbGwgcmVzdWx0cyBmb3IgZWFjaCB0ZXN0
IG5lZWQgdG8gc2hhcmUgdGhlIHNhbWUgdW5pdCBhbmQgdGhlIHNhbWUgc2NhbGluZyBmYWN0b3Iu
CiAgICAgZnVuY3Rpb24gY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpIHsKQEAgLTIyNCw3
ICsyMzIsNiBAQCBmdW5jdGlvbiBQZXJmVGVzdChuYW1lKSB7CiAgICAgICAgIGlmICghdGVzdFJl
c3VsdHMubGVuZ3RoIHx8IGNhY2hlZFVuaXQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgdmFyIHVuaXQgPSB0ZXN0UmVzdWx0c1swXS51bml0KCk7IC8vIEZJWE1FOiBXZSBzaG91bGQg
dmVyaWZ5IHRoYXQgYWxsIHJlc3VsdHMgaGF2ZSB0aGUgc2FtZSB1bml0LgogICAgICAgICB2YXIg
bWVhbiA9IHRlc3RSZXN1bHRzWzBdLnVuc2NhbGVkTWVhbigpOyAvLyBGSVhNRTogV2Ugc2hvdWxk
IGxvb2sgYXQgYWxsIHZhbHVlcy4KICAgICAgICAgdmFyIGtpbG8gPSB1bml0ID09ICdieXRlcycg
PyAxMDI0IDogMTAwMDsKICAgICAgICAgaWYgKG1lYW4gPiAxMCAqIGtpbG8gKiBraWxvICYmIHVu
aXQgIT0gJ21zJykgewpAQCAtMjM5LDggKzI0Niw4IEBAIGZ1bmN0aW9uIFBlcmZUZXN0KG5hbWUp
IHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRoaXMubmFtZSA9IGZ1bmN0aW9uICgpIHsgcmV0
dXJuIG5hbWU7IH0KLSAgICB0aGlzLmlzTWVtb3J5VGVzdCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJu
IG5hbWUuaW5kZXhPZignOicpID49IDA7IH0KKyAgICB0aGlzLm5hbWUgPSBmdW5jdGlvbiAoKSB7
IHJldHVybiBuYW1lICsgJzonICsgbWV0cmljOyB9CisgICAgdGhpcy5pc01lbW9yeVRlc3QgPSBm
dW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWMgPT0gJ0pTSGVhcCcgfHwgbWV0cmljID09ICdNYWxs
b2MnOyB9CiAgICAgdGhpcy5hZGRSZXN1bHQgPSBmdW5jdGlvbiAobmV3UmVzdWx0KSB7CiAgICAg
ICAgIHRlc3RSZXN1bHRzLnB1c2gobmV3UmVzdWx0KTsKICAgICAgICAgY2FjaGVkVW5pdCA9IG51
bGw7CkBAIC0yNTUsNyArMjYyLDcgQEAgZnVuY3Rpb24gUGVyZlRlc3QobmFtZSkgewogICAgICAg
ICBjb21wdXRlU2NhbGluZ0ZhY3RvcklmTmVlZGVkKCk7CiAgICAgICAgIHJldHVybiBjYWNoZWRV
bml0OwogICAgIH0KLSAgICB0aGlzLnNtYWxsZXJJc0JldHRlciA9IGZ1bmN0aW9uICgpIHsgcmV0
dXJuIHRlc3RSZXN1bHRzWzBdLnVuaXQoKSA9PSAnbXMnIHx8IHRlc3RSZXN1bHRzWzBdLnVuaXQo
KSA9PSAnYnl0ZXMnOyB9CisgICAgdGhpcy5zbWFsbGVySXNCZXR0ZXIgPSBmdW5jdGlvbiAoKSB7
IHJldHVybiB1bml0ID09ICdtcycgfHwgdW5pdCA9PSAnYnl0ZXMnOyB9CiB9CiAKIHZhciBwbG90
Q29sb3IgPSAncmdiKDIzMCw1MCw1MCknOwpAQCAtMzUzLDIyICszNjAsMTQgQEAgZnVuY3Rpb24g
YXR0YWNoUGxvdCh0ZXN0LCBwbG90Q29udGFpbmVyLAogICAgICAgICByZXR1cm4gbmV3VmFsdWVz
ID8gdmFsdWVzLmNvbmNhdChuZXdWYWx1ZXMubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4g
W2luZGV4LCB2YWx1ZV07IH0pKSA6IHZhbHVlczsKICAgICB9LCBbXSk7CiAKLSAgICB2YXIgcGxv
dERhdGEgPSBbXTsKLSAgICBpZiAodmFsdWVzLmxlbmd0aCkKLSAgICAgICAgcGxvdERhdGEgPSBb
JC5leHRlbmQodHJ1ZSwge30sIHN1YnBvaW50c1Bsb3RPcHRpb25zLCB7ZGF0YTogdmFsdWVzfSld
OwotICAgIGVsc2UgewotICAgICAgICBmdW5jdGlvbiBtYWtlU3VicG9pbnRzKGlkLCBjYWxsYmFj
aykgeyByZXR1cm4gJC5leHRlbmQodHJ1ZSwge30sIHN1YnBvaW50c1Bsb3RPcHRpb25zLCB7aWQ6
IGlkLCBkYXRhOiByZXN1bHRzLm1hcChjYWxsYmFjayl9KTsgfQotICAgICAgICBwbG90RGF0YSA9
IFttYWtlU3VicG9pbnRzKCdtaW4nLCBmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4g
W2luZGV4LCByZXN1bHQubWluKCldOyB9KSwKLSAgICAgICAgbWFrZVN1YnBvaW50cygnbWF4Jywg
ZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIFtpbmRleCwgcmVzdWx0Lm1heCgpXTsg
fSksCi0gICAgICAgIG1ha2VTdWJwb2ludHMoJy0mIzk2MzsnLCBmdW5jdGlvbiAocmVzdWx0LCBp
bmRleCkgeyByZXR1cm4gW2luZGV4LCByZXN1bHQubWVhbigpIC0gcmVzdWx0LnN0ZGV2KCldOyB9
KSwKLSAgICAgICAgbWFrZVN1YnBvaW50cygnKyYjOTYzOycsIGZ1bmN0aW9uIChyZXN1bHQsIGlu
ZGV4KSB7IHJldHVybiBbaW5kZXgsIHJlc3VsdC5tZWFuKCkgKyByZXN1bHQuc3RkZXYoKV07IH0p
XTsKLSAgICB9Ci0KKyAgICB2YXIgcGxvdERhdGEgPSBbJC5leHRlbmQodHJ1ZSwge30sIHN1YnBv
aW50c1Bsb3RPcHRpb25zLCB7ZGF0YTogdmFsdWVzfSldOwogICAgIHBsb3REYXRhLnB1c2goe2lk
OiAnJm11OycsIGRhdGE6IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJl
dHVybiBbaW5kZXgsIHJlc3VsdC5tZWFuKCldOyB9KSwgY29sb3I6IHBsb3RDb2xvcn0pOwogCisg
ICAgdmFyIG92ZXJhbGxNYXggPSBTdGF0aXN0aWNzLm1heChyZXN1bHRzLm1hcChmdW5jdGlvbiAo
cmVzdWx0LCBpbmRleCkgeyByZXR1cm4gcmVzdWx0Lm1heCgpOyB9KSk7CisgICAgdmFyIG92ZXJh
bGxNaW4gPSBTdGF0aXN0aWNzLm1pbihyZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRl
eCkgeyByZXR1cm4gcmVzdWx0Lm1pbigpOyB9KSk7CiAgICAgdmFyIGN1cnJlbnRQbG90T3B0aW9u
cyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBtYWluUGxvdE9wdGlvbnMsIHt5YXhpczogewotICAgICAg
ICBtaW46IG1pbklzWmVybyA/IDAgOiBNYXRoLm1pbi5hcHBseShNYXRoLCByZXN1bHRzLm1hcChm
dW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gcmVzdWx0Lm1pbigpOyB9KSkgKiAwLjk4
LAotICAgICAgICBtYXg6IE1hdGgubWF4LmFwcGx5KE1hdGgsIHJlc3VsdHMubWFwKGZ1bmN0aW9u
IChyZXN1bHQsIGluZGV4KSB7IHJldHVybiByZXN1bHQubWF4KCk7IH0pKSAqIChtaW5Jc1plcm8g
PyAxLjEgOiAxLjAxKX19KTsKKyAgICAgICAgbWluOiBtaW5Jc1plcm8gPyAwIDogb3ZlcmFsbE1p
biAtIChvdmVyYWxsTWF4IC0gb3ZlcmFsbE1pbikgKiAwLjEsCisgICAgICAgIG1heDogbWluSXNa
ZXJvID8gb3ZlcmFsbE1heCAqIDEuMSA6IG92ZXJhbGxNYXggKyAob3ZlcmFsbE1heCAtIG92ZXJh
bGxNaW4pICogMC4xfX0pOwogCiAgICAgY3VycmVudFBsb3RPcHRpb25zLnhheGlzLm1heCA9IHJl
c3VsdHMubGVuZ3RoIC0gMC41OwogICAgIGN1cnJlbnRQbG90T3B0aW9ucy54YXhpcy50aWNrcyA9
IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJldHVybiBbaW5kZXgsIHJl
c3VsdC5ydW4oKS5sYWJlbCgpXTsgfSk7CkBAIC00NzUsMTMgKzQ3NCwxMyBAQCBmdW5jdGlvbiBj
cmVhdGVUYWJsZVJvdyhydW5zLCB0ZXN0LCByZWZlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICB2YXIgc3RhdGlzdGljcyA9ICcmc2lnbWE7PScgKyB0b0ZpeGVkV2lkdGhQcmVj
aXNpb24ocmVzdWx0LnN0ZGV2KCkpICsgJywgbWluPScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24o
cmVzdWx0Lm1pbigpKQorICAgICAgICB2YXIgc3RhdGlzdGljcyA9ICcmc2lnbWE7PScgKyB0b0Zp
eGVkV2lkdGhQcmVjaXNpb24ocmVzdWx0LmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKCkpICsgJywg
bWluPScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVzdWx0Lm1pbigpKQogICAgICAgICAgICAg
KyAnLCBtYXg9JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZXN1bHQubWF4KCkpICsgJ1xuJyAr
IHJlZ3Jlc3Npb25BbmFseXNpczsKIAogICAgICAgICAvLyBUYWJsZXNvcnRlciBkb2Vzbid0IGtu
b3cgYWJvdXQgdGhlIHNlY29uZCBjZWxsIHNvIHB1dCB0aGUgY29tcGFyaXNvbiBpbiB0aGUgaW52
aXNpYmxlIGVsZW1lbnQuCiAgICAgICAgIHJldHVybiAnPHRkIGNsYXNzPSJyZXN1bHQiIHRpdGxl
PSInICsgc3RhdGlzdGljcyArICciPicgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVzdWx0Lm1l
YW4oKSkgKyBoaWRkZW5WYWx1ZQotICAgICAgICAgICAgKyAnPC90ZD48dGQgY2xhc3M9InN0ZGV2
IiB0aXRsZT0iJyArIHN0YXRpc3RpY3MgKyAnIj4mcGx1c21uOyAnCi0gICAgICAgICAgICArIGZv
cm1hdFBlcmNlbnRhZ2UocmVzdWx0LnN0ZGV2UmF0aW8oKSkgKyB3YXJuaW5nICsgJzwvdGQ+JyAr
IGNvbXBhcmlzb25DZWxsOworICAgICAgICAgICAgKyAnPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVu
Y2VJbnRlcnZhbERlbHRhIiB0aXRsZT0iJyArIHN0YXRpc3RpY3MgKyAnIj4mcGx1c21uOyAnCisg
ICAgICAgICAgICArIGZvcm1hdFBlcmNlbnRhZ2UocmVzdWx0LmNvbmZpZGVuY2VJbnRlcnZhbERl
bHRhUmF0aW8oKSkgKyB3YXJuaW5nICsgJzwvdGQ+JyArIGNvbXBhcmlzb25DZWxsOwogICAgIH0K
IAogICAgIGZ1bmN0aW9uIG1hcmt1cEZvck1pc3NpbmdSdW4oaXNSZWZlcmVuY2UpIHsKQEAgLTU0
NywyNCArNTQ2LDQyIEBAIGZ1bmN0aW9uIGluaXQoKSB7CiAgICAgfSk7CiAKICAgICB2YXIgcnVu
cyA9IFtdOwotICAgIHZhciB0ZXN0cyA9IHt9OworICAgIHZhciBtZXRyaWNzID0ge307CiAgICAg
JC5lYWNoKEpTT04ucGFyc2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pzb24nKS50ZXh0Q29u
dGVudCksIGZ1bmN0aW9uIChpbmRleCwgZW50cnkpIHsKICAgICAgICAgdmFyIHJ1biA9IG5ldyBU
ZXN0UnVuKGVudHJ5KTsKICAgICAgICAgcnVucy5wdXNoKHJ1bik7Ci0gICAgICAgICQuZWFjaChl
bnRyeS5yZXN1bHRzLCBmdW5jdGlvbiAodGVzdCwgcmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAo
IXRlc3RzW3Rlc3RdKQotICAgICAgICAgICAgICAgIHRlc3RzW3Rlc3RdID0gbmV3IFBlcmZUZXN0
KHRlc3QpOwotICAgICAgICAgICAgdGVzdHNbdGVzdF0uYWRkUmVzdWx0KG5ldyBUZXN0UmVzdWx0
KHRlc3RzW3Rlc3RdLCByZXN1bHQsIHJ1bikpOwotICAgICAgICB9KTsKKworICAgICAgICBmdW5j
dGlvbiBhZGRUZXN0cyh0ZXN0cywgcGFyZW50RnVsbE5hbWUpIHsKKyAgICAgICAgICAgIGZvciAo
dmFyIHRlc3ROYW1lIGluIHRlc3RzKSB7CisgICAgICAgICAgICAgICAgdmFyIGZ1bGxUZXN0TmFt
ZSA9IHBhcmVudEZ1bGxOYW1lICsgJy8nICsgdGVzdE5hbWU7CisgICAgICAgICAgICAgICAgdmFy
IHJhd01ldHJpY3MgPSB0ZXN0c1t0ZXN0TmFtZV0ubWV0cmljczsKKworICAgICAgICAgICAgICAg
IGZvciAodmFyIG1ldHJpY05hbWUgaW4gcmF3TWV0cmljcykgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgZnVsbE1ldHJpY05hbWUgPSBmdWxsVGVzdE5hbWUgKyAnOicgKyBtZXRyaWNOYW1lOwor
ICAgICAgICAgICAgICAgICAgICB2YXIgbWV0cmljID0gbWV0cmljc1tmdWxsTWV0cmljTmFtZV07
CisgICAgICAgICAgICAgICAgICAgIGlmICghbWV0cmljKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtZXRyaWMgPSBuZXcgUGVyZlRlc3RNZXRyaWMoZnVsbFRlc3ROYW1lLCBtZXRyaWNOYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3NbZnVsbE1ldHJpY05hbWVdID0gbWV0
cmljOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1ldHJpYy5h
ZGRSZXN1bHQobmV3IFRlc3RSZXN1bHQobWV0cmljLCByYXdNZXRyaWNzW21ldHJpY05hbWVdLmN1
cnJlbnQsIHJ1bikpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0
ZXN0c1t0ZXN0TmFtZV0udGVzdHMpCisgICAgICAgICAgICAgICAgICAgIGFkZFRlc3RzKHRlc3Rz
W3Rlc3ROYW1lXS50ZXN0cywgZnVsbFRlc3ROYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGFkZFRlc3RzKGVudHJ5LnRlc3RzLCAnJyk7CiAgICAgfSk7CiAKICAgICB2
YXIgc2hvdWxkSWdub3JlTWVtb3J5PSB0cnVlOwogICAgIHZhciByZWZlcmVuY2VJbmRleCA9IDA7
Ci0gICAgY3JlYXRlVGFibGUodGVzdHMsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJl
bmNlSW5kZXgpOworCisgICAgY3JlYXRlVGFibGUobWV0cmljcywgcnVucywgc2hvdWxkSWdub3Jl
TWVtb3J5LCByZWZlcmVuY2VJbmRleCk7CiAKICAgICAkKCcjdGltZS1tZW1vcnknKS5iaW5kKCdj
aGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQsIGNoZWNrZWRFbGVtZW50KSB7CiAgICAgICAgIHNob3Vs
ZElnbm9yZU1lbW9yeSA9IGNoZWNrZWRFbGVtZW50LnRleHRDb250ZW50ID09ICdUaW1lJzsKLSAg
ICAgICAgY3JlYXRlVGFibGUodGVzdHMsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJl
bmNlSW5kZXgpOworICAgICAgICBjcmVhdGVUYWJsZShtZXRyaWNzLCBydW5zLCBzaG91bGRJZ25v
cmVNZW1vcnksIHJlZmVyZW5jZUluZGV4KTsKICAgICB9KTsKIAogICAgIHJ1bnMubWFwKGZ1bmN0
aW9uIChydW4sIGluZGV4KSB7CkBAIC01NzMsNyArNTkwLDcgQEAgZnVuY3Rpb24gaW5pdCgpIHsK
IAogICAgICQoJyNyZWZlcmVuY2UnKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQsIGNo
ZWNrZWRFbGVtZW50KSB7CiAgICAgICAgIHJlZmVyZW5jZUluZGV4ID0gcGFyc2VJbnQoY2hlY2tl
ZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKTsKLSAgICAgICAgY3JlYXRlVGFibGUodGVz
dHMsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgpOworICAgICAgICBj
cmVhdGVUYWJsZShtZXRyaWNzLCBydW5zLCBzaG91bGRJZ25vcmVNZW1vcnksIHJlZmVyZW5jZUlu
ZGV4KTsKICAgICB9KTsKIAogICAgICQoJy5jaGVja2JveCcpLmVhY2goZnVuY3Rpb24gKGluZGV4
LCBjaGVja2JveCkgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlzdGlj
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9zdGF0aXN0aWNz
LmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlzdGlj
cy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCit2
YXIgU3RhdGlzdGljcyA9IG5ldyAoZnVuY3Rpb24gKCkgeworCisgICAgdGhpcy5tYXggPSBmdW5j
dGlvbiAodmFsdWVzKSB7CisgICAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseShNYXRoLCB2YWx1
ZXMpOworICAgIH0KKworICAgIHRoaXMubWluID0gZnVuY3Rpb24gKHZhbHVlcykgeworICAgICAg
ICByZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCwgdmFsdWVzKTsKKyAgICB9CisKKyAgICB0aGlz
LnN1bSA9IGZ1bmN0aW9uICh2YWx1ZXMpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlcy5sZW5ndGgg
PyB2YWx1ZXMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhICsgYjsgfSkgOiAwOwor
ICAgIH0KKworICAgIHRoaXMuc3F1YXJlU3VtID0gZnVuY3Rpb24gKHZhbHVlcykgeworICAgICAg
ICByZXR1cm4gdmFsdWVzLmxlbmd0aCA/IHZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgdmFs
dWUpIHsgcmV0dXJuIHN1bSArIHZhbHVlICogdmFsdWU7fSwgMCkgOiAwOworICAgIH0KKworICAg
IC8vIFdpdGggc3VtIGFuZCBzdW0gb2Ygc3F1YXJlcywgd2UgY2FuIGNvbXB1dGUgdGhlIHNhbXBs
ZSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gTygxKS4KKyAgICAvLyBTZWUgaHR0cHM6Ly9ybml3YS5j
b20vMjAxMi0xMS0xMC9zYW1wbGUtc3RhbmRhcmQtZGV2aWF0aW9uLWluLXRlcm1zLW9mLXN1bS1h
bmQtc3F1YXJlLXN1bS1vZi1zYW1wbGVzLworICAgIHRoaXMuc2FtcGxlU3RhbmRhcmREZXZpYXRp
b24gPSBmdW5jdGlvbiAobnVtYmVyT2ZTYW1wbGVzLCBzdW0sIHNxdWFyZVN1bSkgeworICAgICAg
ICBpZiAobnVtYmVyT2ZTYW1wbGVzIDwgMikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gTWF0aC5zcXJ0KHNxdWFyZVN1bSAvIChudW1iZXJPZlNhbXBsZXMgLSAxKSAtIHN1
bSAqIHN1bSAvIChudW1iZXJPZlNhbXBsZXMgLSAxKSAvIG51bWJlck9mU2FtcGxlcyk7CisgICAg
fQorCisgICAgdGhpcy5zdXBwb3J0ZWRDb25maWRlbmNlSW50ZXJ2YWxQcm9iYWJpbGl0aWVzID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc3VwcG9ydGVkUHJvYmFiaWxpdGllcyA9IFtdOwor
ICAgICAgICBmb3IgKHZhciBxdWFudGlsZSBpbiB0RGlzdHJpYnV0aW9uUXVhbnRpbGVzKQorICAg
ICAgICAgICAgc3VwcG9ydGVkUHJvYmFiaWxpdGllcy5wdXNoKCgxIC0gKDEgLSBxdWFudGlsZSkg
KiAyKS50b0ZpeGVkKDIpKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZFByb2JhYmlsaXRpZXMK
KyAgICB9CisKKyAgICAvLyBDb21wdXRlcyB0aGUgZGVsdGEgZCBzLnQuIChtZWFuIC0gZCwgbWVh
biArIGQpIGlzIHRoZSBjb25maWRlbmNlIGludGVydmFsIHdpdGggdGhlIHNwZWNpZmllZCBwcm9i
YWJpbGl0eSBpbiBPKDEpLgorICAgIHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEgPSBmdW5j
dGlvbiAocHJvYmFiaWxpdHksIG51bWJlck9mU2FtcGxlcywgc3VtLCBzcXVhcmVTdW0pIHsKKyAg
ICAgICAgdmFyIHF1YW50aWxlID0gKDEgLSAoMSAtIHByb2JhYmlsaXR5KSAvIDIpOworICAgICAg
ICBpZiAoIShxdWFudGlsZSBpbiB0RGlzdHJpYnV0aW9uUXVhbnRpbGVzKSkgeworICAgICAgICAg
ICAgdGhyb3cgJ1dlIG9ubHkgc3VwcG9ydCAnICsgdGhpcy5zdXBwb3J0ZWRDb25maWRlbmNlSW50
ZXJ2YWxQcm9iYWJpbGl0aWVzKCkubWFwKGZ1bmN0aW9uIChwcm9iYWJpbGl0eSkKKyAgICAgICAg
ICAgIHsgcmV0dXJuIHByb2JhYmlsaXR5ICogMTAwICsgJyUnOyB9ICkuam9pbignLCAnKSArICcg
Y29uZmlkZW5jZSBpbnRlcnZhbHMuJzsKKyAgICAgICAgfQorICAgICAgICBpZiAobnVtYmVyT2ZT
YW1wbGVzIC0gMiA8IDApCisgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICB2YXIgZGVs
dGFzID0gdERpc3RyaWJ1dGlvblF1YW50aWxlc1txdWFudGlsZV07CisgICAgICAgIHZhciBkZWdy
ZWVzT2ZGcmVlZG9tID0gbnVtYmVyT2ZTYW1wbGVzIC0gMTsKKyAgICAgICAgaWYgKGRlZ3JlZXNP
ZkZyZWVkb20gPiBkZWx0YXMubGVuZ3RoKQorICAgICAgICAgICAgdGhyb3cgJ1dlIG9ubHkgc3Vw
cG9ydCB1cCB0byAnICsgZGVsdGFzLmxlbmd0aCArICcgZGVncmVlcyBvZiBmcmVlZG9tJzsKKwor
ICAgICAgICAvLyBkID0gYyAqIFMvc3FydChudW1iZXJPZlNhbXBsZXMpIHdoZXJlIGMgfiB0LWRp
c3RyaWJ1dGlvbihkZWdyZWVzT2ZGcmVlZG9tKSBhbmQgUyBpcyB0aGUgc2FtcGxlIHN0YW5kYXJk
IGRldmlhdGlvbi4KKyAgICAgICAgcmV0dXJuIGRlbHRhc1tkZWdyZWVzT2ZGcmVlZG9tIC0gMV0g
KiB0aGlzLnNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uKG51bWJlck9mU2FtcGxlcywgc3VtLCBzcXVh
cmVTdW0pIC8gTWF0aC5zcXJ0KG51bWJlck9mU2FtcGxlcyk7CisgICAgfQorCisgICAgdGhpcy5j
b25maWRlbmNlSW50ZXJ2YWwgPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9iYWJpbGl0eSkgeworICAg
ICAgICB2YXIgc3VtID0gdGhpcy5zdW0odmFsdWVzKTsKKyAgICAgICAgdmFyIG1lYW4gPSBzdW0g
LyB2YWx1ZXMubGVuZ3RoOworICAgICAgICB2YXIgZGVsdGEgPSB0aGlzLmNvbmZpZGVuY2VJbnRl
cnZhbERlbHRhKHByb2JhYmlsaXR5IHx8IDAuOTUsIHZhbHVlcy5sZW5ndGgsIHN1bSwgdGhpcy5z
cXVhcmVTdW0odmFsdWVzKSk7CisgICAgICAgIHJldHVybiBbbWVhbiAtIGRlbHRhLCBtZWFuICsg
ZGVsdGFdOworICAgIH0KKworICAgIHZhciB0RGlzdHJpYnV0aW9uUXVhbnRpbGVzID0geworICAg
ICAgICAwLjk6IFsKKyAgICAgICAgICAgIDMuMDc3Njg0LCAxLjg4NTYxOCwgMS42Mzc3NDQsIDEu
NTMzMjA2LCAxLjQ3NTg4NCwgMS40Mzk3NTYsIDEuNDE0OTI0LCAxLjM5NjgxNSwgMS4zODMwMjks
IDEuMzcyMTg0LAorICAgICAgICAgICAgMS4zNjM0MzAsIDEuMzU2MjE3LCAxLjM1MDE3MSwgMS4z
NDUwMzAsIDEuMzQwNjA2LCAxLjMzNjc1NywgMS4zMzMzNzksIDEuMzMwMzkxLCAxLjMyNzcyOCwg
MS4zMjUzNDEsCisgICAgICAgICAgICAxLjMyMzE4OCwgMS4zMjEyMzcsIDEuMzE5NDYwLCAxLjMx
NzgzNiwgMS4zMTYzNDUsIDEuMzE0OTcyLCAxLjMxMzcwMywgMS4zMTI1MjcsIDEuMzExNDM0LCAx
LjMxMDQxNSwKKyAgICAgICAgICAgIDEuMzA5NDY0LCAxLjMwODU3MywgMS4zMDc3MzcsIDEuMzA2
OTUyLCAxLjMwNjIxMiwgMS4zMDU1MTQsIDEuMzA0ODU0LCAxLjMwNDIzMCwgMS4zMDM2MzksIDEu
MzAzMDc3LAorICAgICAgICAgICAgMS4zMDI1NDMsIDEuMzAyMDM1LCAxLjMwMTU1MiwgMS4zMDEw
OTAsIDEuMzAwNjQ5LCAxLjMwMDIyOCwgMS4yOTk4MjUsIDEuMjk5NDM5LCAxLjI5OTA2OSwgMS4y
OTg3MTQsCisKKyAgICAgICAgICAgIDEuMjk4MzczLCAxLjI5ODA0NSwgMS4yOTc3MzAsIDEuMjk3
NDI2LCAxLjI5NzEzNCwgMS4yOTY4NTMsIDEuMjk2NTgxLCAxLjI5NjMxOSwgMS4yOTYwNjYsIDEu
Mjk1ODIxLAorICAgICAgICAgICAgMS4yOTU1ODUsIDEuMjk1MzU2LCAxLjI5NTEzNCwgMS4yOTQ5
MjAsIDEuMjk0NzEyLCAxLjI5NDUxMSwgMS4yOTQzMTUsIDEuMjk0MTI2LCAxLjI5Mzk0MiwgMS4y
OTM3NjMsCisgICAgICAgICAgICAxLjI5MzU4OSwgMS4yOTM0MjEsIDEuMjkzMjU2LCAxLjI5MzA5
NywgMS4yOTI5NDEsIDEuMjkyNzkwLCAxLjI5MjY0MywgMS4yOTI1MDAsIDEuMjkyMzYwLCAxLjI5
MjIyNCwKKyAgICAgICAgICAgIDEuMjkyMDkxLCAxLjI5MTk2MSwgMS4yOTE4MzUsIDEuMjkxNzEx
LCAxLjI5MTU5MSwgMS4yOTE0NzMsIDEuMjkxMzU4LCAxLjI5MTI0NiwgMS4yOTExMzYsIDEuMjkx
MDI5LAorICAgICAgICAgICAgMS4yOTA5MjQsIDEuMjkwODIxLCAxLjI5MDcyMSwgMS4yOTA2MjMs
IDEuMjkwNTI3LCAxLjI5MDQzMiwgMS4yOTAzNDAsIDEuMjkwMjUwLCAxLjI5MDE2MSwgMS4yOTAw
NzVdLAorICAgICAgICAwLjk1OiBbCisgICAgICAgICAgICA2LjMxMzc1MiwgMi45MTk5ODYsIDIu
MzUzMzYzLCAyLjEzMTg0NywgMi4wMTUwNDgsIDEuOTQzMTgwLCAxLjg5NDU3OSwgMS44NTk1NDgs
IDEuODMzMTEzLCAxLjgxMjQ2MSwKKyAgICAgICAgICAgIDEuNzk1ODg1LCAxLjc4MjI4OCwgMS43
NzA5MzMsIDEuNzYxMzEwLCAxLjc1MzA1MCwgMS43NDU4ODQsIDEuNzM5NjA3LCAxLjczNDA2NCwg
MS43MjkxMzMsIDEuNzI0NzE4LAorICAgICAgICAgICAgMS43MjA3NDMsIDEuNzE3MTQ0LCAxLjcx
Mzg3MiwgMS43MTA4ODIsIDEuNzA4MTQxLCAxLjcwNTYxOCwgMS43MDMyODgsIDEuNzAxMTMxLCAx
LjY5OTEyNywgMS42OTcyNjEsCisgICAgICAgICAgICAxLjY5NTUxOSwgMS42OTM4ODksIDEuNjky
MzYwLCAxLjY5MDkyNCwgMS42ODk1NzIsIDEuNjg4Mjk4LCAxLjY4NzA5NCwgMS42ODU5NTQsIDEu
Njg0ODc1LCAxLjY4Mzg1MSwKKyAgICAgICAgICAgIDEuNjgyODc4LCAxLjY4MTk1MiwgMS42ODEw
NzEsIDEuNjgwMjMwLCAxLjY3OTQyNywgMS42Nzg2NjAsIDEuNjc3OTI3LCAxLjY3NzIyNCwgMS42
NzY1NTEsIDEuNjc1OTA1LAorCisgICAgICAgICAgICAxLjY3NTI4NSwgMS42NzQ2ODksIDEuNjc0
MTE2LCAxLjY3MzU2NSwgMS42NzMwMzQsIDEuNjcyNTIyLCAxLjY3MjAyOSwgMS42NzE1NTMsIDEu
NjcxMDkzLCAxLjY3MDY0OSwKKyAgICAgICAgICAgIDEuNjcwMjE5LCAxLjY2OTgwNCwgMS42Njk0
MDIsIDEuNjY5MDEzLCAxLjY2ODYzNiwgMS42NjgyNzEsIDEuNjY3OTE2LCAxLjY2NzU3MiwgMS42
NjcyMzksIDEuNjY2OTE0LAorICAgICAgICAgICAgMS42NjY2MDAsIDEuNjY2Mjk0LCAxLjY2NTk5
NiwgMS42NjU3MDcsIDEuNjY1NDI1LCAxLjY2NTE1MSwgMS42NjQ4ODUsIDEuNjY0NjI1LCAxLjY2
NDM3MSwgMS42NjQxMjUsCisgICAgICAgICAgICAxLjY2Mzg4NCwgMS42NjM2NDksIDEuNjYzNDIw
LCAxLjY2MzE5NywgMS42NjI5NzgsIDEuNjYyNzY1LCAxLjY2MjU1NywgMS42NjIzNTQsIDEuNjYy
MTU1LCAxLjY2MTk2MSwKKyAgICAgICAgICAgIDEuNjYxNzcxLCAxLjY2MTU4NSwgMS42NjE0MDQs
IDEuNjYxMjI2LCAxLjY2MTA1MiwgMS42NjA4ODEsIDEuNjYwNzE1LCAxLjY2MDU1MSwgMS42NjAz
OTEsIDEuNjYwMjM0XSwKKyAgICAgICAgMC45NzU6IFsKKyAgICAgICAgICAgIDEyLjcwNjIwNSwg
NC4zMDI2NTMsIDMuMTgyNDQ2LCAyLjc3NjQ0NSwgMi41NzA1ODIsIDIuNDQ2OTEyLCAyLjM2NDYy
NCwgMi4zMDYwMDQsIDIuMjYyMTU3LCAyLjIyODEzOSwKKyAgICAgICAgICAgIDIuMjAwOTg1LCAy
LjE3ODgxMywgMi4xNjAzNjksIDIuMTQ0Nzg3LCAyLjEzMTQ1MCwgMi4xMTk5MDUsIDIuMTA5ODE2
LCAyLjEwMDkyMiwgMi4wOTMwMjQsIDIuMDg1OTYzLAorICAgICAgICAgICAgMi4wNzk2MTQsIDIu
MDczODczLCAyLjA2ODY1OCwgMi4wNjM4OTksIDIuMDU5NTM5LCAyLjA1NTUyOSwgMi4wNTE4MzEs
IDIuMDQ4NDA3LCAyLjA0NTIzMCwgMi4wNDIyNzIsCisgICAgICAgICAgICAyLjAzOTUxMywgMi4w
MzY5MzMsIDIuMDM0NTE1LCAyLjAzMjI0NSwgMi4wMzAxMDgsIDIuMDI4MDk0LCAyLjAyNjE5Miwg
Mi4wMjQzOTQsIDIuMDIyNjkxLCAyLjAyMTA3NSwKKyAgICAgICAgICAgIDIuMDE5NTQxLCAyLjAx
ODA4MiwgMi4wMTY2OTIsIDIuMDE1MzY4LCAyLjAxNDEwMywgMi4wMTI4OTYsIDIuMDExNzQxLCAy
LjAxMDYzNSwgMi4wMDk1NzUsIDIuMDA4NTU5LAorCisgICAgICAgICAgICAyLjAwNzU4NCwgMi4w
MDY2NDcsIDIuMDA1NzQ2LCAyLjAwNDg3OSwgMi4wMDQwNDUsIDIuMDAzMjQxLCAyLjAwMjQ2NSwg
Mi4wMDE3MTcsIDIuMDAwOTk1LCAyLjAwMDI5OCwKKyAgICAgICAgICAgIDEuOTk5NjI0LCAxLjk5
ODk3MiwgMS45OTgzNDEsIDEuOTk3NzMwLCAxLjk5NzEzOCwgMS45OTY1NjQsIDEuOTk2MDA4LCAx
Ljk5NTQ2OSwgMS45OTQ5NDUsIDEuOTk0NDM3LAorICAgICAgICAgICAgMS45OTM5NDMsIDEuOTkz
NDY0LCAxLjk5Mjk5NywgMS45OTI1NDMsIDEuOTkyMTAyLCAxLjk5MTY3MywgMS45OTEyNTQsIDEu
OTkwODQ3LCAxLjk5MDQ1MCwgMS45OTAwNjMsCisgICAgICAgICAgICAxLjk4OTY4NiwgMS45ODkz
MTksIDEuOTg4OTYwLCAxLjk4ODYxMCwgMS45ODgyNjgsIDEuOTg3OTM0LCAxLjk4NzYwOCwgMS45
ODcyOTAsIDEuOTg2OTc5LCAxLjk4NjY3NSwKKyAgICAgICAgICAgIDEuOTg2Mzc3LCAxLjk4NjA4
NiwgMS45ODU4MDIsIDEuOTg1NTIzLCAxLjk4NTI1MSwgMS45ODQ5ODQsIDEuOTg0NzIzLCAxLjk4
NDQ2NywgMS45ODQyMTcsIDEuOTgzOTcyXSwKKyAgICAgICAgMC45OTogWworICAgICAgICAgICAg
MzEuODIwNTE2LCA2Ljk2NDU1NywgNC41NDA3MDMsIDMuNzQ2OTQ3LCAzLjM2NDkzMCwgMy4xNDI2
NjgsIDIuOTk3OTUyLCAyLjg5NjQ1OSwgMi44MjE0MzgsIDIuNzYzNzY5LAorICAgICAgICAgICAg
Mi43MTgwNzksIDIuNjgwOTk4LCAyLjY1MDMwOSwgMi42MjQ0OTQsIDIuNjAyNDgwLCAyLjU4MzQ4
NywgMi41NjY5MzQsIDIuNTUyMzgwLCAyLjUzOTQ4MywgMi41Mjc5NzcsCisgICAgICAgICAgICAy
LjUxNzY0OCwgMi41MDgzMjUsIDIuNDk5ODY3LCAyLjQ5MjE1OSwgMi40ODUxMDcsIDIuNDc4NjMw
LCAyLjQ3MjY2MCwgMi40NjcxNDAsIDIuNDYyMDIxLCAyLjQ1NzI2MiwKKyAgICAgICAgICAgIDIu
NDUyODI0LCAyLjQ0ODY3OCwgMi40NDQ3OTQsIDIuNDQxMTUwLCAyLjQzNzcyMywgMi40MzQ0OTQs
IDIuNDMxNDQ3LCAyLjQyODU2OCwgMi40MjU4NDEsIDIuNDIzMjU3LAorICAgICAgICAgICAgMi40
MjA4MDMsIDIuNDE4NDcwLCAyLjQxNjI1MCwgMi40MTQxMzQsIDIuNDEyMTE2LCAyLjQxMDE4OCwg
Mi40MDgzNDUsIDIuNDA2NTgxLCAyLjQwNDg5MiwgMi40MDMyNzIsCisKKyAgICAgICAgICAgIDIu
NDAxNzE4LCAyLjQwMDIyNSwgMi4zOTg3OTAsIDIuMzk3NDEwLCAyLjM5NjA4MSwgMi4zOTQ4MDEs
IDIuMzkzNTY4LCAyLjM5MjM3NywgMi4zOTEyMjksIDIuMzkwMTE5LAorICAgICAgICAgICAgMi4z
ODkwNDcsIDIuMzg4MDExLCAyLjM4NzAwOCwgMi4zODYwMzcsIDIuMzg1MDk3LCAyLjM4NDE4Niwg
Mi4zODMzMDIsIDIuMzgyNDQ2LCAyLjM4MTYxNSwgMi4zODA4MDcsCisgICAgICAgICAgICAyLjM4
MDAyNCwgMi4zNzkyNjIsIDIuMzc4NTIyLCAyLjM3NzgwMiwgMi4zNzcxMDIsIDIuMzc2NDIwLCAy
LjM3NTc1NywgMi4zNzUxMTEsIDIuMzc0NDgyLCAyLjM3Mzg2OCwKKyAgICAgICAgICAgIDIuMzcz
MjcwLCAyLjM3MjY4NywgMi4zNzIxMTksIDIuMzcxNTY0LCAyLjM3MTAyMiwgMi4zNzA0OTMsIDIu
MzY5OTc3LCAyLjM2OTQ3MiwgMi4zNjg5NzksIDIuMzY4NDk3LAorICAgICAgICAgICAgMi4zNjgw
MjYsIDIuMzY3NTY2LCAyLjM2NzExNSwgMi4zNjY2NzQsIDIuMzY2MjQzLCAyLjM2NTgyMSwgMi4z
NjU0MDcsIDIuMzY1MDAyLCAyLjM2NDYwNiwgMi4zNjQyMTddCisgICAgfTsKKworfSkoKTsKKwor
aWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICBmb3IgKHZhciBrZXkgaW4g
U3RhdGlzdGljcykKKyAgICAgICAgbW9kdWxlLmV4cG9ydHNba2V5XSA9IFN0YXRpc3RpY3Nba2V5
XTsKK30KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE0NDAxMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDM2IEBACisyMDEzLTAyLTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgorCisgICAgICAgIFVzZSBwZXJmLndlYmtpdC5vcmcgSlNPTiBmb3JtYXQgaW4gcmVzdWx0
cyBwYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTA4NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
aGFuZ2UgdGhlIGRlZmF1bHQgSlNPTiBmb3JtYXQgZnJvbSB0aGF0IG9mIHdlYmtpdC1wZXJmLmFw
cHNwb3QuY29tIHRvIHRoYXQgb2YgcGVyZi53ZWJraXQub3JnLgorCisgICAgICAgIEEgd2hvbGUg
YnVuY2ggb2YgaW50ZWdyYXRpb24gdGVzdHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBu
ZXcgSlNPTiBmb3JtYXQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNl
X3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weToKKyAgICAgICAgKFBlcmZUZXN0c1J1bm5lci5fZ2Vu
ZXJhdGVfYW5kX3Nob3dfcmVzdWx0cyk6IFJlbmFtZWQgb3V0cHV0IGFuZCBvdXRwdXRfcGF0aCB0
byBsZWdhY3lfb3V0cHV0CisgICAgICAgIGFuZCBsZWdhY3lfb3V0cHV0X2pzb25fcGF0aCByZXNw
ZWN0aXZlbHkuCisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX2dlbmVyYXRlX3Jlc3VsdHNfZGlj
dCk6IERvbid0IGFzc3VtZSBtZXRhIGJ1aWxkIGluZm9ybWF0aW9uIGlzIGFsd2F5cyBhdmFpbGFi
bGUuCisgICAgICAgIChQZXJmVGVzdHNSdW5uZXIuX2dlbmVyYXRlX291dHB1dF9maWxlcyk6IE1h
a2UganNvbl9vdXRwdXQsIHdoaWNoIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGRlZmF1bHQKKyAg
ICAgICAgSlNPTiBmaWxlIGFuZCB0aGUgcmVzdWx0cyBwYWdlIG91dCBvZiBwZXJmX3dlYmtpdF9v
dXRwdXQgaW5zdGVhZCBvZiBsZWdhY3lfb3V0cHV0LgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfaW50ZWdyYXRpb250ZXN0LnB5
OgorICAgICAgICAoTWFpblRlc3QudGVzdF9ydW5fbWVtb3J5X3Rlc3QpOgorICAgICAgICAoTWFp
blRlc3QuX3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRwdXQubW9ja191cGxvYWRfanNvbik6CisgICAg
ICAgIChNYWluVGVzdCk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3J1bl93aXRoX2pzb25fb3V0
cHV0KToKKyAgICAgICAgKE1haW5UZXN0LnRlc3RfcnVuX3dpdGhfZGVzY3JpcHRpb24pOgorICAg
ICAgICAoTWFpblRlc3QudGVzdF9ydW5fZ2VuZXJhdGVzX2pzb25fYnlfZGVmYXVsdCk6CisgICAg
ICAgIChNYWluVGVzdC50ZXN0X3J1bl9tZXJnZXNfb3V0cHV0X2J5X2RlZmF1bHQpOgorICAgICAg
ICAoTWFpblRlc3QudGVzdF9ydW5fcmVzcGVjdHNfcmVzZXRfcmVzdWx0cyk6CisgICAgICAgIChN
YWluVGVzdC50ZXN0X3J1bl9nZW5lcmF0ZXNfYW5kX3Nob3dfcmVzdWx0c19wYWdlKToKKyAgICAg
ICAgKE1haW5UZXN0LnRlc3RfcnVuX3dpdGhfc2xhdmVfY29uZmlnX2pzb24pOgorICAgICAgICAo
TWFpblRlc3QudGVzdF9ydW5fd2l0aF9tdWx0aXBsZV9yZXBvc2l0b3JpZXMpOgorICAgICAgICAo
TWFpblRlc3QudGVzdF9ydW5fd2l0aF91cGxvYWRfanNvbik6CisgICAgICAgIChNYWluVGVzdC50
ZXN0X3J1bl93aXRoX3VwbG9hZF9qc29uX3Nob3VsZF9nZW5lcmF0ZV9wZXJmX3dlYmtpdF9qc29u
KToKKwogMjAxMy0wMi0yNSAgQWxhbiBDdXR0ZXIgIDxhbGFuY3V0dGVyQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBHQ0UgRVdTIGJvdHMgZmFpbGluZyBpbnRlcm1pdHRlbnRseSBvbiBIVFRQIDUw
MiBlcnJvciB3aGlsZSB1cGRhdGluZyB0aGVpciBzdGF0dXMKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVu
bmVyLnB5CShyZXZpc2lvbiAxNDQwMDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZv
cm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lci5weQkod29ya2luZyBjb3B5KQpAQCAtMjA3LDI1
ICsyMDcsMjUgQEAgY2xhc3MgUGVyZlRlc3RzUnVubmVyKG9iamVjdCk6CiAKICAgICBkZWYgX2dl
bmVyYXRlX2FuZF9zaG93X3Jlc3VsdHMoc2VsZik6CiAgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9v
cHRpb25zCi0gICAgICAgIG91dHB1dF9qc29uX3BhdGggPSBzZWxmLl9vdXRwdXRfanNvbl9wYXRo
KCkKLSAgICAgICAgb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQgPSBzZWxmLl9nZW5lcmF0ZV9y
ZXN1bHRzX2RpY3Qoc2VsZi5fdGltZXN0YW1wLCBvcHRpb25zLmRlc2NyaXB0aW9uLCBvcHRpb25z
LnBsYXRmb3JtLCBvcHRpb25zLmJ1aWxkZXJfbmFtZSwgb3B0aW9ucy5idWlsZF9udW1iZXIpCisg
ICAgICAgIHBlcmZfd2Via2l0X2pzb25fcGF0aCA9IHNlbGYuX291dHB1dF9qc29uX3BhdGgoKQor
ICAgICAgICBsZWdhY3lfb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQgPSBzZWxmLl9nZW5lcmF0
ZV9yZXN1bHRzX2RpY3Qoc2VsZi5fdGltZXN0YW1wLCBvcHRpb25zLmRlc2NyaXB0aW9uLCBvcHRp
b25zLnBsYXRmb3JtLCBvcHRpb25zLmJ1aWxkZXJfbmFtZSwgb3B0aW9ucy5idWlsZF9udW1iZXIp
CiAKICAgICAgICAgaWYgb3B0aW9ucy5zbGF2ZV9jb25maWdfanNvbl9wYXRoOgotICAgICAgICAg
ICAgb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQgPSBzZWxmLl9tZXJnZV9zbGF2ZV9jb25maWdf
anNvbihvcHRpb25zLnNsYXZlX2NvbmZpZ19qc29uX3BhdGgsIG91dHB1dCwgcGVyZl93ZWJraXRf
b3V0cHV0KQotICAgICAgICAgICAgaWYgbm90IG91dHB1dDoKKyAgICAgICAgICAgIGxlZ2FjeV9v
dXRwdXQsIHBlcmZfd2Via2l0X291dHB1dCA9IHNlbGYuX21lcmdlX3NsYXZlX2NvbmZpZ19qc29u
KG9wdGlvbnMuc2xhdmVfY29uZmlnX2pzb25fcGF0aCwgbGVnYWN5X291dHB1dCwgcGVyZl93ZWJr
aXRfb3V0cHV0KQorICAgICAgICAgICAgaWYgbm90IGxlZ2FjeV9vdXRwdXQ6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuRVhJVF9DT0RFX0JBRF9TT1VSQ0VfSlNPTgogCi0gICAgICAgIG91
dHB1dCA9IHNlbGYuX21lcmdlX291dHB1dHNfaWZfbmVlZGVkKG91dHB1dF9qc29uX3BhdGgsIG91
dHB1dCkKLSAgICAgICAgaWYgbm90IG91dHB1dDoKKyAgICAgICAgcGVyZl93ZWJraXRfb3V0cHV0
ID0gc2VsZi5fbWVyZ2Vfb3V0cHV0c19pZl9uZWVkZWQocGVyZl93ZWJraXRfanNvbl9wYXRoLCBw
ZXJmX3dlYmtpdF9vdXRwdXQpCisgICAgICAgIGlmIG5vdCBwZXJmX3dlYmtpdF9vdXRwdXQ6CiAg
ICAgICAgICAgICByZXR1cm4gc2VsZi5FWElUX0NPREVfQkFEX01FUkdFCi0gICAgICAgIHBlcmZf
d2Via2l0X291dHB1dCA9IFtwZXJmX3dlYmtpdF9vdXRwdXRdCisgICAgICAgIGxlZ2FjeV9vdXRw
dXQgPSBbbGVnYWN5X291dHB1dF0KIAotICAgICAgICByZXN1bHRzX3BhZ2VfcGF0aCA9IHNlbGYu
X2hvc3QuZmlsZXN5c3RlbS5zcGxpdGV4dChvdXRwdXRfanNvbl9wYXRoKVswXSArICcuaHRtbCcK
LSAgICAgICAgcGVyZl93ZWJraXRfanNvbl9wYXRoID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLnNw
bGl0ZXh0KG91dHB1dF9qc29uX3BhdGgpWzBdICsgJy1wZXJmLXdlYmtpdC5qc29uJyBpZiBvcHRp
b25zLnRlc3RfcmVzdWx0c19zZXJ2ZXIgZWxzZSBOb25lCi0gICAgICAgIHNlbGYuX2dlbmVyYXRl
X291dHB1dF9maWxlcyhvdXRwdXRfanNvbl9wYXRoLCBwZXJmX3dlYmtpdF9qc29uX3BhdGgsIHJl
c3VsdHNfcGFnZV9wYXRoLCBvdXRwdXQsIHBlcmZfd2Via2l0X291dHB1dCkKKyAgICAgICAgcmVz
dWx0c19wYWdlX3BhdGggPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uc3BsaXRleHQocGVyZl93ZWJr
aXRfanNvbl9wYXRoKVswXSArICcuaHRtbCcKKyAgICAgICAgbGVnYWN5X291dHB1dF9qc29uX3Bh
dGggPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uc3BsaXRleHQocGVyZl93ZWJraXRfanNvbl9wYXRo
KVswXSArICctbGVnYWN5Lmpzb24nIGlmIG9wdGlvbnMudGVzdF9yZXN1bHRzX3NlcnZlciBlbHNl
IE5vbmUKKyAgICAgICAgc2VsZi5fZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKGxlZ2FjeV9vdXRwdXRf
anNvbl9wYXRoLCBwZXJmX3dlYmtpdF9qc29uX3BhdGgsIHJlc3VsdHNfcGFnZV9wYXRoLCBsZWdh
Y3lfb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQpCiAKICAgICAgICAgaWYgb3B0aW9ucy50ZXN0
X3Jlc3VsdHNfc2VydmVyOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX3VwbG9hZF9qc29uKG9w
dGlvbnMudGVzdF9yZXN1bHRzX3NlcnZlciwgb3V0cHV0X2pzb25fcGF0aCk6CisgICAgICAgICAg
ICBpZiBub3Qgc2VsZi5fdXBsb2FkX2pzb24ob3B0aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyLCBs
ZWdhY3lfb3V0cHV0X2pzb25fcGF0aCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuRVhJ
VF9DT0RFX0ZBSUxFRF9VUExPQURJTkcKIAogICAgICAgICAgICAgIyBGSVhNRTogUmVtb3ZlIHRo
aXMgY29kZSBvbmNlIHdlJ3ZlIG1hZGUgdHJhbnNpdGlvbiB0byB1c2UgcGVyZi53ZWJraXQub3Jn
CkBAIC0yNTMsMTMgKzI1MywxNiBAQCBjbGFzcyBQZXJmVGVzdHNSdW5uZXIob2JqZWN0KToKICAg
ICAgICAgICAgIGlmIHZhbHVlOgogICAgICAgICAgICAgICAgIGNvbnRlbnRzW2tleV0gPSB2YWx1
ZQogCi0gICAgICAgIGNvbnRlbnRzX2Zvcl9wZXJmX3dlYmtpdCA9IHsKLSAgICAgICAgICAgICdi
dWlsZGVyTmFtZSc6IGJ1aWxkZXJfbmFtZSwKLSAgICAgICAgICAgICdidWlsZE51bWJlcic6IHN0
cihidWlsZF9udW1iZXIpLAotICAgICAgICAgICAgJ2J1aWxkVGltZSc6IHNlbGYuX2RhdGV0aW1l
X2luX0VTNV9jb21wYXRpYmxlX2lzb19mb3JtYXQoc2VsZi5fdXRjX3RpbWVzdGFtcCksCi0gICAg
ICAgICAgICAncGxhdGZvcm0nOiBwbGF0Zm9ybSwKLSAgICAgICAgICAgICdyZXZpc2lvbnMnOiBy
ZXZpc2lvbnNfZm9yX3BlcmZfd2Via2l0LAotICAgICAgICAgICAgJ3Rlc3RzJzoge319CisgICAg
ICAgIGNvbnRlbnRzX2Zvcl9wZXJmX3dlYmtpdCA9IHsndGVzdHMnOiB7fX0KKyAgICAgICAgaWYg
ZGVzY3JpcHRpb246CisgICAgICAgICAgICBjb250ZW50c19mb3JfcGVyZl93ZWJraXRbJ2Rlc2Ny
aXB0aW9uJ10gPSBkZXNjcmlwdGlvbgorCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHsnYnVp
bGRUaW1lJzogc2VsZi5fZGF0ZXRpbWVfaW5fRVM1X2NvbXBhdGlibGVfaXNvX2Zvcm1hdChzZWxm
Ll91dGNfdGltZXN0YW1wKSwKKyAgICAgICAgICAgICdwbGF0Zm9ybSc6IHBsYXRmb3JtLCAncmV2
aXNpb25zJzogcmV2aXNpb25zX2Zvcl9wZXJmX3dlYmtpdCwKKyAgICAgICAgICAgICdidWlsZGVy
TmFtZSc6IGJ1aWxkZXJfbmFtZSwgJ2J1aWxkTnVtYmVyJzogaW50KGJ1aWxkX251bWJlcikgaWYg
YnVpbGRfbnVtYmVyIGVsc2UgTm9uZX0uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZhbHVlOgor
ICAgICAgICAgICAgICAgIGNvbnRlbnRzX2Zvcl9wZXJmX3dlYmtpdFtrZXldID0gdmFsdWUKKwog
CiAgICAgICAgICMgRklYTUU6IE1ha2UgdGhpcyBmdW5jdGlvbiBzaG9ydGVyIG9uY2Ugd2UndmUg
dHJhbnNpdGlvbmVkIHRvIHVzZSBwZXJmLndlYmtpdC5vcmcuCiAgICAgICAgIGZvciBtZXRyaWNf
ZnVsbF9uYW1lLCByZXN1bHQgaW4gc2VsZi5fcmVzdWx0cy5pdGVyaXRlbXMoKToKQEAgLTMyMiwx
MiArMzI1LDEzIEBAIGNsYXNzIFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICAgICAg
X2xvZy5lcnJvcigiRmFpbGVkIHRvIG1lcmdlIG91dHB1dCBKU09OIGZpbGUgJXM6ICVzIiAlIChv
dXRwdXRfanNvbl9wYXRoLCBlcnJvcikpCiAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICBkZWYg
X2dlbmVyYXRlX291dHB1dF9maWxlcyhzZWxmLCBvdXRwdXRfanNvbl9wYXRoLCBwZXJmX3dlYmtp
dF9qc29uX3BhdGgsIHJlc3VsdHNfcGFnZV9wYXRoLCBvdXRwdXQsIHBlcmZfd2Via2l0X291dHB1
dCk6CisgICAgZGVmIF9nZW5lcmF0ZV9vdXRwdXRfZmlsZXMoc2VsZiwgb3V0cHV0X2pzb25fcGF0
aCwgcGVyZl93ZWJraXRfanNvbl9wYXRoLCByZXN1bHRzX3BhZ2VfcGF0aCwgbGVnYWN5X291dHB1
dCwgcGVyZl93ZWJraXRfb3V0cHV0KToKICAgICAgICAgZmlsZXN5c3RlbSA9IHNlbGYuX2hvc3Qu
ZmlsZXN5c3RlbQogCi0gICAgICAgIGpzb25fb3V0cHV0ID0ganNvbi5kdW1wcyhvdXRwdXQpCi0g
ICAgICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKG91dHB1dF9qc29uX3BhdGgsIGpzb25f
b3V0cHV0KQorICAgICAgICBpZiBvdXRwdXRfanNvbl9wYXRoOgorICAgICAgICAgICAgZmlsZXN5
c3RlbS53cml0ZV90ZXh0X2ZpbGUob3V0cHV0X2pzb25fcGF0aCwganNvbi5kdW1wcyhsZWdhY3lf
b3V0cHV0KSkKIAorICAgICAgICBqc29uX291dHB1dCA9IGpzb24uZHVtcHMocGVyZl93ZWJraXRf
b3V0cHV0KQogICAgICAgICBpZiBwZXJmX3dlYmtpdF9qc29uX3BhdGg6CiAgICAgICAgICAgICBm
aWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShwZXJmX3dlYmtpdF9qc29uX3BhdGgsIGpzb24uZHVt
cHMocGVyZl93ZWJraXRfb3V0cHV0KSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
ZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfaW50ZWdyYXRpb250ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRl
c3RzcnVubmVyX2ludGVncmF0aW9udGVzdC5weQkocmV2aXNpb24gMTQ0MDAyKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfaW50ZWdy
YXRpb250ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC05Miw4ICs5Miw4IEBAIEZpbmlzaGVkOiAw
LjEgcwogCiAiIiIKIAotICAgIHJlc3VsdHMgPSB7Im1heCI6IDE1MTAsICJhdmciOiAxNDkwLCAi
bWVkaWFuIjogMTQ4OCwgIm1pbiI6IDE0NzEsICJzdGRldiI6IDE1LjEzOTM1LCAidW5pdCI6ICJt
cyIsCi0gICAgICAgInZhbHVlcyI6IFsxNDg2LCAxNDcxLCAxNTEwLCAxNTA1LCAxNDc4LCAxNDkw
XX0KKyAgICByZXN1bHRzID0geyd1cmwnOiAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2Vy
L3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvQmluZGluZ3MvZXZlbnQtdGFyZ2V0LXdyYXBwZXIuaHRt
bCcsCisgICAgICAgICdtZXRyaWNzJzogeydUaW1lJzogeydjdXJyZW50JzogWzE0ODYuMCwgMTQ3
MS4wLCAxNTEwLjAsIDE1MDUuMCwgMTQ3OC4wLCAxNDkwLjBdfX19CiAKIAogY2xhc3MgU29tZVBh
cnNlclRlc3REYXRhOgpAQCAtMTU3LDEyICsxNTcsOSBAQCBtZWRpYW49IDUyOTAwMC4wIGJ5dGVz
LCBzdGRldj0gMTQxMjQuNDQ2CiBGaW5pc2hlZDogMC4xIHMKICIiIgogCi0gICAgcmVzdWx0cyA9
IHsndmFsdWVzJzogWzEwODAsIDExMjAsIDEwOTUsIDExMDEsIDExMDRdLCAnYXZnJzogMTEwMCwg
J21pbic6IDEwODAsICdtYXgnOiAxMTIwLAotICAgICAgICAnc3RkZXYnOiAxNC41MDg2MSwgJ21l
ZGlhbic6IDExMDEsICd1bml0JzogJ21zJ30KLSAgICBqc19oZWFwX3Jlc3VsdHMgPSB7J3ZhbHVl
cyc6IFs4MjUwMDAsIDgxMTAwMCwgODQ4MDAwLCA4MzcwMDAsIDgyOTAwMF0sICdhdmcnOiA4MzAw
MDAsICdtaW4nOiA4MTEwMDAsICdtYXgnOiA4NDgwMDAsCi0gICAgICAgICdzdGRldic6IDEzNzg0
LjA0ODc1LCAnbWVkaWFuJzogODI5MDAwLCAndW5pdCc6ICdieXRlcyd9Ci0gICAgbWFsbG9jX3Jl
c3VsdHMgPSB7J3ZhbHVlcyc6IFs1MjkwMDAsIDUxMTAwMCwgNTQ4MDAwLCA1MzYwMDAsIDUyMTAw
MF0sICdhdmcnOiA1MjkwMDAsICdtaW4nOiA1MTEwMDAsICdtYXgnOiA1NDgwMDAsCi0gICAgICAg
ICdzdGRldic6IDE0MTI0LjQ0Njg5LCAnbWVkaWFuJzogNTI5MDAwLCAndW5pdCc6ICdieXRlcyd9
CisgICAgcmVzdWx0cyA9IHsnY3VycmVudCc6IFsxMDgwLCAxMTIwLCAxMDk1LCAxMTAxLCAxMTA0
XX0KKyAgICBqc19oZWFwX3Jlc3VsdHMgPSB7J2N1cnJlbnQnOiBbODI1MDAwLCA4MTEwMDAsIDg0
ODAwMCwgODM3MDAwLCA4MjkwMDBdfQorICAgIG1hbGxvY19yZXN1bHRzID0geydjdXJyZW50Jzog
WzUyOTAwMCwgNTExMDAwLCA1NDgwMDAsIDUzNjAwMCwgNTIxMDAwXX0KIAogCiBjbGFzcyBUZXN0
RHJpdmVyOgpAQCAtMzAyLDE5ICsyOTksMTAgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIsIGxvZyA9IG91dHB1dC5yZXN0b3Jl
X291dHB1dCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5leHBlY3RlZF9yZXN1bHRfY291
bnQsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbm9ybWFsaXplX291dHB1dChs
b2cpLCBNZW1vcnlUZXN0RGF0YS5vdXRwdXQgKyAnXG5NT0NLOiB1c2VyLm9wZW5fdXJsOiBmaWxl
Oi8vLi4uXG4nKQotICAgICAgICByZXN1bHRzID0gc2VsZi5fbG9hZF9vdXRwdXRfanNvbihydW5u
ZXIpWzBdWydyZXN1bHRzJ10KLSAgICAgICAgdmFsdWVzID0gWzEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5XQotCi0gICAgICAg
ICMgU3RkZXYgZm9yIHRlc3QgZG9lc24ndCBtYXRjaCBvbiBzb21lIGJvdHMKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzb3J0ZWQocmVzdWx0c1snUGFyc2VyL21lbW9yeS10ZXN0J10ua2V5cygp
KSwgc29ydGVkKE1lbW9yeVRlc3REYXRhLnJlc3VsdHMua2V5cygpKSkKLSAgICAgICAgZm9yIGtl
eSBpbiBNZW1vcnlUZXN0RGF0YS5yZXN1bHRzOgotICAgICAgICAgICAgaWYga2V5ID09ICdzdGRl
dic6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXN1bHRzWydQYXJz
ZXIvbWVtb3J5LXRlc3QnXVtrZXldLCBNZW1vcnlUZXN0RGF0YS5yZXN1bHRzW2tleV0sIHBsYWNl
cz00KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHJlc3VsdHNbJ1BhcnNlci9tZW1vcnktdGVzdCddW2tleV0sIE1lbW9yeVRlc3REYXRhLnJlc3Vs
dHNba2V5XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzWydQYXJzZXIvbWVtb3J5
LXRlc3QnXSwgTWVtb3J5VGVzdERhdGEucmVzdWx0cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChyZXN1bHRzWydQYXJzZXIvbWVtb3J5LXRlc3Q6SlNIZWFwJ10sIE1lbW9yeVRlc3REYXRhLmpz
X2hlYXBfcmVzdWx0cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzWydQYXJzZXIv
bWVtb3J5LXRlc3Q6TWFsbG9jJ10sIE1lbW9yeVRlc3REYXRhLm1hbGxvY19yZXN1bHRzKQorICAg
ICAgICBwYXJzZXJfdGVzdHMgPSBzZWxmLl9sb2FkX291dHB1dF9qc29uKHJ1bm5lcilbMF1bJ3Rl
c3RzJ11bJ1BhcnNlciddWyd0ZXN0cyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2Vy
X3Rlc3RzWydtZW1vcnktdGVzdCddWydtZXRyaWNzJ11bJ1RpbWUnXSwgTWVtb3J5VGVzdERhdGEu
cmVzdWx0cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXJfdGVzdHNbJ21lbW9yeS10
ZXN0J11bJ21ldHJpY3MnXVsnSlNIZWFwJ10sIE1lbW9yeVRlc3REYXRhLmpzX2hlYXBfcmVzdWx0
cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXJfdGVzdHNbJ21lbW9yeS10ZXN0J11b
J21ldHJpY3MnXVsnTWFsbG9jJ10sIE1lbW9yeVRlc3REYXRhLm1hbGxvY19yZXN1bHRzKQogCiAg
ICAgZGVmIF90ZXN0X3J1bl93aXRoX2pzb25fb3V0cHV0KHNlbGYsIHJ1bm5lciwgZmlsZXN5c3Rl
bSwgdXBsb2FkX3N1Y2VlZHM9RmFsc2UsIHJlc3VsdHNfc2hvd249VHJ1ZSwgZXhwZWN0ZWRfZXhp
dF9jb2RlPTApOgogICAgICAgICBmaWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShydW5uZXIuX2Jh
c2VfcGF0aCArICcvaW5zcGVjdG9yL3Bhc3MuaHRtbCcsICdzb21lIGNvbnRlbnQnKQpAQCAtMzI1
LDcgKzMxMyw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAg
ZGVmIG1vY2tfdXBsb2FkX2pzb24oaG9zdG5hbWUsIGpzb25fcGF0aCwgaG9zdF9wYXRoPU5vbmUp
OgogICAgICAgICAgICAgIyBGSVhNRTogR2V0IHJpZCBvZiB0aGUgaGFyZC1jb2RlZCBwZXJmLndl
YmtpdC5vcmcgb25jZSB3ZSd2ZSBjb21wbGV0ZWQgdGhlIHRyYW5zaXRpb24uCiAgICAgICAgICAg
ICBzZWxmLmFzc2VydEluKGhvc3RuYW1lLCBbJ3NvbWUuaG9zdCcsICdwZXJmLndlYmtpdC5vcmcn
XSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oanNvbl9wYXRoLCBbJy9tb2NrLWNoZWNrb3V0
L291dHB1dC5qc29uJywgJy9tb2NrLWNoZWNrb3V0L291dHB1dC1wZXJmLXdlYmtpdC5qc29uJ10p
CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGpzb25fcGF0aCwgWycvbW9jay1jaGVja291dC9v
dXRwdXQuanNvbicsICcvbW9jay1jaGVja291dC9vdXRwdXQtbGVnYWN5Lmpzb24nXSkKICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0SW4oaG9zdF9wYXRoLCBbTm9uZSwgJy9hcGkvcmVwb3J0J10pCiAg
ICAgICAgICAgICB1cGxvYWRlZFswXSA9IHVwbG9hZF9zdWNlZWRzCiAgICAgICAgICAgICByZXR1
cm4gdXBsb2FkX3N1Y2VlZHMKQEAgLTM1MSwxNiArMzM5LDE3IEBAIGNsYXNzIE1haW5UZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcmV0dXJuIGxvZ3MKIAogICAgIF9ldmVudF90YXJn
ZXRfd3JhcHBlcl9hbmRfaW5zcGVjdG9yX3Jlc3VsdHMgPSB7Ci0gICAgICAgICJCaW5kaW5ncy9l
dmVudC10YXJnZXQtd3JhcHBlciI6IEV2ZW50VGFyZ2V0V3JhcHBlclRlc3REYXRhLnJlc3VsdHMs
Ci0gICAgICAgICJpbnNwZWN0b3IvcGFzcy5odG1sOmdyb3VwX25hbWU6dGVzdF9uYW1lIjogNDJ9
CisgICAgICAgICJCaW5kaW5ncyI6CisgICAgICAgICAgICB7InVybCI6ICJodHRwOi8vdHJhYy53
ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9CaW5kaW5ncyIsCisgICAg
ICAgICAgICAidGVzdHMiOiB7ImV2ZW50LXRhcmdldC13cmFwcGVyIjogRXZlbnRUYXJnZXRXcmFw
cGVyVGVzdERhdGEucmVzdWx0c319fQogCiAgICAgZGVmIHRlc3RfcnVuX3dpdGhfanNvbl9vdXRw
dXQoc2VsZik6CiAgICAgICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5lcl9hbmRf
c2V0dXBfcmVzdWx0c190ZW1wbGF0ZShhcmdzPVsnLS1vdXRwdXQtanNvbi1wYXRoPS9tb2NrLWNo
ZWNrb3V0L291dHB1dC5qc29uJywKICAgICAgICAgICAgICctLXRlc3QtcmVzdWx0cy1zZXJ2ZXI9
c29tZS5ob3N0J10pCiAgICAgICAgIHNlbGYuX3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRwdXQocnVu
bmVyLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgdXBsb2FkX3N1Y2VlZHM9VHJ1ZSkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2FkX291dHB1dF9qc29uKHJ1bm5lciksIFt7Ci0gICAg
ICAgICAgICAidGltZXN0YW1wIjogMTIzNDU2Nzg5LCAicmVzdWx0cyI6IHNlbGYuX2V2ZW50X3Rh
cmdldF93cmFwcGVyX2FuZF9pbnNwZWN0b3JfcmVzdWx0cywKLSAgICAgICAgICAgICJ3ZWJraXQt
cmV2aXNpb24iOiAiNTY3OCIsICJicmFuY2giOiAid2Via2l0LXRydW5rIn1dKQorICAgICAgICAg
ICAgImJ1aWxkVGltZSI6ICIyMDEzLTAyLTA4VDE1OjE5OjM3LjQ2MDAwMCIsICJ0ZXN0cyI6IHNl
bGYuX2V2ZW50X3RhcmdldF93cmFwcGVyX2FuZF9pbnNwZWN0b3JfcmVzdWx0cywKKyAgICAgICAg
ICAgICJyZXZpc2lvbnMiOiB7IldlYktpdCI6IHsidGltZXN0YW1wIjogIjIwMTMtMDItMDEgMDg6
NDg6MDUgKzAwMDAiLCAicmV2aXNpb24iOiAiNTY3OCJ9fX1dKQogCiAgICAgICAgIGZpbGVzeXN0
ZW0gPSBwb3J0Lmhvc3QuZmlsZXN5c3RlbQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZXN5
c3RlbS5pc2ZpbGUocnVubmVyLl9vdXRwdXRfanNvbl9wYXRoKCkpKQpAQCAtMzcxLDkgKzM2MCw5
IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICctLXRl
c3QtcmVzdWx0cy1zZXJ2ZXI9c29tZS5ob3N0JywgJy0tZGVzY3JpcHRpb24nLCAnc29tZSBkZXNj
cmlwdGlvbiddKQogICAgICAgICBzZWxmLl90ZXN0X3J1bl93aXRoX2pzb25fb3V0cHV0KHJ1bm5l
ciwgcG9ydC5ob3N0LmZpbGVzeXN0ZW0sIHVwbG9hZF9zdWNlZWRzPVRydWUpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9hZF9vdXRwdXRfanNvbihydW5uZXIpLCBbewotICAgICAg
ICAgICAgInRpbWVzdGFtcCI6IDEyMzQ1Njc4OSwgImRlc2NyaXB0aW9uIjogInNvbWUgZGVzY3Jp
cHRpb24iLAotICAgICAgICAgICAgInJlc3VsdHMiOiBzZWxmLl9ldmVudF90YXJnZXRfd3JhcHBl
cl9hbmRfaW5zcGVjdG9yX3Jlc3VsdHMsCi0gICAgICAgICAgICAid2Via2l0LXJldmlzaW9uIjog
IjU2NzgiLCAiYnJhbmNoIjogIndlYmtpdC10cnVuayJ9XSkKKyAgICAgICAgICAgICJidWlsZFRp
bWUiOiAiMjAxMy0wMi0wOFQxNToxOTozNy40NjAwMDAiLCAiZGVzY3JpcHRpb24iOiAic29tZSBk
ZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAidGVzdHMiOiBzZWxmLl9ldmVudF90YXJnZXRfd3Jh
cHBlcl9hbmRfaW5zcGVjdG9yX3Jlc3VsdHMsCisgICAgICAgICAgICAicmV2aXNpb25zIjogeyJX
ZWJLaXQiOiB7InRpbWVzdGFtcCI6ICIyMDEzLTAyLTAxIDA4OjQ4OjA1ICswMDAwIiwgInJldmlz
aW9uIjogIjU2NzgifX19XSkKIAogICAgIGRlZiBjcmVhdGVfcnVubmVyX2FuZF9zZXR1cF9yZXN1
bHRzX3RlbXBsYXRlKHNlbGYsIGFyZ3M9W10pOgogICAgICAgICBydW5uZXIsIHBvcnQgPSBzZWxm
LmNyZWF0ZV9ydW5uZXIoYXJncykKQEAgLTQwMiw4ICszOTEsOCBAQCBjbGFzcyBNYWluVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuX3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRw
dXQocnVubmVyLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSkKIAogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlbGYuX2xvYWRfb3V0cHV0X2pzb24ocnVubmVyKSwgW3sKLSAgICAgICAgICAgICJ0aW1l
c3RhbXAiOiAxMjM0NTY3ODksICJyZXN1bHRzIjogc2VsZi5fZXZlbnRfdGFyZ2V0X3dyYXBwZXJf
YW5kX2luc3BlY3Rvcl9yZXN1bHRzLAotICAgICAgICAgICAgIndlYmtpdC1yZXZpc2lvbiI6ICI1
Njc4IiwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsifV0pCisgICAgICAgICAgICAiYnVpbGRUaW1l
IjogIjIwMTMtMDItMDhUMTU6MTk6MzcuNDYwMDAwIiwgInRlc3RzIjogc2VsZi5fZXZlbnRfdGFy
Z2V0X3dyYXBwZXJfYW5kX2luc3BlY3Rvcl9yZXN1bHRzLAorICAgICAgICAgICAgInJldmlzaW9u
cyI6IHsiV2ViS2l0IjogeyJ0aW1lc3RhbXAiOiAiMjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCIs
ICJyZXZpc2lvbiI6ICI1Njc4In19fV0pCiAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVz
eXN0ZW0uaXNmaWxlKG91dHB1dF9qc29uX3BhdGgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUo
ZmlsZXN5c3RlbS5pc2ZpbGUocmVzdWx0c19wYWdlX3BhdGgpKQpAQCAtNDE4LDggKzQwNyw4IEBA
IGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5fdGVzdF9y
dW5fd2l0aF9qc29uX291dHB1dChydW5uZXIsIHBvcnQuaG9zdC5maWxlc3lzdGVtKQogCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9hZF9vdXRwdXRfanNvbihydW5uZXIpLCBbeyJw
cmV2aW91cyI6ICJyZXN1bHRzIn0sIHsKLSAgICAgICAgICAgICJ0aW1lc3RhbXAiOiAxMjM0NTY3
ODksICJyZXN1bHRzIjogc2VsZi5fZXZlbnRfdGFyZ2V0X3dyYXBwZXJfYW5kX2luc3BlY3Rvcl9y
ZXN1bHRzLAotICAgICAgICAgICAgIndlYmtpdC1yZXZpc2lvbiI6ICI1Njc4IiwgImJyYW5jaCI6
ICJ3ZWJraXQtdHJ1bmsifV0pCisgICAgICAgICAgICAiYnVpbGRUaW1lIjogIjIwMTMtMDItMDhU
MTU6MTk6MzcuNDYwMDAwIiwgInRlc3RzIjogc2VsZi5fZXZlbnRfdGFyZ2V0X3dyYXBwZXJfYW5k
X2luc3BlY3Rvcl9yZXN1bHRzLAorICAgICAgICAgICAgInJldmlzaW9ucyI6IHsiV2ViS2l0Ijog
eyJ0aW1lc3RhbXAiOiAiMjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCIsICJyZXZpc2lvbiI6ICI1
Njc4In19fV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlc3lzdGVtLmlzZmlsZShmaWxl
c3lzdGVtLnNwbGl0ZXh0KG91dHB1dF9qc29uX3BhdGgpWzBdICsgJy5odG1sJykpCiAKICAgICBk
ZWYgdGVzdF9ydW5fcmVzcGVjdHNfcmVzZXRfcmVzdWx0cyhzZWxmKToKQEAgLTQzMiw4ICs0MjEs
OCBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuX3Rl
c3RfcnVuX3dpdGhfanNvbl9vdXRwdXQocnVubmVyLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSkKIAog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvYWRfb3V0cHV0X2pzb24ocnVubmVyKSwg
W3sKLSAgICAgICAgICAgICJ0aW1lc3RhbXAiOiAxMjM0NTY3ODksICJyZXN1bHRzIjogc2VsZi5f
ZXZlbnRfdGFyZ2V0X3dyYXBwZXJfYW5kX2luc3BlY3Rvcl9yZXN1bHRzLAotICAgICAgICAgICAg
IndlYmtpdC1yZXZpc2lvbiI6ICI1Njc4IiwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsifV0pCisg
ICAgICAgICAgICAiYnVpbGRUaW1lIjogIjIwMTMtMDItMDhUMTU6MTk6MzcuNDYwMDAwIiwgInRl
c3RzIjogc2VsZi5fZXZlbnRfdGFyZ2V0X3dyYXBwZXJfYW5kX2luc3BlY3Rvcl9yZXN1bHRzLAor
ICAgICAgICAgICAgInJldmlzaW9ucyI6IHsiV2ViS2l0IjogeyJ0aW1lc3RhbXAiOiAiMjAxMy0w
Mi0wMSAwODo0ODowNSArMDAwMCIsICJyZXZpc2lvbiI6ICI1Njc4In19fV0pCiAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShmaWxlc3lzdGVtLmlzZmlsZShmaWxlc3lzdGVtLnNwbGl0ZXh0KG91dHB1
dF9qc29uX3BhdGgpWzBdICsgJy5odG1sJykpCiAgICAgICAgIHBhc3MKIApAQCAtNDQ0LDggKzQz
Myw4IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZmlsZXN5
c3RlbSA9IHBvcnQuaG9zdC5maWxlc3lzdGVtCiAgICAgICAgIHNlbGYuX3Rlc3RfcnVuX3dpdGhf
anNvbl9vdXRwdXQocnVubmVyLCBmaWxlc3lzdGVtLCByZXN1bHRzX3Nob3duPUZhbHNlKQogCi0g
ICAgICAgIGV4cGVjdGVkX2VudHJ5ID0geyJ0aW1lc3RhbXAiOiAxMjM0NTY3ODksICJyZXN1bHRz
Ijogc2VsZi5fZXZlbnRfdGFyZ2V0X3dyYXBwZXJfYW5kX2luc3BlY3Rvcl9yZXN1bHRzLAotICAg
ICAgICAgICAgIndlYmtpdC1yZXZpc2lvbiI6ICI1Njc4IiwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1
bmsifQorICAgICAgICBleHBlY3RlZF9lbnRyeSA9IHsiYnVpbGRUaW1lIjogIjIwMTMtMDItMDhU
MTU6MTk6MzcuNDYwMDAwIiwgInRlc3RzIjogc2VsZi5fZXZlbnRfdGFyZ2V0X3dyYXBwZXJfYW5k
X2luc3BlY3Rvcl9yZXN1bHRzLAorICAgICAgICAgICAgInJldmlzaW9ucyI6IHsiV2ViS2l0Ijog
eyJ0aW1lc3RhbXAiOiAiMjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCIsICJyZXZpc2lvbiI6ICI1
Njc4In19fQogCiAgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChydW5uZXIuX291dHB1dF9qc29uX3BhdGgoKSwgJy9tb2NrLWNoZWNrb3V0L291dHB1
dC5qc29uJykKQEAgLTQ5MSw4ICs0ODAsOCBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL21v
Y2stY2hlY2tvdXQvc2xhdmUtY29uZmlnLmpzb24nLCAneyJrZXkiOiAidmFsdWUifScpCiAgICAg
ICAgIHNlbGYuX3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRwdXQocnVubmVyLCBwb3J0Lmhvc3QuZmls
ZXN5c3RlbSwgdXBsb2FkX3N1Y2VlZHM9VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLl9sb2FkX291dHB1dF9qc29uKHJ1bm5lciksIFt7Ci0gICAgICAgICAgICAidGltZXN0YW1w
IjogMTIzNDU2Nzg5LCAicmVzdWx0cyI6IHNlbGYuX2V2ZW50X3RhcmdldF93cmFwcGVyX2FuZF9p
bnNwZWN0b3JfcmVzdWx0cywKLSAgICAgICAgICAgICJ3ZWJraXQtcmV2aXNpb24iOiAiNTY3OCIs
ICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgImtleSI6ICJ2YWx1ZSJ9XSkKKyAgICAgICAgICAg
ICJidWlsZFRpbWUiOiAiMjAxMy0wMi0wOFQxNToxOTozNy40NjAwMDAiLCAidGVzdHMiOiBzZWxm
Ll9ldmVudF90YXJnZXRfd3JhcHBlcl9hbmRfaW5zcGVjdG9yX3Jlc3VsdHMsCisgICAgICAgICAg
ICAicmV2aXNpb25zIjogeyJXZWJLaXQiOiB7InRpbWVzdGFtcCI6ICIyMDEzLTAyLTAxIDA4OjQ4
OjA1ICswMDAwIiwgInJldmlzaW9uIjogIjU2NzgifX0sICJidWlsZGVyS2V5IjogInZhbHVlIn1d
KQogCiAgICAgZGVmIHRlc3RfcnVuX3dpdGhfYmFkX3NsYXZlX2NvbmZpZ19qc29uKHNlbGYpOgog
ICAgICAgICBydW5uZXIsIHBvcnQgPSBzZWxmLmNyZWF0ZV9ydW5uZXJfYW5kX3NldHVwX3Jlc3Vs
dHNfdGVtcGxhdGUoYXJncz1bJy0tb3V0cHV0LWpzb24tcGF0aD0vbW9jay1jaGVja291dC9vdXRw
dXQuanNvbicsCkBAIC01MTAsOCArNDk5LDkgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICBwb3J0LnJlcG9zaXRvcnlfcGF0aHMgPSBsYW1iZGE6IFsoJ3dlYmtp
dCcsICcvbW9jay1jaGVja291dCcpLCAoJ3NvbWUnLCAnL21vY2stY2hlY2tvdXQvc29tZScpXQog
ICAgICAgICBzZWxmLl90ZXN0X3J1bl93aXRoX2pzb25fb3V0cHV0KHJ1bm5lciwgcG9ydC5ob3N0
LmZpbGVzeXN0ZW0sIHVwbG9hZF9zdWNlZWRzPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5fbG9hZF9vdXRwdXRfanNvbihydW5uZXIpLCBbewotICAgICAgICAgICAgInRpbWVz
dGFtcCI6IDEyMzQ1Njc4OSwgInJlc3VsdHMiOiBzZWxmLl9ldmVudF90YXJnZXRfd3JhcHBlcl9h
bmRfaW5zcGVjdG9yX3Jlc3VsdHMsCi0gICAgICAgICAgICAid2Via2l0LXJldmlzaW9uIjogIjU2
NzgiLCAic29tZS1yZXZpc2lvbiI6ICI1Njc4IiwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsifV0p
CisgICAgICAgICAgICAiYnVpbGRUaW1lIjogIjIwMTMtMDItMDhUMTU6MTk6MzcuNDYwMDAwIiwg
InRlc3RzIjogc2VsZi5fZXZlbnRfdGFyZ2V0X3dyYXBwZXJfYW5kX2luc3BlY3Rvcl9yZXN1bHRz
LAorICAgICAgICAgICAgInJldmlzaW9ucyI6IHsid2Via2l0IjogeyJ0aW1lc3RhbXAiOiAiMjAx
My0wMi0wMSAwODo0ODowNSArMDAwMCIsICJyZXZpc2lvbiI6ICI1Njc4In0sCisgICAgICAgICAg
ICAic29tZSI6IHsidGltZXN0YW1wIjogIjIwMTMtMDItMDEgMDg6NDg6MDUgKzAwMDAiLCAicmV2
aXNpb24iOiAiNTY3OCJ9fX1dKQogCiAgICAgZGVmIHRlc3RfcnVuX3dpdGhfdXBsb2FkX2pzb24o
c2VsZik6CiAgICAgICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5lcl9hbmRfc2V0
dXBfcmVzdWx0c190ZW1wbGF0ZShhcmdzPVsnLS1vdXRwdXQtanNvbi1wYXRoPS9tb2NrLWNoZWNr
b3V0L291dHB1dC5qc29uJywKQEAgLTUyMCw4ICs1MTAsOCBAQCBjbGFzcyBNYWluVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuX3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRwdXQo
cnVubmVyLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgdXBsb2FkX3N1Y2VlZHM9VHJ1ZSkKICAgICAg
ICAgZ2VuZXJhdGVkX2pzb24gPSBqc29uLmxvYWRzKHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVz
WycvbW9jay1jaGVja291dC9vdXRwdXQuanNvbiddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGdlbmVyYXRlZF9qc29uWzBdWydwbGF0Zm9ybSddLCAncGxhdGZvcm0xJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfanNvblswXVsnYnVpbGRlci1uYW1lJ10sICdidWlsZGVy
MScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2pzb25bMF1bJ2J1aWxkLW51
bWJlciddLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2pzb25bMF1b
J2J1aWxkZXJOYW1lJ10sICdidWlsZGVyMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2Vu
ZXJhdGVkX2pzb25bMF1bJ2J1aWxkTnVtYmVyJ10sIDEyMykKIAogICAgICAgICBzZWxmLl90ZXN0
X3J1bl93aXRoX2pzb25fb3V0cHV0KHJ1bm5lciwgcG9ydC5ob3N0LmZpbGVzeXN0ZW0sIHVwbG9h
ZF9zdWNlZWRzPUZhbHNlLCBleHBlY3RlZF9leGl0X2NvZGU9UGVyZlRlc3RzUnVubmVyLkVYSVRf
Q09ERV9GQUlMRURfVVBMT0FESU5HKQogCkBAIC01MzIsMTQgKzUyMiwxNCBAQCBjbGFzcyBNYWlu
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLndy
aXRlX3RleHRfZmlsZSgnL21vY2stY2hlY2tvdXQvc2xhdmUtY29uZmlnLmpzb24nLCAneyJrZXki
OiAidmFsdWUxIn0nKQogCiAgICAgICAgIHNlbGYuX3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRwdXQo
cnVubmVyLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgdXBsb2FkX3N1Y2VlZHM9VHJ1ZSkKLSAgICAg
ICAgZ2VuZXJhdGVkX2pzb24gPSBqc29uLmxvYWRzKHBvcnQuaG9zdC5maWxlc3lzdGVtLmZpbGVz
WycvbW9jay1jaGVja291dC9vdXRwdXQtcGVyZi13ZWJraXQuanNvbiddKQorICAgICAgICBnZW5l
cmF0ZWRfanNvbiA9IGpzb24ubG9hZHMocG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2Nr
LWNoZWNrb3V0L291dHB1dC5qc29uJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3Rh
bmNlKGdlbmVyYXRlZF9qc29uLCBsaXN0KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4o
Z2VuZXJhdGVkX2pzb24pLCAxKQogCiAgICAgICAgIG91dHB1dCA9IGdlbmVyYXRlZF9qc29uWzBd
CiAgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChv
dXRwdXRbJ3BsYXRmb3JtJ10sICdwbGF0Zm9ybTEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KG91dHB1dFsnYnVpbGROdW1iZXInXSwgJzEyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
b3V0cHV0WydidWlsZE51bWJlciddLCAxMjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0
cHV0WydidWlsZFRpbWUnXSwgJzIwMTMtMDItMDhUMTU6MTk6MzcuNDYwMDAwJykKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ2J1aWxkZXJOYW1lJ10sICdidWlsZGVyMScpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0WydidWlsZGVyS2V5J10sICd2YWx1ZTEnKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190419</attachid>
            <date>2013-02-26 19:11:54 -0800</date>
            <delta_ts>2013-02-26 20:28:58 -0800</delta_ts>
            <desc>Fixed per comments</desc>
            <filename>bug-110842-20130226190809.patch</filename>
            <type>text/plain</type>
            <size>42319</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDQwMDYpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTAyLTI1ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBwZXJmLndlYmtp
dC5vcmcgSlNPTiBmb3JtYXQgaW4gcmVzdWx0cyBwYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA4NDIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGVkIHRoZSByZXN1bHRzIHBhZ2UgdGVtcGxh
dGUgdG8gdXNlIHRoZSBuZXcgSlNPTiBmb3JtYXQuCisKKyAgICAgICAgU2luY2UgbmV3IEpTT04g
Zm9ybWF0IGRvZXNuJ3QgY29udGFpbiBzdGF0aXN0aWNzIHN1Y2ggYXMgc3RkZXYgYW5kIG1pbiwg
YWRkZWQgc3RhdGlzdGljcy5qcyB0byBjb21wdXRlCisgICAgICAgIHRoZXNlIHZhbHVlcy4gQWxz
byB1c2UgOTUlIHBlcmNlbnRpbGUgY29uZmlkZW5jZSBpbnRlcnZhbCBpbnN0ZWFkIG9mIHN0YW5k
YXJkIGRldmlhdGlvbiBpbiB2YXJpb3VzIHBsYWNlcy4KKworICAgICAgICAqIHJlc291cmNlcy9y
ZXN1bHRzLXRlbXBsYXRlLmh0bWw6IEFkZGVkIHN0YXRpc3RpY3MuanMgYXMgZGVwZW5kZW5jeS4K
KyAgICAgICAgKFRlc3RSZXN1bHQpOiBVcGRhdGVkIHRvIHRha2UgYSBtZXRyaWMgaW5zdGVhZCBv
ZiBpdHMgdGVzdC4gUmVwbGFjZWQgc3RkZXYoKSB3aXRoIGNvbmZpZGVuY2VJbnRlcnZhbERlbHRh
KCkKKyAgICAgICAgbm93IHRoYXQgd2UgaGF2ZSBhIGZhbmN5IFN0YXRpc3RpY3MgY2xhc3MuCisK
KyAgICAgICAgKFRlc3RSdW4ud2Via2l0UmV2aXNpb24pOgorICAgICAgICAoUGVyZlRlc3RNZXRy
aWMpOiBSZW5hbWVkIGZyb20gUGVyZlRlc3Qgc2luY2UgdGhpcyBvYmplY3Qgbm93IGVuY2Fwc3Vs
YXRlcyBlYWNoIG1lYXN1cmVtZW50IChzdWNoIGFzIHRpbWUsCisgICAgICAgIEpTIGhlYXAsIGFu
ZCBtYWxsb2MpIGluIHRlc3QuIEFsc28gYWRkZWQgYSBjb252ZXJzaW9uIHRhYmxlIGZyb20gYSBt
ZXRyaWMgbmFtZSB0byBhIHVuaXQgc2luY2UgbmV3IGZvcm1hdAorICAgICAgICBkb2Vzbid0IGNv
bnRhaW4gdW5pdHMuCisgICAgICAgIChQZXJmVGVzdE1ldHJpYy5uYW1lKTogVXBkYXRlZCB0byBj
b21wdXRlIHRoZSBmdWxsIG1ldHJpYyBuYW1lIGZyb20gdGVzdCBuYW1lIGFuZCBtZXRyaWMgbmFt
ZSwgbWF0Y2hpbmcKKyAgICAgICAgdGhlIG9sZCBiZWhhdmlvci4KKyAgICAgICAgKFBlcmZUZXN0
TWV0cmljLmlzTWVtb3J5VGVzdCk6IEV4cGxpY2l0bHkgbG9vayBmb3IgJ0pTSGVhcCcgYW5kICdN
YWxsb2MnIHRlc3RzLgorICAgICAgICAoUGVyZlRlc3RNZXRyaWMuc21hbGxlcklzQmV0dGVyKToK
KworICAgICAgICAoYXR0YWNoUGxvdCk6IERlbGV0ZWQgdGhlIGNvZGUgdG8gZGVhbCB3aXRoIHRl
c3RzIHRoYXQgZG9uJ3QgcHJvdmlkZSBpbmRpdmlkdWFsIGl0ZXJhdGlvbiBtZWFzdXJlbWVudAor
ICAgICAgICBzaW5jZSBzdWNoIHRlc3RzIG5vIGxvbmdlciBleGlzdC4gQWxzbyBmaXhlZCB1cCB0
aGUgY29kZSBjb21wdXRlIHktYXhpcyByYW5nZS4KKworICAgICAgICAoY3JlYXRlVGFibGVSb3cu
bWFya3VwRm9yUnVuKTogVXBkYXRlZCB0byB1c2UgY29uZmlkZW5jZUludGVydmFsRGVsdGEoKSBp
bnN0ZWFkIG9mIHN0ZGV2KCkuCisgICAgICAgIAorICAgICAgICAoaW5pdC5hZGRUZXN0cyk6IEFk
ZGVkLiBSZWN1cnNpdmVseSBhZGQgbWV0cmljcy4KKworICAgICAgICAqIHJlc291cmNlcy9zdGF0
aXN0aWNzLmpzOiBBZGRlZC4gSW1wb3J0ZWQgZnJvbSBwZXJmLndlYmtpdC5vcmcuCisgICAgICAg
IChTdGF0aXN0aWNzLm1heCk6CisgICAgICAgIChTdGF0aXN0aWNzLm1pbik6CisgICAgICAgIChT
dGF0aXN0aWNzLnN1bSk6CisgICAgICAgIChTdGF0aXN0aWNzLnNxdWFyZVN1bSk6CisgICAgICAg
IChTdGF0aXN0aWNzLnNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uKToKKyAgICAgICAgKFN0YXRpc3Rp
Y3Muc3VwcG9ydGVkQ29uZmlkZW5jZUxldmVscyk6CisgICAgICAgIChTdGF0aXN0aWNzLmNvbmZp
ZGVuY2VJbnRlcnZhbERlbHRhKToKKyAgICAgICAgKFN0YXRpc3RpY3MuY29uZmlkZW5jZUludGVy
dmFsKToKKwogMjAxMy0wMi0xMSAgQWxleGVpIEZpbGlwcG92ICA8YWxwaEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogU3BsaXQgUHJvZmlsZXIgZG9tYWluIGluIHByb3Rv
Y29sIGludG8gUHJvZmlsZXIgYW5kIEhlYXBQcm9maWxlcgpJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9yZXNvdXJjZXMvcmVzdWx0cy10ZW1wbGF0ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvcmVzb3VyY2VzL3Jlc3VsdHMtdGVtcGxhdGUuaHRtbAkocmV2aXNpb24gMTQ0MDAy
KQorKysgUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvcmVzdWx0cy10ZW1wbGF0ZS5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzcsOCArMTM3LDkgQEAgUmVmZXJlbmNlIDxzcGFuIGlkPSJyZWZl
cmVuY2UiIGNsYXNzPSJjaAogPHNjcmlwdD4KIAogKGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgalF1
ZXJ5ID0gWydQZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2VzL2Ryb21hZW8vd2ViL2xp
Yi9qcXVlcnktMS42LjQuanMnXTsKLSAgICB2YXIgcGx1Z2lucyA9IFsnUGVyZm9ybWFuY2VUZXN0
cy9yZXNvdXJjZXMvanF1ZXJ5LmZsb3QubWluLmpzJywgJ1BlcmZvcm1hbmNlVGVzdHMvcmVzb3Vy
Y2VzL2pxdWVyeS50YWJsZXNvcnRlci5taW4uanMnXTsKKyAgICB2YXIgalF1ZXJ5ID0gJ1BlcmZv
cm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMvZHJvbWFlby93ZWIvbGliL2pxdWVyeS0xLjYu
NC5qcyc7CisgICAgdmFyIHBsdWdpbnMgPSBbJ1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL2px
dWVyeS5mbG90Lm1pbi5qcycsICdQZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9qcXVlcnkudGFi
bGVzb3J0ZXIubWluLmpzJywKKyAgICAgICAgJ1BlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL3N0
YXRpc3RpY3MuanMnXTsKICAgICB2YXIgbG9jYWxQYXRoID0gJyVBYnNvbHV0ZVBhdGhUb1dlYktp
dFRydW5rJSc7CiAgICAgdmFyIHJlbW90ZVBhdGggPSAnaHR0cHM6Ly9zdm4ud2Via2l0Lm9yZy9y
ZXBvc2l0b3J5L3dlYmtpdC90cnVuayc7CiAgICAgdmFyIG51bWJlck9mRmFpbHVyZXMgPSAwOwpA
QCAtMTgzLDI3ICsxODQsMjkgQEAgUmVmZXJlbmNlIDxzcGFuIGlkPSJyZWZlcmVuY2UiIGNsYXNz
PSJjaAogICAgICAgICB9KTsKIH0pKCk7CiAKLWZ1bmN0aW9uIFRlc3RSZXN1bHQoYXNzb2NpYXRl
ZFRlc3QsIHJlc3VsdCwgYXNzb2NpYXRlZFJ1bikgewotICAgIHRoaXMudW5pdCA9IGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIHJlc3VsdC51bml0OyB9Ci0gICAgdGhpcy50ZXN0ID0gZnVuY3Rpb24gKCkg
eyByZXR1cm4gYXNzb2NpYXRlZFRlc3Q7IH0KLSAgICB0aGlzLnZhbHVlcyA9IGZ1bmN0aW9uICgp
IHsgcmV0dXJuIHJlc3VsdC52YWx1ZXMgPyByZXN1bHQudmFsdWVzLm1hcChmdW5jdGlvbiAodmFs
dWUpIHsgcmV0dXJuIGFzc29jaWF0ZWRUZXN0LnNjYWxpbmdGYWN0b3IoKSAqIHZhbHVlOyB9KSA6
IHVuZGVmaW5lZDsgfQotICAgIHRoaXMudW5zY2FsZWRNZWFuID0gZnVuY3Rpb24gKCkgeyByZXR1
cm4gcmVzdWx0LmF2ZzsgfQotICAgIHRoaXMubWVhbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFz
c29jaWF0ZWRUZXN0LnNjYWxpbmdGYWN0b3IoKSAqIHJlc3VsdC5hdmc7IH0KLSAgICB0aGlzLm1p
biA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc29jaWF0ZWRUZXN0LnNjYWxpbmdGYWN0b3IoKSAq
IHJlc3VsdC5taW47IH0KLSAgICB0aGlzLm1heCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc29j
aWF0ZWRUZXN0LnNjYWxpbmdGYWN0b3IoKSAqIHJlc3VsdC5tYXg7IH0KLSAgICB0aGlzLnN0ZGV2
ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzb2NpYXRlZFRlc3Quc2NhbGluZ0ZhY3RvcigpICog
cmVzdWx0LnN0ZGV2OyB9Ci0gICAgdGhpcy5zdGRldlJhdGlvID0gZnVuY3Rpb24gKCkgeyByZXR1
cm4gcmVzdWx0LnN0ZGV2IC8gcmVzdWx0LmF2ZzsgfQotICAgIHRoaXMucGVyY2VudERpZmZlcmVu
Y2UgPSBmdW5jdGlvbihvdGhlcikgeyByZXR1cm4gKG90aGVyLm1lYW4oKSAtIHRoaXMubWVhbigp
KSAvIHRoaXMubWVhbigpOyB9CitmdW5jdGlvbiBUZXN0UmVzdWx0KG1ldHJpYywgdmFsdWVzLCBh
c3NvY2lhdGVkUnVuKSB7CisgICAgdGhpcy50ZXN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWV0
cmljOyB9CisgICAgdGhpcy52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZXMubWFw
KGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gbWV0cmljLnNjYWxpbmdGYWN0b3IoKSAqIHZhbHVl
OyB9KTsgfQorICAgIHRoaXMudW5zY2FsZWRNZWFuID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gU3Rh
dGlzdGljcy5zdW0odmFsdWVzKSAvIHZhbHVlcy5sZW5ndGg7IH0KKyAgICB0aGlzLm1lYW4gPSBm
dW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3RvcigpICogdGhpcy51bnNjYWxl
ZE1lYW4oKTsgfQorICAgIHRoaXMubWluID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWV0cmljLnNj
YWxpbmdGYWN0b3IoKSAqIFN0YXRpc3RpY3MubWluKHZhbHVlcyk7IH0KKyAgICB0aGlzLm1heCA9
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9yKCkgKiBTdGF0aXN0aWNz
Lm1heCh2YWx1ZXMpOyB9CisgICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9yKCkgKiBTdGF0aXN0
aWNzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKDAuOTUsIHZhbHVlcy5sZW5ndGgsCisgICAgICAg
ICAgICBTdGF0aXN0aWNzLnN1bSh2YWx1ZXMpLCBTdGF0aXN0aWNzLnNxdWFyZVN1bSh2YWx1ZXMp
KTsKKyAgICB9CisgICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YVJhdGlvID0gZnVuY3Rp
b24gKCkgeyByZXR1cm4gdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgpIC8gdGhpcy5tZWFu
KCk7IH0KKyAgICB0aGlzLnBlcmNlbnREaWZmZXJlbmNlID0gZnVuY3Rpb24ob3RoZXIpIHsgcmV0
dXJuIChvdGhlci51bnNjYWxlZE1lYW4oKSAtIHRoaXMudW5zY2FsZWRNZWFuKCkpIC8gdGhpcy51
bnNjYWxlZE1lYW4oKTsgfQogICAgIHRoaXMuaXNTdGF0aXN0aWNhbGx5U2lnbmlmaWNhbnQgPSBm
dW5jdGlvbiAob3RoZXIpIHsKICAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhvdGhlci5tZWFu
KCkgLSB0aGlzLm1lYW4oKSk7Ci0gICAgICAgIHJldHVybiBkaWZmID4gdGhpcy5zdGRldigpICYm
IGRpZmYgPiBvdGhlci5zdGRldigpOworICAgICAgICByZXR1cm4gZGlmZiA+IHRoaXMuY29uZmlk
ZW5jZUludGVydmFsRGVsdGEoKSAmJiBkaWZmID4gb3RoZXIuY29uZmlkZW5jZUludGVydmFsRGVs
dGEoKTsKICAgICB9CiAgICAgdGhpcy5ydW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NvY2lh
dGVkUnVuOyB9CiB9CiAKIGZ1bmN0aW9uIFRlc3RSdW4oZW50cnkpIHsKICAgICB0aGlzLmRlc2Ny
aXB0aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZW50cnlbJ2Rlc2NyaXB0aW9uJ107IH0KLSAg
ICB0aGlzLndlYmtpdFJldmlzaW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZW50cnlbJ3dlYmtp
dC1yZXZpc2lvbiddOyB9CisgICAgdGhpcy53ZWJraXRSZXZpc2lvbiA9IGZ1bmN0aW9uICgpIHsg
cmV0dXJuIGVudHJ5WydyZXZpc2lvbnMnXVsnV2ViS2l0J11bJ3JldmlzaW9uJ107IH0KICAgICB0
aGlzLmxhYmVsID0gZnVuY3Rpb24gKCkgewogICAgICAgICB2YXIgbGFiZWwgPSAncicgKyB0aGlz
LndlYmtpdFJldmlzaW9uKCk7CiAgICAgICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uKCkpCkBAIC0y
MTIsMTAgKzIxNSwxMSBAQCBmdW5jdGlvbiBUZXN0UnVuKGVudHJ5KSB7CiAgICAgfQogfQogCi1m
dW5jdGlvbiBQZXJmVGVzdChuYW1lKSB7CitmdW5jdGlvbiBQZXJmVGVzdE1ldHJpYyhuYW1lLCBt
ZXRyaWMpIHsKICAgICB2YXIgdGVzdFJlc3VsdHMgPSBbXTsKICAgICB2YXIgY2FjaGVkVW5pdCA9
IG51bGw7CiAgICAgdmFyIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSBudWxsOworICAgIHZhciB1bml0
ID0geydGcmFtZVJhdGUnOiAnZnBzJywgJ1J1bnMnOiAncnVucy9zJywgJ1RpbWUnOiAnbXMnLCAn
TWFsbG9jJzogJ2J5dGVzJywgJ0pTSGVhcCc6ICdieXRlcyd9W21ldHJpY107CiAKICAgICAvLyBX
ZSBjYW4ndCBkbyB0aGlzIGluIFRlc3RSZXN1bHQgYmVjYXVzZSBhbGwgcmVzdWx0cyBmb3IgZWFj
aCB0ZXN0IG5lZWQgdG8gc2hhcmUgdGhlIHNhbWUgdW5pdCBhbmQgdGhlIHNhbWUgc2NhbGluZyBm
YWN0b3IuCiAgICAgZnVuY3Rpb24gY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpIHsKQEAg
LTIyNCw3ICsyMjgsNiBAQCBmdW5jdGlvbiBQZXJmVGVzdChuYW1lKSB7CiAgICAgICAgIGlmICgh
dGVzdFJlc3VsdHMubGVuZ3RoIHx8IGNhY2hlZFVuaXQpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgdmFyIHVuaXQgPSB0ZXN0UmVzdWx0c1swXS51bml0KCk7IC8vIEZJWE1FOiBXZSBz
aG91bGQgdmVyaWZ5IHRoYXQgYWxsIHJlc3VsdHMgaGF2ZSB0aGUgc2FtZSB1bml0LgogICAgICAg
ICB2YXIgbWVhbiA9IHRlc3RSZXN1bHRzWzBdLnVuc2NhbGVkTWVhbigpOyAvLyBGSVhNRTogV2Ug
c2hvdWxkIGxvb2sgYXQgYWxsIHZhbHVlcy4KICAgICAgICAgdmFyIGtpbG8gPSB1bml0ID09ICdi
eXRlcycgPyAxMDI0IDogMTAwMDsKICAgICAgICAgaWYgKG1lYW4gPiAxMCAqIGtpbG8gKiBraWxv
ICYmIHVuaXQgIT0gJ21zJykgewpAQCAtMjM5LDggKzI0Miw4IEBAIGZ1bmN0aW9uIFBlcmZUZXN0
KG5hbWUpIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRoaXMubmFtZSA9IGZ1bmN0aW9uICgp
IHsgcmV0dXJuIG5hbWU7IH0KLSAgICB0aGlzLmlzTWVtb3J5VGVzdCA9IGZ1bmN0aW9uICgpIHsg
cmV0dXJuIG5hbWUuaW5kZXhPZignOicpID49IDA7IH0KKyAgICB0aGlzLm5hbWUgPSBmdW5jdGlv
biAoKSB7IHJldHVybiBuYW1lICsgJzonICsgbWV0cmljOyB9CisgICAgdGhpcy5pc01lbW9yeVRl
c3QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWMgPT0gJ0pTSGVhcCcgfHwgbWV0cmljID09
ICdNYWxsb2MnOyB9CiAgICAgdGhpcy5hZGRSZXN1bHQgPSBmdW5jdGlvbiAobmV3UmVzdWx0KSB7
CiAgICAgICAgIHRlc3RSZXN1bHRzLnB1c2gobmV3UmVzdWx0KTsKICAgICAgICAgY2FjaGVkVW5p
dCA9IG51bGw7CkBAIC0yNTUsNyArMjU4LDcgQEAgZnVuY3Rpb24gUGVyZlRlc3QobmFtZSkgewog
ICAgICAgICBjb21wdXRlU2NhbGluZ0ZhY3RvcklmTmVlZGVkKCk7CiAgICAgICAgIHJldHVybiBj
YWNoZWRVbml0OwogICAgIH0KLSAgICB0aGlzLnNtYWxsZXJJc0JldHRlciA9IGZ1bmN0aW9uICgp
IHsgcmV0dXJuIHRlc3RSZXN1bHRzWzBdLnVuaXQoKSA9PSAnbXMnIHx8IHRlc3RSZXN1bHRzWzBd
LnVuaXQoKSA9PSAnYnl0ZXMnOyB9CisgICAgdGhpcy5zbWFsbGVySXNCZXR0ZXIgPSBmdW5jdGlv
biAoKSB7IHJldHVybiB1bml0ID09ICdtcycgfHwgdW5pdCA9PSAnYnl0ZXMnOyB9CiB9CiAKIHZh
ciBwbG90Q29sb3IgPSAncmdiKDIzMCw1MCw1MCknOwpAQCAtMzUzLDIyICszNTYsMTUgQEAgZnVu
Y3Rpb24gYXR0YWNoUGxvdCh0ZXN0LCBwbG90Q29udGFpbmVyLAogICAgICAgICByZXR1cm4gbmV3
VmFsdWVzID8gdmFsdWVzLmNvbmNhdChuZXdWYWx1ZXMubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyBy
ZXR1cm4gW2luZGV4LCB2YWx1ZV07IH0pKSA6IHZhbHVlczsKICAgICB9LCBbXSk7CiAKLSAgICB2
YXIgcGxvdERhdGEgPSBbXTsKLSAgICBpZiAodmFsdWVzLmxlbmd0aCkKLSAgICAgICAgcGxvdERh
dGEgPSBbJC5leHRlbmQodHJ1ZSwge30sIHN1YnBvaW50c1Bsb3RPcHRpb25zLCB7ZGF0YTogdmFs
dWVzfSldOwotICAgIGVsc2UgewotICAgICAgICBmdW5jdGlvbiBtYWtlU3VicG9pbnRzKGlkLCBj
YWxsYmFjaykgeyByZXR1cm4gJC5leHRlbmQodHJ1ZSwge30sIHN1YnBvaW50c1Bsb3RPcHRpb25z
LCB7aWQ6IGlkLCBkYXRhOiByZXN1bHRzLm1hcChjYWxsYmFjayl9KTsgfQotICAgICAgICBwbG90
RGF0YSA9IFttYWtlU3VicG9pbnRzKCdtaW4nLCBmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyBy
ZXR1cm4gW2luZGV4LCByZXN1bHQubWluKCldOyB9KSwKLSAgICAgICAgbWFrZVN1YnBvaW50cygn
bWF4JywgZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIFtpbmRleCwgcmVzdWx0Lm1h
eCgpXTsgfSksCi0gICAgICAgIG1ha2VTdWJwb2ludHMoJy0mIzk2MzsnLCBmdW5jdGlvbiAocmVz
dWx0LCBpbmRleCkgeyByZXR1cm4gW2luZGV4LCByZXN1bHQubWVhbigpIC0gcmVzdWx0LnN0ZGV2
KCldOyB9KSwKLSAgICAgICAgbWFrZVN1YnBvaW50cygnKyYjOTYzOycsIGZ1bmN0aW9uIChyZXN1
bHQsIGluZGV4KSB7IHJldHVybiBbaW5kZXgsIHJlc3VsdC5tZWFuKCkgKyByZXN1bHQuc3RkZXYo
KV07IH0pXTsKLSAgICB9Ci0KKyAgICB2YXIgcGxvdERhdGEgPSBbJC5leHRlbmQodHJ1ZSwge30s
IHN1YnBvaW50c1Bsb3RPcHRpb25zLCB7ZGF0YTogdmFsdWVzfSldOwogICAgIHBsb3REYXRhLnB1
c2goe2lkOiAnJm11OycsIGRhdGE6IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4
KSB7IHJldHVybiBbaW5kZXgsIHJlc3VsdC5tZWFuKCldOyB9KSwgY29sb3I6IHBsb3RDb2xvcn0p
OwogCisgICAgdmFyIG92ZXJhbGxNYXggPSBTdGF0aXN0aWNzLm1heChyZXN1bHRzLm1hcChmdW5j
dGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gcmVzdWx0Lm1heCgpOyB9KSk7CisgICAgdmFy
IG92ZXJhbGxNaW4gPSBTdGF0aXN0aWNzLm1pbihyZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0
LCBpbmRleCkgeyByZXR1cm4gcmVzdWx0Lm1pbigpOyB9KSk7CisgICAgdmFyIG1hcmdpbiA9IChv
dmVyYWxsTWF4IC0gb3ZlcmFsbE1pbikgKiAwLjE7CiAgICAgdmFyIGN1cnJlbnRQbG90T3B0aW9u
cyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBtYWluUGxvdE9wdGlvbnMsIHt5YXhpczogewotICAgICAg
ICBtaW46IG1pbklzWmVybyA/IDAgOiBNYXRoLm1pbi5hcHBseShNYXRoLCByZXN1bHRzLm1hcChm
dW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gcmVzdWx0Lm1pbigpOyB9KSkgKiAwLjk4
LAotICAgICAgICBtYXg6IE1hdGgubWF4LmFwcGx5KE1hdGgsIHJlc3VsdHMubWFwKGZ1bmN0aW9u
IChyZXN1bHQsIGluZGV4KSB7IHJldHVybiByZXN1bHQubWF4KCk7IH0pKSAqIChtaW5Jc1plcm8g
PyAxLjEgOiAxLjAxKX19KTsKKyAgICAgICAgbWluOiBtaW5Jc1plcm8gPyAwIDogb3ZlcmFsbE1p
biAtIG1hcmdpbiwKKyAgICAgICAgbWF4OiBtaW5Jc1plcm8gPyBvdmVyYWxsTWF4ICogMS4xIDog
b3ZlcmFsbE1heCArIG1hcmdpbn19KTsKIAogICAgIGN1cnJlbnRQbG90T3B0aW9ucy54YXhpcy5t
YXggPSByZXN1bHRzLmxlbmd0aCAtIDAuNTsKICAgICBjdXJyZW50UGxvdE9wdGlvbnMueGF4aXMu
dGlja3MgPSByZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gW2lu
ZGV4LCByZXN1bHQucnVuKCkubGFiZWwoKV07IH0pOwpAQCAtNDc1LDEzICs0NzEsMTMgQEAgZnVu
Y3Rpb24gY3JlYXRlVGFibGVSb3cocnVucywgdGVzdCwgcmVmZQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgdmFyIHN0YXRpc3RpY3MgPSAnJnNpZ21hOz0nICsgdG9GaXhlZFdp
ZHRoUHJlY2lzaW9uKHJlc3VsdC5zdGRldigpKSArICcsIG1pbj0nICsgdG9GaXhlZFdpZHRoUHJl
Y2lzaW9uKHJlc3VsdC5taW4oKSkKKyAgICAgICAgdmFyIHN0YXRpc3RpY3MgPSAnJnNpZ21hOz0n
ICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgp
KSArICcsIG1pbj0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5taW4oKSkKICAgICAg
ICAgICAgICsgJywgbWF4PScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVzdWx0Lm1heCgpKSAr
ICdcbicgKyByZWdyZXNzaW9uQW5hbHlzaXM7CiAKICAgICAgICAgLy8gVGFibGVzb3J0ZXIgZG9l
c24ndCBrbm93IGFib3V0IHRoZSBzZWNvbmQgY2VsbCBzbyBwdXQgdGhlIGNvbXBhcmlzb24gaW4g
dGhlIGludmlzaWJsZSBlbGVtZW50LgogICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz0icmVzdWx0
IiB0aXRsZT0iJyArIHN0YXRpc3RpY3MgKyAnIj4nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJl
c3VsdC5tZWFuKCkpICsgaGlkZGVuVmFsdWUKLSAgICAgICAgICAgICsgJzwvdGQ+PHRkIGNsYXNz
PSJzdGRldiIgdGl0bGU9IicgKyBzdGF0aXN0aWNzICsgJyI+JnBsdXNtbjsgJwotICAgICAgICAg
ICAgKyBmb3JtYXRQZXJjZW50YWdlKHJlc3VsdC5zdGRldlJhdGlvKCkpICsgd2FybmluZyArICc8
L3RkPicgKyBjb21wYXJpc29uQ2VsbDsKKyAgICAgICAgICAgICsgJzwvdGQ+PHRkIGNsYXNzPSJj
b25maWRlbmNlSW50ZXJ2YWxEZWx0YSIgdGl0bGU9IicgKyBzdGF0aXN0aWNzICsgJyI+JnBsdXNt
bjsgJworICAgICAgICAgICAgKyBmb3JtYXRQZXJjZW50YWdlKHJlc3VsdC5jb25maWRlbmNlSW50
ZXJ2YWxEZWx0YVJhdGlvKCkpICsgd2FybmluZyArICc8L3RkPicgKyBjb21wYXJpc29uQ2VsbDsK
ICAgICB9CiAKICAgICBmdW5jdGlvbiBtYXJrdXBGb3JNaXNzaW5nUnVuKGlzUmVmZXJlbmNlKSB7
CkBAIC01NDcsMjQgKzU0Myw0MiBAQCBmdW5jdGlvbiBpbml0KCkgewogICAgIH0pOwogCiAgICAg
dmFyIHJ1bnMgPSBbXTsKLSAgICB2YXIgdGVzdHMgPSB7fTsKKyAgICB2YXIgbWV0cmljcyA9IHt9
OwogICAgICQuZWFjaChKU09OLnBhcnNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqc29uJyku
dGV4dENvbnRlbnQpLCBmdW5jdGlvbiAoaW5kZXgsIGVudHJ5KSB7CiAgICAgICAgIHZhciBydW4g
PSBuZXcgVGVzdFJ1bihlbnRyeSk7CiAgICAgICAgIHJ1bnMucHVzaChydW4pOwotICAgICAgICAk
LmVhY2goZW50cnkucmVzdWx0cywgZnVuY3Rpb24gKHRlc3QsIHJlc3VsdCkgewotICAgICAgICAg
ICAgaWYgKCF0ZXN0c1t0ZXN0XSkKLSAgICAgICAgICAgICAgICB0ZXN0c1t0ZXN0XSA9IG5ldyBQ
ZXJmVGVzdCh0ZXN0KTsKLSAgICAgICAgICAgIHRlc3RzW3Rlc3RdLmFkZFJlc3VsdChuZXcgVGVz
dFJlc3VsdCh0ZXN0c1t0ZXN0XSwgcmVzdWx0LCBydW4pKTsKLSAgICAgICAgfSk7CisKKyAgICAg
ICAgZnVuY3Rpb24gYWRkVGVzdHModGVzdHMsIHBhcmVudEZ1bGxOYW1lKSB7CisgICAgICAgICAg
ICBmb3IgKHZhciB0ZXN0TmFtZSBpbiB0ZXN0cykgeworICAgICAgICAgICAgICAgIHZhciBmdWxs
VGVzdE5hbWUgPSBwYXJlbnRGdWxsTmFtZSArICcvJyArIHRlc3ROYW1lOworICAgICAgICAgICAg
ICAgIHZhciByYXdNZXRyaWNzID0gdGVzdHNbdGVzdE5hbWVdLm1ldHJpY3M7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBtZXRyaWNOYW1lIGluIHJhd01ldHJpY3MpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGZ1bGxNZXRyaWNOYW1lID0gZnVsbFRlc3ROYW1lICsgJzonICsgbWV0cmlj
TmFtZTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1ldHJpYyA9IG1ldHJpY3NbZnVsbE1ldHJp
Y05hbWVdOworICAgICAgICAgICAgICAgICAgICBpZiAoIW1ldHJpYykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbWV0cmljID0gbmV3IFBlcmZUZXN0TWV0cmljKGZ1bGxUZXN0TmFtZSwgbWV0
cmljTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzW2Z1bGxNZXRyaWNOYW1l
XSA9IG1ldHJpYzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBt
ZXRyaWMuYWRkUmVzdWx0KG5ldyBUZXN0UmVzdWx0KG1ldHJpYywgcmF3TWV0cmljc1ttZXRyaWNO
YW1lXS5jdXJyZW50LCBydW4pKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAodGVzdHNbdGVzdE5hbWVdLnRlc3RzKQorICAgICAgICAgICAgICAgICAgICBhZGRUZXN0
cyh0ZXN0c1t0ZXN0TmFtZV0udGVzdHMsIGZ1bGxUZXN0TmFtZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBhZGRUZXN0cyhlbnRyeS50ZXN0cywgJycpOwogICAgIH0pOwog
CiAgICAgdmFyIHNob3VsZElnbm9yZU1lbW9yeT0gdHJ1ZTsKICAgICB2YXIgcmVmZXJlbmNlSW5k
ZXggPSAwOwotICAgIGNyZWF0ZVRhYmxlKHRlc3RzLCBydW5zLCBzaG91bGRJZ25vcmVNZW1vcnks
IHJlZmVyZW5jZUluZGV4KTsKKworICAgIGNyZWF0ZVRhYmxlKG1ldHJpY3MsIHJ1bnMsIHNob3Vs
ZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgpOwogCiAgICAgJCgnI3RpbWUtbWVtb3J5Jyku
YmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKGV2ZW50LCBjaGVja2VkRWxlbWVudCkgewogICAgICAg
ICBzaG91bGRJZ25vcmVNZW1vcnkgPSBjaGVja2VkRWxlbWVudC50ZXh0Q29udGVudCA9PSAnVGlt
ZSc7Ci0gICAgICAgIGNyZWF0ZVRhYmxlKHRlc3RzLCBydW5zLCBzaG91bGRJZ25vcmVNZW1vcnks
IHJlZmVyZW5jZUluZGV4KTsKKyAgICAgICAgY3JlYXRlVGFibGUobWV0cmljcywgcnVucywgc2hv
dWxkSWdub3JlTWVtb3J5LCByZWZlcmVuY2VJbmRleCk7CiAgICAgfSk7CiAKICAgICBydW5zLm1h
cChmdW5jdGlvbiAocnVuLCBpbmRleCkgewpAQCAtNTczLDcgKzU4Nyw3IEBAIGZ1bmN0aW9uIGlu
aXQoKSB7CiAKICAgICAkKCcjcmVmZXJlbmNlJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKGV2
ZW50LCBjaGVja2VkRWxlbWVudCkgewogICAgICAgICByZWZlcmVuY2VJbmRleCA9IHBhcnNlSW50
KGNoZWNrZWRFbGVtZW50LmdldEF0dHJpYnV0ZSgndmFsdWUnKSk7Ci0gICAgICAgIGNyZWF0ZVRh
YmxlKHRlc3RzLCBydW5zLCBzaG91bGRJZ25vcmVNZW1vcnksIHJlZmVyZW5jZUluZGV4KTsKKyAg
ICAgICAgY3JlYXRlVGFibGUobWV0cmljcywgcnVucywgc2hvdWxkSWdub3JlTWVtb3J5LCByZWZl
cmVuY2VJbmRleCk7CiAgICAgfSk7CiAKICAgICAkKCcuY2hlY2tib3gnKS5lYWNoKGZ1bmN0aW9u
IChpbmRleCwgY2hlY2tib3gpIHsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL3N0
YXRpc3RpY3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvc3Rh
dGlzdGljcy5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL3N0
YXRpc3RpY3MuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKwordmFyIFN0YXRpc3RpY3MgPSBuZXcgKGZ1bmN0aW9uICgpIHsKKworICAgIHRoaXMubWF4
ID0gZnVuY3Rpb24gKHZhbHVlcykgeworICAgICAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0
aCwgdmFsdWVzKTsKKyAgICB9CisKKyAgICB0aGlzLm1pbiA9IGZ1bmN0aW9uICh2YWx1ZXMpIHsK
KyAgICAgICAgcmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsIHZhbHVlcyk7CisgICAgfQorCisg
ICAgdGhpcy5zdW0gPSBmdW5jdGlvbiAodmFsdWVzKSB7CisgICAgICAgIHJldHVybiB2YWx1ZXMu
cmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhICsgYjsgfSwgMCk7CisgICAgfQorCisg
ICAgdGhpcy5zcXVhcmVTdW0gPSBmdW5jdGlvbiAodmFsdWVzKSB7CisgICAgICAgIHJldHVybiB2
YWx1ZXMucmVkdWNlKGZ1bmN0aW9uIChzdW0sIHZhbHVlKSB7IHJldHVybiBzdW0gKyB2YWx1ZSAq
IHZhbHVlO30sIDApOworICAgIH0KKworICAgIC8vIFdpdGggc3VtIGFuZCBzdW0gb2Ygc3F1YXJl
cywgd2UgY2FuIGNvbXB1dGUgdGhlIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gTygxKS4K
KyAgICAvLyBTZWUgaHR0cHM6Ly9ybml3YS5jb20vMjAxMi0xMS0xMC9zYW1wbGUtc3RhbmRhcmQt
ZGV2aWF0aW9uLWluLXRlcm1zLW9mLXN1bS1hbmQtc3F1YXJlLXN1bS1vZi1zYW1wbGVzLworICAg
IHRoaXMuc2FtcGxlU3RhbmRhcmREZXZpYXRpb24gPSBmdW5jdGlvbiAobnVtYmVyT2ZTYW1wbGVz
LCBzdW0sIHNxdWFyZVN1bSkgeworICAgICAgICBpZiAobnVtYmVyT2ZTYW1wbGVzIDwgMikKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHNxdWFyZVN1bSAv
IChudW1iZXJPZlNhbXBsZXMgLSAxKQorICAgICAgICAgICAgLSBzdW0gKiBzdW0gLyAobnVtYmVy
T2ZTYW1wbGVzIC0gMSkgLyBudW1iZXJPZlNhbXBsZXMpOworICAgIH0KKworICAgIHRoaXMuc3Vw
cG9ydGVkQ29uZmlkZW5jZUxldmVscyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHN1cHBv
cnRlZExldmVscyA9IFtdOworICAgICAgICBmb3IgKHZhciBxdWFudGlsZSBpbiB0RGlzdHJpYnV0
aW9uSW52ZXJzZUNERikKKyAgICAgICAgICAgIHN1cHBvcnRlZExldmVscy5wdXNoKCgxIC0gKDEg
LSBxdWFudGlsZSkgKiAyKS50b0ZpeGVkKDIpKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZExl
dmVsczsKKyAgICB9CisKKyAgICAvLyBDb21wdXRlcyB0aGUgZGVsdGEgZCBzLnQuIChtZWFuIC0g
ZCwgbWVhbiArIGQpIGlzIHRoZSBjb25maWRlbmNlIGludGVydmFsIHdpdGggdGhlIHNwZWNpZmll
ZCBjb25maWRlbmNlIGxldmVsIGluIE8oMSkuCisgICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxE
ZWx0YSA9IGZ1bmN0aW9uIChjb25maWRlbmNlTGV2ZWwsIG51bWJlck9mU2FtcGxlcywgc3VtLCBz
cXVhcmVTdW0pIHsKKyAgICAgICAgdmFyIHF1YW50aWxlID0gKDEgLSAoMSAtIGNvbmZpZGVuY2VM
ZXZlbCkgLyAyKTsKKyAgICAgICAgaWYgKCEocXVhbnRpbGUgaW4gdERpc3RyaWJ1dGlvbkludmVy
c2VDREYpKSB7CisgICAgICAgICAgICB0aHJvdyAnV2Ugb25seSBzdXBwb3J0ICcgKyB0aGlzLnN1
cHBvcnRlZENvbmZpZGVuY2VMZXZlbHMoKS5tYXAoCisgICAgICAgICAgICAgICAgZnVuY3Rpb24g
KGxldmVsKSB7IHJldHVybiBsZXZlbCAqIDEwMCArICclJzsgfSApLmpvaW4oJywgJykgKyAnIGNv
bmZpZGVuY2UgaW50ZXJ2YWxzLic7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG51bWJlck9mU2Ft
cGxlcyAtIDIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5hTjsKKworICAgICAgICB2YXIgZGVs
dGFzID0gdERpc3RyaWJ1dGlvbkludmVyc2VDREZbcXVhbnRpbGVdOworICAgICAgICB2YXIgZGVn
cmVlc09mRnJlZWRvbSA9IG51bWJlck9mU2FtcGxlcyAtIDE7CisgICAgICAgIGlmIChkZWdyZWVz
T2ZGcmVlZG9tID4gZGVsdGFzLmxlbmd0aCkKKyAgICAgICAgICAgIHRocm93ICdXZSBvbmx5IHN1
cHBvcnQgdXAgdG8gJyArIGRlbHRhcy5sZW5ndGggKyAnIGRlZ3JlZXMgb2YgZnJlZWRvbSc7CisK
KyAgICAgICAgLy8gZCA9IGMgKiBTL3NxcnQobnVtYmVyT2ZTYW1wbGVzKSB3aGVyZSBjIH4gdC1k
aXN0cmlidXRpb24oZGVncmVlc09mRnJlZWRvbSkgYW5kIFMgaXMgdGhlIHNhbXBsZSBzdGFuZGFy
ZCBkZXZpYXRpb24uCisgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1tkZWdyZWVzT2ZGcmVlZG9t
IC0gMV07IC8vIFRoZSBmaXJzdCBlbnRyeSBpcyBmb3IgdGhlIG9uZSBkZWdyZWUgb2YgZnJlZWRv
bS4KKyAgICAgICAgcmV0dXJuIGRlbHRhc1tkZWdyZWVzT2ZGcmVlZG9tIC0gMV0gKiB0aGlzLnNh
bXBsZVN0YW5kYXJkRGV2aWF0aW9uKG51bWJlck9mU2FtcGxlcywgc3VtLCBzcXVhcmVTdW0pIC8g
TWF0aC5zcXJ0KG51bWJlck9mU2FtcGxlcyk7CisgICAgfQorCisgICAgdGhpcy5jb25maWRlbmNl
SW50ZXJ2YWwgPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9iYWJpbGl0eSkgeworICAgICAgICB2YXIg
c3VtID0gdGhpcy5zdW0odmFsdWVzKTsKKyAgICAgICAgdmFyIG1lYW4gPSBzdW0gLyB2YWx1ZXMu
bGVuZ3RoOworICAgICAgICB2YXIgZGVsdGEgPSB0aGlzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRh
KHByb2JhYmlsaXR5IHx8IDAuOTUsIHZhbHVlcy5sZW5ndGgsIHN1bSwgdGhpcy5zcXVhcmVTdW0o
dmFsdWVzKSk7CisgICAgICAgIHJldHVybiBbbWVhbiAtIGRlbHRhLCBtZWFuICsgZGVsdGFdOwor
ICAgIH0KKworICAgIC8vIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N0dWRlbnQn
c190LWRpc3RyaWJ1dGlvbiNUYWJsZV9vZl9zZWxlY3RlZF92YWx1ZXMKKyAgICAvLyBUaGlzIHRh
YmxlIGNvbnRhaW5zIG9uZSBzaWRlZCAoYS5rLmEuIHRhaWwpIHZhbHVlcy4KKyAgICB2YXIgdERp
c3RyaWJ1dGlvbkludmVyc2VDREYgPSB7CisgICAgICAgIDAuOTogWworICAgICAgICAgICAgMy4w
Nzc2ODQsIDEuODg1NjE4LCAxLjYzNzc0NCwgMS41MzMyMDYsIDEuNDc1ODg0LCAxLjQzOTc1Niwg
MS40MTQ5MjQsIDEuMzk2ODE1LCAxLjM4MzAyOSwgMS4zNzIxODQsCisgICAgICAgICAgICAxLjM2
MzQzMCwgMS4zNTYyMTcsIDEuMzUwMTcxLCAxLjM0NTAzMCwgMS4zNDA2MDYsIDEuMzM2NzU3LCAx
LjMzMzM3OSwgMS4zMzAzOTEsIDEuMzI3NzI4LCAxLjMyNTM0MSwKKyAgICAgICAgICAgIDEuMzIz
MTg4LCAxLjMyMTIzNywgMS4zMTk0NjAsIDEuMzE3ODM2LCAxLjMxNjM0NSwgMS4zMTQ5NzIsIDEu
MzEzNzAzLCAxLjMxMjUyNywgMS4zMTE0MzQsIDEuMzEwNDE1LAorICAgICAgICAgICAgMS4zMDk0
NjQsIDEuMzA4NTczLCAxLjMwNzczNywgMS4zMDY5NTIsIDEuMzA2MjEyLCAxLjMwNTUxNCwgMS4z
MDQ4NTQsIDEuMzA0MjMwLCAxLjMwMzYzOSwgMS4zMDMwNzcsCisgICAgICAgICAgICAxLjMwMjU0
MywgMS4zMDIwMzUsIDEuMzAxNTUyLCAxLjMwMTA5MCwgMS4zMDA2NDksIDEuMzAwMjI4LCAxLjI5
OTgyNSwgMS4yOTk0MzksIDEuMjk5MDY5LCAxLjI5ODcxNCwKKworICAgICAgICAgICAgMS4yOTgz
NzMsIDEuMjk4MDQ1LCAxLjI5NzczMCwgMS4yOTc0MjYsIDEuMjk3MTM0LCAxLjI5Njg1MywgMS4y
OTY1ODEsIDEuMjk2MzE5LCAxLjI5NjA2NiwgMS4yOTU4MjEsCisgICAgICAgICAgICAxLjI5NTU4
NSwgMS4yOTUzNTYsIDEuMjk1MTM0LCAxLjI5NDkyMCwgMS4yOTQ3MTIsIDEuMjk0NTExLCAxLjI5
NDMxNSwgMS4yOTQxMjYsIDEuMjkzOTQyLCAxLjI5Mzc2MywKKyAgICAgICAgICAgIDEuMjkzNTg5
LCAxLjI5MzQyMSwgMS4yOTMyNTYsIDEuMjkzMDk3LCAxLjI5Mjk0MSwgMS4yOTI3OTAsIDEuMjky
NjQzLCAxLjI5MjUwMCwgMS4yOTIzNjAsIDEuMjkyMjI0LAorICAgICAgICAgICAgMS4yOTIwOTEs
IDEuMjkxOTYxLCAxLjI5MTgzNSwgMS4yOTE3MTEsIDEuMjkxNTkxLCAxLjI5MTQ3MywgMS4yOTEz
NTgsIDEuMjkxMjQ2LCAxLjI5MTEzNiwgMS4yOTEwMjksCisgICAgICAgICAgICAxLjI5MDkyNCwg
MS4yOTA4MjEsIDEuMjkwNzIxLCAxLjI5MDYyMywgMS4yOTA1MjcsIDEuMjkwNDMyLCAxLjI5MDM0
MCwgMS4yOTAyNTAsIDEuMjkwMTYxLCAxLjI5MDA3NV0sCisgICAgICAgIDAuOTU6IFsKKyAgICAg
ICAgICAgIDYuMzEzNzUyLCAyLjkxOTk4NiwgMi4zNTMzNjMsIDIuMTMxODQ3LCAyLjAxNTA0OCwg
MS45NDMxODAsIDEuODk0NTc5LCAxLjg1OTU0OCwgMS44MzMxMTMsIDEuODEyNDYxLAorICAgICAg
ICAgICAgMS43OTU4ODUsIDEuNzgyMjg4LCAxLjc3MDkzMywgMS43NjEzMTAsIDEuNzUzMDUwLCAx
Ljc0NTg4NCwgMS43Mzk2MDcsIDEuNzM0MDY0LCAxLjcyOTEzMywgMS43MjQ3MTgsCisgICAgICAg
ICAgICAxLjcyMDc0MywgMS43MTcxNDQsIDEuNzEzODcyLCAxLjcxMDg4MiwgMS43MDgxNDEsIDEu
NzA1NjE4LCAxLjcwMzI4OCwgMS43MDExMzEsIDEuNjk5MTI3LCAxLjY5NzI2MSwKKyAgICAgICAg
ICAgIDEuNjk1NTE5LCAxLjY5Mzg4OSwgMS42OTIzNjAsIDEuNjkwOTI0LCAxLjY4OTU3MiwgMS42
ODgyOTgsIDEuNjg3MDk0LCAxLjY4NTk1NCwgMS42ODQ4NzUsIDEuNjgzODUxLAorICAgICAgICAg
ICAgMS42ODI4NzgsIDEuNjgxOTUyLCAxLjY4MTA3MSwgMS42ODAyMzAsIDEuNjc5NDI3LCAxLjY3
ODY2MCwgMS42Nzc5MjcsIDEuNjc3MjI0LCAxLjY3NjU1MSwgMS42NzU5MDUsCisKKyAgICAgICAg
ICAgIDEuNjc1Mjg1LCAxLjY3NDY4OSwgMS42NzQxMTYsIDEuNjczNTY1LCAxLjY3MzAzNCwgMS42
NzI1MjIsIDEuNjcyMDI5LCAxLjY3MTU1MywgMS42NzEwOTMsIDEuNjcwNjQ5LAorICAgICAgICAg
ICAgMS42NzAyMTksIDEuNjY5ODA0LCAxLjY2OTQwMiwgMS42NjkwMTMsIDEuNjY4NjM2LCAxLjY2
ODI3MSwgMS42Njc5MTYsIDEuNjY3NTcyLCAxLjY2NzIzOSwgMS42NjY5MTQsCisgICAgICAgICAg
ICAxLjY2NjYwMCwgMS42NjYyOTQsIDEuNjY1OTk2LCAxLjY2NTcwNywgMS42NjU0MjUsIDEuNjY1
MTUxLCAxLjY2NDg4NSwgMS42NjQ2MjUsIDEuNjY0MzcxLCAxLjY2NDEyNSwKKyAgICAgICAgICAg
IDEuNjYzODg0LCAxLjY2MzY0OSwgMS42NjM0MjAsIDEuNjYzMTk3LCAxLjY2Mjk3OCwgMS42NjI3
NjUsIDEuNjYyNTU3LCAxLjY2MjM1NCwgMS42NjIxNTUsIDEuNjYxOTYxLAorICAgICAgICAgICAg
MS42NjE3NzEsIDEuNjYxNTg1LCAxLjY2MTQwNCwgMS42NjEyMjYsIDEuNjYxMDUyLCAxLjY2MDg4
MSwgMS42NjA3MTUsIDEuNjYwNTUxLCAxLjY2MDM5MSwgMS42NjAyMzRdLAorICAgICAgICAwLjk3
NTogWworICAgICAgICAgICAgMTIuNzA2MjA1LCA0LjMwMjY1MywgMy4xODI0NDYsIDIuNzc2NDQ1
LCAyLjU3MDU4MiwgMi40NDY5MTIsIDIuMzY0NjI0LCAyLjMwNjAwNCwgMi4yNjIxNTcsIDIuMjI4
MTM5LAorICAgICAgICAgICAgMi4yMDA5ODUsIDIuMTc4ODEzLCAyLjE2MDM2OSwgMi4xNDQ3ODcs
IDIuMTMxNDUwLCAyLjExOTkwNSwgMi4xMDk4MTYsIDIuMTAwOTIyLCAyLjA5MzAyNCwgMi4wODU5
NjMsCisgICAgICAgICAgICAyLjA3OTYxNCwgMi4wNzM4NzMsIDIuMDY4NjU4LCAyLjA2Mzg5OSwg
Mi4wNTk1MzksIDIuMDU1NTI5LCAyLjA1MTgzMSwgMi4wNDg0MDcsIDIuMDQ1MjMwLCAyLjA0MjI3
MiwKKyAgICAgICAgICAgIDIuMDM5NTEzLCAyLjAzNjkzMywgMi4wMzQ1MTUsIDIuMDMyMjQ1LCAy
LjAzMDEwOCwgMi4wMjgwOTQsIDIuMDI2MTkyLCAyLjAyNDM5NCwgMi4wMjI2OTEsIDIuMDIxMDc1
LAorICAgICAgICAgICAgMi4wMTk1NDEsIDIuMDE4MDgyLCAyLjAxNjY5MiwgMi4wMTUzNjgsIDIu
MDE0MTAzLCAyLjAxMjg5NiwgMi4wMTE3NDEsIDIuMDEwNjM1LCAyLjAwOTU3NSwgMi4wMDg1NTks
CisKKyAgICAgICAgICAgIDIuMDA3NTg0LCAyLjAwNjY0NywgMi4wMDU3NDYsIDIuMDA0ODc5LCAy
LjAwNDA0NSwgMi4wMDMyNDEsIDIuMDAyNDY1LCAyLjAwMTcxNywgMi4wMDA5OTUsIDIuMDAwMjk4
LAorICAgICAgICAgICAgMS45OTk2MjQsIDEuOTk4OTcyLCAxLjk5ODM0MSwgMS45OTc3MzAsIDEu
OTk3MTM4LCAxLjk5NjU2NCwgMS45OTYwMDgsIDEuOTk1NDY5LCAxLjk5NDk0NSwgMS45OTQ0Mzcs
CisgICAgICAgICAgICAxLjk5Mzk0MywgMS45OTM0NjQsIDEuOTkyOTk3LCAxLjk5MjU0MywgMS45
OTIxMDIsIDEuOTkxNjczLCAxLjk5MTI1NCwgMS45OTA4NDcsIDEuOTkwNDUwLCAxLjk5MDA2MywK
KyAgICAgICAgICAgIDEuOTg5Njg2LCAxLjk4OTMxOSwgMS45ODg5NjAsIDEuOTg4NjEwLCAxLjk4
ODI2OCwgMS45ODc5MzQsIDEuOTg3NjA4LCAxLjk4NzI5MCwgMS45ODY5NzksIDEuOTg2Njc1LAor
ICAgICAgICAgICAgMS45ODYzNzcsIDEuOTg2MDg2LCAxLjk4NTgwMiwgMS45ODU1MjMsIDEuOTg1
MjUxLCAxLjk4NDk4NCwgMS45ODQ3MjMsIDEuOTg0NDY3LCAxLjk4NDIxNywgMS45ODM5NzJdLAor
ICAgICAgICAwLjk5OiBbCisgICAgICAgICAgICAzMS44MjA1MTYsIDYuOTY0NTU3LCA0LjU0MDcw
MywgMy43NDY5NDcsIDMuMzY0OTMwLCAzLjE0MjY2OCwgMi45OTc5NTIsIDIuODk2NDU5LCAyLjgy
MTQzOCwgMi43NjM3NjksCisgICAgICAgICAgICAyLjcxODA3OSwgMi42ODA5OTgsIDIuNjUwMzA5
LCAyLjYyNDQ5NCwgMi42MDI0ODAsIDIuNTgzNDg3LCAyLjU2NjkzNCwgMi41NTIzODAsIDIuNTM5
NDgzLCAyLjUyNzk3NywKKyAgICAgICAgICAgIDIuNTE3NjQ4LCAyLjUwODMyNSwgMi40OTk4Njcs
IDIuNDkyMTU5LCAyLjQ4NTEwNywgMi40Nzg2MzAsIDIuNDcyNjYwLCAyLjQ2NzE0MCwgMi40NjIw
MjEsIDIuNDU3MjYyLAorICAgICAgICAgICAgMi40NTI4MjQsIDIuNDQ4Njc4LCAyLjQ0NDc5NCwg
Mi40NDExNTAsIDIuNDM3NzIzLCAyLjQzNDQ5NCwgMi40MzE0NDcsIDIuNDI4NTY4LCAyLjQyNTg0
MSwgMi40MjMyNTcsCisgICAgICAgICAgICAyLjQyMDgwMywgMi40MTg0NzAsIDIuNDE2MjUwLCAy
LjQxNDEzNCwgMi40MTIxMTYsIDIuNDEwMTg4LCAyLjQwODM0NSwgMi40MDY1ODEsIDIuNDA0ODky
LCAyLjQwMzI3MiwKKworICAgICAgICAgICAgMi40MDE3MTgsIDIuNDAwMjI1LCAyLjM5ODc5MCwg
Mi4zOTc0MTAsIDIuMzk2MDgxLCAyLjM5NDgwMSwgMi4zOTM1NjgsIDIuMzkyMzc3LCAyLjM5MTIy
OSwgMi4zOTAxMTksCisgICAgICAgICAgICAyLjM4OTA0NywgMi4zODgwMTEsIDIuMzg3MDA4LCAy
LjM4NjAzNywgMi4zODUwOTcsIDIuMzg0MTg2LCAyLjM4MzMwMiwgMi4zODI0NDYsIDIuMzgxNjE1
LCAyLjM4MDgwNywKKyAgICAgICAgICAgIDIuMzgwMDI0LCAyLjM3OTI2MiwgMi4zNzg1MjIsIDIu
Mzc3ODAyLCAyLjM3NzEwMiwgMi4zNzY0MjAsIDIuMzc1NzU3LCAyLjM3NTExMSwgMi4zNzQ0ODIs
IDIuMzczODY4LAorICAgICAgICAgICAgMi4zNzMyNzAsIDIuMzcyNjg3LCAyLjM3MjExOSwgMi4z
NzE1NjQsIDIuMzcxMDIyLCAyLjM3MDQ5MywgMi4zNjk5NzcsIDIuMzY5NDcyLCAyLjM2ODk3OSwg
Mi4zNjg0OTcsCisgICAgICAgICAgICAyLjM2ODAyNiwgMi4zNjc1NjYsIDIuMzY3MTE1LCAyLjM2
NjY3NCwgMi4zNjYyNDMsIDIuMzY1ODIxLCAyLjM2NTQwNywgMi4zNjUwMDIsIDIuMzY0NjA2LCAy
LjM2NDIxN10KKyAgICB9OworCit9KSgpOworCitpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZp
bmVkJykgeworICAgIGZvciAodmFyIGtleSBpbiBTdGF0aXN0aWNzKQorICAgICAgICBtb2R1bGUu
ZXhwb3J0c1trZXldID0gU3RhdGlzdGljc1trZXldOworfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ0MDEwKQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTMtMDItMjUg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHBlcmYud2Vi
a2l0Lm9yZyBKU09OIGZvcm1hdCBpbiByZXN1bHRzIHBhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDg0MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZSB0aGUgZGVmYXVsdCBKU09OIGZvcm1h
dCBmcm9tIHRoYXQgb2Ygd2Via2l0LXBlcmYuYXBwc3BvdC5jb20gdG8gdGhhdCBvZiBwZXJmLndl
YmtpdC5vcmcuCisKKyAgICAgICAgQSB3aG9sZSBidW5jaCBvZiBpbnRlZ3JhdGlvbiB0ZXN0cyBo
YXZlIGJlZW4gdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBKU09OIGZvcm1hdC4KKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVyLnB5Ogor
ICAgICAgICAoUGVyZlRlc3RzUnVubmVyLl9nZW5lcmF0ZV9hbmRfc2hvd19yZXN1bHRzKTogUmVu
YW1lZCBvdXRwdXQgYW5kIG91dHB1dF9wYXRoIHRvIGxlZ2FjeV9vdXRwdXQKKyAgICAgICAgYW5k
IGxlZ2FjeV9vdXRwdXRfanNvbl9wYXRoIHJlc3BlY3RpdmVseS4KKyAgICAgICAgKFBlcmZUZXN0
c1J1bm5lci5fZ2VuZXJhdGVfcmVzdWx0c19kaWN0KTogRG9uJ3QgYXNzdW1lIG1ldGEgYnVpbGQg
aW5mb3JtYXRpb24gaXMgYWx3YXlzIGF2YWlsYWJsZS4KKyAgICAgICAgKFBlcmZUZXN0c1J1bm5l
ci5fZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKTogTWFrZSBqc29uX291dHB1dCwgd2hpY2ggaXMgdXNl
ZCB0byBnZW5lcmF0ZSB0aGUgZGVmYXVsdAorICAgICAgICBKU09OIGZpbGUgYW5kIHRoZSByZXN1
bHRzIHBhZ2Ugb3V0IG9mIHBlcmZfd2Via2l0X291dHB1dCBpbnN0ZWFkIG9mIGxlZ2FjeV9vdXRw
dXQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0
ZXN0c3J1bm5lcl9pbnRlZ3JhdGlvbnRlc3QucHk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3J1
bl9tZW1vcnlfdGVzdCk6CisgICAgICAgIChNYWluVGVzdC5fdGVzdF9ydW5fd2l0aF9qc29uX291
dHB1dC5tb2NrX3VwbG9hZF9qc29uKToKKyAgICAgICAgKE1haW5UZXN0KToKKyAgICAgICAgKE1h
aW5UZXN0LnRlc3RfcnVuX3dpdGhfanNvbl9vdXRwdXQpOgorICAgICAgICAoTWFpblRlc3QudGVz
dF9ydW5fd2l0aF9kZXNjcmlwdGlvbik6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3J1bl9nZW5l
cmF0ZXNfanNvbl9ieV9kZWZhdWx0KToKKyAgICAgICAgKE1haW5UZXN0LnRlc3RfcnVuX21lcmdl
c19vdXRwdXRfYnlfZGVmYXVsdCk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3J1bl9yZXNwZWN0
c19yZXNldF9yZXN1bHRzKToKKyAgICAgICAgKE1haW5UZXN0LnRlc3RfcnVuX2dlbmVyYXRlc19h
bmRfc2hvd19yZXN1bHRzX3BhZ2UpOgorICAgICAgICAoTWFpblRlc3QudGVzdF9ydW5fd2l0aF9z
bGF2ZV9jb25maWdfanNvbik6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3J1bl93aXRoX211bHRp
cGxlX3JlcG9zaXRvcmllcyk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3J1bl93aXRoX3VwbG9h
ZF9qc29uKToKKyAgICAgICAgKE1haW5UZXN0LnRlc3RfcnVuX3dpdGhfdXBsb2FkX2pzb25fc2hv
dWxkX2dlbmVyYXRlX3BlcmZfd2Via2l0X2pzb24pOgorCiAyMDEzLTAyLTI1ICBBbGFuIEN1dHRl
ciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEdDRSBFV1MgYm90cyBmYWls
aW5nIGludGVybWl0dGVudGx5IG9uIEhUVFAgNTAyIGVycm9yIHdoaWxlIHVwZGF0aW5nIHRoZWly
IHN0YXR1cwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wZXJmb3JtYW5jZV90ZXN0cy9w
ZXJmdGVzdHNydW5uZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
ZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXIucHkJKHJldmlzaW9uIDE0NDAwMikKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3RzcnVubmVy
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsMjUgKzIwNywyNSBAQCBjbGFzcyBQZXJmVGVzdHNS
dW5uZXIob2JqZWN0KToKIAogICAgIGRlZiBfZ2VuZXJhdGVfYW5kX3Nob3dfcmVzdWx0cyhzZWxm
KToKICAgICAgICAgb3B0aW9ucyA9IHNlbGYuX29wdGlvbnMKLSAgICAgICAgb3V0cHV0X2pzb25f
cGF0aCA9IHNlbGYuX291dHB1dF9qc29uX3BhdGgoKQotICAgICAgICBvdXRwdXQsIHBlcmZfd2Vi
a2l0X291dHB1dCA9IHNlbGYuX2dlbmVyYXRlX3Jlc3VsdHNfZGljdChzZWxmLl90aW1lc3RhbXAs
IG9wdGlvbnMuZGVzY3JpcHRpb24sIG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMuYnVpbGRlcl9u
YW1lLCBvcHRpb25zLmJ1aWxkX251bWJlcikKKyAgICAgICAgcGVyZl93ZWJraXRfanNvbl9wYXRo
ID0gc2VsZi5fb3V0cHV0X2pzb25fcGF0aCgpCisgICAgICAgIGxlZ2FjeV9vdXRwdXQsIHBlcmZf
d2Via2l0X291dHB1dCA9IHNlbGYuX2dlbmVyYXRlX3Jlc3VsdHNfZGljdChzZWxmLl90aW1lc3Rh
bXAsIG9wdGlvbnMuZGVzY3JpcHRpb24sIG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnMuYnVpbGRl
cl9uYW1lLCBvcHRpb25zLmJ1aWxkX251bWJlcikKIAogICAgICAgICBpZiBvcHRpb25zLnNsYXZl
X2NvbmZpZ19qc29uX3BhdGg6Ci0gICAgICAgICAgICBvdXRwdXQsIHBlcmZfd2Via2l0X291dHB1
dCA9IHNlbGYuX21lcmdlX3NsYXZlX2NvbmZpZ19qc29uKG9wdGlvbnMuc2xhdmVfY29uZmlnX2pz
b25fcGF0aCwgb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQpCi0gICAgICAgICAgICBpZiBub3Qg
b3V0cHV0OgorICAgICAgICAgICAgbGVnYWN5X291dHB1dCwgcGVyZl93ZWJraXRfb3V0cHV0ID0g
c2VsZi5fbWVyZ2Vfc2xhdmVfY29uZmlnX2pzb24ob3B0aW9ucy5zbGF2ZV9jb25maWdfanNvbl9w
YXRoLCBsZWdhY3lfb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQpCisgICAgICAgICAgICBpZiBu
b3QgbGVnYWN5X291dHB1dDoKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5FWElUX0NPREVf
QkFEX1NPVVJDRV9KU09OCiAKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5fbWVyZ2Vfb3V0cHV0c19p
Zl9uZWVkZWQob3V0cHV0X2pzb25fcGF0aCwgb3V0cHV0KQotICAgICAgICBpZiBub3Qgb3V0cHV0
OgorICAgICAgICBwZXJmX3dlYmtpdF9vdXRwdXQgPSBzZWxmLl9tZXJnZV9vdXRwdXRzX2lmX25l
ZWRlZChwZXJmX3dlYmtpdF9qc29uX3BhdGgsIHBlcmZfd2Via2l0X291dHB1dCkKKyAgICAgICAg
aWYgbm90IHBlcmZfd2Via2l0X291dHB1dDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLkVYSVRf
Q09ERV9CQURfTUVSR0UKLSAgICAgICAgcGVyZl93ZWJraXRfb3V0cHV0ID0gW3BlcmZfd2Via2l0
X291dHB1dF0KKyAgICAgICAgbGVnYWN5X291dHB1dCA9IFtsZWdhY3lfb3V0cHV0XQogCi0gICAg
ICAgIHJlc3VsdHNfcGFnZV9wYXRoID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLnNwbGl0ZXh0KG91
dHB1dF9qc29uX3BhdGgpWzBdICsgJy5odG1sJwotICAgICAgICBwZXJmX3dlYmtpdF9qc29uX3Bh
dGggPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uc3BsaXRleHQob3V0cHV0X2pzb25fcGF0aClbMF0g
KyAnLXBlcmYtd2Via2l0Lmpzb24nIGlmIG9wdGlvbnMudGVzdF9yZXN1bHRzX3NlcnZlciBlbHNl
IE5vbmUKLSAgICAgICAgc2VsZi5fZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKG91dHB1dF9qc29uX3Bh
dGgsIHBlcmZfd2Via2l0X2pzb25fcGF0aCwgcmVzdWx0c19wYWdlX3BhdGgsIG91dHB1dCwgcGVy
Zl93ZWJraXRfb3V0cHV0KQorICAgICAgICByZXN1bHRzX3BhZ2VfcGF0aCA9IHNlbGYuX2hvc3Qu
ZmlsZXN5c3RlbS5zcGxpdGV4dChwZXJmX3dlYmtpdF9qc29uX3BhdGgpWzBdICsgJy5odG1sJwor
ICAgICAgICBsZWdhY3lfb3V0cHV0X2pzb25fcGF0aCA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5z
cGxpdGV4dChwZXJmX3dlYmtpdF9qc29uX3BhdGgpWzBdICsgJy1sZWdhY3kuanNvbicgaWYgb3B0
aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyIGVsc2UgTm9uZQorICAgICAgICBzZWxmLl9nZW5lcmF0
ZV9vdXRwdXRfZmlsZXMobGVnYWN5X291dHB1dF9qc29uX3BhdGgsIHBlcmZfd2Via2l0X2pzb25f
cGF0aCwgcmVzdWx0c19wYWdlX3BhdGgsIGxlZ2FjeV9vdXRwdXQsIHBlcmZfd2Via2l0X291dHB1
dCkKIAogICAgICAgICBpZiBvcHRpb25zLnRlc3RfcmVzdWx0c19zZXJ2ZXI6Ci0gICAgICAgICAg
ICBpZiBub3Qgc2VsZi5fdXBsb2FkX2pzb24ob3B0aW9ucy50ZXN0X3Jlc3VsdHNfc2VydmVyLCBv
dXRwdXRfanNvbl9wYXRoKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl91cGxvYWRfanNvbihv
cHRpb25zLnRlc3RfcmVzdWx0c19zZXJ2ZXIsIGxlZ2FjeV9vdXRwdXRfanNvbl9wYXRoKToKICAg
ICAgICAgICAgICAgICByZXR1cm4gc2VsZi5FWElUX0NPREVfRkFJTEVEX1VQTE9BRElORwogCiAg
ICAgICAgICAgICAjIEZJWE1FOiBSZW1vdmUgdGhpcyBjb2RlIG9uY2Ugd2UndmUgbWFkZSB0cmFu
c2l0aW9uIHRvIHVzZSBwZXJmLndlYmtpdC5vcmcKQEAgLTI1MywxMyArMjUzLDE2IEBAIGNsYXNz
IFBlcmZUZXN0c1J1bm5lcihvYmplY3QpOgogICAgICAgICAgICAgaWYgdmFsdWU6CiAgICAgICAg
ICAgICAgICAgY29udGVudHNba2V5XSA9IHZhbHVlCiAKLSAgICAgICAgY29udGVudHNfZm9yX3Bl
cmZfd2Via2l0ID0gewotICAgICAgICAgICAgJ2J1aWxkZXJOYW1lJzogYnVpbGRlcl9uYW1lLAot
ICAgICAgICAgICAgJ2J1aWxkTnVtYmVyJzogc3RyKGJ1aWxkX251bWJlciksCi0gICAgICAgICAg
ICAnYnVpbGRUaW1lJzogc2VsZi5fZGF0ZXRpbWVfaW5fRVM1X2NvbXBhdGlibGVfaXNvX2Zvcm1h
dChzZWxmLl91dGNfdGltZXN0YW1wKSwKLSAgICAgICAgICAgICdwbGF0Zm9ybSc6IHBsYXRmb3Jt
LAotICAgICAgICAgICAgJ3JldmlzaW9ucyc6IHJldmlzaW9uc19mb3JfcGVyZl93ZWJraXQsCi0g
ICAgICAgICAgICAndGVzdHMnOiB7fX0KKyAgICAgICAgY29udGVudHNfZm9yX3BlcmZfd2Via2l0
ID0geyd0ZXN0cyc6IHt9fQorICAgICAgICBpZiBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgIGNv
bnRlbnRzX2Zvcl9wZXJmX3dlYmtpdFsnZGVzY3JpcHRpb24nXSA9IGRlc2NyaXB0aW9uCisKKyAg
ICAgICAgZm9yIGtleSwgdmFsdWUgaW4geydidWlsZFRpbWUnOiBzZWxmLl9kYXRldGltZV9pbl9F
UzVfY29tcGF0aWJsZV9pc29fZm9ybWF0KHNlbGYuX3V0Y190aW1lc3RhbXApLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtJzogcGxhdGZvcm0sICdyZXZpc2lvbnMnOiByZXZpc2lvbnNfZm9yX3BlcmZf
d2Via2l0LAorICAgICAgICAgICAgJ2J1aWxkZXJOYW1lJzogYnVpbGRlcl9uYW1lLCAnYnVpbGRO
dW1iZXInOiBpbnQoYnVpbGRfbnVtYmVyKSBpZiBidWlsZF9udW1iZXIgZWxzZSBOb25lfS5pdGVt
cygpOgorICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICAgICAgY29udGVudHNfZm9y
X3BlcmZfd2Via2l0W2tleV0gPSB2YWx1ZQorCiAKICAgICAgICAgIyBGSVhNRTogTWFrZSB0aGlz
IGZ1bmN0aW9uIHNob3J0ZXIgb25jZSB3ZSd2ZSB0cmFuc2l0aW9uZWQgdG8gdXNlIHBlcmYud2Vi
a2l0Lm9yZy4KICAgICAgICAgZm9yIG1ldHJpY19mdWxsX25hbWUsIHJlc3VsdCBpbiBzZWxmLl9y
ZXN1bHRzLml0ZXJpdGVtcygpOgpAQCAtMzIyLDEyICszMjUsMTMgQEAgY2xhc3MgUGVyZlRlc3Rz
UnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCJGYWlsZWQgdG8gbWVyZ2Ug
b3V0cHV0IEpTT04gZmlsZSAlczogJXMiICUgKG91dHB1dF9qc29uX3BhdGgsIGVycm9yKSkKICAg
ICAgICAgcmV0dXJuIE5vbmUKIAotICAgIGRlZiBfZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKHNlbGYs
IG91dHB1dF9qc29uX3BhdGgsIHBlcmZfd2Via2l0X2pzb25fcGF0aCwgcmVzdWx0c19wYWdlX3Bh
dGgsIG91dHB1dCwgcGVyZl93ZWJraXRfb3V0cHV0KToKKyAgICBkZWYgX2dlbmVyYXRlX291dHB1
dF9maWxlcyhzZWxmLCBvdXRwdXRfanNvbl9wYXRoLCBwZXJmX3dlYmtpdF9qc29uX3BhdGgsIHJl
c3VsdHNfcGFnZV9wYXRoLCBsZWdhY3lfb3V0cHV0LCBwZXJmX3dlYmtpdF9vdXRwdXQpOgogICAg
ICAgICBmaWxlc3lzdGVtID0gc2VsZi5faG9zdC5maWxlc3lzdGVtCiAKLSAgICAgICAganNvbl9v
dXRwdXQgPSBqc29uLmR1bXBzKG91dHB1dCkKLSAgICAgICAgZmlsZXN5c3RlbS53cml0ZV90ZXh0
X2ZpbGUob3V0cHV0X2pzb25fcGF0aCwganNvbl9vdXRwdXQpCisgICAgICAgIGlmIG91dHB1dF9q
c29uX3BhdGg6CisgICAgICAgICAgICBmaWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShvdXRwdXRf
anNvbl9wYXRoLCBqc29uLmR1bXBzKGxlZ2FjeV9vdXRwdXQpKQogCisgICAgICAgIGpzb25fb3V0
cHV0ID0ganNvbi5kdW1wcyhwZXJmX3dlYmtpdF9vdXRwdXQpCiAgICAgICAgIGlmIHBlcmZfd2Vi
a2l0X2pzb25fcGF0aDoKICAgICAgICAgICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHBl
cmZfd2Via2l0X2pzb25fcGF0aCwganNvbi5kdW1wcyhwZXJmX3dlYmtpdF9vdXRwdXQpKQogCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0c3J1
bm5lcl9pbnRlZ3JhdGlvbnRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wZXJmb3JtYW5jZV90ZXN0cy9wZXJmdGVzdHNydW5uZXJfaW50ZWdyYXRpb250ZXN0LnB5
CShyZXZpc2lvbiAxNDQwMDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNl
X3Rlc3RzL3BlcmZ0ZXN0c3J1bm5lcl9pbnRlZ3JhdGlvbnRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDggKzkyLDggQEAgRmluaXNoZWQ6IDAuMSBzCiAKICIiIgogCi0gICAgcmVzdWx0cyA9
IHsibWF4IjogMTUxMCwgImF2ZyI6IDE0OTAsICJtZWRpYW4iOiAxNDg4LCAibWluIjogMTQ3MSwg
InN0ZGV2IjogMTUuMTM5MzUsICJ1bml0IjogIm1zIiwKLSAgICAgICAidmFsdWVzIjogWzE0ODYs
IDE0NzEsIDE1MTAsIDE1MDUsIDE0NzgsIDE0OTBdfQorICAgIHJlc3VsdHMgPSB7J3VybCc6ICdo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9CaW5k
aW5ncy9ldmVudC10YXJnZXQtd3JhcHBlci5odG1sJywKKyAgICAgICAgJ21ldHJpY3MnOiB7J1Rp
bWUnOiB7J2N1cnJlbnQnOiBbMTQ4Ni4wLCAxNDcxLjAsIDE1MTAuMCwgMTUwNS4wLCAxNDc4LjAs
IDE0OTAuMF19fX0KIAogCiBjbGFzcyBTb21lUGFyc2VyVGVzdERhdGE6CkBAIC0xNTcsMTIgKzE1
Nyw5IEBAIG1lZGlhbj0gNTI5MDAwLjAgYnl0ZXMsIHN0ZGV2PSAxNDEyNC40NDYKIEZpbmlzaGVk
OiAwLjEgcwogIiIiCiAKLSAgICByZXN1bHRzID0geyd2YWx1ZXMnOiBbMTA4MCwgMTEyMCwgMTA5
NSwgMTEwMSwgMTEwNF0sICdhdmcnOiAxMTAwLCAnbWluJzogMTA4MCwgJ21heCc6IDExMjAsCi0g
ICAgICAgICdzdGRldic6IDE0LjUwODYxLCAnbWVkaWFuJzogMTEwMSwgJ3VuaXQnOiAnbXMnfQot
ICAgIGpzX2hlYXBfcmVzdWx0cyA9IHsndmFsdWVzJzogWzgyNTAwMCwgODExMDAwLCA4NDgwMDAs
IDgzNzAwMCwgODI5MDAwXSwgJ2F2Zyc6IDgzMDAwMCwgJ21pbic6IDgxMTAwMCwgJ21heCc6IDg0
ODAwMCwKLSAgICAgICAgJ3N0ZGV2JzogMTM3ODQuMDQ4NzUsICdtZWRpYW4nOiA4MjkwMDAsICd1
bml0JzogJ2J5dGVzJ30KLSAgICBtYWxsb2NfcmVzdWx0cyA9IHsndmFsdWVzJzogWzUyOTAwMCwg
NTExMDAwLCA1NDgwMDAsIDUzNjAwMCwgNTIxMDAwXSwgJ2F2Zyc6IDUyOTAwMCwgJ21pbic6IDUx
MTAwMCwgJ21heCc6IDU0ODAwMCwKLSAgICAgICAgJ3N0ZGV2JzogMTQxMjQuNDQ2ODksICdtZWRp
YW4nOiA1MjkwMDAsICd1bml0JzogJ2J5dGVzJ30KKyAgICByZXN1bHRzID0geydjdXJyZW50Jzog
WzEwODAsIDExMjAsIDEwOTUsIDExMDEsIDExMDRdfQorICAgIGpzX2hlYXBfcmVzdWx0cyA9IHsn
Y3VycmVudCc6IFs4MjUwMDAsIDgxMTAwMCwgODQ4MDAwLCA4MzcwMDAsIDgyOTAwMF19CisgICAg
bWFsbG9jX3Jlc3VsdHMgPSB7J2N1cnJlbnQnOiBbNTI5MDAwLCA1MTEwMDAsIDU0ODAwMCwgNTM2
MDAwLCA1MjEwMDBdfQogCiAKIGNsYXNzIFRlc3REcml2ZXI6CkBAIC0zMDIsMTkgKzI5OSwxMCBA
QCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBzdGRvdXQs
IHN0ZGVyciwgbG9nID0gb3V0cHV0LnJlc3RvcmVfb3V0cHV0KCkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCh1bmV4cGVjdGVkX3Jlc3VsdF9jb3VudCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLl9ub3JtYWxpemVfb3V0cHV0KGxvZyksIE1lbW9yeVRlc3REYXRhLm91dHB1dCAr
ICdcbk1PQ0s6IHVzZXIub3Blbl91cmw6IGZpbGU6Ly8uLi5cbicpCi0gICAgICAgIHJlc3VsdHMg
PSBzZWxmLl9sb2FkX291dHB1dF9qc29uKHJ1bm5lcilbMF1bJ3Jlc3VsdHMnXQotICAgICAgICB2
YWx1ZXMgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAx
NSwgMTYsIDE3LCAxOCwgMTldCi0KLSAgICAgICAgIyBTdGRldiBmb3IgdGVzdCBkb2Vzbid0IG1h
dGNoIG9uIHNvbWUgYm90cwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyZXN1bHRz
WydQYXJzZXIvbWVtb3J5LXRlc3QnXS5rZXlzKCkpLCBzb3J0ZWQoTWVtb3J5VGVzdERhdGEucmVz
dWx0cy5rZXlzKCkpKQotICAgICAgICBmb3Iga2V5IGluIE1lbW9yeVRlc3REYXRhLnJlc3VsdHM6
Ci0gICAgICAgICAgICBpZiBrZXkgPT0gJ3N0ZGV2JzoKLSAgICAgICAgICAgICAgICBzZWxmLmFz
c2VydEFsbW9zdEVxdWFsKHJlc3VsdHNbJ1BhcnNlci9tZW1vcnktdGVzdCddW2tleV0sIE1lbW9y
eVRlc3REYXRhLnJlc3VsdHNba2V5XSwgcGxhY2VzPTQpCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0c1snUGFyc2VyL21lbW9yeS10ZXN0
J11ba2V5XSwgTWVtb3J5VGVzdERhdGEucmVzdWx0c1trZXldKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHJlc3VsdHNbJ1BhcnNlci9tZW1vcnktdGVzdCddLCBNZW1vcnlUZXN0RGF0YS5yZXN1
bHRzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHNbJ1BhcnNlci9tZW1vcnktdGVz
dDpKU0hlYXAnXSwgTWVtb3J5VGVzdERhdGEuanNfaGVhcF9yZXN1bHRzKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHJlc3VsdHNbJ1BhcnNlci9tZW1vcnktdGVzdDpNYWxsb2MnXSwgTWVtb3J5
VGVzdERhdGEubWFsbG9jX3Jlc3VsdHMpCisgICAgICAgIHBhcnNlcl90ZXN0cyA9IHNlbGYuX2xv
YWRfb3V0cHV0X2pzb24ocnVubmVyKVswXVsndGVzdHMnXVsnUGFyc2VyJ11bJ3Rlc3RzJ10KKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXJfdGVzdHNbJ21lbW9yeS10ZXN0J11bJ21ldHJp
Y3MnXVsnVGltZSddLCBNZW1vcnlUZXN0RGF0YS5yZXN1bHRzKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHBhcnNlcl90ZXN0c1snbWVtb3J5LXRlc3QnXVsnbWV0cmljcyddWydKU0hlYXAnXSwg
TWVtb3J5VGVzdERhdGEuanNfaGVhcF9yZXN1bHRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHBhcnNlcl90ZXN0c1snbWVtb3J5LXRlc3QnXVsnbWV0cmljcyddWydNYWxsb2MnXSwgTWVtb3J5
VGVzdERhdGEubWFsbG9jX3Jlc3VsdHMpCiAKICAgICBkZWYgX3Rlc3RfcnVuX3dpdGhfanNvbl9v
dXRwdXQoc2VsZiwgcnVubmVyLCBmaWxlc3lzdGVtLCB1cGxvYWRfc3VjZWVkcz1GYWxzZSwgcmVz
dWx0c19zaG93bj1UcnVlLCBleHBlY3RlZF9leGl0X2NvZGU9MCk6CiAgICAgICAgIGZpbGVzeXN0
ZW0ud3JpdGVfdGV4dF9maWxlKHJ1bm5lci5fYmFzZV9wYXRoICsgJy9pbnNwZWN0b3IvcGFzcy5o
dG1sJywgJ3NvbWUgY29udGVudCcpCkBAIC0zMjUsNyArMzEzLDcgQEAgY2xhc3MgTWFpblRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBkZWYgbW9ja191cGxvYWRfanNvbihob3N0bmFt
ZSwganNvbl9wYXRoLCBob3N0X3BhdGg9Tm9uZSk6CiAgICAgICAgICAgICAjIEZJWE1FOiBHZXQg
cmlkIG9mIHRoZSBoYXJkLWNvZGVkIHBlcmYud2Via2l0Lm9yZyBvbmNlIHdlJ3ZlIGNvbXBsZXRl
ZCB0aGUgdHJhbnNpdGlvbi4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaG9zdG5hbWUsIFsn
c29tZS5ob3N0JywgJ3BlcmYud2Via2l0Lm9yZyddKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJ
bihqc29uX3BhdGgsIFsnL21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nLCAnL21vY2stY2hlY2tv
dXQvb3V0cHV0LXBlcmYtd2Via2l0Lmpzb24nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4o
anNvbl9wYXRoLCBbJy9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29uJywgJy9tb2NrLWNoZWNrb3V0
L291dHB1dC1sZWdhY3kuanNvbiddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihob3N0X3Bh
dGgsIFtOb25lLCAnL2FwaS9yZXBvcnQnXSkKICAgICAgICAgICAgIHVwbG9hZGVkWzBdID0gdXBs
b2FkX3N1Y2VlZHMKICAgICAgICAgICAgIHJldHVybiB1cGxvYWRfc3VjZWVkcwpAQCAtMzUxLDE2
ICszMzksMTcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBy
ZXR1cm4gbG9ncwogCiAgICAgX2V2ZW50X3RhcmdldF93cmFwcGVyX2FuZF9pbnNwZWN0b3JfcmVz
dWx0cyA9IHsKLSAgICAgICAgIkJpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVyIjogRXZlbnRU
YXJnZXRXcmFwcGVyVGVzdERhdGEucmVzdWx0cywKLSAgICAgICAgImluc3BlY3Rvci9wYXNzLmh0
bWw6Z3JvdXBfbmFtZTp0ZXN0X25hbWUiOiA0Mn0KKyAgICAgICAgIkJpbmRpbmdzIjoKKyAgICAg
ICAgICAgIHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJm
b3JtYW5jZVRlc3RzL0JpbmRpbmdzIiwKKyAgICAgICAgICAgICJ0ZXN0cyI6IHsiZXZlbnQtdGFy
Z2V0LXdyYXBwZXIiOiBFdmVudFRhcmdldFdyYXBwZXJUZXN0RGF0YS5yZXN1bHRzfX19CiAKICAg
ICBkZWYgdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dChzZWxmKToKICAgICAgICAgcnVubmVyLCBw
b3J0ID0gc2VsZi5jcmVhdGVfcnVubmVyX2FuZF9zZXR1cF9yZXN1bHRzX3RlbXBsYXRlKGFyZ3M9
WyctLW91dHB1dC1qc29uLXBhdGg9L21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nLAogICAgICAg
ICAgICAgJy0tdGVzdC1yZXN1bHRzLXNlcnZlcj1zb21lLmhvc3QnXSkKICAgICAgICAgc2VsZi5f
dGVzdF9ydW5fd2l0aF9qc29uX291dHB1dChydW5uZXIsIHBvcnQuaG9zdC5maWxlc3lzdGVtLCB1
cGxvYWRfc3VjZWVkcz1UcnVlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvYWRf
b3V0cHV0X2pzb24ocnVubmVyKSwgW3sKLSAgICAgICAgICAgICJ0aW1lc3RhbXAiOiAxMjM0NTY3
ODksICJyZXN1bHRzIjogc2VsZi5fZXZlbnRfdGFyZ2V0X3dyYXBwZXJfYW5kX2luc3BlY3Rvcl9y
ZXN1bHRzLAotICAgICAgICAgICAgIndlYmtpdC1yZXZpc2lvbiI6ICI1Njc4IiwgImJyYW5jaCI6
ICJ3ZWJraXQtdHJ1bmsifV0pCisgICAgICAgICAgICAiYnVpbGRUaW1lIjogIjIwMTMtMDItMDhU
MTU6MTk6MzcuNDYwMDAwIiwgInRlc3RzIjogc2VsZi5fZXZlbnRfdGFyZ2V0X3dyYXBwZXJfYW5k
X2luc3BlY3Rvcl9yZXN1bHRzLAorICAgICAgICAgICAgInJldmlzaW9ucyI6IHsiV2ViS2l0Ijog
eyJ0aW1lc3RhbXAiOiAiMjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCIsICJyZXZpc2lvbiI6ICI1
Njc4In19fV0pCiAKICAgICAgICAgZmlsZXN5c3RlbSA9IHBvcnQuaG9zdC5maWxlc3lzdGVtCiAg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlc3lzdGVtLmlzZmlsZShydW5uZXIuX291dHB1dF9q
c29uX3BhdGgoKSkpCkBAIC0zNzEsOSArMzYwLDkgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICAgICAgJy0tdGVzdC1yZXN1bHRzLXNlcnZlcj1zb21lLmhvc3Qn
LCAnLS1kZXNjcmlwdGlvbicsICdzb21lIGRlc2NyaXB0aW9uJ10pCiAgICAgICAgIHNlbGYuX3Rl
c3RfcnVuX3dpdGhfanNvbl9vdXRwdXQocnVubmVyLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgdXBs
b2FkX3N1Y2VlZHM9VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2FkX291
dHB1dF9qc29uKHJ1bm5lciksIFt7Ci0gICAgICAgICAgICAidGltZXN0YW1wIjogMTIzNDU2Nzg5
LCAiZGVzY3JpcHRpb24iOiAic29tZSBkZXNjcmlwdGlvbiIsCi0gICAgICAgICAgICAicmVzdWx0
cyI6IHNlbGYuX2V2ZW50X3RhcmdldF93cmFwcGVyX2FuZF9pbnNwZWN0b3JfcmVzdWx0cywKLSAg
ICAgICAgICAgICJ3ZWJraXQtcmV2aXNpb24iOiAiNTY3OCIsICJicmFuY2giOiAid2Via2l0LXRy
dW5rIn1dKQorICAgICAgICAgICAgImJ1aWxkVGltZSI6ICIyMDEzLTAyLTA4VDE1OjE5OjM3LjQ2
MDAwMCIsICJkZXNjcmlwdGlvbiI6ICJzb21lIGRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICJ0
ZXN0cyI6IHNlbGYuX2V2ZW50X3RhcmdldF93cmFwcGVyX2FuZF9pbnNwZWN0b3JfcmVzdWx0cywK
KyAgICAgICAgICAgICJyZXZpc2lvbnMiOiB7IldlYktpdCI6IHsidGltZXN0YW1wIjogIjIwMTMt
MDItMDEgMDg6NDg6MDUgKzAwMDAiLCAicmV2aXNpb24iOiAiNTY3OCJ9fX1dKQogCiAgICAgZGVm
IGNyZWF0ZV9ydW5uZXJfYW5kX3NldHVwX3Jlc3VsdHNfdGVtcGxhdGUoc2VsZiwgYXJncz1bXSk6
CiAgICAgICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYuY3JlYXRlX3J1bm5lcihhcmdzKQpAQCAtNDAy
LDggKzM5MSw4IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAg
c2VsZi5fdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dChydW5uZXIsIHBvcnQuaG9zdC5maWxlc3lz
dGVtKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9hZF9vdXRwdXRfanNvbihy
dW5uZXIpLCBbewotICAgICAgICAgICAgInRpbWVzdGFtcCI6IDEyMzQ1Njc4OSwgInJlc3VsdHMi
OiBzZWxmLl9ldmVudF90YXJnZXRfd3JhcHBlcl9hbmRfaW5zcGVjdG9yX3Jlc3VsdHMsCi0gICAg
ICAgICAgICAid2Via2l0LXJldmlzaW9uIjogIjU2NzgiLCAiYnJhbmNoIjogIndlYmtpdC10cnVu
ayJ9XSkKKyAgICAgICAgICAgICJidWlsZFRpbWUiOiAiMjAxMy0wMi0wOFQxNToxOTozNy40NjAw
MDAiLCAidGVzdHMiOiBzZWxmLl9ldmVudF90YXJnZXRfd3JhcHBlcl9hbmRfaW5zcGVjdG9yX3Jl
c3VsdHMsCisgICAgICAgICAgICAicmV2aXNpb25zIjogeyJXZWJLaXQiOiB7InRpbWVzdGFtcCI6
ICIyMDEzLTAyLTAxIDA4OjQ4OjA1ICswMDAwIiwgInJldmlzaW9uIjogIjU2NzgifX19XSkKIAog
ICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZXN5c3RlbS5pc2ZpbGUob3V0cHV0X2pzb25fcGF0
aCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlc3lzdGVtLmlzZmlsZShyZXN1bHRzX3Bh
Z2VfcGF0aCkpCkBAIC00MTgsOCArNDA3LDggQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICBzZWxmLl90ZXN0X3J1bl93aXRoX2pzb25fb3V0cHV0KHJ1bm5lciwg
cG9ydC5ob3N0LmZpbGVzeXN0ZW0pCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9s
b2FkX291dHB1dF9qc29uKHJ1bm5lciksIFt7InByZXZpb3VzIjogInJlc3VsdHMifSwgewotICAg
ICAgICAgICAgInRpbWVzdGFtcCI6IDEyMzQ1Njc4OSwgInJlc3VsdHMiOiBzZWxmLl9ldmVudF90
YXJnZXRfd3JhcHBlcl9hbmRfaW5zcGVjdG9yX3Jlc3VsdHMsCi0gICAgICAgICAgICAid2Via2l0
LXJldmlzaW9uIjogIjU2NzgiLCAiYnJhbmNoIjogIndlYmtpdC10cnVuayJ9XSkKKyAgICAgICAg
ICAgICJidWlsZFRpbWUiOiAiMjAxMy0wMi0wOFQxNToxOTozNy40NjAwMDAiLCAidGVzdHMiOiBz
ZWxmLl9ldmVudF90YXJnZXRfd3JhcHBlcl9hbmRfaW5zcGVjdG9yX3Jlc3VsdHMsCisgICAgICAg
ICAgICAicmV2aXNpb25zIjogeyJXZWJLaXQiOiB7InRpbWVzdGFtcCI6ICIyMDEzLTAyLTAxIDA4
OjQ4OjA1ICswMDAwIiwgInJldmlzaW9uIjogIjU2NzgifX19XSkKICAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKGZpbGVzeXN0ZW0uaXNmaWxlKGZpbGVzeXN0ZW0uc3BsaXRleHQob3V0cHV0X2pzb25f
cGF0aClbMF0gKyAnLmh0bWwnKSkKIAogICAgIGRlZiB0ZXN0X3J1bl9yZXNwZWN0c19yZXNldF9y
ZXN1bHRzKHNlbGYpOgpAQCAtNDMyLDggKzQyMSw4IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5fdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dChydW5u
ZXIsIHBvcnQuaG9zdC5maWxlc3lzdGVtKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5fbG9hZF9vdXRwdXRfanNvbihydW5uZXIpLCBbewotICAgICAgICAgICAgInRpbWVzdGFtcCI6
IDEyMzQ1Njc4OSwgInJlc3VsdHMiOiBzZWxmLl9ldmVudF90YXJnZXRfd3JhcHBlcl9hbmRfaW5z
cGVjdG9yX3Jlc3VsdHMsCi0gICAgICAgICAgICAid2Via2l0LXJldmlzaW9uIjogIjU2NzgiLCAi
YnJhbmNoIjogIndlYmtpdC10cnVuayJ9XSkKKyAgICAgICAgICAgICJidWlsZFRpbWUiOiAiMjAx
My0wMi0wOFQxNToxOTozNy40NjAwMDAiLCAidGVzdHMiOiBzZWxmLl9ldmVudF90YXJnZXRfd3Jh
cHBlcl9hbmRfaW5zcGVjdG9yX3Jlc3VsdHMsCisgICAgICAgICAgICAicmV2aXNpb25zIjogeyJX
ZWJLaXQiOiB7InRpbWVzdGFtcCI6ICIyMDEzLTAyLTAxIDA4OjQ4OjA1ICswMDAwIiwgInJldmlz
aW9uIjogIjU2NzgifX19XSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVzeXN0ZW0uaXNm
aWxlKGZpbGVzeXN0ZW0uc3BsaXRleHQob3V0cHV0X2pzb25fcGF0aClbMF0gKyAnLmh0bWwnKSkK
ICAgICAgICAgcGFzcwogCkBAIC00NDQsOCArNDMzLDggQEAgY2xhc3MgTWFpblRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICBmaWxlc3lzdGVtID0gcG9ydC5ob3N0LmZpbGVzeXN0ZW0K
ICAgICAgICAgc2VsZi5fdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dChydW5uZXIsIGZpbGVzeXN0
ZW0sIHJlc3VsdHNfc2hvd249RmFsc2UpCiAKLSAgICAgICAgZXhwZWN0ZWRfZW50cnkgPSB7InRp
bWVzdGFtcCI6IDEyMzQ1Njc4OSwgInJlc3VsdHMiOiBzZWxmLl9ldmVudF90YXJnZXRfd3JhcHBl
cl9hbmRfaW5zcGVjdG9yX3Jlc3VsdHMsCi0gICAgICAgICAgICAid2Via2l0LXJldmlzaW9uIjog
IjU2NzgiLCAiYnJhbmNoIjogIndlYmtpdC10cnVuayJ9CisgICAgICAgIGV4cGVjdGVkX2VudHJ5
ID0geyJidWlsZFRpbWUiOiAiMjAxMy0wMi0wOFQxNToxOTozNy40NjAwMDAiLCAidGVzdHMiOiBz
ZWxmLl9ldmVudF90YXJnZXRfd3JhcHBlcl9hbmRfaW5zcGVjdG9yX3Jlc3VsdHMsCisgICAgICAg
ICAgICAicmV2aXNpb25zIjogeyJXZWJLaXQiOiB7InRpbWVzdGFtcCI6ICIyMDEzLTAyLTAxIDA4
OjQ4OjA1ICswMDAwIiwgInJldmlzaW9uIjogIjU2NzgifX19CiAKICAgICAgICAgc2VsZi5tYXhE
aWZmID0gTm9uZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bm5lci5fb3V0cHV0X2pzb25f
cGF0aCgpLCAnL21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nKQpAQCAtNDkxLDggKzQ4MCw4IEBA
IGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcG9ydC5ob3N0LmZp
bGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKCcvbW9jay1jaGVja291dC9zbGF2ZS1jb25maWcuanNv
bicsICd7ImtleSI6ICJ2YWx1ZSJ9JykKICAgICAgICAgc2VsZi5fdGVzdF9ydW5fd2l0aF9qc29u
X291dHB1dChydW5uZXIsIHBvcnQuaG9zdC5maWxlc3lzdGVtLCB1cGxvYWRfc3VjZWVkcz1UcnVl
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvYWRfb3V0cHV0X2pzb24ocnVubmVy
KSwgW3sKLSAgICAgICAgICAgICJ0aW1lc3RhbXAiOiAxMjM0NTY3ODksICJyZXN1bHRzIjogc2Vs
Zi5fZXZlbnRfdGFyZ2V0X3dyYXBwZXJfYW5kX2luc3BlY3Rvcl9yZXN1bHRzLAotICAgICAgICAg
ICAgIndlYmtpdC1yZXZpc2lvbiI6ICI1Njc4IiwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAi
a2V5IjogInZhbHVlIn1dKQorICAgICAgICAgICAgImJ1aWxkVGltZSI6ICIyMDEzLTAyLTA4VDE1
OjE5OjM3LjQ2MDAwMCIsICJ0ZXN0cyI6IHNlbGYuX2V2ZW50X3RhcmdldF93cmFwcGVyX2FuZF9p
bnNwZWN0b3JfcmVzdWx0cywKKyAgICAgICAgICAgICJyZXZpc2lvbnMiOiB7IldlYktpdCI6IHsi
dGltZXN0YW1wIjogIjIwMTMtMDItMDEgMDg6NDg6MDUgKzAwMDAiLCAicmV2aXNpb24iOiAiNTY3
OCJ9fSwgImJ1aWxkZXJLZXkiOiAidmFsdWUifV0pCiAKICAgICBkZWYgdGVzdF9ydW5fd2l0aF9i
YWRfc2xhdmVfY29uZmlnX2pzb24oc2VsZik6CiAgICAgICAgIHJ1bm5lciwgcG9ydCA9IHNlbGYu
Y3JlYXRlX3J1bm5lcl9hbmRfc2V0dXBfcmVzdWx0c190ZW1wbGF0ZShhcmdzPVsnLS1vdXRwdXQt
anNvbi1wYXRoPS9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29uJywKQEAgLTUxMCw4ICs0OTksOSBA
QCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBvcnQucmVwb3Np
dG9yeV9wYXRocyA9IGxhbWJkYTogWygnd2Via2l0JywgJy9tb2NrLWNoZWNrb3V0JyksICgnc29t
ZScsICcvbW9jay1jaGVja291dC9zb21lJyldCiAgICAgICAgIHNlbGYuX3Rlc3RfcnVuX3dpdGhf
anNvbl9vdXRwdXQocnVubmVyLCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgdXBsb2FkX3N1Y2VlZHM9
VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2FkX291dHB1dF9qc29uKHJ1
bm5lciksIFt7Ci0gICAgICAgICAgICAidGltZXN0YW1wIjogMTIzNDU2Nzg5LCAicmVzdWx0cyI6
IHNlbGYuX2V2ZW50X3RhcmdldF93cmFwcGVyX2FuZF9pbnNwZWN0b3JfcmVzdWx0cywKLSAgICAg
ICAgICAgICJ3ZWJraXQtcmV2aXNpb24iOiAiNTY3OCIsICJzb21lLXJldmlzaW9uIjogIjU2Nzgi
LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayJ9XSkKKyAgICAgICAgICAgICJidWlsZFRpbWUiOiAi
MjAxMy0wMi0wOFQxNToxOTozNy40NjAwMDAiLCAidGVzdHMiOiBzZWxmLl9ldmVudF90YXJnZXRf
d3JhcHBlcl9hbmRfaW5zcGVjdG9yX3Jlc3VsdHMsCisgICAgICAgICAgICAicmV2aXNpb25zIjog
eyJ3ZWJraXQiOiB7InRpbWVzdGFtcCI6ICIyMDEzLTAyLTAxIDA4OjQ4OjA1ICswMDAwIiwgInJl
dmlzaW9uIjogIjU2NzgifSwKKyAgICAgICAgICAgICJzb21lIjogeyJ0aW1lc3RhbXAiOiAiMjAx
My0wMi0wMSAwODo0ODowNSArMDAwMCIsICJyZXZpc2lvbiI6ICI1Njc4In19fV0pCiAKICAgICBk
ZWYgdGVzdF9ydW5fd2l0aF91cGxvYWRfanNvbihzZWxmKToKICAgICAgICAgcnVubmVyLCBwb3J0
ID0gc2VsZi5jcmVhdGVfcnVubmVyX2FuZF9zZXR1cF9yZXN1bHRzX3RlbXBsYXRlKGFyZ3M9Wyct
LW91dHB1dC1qc29uLXBhdGg9L21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nLApAQCAtNTIwLDgg
KzUxMCw4IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2Vs
Zi5fdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dChydW5uZXIsIHBvcnQuaG9zdC5maWxlc3lzdGVt
LCB1cGxvYWRfc3VjZWVkcz1UcnVlKQogICAgICAgICBnZW5lcmF0ZWRfanNvbiA9IGpzb24ubG9h
ZHMocG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0L291dHB1dC5qc29u
J10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2pzb25bMF1bJ3BsYXRmb3Jt
J10sICdwbGF0Zm9ybTEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9qc29u
WzBdWydidWlsZGVyLW5hbWUnXSwgJ2J1aWxkZXIxJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChnZW5lcmF0ZWRfanNvblswXVsnYnVpbGQtbnVtYmVyJ10sIDEyMykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChnZW5lcmF0ZWRfanNvblswXVsnYnVpbGRlck5hbWUnXSwgJ2J1aWxkZXIxJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfanNvblswXVsnYnVpbGROdW1iZXIn
XSwgMTIzKQogCiAgICAgICAgIHNlbGYuX3Rlc3RfcnVuX3dpdGhfanNvbl9vdXRwdXQocnVubmVy
LCBwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgdXBsb2FkX3N1Y2VlZHM9RmFsc2UsIGV4cGVjdGVkX2V4
aXRfY29kZT1QZXJmVGVzdHNSdW5uZXIuRVhJVF9DT0RFX0ZBSUxFRF9VUExPQURJTkcpCiAKQEAg
LTUzMiwxNCArNTIyLDE0IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgcG9ydC5ob3N0LmZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKCcvbW9jay1jaGVja291
dC9zbGF2ZS1jb25maWcuanNvbicsICd7ImtleSI6ICJ2YWx1ZTEifScpCiAKICAgICAgICAgc2Vs
Zi5fdGVzdF9ydW5fd2l0aF9qc29uX291dHB1dChydW5uZXIsIHBvcnQuaG9zdC5maWxlc3lzdGVt
LCB1cGxvYWRfc3VjZWVkcz1UcnVlKQotICAgICAgICBnZW5lcmF0ZWRfanNvbiA9IGpzb24ubG9h
ZHMocG9ydC5ob3N0LmZpbGVzeXN0ZW0uZmlsZXNbJy9tb2NrLWNoZWNrb3V0L291dHB1dC1wZXJm
LXdlYmtpdC5qc29uJ10pCisgICAgICAgIGdlbmVyYXRlZF9qc29uID0ganNvbi5sb2Fkcyhwb3J0
Lmhvc3QuZmlsZXN5c3RlbS5maWxlc1snL21vY2stY2hlY2tvdXQvb3V0cHV0Lmpzb24nXSkKICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZ2VuZXJhdGVkX2pzb24sIGxpc3QpKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnZW5lcmF0ZWRfanNvbiksIDEpCiAKICAgICAg
ICAgb3V0cHV0ID0gZ2VuZXJhdGVkX2pzb25bMF0KICAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9u
ZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsncGxhdGZvcm0nXSwgJ3BsYXRmb3Jt
MScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0WydidWlsZE51bWJlciddLCAnMTIz
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ2J1aWxkTnVtYmVyJ10sIDEyMykK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRbJ2J1aWxkVGltZSddLCAnMjAxMy0wMi0w
OFQxNToxOTozNy40NjAwMDAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dFsnYnVp
bGRlck5hbWUnXSwgJ2J1aWxkZXIxJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRb
J2J1aWxkZXJLZXknXSwgJ3ZhbHVlMScpCg==
</data>
<flag name="review"
          id="211076"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>