<?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>166885</bug_id>
          
          <creation_ts>2017-01-10 02:54:09 -0800</creation_ts>
          <short_desc>[GTK] Add a script to upload the data generated with run-benchmark to a browserperfdash server and use it on the gtk perf bot</short_desc>
          <delta_ts>2018-06-13 18:05:22 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Alberto Lopez Perez">clopez</reporter>
          <assigned_to name="Carlos Alberto Lopez Perez">clopez</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1265324</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-01-10 02:54:09 -0800</bug_when>
    <thetext>The WebKitGTK+ performance bot is automatically running the run-benchmark script with the minibrowser-gtk. But we are not sending the performance data anywhere.
We have started to implement a web application that would be able to receive the data from run-benchmark and generate tables and graphs.

This web application [1] is still under development and not really useful right now, but we want to start sending data now to it, so we can work with real data meanwhile we develop and improve it.


[1]
test deployment: http://browserperfdash.igalia.com
source code: https://github.com/Igalia/browserperfdash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265343</commentid>
    <comment_count>1</comment_count>
      <attachid>298457</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-01-10 05:06:16 -0800</bug_when>
    <thetext>Created attachment 298457
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265375</commentid>
    <comment_count>2</comment_count>
      <attachid>298457</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-10 08:49:56 -0800</bug_when>
    <thetext>Comment on attachment 298457
Patch

I didn&apos;t check it too closely, but looks sane.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265393</commentid>
    <comment_count>3</comment_count>
      <attachid>298457</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-01-10 09:33:47 -0800</bug_when>
    <thetext>Comment on attachment 298457
Patch

Do you have your own version of a perf dashboard in addition to perf.webkit.org?
What you&apos;re adding is not compatible with what perf.webkit.org accepts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265394</commentid>
    <comment_count>4</comment_count>
      <attachid>298457</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-01-10 09:35:51 -0800</bug_when>
    <thetext>Comment on attachment 298457
Patch

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

r- because I don&apos;t think we want to be creating yet another perf dashboard.
If there&apos;s a GTK+ specific perf dashboard, it&apos;s more preferable to have a separate script that submit results instead.

&gt; Tools/Scripts/webkitpy/benchmark_runner/upload-results-config-file-example.txt:9
&gt; +# Configuration for dashboard benchmark.webkit.org
&gt; +[benchmark.webkit.org]
&gt; +bot_id = gtk-release-perf-bot-64
&gt; +bot_password = Rand0mPass
&gt; +post_url = https://benchmark.webkit.org/dash/bot-report

This website doesn&apos;t exist. Are you creating a new one?
Why don&apos;t we just use perf.webkit.org instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265405</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-01-10 10:06:29 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 298457 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=298457&amp;action=review
&gt; 
&gt; r- because I don&apos;t think we want to be creating yet another perf dashboard.

We want another performance dashboard (read below). We don&apos;t intend to replace perf.webkit.org but run the other dashboard in parallel. 

&gt; If there&apos;s a GTK+ specific perf dashboard, it&apos;s more preferable to have a
&gt; separate script that submit results instead.
&gt; 

Other ports will be welcome there once we have it ready for production.
We are now running it only for the GTK+ performance bot because its still under development.

Also, the patch is neutral to the script run-benchmark. We are only adding two optional new arguments. If you don&apos;t use those arguments you can continue to run the script as always you did. 

So I don&apos;t agree that we should use a different script.

&gt; &gt; Tools/Scripts/webkitpy/benchmark_runner/upload-results-config-file-example.txt:9
&gt; &gt; +# Configuration for dashboard benchmark.webkit.org
&gt; &gt; +[benchmark.webkit.org]
&gt; &gt; +bot_id = gtk-release-perf-bot-64
&gt; &gt; +bot_password = Rand0mPass
&gt; &gt; +post_url = https://benchmark.webkit.org/dash/bot-report
&gt; 
&gt; This website doesn&apos;t exist. Are you creating a new one?

Yes. 
Not on that URL, though, that file is just an example of configuration.
The real config file should not be checked out in the SVN because it contains passwords.

Read the first comment of this bug to see the links to it.


&gt; Why don&apos;t we just use perf.webkit.org instead?

I don&apos;t know if perf.webkit.org in its current state can understand the data from run-benchmark script. Can it?

And even if it can, we are developing this new dashboard and we want the GTK bot to start sending data there so we can play with the data meanwhile we develop it.

Some of the reasons to develop this new dashboard instead of improving perf.webkit.org:

* I really miss be able to easily spot recent regressions on perf.webkit.org. Having to look at the graphs by hand one by one is not really usable. We want something that automatically shows a table with the most recent regressions.

* The run-benchmark script allows to benchmark multiple browsers: chrome, firefox, minibrowser, etc.. This new performance dashboard we are developing has that use case on mind. We will end deploying several performance dashboards instances (some public, some not) that would allow to compare and plot performance graphs from multiple browsers and platforms.

* We have decided that is easier for us to start this new project from scratch (with python-django) than to try to improve perf.webkit.org to fit our use cases (that may be different than the ones you want for perf.webkit.org).


Regarding the GTK+ performance bot. It currently runs two steps:

 * perf-step: this sends the data to perf.webkit.org and will continue to do so.
 * run-benchmark: only our bot runs this step, and we want to start sending this data to this new performance dashboard instead of sending it to /dev/null like currently happens.


So, it will be possible to have two performance dashboard.
The current perf.webkit.org and this new one that is still under development.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265409</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-01-10 10:17:54 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Comment on attachment 298457 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=298457&amp;action=review
&gt; &gt; 
&gt; &gt; r- because I don&apos;t think we want to be creating yet another perf dashboard.
&gt; 
&gt; We want another performance dashboard (read below). We don&apos;t intend to
&gt; replace perf.webkit.org but run the other dashboard in parallel. 
&gt; 
&gt; &gt; If there&apos;s a GTK+ specific perf dashboard, it&apos;s more preferable to have a
&gt; &gt; separate script that submit results instead.
&gt; &gt; 
&gt; 
&gt; Other ports will be welcome there once we have it ready for production.
&gt; We are now running it only for the GTK+ performance bot because its still
&gt; under development.
&gt; 
&gt; Also, the patch is neutral to the script run-benchmark. We are only adding
&gt; two optional new arguments. If you don&apos;t use those arguments you can
&gt; continue to run the script as always you did. 
&gt; 
&gt; So I don&apos;t agree that we should use a different script.

The trouble is that we&apos;re using run-benchmark to submit results to an internal instance of perf.webkit.org.

Having this functionality built into run-benchmark only for GTK+ would make this very confusing.

&gt; &gt; Why don&apos;t we just use perf.webkit.org instead?
&gt; 
&gt; I don&apos;t know if perf.webkit.org in its current state can understand the data
&gt; from run-benchmark script. Can it?

It certainly can. In fact, that&apos;s what we use to test it on dozens upon dozens of Macs and iOS devices internally at Apple.

&gt; And even if it can, we are developing this new dashboard and we want the GTK
&gt; bot to start sending data there so we can play with the data meanwhile we
&gt; develop it.
&gt; 
&gt; Some of the reasons to develop this new dashboard instead of improving
&gt; perf.webkit.org:
&gt; 
&gt; * I really miss be able to easily spot recent regressions on
&gt; perf.webkit.org. Having to look at the graphs by hand one by one is not
&gt; really usable. We want something that automatically shows a table with the
&gt; most recent regressions.

Have you tried using v3 UI?  It has the capability to mark each graph with annotations for this exact purpose.

&gt; * The run-benchmark script allows to benchmark multiple browsers: chrome,
&gt; firefox, minibrowser, etc.. This new performance dashboard we are developing
&gt; has that use case on mind. We will end deploying several performance
&gt; dashboards instances (some public, some not) that would allow to compare and
&gt; plot performance graphs from multiple browsers and platforms.

This is an enhancement we&apos;re adding to perf.webkit.org.

&gt; Regarding the GTK+ performance bot. It currently runs two steps:
&gt; 
&gt;  * perf-step: this sends the data to perf.webkit.org and will continue to do
&gt; so.
&gt;  * run-benchmark: only our bot runs this step, and we want to start sending
&gt; this data to this new performance dashboard instead of sending it to
&gt; /dev/null like currently happens.
&gt; 
&gt; 
&gt; So, it will be possible to have two performance dashboard.
&gt; The current perf.webkit.org and this new one that is still under development.

Having another dashboard for GTK+ is fine, and that&apos;s exactly what we do at Apple. However, please use a separate standalone script to submit results using the JSON run-benchmark generates instead of hard-coding your dashboard&apos;s format into run-benchmark because we&apos;re not interested in using your dashboard, and having that code in run-benchmark would make it harder for us to maintain the script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265414</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-01-10 10:23:57 -0800</bug_when>
    <thetext>Note that --output-file specifies the filename of the JSON it generates. This uses the exact same format perf.webkit.org uses.

We have a simple Python script that grabs various repository info, etc... and submit this result to an internal instance of perf.webkit.org.

It should be simple to write a similar script and submit the results to your own dashboard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265458</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-01-10 11:29:06 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; Comment on attachment 298457 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=298457&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; r- because I don&apos;t think we want to be creating yet another perf dashboard.
&gt; &gt; 
&gt; &gt; We want another performance dashboard (read below). We don&apos;t intend to
&gt; &gt; replace perf.webkit.org but run the other dashboard in parallel. 
&gt; &gt; 
&gt; &gt; &gt; If there&apos;s a GTK+ specific perf dashboard, it&apos;s more preferable to have a
&gt; &gt; &gt; separate script that submit results instead.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; Other ports will be welcome there once we have it ready for production.
&gt; &gt; We are now running it only for the GTK+ performance bot because its still
&gt; &gt; under development.
&gt; &gt; 
&gt; &gt; Also, the patch is neutral to the script run-benchmark. We are only adding
&gt; &gt; two optional new arguments. If you don&apos;t use those arguments you can
&gt; &gt; continue to run the script as always you did. 
&gt; &gt; 
&gt; &gt; So I don&apos;t agree that we should use a different script.
&gt; 
&gt; The trouble is that we&apos;re using run-benchmark to submit results to an
&gt; internal instance of perf.webkit.org.
&gt; 
&gt; Having this functionality built into run-benchmark only for GTK+ would make
&gt; this very confusing.
&gt; 


Why will be very confusing? run-benchmark has another switches that we don&apos;t use (neither know what are meant for) like --device-id and its fine.

Maybe if we move the options --upload-results-config-file and --browser-version inside an argparse GTK-specific option group will make this acceptable to you?

&gt; &gt; &gt; Why don&apos;t we just use perf.webkit.org instead?
&gt; &gt; 
&gt; &gt; I don&apos;t know if perf.webkit.org in its current state can understand the data
&gt; &gt; from run-benchmark script. Can it?
&gt; 
&gt; It certainly can. In fact, that&apos;s what we use to test it on dozens upon
&gt; dozens of Macs and iOS devices internally at Apple.
&gt; 
&gt; &gt; And even if it can, we are developing this new dashboard and we want the GTK
&gt; &gt; bot to start sending data there so we can play with the data meanwhile we
&gt; &gt; develop it.
&gt; &gt; 
&gt; &gt; Some of the reasons to develop this new dashboard instead of improving
&gt; &gt; perf.webkit.org:
&gt; &gt; 
&gt; &gt; * I really miss be able to easily spot recent regressions on
&gt; &gt; perf.webkit.org. Having to look at the graphs by hand one by one is not
&gt; &gt; really usable. We want something that automatically shows a table with the
&gt; &gt; most recent regressions.
&gt; 
&gt; Have you tried using v3 UI?  It has the capability to mark each graph with
&gt; annotations for this exact purpose.
&gt; 

No, I haven&apos;t.. 
How can I try this v3 UI in perf.webkit.org?


&gt; &gt; * The run-benchmark script allows to benchmark multiple browsers: chrome,
&gt; &gt; firefox, minibrowser, etc.. This new performance dashboard we are developing
&gt; &gt; has that use case on mind. We will end deploying several performance
&gt; &gt; dashboards instances (some public, some not) that would allow to compare and
&gt; &gt; plot performance graphs from multiple browsers and platforms.
&gt; 
&gt; This is an enhancement we&apos;re adding to perf.webkit.org.
&gt; 
&gt; &gt; Regarding the GTK+ performance bot. It currently runs two steps:
&gt; &gt; 
&gt; &gt;  * perf-step: this sends the data to perf.webkit.org and will continue to do
&gt; &gt; so.
&gt; &gt;  * run-benchmark: only our bot runs this step, and we want to start sending
&gt; &gt; this data to this new performance dashboard instead of sending it to
&gt; &gt; /dev/null like currently happens.
&gt; &gt; 
&gt; &gt; 
&gt; &gt; So, it will be possible to have two performance dashboard.
&gt; &gt; The current perf.webkit.org and this new one that is still under development.
&gt; 
&gt; Having another dashboard for GTK+ is fine, and that&apos;s exactly what we do at
&gt; Apple. However, please use a separate standalone script to submit results
&gt; using the JSON run-benchmark generates instead of hard-coding your
&gt; dashboard&apos;s format into run-benchmark because we&apos;re not interested in using
&gt; your dashboard, and having that code in run-benchmark would make it harder
&gt; for us to maintain the script.

I really think you are exaggerating here. I don&apos;t think having two extra optional arguments that I can make clearer that are GTK specific and an _upload_results() extra function of 46 lines is going to really make harder to maintain or use the run-benchmark script. 

Also, even if you are not interested in using our dashboard other ports (EFL?) may be interested.

On top of that... As far as the opensource Webkit project is concerned, we are the only ones that run this script on the bots. And I feel restricted to not being able to improve this script to run on the public GTK+ perf bot because you think that such improvement will make your _private_ usage/maintenance of the script confusing/harder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265472</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-01-10 11:45:28 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt;
&gt; Why will be very confusing? run-benchmark has another switches that we don&apos;t
&gt; use (neither know what are meant for) like --device-id and its fine.
&gt; 
&gt; Maybe if we move the options --upload-results-config-file and
&gt; --browser-version inside an argparse GTK-specific option group will make
&gt; this acceptable to you?

They&apos;re just options listed. There&apos;s no maintenance cost associated with it.
On the other hand, the code to upload results to a dashboard has a significant maintenance cost.

In practice, this script is maintained by Apple contributors:
https://trac.webkit.org/log/trunk/Tools/Scripts/webkitpy/benchmark_runner

Having code that can&apos;t be verified by Apple contributors is going to impose an undue burden on all those contributors.

And unlike --device-id which is needed to run benchmarks in iOS, submitting results to a dashboard is something that can be easily split into a operate script as we&apos;ve done so for our internal instance of perf.webkit.org

We&apos;ve done our due diligence, please do yours.

&gt; No, I haven&apos;t.. 
&gt; How can I try this v3 UI in perf.webkit.org?

You need to create your own instance since I haven&apos;t had a chance to upgrade the database schema on perf.webkit.org. Please follow instructions in Websites/perf.webkit.org/Install.md.

&gt; I really think you are exaggerating here. I don&apos;t think having two extra
&gt; optional arguments that I can make clearer that are GTK specific and an
&gt; _upload_results() extra function of 46 lines is going to really make harder
&gt; to maintain or use the run-benchmark script. 

Yes, it does. I&apos;ve maintained run-perf-tests and run-benchmark&apos;s submit-results script for internal instance for years, and that&apos;s always the part that breaks.

&gt; Also, even if you are not interested in using our dashboard other ports
&gt; (EFL?) may be interested.
&gt; 
&gt; On top of that... As far as the opensource Webkit project is concerned, we
&gt; are the only ones that run this script on the bots. And I feel restricted to
&gt; not being able to improve this script to run on the public GTK+ perf bot
&gt; because you think that such improvement will make your _private_
&gt; usage/maintenance of the script confusing/harder.

You&apos;re free to use run-benchmark. Well, we could have easily not open sourced this code. If you&apos;re going to add this functionality, then we&apos;re likely to just not maintain the open source code version, and keep our own version elsewhere.

On the other hand, why is it so important for you to have this functionality built into run-benchmark?

We don&apos;t do it for our own internal dashboard, we&apos;ve found it much better that the submission step happens in a separate build step so that we can differentiate test failures from submission failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266027</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-01-11 18:38:44 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt;
&gt; &gt; Why will be very confusing? run-benchmark has another switches that we don&apos;t
&gt; &gt; use (neither know what are meant for) like --device-id and its fine.
&gt; &gt; 
&gt; &gt; Maybe if we move the options --upload-results-config-file and
&gt; &gt; --browser-version inside an argparse GTK-specific option group will make
&gt; &gt; this acceptable to you?
&gt; 
&gt; They&apos;re just options listed. There&apos;s no maintenance cost associated with it.
&gt; On the other hand, the code to upload results to a dashboard has a
&gt; significant maintenance cost.
&gt; 
&gt; In practice, this script is maintained by Apple contributors:
&gt; https://trac.webkit.org/log/trunk/Tools/Scripts/webkitpy/benchmark_runner
&gt; 
&gt; Having code that can&apos;t be verified by Apple contributors is going to impose
&gt; an undue burden on all those contributors.
&gt; 

I think that having to deal with (lot of) code that you are unable to verify is
something very common for any WebKit developer.
When you work on a WebKit port is totally normal that you are not able
to verify the code of the other ports, yet you still can see that code
in your IDE.

Thankfully, we have lot of automated testing that verifies and tests all
this code automatically.

And this was not an exception, all the code I was submitting here was going
to be ran (and verified) automatically by our Perf bot. So any regression introduced would be quickly detected.


&gt; And unlike --device-id which is needed to run benchmarks in iOS, submitting
&gt; results to a dashboard is something that can be easily split into a operate
&gt; script as we&apos;ve done so for our internal instance of perf.webkit.org
&gt; 
&gt; We&apos;ve done our due diligence, please do yours.
&gt; 
&gt; &gt; No, I haven&apos;t.. 
&gt; &gt; How can I try this v3 UI in perf.webkit.org?
&gt; 
&gt; You need to create your own instance since I haven&apos;t had a chance to upgrade
&gt; the database schema on perf.webkit.org. Please follow instructions in
&gt; Websites/perf.webkit.org/Install.md.
&gt; 
&gt; &gt; I really think you are exaggerating here. I don&apos;t think having two extra
&gt; &gt; optional arguments that I can make clearer that are GTK specific and an
&gt; &gt; _upload_results() extra function of 46 lines is going to really make harder
&gt; &gt; to maintain or use the run-benchmark script. 
&gt; 
&gt; Yes, it does. I&apos;ve maintained run-perf-tests and run-benchmark&apos;s
&gt; submit-results script for internal instance for years, and that&apos;s always the
&gt; part that breaks.
&gt; 
&gt; &gt; Also, even if you are not interested in using our dashboard other ports
&gt; &gt; (EFL?) may be interested.
&gt; &gt; 
&gt; &gt; On top of that... As far as the opensource Webkit project is concerned, we
&gt; &gt; are the only ones that run this script on the bots. And I feel restricted to
&gt; &gt; not being able to improve this script to run on the public GTK+ perf bot
&gt; &gt; because you think that such improvement will make your _private_
&gt; &gt; usage/maintenance of the script confusing/harder.
&gt; 
&gt; You&apos;re free to use run-benchmark. Well, we could have easily not open
&gt; sourced this code. If you&apos;re going to add this functionality, then we&apos;re
&gt; likely to just not maintain the open source code version, and keep our own
&gt; version elsewhere.
&gt; 
&gt; On the other hand, why is it so important for you to have this functionality
&gt; built into run-benchmark?
&gt; 
&gt; We don&apos;t do it for our own internal dashboard, we&apos;ve found it much better
&gt; that the submission step happens in a separate build step so that we can
&gt; differentiate test failures from submission failures.

Fair enough.

I will be moving all this code to a new script, that then calls into
run-benchmark as needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266028</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-01-11 18:40:13 -0800</bug_when>
    <thetext>By the way, just as heads up, I’m going to change the format of JSON generated by run-benchmark this or next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266032</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-01-11 18:50:57 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt;
&gt; &gt; &gt; Why will be very confusing? run-benchmark has another switches that we don&apos;t
&gt; &gt; &gt; use (neither know what are meant for) like --device-id and its fine.
&gt; &gt; &gt; 
&gt; &gt; &gt; Maybe if we move the options --upload-results-config-file and
&gt; &gt; &gt; --browser-version inside an argparse GTK-specific option group will make
&gt; &gt; &gt; this acceptable to you?
&gt; &gt; 
&gt; &gt; They&apos;re just options listed. There&apos;s no maintenance cost associated with it.
&gt; &gt; On the other hand, the code to upload results to a dashboard has a
&gt; &gt; significant maintenance cost.
&gt; &gt; 
&gt; &gt; In practice, this script is maintained by Apple contributors:
&gt; &gt; https://trac.webkit.org/log/trunk/Tools/Scripts/webkitpy/benchmark_runner
&gt; &gt; 
&gt; &gt; Having code that can&apos;t be verified by Apple contributors is going to impose
&gt; &gt; an undue burden on all those contributors.
&gt; &gt; 
&gt; 
&gt; I think that having to deal with (lot of) code that you are unable to verify
&gt; is
&gt; something very common for any WebKit developer.
&gt; When you work on a WebKit port is totally normal that you are not able
&gt; to verify the code of the other ports, yet you still can see that code
&gt; in your IDE.

That’s not a justification for adding even more code that can’t be tested by other contributors. Over the years, we have always strived to reduce the amount of such code.

&gt; Thankfully, we have lot of automated testing that verifies and tests all
&gt; this code automatically.

Except this patch doesn’t have any tests.

&gt; And this was not an exception, all the code I was submitting here was going
&gt; to be ran (and verified) automatically by our Perf bot. So any regression
&gt; introduced would be quickly detected.

That means we wouldn’t know any brokerage until we land patches, which is highly undesirable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431821</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2018-06-11 04:40:18 -0700</bug_when>
    <thetext>Per previous discussion I&apos;m retitling the bug.

Also I&apos;m uploading for review a new approach to this problem: its an independent script that will take care of executing run-benchmark and will upload the data it generates to a server running the app browserperfdash (like on browserperfdash.igalia.com ).

But run-benchmark itself won&apos;t be touched.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431856</commentid>
    <comment_count>14</comment_count>
      <attachid>342418</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2018-06-11 05:26:44 -0700</bug_when>
    <thetext>Created attachment 342418
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1432871</commentid>
    <comment_count>15</comment_count>
      <attachid>342418</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-06-13 16:44:55 -0700</bug_when>
    <thetext>Comment on attachment 342418
Patch

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

Just giving this a cursory review... I think this avoids Ryusoke&apos;s concerns, right?

&gt; Tools/Scripts/webkitpy/browserperfdash/browserperfdash_runner.py:74
&gt; +        # This is the dictionary that will be sent in the post petition that browserperfdash expects

&quot;post petition&quot;? What does this mean? I guess you meant to write something else here?

&gt; Tools/Scripts/webkitpy/browserperfdash/browserperfdash_runner.py:194
&gt; +            _log.error(&apos;The following benchmark plans have failed to run or to upload : {list_plan_failed}&apos;.format(list_plan_failed=failed))

No space before the :</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1432887</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2018-06-13 17:55:54 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #15)
&gt; Comment on attachment 342418 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=342418&amp;action=review
&gt; 
&gt; Just giving this a cursory review... I think this avoids Ryusoke&apos;s concerns,
&gt; right?
&gt; 


I hope, as this new patch doesn&apos;t touch or modify run-benchmark

&gt; &gt; Tools/Scripts/webkitpy/browserperfdash/browserperfdash_runner.py:74
&gt; &gt; +        # This is the dictionary that will be sent in the post petition that browserperfdash expects
&gt; 
&gt; &quot;post petition&quot;? What does this mean? I guess you meant to write something
&gt; else here?
&gt; 

HTTP POST request

&gt; &gt; Tools/Scripts/webkitpy/browserperfdash/browserperfdash_runner.py:194
&gt; &gt; +            _log.error(&apos;The following benchmark plans have failed to run or to upload : {list_plan_failed}&apos;.format(list_plan_failed=failed))
&gt; 
&gt; No space before the :</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1432890</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2018-06-13 18:04:55 -0700</bug_when>
    <thetext>Committed r232820: &lt;https://trac.webkit.org/changeset/232820&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1432891</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-06-13 18:05:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/41109801&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298457</attachid>
            <date>2017-01-10 05:06:16 -0800</date>
            <delta_ts>2018-06-11 05:26:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166885-20170110140438.patch</filename>
            <type>text/plain</type>
            <size>22218</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNTM5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWJjMjBhMTE2MmNlNzhmMDA5OTdkYTcxMDIxMThiYzBj
MzY4YWFjYi4uMmJiNjI1NWVhNzU5NzRkODhmNmVmZTBkZDU0OGI4ZjViMzVmNTY2ZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ5
IEBACiAyMDE3LTAxLTEwICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2Fs
aWEuY29tPgogCisgICAgICAgIHJ1bi1iZW5jaG1hcms6IEFsbG93IHRvIHVwbG9hZCB0aGUgcGVy
Zm9ybWFuY2UgcmVzdWx0cyBkYXRhIHRvIGEgcGVyZm9ybWFuY2UgZGFzaGJvYXJkLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODg1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRz
IHN1cHBvcnQgZm9yIHVwbG9hZGluZyB0aGUgcGVyZm9ybWFuY2UgcmVzdWx0IGRhdGEgdG8gYSBw
ZXJmIGRhc2hib2FyZAorICAgICAgICBhZnRlciBlYWNoIHJ1biBvZiBhIHRlc3QgcGxhbi4gVGhl
IHN3aXRjaCAtLXVwbG9hZC1yZXN1bHRzLWNvbmZpZy1maWxlIGlzIHVzZWQgdG8gcG9pbnQKKyAg
ICAgICAgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB3aXRoIHRoZSBwYXJhbWV0ZXJzIGZvciB0
aGUgdXBsb2FkLgorICAgICAgICBXaGVuIHVwbG9hZGluZyB0aGUgZGF0YSwgaXRzIHJlcXVpcmVk
IHRvIHNwZWNpZnkgdGhlIGJyb3dzZXIgdmVyc2lvbi4KKyAgICAgICAgVG8gZG8gdGhhdCB0aGUg
YXJndW1lbnQgLS1icm93c2VyLXZlcnNpb24gY2FuIGJlIHVzZWQuCisgICAgICAgIFRoZSBzY3Jp
cHQgbWF5IHRyeSB0byBhdXRvLWRldGVjdCB0aGUgYnJvd3NlciB2ZXJzaW9uIGlmIHRoaXMgaXMg
bm90IHNwZWNpZmllZC4KKworICAgICAgICBUaGUgc2NyaXB0IHdpbGwgb25seSB0cnkgdG8gdXBs
b2FkIHRoZSByZXN1bHMgd2hlbiB0aGUgc3dpdGNoIC0tdXBsb2FkLXJlc3VsdHMtY29uZmlnLWZp
bGUgaXMgcGFzc2VkLgorCisgICAgICAgIFRoaXMgYWxzbyBmaXhlcyBhIHJhY2UgY29uZGl0aW9u
IGVycm9yIHdoZW4ga2lsbGluZyB0aGUgYnJvd3NlciBjaGlsZHMgd2l0aCBwc3V0aWwgYW5kCisg
ICAgICAgIG1lcmdlcyB0aGUgbG9naWMgZm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayB3aXRoIG9u
bHkgb25lIHBsYW4gb3Igd2l0aCBhbGwgdGhlIGF2YWlsYWJsZSBwbGFucy4KKworICAgICAgICAq
IEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL21hc3Rlci5jZmc6Cisg
ICAgICAgIChSdW5CZW5jaG1hcmtUZXN0cyk6IENvbmZpZ3VyZSB0aGUgR1RLIHBlcmZvcm1hbmNl
IGJvdCB0byBzZW5kIHRoZSByZXN1bHRzIGFuZCBwYXNzIHRoZSBzdm4gcmV2aXNpb24gbnVtYmVy
IGFzIGJyb3dzZXItdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFy
a19ydW5uZXIvYmVuY2htYXJrX3J1bm5lci5weToKKyAgICAgICAgKEJlbmNobWFya1J1bm5lci5f
X2luaXRfXyk6CisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIuX3J1bl9iZW5jaG1hcmspOgorICAg
ICAgICAoQmVuY2htYXJrUnVubmVyLl91cGxvYWRfcmVzdWx0cyk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVy
LnB5OgorICAgICAgICAoQnJvd3NlckRyaXZlcik6CisgICAgICAgIChCcm93c2VyRHJpdmVyLnJl
c3RvcmVfZW52KToKKyAgICAgICAgKEJyb3dzZXJEcml2ZXIuZ2V0X2Jyb3dzZXJfdmVyc2lvbik6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJp
dmVyL2xpbnV4X2Jyb3dzZXJfZHJpdmVyLnB5OgorICAgICAgICAoTGludXhCcm93c2VyRHJpdmVy
LmNsb3NlX2Jyb3dzZXJzKTogRml4IHJhY2UgY29uZGl0aW9uIHdoZW4ga2lsbGluZyB0aGUgYnJv
d3NlciBjaGlsZHMgd2l0aCBwc3V0aWwuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iZW5j
aG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2xpbnV4X2Nocm9tZV9kcml2ZXIucHk6CisgICAg
ICAgIChMaW51eENocm9tZURyaXZlci5sYXVuY2hfdXJsKToKKyAgICAgICAgKExpbnV4Q2hyb21l
RHJpdmVyKToKKyAgICAgICAgKExpbnV4Q2hyb21lRHJpdmVyLmdldF9icm93c2VyX3ZlcnNpb24p
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2Ry
aXZlci9saW51eF9taW5pYnJvd3Nlcmd0a19kcml2ZXIucHk6CisgICAgICAgIChHVEtNaW5pQnJv
d3NlckRyaXZlci5sYXVuY2hfdXJsKToKKyAgICAgICAgKEdUS01pbmlCcm93c2VyRHJpdmVyKToK
KyAgICAgICAgKEdUS01pbmlCcm93c2VyRHJpdmVyLmdldF9icm93c2VyX3ZlcnNpb24pOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9ydW5fYmVuY2htYXJrLnB5
OgorICAgICAgICAocGFyc2VfYXJncyk6CisgICAgICAgIChzdGFydCk6IE1lcmdlIHRoZSBsb2dp
YyBmb3IgcnVubmluZyBvbmx5IG9uZSBwbGFuIG9yIGFsbCB0aGUgcGxhbnMuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL3VwbG9hZC1yZXN1bHRzLWNvbmZpZy1m
aWxlLWV4YW1wbGUudHh0OiBBZGRlZC4gQWRkIGV4YW1wbGUgb2YgY29uZmlnIGZpbGUgZm9yIHVw
bG9hZGluZyB0aGUgcmVzdWx0cyB0byBhIHBlcmYgZGFzaGJvYXJkLgorCisyMDE3LTAxLTEwICBD
YXJsb3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgorCiAgICAgICAg
IFtHVEtdIEFkZCBhIG5ldyByZWxlYXNlIHRlc3QgYm90IGZvciBXYXlsYW5kIGFuZCBwYXNzIC0t
ZGlzcGxheS1zZXJ2ZXI9eG9yZyB0byB0aGUgR1RLIFBlcmYgYm90LgogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODcyCiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL21hc3Rlci5jZmcg
Yi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9tYXN0ZXIu
Y2ZnCmluZGV4IDJmZTY5MDI4NGJjNGE2YzM3YzljNzRhZWM3NDI3ZDU3MTE5NzkyZTguLjg1ZWIz
MmY5ZjNjNGNmNjc1Y2UyN2QyN2EwMDNjMjAyMDZkNzM1N2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1
aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL21hc3Rlci5jZmcKKysrIGIv
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvbWFzdGVyLmNm
ZwpAQCAtNzA2LDcgKzcwNiw5IEBAIGNsYXNzIFJ1bkJlbmNobWFya1Rlc3RzKHNoZWxsLlRlc3Qp
OgogICAgICMgVGhlIGN1cnJlbnQgbWF4aW11bSB0aW1lb3V0IGZvciBhIGJlbmNobWFyayBwbGFu
IGlzIGFsc28gMTIwMC4KICAgICAjIFNvIHJhaXNlIHRoZSBidWlsZGJvdCB0aW1lb3V0IHRvIGF2
b2lkIGFib3J0aW5nIHRoaXMgd2hvbGUgc3RlcCB3aGVuIGEgdGVzdCB0aW1lb3V0cy4KICAgICB0
aW1lb3V0ID0gMTUwMAotICAgIGNvbW1hbmQgPSBbInB5dGhvbiIsICIuL1Rvb2xzL1NjcmlwdHMv
cnVuLWJlbmNobWFyayIsICItLWFsbHBsYW5zIl0KKyAgICBjb21tYW5kID0gWyJweXRob24iLCAi
Li9Ub29scy9TY3JpcHRzL3J1bi1iZW5jaG1hcmsiLCAiLS1hbGxwbGFucyIsCisgICAgICAgICAg
ICAgICAiLS11cGxvYWQtcmVzdWx0cy1jb25maWctZmlsZSIsICIuLi8uLi9ydW4tYmVuY2htYXJr
LWNvbmZpZy50eHQiLAorICAgICAgICAgICAgICAgIi0tYnJvd3Nlci12ZXJzaW9uIiwgV2l0aFBy
b3BlcnRpZXMoInIlKHJldmlzaW9uKXMiKV0KIAogICAgIGRlZiBzdGFydChzZWxmKToKICAgICAg
ICAgcGxhdGZvcm0gPSBzZWxmLmdldFByb3BlcnR5KCJwbGF0Zm9ybSIpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX3J1bm5lci5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfcnVu
bmVyLnB5CmluZGV4IDIzNzM4OWMyNGRjMTM5ZjZjNjA2ZDFlZGJiMmNmNzJjNWM1OTYyMWIuLjc2
Y2RiMmZmYjFiZTg4NTk2YTk1NjRjZjUxOTJkMzU2OTcyOTJlNzEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfcnVubmVyLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfcnVu
bmVyLnB5CkBAIC0xMSwxMCArMTEsMTMgQEAgaW1wb3J0IHRpbWUKIGltcG9ydCB0eXBlcwogaW1w
b3J0IG9zCiBpbXBvcnQgdXJscGFyc2UKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCBDb25maWdQYXJz
ZXIKIAogZnJvbSBiZW5jaG1hcmtfYnVpbGRlciBpbXBvcnQgQmVuY2htYXJrQnVpbGRlcgogZnJv
bSBiZW5jaG1hcmtfcmVzdWx0cyBpbXBvcnQgQmVuY2htYXJrUmVzdWx0cwogZnJvbSBicm93c2Vy
X2RyaXZlci5icm93c2VyX2RyaXZlcl9mYWN0b3J5IGltcG9ydCBCcm93c2VyRHJpdmVyRmFjdG9y
eQorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKIGZyb20gaHR0cF9zZXJ2ZXJf
ZHJpdmVyLmh0dHBfc2VydmVyX2RyaXZlcl9mYWN0b3J5IGltcG9ydCBIVFRQU2VydmVyRHJpdmVy
RmFjdG9yeQogZnJvbSB1dGlscyBpbXBvcnQgdGltZW91dAogCkBAIC0yNCw3ICsyNyw3IEBAIF9s
b2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogY2xhc3MgQmVuY2htYXJrUnVubmVy
KG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGxhbl9maWxlLCBsb2NhbF9jb3B5
LCBjb3VudF9vdmVycmlkZSwgYnVpbGRfZGlyLCBvdXRwdXRfZmlsZSwgcGxhdGZvcm0sIGJyb3dz
ZXIsIHNjYWxlX3VuaXQ9VHJ1ZSwgZGV2aWNlX2lkPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwbGFuX2ZpbGUsIGxvY2FsX2NvcHksIGNvdW50X292ZXJyaWRlLCBidWlsZF9kaXIsIG91
dHB1dF9maWxlLCBwbGF0Zm9ybSwgYnJvd3Nlciwgc2NhbGVfdW5pdD1UcnVlLCBkZXZpY2VfaWQ9
Tm9uZSwgdXBsb2FkX3Jlc3VsdHNfY29uZmlnX2ZpbGU9Tm9uZSwgYnJvd3Nlcl92ZXJzaW9uPU5v
bmUpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwbGFuX2ZpbGUgPSBzZWxmLl9maW5kX3Bs
YW5fZmlsZShwbGFuX2ZpbGUpCiAgICAgICAgICAgICB3aXRoIG9wZW4ocGxhbl9maWxlLCAncicp
IGFzIGZwOgpAQCAtNDMsNiArNDYsOSBAQCBjbGFzcyBCZW5jaG1hcmtSdW5uZXIob2JqZWN0KToK
ICAgICAgICAgICAgICAgICBzZWxmLl9vdXRwdXRfZmlsZSA9IG91dHB1dF9maWxlCiAgICAgICAg
ICAgICAgICAgc2VsZi5fc2NhbGVfdW5pdCA9IHNjYWxlX3VuaXQKICAgICAgICAgICAgICAgICBz
ZWxmLl9kZXZpY2VfaWQgPSBkZXZpY2VfaWQKKyAgICAgICAgICAgICAgICBzZWxmLl91cGxvYWRf
cmVzdWx0c19jb25maWdfZmlsZSA9IHVwbG9hZF9yZXN1bHRzX2NvbmZpZ19maWxlCisgICAgICAg
ICAgICAgICAgc2VsZi5fYnJvd3Nlcl9kcml2ZXIuYnJvd3Nlcl92ZXJzaW9uID0gYnJvd3Nlcl92
ZXJzaW9uCisKICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyb3I6CiAgICAgICAgICAgICBf
bG9nLmVycm9yKCdDYW4gbm90IG9wZW4gcGxhbiBmaWxlOiB7cGxhbl9maWxlfSAtIEVycm9yIHtl
cnJvcn0nLmZvcm1hdChwbGFuX2ZpbGU9cGxhbl9maWxlLCBlcnJvcj1lcnJvcikpCiAgICAgICAg
ICAgICByYWlzZSBlcnJvcgpAQCAtMTExLDYgKzExNyw3IEBAIGNsYXNzIEJlbmNobWFya1J1bm5l
cihvYmplY3QpOgogICAgICAgICAgICAgX2xvZy5pbmZvKCdFbmQgdGhlIGl0ZXJhdGlvbiB7Y3Vy
cmVudF9pdGVyYXRpb259IG9mIHtpdGVyYXRpb25zfSBmb3IgY3VycmVudCBiZW5jaG1hcmsnLmZv
cm1hdChjdXJyZW50X2l0ZXJhdGlvbj1pdGVyYXRpb24sIGl0ZXJhdGlvbnM9Y291bnQpKQogCiAg
ICAgICAgIHJlc3VsdHMgPSBzZWxmLl93cmFwKHJlc3VsdHMpCisgICAgICAgIHNlbGYuX3VwbG9h
ZF9yZXN1bHRzKHJlc3VsdHMsIHNlbGYuX3VwbG9hZF9yZXN1bHRzX2NvbmZpZ19maWxlKQogICAg
ICAgICBvdXRwdXRfZmlsZSA9IHNlbGYuX291dHB1dF9maWxlIGlmIHNlbGYuX291dHB1dF9maWxl
IGVsc2Ugc2VsZi5fcGxhblsnb3V0cHV0X2ZpbGUnXQogICAgICAgICBzZWxmLl9kdW1wKHNlbGYu
X21lcmdlKHsnZGVidWdPdXRwdXQnOiBkZWJ1Z19vdXRwdXRzfSwgcmVzdWx0cyksIG91dHB1dF9m
aWxlKQogICAgICAgICBzZWxmLnNob3dfcmVzdWx0cyhyZXN1bHRzLCBzZWxmLl9zY2FsZV91bml0
KQpAQCAtMTYxLDYgKzE2OCw1NCBAQCBjbGFzcyBCZW5jaG1hcmtSdW5uZXIob2JqZWN0KToKICAg
ICAgICAgIyBmb3Igb3RoZXIgdHlwZXMKICAgICAgICAgcmV0dXJuIGEgKyBiCiAKKyAgICBkZWYg
IF91cGxvYWRfcmVzdWx0cyhzZWxmLCByZXN1bHRzLCBjb25maWdfZmlsZT1Ob25lKToKKyAgICAg
ICAgaWYgY29uZmlnX2ZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAg
ICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShjb25maWdfZmlsZSk6CisgICAgICAgICAgICByYWlz
ZSBFeGNlcHRpb24oJ0NhbiBub3Qgb3BlbiBjb25maWcgZmlsZSBmb3IgdXBsb2FkaW5nIHJlc3Vs
dHMgYXQ6IHtjb25maWdfZmlsZX0nLmZvcm1hdChjb25maWdfZmlsZT1jb25maWdfZmlsZSkpCisK
KyAgICAgICAgdXBsb2FkX2RhdGEgPSBPcmRlcmVkRGljdChbKCdib3RfaWQnLCAnJyksICgnYm90
X3Bhc3N3b3JkJywgJycpXSkKKyAgICAgICAgdXBsb2FkX2RhdGFbJ2Jyb3dzZXJfaWQnXSA9IHNl
bGYuX2Jyb3dzZXJfZHJpdmVyLmJyb3dzZXJfbmFtZQorICAgICAgICB1cGxvYWRfZGF0YVsnYnJv
d3Nlcl92ZXJzaW9uJ10gPSBzZWxmLl9icm93c2VyX2RyaXZlci5nZXRfYnJvd3Nlcl92ZXJzaW9u
KCkKKyAgICAgICAgaWYgdXBsb2FkX2RhdGFbJ2Jyb3dzZXJfdmVyc2lvbiddIGlzIE5vbmU6Cisg
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0NhbiBub3QgdXBsb2FkIHJlc3VsdHMgYmVjYXVz
ZSBpcyBub3QgcG9zc2libGUgdG8gYXV0by1kZXRlcm1pbmUgYnJvd3NlciB2ZXJzaW9uIGZvciBi
cm93c2VyOiB7YnJvd3Nlcl9uYW1lfS4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdU
cnkgdG8gc3BlY2lmeSBpdCB3aXRoIHRoZSAtLWJyb3dzZXItdmVyc2lvbiBhcmd1bWVudC4nLmZv
cm1hdChicm93c2VyX25hbWU9dXBsb2FkX2RhdGFbJ2Jyb3dzZXJfaWQnXSkpCisKKyAgICAgICAg
dXBsb2FkX2RhdGFbJ3Rlc3RfaWQnXSA9IHNlbGYuX3BsYW5fbmFtZQorICAgICAgICBpZiAnc3Zu
X3NvdXJjZScgaW4gc2VsZi5fcGxhbjoKKyAgICAgICAgICAgIHVwbG9hZF9kYXRhWyd0ZXN0X3Zl
cnNpb24nXSA9IHNlbGYuX3BsYW5bJ3N2bl9zb3VyY2UnXQorICAgICAgICBlbGlmICdyZW1vdGVf
YXJjaGl2ZScgaW4gc2VsZi5fcGxhbjoKKyAgICAgICAgICAgIHVwbG9hZF9kYXRhWyd0ZXN0X3Zl
cnNpb24nXSA9IHNlbGYuX3BsYW5bJ3JlbW90ZV9hcmNoaXZlJ10KKyAgICAgICAgaWYgdXBsb2Fk
X2RhdGFbJ3Rlc3RfdmVyc2lvbiddIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oJ0NhbiBub3QgdXBsb2FkIHJlc3VsdHMgYmVjYXVzZSBpcyBub3QgcG9zc2libGUgdG8gZGV0
ZXJtaW5lIHRlc3QgdmVyc2lvbiBmb3IgdGVzdCBwbGFuOiB7dGVzdF9pZH0nLmZvcm1hdCh0ZXN0
X2lkPXVwbG9hZF9kYXRhWyd0ZXN0X2lkJ10pKQorCisgICAgICAgIHVwbG9hZF9kYXRhWyd0ZXN0
X2RhdGEnXSA9IGpzb24uZHVtcHMocmVzdWx0cykKKworICAgICAgICBjb25maWdfcGFyc2VyID0g
Q29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlcigpCisgICAgICAgIGNvbmZpZ19wYXJzZXIucmVh
ZChjb25maWdfZmlsZSkKKyAgICAgICAgdXBsb2FkX2ZhaWxlZCA9IEZhbHNlCisgICAgICAgIGZv
ciBzZXJ2ZXIgaW4gY29uZmlnX3BhcnNlci5zZWN0aW9ucygpOgorICAgICAgICAgICAgdXBsb2Fk
X2RhdGFbJ2JvdF9pZCddID0gY29uZmlnX3BhcnNlci5nZXQoc2VydmVyLCAnYm90X2lkJykKKyAg
ICAgICAgICAgIHVwbG9hZF9kYXRhWydib3RfcGFzc3dvcmQnXSA9IGNvbmZpZ19wYXJzZXIuZ2V0
KHNlcnZlciwgJ2JvdF9wYXNzd29yZCcpCisgICAgICAgICAgICBwb3N0X2RhdGEgPSB1cmxsaWIu
dXJsZW5jb2RlKHVwbG9hZF9kYXRhKQorICAgICAgICAgICAgcG9zdF91cmwgPSBjb25maWdfcGFy
c2VyLmdldChzZXJ2ZXIsICdwb3N0X3VybCcpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgcG9zdF9yZXF1ZXN0ID0gdXJsbGliLnVybG9wZW4ocG9zdF91cmwsIHBvc3RfZGF0YSkK
KyAgICAgICAgICAgICAgICBpZiBwb3N0X3JlcXVlc3QuZ2V0Y29kZSgpID09IDIwMDoKKyAgICAg
ICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdTdWNlc2Z1bGx5IHVwbG9hZGVkIHJlc3VsdHMgdG8g
c2VydmVyIHtzZXJ2ZXJfbmFtZX0gZm9yIHRlc3Qge3Rlc3RfbmFtZX0gYW5kIGJyb3dzZXIge2Jy
b3dzZXJfbmFtZX0gdmVyc2lvbiB7YnJvd3Nlcl92ZXJzaW9ufScuZm9ybWF0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9uYW1lPXNlcnZlciwgdGVzdF9uYW1lPXVwbG9h
ZF9kYXRhWyd0ZXN0X2lkJ10sIGJyb3dzZXJfbmFtZT11cGxvYWRfZGF0YVsnYnJvd3Nlcl9pZCdd
LCBicm93c2VyX3ZlcnNpb249dXBsb2FkX2RhdGFbJ2Jyb3dzZXJfdmVyc2lvbiddKSkKKyAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB1cGxvYWRfZmFpbGVkID0gVHJ1
ZQorICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdUaGUgc2VydmVyIHtzZXJ2ZXJfbmFt
ZX0gcmV0dXJuZWQgYW4gZXJyb3IgY29kZToge2h0dHBfZXJyb3J9Jy5mb3JtYXQoc2VydmVyX25h
bWU9c2VydmVyLCBodHRwX2Vycm9yPXBvc3RfcmVxdWVzdC5nZXRjb2RlKCkpKQorICAgICAgICAg
ICAgICAgICAgICBfbG9nLmVycm9yKCdUaGUgZXJyb3IgdGV4dCBmcm9tIHRoZSBzZXJ2ZXIge3Nl
cnZlcl9uYW1lfSB3YXM6ICJ7ZXJyb3JfdGV4dH0iJy5mb3JtYXQoc2VydmVyX25hbWU9c2VydmVy
LCBlcnJvcl90ZXh0PXBvc3RfcmVxdWVzdC5yZWFkKCkpKQorICAgICAgICAgICAgZXhjZXB0IEV4
Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHVwbG9hZF9mYWlsZWQgPSBUcnVlCisgICAg
ICAgICAgICAgICAgX2xvZy5lcnJvcignRXhjZXB0aW9uIHdoaWxlIHRyeWluZyB0byB1cGxvYWQg
cmVzdWx0cyB0byBzZXJ2ZXIge3NlcnZlcl9uYW1lfScuZm9ybWF0KHNlcnZlcl9uYW1lPXNlcnZl
cikpCisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihlKQorICAgICAgICBpZiB1cGxvYWRfZmFp
bGVkOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdPbmUgb3IgbW9yZSBwcm9ibGVtcyB3
ZXJlIGZvdW5kIHdoaWxlIHRyeWluZyB0byB1cGxvYWQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlcnZl
cihzKScpCisKKwogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzaG93X3Jlc3VsdHMoY2xzLCBy
ZXN1bHRzLCBzY2FsZV91bml0PVRydWUpOgogICAgICAgICByZXN1bHRzID0gQmVuY2htYXJrUmVz
dWx0cyhyZXN1bHRzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1h
cmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVy
LnB5CmluZGV4IGExY2JlMmQ5ODVhNWM4NTlmOTMxZWJhODRlODdiYTQwMTE3ZTQ0OTMuLjdjMTNm
ZjZiNzNiMzYyNjRlOTM1MTA5YTVlZmU2M2FjNmJiZjFlZDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2VyX2Ry
aXZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJv
d3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2ZXIucHkKQEAgLTYsNiArNiw3IEBAIGZyb20gYWJjIGlt
cG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAogY2xhc3MgQnJvd3NlckRyaXZlcihvYmplY3Qp
OgogICAgIHBsYXRmb3JtID0gTm9uZQogICAgIGJyb3dzZXJfbmFtZSA9IE5vbmUKKyAgICBicm93
c2VyX3ZlcnNpb24gPSBOb25lCiAKICAgICBfX19tZXRhY2xhc3NfX18gPSBBQkNNZXRhCiAKQEAg
LTI4LDMgKzI5LDcgQEAgY2xhc3MgQnJvd3NlckRyaXZlcihvYmplY3QpOgogICAgIEBhYnN0cmFj
dG1ldGhvZAogICAgIGRlZiByZXN0b3JlX2VudihzZWxmKToKICAgICAgICAgcGFzcworCisgICAg
QGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGdldF9icm93c2VyX3ZlcnNpb24oc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLmJyb3dzZXJfdmVyc2lvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2xpbnV4X2Jyb3dzZXJf
ZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dz
ZXJfZHJpdmVyL2xpbnV4X2Jyb3dzZXJfZHJpdmVyLnB5CmluZGV4IDM4NGU1YTZhOTc5NDE2YTNl
NDI3ZGEzNzFkMDg5MDI2YjA1YmFiMzcuLjYyNjY1ZTA2NzM0YmM4MjI1ZTgzMzU2NzZlNjcyMDUz
MzgyMzY0ODYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci9icm93c2VyX2RyaXZlci9saW51eF9icm93c2VyX2RyaXZlci5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvbGludXhfYnJv
d3Nlcl9kcml2ZXIucHkKQEAgLTczLDEwICs3MywxMyBAQCBjbGFzcyBMaW51eEJyb3dzZXJEcml2
ZXIoQnJvd3NlckRyaXZlcik6CiAgICAgICAgICAgICAgICAgICAgIG1haW5fYnJvd3Nlcl9wcm9j
ZXNzLmtpbGwoKQogICAgICAgICAgICAgICAgICAgICBmb3IgYnJvd3Nlcl9jaGlsZCBpbiBicm93
c2VyX2NoaWxkcmVuOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnJvd3Nlcl9jaGlsZC5p
c19ydW5uaW5nKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdLaWxs
aW5nIHN0aWxsIGFsaXZlIHticm93c2VyX25hbWV9IGNoaWxkIHdpdGggcGlkIHticm93c2VyX3Bp
ZH0gYW5kIGNtZDoge2Jyb3dzZXJfY21kfScuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJvd3Nlcl9uYW1lPXNlbGYuYnJvd3Nlcl9uYW1lLCBicm93c2Vy
X3BpZD1icm93c2VyX2NoaWxkLnBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyb3dzZXJfY21kPScgJy5qb2luKGJyb3dzZXJfY2hpbGQuY21kbGluZSgpKS5zdHJp
cCgpIG9yIGJyb3dzZXJfY2hpbGQubmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicm93c2VyX2NoaWxkLmtpbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeTog
ICMgdGhlIGJyb3dzZXJfY2hpbGQgcHJvY2VzcyBjYW4gZW5kIGJldHdlZW4gdGhlIGNoZWNrIGFu
ZCB0aGUga2lsbCBjYWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2Vy
X2NoaWxkLmtpbGwoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbG9nLmluZm8o
J0tpbGxpbmcgc3RpbGwgYWxpdmUge2Jyb3dzZXJfbmFtZX0gY2hpbGQgd2l0aCBwaWQge2Jyb3dz
ZXJfcGlkfSBhbmQgY21kOiB7YnJvd3Nlcl9jbWR9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlcl9uYW1lPXNlbGYuYnJvd3Nlcl9uYW1l
LCBicm93c2VyX3BpZD1icm93c2VyX2NoaWxkLnBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicm93c2VyX2NtZD0nICcuam9pbihicm93c2VyX2NoaWxkLmNt
ZGxpbmUoKSkuc3RyaXAoKSBvciBicm93c2VyX2NoaWxkLm5hbWUoKSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhjZXB0IHBzdXRpbC5Ob1N1Y2hQcm9jZXNzOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnS2lsbGluZyBicm93c2VyIHticm93c2VyX25hbWV9
IHdpdGggcGlkIHticm93c2VyX3BpZH0nLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicm93c2VyX25hbWU9c2VsZi5icm93c2VyX25hbWUsIGJyb3dzZXJfcGlkPXNlbGYu
X2Jyb3dzZXJfcHJvY2Vzcy5waWQpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2xpbnV4X2Nocm9tZV9kcml2ZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIv
bGludXhfY2hyb21lX2RyaXZlci5weQppbmRleCA3MWMxNzI3MDJhZDUxZmM0NzRlZjBjNTdmMTE0
YWYyYzYxZWM5ZDNlLi5lMDE0Mjk0YTkzNTJhMzViMDA5MTVlZWViNzQxZTFkOTc3MGFiOWIzIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nl
cl9kcml2ZXIvbGludXhfY2hyb21lX2RyaXZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvbGludXhfY2hyb21lX2RyaXZlci5w
eQpAQCAtMjQsOCArMjQsMTIgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2lt
cG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCiBmcm9tIGxpbnV4X2Jy
b3dzZXJfZHJpdmVyIGltcG9ydCBMaW51eEJyb3dzZXJEcml2ZXIKIAorX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKF9fbmFtZV9fKQogCiBjbGFzcyBMaW51eENocm9tZURyaXZlcihMaW51eEJyb3dz
ZXJEcml2ZXIpOgogICAgIGJyb3dzZXJfbmFtZSA9ICdjaHJvbWUnCkBAIC0zNSwzICszOSwxOCBA
QCBjbGFzcyBMaW51eENocm9tZURyaXZlcihMaW51eEJyb3dzZXJEcml2ZXIpOgogICAgICAgICBz
ZWxmLl9icm93c2VyX2FyZ3VtZW50cyA9IFsnLS10ZW1wLXByb2ZpbGUnLCAnLS1zdGFydC1tYXhp
bWl6ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1ob21lcGFnZScs
IHVybF0KICAgICAgICAgc3VwZXIoTGludXhDaHJvbWVEcml2ZXIsIHNlbGYpLmxhdW5jaF91cmwo
dXJsLCBvcHRpb25zLCBicm93c2VyX2J1aWxkX3BhdGgpCisKKyAgICBkZWYgZ2V0X2Jyb3dzZXJf
dmVyc2lvbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5icm93c2VyX3ZlcnNpb246CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5icm93c2VyX3ZlcnNpb24KKyAgICAgICAgIyBWZXJzaW9uIG5vdCBw
YXNzZWQgaW4gdGhlIGFyZ3VtZW50cywgc28gdHJ5IHRvIG9idGFpbiBpdC4KKyAgICAgICAgdmVy
c2lvbiA9IE5vbmUKKyAgICAgICAgY2hyb21lX3ZlcnNpb25fcHJvY2VzcyA9IHN1YnByb2Nlc3Mu
UG9wZW4oW3NlbGYucHJvY2Vzc19uYW1lLCAnLS1wcm9kdWN0LXZlcnNpb24nXSwgc3Rkb3V0PXN1
YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBvdXRwdXQg
PSBjaHJvbWVfdmVyc2lvbl9wcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAgaWYgY2hyb21l
X3ZlcnNpb25fcHJvY2Vzcy5yZXR1cm5jb2RlID09IDA6CisgICAgICAgICAgICBjaHJvbWVfdmVy
c2lvbiA9IG91dHB1dFswXS5zcGxpdGxpbmVzKClbMF0uc3RyaXAoKQorICAgICAgICAgICAgaWYg
cmUuc2VhcmNoKCdeWzAtOS5dKyQnLCBjaHJvbWVfdmVyc2lvbik6CisgICAgICAgICAgICAgICAg
dmVyc2lvbiA9IGNocm9tZV92ZXJzaW9uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIF9sb2cud2FybmluZygiSWdub3JpbmcgdW5rbm93biB2ZXJzaW9uIHNjaGVtZSBmb3IgY2hy
b21lOiB7Y2hyb21lX3ZlcnNpb259Ii5mb3JtYXQoY2hyb21lX3ZlcnNpb249Y2hyb21lX3ZlcnNp
b24pKQorICAgICAgICByZXR1cm4gdmVyc2lvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2xpbnV4X21pbmlicm93c2Vy
Z3RrX2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci9i
cm93c2VyX2RyaXZlci9saW51eF9taW5pYnJvd3Nlcmd0a19kcml2ZXIucHkKaW5kZXggZWRjOTdj
NWQwODhlNzBiNWRjNjkxMDllOGUzN2Y4ZmUwNjlmNjI0YS4uMjBmMmVmZjBkZDVkYjQxMTcxY2Uy
MDc1MjlhOWUzZmViMTMwMjU2ZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
ZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2xpbnV4X21pbmlicm93c2VyZ3RrX2RyaXZl
ci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvYnJvd3Nl
cl9kcml2ZXIvbGludXhfbWluaWJyb3dzZXJndGtfZHJpdmVyLnB5CkBAIC0yNCw2ICsyNCw4IEBA
CiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJw
cm9jZXNzCiBmcm9tIGxpbnV4X2Jyb3dzZXJfZHJpdmVyIGltcG9ydCBMaW51eEJyb3dzZXJEcml2
ZXIKIAogCkBAIC0zOCwzICs0MCwyMyBAQCBjbGFzcyBHVEtNaW5pQnJvd3NlckRyaXZlcihMaW51
eEJyb3dzZXJEcml2ZXIpOgogICAgICAgICBzZWxmLl9icm93c2VyX2FyZ3VtZW50cy5hcHBlbmQo
Jy0tZ2VvbWV0cnk9e3d9eHtofScuZm9ybWF0KHc9c2VsZi5fc2NyZWVuX3NpemUoKS53aWR0aCwg
aD1zZWxmLl9zY3JlZW5fc2l6ZSgpLmhlaWdodCkpCiAgICAgICAgIHNlbGYuX2Jyb3dzZXJfYXJn
dW1lbnRzLmFwcGVuZCh1cmwpCiAgICAgICAgIHN1cGVyKEdUS01pbmlCcm93c2VyRHJpdmVyLCBz
ZWxmKS5sYXVuY2hfdXJsKHVybCwgb3B0aW9ucywgYnJvd3Nlcl9idWlsZF9wYXRoKQorCisgICAg
ZGVmIGdldF9icm93c2VyX3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuYnJvd3Nlcl92
ZXJzaW9uOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnJvd3Nlcl92ZXJzaW9uCisgICAgICAg
ICMgVmVyc2lvbiBub3QgcGFzc2VkIGluIHRoZSBhcmd1bWVudHMsIHNvIHRyeSB0byBvYnRhaW4g
aXQuCisgICAgICAgIHZlcnNpb24gPSBOb25lCisgICAgICAgIGlmIHNlbGYucHJvY2Vzc19uYW1l
LmVuZHN3aXRoKCdUb29scy9TY3JpcHRzL3J1bi1taW5pYnJvd3NlcicpOgorICAgICAgICAgICAg
aWYgb3MucGF0aC5pc2RpcignLnN2bicpIG9yIG9zLnBhdGguaXNkaXIoJy5naXQnKToKKyAgICAg
ICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKCcuc3ZuJyk6CisgICAgICAgICAgICAgICAgICAg
IHN2bl9pbmZvX2NtZCA9IFsnc3ZuJywgJ2luZm8nXQorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIHN2bl9pbmZvX2NtZCA9IFsnZ2l0JywgJ3N2bicsICdpbmZvJ10K
KyAgICAgICAgICAgICAgICBzdm5pbmZvX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHN2bl9p
bmZvX2NtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VU
KQorICAgICAgICAgICAgICAgIG91dHB1dCA9IHN2bmluZm9fcHJvY2Vzcy5jb21tdW5pY2F0ZSgp
CisgICAgICAgICAgICAgICAgaWYgc3ZuaW5mb19wcm9jZXNzLnJldHVybmNvZGUgPT0gMDoKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0WzBdLnNwbGl0bGluZXMoKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUmV2aXNpb246Iik6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9ICJye3JldmlzaW9uX251bWJlcn0i
LmZvcm1hdChyZXZpc2lvbl9udW1iZXI9aW50KGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gdmVy
c2lvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVy
L3J1bl9iZW5jaG1hcmsucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5u
ZXIvcnVuX2JlbmNobWFyay5weQppbmRleCA3ZjZiODA4NmQ2MmRlNWFlMmVjYmE0ZTI2NjUwYmY1
MTQ1NWU3ZWUzLi5hZTYxYjM0NmQxYzBiMmE4ZTg1YjQ4NDllZjE4NGJiNjY3OWI1ZTliIDEwMDc1
NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcnVuX2JlbmNo
bWFyay5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JlbmNobWFya19ydW5uZXIvcnVu
X2JlbmNobWFyay5weQpAQCAtMzcsNiArMzcsOCBAQCBkZWYgcGFyc2VfYXJncygpOgogICAgIHBh
cnNlci5hZGRfYXJndW1lbnQoJy0tY291bnQnLCBkZXN0PSdjb3VudE92ZXJyaWRlJywgdHlwZT1p
bnQsIGhlbHA9J051bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIGJlbmNobWFyay4gZS5nLiA1JykK
ICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRldmljZS1pZCcsIGRlc3Q9J2RldmljZV9pZCcs
IGRlZmF1bHQ9Tm9uZSkKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW5vLWFkanVzdC11bml0
JywgZGVzdD0nc2NhbGVfdW5pdCcsIGFjdGlvbj0nc3RvcmVfZmFsc2UnKQorICAgIHBhcnNlci5h
ZGRfYXJndW1lbnQoJy0tdXBsb2FkLXJlc3VsdHMtY29uZmlnLWZpbGUnLCBkZXN0PSd1cGxvYWRf
cmVzdWx0c19jb25maWdfZmlsZScsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nQ29uZmlndXJhdGlvbiBm
aWxlIGZvciBzZW5kaW5nIHRoZSByZXN1bHRzIHRvIGEgcGVyZm9ybWFuY2UgZGFzaGJvYXJkJykK
KyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJyb3dzZXItdmVyc2lvbicsIGRlc3Q9J2Jyb3dz
ZXJfdmVyc2lvbicsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhl
IGJyb3dzZXIgdmVyc2lvbi4gVGhlIHNjcmlwdCB0cmllcyB0byBhdXRvLWRldGVjdCB0aGUgYnJv
d3NlciB2ZXJzaW9uLiBCdXQgc29tZXRpbWVzIGlzIG5lZWRlZCB0byBtYW51YWxseSBwYXNzIHRo
aXMgaW5mby4nKQogICAgIG11dHVhbF9ncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVz
aXZlX2dyb3VwKHJlcXVpcmVkPVRydWUpCiAgICAgbXV0dWFsX2dyb3VwLmFkZF9hcmd1bWVudCgn
LS1yZWFkLXJlc3VsdHMtanNvbicsIGRlc3Q9J2pzb25fZmlsZScsIGhlbHA9J1NwZWNpZnkgZmls
ZSB5b3Ugd2FudCB0byBmb3JtYXQnKQogICAgIG11dHVhbF9ncm91cC5hZGRfYXJndW1lbnQoJy0t
cGxhbicsIGRlc3Q9J3BsYW4nLCBoZWxwPSdCZW5jaG1hcmsgcGxhbiB0byBydW4uIGUuZy4gc3Bl
ZWRvbWV0ZXIsIGpldHN0cmVhbScpCkBAIC02MSwzNSArNjMsMzggQEAgZGVmIHN0YXJ0KGFyZ3Mp
OgogICAgICAgICAgICAgZGVsIHJlc3VsdHNfanNvblsnZGVidWdPdXRwdXQnXQogICAgICAgICBC
ZW5jaG1hcmtSdW5uZXIuc2hvd19yZXN1bHRzKHJlc3VsdHNfanNvbiwgYXJncy5zY2FsZV91bml0
KQogICAgICAgICByZXR1cm4KLSAgICBpZiBhcmdzLmFsbHBsYW5zOgotICAgICAgICBmYWlsZWQg
PSBbXQotICAgICAgICBza2lwcGVkID0gW10KLSAgICAgICAgcGxhbmRpciA9IG9zLnBhdGguam9p
bihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZGF0YS9wbGFucycpCisgICAgZmFpbGVkID0g
W10KKyAgICBza2lwcGVkID0gW10KKyAgICBwbGFuZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGgu
ZGlybmFtZShfX2ZpbGVfXyksICdkYXRhL3BsYW5zJykKKyAgICBpZiBhcmdzLnBsYW46CisgICAg
ICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ocGxhbmRpciwgJ3twbGFuX25h
bWV9LnBsYW4nLmZvcm1hdChwbGFuX25hbWU9YXJncy5wbGFuKSkpOgorICAgICAgICAgICAgcmFp
c2UgRXhjZXB0aW9uKCdDYW50IGZpbmQgYSBmaWxlIG5hbWVkIHtwbGFuX25hbWV9LnBsYW4gaW4g
ZGlyZWN0b3J5IHtwbGFuX2RpcmVjdG9yeX0nLmZvcm1hdChwbGFuX25hbWU9YXJncy5wbGFuLCBw
bGFuX2RpcmVjdG9yeT1wbGFuZGlyKSkKKyAgICAgICAgcGxhbmxpc3QgPSBbYXJncy5wbGFuXQor
ICAgIGVsaWYgYXJncy5hbGxwbGFuczoKICAgICAgICAgcGxhbmxpc3QgPSBbb3MucGF0aC5zcGxp
dGV4dChmKVswXSBmb3IgZiBpbiBvcy5saXN0ZGlyKHBsYW5kaXIpIGlmIGYuZW5kc3dpdGgoJy5w
bGFuJyldCiAgICAgICAgIHNraXBwZWRmaWxlID0gb3MucGF0aC5qb2luKHBsYW5kaXIsICdTa2lw
cGVkJykKICAgICAgICAgaWYgbm90IHBsYW5saXN0OgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCdDYW50IGZpbmQgYW55IC5wbGFuIGZpbGUgaW4gZGlyZWN0b3J5ICVzJyAlIHBsYW5kaXIp
CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0NhbnQgZmluZCBhbnkgLnBsYW4gZmlsZSBp
biBkaXJlY3Rvcnkge3BsYW5fZGlyZWN0b3J5fScuZm9ybWF0KHBsYW5fZGlyZWN0b3J5PXBsYW5k
aXIpKQogICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShza2lwcGVkZmlsZSk6CiAgICAgICAgICAg
ICBza2lwcGVkID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBvcGVuKHNraXBwZWRmaWxlKSBp
ZiBub3QgbGluZS5zdGFydHN3aXRoKCcjJykgYW5kIGxlbihsaW5lKSA+IDFdCi0gICAgICAgIGZv
ciBwbGFuIGluIHNvcnRlZChwbGFubGlzdCk6Ci0gICAgICAgICAgICBpZiBwbGFuIGluIHNraXBw
ZWQ6Ci0gICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdTa2lwcGluZyBiZW5jaG1hcmsgcGxhbjog
JXMgYmVjYXVzZSBpcyBsaXN0ZWQgb24gdGhlIFNraXBwZWQgZmlsZScgJSBwbGFuKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBfbG9nLmluZm8oJ1N0YXJ0aW5nIGJlbmNo
bWFyayBwbGFuOiAlcycgJSBwbGFuKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAg
IHJ1bm5lciA9IEJlbmNobWFya1J1bm5lcihwbGFuLCBhcmdzLmxvY2FsQ29weSwgYXJncy5jb3Vu
dE92ZXJyaWRlLCBhcmdzLmJ1aWxkRGlyLCBhcmdzLm91dHB1dCwgYXJncy5wbGF0Zm9ybSwgYXJn
cy5icm93c2VyLCBhcmdzLnNjYWxlX3VuaXQsIGFyZ3MuZGV2aWNlX2lkKQotICAgICAgICAgICAg
ICAgIHJ1bm5lci5leGVjdXRlKCkKLSAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ0ZpbmlzaGVk
IGJlbmNobWFyayBwbGFuOiAlcycgJSBwbGFuKQotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJk
SW50ZXJydXB0OgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQ6Ci0g
ICAgICAgICAgICAgICAgZmFpbGVkLmFwcGVuZChwbGFuKQotICAgICAgICAgICAgICAgIF9sb2cu
ZXhjZXB0aW9uKCdFcnJvciBydW5uaW5nIGJlbmNobWFyayBwbGFuOiAlcycgJSBwbGFuKQotICAg
ICAgICBpZiBmYWlsZWQ6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCdUaGUgZm9sbG93aW5nIGJl
bmNobWFyayBwbGFucyBoYXZlIGZhaWxlZDogJXMnICUgZmFpbGVkKQotICAgICAgICByZXR1cm4g
bGVuKGZhaWxlZCkKLSAgICBydW5uZXIgPSBCZW5jaG1hcmtSdW5uZXIoYXJncy5wbGFuLCBhcmdz
LmxvY2FsQ29weSwgYXJncy5jb3VudE92ZXJyaWRlLCBhcmdzLmJ1aWxkRGlyLCBhcmdzLm91dHB1
dCwgYXJncy5wbGF0Zm9ybSwgYXJncy5icm93c2VyLCBhcmdzLnNjYWxlX3VuaXQsIGFyZ3MuZGV2
aWNlX2lkKQotICAgIHJ1bm5lci5leGVjdXRlKCkKKworICAgIGZvciBwbGFuIGluIHNvcnRlZChw
bGFubGlzdCk6CisgICAgICAgIGlmIHBsYW4gaW4gc2tpcHBlZDoKKyAgICAgICAgICAgIF9sb2cu
aW5mbygnU2tpcHBpbmcgYmVuY2htYXJrIHBsYW46IHtwbGFuX25hbWV9IGJlY2F1c2UgaXMgbGlz
dGVkIG9uIHRoZSBTa2lwcGVkIGZpbGUnLmZvcm1hdChwbGFuX25hbWU9cGxhbikpCisgICAgICAg
ICAgICBjb250aW51ZQorICAgICAgICBfbG9nLmluZm8oJ1N0YXJ0aW5nIGJlbmNobWFyayBwbGFu
OiB7cGxhbl9uYW1lfScuZm9ybWF0KHBsYW5fbmFtZT1wbGFuKSkKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgcnVubmVyID0gQmVuY2htYXJrUnVubmVyKHBsYW4sIGFyZ3MubG9jYWxDb3B5LCBh
cmdzLmNvdW50T3ZlcnJpZGUsIGFyZ3MuYnVpbGREaXIsIGFyZ3Mub3V0cHV0LCBhcmdzLnBsYXRm
b3JtLCBhcmdzLmJyb3dzZXIsIGFyZ3Muc2NhbGVfdW5pdCwgYXJncy5kZXZpY2VfaWQsIGFyZ3Mu
dXBsb2FkX3Jlc3VsdHNfY29uZmlnX2ZpbGUsIGFyZ3MuYnJvd3Nlcl92ZXJzaW9uKQorICAgICAg
ICAgICAgcnVubmVyLmV4ZWN1dGUoKQorICAgICAgICAgICAgX2xvZy5pbmZvKCdGaW5pc2hlZCBi
ZW5jaG1hcmsgcGxhbjoge3BsYW5fbmFtZX0nLmZvcm1hdChwbGFuX25hbWU9cGxhbikpCisgICAg
ICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAg
IGV4Y2VwdDoKKyAgICAgICAgICAgIGZhaWxlZC5hcHBlbmQocGxhbikKKyAgICAgICAgICAgIF9s
b2cuZXhjZXB0aW9uKCdFcnJvciBydW5uaW5nIGJlbmNobWFyayBwbGFuOiB7cGxhbl9uYW1lfScu
Zm9ybWF0KHBsYW5fbmFtZT1wbGFuKSkKKyAgICBpZiBmYWlsZWQ6CisgICAgICAgIF9sb2cuZXJy
b3IoJ1RoZSBmb2xsb3dpbmcgYmVuY2htYXJrIHBsYW5zIGhhdmUgZmFpbGVkOiB7bGlzdF9wbGFu
X2ZhaWxlZH0nLmZvcm1hdChsaXN0X3BsYW5fZmFpbGVkPWZhaWxlZCkpCisgICAgcmV0dXJuIGxl
bihmYWlsZWQpCiAKIAogZGVmIGZvcm1hdF9sb2dnZXIobG9nZ2VyKToKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1bm5lci91cGxvYWQtcmVzdWx0cy1jb25m
aWctZmlsZS1leGFtcGxlLnR4dCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmVuY2htYXJrX3J1
bm5lci91cGxvYWQtcmVzdWx0cy1jb25maWctZmlsZS1leGFtcGxlLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
N2E1Y2NmOGZhYTEzODliYjk3NDA2ZWFjYjViYzdjODA0MTkyODNhCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iZW5jaG1hcmtfcnVubmVyL3VwbG9hZC1yZXN1bHRz
LWNvbmZpZy1maWxlLWV4YW1wbGUudHh0CkBAIC0wLDAgKzEsMTYgQEAKKyMgT25lIG9yIG1vcmUg
c2VydmVycyBjYW4gYmUgc3BlY2lmaWVkLgorIyAgLSBydW4tYmVuY2htYXJrIHdpbGwgdXBsb2Fk
IHRoZSB0ZXN0IHJlc3VsdHMgdG8gYWxsIHRoZSBzZXJ2ZXJzLgorIyAgLSBFYWNoIG9uZSBvZiB0
aGUgc2VydmVycyBuZWVkcyB0byBoYXZlIDMgZW50cmllczogW2JvdF9pZCwgYm90X3Bhc3N3b3Jk
LCBwb3N0X3VybF0KKworIyBDb25maWd1cmF0aW9uIGZvciBkYXNoYm9hcmQgYmVuY2htYXJrLndl
YmtpdC5vcmcKK1tiZW5jaG1hcmsud2Via2l0Lm9yZ10KK2JvdF9pZCA9IGd0ay1yZWxlYXNlLXBl
cmYtYm90LTY0Citib3RfcGFzc3dvcmQgPSBSYW5kMG1QYXNzCitwb3N0X3VybCA9IGh0dHBzOi8v
YmVuY2htYXJrLndlYmtpdC5vcmcvZGFzaC9ib3QtcmVwb3J0CisKKyMgQ29uZmlndXJhdGlvbiBm
b3IgZGFzaGJvYXJkIGxvY2FsaG9zdC10ZXN0CitbbG9jYWxob3N0LXRlc3RdCitib3RfaWQgPSBn
dGstcmVsZWFzZS1wZXJmLWJvdC02NAorYm90X3Bhc3N3b3JkID0gUmFuZDBtUGFzcworcG9zdF91
cmwgPSBodHRwOi8vbG9jYWxob3N0OjgwMDAvZGFzaC9ib3QtcmVwb3J0CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342418</attachid>
            <date>2018-06-11 05:26:44 -0700</date>
            <delta_ts>2018-06-13 16:44:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166885-20180611142642.patch</filename>
            <type>text/plain</type>
            <size>23917</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyNjk5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTFmOTYxNDUyNWMxNTFmNDFmNmY1MmU1YjZlMzBkZmEw
MmI5Nzk2Ni4uNTFmZjI2YTdkNzFlNzAzZThlY2I4OGYyY2NjMTNhOWRlYmZmODMyNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQw
IEBACisyMDE4LTA2LTExICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBhIHNjcmlwdCB0byB1cGxvYWQgdGhlIGRhdGEg
Z2VuZXJhdGVkIHdpdGggcnVuLWJlbmNobWFyayB0byBhIGJyb3dzZXJwZXJmZGFzaCBzZXJ2ZXIg
YW5kIHVzZSBpdCBvbiB0aGUgZ3RrIHBlcmYgYm90CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgc2NyaXB0IHRoYXQg
d2lsbCBleGVjdXRlIHJ1bi1iZW5jaG1hcmsgYW5kIHVwbG9hZCB0aGUgcmVzdWx0cyBpdCBnZW5l
cmF0ZXMgdG8gYSBicm93c2VycGVyZmRhc2ggd2ViIGFwcC4KKworICAgICAgICBJdCBhbHNvIG1v
ZGlmaWVzIHRoZSBidWlsZGJvdCBjb25maWcgZmlsZSBzbyB0aGUgR1RLIHBlcmZvcm1hbmNlIGJv
dCBydW5zIHRoaXMgc2NyaXB0IG9uIHRoZSBwZXJmLXRlc3Qgc3RlcC4KKworICAgICAgICAqIEJ1
aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3N0ZXBzLnB5OgorICAgICAg
ICAoUnVuQmVuY2htYXJrVGVzdHMpOgorICAgICAgICAqIFNjcmlwdHMvYnJvd3NlcnBlcmZkYXNo
LWJlbmNobWFyazogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9icm93c2VycGVy
ZmRhc2gvUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Jyb3dzZXJw
ZXJmZGFzaC9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9i
cm93c2VycGVyZmRhc2gvYnJvd3NlcnBlcmZkYXNoX3J1bm5lci5weTogQWRkZWQuCisgICAgICAg
IChwYXJzZV9hcmdzKToKKyAgICAgICAgKEJyb3dzZXJQZXJmRGFzaFJ1bm5lcik6CisgICAgICAg
IChCcm93c2VyUGVyZkRhc2hSdW5uZXIuX19pbml0X18pOgorICAgICAgICAoQnJvd3NlclBlcmZE
YXNoUnVubmVyLl9wYXJzZV9jb25maWdfZmlsZSk6CisgICAgICAgIChCcm93c2VyUGVyZkRhc2hS
dW5uZXIuX2dldF90ZXN0X3ZlcnNpb25fc3RyaW5nKToKKyAgICAgICAgKEJyb3dzZXJQZXJmRGFz
aFJ1bm5lci5fZ2V0X3Rlc3RfZGF0YV9qc29uX3N0cmluZyk6CisgICAgICAgIChCcm93c2VyUGVy
ZkRhc2hSdW5uZXIuX3VwbG9hZF9yZXN1bHQpOgorICAgICAgICAoQnJvd3NlclBlcmZEYXNoUnVu
bmVyLnJ1bik6CisgICAgICAgIChmb3JtYXRfbG9nZ2VyKToKKyAgICAgICAgKG1haW4pOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYnJvd3NlcnBlcmZkYXNoL2Jyb3dzZXJwZXJmZGFzaF91
bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChGYWtlQmVuY2htYXJrUnVubmVyKToKKyAgICAg
ICAgKEZha2VCZW5jaG1hcmtSdW5uZXIuX19pbml0X18pOgorICAgICAgICAoRmFrZUJlbmNobWFy
a1J1bm5lci5leGVjdXRlKToKKyAgICAgICAgKEJyb3dzZXJQZXJmRGFzaFJ1bm5lclRlc3QpOgor
ICAgICAgICAoQnJvd3NlclBlcmZEYXNoUnVubmVyVGVzdC50ZXN0X2xpc3RfcGxhbnNfYXRfbGVh
c3RfZml2ZSk6CisgICAgICAgIChCcm93c2VyUGVyZkRhc2hSdW5uZXJUZXN0LnRlc3RfYmVuY2ht
YXJrX3J1bm5lcl9zdWJjbGFzc2VzX2F0X2xlYXN0X3R3byk6CisgICAgICAgIChCcm93c2VyUGVy
ZkRhc2hSdW5uZXJUZXN0LnRlc3RfY2FuX2NvbnN0cnVjdF9ydW5uZXJfb2JqZWN0X21pbmltdW1f
cGFyYW1ldGVycyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9icm93c2VycGVyZmRhc2gv
Y29uZmlnLWZpbGUtZXhhbXBsZS50eHQ6IEFkZGVkLgorCiAyMDE4LTA2LTExICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBG
aXggV1BFIEFQSSBhbmQgbGF5b3V0IHRlc3RzIGFmdGVyIHIyMzI2NzAuCmRpZmYgLS1naXQgYS9U
b29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9zdGVwcy5weSBi
L1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3N0ZXBzLnB5
CmluZGV4IDA2MzFlODZlM2M1NWQ4NGMwNTA1YWY2OTg1NzU2ZTkwYTUzZDVmZjEuLjE5ZDVkZjcx
YjY1ZmI0MjFmNTcyZWE3Njk4Y2NmOGE3ODMzNTM3MDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3N0ZXBzLnB5CisrKyBiL1Rvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3N0ZXBzLnB5CkBAIC04
MjksNyArODI5LDkgQEAgY2xhc3MgUnVuQmVuY2htYXJrVGVzdHMoc2hlbGwuVGVzdCk6CiAgICAg
IyBUaGUgY3VycmVudCBtYXhpbXVtIHRpbWVvdXQgZm9yIGEgYmVuY2htYXJrIHBsYW4gaXMgYWxz
byAxMjAwLgogICAgICMgU28gcmFpc2UgdGhlIGJ1aWxkYm90IHRpbWVvdXQgdG8gYXZvaWQgYWJv
cnRpbmcgdGhpcyB3aG9sZSBzdGVwIHdoZW4gYSB0ZXN0IHRpbWVvdXRzLgogICAgIHRpbWVvdXQg
PSAxNTAwCi0gICAgY29tbWFuZCA9IFsicHl0aG9uIiwgIi4vVG9vbHMvU2NyaXB0cy9ydW4tYmVu
Y2htYXJrIiwgIi0tYWxscGxhbnMiXQorICAgIGNvbW1hbmQgPSBbInB5dGhvbiIsICIuL1Rvb2xz
L1NjcmlwdHMvYnJvd3NlcnBlcmZkYXNoLWJlbmNobWFyayIsICItLWFsbHBsYW5zIiwKKyAgICAg
ICAgICAgICAgICItLWNvbmZpZy1maWxlIiwgIi4uLy4uL2Jyb3dzZXJwZXJmZGFzaC1iZW5jaG1h
cmstY29uZmlnLnR4dCIsCisgICAgICAgICAgICAgICAiLS1icm93c2VyLXZlcnNpb24iLCBXaXRo
UHJvcGVydGllcygiciUoZ290X3JldmlzaW9uKXMiKV0KIAogICAgIGRlZiBzdGFydChzZWxmKToK
ICAgICAgICAgcGxhdGZvcm0gPSBzZWxmLmdldFByb3BlcnR5KCJwbGF0Zm9ybSIpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL2Jyb3dzZXJwZXJmZGFzaC1iZW5jaG1hcmsgYi9Ub29scy9TY3Jp
cHRzL2Jyb3dzZXJwZXJmZGFzaC1iZW5jaG1hcmsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWIzMTQ5MTc4Njk1Zjdj
MjJmNTEyNmU3MWJhMzAxOWMzZTg3YTk2NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvYnJvd3NlcnBlcmZkYXNoLWJlbmNobWFyawpAQCAtMCwwICsxLDM2IEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
CisjICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UsCisjICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyMgICAgYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
IyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHB5LmJyb3dzZXJwZXJmZGFzaC5icm93c2VycGVy
ZmRhc2hfcnVubmVyIGltcG9ydCBtYWluLCBmb3JtYXRfbG9nZ2VyCisKKworX2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmb3JtYXRf
bG9nZ2VyKF9sb2cpCisgICAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9icm93c2VycGVyZmRhc2gvUkVBRE1FIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9icm93c2VycGVyZmRhc2gvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlODlhNzhlZGRkZDM1ODRj
YmEzM2Y4ZjE2ZWRiNjdjZThmNzI2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2Jyb3dzZXJwZXJmZGFzaC9SRUFETUUKQEAgLTAsMCArMSw1IEBACitUaGUgc2Ny
aXB0cyBpbnNpZGUgdGhpcyBmb2xkZXIgYWxsb3cgdG8gc2VuZCB0aGUgZGF0YSBmcm9tIHJ1bi1i
ZW5jaG1hcmsKK3RvIGEgc2VydmVyIHJ1bm5pbmcgdGhlIGJyb3dzZXJwZXJmZGFzaCB3ZWIgYXBw
IGJlbG93OgorCitTb3VyY2UgY29kZTogaHR0cHM6Ly9naXRodWIuY29tL0lnYWxpYS9icm93c2Vy
cGVyZmRhc2gKK0RlcGxveW1lbnQ6ICBodHRwczovL2Jyb3dzZXJwZXJmZGFzaC5pZ2FsaWEuY29t
LwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9icm93c2VycGVyZmRhc2gvX19p
bml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jyb3dzZXJwZXJmZGFzaC9fX2luaXRf
Xy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iMzc2YmYyYmVhMmI2YWY1Y2U3OWQzZTNkMzNjNzNhZGVjNDM0ZjE4
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9icm93c2VycGVyZmRh
c2gvX19pbml0X18ucHkKQEAgLTAsMCArMSwxMyBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRv
IHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCisKKyMgS2VlcCB0aGlzIGZp
bGUgZnJlZSBvZiBhbnkgY29kZSBvciBpbXBvcnQgc3RhdGVtZW50cyB0aGF0IGNvdWxkCisjIGNh
dXNlIGVpdGhlciBhbiBlcnJvciB0byBvY2N1ciBvciBhIGxvZyBtZXNzYWdlIHRvIGJlIGxvZ2dl
ZC4KKyMgVGhpcyBlbnN1cmVzIHRoYXQgY2FsbGluZyBjb2RlIGNhbiBpbXBvcnQgaW5pdGlhbGl6
YXRpb24gY29kZSBmcm9tCisjIHdlYmtpdHB5IGJlZm9yZSBhbnkgZXJyb3JzIG9yIGxvZyBtZXNz
YWdlcyBkdWUgdG8gY29kZSBpbiB0aGlzIGZpbGUuCisjIEluaXRpYWxpemF0aW9uIGNvZGUgY2Fu
IGluY2x1ZGUgdGhpbmdzIGxpa2UgdmVyc2lvbi1jaGVja2luZyBjb2RlIGFuZAorIyBsb2dnaW5n
IGNvbmZpZ3VyYXRpb24gY29kZS4KKyMKKyMgV2UgZG8gbm90IGV4ZWN1dGUgYW55IHZlcnNpb24t
Y2hlY2tpbmcgY29kZSBvciBsb2dnaW5nIGNvbmZpZ3VyYXRpb24KKyMgY29kZSBpbiB0aGlzIGZp
bGUgc28gdGhhdCBjYWxsZXJzIGNhbiBvcHQtaW4gYXMgdGhleSB3YW50LiAgVGhpcyBhbHNvCisj
IGFsbG93cyBkaWZmZXJlbnQgY2FsbGVycyB0byBjaG9vc2UgZGlmZmVyZW50IGluaXRpYWxpemF0
aW9uIGNvZGUsCisjIGFzIG5lY2Vzc2FyeS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvYnJvd3NlcnBlcmZkYXNoL2Jyb3dzZXJwZXJmZGFzaF9ydW5uZXIucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2Jyb3dzZXJwZXJmZGFzaC9icm93c2VycGVyZmRhc2hfcnVubmVyLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM3Yzc3NjJlMmY1MGQ1OTc2MWRkODA3ODMyYjhiYTZlZDkwMjk4YmUKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jyb3dzZXJwZXJmZGFzaC9i
cm93c2VycGVyZmRhc2hfcnVubmVyLnB5CkBAIC0wLDAgKzEsMjEwIEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisj
ICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UsCisjICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyMgICAgYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgYXJncGFyc2UK
K2ltcG9ydCBDb25maWdQYXJzZXIKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IG9zCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0
IHRpbWUKK2ltcG9ydCB1cmxsaWIKKworZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLmJl
bmNobWFya19ydW5uZXIgaW1wb3J0IEJlbmNobWFya1J1bm5lcgorZnJvbSB3ZWJraXRweS5iZW5j
aG1hcmtfcnVubmVyLmJyb3dzZXJfZHJpdmVyLmJyb3dzZXJfZHJpdmVyX2ZhY3RvcnkgaW1wb3J0
IEJyb3dzZXJEcml2ZXJGYWN0b3J5Citmcm9tIHdlYmtpdHB5LmJlbmNobWFya19ydW5uZXIud2Vi
ZHJpdmVyX2JlbmNobWFya19ydW5uZXIgaW1wb3J0IFdlYkRyaXZlckJlbmNobWFya1J1bm5lcgor
ZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLndlYnNlcnZlcl9iZW5jaG1hcmtfcnVubmVy
IGltcG9ydCBXZWJTZXJ2ZXJCZW5jaG1hcmtSdW5uZXIKK2Zyb20gd2Via2l0cHkuYmVuY2htYXJr
X3J1bm5lci5ydW5fYmVuY2htYXJrIGltcG9ydCBkZWZhdWx0X2Jyb3dzZXIsIGRlZmF1bHRfcGxh
dGZvcm0sIGJlbmNobWFya19ydW5uZXJfc3ViY2xhc3NlcworCitfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCisKKworZGVmIHBhcnNlX2FyZ3MoKToKKyAgICBwYXJzZXIgPSBhcmdw
YXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nQXV0b21hdGUgdGhlIGJyb3dzZXIgYmFz
ZWQgcGVyZm9ybWFuY2UgYmVuY2htYXJrcycpCisgICAgIyBicm93c2VycGVyZmRhc2ggc3BlY2lm
aWMgYXJndW1lbnRzLgorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY29uZmlnLWZpbGUnLCBk
ZXN0PSdjb25maWdfZmlsZScsIGRlZmF1bHQ9Tm9uZSwgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0nQ29u
ZmlndXJhdGlvbiBmaWxlIGZvciBzZW5kaW5nIHRoZSByZXN1bHRzIHRvIHRoZSBwZXJmb3JtYW5j
ZSBkYXNoYm9hcmQgc2VydmVyKHMpLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1icm93
c2VyLXZlcnNpb24nLCBkZXN0PSdicm93c2VyX3ZlcnNpb24nLCBkZWZhdWx0PU5vbmUsIHJlcXVp
cmVkPVRydWUsIGhlbHA9J0Egc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgYnJvd3NlciB2ZXJz
aW9uLicpCisgICAgIyBhcmd1bWVudHMgc2hhcmVkIHdpdGggcnVuLWJlbmNobWFyay4KKyAgICBw
YXJzZXIuYWRkX2FyZ3VtZW50KCctLWJ1aWxkLWRpcmVjdG9yeScsIGRlc3Q9J2J1aWxkRGlyJywg
aGVscD0nUGF0aCB0byB0aGUgYnJvd3NlciBleGVjdXRhYmxlLiBlLmcuIFdlYktpdEJ1aWxkL1Jl
bGVhc2UvJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXBsYXRmb3JtJywgZGVzdD0ncGxh
dGZvcm0nLCBkZWZhdWx0PWRlZmF1bHRfcGxhdGZvcm0oKSwgY2hvaWNlcz1Ccm93c2VyRHJpdmVy
RmFjdG9yeS5hdmFpbGFibGVfcGxhdGZvcm1zKCkpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgn
LS1icm93c2VyJywgZGVzdD0nYnJvd3NlcicsIGRlZmF1bHQ9ZGVmYXVsdF9icm93c2VyKCksIGNo
b2ljZXM9QnJvd3NlckRyaXZlckZhY3RvcnkuYXZhaWxhYmxlX2Jyb3dzZXJzKCkpCisgICAgcGFy
c2VyLmFkZF9hcmd1bWVudCgnLS1kcml2ZXInLCBkZWZhdWx0PVdlYlNlcnZlckJlbmNobWFya1J1
bm5lci5uYW1lLCBjaG9pY2VzPWJlbmNobWFya19ydW5uZXJfc3ViY2xhc3Nlcy5rZXlzKCksIGhl
bHA9J1VzZSB0aGUgc3BlY2lmaWVkIGJlbmNobWFyayBkcml2ZXIuIERlZmF1bHRzIHRvICVzLicg
JSBXZWJTZXJ2ZXJCZW5jaG1hcmtSdW5uZXIubmFtZSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50
KCctLWxvY2FsLWNvcHknLCBkZXN0PSdsb2NhbENvcHknLCBoZWxwPSdQYXRoIHRvIGEgbG9jYWwg
Y29weSBvZiB0aGUgYmVuY2htYXJrLiBlLmcuIFBlcmZvcm1hbmNlVGVzdHMvU3VuU3BpZGVyLycp
CisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jb3VudCcsIGRlc3Q9J2NvdW50T3ZlcnJpZGUn
LCB0eXBlPWludCwgaGVscD0nTnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgYmVuY2htYXJrLiBl
LmcuIDUnKQorICAgIG11dHVhbF9ncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZl
X2dyb3VwKHJlcXVpcmVkPVRydWUpCisgICAgbXV0dWFsX2dyb3VwLmFkZF9hcmd1bWVudCgnLS1w
bGFuJywgZGVzdD0ncGxhbicsIGhlbHA9J0JlbmNobWFyayBwbGFuIHRvIHJ1bi4gZS5nLiBzcGVl
ZG9tZXRlciwgamV0c3RyZWFtJykKKyAgICBtdXR1YWxfZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWFs
bHBsYW5zJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nUnVuIGFsbCBhdmFpbGFibGUgYmVu
Y2htYXJrIHBsYW5zIHNlcXVlbnRpYWxseScpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdz
KCkKKyAgICByZXR1cm4gYXJncworCisKK2NsYXNzIEJyb3dzZXJQZXJmRGFzaFJ1bm5lcihvYmpl
Y3QpOgorICAgIG5hbWUgPSAnYnJvd3NlcnBlcmZkYXNoX3J1bm5lcicKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBhcmdzKToKKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3MKKyAgICAgICAgc2Vs
Zi5fcGxhbmRpciA9IG9zLnBhdGguYWJzcGF0aChCZW5jaG1hcmtSdW5uZXIucGxhbl9kaXJlY3Rv
cnkoKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2VsZi5fcGxhbmRpcik6CisgICAg
ICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0NhbnQgZmluZCBwbGFuZGlyOiB7cGxhbmRpcn0nLmZv
cm1hdChwbGFuZGlyPXNlbGYuX3BsYW5kaXIpKQorICAgICAgICBzZWxmLl9wYXJzZV9jb25maWdf
ZmlsZShzZWxmLl9hcmdzLmNvbmZpZ19maWxlKQorICAgICAgICAjIFRoaXMgaXMgdGhlIGRpY3Rp
b25hcnkgdGhhdCB3aWxsIGJlIHNlbnQgaW4gdGhlIHBvc3QgcGV0aXRpb24gdGhhdCBicm93c2Vy
cGVyZmRhc2ggZXhwZWN0cworICAgICAgICAjIChhcyBkZWZpbmVkIGluIGh0dHBzOi8vZ2l0aHVi
LmNvbS9JZ2FsaWEvYnJvd3NlcnBlcmZkYXNoL3dpa2kvRGVzaWduLURvY3VtZW50KQorICAgICAg
ICAjIC0gVGhlIGJvdF8qIGRhdGEgaXRzIG9idGFpbmVkIGZyb20gdGhlIGNvbmZpZyBmaWxlCisg
ICAgICAgICMgLSB0aGUgYnJvd3Nlcl8qIGRhdGEgaXMgZ2l2ZW4gYXQgc3RhcnR1cCB0aW1lIHZp
YSBjb21tYW5kLWxpbmUgYXJndW1lbnRzCisgICAgICAgICMgLSBUaGUgdGVzdF8qIGRhdGEgaXMg
Z2VuZXJhdGVkIGFmdGVyIGVhY2ggdGVzdCBydW4uCisgICAgICAgIHNlbGYuX3Jlc3VsdF9kYXRh
ID0geydib3RfaWQnOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm90X3Bh
c3N3b3JkJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jyb3dzZXJfaWQn
OiBzZWxmLl9hcmdzLmJyb3dzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdicm93
c2VyX3ZlcnNpb24nOiBzZWxmLl9hcmdzLmJyb3dzZXJfdmVyc2lvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3RfaWQnOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAndGVzdF92ZXJzaW9uJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RfZGF0YSc6IE5vbmV9CisKKyAgICBkZWYgX3BhcnNlX2NvbmZpZ19maWxlKHNlbGYsIGNv
bmZpZ19maWxlKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGNvbmZpZ19maWxlKToK
KyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignQ2FuIG5vdCBvcGVuIGNvbmZpZyBmaWxlIGZv
ciB1cGxvYWRpbmcgcmVzdWx0cyBhdDoge2NvbmZpZ19maWxlfScuZm9ybWF0KGNvbmZpZ19maWxl
PWNvbmZpZ19maWxlKSkKKyAgICAgICAgc2VsZi5fY29uZmlnX3BhcnNlciA9IENvbmZpZ1BhcnNl
ci5SYXdDb25maWdQYXJzZXIoKQorICAgICAgICBzZWxmLl9jb25maWdfcGFyc2VyLnJlYWQoY29u
ZmlnX2ZpbGUpCisKKyAgICBkZWYgX2dldF90ZXN0X3ZlcnNpb25fc3RyaW5nKHNlbGYsIHBsYW5f
bmFtZSk6CisgICAgICAgIHBsYW5fZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BsYW5k
aXIsICd7cGxhbl9uYW1lfS5wbGFuJy5mb3JtYXQocGxhbl9uYW1lPXBsYW5fbmFtZSkpCisgICAg
ICAgIHdpdGggb3BlbihwbGFuX2ZpbGVfcGF0aCwgJ3InKSBhcyBwbGFuX2ZkOgorICAgICAgICAg
ICAgcGxhbl9qc29uID0ganNvbi5sb2FkKHBsYW5fZmQpCisgICAgICAgICAgICBpZiAnc3ZuX3Nv
dXJjZScgaW4gcGxhbl9qc29uOgorICAgICAgICAgICAgICAgIHJldHVybiBwbGFuX2pzb25bJ3N2
bl9zb3VyY2UnXQorICAgICAgICAgICAgZWxpZiAncmVtb3RlX2FyY2hpdmUnIGluIHBsYW5fanNv
bjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGxhbl9qc29uWydyZW1vdGVfYXJjaGl2ZSddCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignQ2FuIG5v
dCB1cGxvYWQgcmVzdWx0cyBiZWNhdXNlIGlzIG5vdCBwb3NzaWJsZSB0byBkZXRlcm1pbmUgdGVz
dCB2ZXJzaW9uIGZvciB0ZXN0IHBsYW46IHtwbGFuX2ZpbGVfcGF0aH0nLmZvcm1hdChwbGFuX2Zp
bGVfcGF0aD1wbGFuX2ZpbGVfcGF0aCkpCisKKyAgICBkZWYgX2dldF90ZXN0X2RhdGFfanNvbl9z
dHJpbmcoc2VsZiwgdGVtcF9yZXN1bHRfZmlsZSk6CisgICAgICAgIHRlbXBfcmVzdWx0X2ZpbGUu
Zmx1c2goKQorICAgICAgICB0ZW1wX3Jlc3VsdF9maWxlLnNlZWsoMCkKKyAgICAgICAgdGVtcF9y
ZXN1bHRfanNvbiA9IGpzb24ubG9hZCh0ZW1wX3Jlc3VsdF9maWxlKQorICAgICAgICBpZiAnZGVi
dWdPdXRwdXQnIGluIHRlbXBfcmVzdWx0X2pzb246CisgICAgICAgICAgICBkZWwgdGVtcF9yZXN1
bHRfanNvblsnZGVidWdPdXRwdXQnXQorICAgICAgICByZXR1cm4ganNvbi5kdW1wcyh0ZW1wX3Jl
c3VsdF9qc29uKQorCisgICAgZGVmIF91cGxvYWRfcmVzdWx0KHNlbGYpOgorICAgICAgICB1cGxv
YWRfZmFpbGVkID0gRmFsc2UKKyAgICAgICAgZm9yIHNlcnZlciBpbiBzZWxmLl9jb25maWdfcGFy
c2VyLnNlY3Rpb25zKCk6CisgICAgICAgICAgICBzZWxmLl9yZXN1bHRfZGF0YVsnYm90X2lkJ10g
PSBzZWxmLl9jb25maWdfcGFyc2VyLmdldChzZXJ2ZXIsICdib3RfaWQnKQorICAgICAgICAgICAg
c2VsZi5fcmVzdWx0X2RhdGFbJ2JvdF9wYXNzd29yZCddID0gc2VsZi5fY29uZmlnX3BhcnNlci5n
ZXQoc2VydmVyLCAnYm90X3Bhc3N3b3JkJykKKyAgICAgICAgICAgIHBvc3RfZGF0YSA9IHVybGxp
Yi51cmxlbmNvZGUoc2VsZi5fcmVzdWx0X2RhdGEpCisgICAgICAgICAgICBwb3N0X3VybCA9IHNl
bGYuX2NvbmZpZ19wYXJzZXIuZ2V0KHNlcnZlciwgJ3Bvc3RfdXJsJykKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICBwb3N0X3JlcXVlc3QgPSB1cmxsaWIudXJsb3Blbihwb3N0X3Vy
bCwgcG9zdF9kYXRhKQorICAgICAgICAgICAgICAgIGlmIHBvc3RfcmVxdWVzdC5nZXRjb2RlKCkg
PT0gMjAwOgorICAgICAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ1N1Y2VzZnVsbHkgdXBsb2Fk
ZWQgcmVzdWx0cyB0byBzZXJ2ZXIge3NlcnZlcl9uYW1lfSBmb3IgdGVzdCB7dGVzdF9uYW1lfSBh
bmQgYnJvd3NlciB7YnJvd3Nlcl9uYW1lfSB2ZXJzaW9uIHticm93c2VyX3ZlcnNpb259Jy5mb3Jt
YXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX25hbWU9c2VydmVyLCB0
ZXN0X25hbWU9c2VsZi5fcmVzdWx0X2RhdGFbJ3Rlc3RfaWQnXSwgYnJvd3Nlcl9uYW1lPXNlbGYu
X3Jlc3VsdF9kYXRhWydicm93c2VyX2lkJ10sIGJyb3dzZXJfdmVyc2lvbj1zZWxmLl9yZXN1bHRf
ZGF0YVsnYnJvd3Nlcl92ZXJzaW9uJ10pKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgICAgIHVwbG9hZF9mYWlsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIF9s
b2cuZXJyb3IoJ1RoZSBzZXJ2ZXIge3NlcnZlcl9uYW1lfSByZXR1cm5lZCBhbiBlcnJvciBjb2Rl
OiB7aHR0cF9lcnJvcn0nLmZvcm1hdChzZXJ2ZXJfbmFtZT1zZXJ2ZXIsIGh0dHBfZXJyb3I9cG9z
dF9yZXF1ZXN0LmdldGNvZGUoKSkpCisgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1Ro
ZSBlcnJvciB0ZXh0IGZyb20gdGhlIHNlcnZlciB7c2VydmVyX25hbWV9IHdhczogIntlcnJvcl90
ZXh0fSInLmZvcm1hdChzZXJ2ZXJfbmFtZT1zZXJ2ZXIsIGVycm9yX3RleHQ9cG9zdF9yZXF1ZXN0
LnJlYWQoKSkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAg
ICAgICAgdXBsb2FkX2ZhaWxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdF
eGNlcHRpb24gd2hpbGUgdHJ5aW5nIHRvIHVwbG9hZCByZXN1bHRzIHRvIHNlcnZlciB7c2VydmVy
X25hbWV9Jy5mb3JtYXQoc2VydmVyX25hbWU9c2VydmVyKSkKKyAgICAgICAgICAgICAgICBfbG9n
LmVycm9yKGUpCisgICAgICAgIHJldHVybiBub3QgdXBsb2FkX2ZhaWxlZAorCisgICAgZGVmIHJ1
bihzZWxmKToKKyAgICAgICAgZmFpbGVkID0gW10KKyAgICAgICAgd29ya2VkID0gW10KKyAgICAg
ICAgc2tpcHBlZCA9IFtdCisgICAgICAgIHBsYW5saXN0ID0gW10KKyAgICAgICAgaWYgc2VsZi5f
YXJncy5wbGFuOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9p
bihzZWxmLl9wbGFuZGlyLCAne3BsYW5fbmFtZX0ucGxhbicuZm9ybWF0KHBsYW5fbmFtZT1zZWxm
Ll9hcmdzLnBsYW4pKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdDYW50IGZp
bmQgYSBmaWxlIG5hbWVkIHtwbGFuX25hbWV9LnBsYW4gaW4gZGlyZWN0b3J5IHtwbGFuX2RpcmVj
dG9yeX0nLmZvcm1hdChwbGFuX25hbWU9c2VsZi5fYXJncy5wbGFuLCBwbGFuX2RpcmVjdG9yeT1z
ZWxmLl9wbGFuZGlyKSkKKyAgICAgICAgICAgIHBsYW5saXN0ID0gW3NlbGYuX2FyZ3MucGxhbl0K
KyAgICAgICAgZWxpZiBzZWxmLl9hcmdzLmFsbHBsYW5zOgorICAgICAgICAgICAgcGxhbmxpc3Qg
PSBCZW5jaG1hcmtSdW5uZXIuYXZhaWxhYmxlX3BsYW5zKCkKKyAgICAgICAgICAgIHNraXBwZWRm
aWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3BsYW5kaXIsICdTa2lwcGVkJykKKyAgICAgICAgICAg
IGlmIG5vdCBwbGFubGlzdDoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0NhbnQg
ZmluZCBhbnkgcGxhbiBpbiB0aGUgZGlyZWN0b3J5IHtwbGFuX2RpcmVjdG9yeX0nLmZvcm1hdChw
bGFuX2RpcmVjdG9yeT1zZWxmLl9wbGFuZGlyKSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNm
aWxlKHNraXBwZWRmaWxlKToKKyAgICAgICAgICAgICAgICBza2lwcGVkID0gW2xpbmUuc3RyaXAo
KSBmb3IgbGluZSBpbiBvcGVuKHNraXBwZWRmaWxlKSBpZiBub3QgbGluZS5zdGFydHN3aXRoKCcj
JykgYW5kIGxlbihsaW5lKSA+IDFdCisKKyAgICAgICAgaWYgbGVuKHBsYW5saXN0KSA8IDE6Cisg
ICAgICAgICAgICBfbG9nLmVycm9yKCdObyBiZW5jaG1hcmtzIHBsYW5zIGF2YWlsYWJsZSB0byBy
dW4gaW4gZGlyZWN0b3J5IHtwbGFuX2RpcmVjdG9yeX0nLmZvcm1hdChwbGFuX2RpcmVjdG9yeT1z
ZWxmLl9wbGFuZGlyKSkKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgX2xvZy5pbmZv
KCdTdGFydGluZyBiZW5jaG1hcmsgZm9yIGJyb3dzZXIge2Jyb3dzZXJ9IGFuZCB2ZXJzaW9uIHti
cm93c2VyX3ZlcnNpb259Jy5mb3JtYXQoYnJvd3Nlcj1zZWxmLl9hcmdzLmJyb3dzZXIsIGJyb3dz
ZXJfdmVyc2lvbj1zZWxmLl9hcmdzLmJyb3dzZXJfdmVyc2lvbikpCisKKyAgICAgICAgaXRlcmF0
aW9uX2NvdW50ID0gMAorICAgICAgICBmb3IgcGxhbiBpbiBzb3J0ZWQocGxhbmxpc3QpOgorICAg
ICAgICAgICAgaXRlcmF0aW9uX2NvdW50ID0gKzEKKyAgICAgICAgICAgIGlmIHBsYW4gaW4gc2tp
cHBlZDoKKyAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ1NraXBwaW5nIGJlbmNobWFyayBwbGFu
OiB7cGxhbl9uYW1lfSBiZWNhdXNlIGlzIGxpc3RlZCBvbiB0aGUgU2tpcHBlZCBmaWxlIFtiZW5j
aG1hcmsge2l0ZXJhdGlvbn0gb2Yge3RvdGFsfV0nLmZvcm1hdChwbGFuX25hbWU9cGxhbiwgaXRl
cmF0aW9uPWl0ZXJhdGlvbl9jb3VudCwgdG90YWw9bGVuKHBsYW5saXN0KSkpCisgICAgICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgICAgIF9sb2cuaW5mbygnU3RhcnRpbmcgYmVuY2htYXJr
IHBsYW46IHtwbGFuX25hbWV9IFtiZW5jaG1hcmsge2l0ZXJhdGlvbn0gb2Yge3RvdGFsfV0nLmZv
cm1hdChwbGFuX25hbWU9cGxhbiwgaXRlcmF0aW9uPWl0ZXJhdGlvbl9jb3VudCwgdG90YWw9bGVu
KHBsYW5saXN0KSkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBSdW4gdGVz
dCBhbmQgc2F2ZSB0ZXN0IGluZm8KKyAgICAgICAgICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVk
VGVtcG9yYXJ5RmlsZSgpIGFzIHRlbXBfcmVzdWx0X2ZpbGU6CisgICAgICAgICAgICAgICAgICAg
IGJlbmNobWFya19ydW5uZXJfY2xhc3MgPSBiZW5jaG1hcmtfcnVubmVyX3N1YmNsYXNzZXNbc2Vs
Zi5fYXJncy5kcml2ZXJdCisgICAgICAgICAgICAgICAgICAgIHJ1bm5lciA9IGJlbmNobWFya19y
dW5uZXJfY2xhc3MocGxhbiwgc2VsZi5fYXJncy5sb2NhbENvcHksIHNlbGYuX2FyZ3MuY291bnRP
dmVycmlkZSwgc2VsZi5fYXJncy5idWlsZERpciwgdGVtcF9yZXN1bHRfZmlsZS5uYW1lLCBzZWxm
Ll9hcmdzLnBsYXRmb3JtLCBzZWxmLl9hcmdzLmJyb3dzZXIpCisgICAgICAgICAgICAgICAgICAg
IHJ1bm5lci5leGVjdXRlKCkKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdGaW5pc2hl
ZCBiZW5jaG1hcmsgcGxhbjoge3BsYW5fbmFtZX0nLmZvcm1hdChwbGFuX25hbWU9cGxhbikpCisg
ICAgICAgICAgICAgICAgICAgICMgRmlsbCB0ZXN0IGluZm8gZm9yIHVwbG9hZAorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9yZXN1bHRfZGF0YVsndGVzdF9pZCddID0gcGxhbgorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9yZXN1bHRfZGF0YVsndGVzdF92ZXJzaW9uJ10gPSBzZWxmLl9nZXRf
dGVzdF92ZXJzaW9uX3N0cmluZyhwbGFuKQorICAgICAgICAgICAgICAgICAgICAjIEZpbGwgb2J0
YWluZWQgdGVzdCByZXN1bHRzIGZvciB1cGxvYWQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5f
cmVzdWx0X2RhdGFbJ3Rlc3RfZGF0YSddID0gc2VsZi5fZ2V0X3Rlc3RfZGF0YV9qc29uX3N0cmlu
Zyh0ZW1wX3Jlc3VsdF9maWxlKQorCisgICAgICAgICAgICAgICAgIyBOb3cgdXBsb2FkIGRhdGEg
dG8gc2VydmVyKHMpCisgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdVcGxvYWRpbmcgcmVzdWx0
cyBmb3IgcGxhbjoge3BsYW5fbmFtZX0gYW5kIGJyb3dzZXIge2Jyb3dzZXJ9IHZlcnNpb24ge2Jy
b3dzZXJfdmVyc2lvbn0nLmZvcm1hdChwbGFuX25hbWU9cGxhbiwgYnJvd3Nlcj1zZWxmLl9hcmdz
LmJyb3dzZXIsIGJyb3dzZXJfdmVyc2lvbj1zZWxmLl9hcmdzLmJyb3dzZXJfdmVyc2lvbikpCisg
ICAgICAgICAgICAgICAgaWYgc2VsZi5fdXBsb2FkX3Jlc3VsdCgpOgorICAgICAgICAgICAgICAg
ICAgICB3b3JrZWQuYXBwZW5kKHBsYW4pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICAgICAgZmFpbGVkLmFwcGVuZChwbGFuKQorCisgICAgICAgICAgICBleGNlcHQgS2V5
Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgICAgICBmYWlsZWQuYXBwZW5kKHBsYW4pCisgICAgICAgICAgICAgICAg
X2xvZy5leGNlcHRpb24oJ0Vycm9yIHJ1bm5pbmcgYmVuY2htYXJrIHBsYW46IHtwbGFuX25hbWV9
Jy5mb3JtYXQocGxhbl9uYW1lPXBsYW4pKQorCisgICAgICAgIGlmIGxlbih3b3JrZWQpID4gMDoK
KyAgICAgICAgICAgIF9sb2cuaW5mbygnVGhlIGZvbGxvd2luZyBiZW5jaG1hcmsgcGxhbnMgaGF2
ZSBiZWVuIHVwbG9hZCBzdWNjZXNmdWxseToge2xpc3RfcGxhbl93b3JrZWR9Jy5mb3JtYXQobGlz
dF9wbGFuX3dvcmtlZD13b3JrZWQpKQorCisgICAgICAgIGlmIGxlbihmYWlsZWQpID4gMDoKKyAg
ICAgICAgICAgIF9sb2cuZXJyb3IoJ1RoZSBmb2xsb3dpbmcgYmVuY2htYXJrIHBsYW5zIGhhdmUg
ZmFpbGVkIHRvIHJ1biBvciB0byB1cGxvYWQgOiB7bGlzdF9wbGFuX2ZhaWxlZH0nLmZvcm1hdChs
aXN0X3BsYW5fZmFpbGVkPWZhaWxlZCkpCisgICAgICAgICAgICByZXR1cm4gbGVuKGZhaWxlZCkK
KworICAgICAgICByZXR1cm4gMAorCisKK2RlZiBmb3JtYXRfbG9nZ2VyKGxvZ2dlcik6CisgICAg
bG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFu
ZGxlcigpCisgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzIC0g
JShsZXZlbG5hbWUpcyAtICUobWVzc2FnZSlzJykKKyAgICBjaC5zZXRGb3JtYXR0ZXIoZm9ybWF0
dGVyKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNoKQorCisKK2RlZiBtYWluKCk6CisgICAgcGVy
ZmRhc2hydW5uZXIgPSBCcm93c2VyUGVyZkRhc2hSdW5uZXIocGFyc2VfYXJncygpKQorICAgIHJl
dHVybiBwZXJmZGFzaHJ1bm5lci5ydW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9icm93c2VycGVyZmRhc2gvYnJvd3NlcnBlcmZkYXNoX3VuaXR0ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9icm93c2VycGVyZmRhc2gvYnJvd3NlcnBlcmZkYXNoX3VuaXR0ZXN0
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjM0NjE1MTg2NDE0ZGRkNzFjMGE5YzAyYWQ3ZmI5NWE0NjM1M2Y4MWUK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Jyb3dzZXJwZXJmZGFz
aC9icm93c2VycGVyZmRhc2hfdW5pdHRlc3QucHkKQEAgLTAsMCArMSw2NCBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhp
cworIyAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisjICAgIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyMgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCisKK2Zyb20gd2Via2l0cHkuYmVuY2htYXJr
X3J1bm5lci5ydW5fYmVuY2htYXJrIGltcG9ydCBkZWZhdWx0X2Jyb3dzZXIsIGRlZmF1bHRfcGxh
dGZvcm0sIGJlbmNobWFya19ydW5uZXJfc3ViY2xhc3NlcworZnJvbSB3ZWJraXRweS5iZW5jaG1h
cmtfcnVubmVyLmJlbmNobWFya19ydW5uZXIgaW1wb3J0IEJlbmNobWFya1J1bm5lcgorZnJvbSB3
ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLndlYnNlcnZlcl9iZW5jaG1hcmtfcnVubmVyIGltcG9y
dCBXZWJTZXJ2ZXJCZW5jaG1hcmtSdW5uZXIKK2Zyb20gd2Via2l0cHkuYmVuY2htYXJrX3J1bm5l
ci53ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lciBpbXBvcnQgV2ViRHJpdmVyQmVuY2htYXJrUnVu
bmVyCitmcm9tIHdlYmtpdHB5LmJlbmNobWFya19ydW5uZXIuYnJvd3Nlcl9kcml2ZXIuYnJvd3Nl
cl9kcml2ZXJfZmFjdG9yeSBpbXBvcnQgQnJvd3NlckRyaXZlckZhY3RvcnkKKworCitfbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgRmFrZUJlbmNobWFya1J1bm5l
cihCZW5jaG1hcmtSdW5uZXIpOgorICAgIG5hbWUgPSAnZmFrZScKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwbGFuX2ZpbGUsIGxvY2FsX2NvcHksIGNvdW50X292ZXJyaWRlLCBidWlsZF9kaXIs
IG91dHB1dF9maWxlLCBwbGF0Zm9ybSwgYnJvd3Nlcik6CisgICAgICAgIHN1cGVyKEZha2VCZW5j
aG1hcmtSdW5uZXIsIHNlbGYpLl9faW5pdF9fKHBsYW5fZmlsZSwgbG9jYWxfY29weSwgY291bnRf
b3ZlcnJpZGUsIGJ1aWxkX2Rpciwgb3V0cHV0X2ZpbGUsIHBsYXRmb3JtLCBicm93c2VyKQorCisg
ICAgZGVmIGV4ZWN1dGUoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKworIyBUaGlzIHRl
c3RzIGZvciBzb21lIGZlYXR1cmVzIG9mIGJlbmNobWFya19ydW5uZXIgdGhhdCBicm93c2VycGVy
ZmRhc2hfcnVubmVyIGRlcGVuZHMgb24KK2NsYXNzIEJyb3dzZXJQZXJmRGFzaFJ1bm5lclRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2xpc3RfcGxhbnNfYXRfbGVhc3RfZml2
ZShzZWxmKToKKyAgICAgICAgcGxhbl9saXN0ID0gQmVuY2htYXJrUnVubmVyLmF2YWlsYWJsZV9w
bGFucygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ocGxhbl9saXN0KSA+IDQpCisKKyAg
ICBkZWYgdGVzdF9iZW5jaG1hcmtfcnVubmVyX3N1YmNsYXNzZXNfYXRfbGVhc3RfdHdvKHNlbGYp
OgorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGJlbmNobWFya19ydW5uZXJfc3ViY2xhc3Nl
cykgPiAxKQorCisgICAgZGVmIHRlc3RfY2FuX2NvbnN0cnVjdF9ydW5uZXJfb2JqZWN0X21pbmlt
dW1fcGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3RzIHRoYXQgY29uc3RydWN0
aW5nIHRoZSBiZW5jaG1hcmtfcnVubmVyIG9iamVjdCBzcGVjaWZ5aW5nIHRoZSBtaW5pbXVtIHJl
cXVpcmVkIHBhcmFtYXRlcnMgaXMgb2suCisgICAgICAgIHBsYW5fbGlzdCA9IEJlbmNobWFya1J1
bm5lci5hdmFpbGFibGVfcGxhbnMoKQorICAgICAgICBidWlsZF9kaXIgPSBvcy5wYXRoLmFic3Bh
dGgob3MuY3VyZGlyKQorICAgICAgICBydW5uZXIgPSBGYWtlQmVuY2htYXJrUnVubmVyKHBsYW5f
bGlzdFswXSwgRmFsc2UsIDEsIGJ1aWxkX2RpciwgIi90bXAvdGVzdE91dHB1dC50eHQiLCBkZWZh
dWx0X3BsYXRmb3JtKCksIGRlZmF1bHRfYnJvd3NlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUocnVubmVyLmV4ZWN1dGUoKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
YnJvd3NlcnBlcmZkYXNoL2NvbmZpZy1maWxlLWV4YW1wbGUudHh0IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9icm93c2VycGVyZmRhc2gvY29uZmlnLWZpbGUtZXhhbXBsZS50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjVmN2NjMmFlMjA5ZWM1MjM3NTgwY2I2MjVkMDBiY2VkODg0MTQ0NQotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYnJvd3NlcnBlcmZkYXNoL2NvbmZpZy1maWxl
LWV4YW1wbGUudHh0CkBAIC0wLDAgKzEsMzEgQEAKKyMgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUg
dXNlcyB0aGUgc3ludGF4IGZyb20gUHl0aG9uJ3MgQ29uZmlnUGFyc2VyLgorIyBUaGUgc3ludGF4
IGlzIHNpbWlsYXIgdG8gV2luZG93cyAiSU5JIiBmaWxlcy4KKyMKKyMgW3NlY3Rpb24xXQorIyBr
ZXkxID0gdmFsdWUxCisjIGtleTIgPSB2YWx1ZTIKKyMKKyMgRWFjaCBzZWN0aW9uIGVudHJ5IGRl
ZmluZXMgYSBzZXJ2ZXIgd2hlcmUgdG8gdXBsb2FkIHRoZSByZXN1bHRzLgorIyBUaGUgc2VydmVy
IHNob3VsZCBiZSBydW5uaW5nIHRoaXMgRGphbmdvIGFwcDogaHR0cHM6Ly9naXRodWIuY29tL0ln
YWxpYS9icm93c2VycGVyZmRhc2gKKyMKKyMgSWYgbW9yZSB0aGFuIGEgc2VjdGlvbiBlbnRyeSBp
cyBkZWZpbmVkLCB0aGUgcHJvZ3JhbSB3aWxsIHRyeSB0byB1cGxvYWQKKyMgdGhlIGRhdGEgdG8g
ZWFjaCBvbmUgb2YgdGhlbS4KKyMKKyMgVGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBtYW5kYXRv
cnkgZm9yIGVhY2ggc2VjdGlvbgorIworIyAnYm90X2lkJyAgICAgICA6IFRoZSBpZGVudGlmaWVy
IG9mIHRoaXMgYm90IG9uIHRoZSBzZXJ2ZXIuCisjICdib3RfcGFzc3dvcmQnIDogVGhlIHBhc3N3
b3JkIG9mIHRoaXMgYm90IG9uIHRoZSBzZXJ2ZXIuCisjICdwb3N0X3VybCcgICAgIDogVGhlIFBP
U1QgVVJMICh0eXBpY2FsbHkgJHtCQVNFX1VSSX0vZGFzaC9ib3QtcmVwb3J0KQorIworCisjIyBD
b25maWd1cmF0aW9uIGZvciBkYXNoYm9hcmQgYnJvd3NlcnBlcmZkYXNoLmlnYWxpYS5vcmcKKyNb
YnJvd3NlcnBlcmZkYXNoLmlnYWxpYS5vcmddCisjYm90X2lkID0gZ3RrLWxpbnV4LTY0LXBlcmYt
dGVzdHMKKyNib3RfcGFzc3dvcmQgPSByNG5kME1QNHNzCisjcG9zdF91cmwgPSBodHRwczovL2Jy
b3dzZXJwZXJmZGFzaC5pZ2FsaWEuY29tL2Rhc2gvYm90LXJlcG9ydAorCisjIyBDb25maWd1cmF0
aW9uIGZvciBkYXNoYm9hcmQgbG9jYWxob3N0LXRlc3QKKyNbbG9jYWxob3N0LXRlc3RdCisjYm90
X2lkID0gdGVzdGxvY2FsYm90CisjYm90X3Bhc3N3b3JkID0gMTIzCisjcG9zdF91cmwgPSBodHRw
Oi8vbG9jYWxob3N0OjgwMDAvZGFzaC9ib3QtcmVwb3J0Cg==
</data>
<flag name="review"
          id="360515"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>