<?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>166660</bug_id>
          
          <creation_ts>2017-01-03 13:51:10 -0800</creation_ts>
          <short_desc>Add IOSDevice, share functionality with IOSSimulator in IOSBase</short_desc>
          <delta_ts>2019-04-05 14:43:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=165927</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1263518</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-03 13:51:10 -0800</bug_when>
    <thetext>IOSDevice needs to be added.  IOSSimulator and IOSDevice should inherit from the shared class IOSBase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263544</commentid>
    <comment_count>1</comment_count>
      <attachid>297952</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-03 14:21:02 -0800</bug_when>
    <thetext>Created attachment 297952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263603</commentid>
    <comment_count>2</comment_count>
      <attachid>297952</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-03 16:32:47 -0800</bug_when>
    <thetext>Comment on attachment 297952
Patch

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

&gt; Tools/Scripts/webkitpy/port/darwin.py:179
&gt; +    def extractBundleID(self, app):
&gt; +        return self._executive.run_command([&apos;/usr/libexec/PlistBuddy&apos;, &apos;-c&apos;, &apos;&quot;Print CFBundleIdentifier&quot;&apos;, &apos;Info.plist&apos;], return_stderr=False)

This function is not used in this patch.

&gt; Tools/Scripts/webkitpy/port/ios.py:44
&gt; +class IOSBase(DarwinPort):

I suggest that we name this class IOSBasePort. This will make the name of this class consistent with the names of other port classes.

&gt; Tools/Scripts/webkitpy/port/ios.py:49
&gt; +        DarwinPort.__init__(self, host, port_name, **kwargs)

I know that you just moved this code. We should take this opportunity to modernize the code. In particular, we should write this line using super():

super(IOSBasePort, self).__init__(host, port_name, **kwargs)

The benefit of this approach is that if we will not need to update this code again should we change the base class for this derived class.

&gt; Tools/Scripts/webkitpy/port/ios.py:51
&gt; +        self._current_device = None

Currently this instance variable is specific to usage by the iOS Simulator port. It will likely turn out that we will need to know the current device for on-device testing. Having said that, I suggest that we defer making this change at this time and keep the patch focused on moving code from the IOSSimulatorPort class to this base class.

&gt; Tools/Scripts/webkitpy/port/ios.py:95
&gt; +    def _get_crash_log(self, name, pid, stdout, stderr, newer_than, time_fn=time.time, sleep_fn=time.sleep, wait_for_log=True):
&gt; +        time_fn = time_fn or time.time
&gt; +        sleep_fn = sleep_fn or time.sleep
&gt; +
&gt; +        # FIXME: We should collect the actual crash log for DumpRenderTree.app because it includes more
&gt; +        # information (e.g. exception codes) than is available in the stack trace written to standard error.
&gt; +        stderr_lines = []
&gt; +        crashed_subprocess_name_and_pid = None  # e.g. (&apos;DumpRenderTree.app&apos;, 1234)
&gt; +        for line in (stderr or &apos;&apos;).splitlines():
&gt; +            if not crashed_subprocess_name_and_pid:
&gt; +                match = self.SUBPROCESS_CRASH_REGEX.match(line)
&gt; +                if match:
&gt; +                    crashed_subprocess_name_and_pid = (match.group(&apos;subprocess_name&apos;), int(match.group(&apos;subprocess_pid&apos;)))
&gt; +                    continue
&gt; +            stderr_lines.append(line)
&gt; +
&gt; +        if crashed_subprocess_name_and_pid:
&gt; +            return self._get_crash_log(crashed_subprocess_name_and_pid[0], crashed_subprocess_name_and_pid[1], stdout,
&gt; +                &apos;\n&apos;.join(stderr_lines), newer_than, time_fn, sleep_fn, wait_for_log)
&gt; +
&gt; +        _log.debug(&apos;looking for crash log for %s:%s&apos; % (name, str(pid)))
&gt; +        crash_log = &apos;&apos;
&gt; +        crash_logs = CrashLogs(self.host)
&gt; +        now = time_fn()
&gt; +        deadline = now + 5 * int(self.get_option(&apos;child_processes&apos;, 1))
&gt; +        while not crash_log and now &lt;= deadline:
&gt; +            crash_log = crash_logs.find_newest_log(name, pid, include_errors=True, newer_than=newer_than)
&gt; +            if not wait_for_log:
&gt; +                break
&gt; +            if not crash_log or not [line for line in crash_log.splitlines() if not line.startswith(&apos;ERROR&apos;)]:
&gt; +                sleep_fn(0.1)
&gt; +                now = time_fn()
&gt; +
&gt; +        if not crash_log:
&gt; +            return stderr, None
&gt; +        return stderr, crash_log

Will this work for device without modification? If not, then I suggest we move this code back to class IOSSimulatorPort.

&gt; Tools/Scripts/webkitpy/port/ios.py:109
&gt; +    def _using_dedicated_simulators(self):
&gt; +        return self.get_option(&apos;dedicated_simulators&apos;)
&gt; +
&gt; +    def _testing_device(self, number):
&gt; +        return None
&gt; +
&gt; +    # This is only exposed so that IOSSimulatorDriver can use it.
&gt; +    def device_id_for_worker_number(self, number):
&gt; +        if self._printing_cmd_line:
&gt; +            return &apos;&lt;dummy id&gt;&apos;
&gt; +        if self._using_dedicated_simulators():
&gt; +            return self._testing_device(number).udid
&gt; +        return self._current_device.udid

Did you intend to move this? I mean, this function seems specific to the iOS Simulator port.

&gt; Tools/Scripts/webkitpy/port/ios.py:112
&gt; +class IOSDevice(IOSBase):

I suggest we call this class IOSDevicePort by a similar argument to the one I made for renaming IOSBase to IOSBasePort.

&gt; Tools/Scripts/webkitpy/port/ios.py:167
&gt; -        DarwinPort.__init__(self, host, port_name, **kwargs)
&gt; +        IOSBase.__init__(self, host, port_name, **kwargs)

Similar to my remark in IOSBase.__init__() we should update this code to read:

super(IOSSimulatorPort, self).__init__(host, port_name, **kwargs)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263613</commentid>
    <comment_count>3</comment_count>
      <attachid>297952</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-03 16:55:52 -0800</bug_when>
    <thetext>Comment on attachment 297952
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/port/darwin.py:179
&gt;&gt; +        return self._executive.run_command([&apos;/usr/libexec/PlistBuddy&apos;, &apos;-c&apos;, &apos;&quot;Print CFBundleIdentifier&quot;&apos;, &apos;Info.plist&apos;], return_stderr=False)
&gt; 
&gt; This function is not used in this patch.

It will be used in another patch which is dependent on this patch.  Should it be moved to that patch instead?

&gt;&gt; Tools/Scripts/webkitpy/port/ios.py:51
&gt;&gt; +        self._current_device = None
&gt; 
&gt; Currently this instance variable is specific to usage by the iOS Simulator port. It will likely turn out that we will need to know the current device for on-device testing. Having said that, I suggest that we defer making this change at this time and keep the patch focused on moving code from the IOSSimulatorPort class to this base class.

On device testing will need to map devices to worker threads (see my comments on line 109 as well).  It&apos;s not clear exactly what this interface will look like, but it will likely be similar to the one used for simulators.  Given how high-level much of the device management is in the IOSSimulator class, I believe some of the same high-level logic can be shared between the two ports.

&gt;&gt; Tools/Scripts/webkitpy/port/ios.py:95
&gt;&gt; +        return stderr, crash_log
&gt; 
&gt; Will this work for device without modification? If not, then I suggest we move this code back to class IOSSimulatorPort.

I&apos;m pretty sure the only modification needed will be to adjust where we&apos;re looking for crash logs.  Since this logic isn&apos;t part of the port classes anyways, I think this function makes more sense in the base class.  That being said, it&apos;s also possible that the crash logs don&apos;t get moved between device and host fast enough or predictably enough.  It&apos;s also possible we will need to include the device ID in some fashion since assuming one PID per crash won&apos;t work when dealing with multiple devices.

&gt;&gt; Tools/Scripts/webkitpy/port/ios.py:109
&gt;&gt; +        return self._current_device.udid
&gt; 
&gt; Did you intend to move this? I mean, this function seems specific to the iOS Simulator port.

The concept of a worker thread mapping to a device ID definitely applies to on device testing.  The &apos;_using_dedicated_simulators()&apos; flag is an idea specific to simulators, although it is a globally defined command line argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263764</commentid>
    <comment_count>4</comment_count>
      <attachid>298014</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-04 08:47:17 -0800</bug_when>
    <thetext>Created attachment 298014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263796</commentid>
    <comment_count>5</comment_count>
      <attachid>298014</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-04 09:56:42 -0800</bug_when>
    <thetext>Comment on attachment 298014
Patch

Delaying this patch till later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524836</commentid>
    <comment_count>6</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-04-05 14:43:11 -0700</bug_when>
    <thetext>This change is very much obsolete, especially with the addition of watchOS. Closing this bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297952</attachid>
            <date>2017-01-03 14:21:02 -0800</date>
            <delta_ts>2017-01-04 08:47:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166660-20170103141937.patch</filename>
            <type>text/plain</type>
            <size>16879</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDI0NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDE3LTAxLTAzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgSU9TRGV2aWNlLCBzaGFyZSBmdW5jdGlvbmFsaXR5IHdpdGggSU9T
U2ltdWxhdG9yIGluIElPU0Jhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NjY2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weToKKyAgICAgICAg
KERhcndpblBvcnQuZXh0cmFjdEJ1bmRsZUlEKTogU2VhcmNoIGFuIGFwcCBidW5kbGUgZm9yIGEg
cGxpc3QgYW5kIGJ1bmRsZSBJRC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFj
dG9yeS5weToKKyAgICAgICAgKFBvcnRGYWN0b3J5KTogQ2hhbmdlIElPU1BvcnQgdG8gSU9TRGV2
aWNlLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHk6CisgICAgICAgIChJ
T1NCYXNlKTogQmFzZSBjbGFzcyBmb3IgSU9TRGV2aWNlIGFuZCBJT1NTaW11bGF0b3IgcG9ydC4K
KyAgICAgICAgKElPU0Jhc2UuZHJpdmVyX25hbWUpOiBNb3ZlZCBmcm9tIElPU1NpbXVsYXRvclBv
cnQuCisgICAgICAgIChJT1NCYXNlLl9nZXRfY3Jhc2hfbG9nKTogTW92ZWQgZnJvbSBJT1NTaW11
bGF0b3JQb3J0LgorICAgICAgICAoSU9TQmFzZS5fdGVzdGluZ19kZXZpY2UpOiBBY2Nlc3MgZGV2
aWNlcyBieSBpbmRleC4KKyAgICAgICAgKElPU0Jhc2UuZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVt
YmVyKTogTW92ZWQgZnJvbSBJT1NTaW11bGF0b3JQb3J0LgorICAgICAgICAoSU9TRGV2aWNlKTog
Q2xhc3MgcmVwcmVzZW50aW5nIHBoeXNpY2FsIGlPUyBkZXZpY2VzLgorICAgICAgICAoSU9TU2lt
dWxhdG9yUG9ydCk6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9faW5pdF9fKTogQ2xlYW4g
dXAgdW51c2VkIHZhcmlhYmxlLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5kcml2ZXJfbmFt
ZSk6IE1vdmVkIHRvIElPU0Jhc2UuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9nZXRfY3Jh
c2hfbG9nKTogTW92ZWQgdG8gSU9TQmFzZS4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuZGV2
aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyKTogTW92ZWQgdG8gSU9TQmFzZS4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAgICAgICAoSU9TVGVzdCk6
IEFkZGVkIElPU0RldmljZSBwb3J0IHRlc3RpbmcuCisgICAgICAgIChJT1NTaW11bGF0b3JUZXN0
KTogQWRvcHRlZCBvbGQgZnVuY3Rpb25zIGZyb20gaW9zVGVzdC4KKyAgICAgICAgKElPU1NpbXVs
YXRvclRlc3QubWFrZV9wb3J0KTogQWRqdXN0ZWQgdG8gaW5oZXJpdCBmcm9tIElPU0Jhc2VUZXN0
LgorICAgICAgICAoSU9TU2ltdWxhdG9yVGVzdC50ZXN0X2dldF9jcmFzaF9sb2coc2VsZik6IE1v
dmVkIHRvIElPU0Jhc2VUZXN0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Ni
YXNlX3Rlc3RjYXNlLnB5OiBBZGRlZC4KKyAgICAgICAgKElPU0Jhc2VUZXN0KTogU2hhcmVkIHRl
c3RpbmcgZm9yIElPU1NpbXVsYXRvciBhbmQgSU9TVGVzdC4KKyAgICAgICAgKElPU0Jhc2VUZXN0
LnRlc3RfZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yVGVzdC4KKwogMjAx
Ny0wMS0wMyAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0dUS10gRXhwb3NlIFdlYktpdFNlY3VyaXR5T3JpZ2luIEFQSQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CShyZXZpc2lvbiAyMTAyMzkpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMyAr
MTc0LDYgQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBleGNlcHQgU2Ny
aXB0RXJyb3I6CiAgICAgICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsgZmFsbGluZyBi
YWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisK
KyAgICBkZWYgZXh0cmFjdEJ1bmRsZUlEKHNlbGYsIGFwcCk6CisgICAgICAgIHJldHVybiBzZWxm
Ll9leGVjdXRpdmUucnVuX2NvbW1hbmQoWycvdXNyL2xpYmV4ZWMvUGxpc3RCdWRkeScsICctYycs
ICciUHJpbnQgQ0ZCdW5kbGVJZGVudGlmaWVyIicsICdJbmZvLnBsaXN0J10sIHJldHVybl9zdGRl
cnI9RmFsc2UpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weQkocmV2
aXNpb24gMjEwMjM5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnkucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDE2ICs4MSwxNiBAQCBjbGFzcyBQb3J0RmFjdG9yeShvYmpl
Y3QpOgogICAgICMgT3JkZXIgbWF0dGVycy4gIEZvciBwb3J0IGNsYXNzZXMgdGhhdCBoYXZlIGEg
cG9ydF9uYW1lIHdpdGggYQogICAgICMgY29tbW9uIHByZWZpeCwgdGhlIG1vcmUgc3BlY2lmaWMg
cG9ydCBjbGFzcyBzaG91bGQgYmUgbGlzdGVkCiAgICAgIyBmaXJzdC4gIEZvciBleGFtcGxlLCAn
aW9zLklPU1NpbXVsYXRvclBvcnQnIChwb3J0X25hbWU9J2lvcy1zaW11bGF0b3InKQotICAgICMg
c2hvdWxkIGJlIGxpc3RlZCBiZWZvcmUgJ2lvcy5JT1NQb3J0JyAocG9ydF9uYW1lPSdpb3MnKS4g
IElmIHRoaXMKKyAgICAjIHNob3VsZCBiZSBsaXN0ZWQgYmVmb3JlICdpb3MuSU9TRGV2aWNlJyAo
cG9ydF9uYW1lPSdpb3MnKS4gIElmIHRoaXMKICAgICAjIHJ1bGUgaXMgbm90IGZvbGxvd2VkLCB0
aGVuIGB3ZWJraXQtcGF0Y2ggLS1pb3Mtc2ltdWxhdG9yYCB3aWxsIHRyeQotICAgICMgdG8gdXNl
IElPU1BvcnQgaW5zdGVhZCBvZiBJT1NTaW11bGF0b3JQb3J0IGJlY2F1c2UgJ2lvcycKLSAgICAj
IChJT1NQb3J0LnBvcnRfbmFtZSkgaXMgYSBwcmVmaXggb2YgJ2lvcy1zaW11bGF0b3InIChwb3J0
X25hbWUKKyAgICAjIHRvIHVzZSBJT1NEZXZpY2UgaW5zdGVhZCBvZiBJT1NTaW11bGF0b3JQb3J0
IGJlY2F1c2UgJ2lvcycKKyAgICAjIChJT1NEZXZpY2UucG9ydF9uYW1lKSBpcyBhIHByZWZpeCBv
ZiAnaW9zLXNpbXVsYXRvcicgKHBvcnRfbmFtZQogICAgICMgZGVyaXZlZCBmcm9tICctLWlvcy1z
aW11bGF0b3InIGNvbW1hbmQtbGluZSBzd2l0Y2gpLCBmb3IgZXhhbXBsZS4KICAgICBQT1JUX0NM
QVNTRVMgPSAoCiAgICAgICAgICdlZmwuRWZsUG9ydCcsCiAgICAgICAgICdndGsuR3RrUG9ydCcs
CiAgICAgICAgICdpb3MuSU9TU2ltdWxhdG9yUG9ydCcsCi0gICAgICAgICdpb3MuSU9TUG9ydCcs
CisgICAgICAgICdpb3MuSU9TRGV2aWNlJywKICAgICAgICAgJ21hYy5NYWNQb3J0JywKICAgICAg
ICAgJ21vY2tfZHJ0Lk1vY2tEUlRQb3J0JywKICAgICAgICAgJ3Rlc3QuVGVzdFBvcnQnLApJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CShyZXZpc2lvbiAyMTAyMzkpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3NSBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltCiBfbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAotY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0
KToKK2NsYXNzIElPU0Jhc2UoRGFyd2luUG9ydCk6CisKKyAgICBTVUJQUk9DRVNTX0NSQVNIX1JF
R0VYID0gcmUuY29tcGlsZSgnI0NSQVNIRUQgLSAoP1A8c3VicHJvY2Vzc19uYW1lPlxTKykgXChw
aWQgKD9QPHN1YnByb2Nlc3NfcGlkPlxkKylcKScpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
aG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CisgICAgICAgIERhcndpblBvcnQuX19pbml0X18o
c2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fcHJpbnRpbmdf
Y21kX2xpbmUgPSBGYWxzZQorICAgICAgICBzZWxmLl9jdXJyZW50X2RldmljZSA9IE5vbmUKKwor
ICAgIGRlZiBkcml2ZXJfbmFtZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdk
cml2ZXJfbmFtZScpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbignZHJpdmVy
X25hbWUnKQorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicp
OgorICAgICAgICAgICAgcmV0dXJuICdXZWJLaXRUZXN0UnVubmVyQXBwLmFwcCcKKyAgICAgICAg
cmV0dXJuICdEdW1wUmVuZGVyVHJlZS5hcHAnCisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2Vs
ZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lLnRp
bWUsIHNsZWVwX2ZuPXRpbWUuc2xlZXAsIHdhaXRfZm9yX2xvZz1UcnVlKToKKyAgICAgICAgdGlt
ZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCisgICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4g
b3IgdGltZS5zbGVlcAorCisgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBjb2xsZWN0IHRoZSBh
Y3R1YWwgY3Jhc2ggbG9nIGZvciBEdW1wUmVuZGVyVHJlZS5hcHAgYmVjYXVzZSBpdCBpbmNsdWRl
cyBtb3JlCisgICAgICAgICMgaW5mb3JtYXRpb24gKGUuZy4gZXhjZXB0aW9uIGNvZGVzKSB0aGFu
IGlzIGF2YWlsYWJsZSBpbiB0aGUgc3RhY2sgdHJhY2Ugd3JpdHRlbiB0byBzdGFuZGFyZCBlcnJv
ci4KKyAgICAgICAgc3RkZXJyX2xpbmVzID0gW10KKyAgICAgICAgY3Jhc2hlZF9zdWJwcm9jZXNz
X25hbWVfYW5kX3BpZCA9IE5vbmUgICMgZS5nLiAoJ0R1bXBSZW5kZXJUcmVlLmFwcCcsIDEyMzQp
CisgICAgICAgIGZvciBsaW5lIGluIChzdGRlcnIgb3IgJycpLnNwbGl0bGluZXMoKToKKyAgICAg
ICAgICAgIGlmIG5vdCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkOgorICAgICAgICAg
ICAgICAgIG1hdGNoID0gc2VsZi5TVUJQUk9DRVNTX0NSQVNIX1JFR0VYLm1hdGNoKGxpbmUpCisg
ICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIGNyYXNoZWRfc3Vi
cHJvY2Vzc19uYW1lX2FuZF9waWQgPSAobWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3NfbmFtZScpLCBp
bnQobWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3NfcGlkJykpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZQorICAgICAgICAgICAgc3RkZXJyX2xpbmVzLmFwcGVuZChsaW5lKQorCisgICAgICAg
IGlmIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQ6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5fZ2V0X2NyYXNoX2xvZyhjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzBdLCBj
cmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzFdLCBzdGRvdXQsCisgICAgICAgICAgICAg
ICAgJ1xuJy5qb2luKHN0ZGVycl9saW5lcyksIG5ld2VyX3RoYW4sIHRpbWVfZm4sIHNsZWVwX2Zu
LCB3YWl0X2Zvcl9sb2cpCisKKyAgICAgICAgX2xvZy5kZWJ1ZygnbG9va2luZyBmb3IgY3Jhc2gg
bG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQorICAgICAgICBjcmFzaF9sb2cgPSAn
JworICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKKyAgICAgICAgbm93
ID0gdGltZV9mbigpCisgICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChzZWxmLmdldF9v
cHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQorICAgICAgICB3aGlsZSBub3QgY3Jhc2hfbG9n
IGFuZCBub3cgPD0gZGVhZGxpbmU6CisgICAgICAgICAgICBjcmFzaF9sb2cgPSBjcmFzaF9sb2dz
LmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3Ro
YW49bmV3ZXJfdGhhbikKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0X2Zvcl9sb2c6CisgICAgICAg
ICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2cgb3Igbm90IFtsaW5l
IGZvciBsaW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVzKCkgaWYgbm90IGxpbmUuc3RhcnRzd2l0
aCgnRVJST1InKV06CisgICAgICAgICAgICAgICAgc2xlZXBfZm4oMC4xKQorICAgICAgICAgICAg
ICAgIG5vdyA9IHRpbWVfZm4oKQorCisgICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6CisgICAgICAg
ICAgICByZXR1cm4gc3RkZXJyLCBOb25lCisgICAgICAgIHJldHVybiBzdGRlcnIsIGNyYXNoX2xv
ZworCisgICAgZGVmIF91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycyhzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuZ2V0X29wdGlvbignZGVkaWNhdGVkX3NpbXVsYXRvcnMnKQorCisgICAgZGVm
IF90ZXN0aW5nX2RldmljZShzZWxmLCBudW1iZXIpOgorICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgIyBUaGlzIGlzIG9ubHkgZXhwb3NlZCBzbyB0aGF0IElPU1NpbXVsYXRvckRyaXZlciBjYW4g
dXNlIGl0LgorICAgIGRlZiBkZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZiwgbnVtYmVy
KToKKyAgICAgICAgaWYgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmU6CisgICAgICAgICAgICByZXR1
cm4gJzxkdW1teSBpZD4nCisgICAgICAgIGlmIHNlbGYuX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0
b3JzKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fdGVzdGluZ19kZXZpY2UobnVtYmVyKS51
ZGlkCisgICAgICAgIHJldHVybiBzZWxmLl9jdXJyZW50X2RldmljZS51ZGlkCisKKworY2xhc3Mg
SU9TRGV2aWNlKElPU0Jhc2UpOgogICAgIHBvcnRfbmFtZSA9ICJpb3MiCiAKICAgICBBUkNISVRF
Q1RVUkVTID0gWydhcm12NycsICdhcm12N3MnLCAnYXJtNjQnXQpAQCAtNjYsNyArMTM0LDcgQEAg
Y2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgcmV0dXJuICdpb3MnCiAKIAotY2xh
c3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKK2NsYXNzIElPU1NpbXVsYXRvclBvcnQo
SU9TQmFzZSk6CiAgICAgcG9ydF9uYW1lID0gImlvcy1zaW11bGF0b3IiCiAKICAgICBGVVRVUkVf
VkVSU0lPTiA9ICdmdXR1cmUnCkBAIC05NiwxMCArMTY0LDkgQEAgY2xhc3MgSU9TU2ltdWxhdG9y
UG9ydChEYXJ3aW5Qb3J0KToKICAgICB9CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwg
cG9ydF9uYW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIERhcndpblBvcnQuX19pbml0X18oc2VsZiwg
aG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAgICAgICAgSU9TQmFzZS5fX2luaXRfXyhzZWxm
LCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQogCiAgICAgICAgIG9wdGlvbmFsX2RldmljZV9j
bGFzcyA9IHNlbGYuZ2V0X29wdGlvbignZGV2aWNlX2NsYXNzJykKLSAgICAgICAgc2VsZi5fcHJp
bnRpbmdfY21kX2xpbmUgPSBGYWxzZQogICAgICAgICBzZWxmLl9kZXZpY2VfY2xhc3MgPSBvcHRp
b25hbF9kZXZpY2VfY2xhc3MgaWYgb3B0aW9uYWxfZGV2aWNlX2NsYXNzIGVsc2Ugc2VsZi5ERUZB
VUxUX0RFVklDRV9DTEFTUwogICAgICAgICBfbG9nLmRlYnVnKCdJT1NTaW11bGF0b3JQb3J0IF9k
ZXZpY2VfY2xhc3MgaXMgJXMnLCBzZWxmLl9kZXZpY2VfY2xhc3MpCiAKQEAgLTExMSwxMyArMTc4
LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgICAg
ICBfbG9nLndhcm4oJ0Nhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgY2hpbGQgcHJvY2VzcyB3aGVu
IHVzaW5nIGEgcnVubmluZyBzaW11bGF0b3IuICBTZXR0aW5nIGNoaWxkX3Byb2Nlc3NlcyB0byAx
LicpCiAgICAgICAgICAgICBzZWxmLnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCiAK
LSAgICBkZWYgZHJpdmVyX25hbWUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbign
ZHJpdmVyX25hbWUnKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9vcHRpb24oJ2RyaXZl
cl9uYW1lJykKLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXIn
KToKLSAgICAgICAgICAgIHJldHVybiAnV2ViS2l0VGVzdFJ1bm5lckFwcC5hcHAnCi0gICAgICAg
IHJldHVybiAnRHVtcFJlbmRlclRyZWUuYXBwJwotCiAgICAgZGVmIGRyaXZlcl9jbWRfbGluZV9m
b3JfbG9nZ2luZyhzZWxmKToKICAgICAgICAgIyBBdm9pZCBzcGlubmluZyB1cCBkZXZpY2VzIGp1
c3QgZm9yIGxvZ2dpbmcgdGhlIGNvbW1hbmRsaW5lLgogICAgICAgICBzZWxmLl9wcmludGluZ19j
bWRfbGluZSA9IFRydWUKQEAgLTE5NSw0NCArMjU1LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9y
dChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4g
VHJ1ZQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBz
dGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVw
LCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6Ci0gICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUu
dGltZQotICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKLQotICAgICAg
ICAjIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGUgYWN0dWFsIGNyYXNoIGxvZyBmb3IgRHVt
cFJlbmRlclRyZWUuYXBwIGJlY2F1c2UgaXQgaW5jbHVkZXMgbW9yZQotICAgICAgICAjIGluZm9y
bWF0aW9uIChlLmcuIGV4Y2VwdGlvbiBjb2RlcykgdGhhbiBpcyBhdmFpbGFibGUgaW4gdGhlIHN0
YWNrIHRyYWNlIHdyaXR0ZW4gdG8gc3RhbmRhcmQgZXJyb3IuCi0gICAgICAgIHN0ZGVycl9saW5l
cyA9IFtdCi0gICAgICAgIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQgPSBOb25lICAj
IGUuZy4gKCdEdW1wUmVuZGVyVHJlZS5hcHAnLCAxMjM0KQotICAgICAgICBmb3IgbGluZSBpbiAo
c3RkZXJyIG9yICcnKS5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICBpZiBub3QgY3Jhc2hlZF9z
dWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKLSAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuU1VC
UFJPQ0VTU19DUkFTSF9SRUdFWC5tYXRjaChsaW5lKQotICAgICAgICAgICAgICAgIGlmIG1hdGNo
OgotICAgICAgICAgICAgICAgICAgICBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkID0g
KG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX25hbWUnKSwgaW50KG1hdGNoLmdyb3VwKCdzdWJwcm9j
ZXNzX3BpZCcpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHN0
ZGVycl9saW5lcy5hcHBlbmQobGluZSkKLQotICAgICAgICBpZiBjcmFzaGVkX3N1YnByb2Nlc3Nf
bmFtZV9hbmRfcGlkOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jh
c2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVf
YW5kX3BpZFsxXSwgc3Rkb3V0LAotICAgICAgICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGlu
ZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQotCi0gICAg
ICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNoZWQKLSAgICAgICAgX2xvZy5kZWJ1ZygnbG9va2lu
ZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQotICAgICAgICBj
cmFzaF9sb2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkK
LSAgICAgICAgbm93ID0gdGltZV9mbigpCi0gICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGlu
dChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQotICAgICAgICB3aGlsZSBu
b3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6Ci0gICAgICAgICAgICBjcmFzaF9sb2cg
PSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzPVRy
dWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKLSAgICAgICAgICAgIGlmIG5vdCB3YWl0X2Zvcl9s
b2c6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2cg
b3Igbm90IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVzKCkgaWYgbm90IGxp
bmUuc3RhcnRzd2l0aCgnRVJST1InKV06Ci0gICAgICAgICAgICAgICAgc2xlZXBfZm4oMC4xKQot
ICAgICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQotCi0gICAgICAgIGlmIG5vdCBjcmFzaF9s
b2c6Ci0gICAgICAgICAgICByZXR1cm4gc3RkZXJyLCBOb25lCi0gICAgICAgIHJldHVybiBzdGRl
cnIsIGNyYXNoX2xvZwotCiAgICAgZGVmIF9idWlsZF9yZWxheShzZWxmKToKICAgICAgICAgZW52
aXJvbm1lbnQgPSBzZWxmLmhvc3QuY29weV9jdXJyZW50X2Vudmlyb25tZW50KCkKICAgICAgICAg
ZW52aXJvbm1lbnQuZGlzYWJsZV9nY2Nfc21hcnRxdW90ZXMoKQpAQCAtMzk5LDExICs0MjEsNiBA
QCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCiAgICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5jaGVj
a19zeXNfZGVwcyhuZWVkc19odHRwKQogCi0gICAgU1VCUFJPQ0VTU19DUkFTSF9SRUdFWCA9IHJl
LmNvbXBpbGUoJyNDUkFTSEVEIC0gKD9QPHN1YnByb2Nlc3NfbmFtZT5cUyspIFwocGlkICg/UDxz
dWJwcm9jZXNzX3BpZD5cZCspXCknKQotCi0gICAgZGVmIF91c2luZ19kZWRpY2F0ZWRfc2ltdWxh
dG9ycyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbignZGVkaWNhdGVkX3Np
bXVsYXRvcnMnKQotCiAgICAgZGVmIF9jcmVhdGVfZGV2aWNlKHNlbGYsIG51bWJlcik6CiAgICAg
ICAgIHJldHVybiBTaW11bGF0b3IuY3JlYXRlX2RldmljZShudW1iZXIsIHNlbGYuc2ltdWxhdG9y
X2RldmljZV90eXBlKCksIHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUpCiAKQEAgLTQxMywxNCArNDMw
LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICBkZWYgX3Rlc3Rp
bmdfZGV2aWNlKHNlbGYsIG51bWJlcik6CiAgICAgICAgIHJldHVybiBTaW11bGF0b3IuZGV2aWNl
X251bWJlcihudW1iZXIpCiAKLSAgICAjIFRoaXMgaXMgb25seSBleHBvc2VkIHNvIHRoYXQgSU9T
U2ltdWxhdG9yRHJpdmVyIGNhbiB1c2UgaXQuCi0gICAgZGVmIGRldmljZV9pZF9mb3Jfd29ya2Vy
X251bWJlcihzZWxmLCBudW1iZXIpOgotICAgICAgICBpZiBzZWxmLl9wcmludGluZ19jbWRfbGlu
ZToKLSAgICAgICAgICAgIHJldHVybiAnPGR1bW15IGlkPicKLSAgICAgICAgaWYgc2VsZi5fdXNp
bmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl90ZXN0
aW5nX2RldmljZShudW1iZXIpLnVkaWQKLSAgICAgICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRfZGV2
aWNlLnVkaWQKLQogICAgIGRlZiBnZXRfc2ltdWxhdG9yX3BhdGgoc2VsZiwgc3VmZml4PSIiKToK
ICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLlNJTVVMQVRPUl9ESVJFQ1RPUlksICJT
aW11bGF0b3IiICsgc3RyKHN1ZmZpeCkgKyAiLmFwcCIpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQkocmV2aXNpb24gMjEwMjM5KQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMjIsOCArMjIsOSBAQAogCiBpbXBvcnQgdGltZQogCitmcm9tIHdlYmtpdHB5LnBvcnQuaW9z
IGltcG9ydCBJT1NEZXZpY2UKIGZyb20gd2Via2l0cHkucG9ydC5pb3MgaW1wb3J0IElPU1NpbXVs
YXRvclBvcnQKLWZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZGFyd2luX3Rlc3RjYXNlCitmcm9t
IHdlYmtpdHB5LnBvcnQgaW1wb3J0IGlvc2Jhc2VfdGVzdGNhc2UKIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQog
ZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwpAQCAtMzEsNyAr
MzIsMjAgQEAgZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tbwogZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhv
c3QKIAogCi1jbGFzcyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0KToKK2NsYXNz
IElPU1Rlc3QoaW9zYmFzZV90ZXN0Y2FzZS5JT1NCYXNlVGVzdCk6CisgICAgb3NfbmFtZSA9ICdp
b3MnCisgICAgb3NfdmVyc2lvbiA9ICcnCisgICAgcG9ydF9uYW1lID0gJ2lvcycKKyAgICBwb3J0
X21ha2VyID0gSU9TRGV2aWNlCisgICAgaXNfc2ltdWxhdG9yID0gRmFsc2UKKworICAgIGRlZiBt
YWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBv
c19uYW1lPU5vbmUsIG9zX3ZlcnNpb249Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBwb3J0ID0g
c3VwZXIoSU9TVGVzdCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRf
bmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUsIHNfdmVyc2lvbj1vc192ZXJz
aW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBwb3J0LnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nl
c3NlcycsIDEpCisgICAgICAgIHJldHVybiBwb3J0CisKKworY2xhc3MgSU9TU2ltdWxhdG9yVGVz
dChpb3NiYXNlX3Rlc3RjYXNlLklPU0Jhc2VUZXN0KToKICAgICBvc19uYW1lID0gJ2lvcy1zaW11
bGF0b3InCiAgICAgb3NfdmVyc2lvbiA9ICcnCiAgICAgcG9ydF9uYW1lID0gJ2lvcy1zaW11bGF0
b3InCkBAIC0zOSw3ICs1Myw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndp
blRlc3QKICAgICBpc19zaW11bGF0b3IgPSBUcnVlCiAKICAgICBkZWYgbWFrZV9wb3J0KHNlbGYs
IGhvc3Q9Tm9uZSwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBv
c192ZXJzaW9uPU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAgcG9ydCA9IHN1cGVyKGlvc1Rlc3Qs
IHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9
b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3ZlcnNpb249b3NfdmVyc2lvbiwga3dhcmdzPWt3
YXJncykKKyAgICAgICAgcG9ydCA9IHN1cGVyKElPU1NpbXVsYXRvclRlc3QsIHNlbGYpLm1ha2Vf
cG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3Nf
bmFtZT1vc19uYW1lLCBzX3ZlcnNpb249b3NfdmVyc2lvbiwga3dhcmdzPWt3YXJncykKICAgICAg
ICAgcG9ydC5zZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKQogICAgICAgICByZXR1cm4g
cG9ydAogCkBAIC01MywxNCArNjcsNiBAQCBjbGFzcyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5E
YXJ3aW5UZXN0CiAgICAgZGVmIHRlc3Rfb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnaW9zLXNpbXVsYXRvcicsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0
aW5nX3N5c3RlbSgpKQogCi0gICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKToKLSAgICAg
ICAgIyBNYWMgY3Jhc2ggbG9ncyBhcmUgdGVzdGVkIGVsc2V3aGVyZSwgc28gaGVyZSB3ZSBqdXN0
IG1ha2Ugc3VyZSB3ZSBkb24ndCBjcmFzaC4KLSAgICAgICAgZGVmIGZha2VfdGltZV9jYigpOgot
ICAgICAgICAgICAgdGltZXMgPSBbMCwgMjAsIDQwXQotICAgICAgICAgICAgcmV0dXJuIGxhbWJk
YTogdGltZXMucG9wKDApCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChwb3J0X25hbWU9
J2lvcy1zaW11bGF0b3InKQotICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdEdW1wUmVuZGVy
VHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0X2Zvcl9sb2c9RmFsc2Up
Ci0KICAgICBkZWYgdGVzdF8zMmJpdChzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9w
b3J0KG9wdGlvbnM9TW9ja09wdGlvbnMoYXJjaGl0ZWN0dXJlPSd4ODYnKSkKIApJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc2Jhc2VfdGVzdGNhc2UucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc2Jhc2VfdGVzdGNhc2UucHkJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc2Jhc2VfdGVzdGNhc2Uu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkucG9y
dCBpbXBvcnQgZGFyd2luX3Rlc3RjYXNlCisKKworY2xhc3MgSU9TQmFzZVRlc3QoZGFyd2luX3Rl
c3RjYXNlLkRhcndpblRlc3QpOgorCisgICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKToK
KyAgICAgICAgIyBNYWMgY3Jhc2ggbG9ncyBhcmUgdGVzdGVkIGVsc2V3aGVyZSwgc28gaGVyZSB3
ZSBqdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBjcmFzaC4KKyAgICAgICAgZGVmIGZha2VfdGltZV9j
YigpOgorICAgICAgICAgICAgdGltZXMgPSBbMCwgMjAsIDQwXQorICAgICAgICAgICAgcmV0dXJu
IGxhbWJkYTogdGltZXMucG9wKDApCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChwb3J0
X25hbWU9J2lvcy1zaW11bGF0b3InKQorICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdEdW1w
UmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0X2Zvcl9sb2c9
RmFsc2UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298014</attachid>
            <date>2017-01-04 08:47:17 -0800</date>
            <delta_ts>2017-01-04 09:56:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166660-20170104084550.patch</filename>
            <type>text/plain</type>
            <size>17841</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM2IEBACisyMDE3LTAxLTA0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgSU9TRGV2aWNlLCBzaGFyZSBmdW5jdGlvbmFsaXR5IHdpdGggSU9T
U2ltdWxhdG9yIGluIElPU0Jhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NjY2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weToKKyAgICAgICAg
KERhcndpblBvcnQuX19pbml0X18pOiBVc2Ugc3VwZXIgZm9yIHBhc3NpbmcgaW5pdGlhbGl6ZXIg
dmFyaWFibGVzLgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0QnVuZGxlSUQpOiBTZWFyY2gg
YW4gYXBwIGJ1bmRsZSBmb3IgYSBwbGlzdCBhbmQgYnVuZGxlIElELgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5OgorICAgICAgICAoUG9ydEZhY3RvcnkpOiBDaGFu
Z2UgSU9TUG9ydCB0byBJT1NEZXZpY2UuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvcy5weToKKyAgICAgICAgKElPU0Jhc2VQb3J0KTogQmFzZSBjbGFzcyBmb3IgSU9TRGV2aWNl
IGFuZCBJT1NTaW11bGF0b3IgcG9ydC4KKyAgICAgICAgKElPU0Jhc2VQb3J0LmRyaXZlcl9uYW1l
KTogTW92ZWQgZnJvbSBJT1NTaW11bGF0b3JQb3J0LgorICAgICAgICAoSU9TQmFzZVBvcnQuX2dl
dF9jcmFzaF9sb2cpOiBNb3ZlZCBmcm9tIElPU1NpbXVsYXRvclBvcnQuCisgICAgICAgIChJT1NC
YXNlUG9ydC5fdGVzdGluZ19kZXZpY2UpOiBBY2Nlc3MgZGV2aWNlcyBieSBpbmRleC4KKyAgICAg
ICAgKElPU0Jhc2VQb3J0LmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcik6IE1vdmVkIGZyb20g
SU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0RldmljZVBvcnQpOiBDbGFzcyByZXByZXNl
bnRpbmcgcGh5c2ljYWwgaU9TIGRldmljZXMuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0KToK
KyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX19pbml0X18pOiBDbGVhbiB1cCB1bnVzZWQgdmFy
aWFibGUuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmRyaXZlcl9uYW1lKTogTW92ZWQgdG8g
SU9TQmFzZS4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2dldF9jcmFzaF9sb2cpOiBNb3Zl
ZCB0byBJT1NCYXNlLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5kZXZpY2VfaWRfZm9yX3dv
cmtlcl9udW1iZXIpOiBNb3ZlZCB0byBJT1NCYXNlLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3NfdW5pdHRlc3QucHk6CisgICAgICAgIChJT1NUZXN0KTogQWRkZWQgSU9TRGV2
aWNlIHBvcnQgdGVzdGluZy4KKyAgICAgICAgKElPU1NpbXVsYXRvclRlc3QpOiBBZG9wdGVkIG9s
ZCBmdW5jdGlvbnMgZnJvbSBpb3NUZXN0LgorICAgICAgICAoSU9TU2ltdWxhdG9yVGVzdC5tYWtl
X3BvcnQpOiBBZGp1c3RlZCB0byBpbmhlcml0IGZyb20gSU9TQmFzZVRlc3QuCisgICAgICAgIChJ
T1NTaW11bGF0b3JUZXN0LnRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKTogTW92ZWQgdG8gSU9TQmFz
ZVRlc3QuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc2Jhc2VfdGVzdGNhc2Uu
cHk6IEFkZGVkLgorICAgICAgICAoSU9TQmFzZVRlc3QpOiBTaGFyZWQgdGVzdGluZyBmb3IgSU9T
U2ltdWxhdG9yIGFuZCBJT1NUZXN0LgorICAgICAgICAoSU9TQmFzZVRlc3QudGVzdF9nZXRfY3Jh
c2hfbG9nKTogTW92ZWQgZnJvbSBJT1NTaW11bGF0b3JUZXN0LgorCiAyMDE3LTAxLTA0ICBDc2Fi
YSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBj
bWFrZSBidWlsZGZpeCBhZnRlciByMjEwMjY2LgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2Rhcndpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGFyd2luLnB5CShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIERh
cndpblBvcnQoQXBwbGVQb3J0KToKICAgICBTREsgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18o
c2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIEFwcGxlUG9ydC5fX2lu
aXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAgICBzdXBlcihEYXJ3
aW5Qb3J0LCBzZWxmKS5fX2luaXRfXyhob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQogCiAgICAg
ICAgIHNlbGYuX2xlYWtfZGV0ZWN0b3IgPSBMZWFrRGV0ZWN0b3Ioc2VsZikKICAgICAgICAgaWYg
c2VsZi5nZXRfb3B0aW9uKCJsZWFrcyIpOgpAQCAtMTc0LDMgKzE3NCw2IEBAIGNsYXNzIERhcndp
blBvcnQoQXBwbGVQb3J0KToKICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yOgogICAgICAgICAg
ICAgX2xvZy53YXJuKCJ4Y3J1biBmYWlsZWQ7IGZhbGxpbmcgYmFjayB0byAnJXMnLiIgJSBmYWxs
YmFjaykKICAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworCisgICAgZGVmIGV4dHJhY3RCdW5k
bGVJRChzZWxmLCBhcHApOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKFsnL3Vzci9saWJleGVjL1BsaXN0QnVkZHknLCAnLWMnLCAnIlByaW50IENGQnVuZGxlSWRl
bnRpZmllciInLCAnSW5mby5wbGlzdCddLCByZXR1cm5fc3RkZXJyPUZhbHNlKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnkucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnkucHkJKHJldmlzaW9uIDIxMDI3NCkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5CSh3b3JraW5nIGNvcHkpCkBAIC04
MSwxNiArODEsMTYgQEAgY2xhc3MgUG9ydEZhY3Rvcnkob2JqZWN0KToKICAgICAjIE9yZGVyIG1h
dHRlcnMuICBGb3IgcG9ydCBjbGFzc2VzIHRoYXQgaGF2ZSBhIHBvcnRfbmFtZSB3aXRoIGEKICAg
ICAjIGNvbW1vbiBwcmVmaXgsIHRoZSBtb3JlIHNwZWNpZmljIHBvcnQgY2xhc3Mgc2hvdWxkIGJl
IGxpc3RlZAogICAgICMgZmlyc3QuICBGb3IgZXhhbXBsZSwgJ2lvcy5JT1NTaW11bGF0b3JQb3J0
JyAocG9ydF9uYW1lPSdpb3Mtc2ltdWxhdG9yJykKLSAgICAjIHNob3VsZCBiZSBsaXN0ZWQgYmVm
b3JlICdpb3MuSU9TUG9ydCcgKHBvcnRfbmFtZT0naW9zJykuICBJZiB0aGlzCisgICAgIyBzaG91
bGQgYmUgbGlzdGVkIGJlZm9yZSAnaW9zLklPU0RldmljZVBvcnQnIChwb3J0X25hbWU9J2lvcycp
LiAgSWYgdGhpcwogICAgICMgcnVsZSBpcyBub3QgZm9sbG93ZWQsIHRoZW4gYHdlYmtpdC1wYXRj
aCAtLWlvcy1zaW11bGF0b3JgIHdpbGwgdHJ5Ci0gICAgIyB0byB1c2UgSU9TUG9ydCBpbnN0ZWFk
IG9mIElPU1NpbXVsYXRvclBvcnQgYmVjYXVzZSAnaW9zJwotICAgICMgKElPU1BvcnQucG9ydF9u
YW1lKSBpcyBhIHByZWZpeCBvZiAnaW9zLXNpbXVsYXRvcicgKHBvcnRfbmFtZQorICAgICMgdG8g
dXNlIElPU0RldmljZVBvcnQgaW5zdGVhZCBvZiBJT1NTaW11bGF0b3JQb3J0IGJlY2F1c2UgJ2lv
cycKKyAgICAjIChJT1NEZXZpY2VQb3J0LnBvcnRfbmFtZSkgaXMgYSBwcmVmaXggb2YgJ2lvcy1z
aW11bGF0b3InIChwb3J0X25hbWUKICAgICAjIGRlcml2ZWQgZnJvbSAnLS1pb3Mtc2ltdWxhdG9y
JyBjb21tYW5kLWxpbmUgc3dpdGNoKSwgZm9yIGV4YW1wbGUuCiAgICAgUE9SVF9DTEFTU0VTID0g
KAogICAgICAgICAnZWZsLkVmbFBvcnQnLAogICAgICAgICAnZ3RrLkd0a1BvcnQnLAogICAgICAg
ICAnaW9zLklPU1NpbXVsYXRvclBvcnQnLAotICAgICAgICAnaW9zLklPU1BvcnQnLAorICAgICAg
ICAnaW9zLklPU0RldmljZVBvcnQnLAogICAgICAgICAnbWFjLk1hY1BvcnQnLAogICAgICAgICAn
bW9ja19kcnQuTW9ja0RSVFBvcnQnLAogICAgICAgICAndGVzdC5UZXN0UG9ydCcsCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDc0
IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW0KIF9sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgor
Y2xhc3MgSU9TQmFzZVBvcnQoRGFyd2luUG9ydCk6CisKKyAgICBTVUJQUk9DRVNTX0NSQVNIX1JF
R0VYID0gcmUuY29tcGlsZSgnI0NSQVNIRUQgLSAoP1A8c3VicHJvY2Vzc19uYW1lPlxTKykgXChw
aWQgKD9QPHN1YnByb2Nlc3NfcGlkPlxkKylcKScpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
aG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKElPU0Jhc2VQb3J0LCBz
ZWxmKS5fX2luaXRfXyhob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9w
cmludGluZ19jbWRfbGluZSA9IEZhbHNlCisgICAgICAgIHNlbGYuX2N1cnJlbnRfZGV2aWNlID0g
Tm9uZQorCisgICAgZGVmIGRyaXZlcl9uYW1lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdldF9v
cHRpb24oJ2RyaXZlcl9uYW1lJyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3B0aW9u
KCdkcml2ZXJfbmFtZScpCisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3Rf
cnVubmVyJyk6CisgICAgICAgICAgICByZXR1cm4gJ1dlYktpdFRlc3RSdW5uZXJBcHAuYXBwJwor
ICAgICAgICByZXR1cm4gJ0R1bXBSZW5kZXJUcmVlLmFwcCcKKworICAgIGRlZiBfZ2V0X2NyYXNo
X2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2Zu
PXRpbWUudGltZSwgc2xlZXBfZm49dGltZS5zbGVlcCwgd2FpdF9mb3JfbG9nPVRydWUpOgorICAg
ICAgICB0aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRpbWUKKyAgICAgICAgc2xlZXBfZm4gPSBz
bGVlcF9mbiBvciB0aW1lLnNsZWVwCisKKyAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGNvbGxl
Y3QgdGhlIGFjdHVhbCBjcmFzaCBsb2cgZm9yIER1bXBSZW5kZXJUcmVlLmFwcCBiZWNhdXNlIGl0
IGluY2x1ZGVzIG1vcmUKKyAgICAgICAgIyBpbmZvcm1hdGlvbiAoZS5nLiBleGNlcHRpb24gY29k
ZXMpIHRoYW4gaXMgYXZhaWxhYmxlIGluIHRoZSBzdGFjayB0cmFjZSB3cml0dGVuIHRvIHN0YW5k
YXJkIGVycm9yLgorICAgICAgICBzdGRlcnJfbGluZXMgPSBbXQorICAgICAgICBjcmFzaGVkX3N1
YnByb2Nlc3NfbmFtZV9hbmRfcGlkID0gTm9uZSAgIyBlLmcuICgnRHVtcFJlbmRlclRyZWUuYXBw
JywgMTIzNCkKKyAgICAgICAgZm9yIGxpbmUgaW4gKHN0ZGVyciBvciAnJykuc3BsaXRsaW5lcygp
OgorICAgICAgICAgICAgaWYgbm90IGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQ6Cisg
ICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLlNVQlBST0NFU1NfQ1JBU0hfUkVHRVgubWF0Y2go
bGluZSkKKyAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgY3Jh
c2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZCA9IChtYXRjaC5ncm91cCgnc3VicHJvY2Vzc19u
YW1lJyksIGludChtYXRjaC5ncm91cCgnc3VicHJvY2Vzc19waWQnKSkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzdGRlcnJfbGluZXMuYXBwZW5kKGxpbmUpCisK
KyAgICAgICAgaWYgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl9nZXRfY3Jhc2hfbG9nKGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9w
aWRbMF0sIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMV0sIHN0ZG91dCwKKyAgICAg
ICAgICAgICAgICAnXG4nLmpvaW4oc3RkZXJyX2xpbmVzKSwgbmV3ZXJfdGhhbiwgdGltZV9mbiwg
c2xlZXBfZm4sIHdhaXRfZm9yX2xvZykKKworICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZv
ciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCisgICAgICAgIGNyYXNo
X2xvZyA9ICcnCisgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQorICAg
ICAgICBub3cgPSB0aW1lX2ZuKCkKKyAgICAgICAgZGVhZGxpbmUgPSBub3cgKyA1ICogaW50KHNl
bGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkpCisgICAgICAgIHdoaWxlIG5vdCBj
cmFzaF9sb2cgYW5kIG5vdyA8PSBkZWFkbGluZToKKyAgICAgICAgICAgIGNyYXNoX2xvZyA9IGNy
YXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9nKG5hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnM9VHJ1ZSwg
bmV3ZXJfdGhhbj1uZXdlcl90aGFuKQorICAgICAgICAgICAgaWYgbm90IHdhaXRfZm9yX2xvZzoK
KyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbm90IGNyYXNoX2xvZyBvciBu
b3QgW2xpbmUgZm9yIGxpbmUgaW4gY3Jhc2hfbG9nLnNwbGl0bGluZXMoKSBpZiBub3QgbGluZS5z
dGFydHN3aXRoKCdFUlJPUicpXToKKyAgICAgICAgICAgICAgICBzbGVlcF9mbigwLjEpCisgICAg
ICAgICAgICAgICAgbm93ID0gdGltZV9mbigpCisKKyAgICAgICAgaWYgbm90IGNyYXNoX2xvZzoK
KyAgICAgICAgICAgIHJldHVybiBzdGRlcnIsIE5vbmUKKyAgICAgICAgcmV0dXJuIHN0ZGVyciwg
Y3Jhc2hfbG9nCisKKyAgICBkZWYgX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCdkZWRpY2F0ZWRfc2ltdWxhdG9ycycpCisK
KyAgICBkZWYgX3Rlc3RpbmdfZGV2aWNlKHNlbGYsIG51bWJlcik6CisgICAgICAgIHJldHVybiBO
b25lCisKKyAgICBkZWYgZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyKHNlbGYsIG51bWJlcik6
CisgICAgICAgIGlmIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lOgorICAgICAgICAgICAgcmV0dXJu
ICc8ZHVtbXkgaWQ+JworICAgICAgICBpZiBzZWxmLl91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9y
cygpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RpbmdfZGV2aWNlKG51bWJlcikudWRp
ZAorICAgICAgICByZXR1cm4gc2VsZi5fY3VycmVudF9kZXZpY2UudWRpZAorCisKK2NsYXNzIElP
U0RldmljZVBvcnQoSU9TQmFzZVBvcnQpOgogICAgIHBvcnRfbmFtZSA9ICJpb3MiCiAKICAgICBB
UkNISVRFQ1RVUkVTID0gWydhcm12NycsICdhcm12N3MnLCAnYXJtNjQnXQpAQCAtNTgsNyArMTI1
LDkgQEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIHBvcnRfbmFtZSA9
IHBvcnRfbmFtZSArICctJyArIG1ham9yX3ZlcnNpb25fbnVtYmVyCiAgICAgICAgIHJldHVybiBw
b3J0X25hbWUKIAotICAgICMgRGVzcGl0ZSB0aGVpciBuYW1lcywgdGhlc2UgZmxhZ3MgZG8gbm90
IGFjdHVhbGx5IGdldCBwYXNzZWQgYWxsIHRoZSB3YXkgZG93biB0byB3ZWJraXQtYnVpbGQuCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgorICAgICAg
ICBzdXBlcihJT1NEZXZpY2VQb3J0LCBzZWxmKS5fX2luaXRfXyhob3N0LCBwb3J0X25hbWUsICoq
a3dhcmdzKQorCiAgICAgZGVmIF9idWlsZF9kcml2ZXJfZmxhZ3Moc2VsZik6CiAgICAgICAgIHJl
dHVybiBbJy0tc2RrJywgJ2lwaG9uZW9zJ10gKyAoWydBUkNIUz0lcycgJSBzZWxmLmFyY2hpdGVj
dHVyZSgpXSBpZiBzZWxmLmFyY2hpdGVjdHVyZSgpIGVsc2UgW10pCiAKQEAgLTY2LDcgKzEzNSw3
IEBAIGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgIHJldHVybiAnaW9zJwogCiAK
LWNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CitjbGFzcyBJT1NTaW11bGF0b3JQ
b3J0KElPU0Jhc2VQb3J0KToKICAgICBwb3J0X25hbWUgPSAiaW9zLXNpbXVsYXRvciIKIAogICAg
IEZVVFVSRV9WRVJTSU9OID0gJ2Z1dHVyZScKQEAgLTk2LDEwICsxNjUsOSBAQCBjbGFzcyBJT1NT
aW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgIH0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKLSAgICAgICAgRGFyd2luUG9ydC5fX2luaXRf
XyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAgICBzdXBlcihJT1NTaW11
bGF0b3JQb3J0LCBzZWxmKS5fX2luaXRfXyhob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQogCiAg
ICAgICAgIG9wdGlvbmFsX2RldmljZV9jbGFzcyA9IHNlbGYuZ2V0X29wdGlvbignZGV2aWNlX2Ns
YXNzJykKLSAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgPSBGYWxzZQogICAgICAgICBz
ZWxmLl9kZXZpY2VfY2xhc3MgPSBvcHRpb25hbF9kZXZpY2VfY2xhc3MgaWYgb3B0aW9uYWxfZGV2
aWNlX2NsYXNzIGVsc2Ugc2VsZi5ERUZBVUxUX0RFVklDRV9DTEFTUwogICAgICAgICBfbG9nLmRl
YnVnKCdJT1NTaW11bGF0b3JQb3J0IF9kZXZpY2VfY2xhc3MgaXMgJXMnLCBzZWxmLl9kZXZpY2Vf
Y2xhc3MpCiAKQEAgLTExMSwxMyArMTc5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3
aW5Qb3J0KToKICAgICAgICAgICAgICAgICBfbG9nLndhcm4oJ0Nhbm5vdCBoYXZlIG1vcmUgdGhh
biBvbmUgY2hpbGQgcHJvY2VzcyB3aGVuIHVzaW5nIGEgcnVubmluZyBzaW11bGF0b3IuICBTZXR0
aW5nIGNoaWxkX3Byb2Nlc3NlcyB0byAxLicpCiAgICAgICAgICAgICBzZWxmLnNldF9vcHRpb24o
J2NoaWxkX3Byb2Nlc3NlcycsIDEpCiAKLSAgICBkZWYgZHJpdmVyX25hbWUoc2VsZik6Ci0gICAg
ICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZHJpdmVyX25hbWUnKToKLSAgICAgICAgICAgIHJldHVy
biBzZWxmLmdldF9vcHRpb24oJ2RyaXZlcl9uYW1lJykKLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0
aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKLSAgICAgICAgICAgIHJldHVybiAnV2ViS2l0VGVz
dFJ1bm5lckFwcC5hcHAnCi0gICAgICAgIHJldHVybiAnRHVtcFJlbmRlclRyZWUuYXBwJwotCiAg
ICAgZGVmIGRyaXZlcl9jbWRfbGluZV9mb3JfbG9nZ2luZyhzZWxmKToKICAgICAgICAgIyBBdm9p
ZCBzcGlubmluZyB1cCBkZXZpY2VzIGp1c3QgZm9yIGxvZ2dpbmcgdGhlIGNvbW1hbmRsaW5lLgog
ICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9IFRydWUKQEAgLTE5NSw0NCArMjU2LDYg
QEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIHJldHVy
biBGYWxzZQogICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNl
bGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50
aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6Ci0gICAgICAgIHRp
bWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQotICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2Zu
IG9yIHRpbWUuc2xlZXAKLQotICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGUg
YWN0dWFsIGNyYXNoIGxvZyBmb3IgRHVtcFJlbmRlclRyZWUuYXBwIGJlY2F1c2UgaXQgaW5jbHVk
ZXMgbW9yZQotICAgICAgICAjIGluZm9ybWF0aW9uIChlLmcuIGV4Y2VwdGlvbiBjb2RlcykgdGhh
biBpcyBhdmFpbGFibGUgaW4gdGhlIHN0YWNrIHRyYWNlIHdyaXR0ZW4gdG8gc3RhbmRhcmQgZXJy
b3IuCi0gICAgICAgIHN0ZGVycl9saW5lcyA9IFtdCi0gICAgICAgIGNyYXNoZWRfc3VicHJvY2Vz
c19uYW1lX2FuZF9waWQgPSBOb25lICAjIGUuZy4gKCdEdW1wUmVuZGVyVHJlZS5hcHAnLCAxMjM0
KQotICAgICAgICBmb3IgbGluZSBpbiAoc3RkZXJyIG9yICcnKS5zcGxpdGxpbmVzKCk6Ci0gICAg
ICAgICAgICBpZiBub3QgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKLSAgICAgICAg
ICAgICAgICBtYXRjaCA9IHNlbGYuU1VCUFJPQ0VTU19DUkFTSF9SRUdFWC5tYXRjaChsaW5lKQot
ICAgICAgICAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgICAgICAgICBjcmFzaGVkX3N1
YnByb2Nlc3NfbmFtZV9hbmRfcGlkID0gKG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX25hbWUnKSwg
aW50KG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX3BpZCcpKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWUKLSAgICAgICAgICAgIHN0ZGVycl9saW5lcy5hcHBlbmQobGluZSkKLQotICAgICAg
ICBpZiBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkOgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFswXSwg
Y3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAotICAgICAgICAgICAg
ICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9m
biwgd2FpdF9mb3JfbG9nKQotCi0gICAgICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNoZWQKLSAg
ICAgICAgX2xvZy5kZWJ1ZygnbG9va2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFt
ZSwgc3RyKHBpZCkpKQotICAgICAgICBjcmFzaF9sb2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dz
ID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKLSAgICAgICAgbm93ID0gdGltZV9mbigpCi0gICAgICAg
IGRlYWRsaW5lID0gbm93ICsgNSAqIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3Nl
cycsIDEpKQotICAgICAgICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6
Ci0gICAgICAgICAgICBjcmFzaF9sb2cgPSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1l
LCBwaWQsIGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKLSAgICAg
ICAgICAgIGlmIG5vdCB3YWl0X2Zvcl9sb2c6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAg
ICAgICAgIGlmIG5vdCBjcmFzaF9sb2cgb3Igbm90IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xv
Zy5zcGxpdGxpbmVzKCkgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnRVJST1InKV06Ci0gICAgICAg
ICAgICAgICAgc2xlZXBfZm4oMC4xKQotICAgICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQot
Ci0gICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6Ci0gICAgICAgICAgICByZXR1cm4gc3RkZXJyLCBO
b25lCi0gICAgICAgIHJldHVybiBzdGRlcnIsIGNyYXNoX2xvZwotCiAgICAgZGVmIF9idWlsZF9y
ZWxheShzZWxmKToKICAgICAgICAgZW52aXJvbm1lbnQgPSBzZWxmLmhvc3QuY29weV9jdXJyZW50
X2Vudmlyb25tZW50KCkKICAgICAgICAgZW52aXJvbm1lbnQuZGlzYWJsZV9nY2Nfc21hcnRxdW90
ZXMoKQpAQCAtMzk5LDExICs0MjIsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBv
cnQpOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBzdXBlcihJT1NT
aW11bGF0b3JQb3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19odHRwKQogCi0gICAgU1VC
UFJPQ0VTU19DUkFTSF9SRUdFWCA9IHJlLmNvbXBpbGUoJyNDUkFTSEVEIC0gKD9QPHN1YnByb2Nl
c3NfbmFtZT5cUyspIFwocGlkICg/UDxzdWJwcm9jZXNzX3BpZD5cZCspXCknKQotCi0gICAgZGVm
IF91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
Z2V0X29wdGlvbignZGVkaWNhdGVkX3NpbXVsYXRvcnMnKQotCiAgICAgZGVmIF9jcmVhdGVfZGV2
aWNlKHNlbGYsIG51bWJlcik6CiAgICAgICAgIHJldHVybiBTaW11bGF0b3IuY3JlYXRlX2Rldmlj
ZShudW1iZXIsIHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBlKCksIHNlbGYuc2ltdWxhdG9yX3J1
bnRpbWUpCiAKQEAgLTQxMywxNCArNDMxLDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3
aW5Qb3J0KToKICAgICBkZWYgX3Rlc3RpbmdfZGV2aWNlKHNlbGYsIG51bWJlcik6CiAgICAgICAg
IHJldHVybiBTaW11bGF0b3IuZGV2aWNlX251bWJlcihudW1iZXIpCiAKLSAgICAjIFRoaXMgaXMg
b25seSBleHBvc2VkIHNvIHRoYXQgSU9TU2ltdWxhdG9yRHJpdmVyIGNhbiB1c2UgaXQuCi0gICAg
ZGVmIGRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxmLCBudW1iZXIpOgotICAgICAgICBp
ZiBzZWxmLl9wcmludGluZ19jbWRfbGluZToKLSAgICAgICAgICAgIHJldHVybiAnPGR1bW15IGlk
PicKLSAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKLSAgICAg
ICAgICAgIHJldHVybiBzZWxmLl90ZXN0aW5nX2RldmljZShudW1iZXIpLnVkaWQKLSAgICAgICAg
cmV0dXJuIHNlbGYuX2N1cnJlbnRfZGV2aWNlLnVkaWQKLQogICAgIGRlZiBnZXRfc2ltdWxhdG9y
X3BhdGgoc2VsZiwgc3VmZml4PSIiKToKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxm
LlNJTVVMQVRPUl9ESVJFQ1RPUlksICJTaW11bGF0b3IiICsgc3RyKHN1ZmZpeCkgKyAiLmFwcCIp
CiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQko
cmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0
dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogCiBpbXBvcnQgdGltZQog
Ci1mcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJT1NTaW11bGF0b3JQb3J0Ci1mcm9tIHdl
YmtpdHB5LnBvcnQgaW1wb3J0IGRhcndpbl90ZXN0Y2FzZQorZnJvbSB3ZWJraXRweS5wb3J0Lmlv
cyBpbXBvcnQgSU9TRGV2aWNlUG9ydCwgSU9TU2ltdWxhdG9yUG9ydAorZnJvbSB3ZWJraXRweS5w
b3J0IGltcG9ydCBpb3NiYXNlX3Rlc3RjYXNlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
ZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20gd2Via2l0
cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKQEAgLTMxLDcgKzMxLDIwIEBAIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW8KIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0CiAKIAotY2xh
c3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6CitjbGFzcyBJT1NUZXN0KGlv
c2Jhc2VfdGVzdGNhc2UuSU9TQmFzZVRlc3QpOgorICAgIG9zX25hbWUgPSAnaW9zJworICAgIG9z
X3ZlcnNpb24gPSAnJworICAgIHBvcnRfbmFtZSA9ICdpb3MnCisgICAgcG9ydF9tYWtlciA9IElP
U0RldmljZVBvcnQKKyAgICBpc19zaW11bGF0b3IgPSBGYWxzZQorCisgICAgZGVmIG1ha2VfcG9y
dChzZWxmLCBob3N0PU5vbmUsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsIG9zX25hbWU9
Tm9uZSwgb3NfdmVyc2lvbj1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHBvcnQgPSBzdXBlcihJ
T1NUZXN0LCBzZWxmKS5tYWtlX3BvcnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBv
cHRpb25zPW9wdGlvbnMsIG9zX25hbWU9b3NfbmFtZSwgc192ZXJzaW9uPW9zX3ZlcnNpb24sIGt3
YXJncz1rd2FyZ3MpCisgICAgICAgIHBvcnQuc2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywg
MSkKKyAgICAgICAgcmV0dXJuIHBvcnQKKworCitjbGFzcyBJT1NTaW11bGF0b3JUZXN0KGlvc2Jh
c2VfdGVzdGNhc2UuSU9TQmFzZVRlc3QpOgogICAgIG9zX25hbWUgPSAnaW9zLXNpbXVsYXRvcicK
ICAgICBvc192ZXJzaW9uID0gJycKICAgICBwb3J0X25hbWUgPSAnaW9zLXNpbXVsYXRvcicKQEAg
LTM5LDcgKzUyLDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAog
ICAgIGlzX3NpbXVsYXRvciA9IFRydWUKIAogICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1O
b25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNp
b249Tm9uZSwgKiprd2FyZ3MpOgotICAgICAgICBwb3J0ID0gc3VwZXIoaW9zVGVzdCwgc2VsZiku
bWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25z
LCBvc19uYW1lPW9zX25hbWUsIHNfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQor
ICAgICAgICBwb3J0ID0gc3VwZXIoSU9TU2ltdWxhdG9yVGVzdCwgc2VsZikubWFrZV9wb3J0KGhv
c3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1lPW9z
X25hbWUsIHNfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQogICAgICAgICBwb3J0
LnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCiAgICAgICAgIHJldHVybiBwb3J0CiAK
QEAgLTUzLDE0ICs2Niw2IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRl
c3QKICAgICBkZWYgdGVzdF9vcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdpb3Mtc2ltdWxhdG9yJywgc2VsZi5tYWtlX3BvcnQoKS5vcGVyYXRpbmdfc3lz
dGVtKCkpCiAKLSAgICBkZWYgdGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgotICAgICAgICAjIE1h
YyBjcmFzaCBsb2dzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLCBzbyBoZXJlIHdlIGp1c3QgbWFrZSBz
dXJlIHdlIGRvbid0IGNyYXNoLgotICAgICAgICBkZWYgZmFrZV90aW1lX2NiKCk6Ci0gICAgICAg
ICAgICB0aW1lcyA9IFswLCAyMCwgNDBdCi0gICAgICAgICAgICByZXR1cm4gbGFtYmRhOiB0aW1l
cy5wb3AoMCkKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0naW9zLXNp
bXVsYXRvcicpCi0gICAgICAgIHBvcnQuX2dldF9jcmFzaF9sb2coJ0R1bXBSZW5kZXJUcmVlJywg
MTIzNCwgTm9uZSwgTm9uZSwgdGltZS50aW1lKCksIHdhaXRfZm9yX2xvZz1GYWxzZSkKLQogICAg
IGRlZiB0ZXN0XzMyYml0KHNlbGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQob3B0
aW9ucz1Nb2NrT3B0aW9ucyhhcmNoaXRlY3R1cmU9J3g4NicpKQogCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFzZV90ZXN0Y2FzZS5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFzZV90ZXN0Y2FzZS5weQkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFzZV90ZXN0Y2FzZS5weQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5wb3J0IGltcG9y
dCBkYXJ3aW5fdGVzdGNhc2UKKworCitjbGFzcyBJT1NCYXNlVGVzdChkYXJ3aW5fdGVzdGNhc2Uu
RGFyd2luVGVzdCk6CisKKyAgICBkZWYgdGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgorICAgICAg
ICAjIE1hYyBjcmFzaCBsb2dzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLCBzbyBoZXJlIHdlIGp1c3Qg
bWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLgorICAgICAgICBkZWYgZmFrZV90aW1lX2NiKCk6Cisg
ICAgICAgICAgICB0aW1lcyA9IFswLCAyMCwgNDBdCisgICAgICAgICAgICByZXR1cm4gbGFtYmRh
OiB0aW1lcy5wb3AoMCkKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0n
aW9zLXNpbXVsYXRvcicpCisgICAgICAgIHBvcnQuX2dldF9jcmFzaF9sb2coJ0R1bXBSZW5kZXJU
cmVlJywgMTIzNCwgTm9uZSwgTm9uZSwgdGltZS50aW1lKCksIHdhaXRfZm9yX2xvZz1GYWxzZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>