<?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>136386</bug_id>
          
          <creation_ts>2014-08-29 13:37:42 -0700</creation_ts>
          <short_desc>Update webkit dashboard to support performance bots</short_desc>
          <delta_ts>2014-09-03 10:58:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Burkart">dburkart</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>dbates</cc>
    
    <cc>dburkart</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>rniwa</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1032237</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Burkart">dburkart</who>
    <bug_when>2014-08-29 13:37:42 -0700</bug_when>
    <thetext>It would be nice to show perf bots on the WebKit dashboard alongside builders and testers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032238</commentid>
    <comment_count>1</comment_count>
    <who name="Dana Burkart">dburkart</who>
    <bug_when>2014-08-29 13:38:39 -0700</bug_when>
    <thetext>I&apos;ll be working on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032273</commentid>
    <comment_count>2</comment_count>
      <attachid>237383</attachid>
    <who name="Dana Burkart">dburkart</who>
    <bug_when>2014-08-29 15:50:09 -0700</bug_when>
    <thetext>Created attachment 237383
Implementation to display performance bots on the dashboard</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032283</commentid>
    <comment_count>3</comment_count>
      <attachid>237383</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-08-29 16:19:22 -0700</bug_when>
    <thetext>Comment on attachment 237383
Implementation to display performance bots on the dashboard

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

Overall this looks fine, although it looks like adding the concept of perf bots doesn&apos;t quite fit into the assumptions about debug and release builds (based on some of the if statements added).  I don&apos;t think that should stop us from landing this change, though.

r=me, but I&apos;d prefer it if someone more familiar with the code looked at it, too.  (I CCed some folks.)

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:54
&gt; +        &quot;EFL Linux 64-bit Release WK2&quot;: {platform: Dashboard.Platform.LinuxEFL, tester: true, testCategory: Buildbot.TestCategory.WebKit2},
&gt; +        &quot;EFL Linux 64-bit Release WK2 (Perf)&quot;: {platform: Dashboard.Platform.LinuxEFL, tester: true, testCategory: Buildbot.TestCategory.Performance}

These seem unrelated to the patch (although I suppose it&apos;s okay to add them now while you&apos;re in the neighborhood).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032293</commentid>
    <comment_count>4</comment_count>
      <attachid>237383</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-08-29 16:55:48 -0700</bug_when>
    <thetext>Comment on attachment 237383
Implementation to display performance bots on the dashboard

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

Dana and myself checked whether this new column fits on a 13&quot; screen, and it doesn&apos;t quite. Fortunately, the layout can be squeezed very very slightly to make it fit, but we can&apos;t have any more columns (which is a bummer, as there are also leaks bots and other misc ones).

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:62
&gt; +    Performance: &quot;perf&quot;

We avoid abbreviations in WebKit code base. Please change all &quot;perf&quot;s into complete words.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:128
&gt; +                if (queue.perfType) {
&gt; +                    label = queue.perfType;
&gt; +                }

There are no braces around single line blocks in WebKit coding style.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:146
&gt; +        if (this.perfQueues) {
&gt; +            appendBuild.call(this, this.perfQueues);
&gt; +        }

Ditto. Also, this check is always true anyway, as [] converts to true.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:56
&gt;          var buildType = queue.debug ? &quot;debug&quot; : &quot;release&quot;;
&gt; +        buildType = queue.perfType ? &quot;perfType&quot; : buildType;

I&apos;d probably use a nested conditional here - it&apos;s unnecessarily confusing to initialize a variable and immediately override it. Not a big deal though.

&gt;&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:54
&gt;&gt; +        &quot;EFL Linux 64-bit Release WK2 (Perf)&quot;: {platform: Dashboard.Platform.LinuxEFL, tester: true, testCategory: Buildbot.TestCategory.Performance}
&gt; 
&gt; These seem unrelated to the patch (although I suppose it&apos;s okay to add them now while you&apos;re in the neighborhood).

OK to land, but I&apos;d still suggest splitting this into a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032295</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-08-29 17:10:46 -0700</bug_when>
    <thetext>Actually, I have some more substantive comments.

1. The result bubbles are yellow, because neither BuildbotIteration nor BuildbotTesterQueueView know perfbot&apos;s productive step name, so they fall into &quot;something was wrong, but it was not a failure&quot; mode.

2. In addition to buildbot page, there should be a link to actual results on perf dashboard. Dana and myself looked into where to put them, and it seems like a popover would be best.

As we are talking about a popover, it might be best to have a custom performance queue view, and not just reuse BuildbotTesterQueueView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032783</commentid>
    <comment_count>6</comment_count>
      <attachid>237528</attachid>
    <who name="Dana Burkart">dburkart</who>
    <bug_when>2014-09-02 16:29:32 -0700</bug_when>
    <thetext>Created attachment 237528
Implementation to display performance bots on the dashboard</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032784</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Burkart">dburkart</who>
    <bug_when>2014-09-02 16:33:43 -0700</bug_when>
    <thetext>Uploaded a patch to take care of Alexey&apos;s concerns.  When Ryosuke gets back, we should discuss the possibility of adding more information to the popover, as it only displays a link to perf.webkit.org for the time being.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032789</commentid>
    <comment_count>8</comment_count>
      <attachid>237532</attachid>
    <who name="Dana Burkart">dburkart</who>
    <bug_when>2014-09-02 16:36:49 -0700</bug_when>
    <thetext>Created attachment 237532
*Actual* implementation

*Really* updated the patch this time. I am not good at bugzilla.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032790</commentid>
    <comment_count>9</comment_count>
      <attachid>237533</attachid>
    <who name="Dana Burkart">dburkart</who>
    <bug_when>2014-09-02 16:47:47 -0700</bug_when>
    <thetext>Created attachment 237533
Update ChangeLog to account for new BuildbotPerformanceQueueView class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032796</commentid>
    <comment_count>10</comment_count>
      <attachid>237532</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-09-02 17:06:02 -0700</bug_when>
    <thetext>Comment on attachment 237532
*Actual* implementation

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

&gt; Tools/ChangeLog:15
&gt; +        Support new &apos;performance&apos; and &apos;perfType&apos; keys.

Looks like the ChangeLog is stale.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:238
&gt; +        function collectPerfTestResults(data, stepName) {

s/Perf/Performance/g

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:253
&gt; +            if (!testStep.results || !testStep.results[0]) {

Should this be

if (!testStep.results || testStep.results[0] === BuildbotIteration.SUCCESS)

?

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:263
&gt; +            if (!testResults.failureCount) {
&gt; +                testResults.errorOccurred = true;
&gt; +            }

We don&apos;t use braces around single line blocks.

This code looks super confusing at first (why? no failures means that an error occurred?). Can you explain this situation in a comment? If you do, it won&apos;t be single line any more, so you should keep the braces :)

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:318
&gt; +        var webkitPerformanceTestResults = collectTestResults.call(this, data, &quot;perf-test&quot;);

collectPerfTestResults or collectTestResults? If it&apos;s the latter, it needs a comment explaining why, or someone will &quot;fix&quot; it for consistency.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:28
&gt; +    BuildbotQueueView.call(this, [], queues);

We should probable relieve BuildbotQueueView of knowing the distinction between debug and release queues (not in this patch).

All subclasses add their own logic on top of it, sometimes fighting with BuildbotQueueView for control.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:44
&gt; +        function appendPerfQueueStatus(queue)

s/Perf/Performance/g

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:91
&gt; +                releaseLabel.textContent = queue.perfType ? queue.perfType : label;

label should probably be named &quot;defaultLabel&quot; or something. Not seeing how perfType is used, I&apos;m not sure about the intended design.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:119
&gt; +        this.addLinkToRow(row, &quot;dasboard-link&quot;, &quot;Performance Dashboard&quot;, queue.buildbot.perf_dashboard_url);

Typo: dasboard.

This style is not defined in CSS.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:44
&gt; +    this.perfType = info.perfType || null;

s/perf/performance/g

But perfType doesn&apos;t appear to be set anywhere. Is this just dead code, or did you intend to set it?

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:54
&gt; +        &quot;GTK Linux 64-bit Release (Perf)&quot;: {platform: Dashboard.Platform.LinuxGTK, debug: false, tester: true, testCategory: Buildbot.TestCategory.Performance},
&gt; +        &quot;EFL Linux 64-bit Release WK2&quot;: {platform: Dashboard.Platform.LinuxEFL, tester: true, testCategory: Buildbot.TestCategory.WebKit2},
&gt; +        &quot;EFL Linux 64-bit Release WK2 (Perf)&quot;: {platform: Dashboard.Platform.LinuxEFL, performance: true}

I couldn&apos;t understand the difference between a performance bot like the GTK one, and a testCategory: Buildbot.TestCategory.Performance bot like the EFL one.

How does one go about figuring this out?

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:65
&gt; +    perf_dashboard_url: &quot;https://perf.webkit.org&quot;,

Coding style nit: should be performanceDashboardURL, not perf_dashboard_url.

It would be nice to make this a getter function for consistency with other URL getters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032806</commentid>
    <comment_count>11</comment_count>
    <who name="Dana Burkart">dburkart</who>
    <bug_when>2014-09-02 18:09:16 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 237532 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=237532&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:15
&gt; &gt; +        Support new &apos;performance&apos; and &apos;perfType&apos; keys.
&gt; 
&gt; Looks like the ChangeLog is stale.
&gt; 
&gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:238
&gt; &gt; +        function collectPerfTestResults(data, stepName) {
&gt; 
&gt; s/Perf/Performance/g
&gt; 

OK

&gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:253
&gt; &gt; +            if (!testStep.results || !testStep.results[0]) {
&gt; 
&gt; Should this be
&gt; 
&gt; if (!testStep.results || testStep.results[0] === BuildbotIteration.SUCCESS)
&gt; 
&gt; ?
&gt; 

No, we&apos;re actually testing for failure of any kind, not success (failure is non-zero).

&gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:263
&gt; &gt; +            if (!testResults.failureCount) {
&gt; &gt; +                testResults.errorOccurred = true;
&gt; &gt; +            }
&gt; 
&gt; We don&apos;t use braces around single line blocks.
&gt; 
&gt; This code looks super confusing at first (why? no failures means that an error occurred?). Can you explain this situation in a comment? If you do, it won&apos;t be single line any more, so you should keep the braces :)
&gt; 

OK. I was following the style of some similar code. The reason is that we should have already either hit a success *or* failure case, and if we haven&apos;t something is wrong, so we set &apos;errorOccurred&apos; instead of failure

&gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:318
&gt; &gt; +        var webkitPerformanceTestResults = collectTestResults.call(this, data, &quot;perf-test&quot;);
&gt; 
&gt; collectPerfTestResults or collectTestResults? If it&apos;s the latter, it needs a comment explaining why, or someone will &quot;fix&quot; it for consistency.
&gt; 

Good point. It&apos;s correct, although strange, so I&apos;ll add a comment. collectPerfTestResults() is for compatibility with the internal buildbots.

&gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:28
&gt; &gt; +    BuildbotQueueView.call(this, [], queues);
&gt; 
&gt; We should probable relieve BuildbotQueueView of knowing the distinction between debug and release queues (not in this patch).
&gt; 
&gt; All subclasses add their own logic on top of it, sometimes fighting with BuildbotQueueView for control.
&gt; 
&gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:44
&gt; &gt; +        function appendPerfQueueStatus(queue)
&gt; 
&gt; s/Perf/Performance/g
&gt; 

OK

&gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:91
&gt; &gt; +                releaseLabel.textContent = queue.perfType ? queue.perfType : label;
&gt; 
&gt; label should probably be named &quot;defaultLabel&quot; or something. Not seeing how perfType is used, I&apos;m not sure about the intended design.
&gt; 
&gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:119
&gt; &gt; +        this.addLinkToRow(row, &quot;dasboard-link&quot;, &quot;Performance Dashboard&quot;, queue.buildbot.perf_dashboard_url);
&gt; 
&gt; Typo: dasboard.
&gt; 

Good catch.

&gt; This style is not defined in CSS.
&gt; 

Nor are many of the other arbitrary classes added to the procedurally generated HTML, I am simply following the same style.

&gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:44
&gt; &gt; +    this.perfType = info.perfType || null;
&gt; 
&gt; s/perf/performance/g
&gt; 
&gt; But perfType doesn&apos;t appear to be set anywhere. Is this just dead code, or did you intend to set it?
&gt; 

It is not set on the OpenSource dashboard, as we have only one type of performance bot on build.webkit. It is used for the internal configuration to change the heading (which normally says &apos;Release&apos;)

&gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:54
&gt; &gt; +        &quot;GTK Linux 64-bit Release (Perf)&quot;: {platform: Dashboard.Platform.LinuxGTK, debug: false, tester: true, testCategory: Buildbot.TestCategory.Performance},
&gt; &gt; +        &quot;EFL Linux 64-bit Release WK2&quot;: {platform: Dashboard.Platform.LinuxEFL, tester: true, testCategory: Buildbot.TestCategory.WebKit2},
&gt; &gt; +        &quot;EFL Linux 64-bit Release WK2 (Perf)&quot;: {platform: Dashboard.Platform.LinuxEFL, performance: true}
&gt; 
&gt; I couldn&apos;t understand the difference between a performance bot like the GTK one, and a testCategory: Buildbot.TestCategory.Performance bot like the EFL one.
&gt; 
&gt; How does one go about figuring this out?
&gt; 

That&apos;s actually a mistake on my part, good catch! They should both look like the EFL entry.

&gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:65
&gt; &gt; +    perf_dashboard_url: &quot;https://perf.webkit.org&quot;,
&gt; 
&gt; Coding style nit: should be performanceDashboardURL, not perf_dashboard_url.
&gt; 
&gt; It would be nice to make this a getter function for consistency with other URL getters.

OK.

Thanks for then review Alexey, I&apos;ll have a new patch addressing these concerns up shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032807</commentid>
    <comment_count>12</comment_count>
    <who name="Dana Burkart">dburkart</who>
    <bug_when>2014-09-02 18:11:38 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:253
&gt; &gt; &gt; +            if (!testStep.results || !testStep.results[0]) {
&gt; &gt; 
&gt; &gt; Should this be
&gt; &gt; 
&gt; &gt; if (!testStep.results || testStep.results[0] === BuildbotIteration.SUCCESS)
&gt; &gt; 
&gt; &gt; ?
&gt; &gt; 
&gt; 
&gt; No, we&apos;re actually testing for failure of any kind, not success (failure is non-zero).
&gt; 

Actually, I misread the context. I am testing for success, however I was following the same convention used earlier in the file. I can change it in both places if you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032816</commentid>
    <comment_count>13</comment_count>
      <attachid>237540</attachid>
    <who name="Dana Burkart">dburkart</who>
    <bug_when>2014-09-02 18:41:43 -0700</bug_when>
    <thetext>Created attachment 237540
Updated patch with Alexey&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032823</commentid>
    <comment_count>14</comment_count>
      <attachid>237540</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-09-02 19:20:39 -0700</bug_when>
    <thetext>Comment on attachment 237540
Updated patch with Alexey&apos;s suggestions.

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

&gt; I can change it in both places if you want.

Yes, I think that comparing to BuildbotIteration.SUCCESS reads better. The existing place probably pre-dates adding these named constants.

&gt; Tools/ChangeLog:18
&gt; +        Support new &apos;performance&apos; and &apos;perfType&apos; keys.

Stale ChangeLog, perfType is no more.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:259
&gt; +            testResults.failureCount = (testStep.results[0]) ? 1 : 0;

I think that this is not quite how the other result objects work. Failure count is for steps that actually have failure counts (like layout tests).

Besides, what are the possible values for testStep.results[0] here? We know that it&apos;s not 0, because that case is handled above. How else can testStep.results[0] evaluate to false? This needs a comment if that can actually happen.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:315
&gt; +        // This is actually correct, we&apos;re calling collectTestResults vs. collectPerformanceTestResults because of
&gt; +        // differences in the internal buildbot.

&quot;This is actually correct&quot; is superfluous, you can just say &quot;We are calling collectTestResults and not collectPerformanceTestResults because of differences in the internal buildbot.&quot;

A little more detail about what the differences are could be appropriate (cf. how we explain revision number formats for internal bots with two source trees).

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:91
&gt; +                releaseLabel.textContent = queue.performanceType ? queue.performanceType : label;

This still seems a little confusing. What is &quot;performance type&quot;, that doesn&apos;t parse.

Perhaps performanceTestName would be more descriptive?

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotPerformanceQueueView.js:116
&gt; +        content.className = &quot;ews-popover&quot;;

Didn&apos;t notice this at first - since it&apos;s not a EWS popover, please don&apos;t use its class names. Duplicating style rules is OK.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:66
&gt; +    performanceDashboardURL: function()

I now think that I gave the wrong advice here. I was thinking of a getter function, but we have regular functions when there is an argument, and simple attributes like baseURL when there is none.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032932</commentid>
    <comment_count>15</comment_count>
    <who name="Dana Burkart">dburkart</who>
    <bug_when>2014-09-03 10:58:08 -0700</bug_when>
    <thetext>Committed in r173211.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237383</attachid>
            <date>2014-08-29 15:50:09 -0700</date>
            <delta_ts>2014-09-02 16:29:32 -0700</delta_ts>
            <desc>Implementation to display performance bots on the dashboard</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>11595</size>
            <attacher name="Dana Burkart">dburkart</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE3MzEyNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM4IEBACisyMDE0LTA4LTI5ICBEYW5hIEJ1cmthcnQgIDxkYnVya2FydEBhcHBsZS5jb20+
CisKKyAgICAgICAgRGFzaGJvYXJkIHNob3VsZCBzaG93IHBlcmZvcm1hbmNlIGJvdHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYzODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEJ1aWxkU2xhdmVT
dXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3Jp
cHRzL0J1aWxkYm90LmpzOgorICAgICAgICBOZXcgVGVzdENhdGVnb3J5IChQZXJmb3JtYW5jZSkK
KworICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1
YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UXVldWUuanM6CisgICAgICAgIChC
dWlsZGJvdFF1ZXVlKToKKyAgICAgICAgT3B0aW9uYWwgQnVpbGRib3RRdWV1ZSAncGVyZlR5cGUn
IG9wdGlvbi4gQ29udHJvbHMgdGhlIGhlYWRpbmcgb2YgYSBzcGVjaWZpYyBwZXJmIHF1ZXVlLiBU
aGlzCisgICAgICAgIGlzIHRvIHN1cHBvcnQgdGhlIHBvc3NpYmlsaXR5IG9mIG11bHRpcGxlIHR5
cGVzIG9mIHBlcmZvcm1hbmNlIGJvdHMuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9i
dWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWls
ZGJvdFF1ZXVlVmlldy5qczoKKyAgICAgICAgKEJ1aWxkYm90UXVldWVWaWV3KToKKyAgICAgICAg
KEJ1aWxkYm90UXVldWVWaWV3LnByb3RvdHlwZS5fdXBkYXRlUXVldWVzLnRoaXMpOgorICAgICAg
ICAoQnVpbGRib3RRdWV1ZVZpZXcucHJvdG90eXBlLl91cGRhdGVRdWV1ZXMpOgorICAgICAgICBN
YWtlIHN1cmUgd2UgdXBkYXRlIHRoZSBuZXcgcGVyZiBxdWV1ZS4KKworICAgICAgICAqIEJ1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2Fy
ZC9TY3JpcHRzL0J1aWxkYm90VGVzdGVyUXVldWVWaWV3LmpzOgorICAgICAgICAoQnVpbGRib3RU
ZXN0ZXJRdWV1ZVZpZXcpOgorICAgICAgICAoQnVpbGRib3RUZXN0ZXJRdWV1ZVZpZXcucHJvdG90
eXBlLnVwZGF0ZS5hcHBlbmRCdWlsZCk6CisgICAgICAgIChCdWlsZGJvdFRlc3RlclF1ZXVlVmll
dy5wcm90b3R5cGUudXBkYXRlKToKKyAgICAgICAgSGFuZGxlIHBlcmYgcXVldWVzIGJ5IHN3aXRj
aGluZyBvdXQgdGhlIGxhYmVsIGlmIHBlcmZUeXBlIGlzIHNldC4KKworICAgICAgICAqIEJ1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2Fy
ZC9TY3JpcHRzL01haW4uanM6CisgICAgICAgIChkb2N1bWVudFJlYWR5LmhpZGVCdXR0b24pOgor
ICAgICAgICBTZXQgdXAgdGhlIGNvbHVtbiBuYW1lLCBhbmQgc2VncmVnYXRlIHBlcmYgYm90cyBp
bnRvIGEgc2VwYXJhdGUgcGVyZiBxdWV1ZS4KKworICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0
L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1dl
YktpdEJ1aWxkYm90LmpzOgorICAgICAgICAoV2ViS2l0QnVpbGRib3QpOgorICAgICAgICBBZGQg
cGVyZm9ybWFuY2UgYm90cyB0byB0aGUgZGFzaGJvYXJkCisKIDIwMTQtMDgtMjkgIENhcmxvcyBB
bGJlcnRvIExvcGV6IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0pTQ10g
U29tZSBKU0MgdGVzdHMgYXJlIGRlcGVuZGVudCBvbiB0aGUgbWFjaGluZSB0aW1lIHpvbmUuCklu
ZGV4OiBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJs
aWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9k
YXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdC5qcwkocmV2aXNpb24gMTczMDM0KQorKysgVG9vbHMv
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFz
aGJvYXJkL1NjcmlwdHMvQnVpbGRib3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDgg
QEAgQnVpbGRib3QuVXBkYXRlUmVhc29uID0gewogLy8gT3JkZXJlZCBpbXBvcnRhbmNlLgogQnVp
bGRib3QuVGVzdENhdGVnb3J5ID0gewogICAgIFdlYktpdDI6ICJ3ZWJraXQtMiIsCi0gICAgV2Vi
S2l0MTogIndlYmtpdC0xIgorICAgIFdlYktpdDE6ICJ3ZWJraXQtMSIsCisgICAgUGVyZm9ybWFu
Y2U6ICJwZXJmIgogfTsKIAogLy8gT3JkZXJlZCBpbXBvcnRhbmNlLgpJbmRleDogVG9vbHMvQnVp
bGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJv
YXJkL1NjcmlwdHMvQnVpbGRib3RRdWV1ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9CdWlsZFNs
YXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQv
U2NyaXB0cy9CdWlsZGJvdFF1ZXVlLmpzCShyZXZpc2lvbiAxNzMwMzQpCisrKyBUb29scy9CdWls
ZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9h
cmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3
IEBAIEJ1aWxkYm90UXVldWUgPSBmdW5jdGlvbihidWlsZGJvdCwgaWQsIGkKICAgICB0aGlzLnRl
c3RlciA9IGluZm8udGVzdGVyIHx8IGZhbHNlOwogICAgIHRoaXMuYXJjaGl0ZWN0dXJlID0gaW5m
by5hcmNoaXRlY3R1cmUgfHwgbnVsbDsKICAgICB0aGlzLnRlc3RDYXRlZ29yeSA9IGluZm8udGVz
dENhdGVnb3J5IHx8IG51bGw7CisgICAgdGhpcy5wZXJmVHlwZSA9IGluZm8ucGVyZlR5cGUgfHwg
bnVsbDsKIAogICAgIHRoaXMuaXRlcmF0aW9ucyA9IFtdOwogICAgIHRoaXMuX2tub3duSXRlcmF0
aW9ucyA9IHt9OwpJbmRleDogVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9y
Zy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvQnVpbGRib3RRdWV1ZVZpZXcu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9y
Zy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvQnVpbGRib3RRdWV1ZVZpZXcu
anMJKHJldmlzaW9uIDE3MzAzNCkKKysrIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndl
YmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UXVl
dWVWaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMiArMjMsMTMgQEAKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1CdWlsZGJvdFF1ZXVlVmlldyA9IGZ1bmN0
aW9uKGRlYnVnUXVldWVzLCByZWxlYXNlUXVldWVzKQorQnVpbGRib3RRdWV1ZVZpZXcgPSBmdW5j
dGlvbihkZWJ1Z1F1ZXVlcywgcmVsZWFzZVF1ZXVlcywgcGVyZlF1ZXVlcykKIHsKICAgICBRdWV1
ZVZpZXcuY2FsbCh0aGlzKTsKIAogICAgIHRoaXMucmVsZWFzZVF1ZXVlcyA9IHJlbGVhc2VRdWV1
ZXMgfHwgW107CiAgICAgdGhpcy5kZWJ1Z1F1ZXVlcyA9IGRlYnVnUXVldWVzIHx8IFtdOworICAg
IHRoaXMucGVyZlF1ZXVlcyA9IHBlcmZRdWV1ZXMgfHwgW107CiAKICAgICB0aGlzLnJlbGVhc2VR
dWV1ZXMuZm9yRWFjaChmdW5jdGlvbihxdWV1ZSkgewogICAgICAgICBpZiAodGhpcy5wbGF0Zm9y
bSAmJiB0aGlzLnBsYXRmb3JtICE9IHF1ZXVlLnBsYXRmb3JtKQpAQCAtMjkwLDYgKzI5MSw3IEBA
IEJ1aWxkYm90UXVldWVWaWV3LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHRoaXMucmVs
ZWFzZVF1ZXVlcy5mb3JFYWNoKGZ1bmN0aW9uKHF1ZXVlKSB7IHF1ZXVlLnVwZGF0ZSgpOyB9KTsK
ICAgICAgICAgdGhpcy5kZWJ1Z1F1ZXVlcy5mb3JFYWNoKGZ1bmN0aW9uKHF1ZXVlKSB7IHF1ZXVl
LnVwZGF0ZSgpOyB9KTsKKyAgICAgICAgdGhpcy5wZXJmUXVldWVzLmZvckVhY2goZnVuY3Rpb24o
cXVldWUpIHsgcXVldWUudXBkYXRlKCk7IH0pOwogICAgIH0sCiAKICAgICBfcXVldWVJdGVyYXRp
b25zQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQpJbmRleDogVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQv
YnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvQnVp
bGRib3RUZXN0ZXJRdWV1ZVZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1Njcmlw
dHMvQnVpbGRib3RUZXN0ZXJRdWV1ZVZpZXcuanMJKHJldmlzaW9uIDE3MzAzNCkKKysrIFRvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL0J1aWxkYm90VGVzdGVyUXVldWVWaWV3LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yMywxMCArMjMsOSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLUJ1aWxkYm90VGVzdGVyUXVldWVWaWV3ID0gZnVuY3Rpb24oZGVidWdRdWV1ZXMsIHJl
bGVhc2VRdWV1ZXMpCitCdWlsZGJvdFRlc3RlclF1ZXVlVmlldyA9IGZ1bmN0aW9uKGRlYnVnUXVl
dWVzLCByZWxlYXNlUXVldWVzLCBwZXJmUXVldWVzKQogewotICAgIEJ1aWxkYm90UXVldWVWaWV3
LmNhbGwodGhpcywgZGVidWdRdWV1ZXMsIHJlbGVhc2VRdWV1ZXMpOwotCisgICAgQnVpbGRib3RR
dWV1ZVZpZXcuY2FsbCh0aGlzLCBkZWJ1Z1F1ZXVlcywgcmVsZWFzZVF1ZXVlcywgcGVyZlF1ZXVl
cyk7CiAgICAgdGhpcy51cGRhdGUoKTsKIH07CiAKQEAgLTEyNCw2ICsxMjMsMTAgQEAgQnVpbGRi
b3RUZXN0ZXJRdWV1ZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICBmdW5jdGlvbiBhcHBlbmRC
dWlsZChxdWV1ZXMsIGxhYmVsKQogICAgICAgICB7CiAgICAgICAgICAgICBxdWV1ZXMuZm9yRWFj
aChmdW5jdGlvbihxdWV1ZSkgeworICAgICAgICAgICAgICAgIGlmIChxdWV1ZS5wZXJmVHlwZSkg
eworICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IHF1ZXVlLnBlcmZUeXBlOworICAgICAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgICAgIHZhciByZWxlYXNlTGFiZWwgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJhIik7CiAgICAgICAgICAgICAgICAgcmVsZWFzZUxhYmVsLmNsYXNzTGlz
dC5hZGQoInF1ZXVlTGFiZWwiKTsKICAgICAgICAgICAgICAgICByZWxlYXNlTGFiZWwudGV4dENv
bnRlbnQgPSBsYWJlbDsKQEAgLTEzNyw2ICsxNDAsMTAgQEAgQnVpbGRib3RUZXN0ZXJRdWV1ZVZp
ZXcucHJvdG90eXBlID0gewogCiAgICAgICAgIGFwcGVuZEJ1aWxkLmNhbGwodGhpcywgdGhpcy5y
ZWxlYXNlUXVldWVzLCAiUmVsZWFzZSIpOwogICAgICAgICBhcHBlbmRCdWlsZC5jYWxsKHRoaXMs
IHRoaXMuZGVidWdRdWV1ZXMsICJEZWJ1ZyIpOworCisgICAgICAgIGlmICh0aGlzLnBlcmZRdWV1
ZXMpIHsKKyAgICAgICAgICAgIGFwcGVuZEJ1aWxkLmNhbGwodGhpcywgdGhpcy5wZXJmUXVldWVz
KTsKKyAgICAgICAgfQogICAgIH0sCiAKICAgICBfcG9wb3ZlckNvbnRlbnRGb3JMYXlvdXRUZXN0
UmVncmVzc2lvbnM6IGZ1bmN0aW9uKGl0ZXJhdGlvbikKSW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVT
dXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3Jp
cHRzL01haW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQu
d2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWFpbi5qcwko
cmV2aXNpb24gMTczMDM0KQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0
Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWFpbi5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBmb3IgKHZhciBpID0gMDsgaSA8IGJ1aWxkYm90cy5s
ZW5ndGg7ICsrCiAgICAgICAgICAgICBjYXRlZ29yeSA9IHBsYXRmb3JtW2NhdGVnb3J5TmFtZV0g
PSB7fTsKIAogICAgICAgICB2YXIgYnVpbGRUeXBlID0gcXVldWUuZGVidWcgPyAiZGVidWciIDog
InJlbGVhc2UiOworICAgICAgICBidWlsZFR5cGUgPSBxdWV1ZS5wZXJmVHlwZSA/ICJwZXJmVHlw
ZSIgOiBidWlsZFR5cGU7CiAKICAgICAgICAgYnVpbGRRdWV1ZXMgPSBjYXRlZ29yeVtidWlsZFR5
cGVdOwogICAgICAgICBpZiAoIWJ1aWxkUXVldWVzKQpAQCAtODQsNiArODUsNyBAQCBpZiAoaGFz
RVdTKSB7CiB2YXIgdGVzdE5hbWVzID0ge307CiB0ZXN0TmFtZXNbQnVpbGRib3QuVGVzdENhdGVn
b3J5LldlYktpdDJdID0gIldLMiBUZXN0cyI7CiB0ZXN0TmFtZXNbQnVpbGRib3QuVGVzdENhdGVn
b3J5LldlYktpdDFdID0gIldLMSBUZXN0cyI7Cit0ZXN0TmFtZXNbQnVpbGRib3QuVGVzdENhdGVn
b3J5LlBlcmZvcm1hbmNlXSA9ICJQZXJmIFRlc3RzIjsKIAogZnVuY3Rpb24gc29ydGVkUGxhdGZv
cm1zKCkKIHsKQEAgLTE5OSw3ICsyMDEsNyBAQCBmdW5jdGlvbiBkb2N1bWVudFJlYWR5KCkKIAog
ICAgICAgICAgICAgdmFyIHRlc3RlclByb3BlcnR5ID0gQnVpbGRib3QuVGVzdENhdGVnb3J5W3Rl
c3RlcktleV07CiAgICAgICAgICAgICBpZiAocGxhdGZvcm1RdWV1ZXNbdGVzdGVyUHJvcGVydHld
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBuZXcgQnVpbGRib3RUZXN0ZXJRdWV1ZVZp
ZXcocGxhdGZvcm1RdWV1ZXNbdGVzdGVyUHJvcGVydHldLmRlYnVnLCBwbGF0Zm9ybVF1ZXVlc1t0
ZXN0ZXJQcm9wZXJ0eV0ucmVsZWFzZSk7CisgICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBuZXcg
QnVpbGRib3RUZXN0ZXJRdWV1ZVZpZXcocGxhdGZvcm1RdWV1ZXNbdGVzdGVyUHJvcGVydHldLmRl
YnVnLCBwbGF0Zm9ybVF1ZXVlc1t0ZXN0ZXJQcm9wZXJ0eV0ucmVsZWFzZSwgcGxhdGZvcm1RdWV1
ZXNbdGVzdGVyUHJvcGVydHldLnBlcmZUeXBlKTsKICAgICAgICAgICAgICAgICBjZWxsLmFwcGVu
ZENoaWxkKHZpZXcuZWxlbWVudCk7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFRvb2xzL0J1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2Fy
ZC9TY3JpcHRzL1dlYktpdEJ1aWxkYm90LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0J1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9T
Y3JpcHRzL1dlYktpdEJ1aWxkYm90LmpzCShyZXZpc2lvbiAxNzMwMzQpCisrKyBUb29scy9CdWls
ZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9h
cmQvU2NyaXB0cy9XZWJLaXRCdWlsZGJvdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMz
LDE0IEBAIFdlYktpdEJ1aWxkYm90ID0gZnVuY3Rpb24oKQogICAgICAgICAiQXBwbGUgTW91bnRh
aW5MaW9uIERlYnVnIFdLMSAoVGVzdHMpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0u
TWFjT1NYTW91bnRhaW5MaW9uLCBkZWJ1ZzogdHJ1ZSwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdv
cnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQxfSwKICAgICAgICAgIkFwcGxlIE1vdW50
YWluTGlvbiBSZWxlYXNlIFdLMiAoVGVzdHMpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZv
cm0uTWFjT1NYTW91bnRhaW5MaW9uLCB0ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRi
b3QuVGVzdENhdGVnb3J5LldlYktpdDJ9LAogICAgICAgICAiQXBwbGUgTW91bnRhaW5MaW9uIERl
YnVnIFdLMiAoVGVzdHMpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NYTW91
bnRhaW5MaW9uLCBkZWJ1ZzogdHJ1ZSwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxk
Ym90LlRlc3RDYXRlZ29yeS5XZWJLaXQyfSwKKyAgICAgICAgIkFwcGxlIE1vdW50YWluTGlvbiBS
ZWxlYXNlIChQZXJmKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLk1hY09TWE1vdW50
YWluTGlvbiwgZGVidWc6IGZhbHNlLCB0ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRi
b3QuVGVzdENhdGVnb3J5LlBlcmZvcm1hbmNlfSwKICAgICAgICAgIkFwcGxlIE1hdmVyaWNrcyBE
ZWJ1ZyAoQnVpbGQpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NYTWF2ZXJp
Y2tzLCBkZWJ1ZzogdHJ1ZSwgYnVpbGRlcjogdHJ1ZSwgYXJjaGl0ZWN0dXJlOiBCdWlsZGJvdC5C
dWlsZEFyY2hpdGVjdHVyZS5TaXh0eUZvdXJCaXR9LAogICAgICAgICAiQXBwbGUgTWF2ZXJpY2tz
IFJlbGVhc2UgKEJ1aWxkKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLk1hY09TWE1h
dmVyaWNrcywgZGVidWc6IGZhbHNlLCBidWlsZGVyOiB0cnVlLCBhcmNoaXRlY3R1cmU6IEJ1aWxk
Ym90LkJ1aWxkQXJjaGl0ZWN0dXJlLlNpeHR5Rm91ckJpdH0sCiAgICAgICAgICJBcHBsZSBNYXZl
cmlja3MgRGVidWcgV0sxIChUZXN0cykiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5N
YWNPU1hNYXZlcmlja3MsIGRlYnVnOiB0cnVlLCB0ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTog
QnVpbGRib3QuVGVzdENhdGVnb3J5LldlYktpdDF9LAogICAgICAgICAiQXBwbGUgTWF2ZXJpY2tz
IERlYnVnIFdLMiAoVGVzdHMpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NY
TWF2ZXJpY2tzLCBkZWJ1ZzogdHJ1ZSwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxk
Ym90LlRlc3RDYXRlZ29yeS5XZWJLaXQyfSwKICAgICAgICAgIkFwcGxlIE1hdmVyaWNrcyBSZWxl
YXNlIFdLMSAoVGVzdHMpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NYTWF2
ZXJpY2tzLCBkZWJ1ZzogZmFsc2UsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJv
dC5UZXN0Q2F0ZWdvcnkuV2ViS2l0MX0sCiAgICAgICAgICJBcHBsZSBNYXZlcmlja3MgUmVsZWFz
ZSBXSzIgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLk1hY09TWE1hdmVy
aWNrcywgZGVidWc6IGZhbHNlLCB0ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRib3Qu
VGVzdENhdGVnb3J5LldlYktpdDJ9LAorICAgICAgICAiQXBwbGUgTWF2ZXJpY2tzIFJlbGVhc2Ug
KFBlcmYpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NYTWF2ZXJpY2tzLCBk
ZWJ1ZzogZmFsc2UsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJvdC5UZXN0Q2F0
ZWdvcnkuUGVyZm9ybWFuY2V9LAogICAgICAgICAiQXBwbGUgV2luIERlYnVnIChCdWlsZCkiOiB7
cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5XaW5kb3dzNywgZGVidWc6IHRydWUsIGJ1aWxk
ZXI6IHRydWUsIGFyY2hpdGVjdHVyZTogQnVpbGRib3QuQnVpbGRBcmNoaXRlY3R1cmUuVGhpcnR5
VHdvQml0fSwKICAgICAgICAgIkFwcGxlIFdpbiBSZWxlYXNlIChCdWlsZCkiOiB7cGxhdGZvcm06
IERhc2hib2FyZC5QbGF0Zm9ybS5XaW5kb3dzNywgYnVpbGRlcjogdHJ1ZSwgYXJjaGl0ZWN0dXJl
OiBCdWlsZGJvdC5CdWlsZEFyY2hpdGVjdHVyZS5UaGlydHlUd29CaXR9LAogICAgICAgICAiQXBw
bGUgV2luIDcgRGVidWcgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLldp
bmRvd3M3LCBkZWJ1ZzogdHJ1ZSwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90
LlRlc3RDYXRlZ29yeS5XZWJLaXQxfSwKQEAgLTQ3LDcgKzQ5LDkgQEAgV2ViS2l0QnVpbGRib3Qg
PSBmdW5jdGlvbigpCiAgICAgICAgICJHVEsgTGludXggNjQtYml0IFJlbGVhc2UgKFRlc3RzKSI6
IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLkxpbnV4R1RLLCBkZWJ1ZzogZmFsc2UsIHRl
c3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0Mn0s
CiAgICAgICAgICJHVEsgTGludXggNjQtYml0IERlYnVnIChCdWlsZCkiOiB7cGxhdGZvcm06IERh
c2hib2FyZC5QbGF0Zm9ybS5MaW51eEdUSywgZGVidWc6IHRydWUsIGJ1aWxkZXI6IHRydWUsIGFy
Y2hpdGVjdHVyZTogQnVpbGRib3QuQnVpbGRBcmNoaXRlY3R1cmUuU2l4dHlGb3VyQml0fSwKICAg
ICAgICAgIkdUSyBMaW51eCA2NC1iaXQgRGVidWcgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJv
YXJkLlBsYXRmb3JtLkxpbnV4R1RLLCBkZWJ1ZzogdHJ1ZSwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0
ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQyfSwKLSAgICAgICAgIkVGTCBMaW51
eCA2NC1iaXQgUmVsZWFzZSBXSzIiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5MaW51
eEVGTCwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5X
ZWJLaXQyfQorICAgICAgICAiR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIChQZXJmKSI6IHtwbGF0
Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLkxpbnV4R1RLLCBkZWJ1ZzogZmFsc2UsIHRlc3Rlcjog
dHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuUGVyZm9ybWFuY2V9LAor
ICAgICAgICAiRUZMIExpbnV4IDY0LWJpdCBSZWxlYXNlIFdLMiI6IHtwbGF0Zm9ybTogRGFzaGJv
YXJkLlBsYXRmb3JtLkxpbnV4RUZMLCB0ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRi
b3QuVGVzdENhdGVnb3J5LldlYktpdDJ9LAorICAgICAgICAiRUZMIExpbnV4IDY0LWJpdCBSZWxl
YXNlIFdLMiAoUGVyZikiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5MaW51eEVGTCwg
dGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5QZXJmb3Jt
YW5jZX0KICAgICB9OwogCiAgICAgQnVpbGRib3QuY2FsbCh0aGlzLCAiaHR0cDovL2J1aWxkLndl
YmtpdC5vcmcvIiwgcXVldWVJbmZvKTsK
</data>
<flag name="review"
          id="262110"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237528</attachid>
            <date>2014-09-02 16:29:32 -0700</date>
            <delta_ts>2014-09-02 16:36:49 -0700</delta_ts>
            <desc>Implementation to display performance bots on the dashboard</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>12784</size>
            <attacher name="Dana Burkart">dburkart</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE3MzE5MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMxIEBACisyMDE0LTA5LTAyICBEYW5hIEJ1cmthcnQgIDxkYnVya2FydEBhcHBsZS5jb20+
CisKKyAgICAgICAgRGFzaGJvYXJkIHNob3VsZCBzaG93IHBlcmZvcm1hbmNlIGJvdHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYzODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEJ1aWxkU2xhdmVT
dXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3Jp
cHRzL0J1aWxkYm90SXRlcmF0aW9uLmpzOgorICAgICAgICAoQnVpbGRib3RJdGVyYXRpb24ucHJv
dG90eXBlLl9wYXJzZURhdGEuY29sbGVjdFBlcmZUZXN0UmVzdWx0cyk6CisgICAgICAgIChCdWls
ZGJvdEl0ZXJhdGlvbi5wcm90b3R5cGUuX3BhcnNlRGF0YSk6CisgICAgICAgIFN1cHBvcnQgcG9z
c2libGUgcGVyZm9ybWFuY2UgZmFpbHVyZXMuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9C
dWlsZGJvdFF1ZXVlLmpzOgorICAgICAgICAoQnVpbGRib3RRdWV1ZSk6CisgICAgICAgIFN1cHBv
cnQgbmV3ICdwZXJmb3JtYW5jZScgYW5kICdwZXJmVHlwZScga2V5cy4KKworCisgICAgICAgICog
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFz
aGJvYXJkL1NjcmlwdHMvTWFpbi5qczoKKyAgICAgICAgQWRkIHBlcmZvcm1hbmNlIGNvbHVtbiB0
byB0aGUgbWFpbiBwYWdlLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Vi
a2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvV2ViS2l0QnVpbGRi
b3QuanM6CisgICAgICAgIChXZWJLaXRCdWlsZGJvdCk6CisgICAgICAgICogQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1N0eWxl
cy9NYWluLmNzczoKKyAgICAgICAgKGJvZHkpOgorICAgICAgICBNYWtlIHN1cmUgZXZlcnl0aGlu
ZyBmaXRzIG9uIDEzIGluY2ggc2NyZWVucy4KKworICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0
L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9pbmRleC5odG1s
OgorCiAyMDE0LTA5LTAyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIE1ha2Ugc3VyZSBXSzEgcHJlZnMgYXJlIGluaXRpYWxpemVkIGluIE1pbmlCcm93
c2VyCkluZGV4OiBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvaW5kZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9C
dWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNo
Ym9hcmQvaW5kZXguaHRtbAkocmV2aXNpb24gMTczMTkxKQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL2luZGV4
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgc3JjPSJTY3JpcHRzL0J1aWxkYm90UXVldWVWaWV3
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iU2NyaXB0cy9CdWlsZGJvdEJ1aWxkZXJR
dWV1ZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJTY3JpcHRzL0J1aWxkYm90
VGVzdGVyUXVldWVWaWV3LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU2NyaXB0cy9C
dWlsZGJvdFBlcmZvcm1hbmNlUXVldWVWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iU2NyaXB0cy9FV1NRdWV1ZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJT
Y3JpcHRzL1N0YXR1c0xpbmVWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iU2Ny
aXB0cy9TZXR0aW5ncy5qcyI+PC9zY3JpcHQ+CkluZGV4OiBUb29scy9CdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9C
dWlsZGJvdEl0ZXJhdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9CdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9C
dWlsZGJvdEl0ZXJhdGlvbi5qcwkocmV2aXNpb24gMTczMTkxKQorKysgVG9vbHMvQnVpbGRTbGF2
ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1Nj
cmlwdHMvQnVpbGRib3RJdGVyYXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDEw
IEBAIEJ1aWxkYm90SXRlcmF0aW9uLlByb2R1Y3RpdmVTdGVwcyA9IHsKICAgICAid2Via2l0cHkt
dGVzdCI6IDEsCiAgICAgIndlYmtpdHBlcmwtdGVzdCI6IDEsCiAgICAgImJpbmRpbmdzLWdlbmVy
YXRpb24tdGVzdHMiOiAxLAorICAgICJydW4gTWVtYnVzdGVyIE9TIE1lbW9yeSI6IDEsCisgICAg
InJ1biBzY3JvbGxwZXJmIjogMSwKKyAgICAicnVuIFBMVDMiOiAxLAorICAgICJwZXJmLXRlc3Qi
OiAxCiB9OwogCiBCdWlsZGJvdEl0ZXJhdGlvbi5FdmVudCA9IHsKQEAgLTIzMSw2ICsyMzUsMzYg
QEAgQnVpbGRib3RJdGVyYXRpb24ucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIHRl
c3RSZXN1bHRzOwogICAgICAgICB9CiAKKyAgICAgICAgZnVuY3Rpb24gY29sbGVjdFBlcmZUZXN0
UmVzdWx0cyhkYXRhLCBzdGVwTmFtZSkgeworICAgICAgICAgICAgdmFyIHRlc3RTdGVwID0gZGF0
YS5zdGVwcy5maW5kRmlyc3QoZnVuY3Rpb24oc3RlcCkgeyByZXR1cm4gc3RlcC5uYW1lID09PSBz
dGVwTmFtZTsgfSk7CisgICAgICAgICAgICBpZiAoIXRlc3RTdGVwKQorICAgICAgICAgICAgICAg
IHJldHVybiBudWxsOworCisgICAgICAgICAgICB2YXIgdGVzdFJlc3VsdHMgPSB7fTsKKworICAg
ICAgICAgICAgaWYgKCF0ZXN0U3RlcC5pc0ZpbmlzaGVkKSB7CisgICAgICAgICAgICAgICAgLy8g
VGhlIHN0ZXAgbmV2ZXIgZXZlbiByYW4sIG9yIGhhc24ndCBmaW5pc2hlZCBydW5uaW5nLgorICAg
ICAgICAgICAgICAgIHRlc3RSZXN1bHRzLmZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRlc3RSZXN1bHRzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0ZXN0
UmVzdWx0cy5maW5pc2hlZCA9IHRydWU7CisKKyAgICAgICAgICAgIGlmICghdGVzdFN0ZXAucmVz
dWx0cyB8fCAhdGVzdFN0ZXAucmVzdWx0c1swXSkgeworICAgICAgICAgICAgICAgIC8vIEFsbCB0
ZXN0cyBwYXNzZWQuCisgICAgICAgICAgICAgICAgdGVzdFJlc3VsdHMuYWxsUGFzc2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdFJlc3VsdHM7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHRlc3RSZXN1bHRzLmZhaWx1cmVDb3VudCA9ICh0ZXN0U3RlcC5yZXN1bHRz
WzBdKSA/IDEgOiAwOworCisgICAgICAgICAgICBpZiAoIXRlc3RSZXN1bHRzLmZhaWx1cmVDb3Vu
dCkgeworICAgICAgICAgICAgICAgIHRlc3RSZXN1bHRzLmVycm9yT2NjdXJyZWQgPSB0cnVlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdGVzdFJlc3VsdHM7CisgICAgICAg
IH0KKwogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5pZCB8fCB0aGlzLmlkID09PSBkYXRh
Lm51bWJlcik7CiAgICAgICAgIHRoaXMuaWQgPSBkYXRhLm51bWJlcjsKIApAQCAtMjc4LDYgKzMx
MiwyMSBAQCBCdWlsZGJvdEl0ZXJhdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBiaW5k
aW5nVGVzdFJlc3VsdHMgPSBjb2xsZWN0VGVzdFJlc3VsdHMuY2FsbCh0aGlzLCBkYXRhLCAiYmlu
ZGluZ3MtZ2VuZXJhdGlvbi10ZXN0cyIpOwogICAgICAgICB0aGlzLmJpbmRpbmdUZXN0UmVzdWx0
cyA9IGJpbmRpbmdUZXN0UmVzdWx0cyA/IG5ldyBCdWlsZGJvdFRlc3RSZXN1bHRzKHRoaXMsIGJp
bmRpbmdUZXN0UmVzdWx0cykgOiBudWxsOwogCisgICAgICAgIHZhciBwZXJmb3JtYW5jZVRlc3RS
ZXN1bHRzID0gY29sbGVjdFBlcmZUZXN0UmVzdWx0cy5jYWxsKHRoaXMsIGRhdGEsICJydW4gUExU
MyIpOworICAgICAgICB0aGlzLnBlcmZvcm1hbmNlVGVzdFJlc3VsdHMgPSBwZXJmb3JtYW5jZVRl
c3RSZXN1bHRzID8gbmV3IEJ1aWxkYm90VGVzdFJlc3VsdHModGhpcywgcGVyZm9ybWFuY2VUZXN0
UmVzdWx0cykgOiBudWxsOworCisgICAgICAgIHZhciB3ZWJraXRQZXJmb3JtYW5jZVRlc3RSZXN1
bHRzID0gY29sbGVjdFRlc3RSZXN1bHRzLmNhbGwodGhpcywgZGF0YSwgInBlcmYtdGVzdCIpOwor
ICAgICAgICB0aGlzLndlYmtpdFBlcmZvcm1hbmNlVGVzdFJlc3VsdHMgPSB3ZWJraXRQZXJmb3Jt
YW5jZVRlc3RSZXN1bHRzID8gbmV3IEJ1aWxkYm90VGVzdFJlc3VsdHModGhpcywgd2Via2l0UGVy
Zm9ybWFuY2VUZXN0UmVzdWx0cykgOiBudWxsOworCisgICAgICAgIHZhciBvc01lbW9yeVRlc3RS
ZXN1bHRzID0gY29sbGVjdFBlcmZUZXN0UmVzdWx0cy5jYWxsKHRoaXMsIGRhdGEsICJydW4gTWVt
YnVzdGVyIE9TIE1lbW9yeSIpOworICAgICAgICB0aGlzLm9zTWVtb3J5VGVzdFJlc3VsdHMgPSBv
c01lbW9yeVRlc3RSZXN1bHRzID8gbmV3IEJ1aWxkYm90VGVzdFJlc3VsdHModGhpcywgb3NNZW1v
cnlUZXN0UmVzdWx0cykgOiBudWxsOworCisgICAgICAgIHZhciBtZW1idXN0ZXJUZXN0UmVzdWx0
cyA9IGNvbGxlY3RQZXJmVGVzdFJlc3VsdHMuY2FsbCh0aGlzLCBkYXRhLCAicnVuIE1lbWJ1c3Rl
ciIpOworICAgICAgICB0aGlzLm1lbWJ1c3RlclRlc3RSZXN1bHRzID0gbWVtYnVzdGVyVGVzdFJl
c3VsdHMgPyBuZXcgQnVpbGRib3RUZXN0UmVzdWx0cyh0aGlzLCBtZW1idXN0ZXJUZXN0UmVzdWx0
cykgOiBudWxsOworCisgICAgICAgIHZhciBzY3JvbGxQZXJmVGVzdFJlc3VsdHMgPSBjb2xsZWN0
UGVyZlRlc3RSZXN1bHRzLmNhbGwodGhpcywgZGF0YSwgInJ1biBzY3JvbGxwZXJmIik7CisgICAg
ICAgIHRoaXMuc2Nyb2xsUGVyZlRlc3RSZXN1bHRzID0gc2Nyb2xsUGVyZlRlc3RSZXN1bHRzID8g
bmV3IEJ1aWxkYm90VGVzdFJlc3VsdHModGhpcywgc2Nyb2xsUGVyZlRlc3RSZXN1bHRzKSA6IG51
bGw7CisKICAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlOwogCiAgICAgICAgIHRoaXMuX2ZpcnN0
RmFpbGVkU3RlcCA9IGRhdGEuc3RlcHMuZmluZEZpcnN0KGZ1bmN0aW9uKHN0ZXApIHsgcmV0dXJu
IHN0ZXAucmVzdWx0c1swXSA9PT0gQnVpbGRib3RJdGVyYXRpb24uRkFJTFVSRTsgfSk7CkluZGV4
OiBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1s
L2Rhc2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UXVldWUuanMJKHJldmlzaW9uIDE3MzE5MSkKKysr
IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19o
dG1sL2Rhc2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UXVldWUuanMJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDggKzM4LDEwIEBAIEJ1aWxkYm90UXVldWUgPSBmdW5jdGlvbihidWlsZGJvdCwgaWQsIGkK
ICAgICB0aGlzLmRlYnVnID0gaW5mby5kZWJ1ZyB8fCBmYWxzZTsKICAgICB0aGlzLmJ1aWxkZXIg
PSBpbmZvLmJ1aWxkZXIgfHwgZmFsc2U7CiAgICAgdGhpcy50ZXN0ZXIgPSBpbmZvLnRlc3RlciB8
fCBmYWxzZTsKKyAgICB0aGlzLnBlcmZvcm1hbmNlID0gaW5mby5wZXJmb3JtYW5jZSB8fCBmYWxz
ZTsKICAgICB0aGlzLmFyY2hpdGVjdHVyZSA9IGluZm8uYXJjaGl0ZWN0dXJlIHx8IG51bGw7CiAg
ICAgdGhpcy50ZXN0Q2F0ZWdvcnkgPSBpbmZvLnRlc3RDYXRlZ29yeSB8fCBudWxsOworICAgIHRo
aXMucGVyZlR5cGUgPSBpbmZvLnBlcmZUeXBlIHx8IG51bGw7CiAKICAgICB0aGlzLml0ZXJhdGlv
bnMgPSBbXTsKICAgICB0aGlzLl9rbm93bkl0ZXJhdGlvbnMgPSB7fTsKSW5kZXg6IFRvb2xzL0J1
aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hi
b2FyZC9TY3JpcHRzL01haW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBv
cnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMv
TWFpbi5qcwkocmV2aXNpb24gMTczMTkxKQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWFpbi5q
cwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBmb3IgKHZhciBpID0gMDsgaSA8IGJ1
aWxkYm90cy5sZW5ndGg7ICsrCiAgICAgICAgICAgICBjYXRlZ29yeU5hbWUgPSAiYnVpbGRlcnMi
OwogICAgICAgICB9IGVsc2UgaWYgKHF1ZXVlLnRlc3RlcikgewogICAgICAgICAgICAgY2F0ZWdv
cnlOYW1lID0gcXVldWUudGVzdENhdGVnb3J5OworICAgICAgICB9IGVsc2UgaWYgKHF1ZXVlLnBl
cmZvcm1hbmNlKSB7CisgICAgICAgICAgICBjYXRlZ29yeU5hbWUgPSAicGVyZm9ybWFuY2UiOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIlVua25vd24gcXVl
dWUgdHlwZS4iKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ4LDYgKzE1MCwxMCBAQCBm
dW5jdGlvbiBkb2N1bWVudFJlYWR5KCkKICAgICAgICAgcm93LmFwcGVuZENoaWxkKGhlYWRlcik7
CiAgICAgfQogCisgICAgdmFyIGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7
CisgICAgaGVhZGVyLnRleHRDb250ZW50ID0gIlBlcmZvcm1hbmNlIjsKKyAgICByb3cuYXBwZW5k
Q2hpbGQoaGVhZGVyKTsKKwogICAgIGlmIChoYXNFV1MpIHsKICAgICAgICAgdmFyIGhlYWRlciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7CiAgICAgICAgIGhlYWRlci50ZXh0Q29udGVu
dCA9ICJFV1MiOwpAQCAtMjA2LDYgKzIxMiwxNCBAQCBmdW5jdGlvbiBkb2N1bWVudFJlYWR5KCkK
ICAgICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChjZWxsKTsKICAgICAgICAgfQogCisgICAgICAg
IHZhciBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgaWYgKHBs
YXRmb3JtUXVldWVzLnBlcmZvcm1hbmNlICYmIHBsYXRmb3JtUXVldWVzLnBlcmZvcm1hbmNlLnJl
bGVhc2UpIHsKKyAgICAgICAgICAgIHZhciB2aWV3ID0gbmV3IEJ1aWxkYm90UGVyZm9ybWFuY2VR
dWV1ZVZpZXcocGxhdGZvcm1RdWV1ZXMucGVyZm9ybWFuY2UucmVsZWFzZSk7CisgICAgICAgICAg
ICBjZWxsLmFwcGVuZENoaWxkKHZpZXcuZWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBy
b3cuYXBwZW5kQ2hpbGQoY2VsbCk7CisKICAgICAgICAgaWYgKGhhc0VXUykgewogICAgICAgICAg
ICAgdmFyIGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwogCkluZGV4OiBUb29s
cy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9k
YXNoYm9hcmQvU2NyaXB0cy9XZWJLaXRCdWlsZGJvdC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9C
dWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNo
Ym9hcmQvU2NyaXB0cy9XZWJLaXRCdWlsZGJvdC5qcwkocmV2aXNpb24gMTczMTkxKQorKysgVG9v
bHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwv
ZGFzaGJvYXJkL1NjcmlwdHMvV2ViS2l0QnVpbGRib3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDEyICszMywxNCBAQCBXZWJLaXRCdWlsZGJvdCA9IGZ1bmN0aW9uKCkKICAgICAgICAgIkFwcGxl
IE1vdW50YWluTGlvbiBEZWJ1ZyBXSzEgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBs
YXRmb3JtLk1hY09TWE1vdW50YWluTGlvbiwgZGVidWc6IHRydWUsIHRlc3RlcjogdHJ1ZSwgdGVz
dENhdGVnb3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0MX0sCiAgICAgICAgICJBcHBs
ZSBNb3VudGFpbkxpb24gUmVsZWFzZSBXSzIgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJk
LlBsYXRmb3JtLk1hY09TWE1vdW50YWluTGlvbiwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6
IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQyfSwKICAgICAgICAgIkFwcGxlIE1vdW50YWlu
TGlvbiBEZWJ1ZyBXSzIgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLk1h
Y09TWE1vdW50YWluTGlvbiwgZGVidWc6IHRydWUsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5
OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0Mn0sCisgICAgICAgICJBcHBsZSBNb3VudGFp
bkxpb24gUmVsZWFzZSAoUGVyZikiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5NYWNP
U1hNb3VudGFpbkxpb24sIGRlYnVnOiBmYWxzZSwgcGVyZm9ybWFuY2U6IHRydWV9LAogICAgICAg
ICAiQXBwbGUgTWF2ZXJpY2tzIERlYnVnIChCdWlsZCkiOiB7cGxhdGZvcm06IERhc2hib2FyZC5Q
bGF0Zm9ybS5NYWNPU1hNYXZlcmlja3MsIGRlYnVnOiB0cnVlLCBidWlsZGVyOiB0cnVlLCBhcmNo
aXRlY3R1cmU6IEJ1aWxkYm90LkJ1aWxkQXJjaGl0ZWN0dXJlLlNpeHR5Rm91ckJpdH0sCiAgICAg
ICAgICJBcHBsZSBNYXZlcmlja3MgUmVsZWFzZSAoQnVpbGQpIjoge3BsYXRmb3JtOiBEYXNoYm9h
cmQuUGxhdGZvcm0uTWFjT1NYTWF2ZXJpY2tzLCBkZWJ1ZzogZmFsc2UsIGJ1aWxkZXI6IHRydWUs
IGFyY2hpdGVjdHVyZTogQnVpbGRib3QuQnVpbGRBcmNoaXRlY3R1cmUuU2l4dHlGb3VyQml0fSwK
ICAgICAgICAgIkFwcGxlIE1hdmVyaWNrcyBEZWJ1ZyBXSzEgKFRlc3RzKSI6IHtwbGF0Zm9ybTog
RGFzaGJvYXJkLlBsYXRmb3JtLk1hY09TWE1hdmVyaWNrcywgZGVidWc6IHRydWUsIHRlc3Rlcjog
dHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0MX0sCiAgICAg
ICAgICJBcHBsZSBNYXZlcmlja3MgRGVidWcgV0syIChUZXN0cykiOiB7cGxhdGZvcm06IERhc2hi
b2FyZC5QbGF0Zm9ybS5NYWNPU1hNYXZlcmlja3MsIGRlYnVnOiB0cnVlLCB0ZXN0ZXI6IHRydWUs
IHRlc3RDYXRlZ29yeTogQnVpbGRib3QuVGVzdENhdGVnb3J5LldlYktpdDJ9LAogICAgICAgICAi
QXBwbGUgTWF2ZXJpY2tzIFJlbGVhc2UgV0sxIChUZXN0cykiOiB7cGxhdGZvcm06IERhc2hib2Fy
ZC5QbGF0Zm9ybS5NYWNPU1hNYXZlcmlja3MsIGRlYnVnOiBmYWxzZSwgdGVzdGVyOiB0cnVlLCB0
ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQxfSwKICAgICAgICAgIkFw
cGxlIE1hdmVyaWNrcyBSZWxlYXNlIFdLMiAoVGVzdHMpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQu
UGxhdGZvcm0uTWFjT1NYTWF2ZXJpY2tzLCBkZWJ1ZzogZmFsc2UsIHRlc3RlcjogdHJ1ZSwgdGVz
dENhdGVnb3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0Mn0sCisgICAgICAgICJBcHBs
ZSBNYXZlcmlja3MgUmVsZWFzZSAoUGVyZikiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9y
bS5NYWNPU1hNYXZlcmlja3MsIGRlYnVnOiBmYWxzZSwgcGVyZm9ybWFuY2U6IHRydWV9LAogICAg
ICAgICAiQXBwbGUgV2luIERlYnVnIChCdWlsZCkiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0
Zm9ybS5XaW5kb3dzNywgZGVidWc6IHRydWUsIGJ1aWxkZXI6IHRydWUsIGFyY2hpdGVjdHVyZTog
QnVpbGRib3QuQnVpbGRBcmNoaXRlY3R1cmUuVGhpcnR5VHdvQml0fSwKICAgICAgICAgIkFwcGxl
IFdpbiBSZWxlYXNlIChCdWlsZCkiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5XaW5k
b3dzNywgYnVpbGRlcjogdHJ1ZSwgYXJjaGl0ZWN0dXJlOiBCdWlsZGJvdC5CdWlsZEFyY2hpdGVj
dHVyZS5UaGlydHlUd29CaXR9LAogICAgICAgICAiQXBwbGUgV2luIDcgRGVidWcgKFRlc3RzKSI6
IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLldpbmRvd3M3LCBkZWJ1ZzogdHJ1ZSwgdGVz
dGVyOiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQxfSwK
QEAgLTQ3LDcgKzQ5LDkgQEAgV2ViS2l0QnVpbGRib3QgPSBmdW5jdGlvbigpCiAgICAgICAgICJH
VEsgTGludXggNjQtYml0IFJlbGVhc2UgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBs
YXRmb3JtLkxpbnV4R1RLLCBkZWJ1ZzogZmFsc2UsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5
OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0Mn0sCiAgICAgICAgICJHVEsgTGludXggNjQt
Yml0IERlYnVnIChCdWlsZCkiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5MaW51eEdU
SywgZGVidWc6IHRydWUsIGJ1aWxkZXI6IHRydWUsIGFyY2hpdGVjdHVyZTogQnVpbGRib3QuQnVp
bGRBcmNoaXRlY3R1cmUuU2l4dHlGb3VyQml0fSwKICAgICAgICAgIkdUSyBMaW51eCA2NC1iaXQg
RGVidWcgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLkxpbnV4R1RLLCBk
ZWJ1ZzogdHJ1ZSwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRl
Z29yeS5XZWJLaXQyfSwKLSAgICAgICAgIkVGTCBMaW51eCA2NC1iaXQgUmVsZWFzZSBXSzIiOiB7
cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5MaW51eEVGTCwgdGVzdGVyOiB0cnVlLCB0ZXN0
Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQyfQorICAgICAgICAiR1RLIExp
bnV4IDY0LWJpdCBSZWxlYXNlIChQZXJmKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3Jt
LkxpbnV4R1RLLCBkZWJ1ZzogZmFsc2UsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWls
ZGJvdC5UZXN0Q2F0ZWdvcnkuUGVyZm9ybWFuY2V9LAorICAgICAgICAiRUZMIExpbnV4IDY0LWJp
dCBSZWxlYXNlIFdLMiI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLkxpbnV4RUZMLCB0
ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRib3QuVGVzdENhdGVnb3J5LldlYktpdDJ9
LAorICAgICAgICAiRUZMIExpbnV4IDY0LWJpdCBSZWxlYXNlIFdLMiAoUGVyZikiOiB7cGxhdGZv
cm06IERhc2hib2FyZC5QbGF0Zm9ybS5MaW51eEVGTCwgcGVyZm9ybWFuY2U6IHRydWV9CiAgICAg
fTsKIAogICAgIEJ1aWxkYm90LmNhbGwodGhpcywgImh0dHA6Ly9idWlsZC53ZWJraXQub3JnLyIs
IHF1ZXVlSW5mbyk7CkBAIC01OCw2ICs2Miw3IEBAIEJhc2VPYmplY3QuYWRkQ29uc3RydWN0b3JG
dW5jdGlvbnMoV2ViS2kKIFdlYktpdEJ1aWxkYm90LnByb3RvdHlwZSA9IHsKICAgICBjb25zdHJ1
Y3RvcjogV2ViS2l0QnVpbGRib3QsCiAgICAgX19wcm90b19fOiBCdWlsZGJvdC5wcm90b3R5cGUs
CisgICAgcGVyZl9kYXNoYm9hcmRfdXJsOiAiaHR0cHM6Ly9wZXJmLndlYmtpdC5vcmciLAogCiAg
ICAgbGF5b3V0VGVzdFJlc3VsdHNEaXJlY3RvcnlVUkxGb3JJdGVyYXRpb246IGZ1bmN0aW9uKGl0
ZXJhdGlvbikKICAgICB7CkluZGV4OiBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJr
aXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU3R5bGVzL01haW4uY3NzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL2Rhc2hib2FyZC9TdHlsZXMvTWFpbi5jc3MJKHJldmlzaW9uIDE3MzE5MSkK
KysrIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1Ymxp
Y19odG1sL2Rhc2hib2FyZC9TdHlsZXMvTWFpbi5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcg
Kzg5LDcgQEAgZGl2LmNlbGxCdXR0b24udW5oaWRlIHsKIGJvZHkgewogICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYigyMzMsIDIzMSwgMjIzKTsKICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAg
bWFyZ2luOiA1MHB4OworICAgIG1hcmdpbjogNTBweCAyNXB4IDUwcHggMjVweDsKIH0KIAogdGFi
bGUucXVldWUtZ3JpZCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237532</attachid>
            <date>2014-09-02 16:36:49 -0700</date>
            <delta_ts>2014-09-02 18:41:43 -0700</delta_ts>
            <desc>*Actual* implementation</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19333</size>
            <attacher name="Dana Burkart">dburkart</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE3MzE5MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMxIEBACisyMDE0LTA5LTAyICBEYW5hIEJ1cmthcnQgIDxkYnVya2FydEBhcHBsZS5jb20+
CisKKyAgICAgICAgRGFzaGJvYXJkIHNob3VsZCBzaG93IHBlcmZvcm1hbmNlIGJvdHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYzODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEJ1aWxkU2xhdmVT
dXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3Jp
cHRzL0J1aWxkYm90SXRlcmF0aW9uLmpzOgorICAgICAgICAoQnVpbGRib3RJdGVyYXRpb24ucHJv
dG90eXBlLl9wYXJzZURhdGEuY29sbGVjdFBlcmZUZXN0UmVzdWx0cyk6CisgICAgICAgIChCdWls
ZGJvdEl0ZXJhdGlvbi5wcm90b3R5cGUuX3BhcnNlRGF0YSk6CisgICAgICAgIFN1cHBvcnQgcG9z
c2libGUgcGVyZm9ybWFuY2UgZmFpbHVyZXMuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9C
dWlsZGJvdFF1ZXVlLmpzOgorICAgICAgICAoQnVpbGRib3RRdWV1ZSk6CisgICAgICAgIFN1cHBv
cnQgbmV3ICdwZXJmb3JtYW5jZScgYW5kICdwZXJmVHlwZScga2V5cy4KKworCisgICAgICAgICog
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFz
aGJvYXJkL1NjcmlwdHMvTWFpbi5qczoKKyAgICAgICAgQWRkIHBlcmZvcm1hbmNlIGNvbHVtbiB0
byB0aGUgbWFpbiBwYWdlLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Vi
a2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvV2ViS2l0QnVpbGRi
b3QuanM6CisgICAgICAgIChXZWJLaXRCdWlsZGJvdCk6CisgICAgICAgICogQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1N0eWxl
cy9NYWluLmNzczoKKyAgICAgICAgKGJvZHkpOgorICAgICAgICBNYWtlIHN1cmUgZXZlcnl0aGlu
ZyBmaXRzIG9uIDEzIGluY2ggc2NyZWVucy4KKworICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0
L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9pbmRleC5odG1s
OgorCiAyMDE0LTA5LTAyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIE1ha2Ugc3VyZSBXSzEgcHJlZnMgYXJlIGluaXRpYWxpemVkIGluIE1pbmlCcm93
c2VyCkluZGV4OiBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvaW5kZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9C
dWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNo
Ym9hcmQvaW5kZXguaHRtbAkocmV2aXNpb24gMTczMTkxKQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL2luZGV4
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgc3JjPSJTY3JpcHRzL0J1aWxkYm90UXVldWVWaWV3
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iU2NyaXB0cy9CdWlsZGJvdEJ1aWxkZXJR
dWV1ZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJTY3JpcHRzL0J1aWxkYm90
VGVzdGVyUXVldWVWaWV3LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU2NyaXB0cy9C
dWlsZGJvdFBlcmZvcm1hbmNlUXVldWVWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iU2NyaXB0cy9FV1NRdWV1ZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJT
Y3JpcHRzL1N0YXR1c0xpbmVWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iU2Ny
aXB0cy9TZXR0aW5ncy5qcyI+PC9zY3JpcHQ+CkluZGV4OiBUb29scy9CdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9C
dWlsZGJvdEl0ZXJhdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9CdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9C
dWlsZGJvdEl0ZXJhdGlvbi5qcwkocmV2aXNpb24gMTczMTkxKQorKysgVG9vbHMvQnVpbGRTbGF2
ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1Nj
cmlwdHMvQnVpbGRib3RJdGVyYXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDEw
IEBAIEJ1aWxkYm90SXRlcmF0aW9uLlByb2R1Y3RpdmVTdGVwcyA9IHsKICAgICAid2Via2l0cHkt
dGVzdCI6IDEsCiAgICAgIndlYmtpdHBlcmwtdGVzdCI6IDEsCiAgICAgImJpbmRpbmdzLWdlbmVy
YXRpb24tdGVzdHMiOiAxLAorICAgICJydW4gTWVtYnVzdGVyIE9TIE1lbW9yeSI6IDEsCisgICAg
InJ1biBzY3JvbGxwZXJmIjogMSwKKyAgICAicnVuIFBMVDMiOiAxLAorICAgICJwZXJmLXRlc3Qi
OiAxCiB9OwogCiBCdWlsZGJvdEl0ZXJhdGlvbi5FdmVudCA9IHsKQEAgLTIzMSw2ICsyMzUsMzYg
QEAgQnVpbGRib3RJdGVyYXRpb24ucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIHRl
c3RSZXN1bHRzOwogICAgICAgICB9CiAKKyAgICAgICAgZnVuY3Rpb24gY29sbGVjdFBlcmZUZXN0
UmVzdWx0cyhkYXRhLCBzdGVwTmFtZSkgeworICAgICAgICAgICAgdmFyIHRlc3RTdGVwID0gZGF0
YS5zdGVwcy5maW5kRmlyc3QoZnVuY3Rpb24oc3RlcCkgeyByZXR1cm4gc3RlcC5uYW1lID09PSBz
dGVwTmFtZTsgfSk7CisgICAgICAgICAgICBpZiAoIXRlc3RTdGVwKQorICAgICAgICAgICAgICAg
IHJldHVybiBudWxsOworCisgICAgICAgICAgICB2YXIgdGVzdFJlc3VsdHMgPSB7fTsKKworICAg
ICAgICAgICAgaWYgKCF0ZXN0U3RlcC5pc0ZpbmlzaGVkKSB7CisgICAgICAgICAgICAgICAgLy8g
VGhlIHN0ZXAgbmV2ZXIgZXZlbiByYW4sIG9yIGhhc24ndCBmaW5pc2hlZCBydW5uaW5nLgorICAg
ICAgICAgICAgICAgIHRlc3RSZXN1bHRzLmZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRlc3RSZXN1bHRzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0ZXN0
UmVzdWx0cy5maW5pc2hlZCA9IHRydWU7CisKKyAgICAgICAgICAgIGlmICghdGVzdFN0ZXAucmVz
dWx0cyB8fCAhdGVzdFN0ZXAucmVzdWx0c1swXSkgeworICAgICAgICAgICAgICAgIC8vIEFsbCB0
ZXN0cyBwYXNzZWQuCisgICAgICAgICAgICAgICAgdGVzdFJlc3VsdHMuYWxsUGFzc2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdFJlc3VsdHM7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHRlc3RSZXN1bHRzLmZhaWx1cmVDb3VudCA9ICh0ZXN0U3RlcC5yZXN1bHRz
WzBdKSA/IDEgOiAwOworCisgICAgICAgICAgICBpZiAoIXRlc3RSZXN1bHRzLmZhaWx1cmVDb3Vu
dCkgeworICAgICAgICAgICAgICAgIHRlc3RSZXN1bHRzLmVycm9yT2NjdXJyZWQgPSB0cnVlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdGVzdFJlc3VsdHM7CisgICAgICAg
IH0KKwogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5pZCB8fCB0aGlzLmlkID09PSBkYXRh
Lm51bWJlcik7CiAgICAgICAgIHRoaXMuaWQgPSBkYXRhLm51bWJlcjsKIApAQCAtMjc4LDYgKzMx
MiwyMSBAQCBCdWlsZGJvdEl0ZXJhdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBiaW5k
aW5nVGVzdFJlc3VsdHMgPSBjb2xsZWN0VGVzdFJlc3VsdHMuY2FsbCh0aGlzLCBkYXRhLCAiYmlu
ZGluZ3MtZ2VuZXJhdGlvbi10ZXN0cyIpOwogICAgICAgICB0aGlzLmJpbmRpbmdUZXN0UmVzdWx0
cyA9IGJpbmRpbmdUZXN0UmVzdWx0cyA/IG5ldyBCdWlsZGJvdFRlc3RSZXN1bHRzKHRoaXMsIGJp
bmRpbmdUZXN0UmVzdWx0cykgOiBudWxsOwogCisgICAgICAgIHZhciBwZXJmb3JtYW5jZVRlc3RS
ZXN1bHRzID0gY29sbGVjdFBlcmZUZXN0UmVzdWx0cy5jYWxsKHRoaXMsIGRhdGEsICJydW4gUExU
MyIpOworICAgICAgICB0aGlzLnBlcmZvcm1hbmNlVGVzdFJlc3VsdHMgPSBwZXJmb3JtYW5jZVRl
c3RSZXN1bHRzID8gbmV3IEJ1aWxkYm90VGVzdFJlc3VsdHModGhpcywgcGVyZm9ybWFuY2VUZXN0
UmVzdWx0cykgOiBudWxsOworCisgICAgICAgIHZhciB3ZWJraXRQZXJmb3JtYW5jZVRlc3RSZXN1
bHRzID0gY29sbGVjdFRlc3RSZXN1bHRzLmNhbGwodGhpcywgZGF0YSwgInBlcmYtdGVzdCIpOwor
ICAgICAgICB0aGlzLndlYmtpdFBlcmZvcm1hbmNlVGVzdFJlc3VsdHMgPSB3ZWJraXRQZXJmb3Jt
YW5jZVRlc3RSZXN1bHRzID8gbmV3IEJ1aWxkYm90VGVzdFJlc3VsdHModGhpcywgd2Via2l0UGVy
Zm9ybWFuY2VUZXN0UmVzdWx0cykgOiBudWxsOworCisgICAgICAgIHZhciBvc01lbW9yeVRlc3RS
ZXN1bHRzID0gY29sbGVjdFBlcmZUZXN0UmVzdWx0cy5jYWxsKHRoaXMsIGRhdGEsICJydW4gTWVt
YnVzdGVyIE9TIE1lbW9yeSIpOworICAgICAgICB0aGlzLm9zTWVtb3J5VGVzdFJlc3VsdHMgPSBv
c01lbW9yeVRlc3RSZXN1bHRzID8gbmV3IEJ1aWxkYm90VGVzdFJlc3VsdHModGhpcywgb3NNZW1v
cnlUZXN0UmVzdWx0cykgOiBudWxsOworCisgICAgICAgIHZhciBtZW1idXN0ZXJUZXN0UmVzdWx0
cyA9IGNvbGxlY3RQZXJmVGVzdFJlc3VsdHMuY2FsbCh0aGlzLCBkYXRhLCAicnVuIE1lbWJ1c3Rl
ciIpOworICAgICAgICB0aGlzLm1lbWJ1c3RlclRlc3RSZXN1bHRzID0gbWVtYnVzdGVyVGVzdFJl
c3VsdHMgPyBuZXcgQnVpbGRib3RUZXN0UmVzdWx0cyh0aGlzLCBtZW1idXN0ZXJUZXN0UmVzdWx0
cykgOiBudWxsOworCisgICAgICAgIHZhciBzY3JvbGxQZXJmVGVzdFJlc3VsdHMgPSBjb2xsZWN0
UGVyZlRlc3RSZXN1bHRzLmNhbGwodGhpcywgZGF0YSwgInJ1biBzY3JvbGxwZXJmIik7CisgICAg
ICAgIHRoaXMuc2Nyb2xsUGVyZlRlc3RSZXN1bHRzID0gc2Nyb2xsUGVyZlRlc3RSZXN1bHRzID8g
bmV3IEJ1aWxkYm90VGVzdFJlc3VsdHModGhpcywgc2Nyb2xsUGVyZlRlc3RSZXN1bHRzKSA6IG51
bGw7CisKICAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlOwogCiAgICAgICAgIHRoaXMuX2ZpcnN0
RmFpbGVkU3RlcCA9IGRhdGEuc3RlcHMuZmluZEZpcnN0KGZ1bmN0aW9uKHN0ZXApIHsgcmV0dXJu
IHN0ZXAucmVzdWx0c1swXSA9PT0gQnVpbGRib3RJdGVyYXRpb24uRkFJTFVSRTsgfSk7CkluZGV4
OiBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFBlcmZvcm1hbmNlUXVldWVWaWV3LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UGVyZm9ybWFuY2VRdWV1
ZVZpZXcuanMJKHJldmlzaW9uIDApCisrKyBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53
ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFBl
cmZvcm1hbmNlUXVldWVWaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworQnVpbGRib3RQZXJmb3JtYW5jZVF1ZXVlVmlldyA9IGZ1bmN0aW9u
KHF1ZXVlcykKK3sKKyAgICBCdWlsZGJvdFF1ZXVlVmlldy5jYWxsKHRoaXMsIFtdLCBxdWV1ZXMp
OworICAgIHRoaXMudXBkYXRlKCk7Cit9OworCitCYXNlT2JqZWN0LmFkZENvbnN0cnVjdG9yRnVu
Y3Rpb25zKEJ1aWxkYm90UGVyZm9ybWFuY2VRdWV1ZVZpZXcpOworCitCdWlsZGJvdFBlcmZvcm1h
bmNlUXVldWVWaWV3LnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogQnVpbGRib3RQZXJm
b3JtYW5jZVF1ZXVlVmlldywKKyAgICBfX3Byb3RvX186IEJ1aWxkYm90UXVldWVWaWV3LnByb3Rv
dHlwZSwKKworICAgIHVwZGF0ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgUXVldWVWaWV3
LnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzKTsKKworICAgICAgICB0aGlzLmVsZW1lbnQucmVt
b3ZlQ2hpbGRyZW4oKTsKKworICAgICAgICBmdW5jdGlvbiBhcHBlbmRQZXJmUXVldWVTdGF0dXMo
cXVldWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBhcHBlbmRlZFN0YXR1cyA9IGZhbHNl
OworCisgICAgICAgICAgICB2YXIgbGltaXQgPSAyOworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBxdWV1ZS5pdGVyYXRpb25zLmxlbmd0aCAmJiBsaW1pdCA+IDA7ICsraSkgeworICAg
ICAgICAgICAgICAgIHZhciBpdGVyYXRpb24gPSBxdWV1ZS5pdGVyYXRpb25zW2ldOworICAgICAg
ICAgICAgICAgIGlmICghaXRlcmF0aW9uLmxvYWRlZCB8fCAhaXRlcmF0aW9uLmZpbmlzaGVkKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIC0tbGltaXQ7
CisKKyAgICAgICAgICAgICAgICB2YXIgd2lsbEhhdmVBbm90aGVyU3RhdHVzTGluZSA9IGkgKyAx
IDwgcXVldWUuaXRlcmF0aW9ucy5sZW5ndGggJiYgbGltaXQgPiAwICYmICFpdGVyYXRpb24uc3Vj
Y2Vzc2Z1bDsgLy8gVGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCBhcyB0aGUgcmVtYWluaW5nIGl0
ZXJhdGlvbnMgbWF5IG5vdCBiZSBmaW5pc2hlZCBvciBsb2FkZWQgeWV0LCBidXQgY2xvc2UgZW5v
dWdoLgorICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlRWxlbWVudCA9IHRoaXMucmV2aXNpb25D
b250ZW50Rm9ySXRlcmF0aW9uKGl0ZXJhdGlvbiwgKGl0ZXJhdGlvbi5wcm9kdWN0aXZlICYmIHdp
bGxIYXZlQW5vdGhlclN0YXR1c0xpbmUpID8gaXRlcmF0aW9uLnByZXZpb3VzUHJvZHVjdGl2ZUl0
ZXJhdGlvbiA6IG51bGwpOworCisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBpdGVyYXRp
b24ucGVyZm9ybWFuY2UgfHwgaXRlcmF0aW9uLm9zTWVtb3J5VGVzdFJlc3VsdHMgfHwgaXRlcmF0
aW9uLnNjcm9sbFBlcmZUZXN0UmVzdWx0cyB8fCBpdGVyYXRpb24ud2Via2l0UGVyZm9ybWFuY2VU
ZXN0UmVzdWx0cyB8fCBpdGVyYXRpb24ubWVtYnVzdGVyVGVzdFJlc3VsdHMgfHwge2ZhaWx1cmVD
b3VudDogMH07CisKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmF0aW9uLnN1Y2Nlc3NmdWwpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IG5ldyBTdGF0dXNMaW5lVmlldyhtZXNz
YWdlRWxlbWVudCwgU3RhdHVzTGluZVZpZXcuU3RhdHVzLkdvb2QsICJhbGwgdGVzdHMgcGFzc2Vk
Iik7CisgICAgICAgICAgICAgICAgICAgIGxpbWl0ID0gMDsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFpdGVyYXRpb24ucHJvZHVjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
dXJsID0gaXRlcmF0aW9uLnF1ZXVlLmJ1aWxkYm90LmJ1aWxkUGFnZVVSTEZvckl0ZXJhdGlvbihp
dGVyYXRpb24pOworICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gbmV3IFN0YXR1c0xp
bmVWaWV3KG1lc3NhZ2VFbGVtZW50LCBTdGF0dXNMaW5lVmlldy5TdGF0dXMuRGFuZ2VyLCBpdGVy
YXRpb24udGV4dCwgdW5kZWZpbmVkLCB1cmwpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
cmVzdWx0cy5mYWlsdXJlQ291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGl0
ZXJhdGlvbi5xdWV1ZS5idWlsZGJvdC5idWlsZFBhZ2VVUkxGb3JJdGVyYXRpb24oaXRlcmF0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IG5ldyBTdGF0dXNMaW5lVmlldyht
ZXNzYWdlRWxlbWVudCwgU3RhdHVzTGluZVZpZXcuU3RhdHVzLkJhZCwgaXRlcmF0aW9uLnRleHQs
IHJlc3VsdHMuZmFpbHVyZUNvdW50LCB1cmwpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBuZXcgU3RhdHVzTGluZVZpZXcobWVzc2Fn
ZUVsZW1lbnQsIFN0YXR1c0xpbmVWaWV3LlN0YXR1cy5EYW5nZXIsICJ1bmtub3duIik7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxk
KHN0YXR1cy5lbGVtZW50KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRlZFN0YXR1cyA9IHRydWU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghYXBwZW5kZWRTdGF0dXMpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gbmV3IFN0YXR1c0xpbmVWaWV3KCJ1bmtub3duIiwg
U3RhdHVzTGluZVZpZXcuU3RhdHVzLk5ldXRyYWwsICJsYXN0IHBhc3NpbmcgYnVpbGQiKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3RhdHVzLmVsZW1lbnQpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZXcgUG9wb3ZlclRyYWNrZXIoc3RhdHVzLnN0
YXR1c0J1YmJsZUVsZW1lbnQsIHRoaXMuX3ByZXNlbnRQb3BvdmVyRm9yUGVyZm9ybWFuY2VRdWV1
ZS5iaW5kKHRoaXMpLCBxdWV1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBhcHBl
bmRCdWlsZChxdWV1ZXMsIGxhYmVsKQorICAgICAgICB7CisgICAgICAgICAgICBxdWV1ZXMuZm9y
RWFjaChmdW5jdGlvbihxdWV1ZSkgeworICAgICAgICAgICAgICAgIHZhciByZWxlYXNlTGFiZWwg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CisgICAgICAgICAgICAgICAgcmVsZWFzZUxh
YmVsLmNsYXNzTGlzdC5hZGQoInF1ZXVlTGFiZWwiKTsKKyAgICAgICAgICAgICAgICByZWxlYXNl
TGFiZWwudGV4dENvbnRlbnQgPSBxdWV1ZS5wZXJmVHlwZSA/IHF1ZXVlLnBlcmZUeXBlIDogbGFi
ZWw7CisgICAgICAgICAgICAgICAgcmVsZWFzZUxhYmVsLmhyZWYgPSBxdWV1ZS5vdmVydmlld1VS
TDsKKyAgICAgICAgICAgICAgICByZWxlYXNlTGFiZWwudGFyZ2V0ID0gIl9ibGFuayI7CisgICAg
ICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHJlbGVhc2VMYWJlbCk7CisKKyAg
ICAgICAgICAgICAgICBhcHBlbmRQZXJmUXVldWVTdGF0dXMuY2FsbCh0aGlzLCBxdWV1ZSk7Cisg
ICAgICAgICAgICB9LmJpbmQodGhpcykpOworICAgICAgICB9CisKKyAgICAgICAgYXBwZW5kQnVp
bGQuY2FsbCh0aGlzLCB0aGlzLnJlbGVhc2VRdWV1ZXMsICdSZWxlYXNlJyk7CisgICAgfSwKKwor
ICAgIGFkZExpbmtUb1JvdzogZnVuY3Rpb24ocm93RWxlbWVudCwgY2xhc3NOYW1lLCB0ZXh0LCB1
cmwpCisgICAgeworICAgICAgICB2YXIgbGlua0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJhIik7CisgICAgICAgIGxpbmtFbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKKyAg
ICAgICAgbGlua0VsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OworICAgICAgICBsaW5rRWxlbWVu
dC5ocmVmID0gdXJsOworICAgICAgICBsaW5rRWxlbWVudC50YXJnZXQgPSAiX2JsYW5rIjsKKyAg
ICAgICAgcm93RWxlbWVudC5hcHBlbmRDaGlsZChsaW5rRWxlbWVudCk7CisgICAgfSwKKworICAg
IF9wb3BvdmVyQ29udGVudEZvclBlcmZvcm1hbmNlUXVldWU6IGZ1bmN0aW9uKHF1ZXVlKQorICAg
IHsKKyAgICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
KyAgICAgICAgY29udGVudC5jbGFzc05hbWUgPSAiZXdzLXBvcG92ZXIiOworCisgICAgICAgIHZh
ciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGhpcy5hZGRM
aW5rVG9Sb3cocm93LCAiZGFzYm9hcmQtbGluayIsICJQZXJmb3JtYW5jZSBEYXNoYm9hcmQiLCBx
dWV1ZS5idWlsZGJvdC5wZXJmX2Rhc2hib2FyZF91cmwpOworCisgICAgICAgIGNvbnRlbnQuYXBw
ZW5kQ2hpbGQocm93KTsKKworICAgICAgICByZXR1cm4gY29udGVudDsKKyAgICB9LAorCisgICAg
X3ByZXNlbnRQb3BvdmVyRm9yUGVyZm9ybWFuY2VRdWV1ZTogZnVuY3Rpb24oZWxlbWVudCwgcG9w
b3ZlciwgcXVldWUpCisgICAgeworICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuX3BvcG92ZXJD
b250ZW50Rm9yUGVyZm9ybWFuY2VRdWV1ZShxdWV1ZSk7CisKKyAgICAgICAgdmFyIHJlY3QgPSBE
YXNoYm9hcmQuUmVjdC5yZWN0RnJvbUNsaWVudFJlY3QoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKSk7CisgICAgICAgIHBvcG92ZXIuY29udGVudCA9IGNvbnRlbnQ7CisgICAgICAgIHBv
cG92ZXIucHJlc2VudChyZWN0LCBbRGFzaGJvYXJkLlJlY3RFZGdlLk1JTl9ZLCBEYXNoYm9hcmQu
UmVjdEVkZ2UuTUFYX1ksIERhc2hib2FyZC5SZWN0RWRnZS5NQVhfWCwgRGFzaGJvYXJkLlJlY3RF
ZGdlLk1JTl9YXSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CkluZGV4OiBUb29s
cy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9k
YXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0J1
aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hi
b2FyZC9TY3JpcHRzL0J1aWxkYm90UXVldWUuanMJKHJldmlzaW9uIDE3MzE5MSkKKysrIFRvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UXVldWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTM4LDgg
KzM4LDEwIEBAIEJ1aWxkYm90UXVldWUgPSBmdW5jdGlvbihidWlsZGJvdCwgaWQsIGkKICAgICB0
aGlzLmRlYnVnID0gaW5mby5kZWJ1ZyB8fCBmYWxzZTsKICAgICB0aGlzLmJ1aWxkZXIgPSBpbmZv
LmJ1aWxkZXIgfHwgZmFsc2U7CiAgICAgdGhpcy50ZXN0ZXIgPSBpbmZvLnRlc3RlciB8fCBmYWxz
ZTsKKyAgICB0aGlzLnBlcmZvcm1hbmNlID0gaW5mby5wZXJmb3JtYW5jZSB8fCBmYWxzZTsKICAg
ICB0aGlzLmFyY2hpdGVjdHVyZSA9IGluZm8uYXJjaGl0ZWN0dXJlIHx8IG51bGw7CiAgICAgdGhp
cy50ZXN0Q2F0ZWdvcnkgPSBpbmZvLnRlc3RDYXRlZ29yeSB8fCBudWxsOworICAgIHRoaXMucGVy
ZlR5cGUgPSBpbmZvLnBlcmZUeXBlIHx8IG51bGw7CiAKICAgICB0aGlzLml0ZXJhdGlvbnMgPSBb
XTsKICAgICB0aGlzLl9rbm93bkl0ZXJhdGlvbnMgPSB7fTsKSW5kZXg6IFRvb2xzL0J1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9T
Y3JpcHRzL01haW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWFpbi5q
cwkocmV2aXNpb24gMTczMTkxKQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Vi
a2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWFpbi5qcwkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBmb3IgKHZhciBpID0gMDsgaSA8IGJ1aWxkYm90
cy5sZW5ndGg7ICsrCiAgICAgICAgICAgICBjYXRlZ29yeU5hbWUgPSAiYnVpbGRlcnMiOwogICAg
ICAgICB9IGVsc2UgaWYgKHF1ZXVlLnRlc3RlcikgewogICAgICAgICAgICAgY2F0ZWdvcnlOYW1l
ID0gcXVldWUudGVzdENhdGVnb3J5OworICAgICAgICB9IGVsc2UgaWYgKHF1ZXVlLnBlcmZvcm1h
bmNlKSB7CisgICAgICAgICAgICBjYXRlZ29yeU5hbWUgPSAicGVyZm9ybWFuY2UiOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIlVua25vd24gcXVldWUgdHlw
ZS4iKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ4LDYgKzE1MCwxMCBAQCBmdW5jdGlv
biBkb2N1bWVudFJlYWR5KCkKICAgICAgICAgcm93LmFwcGVuZENoaWxkKGhlYWRlcik7CiAgICAg
fQogCisgICAgdmFyIGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7CisgICAg
aGVhZGVyLnRleHRDb250ZW50ID0gIlBlcmZvcm1hbmNlIjsKKyAgICByb3cuYXBwZW5kQ2hpbGQo
aGVhZGVyKTsKKwogICAgIGlmIChoYXNFV1MpIHsKICAgICAgICAgdmFyIGhlYWRlciA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7CiAgICAgICAgIGhlYWRlci50ZXh0Q29udGVudCA9ICJF
V1MiOwpAQCAtMjA2LDYgKzIxMiwxNCBAQCBmdW5jdGlvbiBkb2N1bWVudFJlYWR5KCkKICAgICAg
ICAgICAgIHJvdy5hcHBlbmRDaGlsZChjZWxsKTsKICAgICAgICAgfQogCisgICAgICAgIHZhciBj
ZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgaWYgKHBsYXRmb3Jt
UXVldWVzLnBlcmZvcm1hbmNlICYmIHBsYXRmb3JtUXVldWVzLnBlcmZvcm1hbmNlLnJlbGVhc2Up
IHsKKyAgICAgICAgICAgIHZhciB2aWV3ID0gbmV3IEJ1aWxkYm90UGVyZm9ybWFuY2VRdWV1ZVZp
ZXcocGxhdGZvcm1RdWV1ZXMucGVyZm9ybWFuY2UucmVsZWFzZSk7CisgICAgICAgICAgICBjZWxs
LmFwcGVuZENoaWxkKHZpZXcuZWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICByb3cuYXBw
ZW5kQ2hpbGQoY2VsbCk7CisKICAgICAgICAgaWYgKGhhc0VXUykgewogICAgICAgICAgICAgdmFy
IGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwogCkluZGV4OiBUb29scy9CdWls
ZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9h
cmQvU2NyaXB0cy9XZWJLaXRCdWlsZGJvdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9CdWlsZFNs
YXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQv
U2NyaXB0cy9XZWJLaXRCdWlsZGJvdC5qcwkocmV2aXNpb24gMTczMTkxKQorKysgVG9vbHMvQnVp
bGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJv
YXJkL1NjcmlwdHMvV2ViS2l0QnVpbGRib3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICsz
MywxNCBAQCBXZWJLaXRCdWlsZGJvdCA9IGZ1bmN0aW9uKCkKICAgICAgICAgIkFwcGxlIE1vdW50
YWluTGlvbiBEZWJ1ZyBXSzEgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3Jt
Lk1hY09TWE1vdW50YWluTGlvbiwgZGVidWc6IHRydWUsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVn
b3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0MX0sCiAgICAgICAgICJBcHBsZSBNb3Vu
dGFpbkxpb24gUmVsZWFzZSBXSzIgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRm
b3JtLk1hY09TWE1vdW50YWluTGlvbiwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxk
Ym90LlRlc3RDYXRlZ29yeS5XZWJLaXQyfSwKICAgICAgICAgIkFwcGxlIE1vdW50YWluTGlvbiBE
ZWJ1ZyBXSzIgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLk1hY09TWE1v
dW50YWluTGlvbiwgZGVidWc6IHRydWUsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWls
ZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0Mn0sCisgICAgICAgICJBcHBsZSBNb3VudGFpbkxpb24g
UmVsZWFzZSAoUGVyZikiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5NYWNPU1hNb3Vu
dGFpbkxpb24sIGRlYnVnOiBmYWxzZSwgcGVyZm9ybWFuY2U6IHRydWV9LAogICAgICAgICAiQXBw
bGUgTWF2ZXJpY2tzIERlYnVnIChCdWlsZCkiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9y
bS5NYWNPU1hNYXZlcmlja3MsIGRlYnVnOiB0cnVlLCBidWlsZGVyOiB0cnVlLCBhcmNoaXRlY3R1
cmU6IEJ1aWxkYm90LkJ1aWxkQXJjaGl0ZWN0dXJlLlNpeHR5Rm91ckJpdH0sCiAgICAgICAgICJB
cHBsZSBNYXZlcmlja3MgUmVsZWFzZSAoQnVpbGQpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxh
dGZvcm0uTWFjT1NYTWF2ZXJpY2tzLCBkZWJ1ZzogZmFsc2UsIGJ1aWxkZXI6IHRydWUsIGFyY2hp
dGVjdHVyZTogQnVpbGRib3QuQnVpbGRBcmNoaXRlY3R1cmUuU2l4dHlGb3VyQml0fSwKICAgICAg
ICAgIkFwcGxlIE1hdmVyaWNrcyBEZWJ1ZyBXSzEgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJv
YXJkLlBsYXRmb3JtLk1hY09TWE1hdmVyaWNrcywgZGVidWc6IHRydWUsIHRlc3RlcjogdHJ1ZSwg
dGVzdENhdGVnb3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0MX0sCiAgICAgICAgICJB
cHBsZSBNYXZlcmlja3MgRGVidWcgV0syIChUZXN0cykiOiB7cGxhdGZvcm06IERhc2hib2FyZC5Q
bGF0Zm9ybS5NYWNPU1hNYXZlcmlja3MsIGRlYnVnOiB0cnVlLCB0ZXN0ZXI6IHRydWUsIHRlc3RD
YXRlZ29yeTogQnVpbGRib3QuVGVzdENhdGVnb3J5LldlYktpdDJ9LAogICAgICAgICAiQXBwbGUg
TWF2ZXJpY2tzIFJlbGVhc2UgV0sxIChUZXN0cykiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0
Zm9ybS5NYWNPU1hNYXZlcmlja3MsIGRlYnVnOiBmYWxzZSwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0
ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQxfSwKICAgICAgICAgIkFwcGxlIE1h
dmVyaWNrcyBSZWxlYXNlIFdLMiAoVGVzdHMpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZv
cm0uTWFjT1NYTWF2ZXJpY2tzLCBkZWJ1ZzogZmFsc2UsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVn
b3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0Mn0sCisgICAgICAgICJBcHBsZSBNYXZl
cmlja3MgUmVsZWFzZSAoUGVyZikiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5NYWNP
U1hNYXZlcmlja3MsIGRlYnVnOiBmYWxzZSwgcGVyZm9ybWFuY2U6IHRydWV9LAogICAgICAgICAi
QXBwbGUgV2luIERlYnVnIChCdWlsZCkiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5X
aW5kb3dzNywgZGVidWc6IHRydWUsIGJ1aWxkZXI6IHRydWUsIGFyY2hpdGVjdHVyZTogQnVpbGRi
b3QuQnVpbGRBcmNoaXRlY3R1cmUuVGhpcnR5VHdvQml0fSwKICAgICAgICAgIkFwcGxlIFdpbiBS
ZWxlYXNlIChCdWlsZCkiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5XaW5kb3dzNywg
YnVpbGRlcjogdHJ1ZSwgYXJjaGl0ZWN0dXJlOiBCdWlsZGJvdC5CdWlsZEFyY2hpdGVjdHVyZS5U
aGlydHlUd29CaXR9LAogICAgICAgICAiQXBwbGUgV2luIDcgRGVidWcgKFRlc3RzKSI6IHtwbGF0
Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLldpbmRvd3M3LCBkZWJ1ZzogdHJ1ZSwgdGVzdGVyOiB0
cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQxfSwKQEAgLTQ3
LDcgKzQ5LDkgQEAgV2ViS2l0QnVpbGRib3QgPSBmdW5jdGlvbigpCiAgICAgICAgICJHVEsgTGlu
dXggNjQtYml0IFJlbGVhc2UgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3Jt
LkxpbnV4R1RLLCBkZWJ1ZzogZmFsc2UsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWls
ZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0Mn0sCiAgICAgICAgICJHVEsgTGludXggNjQtYml0IERl
YnVnIChCdWlsZCkiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5MaW51eEdUSywgZGVi
dWc6IHRydWUsIGJ1aWxkZXI6IHRydWUsIGFyY2hpdGVjdHVyZTogQnVpbGRib3QuQnVpbGRBcmNo
aXRlY3R1cmUuU2l4dHlGb3VyQml0fSwKICAgICAgICAgIkdUSyBMaW51eCA2NC1iaXQgRGVidWcg
KFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLkxpbnV4R1RLLCBkZWJ1Zzog
dHJ1ZSwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5X
ZWJLaXQyfSwKLSAgICAgICAgIkVGTCBMaW51eCA2NC1iaXQgUmVsZWFzZSBXSzIiOiB7cGxhdGZv
cm06IERhc2hib2FyZC5QbGF0Zm9ybS5MaW51eEVGTCwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdv
cnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQyfQorICAgICAgICAiR1RLIExpbnV4IDY0
LWJpdCBSZWxlYXNlIChQZXJmKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLkxpbnV4
R1RLLCBkZWJ1ZzogZmFsc2UsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJvdC5U
ZXN0Q2F0ZWdvcnkuUGVyZm9ybWFuY2V9LAorICAgICAgICAiRUZMIExpbnV4IDY0LWJpdCBSZWxl
YXNlIFdLMiI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLkxpbnV4RUZMLCB0ZXN0ZXI6
IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRib3QuVGVzdENhdGVnb3J5LldlYktpdDJ9LAorICAg
ICAgICAiRUZMIExpbnV4IDY0LWJpdCBSZWxlYXNlIFdLMiAoUGVyZikiOiB7cGxhdGZvcm06IERh
c2hib2FyZC5QbGF0Zm9ybS5MaW51eEVGTCwgcGVyZm9ybWFuY2U6IHRydWV9CiAgICAgfTsKIAog
ICAgIEJ1aWxkYm90LmNhbGwodGhpcywgImh0dHA6Ly9idWlsZC53ZWJraXQub3JnLyIsIHF1ZXVl
SW5mbyk7CkBAIC01OCw2ICs2Miw3IEBAIEJhc2VPYmplY3QuYWRkQ29uc3RydWN0b3JGdW5jdGlv
bnMoV2ViS2kKIFdlYktpdEJ1aWxkYm90LnByb3RvdHlwZSA9IHsKICAgICBjb25zdHJ1Y3Rvcjog
V2ViS2l0QnVpbGRib3QsCiAgICAgX19wcm90b19fOiBCdWlsZGJvdC5wcm90b3R5cGUsCisgICAg
cGVyZl9kYXNoYm9hcmRfdXJsOiAiaHR0cHM6Ly9wZXJmLndlYmtpdC5vcmciLAogCiAgICAgbGF5
b3V0VGVzdFJlc3VsdHNEaXJlY3RvcnlVUkxGb3JJdGVyYXRpb246IGZ1bmN0aW9uKGl0ZXJhdGlv
bikKICAgICB7CkluZGV4OiBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU3R5bGVzL01haW4uY3NzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1Ymxp
Y19odG1sL2Rhc2hib2FyZC9TdHlsZXMvTWFpbi5jc3MJKHJldmlzaW9uIDE3MzE5MSkKKysrIFRv
b2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1s
L2Rhc2hib2FyZC9TdHlsZXMvTWFpbi5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcg
QEAgZGl2LmNlbGxCdXR0b24udW5oaWRlIHsKIGJvZHkgewogICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYigyMzMsIDIzMSwgMjIzKTsKICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgbWFyZ2lu
OiA1MHB4OworICAgIG1hcmdpbjogNTBweCAyNXB4IDUwcHggMjVweDsKIH0KIAogdGFibGUucXVl
dWUtZ3JpZCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237533</attachid>
            <date>2014-09-02 16:47:47 -0700</date>
            <delta_ts>2014-09-02 18:41:43 -0700</delta_ts>
            <desc>Update ChangeLog to account for new BuildbotPerformanceQueueView class.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19521</size>
            <attacher name="Dana Burkart">dburkart</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE3MzE5MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM0IEBACisyMDE0LTA5LTAyICBEYW5hIEJ1cmthcnQgIDxkYnVya2FydEBhcHBsZS5jb20+
CisKKyAgICAgICAgRGFzaGJvYXJkIHNob3VsZCBzaG93IHBlcmZvcm1hbmNlIGJvdHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYzODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEJ1aWxkU2xhdmVT
dXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3Jp
cHRzL0J1aWxkYm90SXRlcmF0aW9uLmpzOgorICAgICAgICAoQnVpbGRib3RJdGVyYXRpb24ucHJv
dG90eXBlLl9wYXJzZURhdGEuY29sbGVjdFBlcmZUZXN0UmVzdWx0cyk6CisgICAgICAgIChCdWls
ZGJvdEl0ZXJhdGlvbi5wcm90b3R5cGUuX3BhcnNlRGF0YSk6CisgICAgICAgIFN1cHBvcnQgcG9z
c2libGUgcGVyZm9ybWFuY2UgZmFpbHVyZXMuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9C
dWlsZGJvdFBlcmZvcm1hbmNlUXVldWVWaWV3LmpzOgorICAgICAgICBOZXcgUXVldWVWaWV3IHRv
IG1hbmFnZSB0aGUgd2F5IHdlIHByZXNlbnQgcGVyZm9ybWFuY2UgZGF0YS4KKworICAgICAgICAq
IEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UXVldWUuanM6CisgICAgICAgIChCdWlsZGJvdFF1ZXVl
KToKKyAgICAgICAgU3VwcG9ydCBuZXcgJ3BlcmZvcm1hbmNlJyBhbmQgJ3BlcmZUeXBlJyBrZXlz
LgorCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9NYWluLmpzOgorICAgICAgICBBZGQgcGVy
Zm9ybWFuY2UgY29sdW1uIHRvIHRoZSBtYWluIHBhZ2UuCisKKyAgICAgICAgKiBCdWlsZFNsYXZl
U3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2Ny
aXB0cy9XZWJLaXRCdWlsZGJvdC5qczoKKyAgICAgICAgKFdlYktpdEJ1aWxkYm90KToKKyAgICAg
ICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRt
bC9kYXNoYm9hcmQvU3R5bGVzL01haW4uY3NzOgorICAgICAgICAoYm9keSk6CisgICAgICAgIE1h
a2Ugc3VyZSBldmVyeXRoaW5nIGZpdHMgb24gMTMgaW5jaCBzY3JlZW5zLgorCisgICAgICAgICog
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFz
aGJvYXJkL2luZGV4Lmh0bWw6CisKIDIwMTQtMDktMDIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBzdXJlIFdLMSBwcmVmcyBhcmUgaW5pdGlh
bGl6ZWQgaW4gTWluaUJyb3dzZXIKSW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9pbmRleC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL2Rhc2hib2FyZC9pbmRleC5odG1sCShyZXZpc2lvbiAxNzMxOTEpCisrKyBU
b29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRt
bC9kYXNoYm9hcmQvaW5kZXguaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCBzcmM9IlNjcmlwdHMv
QnVpbGRib3RRdWV1ZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJTY3JpcHRz
L0J1aWxkYm90QnVpbGRlclF1ZXVlVmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9
IlNjcmlwdHMvQnVpbGRib3RUZXN0ZXJRdWV1ZVZpZXcuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgc3JjPSJTY3JpcHRzL0J1aWxkYm90UGVyZm9ybWFuY2VRdWV1ZVZpZXcuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgc3JjPSJTY3JpcHRzL0VXU1F1ZXVlVmlldy5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IlNjcmlwdHMvU3RhdHVzTGluZVZpZXcuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJTY3JpcHRzL1NldHRpbmdzLmpzIj48L3NjcmlwdD4KSW5kZXg6IFRvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL0J1aWxkYm90SXRlcmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL0J1aWxkYm90SXRlcmF0aW9uLmpzCShyZXZpc2lvbiAxNzMxOTEpCisr
KyBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdEl0ZXJhdGlvbi5qcwkod29ya2luZyBjb3B5
KQpAQCAtNzksNiArNzksMTAgQEAgQnVpbGRib3RJdGVyYXRpb24uUHJvZHVjdGl2ZVN0ZXBzID0g
ewogICAgICJ3ZWJraXRweS10ZXN0IjogMSwKICAgICAid2Via2l0cGVybC10ZXN0IjogMSwKICAg
ICAiYmluZGluZ3MtZ2VuZXJhdGlvbi10ZXN0cyI6IDEsCisgICAgInJ1biBNZW1idXN0ZXIgT1Mg
TWVtb3J5IjogMSwKKyAgICAicnVuIHNjcm9sbHBlcmYiOiAxLAorICAgICJydW4gUExUMyI6IDEs
CisgICAgInBlcmYtdGVzdCI6IDEKIH07CiAKIEJ1aWxkYm90SXRlcmF0aW9uLkV2ZW50ID0gewpA
QCAtMjMxLDYgKzIzNSwzNiBAQCBCdWlsZGJvdEl0ZXJhdGlvbi5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICByZXR1cm4gdGVzdFJlc3VsdHM7CiAgICAgICAgIH0KIAorICAgICAgICBmdW5jdGlv
biBjb2xsZWN0UGVyZlRlc3RSZXN1bHRzKGRhdGEsIHN0ZXBOYW1lKSB7CisgICAgICAgICAgICB2
YXIgdGVzdFN0ZXAgPSBkYXRhLnN0ZXBzLmZpbmRGaXJzdChmdW5jdGlvbihzdGVwKSB7IHJldHVy
biBzdGVwLm5hbWUgPT09IHN0ZXBOYW1lOyB9KTsKKyAgICAgICAgICAgIGlmICghdGVzdFN0ZXAp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgICAgIHZhciB0ZXN0UmVz
dWx0cyA9IHt9OworCisgICAgICAgICAgICBpZiAoIXRlc3RTdGVwLmlzRmluaXNoZWQpIHsKKyAg
ICAgICAgICAgICAgICAvLyBUaGUgc3RlcCBuZXZlciBldmVuIHJhbiwgb3IgaGFzbid0IGZpbmlz
aGVkIHJ1bm5pbmcuCisgICAgICAgICAgICAgICAgdGVzdFJlc3VsdHMuZmluaXNoZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdFJlc3VsdHM7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHRlc3RSZXN1bHRzLmZpbmlzaGVkID0gdHJ1ZTsKKworICAgICAgICAgICAg
aWYgKCF0ZXN0U3RlcC5yZXN1bHRzIHx8ICF0ZXN0U3RlcC5yZXN1bHRzWzBdKSB7CisgICAgICAg
ICAgICAgICAgLy8gQWxsIHRlc3RzIHBhc3NlZC4KKyAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0
cy5hbGxQYXNzZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0UmVzdWx0czsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGVzdFJlc3VsdHMuZmFpbHVyZUNvdW50ID0g
KHRlc3RTdGVwLnJlc3VsdHNbMF0pID8gMSA6IDA7CisKKyAgICAgICAgICAgIGlmICghdGVzdFJl
c3VsdHMuZmFpbHVyZUNvdW50KSB7CisgICAgICAgICAgICAgICAgdGVzdFJlc3VsdHMuZXJyb3JP
Y2N1cnJlZCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0ZXN0
UmVzdWx0czsKKyAgICAgICAgfQorCiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLmlkIHx8
IHRoaXMuaWQgPT09IGRhdGEubnVtYmVyKTsKICAgICAgICAgdGhpcy5pZCA9IGRhdGEubnVtYmVy
OwogCkBAIC0yNzgsNiArMzEyLDIxIEBAIEJ1aWxkYm90SXRlcmF0aW9uLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdmFyIGJpbmRpbmdUZXN0UmVzdWx0cyA9IGNvbGxlY3RUZXN0UmVzdWx0cy5jYWxs
KHRoaXMsIGRhdGEsICJiaW5kaW5ncy1nZW5lcmF0aW9uLXRlc3RzIik7CiAgICAgICAgIHRoaXMu
YmluZGluZ1Rlc3RSZXN1bHRzID0gYmluZGluZ1Rlc3RSZXN1bHRzID8gbmV3IEJ1aWxkYm90VGVz
dFJlc3VsdHModGhpcywgYmluZGluZ1Rlc3RSZXN1bHRzKSA6IG51bGw7CiAKKyAgICAgICAgdmFy
IHBlcmZvcm1hbmNlVGVzdFJlc3VsdHMgPSBjb2xsZWN0UGVyZlRlc3RSZXN1bHRzLmNhbGwodGhp
cywgZGF0YSwgInJ1biBQTFQzIik7CisgICAgICAgIHRoaXMucGVyZm9ybWFuY2VUZXN0UmVzdWx0
cyA9IHBlcmZvcm1hbmNlVGVzdFJlc3VsdHMgPyBuZXcgQnVpbGRib3RUZXN0UmVzdWx0cyh0aGlz
LCBwZXJmb3JtYW5jZVRlc3RSZXN1bHRzKSA6IG51bGw7CisKKyAgICAgICAgdmFyIHdlYmtpdFBl
cmZvcm1hbmNlVGVzdFJlc3VsdHMgPSBjb2xsZWN0VGVzdFJlc3VsdHMuY2FsbCh0aGlzLCBkYXRh
LCAicGVyZi10ZXN0Iik7CisgICAgICAgIHRoaXMud2Via2l0UGVyZm9ybWFuY2VUZXN0UmVzdWx0
cyA9IHdlYmtpdFBlcmZvcm1hbmNlVGVzdFJlc3VsdHMgPyBuZXcgQnVpbGRib3RUZXN0UmVzdWx0
cyh0aGlzLCB3ZWJraXRQZXJmb3JtYW5jZVRlc3RSZXN1bHRzKSA6IG51bGw7CisKKyAgICAgICAg
dmFyIG9zTWVtb3J5VGVzdFJlc3VsdHMgPSBjb2xsZWN0UGVyZlRlc3RSZXN1bHRzLmNhbGwodGhp
cywgZGF0YSwgInJ1biBNZW1idXN0ZXIgT1MgTWVtb3J5Iik7CisgICAgICAgIHRoaXMub3NNZW1v
cnlUZXN0UmVzdWx0cyA9IG9zTWVtb3J5VGVzdFJlc3VsdHMgPyBuZXcgQnVpbGRib3RUZXN0UmVz
dWx0cyh0aGlzLCBvc01lbW9yeVRlc3RSZXN1bHRzKSA6IG51bGw7CisKKyAgICAgICAgdmFyIG1l
bWJ1c3RlclRlc3RSZXN1bHRzID0gY29sbGVjdFBlcmZUZXN0UmVzdWx0cy5jYWxsKHRoaXMsIGRh
dGEsICJydW4gTWVtYnVzdGVyIik7CisgICAgICAgIHRoaXMubWVtYnVzdGVyVGVzdFJlc3VsdHMg
PSBtZW1idXN0ZXJUZXN0UmVzdWx0cyA/IG5ldyBCdWlsZGJvdFRlc3RSZXN1bHRzKHRoaXMsIG1l
bWJ1c3RlclRlc3RSZXN1bHRzKSA6IG51bGw7CisKKyAgICAgICAgdmFyIHNjcm9sbFBlcmZUZXN0
UmVzdWx0cyA9IGNvbGxlY3RQZXJmVGVzdFJlc3VsdHMuY2FsbCh0aGlzLCBkYXRhLCAicnVuIHNj
cm9sbHBlcmYiKTsKKyAgICAgICAgdGhpcy5zY3JvbGxQZXJmVGVzdFJlc3VsdHMgPSBzY3JvbGxQ
ZXJmVGVzdFJlc3VsdHMgPyBuZXcgQnVpbGRib3RUZXN0UmVzdWx0cyh0aGlzLCBzY3JvbGxQZXJm
VGVzdFJlc3VsdHMpIDogbnVsbDsKKwogICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7CiAKICAg
ICAgICAgdGhpcy5fZmlyc3RGYWlsZWRTdGVwID0gZGF0YS5zdGVwcy5maW5kRmlyc3QoZnVuY3Rp
b24oc3RlcCkgeyByZXR1cm4gc3RlcC5yZXN1bHRzWzBdID09PSBCdWlsZGJvdEl0ZXJhdGlvbi5G
QUlMVVJFOyB9KTsKSW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5v
cmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UGVyZm9ybWFu
Y2VRdWV1ZVZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvQnVpbGRi
b3RQZXJmb3JtYW5jZVF1ZXVlVmlldy5qcwkocmV2aXNpb24gMCkKKysrIFRvb2xzL0J1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9T
Y3JpcHRzL0J1aWxkYm90UGVyZm9ybWFuY2VRdWV1ZVZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitCdWlsZGJvdFBlcmZvcm1hbmNlUXVl
dWVWaWV3ID0gZnVuY3Rpb24ocXVldWVzKQoreworICAgIEJ1aWxkYm90UXVldWVWaWV3LmNhbGwo
dGhpcywgW10sIHF1ZXVlcyk7CisgICAgdGhpcy51cGRhdGUoKTsKK307CisKK0Jhc2VPYmplY3Qu
YWRkQ29uc3RydWN0b3JGdW5jdGlvbnMoQnVpbGRib3RQZXJmb3JtYW5jZVF1ZXVlVmlldyk7CisK
K0J1aWxkYm90UGVyZm9ybWFuY2VRdWV1ZVZpZXcucHJvdG90eXBlID0geworICAgIGNvbnN0cnVj
dG9yOiBCdWlsZGJvdFBlcmZvcm1hbmNlUXVldWVWaWV3LAorICAgIF9fcHJvdG9fXzogQnVpbGRi
b3RRdWV1ZVZpZXcucHJvdG90eXBlLAorCisgICAgdXBkYXRlOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICBRdWV1ZVZpZXcucHJvdG90eXBlLnVwZGF0ZS5jYWxsKHRoaXMpOworCisgICAgICAg
IHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworCisgICAgICAgIGZ1bmN0aW9uIGFwcGVu
ZFBlcmZRdWV1ZVN0YXR1cyhxdWV1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGFwcGVu
ZGVkU3RhdHVzID0gZmFsc2U7CisKKyAgICAgICAgICAgIHZhciBsaW1pdCA9IDI7CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLml0ZXJhdGlvbnMubGVuZ3RoICYmIGxpbWl0
ID4gMDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbiA9IHF1ZXVlLml0ZXJh
dGlvbnNbaV07CisgICAgICAgICAgICAgICAgaWYgKCFpdGVyYXRpb24ubG9hZGVkIHx8ICFpdGVy
YXRpb24uZmluaXNoZWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICAgICAgLS1saW1pdDsKKworICAgICAgICAgICAgICAgIHZhciB3aWxsSGF2ZUFub3RoZXJT
dGF0dXNMaW5lID0gaSArIDEgPCBxdWV1ZS5pdGVyYXRpb25zLmxlbmd0aCAmJiBsaW1pdCA+IDAg
JiYgIWl0ZXJhdGlvbi5zdWNjZXNzZnVsOyAvLyBUaGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIGFz
IHRoZSByZW1haW5pbmcgaXRlcmF0aW9ucyBtYXkgbm90IGJlIGZpbmlzaGVkIG9yIGxvYWRlZCB5
ZXQsIGJ1dCBjbG9zZSBlbm91Z2guCisgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2VFbGVtZW50
ID0gdGhpcy5yZXZpc2lvbkNvbnRlbnRGb3JJdGVyYXRpb24oaXRlcmF0aW9uLCAoaXRlcmF0aW9u
LnByb2R1Y3RpdmUgJiYgd2lsbEhhdmVBbm90aGVyU3RhdHVzTGluZSkgPyBpdGVyYXRpb24ucHJl
dmlvdXNQcm9kdWN0aXZlSXRlcmF0aW9uIDogbnVsbCk7CisKKyAgICAgICAgICAgICAgICB2YXIg
cmVzdWx0cyA9IGl0ZXJhdGlvbi5wZXJmb3JtYW5jZSB8fCBpdGVyYXRpb24ub3NNZW1vcnlUZXN0
UmVzdWx0cyB8fCBpdGVyYXRpb24uc2Nyb2xsUGVyZlRlc3RSZXN1bHRzIHx8IGl0ZXJhdGlvbi53
ZWJraXRQZXJmb3JtYW5jZVRlc3RSZXN1bHRzIHx8IGl0ZXJhdGlvbi5tZW1idXN0ZXJUZXN0UmVz
dWx0cyB8fCB7ZmFpbHVyZUNvdW50OiAwfTsKKworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRp
b24uc3VjY2Vzc2Z1bCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gbmV3IFN0
YXR1c0xpbmVWaWV3KG1lc3NhZ2VFbGVtZW50LCBTdGF0dXNMaW5lVmlldy5TdGF0dXMuR29vZCwg
ImFsbCB0ZXN0cyBwYXNzZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgbGltaXQgPSAwOworICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWl0ZXJhdGlvbi5wcm9kdWN0aXZlKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciB1cmwgPSBpdGVyYXRpb24ucXVldWUuYnVpbGRib3QuYnVpbGRQYWdl
VVJMRm9ySXRlcmF0aW9uKGl0ZXJhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0
dXMgPSBuZXcgU3RhdHVzTGluZVZpZXcobWVzc2FnZUVsZW1lbnQsIFN0YXR1c0xpbmVWaWV3LlN0
YXR1cy5EYW5nZXIsIGl0ZXJhdGlvbi50ZXh0LCB1bmRlZmluZWQsIHVybCk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChyZXN1bHRzLmZhaWx1cmVDb3VudCkgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgdXJsID0gaXRlcmF0aW9uLnF1ZXVlLmJ1aWxkYm90LmJ1aWxkUGFnZVVSTEZvckl0
ZXJhdGlvbihpdGVyYXRpb24pOworICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gbmV3
IFN0YXR1c0xpbmVWaWV3KG1lc3NhZ2VFbGVtZW50LCBTdGF0dXNMaW5lVmlldy5TdGF0dXMuQmFk
LCBpdGVyYXRpb24udGV4dCwgcmVzdWx0cy5mYWlsdXJlQ291bnQsIHVybCk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IG5ldyBTdGF0
dXNMaW5lVmlldyhtZXNzYWdlRWxlbWVudCwgU3RhdHVzTGluZVZpZXcuU3RhdHVzLkRhbmdlciwg
InVua25vd24iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0aGlzLmVs
ZW1lbnQuYXBwZW5kQ2hpbGQoc3RhdHVzLmVsZW1lbnQpOworICAgICAgICAgICAgICAgIGFwcGVu
ZGVkU3RhdHVzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFhcHBl
bmRlZFN0YXR1cykgeworICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBuZXcgU3RhdHVzTGlu
ZVZpZXcoInVua25vd24iLCBTdGF0dXNMaW5lVmlldy5TdGF0dXMuTmV1dHJhbCwgImxhc3QgcGFz
c2luZyBidWlsZCIpOworICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChz
dGF0dXMuZWxlbWVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5ldyBQb3BvdmVy
VHJhY2tlcihzdGF0dXMuc3RhdHVzQnViYmxlRWxlbWVudCwgdGhpcy5fcHJlc2VudFBvcG92ZXJG
b3JQZXJmb3JtYW5jZVF1ZXVlLmJpbmQodGhpcyksIHF1ZXVlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIGFwcGVuZEJ1aWxkKHF1ZXVlcywgbGFiZWwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHF1ZXVlcy5mb3JFYWNoKGZ1bmN0aW9uKHF1ZXVlKSB7CisgICAgICAgICAgICAgICAg
dmFyIHJlbGVhc2VMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKKyAgICAgICAg
ICAgICAgICByZWxlYXNlTGFiZWwuY2xhc3NMaXN0LmFkZCgicXVldWVMYWJlbCIpOworICAgICAg
ICAgICAgICAgIHJlbGVhc2VMYWJlbC50ZXh0Q29udGVudCA9IHF1ZXVlLnBlcmZUeXBlID8gcXVl
dWUucGVyZlR5cGUgOiBsYWJlbDsKKyAgICAgICAgICAgICAgICByZWxlYXNlTGFiZWwuaHJlZiA9
IHF1ZXVlLm92ZXJ2aWV3VVJMOworICAgICAgICAgICAgICAgIHJlbGVhc2VMYWJlbC50YXJnZXQg
PSAiX2JsYW5rIjsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocmVs
ZWFzZUxhYmVsKTsKKworICAgICAgICAgICAgICAgIGFwcGVuZFBlcmZRdWV1ZVN0YXR1cy5jYWxs
KHRoaXMsIHF1ZXVlKTsKKyAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBhcHBlbmRCdWlsZC5jYWxsKHRoaXMsIHRoaXMucmVsZWFzZVF1ZXVlcywgJ1JlbGVh
c2UnKTsKKyAgICB9LAorCisgICAgYWRkTGlua1RvUm93OiBmdW5jdGlvbihyb3dFbGVtZW50LCBj
bGFzc05hbWUsIHRleHQsIHVybCkKKyAgICB7CisgICAgICAgIHZhciBsaW5rRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKKyAgICAgICAgbGlua0VsZW1lbnQuY2xhc3NOYW1l
ID0gY2xhc3NOYW1lOworICAgICAgICBsaW5rRWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7Cisg
ICAgICAgIGxpbmtFbGVtZW50LmhyZWYgPSB1cmw7CisgICAgICAgIGxpbmtFbGVtZW50LnRhcmdl
dCA9ICJfYmxhbmsiOworICAgICAgICByb3dFbGVtZW50LmFwcGVuZENoaWxkKGxpbmtFbGVtZW50
KTsKKyAgICB9LAorCisgICAgX3BvcG92ZXJDb250ZW50Rm9yUGVyZm9ybWFuY2VRdWV1ZTogZnVu
Y3Rpb24ocXVldWUpCisgICAgeworICAgICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBjb250ZW50LmNsYXNzTmFtZSA9ICJld3MtcG9wb3Zl
ciI7CisKKyAgICAgICAgdmFyIHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ICAgICAgICB0aGlzLmFkZExpbmtUb1Jvdyhyb3csICJkYXNib2FyZC1saW5rIiwgIlBlcmZvcm1h
bmNlIERhc2hib2FyZCIsIHF1ZXVlLmJ1aWxkYm90LnBlcmZfZGFzaGJvYXJkX3VybCk7CisKKyAg
ICAgICAgY29udGVudC5hcHBlbmRDaGlsZChyb3cpOworCisgICAgICAgIHJldHVybiBjb250ZW50
OworICAgIH0sCisKKyAgICBfcHJlc2VudFBvcG92ZXJGb3JQZXJmb3JtYW5jZVF1ZXVlOiBmdW5j
dGlvbihlbGVtZW50LCBwb3BvdmVyLCBxdWV1ZSkKKyAgICB7CisgICAgICAgIHZhciBjb250ZW50
ID0gdGhpcy5fcG9wb3ZlckNvbnRlbnRGb3JQZXJmb3JtYW5jZVF1ZXVlKHF1ZXVlKTsKKworICAg
ICAgICB2YXIgcmVjdCA9IERhc2hib2FyZC5SZWN0LnJlY3RGcm9tQ2xpZW50UmVjdChlbGVtZW50
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTsKKyAgICAgICAgcG9wb3Zlci5jb250ZW50ID0gY29u
dGVudDsKKyAgICAgICAgcG9wb3Zlci5wcmVzZW50KHJlY3QsIFtEYXNoYm9hcmQuUmVjdEVkZ2Uu
TUlOX1ksIERhc2hib2FyZC5SZWN0RWRnZS5NQVhfWSwgRGFzaGJvYXJkLlJlY3RFZGdlLk1BWF9Y
LCBEYXNoYm9hcmQuUmVjdEVkZ2UuTUlOX1hdKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorfTsKSW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UXVldWUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcv
cHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvQnVpbGRib3RRdWV1ZS5qcwkocmV2aXNpb24g
MTczMTkxKQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25m
aWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvQnVpbGRib3RRdWV1ZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsOCArMzgsMTAgQEAgQnVpbGRib3RRdWV1ZSA9IGZ1bmN0aW9uKGJ1aWxk
Ym90LCBpZCwgaQogICAgIHRoaXMuZGVidWcgPSBpbmZvLmRlYnVnIHx8IGZhbHNlOwogICAgIHRo
aXMuYnVpbGRlciA9IGluZm8uYnVpbGRlciB8fCBmYWxzZTsKICAgICB0aGlzLnRlc3RlciA9IGlu
Zm8udGVzdGVyIHx8IGZhbHNlOworICAgIHRoaXMucGVyZm9ybWFuY2UgPSBpbmZvLnBlcmZvcm1h
bmNlIHx8IGZhbHNlOwogICAgIHRoaXMuYXJjaGl0ZWN0dXJlID0gaW5mby5hcmNoaXRlY3R1cmUg
fHwgbnVsbDsKICAgICB0aGlzLnRlc3RDYXRlZ29yeSA9IGluZm8udGVzdENhdGVnb3J5IHx8IG51
bGw7CisgICAgdGhpcy5wZXJmVHlwZSA9IGluZm8ucGVyZlR5cGUgfHwgbnVsbDsKIAogICAgIHRo
aXMuaXRlcmF0aW9ucyA9IFtdOwogICAgIHRoaXMuX2tub3duSXRlcmF0aW9ucyA9IHt9OwpJbmRl
eDogVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGlj
X2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWFpbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9CdWls
ZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9h
cmQvU2NyaXB0cy9NYWluLmpzCShyZXZpc2lvbiAxNzMxOTEpCisrKyBUb29scy9CdWlsZFNsYXZl
U3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2Ny
aXB0cy9NYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIGZvciAodmFyIGkg
PSAwOyBpIDwgYnVpbGRib3RzLmxlbmd0aDsgKysKICAgICAgICAgICAgIGNhdGVnb3J5TmFtZSA9
ICJidWlsZGVycyI7CiAgICAgICAgIH0gZWxzZSBpZiAocXVldWUudGVzdGVyKSB7CiAgICAgICAg
ICAgICBjYXRlZ29yeU5hbWUgPSBxdWV1ZS50ZXN0Q2F0ZWdvcnk7CisgICAgICAgIH0gZWxzZSBp
ZiAocXVldWUucGVyZm9ybWFuY2UpIHsKKyAgICAgICAgICAgIGNhdGVnb3J5TmFtZSA9ICJwZXJm
b3JtYW5jZSI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjb25zb2xlLmFzc2VydCgi
VW5rbm93biBxdWV1ZSB0eXBlLiIpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDgsNiAr
MTUwLDEwIEBAIGZ1bmN0aW9uIGRvY3VtZW50UmVhZHkoKQogICAgICAgICByb3cuYXBwZW5kQ2hp
bGQoaGVhZGVyKTsKICAgICB9CiAKKyAgICB2YXIgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgidGgiKTsKKyAgICBoZWFkZXIudGV4dENvbnRlbnQgPSAiUGVyZm9ybWFuY2UiOworICAg
IHJvdy5hcHBlbmRDaGlsZChoZWFkZXIpOworCiAgICAgaWYgKGhhc0VXUykgewogICAgICAgICB2
YXIgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTsKICAgICAgICAgaGVhZGVy
LnRleHRDb250ZW50ID0gIkVXUyI7CkBAIC0yMDYsNiArMjEyLDE0IEBAIGZ1bmN0aW9uIGRvY3Vt
ZW50UmVhZHkoKQogICAgICAgICAgICAgcm93LmFwcGVuZENoaWxkKGNlbGwpOwogICAgICAgICB9
CiAKKyAgICAgICAgdmFyIGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAg
ICAgICBpZiAocGxhdGZvcm1RdWV1ZXMucGVyZm9ybWFuY2UgJiYgcGxhdGZvcm1RdWV1ZXMucGVy
Zm9ybWFuY2UucmVsZWFzZSkgeworICAgICAgICAgICAgdmFyIHZpZXcgPSBuZXcgQnVpbGRib3RQ
ZXJmb3JtYW5jZVF1ZXVlVmlldyhwbGF0Zm9ybVF1ZXVlcy5wZXJmb3JtYW5jZS5yZWxlYXNlKTsK
KyAgICAgICAgICAgIGNlbGwuYXBwZW5kQ2hpbGQodmlldy5lbGVtZW50KTsKKyAgICAgICAgfQor
CisgICAgICAgIHJvdy5hcHBlbmRDaGlsZChjZWxsKTsKKwogICAgICAgICBpZiAoaGFzRVdTKSB7
CiAgICAgICAgICAgICB2YXIgY2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAK
SW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1
YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1dlYktpdEJ1aWxkYm90LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1Ymxp
Y19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1dlYktpdEJ1aWxkYm90LmpzCShyZXZpc2lvbiAxNzMx
OTEpCisrKyBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9w
dWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9XZWJLaXRCdWlsZGJvdC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzMsMTIgKzMzLDE0IEBAIFdlYktpdEJ1aWxkYm90ID0gZnVuY3Rpb24oKQogICAg
ICAgICAiQXBwbGUgTW91bnRhaW5MaW9uIERlYnVnIFdLMSAoVGVzdHMpIjoge3BsYXRmb3JtOiBE
YXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NYTW91bnRhaW5MaW9uLCBkZWJ1ZzogdHJ1ZSwgdGVzdGVy
OiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQxfSwKICAg
ICAgICAgIkFwcGxlIE1vdW50YWluTGlvbiBSZWxlYXNlIFdLMiAoVGVzdHMpIjoge3BsYXRmb3Jt
OiBEYXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NYTW91bnRhaW5MaW9uLCB0ZXN0ZXI6IHRydWUsIHRl
c3RDYXRlZ29yeTogQnVpbGRib3QuVGVzdENhdGVnb3J5LldlYktpdDJ9LAogICAgICAgICAiQXBw
bGUgTW91bnRhaW5MaW9uIERlYnVnIFdLMiAoVGVzdHMpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQu
UGxhdGZvcm0uTWFjT1NYTW91bnRhaW5MaW9uLCBkZWJ1ZzogdHJ1ZSwgdGVzdGVyOiB0cnVlLCB0
ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQyfSwKKyAgICAgICAgIkFw
cGxlIE1vdW50YWluTGlvbiBSZWxlYXNlIChQZXJmKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBs
YXRmb3JtLk1hY09TWE1vdW50YWluTGlvbiwgZGVidWc6IGZhbHNlLCBwZXJmb3JtYW5jZTogdHJ1
ZX0sCiAgICAgICAgICJBcHBsZSBNYXZlcmlja3MgRGVidWcgKEJ1aWxkKSI6IHtwbGF0Zm9ybTog
RGFzaGJvYXJkLlBsYXRmb3JtLk1hY09TWE1hdmVyaWNrcywgZGVidWc6IHRydWUsIGJ1aWxkZXI6
IHRydWUsIGFyY2hpdGVjdHVyZTogQnVpbGRib3QuQnVpbGRBcmNoaXRlY3R1cmUuU2l4dHlGb3Vy
Qml0fSwKICAgICAgICAgIkFwcGxlIE1hdmVyaWNrcyBSZWxlYXNlIChCdWlsZCkiOiB7cGxhdGZv
cm06IERhc2hib2FyZC5QbGF0Zm9ybS5NYWNPU1hNYXZlcmlja3MsIGRlYnVnOiBmYWxzZSwgYnVp
bGRlcjogdHJ1ZSwgYXJjaGl0ZWN0dXJlOiBCdWlsZGJvdC5CdWlsZEFyY2hpdGVjdHVyZS5TaXh0
eUZvdXJCaXR9LAogICAgICAgICAiQXBwbGUgTWF2ZXJpY2tzIERlYnVnIFdLMSAoVGVzdHMpIjog
e3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NYTWF2ZXJpY2tzLCBkZWJ1ZzogdHJ1
ZSwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJL
aXQxfSwKICAgICAgICAgIkFwcGxlIE1hdmVyaWNrcyBEZWJ1ZyBXSzIgKFRlc3RzKSI6IHtwbGF0
Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLk1hY09TWE1hdmVyaWNrcywgZGVidWc6IHRydWUsIHRl
c3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0Mn0s
CiAgICAgICAgICJBcHBsZSBNYXZlcmlja3MgUmVsZWFzZSBXSzEgKFRlc3RzKSI6IHtwbGF0Zm9y
bTogRGFzaGJvYXJkLlBsYXRmb3JtLk1hY09TWE1hdmVyaWNrcywgZGVidWc6IGZhbHNlLCB0ZXN0
ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRib3QuVGVzdENhdGVnb3J5LldlYktpdDF9LAog
ICAgICAgICAiQXBwbGUgTWF2ZXJpY2tzIFJlbGVhc2UgV0syIChUZXN0cykiOiB7cGxhdGZvcm06
IERhc2hib2FyZC5QbGF0Zm9ybS5NYWNPU1hNYXZlcmlja3MsIGRlYnVnOiBmYWxzZSwgdGVzdGVy
OiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQyfSwKKyAg
ICAgICAgIkFwcGxlIE1hdmVyaWNrcyBSZWxlYXNlIChQZXJmKSI6IHtwbGF0Zm9ybTogRGFzaGJv
YXJkLlBsYXRmb3JtLk1hY09TWE1hdmVyaWNrcywgZGVidWc6IGZhbHNlLCBwZXJmb3JtYW5jZTog
dHJ1ZX0sCiAgICAgICAgICJBcHBsZSBXaW4gRGVidWcgKEJ1aWxkKSI6IHtwbGF0Zm9ybTogRGFz
aGJvYXJkLlBsYXRmb3JtLldpbmRvd3M3LCBkZWJ1ZzogdHJ1ZSwgYnVpbGRlcjogdHJ1ZSwgYXJj
aGl0ZWN0dXJlOiBCdWlsZGJvdC5CdWlsZEFyY2hpdGVjdHVyZS5UaGlydHlUd29CaXR9LAogICAg
ICAgICAiQXBwbGUgV2luIFJlbGVhc2UgKEJ1aWxkKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBs
YXRmb3JtLldpbmRvd3M3LCBidWlsZGVyOiB0cnVlLCBhcmNoaXRlY3R1cmU6IEJ1aWxkYm90LkJ1
aWxkQXJjaGl0ZWN0dXJlLlRoaXJ0eVR3b0JpdH0sCiAgICAgICAgICJBcHBsZSBXaW4gNyBEZWJ1
ZyAoVGVzdHMpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uV2luZG93czcsIGRlYnVn
OiB0cnVlLCB0ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRib3QuVGVzdENhdGVnb3J5
LldlYktpdDF9LApAQCAtNDcsNyArNDksOSBAQCBXZWJLaXRCdWlsZGJvdCA9IGZ1bmN0aW9uKCkK
ICAgICAgICAgIkdUSyBMaW51eCA2NC1iaXQgUmVsZWFzZSAoVGVzdHMpIjoge3BsYXRmb3JtOiBE
YXNoYm9hcmQuUGxhdGZvcm0uTGludXhHVEssIGRlYnVnOiBmYWxzZSwgdGVzdGVyOiB0cnVlLCB0
ZXN0Q2F0ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQyfSwKICAgICAgICAgIkdU
SyBMaW51eCA2NC1iaXQgRGVidWcgKEJ1aWxkKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRm
b3JtLkxpbnV4R1RLLCBkZWJ1ZzogdHJ1ZSwgYnVpbGRlcjogdHJ1ZSwgYXJjaGl0ZWN0dXJlOiBC
dWlsZGJvdC5CdWlsZEFyY2hpdGVjdHVyZS5TaXh0eUZvdXJCaXR9LAogICAgICAgICAiR1RLIExp
bnV4IDY0LWJpdCBEZWJ1ZyAoVGVzdHMpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0u
TGludXhHVEssIGRlYnVnOiB0cnVlLCB0ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRi
b3QuVGVzdENhdGVnb3J5LldlYktpdDJ9LAotICAgICAgICAiRUZMIExpbnV4IDY0LWJpdCBSZWxl
YXNlIFdLMiI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLkxpbnV4RUZMLCB0ZXN0ZXI6
IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRib3QuVGVzdENhdGVnb3J5LldlYktpdDJ9CisgICAg
ICAgICJHVEsgTGludXggNjQtYml0IFJlbGVhc2UgKFBlcmYpIjoge3BsYXRmb3JtOiBEYXNoYm9h
cmQuUGxhdGZvcm0uTGludXhHVEssIGRlYnVnOiBmYWxzZSwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0
ZWdvcnk6IEJ1aWxkYm90LlRlc3RDYXRlZ29yeS5QZXJmb3JtYW5jZX0sCisgICAgICAgICJFRkwg
TGludXggNjQtYml0IFJlbGVhc2UgV0syIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0u
TGludXhFRkwsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdv
cnkuV2ViS2l0Mn0sCisgICAgICAgICJFRkwgTGludXggNjQtYml0IFJlbGVhc2UgV0syIChQZXJm
KSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLkxpbnV4RUZMLCBwZXJmb3JtYW5jZTog
dHJ1ZX0KICAgICB9OwogCiAgICAgQnVpbGRib3QuY2FsbCh0aGlzLCAiaHR0cDovL2J1aWxkLndl
YmtpdC5vcmcvIiwgcXVldWVJbmZvKTsKQEAgLTU4LDYgKzYyLDcgQEAgQmFzZU9iamVjdC5hZGRD
b25zdHJ1Y3RvckZ1bmN0aW9ucyhXZWJLaQogV2ViS2l0QnVpbGRib3QucHJvdG90eXBlID0gewog
ICAgIGNvbnN0cnVjdG9yOiBXZWJLaXRCdWlsZGJvdCwKICAgICBfX3Byb3RvX186IEJ1aWxkYm90
LnByb3RvdHlwZSwKKyAgICBwZXJmX2Rhc2hib2FyZF91cmw6ICJodHRwczovL3BlcmYud2Via2l0
Lm9yZyIsCiAKICAgICBsYXlvdXRUZXN0UmVzdWx0c0RpcmVjdG9yeVVSTEZvckl0ZXJhdGlvbjog
ZnVuY3Rpb24oaXRlcmF0aW9uKQogICAgIHsKSW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0
L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TdHlsZXMvTWFp
bi5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0
Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1N0eWxlcy9NYWluLmNzcwkocmV2aXNp
b24gMTczMTkxKQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1j
b25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1N0eWxlcy9NYWluLmNzcwkod29ya2luZyBjb3B5
KQpAQCAtODksNyArODksNyBAQCBkaXYuY2VsbEJ1dHRvbi51bmhpZGUgewogYm9keSB7CiAgICAg
YmFja2dyb3VuZC1jb2xvcjogcmdiKDIzMywgMjMxLCAyMjMpOwogICAgIHRleHQtYWxpZ246IGNl
bnRlcjsKLSAgICBtYXJnaW46IDUwcHg7CisgICAgbWFyZ2luOiA1MHB4IDI1cHggNTBweCAyNXB4
OwogfQogCiB0YWJsZS5xdWV1ZS1ncmlkIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237540</attachid>
            <date>2014-09-02 18:41:43 -0700</date>
            <delta_ts>2014-09-02 19:20:39 -0700</delta_ts>
            <desc>Updated patch with Alexey&apos;s suggestions.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>20199</size>
            <attacher name="Dana Burkart">dburkart</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE3MzE5NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM0IEBACisyMDE0LTA5LTAyICBEYW5hIEJ1cmthcnQgIDxkYnVya2FydEBhcHBsZS5jb20+
CisKKyAgICAgICAgRGFzaGJvYXJkIHNob3VsZCBzaG93IHBlcmZvcm1hbmNlIGJvdHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYzODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEJ1aWxkU2xhdmVT
dXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3Jp
cHRzL0J1aWxkYm90SXRlcmF0aW9uLmpzOgorICAgICAgICAoQnVpbGRib3RJdGVyYXRpb24ucHJv
dG90eXBlLl9wYXJzZURhdGEuY29sbGVjdFBlcmZUZXN0UmVzdWx0cyk6CisgICAgICAgIChCdWls
ZGJvdEl0ZXJhdGlvbi5wcm90b3R5cGUuX3BhcnNlRGF0YSk6CisgICAgICAgIFN1cHBvcnQgcG9z
c2libGUgcGVyZm9ybWFuY2UgZmFpbHVyZXMuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9C
dWlsZGJvdFBlcmZvcm1hbmNlUXVldWVWaWV3LmpzOgorICAgICAgICBOZXcgUXVldWVWaWV3IHRv
IG1hbmFnZSB0aGUgd2F5IHdlIHByZXNlbnQgcGVyZm9ybWFuY2UgZGF0YS4KKworICAgICAgICAq
IEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UXVldWUuanM6CisgICAgICAgIChCdWlsZGJvdFF1ZXVl
KToKKyAgICAgICAgU3VwcG9ydCBuZXcgJ3BlcmZvcm1hbmNlJyBhbmQgJ3BlcmZUeXBlJyBrZXlz
LgorCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9NYWluLmpzOgorICAgICAgICBBZGQgcGVy
Zm9ybWFuY2UgY29sdW1uIHRvIHRoZSBtYWluIHBhZ2UuCisKKyAgICAgICAgKiBCdWlsZFNsYXZl
U3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2Ny
aXB0cy9XZWJLaXRCdWlsZGJvdC5qczoKKyAgICAgICAgKFdlYktpdEJ1aWxkYm90KToKKyAgICAg
ICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRt
bC9kYXNoYm9hcmQvU3R5bGVzL01haW4uY3NzOgorICAgICAgICAoYm9keSk6CisgICAgICAgIE1h
a2Ugc3VyZSBldmVyeXRoaW5nIGZpdHMgb24gMTMgaW5jaCBzY3JlZW5zLgorCisgICAgICAgICog
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFz
aGJvYXJkL2luZGV4Lmh0bWw6CisKIDIwMTQtMDktMDIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBzdXJlIFdLMSBwcmVmcyBhcmUgaW5pdGlh
bGl6ZWQgaW4gTWluaUJyb3dzZXIKSW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9pbmRleC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL2Rhc2hib2FyZC9pbmRleC5odG1sCShyZXZpc2lvbiAxNzMxOTYpCisrKyBU
b29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRt
bC9kYXNoYm9hcmQvaW5kZXguaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCBzcmM9IlNjcmlwdHMv
QnVpbGRib3RRdWV1ZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJTY3JpcHRz
L0J1aWxkYm90QnVpbGRlclF1ZXVlVmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9
IlNjcmlwdHMvQnVpbGRib3RUZXN0ZXJRdWV1ZVZpZXcuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgc3JjPSJTY3JpcHRzL0J1aWxkYm90UGVyZm9ybWFuY2VRdWV1ZVZpZXcuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgc3JjPSJTY3JpcHRzL0VXU1F1ZXVlVmlldy5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IlNjcmlwdHMvU3RhdHVzTGluZVZpZXcuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJTY3JpcHRzL1NldHRpbmdzLmpzIj48L3NjcmlwdD4KSW5kZXg6IFRvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL0J1aWxkYm90SXRlcmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL0J1aWxkYm90SXRlcmF0aW9uLmpzCShyZXZpc2lvbiAxNzMxOTYpCisr
KyBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdEl0ZXJhdGlvbi5qcwkod29ya2luZyBjb3B5
KQpAQCAtNzksNiArNzksMTAgQEAgQnVpbGRib3RJdGVyYXRpb24uUHJvZHVjdGl2ZVN0ZXBzID0g
ewogICAgICJ3ZWJraXRweS10ZXN0IjogMSwKICAgICAid2Via2l0cGVybC10ZXN0IjogMSwKICAg
ICAiYmluZGluZ3MtZ2VuZXJhdGlvbi10ZXN0cyI6IDEsCisgICAgInJ1biBNZW1idXN0ZXIgT1Mg
TWVtb3J5IjogMSwKKyAgICAicnVuIHNjcm9sbHBlcmYiOiAxLAorICAgICJydW4gUExUMyI6IDEs
CisgICAgInBlcmYtdGVzdCI6IDEKIH07CiAKIEJ1aWxkYm90SXRlcmF0aW9uLkV2ZW50ID0gewpA
QCAtMTk0LDcgKzE5OCw3IEBAIEJ1aWxkYm90SXRlcmF0aW9uLnByb3RvdHlwZSA9IHsKIAogICAg
ICAgICAgICAgdGVzdFJlc3VsdHMuZmluaXNoZWQgPSB0cnVlOwogCi0gICAgICAgICAgICBpZiAo
IXRlc3RTdGVwLnJlc3VsdHMgfHwgIXRlc3RTdGVwLnJlc3VsdHNbMF0pIHsKKyAgICAgICAgICAg
IGlmICghdGVzdFN0ZXAucmVzdWx0cyB8fCB0ZXN0U3RlcC5yZXN1bHRzWzBdID09PSBCdWlsZGJv
dEl0ZXJhdGlvbi5TVUNDRVNTKSB7CiAgICAgICAgICAgICAgICAgLy8gQWxsIHRlc3RzIHBhc3Nl
ZC4KICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0cy5hbGxQYXNzZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIHJldHVybiB0ZXN0UmVzdWx0czsKQEAgLTIzMSw2ICsyMzUsMzIgQEAgQnVpbGRi
b3RJdGVyYXRpb24ucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIHRlc3RSZXN1bHRz
OwogICAgICAgICB9CiAKKyAgICAgICAgZnVuY3Rpb24gY29sbGVjdFBlcmZvcm1hbmNlVGVzdFJl
c3VsdHMoZGF0YSwgc3RlcE5hbWUpIHsKKyAgICAgICAgICAgIHZhciB0ZXN0U3RlcCA9IGRhdGEu
c3RlcHMuZmluZEZpcnN0KGZ1bmN0aW9uKHN0ZXApIHsgcmV0dXJuIHN0ZXAubmFtZSA9PT0gc3Rl
cE5hbWU7IH0pOworICAgICAgICAgICAgaWYgKCF0ZXN0U3RlcCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgdmFyIHRlc3RSZXN1bHRzID0ge307CisKKyAgICAg
ICAgICAgIGlmICghdGVzdFN0ZXAuaXNGaW5pc2hlZCkgeworICAgICAgICAgICAgICAgIC8vIFRo
ZSBzdGVwIG5ldmVyIGV2ZW4gcmFuLCBvciBoYXNuJ3QgZmluaXNoZWQgcnVubmluZy4KKyAgICAg
ICAgICAgICAgICB0ZXN0UmVzdWx0cy5maW5pc2hlZCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IHJldHVybiB0ZXN0UmVzdWx0czsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGVzdFJl
c3VsdHMuZmluaXNoZWQgPSB0cnVlOworCisgICAgICAgICAgICBpZiAoIXRlc3RTdGVwLnJlc3Vs
dHMgfHwgdGVzdFN0ZXAucmVzdWx0c1swXSA9PT0gQnVpbGRib3RJdGVyYXRpb24uU1VDQ0VTUykg
eworICAgICAgICAgICAgICAgIC8vIEFsbCB0ZXN0cyBwYXNzZWQuCisgICAgICAgICAgICAgICAg
dGVzdFJlc3VsdHMuYWxsUGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVz
dFJlc3VsdHM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRlc3RSZXN1bHRzLmZhaWx1
cmVDb3VudCA9ICh0ZXN0U3RlcC5yZXN1bHRzWzBdKSA/IDEgOiAwOworCisgICAgICAgICAgICBy
ZXR1cm4gdGVzdFJlc3VsdHM7CisgICAgICAgIH0KKwogICAgICAgICBjb25zb2xlLmFzc2VydCgh
dGhpcy5pZCB8fCB0aGlzLmlkID09PSBkYXRhLm51bWJlcik7CiAgICAgICAgIHRoaXMuaWQgPSBk
YXRhLm51bWJlcjsKIApAQCAtMjc4LDYgKzMwOCwyMyBAQCBCdWlsZGJvdEl0ZXJhdGlvbi5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHZhciBiaW5kaW5nVGVzdFJlc3VsdHMgPSBjb2xsZWN0VGVzdFJl
c3VsdHMuY2FsbCh0aGlzLCBkYXRhLCAiYmluZGluZ3MtZ2VuZXJhdGlvbi10ZXN0cyIpOwogICAg
ICAgICB0aGlzLmJpbmRpbmdUZXN0UmVzdWx0cyA9IGJpbmRpbmdUZXN0UmVzdWx0cyA/IG5ldyBC
dWlsZGJvdFRlc3RSZXN1bHRzKHRoaXMsIGJpbmRpbmdUZXN0UmVzdWx0cykgOiBudWxsOwogCisg
ICAgICAgIHZhciBwZXJmb3JtYW5jZVRlc3RSZXN1bHRzID0gY29sbGVjdFBlcmZvcm1hbmNlVGVz
dFJlc3VsdHMuY2FsbCh0aGlzLCBkYXRhLCAicnVuIFBMVDMiKTsKKyAgICAgICAgdGhpcy5wZXJm
b3JtYW5jZVRlc3RSZXN1bHRzID0gcGVyZm9ybWFuY2VUZXN0UmVzdWx0cyA/IG5ldyBCdWlsZGJv
dFRlc3RSZXN1bHRzKHRoaXMsIHBlcmZvcm1hbmNlVGVzdFJlc3VsdHMpIDogbnVsbDsKKworICAg
ICAgICAvLyBUaGlzIGlzIGFjdHVhbGx5IGNvcnJlY3QsIHdlJ3JlIGNhbGxpbmcgY29sbGVjdFRl
c3RSZXN1bHRzIHZzLiBjb2xsZWN0UGVyZm9ybWFuY2VUZXN0UmVzdWx0cyBiZWNhdXNlIG9mCisg
ICAgICAgIC8vIGRpZmZlcmVuY2VzIGluIHRoZSBpbnRlcm5hbCBidWlsZGJvdC4KKyAgICAgICAg
dmFyIHdlYmtpdFBlcmZvcm1hbmNlVGVzdFJlc3VsdHMgPSBjb2xsZWN0VGVzdFJlc3VsdHMuY2Fs
bCh0aGlzLCBkYXRhLCAicGVyZi10ZXN0Iik7CisgICAgICAgIHRoaXMud2Via2l0UGVyZm9ybWFu
Y2VUZXN0UmVzdWx0cyA9IHdlYmtpdFBlcmZvcm1hbmNlVGVzdFJlc3VsdHMgPyBuZXcgQnVpbGRi
b3RUZXN0UmVzdWx0cyh0aGlzLCB3ZWJraXRQZXJmb3JtYW5jZVRlc3RSZXN1bHRzKSA6IG51bGw7
CisKKyAgICAgICAgdmFyIG9zTWVtb3J5VGVzdFJlc3VsdHMgPSBjb2xsZWN0UGVyZm9ybWFuY2VU
ZXN0UmVzdWx0cy5jYWxsKHRoaXMsIGRhdGEsICJydW4gTWVtYnVzdGVyIE9TIE1lbW9yeSIpOwor
ICAgICAgICB0aGlzLm9zTWVtb3J5VGVzdFJlc3VsdHMgPSBvc01lbW9yeVRlc3RSZXN1bHRzID8g
bmV3IEJ1aWxkYm90VGVzdFJlc3VsdHModGhpcywgb3NNZW1vcnlUZXN0UmVzdWx0cykgOiBudWxs
OworCisgICAgICAgIHZhciBtZW1idXN0ZXJUZXN0UmVzdWx0cyA9IGNvbGxlY3RQZXJmb3JtYW5j
ZVRlc3RSZXN1bHRzLmNhbGwodGhpcywgZGF0YSwgInJ1biBNZW1idXN0ZXIiKTsKKyAgICAgICAg
dGhpcy5tZW1idXN0ZXJUZXN0UmVzdWx0cyA9IG1lbWJ1c3RlclRlc3RSZXN1bHRzID8gbmV3IEJ1
aWxkYm90VGVzdFJlc3VsdHModGhpcywgbWVtYnVzdGVyVGVzdFJlc3VsdHMpIDogbnVsbDsKKwor
ICAgICAgICB2YXIgc2Nyb2xsUGVyZlRlc3RSZXN1bHRzID0gY29sbGVjdFBlcmZvcm1hbmNlVGVz
dFJlc3VsdHMuY2FsbCh0aGlzLCBkYXRhLCAicnVuIHNjcm9sbHBlcmYiKTsKKyAgICAgICAgdGhp
cy5zY3JvbGxQZXJmVGVzdFJlc3VsdHMgPSBzY3JvbGxQZXJmVGVzdFJlc3VsdHMgPyBuZXcgQnVp
bGRib3RUZXN0UmVzdWx0cyh0aGlzLCBzY3JvbGxQZXJmVGVzdFJlc3VsdHMpIDogbnVsbDsKKwog
ICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7CiAKICAgICAgICAgdGhpcy5fZmlyc3RGYWlsZWRT
dGVwID0gZGF0YS5zdGVwcy5maW5kRmlyc3QoZnVuY3Rpb24oc3RlcCkgeyByZXR1cm4gc3RlcC5y
ZXN1bHRzWzBdID09PSBCdWlsZGJvdEl0ZXJhdGlvbi5GQUlMVVJFOyB9KTsKSW5kZXg6IFRvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UGVyZm9ybWFuY2VRdWV1ZVZpZXcuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVi
bGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvQnVpbGRib3RQZXJmb3JtYW5jZVF1ZXVlVmlldy5q
cwkocmV2aXNpb24gMCkKKysrIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5v
cmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UGVyZm9ybWFu
Y2VRdWV1ZVZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCitCdWlsZGJvdFBlcmZvcm1hbmNlUXVldWVWaWV3ID0gZnVuY3Rpb24ocXVldWVz
KQoreworICAgIEJ1aWxkYm90UXVldWVWaWV3LmNhbGwodGhpcywgW10sIHF1ZXVlcyk7CisgICAg
dGhpcy51cGRhdGUoKTsKK307CisKK0Jhc2VPYmplY3QuYWRkQ29uc3RydWN0b3JGdW5jdGlvbnMo
QnVpbGRib3RQZXJmb3JtYW5jZVF1ZXVlVmlldyk7CisKK0J1aWxkYm90UGVyZm9ybWFuY2VRdWV1
ZVZpZXcucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBCdWlsZGJvdFBlcmZvcm1hbmNl
UXVldWVWaWV3LAorICAgIF9fcHJvdG9fXzogQnVpbGRib3RRdWV1ZVZpZXcucHJvdG90eXBlLAor
CisgICAgdXBkYXRlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBRdWV1ZVZpZXcucHJvdG90
eXBlLnVwZGF0ZS5jYWxsKHRoaXMpOworCisgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGls
ZHJlbigpOworCisgICAgICAgIGZ1bmN0aW9uIGFwcGVuZFBlcmZvcm1hbmNlUXVldWVTdGF0dXMo
cXVldWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBhcHBlbmRlZFN0YXR1cyA9IGZhbHNl
OworCisgICAgICAgICAgICB2YXIgbGltaXQgPSAyOworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBxdWV1ZS5pdGVyYXRpb25zLmxlbmd0aCAmJiBsaW1pdCA+IDA7ICsraSkgeworICAg
ICAgICAgICAgICAgIHZhciBpdGVyYXRpb24gPSBxdWV1ZS5pdGVyYXRpb25zW2ldOworICAgICAg
ICAgICAgICAgIGlmICghaXRlcmF0aW9uLmxvYWRlZCB8fCAhaXRlcmF0aW9uLmZpbmlzaGVkKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIC0tbGltaXQ7
CisKKyAgICAgICAgICAgICAgICB2YXIgd2lsbEhhdmVBbm90aGVyU3RhdHVzTGluZSA9IGkgKyAx
IDwgcXVldWUuaXRlcmF0aW9ucy5sZW5ndGggJiYgbGltaXQgPiAwICYmICFpdGVyYXRpb24uc3Vj
Y2Vzc2Z1bDsgLy8gVGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCBhcyB0aGUgcmVtYWluaW5nIGl0
ZXJhdGlvbnMgbWF5IG5vdCBiZSBmaW5pc2hlZCBvciBsb2FkZWQgeWV0LCBidXQgY2xvc2UgZW5v
dWdoLgorICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlRWxlbWVudCA9IHRoaXMucmV2aXNpb25D
b250ZW50Rm9ySXRlcmF0aW9uKGl0ZXJhdGlvbiwgKGl0ZXJhdGlvbi5wcm9kdWN0aXZlICYmIHdp
bGxIYXZlQW5vdGhlclN0YXR1c0xpbmUpID8gaXRlcmF0aW9uLnByZXZpb3VzUHJvZHVjdGl2ZUl0
ZXJhdGlvbiA6IG51bGwpOworCisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBpdGVyYXRp
b24ucGVyZm9ybWFuY2UgfHwgaXRlcmF0aW9uLm9zTWVtb3J5VGVzdFJlc3VsdHMgfHwgaXRlcmF0
aW9uLnNjcm9sbFBlcmZUZXN0UmVzdWx0cyB8fCBpdGVyYXRpb24ud2Via2l0UGVyZm9ybWFuY2VU
ZXN0UmVzdWx0cyB8fCBpdGVyYXRpb24ubWVtYnVzdGVyVGVzdFJlc3VsdHMgfHwge2ZhaWx1cmVD
b3VudDogMH07CisKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmF0aW9uLnN1Y2Nlc3NmdWwpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IG5ldyBTdGF0dXNMaW5lVmlldyhtZXNz
YWdlRWxlbWVudCwgU3RhdHVzTGluZVZpZXcuU3RhdHVzLkdvb2QsICJhbGwgdGVzdHMgcGFzc2Vk
Iik7CisgICAgICAgICAgICAgICAgICAgIGxpbWl0ID0gMDsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFpdGVyYXRpb24ucHJvZHVjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
dXJsID0gaXRlcmF0aW9uLnF1ZXVlLmJ1aWxkYm90LmJ1aWxkUGFnZVVSTEZvckl0ZXJhdGlvbihp
dGVyYXRpb24pOworICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gbmV3IFN0YXR1c0xp
bmVWaWV3KG1lc3NhZ2VFbGVtZW50LCBTdGF0dXNMaW5lVmlldy5TdGF0dXMuRGFuZ2VyLCBpdGVy
YXRpb24udGV4dCwgdW5kZWZpbmVkLCB1cmwpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
cmVzdWx0cy5mYWlsdXJlQ291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGl0
ZXJhdGlvbi5xdWV1ZS5idWlsZGJvdC5idWlsZFBhZ2VVUkxGb3JJdGVyYXRpb24oaXRlcmF0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IG5ldyBTdGF0dXNMaW5lVmlldyht
ZXNzYWdlRWxlbWVudCwgU3RhdHVzTGluZVZpZXcuU3RhdHVzLkJhZCwgaXRlcmF0aW9uLnRleHQs
IHJlc3VsdHMuZmFpbHVyZUNvdW50LCB1cmwpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBuZXcgU3RhdHVzTGluZVZpZXcobWVzc2Fn
ZUVsZW1lbnQsIFN0YXR1c0xpbmVWaWV3LlN0YXR1cy5EYW5nZXIsICJ1bmtub3duIik7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxk
KHN0YXR1cy5lbGVtZW50KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRlZFN0YXR1cyA9IHRydWU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghYXBwZW5kZWRTdGF0dXMpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gbmV3IFN0YXR1c0xpbmVWaWV3KCJ1bmtub3duIiwg
U3RhdHVzTGluZVZpZXcuU3RhdHVzLk5ldXRyYWwsICJsYXN0IHBhc3NpbmcgYnVpbGQiKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3RhdHVzLmVsZW1lbnQpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZXcgUG9wb3ZlclRyYWNrZXIoc3RhdHVzLnN0
YXR1c0J1YmJsZUVsZW1lbnQsIHRoaXMuX3ByZXNlbnRQb3BvdmVyRm9yUGVyZm9ybWFuY2VRdWV1
ZS5iaW5kKHRoaXMpLCBxdWV1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBhcHBl
bmRCdWlsZChxdWV1ZXMsIGxhYmVsKQorICAgICAgICB7CisgICAgICAgICAgICBxdWV1ZXMuZm9y
RWFjaChmdW5jdGlvbihxdWV1ZSkgeworICAgICAgICAgICAgICAgIHZhciByZWxlYXNlTGFiZWwg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CisgICAgICAgICAgICAgICAgcmVsZWFzZUxh
YmVsLmNsYXNzTGlzdC5hZGQoInF1ZXVlTGFiZWwiKTsKKyAgICAgICAgICAgICAgICByZWxlYXNl
TGFiZWwudGV4dENvbnRlbnQgPSBxdWV1ZS5wZXJmb3JtYW5jZVR5cGUgPyBxdWV1ZS5wZXJmb3Jt
YW5jZVR5cGUgOiBsYWJlbDsKKyAgICAgICAgICAgICAgICByZWxlYXNlTGFiZWwuaHJlZiA9IHF1
ZXVlLm92ZXJ2aWV3VVJMOworICAgICAgICAgICAgICAgIHJlbGVhc2VMYWJlbC50YXJnZXQgPSAi
X2JsYW5rIjsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocmVsZWFz
ZUxhYmVsKTsKKworICAgICAgICAgICAgICAgIGFwcGVuZFBlcmZvcm1hbmNlUXVldWVTdGF0dXMu
Y2FsbCh0aGlzLCBxdWV1ZSk7CisgICAgICAgICAgICB9LmJpbmQodGhpcykpOworICAgICAgICB9
CisKKyAgICAgICAgYXBwZW5kQnVpbGQuY2FsbCh0aGlzLCB0aGlzLnJlbGVhc2VRdWV1ZXMsICdS
ZWxlYXNlJyk7CisgICAgfSwKKworICAgIGFkZExpbmtUb1JvdzogZnVuY3Rpb24ocm93RWxlbWVu
dCwgY2xhc3NOYW1lLCB0ZXh0LCB1cmwpCisgICAgeworICAgICAgICB2YXIgbGlua0VsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CisgICAgICAgIGxpbmtFbGVtZW50LmNsYXNz
TmFtZSA9IGNsYXNzTmFtZTsKKyAgICAgICAgbGlua0VsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0
OworICAgICAgICBsaW5rRWxlbWVudC5ocmVmID0gdXJsOworICAgICAgICBsaW5rRWxlbWVudC50
YXJnZXQgPSAiX2JsYW5rIjsKKyAgICAgICAgcm93RWxlbWVudC5hcHBlbmRDaGlsZChsaW5rRWxl
bWVudCk7CisgICAgfSwKKworICAgIF9wb3BvdmVyQ29udGVudEZvclBlcmZvcm1hbmNlUXVldWU6
IGZ1bmN0aW9uKHF1ZXVlKQorICAgIHsKKyAgICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgY29udGVudC5jbGFzc05hbWUgPSAiZXdzLXBv
cG92ZXIiOworCisgICAgICAgIHZhciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKKyAgICAgICAgdGhpcy5hZGRMaW5rVG9Sb3cocm93LCAiZGFzaGJvYXJkLWxpbmsiLCAiUGVy
Zm9ybWFuY2UgRGFzaGJvYXJkIiwgcXVldWUuYnVpbGRib3QucGVyZm9ybWFuY2VEYXNoYm9hcmRV
UkwoKSk7CisKKyAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChyb3cpOworCisgICAgICAgIHJl
dHVybiBjb250ZW50OworICAgIH0sCisKKyAgICBfcHJlc2VudFBvcG92ZXJGb3JQZXJmb3JtYW5j
ZVF1ZXVlOiBmdW5jdGlvbihlbGVtZW50LCBwb3BvdmVyLCBxdWV1ZSkKKyAgICB7CisgICAgICAg
IHZhciBjb250ZW50ID0gdGhpcy5fcG9wb3ZlckNvbnRlbnRGb3JQZXJmb3JtYW5jZVF1ZXVlKHF1
ZXVlKTsKKworICAgICAgICB2YXIgcmVjdCA9IERhc2hib2FyZC5SZWN0LnJlY3RGcm9tQ2xpZW50
UmVjdChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTsKKyAgICAgICAgcG9wb3Zlci5j
b250ZW50ID0gY29udGVudDsKKyAgICAgICAgcG9wb3Zlci5wcmVzZW50KHJlY3QsIFtEYXNoYm9h
cmQuUmVjdEVkZ2UuTUlOX1ksIERhc2hib2FyZC5SZWN0RWRnZS5NQVhfWSwgRGFzaGJvYXJkLlJl
Y3RFZGdlLk1BWF9YLCBEYXNoYm9hcmQuUmVjdEVkZ2UuTUlOX1hdKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorfTsKSW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndl
YmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UXVl
dWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0
Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvQnVpbGRib3RRdWV1ZS5q
cwkocmV2aXNpb24gMTczMTk2KQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Vi
a2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvQnVpbGRib3RRdWV1
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsMTAgQEAgQnVpbGRib3RRdWV1ZSA9IGZ1
bmN0aW9uKGJ1aWxkYm90LCBpZCwgaQogICAgIHRoaXMuZGVidWcgPSBpbmZvLmRlYnVnIHx8IGZh
bHNlOwogICAgIHRoaXMuYnVpbGRlciA9IGluZm8uYnVpbGRlciB8fCBmYWxzZTsKICAgICB0aGlz
LnRlc3RlciA9IGluZm8udGVzdGVyIHx8IGZhbHNlOworICAgIHRoaXMucGVyZm9ybWFuY2UgPSBp
bmZvLnBlcmZvcm1hbmNlIHx8IGZhbHNlOwogICAgIHRoaXMuYXJjaGl0ZWN0dXJlID0gaW5mby5h
cmNoaXRlY3R1cmUgfHwgbnVsbDsKICAgICB0aGlzLnRlc3RDYXRlZ29yeSA9IGluZm8udGVzdENh
dGVnb3J5IHx8IG51bGw7CisgICAgdGhpcy5wZXJmb3JtYW5jZVR5cGUgPSBpbmZvLnBlcmZvcm1h
bmNlVHlwZSB8fCBudWxsOwogCiAgICAgdGhpcy5pdGVyYXRpb25zID0gW107CiAgICAgdGhpcy5f
a25vd25JdGVyYXRpb25zID0ge307CkluZGV4OiBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWls
ZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9NYWluLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmct
Y29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL01haW4uanMJKHJldmlzaW9uIDE3
MzE5NikKKysrIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL01haW4uanMJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDYgKzQzLDggQEAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWlsZGJvdHMubGVuZ3RoOyArKwog
ICAgICAgICAgICAgY2F0ZWdvcnlOYW1lID0gImJ1aWxkZXJzIjsKICAgICAgICAgfSBlbHNlIGlm
IChxdWV1ZS50ZXN0ZXIpIHsKICAgICAgICAgICAgIGNhdGVnb3J5TmFtZSA9IHF1ZXVlLnRlc3RD
YXRlZ29yeTsKKyAgICAgICAgfSBlbHNlIGlmIChxdWV1ZS5wZXJmb3JtYW5jZSkgeworICAgICAg
ICAgICAgY2F0ZWdvcnlOYW1lID0gInBlcmZvcm1hbmNlIjsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCJVbmtub3duIHF1ZXVlIHR5cGUuIik7CiAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTE0OCw2ICsxNTAsMTAgQEAgZnVuY3Rpb24gZG9jdW1lbnRSZWFk
eSgpCiAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChoZWFkZXIpOwogICAgIH0KIAorICAgIHZhciBo
ZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpOworICAgIGhlYWRlci50ZXh0Q29u
dGVudCA9ICJQZXJmb3JtYW5jZSI7CisgICAgcm93LmFwcGVuZENoaWxkKGhlYWRlcik7CisKICAg
ICBpZiAoaGFzRVdTKSB7CiAgICAgICAgIHZhciBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJ0aCIpOwogICAgICAgICBoZWFkZXIudGV4dENvbnRlbnQgPSAiRVdTIjsKQEAgLTIwNiw2
ICsyMTIsMTQgQEAgZnVuY3Rpb24gZG9jdW1lbnRSZWFkeSgpCiAgICAgICAgICAgICByb3cuYXBw
ZW5kQ2hpbGQoY2VsbCk7CiAgICAgICAgIH0KIAorICAgICAgICB2YXIgY2VsbCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgICAgIGlmIChwbGF0Zm9ybVF1ZXVlcy5wZXJmb3Jt
YW5jZSAmJiBwbGF0Zm9ybVF1ZXVlcy5wZXJmb3JtYW5jZS5yZWxlYXNlKSB7CisgICAgICAgICAg
ICB2YXIgdmlldyA9IG5ldyBCdWlsZGJvdFBlcmZvcm1hbmNlUXVldWVWaWV3KHBsYXRmb3JtUXVl
dWVzLnBlcmZvcm1hbmNlLnJlbGVhc2UpOworICAgICAgICAgICAgY2VsbC5hcHBlbmRDaGlsZCh2
aWV3LmVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgcm93LmFwcGVuZENoaWxkKGNlbGwp
OworCiAgICAgICAgIGlmIChoYXNFV1MpIHsKICAgICAgICAgICAgIHZhciBjZWxsID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgidGQiKTsKIApJbmRleDogVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQv
YnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvV2Vi
S2l0QnVpbGRib3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvV2ViS2l0
QnVpbGRib3QuanMJKHJldmlzaW9uIDE3MzE5NikKKysrIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0
L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1dl
YktpdEJ1aWxkYm90LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTQgQEAgV2ViS2l0
QnVpbGRib3QgPSBmdW5jdGlvbigpCiAgICAgICAgICJBcHBsZSBNb3VudGFpbkxpb24gRGVidWcg
V0sxIChUZXN0cykiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5NYWNPU1hNb3VudGFp
bkxpb24sIGRlYnVnOiB0cnVlLCB0ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRib3Qu
VGVzdENhdGVnb3J5LldlYktpdDF9LAogICAgICAgICAiQXBwbGUgTW91bnRhaW5MaW9uIFJlbGVh
c2UgV0syIChUZXN0cykiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5NYWNPU1hNb3Vu
dGFpbkxpb24sIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdv
cnkuV2ViS2l0Mn0sCiAgICAgICAgICJBcHBsZSBNb3VudGFpbkxpb24gRGVidWcgV0syIChUZXN0
cykiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5NYWNPU1hNb3VudGFpbkxpb24sIGRl
YnVnOiB0cnVlLCB0ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRib3QuVGVzdENhdGVn
b3J5LldlYktpdDJ9LAorICAgICAgICAiQXBwbGUgTW91bnRhaW5MaW9uIFJlbGVhc2UgKFBlcmYp
Ijoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NYTW91bnRhaW5MaW9uLCBkZWJ1
ZzogZmFsc2UsIHBlcmZvcm1hbmNlOiB0cnVlfSwKICAgICAgICAgIkFwcGxlIE1hdmVyaWNrcyBE
ZWJ1ZyAoQnVpbGQpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NYTWF2ZXJp
Y2tzLCBkZWJ1ZzogdHJ1ZSwgYnVpbGRlcjogdHJ1ZSwgYXJjaGl0ZWN0dXJlOiBCdWlsZGJvdC5C
dWlsZEFyY2hpdGVjdHVyZS5TaXh0eUZvdXJCaXR9LAogICAgICAgICAiQXBwbGUgTWF2ZXJpY2tz
IFJlbGVhc2UgKEJ1aWxkKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLk1hY09TWE1h
dmVyaWNrcywgZGVidWc6IGZhbHNlLCBidWlsZGVyOiB0cnVlLCBhcmNoaXRlY3R1cmU6IEJ1aWxk
Ym90LkJ1aWxkQXJjaGl0ZWN0dXJlLlNpeHR5Rm91ckJpdH0sCiAgICAgICAgICJBcHBsZSBNYXZl
cmlja3MgRGVidWcgV0sxIChUZXN0cykiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5N
YWNPU1hNYXZlcmlja3MsIGRlYnVnOiB0cnVlLCB0ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTog
QnVpbGRib3QuVGVzdENhdGVnb3J5LldlYktpdDF9LAogICAgICAgICAiQXBwbGUgTWF2ZXJpY2tz
IERlYnVnIFdLMiAoVGVzdHMpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NY
TWF2ZXJpY2tzLCBkZWJ1ZzogdHJ1ZSwgdGVzdGVyOiB0cnVlLCB0ZXN0Q2F0ZWdvcnk6IEJ1aWxk
Ym90LlRlc3RDYXRlZ29yeS5XZWJLaXQyfSwKICAgICAgICAgIkFwcGxlIE1hdmVyaWNrcyBSZWxl
YXNlIFdLMSAoVGVzdHMpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NYTWF2
ZXJpY2tzLCBkZWJ1ZzogZmFsc2UsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJv
dC5UZXN0Q2F0ZWdvcnkuV2ViS2l0MX0sCiAgICAgICAgICJBcHBsZSBNYXZlcmlja3MgUmVsZWFz
ZSBXSzIgKFRlc3RzKSI6IHtwbGF0Zm9ybTogRGFzaGJvYXJkLlBsYXRmb3JtLk1hY09TWE1hdmVy
aWNrcywgZGVidWc6IGZhbHNlLCB0ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRib3Qu
VGVzdENhdGVnb3J5LldlYktpdDJ9LAorICAgICAgICAiQXBwbGUgTWF2ZXJpY2tzIFJlbGVhc2Ug
KFBlcmYpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTWFjT1NYTWF2ZXJpY2tzLCBk
ZWJ1ZzogZmFsc2UsIHBlcmZvcm1hbmNlOiB0cnVlfSwKICAgICAgICAgIkFwcGxlIFdpbiBEZWJ1
ZyAoQnVpbGQpIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uV2luZG93czcsIGRlYnVn
OiB0cnVlLCBidWlsZGVyOiB0cnVlLCBhcmNoaXRlY3R1cmU6IEJ1aWxkYm90LkJ1aWxkQXJjaGl0
ZWN0dXJlLlRoaXJ0eVR3b0JpdH0sCiAgICAgICAgICJBcHBsZSBXaW4gUmVsZWFzZSAoQnVpbGQp
Ijoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uV2luZG93czcsIGJ1aWxkZXI6IHRydWUs
IGFyY2hpdGVjdHVyZTogQnVpbGRib3QuQnVpbGRBcmNoaXRlY3R1cmUuVGhpcnR5VHdvQml0fSwK
ICAgICAgICAgIkFwcGxlIFdpbiA3IERlYnVnIChUZXN0cykiOiB7cGxhdGZvcm06IERhc2hib2Fy
ZC5QbGF0Zm9ybS5XaW5kb3dzNywgZGVidWc6IHRydWUsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVn
b3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0MX0sCkBAIC00Nyw3ICs0OSw5IEBAIFdl
YktpdEJ1aWxkYm90ID0gZnVuY3Rpb24oKQogICAgICAgICAiR1RLIExpbnV4IDY0LWJpdCBSZWxl
YXNlIChUZXN0cykiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5MaW51eEdUSywgZGVi
dWc6IGZhbHNlLCB0ZXN0ZXI6IHRydWUsIHRlc3RDYXRlZ29yeTogQnVpbGRib3QuVGVzdENhdGVn
b3J5LldlYktpdDJ9LAogICAgICAgICAiR1RLIExpbnV4IDY0LWJpdCBEZWJ1ZyAoQnVpbGQpIjog
e3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTGludXhHVEssIGRlYnVnOiB0cnVlLCBidWls
ZGVyOiB0cnVlLCBhcmNoaXRlY3R1cmU6IEJ1aWxkYm90LkJ1aWxkQXJjaGl0ZWN0dXJlLlNpeHR5
Rm91ckJpdH0sCiAgICAgICAgICJHVEsgTGludXggNjQtYml0IERlYnVnIChUZXN0cykiOiB7cGxh
dGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5MaW51eEdUSywgZGVidWc6IHRydWUsIHRlc3Rlcjog
dHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0Mn0sCi0gICAg
ICAgICJFRkwgTGludXggNjQtYml0IFJlbGVhc2UgV0syIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQu
UGxhdGZvcm0uTGludXhFRkwsIHRlc3RlcjogdHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJvdC5U
ZXN0Q2F0ZWdvcnkuV2ViS2l0Mn0KKyAgICAgICAgIkdUSyBMaW51eCA2NC1iaXQgUmVsZWFzZSAo
UGVyZikiOiB7cGxhdGZvcm06IERhc2hib2FyZC5QbGF0Zm9ybS5MaW51eEdUSywgZGVidWc6IGZh
bHNlLCBwZXJmb3JtYW5jZTogdHJ1ZX0sCisgICAgICAgICJFRkwgTGludXggNjQtYml0IFJlbGVh
c2UgV0syIjoge3BsYXRmb3JtOiBEYXNoYm9hcmQuUGxhdGZvcm0uTGludXhFRkwsIHRlc3Rlcjog
dHJ1ZSwgdGVzdENhdGVnb3J5OiBCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0Mn0sCisgICAg
ICAgICJFRkwgTGludXggNjQtYml0IFJlbGVhc2UgV0syIChQZXJmKSI6IHtwbGF0Zm9ybTogRGFz
aGJvYXJkLlBsYXRmb3JtLkxpbnV4RUZMLCBwZXJmb3JtYW5jZTogdHJ1ZX0KICAgICB9OwogCiAg
ICAgQnVpbGRib3QuY2FsbCh0aGlzLCAiaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvIiwgcXVldWVJ
bmZvKTsKQEAgLTU5LDYgKzYzLDExIEBAIFdlYktpdEJ1aWxkYm90LnByb3RvdHlwZSA9IHsKICAg
ICBjb25zdHJ1Y3RvcjogV2ViS2l0QnVpbGRib3QsCiAgICAgX19wcm90b19fOiBCdWlsZGJvdC5w
cm90b3R5cGUsCiAKKyAgICBwZXJmb3JtYW5jZURhc2hib2FyZFVSTDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICJodHRwczovL3BlcmYud2Via2l0Lm9yZyI7CisgICAgfSwKKwog
ICAgIGxheW91dFRlc3RSZXN1bHRzRGlyZWN0b3J5VVJMRm9ySXRlcmF0aW9uOiBmdW5jdGlvbihp
dGVyYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5iYXNlVVJMICsgInJlc3VsdHMv
IiArIGVuY29kZVVSSUNvbXBvbmVudChpdGVyYXRpb24ucXVldWUuaWQpICsgIi8iICsgZW5jb2Rl
VVJJQ29tcG9uZW50KCJyIiArIGl0ZXJhdGlvbi5vcGVuU291cmNlUmV2aXNpb24gKyAiICgiICsg
aXRlcmF0aW9uLmlkICsgIikiKTsKSW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TdHlsZXMvTWFpbi5jc3MK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1j
b25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1N0eWxlcy9NYWluLmNzcwkocmV2aXNpb24gMTcz
MTk2KQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcv
cHVibGljX2h0bWwvZGFzaGJvYXJkL1N0eWxlcy9NYWluLmNzcwkod29ya2luZyBjb3B5KQpAQCAt
ODksNyArODksNyBAQCBkaXYuY2VsbEJ1dHRvbi51bmhpZGUgewogYm9keSB7CiAgICAgYmFja2dy
b3VuZC1jb2xvcjogcmdiKDIzMywgMjMxLCAyMjMpOwogICAgIHRleHQtYWxpZ246IGNlbnRlcjsK
LSAgICBtYXJnaW46IDUwcHg7CisgICAgbWFyZ2luOiA1MHB4IDI1cHggNTBweCAyNXB4OwogfQog
CiB0YWJsZS5xdWV1ZS1ncmlkIHsK
</data>
<flag name="review"
          id="262272"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="262275"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>