<?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>103587</bug_id>
          
          <creation_ts>2012-11-28 18:32:29 -0800</creation_ts>
          <short_desc>Add support for run-perf-tests --chromium-android --profile</short_desc>
          <delta_ts>2012-12-12 15:35:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>103572</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>dpranke</cc>
    
    <cc>klobag</cc>
    
    <cc>pdr</cc>
    
    <cc>peter</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>778592</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-28 18:32:29 -0800</bug_when>
    <thetext>Add support for run-perf-tests --chromium-android --profile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778594</commentid>
    <comment_count>1</comment_count>
      <attachid>176622</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-28 18:33:51 -0800</bug_when>
    <thetext>Created attachment 176622
does not work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778743</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-28 23:48:20 -0800</bug_when>
    <thetext>I will not get a chance to work on this until next Monday.  If anyone would like to take a crack at adding --chromium-android support before then, please be my guest!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779042</commentid>
    <comment_count>3</comment_count>
      <attachid>176622</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-29 08:50:28 -0800</bug_when>
    <thetext>Comment on attachment 176622
does not work

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:693
&gt; +        for line in ps_output.split(&apos;\n&apos;):
&gt; +            if line.contains(DRT_APP_PACKAGE):
&gt; +                match = line.match(r&apos;\S\s+(\d+)&apos;)
&gt; +                return match.group(1)

This seems like a regexp :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784321</commentid>
    <comment_count>4</comment_count>
      <attachid>177879</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-05 17:24:06 -0800</bug_when>
    <thetext>Created attachment 177879
Works on my machine, needs a bit more code to be general</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784435</commentid>
    <comment_count>5</comment_count>
      <attachid>177902</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-05 18:25:14 -0800</bug_when>
    <thetext>Created attachment 177902
Needs to not hard-code perfhost_linux, otherwise about ready</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784712</commentid>
    <comment_count>6</comment_count>
      <attachid>177963</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-06 00:39:25 -0800</bug_when>
    <thetext>Created attachment 177963
now passes all unittests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784713</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-06 00:40:36 -0800</bug_when>
    <thetext>I don&apos;t plan to work on Android stuff either Thurs or Friday, but I&apos;ll post a final patch next Monday.

Until then, this patch is useable, but is currently hard-coded to /src/chromium-android/perfhost_linux as the perfhost path. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784714</commentid>
    <comment_count>8</comment_count>
      <attachid>177964</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-06 00:42:46 -0800</bug_when>
    <thetext>Created attachment 177964
slightly nicer error messages</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787692</commentid>
    <comment_count>9</comment_count>
      <attachid>178627</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-10 13:47:13 -0800</bug_when>
    <thetext>Created attachment 178627
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787700</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-10 13:53:45 -0800</bug_when>
    <thetext>I think this is finally ready for review. :)  It even will handle the case where you don&apos;t have perfhost_linux installed and do something reasonable.

The little feature I&apos;d like to still see is detection of profiling=0 builds and warning the user.  That&apos;s a common got-cha I feel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787788</commentid>
    <comment_count>11</comment_count>
      <attachid>178627</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-12-10 15:43:45 -0800</bug_when>
    <thetext>Comment on attachment 178627
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:503
&gt; +                sys.exit(1)

Can we do the check_configuration() check in check_build() or check_sys_deps() rather than waiting until we try to create drivers? This will cause you to get N failures rather than just one, and we should know whether or not the environment is set up correctly before we actually try to create drivers ...

Plus, having to call sys.exit() almost certainly indicates some layering is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787789</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-12-10 15:44:08 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 178627 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178627&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:503
&gt; &gt; +                sys.exit(1)
&gt; 
&gt; Can we do the check_configuration() check in check_build() or check_sys_deps() rather than waiting until we try to create drivers? This will cause you to get N failures rather than just one, and we should know whether or not the environment is set up correctly before we actually try to create drivers ...
&gt; 
&gt; Plus, having to call sys.exit() almost certainly indicates some layering is wrong.

Argh, the tool lost most of my comments ... hang on, more coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787796</commentid>
    <comment_count>13</comment_count>
      <attachid>178627</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-12-10 15:47:54 -0800</bug_when>
    <thetext>Comment on attachment 178627
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:766
&gt; +        self._delay_post_start_tasks = True  # This is a hack to not start the profiler until after the remote process is fully setup.

The flow of control between _start(), _start_once(), the subclass and the superclass is hard to follow. Can we move run_post_start_tasks() into run_test and make this problem go away? I&apos;m not sure how things are supposed to interact with --pause-before-testing (does the profiler need to be attached?)

&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:316
&gt; +&quot;&quot;&quot;

Do we really need a stack trace this long?

&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:296
&gt; +        environment = self._adjust_environment_for_driver(environment)

I&apos;d probably move lines 294-295 into adjust_environment_for_driver and rename it to setup_environ_for_driver() for consistency.

&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:306
&gt; +            self._profiler.attach_to_pid(self._pid_on_target())

Most ports don&apos;t use the host/target distinction, and so this method name doesn&apos;t make as much sense. Maybe call this driver_pid() or pid_to_attach_to() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787821</commentid>
    <comment_count>14</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-12-10 16:10:30 -0800</bug_when>
    <thetext>This patch breaks --profile on linux :&apos;[</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789808</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-12 12:42:09 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 178627 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178627&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:503
&gt; &gt; +                sys.exit(1)
&gt; 
&gt; Can we do the check_configuration() check in check_build() or check_sys_deps() rather than waiting until we try to create drivers? This will cause you to get N failures rather than just one, and we should know whether or not the environment is set up correctly before we actually try to create drivers ...
&gt; 
&gt; Plus, having to call sys.exit() almost certainly indicates some layering is wrong.

Yes.  I&apos;d *love* to fix this, but fixing this requires encapsulating the &quot;how to talk to a device&quot; logic at least a little, so that we can pass such an object to a static method on AndroidPerf for each device we want to test.

I have the design in my head, I just need to land some bits of:
https://github.com/eseidel/webkit/compare/master...device_connection
first.

I&apos;d like to land this layering violation as part of this first-pass and then fix it in a second patch if that&apos;s OK?  Even after this lands, this feature is not ready to &quot;announce&quot; yet.  I plan to send a note to webkit-dev explaining how to use --profile once I&apos;ve cleaned up the various profiling paths a bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789809</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-12 12:42:43 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; This patch breaks --profile on linux :&apos;[

Fixed.  I had broken the environment fiddling code. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789813</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-12 12:46:28 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 178627 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178627&amp;action=review
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:316
&gt; &gt; +&quot;&quot;&quot;
&gt; 
&gt; Do we really need a stack trace this long?

I&apos;ve removed a few lines.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:296
&gt; &gt; +        environment = self._adjust_environment_for_driver(environment)
&gt; 
&gt; I&apos;d probably move lines 294-295 into adjust_environment_for_driver and rename it to setup_environ_for_driver() for consistency.

I can&apos;t move those two lines as they set local variables which are used later in the function. :)  But I&apos;m happy to rename the method.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:306
&gt; &gt; +            self._profiler.attach_to_pid(self._pid_on_target())
&gt; 
&gt; Most ports don&apos;t use the host/target distinction, and so this method name doesn&apos;t make as much sense. Maybe call this driver_pid() or pid_to_attach_to() ?

Sure, I&apos;ll rename it driver_pid() (although that could be confusing as to which pid, since in host/target setups the driver has 2 pids).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789815</commentid>
    <comment_count>18</comment_count>
      <attachid>178627</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-12 12:49:27 -0800</bug_when>
    <thetext>Comment on attachment 178627
Patch

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:296
&gt;&gt;&gt; +        environment = self._adjust_environment_for_driver(environment)
&gt;&gt; 
&gt;&gt; I&apos;d probably move lines 294-295 into adjust_environment_for_driver and rename it to setup_environ_for_driver() for consistency.
&gt; 
&gt; I can&apos;t move those two lines as they set local variables which are used later in the function. :)  But I&apos;m happy to rename the method.

I&apos;ve renamed it, but I&apos;m not a huge fan of setup_environ_for_driver as a name, as setup_environ_for_server takes a name and returns a whole new env dictionary.  setup_environ_for_driver takes an env dictionary, makes modifications and returns it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789821</commentid>
    <comment_count>19</comment_count>
      <attachid>178627</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-12-12 12:58:27 -0800</bug_when>
    <thetext>Comment on attachment 178627
Patch

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

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py:503
&gt;&gt;&gt;&gt; +                sys.exit(1)
&gt;&gt;&gt; 
&gt;&gt;&gt; Can we do the check_configuration() check in check_build() or check_sys_deps() rather than waiting until we try to create drivers? This will cause you to get N failures rather than just one, and we should know whether or not the environment is set up correctly before we actually try to create drivers ...
&gt;&gt;&gt; 
&gt;&gt;&gt; Plus, having to call sys.exit() almost certainly indicates some layering is wrong.
&gt;&gt; 
&gt;&gt; Argh, the tool lost most of my comments ... hang on, more coming.
&gt; 
&gt; Yes.  I&apos;d *love* to fix this, but fixing this requires encapsulating the &quot;how to talk to a device&quot; logic at least a little, so that we can pass such an object to a static method on AndroidPerf for each device we want to test.
&gt; 
&gt; I have the design in my head, I just need to land some bits of:
&gt; https://github.com/eseidel/webkit/compare/master...device_connection
&gt; first.
&gt; 
&gt; I&apos;d like to land this layering violation as part of this first-pass and then fix it in a second patch if that&apos;s OK?  Even after this lands, this feature is not ready to &quot;announce&quot; yet.  I plan to send a note to webkit-dev explaining how to use --profile once I&apos;ve cleaned up the various profiling paths a bit more.

Can&apos;t you just move this block of code and _find_or_create_symfs() to the ChromiumAndroidPort class? It looks like the only driver-specific thing here is the device serial; does *which* serial really matter?

At any rate, yes, fixing this in a second patch is okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789822</commentid>
    <comment_count>20</comment_count>
      <attachid>178627</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-12 12:58:32 -0800</bug_when>
    <thetext>Comment on attachment 178627
Patch

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:306
&gt;&gt;&gt; +            self._profiler.attach_to_pid(self._pid_on_target())
&gt;&gt; 
&gt;&gt; Most ports don&apos;t use the host/target distinction, and so this method name doesn&apos;t make as much sense. Maybe call this driver_pid() or pid_to_attach_to() ?
&gt; 
&gt; Sure, I&apos;ll rename it driver_pid() (although that could be confusing as to which pid, since in host/target setups the driver has 2 pids).

Actually, I&apos;ve gone back on this too.  We need some sort of distinction in the driver code between target and host, even if most drivers don&apos;t care about it.  Alternatively I could make a HostedDriver subclass at some point to put all this stuff in.  Right now the base driver is very confused about what pids its talkign to and seems to always use the host pids, even though for things like sampling/crashes it probably wants the device pids.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789827</commentid>
    <comment_count>21</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-12-12 13:01:14 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 178627 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178627&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:306
&gt; &gt;&gt;&gt; +            self._profiler.attach_to_pid(self._pid_on_target())
&gt; &gt;&gt; 
&gt; &gt;&gt; Most ports don&apos;t use the host/target distinction, and so this method name doesn&apos;t make as much sense. Maybe call this driver_pid() or pid_to_attach_to() ?
&gt; &gt; 
&gt; &gt; Sure, I&apos;ll rename it driver_pid() (although that could be confusing as to which pid, since in host/target setups the driver has 2 pids).
&gt; 
&gt; Actually, I&apos;ve gone back on this too.  We need some sort of distinction in the driver code between target and host, even if most drivers don&apos;t care about it.  Alternatively I could make a HostedDriver subclass at some point to put all this stuff in.  Right now the base driver is very confused about what pids its talkign to and seems to always use the host pids, even though for things like sampling/crashes it probably wants the device pids.

It&apos;s hard for me to say w/o looking at the code in question, though you could certainly be right ... what code not in chromium_android.py needs to know about this distinction?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789832</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-12 13:02:21 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 178627 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178627&amp;action=review
&gt; Can&apos;t you just move this block of code and _find_or_create_symfs() to the ChromiumAndroidPort class? It looks like the only driver-specific thing here is the device serial; does *which* serial really matter?
&gt; 
&gt; At any rate, yes, fixing this in a second patch is okay.

It makes sense to me that the logic for &quot;what&quot; checks to do should be in AndroidPerf.  Since it should know what tools it needs.

We don&apos;t create an AndroidPerf until we create a Driver, currently the Profiler classes are used once per profile and discarded.  Currently (in this patch) AndroidPerf has to duplicate a lot of logic from other ChromiumAndroid classes about how to talk to ADB.  It has to hold a adb_path/device_serial pair.

We need to check each device to make sure it&apos;s setup for perf, since the Driver is designed to shard across multiple devices.  So which device_serial does matter. :)

Once we have the adb_path/device_serial pair in its own object, then it&apos;s easy to pass that object to class methods on AndroidPerf and have those class methods be able to validate that the passed in &quot;device&quot; object has the right stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789834</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-12 13:04:08 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; (From update of attachment 178627 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178627&amp;action=review
&gt; It&apos;s hard for me to say w/o looking at the code in question, though you could certainly be right ... what code not in chromium_android.py needs to know about this distinction?

The chromium android port class mostly ignores the baseclass and overrides everything it needs to to work.

Better (in my mind), long-term solutions are to make base.Port (or maybe a new base-class) be host-aware.  So that the details of talking to and Android device are contained in the android-classes, and the details of Chromium are in the chromium classes, and the details of how to talk to a hosted device are generic.  Maybe this is a dream though. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789840</commentid>
    <comment_count>24</comment_count>
      <attachid>178627</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-12 13:10:40 -0800</bug_when>
    <thetext>Comment on attachment 178627
Patch

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

&gt;&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:306
&gt;&gt;&gt;&gt;&gt; +            self._profiler.attach_to_pid(self._pid_on_target())
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Most ports don&apos;t use the host/target distinction, and so this method name doesn&apos;t make as much sense. Maybe call this driver_pid() or pid_to_attach_to() ?
&gt;&gt;&gt; 
&gt;&gt;&gt; Sure, I&apos;ll rename it driver_pid() (although that could be confusing as to which pid, since in host/target setups the driver has 2 pids).
&gt;&gt; 
&gt;&gt; Actually, I&apos;ve gone back on this too.  We need some sort of distinction in the driver code between target and host, even if most drivers don&apos;t care about it.  Alternatively I could make a HostedDriver subclass at some point to put all this stuff in.  Right now the base driver is very confused about what pids its talkign to and seems to always use the host pids, even though for things like sampling/crashes it probably wants the device pids.
&gt; 
&gt; It&apos;s hard for me to say w/o looking at the code in question, though you could certainly be right ... what code not in chromium_android.py needs to know about this distinction?

It&apos;s also possible that this is the wrong layer for this.  Maybe we should have some sort of popen wrapper around adb shell, which knows how to give you a local_pid vs. remote_pid, or host_pid vs. target_pid.

ChromiumAndroid currently keeps all the details of being hosted to itself.  base.Port doesn&apos;t have to know any of them, making for some kinda odd control flow.  I was attempting to move away from some of that here, but maybe that&apos;s premature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789847</commentid>
    <comment_count>25</comment_count>
      <attachid>179115</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-12 13:27:35 -0800</bug_when>
    <thetext>Created attachment 179115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789863</commentid>
    <comment_count>26</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-12 13:36:20 -0800</bug_when>
    <thetext>This is what the output looks like:

%run-perf-tests --profile --chromium-android Bindings/first-child.html
Running 1 tests
ANDROID_SYMFS not set, using /src/WebKit/Source/WebKit/chromium/webkit/Release/layout-test-results/symfs
Updating symfs libary (/src/WebKit/Source/WebKit/chromium/webkit/Release/layout-test-results/symfs/data/app-lib/org.chromium.native_test-1/libDumpRenderTree.so) from built copy (/src/WebKit/out/Release/lib/libDumpRenderTree.so)
Running Bindings/first-child.html (1 of 1)
Couldn&apos;t record kernel reference relocation symbol
Symbol resolution may be skewed if relocation was used (e.g. kexec).
Check /proc/kallsyms permission or run as root.
Finished: 33.602788 s

[ perf record: Woken up 6 times to write data ]
[ perf record: Captured and wrote 1.453 MB /data/perf.data (~63495 samples) ]
    48.56%  SignalSender  [unknown]             [.] 0x77f12d38      
    12.09%  SignalSender  libDumpRenderTree.so  [.] WebCore::V8SVGComponentTransferFunctionElement::toNative(v8::Handle&lt;v8::Object&gt;)
    11.26%  SignalSender  libDumpRenderTree.so  [.] WebCore::NodeV8Internal::firstChildAttrGetter(v8::Local&lt;v8::String&gt;, v8::AccessorInfo const&amp;)
     9.69%  SignalSender  libDumpRenderTree.so  [.] bool WebCore::DOMDataStore::holderContainsWrapper&lt;v8::AccessorInfo&gt;(v8::AccessorInfo const&amp;, WebCore::ScriptWrappable*)
     9.10%  SignalSender  libDumpRenderTree.so  [.] v8::Handle&lt;v8::Value&gt; WebCore::toV8Fast&lt;v8::AccessorInfo, WebCore::MutationEvent&gt;(WebCore::Node*, v8::AccessorInfo const&amp;, WebCore::MutationEvent*)
     5.91%  SignalSender  libDumpRenderTree.so  [.] std::list&lt;gpu::gles2::VertexAttribManager::VertexAttribInfo*, std::allocator&lt;gpu::gles2::VertexAttribManager::VertexAttribInfo*&gt; &gt;::begin() const
     0.57%  SignalSender  [kernel]              [k] 0xc05fa448      
     0.27%  SignalSender  libc.so               [.] 0x3bc6c         
     0.20%  SignalSender  libDumpRenderTree.so  [.] v8::internal::ShortCircuitConsString(v8::internal::Object**)
     0.10%  SignalSender  libdvm.so             [.] 0x55ab6         

To view the full profile, run:
perf report -i /src/WebKit/Source/WebKit/chromium/webkit/Release/layout-test-results/test-34.data --symfs /src/WebKit/Source/WebKit/chromium/webkit/Release/layout-test-results/symfs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789871</commentid>
    <comment_count>27</comment_count>
      <attachid>178627</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-12-12 13:44:31 -0800</bug_when>
    <thetext>Comment on attachment 178627
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:306
&gt;&gt;&gt;&gt;&gt;&gt; +            self._profiler.attach_to_pid(self._pid_on_target())
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Most ports don&apos;t use the host/target distinction, and so this method name doesn&apos;t make as much sense. Maybe call this driver_pid() or pid_to_attach_to() ?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Sure, I&apos;ll rename it driver_pid() (although that could be confusing as to which pid, since in host/target setups the driver has 2 pids).
&gt;&gt;&gt; 
&gt;&gt;&gt; Actually, I&apos;ve gone back on this too.  We need some sort of distinction in the driver code between target and host, even if most drivers don&apos;t care about it.  Alternatively I could make a HostedDriver subclass at some point to put all this stuff in.  Right now the base driver is very confused about what pids its talkign to and seems to always use the host pids, even though for things like sampling/crashes it probably wants the device pids.
&gt;&gt; 
&gt;&gt; It&apos;s hard for me to say w/o looking at the code in question, though you could certainly be right ... what code not in chromium_android.py needs to know about this distinction?
&gt; 
&gt; It&apos;s also possible that this is the wrong layer for this.  Maybe we should have some sort of popen wrapper around adb shell, which knows how to give you a local_pid vs. remote_pid, or host_pid vs. target_pid.
&gt; 
&gt; ChromiumAndroid currently keeps all the details of being hosted to itself.  base.Port doesn&apos;t have to know any of them, making for some kinda odd control flow.  I was attempting to move away from some of that here, but maybe that&apos;s premature.

I&apos;m still not a big fan of _pid_on_target(). Is pid_to_attach_to() too redundant?

Otherwise, I take your point but it&apos;s hard for me to comment on the appropriateness of the approach w/ seeing code. I would keep as much of the hosting stuff in ChromiumAndroid for now as you can. Once we have the code actually working, we can then refactor things into the appropriate places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789934</commentid>
    <comment_count>28</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-12-12 14:37:48 -0800</bug_when>
    <thetext>Don, you might want to take a look at this patch ... we&apos;re looking at what might make sense to restructure the Port and Driver code to be more aware of the host / target distinction for running w/ mobile devices.

Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789967</commentid>
    <comment_count>29</comment_count>
      <attachid>179115</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-12 15:15:24 -0800</bug_when>
    <thetext>Comment on attachment 179115
Patch

Clearing flags on attachment: 179115

Committed r137523: &lt;http://trac.webkit.org/changeset/137523&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789968</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-12 15:15:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789973</commentid>
    <comment_count>31</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-12 15:20:33 -0800</bug_when>
    <thetext>I should note that this is a first-pass implementation and there are many things yet that I would like to improve.

Noteably:
- The output is not particularly clear to those new to the perf tool.
- The code-flow (as discussed above with dpranke) is kinda awkward between Driver and ChromiumDriver
- The sys.exit(1) is a layering violation to be solved soon.
- This code can&apos;t detect yet if you built with profiling=0, a common cause of failure.

If you encounter other issues with --profile, I would love to hear about them.  Please file bugs and CC me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789986</commentid>
    <comment_count>32</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2012-12-12 15:35:57 -0800</bug_when>
    <thetext>The patch as noted is a first pass implementation and seems fine to me.

I like the idea of having a differentiation between the host and target, I&apos;m just not sure what the requirements are for the Chromium Android port. For us we use a server that interacts with however many devices. We ship off the tests by interacting with devices through a RESTful API over Python. So I&apos;m guessing there&apos;s a bit more indirection in our case.

It was relatively straightforward to pigeon hole in this by subclassing the driver and port. Definitely a bit hacky but nothing too nasty.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176622</attachid>
            <date>2012-11-28 18:33:51 -0800</date>
            <delta_ts>2012-12-05 17:24:04 -0800</delta_ts>
            <desc>does not work</desc>
            <filename>bug-103587-20121128183125.patch</filename>
            <type>text/plain</type>
            <size>4975</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MDcxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzE0NTczZmYxNzA3YzA0MzcxYjk2OTI4ZjgyOGNlNzIz
ZjIxNWQ2NC4uYmJhNDZmYzNhNTgyODgwZjA5NTViZDIwYjZhMzRlYzc2Mjk5YzhlMiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0
IEBACisyMDEyLTExLTI4ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBBZGQgc3VwcG9ydCBmb3IgcnVuLXBlcmYtdGVzdHMgLS1jaHJvbWl1bS1hbmRyb2lkIC0tcHJv
ZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAz
NTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBpcyBqdXN0IGEgc2tldGNoIGF0IHRoaXMgcG9pbnQuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAg
ICAgIChBbmRyb2lkUGVyZik6CisgICAgICAgIChBbmRyb2lkUGVyZi5fX2luaXRfXyk6CisgICAg
ICAgIChBbmRyb2lkUGVyZi5fcnVuX2FkYl9jb21tYW5kKToKKyAgICAgICAgKEFuZHJvaWRQZXJm
LmF0dGFjaF90b19waWQpOgorICAgICAgICAoQW5kcm9pZFBlcmYuX2ZpcnN0X3Rlbl9saW5lc19v
Zl9wcm9maWxlKToKKyAgICAgICAgKEFuZHJvaWRQZXJmLnByb2ZpbGVfYWZ0ZXJfZXhpdCk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX19pbml0X18pOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLl9zdGFydF9vbmNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERy
aXZlcik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3BpZF9vbl9kZXZpY2UpOgor
CiAyMDEyLTExLTI4ICBOaW1hIEdoYW5hdmF0aWFuICA8bmdoYW5hdmF0aWFuQHJpbS5jb20+CiAK
ICAgICAgICAgQWRkaW5nIE5pbWEgR2hhbmF2YXRpYW4gdG8gY29tbWl0dGVycy5weQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9h
bmRyb2lkLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9hbmRyb2lkLnB5CmluZGV4IGMxOGNkMDk0MTg0M2IwMzA1MTM0NGM4NWU2NTQxOGIwMDU3
ZmQwODAuLjkwNTQyZDIxMzY5YTg3N2M0ZjdjYTUwNjZmMTgyODczOTdkNGY5MmUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5k
cm9pZC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtX2FuZHJvaWQucHkKQEAgLTM5LDcgKzM5LDcgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMucG9ydCBpbXBvcnQgY2hyb21pdW0KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBv
cnQgaW1wb3J0IGRyaXZlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQg
ZmFjdG9yeQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgc2VydmVyX3By
b2Nlc3MKLQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnByb2ZpbGVyIGltcG9ydCBTaW5n
bGVGaWxlT3V0cHV0UHJvZmlsZXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9f
KQogCkBAIC0zMjUsNiArMzI1LDMxIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21p
dW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgcmV0dXJuIGRldmljZXNbd29ya2VyX251bWJlcl0K
IAogCitjbGFzcyBBbmRyb2lkUGVyZihTaW5nbGVGaWxlT3V0cHV0UHJvZmlsZXIpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCB3b3Jrc3BhY2UsIGV4ZWN1dGl2ZSwgZXhlY3V0YWJsZV9wYXRoLCBv
dXRwdXRfZGlyLCBkZXZpY2Vfc2VyaWFsLCBpZGVudGlmaWVyPU5vbmUpOgorICAgICAgICBzdXBl
cihBbmRyb2lkUGVyZiwgc2VsZikuX19pbml0X18od29ya3NwYWNlLCBleGVjdXRpdmUsIGV4ZWN1
dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgImRhdGEiLCBpZGVudGlmaWVyKQorICAgICAgICBzZWxm
Ll9kZXZpY2Vfc2VyaWFsID0gZGV2aWNlX3NlcmlhbAorICAgICAgICBzZWxmLl9hZGJfY29tbWFu
ZCA9IFsnYWRiJywgJy1zJywgc2VsZi5fZGV2aWNlX3NlcmlhbF0KKworICAgIGRlZiBfcnVuX2Fk
Yl9jb21tYW5kKHNlbGYsIGNtZCk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuX2V4ZWN1dGl2ZS5y
dW5fY29tbWFuZChzZWxmLl9hZGJfY29tbWFuZCArIGNtZCkKKworICAgIGRlZiBhdHRhY2hfdG9f
cGlkKHNlbGYsIHBpZCk6CisgICAgICAgIGNtZCA9IFsnYWRiJywgJ3NoZWxsJywgJ3BlcmYnLCAn
cmVjb3JkJywgJy1nJywgJy1wJywgcGlkXQorICAgICAgICBjbWQgPSBtYXAodW5pY29kZSwgY21k
KQorICAgICAgICBzZWxmLl9leGVjdXRpdmUucG9wZW4oY21kKQorCisgICAgZGVmIF9maXJzdF90
ZW5fbGluZXNfb2ZfcHJvZmlsZShzZWxmLCBwZXJmX291dHB1dCk6CisgICAgICAgIHJldHVybiBw
ZXJmX291dHB1dAorCisgICAgZGVmIHByb2ZpbGVfYWZ0ZXJfZXhpdChzZWxmKToKKyAgICAgICAg
c2VsZi5fcnVuX2FkYl9jb21tYW5kKFsncHVsbCcsICcvZGF0YS9wZXJmLmRhdGEnLCBzZWxmLl9v
dXRwdXRfcGF0aF0pCisgICAgICAgICMgRklYTUU6IE5lZWQgYSB3YXkgdG8gZmluZCB0aGUgc3lt
Ym9sIHJvb3QuCisgICAgICAgIHBlcmZfb3V0cHV0ID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKFsncGVyZmhvc3RfbGludXgnLCAnLWknLCBzZWxmLl9vdXRwdXRfcGF0aCwgJy0tc3ltZnMn
LCAnc3ltYm9scyddKQorICAgICAgICAjIFdlIGNvdWxkIHNhdmUgb2ZmIHRoZSBmdWxsIC1nIHJl
cG9ydCB0byBhIGZpbGUgaWYgdXNlcnMgZm91bmQgdGhhdCB1c2VmdWwuCisgICAgICAgIHByaW50
IHNlbGYuX2ZpcnN0X3Rlbl9saW5lc19vZl9wcm9maWxlKHBlcmZfb3V0cHV0KQorCisKIGNsYXNz
IENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQ9RmFsc2Up
OgogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9faW5pdF9fKHBv
cnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQpAQCAtMzQwLDYgKzM2
NSwxNSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAg
ICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBwb3J0Ll9nZXRfZGV2aWNlX3NlcmlhbCh3b3JrZXJf
bnVtYmVyKQogICAgICAgICBzZWxmLl9hZGJfY29tbWFuZCA9IFsnYWRiJywgJy1zJywgc2VsZi5f
ZGV2aWNlX3NlcmlhbF0KIAorICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGxhbWUgdG8gZHVwbGlj
YXRlIHRoaXMgbG9naWMgd2l0aCBEcml2ZXIsIGhvd2V2ZXIKKyAgICAgICAgIyB1bmxlc3MgRHJp
dmVyIGluZGlyZWN0cyB0aHJvdWdoIFBvcnQgdG8gY3JlYXRlIHRoZSBwcm9maWxlciB3ZSBoYXZl
CisgICAgICAgICMgbm8gd2F5IHRvIHRlbGwgUHJvZmlsZXJGYWN0b3J5IHRoYXQgd2UncmUgdGFy
Z2V0aW5nIEFuZHJvaWQgb3ZlciBhZGIuCisgICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlv
bigicHJvZmlsZSIpOgorICAgICAgICAgICAgaG9zdCA9IHNlbGYuX3BvcnQuaG9zdAorICAgICAg
ICAgICAgc2VsZi5fcHJvZmlsZXIgPSBBbmRyb2lkUGVyZihob3N0LndvcmtzcGFjZSwgaG9zdC5l
eGVjdXRpdmUsIHNlbGYuX3BvcnQuX3BhdGhfdG9fZHJpdmVyKCksIHNlbGYuX3BvcnQucmVzdWx0
c19kaXJlY3RvcnkoKSwgc2VsZi5fZGV2aWNlX3NlcmlhbCkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHNlbGYuX3Byb2ZpbGVyID0gTm9uZQorCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAg
ICAgICAgIHNlbGYuX3RlYXJkb3duX3BlcmZvcm1hbmNlKCkKICAgICAgICAgc3VwZXIoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fX2RlbF9fKCkKQEAgLTY0NSw2ICs2NzksMTkgQEAgY2xh
c3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAgICAgbm9y
bWFsX3N0YXJ0dXBfZXZlbnQuc2V0KCkKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKKyAgICAg
ICAgaWYgc2VsZi5fcHJvZmlsZXI6CisgICAgICAgICAgICBzZWxmLl9wcm9maWxlci5hdHRhY2hf
dG9fcGlkKHNlbGYuX3BpZF9vbl9kZXZpY2UoKSkKKworICAgIGRlZiBfcGlkX29uX2RldmljZShz
ZWxmKToKKyAgICAgICAgIyBGSVhNRTogVGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gZG8g
dGhpcyEKKyAgICAgICAgcHNfb3V0cHV0ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAncHMnXSkKKyAgICAgICAgIyBwcyBvdXRwdXQgc2VlbXMgdG8gYmUgZml4ZWQgd2lkdGgsIHdl
IG9ubHkgY2FyZSBhYm91dCB0aGUgbmFtZSBhbmQgdGhlIHBpZAorICAgICAgICAjIHUwX2E3MiAg
ICAyMTYzMCAxMjUgICA5NDc5MjAgNTkzNjQgZmZmZmZmZmYgNDAwYmVlZTQgUyBvcmcuY2hyb21p
dW0ubmF0aXZlX3Rlc3QKKyAgICAgICAgZm9yIGxpbmUgaW4gcHNfb3V0cHV0LnNwbGl0KCdcbicp
OgorICAgICAgICAgICAgaWYgbGluZS5jb250YWlucyhEUlRfQVBQX1BBQ0tBR0UpOgorICAgICAg
ICAgICAgICAgIG1hdGNoID0gbGluZS5tYXRjaChyJ1xTXHMrKFxkKyknKQorICAgICAgICAgICAg
ICAgIHJldHVybiBtYXRjaC5ncm91cCgxKQorCiAgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAg
IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRf
QVBQX1BBQ0tBR0VdKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177879</attachid>
            <date>2012-12-05 17:24:06 -0800</date>
            <delta_ts>2012-12-05 18:25:12 -0800</delta_ts>
            <desc>Works on my machine, needs a bit more code to be general</desc>
            <filename>bug-103587-20121205172131.patch</filename>
            <type>text/plain</type>
            <size>17632</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NTY1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWNhMTA5MzhmNTA0ODlmZDg5NzNiOGQyZDEyY2I2NGU1
MmI0ZWJhZS4uYzgwYzlmZmQwMjU4ODczYTM4NmQzOTUzYmMxZTM4NWFmZDYwNWE3OSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0
IEBACisyMDEyLTEyLTA0ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBBZGQgc3VwcG9ydCBmb3IgcnVuLXBlcmYtdGVzdHMgLS1jaHJvbWl1bS1hbmRyb2lkIC0tcHJv
ZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAz
NTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBpcyBqdXN0IGEgc2tldGNoIGF0IHRoaXMgcG9pbnQuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAg
ICAgIChBbmRyb2lkUGVyZik6CisgICAgICAgIChBbmRyb2lkUGVyZi5fX2luaXRfXyk6CisgICAg
ICAgIChBbmRyb2lkUGVyZi5fcnVuX2FkYl9jb21tYW5kKToKKyAgICAgICAgKEFuZHJvaWRQZXJm
LmF0dGFjaF90b19waWQpOgorICAgICAgICAoQW5kcm9pZFBlcmYuX2ZpcnN0X3Rlbl9saW5lc19v
Zl9wcm9maWxlKToKKyAgICAgICAgKEFuZHJvaWRQZXJmLnByb2ZpbGVfYWZ0ZXJfZXhpdCk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX19pbml0X18pOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLl9zdGFydF9vbmNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERy
aXZlcik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3BpZF9vbl9kZXZpY2UpOgor
CiAyMDEyLTEyLTA0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmVtb3ZlIG9ic29sZXRlIGNvZGUgZnJvbSB3ZWJraXRweQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5
CmluZGV4IDlkNzdhNTUzOGJlMDI1NjBlODk0NTA0N2EzNzZlY2Q0NjhhNzhmMDkuLjc5NDg4Yjg4
ZTQwNGIyMTNkMDY5OTIyZDk2ZTRmMjE3MDFiMWMzNWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQu
cHkKQEAgLTM4LDcgKzM4LDcgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBv
cnQgY2hyb21pdW0KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGRyaXZl
cgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQogZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgc2VydmVyX3Byb2Nlc3MKLQorZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLnByb2ZpbGVyIGltcG9ydCBTaW5nbGVGaWxlT3V0cHV0UHJv
ZmlsZXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCkBAIC0zNTcsNiAr
MzU3LDYwIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb21pdW1Qb3J0
KToKICAgICAgICAgcmV0dXJuIGRldmljZXNbd29ya2VyX251bWJlcl0KIAogCitjbGFzcyBBbmRy
b2lkUGVyZihTaW5nbGVGaWxlT3V0cHV0UHJvZmlsZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBob3N0LCBleGVjdXRhYmxlX3BhdGgsIG91dHB1dF9kaXIsIGRldmljZV9zZXJpYWwsIHN5bWZz
X3BhdGgsIGlkZW50aWZpZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKEFuZHJvaWRQZXJmLCBzZWxm
KS5fX2luaXRfXyhob3N0LCBleGVjdXRhYmxlX3BhdGgsIG91dHB1dF9kaXIsICJkYXRhIiwgaWRl
bnRpZmllcikKKyAgICAgICAgc2VsZi5fZGV2aWNlX3NlcmlhbCA9IGRldmljZV9zZXJpYWwKKyAg
ICAgICAgc2VsZi5fYWRiX2NvbW1hbmQgPSBbJ2FkYicsICctcycsIHNlbGYuX2RldmljZV9zZXJp
YWxdCisgICAgICAgIHNlbGYuX3BlcmZfcHJvY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3lt
ZnNfcGF0aCA9IHN5bWZzX3BhdGgKKyAgICAgICAgc2VsZi5fY2hlY2tfZGV2aWNlX2NvbmZpZ3Vy
YXRpb24oKQorCisgICAgZGVmIF9jaGVja19kZXZpY2VfY29uZmlndXJhdGlvbihzZWxmKToKKyAg
ICAgICAgIyBDaGVjayB0aGF0IHBlcmYgaXMgaW5zdGFsbGVkCisgICAgICAgICMgQ2hlY2sgdGhh
dCB0aGUgZGV2aWNlIGlzIGEgdXNlcmRlYnVnIGJ1aWxkIChvciBhdCBsZWFzdCBoYXMgdGhlIG5l
Y2Vzc2FyeSBsaWJyYXJpZXMpLgorICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGJpbmFyeSBhY3R1
YWxseSBpcyBwZXJmLWFibGUgKGhhcyBzdGFja2ZyYW1lIHBvaW50ZXJzKT8KKyAgICAgICAgIyBE
aXNwbGF5IHNvbWUgbmljZSBtZXNzYWdlIGxpbmtpbmcgdG8gdGhlIGRvY3MgaWYgdGhlIGRldmlj
ZSBpc24ndCBjb25maWd1cmVkIGZvciBwZXJmaW5nLgorICAgICAgICBwYXNzCisKKyAgICBkZWYg
X3J1bl9hZGJfY29tbWFuZChzZWxmLCBjbWQpOgorICAgICAgICByZXN1bHQgPSBzZWxmLl9ob3N0
LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChzZWxmLl9hZGJfY29tbWFuZCArIGNtZCkKKworICAgIGRl
ZiBhdHRhY2hfdG9fcGlkKHNlbGYsIHBpZCk6CisgICAgICAgIGFzc2VydChwaWQpCisgICAgICAg
IGFzc2VydChzZWxmLl9wZXJmX3Byb2Nlc3MgPT0gTm9uZSkKKyAgICAgICAgIyBGSVhNRTogVGhp
cyBjYW4ndCBiZSBhIGZpeGVkIHRpbWVvdXQhCisgICAgICAgIGNtZCA9IFsnYWRiJywgJ3NoZWxs
JywgJ3BlcmYnLCAncmVjb3JkJywgJy1nJywgJy1wJywgcGlkLCAnc2xlZXAnLCAzMF0KKyAgICAg
ICAgY21kID0gbWFwKHVuaWNvZGUsIGNtZCkKKyAgICAgICAgc2VsZi5fcGVyZl9wcm9jZXNzID0g
c2VsZi5faG9zdC5leGVjdXRpdmUucG9wZW4oY21kKQorCisgICAgZGVmIF9maW5kX3BlcmZob3N0
KHNlbGYpOgorICAgICAgICAjIENoZWNrIHBlcmZob3N0X2xpbnV4IC0tdmVyc2lvbgorICAgICAg
ICAjIG90aGVyd2lzZSB0cnkgdGhlIGxvY2FsIGRpcmVjdG9yeT8KKyAgICAgICAgIyBvdGhlcndp
c2UgZXhwbGFpbiB3aGVyZSB1c2VycyBjYW4gaW5zdGFsbCBpdCBmcm9tLgorICAgICAgICByZXR1
cm4gJy9zcmMvY2hyb21pdW0tYW5kcm9pZC9wZXJmaG9zdF9saW51eCcKKworICAgIGRlZiBfZmly
c3RfdGVuX2xpbmVzX29mX3Byb2ZpbGUoc2VsZiwgcGVyZl9vdXRwdXQpOgorICAgICAgICBtYXRj
aCA9IHJlLnNlYXJjaCgiXiNbXlxuXSpcbigoPzpbXlxuXSpcbil7MCwxM30pIiwgcGVyZl9vdXRw
dXQsIHJlLk1VTFRJTElORSkKKyAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpIGlmIG1hdGNo
IGVsc2UgTm9uZQorCisgICAgZGVmIHByb2ZpbGVfYWZ0ZXJfZXhpdChzZWxmKToKKyAgICAgICAg
cGVyZl9leGl0Y29kZSA9IHNlbGYuX3BlcmZfcHJvY2Vzcy53YWl0KCkKKyAgICAgICAgaWYgcGVy
Zl9leGl0Y29kZSAhPSAwOgorICAgICAgICAgICAgcHJpbnQgIlBlcmYgZmFpbGVkIChleGl0IGNv
ZGU6ICVpKSwgY2FuJ3QgcHJvY2VzcyByZXN1bHRzLiIgJSBwZXJmX2V4aXRjb2RlCisgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsncHVsbCcsICcvZGF0
YS9wZXJmLmRhdGEnLCBzZWxmLl9vdXRwdXRfcGF0aF0pCisKKyAgICAgICAgcGVyZmhvc3RfcGF0
aCA9IHNlbGYuX2ZpbmRfcGVyZmhvc3QoKQorICAgICAgICBwZXJmaG9zdF9hcmdzID0gW3BlcmZo
b3N0X3BhdGgsICdyZXBvcnQnLCAnLWcnLCAnbm9uZScsICctaScsIHNlbGYuX291dHB1dF9wYXRo
LCAnLS1zeW1mcycsIHNlbGYuX3N5bWZzX3BhdGhdCisgICAgICAgIHBlcmZfb3V0cHV0ID0gc2Vs
Zi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQocGVyZmhvc3RfYXJncykKKyAgICAgICAgIyBX
ZSBjb3VsZCBzYXZlIG9mZiB0aGUgZnVsbCAtZyByZXBvcnQgdG8gYSBmaWxlIGlmIHVzZXJzIGZv
dW5kIHRoYXQgdXNlZnVsLgorICAgICAgICBwcmludCBzZWxmLl9maXJzdF90ZW5fbGluZXNfb2Zf
cHJvZmlsZShwZXJmX291dHB1dCkKKworICAgICAgICBwcmludCAiVG8gdmlldyB0aGUgZnVsbCBw
cm9maWxlLCBydW46IgorICAgICAgICBwcmludCAnICcuam9pbihbcGVyZmhvc3RfcGF0aCwgJ3Jl
cG9ydCcsICctaScsIHNlbGYuX291dHB1dF9wYXRoLCAnLS1zeW1mcycsIHNlbGYuX3N5bWZzX3Bh
dGhdKQorCisKIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5v
X3RpbWVvdXQ9RmFsc2UpOgogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNl
bGYpLl9faW5pdF9fKHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0
KQpAQCAtMzcyLDEwICs0MjYsNDUgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZl
ci5Ecml2ZXIpOgogICAgICAgICBzZWxmLl9kZXZpY2Vfc2VyaWFsID0gcG9ydC5fZ2V0X2Rldmlj
ZV9zZXJpYWwod29ya2VyX251bWJlcikKICAgICAgICAgc2VsZi5fYWRiX2NvbW1hbmRfYmFzZSA9
IE5vbmUKIAorICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGxhbWUgdG8gZHVwbGljYXRlIHRoaXMg
bG9naWMgd2l0aCBEcml2ZXIsIGhvd2V2ZXIKKyAgICAgICAgIyB1bmxlc3MgRHJpdmVyIGluZGly
ZWN0cyB0aHJvdWdoIFBvcnQgdG8gY3JlYXRlIHRoZSBwcm9maWxlciB3ZSBoYXZlCisgICAgICAg
ICMgbm8gd2F5IHRvIHRlbGwgUHJvZmlsZXJGYWN0b3J5IHRoYXQgd2UncmUgdGFyZ2V0aW5nIEFu
ZHJvaWQgb3ZlciBhZGIuCisgICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigicHJvZmls
ZSIpOgorICAgICAgICAgICAgaG9zdCA9IHNlbGYuX3BvcnQuaG9zdAorICAgICAgICAgICAgc3lt
ZnNfcGF0aCA9IHNlbGYuX2ZpbmRfb3JfY3JlYXRlX3N5bWZzKCkKKyAgICAgICAgICAgIHNlbGYu
X3Byb2ZpbGVyID0gQW5kcm9pZFBlcmYoaG9zdCwgc2VsZi5fcG9ydC5fcGF0aF90b19kcml2ZXIo
KSwgc2VsZi5fcG9ydC5yZXN1bHRzX2RpcmVjdG9yeSgpLCBzZWxmLl9kZXZpY2Vfc2VyaWFsLCBz
eW1mc19wYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHJvZmlsZXIgPSBO
b25lCisgICAgICAgIHNlbGYuX2RlbGF5X3Bvc3Rfc3RhcnRfdGFza3MgPSBGYWxzZQorCiAgICAg
ZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuX3RlYXJkb3duX3BlcmZvcm1hbmNlKCkK
ICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fX2RlbF9fKCkKIAor
ICAgIGRlZiBfZmluZF9vcl9jcmVhdGVfc3ltZnMoc2VsZik6CisgICAgICAgIGVudmlyb25tZW50
ID0gc2VsZi5fcG9ydC5ob3N0LmNvcHlfY3VycmVudF9lbnZpcm9ubWVudCgpCisgICAgICAgIGVu
diA9IGVudmlyb25tZW50LnRvX2RpY3Rpb25hcnkoKQorICAgICAgICBmcyA9IHNlbGYuX3BvcnQu
aG9zdC5maWxlc3lzdGVtCisKKyAgICAgICAgaWYgJ0FORFJPSURfU1lNRlMnIGluIGVudjoKKyAg
ICAgICAgICAgIHN5bWZzX3BhdGggPSBlbnZbJ0FORFJPSURfU1lNRlMnXQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgc3ltZnNfcGF0aCA9IGZzLmpvaW4oc2VsZi5fcG9ydC5yZXN1bHRzX2Rp
cmVjdG9yeSgpLCAnc3ltZnMnKQorICAgICAgICAgICAgcHJpbnQgIkFORFJPSURfU1lNRlMgbm90
IHNldCwgdXNpbmcgJXMiICUgc3ltZnNfcGF0aAorCisgICAgICAgICMgZmluZCB0aGUgaW5zdGFs
bGVkIHBhdGgsIGFuZCB0aGUgcGF0aCBvZiB0aGUgc3ltYm9sZWQgYnVpbHQgbGlicmFyeQorICAg
ICAgICBkcnRfbGlicmFyeV9uYW1lID0gJ2xpYkR1bXBSZW5kZXJUcmVlLnNvJworICAgICAgICBz
eW1mc19saWJyYXJ5X3BhdGggPSBmcy5qb2luKHN5bWZzX3BhdGgsICJkYXRhL2FwcC1saWIvJXMt
MS8lcyIgJSAoRFJUX0FQUF9QQUNLQUdFLCBkcnRfbGlicmFyeV9uYW1lKSkKKyAgICAgICAgYnVp
bHRfbGlicmFyeV9wYXRoID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnbGliJywgZHJ0X2xpYnJh
cnlfbmFtZSkKKyAgICAgICAgYXNzZXJ0KGZzLmV4aXN0cyhidWlsdF9saWJyYXJ5X3BhdGgpKQor
CisgICAgICAgICMgRklYTUU6IElkZWFsbHkgd2UnZCBjaGVjayB0aGUgc2hhMSdzIGZpcnN0IGFu
ZCBtYWtlIGEgc29mdC1saW5rIGluc3RlYWQgb2YgY29weWluZyAoc2luY2Ugd2UgcHJvYmFibHkg
bmV2ZXIgY2FyZSBhYm91dCB3aW5kb3dzKS4KKyAgICAgICAgcHJpbnQgIlVwZGF0aW5nIHN5bWZz
IGxpYmFyeSAoJXMpIGZyb20gYnVpbHQgY29weSAoJXMpIiAlIChzeW1mc19saWJyYXJ5X3BhdGgs
IGJ1aWx0X2xpYnJhcnlfcGF0aCkKKyAgICAgICAgZnMubWF5YmVfbWFrZV9kaXJlY3RvcnkoZnMu
ZGlybmFtZShzeW1mc19saWJyYXJ5X3BhdGgpKQorICAgICAgICBmcy5jb3B5ZmlsZShidWlsdF9s
aWJyYXJ5X3BhdGgsIHN5bWZzX2xpYnJhcnlfcGF0aCkKKworICAgICAgICByZXR1cm4gc3ltZnNf
cGF0aAorCiAgICAgZGVmIF9zZXR1cF9tZDVzdW1fYW5kX3B1c2hfZGF0YV9pZl9uZWVkZWQoc2Vs
Zik6CiAgICAgICAgIHNlbGYuX21kNXN1bV9wYXRoID0gc2VsZi5fcG9ydC5wYXRoX3RvX21kNXN1
bSgpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2UoTUQ1U1VNX0RF
VklDRV9QQVRIKToKQEAgLTYwNiw2ICs2OTUsNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2
ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIHNlbGYuX2Fib3J0KCdGYWlsZWQgdG8gc3RhcnQg
RHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24gbXVsdGlwbGUgdGltZXMuIEdpdmUgdXAuJykKIAog
ICAgIGRlZiBfc3RhcnRfb25jZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Cisg
ICAgICAgIHNlbGYuX2RlbGF5X3Bvc3Rfc3RhcnRfdGFza3MgPSBUcnVlICAjIFRoaXMgaXMgYSBo
YWNrIHRvIG5vdCBzdGFydCB0aGUgcHJvZmlsZXIgdW50aWwgYWZ0ZXIgdGhlIHJlbW90ZSBwcm9j
ZXNzIGlzIGZ1bGx5IHNldHVwLgogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIs
IHNlbGYpLl9zdGFydChwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykKIAogICAgICAgICBzZWxm
Ll9sb2dfZGVidWcoJ1N0YXJ0aW5nIGZvcndhcmRlcicpCkBAIC02NzMsMTAgKzc2MywyOCBAQCBj
bGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICAgICAj
IGRlYWRsb2NrIGFuZCBraWxsZWQgdGhlIGZpZm8gcmVhZGluZy93cml0aW5nIHByb2Nlc3Nlcy4K
ICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZTog
XG4lcycgJSBvdXRwdXQpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICMgSW5mb3JtIHRoZSBkZWFkbG9jayBkZXRlY3RvciB0aGF0IHRoZSBzdGFy
dHVwIGlzIHN1Y2Nlc3NmdWwgd2l0aG91dCBkZWFkbG9jay4KLSAgICAgICAgICAgIG5vcm1hbF9z
dGFydHVwX2V2ZW50LnNldCgpCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHNl
bGYuX2RlbGF5X3Bvc3Rfc3RhcnRfdGFza3MgPSBGYWxzZQorICAgICAgICBzZWxmLl9ydW5fcG9z
dF9zdGFydF90YXNrcygpCisKKyAgICAgICAgIyBJbmZvcm0gdGhlIGRlYWRsb2NrIGRldGVjdG9y
IHRoYXQgdGhlIHN0YXJ0dXAgaXMgc3VjY2Vzc2Z1bCB3aXRob3V0IGRlYWRsb2NrLgorICAgICAg
ICBub3JtYWxfc3RhcnR1cF9ldmVudC5zZXQoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAg
ZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZGVsYXlf
cG9zdF9zdGFydF90YXNrczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzdXBlcihDaHJv
bWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9ydW5fcG9zdF9zdGFydF90YXNrcygpCisKKyAgICBk
ZWYgX3BpZF9vbl90YXJnZXQoc2VsZik6CisgICAgICAgICMgRklYTUU6IFRoZXJlIG11c3QgYmUg
YSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMhCisgICAgICAgIHBzX291dHB1dCA9IHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ3BzJ10pCisgICAgICAgICMgcHMgb3V0cHV0IHNlZW1zIHRv
IGJlIGZpeGVkIHdpZHRoLCB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIG5hbWUgYW5kIHRoZSBwaWQK
KyAgICAgICAgIyB1MF9hNzIgICAgMjE2MzAgMTI1ICAgOTQ3OTIwIDU5MzY0IGZmZmZmZmZmIDQw
MGJlZWU0IFMgb3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0CisgICAgICAgIGZvciBsaW5lIGluIHBz
X291dHB1dC5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgIGlmIGxpbmUuZmluZChEUlRfQVBQX1BB
Q0tBR0UpICE9IC0xOgorICAgICAgICAgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocidcUytccyso
XGQrKScsIGxpbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpCiAKICAg
ICBkZWYgc3RvcChzZWxmKToKICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAnYW0nLCAnZm9yY2Utc3RvcCcsIERSVF9BUFBfUEFDS0FHRV0pCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5p
dHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9t
aXVtX2FuZHJvaWRfdW5pdHRlc3QucHkKaW5kZXggYmVkOTg3ZjFiYzIxNGE1MGQ2OTExNjcyMTlk
ZTIwODgyZTBjNTlmYS4uNTlhNGFjMzhjY2ZkZDdjYWY2MTcyMDM1ZDBkMjEzNDNiZDUyMjU3NCAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZF91bml0dGVzdC5weQpAQCAtNDIsNiArNDIs
NyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXIKIGZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGRyaXZlcl91bml0dGVzdAogZnJvbSB3
ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwogCisKIGNsYXNzIE1vY2tS
dW5Db21tYW5kKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzZWxm
Ll9tb2NrX2xvZ2NhdCA9ICcnCkBAIC0yNTksNiArMjYwLDYwIEBAIGNsYXNzIENocm9taXVtQW5k
cm9pZERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlbGYuZHJpdmVyLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KGRyaXZlcl9pbnB1dCks
IGV4cGVjdGVkX2NvbW1hbmQpCiAKIAorY2xhc3MgQW5kcm9pZFBlcmZUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKKyAgICBkZWYgdGVzdF9wZXJmX291dHB1dF9yZWdleHAoc2VsZik6CisgICAgICAg
IHBlcmZfb3V0cHV0ID0gIiIiW2tlcm5lbC5rYWxsc3ltc10gd2l0aCBidWlsZCBpZCA1YTIwZjYy
OTliZGI5NTVhMmYwNzcxMWJiN2Y2NWNkNzA2ZmU3NDY5IG5vdCBmb3VuZCwgY29udGludWluZyB3
aXRob3V0IHN5bWJvbHMKK0ZhaWxlZCB0byBvcGVuIC90bXAvcGVyZi0xNDE2OC5tYXAsIGNvbnRp
bnVpbmcgd2l0aG91dCBzeW1ib2xzCitLZXJuZWwgYWRkcmVzcyBtYXBzICgvcHJvYy97a2FsbHN5
bXMsbW9kdWxlc30pIHdlcmUgcmVzdHJpY3RlZC4KKworQ2hlY2sgL3Byb2Mvc3lzL2tlcm5lbC9r
cHRyX3Jlc3RyaWN0IGJlZm9yZSBydW5uaW5nICdwZXJmIHJlY29yZCcuCisKK0FzIG5vIHN1aXRh
YmxlIGthbGxzeW1zIG5vciB2bWxpbnV4IHdhcyBmb3VuZCwga2VybmVsIHNhbXBsZXMKK2Nhbid0
IGJlIHJlc29sdmVkLgorCitTYW1wbGVzIGluIGtlcm5lbCBtb2R1bGVzIGNhbid0IGJlIHJlc29s
dmVkIGFzIHdlbGwuCisKKyMgRXZlbnRzOiAzMUsgY3ljbGVzCisjCisjIE92ZXJoZWFkICAgICAg
ICAgIENvbW1hbmQgICAgICAgICAgICAgICAgU2hhcmVkIE9iamVjdAorIyAuLi4uLi4uLiAgLi4u
Li4uLi4uLi4uLi4uICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gIC4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIworICAgIDE2LjE4JSAgIER1
bXBSZW5kZXJUcmVlICBwZXJmLTE0MTY4Lm1hcCAgICAgICAgICAgICAgIFsuXSAweDIxMjcwYWMw
Y2Y0MworICAgIDEyLjcyJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAg
ICAgICAgIFsuXSB2ODo6aW50ZXJuYWw6OkpTT2JqZWN0OjpHZXRFbGVtZW50V2l0aEludGVyY2Vw
dG9yKHY4OjppbnRlcm5hbDo6T2JqZWN0KiwgdW5zaWduZWQgaW50KQorICAgICA4LjI4JSAgIER1
bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSB2ODo6aW50ZXJu
YWw6OkxvYWRQcm9wZXJ0eVdpdGhJbnRlcmNlcHRvck9ubHkodjg6OmludGVybmFsOjpBcmd1bWVu
dHMsIHY4OjppbnRlcm5hbDo6SXNvbGF0ZSopCisgICAgIDUuNjAlICAgRHVtcFJlbmRlclRyZWUg
IER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdURjo6QXRvbWljU3RyaW5nIFdlYkNv
cmU6OnY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nPFdURjo6QXRvbWljU3RyaW5nPih2ODo6SGFuZGxl
PHY4OjpTdHJpbmc+LCBXZWJDb3JlOjpFeHRlcm5hbE1vZGUpCisgICAgIDQuNjAlICAgRHVtcFJl
bmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OldlYWtS
ZWZlcmVuY2VNYXA8dm9pZCwgdjg6Ok9iamVjdD46OmdldCh2b2lkKikKKyAgICAgMy45OSUgICBE
dW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gX1pOSzNXVEY3
SGFzaE1hcElQTlNfMTZBdG9taWNTdHJpbmdJbXBsRVBON1dlYkNvcmU3RWxlbWVudEVOU183UHRy
SGFzaElTMl9FRU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TOF9JUzVfRUVFM2dldEVSS1MyXy5pc3Jh
Ljk4CisgICAgIDMuNjklICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAg
ICAgICAgWy5dIFdlYkNvcmU6OkRvY3VtZW50VjhJbnRlcm5hbDo6Z2V0RWxlbWVudEJ5SWRDYWxs
YmFjayh2ODo6QXJndW1lbnRzIGNvbnN0JikKKyAgICAgMy4yMyUgICBEdW1wUmVuZGVyVHJlZSAg
RHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6VjhQYXJhbWV0ZXJCYXNl
OjpwcmVwYXJlQmFzZSgpCisgICAgIDIuODMlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJU
cmVlICAgICAgICAgICAgICAgWy5dIFdURjo6QXRvbWljU3RyaW5nOjphZGQodW5zaWduZWQgc2hv
cnQgY29uc3QqLCB1bnNpZ25lZCBpbnQpCisgICAgIDIuNzMlICAgRHVtcFJlbmRlclRyZWUgIER1
bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OkRvY3VtZW50VjhJbnRlcm5h
bDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVDYWxsYmFjayh2ODo6QXJndW1lbnRzIGNvbnN0JikKKyAg
ICAgMi40NyUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBb
Ll0gX1pOMnY4Nk9iamVjdDI3R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkRWkuY29uc3Rwcm9w
LjQzOQorICAgICAyLjQzJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAg
ICAgICAgIFsuXSB2ODo6aW50ZXJuYWw6Oklzb2xhdGU6OlNldEN1cnJlbnRWTVN0YXRlKHY4Ojpp
bnRlcm5hbDo6U3RhdGVUYWcpCisgICAgIDIuMzQlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5k
ZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdURjo6SGFzaFRhYmxlQWRkUmVzdWx0PFdURjo6SGFz
aFRhYmxlSXRlcmF0b3I8c3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIsIFdURjo6QXRvbWljU3RyaW5n
PiwgV1RGOjpLZXlWYWx1ZVBhaXI8c3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIsIFdURjo6QXRvbWlj
U3RyaW5nPiwgV2ViQ29yCisgICAgIDIuMjglICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJU
cmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxl
bWVudEJ5SWQoV1RGOjpBdG9taWNTdHJpbmdJbXBsKiwgV2ViQ29yZTo6VHJlZVNjb3BlIGNvbnN0
KikgY29uc3QKKyAgICAgMi4xNSUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAg
ICAgICAgICAgICBbLl0gV2ViQ29yZTo6VjhOb2RlTGlzdDo6bmFtZWRQcm9wZXJ0eUdldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4sIHY4OjpBY2Nlc3NvckluZm8gY29uc3QmKQorICAgICAyLjA2
JSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6SFRNTFRhZ05vZGVMaXN0PiBXZWJDb3JlOjpOb2RlTGlzdHNO
b2RlRGF0YTo6YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxXZWJDb3JlOjpIVE1MVGFnTm9kZUxpc3Q+
KFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OgorICAgICAxLjE4JSAg
IER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJDb3Jl
OjpOb2RlVjhJbnRlcm5hbDo6bm9kZVR5cGVBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
Piwgdjg6OkFjY2Vzc29ySW5mbyBjb25zdCYpCisgICAgIDEuMDglICAgRHVtcFJlbmRlclRyZWUg
IER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1l
bnRzQnlUYWdOYW1lKFdURjo6QXRvbWljU3RyaW5nIGNvbnN0JikKKyIiIgorICAgICAgICBleHBl
Y3RlZF9maXJzdF90ZW5fbGluZXMgPSAiIiIgICAgMTYuMTglICAgRHVtcFJlbmRlclRyZWUgIHBl
cmYtMTQxNjgubWFwICAgICAgICAgICAgICAgWy5dIDB4MjEyNzBhYzBjZjQzCisgICAgMTIuNzIl
ICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIHY4Ojpp
bnRlcm5hbDo6SlNPYmplY3Q6OkdldEVsZW1lbnRXaXRoSW50ZXJjZXB0b3Iodjg6OmludGVybmFs
OjpPYmplY3QqLCB1bnNpZ25lZCBpbnQpCisgICAgIDguMjglICAgRHVtcFJlbmRlclRyZWUgIER1
bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIHY4OjppbnRlcm5hbDo6TG9hZFByb3BlcnR5
V2l0aEludGVyY2VwdG9yT25seSh2ODo6aW50ZXJuYWw6OkFyZ3VtZW50cywgdjg6OmludGVybmFs
OjpJc29sYXRlKikKKyAgICAgNS42MCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUg
ICAgICAgICAgICAgICBbLl0gV1RGOjpBdG9taWNTdHJpbmcgV2ViQ29yZTo6djhTdHJpbmdUb1dl
YkNvcmVTdHJpbmc8V1RGOjpBdG9taWNTdHJpbmc+KHY4OjpIYW5kbGU8djg6OlN0cmluZz4sIFdl
YkNvcmU6OkV4dGVybmFsTW9kZSkKKyAgICAgNC42MCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJl
bmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDx2b2lk
LCB2ODo6T2JqZWN0Pjo6Z2V0KHZvaWQqKQorICAgICAzLjk5JSAgIER1bXBSZW5kZXJUcmVlICBE
dW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBfWk5LM1dURjdIYXNoTWFwSVBOU18xNkF0
b21pY1N0cmluZ0ltcGxFUE43V2ViQ29yZTdFbGVtZW50RU5TXzdQdHJIYXNoSVMyX0VFTlNfMTBI
YXNoVHJhaXRzSVMyX0VFTlM4X0lTNV9FRUUzZ2V0RVJLUzJfLmlzcmEuOTgKKyAgICAgMy42OSUg
ICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV2ViQ29y
ZTo6RG9jdW1lbnRWOEludGVybmFsOjpnZXRFbGVtZW50QnlJZENhbGxiYWNrKHY4OjpBcmd1bWVu
dHMgY29uc3QmKQorICAgICAzLjIzJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAg
ICAgICAgICAgICAgIFsuXSBXZWJDb3JlOjpWOFBhcmFtZXRlckJhc2U6OnByZXBhcmVCYXNlKCkK
KyAgICAgMi44MyUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAg
ICBbLl0gV1RGOjpBdG9taWNTdHJpbmc6OmFkZCh1bnNpZ25lZCBzaG9ydCBjb25zdCosIHVuc2ln
bmVkIGludCkKKyAgICAgMi43MyUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAg
ICAgICAgICAgICBbLl0gV2ViQ29yZTo6RG9jdW1lbnRWOEludGVybmFsOjpnZXRFbGVtZW50c0J5
VGFnTmFtZUNhbGxiYWNrKHY4OjpBcmd1bWVudHMgY29uc3QmKQorIiIiCisgICAgICAgIGhvc3Qg
PSBNb2NrU3lzdGVtSG9zdCgpCisgICAgICAgIHByb2ZpbGVyID0gY2hyb21pdW1fYW5kcm9pZC5B
bmRyb2lkUGVyZihob3N0LCAnL2Jpbi9leGVjdXRhYmxlJywgJy90bXAvb3V0cHV0JywgJ2Rldmlj
ZS1zZXJpYWwnKQorICAgICAgICBwcmludCBwcm9maWxlci5fZmlyc3RfdGVuX2xpbmVzX29mX3By
b2ZpbGUocGVyZl9vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHByb2ZpbGVyLl9m
aXJzdF90ZW5fbGluZXNfb2ZfcHJvZmlsZShwZXJmX291dHB1dCksIGV4cGVjdGVkX2ZpcnN0X3Rl
bl9saW5lcykKKworCiBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXJUd29Ecml2ZXJzVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfdHdvX2RyaXZlcnMoc2VsZik6CiAgICAg
ICAgIG1vY2tfcnVuX2NvbW1hbmQgPSBNb2NrUnVuQ29tbWFuZCgpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CmluZGV4IGU4ODM1OTBj
ZjE1NjIzYTMwZDA1ODg3N2ZjMWMxMGY0Y2U4ZDJlNjguLjc0ZDgzNzBiNzY3ODRjNTJiNzQzM2Ew
ZWEwYjY0NDY3NzRiMDZhNjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CkBAIC0yNzUsMTEgKzI3NSw3IEBAIGNsYXNzIERyaXZl
cihvYmplY3QpOgogICAgICAgICBpZiBub3Qgc2VsZi5fc2VydmVyX3Byb2Nlc3M6CiAgICAgICAg
ICAgICBzZWxmLl9zdGFydChwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykKIAotICAgIGRlZiBf
c3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICBzZWxmLnN0
b3AoKQotICAgICAgICBzZWxmLl9kcml2ZXJfdGVtcGRpciA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0
ZW0ubWtkdGVtcChwcmVmaXg9JyVzLScgJSBzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCkpCi0gICAg
ICAgIHNlcnZlcl9uYW1lID0gc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpCi0gICAgICAgIGVudmly
b25tZW50ID0gc2VsZi5fcG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VydmVyX25hbWUp
CisgICAgZGVmIF9hZGp1c3RfZW52aXJvbm1lbnRfZm9yX2RyaXZlcihzZWxmLCBlbnZpcm9ubWVu
dCk6CiAgICAgICAgIGVudmlyb25tZW50WydEWUxEX0xJQlJBUllfUEFUSCddID0gc2VsZi5fcG9y
dC5fYnVpbGRfcGF0aCgpCiAgICAgICAgIGVudmlyb25tZW50WydEWUxEX0ZSQU1FV09SS19QQVRI
J10gPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKICAgICAgICAgIyBGSVhNRTogV2UncmUgYXNz
dW1pbmcgdGhhdCBXZWJLaXRUZXN0UnVubmVyIGNoZWNrcyB0aGlzIER1bXBSZW5kZXJUcmVlLW5h
bWVkIGVudmlyb25tZW50IHZhcmlhYmxlLgpAQCAtMjg5LDEyICsyODUsMjcgQEAgY2xhc3MgRHJp
dmVyKG9iamVjdCk6CiAgICAgICAgICAgICBlbnZpcm9ubWVudFsnV0VCS0lUT1VUUFVURElSJ10g
PSBvcy5lbnZpcm9uWydXRUJLSVRPVVRQVVRESVInXQogICAgICAgICBpZiBzZWxmLl9wcm9maWxl
cjoKICAgICAgICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5fcHJvZmlsZXIuYWRqdXN0ZWRfZW52
aXJvbm1lbnQoZW52aXJvbm1lbnQpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHBpeGVsX3Rlc3Rz
LCBwZXJfdGVzdF9hcmdzKToKKyAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgc2VsZi5fZHJp
dmVyX3RlbXBkaXIgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtLm1rZHRlbXAocHJlZml4PSclcy0n
ICUgc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpKQorICAgICAgICBzZXJ2ZXJfbmFtZSA9IHNlbGYu
X3BvcnQuZHJpdmVyX25hbWUoKQorICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3BvcnQuc2V0
dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1lKQorICAgICAgICBlbnZpcm9ubWVudCA9
IHNlbGYuX2FkanVzdF9lbnZpcm9ubWVudF9mb3JfZHJpdmVyKGVudmlyb25tZW50KQogICAgICAg
ICBzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKICAgICAgICAgc2VsZi5fY3Jhc2hl
ZF9waWQgPSBOb25lCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5f
c2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ioc2VsZi5fcG9ydCwgc2VydmVyX25hbWUsIHNlbGYu
Y21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKICAgICAg
ICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Muc3RhcnQoKQorICAgICAgICBzZWxmLl9ydW5fcG9zdF9z
dGFydF90YXNrcygpCisKKyAgICBkZWYgX3J1bl9wb3N0X3N0YXJ0X3Rhc2tzKHNlbGYpOgorICAg
ICAgICAjIFJlbW90ZSBkcml2ZXJzIG1heSBvdmVycmlkZSB0aGlzIHRvIGRlbGF5IHBvc3Qtc3Rh
cnQgdGFza3MgdW50aWwgdGhlIHNlcnZlciBoYXMgYWNrJ2QuCiAgICAgICAgIGlmIHNlbGYuX3By
b2ZpbGVyOgotICAgICAgICAgICAgc2VsZi5fcHJvZmlsZXIuYXR0YWNoX3RvX3BpZChzZWxmLl9z
ZXJ2ZXJfcHJvY2Vzcy5waWQoKSkKKyAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyLmF0dGFjaF90
b19waWQoc2VsZi5fcGlkX29uX3RhcmdldCgpKQorCisgICAgZGVmIF9waWRfb25fdGFyZ2V0KHNl
bGYpOgorICAgICAgICAjIFJlbW90ZSBkcml2ZXJzIHdpbGwgb3ZlcnJpZGUgdGhpcyBtZXRob2Qg
dG8gcmV0dXJuIHRoZSBwaWQgb24gdGhlIGRldmljZS4KKyAgICAgICAgcmV0dXJuIHNlbGYuX3Nl
cnZlcl9wcm9jZXNzLnBpZCgpCiAKICAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICAgaWYgc2Vs
Zi5fc2VydmVyX3Byb2Nlc3M6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177902</attachid>
            <date>2012-12-05 18:25:14 -0800</date>
            <delta_ts>2012-12-06 00:39:23 -0800</delta_ts>
            <desc>Needs to not hard-code perfhost_linux, otherwise about ready</desc>
            <filename>bug-103587-20121205182239.patch</filename>
            <type>text/plain</type>
            <size>19146</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NTY1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWNhMTA5MzhmNTA0ODlmZDg5NzNiOGQyZDEyY2I2NGU1
MmI0ZWJhZS4uYzgwYzlmZmQwMjU4ODczYTM4NmQzOTUzYmMxZTM4NWFmZDYwNWE3OSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0
IEBACisyMDEyLTEyLTA0ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBBZGQgc3VwcG9ydCBmb3IgcnVuLXBlcmYtdGVzdHMgLS1jaHJvbWl1bS1hbmRyb2lkIC0tcHJv
ZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAz
NTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBpcyBqdXN0IGEgc2tldGNoIGF0IHRoaXMgcG9pbnQuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAg
ICAgIChBbmRyb2lkUGVyZik6CisgICAgICAgIChBbmRyb2lkUGVyZi5fX2luaXRfXyk6CisgICAg
ICAgIChBbmRyb2lkUGVyZi5fcnVuX2FkYl9jb21tYW5kKToKKyAgICAgICAgKEFuZHJvaWRQZXJm
LmF0dGFjaF90b19waWQpOgorICAgICAgICAoQW5kcm9pZFBlcmYuX2ZpcnN0X3Rlbl9saW5lc19v
Zl9wcm9maWxlKToKKyAgICAgICAgKEFuZHJvaWRQZXJmLnByb2ZpbGVfYWZ0ZXJfZXhpdCk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX19pbml0X18pOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLl9zdGFydF9vbmNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERy
aXZlcik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3BpZF9vbl9kZXZpY2UpOgor
CiAyMDEyLTEyLTA0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmVtb3ZlIG9ic29sZXRlIGNvZGUgZnJvbSB3ZWJraXRweQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5
CmluZGV4IDlkNzdhNTUzOGJlMDI1NjBlODk0NTA0N2EzNzZlY2Q0NjhhNzhmMDkuLmEwOTkyYjZl
ZDA1ZWVmYzI3Y2Q2OTA3NTY3ZTQ5MjIwN2I5MjQ5YzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQu
cHkKQEAgLTMwLDYgKzMwLDcgQEAgaW1wb3J0IGNvcHkKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQg
b3MKIGltcG9ydCByZQoraW1wb3J0IHN5cwogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0aHJl
YWRpbmcKIGltcG9ydCB0aW1lCkBAIC0zOCw3ICszOSw3IEBAIGZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnBvcnQgaW1wb3J0IGNocm9taXVtCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0IGltcG9ydCBkcml2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0
IGZhY3RvcnkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHNlcnZlcl9w
cm9jZXNzCi0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5wcm9maWxlciBpbXBvcnQgU2lu
Z2xlRmlsZU91dHB1dFByb2ZpbGVyCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKIApAQCAtMzU3LDYgKzM1OCw5MiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9t
aXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgIHJldHVybiBkZXZpY2VzW3dvcmtlcl9udW1iZXJd
CiAKIAorY2xhc3MgQW5kcm9pZFBlcmYoU2luZ2xlRmlsZU91dHB1dFByb2ZpbGVyKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgaG9zdCwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBkZXZp
Y2Vfc2VyaWFsLCBzeW1mc19wYXRoLCBpZGVudGlmaWVyPU5vbmUpOgorICAgICAgICBzdXBlcihB
bmRyb2lkUGVyZiwgc2VsZikuX19pbml0X18oaG9zdCwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRf
ZGlyLCAiZGF0YSIsIGlkZW50aWZpZXIpCisgICAgICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBk
ZXZpY2Vfc2VyaWFsCisgICAgICAgIHNlbGYuX2FkYl9jb21tYW5kID0gWydhZGInLCAnLXMnLCBz
ZWxmLl9kZXZpY2Vfc2VyaWFsXQorICAgICAgICBzZWxmLl9wZXJmX3Byb2Nlc3MgPSBOb25lCisg
ICAgICAgIHNlbGYuX3N5bWZzX3BhdGggPSBzeW1mc19wYXRoCisgICAgICAgIGlmIG5vdCBzZWxm
Ll9jaGVja19kZXZpY2VfY29uZmlndXJhdGlvbigpOgorICAgICAgICAgICAgc2VsZi5fcHJpbnRf
c2V0dXBfaW5zdHJ1Y3Rpb25zKCkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBkZWYg
X2NoZWNrX2RldmljZV9jb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQg
cGVyZiBpcyBpbnN0YWxsZWQKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2Rl
dmljZSgnL3N5c3RlbS9iaW4vcGVyZicpOgorICAgICAgICAgICAgcHJpbnQgIkNhbm5vdCBmaW5k
IC9zeXN0ZW0vYmluL3BlcmYgb24geW91ciBkZXZpY2UuIgorICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgZGV2aWNlIGlzIGEgdXNlcmRlYnVnIGJ1aWxk
IChvciBhdCBsZWFzdCBoYXMgdGhlIG5lY2Vzc2FyeSBsaWJyYXJpZXMpLgorICAgICAgICBpZiBz
ZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdnZXRwcm9wJywgJ3JvLmJ1aWxkLnR5cGUn
XSkuc3RyaXAoKSAhPSAndXNlcmRlYnVnJzoKKyAgICAgICAgICAgIHByaW50ICJZb3VyIGRldmlj
ZSBpcyBub3QgZmxhc2hlZCB3aXRoIGEgdXNlcmRldmljZSBjb3B5IG9mIEFuZHJvaWQiCisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBiaW5hcnkgYWN0
dWFsbHkgaXMgcGVyZi1hYmxlIChoYXMgc3RhY2tmcmFtZSBwb2ludGVycyk/CisgICAgICAgICMg
b2JqZHVtcCAtcyBhIGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUgaXQgbW9kaWZpZXMgdGhlIGZwPwor
ICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9wcmludF9zZXR1cF9pbnN0cnVjdGlvbnMo
c2VsZik6CisgICAgICAgIHByaW50ICIiIgorcGVyZiBvbiBhbmRyb2lkIHJlcXVpcmVzIGEgJ3Vz
ZXJkZWJ1ZycgYnVpbGQgb2YgQW5kcm9pZCwgc2VlOgoraHR0cDovL3NvdXJjZS5hbmRyb2lkLmNv
bS9zb3VyY2UvYnVpbGRpbmctZGV2aWNlcy5odG1sIgorCitUaGUgcGVyZiBjb21tYW5kIGNhbiBi
ZSBidWlsdCBmcm9tOgoraHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0v
ZXh0ZXJuYWwvbGludXgtdG9vbHMtcGVyZi8KK2FuZCByZXF1aXJlcyBsaWJlZmwsIGxpYmVibCwg
bGliZHcsIGFuZCBsaWJkd2ZsIGF2YWlsYWJsZSBpbjoKK2h0dHBzOi8vYW5kcm9pZC5nb29nbGVz
b3VyY2UuY29tL3BsYXRmb3JtL2V4dGVybmFsL2VsZnV0aWxzLworCitEdW1wUmVuZGVyVHJlZSBt
dXN0IGJlIGJ1aWx0IHdpdGggcHJvZmlsaW5nPTEsIG1ha2Ugc3VyZSB5b3UndmUgZG9uZToKK2V4
cG9ydCBHWVBfREVGSU5FUz0icHJvZmlsaW5nPTEgJEdZUF9ERUZJTkVTIgordXBkYXRlLXdlYmtp
dCAtLWNocm9taXVtLWFuZHJvaWQKK2J1aWxkLXdlYmtpdCAtLWNocm9taXVtLWFuZHJvaWQKKwor
R29vZ2xlcnMgc2hvdWxkIHJlYWQ6CitodHRwOi8vZ290by5nb29nbGUuY29tL2NyLWFuZHJvaWQt
cGVyZi1ob3d0bworIiIiCisKKyAgICBkZWYgX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLCBm
dWxsX2ZpbGVfcGF0aCk6CisgICAgICAgIGFzc2VydCBmdWxsX2ZpbGVfcGF0aC5zdGFydHN3aXRo
KCcvJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xz
JywgZnVsbF9maWxlX3BhdGhdKS5zdHJpcCgpID09IGZ1bGxfZmlsZV9wYXRoCisKKyAgICBkZWYg
X3J1bl9hZGJfY29tbWFuZChzZWxmLCBjbWQpOgorICAgICAgICByZXR1cm4gc2VsZi5faG9zdC5l
eGVjdXRpdmUucnVuX2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1hbmQgKyBjbWQpCisKKyAgICBkZWYg
YXR0YWNoX3RvX3BpZChzZWxmLCBwaWQpOgorICAgICAgICBhc3NlcnQocGlkKQorICAgICAgICBh
c3NlcnQoc2VsZi5fcGVyZl9wcm9jZXNzID09IE5vbmUpCisgICAgICAgICMgRklYTUU6IFRoaXMg
Y2FuJ3QgYmUgYSBmaXhlZCB0aW1lb3V0IQorICAgICAgICBjbWQgPSBbJ2FkYicsICdzaGVsbCcs
ICdwZXJmJywgJ3JlY29yZCcsICctZycsICctcCcsIHBpZCwgJ3NsZWVwJywgMzBdCisgICAgICAg
IGNtZCA9IG1hcCh1bmljb2RlLCBjbWQpCisgICAgICAgIHNlbGYuX3BlcmZfcHJvY2VzcyA9IHNl
bGYuX2hvc3QuZXhlY3V0aXZlLnBvcGVuKGNtZCkKKworICAgIGRlZiBfZmluZF9wZXJmaG9zdChz
ZWxmKToKKyAgICAgICAgIyBDaGVjayBwZXJmaG9zdF9saW51eCAtLXZlcnNpb24KKyAgICAgICAg
IyBvdGhlcndpc2UgdHJ5IHRoZSBsb2NhbCBkaXJlY3Rvcnk/CisgICAgICAgICMgb3RoZXJ3aXNl
IGV4cGxhaW4gd2hlcmUgdXNlcnMgY2FuIGluc3RhbGwgaXQgZnJvbS4KKyAgICAgICAgcmV0dXJu
ICcvc3JjL2Nocm9taXVtLWFuZHJvaWQvcGVyZmhvc3RfbGludXgnCisKKyAgICBkZWYgX2ZpcnN0
X3Rlbl9saW5lc19vZl9wcm9maWxlKHNlbGYsIHBlcmZfb3V0cHV0KToKKyAgICAgICAgIyBGSVhN
RTogVGhpcyBkb2VzIG5vdCByZW1vdmUgaGVhZGVyIGxpbmVzICh0aGUgdW5pdHRlc3QgY3VycmVu
dGx5IGZhaWxzKS4KKyAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2goIl4jW15cbl0qXG4oKD86W15c
bl0qXG4pezAsMTN9KSIsIHBlcmZfb3V0cHV0LCByZS5NVUxUSUxJTkUpCisgICAgICAgIHJldHVy
biBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIE5vbmUKKworICAgIGRlZiBwcm9maWxlX2Fm
dGVyX2V4aXQoc2VsZik6CisgICAgICAgIHBlcmZfZXhpdGNvZGUgPSBzZWxmLl9wZXJmX3Byb2Nl
c3Mud2FpdCgpCisgICAgICAgIGlmIHBlcmZfZXhpdGNvZGUgIT0gMDoKKyAgICAgICAgICAgIHBy
aW50ICJQZXJmIGZhaWxlZCAoZXhpdCBjb2RlOiAlaSksIGNhbid0IHByb2Nlc3MgcmVzdWx0cy4i
ICUgcGVyZl9leGl0Y29kZQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3B1bGwnLCAnL2RhdGEvcGVyZi5kYXRhJywgc2VsZi5fb3V0cHV0X3BhdGhd
KQorCisgICAgICAgIHBlcmZob3N0X3BhdGggPSBzZWxmLl9maW5kX3BlcmZob3N0KCkKKyAgICAg
ICAgcGVyZmhvc3RfYXJncyA9IFtwZXJmaG9zdF9wYXRoLCAncmVwb3J0JywgJy1nJywgJ25vbmUn
LCAnLWknLCBzZWxmLl9vdXRwdXRfcGF0aCwgJy0tc3ltZnMnLCBzZWxmLl9zeW1mc19wYXRoXQor
ICAgICAgICBwZXJmX291dHB1dCA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHBl
cmZob3N0X2FyZ3MpCisgICAgICAgICMgV2UgY291bGQgc2F2ZSBvZmYgdGhlIGZ1bGwgLWcgcmVw
b3J0IHRvIGEgZmlsZSBpZiB1c2VycyBmb3VuZCB0aGF0IHVzZWZ1bC4KKyAgICAgICAgcHJpbnQg
c2VsZi5fZmlyc3RfdGVuX2xpbmVzX29mX3Byb2ZpbGUocGVyZl9vdXRwdXQpCisKKyAgICAgICAg
cHJpbnQgIlRvIHZpZXcgdGhlIGZ1bGwgcHJvZmlsZSwgcnVuOiIKKyAgICAgICAgcHJpbnQgJyAn
LmpvaW4oW3BlcmZob3N0X3BhdGgsICdyZXBvcnQnLCAnLWknLCBzZWxmLl9vdXRwdXRfcGF0aCwg
Jy0tc3ltZnMnLCBzZWxmLl9zeW1mc19wYXRoXSkKKworCiBjbGFzcyBDaHJvbWl1bUFuZHJvaWRE
cml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtl
cl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0PUZhbHNlKToKICAgICAgICAgc3VwZXIo
Q2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fX2luaXRfXyhwb3J0LCB3b3JrZXJfbnVtYmVy
LCBwaXhlbF90ZXN0cywgbm9fdGltZW91dCkKQEAgLTM3MiwxMCArNDU5LDQ1IEBAIGNsYXNzIENo
cm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgc2VsZi5fZGV2aWNl
X3NlcmlhbCA9IHBvcnQuX2dldF9kZXZpY2Vfc2VyaWFsKHdvcmtlcl9udW1iZXIpCiAgICAgICAg
IHNlbGYuX2FkYl9jb21tYW5kX2Jhc2UgPSBOb25lCiAKKyAgICAgICAgIyBGSVhNRTogVGhpcyBp
cyBsYW1lIHRvIGR1cGxpY2F0ZSB0aGlzIGxvZ2ljIHdpdGggRHJpdmVyLCBob3dldmVyCisgICAg
ICAgICMgdW5sZXNzIERyaXZlciBpbmRpcmVjdHMgdGhyb3VnaCBQb3J0IHRvIGNyZWF0ZSB0aGUg
cHJvZmlsZXIgd2UgaGF2ZQorICAgICAgICAjIG5vIHdheSB0byB0ZWxsIFByb2ZpbGVyRmFjdG9y
eSB0aGF0IHdlJ3JlIHRhcmdldGluZyBBbmRyb2lkIG92ZXIgYWRiLgorICAgICAgICBpZiBzZWxm
Ll9wb3J0LmdldF9vcHRpb24oInByb2ZpbGUiKToKKyAgICAgICAgICAgIGhvc3QgPSBzZWxmLl9w
b3J0Lmhvc3QKKyAgICAgICAgICAgIHN5bWZzX3BhdGggPSBzZWxmLl9maW5kX29yX2NyZWF0ZV9z
eW1mcygpCisgICAgICAgICAgICBzZWxmLl9wcm9maWxlciA9IEFuZHJvaWRQZXJmKGhvc3QsIHNl
bGYuX3BvcnQuX3BhdGhfdG9fZHJpdmVyKCksIHNlbGYuX3BvcnQucmVzdWx0c19kaXJlY3Rvcnko
KSwgc2VsZi5fZGV2aWNlX3NlcmlhbCwgc3ltZnNfcGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHNlbGYuX3Byb2ZpbGVyID0gTm9uZQorICAgICAgICBzZWxmLl9kZWxheV9wb3N0X3N0
YXJ0X3Rhc2tzID0gRmFsc2UKKwogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxm
Ll90ZWFyZG93bl9wZXJmb3JtYW5jZSgpCiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERy
aXZlciwgc2VsZikuX19kZWxfXygpCiAKKyAgICBkZWYgX2ZpbmRfb3JfY3JlYXRlX3N5bWZzKHNl
bGYpOgorICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3BvcnQuaG9zdC5jb3B5X2N1cnJlbnRf
ZW52aXJvbm1lbnQoKQorICAgICAgICBlbnYgPSBlbnZpcm9ubWVudC50b19kaWN0aW9uYXJ5KCkK
KyAgICAgICAgZnMgPSBzZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbQorCisgICAgICAgIGlmICdB
TkRST0lEX1NZTUZTJyBpbiBlbnY6CisgICAgICAgICAgICBzeW1mc19wYXRoID0gZW52WydBTkRS
T0lEX1NZTUZTJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5bWZzX3BhdGggPSBmcy5q
b2luKHNlbGYuX3BvcnQucmVzdWx0c19kaXJlY3RvcnkoKSwgJ3N5bWZzJykKKyAgICAgICAgICAg
IHByaW50ICJBTkRST0lEX1NZTUZTIG5vdCBzZXQsIHVzaW5nICVzIiAlIHN5bWZzX3BhdGgKKwor
ICAgICAgICAjIGZpbmQgdGhlIGluc3RhbGxlZCBwYXRoLCBhbmQgdGhlIHBhdGggb2YgdGhlIHN5
bWJvbGVkIGJ1aWx0IGxpYnJhcnkKKyAgICAgICAgZHJ0X2xpYnJhcnlfbmFtZSA9ICdsaWJEdW1w
UmVuZGVyVHJlZS5zbycKKyAgICAgICAgc3ltZnNfbGlicmFyeV9wYXRoID0gZnMuam9pbihzeW1m
c19wYXRoLCAiZGF0YS9hcHAtbGliLyVzLTEvJXMiICUgKERSVF9BUFBfUEFDS0FHRSwgZHJ0X2xp
YnJhcnlfbmFtZSkpCisgICAgICAgIGJ1aWx0X2xpYnJhcnlfcGF0aCA9IHNlbGYuX3BvcnQuX2J1
aWxkX3BhdGgoJ2xpYicsIGRydF9saWJyYXJ5X25hbWUpCisgICAgICAgIGFzc2VydChmcy5leGlz
dHMoYnVpbHRfbGlicmFyeV9wYXRoKSkKKworICAgICAgICAjIEZJWE1FOiBJZGVhbGx5IHdlJ2Qg
Y2hlY2sgdGhlIHNoYTEncyBmaXJzdCBhbmQgbWFrZSBhIHNvZnQtbGluayBpbnN0ZWFkIG9mIGNv
cHlpbmcgKHNpbmNlIHdlIHByb2JhYmx5IG5ldmVyIGNhcmUgYWJvdXQgd2luZG93cykuCisgICAg
ICAgIHByaW50ICJVcGRhdGluZyBzeW1mcyBsaWJhcnkgKCVzKSBmcm9tIGJ1aWx0IGNvcHkgKCVz
KSIgJSAoc3ltZnNfbGlicmFyeV9wYXRoLCBidWlsdF9saWJyYXJ5X3BhdGgpCisgICAgICAgIGZz
Lm1heWJlX21ha2VfZGlyZWN0b3J5KGZzLmRpcm5hbWUoc3ltZnNfbGlicmFyeV9wYXRoKSkKKyAg
ICAgICAgZnMuY29weWZpbGUoYnVpbHRfbGlicmFyeV9wYXRoLCBzeW1mc19saWJyYXJ5X3BhdGgp
CisKKyAgICAgICAgcmV0dXJuIHN5bWZzX3BhdGgKKwogICAgIGRlZiBfc2V0dXBfbWQ1c3VtX2Fu
ZF9wdXNoX2RhdGFfaWZfbmVlZGVkKHNlbGYpOgogICAgICAgICBzZWxmLl9tZDVzdW1fcGF0aCA9
IHNlbGYuX3BvcnQucGF0aF90b19tZDVzdW0oKQogICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZV9l
eGlzdHNfb25fZGV2aWNlKE1ENVNVTV9ERVZJQ0VfUEFUSCk6CkBAIC02MDYsNiArNzI4LDcgQEAg
Y2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICBzZWxm
Ll9hYm9ydCgnRmFpbGVkIHRvIHN0YXJ0IER1bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uIG11bHRp
cGxlIHRpbWVzLiBHaXZlIHVwLicpCiAKICAgICBkZWYgX3N0YXJ0X29uY2Uoc2VsZiwgcGl4ZWxf
dGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgorICAgICAgICBzZWxmLl9kZWxheV9wb3N0X3N0YXJ0X3Rh
c2tzID0gVHJ1ZSAgIyBUaGlzIGlzIGEgaGFjayB0byBub3Qgc3RhcnQgdGhlIHByb2ZpbGVyIHVu
dGlsIGFmdGVyIHRoZSByZW1vdGUgcHJvY2VzcyBpcyBmdWxseSBzZXR1cC4KICAgICAgICAgc3Vw
ZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fc3RhcnQocGl4ZWxfdGVzdHMsIHBlcl90
ZXN0X2FyZ3MpCiAKICAgICAgICAgc2VsZi5fbG9nX2RlYnVnKCdTdGFydGluZyBmb3J3YXJkZXIn
KQpAQCAtNjczLDEwICs3OTYsMjggQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZl
ci5Ecml2ZXIpOgogICAgICAgICAgICAgIyBkZWFkbG9jayBhbmQga2lsbGVkIHRoZSBmaWZvIHJl
YWRpbmcvd3JpdGluZyBwcm9jZXNzZXMuCiAgICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQg
dG8gc3RhcnQgRHVtcFJlbmRlclRyZWU6IFxuJXMnICUgb3V0cHV0KQogICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIEluZm9ybSB0aGUgZGVhZGxv
Y2sgZGV0ZWN0b3IgdGhhdCB0aGUgc3RhcnR1cCBpcyBzdWNjZXNzZnVsIHdpdGhvdXQgZGVhZGxv
Y2suCi0gICAgICAgICAgICBub3JtYWxfc3RhcnR1cF9ldmVudC5zZXQoKQotICAgICAgICAgICAg
cmV0dXJuIFRydWUKKworICAgICAgICBzZWxmLl9kZWxheV9wb3N0X3N0YXJ0X3Rhc2tzID0gRmFs
c2UKKyAgICAgICAgc2VsZi5fcnVuX3Bvc3Rfc3RhcnRfdGFza3MoKQorCisgICAgICAgICMgSW5m
b3JtIHRoZSBkZWFkbG9jayBkZXRlY3RvciB0aGF0IHRoZSBzdGFydHVwIGlzIHN1Y2Nlc3NmdWwg
d2l0aG91dCBkZWFkbG9jay4KKyAgICAgICAgbm9ybWFsX3N0YXJ0dXBfZXZlbnQuc2V0KCkKKyAg
ICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfcnVuX3Bvc3Rfc3RhcnRfdGFza3Moc2VsZik6
CisgICAgICAgIGlmIHNlbGYuX2RlbGF5X3Bvc3Rfc3RhcnRfdGFza3M6CisgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fcnVuX3Bv
c3Rfc3RhcnRfdGFza3MoKQorCisgICAgZGVmIF9waWRfb25fdGFyZ2V0KHNlbGYpOgorICAgICAg
ICAjIEZJWE1FOiBUaGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIQorICAgICAg
ICBwc19vdXRwdXQgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdwcyddKQorICAg
ICAgICAjIHBzIG91dHB1dCBzZWVtcyB0byBiZSBmaXhlZCB3aWR0aCwgd2Ugb25seSBjYXJlIGFi
b3V0IHRoZSBuYW1lIGFuZCB0aGUgcGlkCisgICAgICAgICMgdTBfYTcyICAgIDIxNjMwIDEyNSAg
IDk0NzkyMCA1OTM2NCBmZmZmZmZmZiA0MDBiZWVlNCBTIG9yZy5jaHJvbWl1bS5uYXRpdmVfdGVz
dAorICAgICAgICBmb3IgbGluZSBpbiBwc19vdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAg
ICBpZiBsaW5lLmZpbmQoRFJUX0FQUF9QQUNLQUdFKSAhPSAtMToKKyAgICAgICAgICAgICAgICBt
YXRjaCA9IHJlLm1hdGNoKHInXFMrXHMrKFxkKyknLCBsaW5lKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtYXRjaC5ncm91cCgxKQogCiAgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgIHNlbGYu
X3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BB
Q0tBR0VdKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5CmluZGV4IGJl
ZDk4N2YxYmMyMTRhNTBkNjkxMTY3MjE5ZGUyMDg4MmUwYzU5ZmEuLjE0ODMwZDJlYmRmN2U2MDhm
ODY3ZmU1ZjRjMGRlMGYzODI2NjA0MzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZF91bml0dGVzdC5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRf
dW5pdHRlc3QucHkKQEAgLTQyLDYgKzQyLDcgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
cG9ydCBpbXBvcnQgZHJpdmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9y
dCBkcml2ZXJfdW5pdHRlc3QKIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9j
a09wdGlvbnMKIAorCiBjbGFzcyBNb2NrUnVuQ29tbWFuZChvYmplY3QpOgogICAgIGRlZiBfX2lu
aXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5fbW9ja19sb2djYXQgPSAnJwpAQCAtMjU5LDYgKzI2
MCw2MCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRyaXZlci5fY29tbWFuZF9mcm9tX2Ry
aXZlcl9pbnB1dChkcml2ZXJfaW5wdXQpLCBleHBlY3RlZF9jb21tYW5kKQogCiAKK2NsYXNzIEFu
ZHJvaWRQZXJmVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcGVyZl9vdXRw
dXRfcmVnZXhwKHNlbGYpOgorICAgICAgICBwZXJmX291dHB1dCA9ICIiIltrZXJuZWwua2FsbHN5
bXNdIHdpdGggYnVpbGQgaWQgNWEyMGY2Mjk5YmRiOTU1YTJmMDc3MTFiYjdmNjVjZDcwNmZlNzQ2
OSBub3QgZm91bmQsIGNvbnRpbnVpbmcgd2l0aG91dCBzeW1ib2xzCitGYWlsZWQgdG8gb3BlbiAv
dG1wL3BlcmYtMTQxNjgubWFwLCBjb250aW51aW5nIHdpdGhvdXQgc3ltYm9scworS2VybmVsIGFk
ZHJlc3MgbWFwcyAoL3Byb2Mve2thbGxzeW1zLG1vZHVsZXN9KSB3ZXJlIHJlc3RyaWN0ZWQuCisK
K0NoZWNrIC9wcm9jL3N5cy9rZXJuZWwva3B0cl9yZXN0cmljdCBiZWZvcmUgcnVubmluZyAncGVy
ZiByZWNvcmQnLgorCitBcyBubyBzdWl0YWJsZSBrYWxsc3ltcyBub3Igdm1saW51eCB3YXMgZm91
bmQsIGtlcm5lbCBzYW1wbGVzCitjYW4ndCBiZSByZXNvbHZlZC4KKworU2FtcGxlcyBpbiBrZXJu
ZWwgbW9kdWxlcyBjYW4ndCBiZSByZXNvbHZlZCBhcyB3ZWxsLgorCisjIEV2ZW50czogMzFLIGN5
Y2xlcworIworIyBPdmVyaGVhZCAgICAgICAgICBDb21tYW5kICAgICAgICAgICAgICAgIFNoYXJl
ZCBPYmplY3QKKyMgLi4uLi4uLi4gIC4uLi4uLi4uLi4uLi4uLiAgLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4KKyMKKyAgICAxNi4xOCUgICBEdW1wUmVuZGVyVHJlZSAgcGVyZi0xNDE2OC5tYXAgICAg
ICAgICAgICAgICBbLl0gMHgyMTI3MGFjMGNmNDMKKyAgICAxMi43MiUgICBEdW1wUmVuZGVyVHJl
ZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gdjg6OmludGVybmFsOjpKU09iamVj
dDo6R2V0RWxlbWVudFdpdGhJbnRlcmNlcHRvcih2ODo6aW50ZXJuYWw6Ok9iamVjdCosIHVuc2ln
bmVkIGludCkKKyAgICAgOC4yOCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAg
ICAgICAgICAgICBbLl0gdjg6OmludGVybmFsOjpMb2FkUHJvcGVydHlXaXRoSW50ZXJjZXB0b3JP
bmx5KHY4OjppbnRlcm5hbDo6QXJndW1lbnRzLCB2ODo6aW50ZXJuYWw6Oklzb2xhdGUqKQorICAg
ICA1LjYwJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsu
XSBXVEY6OkF0b21pY1N0cmluZyBXZWJDb3JlOjp2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxXVEY6
OkF0b21pY1N0cmluZz4odjg6OkhhbmRsZTx2ODo6U3RyaW5nPiwgV2ViQ29yZTo6RXh0ZXJuYWxN
b2RlKQorICAgICA0LjYwJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAg
ICAgICAgIFsuXSBXZWJDb3JlOjpXZWFrUmVmZXJlbmNlTWFwPHZvaWQsIHY4OjpPYmplY3Q+Ojpn
ZXQodm9pZCopCisgICAgIDMuOTklICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAg
ICAgICAgICAgICAgWy5dIF9aTkszV1RGN0hhc2hNYXBJUE5TXzE2QXRvbWljU3RyaW5nSW1wbEVQ
TjdXZWJDb3JlN0VsZW1lbnRFTlNfN1B0ckhhc2hJUzJfRUVOU18xMEhhc2hUcmFpdHNJUzJfRUVO
UzhfSVM1X0VFRTNnZXRFUktTMl8uaXNyYS45OAorICAgICAzLjY5JSAgIER1bXBSZW5kZXJUcmVl
ICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJDb3JlOjpEb2N1bWVudFY4SW50
ZXJuYWw6OmdldEVsZW1lbnRCeUlkQ2FsbGJhY2sodjg6OkFyZ3VtZW50cyBjb25zdCYpCisgICAg
IDMuMjMlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5d
IFdlYkNvcmU6OlY4UGFyYW1ldGVyQmFzZTo6cHJlcGFyZUJhc2UoKQorICAgICAyLjgzJSAgIER1
bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXVEY6OkF0b21p
Y1N0cmluZzo6YWRkKHVuc2lnbmVkIHNob3J0IGNvbnN0KiwgdW5zaWduZWQgaW50KQorICAgICAy
LjczJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBX
ZWJDb3JlOjpEb2N1bWVudFY4SW50ZXJuYWw6OmdldEVsZW1lbnRzQnlUYWdOYW1lQ2FsbGJhY2so
djg6OkFyZ3VtZW50cyBjb25zdCYpCisgICAgIDIuNDclICAgRHVtcFJlbmRlclRyZWUgIER1bXBS
ZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIF9aTjJ2ODZPYmplY3QyN0dldFBvaW50ZXJGcm9t
SW50ZXJuYWxGaWVsZEVpLmNvbnN0cHJvcC40MzkKKyAgICAgMi40MyUgICBEdW1wUmVuZGVyVHJl
ZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gdjg6OmludGVybmFsOjpJc29sYXRl
OjpTZXRDdXJyZW50Vk1TdGF0ZSh2ODo6aW50ZXJuYWw6OlN0YXRlVGFnKQorICAgICAyLjM0JSAg
IER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXVEY6Okhh
c2hUYWJsZUFkZFJlc3VsdDxXVEY6Okhhc2hUYWJsZUl0ZXJhdG9yPHN0ZDo6cGFpcjx1bnNpZ25l
ZCBjaGFyLCBXVEY6OkF0b21pY1N0cmluZz4sIFdURjo6S2V5VmFsdWVQYWlyPHN0ZDo6cGFpcjx1
bnNpZ25lZCBjaGFyLCBXVEY6OkF0b21pY1N0cmluZz4sIFdlYkNvcgorICAgICAyLjI4JSAgIER1
bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJDb3JlOjpE
b2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUlkKFdURjo6QXRvbWljU3RyaW5nSW1wbCos
IFdlYkNvcmU6OlRyZWVTY29wZSBjb25zdCopIGNvbnN0CisgICAgIDIuMTUlICAgRHVtcFJlbmRl
clRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OlY4Tm9kZUxp
c3Q6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+LCB2ODo6QWNjZXNz
b3JJbmZvIGNvbnN0JikKKyAgICAgMi4wNiUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRy
ZWUgICAgICAgICAgICAgICBbLl0gV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkhUTUxUYWdOb2Rl
TGlzdD4gV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmFkZENhY2hlV2l0aEF0b21pY05hbWU8
V2ViQ29yZTo6SFRNTFRhZ05vZGVMaXN0PihXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6RHluYW1p
Y05vZGVMaXN0OjoKKyAgICAgMS4xOCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUg
ICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6Tm9kZVY4SW50ZXJuYWw6Om5vZGVUeXBlQXR0ckdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4sIHY4OjpBY2Nlc3NvckluZm8gY29uc3QmKQorICAg
ICAxLjA4JSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsu
XSBXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZShXVEY6OkF0b21pY1N0cmluZyBj
b25zdCYpCisiIiIKKyAgICAgICAgZXhwZWN0ZWRfZmlyc3RfdGVuX2xpbmVzID0gIiIiICAgIDE2
LjE4JSAgIER1bXBSZW5kZXJUcmVlICBwZXJmLTE0MTY4Lm1hcCAgICAgICAgICAgICAgIFsuXSAw
eDIxMjcwYWMwY2Y0MworICAgIDEyLjcyJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJl
ZSAgICAgICAgICAgICAgIFsuXSB2ODo6aW50ZXJuYWw6OkpTT2JqZWN0OjpHZXRFbGVtZW50V2l0
aEludGVyY2VwdG9yKHY4OjppbnRlcm5hbDo6T2JqZWN0KiwgdW5zaWduZWQgaW50KQorICAgICA4
LjI4JSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSB2
ODo6aW50ZXJuYWw6OkxvYWRQcm9wZXJ0eVdpdGhJbnRlcmNlcHRvck9ubHkodjg6OmludGVybmFs
OjpBcmd1bWVudHMsIHY4OjppbnRlcm5hbDo6SXNvbGF0ZSopCisgICAgIDUuNjAlICAgRHVtcFJl
bmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdURjo6QXRvbWljU3Ry
aW5nIFdlYkNvcmU6OnY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nPFdURjo6QXRvbWljU3RyaW5nPih2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+LCBXZWJDb3JlOjpFeHRlcm5hbE1vZGUpCisgICAgIDQuNjAl
ICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNv
cmU6OldlYWtSZWZlcmVuY2VNYXA8dm9pZCwgdjg6Ok9iamVjdD46OmdldCh2b2lkKikKKyAgICAg
My45OSUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0g
X1pOSzNXVEY3SGFzaE1hcElQTlNfMTZBdG9taWNTdHJpbmdJbXBsRVBON1dlYkNvcmU3RWxlbWVu
dEVOU183UHRySGFzaElTMl9FRU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TOF9JUzVfRUVFM2dldEVS
S1MyXy5pc3JhLjk4CisgICAgIDMuNjklICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVl
ICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OkRvY3VtZW50VjhJbnRlcm5hbDo6Z2V0RWxlbWVu
dEJ5SWRDYWxsYmFjayh2ODo6QXJndW1lbnRzIGNvbnN0JikKKyAgICAgMy4yMyUgICBEdW1wUmVu
ZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6VjhQYXJh
bWV0ZXJCYXNlOjpwcmVwYXJlQmFzZSgpCisgICAgIDIuODMlICAgRHVtcFJlbmRlclRyZWUgIER1
bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdURjo6QXRvbWljU3RyaW5nOjphZGQodW5z
aWduZWQgc2hvcnQgY29uc3QqLCB1bnNpZ25lZCBpbnQpCisgICAgIDIuNzMlICAgRHVtcFJlbmRl
clRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OkRvY3VtZW50
VjhJbnRlcm5hbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVDYWxsYmFjayh2ODo6QXJndW1lbnRzIGNv
bnN0JikKKyIiIgorICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoKQorICAgICAgICBwcm9m
aWxlciA9IGNocm9taXVtX2FuZHJvaWQuQW5kcm9pZFBlcmYoaG9zdCwgJy9iaW4vZXhlY3V0YWJs
ZScsICcvdG1wL291dHB1dCcsICdkZXZpY2Utc2VyaWFsJywgJ2ZvbycpCisgICAgICAgIHByaW50
IHByb2ZpbGVyLl9maXJzdF90ZW5fbGluZXNfb2ZfcHJvZmlsZShwZXJmX291dHB1dCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMocHJvZmlsZXIuX2ZpcnN0X3Rlbl9saW5lc19vZl9wcm9maWxl
KHBlcmZfb3V0cHV0KSwgZXhwZWN0ZWRfZmlyc3RfdGVuX2xpbmVzKQorCisKIGNsYXNzIENocm9t
aXVtQW5kcm9pZERyaXZlclR3b0RyaXZlcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBk
ZWYgdGVzdF90d29fZHJpdmVycyhzZWxmKToKICAgICAgICAgbW9ja19ydW5fY29tbWFuZCA9IE1v
Y2tSdW5Db21tYW5kKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9kcml2ZXIucHkKaW5kZXggZTg4MzU5MGNmMTU2MjNhMzBkMDU4ODc3ZmMxYzEwZjRj
ZThkMmU2OC4uNzRkODM3MGI3Njc4NGM1MmI3NDMzYTBlYTBiNjQ0Njc3NGIwNmE2NSAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkK
QEAgLTI3NSwxMSArMjc1LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGlmIG5v
dCBzZWxmLl9zZXJ2ZXJfcHJvY2VzczoKICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KHBpeGVsX3Rl
c3RzLCBwZXJfdGVzdF9hcmdzKQogCi0gICAgZGVmIF9zdGFydChzZWxmLCBwaXhlbF90ZXN0cywg
cGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgIHNlbGYuc3RvcCgpCi0gICAgICAgIHNlbGYuX2RyaXZl
cl90ZW1wZGlyID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5ta2R0ZW1wKHByZWZpeD0nJXMtJyAl
IHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSkKLSAgICAgICAgc2VydmVyX25hbWUgPSBzZWxmLl9w
b3J0LmRyaXZlcl9uYW1lKCkKLSAgICAgICAgZW52aXJvbm1lbnQgPSBzZWxmLl9wb3J0LnNldHVw
X2Vudmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKKyAgICBkZWYgX2FkanVzdF9lbnZpcm9u
bWVudF9mb3JfZHJpdmVyKHNlbGYsIGVudmlyb25tZW50KToKICAgICAgICAgZW52aXJvbm1lbnRb
J0RZTERfTElCUkFSWV9QQVRIJ10gPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKICAgICAgICAg
ZW52aXJvbm1lbnRbJ0RZTERfRlJBTUVXT1JLX1BBVEgnXSA9IHNlbGYuX3BvcnQuX2J1aWxkX3Bh
dGgoKQogICAgICAgICAjIEZJWE1FOiBXZSdyZSBhc3N1bWluZyB0aGF0IFdlYktpdFRlc3RSdW5u
ZXIgY2hlY2tzIHRoaXMgRHVtcFJlbmRlclRyZWUtbmFtZWQgZW52aXJvbm1lbnQgdmFyaWFibGUu
CkBAIC0yODksMTIgKzI4NSwyNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgICAg
IGVudmlyb25tZW50WydXRUJLSVRPVVRQVVRESVInXSA9IG9zLmVudmlyb25bJ1dFQktJVE9VVFBV
VERJUiddCiAgICAgICAgIGlmIHNlbGYuX3Byb2ZpbGVyOgogICAgICAgICAgICAgZW52aXJvbm1l
bnQgPSBzZWxmLl9wcm9maWxlci5hZGp1c3RlZF9lbnZpcm9ubWVudChlbnZpcm9ubWVudCkKKwor
ICAgIGRlZiBfc3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgorICAgICAg
ICBzZWxmLnN0b3AoKQorICAgICAgICBzZWxmLl9kcml2ZXJfdGVtcGRpciA9IHNlbGYuX3BvcnQu
X2ZpbGVzeXN0ZW0ubWtkdGVtcChwcmVmaXg9JyVzLScgJSBzZWxmLl9wb3J0LmRyaXZlcl9uYW1l
KCkpCisgICAgICAgIHNlcnZlcl9uYW1lID0gc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpCisgICAg
ICAgIGVudmlyb25tZW50ID0gc2VsZi5fcG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2Vy
dmVyX25hbWUpCisgICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5fYWRqdXN0X2Vudmlyb25tZW50
X2Zvcl9kcml2ZXIoZW52aXJvbm1lbnQpCiAgICAgICAgIHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19u
YW1lID0gTm9uZQogICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9IE5vbmUKICAgICAgICAgc2Vs
Zi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rv
cihzZWxmLl9wb3J0LCBzZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGluZShwaXhlbF90ZXN0cywgcGVy
X3Rlc3RfYXJncyksIGVudmlyb25tZW50KQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5z
dGFydCgpCisgICAgICAgIHNlbGYuX3J1bl9wb3N0X3N0YXJ0X3Rhc2tzKCkKKworICAgIGRlZiBf
cnVuX3Bvc3Rfc3RhcnRfdGFza3Moc2VsZik6CisgICAgICAgICMgUmVtb3RlIGRyaXZlcnMgbWF5
IG92ZXJyaWRlIHRoaXMgdG8gZGVsYXkgcG9zdC1zdGFydCB0YXNrcyB1bnRpbCB0aGUgc2VydmVy
IGhhcyBhY2snZC4KICAgICAgICAgaWYgc2VsZi5fcHJvZmlsZXI6Ci0gICAgICAgICAgICBzZWxm
Ll9wcm9maWxlci5hdHRhY2hfdG9fcGlkKHNlbGYuX3NlcnZlcl9wcm9jZXNzLnBpZCgpKQorICAg
ICAgICAgICAgc2VsZi5fcHJvZmlsZXIuYXR0YWNoX3RvX3BpZChzZWxmLl9waWRfb25fdGFyZ2V0
KCkpCisKKyAgICBkZWYgX3BpZF9vbl90YXJnZXQoc2VsZik6CisgICAgICAgICMgUmVtb3RlIGRy
aXZlcnMgd2lsbCBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byByZXR1cm4gdGhlIHBpZCBvbiB0aGUg
ZGV2aWNlLgorICAgICAgICByZXR1cm4gc2VsZi5fc2VydmVyX3Byb2Nlc3MucGlkKCkKIAogICAg
IGRlZiBzdG9wKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9zZXJ2ZXJfcHJvY2VzczoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177963</attachid>
            <date>2012-12-06 00:39:25 -0800</date>
            <delta_ts>2012-12-06 00:42:43 -0800</delta_ts>
            <desc>now passes all unittests</desc>
            <filename>bug-103587-20121206003657.patch</filename>
            <type>text/plain</type>
            <size>20688</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2Nzk2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWZmN2FjNWIzMTMyOWJkZDgzYjM0YTZjZjI1MzJmYzkw
YjUxNTY4ZC4uYzAzY2YxZTMyYzBiNjMzZjFmZDY1OTk1N2VjZTQ3MmNiMTg0MTNhMiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQy
IEBACisyMDEyLTEyLTA2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBBZGQgc3VwcG9ydCBmb3IgcnVuLXBlcmYtdGVzdHMgLS1jaHJvbWl1bS1hbmRyb2lkIC0tcHJv
ZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAz
NTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVh
cmx5IHJlYWR5IGZvciByZXZpZXcsIGp1c3QgbmVlZHMgdG8gc3VwcG9ydCBwZXJmaG9zdF9saW51
eAorICAgICAgICBiZWluZyBpbnN0YWxsZWQgaW4gdmFyeWluZyBsb2NhdGlvbnMuCisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQu
cHk6CisgICAgICAgIChBbmRyb2lkUGVyZik6CisgICAgICAgIChBbmRyb2lkUGVyZi5fX2luaXRf
Xyk6CisgICAgICAgIChBbmRyb2lkUGVyZi5jaGVja19jb25maWd1cmF0aW9uKToKKyAgICAgICAg
KEFuZHJvaWRQZXJmLnByaW50X3NldHVwX2luc3RydWN0aW9ucyk6CisgICAgICAgIChfZmlsZV9l
eGlzdHNfb25fZGV2aWNlKToKKyAgICAgICAgKF9ydW5fYWRiX2NvbW1hbmQpOgorICAgICAgICAo
YXR0YWNoX3RvX3BpZCk6CisgICAgICAgIChfZmluZF9wZXJmaG9zdCk6CisgICAgICAgIChfZmly
c3RfdGVuX2xpbmVzX29mX3Byb2ZpbGUpOgorICAgICAgICAocHJvZmlsZV9hZnRlcl9leGl0KToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fX2luaXRfXyk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWREcml2ZXIuX2ZpbmRfb3JfY3JlYXRlX3N5bWZzKToKKyAgICAgICAgKENocm9t
aXVtQW5kcm9pZERyaXZlci5fc3RhcnRfb25jZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRE
cml2ZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9ydW5fcG9zdF9zdGFydF90
YXNrcyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3BpZF9mcm9tX2FuZHJvaWRf
cHNfb3V0cHV0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcGlkX29uX3Rhcmdl
dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV9hbmRyb2lkX3VuaXR0ZXN0LnB5OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyVGVz
dC50ZXN0X3BpZF9mcm9tX2FuZHJvaWRfcHNfb3V0cHV0KToKKyAgICAgICAgKEFuZHJvaWRQZXJm
VGVzdCk6CisgICAgICAgIChBbmRyb2lkUGVyZlRlc3QudGVzdF9wZXJmX291dHB1dF9yZWdleHAp
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5
OgorICAgICAgICAoRHJpdmVyLl9hZGp1c3RfZW52aXJvbm1lbnRfZm9yX2RyaXZlcik6CisgICAg
ICAgIChEcml2ZXIpOgorICAgICAgICAoRHJpdmVyLl9zdGFydCk6CisgICAgICAgIChEcml2ZXIu
X3J1bl9wb3N0X3N0YXJ0X3Rhc2tzKToKKyAgICAgICAgKERyaXZlci5fcGlkX29uX3RhcmdldCk6
CisKIDIwMTItMTItMDUgIEhhbHRvbiBIdW8gIDxoYWx0b24uaHVvQGludGVsLmNvbT4KIAogICAg
ICAgICBbQ01ha2VdIFVuaWZ5IGNvZGluZyBzdHlsZSBmb3IgQ01ha2UgZmlsZXMKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5k
cm9pZC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fYW5kcm9pZC5weQppbmRleCA5ZDc3YTU1MzhiZTAyNTYwZTg5NDUwNDdhMzc2ZWNkNDY4YTc4
ZjA5Li43Zjc0OTBiNjE1NzM4NDVmYWJiZTIxZWExMjczOTNlNjBjNTVmNTk2IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJv
aWQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9hbmRyb2lkLnB5CkBAIC0zMCw2ICszMCw3IEBAIGltcG9ydCBjb3B5CiBpbXBvcnQgbG9n
Z2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMKIGltcG9ydCBzdWJwcm9jZXNz
CiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQpAQCAtMzgsNyArMzksNyBAQCBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bQogZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZHJpdmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5wb3J0IGltcG9ydCBmYWN0b3J5CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGlt
cG9ydCBzZXJ2ZXJfcHJvY2VzcwotCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucHJvZmls
ZXIgaW1wb3J0IFNpbmdsZUZpbGVPdXRwdXRQcm9maWxlcgogCiBfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCiAKQEAgLTYwLDYgKzYxLDcgQEAgREVWSUNFX0ZJRk9fUEFUSCA9ICcv
ZGF0YS9kYXRhL29yZy5jaHJvbWl1bS5uYXRpdmVfdGVzdC9maWxlcy8nCiBEUlRfQVBQX1BBQ0tB
R0UgPSAnb3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0JwogRFJUX0FDVElWSVRZX0ZVTExfTkFNRSA9
IERSVF9BUFBfUEFDS0FHRSArICcvLkNocm9tZU5hdGl2ZVRlc3RBY3Rpdml0eScKIERSVF9BUFBf
Q0FDSEVfRElSID0gREVWSUNFX0RSVF9ESVIgKyAnY2FjaGUvJworRFJUX0xJQlJBUllfTkFNRSA9
ICdsaWJEdW1wUmVuZGVyVHJlZS5zbycKIAogU0NBTElOR19HT1ZFUk5PUlNfUEFUVEVSTiA9ICIv
c3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NwdWZyZXEvc2NhbGluZ19nb3Zlcm5vciIKIApA
QCAtMzU3LDYgKzM1OSw4OCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNo
cm9taXVtUG9ydCk6CiAgICAgICAgIHJldHVybiBkZXZpY2VzW3dvcmtlcl9udW1iZXJdCiAKIAor
Y2xhc3MgQW5kcm9pZFBlcmYoU2luZ2xlRmlsZU91dHB1dFByb2ZpbGVyKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgaG9zdCwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBkZXZpY2Vfc2Vy
aWFsLCBzeW1mc19wYXRoLCBpZGVudGlmaWVyPU5vbmUpOgorICAgICAgICBzdXBlcihBbmRyb2lk
UGVyZiwgc2VsZikuX19pbml0X18oaG9zdCwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCAi
ZGF0YSIsIGlkZW50aWZpZXIpCisgICAgICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBkZXZpY2Vf
c2VyaWFsCisgICAgICAgIHNlbGYuX2FkYl9jb21tYW5kID0gWydhZGInLCAnLXMnLCBzZWxmLl9k
ZXZpY2Vfc2VyaWFsXQorICAgICAgICBzZWxmLl9wZXJmX3Byb2Nlc3MgPSBOb25lCisgICAgICAg
IHNlbGYuX3N5bWZzX3BhdGggPSBzeW1mc19wYXRoCisKKyAgICBkZWYgY2hlY2tfY29uZmlndXJh
dGlvbihzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHBlcmYgaXMgaW5zdGFsbGVkCisgICAg
ICAgIGlmIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2UoJy9zeXN0ZW0vYmluL3BlcmYn
KToKKyAgICAgICAgICAgIHByaW50ICJDYW5ub3QgZmluZCAvc3lzdGVtL2Jpbi9wZXJmIG9uIHlv
dXIgZGV2aWNlLiIKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAjIENoZWNrIHRo
YXQgdGhlIGRldmljZSBpcyBhIHVzZXJkZWJ1ZyBidWlsZCAob3IgYXQgbGVhc3QgaGFzIHRoZSBu
ZWNlc3NhcnkgbGlicmFyaWVzKS4KKyAgICAgICAgaWYgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsn
c2hlbGwnLCAnZ2V0cHJvcCcsICdyby5idWlsZC50eXBlJ10pLnN0cmlwKCkgIT0gJ3VzZXJkZWJ1
Zyc6CisgICAgICAgICAgICBwcmludCAiWW91ciBkZXZpY2UgaXMgbm90IGZsYXNoZWQgd2l0aCBh
IHVzZXJkZWJ1ZyBidWlsZCBvZiBBbmRyb2lkIgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgYmluYXJ5IGFjdHVhbGx5IGlzIHBlcmYtYWJsZSAoaGFz
IHN0YWNrZnJhbWUgcG9pbnRlcnMpPworICAgICAgICAjIG9iamR1bXAgLXMgYSBmdW5jdGlvbiBh
bmQgbWFrZSBzdXJlIGl0IG1vZGlmaWVzIHRoZSBmcD8KKyAgICAgICAgcmV0dXJuIFRydWUKKwor
ICAgIGRlZiBwcmludF9zZXR1cF9pbnN0cnVjdGlvbnMoc2VsZik6CisgICAgICAgIHByaW50ICIi
IgorcGVyZiBvbiBhbmRyb2lkIHJlcXVpcmVzIGEgJ3VzZXJkZWJ1ZycgYnVpbGQgb2YgQW5kcm9p
ZCwgc2VlOgoraHR0cDovL3NvdXJjZS5hbmRyb2lkLmNvbS9zb3VyY2UvYnVpbGRpbmctZGV2aWNl
cy5odG1sIgorCitUaGUgcGVyZiBjb21tYW5kIGNhbiBiZSBidWlsdCBmcm9tOgoraHR0cHM6Ly9h
bmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vZXh0ZXJuYWwvbGludXgtdG9vbHMtcGVy
Zi8KK2FuZCByZXF1aXJlcyBsaWJlZmwsIGxpYmVibCwgbGliZHcsIGFuZCBsaWJkd2ZsIGF2YWls
YWJsZSBpbjoKK2h0dHBzOi8vYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tL3BsYXRmb3JtL2V4dGVy
bmFsL2VsZnV0aWxzLworCitEdW1wUmVuZGVyVHJlZSBtdXN0IGJlIGJ1aWx0IHdpdGggcHJvZmls
aW5nPTEsIG1ha2Ugc3VyZSB5b3UndmUgZG9uZToKK2V4cG9ydCBHWVBfREVGSU5FUz0icHJvZmls
aW5nPTEgJEdZUF9ERUZJTkVTIgordXBkYXRlLXdlYmtpdCAtLWNocm9taXVtLWFuZHJvaWQKK2J1
aWxkLXdlYmtpdCAtLWNocm9taXVtLWFuZHJvaWQKKworR29vZ2xlcnMgc2hvdWxkIHJlYWQ6Cito
dHRwOi8vZ290by5nb29nbGUuY29tL2NyLWFuZHJvaWQtcGVyZi1ob3d0bworIiIiCisKKyAgICBk
ZWYgX2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLCBmdWxsX2ZpbGVfcGF0aCk6CisgICAgICAg
IGFzc2VydCBmdWxsX2ZpbGVfcGF0aC5zdGFydHN3aXRoKCcvJykKKyAgICAgICAgcmV0dXJuIHNl
bGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgZnVsbF9maWxlX3BhdGhdKS5zdHJp
cCgpID09IGZ1bGxfZmlsZV9wYXRoCisKKyAgICBkZWYgX3J1bl9hZGJfY29tbWFuZChzZWxmLCBj
bWQpOgorICAgICAgICByZXR1cm4gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoc2Vs
Zi5fYWRiX2NvbW1hbmQgKyBjbWQpCisKKyAgICBkZWYgYXR0YWNoX3RvX3BpZChzZWxmLCBwaWQp
OgorICAgICAgICBhc3NlcnQocGlkKQorICAgICAgICBhc3NlcnQoc2VsZi5fcGVyZl9wcm9jZXNz
ID09IE5vbmUpCisgICAgICAgICMgRklYTUU6IFRoaXMgY2FuJ3QgYmUgYSBmaXhlZCB0aW1lb3V0
IQorICAgICAgICBjbWQgPSBbJ2FkYicsICdzaGVsbCcsICdwZXJmJywgJ3JlY29yZCcsICctZycs
ICctcCcsIHBpZCwgJ3NsZWVwJywgMzBdCisgICAgICAgIGNtZCA9IG1hcCh1bmljb2RlLCBjbWQp
CisgICAgICAgIHNlbGYuX3BlcmZfcHJvY2VzcyA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnBvcGVu
KGNtZCkKKworICAgIGRlZiBfZmluZF9wZXJmaG9zdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBw
ZXJmaG9zdF9saW51eCAtLXZlcnNpb24KKyAgICAgICAgIyBvdGhlcndpc2UgdHJ5IHRoZSBsb2Nh
bCBkaXJlY3Rvcnk/CisgICAgICAgICMgb3RoZXJ3aXNlIGV4cGxhaW4gd2hlcmUgdXNlcnMgY2Fu
IGluc3RhbGwgaXQgZnJvbS4KKyAgICAgICAgcmV0dXJuICcvc3JjL2Nocm9taXVtLWFuZHJvaWQv
cGVyZmhvc3RfbGludXgnCisKKyAgICBkZWYgX2ZpcnN0X3Rlbl9saW5lc19vZl9wcm9maWxlKHNl
bGYsIHBlcmZfb3V0cHV0KToKKyAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2goIl4jW15cbl0qXG4o
KD86IFteXG5dKlxuKXsxLDEwfSkiLCBwZXJmX291dHB1dCwgcmUuTVVMVElMSU5FKQorICAgICAg
ICByZXR1cm4gbWF0Y2guZ3JvdXAoMSkgaWYgbWF0Y2ggZWxzZSBOb25lCisKKyAgICBkZWYgcHJv
ZmlsZV9hZnRlcl9leGl0KHNlbGYpOgorICAgICAgICBwZXJmX2V4aXRjb2RlID0gc2VsZi5fcGVy
Zl9wcm9jZXNzLndhaXQoKQorICAgICAgICBpZiBwZXJmX2V4aXRjb2RlICE9IDA6CisgICAgICAg
ICAgICBwcmludCAiUGVyZiBmYWlsZWQgKGV4aXQgY29kZTogJWkpLCBjYW4ndCBwcm9jZXNzIHJl
c3VsdHMuIiAlIHBlcmZfZXhpdGNvZGUKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxm
Ll9ydW5fYWRiX2NvbW1hbmQoWydwdWxsJywgJy9kYXRhL3BlcmYuZGF0YScsIHNlbGYuX291dHB1
dF9wYXRoXSkKKworICAgICAgICBwZXJmaG9zdF9wYXRoID0gc2VsZi5fZmluZF9wZXJmaG9zdCgp
CisgICAgICAgIHBlcmZob3N0X2FyZ3MgPSBbcGVyZmhvc3RfcGF0aCwgJ3JlcG9ydCcsICctZycs
ICdub25lJywgJy1pJywgc2VsZi5fb3V0cHV0X3BhdGgsICctLXN5bWZzJywgc2VsZi5fc3ltZnNf
cGF0aF0KKyAgICAgICAgcGVyZl9vdXRwdXQgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29t
bWFuZChwZXJmaG9zdF9hcmdzKQorICAgICAgICAjIFdlIGNvdWxkIHNhdmUgb2ZmIHRoZSBmdWxs
IC1nIHJlcG9ydCB0byBhIGZpbGUgaWYgdXNlcnMgZm91bmQgdGhhdCB1c2VmdWwuCisgICAgICAg
IHByaW50IHNlbGYuX2ZpcnN0X3Rlbl9saW5lc19vZl9wcm9maWxlKHBlcmZfb3V0cHV0KQorCisg
ICAgICAgIHByaW50ICJUbyB2aWV3IHRoZSBmdWxsIHByb2ZpbGUsIHJ1bjoiCisgICAgICAgIHBy
aW50ICcgJy5qb2luKFtwZXJmaG9zdF9wYXRoLCAncmVwb3J0JywgJy1pJywgc2VsZi5fb3V0cHV0
X3BhdGgsICctLXN5bWZzJywgc2VsZi5fc3ltZnNfcGF0aF0pCisKKwogY2xhc3MgQ2hyb21pdW1B
bmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGltZW91dD1GYWxzZSk6CiAgICAgICAg
IHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX19pbml0X18ocG9ydCwgd29ya2Vy
X251bWJlciwgcGl4ZWxfdGVzdHMsIG5vX3RpbWVvdXQpCkBAIC0zNzIsMTAgKzQ1Niw0NyBAQCBj
bGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIHNlbGYu
X2RldmljZV9zZXJpYWwgPSBwb3J0Ll9nZXRfZGV2aWNlX3NlcmlhbCh3b3JrZXJfbnVtYmVyKQog
ICAgICAgICBzZWxmLl9hZGJfY29tbWFuZF9iYXNlID0gTm9uZQogCisgICAgICAgICMgRklYTUU6
IElmIHdlIHRhdWdodCBQcm9maWxlRmFjdG9yeSBhYm91dCAidGFyZ2V0IiBkZXZpY2VzIHdlIGNv
dWxkCisgICAgICAgICMganVzdCB1c2UgdGhlIGxvZ2ljIGluIERyaXZlciBpbnN0ZWFkIG9mIGR1
cGxpY2F0aW5nIGl0IGhlcmUuCisgICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigicHJv
ZmlsZSIpOgorICAgICAgICAgICAgc3ltZnNfcGF0aCA9IHNlbGYuX2ZpbmRfb3JfY3JlYXRlX3N5
bWZzKCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyID0gQW5kcm9pZFBlcmYoc2VsZi5fcG9y
dC5ob3N0LCBzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZlcigpLCBzZWxmLl9wb3J0LnJlc3VsdHNf
ZGlyZWN0b3J5KCksCisgICAgICAgICAgICAgICAgc2VsZi5fZGV2aWNlX3NlcmlhbCwgc3ltZnNf
cGF0aCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9wcm9maWxlci5jaGVja19jb25maWd1cmF0
aW9uKCk6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvZmlsZXIucHJpbnRfc2V0dXBfaW5zdHJ1
Y3Rpb25zKCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgc2VsZi5fcHJvZmlsZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2RlbGF5X3Bvc3Rf
c3RhcnRfdGFza3MgPSBGYWxzZQorCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNl
bGYuX3RlYXJkb3duX3BlcmZvcm1hbmNlKCkKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lk
RHJpdmVyLCBzZWxmKS5fX2RlbF9fKCkKIAorICAgIGRlZiBfZmluZF9vcl9jcmVhdGVfc3ltZnMo
c2VsZik6CisgICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5fcG9ydC5ob3N0LmNvcHlfY3VycmVu
dF9lbnZpcm9ubWVudCgpCisgICAgICAgIGVudiA9IGVudmlyb25tZW50LnRvX2RpY3Rpb25hcnko
KQorICAgICAgICBmcyA9IHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtCisKKyAgICAgICAgaWYg
J0FORFJPSURfU1lNRlMnIGluIGVudjoKKyAgICAgICAgICAgIHN5bWZzX3BhdGggPSBlbnZbJ0FO
RFJPSURfU1lNRlMnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3ltZnNfcGF0aCA9IGZz
LmpvaW4oc2VsZi5fcG9ydC5yZXN1bHRzX2RpcmVjdG9yeSgpLCAnc3ltZnMnKQorICAgICAgICAg
ICAgcHJpbnQgIkFORFJPSURfU1lNRlMgbm90IHNldCwgdXNpbmcgJXMiICUgc3ltZnNfcGF0aAor
CisgICAgICAgICMgZmluZCB0aGUgaW5zdGFsbGVkIHBhdGgsIGFuZCB0aGUgcGF0aCBvZiB0aGUg
c3ltYm9sZWQgYnVpbHQgbGlicmFyeQorICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgZ2V0IHRo
ZSBpbnN0YWxsIHBhdGggZnJvbSB0aGUgZGV2aWNlIQorICAgICAgICBzeW1mc19saWJyYXJ5X3Bh
dGggPSBmcy5qb2luKHN5bWZzX3BhdGgsICJkYXRhL2FwcC1saWIvJXMtMS8lcyIgJSAoRFJUX0FQ
UF9QQUNLQUdFLCBEUlRfTElCUkFSWV9OQU1FKSkKKyAgICAgICAgYnVpbHRfbGlicmFyeV9wYXRo
ID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgnbGliJywgRFJUX0xJQlJBUllfTkFNRSkKKyAgICAg
ICAgYXNzZXJ0KGZzLmV4aXN0cyhidWlsdF9saWJyYXJ5X3BhdGgpKQorCisgICAgICAgICMgRklY
TUU6IElkZWFsbHkgd2UnZCBjaGVjayB0aGUgc2hhMSdzIGZpcnN0IGFuZCBtYWtlIGEgc29mdC1s
aW5rIGluc3RlYWQgb2YgY29weWluZyAoc2luY2Ugd2UgcHJvYmFibHkgbmV2ZXIgY2FyZSBhYm91
dCB3aW5kb3dzKS4KKyAgICAgICAgcHJpbnQgIlVwZGF0aW5nIHN5bWZzIGxpYmFyeSAoJXMpIGZy
b20gYnVpbHQgY29weSAoJXMpIiAlIChzeW1mc19saWJyYXJ5X3BhdGgsIGJ1aWx0X2xpYnJhcnlf
cGF0aCkKKyAgICAgICAgZnMubWF5YmVfbWFrZV9kaXJlY3RvcnkoZnMuZGlybmFtZShzeW1mc19s
aWJyYXJ5X3BhdGgpKQorICAgICAgICBmcy5jb3B5ZmlsZShidWlsdF9saWJyYXJ5X3BhdGgsIHN5
bWZzX2xpYnJhcnlfcGF0aCkKKworICAgICAgICByZXR1cm4gc3ltZnNfcGF0aAorCiAgICAgZGVm
IF9zZXR1cF9tZDVzdW1fYW5kX3B1c2hfZGF0YV9pZl9uZWVkZWQoc2VsZik6CiAgICAgICAgIHNl
bGYuX21kNXN1bV9wYXRoID0gc2VsZi5fcG9ydC5wYXRoX3RvX21kNXN1bSgpCiAgICAgICAgIGlm
IG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2UoTUQ1U1VNX0RFVklDRV9QQVRIKToKQEAg
LTYwNiw2ICs3MjcsNyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZl
cik6CiAgICAgICAgIHNlbGYuX2Fib3J0KCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUg
YXBwbGljYXRpb24gbXVsdGlwbGUgdGltZXMuIEdpdmUgdXAuJykKIAogICAgIGRlZiBfc3RhcnRf
b25jZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6CisgICAgICAgIHNlbGYuX2Rl
bGF5X3Bvc3Rfc3RhcnRfdGFza3MgPSBUcnVlICAjIFRoaXMgaXMgYSBoYWNrIHRvIG5vdCBzdGFy
dCB0aGUgcHJvZmlsZXIgdW50aWwgYWZ0ZXIgdGhlIHJlbW90ZSBwcm9jZXNzIGlzIGZ1bGx5IHNl
dHVwLgogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9zdGFydChw
aXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykKIAogICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1N0
YXJ0aW5nIGZvcndhcmRlcicpCkBAIC02NzMsMTAgKzc5NSwzMSBAQCBjbGFzcyBDaHJvbWl1bUFu
ZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgICAgICAjIGRlYWRsb2NrIGFuZCBr
aWxsZWQgdGhlIGZpZm8gcmVhZGluZy93cml0aW5nIHByb2Nlc3Nlcy4KICAgICAgICAgICAgIF9s
b2cuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZTogXG4lcycgJSBvdXRwdXQp
CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMg
SW5mb3JtIHRoZSBkZWFkbG9jayBkZXRlY3RvciB0aGF0IHRoZSBzdGFydHVwIGlzIHN1Y2Nlc3Nm
dWwgd2l0aG91dCBkZWFkbG9jay4KLSAgICAgICAgICAgIG5vcm1hbF9zdGFydHVwX2V2ZW50LnNl
dCgpCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHNlbGYuX2RlbGF5X3Bvc3Rf
c3RhcnRfdGFza3MgPSBGYWxzZQorICAgICAgICBzZWxmLl9ydW5fcG9zdF9zdGFydF90YXNrcygp
CisKKyAgICAgICAgIyBJbmZvcm0gdGhlIGRlYWRsb2NrIGRldGVjdG9yIHRoYXQgdGhlIHN0YXJ0
dXAgaXMgc3VjY2Vzc2Z1bCB3aXRob3V0IGRlYWRsb2NrLgorICAgICAgICBub3JtYWxfc3RhcnR1
cF9ldmVudC5zZXQoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9ydW5fcG9zdF9z
dGFydF90YXNrcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZGVsYXlfcG9zdF9zdGFydF90YXNr
czoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2
ZXIsIHNlbGYpLl9ydW5fcG9zdF9zdGFydF90YXNrcygpCisKKyAgICBkZWYgX3BpZF9mcm9tX2Fu
ZHJvaWRfcHNfb3V0cHV0KHNlbGYsIHBzX291dHB1dCwgcGFja2FnZV9uYW1lKToKKyAgICAgICAg
IyBwcyBvdXRwdXQgc2VlbXMgdG8gYmUgZml4ZWQgd2lkdGgsIHdlIG9ubHkgY2FyZSBhYm91dCB0
aGUgbmFtZSBhbmQgdGhlIHBpZAorICAgICAgICAjIHUwX2E3MiAgICAyMTYzMCAxMjUgICA5NDc5
MjAgNTkzNjQgZmZmZmZmZmYgNDAwYmVlZTQgUyBvcmcuY2hyb21pdW0ubmF0aXZlX3Rlc3QKKyAg
ICAgICAgZm9yIGxpbmUgaW4gcHNfb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYg
bGluZS5maW5kKERSVF9BUFBfUEFDS0FHRSkgIT0gLTE6CisgICAgICAgICAgICAgICAgbWF0Y2gg
PSByZS5tYXRjaChyJ1xTK1xzKyhcZCspJywgbGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
aW50KG1hdGNoLmdyb3VwKDEpKQorCisgICAgZGVmIF9waWRfb25fdGFyZ2V0KHNlbGYpOgorICAg
ICAgICAjIEZJWE1FOiBUaGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRoYW4g
Z3JlcHBpbmcgcHMgb3V0cHV0IQorICAgICAgICBwc19vdXRwdXQgPSBzZWxmLl9ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdwcyddKQorICAgICAgICByZXR1cm4gc2VsZi5fcGlkX2Zyb21fYW5k
cm9pZF9wc19vdXRwdXQocHNfb3V0cHV0LCBEUlRfQVBQX1BBQ0tBR0UpCiAKICAgICBkZWYgc3Rv
cChzZWxmKToKICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAn
Zm9yY2Utc3RvcCcsIERSVF9BUFBfUEFDS0FHRV0pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3QucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJv
aWRfdW5pdHRlc3QucHkKaW5kZXggYmVkOTg3ZjFiYzIxNGE1MGQ2OTExNjcyMTlkZTIwODgyZTBj
NTlmYS4uNjA4MGEwOWQwYWYyYTE1OTg3N2Y4Yzk0MTBiMWJkZDVhMzI5ZDNlMyAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRy
b2lkX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW1fYW5kcm9pZF91bml0dGVzdC5weQpAQCAtNDIsNiArNDIsNyBAQCBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXIKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGRyaXZlcl91bml0dGVzdAogZnJvbSB3ZWJraXRweS50
b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwogCisKIGNsYXNzIE1vY2tSdW5Db21tYW5k
KG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzZWxmLl9tb2NrX2xv
Z2NhdCA9ICcnCkBAIC0yNTgsNiArMjU5LDY1IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZl
clRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBleHBlY3RlZF9jb21tYW5kID0gImh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28vYmFyL3Rlc3QuaHRtbCctLXBpeGVsLXRlc3QnY2hlY2tz
dW1cbiIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRyaXZlci5fY29tbWFuZF9mcm9t
X2RyaXZlcl9pbnB1dChkcml2ZXJfaW5wdXQpLCBleHBlY3RlZF9jb21tYW5kKQogCisgICAgZGVm
IHRlc3RfcGlkX2Zyb21fYW5kcm9pZF9wc19vdXRwdXQoc2VsZik6CisgICAgICAgICMgRklYTUU6
IFVzZSBhIGxhcmdlciBibG9iIG9mIHBzIG91dHB1dC4KKyAgICAgICAgcHNfb3V0cHV0ID0gIiIi
dTBfYTcyICAgIDIxNjMwIDEyNSAgIDk0NzkyMCA1OTM2NCBmZmZmZmZmZiA0MDBiZWVlNCBTIG9y
Zy5jaHJvbWl1bS5uYXRpdmVfdGVzdCIiIgorICAgICAgICBwaWQgPSBzZWxmLmRyaXZlci5fcGlk
X2Zyb21fYW5kcm9pZF9wc19vdXRwdXQocHNfb3V0cHV0LCAib3JnLmNocm9taXVtLm5hdGl2ZV90
ZXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWQsIDIxNjMwKQorCisKK2NsYXNzIEFu
ZHJvaWRQZXJmVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcGVyZl9vdXRw
dXRfcmVnZXhwKHNlbGYpOgorICAgICAgICBwZXJmX291dHB1dCA9ICIiIltrZXJuZWwua2FsbHN5
bXNdIHdpdGggYnVpbGQgaWQgNWEyMGY2Mjk5YmRiOTU1YTJmMDc3MTFiYjdmNjVjZDcwNmZlNzQ2
OSBub3QgZm91bmQsIGNvbnRpbnVpbmcgd2l0aG91dCBzeW1ib2xzCitGYWlsZWQgdG8gb3BlbiAv
dG1wL3BlcmYtMTQxNjgubWFwLCBjb250aW51aW5nIHdpdGhvdXQgc3ltYm9scworS2VybmVsIGFk
ZHJlc3MgbWFwcyAoL3Byb2Mve2thbGxzeW1zLG1vZHVsZXN9KSB3ZXJlIHJlc3RyaWN0ZWQuCisK
K0NoZWNrIC9wcm9jL3N5cy9rZXJuZWwva3B0cl9yZXN0cmljdCBiZWZvcmUgcnVubmluZyAncGVy
ZiByZWNvcmQnLgorCitBcyBubyBzdWl0YWJsZSBrYWxsc3ltcyBub3Igdm1saW51eCB3YXMgZm91
bmQsIGtlcm5lbCBzYW1wbGVzCitjYW4ndCBiZSByZXNvbHZlZC4KKworU2FtcGxlcyBpbiBrZXJu
ZWwgbW9kdWxlcyBjYW4ndCBiZSByZXNvbHZlZCBhcyB3ZWxsLgorCisjIEV2ZW50czogMzFLIGN5
Y2xlcworIworIyBPdmVyaGVhZCAgICAgICAgICBDb21tYW5kICAgICAgICAgICAgICAgIFNoYXJl
ZCBPYmplY3QKKyMgLi4uLi4uLi4gIC4uLi4uLi4uLi4uLi4uLiAgLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4KKyMKKyAgICAxNi4xOCUgICBEdW1wUmVuZGVyVHJlZSAgcGVyZi0xNDE2OC5tYXAgICAg
ICAgICAgICAgICBbLl0gMHgyMTI3MGFjMGNmNDMKKyAgICAxMi43MiUgICBEdW1wUmVuZGVyVHJl
ZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gdjg6OmludGVybmFsOjpKU09iamVj
dDo6R2V0RWxlbWVudFdpdGhJbnRlcmNlcHRvcih2ODo6aW50ZXJuYWw6Ok9iamVjdCosIHVuc2ln
bmVkIGludCkKKyAgICAgOC4yOCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAg
ICAgICAgICAgICBbLl0gdjg6OmludGVybmFsOjpMb2FkUHJvcGVydHlXaXRoSW50ZXJjZXB0b3JP
bmx5KHY4OjppbnRlcm5hbDo6QXJndW1lbnRzLCB2ODo6aW50ZXJuYWw6Oklzb2xhdGUqKQorICAg
ICA1LjYwJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsu
XSBXVEY6OkF0b21pY1N0cmluZyBXZWJDb3JlOjp2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxXVEY6
OkF0b21pY1N0cmluZz4odjg6OkhhbmRsZTx2ODo6U3RyaW5nPiwgV2ViQ29yZTo6RXh0ZXJuYWxN
b2RlKQorICAgICA0LjYwJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAg
ICAgICAgIFsuXSBXZWJDb3JlOjpXZWFrUmVmZXJlbmNlTWFwPHZvaWQsIHY4OjpPYmplY3Q+Ojpn
ZXQodm9pZCopCisgICAgIDMuOTklICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAg
ICAgICAgICAgICAgWy5dIF9aTkszV1RGN0hhc2hNYXBJUE5TXzE2QXRvbWljU3RyaW5nSW1wbEVQ
TjdXZWJDb3JlN0VsZW1lbnRFTlNfN1B0ckhhc2hJUzJfRUVOU18xMEhhc2hUcmFpdHNJUzJfRUVO
UzhfSVM1X0VFRTNnZXRFUktTMl8uaXNyYS45OAorICAgICAzLjY5JSAgIER1bXBSZW5kZXJUcmVl
ICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJDb3JlOjpEb2N1bWVudFY4SW50
ZXJuYWw6OmdldEVsZW1lbnRCeUlkQ2FsbGJhY2sodjg6OkFyZ3VtZW50cyBjb25zdCYpCisgICAg
IDMuMjMlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5d
IFdlYkNvcmU6OlY4UGFyYW1ldGVyQmFzZTo6cHJlcGFyZUJhc2UoKQorICAgICAyLjgzJSAgIER1
bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXVEY6OkF0b21p
Y1N0cmluZzo6YWRkKHVuc2lnbmVkIHNob3J0IGNvbnN0KiwgdW5zaWduZWQgaW50KQorICAgICAy
LjczJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBX
ZWJDb3JlOjpEb2N1bWVudFY4SW50ZXJuYWw6OmdldEVsZW1lbnRzQnlUYWdOYW1lQ2FsbGJhY2so
djg6OkFyZ3VtZW50cyBjb25zdCYpCisgICAgIDIuNDclICAgRHVtcFJlbmRlclRyZWUgIER1bXBS
ZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIF9aTjJ2ODZPYmplY3QyN0dldFBvaW50ZXJGcm9t
SW50ZXJuYWxGaWVsZEVpLmNvbnN0cHJvcC40MzkKKyAgICAgMi40MyUgICBEdW1wUmVuZGVyVHJl
ZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gdjg6OmludGVybmFsOjpJc29sYXRl
OjpTZXRDdXJyZW50Vk1TdGF0ZSh2ODo6aW50ZXJuYWw6OlN0YXRlVGFnKQorICAgICAyLjM0JSAg
IER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXVEY6Okhh
c2hUYWJsZUFkZFJlc3VsdDxXVEY6Okhhc2hUYWJsZUl0ZXJhdG9yPHN0ZDo6cGFpcjx1bnNpZ25l
ZCBjaGFyLCBXVEY6OkF0b21pY1N0cmluZz4sIFdURjo6S2V5VmFsdWVQYWlyPHN0ZDo6cGFpcjx1
bnNpZ25lZCBjaGFyLCBXVEY6OkF0b21pY1N0cmluZz4sIFdlYkNvcgorICAgICAyLjI4JSAgIER1
bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJDb3JlOjpE
b2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUlkKFdURjo6QXRvbWljU3RyaW5nSW1wbCos
IFdlYkNvcmU6OlRyZWVTY29wZSBjb25zdCopIGNvbnN0CisgICAgIDIuMTUlICAgRHVtcFJlbmRl
clRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OlY4Tm9kZUxp
c3Q6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+LCB2ODo6QWNjZXNz
b3JJbmZvIGNvbnN0JikKKyAgICAgMi4wNiUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRy
ZWUgICAgICAgICAgICAgICBbLl0gV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkhUTUxUYWdOb2Rl
TGlzdD4gV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmFkZENhY2hlV2l0aEF0b21pY05hbWU8
V2ViQ29yZTo6SFRNTFRhZ05vZGVMaXN0PihXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6RHluYW1p
Y05vZGVMaXN0OjoKKyAgICAgMS4xOCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUg
ICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6Tm9kZVY4SW50ZXJuYWw6Om5vZGVUeXBlQXR0ckdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4sIHY4OjpBY2Nlc3NvckluZm8gY29uc3QmKQorICAg
ICAxLjA4JSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsu
XSBXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZShXVEY6OkF0b21pY1N0cmluZyBj
b25zdCYpCisiIiIKKyAgICAgICAgZXhwZWN0ZWRfZmlyc3RfdGVuX2xpbmVzID0gIiIiICAgIDE2
LjE4JSAgIER1bXBSZW5kZXJUcmVlICBwZXJmLTE0MTY4Lm1hcCAgICAgICAgICAgICAgIFsuXSAw
eDIxMjcwYWMwY2Y0MworICAgIDEyLjcyJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJl
ZSAgICAgICAgICAgICAgIFsuXSB2ODo6aW50ZXJuYWw6OkpTT2JqZWN0OjpHZXRFbGVtZW50V2l0
aEludGVyY2VwdG9yKHY4OjppbnRlcm5hbDo6T2JqZWN0KiwgdW5zaWduZWQgaW50KQorICAgICA4
LjI4JSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSB2
ODo6aW50ZXJuYWw6OkxvYWRQcm9wZXJ0eVdpdGhJbnRlcmNlcHRvck9ubHkodjg6OmludGVybmFs
OjpBcmd1bWVudHMsIHY4OjppbnRlcm5hbDo6SXNvbGF0ZSopCisgICAgIDUuNjAlICAgRHVtcFJl
bmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdURjo6QXRvbWljU3Ry
aW5nIFdlYkNvcmU6OnY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nPFdURjo6QXRvbWljU3RyaW5nPih2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+LCBXZWJDb3JlOjpFeHRlcm5hbE1vZGUpCisgICAgIDQuNjAl
ICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNv
cmU6OldlYWtSZWZlcmVuY2VNYXA8dm9pZCwgdjg6Ok9iamVjdD46OmdldCh2b2lkKikKKyAgICAg
My45OSUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0g
X1pOSzNXVEY3SGFzaE1hcElQTlNfMTZBdG9taWNTdHJpbmdJbXBsRVBON1dlYkNvcmU3RWxlbWVu
dEVOU183UHRySGFzaElTMl9FRU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TOF9JUzVfRUVFM2dldEVS
S1MyXy5pc3JhLjk4CisgICAgIDMuNjklICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVl
ICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OkRvY3VtZW50VjhJbnRlcm5hbDo6Z2V0RWxlbWVu
dEJ5SWRDYWxsYmFjayh2ODo6QXJndW1lbnRzIGNvbnN0JikKKyAgICAgMy4yMyUgICBEdW1wUmVu
ZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6VjhQYXJh
bWV0ZXJCYXNlOjpwcmVwYXJlQmFzZSgpCisgICAgIDIuODMlICAgRHVtcFJlbmRlclRyZWUgIER1
bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdURjo6QXRvbWljU3RyaW5nOjphZGQodW5z
aWduZWQgc2hvcnQgY29uc3QqLCB1bnNpZ25lZCBpbnQpCisgICAgIDIuNzMlICAgRHVtcFJlbmRl
clRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OkRvY3VtZW50
VjhJbnRlcm5hbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVDYWxsYmFjayh2ODo6QXJndW1lbnRzIGNv
bnN0JikKKyIiIgorICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoKQorICAgICAgICBwcm9m
aWxlciA9IGNocm9taXVtX2FuZHJvaWQuQW5kcm9pZFBlcmYoaG9zdCwgJy9iaW4vZXhlY3V0YWJs
ZScsICcvdG1wL291dHB1dCcsICdkZXZpY2Utc2VyaWFsJywgJ2ZvbycpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocHJvZmlsZXIuX2ZpcnN0X3Rlbl9saW5lc19vZl9wcm9maWxlKHBlcmZfb3V0
cHV0KSwgZXhwZWN0ZWRfZmlyc3RfdGVuX2xpbmVzKQorCiAKIGNsYXNzIENocm9taXVtQW5kcm9p
ZERyaXZlclR3b0RyaXZlcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF90
d29fZHJpdmVycyhzZWxmKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9kcml2ZXIucHkKaW5kZXggNzA4MjA0OTZjZjIxOTE0OGVhMjg1Mzc3NjBhMTU0
ZWM1ODU4ZDVmNi4uNWE1OTdiMGIyMmNmNjk4N2Y0NjI1NzU0NzQ4OTFjZWIyMmQ1M2FjMiAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIu
cHkKQEAgLTI3NywxMSArMjc3LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGlm
IG5vdCBzZWxmLl9zZXJ2ZXJfcHJvY2VzczoKICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KHBpeGVs
X3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQogCi0gICAgZGVmIF9zdGFydChzZWxmLCBwaXhlbF90ZXN0
cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgIHNlbGYuc3RvcCgpCi0gICAgICAgIHNlbGYuX2Ry
aXZlcl90ZW1wZGlyID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5ta2R0ZW1wKHByZWZpeD0nJXMt
JyAlIHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSkKLSAgICAgICAgc2VydmVyX25hbWUgPSBzZWxm
Ll9wb3J0LmRyaXZlcl9uYW1lKCkKLSAgICAgICAgZW52aXJvbm1lbnQgPSBzZWxmLl9wb3J0LnNl
dHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKKyAgICBkZWYgX2FkanVzdF9lbnZp
cm9ubWVudF9mb3JfZHJpdmVyKHNlbGYsIGVudmlyb25tZW50KToKICAgICAgICAgZW52aXJvbm1l
bnRbJ0RZTERfTElCUkFSWV9QQVRIJ10gPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKICAgICAg
ICAgZW52aXJvbm1lbnRbJ0RZTERfRlJBTUVXT1JLX1BBVEgnXSA9IHNlbGYuX3BvcnQuX2J1aWxk
X3BhdGgoKQogICAgICAgICAjIEZJWE1FOiBXZSdyZSBhc3N1bWluZyB0aGF0IFdlYktpdFRlc3RS
dW5uZXIgY2hlY2tzIHRoaXMgRHVtcFJlbmRlclRyZWUtbmFtZWQgZW52aXJvbm1lbnQgdmFyaWFi
bGUuCkBAIC0yOTEsMTIgKzI4NywyNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAg
ICAgIGVudmlyb25tZW50WydXRUJLSVRPVVRQVVRESVInXSA9IG9zLmVudmlyb25bJ1dFQktJVE9V
VFBVVERJUiddCiAgICAgICAgIGlmIHNlbGYuX3Byb2ZpbGVyOgogICAgICAgICAgICAgZW52aXJv
bm1lbnQgPSBzZWxmLl9wcm9maWxlci5hZGp1c3RlZF9lbnZpcm9ubWVudChlbnZpcm9ubWVudCkK
KworICAgIGRlZiBfc3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgorICAg
ICAgICBzZWxmLnN0b3AoKQorICAgICAgICBzZWxmLl9kcml2ZXJfdGVtcGRpciA9IHNlbGYuX3Bv
cnQuX2ZpbGVzeXN0ZW0ubWtkdGVtcChwcmVmaXg9JyVzLScgJSBzZWxmLl9wb3J0LmRyaXZlcl9u
YW1lKCkpCisgICAgICAgIHNlcnZlcl9uYW1lID0gc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpCisg
ICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5fcG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIo
c2VydmVyX25hbWUpCisgICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5fYWRqdXN0X2Vudmlyb25t
ZW50X2Zvcl9kcml2ZXIoZW52aXJvbm1lbnQpCiAgICAgICAgIHNlbGYuX2NyYXNoZWRfcHJvY2Vz
c19uYW1lID0gTm9uZQogICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9IE5vbmUKICAgICAgICAg
c2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1
Y3RvcihzZWxmLl9wb3J0LCBzZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGluZShwaXhlbF90ZXN0cywg
cGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50KQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vz
cy5zdGFydCgpCisgICAgICAgIHNlbGYuX3J1bl9wb3N0X3N0YXJ0X3Rhc2tzKCkKKworICAgIGRl
ZiBfcnVuX3Bvc3Rfc3RhcnRfdGFza3Moc2VsZik6CisgICAgICAgICMgUmVtb3RlIGRyaXZlcnMg
bWF5IG92ZXJyaWRlIHRoaXMgdG8gZGVsYXkgcG9zdC1zdGFydCB0YXNrcyB1bnRpbCB0aGUgc2Vy
dmVyIGhhcyBhY2snZC4KICAgICAgICAgaWYgc2VsZi5fcHJvZmlsZXI6Ci0gICAgICAgICAgICBz
ZWxmLl9wcm9maWxlci5hdHRhY2hfdG9fcGlkKHNlbGYuX3NlcnZlcl9wcm9jZXNzLnBpZCgpKQor
ICAgICAgICAgICAgc2VsZi5fcHJvZmlsZXIuYXR0YWNoX3RvX3BpZChzZWxmLl9waWRfb25fdGFy
Z2V0KCkpCisKKyAgICBkZWYgX3BpZF9vbl90YXJnZXQoc2VsZik6CisgICAgICAgICMgUmVtb3Rl
IGRyaXZlcnMgd2lsbCBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byByZXR1cm4gdGhlIHBpZCBvbiB0
aGUgZGV2aWNlLgorICAgICAgICByZXR1cm4gc2VsZi5fc2VydmVyX3Byb2Nlc3MucGlkKCkKIAog
ICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9zZXJ2ZXJfcHJvY2VzczoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177964</attachid>
            <date>2012-12-06 00:42:46 -0800</date>
            <delta_ts>2012-12-10 13:47:11 -0800</delta_ts>
            <desc>slightly nicer error messages</desc>
            <filename>bug-103587-20121206004018.patch</filename>
            <type>text/plain</type>
            <size>20727</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2Nzk2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWZmN2FjNWIzMTMyOWJkZDgzYjM0YTZjZjI1MzJmYzkw
YjUxNTY4ZC4uYzAzY2YxZTMyYzBiNjMzZjFmZDY1OTk1N2VjZTQ3MmNiMTg0MTNhMiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQy
IEBACisyMDEyLTEyLTA2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBBZGQgc3VwcG9ydCBmb3IgcnVuLXBlcmYtdGVzdHMgLS1jaHJvbWl1bS1hbmRyb2lkIC0tcHJv
ZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAz
NTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVh
cmx5IHJlYWR5IGZvciByZXZpZXcsIGp1c3QgbmVlZHMgdG8gc3VwcG9ydCBwZXJmaG9zdF9saW51
eAorICAgICAgICBiZWluZyBpbnN0YWxsZWQgaW4gdmFyeWluZyBsb2NhdGlvbnMuCisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQu
cHk6CisgICAgICAgIChBbmRyb2lkUGVyZik6CisgICAgICAgIChBbmRyb2lkUGVyZi5fX2luaXRf
Xyk6CisgICAgICAgIChBbmRyb2lkUGVyZi5jaGVja19jb25maWd1cmF0aW9uKToKKyAgICAgICAg
KEFuZHJvaWRQZXJmLnByaW50X3NldHVwX2luc3RydWN0aW9ucyk6CisgICAgICAgIChfZmlsZV9l
eGlzdHNfb25fZGV2aWNlKToKKyAgICAgICAgKF9ydW5fYWRiX2NvbW1hbmQpOgorICAgICAgICAo
YXR0YWNoX3RvX3BpZCk6CisgICAgICAgIChfZmluZF9wZXJmaG9zdCk6CisgICAgICAgIChfZmly
c3RfdGVuX2xpbmVzX29mX3Byb2ZpbGUpOgorICAgICAgICAocHJvZmlsZV9hZnRlcl9leGl0KToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fX2luaXRfXyk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWREcml2ZXIuX2ZpbmRfb3JfY3JlYXRlX3N5bWZzKToKKyAgICAgICAgKENocm9t
aXVtQW5kcm9pZERyaXZlci5fc3RhcnRfb25jZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRE
cml2ZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9ydW5fcG9zdF9zdGFydF90
YXNrcyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3BpZF9mcm9tX2FuZHJvaWRf
cHNfb3V0cHV0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fcGlkX29uX3Rhcmdl
dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV9hbmRyb2lkX3VuaXR0ZXN0LnB5OgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyVGVz
dC50ZXN0X3BpZF9mcm9tX2FuZHJvaWRfcHNfb3V0cHV0KToKKyAgICAgICAgKEFuZHJvaWRQZXJm
VGVzdCk6CisgICAgICAgIChBbmRyb2lkUGVyZlRlc3QudGVzdF9wZXJmX291dHB1dF9yZWdleHAp
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5
OgorICAgICAgICAoRHJpdmVyLl9hZGp1c3RfZW52aXJvbm1lbnRfZm9yX2RyaXZlcik6CisgICAg
ICAgIChEcml2ZXIpOgorICAgICAgICAoRHJpdmVyLl9zdGFydCk6CisgICAgICAgIChEcml2ZXIu
X3J1bl9wb3N0X3N0YXJ0X3Rhc2tzKToKKyAgICAgICAgKERyaXZlci5fcGlkX29uX3RhcmdldCk6
CisKIDIwMTItMTItMDUgIEhhbHRvbiBIdW8gIDxoYWx0b24uaHVvQGludGVsLmNvbT4KIAogICAg
ICAgICBbQ01ha2VdIFVuaWZ5IGNvZGluZyBzdHlsZSBmb3IgQ01ha2UgZmlsZXMKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5k
cm9pZC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fYW5kcm9pZC5weQppbmRleCA5ZDc3YTU1MzhiZTAyNTYwZTg5NDUwNDdhMzc2ZWNkNDY4YTc4
ZjA5Li40MzEzNTExNGRiN2MxY2E3NmZkOWY1OGJhMTVmNzNhMDA0YjU1MzE3IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJv
aWQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9hbmRyb2lkLnB5CkBAIC0zMCw2ICszMCw3IEBAIGltcG9ydCBjb3B5CiBpbXBvcnQgbG9n
Z2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMKIGltcG9ydCBzdWJwcm9jZXNz
CiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQpAQCAtMzgsNyArMzksNyBAQCBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bQogZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZHJpdmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5wb3J0IGltcG9ydCBmYWN0b3J5CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGlt
cG9ydCBzZXJ2ZXJfcHJvY2VzcwotCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucHJvZmls
ZXIgaW1wb3J0IFNpbmdsZUZpbGVPdXRwdXRQcm9maWxlcgogCiBfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCiAKQEAgLTYwLDYgKzYxLDcgQEAgREVWSUNFX0ZJRk9fUEFUSCA9ICcv
ZGF0YS9kYXRhL29yZy5jaHJvbWl1bS5uYXRpdmVfdGVzdC9maWxlcy8nCiBEUlRfQVBQX1BBQ0tB
R0UgPSAnb3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0JwogRFJUX0FDVElWSVRZX0ZVTExfTkFNRSA9
IERSVF9BUFBfUEFDS0FHRSArICcvLkNocm9tZU5hdGl2ZVRlc3RBY3Rpdml0eScKIERSVF9BUFBf
Q0FDSEVfRElSID0gREVWSUNFX0RSVF9ESVIgKyAnY2FjaGUvJworRFJUX0xJQlJBUllfTkFNRSA9
ICdsaWJEdW1wUmVuZGVyVHJlZS5zbycKIAogU0NBTElOR19HT1ZFUk5PUlNfUEFUVEVSTiA9ICIv
c3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NwdWZyZXEvc2NhbGluZ19nb3Zlcm5vciIKIApA
QCAtMzU3LDYgKzM1OSw4OCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNo
cm9taXVtUG9ydCk6CiAgICAgICAgIHJldHVybiBkZXZpY2VzW3dvcmtlcl9udW1iZXJdCiAKIAor
Y2xhc3MgQW5kcm9pZFBlcmYoU2luZ2xlRmlsZU91dHB1dFByb2ZpbGVyKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgaG9zdCwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCBkZXZpY2Vfc2Vy
aWFsLCBzeW1mc19wYXRoLCBpZGVudGlmaWVyPU5vbmUpOgorICAgICAgICBzdXBlcihBbmRyb2lk
UGVyZiwgc2VsZikuX19pbml0X18oaG9zdCwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCAi
ZGF0YSIsIGlkZW50aWZpZXIpCisgICAgICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBkZXZpY2Vf
c2VyaWFsCisgICAgICAgIHNlbGYuX2FkYl9jb21tYW5kID0gWydhZGInLCAnLXMnLCBzZWxmLl9k
ZXZpY2Vfc2VyaWFsXQorICAgICAgICBzZWxmLl9wZXJmX3Byb2Nlc3MgPSBOb25lCisgICAgICAg
IHNlbGYuX3N5bWZzX3BhdGggPSBzeW1mc19wYXRoCisKKyAgICBkZWYgY2hlY2tfY29uZmlndXJh
dGlvbihzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHBlcmYgaXMgaW5zdGFsbGVkCisgICAg
ICAgIGlmIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2UoJy9zeXN0ZW0vYmluL3BlcmYn
KToKKyAgICAgICAgICAgIHByaW50ICJDYW5ub3QgZmluZCAvc3lzdGVtL2Jpbi9wZXJmIG9uIGRl
dmljZSAlcyIgJSBzZWxmLl9kZXZpY2Vfc2VyaWFsCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBkZXZpY2UgaXMgYSB1c2VyZGVidWcgYnVpbGQgKG9y
IGF0IGxlYXN0IGhhcyB0aGUgbmVjZXNzYXJ5IGxpYnJhcmllcykuCisgICAgICAgIGlmIHNlbGYu
X3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2dldHByb3AnLCAncm8uYnVpbGQudHlwZSddKS5z
dHJpcCgpICE9ICd1c2VyZGVidWcnOgorICAgICAgICAgICAgcHJpbnQgIkRldmljZSAlcyBpcyBu
b3QgZmxhc2hlZCB3aXRoIGEgdXNlcmRlYnVnIGJ1aWxkIG9mIEFuZHJvaWQiICUgc2VsZi5fZGV2
aWNlX3NlcmlhbAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICMgQ2hlY2sgdGhh
dCB0aGUgYmluYXJ5IGFjdHVhbGx5IGlzIHBlcmYtYWJsZSAoaGFzIHN0YWNrZnJhbWUgcG9pbnRl
cnMpPworICAgICAgICAjIG9iamR1bXAgLXMgYSBmdW5jdGlvbiBhbmQgbWFrZSBzdXJlIGl0IG1v
ZGlmaWVzIHRoZSBmcD8KKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBwcmludF9zZXR1
cF9pbnN0cnVjdGlvbnMoc2VsZik6CisgICAgICAgIHByaW50ICIiIgorcGVyZiBvbiBhbmRyb2lk
IHJlcXVpcmVzIGEgJ3VzZXJkZWJ1ZycgYnVpbGQgb2YgQW5kcm9pZCwgc2VlOgoraHR0cDovL3Nv
dXJjZS5hbmRyb2lkLmNvbS9zb3VyY2UvYnVpbGRpbmctZGV2aWNlcy5odG1sIgorCitUaGUgcGVy
ZiBjb21tYW5kIGNhbiBiZSBidWlsdCBmcm9tOgoraHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJj
ZS5jb20vcGxhdGZvcm0vZXh0ZXJuYWwvbGludXgtdG9vbHMtcGVyZi8KK2FuZCByZXF1aXJlcyBs
aWJlZmwsIGxpYmVibCwgbGliZHcsIGFuZCBsaWJkd2ZsIGF2YWlsYWJsZSBpbjoKK2h0dHBzOi8v
YW5kcm9pZC5nb29nbGVzb3VyY2UuY29tL3BsYXRmb3JtL2V4dGVybmFsL2VsZnV0aWxzLworCitE
dW1wUmVuZGVyVHJlZSBtdXN0IGJlIGJ1aWx0IHdpdGggcHJvZmlsaW5nPTEsIG1ha2Ugc3VyZSB5
b3UndmUgZG9uZToKK2V4cG9ydCBHWVBfREVGSU5FUz0icHJvZmlsaW5nPTEgJEdZUF9ERUZJTkVT
IgordXBkYXRlLXdlYmtpdCAtLWNocm9taXVtLWFuZHJvaWQKK2J1aWxkLXdlYmtpdCAtLWNocm9t
aXVtLWFuZHJvaWQKKworR29vZ2xlcnMgc2hvdWxkIHJlYWQ6CitodHRwOi8vZ290by5nb29nbGUu
Y29tL2NyLWFuZHJvaWQtcGVyZi1ob3d0bworIiIiCisKKyAgICBkZWYgX2ZpbGVfZXhpc3RzX29u
X2RldmljZShzZWxmLCBmdWxsX2ZpbGVfcGF0aCk6CisgICAgICAgIGFzc2VydCBmdWxsX2ZpbGVf
cGF0aC5zdGFydHN3aXRoKCcvJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFu
ZChbJ3NoZWxsJywgJ2xzJywgZnVsbF9maWxlX3BhdGhdKS5zdHJpcCgpID09IGZ1bGxfZmlsZV9w
YXRoCisKKyAgICBkZWYgX3J1bl9hZGJfY29tbWFuZChzZWxmLCBjbWQpOgorICAgICAgICByZXR1
cm4gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1hbmQgKyBj
bWQpCisKKyAgICBkZWYgYXR0YWNoX3RvX3BpZChzZWxmLCBwaWQpOgorICAgICAgICBhc3NlcnQo
cGlkKQorICAgICAgICBhc3NlcnQoc2VsZi5fcGVyZl9wcm9jZXNzID09IE5vbmUpCisgICAgICAg
ICMgRklYTUU6IFRoaXMgY2FuJ3QgYmUgYSBmaXhlZCB0aW1lb3V0IQorICAgICAgICBjbWQgPSBb
J2FkYicsICdzaGVsbCcsICdwZXJmJywgJ3JlY29yZCcsICctZycsICctcCcsIHBpZCwgJ3NsZWVw
JywgMzBdCisgICAgICAgIGNtZCA9IG1hcCh1bmljb2RlLCBjbWQpCisgICAgICAgIHNlbGYuX3Bl
cmZfcHJvY2VzcyA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnBvcGVuKGNtZCkKKworICAgIGRlZiBf
ZmluZF9wZXJmaG9zdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwZXJmaG9zdF9saW51eCAtLXZl
cnNpb24KKyAgICAgICAgIyBvdGhlcndpc2UgdHJ5IHRoZSBsb2NhbCBkaXJlY3Rvcnk/CisgICAg
ICAgICMgb3RoZXJ3aXNlIGV4cGxhaW4gd2hlcmUgdXNlcnMgY2FuIGluc3RhbGwgaXQgZnJvbS4K
KyAgICAgICAgcmV0dXJuICcvc3JjL2Nocm9taXVtLWFuZHJvaWQvcGVyZmhvc3RfbGludXgnCisK
KyAgICBkZWYgX2ZpcnN0X3Rlbl9saW5lc19vZl9wcm9maWxlKHNlbGYsIHBlcmZfb3V0cHV0KToK
KyAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2goIl4jW15cbl0qXG4oKD86IFteXG5dKlxuKXsxLDEw
fSkiLCBwZXJmX291dHB1dCwgcmUuTVVMVElMSU5FKQorICAgICAgICByZXR1cm4gbWF0Y2guZ3Jv
dXAoMSkgaWYgbWF0Y2ggZWxzZSBOb25lCisKKyAgICBkZWYgcHJvZmlsZV9hZnRlcl9leGl0KHNl
bGYpOgorICAgICAgICBwZXJmX2V4aXRjb2RlID0gc2VsZi5fcGVyZl9wcm9jZXNzLndhaXQoKQor
ICAgICAgICBpZiBwZXJmX2V4aXRjb2RlICE9IDA6CisgICAgICAgICAgICBwcmludCAiUGVyZiBm
YWlsZWQgKGV4aXQgY29kZTogJWkpLCBjYW4ndCBwcm9jZXNzIHJlc3VsdHMuIiAlIHBlcmZfZXhp
dGNvZGUKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQo
WydwdWxsJywgJy9kYXRhL3BlcmYuZGF0YScsIHNlbGYuX291dHB1dF9wYXRoXSkKKworICAgICAg
ICBwZXJmaG9zdF9wYXRoID0gc2VsZi5fZmluZF9wZXJmaG9zdCgpCisgICAgICAgIHBlcmZob3N0
X2FyZ3MgPSBbcGVyZmhvc3RfcGF0aCwgJ3JlcG9ydCcsICctZycsICdub25lJywgJy1pJywgc2Vs
Zi5fb3V0cHV0X3BhdGgsICctLXN5bWZzJywgc2VsZi5fc3ltZnNfcGF0aF0KKyAgICAgICAgcGVy
Zl9vdXRwdXQgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChwZXJmaG9zdF9hcmdz
KQorICAgICAgICAjIFdlIGNvdWxkIHNhdmUgb2ZmIHRoZSBmdWxsIC1nIHJlcG9ydCB0byBhIGZp
bGUgaWYgdXNlcnMgZm91bmQgdGhhdCB1c2VmdWwuCisgICAgICAgIHByaW50IHNlbGYuX2ZpcnN0
X3Rlbl9saW5lc19vZl9wcm9maWxlKHBlcmZfb3V0cHV0KQorCisgICAgICAgIHByaW50ICJUbyB2
aWV3IHRoZSBmdWxsIHByb2ZpbGUsIHJ1bjoiCisgICAgICAgIHByaW50ICcgJy5qb2luKFtwZXJm
aG9zdF9wYXRoLCAncmVwb3J0JywgJy1pJywgc2VsZi5fb3V0cHV0X3BhdGgsICctLXN5bWZzJywg
c2VsZi5fc3ltZnNfcGF0aF0pCisKKwogY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZl
ci5Ecml2ZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyLCBw
aXhlbF90ZXN0cywgbm9fdGltZW91dD1GYWxzZSk6CiAgICAgICAgIHN1cGVyKENocm9taXVtQW5k
cm9pZERyaXZlciwgc2VsZikuX19pbml0X18ocG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVz
dHMsIG5vX3RpbWVvdXQpCkBAIC0zNzIsMTAgKzQ1Niw0NyBAQCBjbGFzcyBDaHJvbWl1bUFuZHJv
aWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBw
b3J0Ll9nZXRfZGV2aWNlX3NlcmlhbCh3b3JrZXJfbnVtYmVyKQogICAgICAgICBzZWxmLl9hZGJf
Y29tbWFuZF9iYXNlID0gTm9uZQogCisgICAgICAgICMgRklYTUU6IElmIHdlIHRhdWdodCBQcm9m
aWxlRmFjdG9yeSBhYm91dCAidGFyZ2V0IiBkZXZpY2VzIHdlIGNvdWxkCisgICAgICAgICMganVz
dCB1c2UgdGhlIGxvZ2ljIGluIERyaXZlciBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGhlcmUu
CisgICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigicHJvZmlsZSIpOgorICAgICAgICAg
ICAgc3ltZnNfcGF0aCA9IHNlbGYuX2ZpbmRfb3JfY3JlYXRlX3N5bWZzKCkKKyAgICAgICAgICAg
IHNlbGYuX3Byb2ZpbGVyID0gQW5kcm9pZFBlcmYoc2VsZi5fcG9ydC5ob3N0LCBzZWxmLl9wb3J0
Ll9wYXRoX3RvX2RyaXZlcigpLCBzZWxmLl9wb3J0LnJlc3VsdHNfZGlyZWN0b3J5KCksCisgICAg
ICAgICAgICAgICAgc2VsZi5fZGV2aWNlX3NlcmlhbCwgc3ltZnNfcGF0aCkKKyAgICAgICAgICAg
IGlmIG5vdCBzZWxmLl9wcm9maWxlci5jaGVja19jb25maWd1cmF0aW9uKCk6CisgICAgICAgICAg
ICAgICAgc2VsZi5fcHJvZmlsZXIucHJpbnRfc2V0dXBfaW5zdHJ1Y3Rpb25zKCkKKyAgICAgICAg
ICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHJv
ZmlsZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2RlbGF5X3Bvc3Rfc3RhcnRfdGFza3MgPSBGYWxz
ZQorCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuX3RlYXJkb3duX3BlcmZv
cm1hbmNlKCkKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fX2Rl
bF9fKCkKIAorICAgIGRlZiBfZmluZF9vcl9jcmVhdGVfc3ltZnMoc2VsZik6CisgICAgICAgIGVu
dmlyb25tZW50ID0gc2VsZi5fcG9ydC5ob3N0LmNvcHlfY3VycmVudF9lbnZpcm9ubWVudCgpCisg
ICAgICAgIGVudiA9IGVudmlyb25tZW50LnRvX2RpY3Rpb25hcnkoKQorICAgICAgICBmcyA9IHNl
bGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtCisKKyAgICAgICAgaWYgJ0FORFJPSURfU1lNRlMnIGlu
IGVudjoKKyAgICAgICAgICAgIHN5bWZzX3BhdGggPSBlbnZbJ0FORFJPSURfU1lNRlMnXQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgc3ltZnNfcGF0aCA9IGZzLmpvaW4oc2VsZi5fcG9ydC5y
ZXN1bHRzX2RpcmVjdG9yeSgpLCAnc3ltZnMnKQorICAgICAgICAgICAgcHJpbnQgIkFORFJPSURf
U1lNRlMgbm90IHNldCwgdXNpbmcgJXMiICUgc3ltZnNfcGF0aAorCisgICAgICAgICMgZmluZCB0
aGUgaW5zdGFsbGVkIHBhdGgsIGFuZCB0aGUgcGF0aCBvZiB0aGUgc3ltYm9sZWQgYnVpbHQgbGli
cmFyeQorICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgZ2V0IHRoZSBpbnN0YWxsIHBhdGggZnJv
bSB0aGUgZGV2aWNlIQorICAgICAgICBzeW1mc19saWJyYXJ5X3BhdGggPSBmcy5qb2luKHN5bWZz
X3BhdGgsICJkYXRhL2FwcC1saWIvJXMtMS8lcyIgJSAoRFJUX0FQUF9QQUNLQUdFLCBEUlRfTElC
UkFSWV9OQU1FKSkKKyAgICAgICAgYnVpbHRfbGlicmFyeV9wYXRoID0gc2VsZi5fcG9ydC5fYnVp
bGRfcGF0aCgnbGliJywgRFJUX0xJQlJBUllfTkFNRSkKKyAgICAgICAgYXNzZXJ0KGZzLmV4aXN0
cyhidWlsdF9saWJyYXJ5X3BhdGgpKQorCisgICAgICAgICMgRklYTUU6IElkZWFsbHkgd2UnZCBj
aGVjayB0aGUgc2hhMSdzIGZpcnN0IGFuZCBtYWtlIGEgc29mdC1saW5rIGluc3RlYWQgb2YgY29w
eWluZyAoc2luY2Ugd2UgcHJvYmFibHkgbmV2ZXIgY2FyZSBhYm91dCB3aW5kb3dzKS4KKyAgICAg
ICAgcHJpbnQgIlVwZGF0aW5nIHN5bWZzIGxpYmFyeSAoJXMpIGZyb20gYnVpbHQgY29weSAoJXMp
IiAlIChzeW1mc19saWJyYXJ5X3BhdGgsIGJ1aWx0X2xpYnJhcnlfcGF0aCkKKyAgICAgICAgZnMu
bWF5YmVfbWFrZV9kaXJlY3RvcnkoZnMuZGlybmFtZShzeW1mc19saWJyYXJ5X3BhdGgpKQorICAg
ICAgICBmcy5jb3B5ZmlsZShidWlsdF9saWJyYXJ5X3BhdGgsIHN5bWZzX2xpYnJhcnlfcGF0aCkK
KworICAgICAgICByZXR1cm4gc3ltZnNfcGF0aAorCiAgICAgZGVmIF9zZXR1cF9tZDVzdW1fYW5k
X3B1c2hfZGF0YV9pZl9uZWVkZWQoc2VsZik6CiAgICAgICAgIHNlbGYuX21kNXN1bV9wYXRoID0g
c2VsZi5fcG9ydC5wYXRoX3RvX21kNXN1bSgpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlX2V4
aXN0c19vbl9kZXZpY2UoTUQ1U1VNX0RFVklDRV9QQVRIKToKQEAgLTYwNiw2ICs3MjcsNyBAQCBj
bGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIHNlbGYu
X2Fib3J0KCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24gbXVsdGlw
bGUgdGltZXMuIEdpdmUgdXAuJykKIAogICAgIGRlZiBfc3RhcnRfb25jZShzZWxmLCBwaXhlbF90
ZXN0cywgcGVyX3Rlc3RfYXJncyk6CisgICAgICAgIHNlbGYuX2RlbGF5X3Bvc3Rfc3RhcnRfdGFz
a3MgPSBUcnVlICAjIFRoaXMgaXMgYSBoYWNrIHRvIG5vdCBzdGFydCB0aGUgcHJvZmlsZXIgdW50
aWwgYWZ0ZXIgdGhlIHJlbW90ZSBwcm9jZXNzIGlzIGZ1bGx5IHNldHVwLgogICAgICAgICBzdXBl
cihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9zdGFydChwaXhlbF90ZXN0cywgcGVyX3Rl
c3RfYXJncykKIAogICAgICAgICBzZWxmLl9sb2dfZGVidWcoJ1N0YXJ0aW5nIGZvcndhcmRlcicp
CkBAIC02NzMsMTAgKzc5NSwzMSBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVy
LkRyaXZlcik6CiAgICAgICAgICAgICAjIGRlYWRsb2NrIGFuZCBraWxsZWQgdGhlIGZpZm8gcmVh
ZGluZy93cml0aW5nIHByb2Nlc3Nlcy4KICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0
byBzdGFydCBEdW1wUmVuZGVyVHJlZTogXG4lcycgJSBvdXRwdXQpCiAgICAgICAgICAgICByZXR1
cm4gRmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgSW5mb3JtIHRoZSBkZWFkbG9j
ayBkZXRlY3RvciB0aGF0IHRoZSBzdGFydHVwIGlzIHN1Y2Nlc3NmdWwgd2l0aG91dCBkZWFkbG9j
ay4KLSAgICAgICAgICAgIG5vcm1hbF9zdGFydHVwX2V2ZW50LnNldCgpCi0gICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgICAgIHNlbGYuX2RlbGF5X3Bvc3Rfc3RhcnRfdGFza3MgPSBGYWxz
ZQorICAgICAgICBzZWxmLl9ydW5fcG9zdF9zdGFydF90YXNrcygpCisKKyAgICAgICAgIyBJbmZv
cm0gdGhlIGRlYWRsb2NrIGRldGVjdG9yIHRoYXQgdGhlIHN0YXJ0dXAgaXMgc3VjY2Vzc2Z1bCB3
aXRob3V0IGRlYWRsb2NrLgorICAgICAgICBub3JtYWxfc3RhcnR1cF9ldmVudC5zZXQoKQorICAg
ICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToK
KyAgICAgICAgaWYgc2VsZi5fZGVsYXlfcG9zdF9zdGFydF90YXNrczoKKyAgICAgICAgICAgIHJl
dHVybgorICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9ydW5fcG9z
dF9zdGFydF90YXNrcygpCisKKyAgICBkZWYgX3BpZF9mcm9tX2FuZHJvaWRfcHNfb3V0cHV0KHNl
bGYsIHBzX291dHB1dCwgcGFja2FnZV9uYW1lKToKKyAgICAgICAgIyBwcyBvdXRwdXQgc2VlbXMg
dG8gYmUgZml4ZWQgd2lkdGgsIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgbmFtZSBhbmQgdGhlIHBp
ZAorICAgICAgICAjIHUwX2E3MiAgICAyMTYzMCAxMjUgICA5NDc5MjAgNTkzNjQgZmZmZmZmZmYg
NDAwYmVlZTQgUyBvcmcuY2hyb21pdW0ubmF0aXZlX3Rlc3QKKyAgICAgICAgZm9yIGxpbmUgaW4g
cHNfb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYgbGluZS5maW5kKERSVF9BUFBf
UEFDS0FHRSkgIT0gLTE6CisgICAgICAgICAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChyJ1xTK1xz
KyhcZCspJywgbGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KG1hdGNoLmdyb3VwKDEp
KQorCisgICAgZGVmIF9waWRfb25fdGFyZ2V0KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBUaGVy
ZSBtdXN0IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRoYW4gZ3JlcHBpbmcgcHMgb3V0cHV0
IQorICAgICAgICBwc19vdXRwdXQgPSBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdw
cyddKQorICAgICAgICByZXR1cm4gc2VsZi5fcGlkX2Zyb21fYW5kcm9pZF9wc19vdXRwdXQocHNf
b3V0cHV0LCBEUlRfQVBQX1BBQ0tBR0UpCiAKICAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICAg
c2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnYW0nLCAnZm9yY2Utc3RvcCcsIERSVF9B
UFBfUEFDS0FHRV0pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3QucHkKaW5k
ZXggYmVkOTg3ZjFiYzIxNGE1MGQ2OTExNjcyMTlkZTIwODgyZTBjNTlmYS4uNjA4MGEwOWQwYWYy
YTE1OTg3N2Y4Yzk0MTBiMWJkZDVhMzI5ZDNlMyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5k
cm9pZF91bml0dGVzdC5weQpAQCAtNDIsNiArNDIsNyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQg
aW1wb3J0IGRyaXZlcl91bml0dGVzdAogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9y
dCBNb2NrT3B0aW9ucwogCisKIGNsYXNzIE1vY2tSdW5Db21tYW5kKG9iamVjdCk6CiAgICAgZGVm
IF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzZWxmLl9tb2NrX2xvZ2NhdCA9ICcnCkBAIC0yNTgs
NiArMjU5LDY1IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlclRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICBleHBlY3RlZF9jb21tYW5kID0gImh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9mb28vYmFyL3Rlc3QuaHRtbCctLXBpeGVsLXRlc3QnY2hlY2tzdW1cbiIKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLmRyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dChkcml2
ZXJfaW5wdXQpLCBleHBlY3RlZF9jb21tYW5kKQogCisgICAgZGVmIHRlc3RfcGlkX2Zyb21fYW5k
cm9pZF9wc19vdXRwdXQoc2VsZik6CisgICAgICAgICMgRklYTUU6IFVzZSBhIGxhcmdlciBibG9i
IG9mIHBzIG91dHB1dC4KKyAgICAgICAgcHNfb3V0cHV0ID0gIiIidTBfYTcyICAgIDIxNjMwIDEy
NSAgIDk0NzkyMCA1OTM2NCBmZmZmZmZmZiA0MDBiZWVlNCBTIG9yZy5jaHJvbWl1bS5uYXRpdmVf
dGVzdCIiIgorICAgICAgICBwaWQgPSBzZWxmLmRyaXZlci5fcGlkX2Zyb21fYW5kcm9pZF9wc19v
dXRwdXQocHNfb3V0cHV0LCAib3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0IikKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChwaWQsIDIxNjMwKQorCisKK2NsYXNzIEFuZHJvaWRQZXJmVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcGVyZl9vdXRwdXRfcmVnZXhwKHNlbGYpOgor
ICAgICAgICBwZXJmX291dHB1dCA9ICIiIltrZXJuZWwua2FsbHN5bXNdIHdpdGggYnVpbGQgaWQg
NWEyMGY2Mjk5YmRiOTU1YTJmMDc3MTFiYjdmNjVjZDcwNmZlNzQ2OSBub3QgZm91bmQsIGNvbnRp
bnVpbmcgd2l0aG91dCBzeW1ib2xzCitGYWlsZWQgdG8gb3BlbiAvdG1wL3BlcmYtMTQxNjgubWFw
LCBjb250aW51aW5nIHdpdGhvdXQgc3ltYm9scworS2VybmVsIGFkZHJlc3MgbWFwcyAoL3Byb2Mv
e2thbGxzeW1zLG1vZHVsZXN9KSB3ZXJlIHJlc3RyaWN0ZWQuCisKK0NoZWNrIC9wcm9jL3N5cy9r
ZXJuZWwva3B0cl9yZXN0cmljdCBiZWZvcmUgcnVubmluZyAncGVyZiByZWNvcmQnLgorCitBcyBu
byBzdWl0YWJsZSBrYWxsc3ltcyBub3Igdm1saW51eCB3YXMgZm91bmQsIGtlcm5lbCBzYW1wbGVz
CitjYW4ndCBiZSByZXNvbHZlZC4KKworU2FtcGxlcyBpbiBrZXJuZWwgbW9kdWxlcyBjYW4ndCBi
ZSByZXNvbHZlZCBhcyB3ZWxsLgorCisjIEV2ZW50czogMzFLIGN5Y2xlcworIworIyBPdmVyaGVh
ZCAgICAgICAgICBDb21tYW5kICAgICAgICAgICAgICAgIFNoYXJlZCBPYmplY3QKKyMgLi4uLi4u
Li4gIC4uLi4uLi4uLi4uLi4uLiAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAuLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMKKyAgICAxNi4x
OCUgICBEdW1wUmVuZGVyVHJlZSAgcGVyZi0xNDE2OC5tYXAgICAgICAgICAgICAgICBbLl0gMHgy
MTI3MGFjMGNmNDMKKyAgICAxMi43MiUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUg
ICAgICAgICAgICAgICBbLl0gdjg6OmludGVybmFsOjpKU09iamVjdDo6R2V0RWxlbWVudFdpdGhJ
bnRlcmNlcHRvcih2ODo6aW50ZXJuYWw6Ok9iamVjdCosIHVuc2lnbmVkIGludCkKKyAgICAgOC4y
OCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gdjg6
OmludGVybmFsOjpMb2FkUHJvcGVydHlXaXRoSW50ZXJjZXB0b3JPbmx5KHY4OjppbnRlcm5hbDo6
QXJndW1lbnRzLCB2ODo6aW50ZXJuYWw6Oklzb2xhdGUqKQorICAgICA1LjYwJSAgIER1bXBSZW5k
ZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXVEY6OkF0b21pY1N0cmlu
ZyBXZWJDb3JlOjp2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxXVEY6OkF0b21pY1N0cmluZz4odjg6
OkhhbmRsZTx2ODo6U3RyaW5nPiwgV2ViQ29yZTo6RXh0ZXJuYWxNb2RlKQorICAgICA0LjYwJSAg
IER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJDb3Jl
OjpXZWFrUmVmZXJlbmNlTWFwPHZvaWQsIHY4OjpPYmplY3Q+OjpnZXQodm9pZCopCisgICAgIDMu
OTklICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIF9a
TkszV1RGN0hhc2hNYXBJUE5TXzE2QXRvbWljU3RyaW5nSW1wbEVQTjdXZWJDb3JlN0VsZW1lbnRF
TlNfN1B0ckhhc2hJUzJfRUVOU18xMEhhc2hUcmFpdHNJUzJfRUVOUzhfSVM1X0VFRTNnZXRFUktT
Ml8uaXNyYS45OAorICAgICAzLjY5JSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAg
ICAgICAgICAgICAgIFsuXSBXZWJDb3JlOjpEb2N1bWVudFY4SW50ZXJuYWw6OmdldEVsZW1lbnRC
eUlkQ2FsbGJhY2sodjg6OkFyZ3VtZW50cyBjb25zdCYpCisgICAgIDMuMjMlICAgRHVtcFJlbmRl
clRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OlY4UGFyYW1l
dGVyQmFzZTo6cHJlcGFyZUJhc2UoKQorICAgICAyLjgzJSAgIER1bXBSZW5kZXJUcmVlICBEdW1w
UmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXVEY6OkF0b21pY1N0cmluZzo6YWRkKHVuc2ln
bmVkIHNob3J0IGNvbnN0KiwgdW5zaWduZWQgaW50KQorICAgICAyLjczJSAgIER1bXBSZW5kZXJU
cmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJDb3JlOjpEb2N1bWVudFY4
SW50ZXJuYWw6OmdldEVsZW1lbnRzQnlUYWdOYW1lQ2FsbGJhY2sodjg6OkFyZ3VtZW50cyBjb25z
dCYpCisgICAgIDIuNDclICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAg
ICAgICAgWy5dIF9aTjJ2ODZPYmplY3QyN0dldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZEVpLmNv
bnN0cHJvcC40MzkKKyAgICAgMi40MyUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUg
ICAgICAgICAgICAgICBbLl0gdjg6OmludGVybmFsOjpJc29sYXRlOjpTZXRDdXJyZW50Vk1TdGF0
ZSh2ODo6aW50ZXJuYWw6OlN0YXRlVGFnKQorICAgICAyLjM0JSAgIER1bXBSZW5kZXJUcmVlICBE
dW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXVEY6Okhhc2hUYWJsZUFkZFJlc3VsdDxX
VEY6Okhhc2hUYWJsZUl0ZXJhdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBXVEY6OkF0b21p
Y1N0cmluZz4sIFdURjo6S2V5VmFsdWVQYWlyPHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBXVEY6
OkF0b21pY1N0cmluZz4sIFdlYkNvcgorICAgICAyLjI4JSAgIER1bXBSZW5kZXJUcmVlICBEdW1w
UmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6
OmdldEVsZW1lbnRCeUlkKFdURjo6QXRvbWljU3RyaW5nSW1wbCosIFdlYkNvcmU6OlRyZWVTY29w
ZSBjb25zdCopIGNvbnN0CisgICAgIDIuMTUlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJU
cmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OlY4Tm9kZUxpc3Q6Om5hbWVkUHJvcGVydHlH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+LCB2ODo6QWNjZXNzb3JJbmZvIGNvbnN0JikKKyAg
ICAgMi4wNiUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBb
Ll0gV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkhUTUxUYWdOb2RlTGlzdD4gV2ViQ29yZTo6Tm9k
ZUxpc3RzTm9kZURhdGE6OmFkZENhY2hlV2l0aEF0b21pY05hbWU8V2ViQ29yZTo6SFRNTFRhZ05v
ZGVMaXN0PihXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0OjoKKyAgICAg
MS4xOCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0g
V2ViQ29yZTo6Tm9kZVY4SW50ZXJuYWw6Om5vZGVUeXBlQXR0ckdldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZz4sIHY4OjpBY2Nlc3NvckluZm8gY29uc3QmKQorICAgICAxLjA4JSAgIER1bXBSZW5k
ZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJDb3JlOjpOb2RlOjpn
ZXRFbGVtZW50c0J5VGFnTmFtZShXVEY6OkF0b21pY1N0cmluZyBjb25zdCYpCisiIiIKKyAgICAg
ICAgZXhwZWN0ZWRfZmlyc3RfdGVuX2xpbmVzID0gIiIiICAgIDE2LjE4JSAgIER1bXBSZW5kZXJU
cmVlICBwZXJmLTE0MTY4Lm1hcCAgICAgICAgICAgICAgIFsuXSAweDIxMjcwYWMwY2Y0MworICAg
IDEyLjcyJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsu
XSB2ODo6aW50ZXJuYWw6OkpTT2JqZWN0OjpHZXRFbGVtZW50V2l0aEludGVyY2VwdG9yKHY4Ojpp
bnRlcm5hbDo6T2JqZWN0KiwgdW5zaWduZWQgaW50KQorICAgICA4LjI4JSAgIER1bXBSZW5kZXJU
cmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSB2ODo6aW50ZXJuYWw6OkxvYWRQ
cm9wZXJ0eVdpdGhJbnRlcmNlcHRvck9ubHkodjg6OmludGVybmFsOjpBcmd1bWVudHMsIHY4Ojpp
bnRlcm5hbDo6SXNvbGF0ZSopCisgICAgIDUuNjAlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5k
ZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdURjo6QXRvbWljU3RyaW5nIFdlYkNvcmU6OnY4U3Ry
aW5nVG9XZWJDb3JlU3RyaW5nPFdURjo6QXRvbWljU3RyaW5nPih2ODo6SGFuZGxlPHY4OjpTdHJp
bmc+LCBXZWJDb3JlOjpFeHRlcm5hbE1vZGUpCisgICAgIDQuNjAlICAgRHVtcFJlbmRlclRyZWUg
IER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OldlYWtSZWZlcmVuY2VN
YXA8dm9pZCwgdjg6Ok9iamVjdD46OmdldCh2b2lkKikKKyAgICAgMy45OSUgICBEdW1wUmVuZGVy
VHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gX1pOSzNXVEY3SGFzaE1hcElQ
TlNfMTZBdG9taWNTdHJpbmdJbXBsRVBON1dlYkNvcmU3RWxlbWVudEVOU183UHRySGFzaElTMl9F
RU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TOF9JUzVfRUVFM2dldEVSS1MyXy5pc3JhLjk4CisgICAg
IDMuNjklICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5d
IFdlYkNvcmU6OkRvY3VtZW50VjhJbnRlcm5hbDo6Z2V0RWxlbWVudEJ5SWRDYWxsYmFjayh2ODo6
QXJndW1lbnRzIGNvbnN0JikKKyAgICAgMy4yMyUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRl
clRyZWUgICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6VjhQYXJhbWV0ZXJCYXNlOjpwcmVwYXJl
QmFzZSgpCisgICAgIDIuODMlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAg
ICAgICAgICAgWy5dIFdURjo6QXRvbWljU3RyaW5nOjphZGQodW5zaWduZWQgc2hvcnQgY29uc3Qq
LCB1bnNpZ25lZCBpbnQpCisgICAgIDIuNzMlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJU
cmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OkRvY3VtZW50VjhJbnRlcm5hbDo6Z2V0RWxl
bWVudHNCeVRhZ05hbWVDYWxsYmFjayh2ODo6QXJndW1lbnRzIGNvbnN0JikKKyIiIgorICAgICAg
ICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoKQorICAgICAgICBwcm9maWxlciA9IGNocm9taXVtX2Fu
ZHJvaWQuQW5kcm9pZFBlcmYoaG9zdCwgJy9iaW4vZXhlY3V0YWJsZScsICcvdG1wL291dHB1dCcs
ICdkZXZpY2Utc2VyaWFsJywgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZmls
ZXIuX2ZpcnN0X3Rlbl9saW5lc19vZl9wcm9maWxlKHBlcmZfb3V0cHV0KSwgZXhwZWN0ZWRfZmly
c3RfdGVuX2xpbmVzKQorCiAKIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlclR3b0RyaXZlcnNU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF90d29fZHJpdmVycyhzZWxmKToK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJp
dmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIu
cHkKaW5kZXggNzA4MjA0OTZjZjIxOTE0OGVhMjg1Mzc3NjBhMTU0ZWM1ODU4ZDVmNi4uNWE1OTdi
MGIyMmNmNjk4N2Y0NjI1NzU0NzQ4OTFjZWIyMmQ1M2FjMiAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKQEAgLTI3NywxMSArMjc3
LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9zZXJ2ZXJf
cHJvY2VzczoKICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9h
cmdzKQogCi0gICAgZGVmIF9zdGFydChzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6
Ci0gICAgICAgIHNlbGYuc3RvcCgpCi0gICAgICAgIHNlbGYuX2RyaXZlcl90ZW1wZGlyID0gc2Vs
Zi5fcG9ydC5fZmlsZXN5c3RlbS5ta2R0ZW1wKHByZWZpeD0nJXMtJyAlIHNlbGYuX3BvcnQuZHJp
dmVyX25hbWUoKSkKLSAgICAgICAgc2VydmVyX25hbWUgPSBzZWxmLl9wb3J0LmRyaXZlcl9uYW1l
KCkKLSAgICAgICAgZW52aXJvbm1lbnQgPSBzZWxmLl9wb3J0LnNldHVwX2Vudmlyb25fZm9yX3Nl
cnZlcihzZXJ2ZXJfbmFtZSkKKyAgICBkZWYgX2FkanVzdF9lbnZpcm9ubWVudF9mb3JfZHJpdmVy
KHNlbGYsIGVudmlyb25tZW50KToKICAgICAgICAgZW52aXJvbm1lbnRbJ0RZTERfTElCUkFSWV9Q
QVRIJ10gPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKICAgICAgICAgZW52aXJvbm1lbnRbJ0RZ
TERfRlJBTUVXT1JLX1BBVEgnXSA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKQogICAgICAgICAj
IEZJWE1FOiBXZSdyZSBhc3N1bWluZyB0aGF0IFdlYktpdFRlc3RSdW5uZXIgY2hlY2tzIHRoaXMg
RHVtcFJlbmRlclRyZWUtbmFtZWQgZW52aXJvbm1lbnQgdmFyaWFibGUuCkBAIC0yOTEsMTIgKzI4
NywyNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgICAgIGVudmlyb25tZW50WydX
RUJLSVRPVVRQVVRESVInXSA9IG9zLmVudmlyb25bJ1dFQktJVE9VVFBVVERJUiddCiAgICAgICAg
IGlmIHNlbGYuX3Byb2ZpbGVyOgogICAgICAgICAgICAgZW52aXJvbm1lbnQgPSBzZWxmLl9wcm9m
aWxlci5hZGp1c3RlZF9lbnZpcm9ubWVudChlbnZpcm9ubWVudCkKKworICAgIGRlZiBfc3RhcnQo
c2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgorICAgICAgICBzZWxmLnN0b3AoKQor
ICAgICAgICBzZWxmLl9kcml2ZXJfdGVtcGRpciA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0ubWtk
dGVtcChwcmVmaXg9JyVzLScgJSBzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCkpCisgICAgICAgIHNl
cnZlcl9uYW1lID0gc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpCisgICAgICAgIGVudmlyb25tZW50
ID0gc2VsZi5fcG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VydmVyX25hbWUpCisgICAg
ICAgIGVudmlyb25tZW50ID0gc2VsZi5fYWRqdXN0X2Vudmlyb25tZW50X2Zvcl9kcml2ZXIoZW52
aXJvbm1lbnQpCiAgICAgICAgIHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lID0gTm9uZQogICAg
ICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9IE5vbmUKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nl
c3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBz
ZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGluZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVu
dmlyb25tZW50KQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCisgICAgICAg
IHNlbGYuX3J1bl9wb3N0X3N0YXJ0X3Rhc2tzKCkKKworICAgIGRlZiBfcnVuX3Bvc3Rfc3RhcnRf
dGFza3Moc2VsZik6CisgICAgICAgICMgUmVtb3RlIGRyaXZlcnMgbWF5IG92ZXJyaWRlIHRoaXMg
dG8gZGVsYXkgcG9zdC1zdGFydCB0YXNrcyB1bnRpbCB0aGUgc2VydmVyIGhhcyBhY2snZC4KICAg
ICAgICAgaWYgc2VsZi5fcHJvZmlsZXI6Ci0gICAgICAgICAgICBzZWxmLl9wcm9maWxlci5hdHRh
Y2hfdG9fcGlkKHNlbGYuX3NlcnZlcl9wcm9jZXNzLnBpZCgpKQorICAgICAgICAgICAgc2VsZi5f
cHJvZmlsZXIuYXR0YWNoX3RvX3BpZChzZWxmLl9waWRfb25fdGFyZ2V0KCkpCisKKyAgICBkZWYg
X3BpZF9vbl90YXJnZXQoc2VsZik6CisgICAgICAgICMgUmVtb3RlIGRyaXZlcnMgd2lsbCBvdmVy
cmlkZSB0aGlzIG1ldGhvZCB0byByZXR1cm4gdGhlIHBpZCBvbiB0aGUgZGV2aWNlLgorICAgICAg
ICByZXR1cm4gc2VsZi5fc2VydmVyX3Byb2Nlc3MucGlkKCkKIAogICAgIGRlZiBzdG9wKHNlbGYp
OgogICAgICAgICBpZiBzZWxmLl9zZXJ2ZXJfcHJvY2VzczoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178627</attachid>
            <date>2012-12-10 13:47:13 -0800</date>
            <delta_ts>2012-12-12 13:44:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103587-20121210134435.patch</filename>
            <type>text/plain</type>
            <size>22810</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MTk0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWI1NGI2YTIyZDdmZjYxNTU1NDc4YTA3OWU4OGIwYTg0
MjUzMzI2MC4uMmZhYWJkYzg5ZTM0NmEyYTJiZjEyZmVmMTUyZmNhOTc1YmZiN2RjYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5
IEBACisyMDEyLTEyLTEwICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBBZGQgc3VwcG9ydCBmb3IgcnVuLXBlcmYtdGVzdHMgLS1jaHJvbWl1bS1hbmRyb2lkIC0tcHJv
ZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAz
NTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBtYWtlcyBpdCBwb3NzaWJsZSB0byBwcm9maWxlIFBlcmZvcm1hbmNlVGVzdHMgb24gYW4gQW5k
cm9pZCBkZXZpY2UKKyAgICAgICAgdXNpbmcgcnVuLXBlcmYtdGVzdHMgLS1jaHJvbWl1bS1hbmRy
b2lkIC0tcHJvZmlsZS4KKyAgICAgICAgQ1BVIHByb2ZpbGluZyBvbiBBbmRyb2lkIGlzIHNhZGx5
IG5vbi10cml2aWFsLCBidXQgdGhpcyBnb2VzIGEgbG9uZworICAgICAgICB3YXlzIHRvd2FyZHMg
bWFraW5nIGl0IG1vcmUgYWNjZXNzaWJsZSB0byBub24tQW5kcm9pZCBkZXZlbG9wZXJzLgorCisg
ICAgICAgIEFsdGhvdWdoIHRoaXMgc2NyaXB0IHJlcXVpcmVzIHlvdXIgZGV2aWNlIHRvIGJlIGZs
YXNoZWQgd2l0aCBhCisgICAgICAgIHVzZXJkZWJ1ZyBidWlsZCAoYW4gYW5ub3lpbmdseSBub24t
dHJpdmlhbCBlbmRlYXZvciBmb3IgZXh0ZXJuYWwgY29udHJpYnV0b3JzKQorICAgICAgICBpdCBl
bmRlYXZvcnMgdG8gZGV0ZWN0IGFuZCBleHBsYWluIHRoZSBjb21tb24gZXJyb3JzIGVuY291bnRl
cmVkCisgICAgICAgIHdoaWxlIHRyeWluZyB0byBzZXR1cCBhIGRldmljZSBmb3IgcGVyZi1iYXNl
ZCBwcm9maWxpbmcuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAgICAgIChBbmRyb2lkUGVyZik6CisgICAgICAg
IChBbmRyb2lkUGVyZi5fX2luaXRfXyk6CisgICAgICAgIChBbmRyb2lkUGVyZi5jaGVja19jb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKEFuZHJvaWRQZXJmLnByaW50X3NldHVwX2luc3RydWN0aW9u
cyk6CisgICAgICAgIChfZmlsZV9leGlzdHNfb25fZGV2aWNlKToKKyAgICAgICAgKF9ydW5fYWRi
X2NvbW1hbmQpOgorICAgICAgICAoYXR0YWNoX3RvX3BpZCk6CisgICAgICAgIChfZmluZF9wZXJm
aG9zdCk6CisgICAgICAgIChfZmlyc3RfdGVuX2xpbmVzX29mX3Byb2ZpbGUpOgorICAgICAgICAo
cHJvZmlsZV9hZnRlcl9leGl0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fX2lu
aXRfXyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2ZpbmRfb3JfY3JlYXRlX3N5
bWZzKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRfb25jZSk6CisgICAg
ICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9ydW5fcG9zdF9zdGFydF90YXNrcyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2
ZXIuX3BpZF9mcm9tX2FuZHJvaWRfcHNfb3V0cHV0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9p
ZERyaXZlci5fcGlkX29uX3RhcmdldCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5OgorICAgICAgICAoQ2hy
b21pdW1BbmRyb2lkRHJpdmVyVGVzdC50ZXN0X3BpZF9mcm9tX2FuZHJvaWRfcHNfb3V0cHV0KToK
KyAgICAgICAgKEFuZHJvaWRQZXJmVGVzdCk6CisgICAgICAgIChBbmRyb2lkUGVyZlRlc3QudGVz
dF9wZXJmX291dHB1dF9yZWdleHApOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLl9hZGp1c3RfZW52aXJvbm1l
bnRfZm9yX2RyaXZlcik6CisgICAgICAgIChEcml2ZXIpOgorICAgICAgICAoRHJpdmVyLl9zdGFy
dCk6CisgICAgICAgIChEcml2ZXIuX3J1bl9wb3N0X3N0YXJ0X3Rhc2tzKToKKyAgICAgICAgKERy
aXZlci5fcGlkX29uX3RhcmdldCk6CisKIDIwMTItMTItMTAgIEpvY2hlbiBFaXNpbmdlciAgPGpv
Y2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBNb3ZlIHRoZSB0ZXN0IGlt
cGxlbWVudGF0aW9uIG9mIFdlYktpdDo6V2ViUGx1Z2luIHRvIHRoZSBUZXN0UnVubmVyIGxpYnJh
cnkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW1fYW5kcm9pZC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQppbmRleCA5ZDc3YTU1MzhiZTAyNTYwZTg5NDUwNDdh
Mzc2ZWNkNDY4YTc4ZjA5Li41NzM5OWZmNjFjNjIwZDRlZWE4ODZmZGEzMWRlZDAwM2IwYWE1NjRl
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2No
cm9taXVtX2FuZHJvaWQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CkBAIC0zMCw2ICszMCw3IEBAIGltcG9ydCBjb3B5
CiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMKIGltcG9y
dCBzdWJwcm9jZXNzCiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQpAQCAtMzgsNyArMzks
NyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJvbWl1bQogZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZHJpdmVyCiBmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBmYWN0b3J5CiBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcwotCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0ucHJvZmlsZXIgaW1wb3J0IFNpbmdsZUZpbGVPdXRwdXRQcm9maWxlcgogCiBfbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKQEAgLTYwLDYgKzYxLDcgQEAgREVWSUNFX0ZJ
Rk9fUEFUSCA9ICcvZGF0YS9kYXRhL29yZy5jaHJvbWl1bS5uYXRpdmVfdGVzdC9maWxlcy8nCiBE
UlRfQVBQX1BBQ0tBR0UgPSAnb3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0JwogRFJUX0FDVElWSVRZ
X0ZVTExfTkFNRSA9IERSVF9BUFBfUEFDS0FHRSArICcvLkNocm9tZU5hdGl2ZVRlc3RBY3Rpdml0
eScKIERSVF9BUFBfQ0FDSEVfRElSID0gREVWSUNFX0RSVF9ESVIgKyAnY2FjaGUvJworRFJUX0xJ
QlJBUllfTkFNRSA9ICdsaWJEdW1wUmVuZGVyVHJlZS5zbycKIAogU0NBTElOR19HT1ZFUk5PUlNf
UEFUVEVSTiA9ICIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NwdWZyZXEvc2NhbGluZ19n
b3Zlcm5vciIKIApAQCAtMzU3LDYgKzM1OSwxMjMgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9y
dChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICByZXR1cm4gZGV2aWNlc1t3b3JrZXJf
bnVtYmVyXQogCiAKK2NsYXNzIEFuZHJvaWRQZXJmKFNpbmdsZUZpbGVPdXRwdXRQcm9maWxlcik6
CisgICAgX2NhY2hlZF9wZXJmX2hvc3RfcGF0aCA9IE5vbmUKKyAgICBfaGF2ZV9zZWFyY2hlZF9m
b3JfcGVyZl9ob3N0ID0gRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBleGVj
dXRhYmxlX3BhdGgsIG91dHB1dF9kaXIsIGFkYl9wYXRoLCBkZXZpY2Vfc2VyaWFsLCBzeW1mc19w
YXRoLCBpZGVudGlmaWVyPU5vbmUpOgorICAgICAgICBzdXBlcihBbmRyb2lkUGVyZiwgc2VsZiku
X19pbml0X18oaG9zdCwgZXhlY3V0YWJsZV9wYXRoLCBvdXRwdXRfZGlyLCAiZGF0YSIsIGlkZW50
aWZpZXIpCisgICAgICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBkZXZpY2Vfc2VyaWFsCisgICAg
ICAgIHNlbGYuX2FkYl9jb21tYW5kID0gW2FkYl9wYXRoLCAnLXMnLCBzZWxmLl9kZXZpY2Vfc2Vy
aWFsXQorICAgICAgICBzZWxmLl9wZXJmX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3N5
bWZzX3BhdGggPSBzeW1mc19wYXRoCisKKyAgICBkZWYgY2hlY2tfY29uZmlndXJhdGlvbihzZWxm
KToKKyAgICAgICAgIyBDaGVjayB0aGF0IHBlcmYgaXMgaW5zdGFsbGVkCisgICAgICAgIGlmIG5v
dCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2UoJy9zeXN0ZW0vYmluL3BlcmYnKToKKyAgICAg
ICAgICAgIHByaW50ICJDYW5ub3QgZmluZCAvc3lzdGVtL2Jpbi9wZXJmIG9uIGRldmljZSAlcyIg
JSBzZWxmLl9kZXZpY2Vfc2VyaWFsCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAg
IyBDaGVjayB0aGF0IHRoZSBkZXZpY2UgaXMgYSB1c2VyZGVidWcgYnVpbGQgKG9yIGF0IGxlYXN0
IGhhcyB0aGUgbmVjZXNzYXJ5IGxpYnJhcmllcykuCisgICAgICAgIGlmIHNlbGYuX3J1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ2dldHByb3AnLCAncm8uYnVpbGQudHlwZSddKS5zdHJpcCgpICE9
ICd1c2VyZGVidWcnOgorICAgICAgICAgICAgcHJpbnQgIkRldmljZSAlcyBpcyBub3QgZmxhc2hl
ZCB3aXRoIGEgdXNlcmRlYnVnIGJ1aWxkIG9mIEFuZHJvaWQiICUgc2VsZi5fZGV2aWNlX3Nlcmlh
bAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgYmlu
YXJ5IGFjdHVhbGx5IGlzIHBlcmYtYWJsZSAoaGFzIHN0YWNrZnJhbWUgcG9pbnRlcnMpPworICAg
ICAgICAjIG9iamR1bXAgLXMgYSBmdW5jdGlvbiBhbmQgbWFrZSBzdXJlIGl0IG1vZGlmaWVzIHRo
ZSBmcD8KKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBwcmludF9zZXR1cF9pbnN0cnVj
dGlvbnMoc2VsZik6CisgICAgICAgIHByaW50ICIiIgorcGVyZiBvbiBhbmRyb2lkIHJlcXVpcmVz
IGEgJ3VzZXJkZWJ1ZycgYnVpbGQgb2YgQW5kcm9pZCwgc2VlOgoraHR0cDovL3NvdXJjZS5hbmRy
b2lkLmNvbS9zb3VyY2UvYnVpbGRpbmctZGV2aWNlcy5odG1sIgorCitUaGUgcGVyZiBjb21tYW5k
IGNhbiBiZSBidWlsdCBmcm9tOgoraHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxh
dGZvcm0vZXh0ZXJuYWwvbGludXgtdG9vbHMtcGVyZi8KK2FuZCByZXF1aXJlcyBsaWJlZmwsIGxp
YmVibCwgbGliZHcsIGFuZCBsaWJkd2ZsIGF2YWlsYWJsZSBpbjoKK2h0dHBzOi8vYW5kcm9pZC5n
b29nbGVzb3VyY2UuY29tL3BsYXRmb3JtL2V4dGVybmFsL2VsZnV0aWxzLworCitEdW1wUmVuZGVy
VHJlZSBtdXN0IGJlIGJ1aWx0IHdpdGggcHJvZmlsaW5nPTEsIG1ha2Ugc3VyZSB5b3UndmUgZG9u
ZToKK2V4cG9ydCBHWVBfREVGSU5FUz0icHJvZmlsaW5nPTEgJEdZUF9ERUZJTkVTIgordXBkYXRl
LXdlYmtpdCAtLWNocm9taXVtLWFuZHJvaWQKK2J1aWxkLXdlYmtpdCAtLWNocm9taXVtLWFuZHJv
aWQKKworR29vZ2xlcnMgc2hvdWxkIHJlYWQ6CitodHRwOi8vZ290by5nb29nbGUuY29tL2NyLWFu
ZHJvaWQtcGVyZi1ob3d0bworIiIiCisKKyAgICBkZWYgX2ZpbGVfZXhpc3RzX29uX2RldmljZShz
ZWxmLCBmdWxsX2ZpbGVfcGF0aCk6CisgICAgICAgIGFzc2VydCBmdWxsX2ZpbGVfcGF0aC5zdGFy
dHN3aXRoKCcvJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxs
JywgJ2xzJywgZnVsbF9maWxlX3BhdGhdKS5zdHJpcCgpID09IGZ1bGxfZmlsZV9wYXRoCisKKyAg
ICBkZWYgX3J1bl9hZGJfY29tbWFuZChzZWxmLCBjbWQpOgorICAgICAgICByZXR1cm4gc2VsZi5f
aG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1hbmQgKyBjbWQpCisKKyAg
ICBkZWYgYXR0YWNoX3RvX3BpZChzZWxmLCBwaWQpOgorICAgICAgICBhc3NlcnQocGlkKQorICAg
ICAgICBhc3NlcnQoc2VsZi5fcGVyZl9wcm9jZXNzID09IE5vbmUpCisgICAgICAgICMgRklYTUU6
IFRoaXMgY2FuJ3QgYmUgYSBmaXhlZCB0aW1lb3V0IQorICAgICAgICBjbWQgPSBzZWxmLl9hZGJf
Y29tbWFuZCArIFsnc2hlbGwnLCAncGVyZicsICdyZWNvcmQnLCAnLWcnLCAnLXAnLCBwaWQsICdz
bGVlcCcsIDMwXQorICAgICAgICBjbWQgPSBtYXAodW5pY29kZSwgY21kKQorICAgICAgICBzZWxm
Ll9wZXJmX3Byb2Nlc3MgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5wb3BlbihjbWQpCisKKyAgICBk
ZWYgX3BlcmZfdmVyc2lvbl9zdHJpbmcoc2VsZiwgcGVyZl9wYXRoKToKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFtwZXJm
X3BhdGgsICctLXZlcnNpb24nXSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJu
IE5vbmUKKworICAgIGRlZiBfZmluZF9wZXJmaG9zdF9iaW5hcnkoc2VsZik6CisgICAgICAgIHBl
cmZob3N0X3ZlcnNpb24gPSBzZWxmLl9wZXJmX3ZlcnNpb25fc3RyaW5nKCdwZXJmaG9zdF9saW51
eCcpCisgICAgICAgIGlmIHBlcmZob3N0X3ZlcnNpb246CisgICAgICAgICAgICByZXR1cm4gJ3Bl
cmZob3N0X2xpbnV4JworICAgICAgICBwZXJmX3ZlcnNpb24gPSBzZWxmLl9wZXJmX3ZlcnNpb25f
c3RyaW5nKCdwZXJmJykKKyAgICAgICAgaWYgcGVyZl92ZXJzaW9uOgorICAgICAgICAgICAgcmV0
dXJuICdwZXJmJworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9wZXJmaG9zdF9wYXRo
KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9oYXZlX3NlYXJjaGVkX2Zvcl9wZXJmX2hvc3Q6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkX3BlcmZfaG9zdF9wYXRoCisgICAgICAgIHNl
bGYuX2hhdmVfc2VhcmNoZWRfZm9yX3BlcmZfaG9zdCA9IFRydWUKKyAgICAgICAgc2VsZi5fY2Fj
aGVkX3BlcmZfaG9zdF9wYXRoID0gc2VsZi5fZmluZF9wZXJmaG9zdF9iaW5hcnkoKQorICAgICAg
ICByZXR1cm4gc2VsZi5fY2FjaGVkX3BlcmZfaG9zdF9wYXRoCisKKyAgICBkZWYgX2ZpcnN0X3Rl
bl9saW5lc19vZl9wcm9maWxlKHNlbGYsIHBlcmZfb3V0cHV0KToKKyAgICAgICAgbWF0Y2ggPSBy
ZS5zZWFyY2goIl4jW15cbl0qXG4oKD86IFteXG5dKlxuKXsxLDEwfSkiLCBwZXJmX291dHB1dCwg
cmUuTVVMVElMSU5FKQorICAgICAgICByZXR1cm4gbWF0Y2guZ3JvdXAoMSkgaWYgbWF0Y2ggZWxz
ZSBOb25lCisKKyAgICBkZWYgcHJvZmlsZV9hZnRlcl9leGl0KHNlbGYpOgorICAgICAgICBwZXJm
X2V4aXRjb2RlID0gc2VsZi5fcGVyZl9wcm9jZXNzLndhaXQoKQorICAgICAgICBpZiBwZXJmX2V4
aXRjb2RlICE9IDA6CisgICAgICAgICAgICBwcmludCAiUGVyZiBmYWlsZWQgKGV4aXQgY29kZTog
JWkpLCBjYW4ndCBwcm9jZXNzIHJlc3VsdHMuIiAlIHBlcmZfZXhpdGNvZGUKKyAgICAgICAgICAg
IHJldHVybgorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydwdWxsJywgJy9kYXRhL3Bl
cmYuZGF0YScsIHNlbGYuX291dHB1dF9wYXRoXSkKKworICAgICAgICBwZXJmaG9zdF9wYXRoID0g
c2VsZi5fcGVyZmhvc3RfcGF0aCgpCisgICAgICAgIGlmIHBlcmZob3N0X3BhdGg6CisgICAgICAg
ICAgICBwZXJmaG9zdF9hcmdzID0gW3BlcmZob3N0X3BhdGgsICdyZXBvcnQnLCAnLWcnLCAnbm9u
ZScsICctaScsIHNlbGYuX291dHB1dF9wYXRoLCAnLS1zeW1mcycsIHNlbGYuX3N5bWZzX3BhdGhd
CisgICAgICAgICAgICBwZXJmX291dHB1dCA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKHBlcmZob3N0X2FyZ3MpCisgICAgICAgICAgICAjIFdlIGNvdWxkIHNhdmUgb2ZmIHRoZSBm
dWxsIC1nIHJlcG9ydCB0byBhIGZpbGUgaWYgdXNlcnMgZm91bmQgdGhhdCB1c2VmdWwuCisgICAg
ICAgICAgICBwcmludCBzZWxmLl9maXJzdF90ZW5fbGluZXNfb2ZfcHJvZmlsZShwZXJmX291dHB1
dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICIiIgorRmFpbGVkIHRvIGZpbmQg
cGVyZmhvc3RfbGludXggYmluYXJ5LCBjYW4ndCBwcm9jZXNzIHNhbXBsZXMgZnJvbSB0aGUgZGV2
aWNlLgorCitwZXJmaG9zdF9saW51eCBjYW4gYmUgYnVpbHQgZnJvbToKK2h0dHBzOi8vYW5kcm9p
ZC5nb29nbGVzb3VyY2UuY29tL3BsYXRmb3JtL2V4dGVybmFsL2xpbnV4LXRvb2xzLXBlcmYvCith
bHNvLCBtb2Rlcm4gdmVyc2lvbnMgb2YgcGVyZiAoYXZhaWxhYmxlIGZyb20gYXB0LWdldCBpbnN0
YWxsIGdvb2J1bnR1LWtlcm5lbC10b29scy1jb21tb24pCittYXkgYWxzbyBiZSBhYmxlIHRvIHBy
b2Nlc3MgdGhlIHBlcmYuZGF0YSBmaWxlcyBmcm9tIHRoZSBkZXZpY2UuCisKK0dvb2dsZXJzIHNo
b3VsZCByZWFkOgoraHR0cDovL2dvdG8uZ29vZ2xlLmNvbS9jci1hbmRyb2lkLXBlcmYtaG93dG8K
K2ZvciBpbnN0cnVjdGlvbnMgb24gaW5zdGFsbGluZyBwcmUtYnVpbHQgY29waWVzIG9mIHBlcmZo
b3N0X2xpbnV4CitodHRwOi8vY3JidWcuY29tLzE2NTI1MCBkaXNjdXNzZXMgbWFraW5nIHRoZXNl
IHByZS1idWlsdCBiaW5hcmllcyBleHRlcm5hbGx5IGF2YWlsYWJsZS4KKyIiIgorCisgICAgICAg
IHBlcmZob3N0X2Rpc3BsYXlfcGF0Y2ggPSBwZXJmaG9zdF9wYXRoIGlmIHBlcmZob3N0X3BhdGgg
ZWxzZSAncGVyZmhvc3RfbGludXgnCisgICAgICAgIHByaW50ICJUbyB2aWV3IHRoZSBmdWxsIHBy
b2ZpbGUsIHJ1bjoiCisgICAgICAgIHByaW50ICcgJy5qb2luKFtwZXJmaG9zdF9kaXNwbGF5X3Bh
dGNoLCAncmVwb3J0JywgJy1pJywgc2VsZi5fb3V0cHV0X3BhdGgsICctLXN5bWZzJywgc2VsZi5f
c3ltZnNfcGF0aF0pCisKKwogY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2
ZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90
ZXN0cywgbm9fdGltZW91dD1GYWxzZSk6CiAgICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERy
aXZlciwgc2VsZikuX19pbml0X18ocG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHMsIG5v
X3RpbWVvdXQpCkBAIC0zNzIsMTAgKzQ5MSw0OCBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2
ZXIoZHJpdmVyLkRyaXZlcik6CiAgICAgICAgIHNlbGYuX2RldmljZV9zZXJpYWwgPSBwb3J0Ll9n
ZXRfZGV2aWNlX3NlcmlhbCh3b3JrZXJfbnVtYmVyKQogICAgICAgICBzZWxmLl9hZGJfY29tbWFu
ZF9iYXNlID0gTm9uZQogCisgICAgICAgICMgRklYTUU6IElmIHdlIHRhdWdodCBQcm9maWxlRmFj
dG9yeSBhYm91dCAidGFyZ2V0IiBkZXZpY2VzIHdlIGNvdWxkCisgICAgICAgICMganVzdCB1c2Ug
dGhlIGxvZ2ljIGluIERyaXZlciBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGhlcmUuCisgICAg
ICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigicHJvZmlsZSIpOgorICAgICAgICAgICAgc3lt
ZnNfcGF0aCA9IHNlbGYuX2ZpbmRfb3JfY3JlYXRlX3N5bWZzKCkKKyAgICAgICAgICAgICMgRklY
TUU6IFdlIHNob3VsZCBwYXNzIHRoaXMgc29tZSBzb3J0IG9mICJCcmlkZ2UiIG9iamVjdCBhYnN0
cmFjdGlvbiBhcm91bmQgQURCIGluc3RlYWQgb2YgYSBwYXRoL2RldmljZSBwYWlyLgorICAgICAg
ICAgICAgc2VsZi5fcHJvZmlsZXIgPSBBbmRyb2lkUGVyZihzZWxmLl9wb3J0Lmhvc3QsIHNlbGYu
X3BvcnQuX3BhdGhfdG9fZHJpdmVyKCksIHNlbGYuX3BvcnQucmVzdWx0c19kaXJlY3RvcnkoKSwK
KyAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnBhdGhfdG9fYWRiKCksIHNlbGYuX2RldmljZV9z
ZXJpYWwsIHN5bWZzX3BhdGgpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fcHJvZmlsZXIuY2hl
Y2tfY29uZmlndXJhdGlvbigpOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyLnByaW50
X3NldHVwX2luc3RydWN0aW9ucygpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyID0gTm9uZQorICAgICAgICBzZWxm
Ll9kZWxheV9wb3N0X3N0YXJ0X3Rhc2tzID0gRmFsc2UKKwogICAgIGRlZiBfX2RlbF9fKHNlbGYp
OgogICAgICAgICBzZWxmLl90ZWFyZG93bl9wZXJmb3JtYW5jZSgpCiAgICAgICAgIHN1cGVyKENo
cm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX19kZWxfXygpCiAKKyAgICBkZWYgX2ZpbmRfb3Jf
Y3JlYXRlX3N5bWZzKHNlbGYpOgorICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3BvcnQuaG9z
dC5jb3B5X2N1cnJlbnRfZW52aXJvbm1lbnQoKQorICAgICAgICBlbnYgPSBlbnZpcm9ubWVudC50
b19kaWN0aW9uYXJ5KCkKKyAgICAgICAgZnMgPSBzZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbQor
CisgICAgICAgIGlmICdBTkRST0lEX1NZTUZTJyBpbiBlbnY6CisgICAgICAgICAgICBzeW1mc19w
YXRoID0gZW52WydBTkRST0lEX1NZTUZTJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5
bWZzX3BhdGggPSBmcy5qb2luKHNlbGYuX3BvcnQucmVzdWx0c19kaXJlY3RvcnkoKSwgJ3N5bWZz
JykKKyAgICAgICAgICAgIHByaW50ICJBTkRST0lEX1NZTUZTIG5vdCBzZXQsIHVzaW5nICVzIiAl
IHN5bWZzX3BhdGgKKworICAgICAgICAjIGZpbmQgdGhlIGluc3RhbGxlZCBwYXRoLCBhbmQgdGhl
IHBhdGggb2YgdGhlIHN5bWJvbGVkIGJ1aWx0IGxpYnJhcnkKKyAgICAgICAgIyBGSVhNRTogV2Ug
c2hvdWxkIGdldCB0aGUgaW5zdGFsbCBwYXRoIGZyb20gdGhlIGRldmljZSEKKyAgICAgICAgc3lt
ZnNfbGlicmFyeV9wYXRoID0gZnMuam9pbihzeW1mc19wYXRoLCAiZGF0YS9hcHAtbGliLyVzLTEv
JXMiICUgKERSVF9BUFBfUEFDS0FHRSwgRFJUX0xJQlJBUllfTkFNRSkpCisgICAgICAgIGJ1aWx0
X2xpYnJhcnlfcGF0aCA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoJ2xpYicsIERSVF9MSUJSQVJZ
X05BTUUpCisgICAgICAgIGFzc2VydChmcy5leGlzdHMoYnVpbHRfbGlicmFyeV9wYXRoKSkKKwor
ICAgICAgICAjIEZJWE1FOiBJZGVhbGx5IHdlJ2QgY2hlY2sgdGhlIHNoYTEncyBmaXJzdCBhbmQg
bWFrZSBhIHNvZnQtbGluayBpbnN0ZWFkIG9mIGNvcHlpbmcgKHNpbmNlIHdlIHByb2JhYmx5IG5l
dmVyIGNhcmUgYWJvdXQgd2luZG93cykuCisgICAgICAgIHByaW50ICJVcGRhdGluZyBzeW1mcyBs
aWJhcnkgKCVzKSBmcm9tIGJ1aWx0IGNvcHkgKCVzKSIgJSAoc3ltZnNfbGlicmFyeV9wYXRoLCBi
dWlsdF9saWJyYXJ5X3BhdGgpCisgICAgICAgIGZzLm1heWJlX21ha2VfZGlyZWN0b3J5KGZzLmRp
cm5hbWUoc3ltZnNfbGlicmFyeV9wYXRoKSkKKyAgICAgICAgZnMuY29weWZpbGUoYnVpbHRfbGli
cmFyeV9wYXRoLCBzeW1mc19saWJyYXJ5X3BhdGgpCisKKyAgICAgICAgcmV0dXJuIHN5bWZzX3Bh
dGgKKwogICAgIGRlZiBfc2V0dXBfbWQ1c3VtX2FuZF9wdXNoX2RhdGFfaWZfbmVlZGVkKHNlbGYp
OgogICAgICAgICBzZWxmLl9tZDVzdW1fcGF0aCA9IHNlbGYuX3BvcnQucGF0aF90b19tZDVzdW0o
KQogICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZV9leGlzdHNfb25fZGV2aWNlKE1ENVNVTV9ERVZJ
Q0VfUEFUSCk6CkBAIC02MDYsNiArNzYzLDcgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVy
KGRyaXZlci5Ecml2ZXIpOgogICAgICAgICBzZWxmLl9hYm9ydCgnRmFpbGVkIHRvIHN0YXJ0IER1
bXBSZW5kZXJUcmVlIGFwcGxpY2F0aW9uIG11bHRpcGxlIHRpbWVzLiBHaXZlIHVwLicpCiAKICAg
ICBkZWYgX3N0YXJ0X29uY2Uoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgorICAg
ICAgICBzZWxmLl9kZWxheV9wb3N0X3N0YXJ0X3Rhc2tzID0gVHJ1ZSAgIyBUaGlzIGlzIGEgaGFj
ayB0byBub3Qgc3RhcnQgdGhlIHByb2ZpbGVyIHVudGlsIGFmdGVyIHRoZSByZW1vdGUgcHJvY2Vz
cyBpcyBmdWxseSBzZXR1cC4KICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLCBz
ZWxmKS5fc3RhcnQocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCiAKICAgICAgICAgc2VsZi5f
bG9nX2RlYnVnKCdTdGFydGluZyBmb3J3YXJkZXInKQpAQCAtNjczLDEwICs4MzEsMzEgQEAgY2xh
c3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGRyaXZlci5Ecml2ZXIpOgogICAgICAgICAgICAgIyBk
ZWFkbG9jayBhbmQga2lsbGVkIHRoZSBmaWZvIHJlYWRpbmcvd3JpdGluZyBwcm9jZXNzZXMuCiAg
ICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRlclRyZWU6IFxu
JXMnICUgb3V0cHV0KQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAjIEluZm9ybSB0aGUgZGVhZGxvY2sgZGV0ZWN0b3IgdGhhdCB0aGUgc3RhcnR1
cCBpcyBzdWNjZXNzZnVsIHdpdGhvdXQgZGVhZGxvY2suCi0gICAgICAgICAgICBub3JtYWxfc3Rh
cnR1cF9ldmVudC5zZXQoKQotICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBzZWxm
Ll9kZWxheV9wb3N0X3N0YXJ0X3Rhc2tzID0gRmFsc2UKKyAgICAgICAgc2VsZi5fcnVuX3Bvc3Rf
c3RhcnRfdGFza3MoKQorCisgICAgICAgICMgSW5mb3JtIHRoZSBkZWFkbG9jayBkZXRlY3RvciB0
aGF0IHRoZSBzdGFydHVwIGlzIHN1Y2Nlc3NmdWwgd2l0aG91dCBkZWFkbG9jay4KKyAgICAgICAg
bm9ybWFsX3N0YXJ0dXBfZXZlbnQuc2V0KCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRl
ZiBfcnVuX3Bvc3Rfc3RhcnRfdGFza3Moc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2RlbGF5X3Bv
c3Rfc3RhcnRfdGFza3M6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc3VwZXIoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLCBzZWxmKS5fcnVuX3Bvc3Rfc3RhcnRfdGFza3MoKQorCisgICAgZGVm
IF9waWRfZnJvbV9hbmRyb2lkX3BzX291dHB1dChzZWxmLCBwc19vdXRwdXQsIHBhY2thZ2VfbmFt
ZSk6CisgICAgICAgICMgcHMgb3V0cHV0IHNlZW1zIHRvIGJlIGZpeGVkIHdpZHRoLCB3ZSBvbmx5
IGNhcmUgYWJvdXQgdGhlIG5hbWUgYW5kIHRoZSBwaWQKKyAgICAgICAgIyB1MF9hNzIgICAgMjE2
MzAgMTI1ICAgOTQ3OTIwIDU5MzY0IGZmZmZmZmZmIDQwMGJlZWU0IFMgb3JnLmNocm9taXVtLm5h
dGl2ZV90ZXN0CisgICAgICAgIGZvciBsaW5lIGluIHBzX291dHB1dC5zcGxpdCgnXG4nKToKKyAg
ICAgICAgICAgIGlmIGxpbmUuZmluZChEUlRfQVBQX1BBQ0tBR0UpICE9IC0xOgorICAgICAgICAg
ICAgICAgIG1hdGNoID0gcmUubWF0Y2gocidcUytccysoXGQrKScsIGxpbmUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGludChtYXRjaC5ncm91cCgxKSkKKworICAgIGRlZiBfcGlkX29uX3Rhcmdl
dChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogVGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8g
ZG8gdGhpcyB0aGFuIGdyZXBwaW5nIHBzIG91dHB1dCEKKyAgICAgICAgcHNfb3V0cHV0ID0gc2Vs
Zi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAncHMnXSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3BpZF9mcm9tX2FuZHJvaWRfcHNfb3V0cHV0KHBzX291dHB1dCwgRFJUX0FQUF9QQUNLQUdFKQog
CiAgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3No
ZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BBQ0tBR0VdKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lk
X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5CmluZGV4IGJlZDk4N2YxYmMyMTRhNTBkNjkxMTY3
MjE5ZGUyMDg4MmUwYzU5ZmEuLjYwODBhMDlkMGFmMmExNTk4NzdmOGM5NDEwYjFiZGQ1YTMyOWQz
ZTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW1fYW5kcm9pZF91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3QucHkKQEAgLTQyLDYg
KzQyLDcgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZHJpdmVyCiBm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXJfdW5pdHRlc3QKIGZy
b20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKIAorCiBjbGFzcyBN
b2NrUnVuQ29tbWFuZChvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAg
c2VsZi5fbW9ja19sb2djYXQgPSAnJwpAQCAtMjU4LDYgKzI1OSw2NSBAQCBjbGFzcyBDaHJvbWl1
bUFuZHJvaWREcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZXhwZWN0ZWRf
Y29tbWFuZCA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAvZm9vL2Jhci90ZXN0Lmh0bWwnLS1waXhl
bC10ZXN0J2NoZWNrc3VtXG4iCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kcml2ZXIu
X2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQoZHJpdmVyX2lucHV0KSwgZXhwZWN0ZWRfY29tbWFu
ZCkKIAorICAgIGRlZiB0ZXN0X3BpZF9mcm9tX2FuZHJvaWRfcHNfb3V0cHV0KHNlbGYpOgorICAg
ICAgICAjIEZJWE1FOiBVc2UgYSBsYXJnZXIgYmxvYiBvZiBwcyBvdXRwdXQuCisgICAgICAgIHBz
X291dHB1dCA9ICIiInUwX2E3MiAgICAyMTYzMCAxMjUgICA5NDc5MjAgNTkzNjQgZmZmZmZmZmYg
NDAwYmVlZTQgUyBvcmcuY2hyb21pdW0ubmF0aXZlX3Rlc3QiIiIKKyAgICAgICAgcGlkID0gc2Vs
Zi5kcml2ZXIuX3BpZF9mcm9tX2FuZHJvaWRfcHNfb3V0cHV0KHBzX291dHB1dCwgIm9yZy5jaHJv
bWl1bS5uYXRpdmVfdGVzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlkLCAyMTYzMCkK
KworCitjbGFzcyBBbmRyb2lkUGVyZlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0
ZXN0X3BlcmZfb3V0cHV0X3JlZ2V4cChzZWxmKToKKyAgICAgICAgcGVyZl9vdXRwdXQgPSAiIiJb
a2VybmVsLmthbGxzeW1zXSB3aXRoIGJ1aWxkIGlkIDVhMjBmNjI5OWJkYjk1NWEyZjA3NzExYmI3
ZjY1Y2Q3MDZmZTc0Njkgbm90IGZvdW5kLCBjb250aW51aW5nIHdpdGhvdXQgc3ltYm9scworRmFp
bGVkIHRvIG9wZW4gL3RtcC9wZXJmLTE0MTY4Lm1hcCwgY29udGludWluZyB3aXRob3V0IHN5bWJv
bHMKK0tlcm5lbCBhZGRyZXNzIG1hcHMgKC9wcm9jL3trYWxsc3ltcyxtb2R1bGVzfSkgd2VyZSBy
ZXN0cmljdGVkLgorCitDaGVjayAvcHJvYy9zeXMva2VybmVsL2twdHJfcmVzdHJpY3QgYmVmb3Jl
IHJ1bm5pbmcgJ3BlcmYgcmVjb3JkJy4KKworQXMgbm8gc3VpdGFibGUga2FsbHN5bXMgbm9yIHZt
bGludXggd2FzIGZvdW5kLCBrZXJuZWwgc2FtcGxlcworY2FuJ3QgYmUgcmVzb2x2ZWQuCisKK1Nh
bXBsZXMgaW4ga2VybmVsIG1vZHVsZXMgY2FuJ3QgYmUgcmVzb2x2ZWQgYXMgd2VsbC4KKworIyBF
dmVudHM6IDMxSyBjeWNsZXMKKyMKKyMgT3ZlcmhlYWQgICAgICAgICAgQ29tbWFuZCAgICAgICAg
ICAgICAgICBTaGFyZWQgT2JqZWN0CisjIC4uLi4uLi4uICAuLi4uLi4uLi4uLi4uLi4gIC4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uCisjCisgICAgMTYuMTglICAgRHVtcFJlbmRlclRyZWUgIHBlcmYt
MTQxNjgubWFwICAgICAgICAgICAgICAgWy5dIDB4MjEyNzBhYzBjZjQzCisgICAgMTIuNzIlICAg
RHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIHY4OjppbnRl
cm5hbDo6SlNPYmplY3Q6OkdldEVsZW1lbnRXaXRoSW50ZXJjZXB0b3Iodjg6OmludGVybmFsOjpP
YmplY3QqLCB1bnNpZ25lZCBpbnQpCisgICAgIDguMjglICAgRHVtcFJlbmRlclRyZWUgIER1bXBS
ZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIHY4OjppbnRlcm5hbDo6TG9hZFByb3BlcnR5V2l0
aEludGVyY2VwdG9yT25seSh2ODo6aW50ZXJuYWw6OkFyZ3VtZW50cywgdjg6OmludGVybmFsOjpJ
c29sYXRlKikKKyAgICAgNS42MCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAg
ICAgICAgICAgICBbLl0gV1RGOjpBdG9taWNTdHJpbmcgV2ViQ29yZTo6djhTdHJpbmdUb1dlYkNv
cmVTdHJpbmc8V1RGOjpBdG9taWNTdHJpbmc+KHY4OjpIYW5kbGU8djg6OlN0cmluZz4sIFdlYkNv
cmU6OkV4dGVybmFsTW9kZSkKKyAgICAgNC42MCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRl
clRyZWUgICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6V2Vha1JlZmVyZW5jZU1hcDx2b2lkLCB2
ODo6T2JqZWN0Pjo6Z2V0KHZvaWQqKQorICAgICAzLjk5JSAgIER1bXBSZW5kZXJUcmVlICBEdW1w
UmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBfWk5LM1dURjdIYXNoTWFwSVBOU18xNkF0b21p
Y1N0cmluZ0ltcGxFUE43V2ViQ29yZTdFbGVtZW50RU5TXzdQdHJIYXNoSVMyX0VFTlNfMTBIYXNo
VHJhaXRzSVMyX0VFTlM4X0lTNV9FRUUzZ2V0RVJLUzJfLmlzcmEuOTgKKyAgICAgMy42OSUgICBE
dW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6
RG9jdW1lbnRWOEludGVybmFsOjpnZXRFbGVtZW50QnlJZENhbGxiYWNrKHY4OjpBcmd1bWVudHMg
Y29uc3QmKQorICAgICAzLjIzJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAg
ICAgICAgICAgIFsuXSBXZWJDb3JlOjpWOFBhcmFtZXRlckJhc2U6OnByZXBhcmVCYXNlKCkKKyAg
ICAgMi44MyUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBb
Ll0gV1RGOjpBdG9taWNTdHJpbmc6OmFkZCh1bnNpZ25lZCBzaG9ydCBjb25zdCosIHVuc2lnbmVk
IGludCkKKyAgICAgMi43MyUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAg
ICAgICAgICBbLl0gV2ViQ29yZTo6RG9jdW1lbnRWOEludGVybmFsOjpnZXRFbGVtZW50c0J5VGFn
TmFtZUNhbGxiYWNrKHY4OjpBcmd1bWVudHMgY29uc3QmKQorICAgICAyLjQ3JSAgIER1bXBSZW5k
ZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBfWk4ydjg2T2JqZWN0MjdH
ZXRQb2ludGVyRnJvbUludGVybmFsRmllbGRFaS5jb25zdHByb3AuNDM5CisgICAgIDIuNDMlICAg
RHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIHY4OjppbnRl
cm5hbDo6SXNvbGF0ZTo6U2V0Q3VycmVudFZNU3RhdGUodjg6OmludGVybmFsOjpTdGF0ZVRhZykK
KyAgICAgMi4zNCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAg
ICBbLl0gV1RGOjpIYXNoVGFibGVBZGRSZXN1bHQ8V1RGOjpIYXNoVGFibGVJdGVyYXRvcjxzdGQ6
OnBhaXI8dW5zaWduZWQgY2hhciwgV1RGOjpBdG9taWNTdHJpbmc+LCBXVEY6OktleVZhbHVlUGFp
cjxzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgV1RGOjpBdG9taWNTdHJpbmc+LCBXZWJDb3IKKyAg
ICAgMi4yOCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBb
Ll0gV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlJZChXVEY6OkF0b21p
Y1N0cmluZ0ltcGwqLCBXZWJDb3JlOjpUcmVlU2NvcGUgY29uc3QqKSBjb25zdAorICAgICAyLjE1
JSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJD
b3JlOjpWOE5vZGVMaXN0OjpuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
Piwgdjg6OkFjY2Vzc29ySW5mbyBjb25zdCYpCisgICAgIDIuMDYlICAgRHVtcFJlbmRlclRyZWUg
IER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdURjo6UGFzc1JlZlB0cjxXZWJDb3Jl
OjpIVE1MVGFnTm9kZUxpc3Q+IFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZGRDYWNoZVdp
dGhBdG9taWNOYW1lPFdlYkNvcmU6OkhUTUxUYWdOb2RlTGlzdD4oV2ViQ29yZTo6Tm9kZSosIFdl
YkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6CisgICAgIDEuMTglICAgRHVtcFJlbmRlclRyZWUgIER1
bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6Ok5vZGVWOEludGVybmFsOjpu
b2RlVHlwZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+LCB2ODo6QWNjZXNzb3JJbmZv
IGNvbnN0JikKKyAgICAgMS4wOCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAg
ICAgICAgICAgICBbLl0gV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeVRhZ05hbWUoV1RGOjpB
dG9taWNTdHJpbmcgY29uc3QmKQorIiIiCisgICAgICAgIGV4cGVjdGVkX2ZpcnN0X3Rlbl9saW5l
cyA9ICIiIiAgICAxNi4xOCUgICBEdW1wUmVuZGVyVHJlZSAgcGVyZi0xNDE2OC5tYXAgICAgICAg
ICAgICAgICBbLl0gMHgyMTI3MGFjMGNmNDMKKyAgICAxMi43MiUgICBEdW1wUmVuZGVyVHJlZSAg
RHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gdjg6OmludGVybmFsOjpKU09iamVjdDo6
R2V0RWxlbWVudFdpdGhJbnRlcmNlcHRvcih2ODo6aW50ZXJuYWw6Ok9iamVjdCosIHVuc2lnbmVk
IGludCkKKyAgICAgOC4yOCUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAg
ICAgICAgICBbLl0gdjg6OmludGVybmFsOjpMb2FkUHJvcGVydHlXaXRoSW50ZXJjZXB0b3JPbmx5
KHY4OjppbnRlcm5hbDo6QXJndW1lbnRzLCB2ODo6aW50ZXJuYWw6Oklzb2xhdGUqKQorICAgICA1
LjYwJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBX
VEY6OkF0b21pY1N0cmluZyBXZWJDb3JlOjp2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxXVEY6OkF0
b21pY1N0cmluZz4odjg6OkhhbmRsZTx2ODo6U3RyaW5nPiwgV2ViQ29yZTo6RXh0ZXJuYWxNb2Rl
KQorICAgICA0LjYwJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAg
ICAgIFsuXSBXZWJDb3JlOjpXZWFrUmVmZXJlbmNlTWFwPHZvaWQsIHY4OjpPYmplY3Q+OjpnZXQo
dm9pZCopCisgICAgIDMuOTklICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAg
ICAgICAgICAgWy5dIF9aTkszV1RGN0hhc2hNYXBJUE5TXzE2QXRvbWljU3RyaW5nSW1wbEVQTjdX
ZWJDb3JlN0VsZW1lbnRFTlNfN1B0ckhhc2hJUzJfRUVOU18xMEhhc2hUcmFpdHNJUzJfRUVOUzhf
SVM1X0VFRTNnZXRFUktTMl8uaXNyYS45OAorICAgICAzLjY5JSAgIER1bXBSZW5kZXJUcmVlICBE
dW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJDb3JlOjpEb2N1bWVudFY4SW50ZXJu
YWw6OmdldEVsZW1lbnRCeUlkQ2FsbGJhY2sodjg6OkFyZ3VtZW50cyBjb25zdCYpCisgICAgIDMu
MjMlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdl
YkNvcmU6OlY4UGFyYW1ldGVyQmFzZTo6cHJlcGFyZUJhc2UoKQorICAgICAyLjgzJSAgIER1bXBS
ZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXVEY6OkF0b21pY1N0
cmluZzo6YWRkKHVuc2lnbmVkIHNob3J0IGNvbnN0KiwgdW5zaWduZWQgaW50KQorICAgICAyLjcz
JSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSBXZWJD
b3JlOjpEb2N1bWVudFY4SW50ZXJuYWw6OmdldEVsZW1lbnRzQnlUYWdOYW1lQ2FsbGJhY2sodjg6
OkFyZ3VtZW50cyBjb25zdCYpCisiIiIKKyAgICAgICAgaG9zdCA9IE1vY2tTeXN0ZW1Ib3N0KCkK
KyAgICAgICAgcHJvZmlsZXIgPSBjaHJvbWl1bV9hbmRyb2lkLkFuZHJvaWRQZXJmKGhvc3QsICcv
YmluL2V4ZWN1dGFibGUnLCAnL3RtcC9vdXRwdXQnLCAnZGV2aWNlLXNlcmlhbCcsICdmb28nKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2ZpbGVyLl9maXJzdF90ZW5fbGluZXNfb2ZfcHJv
ZmlsZShwZXJmX291dHB1dCksIGV4cGVjdGVkX2ZpcnN0X3Rlbl9saW5lcykKKwogCiBjbGFzcyBD
aHJvbWl1bUFuZHJvaWREcml2ZXJUd29Ecml2ZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgZGVmIHRlc3RfdHdvX2RyaXZlcnMoc2VsZik6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CmluZGV4IDcwODIwNDk2Y2YyMTkxNDhl
YTI4NTM3NzYwYTE1NGVjNTg1OGQ1ZjYuLjVhNTk3YjBiMjJjZjY5ODdmNDYyNTc1NDc0ODkxY2Vi
MjJkNTNhYzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvZHJpdmVyLnB5CkBAIC0yNzcsMTEgKzI3Nyw3IEBAIGNsYXNzIERyaXZlcihvYmplY3Qp
OgogICAgICAgICBpZiBub3Qgc2VsZi5fc2VydmVyX3Byb2Nlc3M6CiAgICAgICAgICAgICBzZWxm
Ll9zdGFydChwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykKIAotICAgIGRlZiBfc3RhcnQoc2Vs
ZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICBzZWxmLnN0b3AoKQotICAg
ICAgICBzZWxmLl9kcml2ZXJfdGVtcGRpciA9IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0ubWtkdGVt
cChwcmVmaXg9JyVzLScgJSBzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCkpCi0gICAgICAgIHNlcnZl
cl9uYW1lID0gc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpCi0gICAgICAgIGVudmlyb25tZW50ID0g
c2VsZi5fcG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VydmVyX25hbWUpCisgICAgZGVm
IF9hZGp1c3RfZW52aXJvbm1lbnRfZm9yX2RyaXZlcihzZWxmLCBlbnZpcm9ubWVudCk6CiAgICAg
ICAgIGVudmlyb25tZW50WydEWUxEX0xJQlJBUllfUEFUSCddID0gc2VsZi5fcG9ydC5fYnVpbGRf
cGF0aCgpCiAgICAgICAgIGVudmlyb25tZW50WydEWUxEX0ZSQU1FV09SS19QQVRIJ10gPSBzZWxm
Ll9wb3J0Ll9idWlsZF9wYXRoKCkKICAgICAgICAgIyBGSVhNRTogV2UncmUgYXNzdW1pbmcgdGhh
dCBXZWJLaXRUZXN0UnVubmVyIGNoZWNrcyB0aGlzIER1bXBSZW5kZXJUcmVlLW5hbWVkIGVudmly
b25tZW50IHZhcmlhYmxlLgpAQCAtMjkxLDEyICsyODcsMjcgQEAgY2xhc3MgRHJpdmVyKG9iamVj
dCk6CiAgICAgICAgICAgICBlbnZpcm9ubWVudFsnV0VCS0lUT1VUUFVURElSJ10gPSBvcy5lbnZp
cm9uWydXRUJLSVRPVVRQVVRESVInXQogICAgICAgICBpZiBzZWxmLl9wcm9maWxlcjoKICAgICAg
ICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5fcHJvZmlsZXIuYWRqdXN0ZWRfZW52aXJvbm1lbnQo
ZW52aXJvbm1lbnQpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVz
dF9hcmdzKToKKyAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgc2VsZi5fZHJpdmVyX3RlbXBk
aXIgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtLm1rZHRlbXAocHJlZml4PSclcy0nICUgc2VsZi5f
cG9ydC5kcml2ZXJfbmFtZSgpKQorICAgICAgICBzZXJ2ZXJfbmFtZSA9IHNlbGYuX3BvcnQuZHJp
dmVyX25hbWUoKQorICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3BvcnQuc2V0dXBfZW52aXJv
bl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1lKQorICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX2Fk
anVzdF9lbnZpcm9ubWVudF9mb3JfZHJpdmVyKGVudmlyb25tZW50KQogICAgICAgICBzZWxmLl9j
cmFzaGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKICAgICAgICAgc2VsZi5fY3Jhc2hlZF9waWQgPSBO
b25lCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3By
b2Nlc3NfY29uc3RydWN0b3Ioc2VsZi5fcG9ydCwgc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUo
cGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKICAgICAgICAgc2VsZi5f
c2VydmVyX3Byb2Nlc3Muc3RhcnQoKQorICAgICAgICBzZWxmLl9ydW5fcG9zdF9zdGFydF90YXNr
cygpCisKKyAgICBkZWYgX3J1bl9wb3N0X3N0YXJ0X3Rhc2tzKHNlbGYpOgorICAgICAgICAjIFJl
bW90ZSBkcml2ZXJzIG1heSBvdmVycmlkZSB0aGlzIHRvIGRlbGF5IHBvc3Qtc3RhcnQgdGFza3Mg
dW50aWwgdGhlIHNlcnZlciBoYXMgYWNrJ2QuCiAgICAgICAgIGlmIHNlbGYuX3Byb2ZpbGVyOgot
ICAgICAgICAgICAgc2VsZi5fcHJvZmlsZXIuYXR0YWNoX3RvX3BpZChzZWxmLl9zZXJ2ZXJfcHJv
Y2Vzcy5waWQoKSkKKyAgICAgICAgICAgIHNlbGYuX3Byb2ZpbGVyLmF0dGFjaF90b19waWQoc2Vs
Zi5fcGlkX29uX3RhcmdldCgpKQorCisgICAgZGVmIF9waWRfb25fdGFyZ2V0KHNlbGYpOgorICAg
ICAgICAjIFJlbW90ZSBkcml2ZXJzIHdpbGwgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcmV0dXJu
IHRoZSBwaWQgb24gdGhlIGRldmljZS4KKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlcnZlcl9wcm9j
ZXNzLnBpZCgpCiAKICAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICAgaWYgc2VsZi5fc2VydmVy
X3Byb2Nlc3M6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179115</attachid>
            <date>2012-12-12 13:27:35 -0800</date>
            <delta_ts>2012-12-12 15:15:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103587-20121212132456.patch</filename>
            <type>text/plain</type>
            <size>23511</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NTA0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzFjNTZiNzdjMzE0ZDcxN2VhODJhNzRhYjNkOGMxYjBm
ZmY1NDBkOS4uZjMwNmUyN2Q2NzNhN2QyZGFlOTM5ZTNkNDBkYzhjZTQ3YTA0MzZlMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0
IEBACisyMDEyLTEyLTEyICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBBZGQgc3VwcG9ydCBmb3IgcnVuLXBlcmYtdGVzdHMgLS1jaHJvbWl1bS1hbmRyb2lkIC0tcHJv
ZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAz
NTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBtYWtlcyBpdCBwb3NzaWJsZSB0byBwcm9maWxlIFBlcmZvcm1hbmNlVGVzdHMgb24gYW4gQW5k
cm9pZCBkZXZpY2UKKyAgICAgICAgdXNpbmcgcnVuLXBlcmYtdGVzdHMgLS1jaHJvbWl1bS1hbmRy
b2lkIC0tcHJvZmlsZS4KKyAgICAgICAgQ1BVIHByb2ZpbGluZyBvbiBBbmRyb2lkIGlzIHNhZGx5
IG5vbi10cml2aWFsLCBidXQgdGhpcyBnb2VzIGEgbG9uZworICAgICAgICB3YXlzIHRvd2FyZHMg
bWFraW5nIGl0IG1vcmUgYWNjZXNzaWJsZSB0byBub24tQW5kcm9pZCBkZXZlbG9wZXJzLgorCisg
ICAgICAgIEFsdGhvdWdoIHRoaXMgc2NyaXB0IHJlcXVpcmVzIHlvdXIgZGV2aWNlIHRvIGJlIGZs
YXNoZWQgd2l0aCBhCisgICAgICAgIHVzZXJkZWJ1ZyBidWlsZCAoYW4gYW5ub3lpbmdseSBub24t
dHJpdmlhbCBlbmRlYXZvciBmb3IgZXh0ZXJuYWwgY29udHJpYnV0b3JzKQorICAgICAgICBpdCBl
bmRlYXZvcnMgdG8gZGV0ZWN0IGFuZCBleHBsYWluIHRoZSBjb21tb24gZXJyb3JzIGVuY291bnRl
cmVkCisgICAgICAgIHdoaWxlIHRyeWluZyB0byBzZXR1cCBhIGRldmljZSBmb3IgcGVyZi1iYXNl
ZCBwcm9maWxpbmcuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
cHJvZmlsZXIucHk6CisgICAgICAgIChHb29nbGVQUHJvZi5wcm9maWxlX2FmdGVyX2V4aXQpOiBE
aXNjb3ZlcmVkIHRoYXQgcHByb2Ygd2lsbCBqdXN0IGhhbmcgaWYgcGFzc2VkIGEgbWlzc2luZyBm
aWxlLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fYW5kcm9pZC5weToKKyAgICAgICAgKEFuZHJvaWRQZXJmKToKKyAgICAgICAgKEFuZHJvaWRQ
ZXJmLl9faW5pdF9fKToKKyAgICAgICAgKEFuZHJvaWRQZXJmLmNoZWNrX2NvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoQW5kcm9pZFBlcmYucHJpbnRfc2V0dXBfaW5zdHJ1Y3Rpb25zKToKKyAgICAg
ICAgKF9maWxlX2V4aXN0c19vbl9kZXZpY2UpOgorICAgICAgICAoX3J1bl9hZGJfY29tbWFuZCk6
CisgICAgICAgIChhdHRhY2hfdG9fcGlkKToKKyAgICAgICAgKF9wZXJmX3ZlcnNpb25fc3RyaW5n
KToKKyAgICAgICAgKF9maW5kX3BlcmZob3N0X2JpbmFyeSk6CisgICAgICAgIChfcGVyZmhvc3Rf
cGF0aCk6CisgICAgICAgIChfZmlyc3RfdGVuX2xpbmVzX29mX3Byb2ZpbGUpOgorICAgICAgICAo
cHJvZmlsZV9hZnRlcl9leGl0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fX2lu
aXRfXyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX19pbml0X18ubWV0aG9kcyk6
CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX2ZpbmRfb3JfY3JlYXRlX3N5bWZzKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRfb25jZSk6CisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWREcml2ZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9y
dW5fcG9zdF9zdGFydF90YXNrcyk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3Bp
ZF9mcm9tX2FuZHJvaWRfcHNfb3V0cHV0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZl
ci5fcGlkX29uX3RhcmdldCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3VuaXR0ZXN0LnB5OgorICAgICAgICAoQ2hyb21pdW1B
bmRyb2lkRHJpdmVyVGVzdC50ZXN0X3BpZF9mcm9tX2FuZHJvaWRfcHNfb3V0cHV0KToKKyAgICAg
ICAgKEFuZHJvaWRQZXJmVGVzdCk6CisgICAgICAgIChBbmRyb2lkUGVyZlRlc3QudGVzdF9wZXJm
X291dHB1dF9yZWdleHApOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLl9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2
ZXIpOgorICAgICAgICAoRHJpdmVyKToKKyAgICAgICAgKERyaXZlci5fc3RhcnQpOgorICAgICAg
ICAoRHJpdmVyLl9ydW5fcG9zdF9zdGFydF90YXNrcyk6CisgICAgICAgIChEcml2ZXIuX3BpZF9v
bl90YXJnZXQpOgorCiAyMDEyLTEyLTEyICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdh
bGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBZGQgYXV0aGVudGljYXRpb24gc3VwcG9ydCB0byBE
UlQgYW5kIGZpeCBleHBvc2VkIGlzc3VlcyBpbiB0aGUgbGlic291cCBiYWNrZW5kCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXIucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXIucHkKaW5kZXggOWVj
ZjkxZjZiZjIzZmQzODRkZThlNjRlYmI0ZTVhNmVjNzU0NGI2Yi4uMTMwNDU5MjA3ZDNkMDFjYzcx
ZGRkNzkxMmNiYWNhN2VlNzA1ZGNlOCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9wcm9maWxlci5weQpAQCAtODAsNiArODAsMTIgQEAgY2xhc3MgR29vZ2xl
UFByb2YoU2luZ2xlRmlsZU91dHB1dFByb2ZpbGVyKToKICAgICAgICAgIyBGSVhNRTogV2Ugc2hv
dWxkIGhhdmUgY29kZSB0byBmaW5kIHRoZSByaWdodCBnb29nbGUtcHByb2YgZXhlY3V0YWJsZSwg
c29tZSBHb29nbGVycyBoYXZlCiAgICAgICAgICMgZ29vZ2xlLXBwcm9mIGluc3RhbGxlZCBhcyAi
cHByb2YiIG9uIHRoZWlyIG1hY2hpbmVzIGZvciB0aGVtLgogICAgICAgICAjIEZJWE1FOiBTaW1p
bGFybHkgd2Ugc2hvdWxkIGZpbmQgdGhlIHJpZ2h0IHBlcmwhCisKKyAgICAgICAgIyBnb29nbGUt
cHByb2YgZG9lc24ndCBjaGVjayBpdHMgYXJndW1lbnRzLCBzbyB3ZSBoYXZlIHRvLgorICAgICAg
ICBpZiBub3QgKHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5fb3V0cHV0X3BhdGgp
KToKKyAgICAgICAgICAgIHByaW50ICJGYWlsZWQgdG8gZ2F0aGVyIHByb2ZpbGUsICVzIGRvZXMg
bm90IGV4aXN0LiIgJSBzZWxmLl9vdXRwdXRfcGF0aAorICAgICAgICAgICAgcmV0dXJuCisKICAg
ICAgICAgcHByb2ZfYXJncyA9IFsnL3Vzci9iaW4vcGVybCcsICcvdXNyL2Jpbi9nb29nbGUtcHBy
b2YnLCAnLS10ZXh0Jywgc2VsZi5fZXhlY3V0YWJsZV9wYXRoLCBzZWxmLl9vdXRwdXRfcGF0aF0K
ICAgICAgICAgcHJvZmlsZV90ZXh0ID0gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQo
cHByb2ZfYXJncykKICAgICAgICAgcHJpbnQgc2VsZi5fZmlyc3RfdGVuX2xpbmVzX29mX3Byb2Zp
bGUocHJvZmlsZV90ZXh0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5CmluZGV4IDlkNzdhNTUzOGJl
MDI1NjBlODk0NTA0N2EzNzZlY2Q0NjhhNzhmMDkuLjQyMWE1MGE2YzhhZTllZDhjNjJmZTFlZjc2
NmMwZjNlOGE4YTcyZjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkKQEAgLTMwLDYgKzMwLDcg
QEAgaW1wb3J0IGNvcHkKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCByZQoraW1w
b3J0IHN5cwogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1l
CkBAIC0zOCw3ICszOSw3IEBAIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0
IGNocm9taXVtCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBkcml2ZXIK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGZhY3RvcnkKIGZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHNlcnZlcl9wcm9jZXNzCi0KK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5wcm9maWxlciBpbXBvcnQgU2luZ2xlRmlsZU91dHB1dFByb2Zp
bGVyCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtNjAsNiArNjEs
NyBAQCBERVZJQ0VfRklGT19QQVRIID0gJy9kYXRhL2RhdGEvb3JnLmNocm9taXVtLm5hdGl2ZV90
ZXN0L2ZpbGVzLycKIERSVF9BUFBfUEFDS0FHRSA9ICdvcmcuY2hyb21pdW0ubmF0aXZlX3Rlc3Qn
CiBEUlRfQUNUSVZJVFlfRlVMTF9OQU1FID0gRFJUX0FQUF9QQUNLQUdFICsgJy8uQ2hyb21lTmF0
aXZlVGVzdEFjdGl2aXR5JwogRFJUX0FQUF9DQUNIRV9ESVIgPSBERVZJQ0VfRFJUX0RJUiArICdj
YWNoZS8nCitEUlRfTElCUkFSWV9OQU1FID0gJ2xpYkR1bXBSZW5kZXJUcmVlLnNvJwogCiBTQ0FM
SU5HX0dPVkVSTk9SU19QQVRURVJOID0gIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY3B1
ZnJlcS9zY2FsaW5nX2dvdmVybm9yIgogCkBAIC0zNTcsNiArMzU5LDEyNCBAQCBjbGFzcyBDaHJv
bWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgIHJldHVybiBk
ZXZpY2VzW3dvcmtlcl9udW1iZXJdCiAKIAorY2xhc3MgQW5kcm9pZFBlcmYoU2luZ2xlRmlsZU91
dHB1dFByb2ZpbGVyKToKKyAgICBfY2FjaGVkX3BlcmZfaG9zdF9wYXRoID0gTm9uZQorICAgIF9o
YXZlX3NlYXJjaGVkX2Zvcl9wZXJmX2hvc3QgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGhvc3QsIGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgYWRiX3BhdGgsIGRldmljZV9z
ZXJpYWwsIHN5bWZzX3BhdGgsIGlkZW50aWZpZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKEFuZHJv
aWRQZXJmLCBzZWxmKS5fX2luaXRfXyhob3N0LCBleGVjdXRhYmxlX3BhdGgsIG91dHB1dF9kaXIs
ICJkYXRhIiwgaWRlbnRpZmllcikKKyAgICAgICAgc2VsZi5fZGV2aWNlX3NlcmlhbCA9IGRldmlj
ZV9zZXJpYWwKKyAgICAgICAgc2VsZi5fYWRiX2NvbW1hbmQgPSBbYWRiX3BhdGgsICctcycsIHNl
bGYuX2RldmljZV9zZXJpYWxdCisgICAgICAgIHNlbGYuX3BlcmZfcHJvY2VzcyA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fc3ltZnNfcGF0aCA9IHN5bWZzX3BhdGgKKworICAgIGRlZiBjaGVja19jb25m
aWd1cmF0aW9uKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgcGVyZiBpcyBpbnN0YWxsZWQK
KyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZSgnL3N5c3RlbS9iaW4v
cGVyZicpOgorICAgICAgICAgICAgcHJpbnQgIkNhbm5vdCBmaW5kIC9zeXN0ZW0vYmluL3BlcmYg
b24gZGV2aWNlICVzIiAlIHNlbGYuX2RldmljZV9zZXJpYWwKKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGRldmljZSBpcyBhIHVzZXJkZWJ1ZyBidWls
ZCAob3IgYXQgbGVhc3QgaGFzIHRoZSBuZWNlc3NhcnkgbGlicmFyaWVzKS4KKyAgICAgICAgaWYg
c2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnZ2V0cHJvcCcsICdyby5idWlsZC50eXBl
J10pLnN0cmlwKCkgIT0gJ3VzZXJkZWJ1Zyc6CisgICAgICAgICAgICBwcmludCAiRGV2aWNlICVz
IGlzIG5vdCBmbGFzaGVkIHdpdGggYSB1c2VyZGVidWcgYnVpbGQgb2YgQW5kcm9pZCIgJSBzZWxm
Ll9kZXZpY2Vfc2VyaWFsCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgIyBGSVhN
RTogQ2hlY2sgdGhhdCB0aGUgYmluYXJ5IGFjdHVhbGx5IGlzIHBlcmYtYWJsZSAoaGFzIHN0YWNr
ZnJhbWUgcG9pbnRlcnMpPworICAgICAgICAjIG9iamR1bXAgLXMgYSBmdW5jdGlvbiBhbmQgbWFr
ZSBzdXJlIGl0IG1vZGlmaWVzIHRoZSBmcD8KKyAgICAgICAgIyBJbnN0cnVjdCB1c2VycyB0byBy
ZWJ1aWxkIGFmdGVyIGV4cG9ydCBHWVBfREVGSU5FUz0icHJvZmlsaW5nPTEgJEdZUF9ERUZJTkVT
IgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHByaW50X3NldHVwX2luc3RydWN0aW9u
cyhzZWxmKToKKyAgICAgICAgcHJpbnQgIiIiCitwZXJmIG9uIGFuZHJvaWQgcmVxdWlyZXMgYSAn
dXNlcmRlYnVnJyBidWlsZCBvZiBBbmRyb2lkLCBzZWU6CitodHRwOi8vc291cmNlLmFuZHJvaWQu
Y29tL3NvdXJjZS9idWlsZGluZy1kZXZpY2VzLmh0bWwiCisKK1RoZSBwZXJmIGNvbW1hbmQgY2Fu
IGJlIGJ1aWx0IGZyb206CitodHRwczovL2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbS9wbGF0Zm9y
bS9leHRlcm5hbC9saW51eC10b29scy1wZXJmLworYW5kIHJlcXVpcmVzIGxpYmVmbCwgbGliZWJs
LCBsaWJkdywgYW5kIGxpYmR3ZmwgYXZhaWxhYmxlIGluOgoraHR0cHM6Ly9hbmRyb2lkLmdvb2ds
ZXNvdXJjZS5jb20vcGxhdGZvcm0vZXh0ZXJuYWwvZWxmdXRpbHMvCisKK0R1bXBSZW5kZXJUcmVl
IG11c3QgYmUgYnVpbHQgd2l0aCBwcm9maWxpbmc9MSwgbWFrZSBzdXJlIHlvdSd2ZSBkb25lOgor
ZXhwb3J0IEdZUF9ERUZJTkVTPSJwcm9maWxpbmc9MSAkR1lQX0RFRklORVMiCit1cGRhdGUtd2Vi
a2l0IC0tY2hyb21pdW0tYW5kcm9pZAorYnVpbGQtd2Via2l0IC0tY2hyb21pdW0tYW5kcm9pZAor
CitHb29nbGVycyBzaG91bGQgcmVhZDoKK2h0dHA6Ly9nb3RvLmdvb2dsZS5jb20vY3ItYW5kcm9p
ZC1wZXJmLWhvd3RvCisiIiIKKworICAgIGRlZiBfZmlsZV9leGlzdHNfb25fZGV2aWNlKHNlbGYs
IGZ1bGxfZmlsZV9wYXRoKToKKyAgICAgICAgYXNzZXJ0IGZ1bGxfZmlsZV9wYXRoLnN0YXJ0c3dp
dGgoJy8nKQorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
bHMnLCBmdWxsX2ZpbGVfcGF0aF0pLnN0cmlwKCkgPT0gZnVsbF9maWxlX3BhdGgKKworICAgIGRl
ZiBfcnVuX2FkYl9jb21tYW5kKHNlbGYsIGNtZCk6CisgICAgICAgIHJldHVybiBzZWxmLl9ob3N0
LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChzZWxmLl9hZGJfY29tbWFuZCArIGNtZCkKKworICAgIGRl
ZiBhdHRhY2hfdG9fcGlkKHNlbGYsIHBpZCk6CisgICAgICAgIGFzc2VydChwaWQpCisgICAgICAg
IGFzc2VydChzZWxmLl9wZXJmX3Byb2Nlc3MgPT0gTm9uZSkKKyAgICAgICAgIyBGSVhNRTogVGhp
cyBjYW4ndCBiZSBhIGZpeGVkIHRpbWVvdXQhCisgICAgICAgIGNtZCA9IHNlbGYuX2FkYl9jb21t
YW5kICsgWydzaGVsbCcsICdwZXJmJywgJ3JlY29yZCcsICctZycsICctcCcsIHBpZCwgJ3NsZWVw
JywgMzBdCisgICAgICAgIGNtZCA9IG1hcCh1bmljb2RlLCBjbWQpCisgICAgICAgIHNlbGYuX3Bl
cmZfcHJvY2VzcyA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnBvcGVuKGNtZCkKKworICAgIGRlZiBf
cGVyZl92ZXJzaW9uX3N0cmluZyhzZWxmLCBwZXJmX3BhdGgpOgorICAgICAgICB0cnk6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoW3BlcmZfcGF0
aCwgJy0tdmVyc2lvbiddKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgZGVmIF9maW5kX3BlcmZob3N0X2JpbmFyeShzZWxmKToKKyAgICAgICAgcGVyZmhv
c3RfdmVyc2lvbiA9IHNlbGYuX3BlcmZfdmVyc2lvbl9zdHJpbmcoJ3BlcmZob3N0X2xpbnV4JykK
KyAgICAgICAgaWYgcGVyZmhvc3RfdmVyc2lvbjoKKyAgICAgICAgICAgIHJldHVybiAncGVyZmhv
c3RfbGludXgnCisgICAgICAgIHBlcmZfdmVyc2lvbiA9IHNlbGYuX3BlcmZfdmVyc2lvbl9zdHJp
bmcoJ3BlcmYnKQorICAgICAgICBpZiBwZXJmX3ZlcnNpb246CisgICAgICAgICAgICByZXR1cm4g
J3BlcmYnCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3BlcmZob3N0X3BhdGgoc2Vs
Zik6CisgICAgICAgIGlmIHNlbGYuX2hhdmVfc2VhcmNoZWRfZm9yX3BlcmZfaG9zdDoKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWRfcGVyZl9ob3N0X3BhdGgKKyAgICAgICAgc2VsZi5f
aGF2ZV9zZWFyY2hlZF9mb3JfcGVyZl9ob3N0ID0gVHJ1ZQorICAgICAgICBzZWxmLl9jYWNoZWRf
cGVyZl9ob3N0X3BhdGggPSBzZWxmLl9maW5kX3BlcmZob3N0X2JpbmFyeSgpCisgICAgICAgIHJl
dHVybiBzZWxmLl9jYWNoZWRfcGVyZl9ob3N0X3BhdGgKKworICAgIGRlZiBfZmlyc3RfdGVuX2xp
bmVzX29mX3Byb2ZpbGUoc2VsZiwgcGVyZl9vdXRwdXQpOgorICAgICAgICBtYXRjaCA9IHJlLnNl
YXJjaCgiXiNbXlxuXSpcbigoPzogW15cbl0qXG4pezEsMTB9KSIsIHBlcmZfb3V0cHV0LCByZS5N
VUxUSUxJTkUpCisgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIE5v
bmUKKworICAgIGRlZiBwcm9maWxlX2FmdGVyX2V4aXQoc2VsZik6CisgICAgICAgIHBlcmZfZXhp
dGNvZGUgPSBzZWxmLl9wZXJmX3Byb2Nlc3Mud2FpdCgpCisgICAgICAgIGlmIHBlcmZfZXhpdGNv
ZGUgIT0gMDoKKyAgICAgICAgICAgIHByaW50ICJQZXJmIGZhaWxlZCAoZXhpdCBjb2RlOiAlaSks
IGNhbid0IHByb2Nlc3MgcmVzdWx0cy4iICUgcGVyZl9leGl0Y29kZQorICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3B1bGwnLCAnL2RhdGEvcGVyZi5k
YXRhJywgc2VsZi5fb3V0cHV0X3BhdGhdKQorCisgICAgICAgIHBlcmZob3N0X3BhdGggPSBzZWxm
Ll9wZXJmaG9zdF9wYXRoKCkKKyAgICAgICAgaWYgcGVyZmhvc3RfcGF0aDoKKyAgICAgICAgICAg
IHBlcmZob3N0X2FyZ3MgPSBbcGVyZmhvc3RfcGF0aCwgJ3JlcG9ydCcsICctZycsICdub25lJywg
Jy1pJywgc2VsZi5fb3V0cHV0X3BhdGgsICctLXN5bWZzJywgc2VsZi5fc3ltZnNfcGF0aF0KKyAg
ICAgICAgICAgIHBlcmZfb3V0cHV0ID0gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQo
cGVyZmhvc3RfYXJncykKKyAgICAgICAgICAgICMgV2UgY291bGQgc2F2ZSBvZmYgdGhlIGZ1bGwg
LWcgcmVwb3J0IHRvIGEgZmlsZSBpZiB1c2VycyBmb3VuZCB0aGF0IHVzZWZ1bC4KKyAgICAgICAg
ICAgIHByaW50IHNlbGYuX2ZpcnN0X3Rlbl9saW5lc19vZl9wcm9maWxlKHBlcmZfb3V0cHV0KQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIiIiCitGYWlsZWQgdG8gZmluZCBwZXJm
aG9zdF9saW51eCBiaW5hcnksIGNhbid0IHByb2Nlc3Mgc2FtcGxlcyBmcm9tIHRoZSBkZXZpY2Uu
CisKK3BlcmZob3N0X2xpbnV4IGNhbiBiZSBidWlsdCBmcm9tOgoraHR0cHM6Ly9hbmRyb2lkLmdv
b2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vZXh0ZXJuYWwvbGludXgtdG9vbHMtcGVyZi8KK2Fsc28s
IG1vZGVybiB2ZXJzaW9ucyBvZiBwZXJmIChhdmFpbGFibGUgZnJvbSBhcHQtZ2V0IGluc3RhbGwg
Z29vYnVudHUta2VybmVsLXRvb2xzLWNvbW1vbikKK21heSBhbHNvIGJlIGFibGUgdG8gcHJvY2Vz
cyB0aGUgcGVyZi5kYXRhIGZpbGVzIGZyb20gdGhlIGRldmljZS4KKworR29vZ2xlcnMgc2hvdWxk
IHJlYWQ6CitodHRwOi8vZ290by5nb29nbGUuY29tL2NyLWFuZHJvaWQtcGVyZi1ob3d0bworZm9y
IGluc3RydWN0aW9ucyBvbiBpbnN0YWxsaW5nIHByZS1idWlsdCBjb3BpZXMgb2YgcGVyZmhvc3Rf
bGludXgKK2h0dHA6Ly9jcmJ1Zy5jb20vMTY1MjUwIGRpc2N1c3NlcyBtYWtpbmcgdGhlc2UgcHJl
LWJ1aWx0IGJpbmFyaWVzIGV4dGVybmFsbHkgYXZhaWxhYmxlLgorIiIiCisKKyAgICAgICAgcGVy
Zmhvc3RfZGlzcGxheV9wYXRjaCA9IHBlcmZob3N0X3BhdGggaWYgcGVyZmhvc3RfcGF0aCBlbHNl
ICdwZXJmaG9zdF9saW51eCcKKyAgICAgICAgcHJpbnQgIlRvIHZpZXcgdGhlIGZ1bGwgcHJvZmls
ZSwgcnVuOiIKKyAgICAgICAgcHJpbnQgJyAnLmpvaW4oW3BlcmZob3N0X2Rpc3BsYXlfcGF0Y2gs
ICdyZXBvcnQnLCAnLWknLCBzZWxmLl9vdXRwdXRfcGF0aCwgJy0tc3ltZnMnLCBzZWxmLl9zeW1m
c19wYXRoXSkKKworCiBjbGFzcyBDaHJvbWl1bUFuZHJvaWREcml2ZXIoZHJpdmVyLkRyaXZlcik6
CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3Rz
LCBub190aW1lb3V0PUZhbHNlKToKICAgICAgICAgc3VwZXIoQ2hyb21pdW1BbmRyb2lkRHJpdmVy
LCBzZWxmKS5fX2luaXRfXyhwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGlt
ZW91dCkKQEAgLTM3MiwxMCArNDkyLDUxIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihk
cml2ZXIuRHJpdmVyKToKICAgICAgICAgc2VsZi5fZGV2aWNlX3NlcmlhbCA9IHBvcnQuX2dldF9k
ZXZpY2Vfc2VyaWFsKHdvcmtlcl9udW1iZXIpCiAgICAgICAgIHNlbGYuX2FkYl9jb21tYW5kX2Jh
c2UgPSBOb25lCiAKKyAgICAgICAgIyBGSVhNRTogSWYgd2UgdGF1Z2h0IFByb2ZpbGVGYWN0b3J5
IGFib3V0ICJ0YXJnZXQiIGRldmljZXMgd2UgY291bGQKKyAgICAgICAgIyBqdXN0IHVzZSB0aGUg
bG9naWMgaW4gRHJpdmVyIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQgaGVyZS4KKyAgICAgICAg
aWYgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCJwcm9maWxlIik6CisgICAgICAgICAgICBzeW1mc19w
YXRoID0gc2VsZi5fZmluZF9vcl9jcmVhdGVfc3ltZnMoKQorICAgICAgICAgICAgIyBGSVhNRTog
V2Ugc2hvdWxkIHBhc3MgdGhpcyBzb21lIHNvcnQgb2YgIkJyaWRnZSIgb2JqZWN0IGFic3RyYWN0
aW9uIGFyb3VuZCBBREIgaW5zdGVhZCBvZiBhIHBhdGgvZGV2aWNlIHBhaXIuCisgICAgICAgICAg
ICBzZWxmLl9wcm9maWxlciA9IEFuZHJvaWRQZXJmKHNlbGYuX3BvcnQuaG9zdCwgc2VsZi5fcG9y
dC5fcGF0aF90b19kcml2ZXIoKSwgc2VsZi5fcG9ydC5yZXN1bHRzX2RpcmVjdG9yeSgpLAorICAg
ICAgICAgICAgICAgIHNlbGYuX3BvcnQucGF0aF90b19hZGIoKSwgc2VsZi5fZGV2aWNlX3Nlcmlh
bCwgc3ltZnNfcGF0aClcCisgICAgICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgbGF5ZXJpbmcg
dmlvbGF0aW9uIGFuZCBzaG91bGQgYmUgbW92ZWQgdG8gUG9ydC5jaGVja19zeXNfZGVwcworICAg
ICAgICAgICAgIyBvbmNlIHdlIGhhdmUgYW4gYWJzdHJhY3Rpb24gYXJvdW5kIGFuIGFkYl9wYXRo
L2RldmljZV9zZXJpYWwgcGFpciB0byBtYWtlIGl0CisgICAgICAgICAgICAjIGVhc3kgdG8gbWFr
ZSB0aGVzZSBjbGFzcyBtZXRob2RzIG9uIEFuZHJvaWRQZXJmLgorICAgICAgICAgICAgaWYgbm90
IHNlbGYuX3Byb2ZpbGVyLmNoZWNrX2NvbmZpZ3VyYXRpb24oKToKKyAgICAgICAgICAgICAgICBz
ZWxmLl9wcm9maWxlci5wcmludF9zZXR1cF9pbnN0cnVjdGlvbnMoKQorICAgICAgICAgICAgICAg
IHN5cy5leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wcm9maWxlciA9
IE5vbmUKKyAgICAgICAgc2VsZi5fZGVsYXlfcG9zdF9zdGFydF90YXNrcyA9IEZhbHNlCisKICAg
ICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgc2VsZi5fdGVhcmRvd25fcGVyZm9ybWFuY2Uo
KQogICAgICAgICBzdXBlcihDaHJvbWl1bUFuZHJvaWREcml2ZXIsIHNlbGYpLl9fZGVsX18oKQog
CisgICAgZGVmIF9maW5kX29yX2NyZWF0ZV9zeW1mcyhzZWxmKToKKyAgICAgICAgZW52aXJvbm1l
bnQgPSBzZWxmLl9wb3J0Lmhvc3QuY29weV9jdXJyZW50X2Vudmlyb25tZW50KCkKKyAgICAgICAg
ZW52ID0gZW52aXJvbm1lbnQudG9fZGljdGlvbmFyeSgpCisgICAgICAgIGZzID0gc2VsZi5fcG9y
dC5ob3N0LmZpbGVzeXN0ZW0KKworICAgICAgICBpZiAnQU5EUk9JRF9TWU1GUycgaW4gZW52Ogor
ICAgICAgICAgICAgc3ltZnNfcGF0aCA9IGVudlsnQU5EUk9JRF9TWU1GUyddCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBzeW1mc19wYXRoID0gZnMuam9pbihzZWxmLl9wb3J0LnJlc3VsdHNf
ZGlyZWN0b3J5KCksICdzeW1mcycpCisgICAgICAgICAgICBwcmludCAiQU5EUk9JRF9TWU1GUyBu
b3Qgc2V0LCB1c2luZyAlcyIgJSBzeW1mc19wYXRoCisKKyAgICAgICAgIyBmaW5kIHRoZSBpbnN0
YWxsZWQgcGF0aCwgYW5kIHRoZSBwYXRoIG9mIHRoZSBzeW1ib2xlZCBidWlsdCBsaWJyYXJ5Cisg
ICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBnZXQgdGhlIGluc3RhbGwgcGF0aCBmcm9tIHRoZSBk
ZXZpY2UhCisgICAgICAgIHN5bWZzX2xpYnJhcnlfcGF0aCA9IGZzLmpvaW4oc3ltZnNfcGF0aCwg
ImRhdGEvYXBwLWxpYi8lcy0xLyVzIiAlIChEUlRfQVBQX1BBQ0tBR0UsIERSVF9MSUJSQVJZX05B
TUUpKQorICAgICAgICBidWlsdF9saWJyYXJ5X3BhdGggPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRo
KCdsaWInLCBEUlRfTElCUkFSWV9OQU1FKQorICAgICAgICBhc3NlcnQoZnMuZXhpc3RzKGJ1aWx0
X2xpYnJhcnlfcGF0aCkpCisKKyAgICAgICAgIyBGSVhNRTogSWRlYWxseSB3ZSdkIGNoZWNrIHRo
ZSBzaGExJ3MgZmlyc3QgYW5kIG1ha2UgYSBzb2Z0LWxpbmsgaW5zdGVhZCBvZiBjb3B5aW5nIChz
aW5jZSB3ZSBwcm9iYWJseSBuZXZlciBjYXJlIGFib3V0IHdpbmRvd3MpLgorICAgICAgICBwcmlu
dCAiVXBkYXRpbmcgc3ltZnMgbGliYXJ5ICglcykgZnJvbSBidWlsdCBjb3B5ICglcykiICUgKHN5
bWZzX2xpYnJhcnlfcGF0aCwgYnVpbHRfbGlicmFyeV9wYXRoKQorICAgICAgICBmcy5tYXliZV9t
YWtlX2RpcmVjdG9yeShmcy5kaXJuYW1lKHN5bWZzX2xpYnJhcnlfcGF0aCkpCisgICAgICAgIGZz
LmNvcHlmaWxlKGJ1aWx0X2xpYnJhcnlfcGF0aCwgc3ltZnNfbGlicmFyeV9wYXRoKQorCisgICAg
ICAgIHJldHVybiBzeW1mc19wYXRoCisKICAgICBkZWYgX3NldHVwX21kNXN1bV9hbmRfcHVzaF9k
YXRhX2lmX25lZWRlZChzZWxmKToKICAgICAgICAgc2VsZi5fbWQ1c3VtX3BhdGggPSBzZWxmLl9w
b3J0LnBhdGhfdG9fbWQ1c3VtKCkKICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29u
X2RldmljZShNRDVTVU1fREVWSUNFX1BBVEgpOgpAQCAtNjA2LDYgKzc2Nyw3IEBAIGNsYXNzIENo
cm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVyKToKICAgICAgICAgc2VsZi5fYWJvcnQo
J0ZhaWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbiBtdWx0aXBsZSB0aW1l
cy4gR2l2ZSB1cC4nKQogCiAgICAgZGVmIF9zdGFydF9vbmNlKHNlbGYsIHBpeGVsX3Rlc3RzLCBw
ZXJfdGVzdF9hcmdzKToKKyAgICAgICAgc2VsZi5fZGVsYXlfcG9zdF9zdGFydF90YXNrcyA9IFRy
dWUgICMgVGhpcyBpcyBhIGhhY2sgdG8gbm90IHN0YXJ0IHRoZSBwcm9maWxlciB1bnRpbCBhZnRl
ciB0aGUgcmVtb3RlIHByb2Nlc3MgaXMgZnVsbHkgc2V0dXAuCiAgICAgICAgIHN1cGVyKENocm9t
aXVtQW5kcm9pZERyaXZlciwgc2VsZikuX3N0YXJ0KHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdz
KQogCiAgICAgICAgIHNlbGYuX2xvZ19kZWJ1ZygnU3RhcnRpbmcgZm9yd2FyZGVyJykKQEAgLTY3
MywxMCArODM1LDMxIEBAIGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihkcml2ZXIuRHJpdmVy
KToKICAgICAgICAgICAgICMgZGVhZGxvY2sgYW5kIGtpbGxlZCB0aGUgZmlmbyByZWFkaW5nL3dy
aXRpbmcgcHJvY2Vzc2VzLgogICAgICAgICAgICAgX2xvZy5lcnJvcignRmFpbGVkIHRvIHN0YXJ0
IER1bXBSZW5kZXJUcmVlOiBcbiVzJyAlIG91dHB1dCkKICAgICAgICAgICAgIHJldHVybiBGYWxz
ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBJbmZvcm0gdGhlIGRlYWRsb2NrIGRldGVj
dG9yIHRoYXQgdGhlIHN0YXJ0dXAgaXMgc3VjY2Vzc2Z1bCB3aXRob3V0IGRlYWRsb2NrLgotICAg
ICAgICAgICAgbm9ybWFsX3N0YXJ0dXBfZXZlbnQuc2V0KCkKLSAgICAgICAgICAgIHJldHVybiBU
cnVlCisKKyAgICAgICAgc2VsZi5fZGVsYXlfcG9zdF9zdGFydF90YXNrcyA9IEZhbHNlCisgICAg
ICAgIHNlbGYuX3J1bl9wb3N0X3N0YXJ0X3Rhc2tzKCkKKworICAgICAgICAjIEluZm9ybSB0aGUg
ZGVhZGxvY2sgZGV0ZWN0b3IgdGhhdCB0aGUgc3RhcnR1cCBpcyBzdWNjZXNzZnVsIHdpdGhvdXQg
ZGVhZGxvY2suCisgICAgICAgIG5vcm1hbF9zdGFydHVwX2V2ZW50LnNldCgpCisgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICBkZWYgX3J1bl9wb3N0X3N0YXJ0X3Rhc2tzKHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLl9kZWxheV9wb3N0X3N0YXJ0X3Rhc2tzOgorICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgIHN1cGVyKENocm9taXVtQW5kcm9pZERyaXZlciwgc2VsZikuX3J1bl9wb3N0X3N0YXJ0
X3Rhc2tzKCkKKworICAgIGRlZiBfcGlkX2Zyb21fYW5kcm9pZF9wc19vdXRwdXQoc2VsZiwgcHNf
b3V0cHV0LCBwYWNrYWdlX25hbWUpOgorICAgICAgICAjIHBzIG91dHB1dCBzZWVtcyB0byBiZSBm
aXhlZCB3aWR0aCwgd2Ugb25seSBjYXJlIGFib3V0IHRoZSBuYW1lIGFuZCB0aGUgcGlkCisgICAg
ICAgICMgdTBfYTcyICAgIDIxNjMwIDEyNSAgIDk0NzkyMCA1OTM2NCBmZmZmZmZmZiA0MDBiZWVl
NCBTIG9yZy5jaHJvbWl1bS5uYXRpdmVfdGVzdAorICAgICAgICBmb3IgbGluZSBpbiBwc19vdXRw
dXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBpZiBsaW5lLmZpbmQoRFJUX0FQUF9QQUNLQUdF
KSAhPSAtMToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHInXFMrXHMrKFxkKykn
LCBsaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBpbnQobWF0Y2guZ3JvdXAoMSkpCisKKyAg
ICBkZWYgX3BpZF9vbl90YXJnZXQoc2VsZik6CisgICAgICAgICMgRklYTUU6IFRoZXJlIG11c3Qg
YmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhhbiBncmVwcGluZyBwcyBvdXRwdXQhCisgICAg
ICAgIHBzX291dHB1dCA9IHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ3BzJ10pCisg
ICAgICAgIHJldHVybiBzZWxmLl9waWRfZnJvbV9hbmRyb2lkX3BzX291dHB1dChwc19vdXRwdXQs
IERSVF9BUFBfUEFDS0FHRSkKIAogICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgICBzZWxmLl9y
dW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdhbScsICdmb3JjZS1zdG9wJywgRFJUX0FQUF9QQUNL
QUdFXSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW1fYW5kcm9pZF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZF91bml0dGVzdC5weQppbmRleCBiZWQ5
ODdmMWJjMjE0YTUwZDY5MTE2NzIxOWRlMjA4ODJlMGM1OWZhLi41MmQ4MDMzOGZkMzdiYTQ1NGI5
YjZkYTJmNTgzNWMyODA3MjNhMzM5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWRfdW5pdHRlc3QucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkX3Vu
aXR0ZXN0LnB5CkBAIC00Miw2ICs0Miw3IEBAIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBv
cnQgaW1wb3J0IGRyaXZlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQg
ZHJpdmVyX3VuaXR0ZXN0CiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tP
cHRpb25zCiAKKwogY2xhc3MgTW9ja1J1bkNvbW1hbmQob2JqZWN0KToKICAgICBkZWYgX19pbml0
X18oc2VsZik6CiAgICAgICAgIHNlbGYuX21vY2tfbG9nY2F0ID0gJycKQEAgLTI1OCw2ICsyNTks
NTkgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgICAgIGV4cGVjdGVkX2NvbW1hbmQgPSAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL2Zvby9i
YXIvdGVzdC5odG1sJy0tcGl4ZWwtdGVzdCdjaGVja3N1bVxuIgogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYuZHJpdmVyLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lucHV0KGRyaXZlcl9pbnB1
dCksIGV4cGVjdGVkX2NvbW1hbmQpCiAKKyAgICBkZWYgdGVzdF9waWRfZnJvbV9hbmRyb2lkX3Bz
X291dHB1dChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogVXNlIGEgbGFyZ2VyIGJsb2Igb2YgcHMg
b3V0cHV0LgorICAgICAgICBwc19vdXRwdXQgPSAiIiJ1MF9hNzIgICAgMjE2MzAgMTI1ICAgOTQ3
OTIwIDU5MzY0IGZmZmZmZmZmIDQwMGJlZWU0IFMgb3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0IiIi
CisgICAgICAgIHBpZCA9IHNlbGYuZHJpdmVyLl9waWRfZnJvbV9hbmRyb2lkX3BzX291dHB1dChw
c19vdXRwdXQsICJvcmcuY2hyb21pdW0ubmF0aXZlX3Rlc3QiKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHBpZCwgMjE2MzApCisKKworY2xhc3MgQW5kcm9pZFBlcmZUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKKyAgICBkZWYgdGVzdF9wZXJmX291dHB1dF9yZWdleHAoc2VsZik6CisgICAgICAg
IHBlcmZfb3V0cHV0ID0gIiIiW2tlcm5lbC5rYWxsc3ltc10gd2l0aCBidWlsZCBpZCA1YTIwZjYy
OTliZGI5NTVhMmYwNzcxMWJiN2Y2NWNkNzA2ZmU3NDY5IG5vdCBmb3VuZCwgY29udGludWluZyB3
aXRob3V0IHN5bWJvbHMKK0ZhaWxlZCB0byBvcGVuIC90bXAvcGVyZi0xNDE2OC5tYXAsIGNvbnRp
bnVpbmcgd2l0aG91dCBzeW1ib2xzCitLZXJuZWwgYWRkcmVzcyBtYXBzICgvcHJvYy97a2FsbHN5
bXMsbW9kdWxlc30pIHdlcmUgcmVzdHJpY3RlZC4KKworQ2hlY2sgL3Byb2Mvc3lzL2tlcm5lbC9r
cHRyX3Jlc3RyaWN0IGJlZm9yZSBydW5uaW5nICdwZXJmIHJlY29yZCcuCisKK0FzIG5vIHN1aXRh
YmxlIGthbGxzeW1zIG5vciB2bWxpbnV4IHdhcyBmb3VuZCwga2VybmVsIHNhbXBsZXMKK2Nhbid0
IGJlIHJlc29sdmVkLgorCitTYW1wbGVzIGluIGtlcm5lbCBtb2R1bGVzIGNhbid0IGJlIHJlc29s
dmVkIGFzIHdlbGwuCisKKyMgRXZlbnRzOiAzMUsgY3ljbGVzCisjCisjIE92ZXJoZWFkICAgICAg
ICAgIENvbW1hbmQgICAgICAgICAgICAgICAgU2hhcmVkIE9iamVjdAorIyAuLi4uLi4uLiAgLi4u
Li4uLi4uLi4uLi4uICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gIC4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIworICAgIDE2LjE4JSAgIER1
bXBSZW5kZXJUcmVlICBwZXJmLTE0MTY4Lm1hcCAgICAgICAgICAgICAgIFsuXSAweDIxMjcwYWMw
Y2Y0MworICAgIDEyLjcyJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAg
ICAgICAgIFsuXSB2ODo6aW50ZXJuYWw6OkpTT2JqZWN0OjpHZXRFbGVtZW50V2l0aEludGVyY2Vw
dG9yKHY4OjppbnRlcm5hbDo6T2JqZWN0KiwgdW5zaWduZWQgaW50KQorICAgICA4LjI4JSAgIER1
bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSB2ODo6aW50ZXJu
YWw6OkxvYWRQcm9wZXJ0eVdpdGhJbnRlcmNlcHRvck9ubHkodjg6OmludGVybmFsOjpBcmd1bWVu
dHMsIHY4OjppbnRlcm5hbDo6SXNvbGF0ZSopCisgICAgIDUuNjAlICAgRHVtcFJlbmRlclRyZWUg
IER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdURjo6QXRvbWljU3RyaW5nIFdlYkNv
cmU6OnY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nPFdURjo6QXRvbWljU3RyaW5nPih2ODo6SGFuZGxl
PHY4OjpTdHJpbmc+LCBXZWJDb3JlOjpFeHRlcm5hbE1vZGUpCisgICAgIDQuNjAlICAgRHVtcFJl
bmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OldlYWtS
ZWZlcmVuY2VNYXA8dm9pZCwgdjg6Ok9iamVjdD46OmdldCh2b2lkKikKKyAgICAgMy45OSUgICBE
dW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gX1pOSzNXVEY3
SGFzaE1hcElQTlNfMTZBdG9taWNTdHJpbmdJbXBsRVBON1dlYkNvcmU3RWxlbWVudEVOU183UHRy
SGFzaElTMl9FRU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TOF9JUzVfRUVFM2dldEVSS1MyXy5pc3Jh
Ljk4CisgICAgIDMuNjklICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAg
ICAgICAgWy5dIFdlYkNvcmU6OkRvY3VtZW50VjhJbnRlcm5hbDo6Z2V0RWxlbWVudEJ5SWRDYWxs
YmFjayh2ODo6QXJndW1lbnRzIGNvbnN0JikKKyAgICAgMy4yMyUgICBEdW1wUmVuZGVyVHJlZSAg
RHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV2ViQ29yZTo6VjhQYXJhbWV0ZXJCYXNl
OjpwcmVwYXJlQmFzZSgpCisgICAgIDIuODMlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJU
cmVlICAgICAgICAgICAgICAgWy5dIFdURjo6QXRvbWljU3RyaW5nOjphZGQodW5zaWduZWQgc2hv
cnQgY29uc3QqLCB1bnNpZ25lZCBpbnQpCisgICAgIDIuNzMlICAgRHVtcFJlbmRlclRyZWUgIER1
bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OkRvY3VtZW50VjhJbnRlcm5h
bDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVDYWxsYmFjayh2ODo6QXJndW1lbnRzIGNvbnN0JikKKyAg
ICAgMi40NyUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBb
Ll0gX1pOMnY4Nk9iamVjdDI3R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkRWkuY29uc3Rwcm9w
LjQzOQorICAgICAyLjQzJSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAg
ICAgICAgIFsuXSB2ODo6aW50ZXJuYWw6Oklzb2xhdGU6OlNldEN1cnJlbnRWTVN0YXRlKHY4Ojpp
bnRlcm5hbDo6U3RhdGVUYWcpCisiIiIKKyAgICAgICAgZXhwZWN0ZWRfZmlyc3RfdGVuX2xpbmVz
ID0gIiIiICAgIDE2LjE4JSAgIER1bXBSZW5kZXJUcmVlICBwZXJmLTE0MTY4Lm1hcCAgICAgICAg
ICAgICAgIFsuXSAweDIxMjcwYWMwY2Y0MworICAgIDEyLjcyJSAgIER1bXBSZW5kZXJUcmVlICBE
dW1wUmVuZGVyVHJlZSAgICAgICAgICAgICAgIFsuXSB2ODo6aW50ZXJuYWw6OkpTT2JqZWN0OjpH
ZXRFbGVtZW50V2l0aEludGVyY2VwdG9yKHY4OjppbnRlcm5hbDo6T2JqZWN0KiwgdW5zaWduZWQg
aW50KQorICAgICA4LjI4JSAgIER1bXBSZW5kZXJUcmVlICBEdW1wUmVuZGVyVHJlZSAgICAgICAg
ICAgICAgIFsuXSB2ODo6aW50ZXJuYWw6OkxvYWRQcm9wZXJ0eVdpdGhJbnRlcmNlcHRvck9ubHko
djg6OmludGVybmFsOjpBcmd1bWVudHMsIHY4OjppbnRlcm5hbDo6SXNvbGF0ZSopCisgICAgIDUu
NjAlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdU
Rjo6QXRvbWljU3RyaW5nIFdlYkNvcmU6OnY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nPFdURjo6QXRv
bWljU3RyaW5nPih2ODo6SGFuZGxlPHY4OjpTdHJpbmc+LCBXZWJDb3JlOjpFeHRlcm5hbE1vZGUp
CisgICAgIDQuNjAlICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAg
ICAgWy5dIFdlYkNvcmU6OldlYWtSZWZlcmVuY2VNYXA8dm9pZCwgdjg6Ok9iamVjdD46OmdldCh2
b2lkKikKKyAgICAgMy45OSUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAg
ICAgICAgICBbLl0gX1pOSzNXVEY3SGFzaE1hcElQTlNfMTZBdG9taWNTdHJpbmdJbXBsRVBON1dl
YkNvcmU3RWxlbWVudEVOU183UHRySGFzaElTMl9FRU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TOF9J
UzVfRUVFM2dldEVSS1MyXy5pc3JhLjk4CisgICAgIDMuNjklICAgRHVtcFJlbmRlclRyZWUgIER1
bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNvcmU6OkRvY3VtZW50VjhJbnRlcm5h
bDo6Z2V0RWxlbWVudEJ5SWRDYWxsYmFjayh2ODo6QXJndW1lbnRzIGNvbnN0JikKKyAgICAgMy4y
MyUgICBEdW1wUmVuZGVyVHJlZSAgRHVtcFJlbmRlclRyZWUgICAgICAgICAgICAgICBbLl0gV2Vi
Q29yZTo6VjhQYXJhbWV0ZXJCYXNlOjpwcmVwYXJlQmFzZSgpCisgICAgIDIuODMlICAgRHVtcFJl
bmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdURjo6QXRvbWljU3Ry
aW5nOjphZGQodW5zaWduZWQgc2hvcnQgY29uc3QqLCB1bnNpZ25lZCBpbnQpCisgICAgIDIuNzMl
ICAgRHVtcFJlbmRlclRyZWUgIER1bXBSZW5kZXJUcmVlICAgICAgICAgICAgICAgWy5dIFdlYkNv
cmU6OkRvY3VtZW50VjhJbnRlcm5hbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVDYWxsYmFjayh2ODo6
QXJndW1lbnRzIGNvbnN0JikKKyIiIgorICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoKQor
ICAgICAgICBwcm9maWxlciA9IGNocm9taXVtX2FuZHJvaWQuQW5kcm9pZFBlcmYoaG9zdCwgJy9i
aW4vZXhlY3V0YWJsZScsICcvdG1wL291dHB1dCcsICdkZXZpY2Utc2VyaWFsJywgJ2ZvbycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZmlsZXIuX2ZpcnN0X3Rlbl9saW5lc19vZl9wcm9m
aWxlKHBlcmZfb3V0cHV0KSwgZXhwZWN0ZWRfZmlyc3RfdGVuX2xpbmVzKQorCiAKIGNsYXNzIENo
cm9taXVtQW5kcm9pZERyaXZlclR3b0RyaXZlcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICBkZWYgdGVzdF90d29fZHJpdmVycyhzZWxmKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKaW5kZXggNzA4MjA0OTZjZjIxOTE0OGVh
Mjg1Mzc3NjBhMTU0ZWM1ODU4ZDVmNi4uNTQ3YjRlYjc5MGNlMTFmNjAyNWIzMTVlNTlhMDkzN2Qy
NTIyODViNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9kcml2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9kcml2ZXIucHkKQEAgLTI3NywxMSArMjc3LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6
CiAgICAgICAgIGlmIG5vdCBzZWxmLl9zZXJ2ZXJfcHJvY2VzczoKICAgICAgICAgICAgIHNlbGYu
X3N0YXJ0KHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQogCi0gICAgZGVmIF9zdGFydChzZWxm
LCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgIHNlbGYuc3RvcCgpCi0gICAg
ICAgIHNlbGYuX2RyaXZlcl90ZW1wZGlyID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5ta2R0ZW1w
KHByZWZpeD0nJXMtJyAlIHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSkKLSAgICAgICAgc2VydmVy
X25hbWUgPSBzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCkKLSAgICAgICAgZW52aXJvbm1lbnQgPSBz
ZWxmLl9wb3J0LnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKKyAgICBkZWYg
X3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihzZWxmLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIGVu
dmlyb25tZW50WydEWUxEX0xJQlJBUllfUEFUSCddID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgp
CiAgICAgICAgIGVudmlyb25tZW50WydEWUxEX0ZSQU1FV09SS19QQVRIJ10gPSBzZWxmLl9wb3J0
Ll9idWlsZF9wYXRoKCkKICAgICAgICAgIyBGSVhNRTogV2UncmUgYXNzdW1pbmcgdGhhdCBXZWJL
aXRUZXN0UnVubmVyIGNoZWNrcyB0aGlzIER1bXBSZW5kZXJUcmVlLW5hbWVkIGVudmlyb25tZW50
IHZhcmlhYmxlLgpAQCAtMjkxLDEyICsyODcsMjggQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAg
ICAgICAgICAgICBlbnZpcm9ubWVudFsnV0VCS0lUT1VUUFVURElSJ10gPSBvcy5lbnZpcm9uWydX
RUJLSVRPVVRQVVRESVInXQogICAgICAgICBpZiBzZWxmLl9wcm9maWxlcjoKICAgICAgICAgICAg
IGVudmlyb25tZW50ID0gc2VsZi5fcHJvZmlsZXIuYWRqdXN0ZWRfZW52aXJvbm1lbnQoZW52aXJv
bm1lbnQpCisgICAgICAgIHJldHVybiBlbnZpcm9ubWVudAorCisgICAgZGVmIF9zdGFydChzZWxm
LCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6CisgICAgICAgIHNlbGYuc3RvcCgpCisgICAg
ICAgIHNlbGYuX2RyaXZlcl90ZW1wZGlyID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5ta2R0ZW1w
KHByZWZpeD0nJXMtJyAlIHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSkKKyAgICAgICAgc2VydmVy
X25hbWUgPSBzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCkKKyAgICAgICAgZW52aXJvbm1lbnQgPSBz
ZWxmLl9wb3J0LnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKKyAgICAgICAg
ZW52aXJvbm1lbnQgPSBzZWxmLl9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoZW52aXJvbm1lbnQp
CiAgICAgICAgIHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lID0gTm9uZQogICAgICAgICBzZWxm
Ll9jcmFzaGVkX3BpZCA9IE5vbmUKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxm
Ll9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBzZXJ2ZXJfbmFt
ZSwgc2VsZi5jbWRfbGluZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50
KQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCisgICAgICAgIHNlbGYuX3J1
bl9wb3N0X3N0YXJ0X3Rhc2tzKCkKKworICAgIGRlZiBfcnVuX3Bvc3Rfc3RhcnRfdGFza3Moc2Vs
Zik6CisgICAgICAgICMgUmVtb3RlIGRyaXZlcnMgbWF5IG92ZXJyaWRlIHRoaXMgdG8gZGVsYXkg
cG9zdC1zdGFydCB0YXNrcyB1bnRpbCB0aGUgc2VydmVyIGhhcyBhY2snZC4KICAgICAgICAgaWYg
c2VsZi5fcHJvZmlsZXI6Ci0gICAgICAgICAgICBzZWxmLl9wcm9maWxlci5hdHRhY2hfdG9fcGlk
KHNlbGYuX3NlcnZlcl9wcm9jZXNzLnBpZCgpKQorICAgICAgICAgICAgc2VsZi5fcHJvZmlsZXIu
YXR0YWNoX3RvX3BpZChzZWxmLl9waWRfb25fdGFyZ2V0KCkpCisKKyAgICBkZWYgX3BpZF9vbl90
YXJnZXQoc2VsZik6CisgICAgICAgICMgUmVtb3RlIGRyaXZlcnMgd2lsbCBvdmVycmlkZSB0aGlz
IG1ldGhvZCB0byByZXR1cm4gdGhlIHBpZCBvbiB0aGUgZGV2aWNlLgorICAgICAgICByZXR1cm4g
c2VsZi5fc2VydmVyX3Byb2Nlc3MucGlkKCkKIAogICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAg
ICBpZiBzZWxmLl9zZXJ2ZXJfcHJvY2VzczoK
</data>

          </attachment>
      

    </bug>

</bugzilla>