<?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>179426</bug_id>
          
          <creation_ts>2017-11-08 08:54:00 -0800</creation_ts>
          <short_desc>webkitpy: Unify version parsing code</short_desc>
          <delta_ts>2017-11-28 00:32:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=179677</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>fujii</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1369436</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-08 08:54:00 -0800</bug_when>
    <thetext>In webkitpy, we parse version strings (of the format x.x.x) in a number of different places.  We should unify these checks into a single Version class which we can easily compare different versions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369438</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-08 08:57:33 -0800</bug_when>
    <thetext>&lt;rdar://problem/35415191&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369452</commentid>
    <comment_count>2</comment_count>
      <attachid>326334</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-08 09:32:22 -0800</bug_when>
    <thetext>Created attachment 326334
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369467</commentid>
    <comment_count>3</comment_count>
      <attachid>326334</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-08 09:55:35 -0800</bug_when>
    <thetext>Comment on attachment 326334
Patch

Looks like it broke some iOS Sim stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369505</commentid>
    <comment_count>4</comment_count>
      <attachid>326341</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-08 11:45:51 -0800</bug_when>
    <thetext>Created attachment 326341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369613</commentid>
    <comment_count>5</comment_count>
      <attachid>326377</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-08 14:27:18 -0800</bug_when>
    <thetext>Created attachment 326377
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369719</commentid>
    <comment_count>6</comment_count>
      <attachid>326411</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-08 17:21:41 -0800</bug_when>
    <thetext>Created attachment 326411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370035</commentid>
    <comment_count>7</comment_count>
      <attachid>326411</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-11-09 13:42:25 -0800</bug_when>
    <thetext>Comment on attachment 326411
Patch

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

r=me

You don&apos;t have to make any of the suggested changes before landing, but at least consider:
- Tightening up __len__ and parsing of versions with more than 3 integers (maybe throw an exception due to &quot;loss&quot; of data)?
- Add tests for __len__ (whether or not the above is done) and __setitem__ to make sure they work.
- Consider using &apos;tiny&apos; instead of &apos;build&apos;.  (The word &apos;build&apos; is very over-loaded, and &apos;build version&apos; means something different than the 3rd integer in a dotted version string at Apple.)

&gt; Tools/ChangeLog:20
&gt; +        (PlatformInfo.__init__): Convert mac version string to version object and
&gt; +        use _win_version instead of _win_version_tuple.
&gt; +        (PlatformInfo.xcode_sdk_version): Convert SDK version string to Version object
&gt; +        before returning it.
&gt; +        (PlatformInfo.xcode_version): Return version object instead of version string.
&gt; +        (PlatformInfo._determine_mac_version): Accept version object instead of string,
&gt; +        eliminate parsing.
&gt; +        (PlatformInfo._determine_win_version): Accept version object instead of tuple.

Nit:  Not using capital &quot;Version object&quot; consistently.  Doesn&apos;t have to be fixed for landing.

&gt; Tools/Scripts/webkitpy/common/version.py:29
&gt; +        self.major = 0
&gt; +        self.minor = 0
&gt; +        self.build = 0

In Source/JavaScriptCore/Configurations/Version.xcconfig,the following names are used for each position:

MAJOR_VERSION = 605;
MINOR_VERSION = 1;
TINY_VERSION = 13;
MICRO_VERSION = 0;
NANO_VERSION = 0;

Not sure this class needs to support 5 dotted versions, but you might consider renaming &apos;build&apos; to &apos;tiny&apos; for consistency.

(I actually don&apos;t know what the history of those names is, though.)

Not required to land the patch.

&gt; Tools/Scripts/webkitpy/common/version.py:43
&gt; +        raise ValueError(&apos;Version expected to be int, str, tuple or list of ints&apos;)

Nit: Spell out &quot;ints&quot; as &quot;integers&quot;.

&gt; Tools/Scripts/webkitpy/common/version.py:46
&gt; +    def __len__(self):
&gt; +        return 3

This doesn&apos;t return a correct value if one of the for loops in the __init__ method is used as it will set keys for &apos;3&apos; and &apos;4&apos; (or more).

May not matter currently, but it should do the right thing if we support passing in &quot;1.2.3.4&quot; or &quot;1.2.3.4.5&quot;.

Hmm...then again, we raise an exception in __getitem__ and __setitem__ if the key is larger than &apos;2&apos;.  Not sure what you want to do here.

&gt; Tools/Scripts/webkitpy/common/version.py:98
&gt; +    def __str__(self):
&gt; +        result = &apos;{}&apos;.format(self.major)
&gt; +        if self.minor or self.build:
&gt; +            result += &apos;.{}&apos;.format(self.minor)
&gt; +        if self.build:
&gt; +            result += &apos;.{}&apos;.format(self.build)
&gt; +        return result

If we support more than 3 dotted numbers (see above comments), may want to make this more generic?

&gt; Tools/Scripts/webkitpy/common/version_unittest.py:28
&gt; +class VersionTestCase(unittest.TestCase):

One of these tests should verify __len__.

You should also have a test for using __setitem__ with both numbers (0, 1, 2) and strings (major, minor, build/tiny).

&gt; Tools/Scripts/webkitpy/common/system/platforminfo.py:61
&gt;          if self.os_name.startswith(&apos;mac&apos;):
&gt; -            self.os_version = self._determine_mac_version(platform_module.mac_ver()[0])
&gt; +            self.os_version = self._determine_mac_version(Version(platform_module.mac_ver()[0]))
&gt;          if self.os_name.startswith(&apos;win&apos;):
&gt; -            self.os_version = self._determine_win_version(self._win_version_tuple(sys_module))
&gt; +            self.os_version = self._determine_win_version(self._win_version(sys_module))

Kind of weird how platform_module.mac_ver() doesn&apos;t return a Version object here, but this doesn&apos;t block the patch from landing.

Maybe too much to change for this patch (which is already pretty large)?

&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:191
&gt;      def use_multiple_simulator_apps(self):
&gt; -        return int(self.host.platform.xcode_version().split(&apos;.&apos;)[0]) &lt; 9
&gt; +        return int(self.host.platform.xcode_version()[0]) &lt; 9

After reading the patch up to this point, I find that using major/minor/build is probably more readable that 0/1/2.

Not necessary to fix before landing, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370063</commentid>
    <comment_count>8</comment_count>
      <attachid>326411</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-09 14:54:08 -0800</bug_when>
    <thetext>Comment on attachment 326411
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/version.py:29
&gt;&gt; +        self.build = 0
&gt; 
&gt; In Source/JavaScriptCore/Configurations/Version.xcconfig,the following names are used for each position:
&gt; 
&gt; MAJOR_VERSION = 605;
&gt; MINOR_VERSION = 1;
&gt; TINY_VERSION = 13;
&gt; MICRO_VERSION = 0;
&gt; NANO_VERSION = 0;
&gt; 
&gt; Not sure this class needs to support 5 dotted versions, but you might consider renaming &apos;build&apos; to &apos;tiny&apos; for consistency.
&gt; 
&gt; (I actually don&apos;t know what the history of those names is, though.)
&gt; 
&gt; Not required to land the patch.

I like those names better, I will use them.

&gt;&gt; Tools/Scripts/webkitpy/common/version.py:46
&gt;&gt; +        return 3
&gt; 
&gt; This doesn&apos;t return a correct value if one of the for loops in the __init__ method is used as it will set keys for &apos;3&apos; and &apos;4&apos; (or more).
&gt; 
&gt; May not matter currently, but it should do the right thing if we support passing in &quot;1.2.3.4&quot; or &quot;1.2.3.4.5&quot;.
&gt; 
&gt; Hmm...then again, we raise an exception in __getitem__ and __setitem__ if the key is larger than &apos;2&apos;.  Not sure what you want to do here.

I haven&apos;t seen us passing any 4 or 5 indexed versions around.  The current code will throw an exception if we tried to construct with that size (because of the exception in __getitem__ and __setitem__)

Since we have JavaScriptCore code which reference micro and nano versions as well, I will allow for those too.

&gt;&gt; Tools/Scripts/webkitpy/common/system/platforminfo.py:61
&gt;&gt; +            self.os_version = self._determine_win_version(self._win_version(sys_module))
&gt; 
&gt; Kind of weird how platform_module.mac_ver() doesn&apos;t return a Version object here, but this doesn&apos;t block the patch from landing.
&gt; 
&gt; Maybe too much to change for this patch (which is already pretty large)?

This will be addressed in a future patch.

Ultimately, we need an os_version -&gt; os_name mapping to solve this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370082</commentid>
    <comment_count>9</comment_count>
      <attachid>326498</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-09 15:40:18 -0800</bug_when>
    <thetext>Created attachment 326498
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370121</commentid>
    <comment_count>10</comment_count>
      <attachid>326498</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-09 16:58:36 -0800</bug_when>
    <thetext>Comment on attachment 326498
Patch

Clearing flags on attachment: 326498

Committed r224657: &lt;https://trac.webkit.org/changeset/224657&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370122</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-09 16:58:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370140</commentid>
    <comment_count>12</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-09 17:48:42 -0800</bug_when>
    <thetext>Committed r224658: &lt;https://trac.webkit.org/changeset/224658&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370141</commentid>
    <comment_count>13</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-09 17:49:32 -0800</bug_when>
    <thetext>Windows seems to return a namedtuple instead of a standard tuple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370181</commentid>
    <comment_count>14</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-11-09 19:32:45 -0800</bug_when>
    <thetext>5th element of getwindowsversion() is &apos;&apos;. This causes another error.
Should be truncated like sys.getwindowsversion()[0:3].

&gt; ActivePython 2.7.10.12 (ActiveState Software Inc.) based on
&gt; Python 2.7.10 (default, Aug 21 2015, 12:07:58) [MSC v.1500 64 bit (AMD64)] on win32
&gt; Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&gt; &gt;&gt;&gt; import sys
&gt; &gt;&gt;&gt; sys.getwindowsversion()
&gt; sys.getwindowsversion(major=6, minor=2, build=9200, platform=2, service_pack=&apos;&apos;)
&gt; &gt;&gt;&gt; sys.getwindowsversion()[0:3]
&gt; (6, 2, 9200)
&gt; &gt;&gt;&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370192</commentid>
    <comment_count>15</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-11-09 20:20:01 -0800</bug_when>
    <thetext>Filed Bug 179520 for ActivePython issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370201</commentid>
    <comment_count>16</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-11-09 20:37:37 -0800</bug_when>
    <thetext>r224657 breaks Cygwin Python, too.

&gt; Traceback (most recent call last):
&gt;   File &quot;./Tools/Scripts/webkit-patch&quot;, line 84, in &lt;module&gt;
&gt;     main()
&gt;   File &quot;./Tools/Scripts/webkit-patch&quot;, line 79, in main
&gt;     WebKitPatch(os.path.abspath(__file__)).main()
&gt;   File &quot;/cygdrive/c/webkit/ga/Tools/Scripts/webkitpy/tool/main.py&quot;, line 57, in __init__
&gt;     Host.__init__(self)
&gt;   File &quot;/cygdrive/c/webkit/ga/Tools/Scripts/webkitpy/common/host.py&quot;, line 48, in __init__
&gt;     SystemHost.__init__(self)
&gt;   File &quot;/cygdrive/c/webkit/ga/Tools/Scripts/webkitpy/common/system/systemhost.py&quot;, line 40, in __init__
&gt;     self.user = user.User()
&gt;   File &quot;/cygdrive/c/webkit/ga/Tools/Scripts/webkitpy/common/system/user.py&quot;, line 61, in __init__
&gt;     self._platforminfo = platforminfo or PlatformInfo(sys, platform, Executive())
&gt;   File &quot;/cygdrive/c/webkit/ga/Tools/Scripts/webkitpy/common/system/platforminfo.py&quot;, line 61, in __init__
&gt;     self.os_version = self._determine_win_version(self._win_version(sys_module))
&gt;   File &quot;/cygdrive/c/webkit/ga/Tools/Scripts/webkitpy/common/system/platforminfo.py&quot;, line 197, in _win_version
&gt;     return Version(self._executive.run_command([&apos;cmd&apos;, &apos;/c&apos;, &apos;ver&apos;], decode_output=False))
&gt;   File &quot;/cygdrive/c/webkit/ga/Tools/Scripts/webkitpy/common/version.py&quot;, line 38, in __init__
&gt;     self[i] = ver.split(&apos;.&apos;)[i]
&gt;   File &quot;/cygdrive/c/webkit/ga/Tools/Scripts/webkitpy/common/version.py&quot;, line 73, in __setitem__
&gt;     self.major = int(value)
&gt; ValueError: invalid literal for int() with base 10: &apos;Microsoft Windows [Version 10&apos;

This is the output of ver command.

&gt; C:\&gt;ver
&gt; 
&gt; Microsoft Windows [Version 10.0.14393]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370232</commentid>
    <comment_count>17</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-11-09 22:28:34 -0800</bug_when>
    <thetext>One more issue.

Bug 179522 – check-webkit-style: AttributeError: &apos;NoneType&apos; object has no attribute &apos;major&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371282</commentid>
    <comment_count>18</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-11-13 22:21:55 -0800</bug_when>
    <thetext>The overloaded Version constructors with suboptimal parsing of version numbers given as a string and inconsistent usage of Version constructors throughout this patch just make me sad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371306</commentid>
    <comment_count>19</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-11-13 23:50:50 -0800</bug_when>
    <thetext>(In reply to Daniel Bates from comment #18)
&gt; The overloaded Version constructors with suboptimal parsing of version
&gt; numbers given as a string and inconsistent usage of Version constructors
&gt; throughout this patch just make me sad.

Can you be more specific about what exactly you&apos;d change?

For example:
- What is suboptimal about the parsing of the version numbers given as a string?
- How would you fix the overloading of the constructors?
- How could Version constructor usage be made more consistent (or does this go hand-in-hand with overloading of the constructor)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371459</commentid>
    <comment_count>20</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-14 11:09:50 -0800</bug_when>
    <thetext>I talked with Dan today (11/14).

His complaint is that the Version class is too permissive and that we should pick which method of Version parsing we would like to standardize.

I think we should standardize the string method.  With that being said, I still think that there should be sane defaults when passing None, String and Version.  Tracking this work here: &lt;https://bugs.webkit.org/show_bug.cgi?id=179677&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375274</commentid>
    <comment_count>21</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-11-28 00:32:47 -0800</bug_when>
    <thetext>Filed for Cygwin.
  Bug 180069 – webkitpy: PlatformInfo raises AssertionError &quot;assert self.os_version is not None&quot; in Cygwin since Bug 179426</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326334</attachid>
            <date>2017-11-08 09:32:22 -0800</date>
            <delta_ts>2017-11-08 11:45:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179426-20171108093221.patch</filename>
            <type>text/plain</type>
            <size>30899</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNDU4MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYwIEBACisyMDE3LTExLTA4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVW5pZnkgdmVyc2lvbiBwYXJzaW5nIGNvZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTQyNgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzU0MTUxOTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgd2Via2l0cHkgbmVlZHMgdG8gcGFyc2UgdmVyc2lvbiBzdHJp
bmdzIG9yIHZlcnNpb24gbGlzdHMgZnJlcXVlbnRseS4gUmF0aGVyIHRoYW4KKyAgICAgICAgZHVw
bGljYXRlIHRoaXMgY29kZSBlYWNoIHRpbWUgaXQncyBuZWVkZWQsIHVuaWZ5IGl0IGluIGEgVmVy
c2lvbiBjbGFzcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm8ucHk6CisgICAgICAgIChQbGF0Zm9ybUluZm8uX19pbml0X18pOiBDb252ZXJ0
IG1hYyB2ZXJzaW9uIHN0cmluZyB0byB2ZXJzaW9uIG9iamVjdCBhbmQKKyAgICAgICAgdXNlIF93
aW5fdmVyc2lvbiBpbnN0ZWFkIG9mIF93aW5fdmVyc2lvbl90dXBsZS4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby54Y29kZV9zZGtfdmVyc2lvbik6IENvbnZlcnQgU0RLIHZlcnNpb24gc3RyaW5nIHRv
IFZlcnNpb24gb2JqZWN0CisgICAgICAgIGJlZm9yZSByZXR1cm5pbmcgaXQuCisgICAgICAgIChQ
bGF0Zm9ybUluZm8ueGNvZGVfdmVyc2lvbik6IFJldHVybiB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFk
IG9mIHZlcnNpb24gc3RyaW5nLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRlcm1pbmVfbWFj
X3ZlcnNpb24pOiBBY2NlcHQgdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcsCisgICAg
ICAgIGVsaW1pbmF0ZSBwYXJzaW5nLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRlcm1pbmVf
d2luX3ZlcnNpb24pOiBBY2NlcHQgdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiB0dXBsZS4KKyAg
ICAgICAgKFBsYXRmb3JtSW5mby5fd2luX3ZlcnNpb24pOiBSZXR1cm4gdmVyc2lvbiBvYmplY3Qg
aW5zdGVhZCBvZiB0dXBsZSwgaGF2ZSBWZXJzaW9uCisgICAgICAgIG9iamVjdCBvd24gdmVyc2lv
biBzdHJpbmcgcGFyc2luZy4KKyAgICAgICAgKFBsYXRmb3JtSW5mby5fd2luX3ZlcnNpb25fdHVw
bGUpOiBSZW5hbWVkIHRvIF93aW5fdmVyc2lvbigpLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl93
aW5fdmVyc2lvbl90dXBsZV9mcm9tX2NtZCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5OgorICAgICAgICAoTW9j
a1BsYXRmb3JtSW5mby54Y29kZV9zZGtfdmVyc2lvbik6IFJldHVybiB2ZXJzaW9uIG9iamVjdCBp
bnN0ZWFkIG9mIHN0cmluZy4KKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8ueGNvZGVfdmVyc2lv
bik6IERpdHRpby4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5
OiBBZGRlZC4KKyAgICAgICAgKFZlcnNpb24pOiBWZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKFZl
cnNpb24uX19pbml0X18pOiBJbml0aWFsaXplIHRoZSB2ZXJzaW9uIG9iamVjdCB3aXRoIGEgc3Ry
aW5nLCBpbnRlZ2VyLAorICAgICAgICB0dXBsZSBvZiBpbnRlZ2VycywgbGlzdCBvZiBpbnRlZ2Vy
cyBvciBhbm90aGVyIFZlcnNpb24gb2JqZWN0LgorICAgICAgICAoVmVyc2lvbi5fX2xlbl9fKTog
UmV0dXJuIDMgc28gdGhhdCB0aGUgVmVyc2lvbiBvYmplY3QgY2FuIGJlIHRyZWF0ZWQgYXMKKyAg
ICAgICAgYSBsaXN0IG9yIHR1cGxlLgorICAgICAgICAoVmVyc2lvbi5fX2dldGl0ZW1fXyk6IEdl
dCBpdGVtIGluIFZlcnNpb24gb2JqZWN0IGJ5IGluZGV4IG9yIHN0cmluZy4KKyAgICAgICAgKFZl
cnNpb24uX19zZXRpdGVtX18pOiBTZXQgaXRlbSBpbiBWZXJzaW9uIG9iamVjdCBieSBpbmRleCBv
ciBzdHJpbmcuCisgICAgICAgIChWZXJzaW9uLl9fc3RyX18pOiBDb252ZXJ0IHZlcnNpb24gdG8g
cHJpbnRhYmxlIHN0cmluZywgb21pdHRpbmcgdHJhaWxpbmcKKyAgICAgICAgMCdzLgorICAgICAg
ICAoVmVyc2lvbi5fX2NtcF9fKTogQ29tcGFyZSB0d28gdmVyc2lvbiBzdHJpbmdzLCBtYWpvciB0
YWtpbmcgcHJlY2VkZW5jZSBvdmVyCisgICAgICAgIG1pbm9yLCBtaW5vciB0YWtpbmcgcHJlY2Vk
ZW5jZSBvdmVyIGJ1aWxkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNp
b25fdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoVmVyc2lvblRlc3RDYXNlKTogVGVzdCBi
ZWhhdmlvciBvZiBWZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zLnB5OgorICAgICAgICAoSU9TUG9ydC5kZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRo
KTogaW9zX3ZlcnNpb24gbm93IHJldHVybnMgYSB2ZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKElP
U1BvcnQuX2lzX3ZhbGlkX2lvc192ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1BvcnQu
Z2V0X29wdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lv
c19kZXZpY2UucHk6CisgICAgICAgIChJT1NEZXZpY2VQb3J0LmRldGVybWluZV9mdWxsX3BvcnRf
bmFtZSk6IFVzZSB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFkIG9mIG93bmluZyBwYXJzaW5nLgorICAg
ICAgICAoSU9TRGV2aWNlUG9ydC5pb3NfdmVyc2lvbik6IFJldHVybiB2ZXJzaW9uIG9iamVjdCBp
bnN0ZWFkIG9mIHN0cmluZy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3Np
bXVsYXRvci5weToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuaW9zX3ZlcnNpb24pOiBSZXR1
cm4gdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6CisgICAgICAgIChSdW50aW1lLl9fcmVwcl9fKTog
V2hlbiBwcmludGluZywgYSBydW50aW1lJ3MgdmVyc2lvbiB3aWxsIGJlIGEgdmVyc2lvbiBvYmpl
Y3QgaW5zdGVhZAorICAgICAgICBvZiBhIHR1cGxlLgorICAgICAgICAoU2ltdWxhdG9yLl9wYXJz
ZV9ydW50aW1lcyk6IFVzZSB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFkIG9mIHR1cGxlLgorICAgICAg
ICAoU2ltdWxhdG9yLl9wYXJzZV9kZXZpY2VzKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS94Y29kZS9zaW11bGF0b3JfdW5pdHRlc3QucHk6IFVzZSB2ZXJzaW9uIG9iamVjdCBp
bnN0ZWFkIG9mIHR1cGxlcy4KKwogMjAxNy0xMS0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdXNlIEpTT046OntB
cnJheSxPYmplY3QsVmFsdWV9IGluc3RlYWQgb2YgSW5zcGVjdG9ye0FycmF5LE9iamVjdCxWYWx1
ZX0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb24ucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQkobm9uZXhp
c3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKworY2xhc3MgVmVyc2lvbihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHZlcj0nMCcpOgorICAgICAgICBzZWxmLm1ham9yID0gMAorICAgICAgICBzZWxmLm1p
bm9yID0gMAorICAgICAgICBzZWxmLmJ1aWxkID0gMAorICAgICAgICBpZiBpc2luc3RhbmNlKHZl
ciwgaW50KToKKyAgICAgICAgICAgIHNlbGYubWFqb3IgPSB2ZXIKKyAgICAgICAgICAgIHJldHVy
bgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmVyLCBzdHIpIG9yIGlzaW5zdGFuY2UodmVyLCB1
bmljb2RlKToKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4odmVyLnNwbGl0KCcuJykp
KToKKyAgICAgICAgICAgICAgICBzZWxmW2ldID0gdmVyLnNwbGl0KCcuJylbaV0KKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmVyLCBsaXN0KSBvciBpc2luc3Rh
bmNlKHZlciwgVmVyc2lvbikgb3IgaXNpbnN0YW5jZSh2ZXIsIHR1cGxlKToKKyAgICAgICAgICAg
IGZvciBpIGluIHhyYW5nZShsZW4odmVyKSk6CisgICAgICAgICAgICAgICAgc2VsZltpXSA9IHZl
cltpXQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsaWYgdmVyIGlzIE5vbmU6CisgICAg
ICAgICAgICByZXR1cm4gICMgRW1wdHkgdmVyc2lvbiBpcyBpbXBsaWNpdGx5IHplcm8KKyAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignVmVyc2lvbiBleHBlY3RlZCB0byBiZSBpbnQsIHN0ciwgdHVw
bGUgb3IgbGlzdCBvZiBpbnRzJykKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gMworCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGlmIGlz
aW5zdGFuY2Uoa2V5LCBpbnQpOgorICAgICAgICAgICAgaWYga2V5ID09IDA6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbGYubWFqb3IKKyAgICAgICAgICAgIGVsaWYga2V5ID09IDE6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYubWlub3IKKyAgICAgICAgICAgIGVsaWYga2V5ID09IDI6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGQKKyAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoJ1ZlcnNpb24ga2V5IG11c3QgYmUgMCwgMSBvciAyJykKKyAgICAgICAgZWxpZiBp
c2luc3RhbmNlKGtleSwgc3RyKToKKyAgICAgICAgICAgIGlmIGtleSA9PSAnbWFqb3InOgorICAg
ICAgICAgICAgICAgIHJldHVybiBzZWxmLm1ham9yCisgICAgICAgICAgICBlbGlmIGtleSA9PSAn
bWlub3InOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm1pbm9yCisgICAgICAgICAgICBl
bGlmIGtleSA9PSAnYnVpbGQnOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmJ1aWxkCisg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdWZXJzaW9uIGtleSBtdXN0IGJlIG1ham9yLCBt
aW5vciBvciBidWlsZCcpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0V4cGVjdGVkIHZlcnNp
b24ga2V5IHRvIGJlIHN0ciBvciBpbnQnKQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtl
eSwgdmFsdWUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgaW50KToKKyAgICAgICAgICAg
IGlmIGtleSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYubWFqb3IgPSBpbnQodmFsdWUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFqb3IKKyAgICAgICAgICAgIGVsaWYga2V5ID09
IDE6CisgICAgICAgICAgICAgICAgc2VsZi5taW5vciA9IGludCh2YWx1ZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc2VsZi5taW5vcgorICAgICAgICAgICAgZWxpZiBrZXkgPT0gMjoKKyAgICAg
ICAgICAgICAgICBzZWxmLmJ1aWxkID0gaW50KHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVy
biBzZWxmLmJ1aWxkCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdWZXJzaW9uIGtleSBt
dXN0IGJlIDAsIDEgb3IgMicpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIHN0cik6Cisg
ICAgICAgICAgICBpZiBrZXkgPT0gJ21ham9yJzoKKyAgICAgICAgICAgICAgICBzZWxmLm1ham9y
ID0gaW50KHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm1ham9yCisgICAgICAg
ICAgICBlbGlmIGtleSA9PSAnbWlub3InOgorICAgICAgICAgICAgICAgIHNlbGYubWlub3IgPSBp
bnQodmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubWlub3IKKyAgICAgICAgICAg
IGVsaWYga2V5ID09ICdidWlsZCc6CisgICAgICAgICAgICAgICAgc2VsZi5idWlsZCA9IGludCh2
YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5idWlsZAorICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcignVmVyc2lvbiBrZXkgbXVzdCBiZSBtYWpvciwgbWlub3Igb3IgYnVpbGQn
KQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdFeHBlY3RlZCB2ZXJzaW9uIGtleSB0byBiZSBz
dHIgb3IgaW50JykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXN1bHQgPSAn
e30nLmZvcm1hdChzZWxmLm1ham9yKQorICAgICAgICBpZiBzZWxmLm1pbm9yIG9yIHNlbGYuYnVp
bGQ6CisgICAgICAgICAgICByZXN1bHQgKz0gJy57fScuZm9ybWF0KHNlbGYubWlub3IpCisgICAg
ICAgIGlmIHNlbGYuYnVpbGQ6CisgICAgICAgICAgICByZXN1bHQgKz0gJy57fScuZm9ybWF0KHNl
bGYuYnVpbGQpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfX2NtcF9fKHNlbGYs
IG90aGVyKToKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihzZWxmKSk6CisgICAgICAgICAg
ICBpZiBjbXAoc2VsZltpXSwgb3RoZXJbaV0pOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXAo
c2VsZltpXSwgb3RoZXJbaV0pCisgICAgICAgIHJldHVybiAwCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHZlcnNpb24gaW1wb3J0IFZl
cnNpb24KKworCitjbGFzcyBWZXJzaW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisg
ICAgZGVmIHRlc3Rfc3RyaW5nX2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICB2ID0gVmVyc2lv
bignMS4yLjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWFqb3IsIDEpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwodi5taW5vciwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2
LmJ1aWxkLCAzKQorCisgICAgZGVmIHRlc3RfbGlzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAg
ICAgdiA9IFZlcnNpb24oWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWFq
b3IsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5taW5vciwgMikKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCh2LmJ1aWxkLCAzKQorCisgICAgZGVmIHRlc3RfdHVwbGVfY29uc3RydWN0
b3Ioc2VsZik6CisgICAgICAgIHYgPSBWZXJzaW9uKCgxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCh2Lm1ham9yLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWlub3Is
IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5idWlsZCwgMykKKworICAgIGRlZiB0ZXN0
X2ludF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgdiA9IFZlcnNpb24oMSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh2Lm1ham9yLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYu
bWlub3IsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5idWlsZCwgMCkKKworICAgIGRl
ZiB0ZXN0X2NvcHlfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHYgPSBWZXJzaW9uKFZlcnNp
b24oWzEsIDIsIDNdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1ham9yLCAxKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWlub3IsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodi5idWlsZCwgMykKKworICAgIGRlZiB0ZXN0X25vbmVfY29uc3RydWN0b3Ioc2VsZik6Cisg
ICAgICAgIHYgPSBWZXJzaW9uKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5tYWpv
ciwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1pbm9yLCAwKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHYuYnVpbGQsIDApCisKKyAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZik6Cisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzEuMi4zJykpLCAnMS4yLjMnKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihWZXJzaW9uKCcxLjIuMCcpKSwgJzEuMicpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzEuMicpKSwgJzEuMicpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzAuMC4zJykpLCAnMC4wLjMnKQorCisg
ICAgZGVmIHRlc3RfY29tcGFyZV92ZXJzaW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChWZXJzaW9uKCcxLjIuMycpLCBWZXJzaW9uKCcxLjIuMycpKQorICAgICAgICBzZWxmLmFz
c2VydEdyZWF0ZXIoVmVyc2lvbignMS4yLjQnKSwgVmVyc2lvbignMS4yLjMnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRHcmVhdGVyKFZlcnNpb24oJzEuMy4yJyksIFZlcnNpb24oJzEuMi4zJykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihWZXJzaW9uKCcyLjEuMScpLCBWZXJzaW9uKCcxLjIu
MycpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3Jt
aW5mby5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lvbiAyMjQ0MDUpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzAsNiArMzAsNyBA
QAogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24g
aW1wb3J0IFZlcnNpb24KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1w
b3J0IEV4ZWN1dGl2ZQogCiAKQEAgLTU1LDkgKzU2LDkgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9i
amVjdCk6CiAgICAgICAgIGlmIHNlbGYub3NfbmFtZSA9PSAnZnJlZWJzZCcgb3Igc2VsZi5vc19u
YW1lID09ICdvcGVuYnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ25ldGJzZCcgb3Igc2VsZi5vc19u
YW1lID09ICdpb3MnOgogICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gcGxhdGZvcm1fbW9k
dWxlLnJlbGVhc2UoKQogICAgICAgICBpZiBzZWxmLm9zX25hbWUuc3RhcnRzd2l0aCgnbWFjJyk6
Ci0gICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLl9kZXRlcm1pbmVfbWFjX3ZlcnNp
b24ocGxhdGZvcm1fbW9kdWxlLm1hY192ZXIoKVswXSkKKyAgICAgICAgICAgIHNlbGYub3NfdmVy
c2lvbiA9IHNlbGYuX2RldGVybWluZV9tYWNfdmVyc2lvbihWZXJzaW9uKHBsYXRmb3JtX21vZHVs
ZS5tYWNfdmVyKClbMF0pKQogICAgICAgICBpZiBzZWxmLm9zX25hbWUuc3RhcnRzd2l0aCgnd2lu
Jyk6Ci0gICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLl9kZXRlcm1pbmVfd2luX3Zl
cnNpb24oc2VsZi5fd2luX3ZlcnNpb25fdHVwbGUoc3lzX21vZHVsZSkpCisgICAgICAgICAgICBz
ZWxmLm9zX3ZlcnNpb24gPSBzZWxmLl9kZXRlcm1pbmVfd2luX3ZlcnNpb24oc2VsZi5fd2luX3Zl
cnNpb24oc3lzX21vZHVsZSkpCiAgICAgICAgIHNlbGYuX2lzX2N5Z3dpbiA9IHN5c19tb2R1bGUu
cGxhdGZvcm0gPT0gJ2N5Z3dpbicKIAogICAgIGRlZiBpc19tYWMoc2VsZik6CkBAIC0xMjcsOCAr
MTI4LDggQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgZGVmIHhjb2RlX3Nka192
ZXJzaW9uKHNlbGYsIHNka19uYW1lKToKICAgICAgICAgaWYgc2VsZi5pc19tYWMoKToKICAgICAg
ICAgICAgICMgQXNzdW1lcyB0aGF0IHhjcnVuIGRvZXMgbm90IHdyaXRlIHRvIHN0YW5kYXJkIG91
dHB1dCBvbiBmYWlsdXJlIChlLmcuIFNESyBkb2VzIG5vdCBleGlzdCkuCi0gICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsieGNydW4iLCAiLS1zZGsiLCBzZGtf
bmFtZSwgIi0tc2hvdy1zZGstdmVyc2lvbiJdLCByZXR1cm5fc3RkZXJyPUZhbHNlLCBlcnJvcl9o
YW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpLnJzdHJpcCgpCi0gICAgICAgIHJldHVybiAn
JworICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24oc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KFsieGNydW4iLCAiLS1zZGsiLCBzZGtfbmFtZSwgIi0tc2hvdy1zZGstdmVyc2lvbiJdLCByZXR1
cm5fc3RkZXJyPUZhbHNlLCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpLnJz
dHJpcCgpKQorICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIHhjb2RlX3NpbWN0bF9saXN0
KHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5pc19tYWMoKToKQEAgLTEzOSw3ICsxNDAsNyBA
QCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBkZWYgeGNvZGVfdmVyc2lvbihzZWxm
KToKICAgICAgICAgaWYgbm90IHNlbGYuaXNfbWFjKCk6CiAgICAgICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCi0gICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1h
bmQoWyd4Y29kZWJ1aWxkJywgJy12ZXJzaW9uJ10pLnNwbGl0KClbMV0KKyAgICAgICAgcmV0dXJu
IFZlcnNpb24oc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNvZGVidWlsZCcsICctdmVy
c2lvbiddKS5zcGxpdCgpWzFdKQogCiAgICAgZGVmIF9kZXRlcm1pbmVfb3NfbmFtZShzZWxmLCBz
eXNfcGxhdGZvcm0pOgogICAgICAgICBpZiBzeXNfcGxhdGZvcm0gPT0gJ2Rhcndpbic6CkBAIC0x
NTgsOCArMTU5LDcgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgICAgICAgICBy
ZXR1cm4gJ2hhaWt1JwogICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigndW5yZWNvZ25pemVk
IHBsYXRmb3JtIHN0cmluZyAiJXMiJyAlIHN5c19wbGF0Zm9ybSkKIAotICAgIGRlZiBfZGV0ZXJt
aW5lX21hY192ZXJzaW9uKHNlbGYsIG1hY192ZXJzaW9uX3N0cmluZyk6Ci0gICAgICAgIHJlbGVh
c2VfdmVyc2lvbiA9IGludChtYWNfdmVyc2lvbl9zdHJpbmcuc3BsaXQoJy4nKVsxXSkKKyAgICBk
ZWYgX2RldGVybWluZV9tYWNfdmVyc2lvbihzZWxmLCBtYWNfdmVyc2lvbik6CiAgICAgICAgIHZl
cnNpb25fc3RyaW5ncyA9IHsKICAgICAgICAgICAgIDU6ICdsZW9wYXJkJywKICAgICAgICAgICAg
IDY6ICdzbm93bGVvcGFyZCcsCkBAIC0xNzEsMzQgKzE3MSwyNyBAQCBjbGFzcyBQbGF0Zm9ybUlu
Zm8ob2JqZWN0KToKICAgICAgICAgICAgIDEyOiAnc2llcnJhJywKICAgICAgICAgICAgIDEzOiAn
aGlnaHNpZXJyYScsCiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0IHJlbGVhc2VfdmVyc2lvbiA+
PSBtaW4odmVyc2lvbl9zdHJpbmdzLmtleXMoKSkKLSAgICAgICAgcmV0dXJuIHZlcnNpb25fc3Ry
aW5ncy5nZXQocmVsZWFzZV92ZXJzaW9uLCAnZnV0dXJlJykKKyAgICAgICAgYXNzZXJ0IG1hY192
ZXJzaW9uLm1pbm9yID49IG1pbih2ZXJzaW9uX3N0cmluZ3Mua2V5cygpKQorICAgICAgICByZXR1
cm4gdmVyc2lvbl9zdHJpbmdzLmdldChtYWNfdmVyc2lvbi5taW5vciwgJ2Z1dHVyZScpCiAKICAg
ICBkZWYgX2RldGVybWluZV9saW51eF92ZXJzaW9uKHNlbGYpOgogICAgICAgICAjIEZJWE1FOiB3
ZSBpZ25vcmUgd2hhdGV2ZXIgdGhlIHJlYWwgdmVyc2lvbiBpcyBhbmQgcHJldGVuZCBpdCdzIGx1
Y2lkIGZvciBub3cuCiAgICAgICAgIHJldHVybiAnbHVjaWQnCiAKLSAgICBkZWYgX2RldGVybWlu
ZV93aW5fdmVyc2lvbihzZWxmLCB3aW5fdmVyc2lvbl90dXBsZSk6Ci0gICAgICAgIGlmIHdpbl92
ZXJzaW9uX3R1cGxlWzoyXSA9PSAoMCwgMCk6Ci0gICAgICAgICAgICBpZiB3aW5fdmVyc2lvbl90
dXBsZVsyXSA+IDEwMDAwOgorICAgIGRlZiBfZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKHNlbGYsIHdp
bl92ZXJzaW9uKToKKyAgICAgICAgaWYgd2luX3ZlcnNpb24ubWFqb3IgPT0gMCBhbmQgd2luX3Zl
cnNpb24ubWlub3IgPT0gMDoKKyAgICAgICAgICAgIGlmIHdpbl92ZXJzaW9uWzJdID4gMTAwMDA6
CiAgICAgICAgICAgICAgICAgcmV0dXJuICd3aW4xMCcKLSAgICAgICAgaWYgd2luX3ZlcnNpb25f
dHVwbGVbOjNdID09ICg2LCAxLCA3NjAwKToKKyAgICAgICAgaWYgd2luX3ZlcnNpb24gPT0gVmVy
c2lvbihbNiwgMSwgNzYwMF0pOgogICAgICAgICAgICAgcmV0dXJuICc3c3AwJwotICAgICAgICBp
ZiB3aW5fdmVyc2lvbl90dXBsZVs6Ml0gPT0gKDYsIDApOgorICAgICAgICBpZiB3aW5fdmVyc2lv
bi5tYWpvciA9PSA2IGFuZCB3aW5fdmVyc2lvbi5taW5vciA9PSAwOgogICAgICAgICAgICAgcmV0
dXJuICd2aXN0YScKLSAgICAgICAgaWYgd2luX3ZlcnNpb25fdHVwbGVbOjJdID09ICg1LCAxKToK
KyAgICAgICAgaWYgd2luX3ZlcnNpb24ubWFqb3IgPT0gNSBhbmQgd2luX3ZlcnNpb24ubWlub3Ig
PT0gMToKICAgICAgICAgICAgIHJldHVybiAneHAnCi0gICAgICAgIGFzc2VydCB3aW5fdmVyc2lv
bl90dXBsZVswXSA+IDYgb3Igd2luX3ZlcnNpb25fdHVwbGVbMV0gPj0gMSwgJ1VucmVjb2duaXpl
ZCBXaW5kb3dzIHZlcnNpb24gdHVwbGU6ICIlcyInICUgKHdpbl92ZXJzaW9uX3R1cGxlLCkKKyAg
ICAgICAgYXNzZXJ0IHdpbl92ZXJzaW9uWzBdID4gNiBvciB3aW5fdmVyc2lvblsxXSA+PSAxLCAn
VW5yZWNvZ25pemVkIFdpbmRvd3MgdmVyc2lvbjogInt9IicuZm9ybWF0KHdpbl92ZXJzaW9uKQog
ICAgICAgICByZXR1cm4gJ2Z1dHVyZScKIAotICAgIGRlZiBfd2luX3ZlcnNpb25fdHVwbGUoc2Vs
Ziwgc3lzX21vZHVsZSk6CisgICAgZGVmIF93aW5fdmVyc2lvbihzZWxmLCBzeXNfbW9kdWxlKToK
ICAgICAgICAgaWYgaGFzYXR0cihzeXNfbW9kdWxlLCAnZ2V0d2luZG93c3ZlcnNpb24nKToKLSAg
ICAgICAgICAgIHJldHVybiBzeXNfbW9kdWxlLmdldHdpbmRvd3N2ZXJzaW9uKCkKLSAgICAgICAg
cmV0dXJuIHNlbGYuX3dpbl92ZXJzaW9uX3R1cGxlX2Zyb21fY21kKCkKLQotICAgIGRlZiBfd2lu
X3ZlcnNpb25fdHVwbGVfZnJvbV9jbWQoc2VsZik6Ci0gICAgICAgICMgTm90ZSB0aGF0IHRoaXMg
c2hvdWxkIG9ubHkgZXZlciBiZSBjYWxsZWQgb24gd2luZG93cywgc28gdGhpcyBzaG91bGQgYWx3
YXlzIHdvcmsuCi0gICAgICAgIHZlcl9vdXRwdXQgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1h
bmQoWydjbWQnLCAnL2MnLCAndmVyJ10sIGRlY29kZV9vdXRwdXQ9RmFsc2UpCi0gICAgICAgIG1h
dGNoX29iamVjdCA9IHJlLnNlYXJjaChyJyg/UDxtYWpvcj5cZClcLig/UDxtaW5vcj5cZClcLig/
UDxidWlsZD5cZCspJywgdmVyX291dHB1dCkKLSAgICAgICAgYXNzZXJ0IG1hdGNoX29iamVjdCwg
J2NtZCByZXR1cm5lZCBhbiB1bmV4cGVjdGVkIHZlcnNpb24gc3RyaW5nOiAnICsgdmVyX291dHB1
dAotICAgICAgICByZXR1cm4gdHVwbGUobWFwKGludCwgbWF0Y2hfb2JqZWN0Lmdyb3VwcygpKSkK
KyAgICAgICAgICAgIHJldHVybiBWZXJzaW9uKHN5c19tb2R1bGUuZ2V0d2luZG93c3ZlcnNpb24o
KSkKKyAgICAgICAgcmV0dXJuIFZlcnNpb24oc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsn
Y21kJywgJy9jJywgJ3ZlciddLCBkZWNvZGVfb3V0cHV0PUZhbHNlKSkKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZv
X21vY2sucHkJKHJldmlzaW9uIDIyNDQwNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsx
LDUgQEAKICMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0yNiw2ICsyNyw3IEBACiAjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9u
IGltcG9ydCBWZXJzaW9uCiAKIGNsYXNzIE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBk
ZWYgX19pbml0X18oc2VsZiwgb3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj0nc25vd2xlb3BhcmQn
KToKQEAgLTYxLDEwICs2MywxMCBAQCBjbGFzcyBNb2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAg
ICAgICAgIHJldHVybiA4MAogCiAgICAgZGVmIHhjb2RlX3Nka192ZXJzaW9uKHNlbGYsIHNka19u
YW1lKToKLSAgICAgICAgcmV0dXJuICc4LjEnCisgICAgICAgIHJldHVybiBWZXJzaW9uKCc4LjEn
KQogCiAgICAgZGVmIHhjb2RlX3ZlcnNpb24oc2VsZik6Ci0gICAgICAgIHJldHVybiAnOC4wJwor
ICAgICAgICByZXR1cm4gVmVyc2lvbignOC4wJykKIAogICAgIGRlZiB4Y29kZV9zaW1jdGxfbGlz
dChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuZXhwZWN0ZWRfeGNvZGVfc2ltY3RsX2xpc3QK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2aXNpb24gMjI0NDA1KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMjQs
NiArMjQsNyBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHRyYWNlYmFjawogCiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0cHkuY29tbW9u
LnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVs
cy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCiBmcm9tIHdlYmtp
dHB5LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9hZGRpdGlvbnMKIGZyb20gd2Via2l0cHkucG9y
dC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKQEAgLTEwOSwxMSArMTEwLDExIEBAIGNsYXNzIElP
U1BvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rl
c3RfcnVubmVyJyk6CiAgICAgICAgICAgICB3a19zdHJpbmcgPSAnd2syJwogICAgICAgICBmYWxs
YmFja19uYW1lcyA9IFsKLSAgICAgICAgICAgICd7fS17fS17fScuZm9ybWF0KHNlbGYucG9ydF9u
YW1lLCBzZWxmLmlvc192ZXJzaW9uKCkuc3BsaXQoJy4nKVswXSwgd2tfc3RyaW5nKSwKLSAgICAg
ICAgICAgICd7fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1lLCBzZWxmLmlvc192ZXJzaW9uKCku
c3BsaXQoJy4nKVswXSksCisgICAgICAgICAgICAne30te30te30nLmZvcm1hdChzZWxmLnBvcnRf
bmFtZSwgc2VsZi5pb3NfdmVyc2lvbigpLm1ham9yLCB3a19zdHJpbmcpLAorICAgICAgICAgICAg
J3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5tYWpvciks
CiAgICAgICAgICAgICAne30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgd2tfc3RyaW5nKSwK
ICAgICAgICAgICAgIHNlbGYucG9ydF9uYW1lLAotICAgICAgICAgICAgJ3t9LXt9Jy5mb3JtYXQo
SU9TUG9ydC5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5zcGxpdCgnLicpWzBdKSwKKyAg
ICAgICAgICAgICd7fS17fScuZm9ybWF0KElPU1BvcnQucG9ydF9uYW1lLCBzZWxmLmlvc192ZXJz
aW9uKCkubWFqb3IpLAogICAgICAgICAgICAgJ3t9LXt9Jy5mb3JtYXQoSU9TUG9ydC5wb3J0X25h
bWUsIHdrX3N0cmluZyksCiAgICAgICAgICAgICBJT1NQb3J0LnBvcnRfbmFtZSwKICAgICAgICAg
XQpAQCAtMTM0LDIyICsxMzUsNiBAQCBjbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgogICAgIGRl
ZiB0ZXN0X2V4cGVjdGF0aW9uc19maWxlX3Bvc2l0aW9uKHNlbGYpOgogICAgICAgICByZXR1cm4g
NAogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfaXNfdmFsaWRfaW9zX3ZlcnNpb24odmVy
c2lvbl9pZGVudGlmaWVyKToKLSAgICAgICAgIyBFeGFtcGxlcyBvZiB2YWxpZCB2ZXJzaW9uczog
JzExJywgJzEwLjMnLCAnMTAuMy4xJwotICAgICAgICBpZiBub3QgdmVyc2lvbl9pZGVudGlmaWVy
OgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHNwbGl0X2J5X3BlcmlvZCA9IHZl
cnNpb25faWRlbnRpZmllci5zcGxpdCgnLicpCi0gICAgICAgIGlmIGxlbihzcGxpdF9ieV9wZXJp
b2QpID4gMzoKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gYWxsKHBh
cnQuaXNkaWdpdCgpIGZvciBwYXJ0IGluIHNwbGl0X2J5X3BlcmlvZCkKLQotICAgIGRlZiBnZXRf
b3B0aW9uKHNlbGYsIG5hbWUsIGRlZmF1bHRfdmFsdWU9Tm9uZSk6Ci0gICAgICAgIHJlc3VsdCA9
IHN1cGVyKElPU1BvcnQsIHNlbGYpLmdldF9vcHRpb24obmFtZSwgZGVmYXVsdF92YWx1ZSkKLSAg
ICAgICAgaWYgbmFtZSA9PSAndmVyc2lvbicgYW5kIHJlc3VsdCBhbmQgbm90IElPU1BvcnQuX2lz
X3ZhbGlkX2lvc192ZXJzaW9uKHJlc3VsdCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJy
b3IoJ3t9IGlzIGFuIGludmFsaWQgaU9TIHZlcnNpb24nLmZvcm1hdChyZXN1bHQpKQotICAgICAg
ICByZXR1cm4gcmVzdWx0Ci0KICAgICBkZWYgaW9zX3ZlcnNpb24oc2VsZik6CiAgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc19kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc19kZXZpY2UucHkJKHJldmlzaW9uIDIyNDQwNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBA
IGltcG9ydCBsb2dnaW5nCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBt
ZW1vaXplZAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jh
c2hMb2dzCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCiBmcm9t
IHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9hZGRpdGlvbnMKIGZyb20gd2Via2l0
cHkucG9ydC5pb3MgaW1wb3J0IElPU1BvcnQKIApAQCAtNjQsOCArNjUsNyBAQCBjbGFzcyBJT1NE
ZXZpY2VQb3J0KElPU1BvcnQpOgogICAgICAgICAgICAgaXBob25lb3Nfc2RrX3ZlcnNpb24gPSBo
b3N0LnBsYXRmb3JtLnhjb2RlX3Nka192ZXJzaW9uKGNscy5TREspCiAgICAgICAgICAgICBpZiBu
b3QgaXBob25lb3Nfc2RrX3ZlcnNpb246CiAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCJQbGVhc2UgaW5zdGFsbCB0aGUgaU9TIFNESy4iKQotICAgICAgICAgICAgbWFqb3JfdmVyc2lv
bl9udW1iZXIgPSBpcGhvbmVvc19zZGtfdmVyc2lvbi5zcGxpdCgnLicpWzBdCi0gICAgICAgICAg
ICBwb3J0X25hbWUgPSBwb3J0X25hbWUgKyAnLScgKyBtYWpvcl92ZXJzaW9uX251bWJlcgorICAg
ICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lICsgJy0nICsgc3RyKGlwaG9uZW9zX3Nka192
ZXJzaW9uLm1ham9yKQogICAgICAgICByZXR1cm4gcG9ydF9uYW1lCiAKICAgICBkZWYgcGF0aF90
b19jcmFzaF9sb2dzKHNlbGYpOgpAQCAtOTQsNyArOTQsNyBAQCBjbGFzcyBJT1NEZXZpY2VQb3J0
KElPU1BvcnQpOgogICAgIEBtZW1vaXplZAogICAgIGRlZiBpb3NfdmVyc2lvbihzZWxmKToKICAg
ICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd2ZXJzaW9uJyk6Ci0gICAgICAgICAgICByZXR1cm4g
c2VsZi5nZXRfb3B0aW9uKCd2ZXJzaW9uJykKKyAgICAgICAgICAgIHJldHVybiBWZXJzaW9uKHNl
bGYuZ2V0X29wdGlvbigndmVyc2lvbicpKQogCiAgICAgICAgIGlmIG5vdCBhcHBsZV9hZGRpdGlv
bnMoKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihzZWxmLk5PX09OX0RFVklDRV9U
RVNUSU5HKQpAQCAtMTA5LDcgKzEwOSw3IEBAIGNsYXNzIElPU0RldmljZVBvcnQoSU9TUG9ydCk6
CiAgICAgICAgICAgICAgICAgaWYgZGV2aWNlLnBsYXRmb3JtLm9zX3ZlcnNpb24gIT0gdmVyc2lv
bjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdNdWx0aXBsZSBjb25u
ZWN0ZWQgZGV2aWNlcyBoYXZlIGRpZmZlcmVudCBpT1MgdmVyc2lvbnMnKQogCi0gICAgICAgIHJl
dHVybiB2ZXJzaW9uCisgICAgICAgIHJldHVybiBWZXJzaW9uKHZlcnNpb24pCiAKICAgICAjIEZJ
WE1FOiBUaGVzZSBuZWVkIGRldmljZSBpbXBsZW1lbnRhdGlvbnMgPHJkYXI6Ly9wcm9ibGVtLzMw
NDk3OTkxPi4KICAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJv
Y2Vzc19waWQpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0
b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11
bGF0b3IucHkJKHJldmlzaW9uIDIyNDQwNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9pb3Nfc2ltdWxhdG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIGltcG9y
dCB0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20gd2Via2l0
cHkucG9ydC5kZXZpY2UgaW1wb3J0IERldmljZQogZnJvbSB3ZWJraXRweS5wb3J0LmlvcyBpbXBv
cnQgSU9TUG9ydAogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRv
ciwgUnVudGltZSwgRGV2aWNlVHlwZQpAQCAtMTExLDcgKzExMiw3IEBAIGNsYXNzIElPU1NpbXVs
YXRvclBvcnQoSU9TUG9ydCk6CiAgICAgZGVmIGlvc192ZXJzaW9uKHNlbGYpOgogICAgICAgICBy
dW50aW1lX2lkZW50aWZpZXIgPSBzZWxmLmdldF9vcHRpb24oJ3J1bnRpbWUnKQogICAgICAgICBp
ZiBzZWxmLmdldF9vcHRpb24oJ3ZlcnNpb24nKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdl
dF9vcHRpb24oJ3ZlcnNpb24nKQorICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24oc2VsZi5nZXRf
b3B0aW9uKCd2ZXJzaW9uJykpCiAgICAgICAgIGlmIHJ1bnRpbWVfaWRlbnRpZmllcjoKICAgICAg
ICAgICAgIHJldHVybiAnLicuam9pbihzdHIoaSkgZm9yIGkgaW4gUnVudGltZS5mcm9tX2lkZW50
aWZpZXIocnVudGltZV9pZGVudGlmaWVyKS52ZXJzaW9uKQogICAgICAgICByZXR1cm4gc2VsZi5o
b3N0LnBsYXRmb3JtLnhjb2RlX3Nka192ZXJzaW9uKCdpcGhvbmVzaW11bGF0b3InKQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkJKHJldmlzaW9uIDIyNDQw
NSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkuY29t
bW9uLnRpbWVvdXRfY29udGV4dCBpbXBvcnQgVGltZW91dAogZnJvbSB3ZWJraXRweS5jb21tb24u
aG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVy
c2lvbgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKQEAgLTE1Niw3ICsx
NTcsNyBAQCBjbGFzcyBSdW50aW1lKG9iamVjdCk6CiAgICAgICAgIGlmIHNlbGYuaXNfaW50ZXJu
YWxfcnVudGltZToKICAgICAgICAgICAgIHZlcnNpb25fc3VmZml4ID0gIiBJbnRlcm5hbCIKICAg
ICAgICAgcmV0dXJuICc8UnVudGltZSB7dmVyc2lvbn06IHtpZGVudGlmaWVyfS4gQXZhaWxhYmxl
OiB7YXZhaWxhYmxlfSwge251bV9kZXZpY2VzfSBkZXZpY2VzPicuZm9ybWF0KAotICAgICAgICAg
ICAgdmVyc2lvbj0nLicuam9pbihtYXAoc3RyLCBzZWxmLnZlcnNpb24pKSArIHZlcnNpb25fc3Vm
Zml4LAorICAgICAgICAgICAgdmVyc2lvbj1zdHIoc2VsZi52ZXJzaW9uKSArIHZlcnNpb25fc3Vm
Zml4LAogICAgICAgICAgICAgaWRlbnRpZmllcj1zZWxmLmlkZW50aWZpZXIsCiAgICAgICAgICAg
ICBhdmFpbGFibGU9c2VsZi5hdmFpbGFibGUsCiAgICAgICAgICAgICBudW1fZGV2aWNlcz1sZW4o
c2VsZi5kZXZpY2VzKSkKQEAgLTMzNCw4ICszMzUsNyBAQCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0
KToKICAgICAgICAgICAgICAgICBpZiBsaW5lICE9ICc9PSBEZXZpY2VzID09JzoKICAgICAgICAg
ICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFeHBlY3RlZCA9PSBEZXZpY2VzID09IGhl
YWRlciBidXQgZ290OiAie30iJy5mb3JtYXQobGluZSkpCiAgICAgICAgICAgICAgICAgYnJlYWsK
LSAgICAgICAgICAgIHZlcnNpb24gPSB0dXBsZShtYXAoaW50LCBydW50aW1lX21hdGNoLmdyb3Vw
KCd2ZXJzaW9uJykuc3BsaXQoJy4nKSkpCi0gICAgICAgICAgICBydW50aW1lID0gUnVudGltZSh2
ZXJzaW9uPXZlcnNpb24sCisgICAgICAgICAgICBydW50aW1lID0gUnVudGltZSh2ZXJzaW9uPVZl
cnNpb24ocnVudGltZV9tYXRjaC5ncm91cCgndmVyc2lvbicpKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlkZW50aWZpZXI9cnVudGltZV9tYXRjaC5ncm91cCgnaWRlbnRpZmllcicp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlPXJ1bnRpbWVfbWF0Y2gu
Z3JvdXAoJ2F2YWlsYWJpbGl0eScpIGlzIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc19pbnRlcm5hbF9ydW50aW1lPWJvb2wocnVudGltZV9tYXRjaC5ncm91cCgnaW50ZXJu
YWwnKSkpCkBAIC0zNTMsOCArMzUzLDcgQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CiAgICAg
ICAgIGZvciBsaW5lIGluIGxpbmVzOgogICAgICAgICAgICAgdmVyc2lvbl9tYXRjaCA9IHNlbGYu
dmVyc2lvbl9yZS5tYXRjaChsaW5lKQogICAgICAgICAgICAgaWYgdmVyc2lvbl9tYXRjaDoKLSAg
ICAgICAgICAgICAgICB2ZXJzaW9uID0gdHVwbGUobWFwKGludCwgdmVyc2lvbl9tYXRjaC5ncm91
cCgndmVyc2lvbicpLnNwbGl0KCcuJykpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRfcnVudGlt
ZSA9IHNlbGYucnVudGltZSh2ZXJzaW9uPXZlcnNpb24sIGlzX2ludGVybmFsX3J1bnRpbWU9Ym9v
bCh2ZXJzaW9uX21hdGNoLmdyb3VwKCdpbnRlcm5hbCcpKSkKKyAgICAgICAgICAgICAgICBjdXJy
ZW50X3J1bnRpbWUgPSBzZWxmLnJ1bnRpbWUodmVyc2lvbj1WZXJzaW9uKHZlcnNpb25fbWF0Y2gu
Z3JvdXAoJ3ZlcnNpb24nKSksIGlzX2ludGVybmFsX3J1bnRpbWU9Ym9vbCh2ZXJzaW9uX21hdGNo
Lmdyb3VwKCdpbnRlcm5hbCcpKSkKICAgICAgICAgICAgICAgICBhc3NlcnQgY3VycmVudF9ydW50
aW1lCiAgICAgICAgICAgICAgICAgY29udGludWUKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS94Y29kZS9zaW11bGF0b3JfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3JfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNDQw
NSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTIzLDYgKzIzLDcgQEAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5ob3N0X21vY2sgaW1wb3J0IE1vY2tIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJz
aW9uIGltcG9ydCBWZXJzaW9uCiBmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQg
U2ltdWxhdG9yCiAKIApAQCAtMTM0LDcgKzEzNSw3IEBAIEFwcGxlIFRWIDEwODBwICg1NTI4MUFC
RS05QzI3LTQzOEItQUQ1MC0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY29tLmFwcGxlLkNv
cmVTaW11bGF0b3IuU2ltUnVudGltZS5pT1MtOC0wJywgcnVudGltZV9pb3NfOC5pZGVudGlmaWVy
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHJ1bnRpbWVfaW9zXzguYXZhaWxhYmxl
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBydW50aW1lX2lvc184LmlzX2ludGVy
bmFsX3J1bnRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoWzgsIDBdKSwgcnVu
dGltZV9pb3NfOC52ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZlcnNpb24oWzgs
IDBdKSwgcnVudGltZV9pb3NfOC52ZXJzaW9uKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEx
LCBsZW4ocnVudGltZV9pb3NfOC5kZXZpY2VzKSkKIAogICAgICAgICBkZXZpY2VfaXBob25lXzRz
ID0gcnVudGltZV9pb3NfOC5kZXZpY2VzWzBdCkBAIC0yMDcsMjEgKzIwOCwyMSBAQCBBcHBsZSBU
ViAxMDgwcCAoNTUyODFBQkUtOUMyNy00MzhCLUFENTAtCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ2NvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLTgtMC1JbnRlcm5hbCcs
IHJ1bnRpbWVfaW9zXzhfaW50ZXJuYWwuaWRlbnRpZmllcikKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChGYWxzZSwgcnVudGltZV9pb3NfOF9pbnRlcm5hbC5hdmFpbGFibGUpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgcnVudGltZV9pb3NfOF9pbnRlcm5hbC5pc19pbnRlcm5hbF9y
dW50aW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKFs4LCAwXSksIHJ1bnRpbWVf
aW9zXzhfaW50ZXJuYWwudmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9u
KFs4LCAwXSksIHJ1bnRpbWVfaW9zXzhfaW50ZXJuYWwudmVyc2lvbikKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgwLCBsZW4ocnVudGltZV9pb3NfOF9pbnRlcm5hbC5kZXZpY2VzKSkKIAogICAg
ICAgICBydW50aW1lX2lvc184XzQgPSBzaW11bGF0b3IucnVudGltZXNbMl0KICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS5pT1MtOC00
JywgcnVudGltZV9pb3NfOF80LmlkZW50aWZpZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
VHJ1ZSwgcnVudGltZV9pb3NfOF80LmF2YWlsYWJsZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChGYWxzZSwgcnVudGltZV9pb3NfOF80LmlzX2ludGVybmFsX3J1bnRpbWUpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwodHVwbGUoWzgsIDRdKSwgcnVudGltZV9pb3NfOF80LnZlcnNpb24pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVmVyc2lvbihbOCwgNF0pLCBydW50aW1lX2lvc184XzQu
dmVyc2lvbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4ocnVudGltZV9pb3NfOF80
LmRldmljZXMpKQogCiAgICAgICAgIHJ1bnRpbWVfdHZvc185ID0gc2ltdWxhdG9yLnJ1bnRpbWVz
WzNdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNp
bVJ1bnRpbWUudHZPUy05LTAnLCBydW50aW1lX3R2b3NfOS5pZGVudGlmaWVyKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKFRydWUsIHJ1bnRpbWVfdHZvc185LmF2YWlsYWJsZSkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgcnVudGltZV90dm9zXzkuaXNfaW50ZXJuYWxfcnVudGlt
ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShbOSwgMF0pLCBydW50aW1lX3R2b3Nf
OS52ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZlcnNpb24oWzksIDBdKSwgcnVu
dGltZV90dm9zXzkudmVyc2lvbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ocnVu
dGltZV90dm9zXzkuZGV2aWNlcykpCiAKICAgICAgICAgZGV2aWNlX2FwcGxlX3R2XzEwODBwID0g
cnVudGltZV90dm9zXzkuZGV2aWNlc1swXQpAQCAtMjM0LDE0ICsyMzUsMTQgQEAgQXBwbGUgVFYg
MTA4MHAgKDU1MjgxQUJFLTlDMjctNDM4Qi1BRDUwLQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLndhdGNoT1MtMi0wJywgcnVudGlt
ZV93YXRjaG9zXzIuaWRlbnRpZmllcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBy
dW50aW1lX3dhdGNob3NfMi5hdmFpbGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFs
c2UsIHJ1bnRpbWVfd2F0Y2hvc18yLmlzX2ludGVybmFsX3J1bnRpbWUpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwodHVwbGUoWzIsIDBdKSwgcnVudGltZV93YXRjaG9zXzIudmVyc2lvbikKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9uKFsyLCAwXSksIHJ1bnRpbWVfd2F0Y2hvc18y
LnZlcnNpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKHJ1bnRpbWVfd2F0Y2hv
c18yLmRldmljZXMpKQogCiAgICAgICAgIHJ1bnRpbWVfaW9zXzEwID0gc2ltdWxhdG9yLnJ1bnRp
bWVzWzVdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NvbS5hcHBsZS5Db3JlU2ltdWxhdG9y
LlNpbVJ1bnRpbWUuaU9TLTEwLTAnLCBydW50aW1lX2lvc18xMC5pZGVudGlmaWVyKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHJ1bnRpbWVfaW9zXzEwLmF2YWlsYWJsZSkKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgcnVudGltZV9pb3NfMTAuaXNfaW50ZXJuYWxfcnVu
dGltZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShbMTAsIDBdKSwgcnVudGltZV9p
b3NfMTAudmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9uKFsxMCwgMF0p
LCBydW50aW1lX2lvc18xMC52ZXJzaW9uKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxl
bihydW50aW1lX2lvc18xMC5kZXZpY2VzKSkKIAogICAgICAgICBkZXZpY2VfYXBwbGVfd2F0Y2hf
MzhtbSA9IHJ1bnRpbWVfd2F0Y2hvc18yLmRldmljZXNbMF0KQEAgLTMxNSw3ICszMTYsNyBAQCBp
T1MgOC4wIEludGVybmFsICg4LjAgLSBVbmtub3duKSAoY29tLmFwCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ2NvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLTgtMCcsIHJ1
bnRpbWVfaW9zXzguaWRlbnRpZmllcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBy
dW50aW1lX2lvc184LmF2YWlsYWJsZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwg
cnVudGltZV9pb3NfOC5pc19pbnRlcm5hbF9ydW50aW1lKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHR1cGxlKFs4LCAwXSksIHJ1bnRpbWVfaW9zXzgudmVyc2lvbikKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChWZXJzaW9uKFs4LCAwXSksIHJ1bnRpbWVfaW9zXzgudmVyc2lvbikKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ocnVudGltZV9pb3NfOC5kZXZpY2VzKSkKIAogICAg
ICAgICBkZXZpY2VfaXBob25lXzRzID0gcnVudGltZV9pb3NfOC5kZXZpY2VzWzBdCkBAIC0zMjgs
NyArMzI5LDcgQEAgaU9TIDguMCBJbnRlcm5hbCAoOC4wIC0gVW5rbm93bikgKGNvbS5hcAogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1l
LmlPUy04LTAtSW50ZXJuYWwnLCBydW50aW1lX2lvc184X2ludGVybmFsLmlkZW50aWZpZXIpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIHJ1bnRpbWVfaW9zXzhfaW50ZXJuYWwuYXZh
aWxhYmxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHJ1bnRpbWVfaW9zXzhfaW50
ZXJuYWwuaXNfaW50ZXJuYWxfcnVudGltZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBs
ZShbOCwgMF0pLCBydW50aW1lX2lvc184X2ludGVybmFsLnZlcnNpb24pCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoVmVyc2lvbihbOCwgMF0pLCBydW50aW1lX2lvc184X2ludGVybmFsLnZlcnNp
b24pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKHJ1bnRpbWVfaW9zXzhfaW50ZXJu
YWwuZGV2aWNlcykpCiAKICAgICBkZWYgdGVzdF9kZXZpY2VfcGFpcnMoc2VsZik6CkBAIC0zNTYs
NyArMzU3LDcgQEAgaU9TIDguMCBJbnRlcm5hbCAoOC4wIC0gVW5rbm93bikgKGNvbS5hcAogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1l
LmlPUy04LTAnLCBydW50aW1lX2lvc184LmlkZW50aWZpZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoVHJ1ZSwgcnVudGltZV9pb3NfOC5hdmFpbGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoRmFsc2UsIHJ1bnRpbWVfaW9zXzguaXNfaW50ZXJuYWxfcnVudGltZSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh0dXBsZShbOCwgMF0pLCBydW50aW1lX2lvc184LnZlcnNpb24pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVmVyc2lvbihbOCwgMF0pLCBydW50aW1lX2lvc184LnZl
cnNpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHJ1bnRpbWVfaW9zXzguZGV2
aWNlcykpCiAKICAgICAgICAgZGV2aWNlX2lwaG9uZV80cyA9IHJ1bnRpbWVfaW9zXzguZGV2aWNl
c1swXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326341</attachid>
            <date>2017-11-08 11:45:51 -0800</date>
            <delta_ts>2017-11-08 14:27:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179426-20171108114550.patch</filename>
            <type>text/plain</type>
            <size>32199</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNDU4MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDE3LTExLTA4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVW5pZnkgdmVyc2lvbiBwYXJzaW5nIGNvZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTQyNgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzU0MTUxOTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgd2Via2l0cHkgbmVlZHMgdG8gcGFyc2UgdmVyc2lvbiBzdHJp
bmdzIG9yIHZlcnNpb24gbGlzdHMgZnJlcXVlbnRseS4gUmF0aGVyIHRoYW4KKyAgICAgICAgZHVw
bGljYXRlIHRoaXMgY29kZSBlYWNoIHRpbWUgaXQncyBuZWVkZWQsIHVuaWZ5IGl0IGluIGEgVmVy
c2lvbiBjbGFzcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm8ucHk6CisgICAgICAgIChQbGF0Zm9ybUluZm8uX19pbml0X18pOiBDb252ZXJ0
IG1hYyB2ZXJzaW9uIHN0cmluZyB0byB2ZXJzaW9uIG9iamVjdCBhbmQKKyAgICAgICAgdXNlIF93
aW5fdmVyc2lvbiBpbnN0ZWFkIG9mIF93aW5fdmVyc2lvbl90dXBsZS4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby54Y29kZV9zZGtfdmVyc2lvbik6IENvbnZlcnQgU0RLIHZlcnNpb24gc3RyaW5nIHRv
IFZlcnNpb24gb2JqZWN0CisgICAgICAgIGJlZm9yZSByZXR1cm5pbmcgaXQuCisgICAgICAgIChQ
bGF0Zm9ybUluZm8ueGNvZGVfdmVyc2lvbik6IFJldHVybiB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFk
IG9mIHZlcnNpb24gc3RyaW5nLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRlcm1pbmVfbWFj
X3ZlcnNpb24pOiBBY2NlcHQgdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcsCisgICAg
ICAgIGVsaW1pbmF0ZSBwYXJzaW5nLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRlcm1pbmVf
d2luX3ZlcnNpb24pOiBBY2NlcHQgdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiB0dXBsZS4KKyAg
ICAgICAgKFBsYXRmb3JtSW5mby5fd2luX3ZlcnNpb24pOiBSZXR1cm4gdmVyc2lvbiBvYmplY3Qg
aW5zdGVhZCBvZiB0dXBsZSwgaGF2ZSBWZXJzaW9uCisgICAgICAgIG9iamVjdCBvd24gdmVyc2lv
biBzdHJpbmcgcGFyc2luZy4KKyAgICAgICAgKFBsYXRmb3JtSW5mby5fd2luX3ZlcnNpb25fdHVw
bGUpOiBSZW5hbWVkIHRvIF93aW5fdmVyc2lvbigpLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl93
aW5fdmVyc2lvbl90dXBsZV9mcm9tX2NtZCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5OgorICAgICAgICAoTW9j
a1BsYXRmb3JtSW5mby54Y29kZV9zZGtfdmVyc2lvbik6IFJldHVybiB2ZXJzaW9uIG9iamVjdCBp
bnN0ZWFkIG9mIHN0cmluZy4KKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8ueGNvZGVfdmVyc2lv
bik6IERpdHRpby4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5
OiBBZGRlZC4KKyAgICAgICAgKFZlcnNpb24pOiBWZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKFZl
cnNpb24uX19pbml0X18pOiBJbml0aWFsaXplIHRoZSB2ZXJzaW9uIG9iamVjdCB3aXRoIGEgc3Ry
aW5nLCBpbnRlZ2VyLAorICAgICAgICB0dXBsZSBvZiBpbnRlZ2VycywgbGlzdCBvZiBpbnRlZ2Vy
cyBvciBhbm90aGVyIFZlcnNpb24gb2JqZWN0LgorICAgICAgICAoVmVyc2lvbi5fX2xlbl9fKTog
UmV0dXJuIDMgc28gdGhhdCB0aGUgVmVyc2lvbiBvYmplY3QgY2FuIGJlIHRyZWF0ZWQgYXMKKyAg
ICAgICAgYSBsaXN0IG9yIHR1cGxlLgorICAgICAgICAoVmVyc2lvbi5fX2dldGl0ZW1fXyk6IEdl
dCBpdGVtIGluIFZlcnNpb24gb2JqZWN0IGJ5IGluZGV4IG9yIHN0cmluZy4KKyAgICAgICAgKFZl
cnNpb24uX19zZXRpdGVtX18pOiBTZXQgaXRlbSBpbiBWZXJzaW9uIG9iamVjdCBieSBpbmRleCBv
ciBzdHJpbmcuCisgICAgICAgIChWZXJzaW9uLl9fc3RyX18pOiBDb252ZXJ0IHZlcnNpb24gdG8g
cHJpbnRhYmxlIHN0cmluZywgb21pdHRpbmcgdHJhaWxpbmcgMCdzLgorICAgICAgICAoVmVyc2lv
bi5fX2NtcF9fKTogQ29tcGFyZSB0d28gdmVyc2lvbiBzdHJpbmdzLCBtYWpvciB0YWtpbmcgcHJl
Y2VkZW5jZSBvdmVyCisgICAgICAgIG1pbm9yLCBtaW5vciB0YWtpbmcgcHJlY2VkZW5jZSBvdmVy
IGJ1aWxkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRl
c3QucHk6IEFkZGVkLgorICAgICAgICAoVmVyc2lvblRlc3RDYXNlKTogVGVzdCBiZWhhdmlvciBv
ZiBWZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
OgorICAgICAgICAoSU9TUG9ydC5kZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKTogaW9zX3Zl
cnNpb24gbm93IHJldHVybnMgYSB2ZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKElPU1BvcnQuX2lz
X3ZhbGlkX2lvc192ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1BvcnQuZ2V0X29wdGlv
bik6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2Uu
cHk6CisgICAgICAgIChJT1NEZXZpY2VQb3J0LmRldGVybWluZV9mdWxsX3BvcnRfbmFtZSk6IFVz
ZSB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFkIG9mIG93bmluZyBwYXJzaW5nLgorICAgICAgICAoSU9T
RGV2aWNlUG9ydC5pb3NfdmVyc2lvbik6IFJldHVybiB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFkIG9m
IHN0cmluZy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvci5w
eToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuc2ltdWxhdG9yX3J1bnRpbWUpOiBVc2UgZnJv
bV92ZXJzaW9uIGluc3RlYWQgb2YgZnJvbV92ZXJzaW9uX3N0cmluZy4KKyAgICAgICAgKElPU1Np
bXVsYXRvclBvcnQuaW9zX3ZlcnNpb24pOiBSZXR1cm4gdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBv
ZiBzdHJpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6
CisgICAgICAgIChSdW50aW1lLmZyb21fdmVyc2lvbik6IEFjY2VwdCB2ZXJzaW9uIG9iamVjdCBp
bnN0ZWFkIG9mIHN0cmluZy4KKyAgICAgICAgKFJ1bnRpbWUuZnJvbV92ZXJzaW9uX3N0cmluZyk6
IFJlcGxhY2VkIGJ5IGZyb21fdmVyc2lvbi4KKyAgICAgICAgKFJ1bnRpbWUuX19yZXByX18pOiBX
aGVuIHByaW50aW5nLCBhIHJ1bnRpbWUncyB2ZXJzaW9uIHdpbGwgYmUgYSB2ZXJzaW9uIG9iamVj
dCBpbnN0ZWFkCisgICAgICAgIG9mIGEgdHVwbGUuCisgICAgICAgIChTaW11bGF0b3IuX3BhcnNl
X3J1bnRpbWVzKTogVXNlIHZlcnNpb24gb2JqZWN0IGluc3RlYWQgb2YgdHVwbGUuCisgICAgICAg
IChTaW11bGF0b3IuX3BhcnNlX2RldmljZXMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3hjb2RlL3NpbXVsYXRvcl91bml0dGVzdC5weTogVXNlIHZlcnNpb24gb2JqZWN0IGlu
c3RlYWQgb2YgdHVwbGVzLgorCiAyMDE3LTExLTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB1c2UgSlNPTjo6e0Fy
cmF5LE9iamVjdCxWYWx1ZX0gaW5zdGVhZCBvZiBJbnNwZWN0b3J7QXJyYXksT2JqZWN0LFZhbHVl
fQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb24ucHkJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCitjbGFzcyBWZXJzaW9uKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgdmVyPScwJyk6CisgICAgICAgIHNlbGYubWFqb3IgPSAwCisgICAgICAgIHNlbGYubWlu
b3IgPSAwCisgICAgICAgIHNlbGYuYnVpbGQgPSAwCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmVy
LCBpbnQpOgorICAgICAgICAgICAgc2VsZi5tYWpvciA9IHZlcgorICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2ZXIsIHN0cikgb3IgaXNpbnN0YW5jZSh2ZXIsIHVu
aWNvZGUpOgorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbih2ZXIuc3BsaXQoJy4nKSkp
OgorICAgICAgICAgICAgICAgIHNlbGZbaV0gPSB2ZXIuc3BsaXQoJy4nKVtpXQorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2ZXIsIGxpc3QpIG9yIGlzaW5zdGFu
Y2UodmVyLCBWZXJzaW9uKSBvciBpc2luc3RhbmNlKHZlciwgdHVwbGUpOgorICAgICAgICAgICAg
Zm9yIGkgaW4geHJhbmdlKGxlbih2ZXIpKToKKyAgICAgICAgICAgICAgICBzZWxmW2ldID0gdmVy
W2ldCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxpZiB2ZXIgaXMgTm9uZToKKyAgICAg
ICAgICAgIHJldHVybiAgIyBFbXB0eSB2ZXJzaW9uIGlzIGltcGxpY2l0bHkgemVybworICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCdWZXJzaW9uIGV4cGVjdGVkIHRvIGJlIGludCwgc3RyLCB0dXBs
ZSBvciBsaXN0IG9mIGludHMnKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJl
dHVybiAzCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShrZXksIGludCk6CisgICAgICAgICAgICBpZiBrZXkgPT0gMDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc2VsZi5tYWpvcgorICAgICAgICAgICAgZWxpZiBrZXkgPT0gMToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc2VsZi5taW5vcgorICAgICAgICAgICAgZWxpZiBrZXkgPT0gMjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5idWlsZAorICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignVmVyc2lvbiBrZXkgbXVzdCBiZSAwLCAxIG9yIDInKQorICAgICAgICBlbGlmIGlz
aW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgaWYga2V5ID09ICdtYWpvcic6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFqb3IKKyAgICAgICAgICAgIGVsaWYga2V5ID09ICdt
aW5vcic6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubWlub3IKKyAgICAgICAgICAgIGVs
aWYga2V5ID09ICdidWlsZCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGQKKyAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1ZlcnNpb24ga2V5IG11c3QgYmUgbWFqb3IsIG1p
bm9yIG9yIGJ1aWxkJykKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRXhwZWN0ZWQgdmVyc2lv
biBrZXkgdG8gYmUgc3RyIG9yIGludCcpCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5
LCB2YWx1ZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBpbnQpOgorICAgICAgICAgICAg
aWYga2V5ID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5tYWpvciA9IGludCh2YWx1ZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc2VsZi5tYWpvcgorICAgICAgICAgICAgZWxpZiBrZXkgPT0g
MToKKyAgICAgICAgICAgICAgICBzZWxmLm1pbm9yID0gaW50KHZhbHVlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBzZWxmLm1pbm9yCisgICAgICAgICAgICBlbGlmIGtleSA9PSAyOgorICAgICAg
ICAgICAgICAgIHNlbGYuYnVpbGQgPSBpbnQodmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHNlbGYuYnVpbGQKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1ZlcnNpb24ga2V5IG11
c3QgYmUgMCwgMSBvciAyJykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAg
ICAgICAgICAgIGlmIGtleSA9PSAnbWFqb3InOgorICAgICAgICAgICAgICAgIHNlbGYubWFqb3Ig
PSBpbnQodmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFqb3IKKyAgICAgICAg
ICAgIGVsaWYga2V5ID09ICdtaW5vcic6CisgICAgICAgICAgICAgICAgc2VsZi5taW5vciA9IGlu
dCh2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5taW5vcgorICAgICAgICAgICAg
ZWxpZiBrZXkgPT0gJ2J1aWxkJzoKKyAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkID0gaW50KHZh
bHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmJ1aWxkCisgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCdWZXJzaW9uIGtleSBtdXN0IGJlIG1ham9yLCBtaW5vciBvciBidWlsZCcp
CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0V4cGVjdGVkIHZlcnNpb24ga2V5IHRvIGJlIHN0
ciBvciBpbnQnKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJlc3VsdCA9ICd7
fScuZm9ybWF0KHNlbGYubWFqb3IpCisgICAgICAgIGlmIHNlbGYubWlub3Igb3Igc2VsZi5idWls
ZDoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnLnt9Jy5mb3JtYXQoc2VsZi5taW5vcikKKyAgICAg
ICAgaWYgc2VsZi5idWlsZDoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnLnt9Jy5mb3JtYXQoc2Vs
Zi5idWlsZCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9fY21wX18oc2VsZiwg
b3RoZXIpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYpKToKKyAgICAgICAgICAg
IGlmIGNtcChzZWxmW2ldLCBvdGhlcltpXSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChz
ZWxmW2ldLCBvdGhlcltpXSkKKyAgICAgICAgcmV0dXJuIDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weQkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdmVyc2lvbiBpbXBvcnQgVmVy
c2lvbgorCisKK2NsYXNzIFZlcnNpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAg
ICBkZWYgdGVzdF9zdHJpbmdfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHYgPSBWZXJzaW9u
KCcxLjIuMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5tYWpvciwgMSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh2Lm1pbm9yLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYu
YnVpbGQsIDMpCisKKyAgICBkZWYgdGVzdF9saXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAg
ICB2ID0gVmVyc2lvbihbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5tYWpv
ciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1pbm9yLCAyKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHYuYnVpbGQsIDMpCisKKyAgICBkZWYgdGVzdF90dXBsZV9jb25zdHJ1Y3Rv
cihzZWxmKToKKyAgICAgICAgdiA9IFZlcnNpb24oKDEsIDIsIDMpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHYubWFqb3IsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5taW5vciwg
MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LmJ1aWxkLCAzKQorCisgICAgZGVmIHRlc3Rf
aW50X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICB2ID0gVmVyc2lvbigxKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHYubWFqb3IsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5t
aW5vciwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LmJ1aWxkLCAwKQorCisgICAgZGVm
IHRlc3RfY29weV9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgdiA9IFZlcnNpb24oVmVyc2lv
bihbMSwgMiwgM10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWFqb3IsIDEpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5taW5vciwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCh2LmJ1aWxkLCAzKQorCisgICAgZGVmIHRlc3Rfbm9uZV9jb25zdHJ1Y3RvcihzZWxmKToKKyAg
ICAgICAgdiA9IFZlcnNpb24oTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1ham9y
LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWlub3IsIDApCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwodi5idWlsZCwgMCkKKworICAgIGRlZiB0ZXN0X3N0cmluZyhzZWxmKToKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoVmVyc2lvbignMS4yLjMnKSksICcxLjIuMycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzEuMi4wJykpLCAnMS4yJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoVmVyc2lvbignMS4yJykpLCAnMS4yJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoVmVyc2lvbignMC4wLjMnKSksICcwLjAuMycpCisKKyAg
ICBkZWYgdGVzdF9jb21wYXJlX3ZlcnNpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKFZlcnNpb24oJzEuMi4zJyksIFZlcnNpb24oJzEuMi4zJykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0R3JlYXRlcihWZXJzaW9uKCcxLjIuNCcpLCBWZXJzaW9uKCcxLjIuMycpKQorICAgICAgICBz
ZWxmLmFzc2VydEdyZWF0ZXIoVmVyc2lvbignMS4zLjInKSwgVmVyc2lvbignMS4yLjMnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKFZlcnNpb24oJzIuMS4xJyksIFZlcnNpb24oJzEuMi4z
JykpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1p
bmZvLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wbGF0Zm9ybWluZm8ucHkJKHJldmlzaW9uIDIyNDQwNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAjIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMCw2ICszMCw3IEBA
CiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIAorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBp
bXBvcnQgVmVyc2lvbgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBv
cnQgRXhlY3V0aXZlCiAKIApAQCAtNTUsOSArNTYsOSBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2Jq
ZWN0KToKICAgICAgICAgaWYgc2VsZi5vc19uYW1lID09ICdmcmVlYnNkJyBvciBzZWxmLm9zX25h
bWUgPT0gJ29wZW5ic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnbmV0YnNkJyBvciBzZWxmLm9zX25h
bWUgPT0gJ2lvcyc6CiAgICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBwbGF0Zm9ybV9tb2R1
bGUucmVsZWFzZSgpCiAgICAgICAgIGlmIHNlbGYub3NfbmFtZS5zdGFydHN3aXRoKCdtYWMnKToK
LSAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV9tYWNfdmVyc2lv
bihwbGF0Zm9ybV9tb2R1bGUubWFjX3ZlcigpWzBdKQorICAgICAgICAgICAgc2VsZi5vc192ZXJz
aW9uID0gc2VsZi5fZGV0ZXJtaW5lX21hY192ZXJzaW9uKFZlcnNpb24ocGxhdGZvcm1fbW9kdWxl
Lm1hY192ZXIoKVswXSkpCiAgICAgICAgIGlmIHNlbGYub3NfbmFtZS5zdGFydHN3aXRoKCd3aW4n
KToKLSAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV93aW5fdmVy
c2lvbihzZWxmLl93aW5fdmVyc2lvbl90dXBsZShzeXNfbW9kdWxlKSkKKyAgICAgICAgICAgIHNl
bGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV93aW5fdmVyc2lvbihzZWxmLl93aW5fdmVy
c2lvbihzeXNfbW9kdWxlKSkKICAgICAgICAgc2VsZi5faXNfY3lnd2luID0gc3lzX21vZHVsZS5w
bGF0Zm9ybSA9PSAnY3lnd2luJwogCiAgICAgZGVmIGlzX21hYyhzZWxmKToKQEAgLTEyNyw4ICsx
MjgsOCBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBkZWYgeGNvZGVfc2RrX3Zl
cnNpb24oc2VsZiwgc2RrX25hbWUpOgogICAgICAgICBpZiBzZWxmLmlzX21hYygpOgogICAgICAg
ICAgICAgIyBBc3N1bWVzIHRoYXQgeGNydW4gZG9lcyBub3Qgd3JpdGUgdG8gc3RhbmRhcmQgb3V0
cHV0IG9uIGZhaWx1cmUgKGUuZy4gU0RLIGRvZXMgbm90IGV4aXN0KS4KLSAgICAgICAgICAgIHJl
dHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWyJ4Y3J1biIsICItLXNkayIsIHNka19u
YW1lLCAiLS1zaG93LXNkay12ZXJzaW9uIl0sIHJldHVybl9zdGRlcnI9RmFsc2UsIGVycm9yX2hh
bmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikucnN0cmlwKCkKLSAgICAgICAgcmV0dXJuICcn
CisgICAgICAgICAgICByZXR1cm4gVmVyc2lvbihzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQo
WyJ4Y3J1biIsICItLXNkayIsIHNka19uYW1lLCAiLS1zaG93LXNkay12ZXJzaW9uIl0sIHJldHVy
bl9zdGRlcnI9RmFsc2UsIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikucnN0
cmlwKCkpCisgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgeGNvZGVfc2ltY3RsX2xpc3Qo
c2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLmlzX21hYygpOgpAQCAtMTM5LDcgKzE0MCw3IEBA
IGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRlZiB4Y29kZV92ZXJzaW9uKHNlbGYp
OgogICAgICAgICBpZiBub3Qgc2VsZi5pc19tYWMoKToKICAgICAgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKLSAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFu
ZChbJ3hjb2RlYnVpbGQnLCAnLXZlcnNpb24nXSkuc3BsaXQoKVsxXQorICAgICAgICByZXR1cm4g
VmVyc2lvbihzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y29kZWJ1aWxkJywgJy12ZXJz
aW9uJ10pLnNwbGl0KClbMV0pCiAKICAgICBkZWYgX2RldGVybWluZV9vc19uYW1lKHNlbGYsIHN5
c19wbGF0Zm9ybSk6CiAgICAgICAgIGlmIHN5c19wbGF0Zm9ybSA9PSAnZGFyd2luJzoKQEAgLTE1
OCw4ICsxNTksNyBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgICAgIHJl
dHVybiAnaGFpa3UnCiAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCd1bnJlY29nbml6ZWQg
cGxhdGZvcm0gc3RyaW5nICIlcyInICUgc3lzX3BsYXRmb3JtKQogCi0gICAgZGVmIF9kZXRlcm1p
bmVfbWFjX3ZlcnNpb24oc2VsZiwgbWFjX3ZlcnNpb25fc3RyaW5nKToKLSAgICAgICAgcmVsZWFz
ZV92ZXJzaW9uID0gaW50KG1hY192ZXJzaW9uX3N0cmluZy5zcGxpdCgnLicpWzFdKQorICAgIGRl
ZiBfZGV0ZXJtaW5lX21hY192ZXJzaW9uKHNlbGYsIG1hY192ZXJzaW9uKToKICAgICAgICAgdmVy
c2lvbl9zdHJpbmdzID0gewogICAgICAgICAgICAgNTogJ2xlb3BhcmQnLAogICAgICAgICAgICAg
NjogJ3Nub3dsZW9wYXJkJywKQEAgLTE3MSwzNCArMTcxLDI3IEBAIGNsYXNzIFBsYXRmb3JtSW5m
byhvYmplY3QpOgogICAgICAgICAgICAgMTI6ICdzaWVycmEnLAogICAgICAgICAgICAgMTM6ICdo
aWdoc2llcnJhJywKICAgICAgICAgfQotICAgICAgICBhc3NlcnQgcmVsZWFzZV92ZXJzaW9uID49
IG1pbih2ZXJzaW9uX3N0cmluZ3Mua2V5cygpKQotICAgICAgICByZXR1cm4gdmVyc2lvbl9zdHJp
bmdzLmdldChyZWxlYXNlX3ZlcnNpb24sICdmdXR1cmUnKQorICAgICAgICBhc3NlcnQgbWFjX3Zl
cnNpb24ubWlub3IgPj0gbWluKHZlcnNpb25fc3RyaW5ncy5rZXlzKCkpCisgICAgICAgIHJldHVy
biB2ZXJzaW9uX3N0cmluZ3MuZ2V0KG1hY192ZXJzaW9uLm1pbm9yLCAnZnV0dXJlJykKIAogICAg
IGRlZiBfZGV0ZXJtaW5lX2xpbnV4X3ZlcnNpb24oc2VsZik6CiAgICAgICAgICMgRklYTUU6IHdl
IGlnbm9yZSB3aGF0ZXZlciB0aGUgcmVhbCB2ZXJzaW9uIGlzIGFuZCBwcmV0ZW5kIGl0J3MgbHVj
aWQgZm9yIG5vdy4KICAgICAgICAgcmV0dXJuICdsdWNpZCcKIAotICAgIGRlZiBfZGV0ZXJtaW5l
X3dpbl92ZXJzaW9uKHNlbGYsIHdpbl92ZXJzaW9uX3R1cGxlKToKLSAgICAgICAgaWYgd2luX3Zl
cnNpb25fdHVwbGVbOjJdID09ICgwLCAwKToKLSAgICAgICAgICAgIGlmIHdpbl92ZXJzaW9uX3R1
cGxlWzJdID4gMTAwMDA6CisgICAgZGVmIF9kZXRlcm1pbmVfd2luX3ZlcnNpb24oc2VsZiwgd2lu
X3ZlcnNpb24pOgorICAgICAgICBpZiB3aW5fdmVyc2lvbi5tYWpvciA9PSAwIGFuZCB3aW5fdmVy
c2lvbi5taW5vciA9PSAwOgorICAgICAgICAgICAgaWYgd2luX3ZlcnNpb25bMl0gPiAxMDAwMDoK
ICAgICAgICAgICAgICAgICByZXR1cm4gJ3dpbjEwJwotICAgICAgICBpZiB3aW5fdmVyc2lvbl90
dXBsZVs6M10gPT0gKDYsIDEsIDc2MDApOgorICAgICAgICBpZiB3aW5fdmVyc2lvbiA9PSBWZXJz
aW9uKFs2LCAxLCA3NjAwXSk6CiAgICAgICAgICAgICByZXR1cm4gJzdzcDAnCi0gICAgICAgIGlm
IHdpbl92ZXJzaW9uX3R1cGxlWzoyXSA9PSAoNiwgMCk6CisgICAgICAgIGlmIHdpbl92ZXJzaW9u
Lm1ham9yID09IDYgYW5kIHdpbl92ZXJzaW9uLm1pbm9yID09IDA6CiAgICAgICAgICAgICByZXR1
cm4gJ3Zpc3RhJwotICAgICAgICBpZiB3aW5fdmVyc2lvbl90dXBsZVs6Ml0gPT0gKDUsIDEpOgor
ICAgICAgICBpZiB3aW5fdmVyc2lvbi5tYWpvciA9PSA1IGFuZCB3aW5fdmVyc2lvbi5taW5vciA9
PSAxOgogICAgICAgICAgICAgcmV0dXJuICd4cCcKLSAgICAgICAgYXNzZXJ0IHdpbl92ZXJzaW9u
X3R1cGxlWzBdID4gNiBvciB3aW5fdmVyc2lvbl90dXBsZVsxXSA+PSAxLCAnVW5yZWNvZ25pemVk
IFdpbmRvd3MgdmVyc2lvbiB0dXBsZTogIiVzIicgJSAod2luX3ZlcnNpb25fdHVwbGUsKQorICAg
ICAgICBhc3NlcnQgd2luX3ZlcnNpb25bMF0gPiA2IG9yIHdpbl92ZXJzaW9uWzFdID49IDEsICdV
bnJlY29nbml6ZWQgV2luZG93cyB2ZXJzaW9uOiAie30iJy5mb3JtYXQod2luX3ZlcnNpb24pCiAg
ICAgICAgIHJldHVybiAnZnV0dXJlJwogCi0gICAgZGVmIF93aW5fdmVyc2lvbl90dXBsZShzZWxm
LCBzeXNfbW9kdWxlKToKKyAgICBkZWYgX3dpbl92ZXJzaW9uKHNlbGYsIHN5c19tb2R1bGUpOgog
ICAgICAgICBpZiBoYXNhdHRyKHN5c19tb2R1bGUsICdnZXR3aW5kb3dzdmVyc2lvbicpOgotICAg
ICAgICAgICAgcmV0dXJuIHN5c19tb2R1bGUuZ2V0d2luZG93c3ZlcnNpb24oKQotICAgICAgICBy
ZXR1cm4gc2VsZi5fd2luX3ZlcnNpb25fdHVwbGVfZnJvbV9jbWQoKQotCi0gICAgZGVmIF93aW5f
dmVyc2lvbl90dXBsZV9mcm9tX2NtZChzZWxmKToKLSAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBz
aG91bGQgb25seSBldmVyIGJlIGNhbGxlZCBvbiB3aW5kb3dzLCBzbyB0aGlzIHNob3VsZCBhbHdh
eXMgd29yay4KLSAgICAgICAgdmVyX291dHB1dCA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFu
ZChbJ2NtZCcsICcvYycsICd2ZXInXSwgZGVjb2RlX291dHB1dD1GYWxzZSkKLSAgICAgICAgbWF0
Y2hfb2JqZWN0ID0gcmUuc2VhcmNoKHInKD9QPG1ham9yPlxkKVwuKD9QPG1pbm9yPlxkKVwuKD9Q
PGJ1aWxkPlxkKyknLCB2ZXJfb3V0cHV0KQotICAgICAgICBhc3NlcnQgbWF0Y2hfb2JqZWN0LCAn
Y21kIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgdmVyc2lvbiBzdHJpbmc6ICcgKyB2ZXJfb3V0cHV0
Ci0gICAgICAgIHJldHVybiB0dXBsZShtYXAoaW50LCBtYXRjaF9vYmplY3QuZ3JvdXBzKCkpKQor
ICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24oc3lzX21vZHVsZS5nZXR3aW5kb3dzdmVyc2lvbigp
KQorICAgICAgICByZXR1cm4gVmVyc2lvbihzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWydj
bWQnLCAnL2MnLCAndmVyJ10sIGRlY29kZV9vdXRwdXQ9RmFsc2UpKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9f
bW9jay5weQkocmV2aXNpb24gMjI0NDA1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEs
NSBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTI2LDYgKzI3LDcgQEAKICMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24g
aW1wb3J0IFZlcnNpb24KIAogY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPSdzbm93bGVvcGFyZCcp
OgpAQCAtNjEsMTAgKzYzLDEwIEBAIGNsYXNzIE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAg
ICAgICAgcmV0dXJuIDgwCiAKICAgICBkZWYgeGNvZGVfc2RrX3ZlcnNpb24oc2VsZiwgc2RrX25h
bWUpOgotICAgICAgICByZXR1cm4gJzguMScKKyAgICAgICAgcmV0dXJuIFZlcnNpb24oJzguMScp
CiAKICAgICBkZWYgeGNvZGVfdmVyc2lvbihzZWxmKToKLSAgICAgICAgcmV0dXJuICc4LjAnCisg
ICAgICAgIHJldHVybiBWZXJzaW9uKCc4LjAnKQogCiAgICAgZGVmIHhjb2RlX3NpbWN0bF9saXN0
KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5leHBlY3RlZF94Y29kZV9zaW1jdGxfbGlzdApJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CShyZXZpc2lvbiAyMjQ0MDUpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw3IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgdHJhY2ViYWNrCiAKIGZyb20gd2Via2l0
cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3ZWJraXRweS5jb21tb24u
dmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxz
LnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KIGZyb20gd2Via2l0
cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRweS5wb3J0
LmRhcndpbiBpbXBvcnQgRGFyd2luUG9ydApAQCAtMTA5LDExICsxMTAsMTEgQEAgY2xhc3MgSU9T
UG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVz
dF9ydW5uZXInKToKICAgICAgICAgICAgIHdrX3N0cmluZyA9ICd3azInCiAgICAgICAgIGZhbGxi
YWNrX25hbWVzID0gWwotICAgICAgICAgICAgJ3t9LXt9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25h
bWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5zcGxpdCgnLicpWzBdLCB3a19zdHJpbmcpLAotICAgICAg
ICAgICAgJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5z
cGxpdCgnLicpWzBdKSwKKyAgICAgICAgICAgICd7fS17fS17fScuZm9ybWF0KHNlbGYucG9ydF9u
YW1lLCBzZWxmLmlvc192ZXJzaW9uKCkubWFqb3IsIHdrX3N0cmluZyksCisgICAgICAgICAgICAn
e30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVyc2lvbigpLm1ham9yKSwK
ICAgICAgICAgICAgICd7fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1lLCB3a19zdHJpbmcpLAog
ICAgICAgICAgICAgc2VsZi5wb3J0X25hbWUsCi0gICAgICAgICAgICAne30te30nLmZvcm1hdChJ
T1NQb3J0LnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVyc2lvbigpLnNwbGl0KCcuJylbMF0pLAorICAg
ICAgICAgICAgJ3t9LXt9Jy5mb3JtYXQoSU9TUG9ydC5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNp
b24oKS5tYWpvciksCiAgICAgICAgICAgICAne30te30nLmZvcm1hdChJT1NQb3J0LnBvcnRfbmFt
ZSwgd2tfc3RyaW5nKSwKICAgICAgICAgICAgIElPU1BvcnQucG9ydF9uYW1lLAogICAgICAgICBd
CkBAIC0xMzQsMjIgKzEzNSw2IEBAIGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgZGVm
IHRlc3RfZXhwZWN0YXRpb25zX2ZpbGVfcG9zaXRpb24oc2VsZik6CiAgICAgICAgIHJldHVybiA0
CiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9pc192YWxpZF9pb3NfdmVyc2lvbih2ZXJz
aW9uX2lkZW50aWZpZXIpOgotICAgICAgICAjIEV4YW1wbGVzIG9mIHZhbGlkIHZlcnNpb25zOiAn
MTEnLCAnMTAuMycsICcxMC4zLjEnCi0gICAgICAgIGlmIG5vdCB2ZXJzaW9uX2lkZW50aWZpZXI6
Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgc3BsaXRfYnlfcGVyaW9kID0gdmVy
c2lvbl9pZGVudGlmaWVyLnNwbGl0KCcuJykKLSAgICAgICAgaWYgbGVuKHNwbGl0X2J5X3Blcmlv
ZCkgPiAzOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBhbGwocGFy
dC5pc2RpZ2l0KCkgZm9yIHBhcnQgaW4gc3BsaXRfYnlfcGVyaW9kKQotCi0gICAgZGVmIGdldF9v
cHRpb24oc2VsZiwgbmFtZSwgZGVmYXVsdF92YWx1ZT1Ob25lKToKLSAgICAgICAgcmVzdWx0ID0g
c3VwZXIoSU9TUG9ydCwgc2VsZikuZ2V0X29wdGlvbihuYW1lLCBkZWZhdWx0X3ZhbHVlKQotICAg
ICAgICBpZiBuYW1lID09ICd2ZXJzaW9uJyBhbmQgcmVzdWx0IGFuZCBub3QgSU9TUG9ydC5faXNf
dmFsaWRfaW9zX3ZlcnNpb24ocmVzdWx0KToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJv
cigne30gaXMgYW4gaW52YWxpZCBpT1MgdmVyc2lvbicuZm9ybWF0KHJlc3VsdCkpCi0gICAgICAg
IHJldHVybiByZXN1bHQKLQogICAgIGRlZiBpb3NfdmVyc2lvbihzZWxmKToKICAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zX2RldmljZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zX2RldmljZS5weQkocmV2aXNpb24gMjI0NDA1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvc19kZXZpY2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAg
aW1wb3J0IGxvZ2dpbmcKIAogZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1l
bW9pemVkCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFz
aExvZ3MKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20g
d2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRw
eS5wb3J0LmlvcyBpbXBvcnQgSU9TUG9ydAogCkBAIC02NCw4ICs2NSw3IEBAIGNsYXNzIElPU0Rl
dmljZVBvcnQoSU9TUG9ydCk6CiAgICAgICAgICAgICBpcGhvbmVvc19zZGtfdmVyc2lvbiA9IGhv
c3QucGxhdGZvcm0ueGNvZGVfc2RrX3ZlcnNpb24oY2xzLlNESykKICAgICAgICAgICAgIGlmIG5v
dCBpcGhvbmVvc19zZGtfdmVyc2lvbjoKICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
IlBsZWFzZSBpbnN0YWxsIHRoZSBpT1MgU0RLLiIpCi0gICAgICAgICAgICBtYWpvcl92ZXJzaW9u
X251bWJlciA9IGlwaG9uZW9zX3Nka192ZXJzaW9uLnNwbGl0KCcuJylbMF0KLSAgICAgICAgICAg
IHBvcnRfbmFtZSA9IHBvcnRfbmFtZSArICctJyArIG1ham9yX3ZlcnNpb25fbnVtYmVyCisgICAg
ICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWUgKyAnLScgKyBzdHIoaXBob25lb3Nfc2RrX3Zl
cnNpb24ubWFqb3IpCiAgICAgICAgIHJldHVybiBwb3J0X25hbWUKIAogICAgIGRlZiBwYXRoX3Rv
X2NyYXNoX2xvZ3Moc2VsZik6CkBAIC05NCw3ICs5NCw3IEBAIGNsYXNzIElPU0RldmljZVBvcnQo
SU9TUG9ydCk6CiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGlvc192ZXJzaW9uKHNlbGYpOgogICAg
ICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3ZlcnNpb24nKToKLSAgICAgICAgICAgIHJldHVybiBz
ZWxmLmdldF9vcHRpb24oJ3ZlcnNpb24nKQorICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24oc2Vs
Zi5nZXRfb3B0aW9uKCd2ZXJzaW9uJykpCiAKICAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9u
cygpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05fREVWSUNFX1RF
U1RJTkcpCkBAIC0xMDksNyArMTA5LDcgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToK
ICAgICAgICAgICAgICAgICBpZiBkZXZpY2UucGxhdGZvcm0ub3NfdmVyc2lvbiAhPSB2ZXJzaW9u
OgogICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ011bHRpcGxlIGNvbm5l
Y3RlZCBkZXZpY2VzIGhhdmUgZGlmZmVyZW50IGlPUyB2ZXJzaW9ucycpCiAKLSAgICAgICAgcmV0
dXJuIHZlcnNpb24KKyAgICAgICAgcmV0dXJuIFZlcnNpb24odmVyc2lvbikKIAogICAgICMgRklY
TUU6IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0
OTc5OTE+LgogICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9j
ZXNzX3BpZCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRv
ci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVs
YXRvci5weQkocmV2aXNpb24gMjI0NDA1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvc19zaW11bGF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAgaW1wb3J0
IHRpbWUKIAogZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgor
ZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogZnJvbSB3ZWJraXRw
eS5wb3J0LmRldmljZSBpbXBvcnQgRGV2aWNlCiBmcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9y
dCBJT1NQb3J0CiBmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9y
LCBSdW50aW1lLCBEZXZpY2VUeXBlCkBAIC0xMDIsMTYgKzEwMywxNiBAQCBjbGFzcyBJT1NTaW11
bGF0b3JQb3J0KElPU1BvcnQpOgogICAgICAgICBpZiBydW50aW1lX2lkZW50aWZpZXI6CiAgICAg
ICAgICAgICBydW50aW1lID0gUnVudGltZS5mcm9tX2lkZW50aWZpZXIocnVudGltZV9pZGVudGlm
aWVyKQogICAgICAgICBlbGlmIHNlbGYuZ2V0X29wdGlvbigndmVyc2lvbicpOgotICAgICAgICAg
ICAgcnVudGltZSA9IFJ1bnRpbWUuZnJvbV92ZXJzaW9uX3N0cmluZyhzZWxmLmdldF9vcHRpb24o
J3ZlcnNpb24nKSkKKyAgICAgICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lLmZyb21fdmVyc2lvbihW
ZXJzaW9uKHNlbGYuZ2V0X29wdGlvbigndmVyc2lvbicpKSkKICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lLmZyb21fdmVyc2lvbl9zdHJpbmcoc2VsZi5ob3N0LnBs
YXRmb3JtLnhjb2RlX3Nka192ZXJzaW9uKCdpcGhvbmVzaW11bGF0b3InKSkKKyAgICAgICAgICAg
IHJ1bnRpbWUgPSBSdW50aW1lLmZyb21fdmVyc2lvbihzZWxmLmhvc3QucGxhdGZvcm0ueGNvZGVf
c2RrX3ZlcnNpb24oJ2lwaG9uZXNpbXVsYXRvcicpKQogICAgICAgICByZXR1cm4gcnVudGltZQog
CiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGlvc192ZXJzaW9uKHNlbGYpOgogICAgICAgICBydW50
aW1lX2lkZW50aWZpZXIgPSBzZWxmLmdldF9vcHRpb24oJ3J1bnRpbWUnKQogICAgICAgICBpZiBz
ZWxmLmdldF9vcHRpb24oJ3ZlcnNpb24nKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9v
cHRpb24oJ3ZlcnNpb24nKQorICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24oc2VsZi5nZXRfb3B0
aW9uKCd2ZXJzaW9uJykpCiAgICAgICAgIGlmIHJ1bnRpbWVfaWRlbnRpZmllcjoKICAgICAgICAg
ICAgIHJldHVybiAnLicuam9pbihzdHIoaSkgZm9yIGkgaW4gUnVudGltZS5mcm9tX2lkZW50aWZp
ZXIocnVudGltZV9pZGVudGlmaWVyKS52ZXJzaW9uKQogICAgICAgICByZXR1cm4gc2VsZi5ob3N0
LnBsYXRmb3JtLnhjb2RlX3Nka192ZXJzaW9uKCdpcGhvbmVzaW11bGF0b3InKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkJKHJldmlzaW9uIDIyNDQwNSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBAIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9u
LnRpbWVvdXRfY29udGV4dCBpbXBvcnQgVGltZW91dAogZnJvbSB3ZWJraXRweS5jb21tb24uaG9z
dCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lv
bgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKQEAgLTEyOSw4ICsxMzAs
OCBAQCBjbGFzcyBSdW50aW1lKG9iamVjdCk6CiAgICAgICAgIHNlbGYuaXNfaW50ZXJuYWxfcnVu
dGltZSA9IGlzX2ludGVybmFsX3J1bnRpbWUKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBm
cm9tX3ZlcnNpb25fc3RyaW5nKGNscywgdmVyc2lvbik6Ci0gICAgICAgIHJldHVybiBjbHMuZnJv
bV9pZGVudGlmaWVyKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy0nICsg
dmVyc2lvbi5yZXBsYWNlKCcuJywgJy0nKSkKKyAgICBkZWYgZnJvbV92ZXJzaW9uKGNscywgdmVy
c2lvbik6CisgICAgICAgIHJldHVybiBjbHMuZnJvbV9pZGVudGlmaWVyKCdjb20uYXBwbGUuQ29y
ZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy0nICsgJ3t9LXt9LXt9Jy5mb3JtYXQodmVyc2lvblsw
XSwgdmVyc2lvblsxXSwgdmVyc2lvblsyXSkpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYg
ZnJvbV9pZGVudGlmaWVyKGNscywgaWRlbnRpZmllcik6CkBAIC0xNTYsNyArMTU3LDcgQEAgY2xh
c3MgUnVudGltZShvYmplY3QpOgogICAgICAgICBpZiBzZWxmLmlzX2ludGVybmFsX3J1bnRpbWU6
CiAgICAgICAgICAgICB2ZXJzaW9uX3N1ZmZpeCA9ICIgSW50ZXJuYWwiCiAgICAgICAgIHJldHVy
biAnPFJ1bnRpbWUge3ZlcnNpb259OiB7aWRlbnRpZmllcn0uIEF2YWlsYWJsZToge2F2YWlsYWJs
ZX0sIHtudW1fZGV2aWNlc30gZGV2aWNlcz4nLmZvcm1hdCgKLSAgICAgICAgICAgIHZlcnNpb249
Jy4nLmpvaW4obWFwKHN0ciwgc2VsZi52ZXJzaW9uKSkgKyB2ZXJzaW9uX3N1ZmZpeCwKKyAgICAg
ICAgICAgIHZlcnNpb249c3RyKHNlbGYudmVyc2lvbikgKyB2ZXJzaW9uX3N1ZmZpeCwKICAgICAg
ICAgICAgIGlkZW50aWZpZXI9c2VsZi5pZGVudGlmaWVyLAogICAgICAgICAgICAgYXZhaWxhYmxl
PXNlbGYuYXZhaWxhYmxlLAogICAgICAgICAgICAgbnVtX2RldmljZXM9bGVuKHNlbGYuZGV2aWNl
cykpCkBAIC0zMzQsOCArMzM1LDcgQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CiAgICAgICAg
ICAgICAgICAgaWYgbGluZSAhPSAnPT0gRGV2aWNlcyA9PSc6CiAgICAgICAgICAgICAgICAgICAg
IHJhaXNlIFJ1bnRpbWVFcnJvcignRXhwZWN0ZWQgPT0gRGV2aWNlcyA9PSBoZWFkZXIgYnV0IGdv
dDogInt9IicuZm9ybWF0KGxpbmUpKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAg
ICB2ZXJzaW9uID0gdHVwbGUobWFwKGludCwgcnVudGltZV9tYXRjaC5ncm91cCgndmVyc2lvbicp
LnNwbGl0KCcuJykpKQotICAgICAgICAgICAgcnVudGltZSA9IFJ1bnRpbWUodmVyc2lvbj12ZXJz
aW9uLAorICAgICAgICAgICAgcnVudGltZSA9IFJ1bnRpbWUodmVyc2lvbj1WZXJzaW9uKHJ1bnRp
bWVfbWF0Y2guZ3JvdXAoJ3ZlcnNpb24nKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyPXJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ2lkZW50aWZpZXInKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZT1ydW50aW1lX21hdGNoLmdyb3VwKCdhdmFp
bGFiaWxpdHknKSBpcyBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW50
ZXJuYWxfcnVudGltZT1ib29sKHJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ2ludGVybmFsJykpKQpAQCAt
MzUzLDggKzM1Myw3IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICBmb3IgbGlu
ZSBpbiBsaW5lczoKICAgICAgICAgICAgIHZlcnNpb25fbWF0Y2ggPSBzZWxmLnZlcnNpb25fcmUu
bWF0Y2gobGluZSkKICAgICAgICAgICAgIGlmIHZlcnNpb25fbWF0Y2g6Ci0gICAgICAgICAgICAg
ICAgdmVyc2lvbiA9IHR1cGxlKG1hcChpbnQsIHZlcnNpb25fbWF0Y2guZ3JvdXAoJ3ZlcnNpb24n
KS5zcGxpdCgnLicpKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50X3J1bnRpbWUgPSBzZWxmLnJ1
bnRpbWUodmVyc2lvbj12ZXJzaW9uLCBpc19pbnRlcm5hbF9ydW50aW1lPWJvb2wodmVyc2lvbl9t
YXRjaC5ncm91cCgnaW50ZXJuYWwnKSkpCisgICAgICAgICAgICAgICAgY3VycmVudF9ydW50aW1l
ID0gc2VsZi5ydW50aW1lKHZlcnNpb249VmVyc2lvbih2ZXJzaW9uX21hdGNoLmdyb3VwKCd2ZXJz
aW9uJykpLCBpc19pbnRlcm5hbF9ydW50aW1lPWJvb2wodmVyc2lvbl9tYXRjaC5ncm91cCgnaW50
ZXJuYWwnKSkpCiAgICAgICAgICAgICAgICAgYXNzZXJ0IGN1cnJlbnRfcnVudGltZQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUv
c2ltdWxhdG9yX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkveGNvZGUvc2ltdWxhdG9yX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjQ0MDUpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvcl91bml0dGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw2
ICsyMyw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdF9t
b2NrIGltcG9ydCBNb2NrSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQg
VmVyc2lvbgogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvcgog
CiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBBcHBsZSBUViAxMDgwcCAoNTUyODFBQkUtOUMyNy00MzhC
LUFENTAtCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NvbS5hcHBsZS5Db3JlU2ltdWxhdG9y
LlNpbVJ1bnRpbWUuaU9TLTgtMCcsIHJ1bnRpbWVfaW9zXzguaWRlbnRpZmllcikKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChUcnVlLCBydW50aW1lX2lvc184LmF2YWlsYWJsZSkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgcnVudGltZV9pb3NfOC5pc19pbnRlcm5hbF9ydW50aW1l
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKFs4LCAwXSksIHJ1bnRpbWVfaW9zXzgu
dmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9uKFs4LCAwXSksIHJ1bnRp
bWVfaW9zXzgudmVyc2lvbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMSwgbGVuKHJ1bnRp
bWVfaW9zXzguZGV2aWNlcykpCiAKICAgICAgICAgZGV2aWNlX2lwaG9uZV80cyA9IHJ1bnRpbWVf
aW9zXzguZGV2aWNlc1swXQpAQCAtMjA3LDIxICsyMDgsMjEgQEAgQXBwbGUgVFYgMTA4MHAgKDU1
MjgxQUJFLTlDMjctNDM4Qi1BRDUwLQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdjb20uYXBw
bGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy04LTAtSW50ZXJuYWwnLCBydW50aW1lX2lv
c184X2ludGVybmFsLmlkZW50aWZpZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2Us
IHJ1bnRpbWVfaW9zXzhfaW50ZXJuYWwuYXZhaWxhYmxlKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKFRydWUsIHJ1bnRpbWVfaW9zXzhfaW50ZXJuYWwuaXNfaW50ZXJuYWxfcnVudGltZSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShbOCwgMF0pLCBydW50aW1lX2lvc184X2ludGVy
bmFsLnZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVmVyc2lvbihbOCwgMF0pLCBy
dW50aW1lX2lvc184X2ludGVybmFsLnZlcnNpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MCwgbGVuKHJ1bnRpbWVfaW9zXzhfaW50ZXJuYWwuZGV2aWNlcykpCiAKICAgICAgICAgcnVudGlt
ZV9pb3NfOF80ID0gc2ltdWxhdG9yLnJ1bnRpbWVzWzJdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ2NvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLTgtNCcsIHJ1bnRpbWVf
aW9zXzhfNC5pZGVudGlmaWVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHJ1bnRp
bWVfaW9zXzhfNC5hdmFpbGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIHJ1
bnRpbWVfaW9zXzhfNC5pc19pbnRlcm5hbF9ydW50aW1lKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHR1cGxlKFs4LCA0XSksIHJ1bnRpbWVfaW9zXzhfNC52ZXJzaW9uKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKFZlcnNpb24oWzgsIDRdKSwgcnVudGltZV9pb3NfOF80LnZlcnNpb24pCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKHJ1bnRpbWVfaW9zXzhfNC5kZXZpY2VzKSkK
IAogICAgICAgICBydW50aW1lX3R2b3NfOSA9IHNpbXVsYXRvci5ydW50aW1lc1szXQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLnR2
T1MtOS0wJywgcnVudGltZV90dm9zXzkuaWRlbnRpZmllcikKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChUcnVlLCBydW50aW1lX3R2b3NfOS5hdmFpbGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoRmFsc2UsIHJ1bnRpbWVfdHZvc185LmlzX2ludGVybmFsX3J1bnRpbWUpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoWzksIDBdKSwgcnVudGltZV90dm9zXzkudmVyc2lvbikK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9uKFs5LCAwXSksIHJ1bnRpbWVfdHZvc185
LnZlcnNpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHJ1bnRpbWVfdHZvc185
LmRldmljZXMpKQogCiAgICAgICAgIGRldmljZV9hcHBsZV90dl8xMDgwcCA9IHJ1bnRpbWVfdHZv
c185LmRldmljZXNbMF0KQEAgLTIzNCwxNCArMjM1LDE0IEBAIEFwcGxlIFRWIDEwODBwICg1NTI4
MUFCRS05QzI3LTQzOEItQUQ1MC0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY29tLmFwcGxl
LkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS53YXRjaE9TLTItMCcsIHJ1bnRpbWVfd2F0Y2hvc18y
LmlkZW50aWZpZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgcnVudGltZV93YXRj
aG9zXzIuYXZhaWxhYmxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBydW50aW1l
X3dhdGNob3NfMi5pc19pbnRlcm5hbF9ydW50aW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHR1cGxlKFsyLCAwXSksIHJ1bnRpbWVfd2F0Y2hvc18yLnZlcnNpb24pCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoVmVyc2lvbihbMiwgMF0pLCBydW50aW1lX3dhdGNob3NfMi52ZXJzaW9uKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihydW50aW1lX3dhdGNob3NfMi5kZXZpY2Vz
KSkKIAogICAgICAgICBydW50aW1lX2lvc18xMCA9IHNpbXVsYXRvci5ydW50aW1lc1s1XQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1l
LmlPUy0xMC0wJywgcnVudGltZV9pb3NfMTAuaWRlbnRpZmllcikKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChUcnVlLCBydW50aW1lX2lvc18xMC5hdmFpbGFibGUpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoRmFsc2UsIHJ1bnRpbWVfaW9zXzEwLmlzX2ludGVybmFsX3J1bnRpbWUpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoWzEwLCAwXSksIHJ1bnRpbWVfaW9zXzEwLnZlcnNp
b24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVmVyc2lvbihbMTAsIDBdKSwgcnVudGltZV9p
b3NfMTAudmVyc2lvbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4ocnVudGltZV9p
b3NfMTAuZGV2aWNlcykpCiAKICAgICAgICAgZGV2aWNlX2FwcGxlX3dhdGNoXzM4bW0gPSBydW50
aW1lX3dhdGNob3NfMi5kZXZpY2VzWzBdCkBAIC0zMTUsNyArMzE2LDcgQEAgaU9TIDguMCBJbnRl
cm5hbCAoOC4wIC0gVW5rbm93bikgKGNvbS5hcAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdj
b20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy04LTAnLCBydW50aW1lX2lvc184
LmlkZW50aWZpZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgcnVudGltZV9pb3Nf
OC5hdmFpbGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIHJ1bnRpbWVfaW9z
XzguaXNfaW50ZXJuYWxfcnVudGltZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShb
OCwgMF0pLCBydW50aW1lX2lvc184LnZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
VmVyc2lvbihbOCwgMF0pLCBydW50aW1lX2lvc184LnZlcnNpb24pCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMSwgbGVuKHJ1bnRpbWVfaW9zXzguZGV2aWNlcykpCiAKICAgICAgICAgZGV2aWNl
X2lwaG9uZV80cyA9IHJ1bnRpbWVfaW9zXzguZGV2aWNlc1swXQpAQCAtMzI4LDcgKzMyOSw3IEBA
IGlPUyA4LjAgSW50ZXJuYWwgKDguMCAtIFVua25vd24pIChjb20uYXAKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS5pT1MtOC0wLUlu
dGVybmFsJywgcnVudGltZV9pb3NfOF9pbnRlcm5hbC5pZGVudGlmaWVyKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKEZhbHNlLCBydW50aW1lX2lvc184X2ludGVybmFsLmF2YWlsYWJsZSkKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBydW50aW1lX2lvc184X2ludGVybmFsLmlzX2lu
dGVybmFsX3J1bnRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoWzgsIDBdKSwg
cnVudGltZV9pb3NfOF9pbnRlcm5hbC52ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KFZlcnNpb24oWzgsIDBdKSwgcnVudGltZV9pb3NfOF9pbnRlcm5hbC52ZXJzaW9uKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihydW50aW1lX2lvc184X2ludGVybmFsLmRldmljZXMp
KQogCiAgICAgZGVmIHRlc3RfZGV2aWNlX3BhaXJzKHNlbGYpOgpAQCAtMzU2LDcgKzM1Nyw3IEBA
IGlPUyA4LjAgSW50ZXJuYWwgKDguMCAtIFVua25vd24pIChjb20uYXAKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS5pT1MtOC0wJywg
cnVudGltZV9pb3NfOC5pZGVudGlmaWVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUs
IHJ1bnRpbWVfaW9zXzguYXZhaWxhYmxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNl
LCBydW50aW1lX2lvc184LmlzX2ludGVybmFsX3J1bnRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwodHVwbGUoWzgsIDBdKSwgcnVudGltZV9pb3NfOC52ZXJzaW9uKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKFZlcnNpb24oWzgsIDBdKSwgcnVudGltZV9pb3NfOC52ZXJzaW9uKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihydW50aW1lX2lvc184LmRldmljZXMpKQogCiAg
ICAgICAgIGRldmljZV9pcGhvbmVfNHMgPSBydW50aW1lX2lvc184LmRldmljZXNbMF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326377</attachid>
            <date>2017-11-08 14:27:18 -0800</date>
            <delta_ts>2017-11-08 17:21:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179426-20171108142718.patch</filename>
            <type>text/plain</type>
            <size>32184</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNDU4MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDE3LTExLTA4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVW5pZnkgdmVyc2lvbiBwYXJzaW5nIGNvZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTQyNgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzU0MTUxOTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgd2Via2l0cHkgbmVlZHMgdG8gcGFyc2UgdmVyc2lvbiBzdHJp
bmdzIG9yIHZlcnNpb24gbGlzdHMgZnJlcXVlbnRseS4gUmF0aGVyIHRoYW4KKyAgICAgICAgZHVw
bGljYXRlIHRoaXMgY29kZSBlYWNoIHRpbWUgaXQncyBuZWVkZWQsIHVuaWZ5IGl0IGluIGEgVmVy
c2lvbiBjbGFzcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm8ucHk6CisgICAgICAgIChQbGF0Zm9ybUluZm8uX19pbml0X18pOiBDb252ZXJ0
IG1hYyB2ZXJzaW9uIHN0cmluZyB0byB2ZXJzaW9uIG9iamVjdCBhbmQKKyAgICAgICAgdXNlIF93
aW5fdmVyc2lvbiBpbnN0ZWFkIG9mIF93aW5fdmVyc2lvbl90dXBsZS4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby54Y29kZV9zZGtfdmVyc2lvbik6IENvbnZlcnQgU0RLIHZlcnNpb24gc3RyaW5nIHRv
IFZlcnNpb24gb2JqZWN0CisgICAgICAgIGJlZm9yZSByZXR1cm5pbmcgaXQuCisgICAgICAgIChQ
bGF0Zm9ybUluZm8ueGNvZGVfdmVyc2lvbik6IFJldHVybiB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFk
IG9mIHZlcnNpb24gc3RyaW5nLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRlcm1pbmVfbWFj
X3ZlcnNpb24pOiBBY2NlcHQgdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcsCisgICAg
ICAgIGVsaW1pbmF0ZSBwYXJzaW5nLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRlcm1pbmVf
d2luX3ZlcnNpb24pOiBBY2NlcHQgdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiB0dXBsZS4KKyAg
ICAgICAgKFBsYXRmb3JtSW5mby5fd2luX3ZlcnNpb24pOiBSZXR1cm4gdmVyc2lvbiBvYmplY3Qg
aW5zdGVhZCBvZiB0dXBsZSwgaGF2ZSBWZXJzaW9uCisgICAgICAgIG9iamVjdCBvd24gdmVyc2lv
biBzdHJpbmcgcGFyc2luZy4KKyAgICAgICAgKFBsYXRmb3JtSW5mby5fd2luX3ZlcnNpb25fdHVw
bGUpOiBSZW5hbWVkIHRvIF93aW5fdmVyc2lvbigpLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl93
aW5fdmVyc2lvbl90dXBsZV9mcm9tX2NtZCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5OgorICAgICAgICAoTW9j
a1BsYXRmb3JtSW5mby54Y29kZV9zZGtfdmVyc2lvbik6IFJldHVybiB2ZXJzaW9uIG9iamVjdCBp
bnN0ZWFkIG9mIHN0cmluZy4KKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8ueGNvZGVfdmVyc2lv
bik6IERpdHRpby4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5
OiBBZGRlZC4KKyAgICAgICAgKFZlcnNpb24pOiBWZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKFZl
cnNpb24uX19pbml0X18pOiBJbml0aWFsaXplIHRoZSB2ZXJzaW9uIG9iamVjdCB3aXRoIGEgc3Ry
aW5nLCBpbnRlZ2VyLAorICAgICAgICB0dXBsZSBvZiBpbnRlZ2VycywgbGlzdCBvZiBpbnRlZ2Vy
cyBvciBhbm90aGVyIFZlcnNpb24gb2JqZWN0LgorICAgICAgICAoVmVyc2lvbi5fX2xlbl9fKTog
UmV0dXJuIDMgc28gdGhhdCB0aGUgVmVyc2lvbiBvYmplY3QgY2FuIGJlIHRyZWF0ZWQgYXMKKyAg
ICAgICAgYSBsaXN0IG9yIHR1cGxlLgorICAgICAgICAoVmVyc2lvbi5fX2dldGl0ZW1fXyk6IEdl
dCBpdGVtIGluIFZlcnNpb24gb2JqZWN0IGJ5IGluZGV4IG9yIHN0cmluZy4KKyAgICAgICAgKFZl
cnNpb24uX19zZXRpdGVtX18pOiBTZXQgaXRlbSBpbiBWZXJzaW9uIG9iamVjdCBieSBpbmRleCBv
ciBzdHJpbmcuCisgICAgICAgIChWZXJzaW9uLl9fc3RyX18pOiBDb252ZXJ0IHZlcnNpb24gdG8g
cHJpbnRhYmxlIHN0cmluZywgb21pdHRpbmcgdHJhaWxpbmcgMCdzLgorICAgICAgICAoVmVyc2lv
bi5fX2NtcF9fKTogQ29tcGFyZSB0d28gdmVyc2lvbiBzdHJpbmdzLCBtYWpvciB0YWtpbmcgcHJl
Y2VkZW5jZSBvdmVyCisgICAgICAgIG1pbm9yLCBtaW5vciB0YWtpbmcgcHJlY2VkZW5jZSBvdmVy
IGJ1aWxkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRl
c3QucHk6IEFkZGVkLgorICAgICAgICAoVmVyc2lvblRlc3RDYXNlKTogVGVzdCBiZWhhdmlvciBv
ZiBWZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
OgorICAgICAgICAoSU9TUG9ydC5kZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKTogaW9zX3Zl
cnNpb24gbm93IHJldHVybnMgYSB2ZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKElPU1BvcnQuX2lz
X3ZhbGlkX2lvc192ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1BvcnQuZ2V0X29wdGlv
bik6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2Uu
cHk6CisgICAgICAgIChJT1NEZXZpY2VQb3J0LmRldGVybWluZV9mdWxsX3BvcnRfbmFtZSk6IFVz
ZSB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFkIG9mIG93bmluZyBwYXJzaW5nLgorICAgICAgICAoSU9T
RGV2aWNlUG9ydC5pb3NfdmVyc2lvbik6IFJldHVybiB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFkIG9m
IHN0cmluZy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvci5w
eToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuc2ltdWxhdG9yX3J1bnRpbWUpOiBVc2UgZnJv
bV92ZXJzaW9uIGluc3RlYWQgb2YgZnJvbV92ZXJzaW9uX3N0cmluZy4KKyAgICAgICAgKElPU1Np
bXVsYXRvclBvcnQuaW9zX3ZlcnNpb24pOiBSZXR1cm4gdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBv
ZiBzdHJpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6
CisgICAgICAgIChSdW50aW1lLmZyb21fdmVyc2lvbik6IEFjY2VwdCB2ZXJzaW9uIG9iamVjdCBp
bnN0ZWFkIG9mIHN0cmluZy4KKyAgICAgICAgKFJ1bnRpbWUuZnJvbV92ZXJzaW9uX3N0cmluZyk6
IFJlcGxhY2VkIGJ5IGZyb21fdmVyc2lvbi4KKyAgICAgICAgKFJ1bnRpbWUuX19yZXByX18pOiBX
aGVuIHByaW50aW5nLCBhIHJ1bnRpbWUncyB2ZXJzaW9uIHdpbGwgYmUgYSB2ZXJzaW9uIG9iamVj
dCBpbnN0ZWFkCisgICAgICAgIG9mIGEgdHVwbGUuCisgICAgICAgIChTaW11bGF0b3IuX3BhcnNl
X3J1bnRpbWVzKTogVXNlIHZlcnNpb24gb2JqZWN0IGluc3RlYWQgb2YgdHVwbGUuCisgICAgICAg
IChTaW11bGF0b3IuX3BhcnNlX2RldmljZXMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3hjb2RlL3NpbXVsYXRvcl91bml0dGVzdC5weTogVXNlIHZlcnNpb24gb2JqZWN0IGlu
c3RlYWQgb2YgdHVwbGVzLgorCiAyMDE3LTExLTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiB1c2UgSlNPTjo6e0Fy
cmF5LE9iamVjdCxWYWx1ZX0gaW5zdGVhZCBvZiBJbnNwZWN0b3J7QXJyYXksT2JqZWN0LFZhbHVl
fQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb24ucHkJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCitjbGFzcyBWZXJzaW9uKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgdmVyPScwJyk6CisgICAgICAgIHNlbGYubWFqb3IgPSAwCisgICAgICAgIHNlbGYubWlu
b3IgPSAwCisgICAgICAgIHNlbGYuYnVpbGQgPSAwCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmVy
LCBpbnQpOgorICAgICAgICAgICAgc2VsZi5tYWpvciA9IHZlcgorICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2ZXIsIHN0cikgb3IgaXNpbnN0YW5jZSh2ZXIsIHVu
aWNvZGUpOgorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbih2ZXIuc3BsaXQoJy4nKSkp
OgorICAgICAgICAgICAgICAgIHNlbGZbaV0gPSB2ZXIuc3BsaXQoJy4nKVtpXQorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2ZXIsIGxpc3QpIG9yIGlzaW5zdGFu
Y2UodmVyLCBWZXJzaW9uKSBvciBpc2luc3RhbmNlKHZlciwgdHVwbGUpOgorICAgICAgICAgICAg
Zm9yIGkgaW4geHJhbmdlKGxlbih2ZXIpKToKKyAgICAgICAgICAgICAgICBzZWxmW2ldID0gdmVy
W2ldCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxpZiB2ZXIgaXMgTm9uZToKKyAgICAg
ICAgICAgIHJldHVybiAgIyBFbXB0eSB2ZXJzaW9uIGlzIGltcGxpY2l0bHkgemVybworICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCdWZXJzaW9uIGV4cGVjdGVkIHRvIGJlIGludCwgc3RyLCB0dXBs
ZSBvciBsaXN0IG9mIGludHMnKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJl
dHVybiAzCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShrZXksIGludCk6CisgICAgICAgICAgICBpZiBrZXkgPT0gMDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc2VsZi5tYWpvcgorICAgICAgICAgICAgZWxpZiBrZXkgPT0gMToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc2VsZi5taW5vcgorICAgICAgICAgICAgZWxpZiBrZXkgPT0gMjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5idWlsZAorICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignVmVyc2lvbiBrZXkgbXVzdCBiZSAwLCAxIG9yIDInKQorICAgICAgICBlbGlmIGlz
aW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgaWYga2V5ID09ICdtYWpvcic6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFqb3IKKyAgICAgICAgICAgIGVsaWYga2V5ID09ICdt
aW5vcic6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubWlub3IKKyAgICAgICAgICAgIGVs
aWYga2V5ID09ICdidWlsZCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGQKKyAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1ZlcnNpb24ga2V5IG11c3QgYmUgbWFqb3IsIG1p
bm9yIG9yIGJ1aWxkJykKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRXhwZWN0ZWQgdmVyc2lv
biBrZXkgdG8gYmUgc3RyIG9yIGludCcpCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5
LCB2YWx1ZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBpbnQpOgorICAgICAgICAgICAg
aWYga2V5ID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5tYWpvciA9IGludCh2YWx1ZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc2VsZi5tYWpvcgorICAgICAgICAgICAgZWxpZiBrZXkgPT0g
MToKKyAgICAgICAgICAgICAgICBzZWxmLm1pbm9yID0gaW50KHZhbHVlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBzZWxmLm1pbm9yCisgICAgICAgICAgICBlbGlmIGtleSA9PSAyOgorICAgICAg
ICAgICAgICAgIHNlbGYuYnVpbGQgPSBpbnQodmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHNlbGYuYnVpbGQKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1ZlcnNpb24ga2V5IG11
c3QgYmUgMCwgMSBvciAyJykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAg
ICAgICAgICAgIGlmIGtleSA9PSAnbWFqb3InOgorICAgICAgICAgICAgICAgIHNlbGYubWFqb3Ig
PSBpbnQodmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFqb3IKKyAgICAgICAg
ICAgIGVsaWYga2V5ID09ICdtaW5vcic6CisgICAgICAgICAgICAgICAgc2VsZi5taW5vciA9IGlu
dCh2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5taW5vcgorICAgICAgICAgICAg
ZWxpZiBrZXkgPT0gJ2J1aWxkJzoKKyAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkID0gaW50KHZh
bHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmJ1aWxkCisgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCdWZXJzaW9uIGtleSBtdXN0IGJlIG1ham9yLCBtaW5vciBvciBidWlsZCcp
CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0V4cGVjdGVkIHZlcnNpb24ga2V5IHRvIGJlIHN0
ciBvciBpbnQnKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJlc3VsdCA9ICd7
fScuZm9ybWF0KHNlbGYubWFqb3IpCisgICAgICAgIGlmIHNlbGYubWlub3Igb3Igc2VsZi5idWls
ZDoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnLnt9Jy5mb3JtYXQoc2VsZi5taW5vcikKKyAgICAg
ICAgaWYgc2VsZi5idWlsZDoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnLnt9Jy5mb3JtYXQoc2Vs
Zi5idWlsZCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9fY21wX18oc2VsZiwg
b3RoZXIpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYpKToKKyAgICAgICAgICAg
IGlmIGNtcChzZWxmW2ldLCBvdGhlcltpXSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChz
ZWxmW2ldLCBvdGhlcltpXSkKKyAgICAgICAgcmV0dXJuIDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weQkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdmVyc2lvbiBpbXBvcnQgVmVy
c2lvbgorCisKK2NsYXNzIFZlcnNpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAg
ICBkZWYgdGVzdF9zdHJpbmdfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHYgPSBWZXJzaW9u
KCcxLjIuMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5tYWpvciwgMSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh2Lm1pbm9yLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYu
YnVpbGQsIDMpCisKKyAgICBkZWYgdGVzdF9saXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAg
ICB2ID0gVmVyc2lvbihbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5tYWpv
ciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1pbm9yLCAyKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHYuYnVpbGQsIDMpCisKKyAgICBkZWYgdGVzdF90dXBsZV9jb25zdHJ1Y3Rv
cihzZWxmKToKKyAgICAgICAgdiA9IFZlcnNpb24oKDEsIDIsIDMpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHYubWFqb3IsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5taW5vciwg
MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LmJ1aWxkLCAzKQorCisgICAgZGVmIHRlc3Rf
aW50X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICB2ID0gVmVyc2lvbigxKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHYubWFqb3IsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5t
aW5vciwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LmJ1aWxkLCAwKQorCisgICAgZGVm
IHRlc3RfY29weV9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgdiA9IFZlcnNpb24oVmVyc2lv
bihbMSwgMiwgM10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWFqb3IsIDEpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5taW5vciwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCh2LmJ1aWxkLCAzKQorCisgICAgZGVmIHRlc3Rfbm9uZV9jb25zdHJ1Y3RvcihzZWxmKToKKyAg
ICAgICAgdiA9IFZlcnNpb24oTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1ham9y
LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWlub3IsIDApCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwodi5idWlsZCwgMCkKKworICAgIGRlZiB0ZXN0X3N0cmluZyhzZWxmKToKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoVmVyc2lvbignMS4yLjMnKSksICcxLjIuMycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzEuMi4wJykpLCAnMS4yJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoVmVyc2lvbignMS4yJykpLCAnMS4yJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoVmVyc2lvbignMC4wLjMnKSksICcwLjAuMycpCisKKyAg
ICBkZWYgdGVzdF9jb21wYXJlX3ZlcnNpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKFZlcnNpb24oJzEuMi4zJyksIFZlcnNpb24oJzEuMi4zJykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0R3JlYXRlcihWZXJzaW9uKCcxLjIuNCcpLCBWZXJzaW9uKCcxLjIuMycpKQorICAgICAgICBz
ZWxmLmFzc2VydEdyZWF0ZXIoVmVyc2lvbignMS4zLjInKSwgVmVyc2lvbignMS4yLjMnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKFZlcnNpb24oJzIuMS4xJyksIFZlcnNpb24oJzEuMi4z
JykpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1p
bmZvLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wbGF0Zm9ybWluZm8ucHkJKHJldmlzaW9uIDIyNDQwNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAjIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMCw2ICszMCw3IEBA
CiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIAorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBp
bXBvcnQgVmVyc2lvbgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBv
cnQgRXhlY3V0aXZlCiAKIApAQCAtNTUsOSArNTYsOSBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2Jq
ZWN0KToKICAgICAgICAgaWYgc2VsZi5vc19uYW1lID09ICdmcmVlYnNkJyBvciBzZWxmLm9zX25h
bWUgPT0gJ29wZW5ic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnbmV0YnNkJyBvciBzZWxmLm9zX25h
bWUgPT0gJ2lvcyc6CiAgICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBwbGF0Zm9ybV9tb2R1
bGUucmVsZWFzZSgpCiAgICAgICAgIGlmIHNlbGYub3NfbmFtZS5zdGFydHN3aXRoKCdtYWMnKToK
LSAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV9tYWNfdmVyc2lv
bihwbGF0Zm9ybV9tb2R1bGUubWFjX3ZlcigpWzBdKQorICAgICAgICAgICAgc2VsZi5vc192ZXJz
aW9uID0gc2VsZi5fZGV0ZXJtaW5lX21hY192ZXJzaW9uKFZlcnNpb24ocGxhdGZvcm1fbW9kdWxl
Lm1hY192ZXIoKVswXSkpCiAgICAgICAgIGlmIHNlbGYub3NfbmFtZS5zdGFydHN3aXRoKCd3aW4n
KToKLSAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV93aW5fdmVy
c2lvbihzZWxmLl93aW5fdmVyc2lvbl90dXBsZShzeXNfbW9kdWxlKSkKKyAgICAgICAgICAgIHNl
bGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV93aW5fdmVyc2lvbihzZWxmLl93aW5fdmVy
c2lvbihzeXNfbW9kdWxlKSkKICAgICAgICAgc2VsZi5faXNfY3lnd2luID0gc3lzX21vZHVsZS5w
bGF0Zm9ybSA9PSAnY3lnd2luJwogCiAgICAgZGVmIGlzX21hYyhzZWxmKToKQEAgLTEyNyw4ICsx
MjgsOCBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBkZWYgeGNvZGVfc2RrX3Zl
cnNpb24oc2VsZiwgc2RrX25hbWUpOgogICAgICAgICBpZiBzZWxmLmlzX21hYygpOgogICAgICAg
ICAgICAgIyBBc3N1bWVzIHRoYXQgeGNydW4gZG9lcyBub3Qgd3JpdGUgdG8gc3RhbmRhcmQgb3V0
cHV0IG9uIGZhaWx1cmUgKGUuZy4gU0RLIGRvZXMgbm90IGV4aXN0KS4KLSAgICAgICAgICAgIHJl
dHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWyJ4Y3J1biIsICItLXNkayIsIHNka19u
YW1lLCAiLS1zaG93LXNkay12ZXJzaW9uIl0sIHJldHVybl9zdGRlcnI9RmFsc2UsIGVycm9yX2hh
bmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikucnN0cmlwKCkKLSAgICAgICAgcmV0dXJuICcn
CisgICAgICAgICAgICByZXR1cm4gVmVyc2lvbihzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQo
WyJ4Y3J1biIsICItLXNkayIsIHNka19uYW1lLCAiLS1zaG93LXNkay12ZXJzaW9uIl0sIHJldHVy
bl9zdGRlcnI9RmFsc2UsIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikucnN0
cmlwKCkpCisgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgeGNvZGVfc2ltY3RsX2xpc3Qo
c2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLmlzX21hYygpOgpAQCAtMTM5LDcgKzE0MCw3IEBA
IGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRlZiB4Y29kZV92ZXJzaW9uKHNlbGYp
OgogICAgICAgICBpZiBub3Qgc2VsZi5pc19tYWMoKToKICAgICAgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKLSAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFu
ZChbJ3hjb2RlYnVpbGQnLCAnLXZlcnNpb24nXSkuc3BsaXQoKVsxXQorICAgICAgICByZXR1cm4g
VmVyc2lvbihzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y29kZWJ1aWxkJywgJy12ZXJz
aW9uJ10pLnNwbGl0KClbMV0pCiAKICAgICBkZWYgX2RldGVybWluZV9vc19uYW1lKHNlbGYsIHN5
c19wbGF0Zm9ybSk6CiAgICAgICAgIGlmIHN5c19wbGF0Zm9ybSA9PSAnZGFyd2luJzoKQEAgLTE1
OCw4ICsxNTksNyBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgICAgIHJl
dHVybiAnaGFpa3UnCiAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCd1bnJlY29nbml6ZWQg
cGxhdGZvcm0gc3RyaW5nICIlcyInICUgc3lzX3BsYXRmb3JtKQogCi0gICAgZGVmIF9kZXRlcm1p
bmVfbWFjX3ZlcnNpb24oc2VsZiwgbWFjX3ZlcnNpb25fc3RyaW5nKToKLSAgICAgICAgcmVsZWFz
ZV92ZXJzaW9uID0gaW50KG1hY192ZXJzaW9uX3N0cmluZy5zcGxpdCgnLicpWzFdKQorICAgIGRl
ZiBfZGV0ZXJtaW5lX21hY192ZXJzaW9uKHNlbGYsIG1hY192ZXJzaW9uKToKICAgICAgICAgdmVy
c2lvbl9zdHJpbmdzID0gewogICAgICAgICAgICAgNTogJ2xlb3BhcmQnLAogICAgICAgICAgICAg
NjogJ3Nub3dsZW9wYXJkJywKQEAgLTE3MSwzNCArMTcxLDI3IEBAIGNsYXNzIFBsYXRmb3JtSW5m
byhvYmplY3QpOgogICAgICAgICAgICAgMTI6ICdzaWVycmEnLAogICAgICAgICAgICAgMTM6ICdo
aWdoc2llcnJhJywKICAgICAgICAgfQotICAgICAgICBhc3NlcnQgcmVsZWFzZV92ZXJzaW9uID49
IG1pbih2ZXJzaW9uX3N0cmluZ3Mua2V5cygpKQotICAgICAgICByZXR1cm4gdmVyc2lvbl9zdHJp
bmdzLmdldChyZWxlYXNlX3ZlcnNpb24sICdmdXR1cmUnKQorICAgICAgICBhc3NlcnQgbWFjX3Zl
cnNpb24ubWlub3IgPj0gbWluKHZlcnNpb25fc3RyaW5ncy5rZXlzKCkpCisgICAgICAgIHJldHVy
biB2ZXJzaW9uX3N0cmluZ3MuZ2V0KG1hY192ZXJzaW9uLm1pbm9yLCAnZnV0dXJlJykKIAogICAg
IGRlZiBfZGV0ZXJtaW5lX2xpbnV4X3ZlcnNpb24oc2VsZik6CiAgICAgICAgICMgRklYTUU6IHdl
IGlnbm9yZSB3aGF0ZXZlciB0aGUgcmVhbCB2ZXJzaW9uIGlzIGFuZCBwcmV0ZW5kIGl0J3MgbHVj
aWQgZm9yIG5vdy4KICAgICAgICAgcmV0dXJuICdsdWNpZCcKIAotICAgIGRlZiBfZGV0ZXJtaW5l
X3dpbl92ZXJzaW9uKHNlbGYsIHdpbl92ZXJzaW9uX3R1cGxlKToKLSAgICAgICAgaWYgd2luX3Zl
cnNpb25fdHVwbGVbOjJdID09ICgwLCAwKToKLSAgICAgICAgICAgIGlmIHdpbl92ZXJzaW9uX3R1
cGxlWzJdID4gMTAwMDA6CisgICAgZGVmIF9kZXRlcm1pbmVfd2luX3ZlcnNpb24oc2VsZiwgd2lu
X3ZlcnNpb24pOgorICAgICAgICBpZiB3aW5fdmVyc2lvbi5tYWpvciA9PSAwIGFuZCB3aW5fdmVy
c2lvbi5taW5vciA9PSAwOgorICAgICAgICAgICAgaWYgd2luX3ZlcnNpb25bMl0gPiAxMDAwMDoK
ICAgICAgICAgICAgICAgICByZXR1cm4gJ3dpbjEwJwotICAgICAgICBpZiB3aW5fdmVyc2lvbl90
dXBsZVs6M10gPT0gKDYsIDEsIDc2MDApOgorICAgICAgICBpZiB3aW5fdmVyc2lvbiA9PSBWZXJz
aW9uKFs2LCAxLCA3NjAwXSk6CiAgICAgICAgICAgICByZXR1cm4gJzdzcDAnCi0gICAgICAgIGlm
IHdpbl92ZXJzaW9uX3R1cGxlWzoyXSA9PSAoNiwgMCk6CisgICAgICAgIGlmIHdpbl92ZXJzaW9u
Lm1ham9yID09IDYgYW5kIHdpbl92ZXJzaW9uLm1pbm9yID09IDA6CiAgICAgICAgICAgICByZXR1
cm4gJ3Zpc3RhJwotICAgICAgICBpZiB3aW5fdmVyc2lvbl90dXBsZVs6Ml0gPT0gKDUsIDEpOgor
ICAgICAgICBpZiB3aW5fdmVyc2lvbi5tYWpvciA9PSA1IGFuZCB3aW5fdmVyc2lvbi5taW5vciA9
PSAxOgogICAgICAgICAgICAgcmV0dXJuICd4cCcKLSAgICAgICAgYXNzZXJ0IHdpbl92ZXJzaW9u
X3R1cGxlWzBdID4gNiBvciB3aW5fdmVyc2lvbl90dXBsZVsxXSA+PSAxLCAnVW5yZWNvZ25pemVk
IFdpbmRvd3MgdmVyc2lvbiB0dXBsZTogIiVzIicgJSAod2luX3ZlcnNpb25fdHVwbGUsKQorICAg
ICAgICBhc3NlcnQgd2luX3ZlcnNpb25bMF0gPiA2IG9yIHdpbl92ZXJzaW9uWzFdID49IDEsICdV
bnJlY29nbml6ZWQgV2luZG93cyB2ZXJzaW9uOiAie30iJy5mb3JtYXQod2luX3ZlcnNpb24pCiAg
ICAgICAgIHJldHVybiAnZnV0dXJlJwogCi0gICAgZGVmIF93aW5fdmVyc2lvbl90dXBsZShzZWxm
LCBzeXNfbW9kdWxlKToKKyAgICBkZWYgX3dpbl92ZXJzaW9uKHNlbGYsIHN5c19tb2R1bGUpOgog
ICAgICAgICBpZiBoYXNhdHRyKHN5c19tb2R1bGUsICdnZXR3aW5kb3dzdmVyc2lvbicpOgotICAg
ICAgICAgICAgcmV0dXJuIHN5c19tb2R1bGUuZ2V0d2luZG93c3ZlcnNpb24oKQotICAgICAgICBy
ZXR1cm4gc2VsZi5fd2luX3ZlcnNpb25fdHVwbGVfZnJvbV9jbWQoKQotCi0gICAgZGVmIF93aW5f
dmVyc2lvbl90dXBsZV9mcm9tX2NtZChzZWxmKToKLSAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBz
aG91bGQgb25seSBldmVyIGJlIGNhbGxlZCBvbiB3aW5kb3dzLCBzbyB0aGlzIHNob3VsZCBhbHdh
eXMgd29yay4KLSAgICAgICAgdmVyX291dHB1dCA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFu
ZChbJ2NtZCcsICcvYycsICd2ZXInXSwgZGVjb2RlX291dHB1dD1GYWxzZSkKLSAgICAgICAgbWF0
Y2hfb2JqZWN0ID0gcmUuc2VhcmNoKHInKD9QPG1ham9yPlxkKVwuKD9QPG1pbm9yPlxkKVwuKD9Q
PGJ1aWxkPlxkKyknLCB2ZXJfb3V0cHV0KQotICAgICAgICBhc3NlcnQgbWF0Y2hfb2JqZWN0LCAn
Y21kIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgdmVyc2lvbiBzdHJpbmc6ICcgKyB2ZXJfb3V0cHV0
Ci0gICAgICAgIHJldHVybiB0dXBsZShtYXAoaW50LCBtYXRjaF9vYmplY3QuZ3JvdXBzKCkpKQor
ICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24oc3lzX21vZHVsZS5nZXR3aW5kb3dzdmVyc2lvbigp
KQorICAgICAgICByZXR1cm4gVmVyc2lvbihzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWydj
bWQnLCAnL2MnLCAndmVyJ10sIGRlY29kZV9vdXRwdXQ9RmFsc2UpKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9f
bW9jay5weQkocmV2aXNpb24gMjI0NDA1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEs
NSBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTI2LDYgKzI3LDcgQEAKICMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24g
aW1wb3J0IFZlcnNpb24KIAogY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPSdzbm93bGVvcGFyZCcp
OgpAQCAtNjEsMTAgKzYzLDEwIEBAIGNsYXNzIE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAg
ICAgICAgcmV0dXJuIDgwCiAKICAgICBkZWYgeGNvZGVfc2RrX3ZlcnNpb24oc2VsZiwgc2RrX25h
bWUpOgotICAgICAgICByZXR1cm4gJzguMScKKyAgICAgICAgcmV0dXJuIFZlcnNpb24oJzguMScp
CiAKICAgICBkZWYgeGNvZGVfdmVyc2lvbihzZWxmKToKLSAgICAgICAgcmV0dXJuICc4LjAnCisg
ICAgICAgIHJldHVybiBWZXJzaW9uKCc4LjAnKQogCiAgICAgZGVmIHhjb2RlX3NpbWN0bF9saXN0
KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5leHBlY3RlZF94Y29kZV9zaW1jdGxfbGlzdApJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CShyZXZpc2lvbiAyMjQ0MDUpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw3IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgdHJhY2ViYWNrCiAKIGZyb20gd2Via2l0
cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3ZWJraXRweS5jb21tb24u
dmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxz
LnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KIGZyb20gd2Via2l0
cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRweS5wb3J0
LmRhcndpbiBpbXBvcnQgRGFyd2luUG9ydApAQCAtMTA5LDExICsxMTAsMTEgQEAgY2xhc3MgSU9T
UG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVz
dF9ydW5uZXInKToKICAgICAgICAgICAgIHdrX3N0cmluZyA9ICd3azInCiAgICAgICAgIGZhbGxi
YWNrX25hbWVzID0gWwotICAgICAgICAgICAgJ3t9LXt9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25h
bWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5zcGxpdCgnLicpWzBdLCB3a19zdHJpbmcpLAotICAgICAg
ICAgICAgJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5z
cGxpdCgnLicpWzBdKSwKKyAgICAgICAgICAgICd7fS17fS17fScuZm9ybWF0KHNlbGYucG9ydF9u
YW1lLCBzZWxmLmlvc192ZXJzaW9uKCkubWFqb3IsIHdrX3N0cmluZyksCisgICAgICAgICAgICAn
e30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVyc2lvbigpLm1ham9yKSwK
ICAgICAgICAgICAgICd7fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1lLCB3a19zdHJpbmcpLAog
ICAgICAgICAgICAgc2VsZi5wb3J0X25hbWUsCi0gICAgICAgICAgICAne30te30nLmZvcm1hdChJ
T1NQb3J0LnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVyc2lvbigpLnNwbGl0KCcuJylbMF0pLAorICAg
ICAgICAgICAgJ3t9LXt9Jy5mb3JtYXQoSU9TUG9ydC5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNp
b24oKS5tYWpvciksCiAgICAgICAgICAgICAne30te30nLmZvcm1hdChJT1NQb3J0LnBvcnRfbmFt
ZSwgd2tfc3RyaW5nKSwKICAgICAgICAgICAgIElPU1BvcnQucG9ydF9uYW1lLAogICAgICAgICBd
CkBAIC0xMzQsMjIgKzEzNSw2IEBAIGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgZGVm
IHRlc3RfZXhwZWN0YXRpb25zX2ZpbGVfcG9zaXRpb24oc2VsZik6CiAgICAgICAgIHJldHVybiA0
CiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9pc192YWxpZF9pb3NfdmVyc2lvbih2ZXJz
aW9uX2lkZW50aWZpZXIpOgotICAgICAgICAjIEV4YW1wbGVzIG9mIHZhbGlkIHZlcnNpb25zOiAn
MTEnLCAnMTAuMycsICcxMC4zLjEnCi0gICAgICAgIGlmIG5vdCB2ZXJzaW9uX2lkZW50aWZpZXI6
Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgc3BsaXRfYnlfcGVyaW9kID0gdmVy
c2lvbl9pZGVudGlmaWVyLnNwbGl0KCcuJykKLSAgICAgICAgaWYgbGVuKHNwbGl0X2J5X3Blcmlv
ZCkgPiAzOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBhbGwocGFy
dC5pc2RpZ2l0KCkgZm9yIHBhcnQgaW4gc3BsaXRfYnlfcGVyaW9kKQotCi0gICAgZGVmIGdldF9v
cHRpb24oc2VsZiwgbmFtZSwgZGVmYXVsdF92YWx1ZT1Ob25lKToKLSAgICAgICAgcmVzdWx0ID0g
c3VwZXIoSU9TUG9ydCwgc2VsZikuZ2V0X29wdGlvbihuYW1lLCBkZWZhdWx0X3ZhbHVlKQotICAg
ICAgICBpZiBuYW1lID09ICd2ZXJzaW9uJyBhbmQgcmVzdWx0IGFuZCBub3QgSU9TUG9ydC5faXNf
dmFsaWRfaW9zX3ZlcnNpb24ocmVzdWx0KToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJv
cigne30gaXMgYW4gaW52YWxpZCBpT1MgdmVyc2lvbicuZm9ybWF0KHJlc3VsdCkpCi0gICAgICAg
IHJldHVybiByZXN1bHQKLQogICAgIGRlZiBpb3NfdmVyc2lvbihzZWxmKToKICAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zX2RldmljZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zX2RldmljZS5weQkocmV2aXNpb24gMjI0NDA1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvc19kZXZpY2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAg
aW1wb3J0IGxvZ2dpbmcKIAogZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1l
bW9pemVkCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFz
aExvZ3MKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20g
d2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRw
eS5wb3J0LmlvcyBpbXBvcnQgSU9TUG9ydAogCkBAIC02NCw4ICs2NSw3IEBAIGNsYXNzIElPU0Rl
dmljZVBvcnQoSU9TUG9ydCk6CiAgICAgICAgICAgICBpcGhvbmVvc19zZGtfdmVyc2lvbiA9IGhv
c3QucGxhdGZvcm0ueGNvZGVfc2RrX3ZlcnNpb24oY2xzLlNESykKICAgICAgICAgICAgIGlmIG5v
dCBpcGhvbmVvc19zZGtfdmVyc2lvbjoKICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
IlBsZWFzZSBpbnN0YWxsIHRoZSBpT1MgU0RLLiIpCi0gICAgICAgICAgICBtYWpvcl92ZXJzaW9u
X251bWJlciA9IGlwaG9uZW9zX3Nka192ZXJzaW9uLnNwbGl0KCcuJylbMF0KLSAgICAgICAgICAg
IHBvcnRfbmFtZSA9IHBvcnRfbmFtZSArICctJyArIG1ham9yX3ZlcnNpb25fbnVtYmVyCisgICAg
ICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWUgKyAnLScgKyBzdHIoaXBob25lb3Nfc2RrX3Zl
cnNpb24ubWFqb3IpCiAgICAgICAgIHJldHVybiBwb3J0X25hbWUKIAogICAgIGRlZiBwYXRoX3Rv
X2NyYXNoX2xvZ3Moc2VsZik6CkBAIC05NCw3ICs5NCw3IEBAIGNsYXNzIElPU0RldmljZVBvcnQo
SU9TUG9ydCk6CiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGlvc192ZXJzaW9uKHNlbGYpOgogICAg
ICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3ZlcnNpb24nKToKLSAgICAgICAgICAgIHJldHVybiBz
ZWxmLmdldF9vcHRpb24oJ3ZlcnNpb24nKQorICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24oc2Vs
Zi5nZXRfb3B0aW9uKCd2ZXJzaW9uJykpCiAKICAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9u
cygpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05fREVWSUNFX1RF
U1RJTkcpCkBAIC0xMDksNyArMTA5LDcgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToK
ICAgICAgICAgICAgICAgICBpZiBkZXZpY2UucGxhdGZvcm0ub3NfdmVyc2lvbiAhPSB2ZXJzaW9u
OgogICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ011bHRpcGxlIGNvbm5l
Y3RlZCBkZXZpY2VzIGhhdmUgZGlmZmVyZW50IGlPUyB2ZXJzaW9ucycpCiAKLSAgICAgICAgcmV0
dXJuIHZlcnNpb24KKyAgICAgICAgcmV0dXJuIFZlcnNpb24odmVyc2lvbikKIAogICAgICMgRklY
TUU6IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0
OTc5OTE+LgogICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9j
ZXNzX3BpZCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRv
ci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVs
YXRvci5weQkocmV2aXNpb24gMjI0NDA1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvc19zaW11bGF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAgaW1wb3J0
IHRpbWUKIAogZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgor
ZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogZnJvbSB3ZWJraXRw
eS5wb3J0LmRldmljZSBpbXBvcnQgRGV2aWNlCiBmcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9y
dCBJT1NQb3J0CiBmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9y
LCBSdW50aW1lLCBEZXZpY2VUeXBlCkBAIC0xMDIsMTYgKzEwMywxNiBAQCBjbGFzcyBJT1NTaW11
bGF0b3JQb3J0KElPU1BvcnQpOgogICAgICAgICBpZiBydW50aW1lX2lkZW50aWZpZXI6CiAgICAg
ICAgICAgICBydW50aW1lID0gUnVudGltZS5mcm9tX2lkZW50aWZpZXIocnVudGltZV9pZGVudGlm
aWVyKQogICAgICAgICBlbGlmIHNlbGYuZ2V0X29wdGlvbigndmVyc2lvbicpOgotICAgICAgICAg
ICAgcnVudGltZSA9IFJ1bnRpbWUuZnJvbV92ZXJzaW9uX3N0cmluZyhzZWxmLmdldF9vcHRpb24o
J3ZlcnNpb24nKSkKKyAgICAgICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lLmZyb21fdmVyc2lvbihW
ZXJzaW9uKHNlbGYuZ2V0X29wdGlvbigndmVyc2lvbicpKSkKICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lLmZyb21fdmVyc2lvbl9zdHJpbmcoc2VsZi5ob3N0LnBs
YXRmb3JtLnhjb2RlX3Nka192ZXJzaW9uKCdpcGhvbmVzaW11bGF0b3InKSkKKyAgICAgICAgICAg
IHJ1bnRpbWUgPSBSdW50aW1lLmZyb21fdmVyc2lvbihzZWxmLmhvc3QucGxhdGZvcm0ueGNvZGVf
c2RrX3ZlcnNpb24oJ2lwaG9uZXNpbXVsYXRvcicpKQogICAgICAgICByZXR1cm4gcnVudGltZQog
CiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGlvc192ZXJzaW9uKHNlbGYpOgogICAgICAgICBydW50
aW1lX2lkZW50aWZpZXIgPSBzZWxmLmdldF9vcHRpb24oJ3J1bnRpbWUnKQogICAgICAgICBpZiBz
ZWxmLmdldF9vcHRpb24oJ3ZlcnNpb24nKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9v
cHRpb24oJ3ZlcnNpb24nKQorICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24oc2VsZi5nZXRfb3B0
aW9uKCd2ZXJzaW9uJykpCiAgICAgICAgIGlmIHJ1bnRpbWVfaWRlbnRpZmllcjoKICAgICAgICAg
ICAgIHJldHVybiAnLicuam9pbihzdHIoaSkgZm9yIGkgaW4gUnVudGltZS5mcm9tX2lkZW50aWZp
ZXIocnVudGltZV9pZGVudGlmaWVyKS52ZXJzaW9uKQogICAgICAgICByZXR1cm4gc2VsZi5ob3N0
LnBsYXRmb3JtLnhjb2RlX3Nka192ZXJzaW9uKCdpcGhvbmVzaW11bGF0b3InKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkJKHJldmlzaW9uIDIyNDQwNSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBAIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9u
LnRpbWVvdXRfY29udGV4dCBpbXBvcnQgVGltZW91dAogZnJvbSB3ZWJraXRweS5jb21tb24uaG9z
dCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lv
bgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKQEAgLTEyOSw4ICsxMzAs
OCBAQCBjbGFzcyBSdW50aW1lKG9iamVjdCk6CiAgICAgICAgIHNlbGYuaXNfaW50ZXJuYWxfcnVu
dGltZSA9IGlzX2ludGVybmFsX3J1bnRpbWUKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBm
cm9tX3ZlcnNpb25fc3RyaW5nKGNscywgdmVyc2lvbik6Ci0gICAgICAgIHJldHVybiBjbHMuZnJv
bV9pZGVudGlmaWVyKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy0nICsg
dmVyc2lvbi5yZXBsYWNlKCcuJywgJy0nKSkKKyAgICBkZWYgZnJvbV92ZXJzaW9uKGNscywgdmVy
c2lvbik6CisgICAgICAgIHJldHVybiBjbHMuZnJvbV9pZGVudGlmaWVyKCdjb20uYXBwbGUuQ29y
ZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy0nICsgJ3t9LXt9Jy5mb3JtYXQodmVyc2lvblswXSwg
dmVyc2lvblsxXSkpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZnJvbV9pZGVudGlmaWVy
KGNscywgaWRlbnRpZmllcik6CkBAIC0xNTYsNyArMTU3LDcgQEAgY2xhc3MgUnVudGltZShvYmpl
Y3QpOgogICAgICAgICBpZiBzZWxmLmlzX2ludGVybmFsX3J1bnRpbWU6CiAgICAgICAgICAgICB2
ZXJzaW9uX3N1ZmZpeCA9ICIgSW50ZXJuYWwiCiAgICAgICAgIHJldHVybiAnPFJ1bnRpbWUge3Zl
cnNpb259OiB7aWRlbnRpZmllcn0uIEF2YWlsYWJsZToge2F2YWlsYWJsZX0sIHtudW1fZGV2aWNl
c30gZGV2aWNlcz4nLmZvcm1hdCgKLSAgICAgICAgICAgIHZlcnNpb249Jy4nLmpvaW4obWFwKHN0
ciwgc2VsZi52ZXJzaW9uKSkgKyB2ZXJzaW9uX3N1ZmZpeCwKKyAgICAgICAgICAgIHZlcnNpb249
c3RyKHNlbGYudmVyc2lvbikgKyB2ZXJzaW9uX3N1ZmZpeCwKICAgICAgICAgICAgIGlkZW50aWZp
ZXI9c2VsZi5pZGVudGlmaWVyLAogICAgICAgICAgICAgYXZhaWxhYmxlPXNlbGYuYXZhaWxhYmxl
LAogICAgICAgICAgICAgbnVtX2RldmljZXM9bGVuKHNlbGYuZGV2aWNlcykpCkBAIC0zMzQsOCAr
MzM1LDcgQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgaWYgbGlu
ZSAhPSAnPT0gRGV2aWNlcyA9PSc6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVF
cnJvcignRXhwZWN0ZWQgPT0gRGV2aWNlcyA9PSBoZWFkZXIgYnV0IGdvdDogInt9IicuZm9ybWF0
KGxpbmUpKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICB2ZXJzaW9uID0gdHVw
bGUobWFwKGludCwgcnVudGltZV9tYXRjaC5ncm91cCgndmVyc2lvbicpLnNwbGl0KCcuJykpKQot
ICAgICAgICAgICAgcnVudGltZSA9IFJ1bnRpbWUodmVyc2lvbj12ZXJzaW9uLAorICAgICAgICAg
ICAgcnVudGltZSA9IFJ1bnRpbWUodmVyc2lvbj1WZXJzaW9uKHJ1bnRpbWVfbWF0Y2guZ3JvdXAo
J3ZlcnNpb24nKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyPXJ1
bnRpbWVfbWF0Y2guZ3JvdXAoJ2lkZW50aWZpZXInKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF2YWlsYWJsZT1ydW50aW1lX21hdGNoLmdyb3VwKCdhdmFpbGFiaWxpdHknKSBpcyBO
b25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW50ZXJuYWxfcnVudGltZT1i
b29sKHJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ2ludGVybmFsJykpKQpAQCAtMzUzLDggKzM1Myw3IEBA
IGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKICAg
ICAgICAgICAgIHZlcnNpb25fbWF0Y2ggPSBzZWxmLnZlcnNpb25fcmUubWF0Y2gobGluZSkKICAg
ICAgICAgICAgIGlmIHZlcnNpb25fbWF0Y2g6Ci0gICAgICAgICAgICAgICAgdmVyc2lvbiA9IHR1
cGxlKG1hcChpbnQsIHZlcnNpb25fbWF0Y2guZ3JvdXAoJ3ZlcnNpb24nKS5zcGxpdCgnLicpKSkK
LSAgICAgICAgICAgICAgICBjdXJyZW50X3J1bnRpbWUgPSBzZWxmLnJ1bnRpbWUodmVyc2lvbj12
ZXJzaW9uLCBpc19pbnRlcm5hbF9ydW50aW1lPWJvb2wodmVyc2lvbl9tYXRjaC5ncm91cCgnaW50
ZXJuYWwnKSkpCisgICAgICAgICAgICAgICAgY3VycmVudF9ydW50aW1lID0gc2VsZi5ydW50aW1l
KHZlcnNpb249VmVyc2lvbih2ZXJzaW9uX21hdGNoLmdyb3VwKCd2ZXJzaW9uJykpLCBpc19pbnRl
cm5hbF9ydW50aW1lPWJvb2wodmVyc2lvbl9tYXRjaC5ncm91cCgnaW50ZXJuYWwnKSkpCiAgICAg
ICAgICAgICAgICAgYXNzZXJ0IGN1cnJlbnRfcnVudGltZQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxh
dG9yX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjQ0MDUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3hjb2RlL3NpbXVsYXRvcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsx
LDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw2ICsyMyw3IEBACiBpbXBv
cnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdF9tb2NrIGltcG9ydCBNb2Nr
SG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogZnJvbSB3
ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvcgogCiAKQEAgLTEzNCw3ICsx
MzUsNyBAQCBBcHBsZSBUViAxMDgwcCAoNTUyODFBQkUtOUMyNy00MzhCLUFENTAtCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ2NvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9T
LTgtMCcsIHJ1bnRpbWVfaW9zXzguaWRlbnRpZmllcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChUcnVlLCBydW50aW1lX2lvc184LmF2YWlsYWJsZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChGYWxzZSwgcnVudGltZV9pb3NfOC5pc19pbnRlcm5hbF9ydW50aW1lKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHR1cGxlKFs4LCAwXSksIHJ1bnRpbWVfaW9zXzgudmVyc2lvbikKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9uKFs4LCAwXSksIHJ1bnRpbWVfaW9zXzgudmVyc2lv
bikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMSwgbGVuKHJ1bnRpbWVfaW9zXzguZGV2aWNl
cykpCiAKICAgICAgICAgZGV2aWNlX2lwaG9uZV80cyA9IHJ1bnRpbWVfaW9zXzguZGV2aWNlc1sw
XQpAQCAtMjA3LDIxICsyMDgsMjEgQEAgQXBwbGUgVFYgMTA4MHAgKDU1MjgxQUJFLTlDMjctNDM4
Qi1BRDUwLQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRv
ci5TaW1SdW50aW1lLmlPUy04LTAtSW50ZXJuYWwnLCBydW50aW1lX2lvc184X2ludGVybmFsLmlk
ZW50aWZpZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIHJ1bnRpbWVfaW9zXzhf
aW50ZXJuYWwuYXZhaWxhYmxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHJ1bnRp
bWVfaW9zXzhfaW50ZXJuYWwuaXNfaW50ZXJuYWxfcnVudGltZSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCh0dXBsZShbOCwgMF0pLCBydW50aW1lX2lvc184X2ludGVybmFsLnZlcnNpb24pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVmVyc2lvbihbOCwgMF0pLCBydW50aW1lX2lvc184X2lu
dGVybmFsLnZlcnNpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKHJ1bnRpbWVf
aW9zXzhfaW50ZXJuYWwuZGV2aWNlcykpCiAKICAgICAgICAgcnVudGltZV9pb3NfOF80ID0gc2lt
dWxhdG9yLnJ1bnRpbWVzWzJdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NvbS5hcHBsZS5D
b3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLTgtNCcsIHJ1bnRpbWVfaW9zXzhfNC5pZGVudGlm
aWVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHJ1bnRpbWVfaW9zXzhfNC5hdmFp
bGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIHJ1bnRpbWVfaW9zXzhfNC5p
c19pbnRlcm5hbF9ydW50aW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKFs4LCA0
XSksIHJ1bnRpbWVfaW9zXzhfNC52ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZl
cnNpb24oWzgsIDRdKSwgcnVudGltZV9pb3NfOF80LnZlcnNpb24pCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMCwgbGVuKHJ1bnRpbWVfaW9zXzhfNC5kZXZpY2VzKSkKIAogICAgICAgICBydW50
aW1lX3R2b3NfOSA9IHNpbXVsYXRvci5ydW50aW1lc1szXQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLnR2T1MtOS0wJywgcnVudGlt
ZV90dm9zXzkuaWRlbnRpZmllcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBydW50
aW1lX3R2b3NfOS5hdmFpbGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIHJ1
bnRpbWVfdHZvc185LmlzX2ludGVybmFsX3J1bnRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodHVwbGUoWzksIDBdKSwgcnVudGltZV90dm9zXzkudmVyc2lvbikKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChWZXJzaW9uKFs5LCAwXSksIHJ1bnRpbWVfdHZvc185LnZlcnNpb24pCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHJ1bnRpbWVfdHZvc185LmRldmljZXMpKQogCiAg
ICAgICAgIGRldmljZV9hcHBsZV90dl8xMDgwcCA9IHJ1bnRpbWVfdHZvc185LmRldmljZXNbMF0K
QEAgLTIzNCwxNCArMjM1LDE0IEBAIEFwcGxlIFRWIDEwODBwICg1NTI4MUFCRS05QzI3LTQzOEIt
QUQ1MC0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY29tLmFwcGxlLkNvcmVTaW11bGF0b3Iu
U2ltUnVudGltZS53YXRjaE9TLTItMCcsIHJ1bnRpbWVfd2F0Y2hvc18yLmlkZW50aWZpZXIpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgcnVudGltZV93YXRjaG9zXzIuYXZhaWxhYmxl
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBydW50aW1lX3dhdGNob3NfMi5pc19p
bnRlcm5hbF9ydW50aW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKFsyLCAwXSks
IHJ1bnRpbWVfd2F0Y2hvc18yLnZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVmVy
c2lvbihbMiwgMF0pLCBydW50aW1lX3dhdGNob3NfMi52ZXJzaW9uKQogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKDIsIGxlbihydW50aW1lX3dhdGNob3NfMi5kZXZpY2VzKSkKIAogICAgICAgICBy
dW50aW1lX2lvc18xMCA9IHNpbXVsYXRvci5ydW50aW1lc1s1XQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy0xMC0wJywgcnVu
dGltZV9pb3NfMTAuaWRlbnRpZmllcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBy
dW50aW1lX2lvc18xMC5hdmFpbGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2Us
IHJ1bnRpbWVfaW9zXzEwLmlzX2ludGVybmFsX3J1bnRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwodHVwbGUoWzEwLCAwXSksIHJ1bnRpbWVfaW9zXzEwLnZlcnNpb24pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoVmVyc2lvbihbMTAsIDBdKSwgcnVudGltZV9pb3NfMTAudmVyc2lvbikK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4ocnVudGltZV9pb3NfMTAuZGV2aWNlcykp
CiAKICAgICAgICAgZGV2aWNlX2FwcGxlX3dhdGNoXzM4bW0gPSBydW50aW1lX3dhdGNob3NfMi5k
ZXZpY2VzWzBdCkBAIC0zMTUsNyArMzE2LDcgQEAgaU9TIDguMCBJbnRlcm5hbCAoOC4wIC0gVW5r
bm93bikgKGNvbS5hcAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdjb20uYXBwbGUuQ29yZVNp
bXVsYXRvci5TaW1SdW50aW1lLmlPUy04LTAnLCBydW50aW1lX2lvc184LmlkZW50aWZpZXIpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgcnVudGltZV9pb3NfOC5hdmFpbGFibGUpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIHJ1bnRpbWVfaW9zXzguaXNfaW50ZXJuYWxf
cnVudGltZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShbOCwgMF0pLCBydW50aW1l
X2lvc184LnZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVmVyc2lvbihbOCwgMF0p
LCBydW50aW1lX2lvc184LnZlcnNpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVu
KHJ1bnRpbWVfaW9zXzguZGV2aWNlcykpCiAKICAgICAgICAgZGV2aWNlX2lwaG9uZV80cyA9IHJ1
bnRpbWVfaW9zXzguZGV2aWNlc1swXQpAQCAtMzI4LDcgKzMyOSw3IEBAIGlPUyA4LjAgSW50ZXJu
YWwgKDguMCAtIFVua25vd24pIChjb20uYXAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY29t
LmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS5pT1MtOC0wLUludGVybmFsJywgcnVudGlt
ZV9pb3NfOF9pbnRlcm5hbC5pZGVudGlmaWVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZh
bHNlLCBydW50aW1lX2lvc184X2ludGVybmFsLmF2YWlsYWJsZSkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChUcnVlLCBydW50aW1lX2lvc184X2ludGVybmFsLmlzX2ludGVybmFsX3J1bnRpbWUp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoWzgsIDBdKSwgcnVudGltZV9pb3NfOF9p
bnRlcm5hbC52ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZlcnNpb24oWzgsIDBd
KSwgcnVudGltZV9pb3NfOF9pbnRlcm5hbC52ZXJzaW9uKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKDAsIGxlbihydW50aW1lX2lvc184X2ludGVybmFsLmRldmljZXMpKQogCiAgICAgZGVmIHRl
c3RfZGV2aWNlX3BhaXJzKHNlbGYpOgpAQCAtMzU2LDcgKzM1Nyw3IEBAIGlPUyA4LjAgSW50ZXJu
YWwgKDguMCAtIFVua25vd24pIChjb20uYXAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY29t
LmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS5pT1MtOC0wJywgcnVudGltZV9pb3NfOC5p
ZGVudGlmaWVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHJ1bnRpbWVfaW9zXzgu
YXZhaWxhYmxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBydW50aW1lX2lvc184
LmlzX2ludGVybmFsX3J1bnRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoWzgs
IDBdKSwgcnVudGltZV9pb3NfOC52ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZl
cnNpb24oWzgsIDBdKSwgcnVudGltZV9pb3NfOC52ZXJzaW9uKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKDEsIGxlbihydW50aW1lX2lvc184LmRldmljZXMpKQogCiAgICAgICAgIGRldmljZV9p
cGhvbmVfNHMgPSBydW50aW1lX2lvc184LmRldmljZXNbMF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326411</attachid>
            <date>2017-11-08 17:21:41 -0800</date>
            <delta_ts>2017-11-09 15:40:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179426-20171108172140.patch</filename>
            <type>text/plain</type>
            <size>32692</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNDU4MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYzIEBACisyMDE3LTExLTA4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVW5pZnkgdmVyc2lvbiBwYXJzaW5nIGNvZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTQyNgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzU0MTUxOTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgd2Via2l0cHkgbmVlZHMgdG8gcGFyc2UgdmVyc2lvbiBzdHJp
bmdzIG9yIHZlcnNpb24gbGlzdHMgZnJlcXVlbnRseS4gUmF0aGVyIHRoYW4KKyAgICAgICAgZHVw
bGljYXRlIHRoaXMgY29kZSBlYWNoIHRpbWUgaXQncyBuZWVkZWQsIHVuaWZ5IGl0IGluIGEgVmVy
c2lvbiBjbGFzcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm8ucHk6CisgICAgICAgIChQbGF0Zm9ybUluZm8uX19pbml0X18pOiBDb252ZXJ0
IG1hYyB2ZXJzaW9uIHN0cmluZyB0byB2ZXJzaW9uIG9iamVjdCBhbmQKKyAgICAgICAgdXNlIF93
aW5fdmVyc2lvbiBpbnN0ZWFkIG9mIF93aW5fdmVyc2lvbl90dXBsZS4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby54Y29kZV9zZGtfdmVyc2lvbik6IENvbnZlcnQgU0RLIHZlcnNpb24gc3RyaW5nIHRv
IFZlcnNpb24gb2JqZWN0CisgICAgICAgIGJlZm9yZSByZXR1cm5pbmcgaXQuCisgICAgICAgIChQ
bGF0Zm9ybUluZm8ueGNvZGVfdmVyc2lvbik6IFJldHVybiB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFk
IG9mIHZlcnNpb24gc3RyaW5nLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRlcm1pbmVfbWFj
X3ZlcnNpb24pOiBBY2NlcHQgdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcsCisgICAg
ICAgIGVsaW1pbmF0ZSBwYXJzaW5nLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRlcm1pbmVf
d2luX3ZlcnNpb24pOiBBY2NlcHQgdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiB0dXBsZS4KKyAg
ICAgICAgKFBsYXRmb3JtSW5mby5fd2luX3ZlcnNpb24pOiBSZXR1cm4gdmVyc2lvbiBvYmplY3Qg
aW5zdGVhZCBvZiB0dXBsZSwgaGF2ZSBWZXJzaW9uCisgICAgICAgIG9iamVjdCBvd24gdmVyc2lv
biBzdHJpbmcgcGFyc2luZy4KKyAgICAgICAgKFBsYXRmb3JtSW5mby5fd2luX3ZlcnNpb25fdHVw
bGUpOiBSZW5hbWVkIHRvIF93aW5fdmVyc2lvbigpLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl93
aW5fdmVyc2lvbl90dXBsZV9mcm9tX2NtZCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5OgorICAgICAgICAoTW9j
a1BsYXRmb3JtSW5mby54Y29kZV9zZGtfdmVyc2lvbik6IFJldHVybiB2ZXJzaW9uIG9iamVjdCBp
bnN0ZWFkIG9mIHN0cmluZy4KKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8ueGNvZGVfdmVyc2lv
bik6IERpdHRpby4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5
OiBBZGRlZC4KKyAgICAgICAgKFZlcnNpb24pOiBWZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKFZl
cnNpb24uX19pbml0X18pOiBJbml0aWFsaXplIHRoZSB2ZXJzaW9uIG9iamVjdCB3aXRoIGEgc3Ry
aW5nLCBpbnRlZ2VyLAorICAgICAgICB0dXBsZSBvZiBpbnRlZ2VycywgbGlzdCBvZiBpbnRlZ2Vy
cyBvciBhbm90aGVyIFZlcnNpb24gb2JqZWN0LgorICAgICAgICAoVmVyc2lvbi5fX2xlbl9fKTog
UmV0dXJuIDMgc28gdGhhdCB0aGUgVmVyc2lvbiBvYmplY3QgY2FuIGJlIHRyZWF0ZWQgYXMKKyAg
ICAgICAgYSBsaXN0IG9yIHR1cGxlLgorICAgICAgICAoVmVyc2lvbi5fX2dldGl0ZW1fXyk6IEdl
dCBpdGVtIGluIFZlcnNpb24gb2JqZWN0IGJ5IGluZGV4IG9yIHN0cmluZy4KKyAgICAgICAgKFZl
cnNpb24uX19zZXRpdGVtX18pOiBTZXQgaXRlbSBpbiBWZXJzaW9uIG9iamVjdCBieSBpbmRleCBv
ciBzdHJpbmcuCisgICAgICAgIChWZXJzaW9uLl9fc3RyX18pOiBDb252ZXJ0IHZlcnNpb24gdG8g
cHJpbnRhYmxlIHN0cmluZywgb21pdHRpbmcgdHJhaWxpbmcgMCdzLgorICAgICAgICAoVmVyc2lv
bi5fX2NtcF9fKTogQ29tcGFyZSB0d28gdmVyc2lvbiBzdHJpbmdzLCBtYWpvciB0YWtpbmcgcHJl
Y2VkZW5jZSBvdmVyCisgICAgICAgIG1pbm9yLCBtaW5vciB0YWtpbmcgcHJlY2VkZW5jZSBvdmVy
IGJ1aWxkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRl
c3QucHk6IEFkZGVkLgorICAgICAgICAoVmVyc2lvblRlc3RDYXNlKTogVGVzdCBiZWhhdmlvciBv
ZiBWZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
OgorICAgICAgICAoSU9TUG9ydC5kZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKTogaW9zX3Zl
cnNpb24gbm93IHJldHVybnMgYSB2ZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKElPU1BvcnQuX2lz
X3ZhbGlkX2lvc192ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1BvcnQuZ2V0X29wdGlv
bik6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2Uu
cHk6CisgICAgICAgIChJT1NEZXZpY2VQb3J0LmRldGVybWluZV9mdWxsX3BvcnRfbmFtZSk6IFVz
ZSB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFkIG9mIG93bmluZyBwYXJzaW5nLgorICAgICAgICAoSU9T
RGV2aWNlUG9ydC5pb3NfdmVyc2lvbik6IFJldHVybiB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFkIG9m
IHN0cmluZy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvci5w
eToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuc2ltdWxhdG9yX3J1bnRpbWUpOiBVc2UgZnJv
bV92ZXJzaW9uIGluc3RlYWQgb2YgZnJvbV92ZXJzaW9uX3N0cmluZy4KKyAgICAgICAgKElPU1Np
bXVsYXRvclBvcnQuaW9zX3ZlcnNpb24pOiBSZXR1cm4gdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBv
ZiBzdHJpbmcuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnVzZV9tdWx0aXBsZV9zaW11bGF0
b3JfYXBwcyk6IFVzZSB2ZXJzaW9uIG9iamVjdCBpbnN0ZWFkIG9mIHN0cmluZy4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weToKKyAgICAgICAgKFJ1bnRpbWUu
ZnJvbV92ZXJzaW9uKTogQWNjZXB0IHZlcnNpb24gb2JqZWN0IGluc3RlYWQgb2Ygc3RyaW5nLgor
ICAgICAgICAoUnVudGltZS5mcm9tX3ZlcnNpb25fc3RyaW5nKTogUmVwbGFjZWQgYnkgZnJvbV92
ZXJzaW9uLgorICAgICAgICAoUnVudGltZS5fX3JlcHJfXyk6IFdoZW4gcHJpbnRpbmcsIGEgcnVu
dGltZSdzIHZlcnNpb24gd2lsbCBiZSBhIHZlcnNpb24gb2JqZWN0IGluc3RlYWQKKyAgICAgICAg
b2YgYSB0dXBsZS4KKyAgICAgICAgKFNpbXVsYXRvci5fcGFyc2VfcnVudGltZXMpOiBVc2UgdmVy
c2lvbiBvYmplY3QgaW5zdGVhZCBvZiB0dXBsZS4KKyAgICAgICAgKFNpbXVsYXRvci5fcGFyc2Vf
ZGV2aWNlcyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxh
dG9yX3VuaXR0ZXN0LnB5OiBVc2UgdmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiB0dXBsZXMuCisK
IDIwMTctMTEtMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHVzZSBKU09OOjp7QXJyYXksT2JqZWN0LFZhbHVlfSBp
bnN0ZWFkIG9mIEluc3BlY3RvcntBcnJheSxPYmplY3QsVmFsdWV9CkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb24ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
IyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2NsYXNz
IFZlcnNpb24ob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXI9JzAnKToKKyAg
ICAgICAgc2VsZi5tYWpvciA9IDAKKyAgICAgICAgc2VsZi5taW5vciA9IDAKKyAgICAgICAgc2Vs
Zi5idWlsZCA9IDAKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2ZXIsIGludCk6CisgICAgICAgICAg
ICBzZWxmLm1ham9yID0gdmVyCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKHZlciwgc3RyKSBvciBpc2luc3RhbmNlKHZlciwgdW5pY29kZSk6CisgICAgICAgICAg
ICBmb3IgaSBpbiB4cmFuZ2UobGVuKHZlci5zcGxpdCgnLicpKSk6CisgICAgICAgICAgICAgICAg
c2VsZltpXSA9IHZlci5zcGxpdCgnLicpW2ldCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
ZWxpZiBpc2luc3RhbmNlKHZlciwgbGlzdCkgb3IgaXNpbnN0YW5jZSh2ZXIsIFZlcnNpb24pIG9y
IGlzaW5zdGFuY2UodmVyLCB0dXBsZSk6CisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVu
KHZlcikpOgorICAgICAgICAgICAgICAgIHNlbGZbaV0gPSB2ZXJbaV0KKyAgICAgICAgICAgIHJl
dHVybgorICAgICAgICBlbGlmIHZlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICAjIEVt
cHR5IHZlcnNpb24gaXMgaW1wbGljaXRseSB6ZXJvCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
J1ZlcnNpb24gZXhwZWN0ZWQgdG8gYmUgaW50LCBzdHIsIHR1cGxlIG9yIGxpc3Qgb2YgaW50cycp
CisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDMKKworICAgIGRlZiBf
X2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgaW50KToK
KyAgICAgICAgICAgIGlmIGtleSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm1h
am9yCisgICAgICAgICAgICBlbGlmIGtleSA9PSAxOgorICAgICAgICAgICAgICAgIHJldHVybiBz
ZWxmLm1pbm9yCisgICAgICAgICAgICBlbGlmIGtleSA9PSAyOgorICAgICAgICAgICAgICAgIHJl
dHVybiBzZWxmLmJ1aWxkCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdWZXJzaW9uIGtl
eSBtdXN0IGJlIDAsIDEgb3IgMicpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIHN0cik6
CisgICAgICAgICAgICBpZiBrZXkgPT0gJ21ham9yJzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2VsZi5tYWpvcgorICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ21pbm9yJzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc2VsZi5taW5vcgorICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ2J1aWxkJzoK
KyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5idWlsZAorICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignVmVyc2lvbiBrZXkgbXVzdCBiZSBtYWpvciwgbWlub3Igb3IgYnVpbGQnKQorICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCdFeHBlY3RlZCB2ZXJzaW9uIGtleSB0byBiZSBzdHIgb3Ig
aW50JykKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShrZXksIGludCk6CisgICAgICAgICAgICBpZiBrZXkgPT0gMDoKKyAgICAg
ICAgICAgICAgICBzZWxmLm1ham9yID0gaW50KHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVy
biBzZWxmLm1ham9yCisgICAgICAgICAgICBlbGlmIGtleSA9PSAxOgorICAgICAgICAgICAgICAg
IHNlbGYubWlub3IgPSBpbnQodmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubWlu
b3IKKyAgICAgICAgICAgIGVsaWYga2V5ID09IDI6CisgICAgICAgICAgICAgICAgc2VsZi5idWls
ZCA9IGludCh2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5idWlsZAorICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcignVmVyc2lvbiBrZXkgbXVzdCBiZSAwLCAxIG9yIDInKQor
ICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgaWYga2V5ID09
ICdtYWpvcic6CisgICAgICAgICAgICAgICAgc2VsZi5tYWpvciA9IGludCh2YWx1ZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc2VsZi5tYWpvcgorICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ21p
bm9yJzoKKyAgICAgICAgICAgICAgICBzZWxmLm1pbm9yID0gaW50KHZhbHVlKQorICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLm1pbm9yCisgICAgICAgICAgICBlbGlmIGtleSA9PSAnYnVpbGQn
OgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGQgPSBpbnQodmFsdWUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuYnVpbGQKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1ZlcnNp
b24ga2V5IG11c3QgYmUgbWFqb3IsIG1pbm9yIG9yIGJ1aWxkJykKKyAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignRXhwZWN0ZWQgdmVyc2lvbiBrZXkgdG8gYmUgc3RyIG9yIGludCcpCisKKyAgICBk
ZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gJ3t9Jy5mb3JtYXQoc2VsZi5tYWpv
cikKKyAgICAgICAgaWYgc2VsZi5taW5vciBvciBzZWxmLmJ1aWxkOgorICAgICAgICAgICAgcmVz
dWx0ICs9ICcue30nLmZvcm1hdChzZWxmLm1pbm9yKQorICAgICAgICBpZiBzZWxmLmJ1aWxkOgor
ICAgICAgICAgICAgcmVzdWx0ICs9ICcue30nLmZvcm1hdChzZWxmLmJ1aWxkKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGZv
ciBpIGluIHhyYW5nZShsZW4oc2VsZikpOgorICAgICAgICAgICAgaWYgY21wKHNlbGZbaV0sIG90
aGVyW2ldKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGZbaV0sIG90aGVyW2ldKQor
ICAgICAgICByZXR1cm4gMApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgdW5pdHRlc3QKKworZnJvbSB2ZXJzaW9uIGltcG9ydCBWZXJzaW9uCisKKworY2xhc3MgVmVy
c2lvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N0cmluZ19j
b25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgdiA9IFZlcnNpb24oJzEuMi4zJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh2Lm1ham9yLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYu
bWlub3IsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5idWlsZCwgMykKKworICAgIGRl
ZiB0ZXN0X2xpc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHYgPSBWZXJzaW9uKFsxLCAy
LCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1ham9yLCAxKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHYubWlub3IsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5idWls
ZCwgMykKKworICAgIGRlZiB0ZXN0X3R1cGxlX2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICB2
ID0gVmVyc2lvbigoMSwgMiwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5tYWpvciwg
MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1pbm9yLCAyKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHYuYnVpbGQsIDMpCisKKyAgICBkZWYgdGVzdF9pbnRfY29uc3RydWN0b3Ioc2Vs
Zik6CisgICAgICAgIHYgPSBWZXJzaW9uKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5t
YWpvciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1pbm9yLCAwKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHYuYnVpbGQsIDApCisKKyAgICBkZWYgdGVzdF9jb3B5X2NvbnN0cnVj
dG9yKHNlbGYpOgorICAgICAgICB2ID0gVmVyc2lvbihWZXJzaW9uKFsxLCAyLCAzXSkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5tYWpvciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCh2Lm1pbm9yLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYuYnVpbGQsIDMpCisKKyAg
ICBkZWYgdGVzdF9ub25lX2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICB2ID0gVmVyc2lvbihO
b25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWFqb3IsIDApCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwodi5taW5vciwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LmJ1aWxk
LCAwKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHN0cihWZXJzaW9uKCcxLjIuMycpKSwgJzEuMi4zJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzdHIoVmVyc2lvbignMS4yLjAnKSksICcxLjInKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHN0cihWZXJzaW9uKCcxLjInKSksICcxLjInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHN0cihWZXJzaW9uKCcwLjAuMycpKSwgJzAuMC4zJykKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVf
dmVyc2lvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVmVyc2lvbignMS4yLjMn
KSwgVmVyc2lvbignMS4yLjMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKFZlcnNpb24o
JzEuMi40JyksIFZlcnNpb24oJzEuMi4zJykpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihW
ZXJzaW9uKCcxLjMuMicpLCBWZXJzaW9uKCcxLjIuMycpKQorICAgICAgICBzZWxmLmFzc2VydEdy
ZWF0ZXIoVmVyc2lvbignMi4xLjEnKSwgVmVyc2lvbignMS4yLjMnKSkKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQko
cmV2aXNpb24gMjI0NDA1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3BsYXRmb3JtaW5mby5weQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKICMgQ29weXJp
Z2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdo
dCAoYykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAo
YykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMwLDYgKzMwLDcgQEAKIGltcG9ydCByZQogaW1wb3J0
IHN5cwogCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKIAogCkBA
IC01NSw5ICs1Niw5IEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAgICBpZiBz
ZWxmLm9zX25hbWUgPT0gJ2ZyZWVic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnb3BlbmJzZCcgb3Ig
c2VsZi5vc19uYW1lID09ICduZXRic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnaW9zJzoKICAgICAg
ICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHBsYXRmb3JtX21vZHVsZS5yZWxlYXNlKCkKICAgICAg
ICAgaWYgc2VsZi5vc19uYW1lLnN0YXJ0c3dpdGgoJ21hYycpOgotICAgICAgICAgICAgc2VsZi5v
c192ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX21hY192ZXJzaW9uKHBsYXRmb3JtX21vZHVsZS5t
YWNfdmVyKClbMF0pCisgICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLl9kZXRlcm1p
bmVfbWFjX3ZlcnNpb24oVmVyc2lvbihwbGF0Zm9ybV9tb2R1bGUubWFjX3ZlcigpWzBdKSkKICAg
ICAgICAgaWYgc2VsZi5vc19uYW1lLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgICAgICAgICAgc2Vs
Zi5vc192ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKHNlbGYuX3dpbl92ZXJz
aW9uX3R1cGxlKHN5c19tb2R1bGUpKQorICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gc2Vs
Zi5fZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKHNlbGYuX3dpbl92ZXJzaW9uKHN5c19tb2R1bGUpKQog
ICAgICAgICBzZWxmLl9pc19jeWd3aW4gPSBzeXNfbW9kdWxlLnBsYXRmb3JtID09ICdjeWd3aW4n
CiAKICAgICBkZWYgaXNfbWFjKHNlbGYpOgpAQCAtMTI3LDggKzEyOCw4IEBAIGNsYXNzIFBsYXRm
b3JtSW5mbyhvYmplY3QpOgogICAgIGRlZiB4Y29kZV9zZGtfdmVyc2lvbihzZWxmLCBzZGtfbmFt
ZSk6CiAgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CiAgICAgICAgICAgICAjIEFzc3VtZXMgdGhh
dCB4Y3J1biBkb2VzIG5vdCB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQgb24gZmFpbHVyZSAoZS5n
LiBTREsgZG9lcyBub3QgZXhpc3QpLgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2
ZS5ydW5fY29tbWFuZChbInhjcnVuIiwgIi0tc2RrIiwgc2RrX25hbWUsICItLXNob3ctc2RrLXZl
cnNpb24iXSwgcmV0dXJuX3N0ZGVycj1GYWxzZSwgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdu
b3JlX2Vycm9yKS5yc3RyaXAoKQotICAgICAgICByZXR1cm4gJycKKyAgICAgICAgICAgIHJldHVy
biBWZXJzaW9uKHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbInhjcnVuIiwgIi0tc2RrIiwg
c2RrX25hbWUsICItLXNob3ctc2RrLXZlcnNpb24iXSwgcmV0dXJuX3N0ZGVycj1GYWxzZSwgZXJy
b3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9yKS5yc3RyaXAoKSkKKyAgICAgICAgcmV0
dXJuIE5vbmUKIAogICAgIGRlZiB4Y29kZV9zaW1jdGxfbGlzdChzZWxmKToKICAgICAgICAgaWYg
bm90IHNlbGYuaXNfbWFjKCk6CkBAIC0xMzksNyArMTQwLDcgQEAgY2xhc3MgUGxhdGZvcm1JbmZv
KG9iamVjdCk6CiAgICAgZGVmIHhjb2RlX3ZlcnNpb24oc2VsZik6CiAgICAgICAgIGlmIG5vdCBz
ZWxmLmlzX21hYygpOgogICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotICAg
ICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNvZGVidWlsZCcsICct
dmVyc2lvbiddKS5zcGxpdCgpWzFdCisgICAgICAgIHJldHVybiBWZXJzaW9uKHNlbGYuX2V4ZWN1
dGl2ZS5ydW5fY29tbWFuZChbJ3hjb2RlYnVpbGQnLCAnLXZlcnNpb24nXSkuc3BsaXQoKVsxXSkK
IAogICAgIGRlZiBfZGV0ZXJtaW5lX29zX25hbWUoc2VsZiwgc3lzX3BsYXRmb3JtKToKICAgICAg
ICAgaWYgc3lzX3BsYXRmb3JtID09ICdkYXJ3aW4nOgpAQCAtMTU4LDggKzE1OSw3IEBAIGNsYXNz
IFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuICdoYWlrdScKICAgICAg
ICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ3VucmVjb2duaXplZCBwbGF0Zm9ybSBzdHJpbmcgIiVz
IicgJSBzeXNfcGxhdGZvcm0pCiAKLSAgICBkZWYgX2RldGVybWluZV9tYWNfdmVyc2lvbihzZWxm
LCBtYWNfdmVyc2lvbl9zdHJpbmcpOgotICAgICAgICByZWxlYXNlX3ZlcnNpb24gPSBpbnQobWFj
X3ZlcnNpb25fc3RyaW5nLnNwbGl0KCcuJylbMV0pCisgICAgZGVmIF9kZXRlcm1pbmVfbWFjX3Zl
cnNpb24oc2VsZiwgbWFjX3ZlcnNpb24pOgogICAgICAgICB2ZXJzaW9uX3N0cmluZ3MgPSB7CiAg
ICAgICAgICAgICA1OiAnbGVvcGFyZCcsCiAgICAgICAgICAgICA2OiAnc25vd2xlb3BhcmQnLApA
QCAtMTcxLDM0ICsxNzEsMjcgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgICAg
ICAgICAxMjogJ3NpZXJyYScsCiAgICAgICAgICAgICAxMzogJ2hpZ2hzaWVycmEnLAogICAgICAg
ICB9Ci0gICAgICAgIGFzc2VydCByZWxlYXNlX3ZlcnNpb24gPj0gbWluKHZlcnNpb25fc3RyaW5n
cy5rZXlzKCkpCi0gICAgICAgIHJldHVybiB2ZXJzaW9uX3N0cmluZ3MuZ2V0KHJlbGVhc2VfdmVy
c2lvbiwgJ2Z1dHVyZScpCisgICAgICAgIGFzc2VydCBtYWNfdmVyc2lvbi5taW5vciA+PSBtaW4o
dmVyc2lvbl9zdHJpbmdzLmtleXMoKSkKKyAgICAgICAgcmV0dXJuIHZlcnNpb25fc3RyaW5ncy5n
ZXQobWFjX3ZlcnNpb24ubWlub3IsICdmdXR1cmUnKQogCiAgICAgZGVmIF9kZXRlcm1pbmVfbGlu
dXhfdmVyc2lvbihzZWxmKToKICAgICAgICAgIyBGSVhNRTogd2UgaWdub3JlIHdoYXRldmVyIHRo
ZSByZWFsIHZlcnNpb24gaXMgYW5kIHByZXRlbmQgaXQncyBsdWNpZCBmb3Igbm93LgogICAgICAg
ICByZXR1cm4gJ2x1Y2lkJwogCi0gICAgZGVmIF9kZXRlcm1pbmVfd2luX3ZlcnNpb24oc2VsZiwg
d2luX3ZlcnNpb25fdHVwbGUpOgotICAgICAgICBpZiB3aW5fdmVyc2lvbl90dXBsZVs6Ml0gPT0g
KDAsIDApOgotICAgICAgICAgICAgaWYgd2luX3ZlcnNpb25fdHVwbGVbMl0gPiAxMDAwMDoKKyAg
ICBkZWYgX2RldGVybWluZV93aW5fdmVyc2lvbihzZWxmLCB3aW5fdmVyc2lvbik6CisgICAgICAg
IGlmIHdpbl92ZXJzaW9uLm1ham9yID09IDAgYW5kIHdpbl92ZXJzaW9uLm1pbm9yID09IDA6Cisg
ICAgICAgICAgICBpZiB3aW5fdmVyc2lvblsyXSA+IDEwMDAwOgogICAgICAgICAgICAgICAgIHJl
dHVybiAnd2luMTAnCi0gICAgICAgIGlmIHdpbl92ZXJzaW9uX3R1cGxlWzozXSA9PSAoNiwgMSwg
NzYwMCk6CisgICAgICAgIGlmIHdpbl92ZXJzaW9uID09IFZlcnNpb24oWzYsIDEsIDc2MDBdKToK
ICAgICAgICAgICAgIHJldHVybiAnN3NwMCcKLSAgICAgICAgaWYgd2luX3ZlcnNpb25fdHVwbGVb
OjJdID09ICg2LCAwKToKKyAgICAgICAgaWYgd2luX3ZlcnNpb24ubWFqb3IgPT0gNiBhbmQgd2lu
X3ZlcnNpb24ubWlub3IgPT0gMDoKICAgICAgICAgICAgIHJldHVybiAndmlzdGEnCi0gICAgICAg
IGlmIHdpbl92ZXJzaW9uX3R1cGxlWzoyXSA9PSAoNSwgMSk6CisgICAgICAgIGlmIHdpbl92ZXJz
aW9uLm1ham9yID09IDUgYW5kIHdpbl92ZXJzaW9uLm1pbm9yID09IDE6CiAgICAgICAgICAgICBy
ZXR1cm4gJ3hwJwotICAgICAgICBhc3NlcnQgd2luX3ZlcnNpb25fdHVwbGVbMF0gPiA2IG9yIHdp
bl92ZXJzaW9uX3R1cGxlWzFdID49IDEsICdVbnJlY29nbml6ZWQgV2luZG93cyB2ZXJzaW9uIHR1
cGxlOiAiJXMiJyAlICh3aW5fdmVyc2lvbl90dXBsZSwpCisgICAgICAgIGFzc2VydCB3aW5fdmVy
c2lvblswXSA+IDYgb3Igd2luX3ZlcnNpb25bMV0gPj0gMSwgJ1VucmVjb2duaXplZCBXaW5kb3dz
IHZlcnNpb246ICJ7fSInLmZvcm1hdCh3aW5fdmVyc2lvbikKICAgICAgICAgcmV0dXJuICdmdXR1
cmUnCiAKLSAgICBkZWYgX3dpbl92ZXJzaW9uX3R1cGxlKHNlbGYsIHN5c19tb2R1bGUpOgorICAg
IGRlZiBfd2luX3ZlcnNpb24oc2VsZiwgc3lzX21vZHVsZSk6CiAgICAgICAgIGlmIGhhc2F0dHIo
c3lzX21vZHVsZSwgJ2dldHdpbmRvd3N2ZXJzaW9uJyk6Ci0gICAgICAgICAgICByZXR1cm4gc3lz
X21vZHVsZS5nZXR3aW5kb3dzdmVyc2lvbigpCi0gICAgICAgIHJldHVybiBzZWxmLl93aW5fdmVy
c2lvbl90dXBsZV9mcm9tX2NtZCgpCi0KLSAgICBkZWYgX3dpbl92ZXJzaW9uX3R1cGxlX2Zyb21f
Y21kKHNlbGYpOgotICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBvbmx5IGV2ZXIgYmUg
Y2FsbGVkIG9uIHdpbmRvd3MsIHNvIHRoaXMgc2hvdWxkIGFsd2F5cyB3b3JrLgotICAgICAgICB2
ZXJfb3V0cHV0ID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnY21kJywgJy9jJywgJ3Zl
ciddLCBkZWNvZGVfb3V0cHV0PUZhbHNlKQotICAgICAgICBtYXRjaF9vYmplY3QgPSByZS5zZWFy
Y2gocicoP1A8bWFqb3I+XGQpXC4oP1A8bWlub3I+XGQpXC4oP1A8YnVpbGQ+XGQrKScsIHZlcl9v
dXRwdXQpCi0gICAgICAgIGFzc2VydCBtYXRjaF9vYmplY3QsICdjbWQgcmV0dXJuZWQgYW4gdW5l
eHBlY3RlZCB2ZXJzaW9uIHN0cmluZzogJyArIHZlcl9vdXRwdXQKLSAgICAgICAgcmV0dXJuIHR1
cGxlKG1hcChpbnQsIG1hdGNoX29iamVjdC5ncm91cHMoKSkpCisgICAgICAgICAgICByZXR1cm4g
VmVyc2lvbihzeXNfbW9kdWxlLmdldHdpbmRvd3N2ZXJzaW9uKCkpCisgICAgICAgIHJldHVybiBW
ZXJzaW9uKHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ2NtZCcsICcvYycsICd2ZXInXSwg
ZGVjb2RlX291dHB1dD1GYWxzZSkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5CShyZXZpc2lvbiAy
MjQ0MDUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1p
bmZvX21vY2sucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQpAQCAtMjYsNiArMjcsNyBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KIAorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogCiBj
bGFzcyBNb2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9z
X25hbWU9J21hYycsIG9zX3ZlcnNpb249J3Nub3dsZW9wYXJkJyk6CkBAIC02MSwxMCArNjMsMTAg
QEAgY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAgICByZXR1cm4gODAKIAog
ICAgIGRlZiB4Y29kZV9zZGtfdmVyc2lvbihzZWxmLCBzZGtfbmFtZSk6Ci0gICAgICAgIHJldHVy
biAnOC4xJworICAgICAgICByZXR1cm4gVmVyc2lvbignOC4xJykKIAogICAgIGRlZiB4Y29kZV92
ZXJzaW9uKHNlbGYpOgotICAgICAgICByZXR1cm4gJzguMCcKKyAgICAgICAgcmV0dXJuIFZlcnNp
b24oJzguMCcpCiAKICAgICBkZWYgeGNvZGVfc2ltY3RsX2xpc3Qoc2VsZik6CiAgICAgICAgIHJl
dHVybiBzZWxmLmV4cGVjdGVkX3hjb2RlX3NpbWN0bF9saXN0CkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIyNDQwNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAgaW1wb3J0IGxv
Z2dpbmcKIGltcG9ydCB0cmFjZWJhY2sKIAogZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQg
aW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJz
aW9uCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9u
IGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBpbXBv
cnQgYXBwbGVfYWRkaXRpb25zCiBmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3
aW5Qb3J0CkBAIC0xMDksMTEgKzExMCwxMSBAQCBjbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgog
ICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgogICAgICAg
ICAgICAgd2tfc3RyaW5nID0gJ3drMicKICAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSBbCi0gICAg
ICAgICAgICAne30te30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVyc2lv
bigpLnNwbGl0KCcuJylbMF0sIHdrX3N0cmluZyksCi0gICAgICAgICAgICAne30te30nLmZvcm1h
dChzZWxmLnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVyc2lvbigpLnNwbGl0KCcuJylbMF0pLAorICAg
ICAgICAgICAgJ3t9LXt9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNp
b24oKS5tYWpvciwgd2tfc3RyaW5nKSwKKyAgICAgICAgICAgICd7fS17fScuZm9ybWF0KHNlbGYu
cG9ydF9uYW1lLCBzZWxmLmlvc192ZXJzaW9uKCkubWFqb3IpLAogICAgICAgICAgICAgJ3t9LXt9
Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHdrX3N0cmluZyksCiAgICAgICAgICAgICBzZWxmLnBv
cnRfbmFtZSwKLSAgICAgICAgICAgICd7fS17fScuZm9ybWF0KElPU1BvcnQucG9ydF9uYW1lLCBz
ZWxmLmlvc192ZXJzaW9uKCkuc3BsaXQoJy4nKVswXSksCisgICAgICAgICAgICAne30te30nLmZv
cm1hdChJT1NQb3J0LnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVyc2lvbigpLm1ham9yKSwKICAgICAg
ICAgICAgICd7fS17fScuZm9ybWF0KElPU1BvcnQucG9ydF9uYW1lLCB3a19zdHJpbmcpLAogICAg
ICAgICAgICAgSU9TUG9ydC5wb3J0X25hbWUsCiAgICAgICAgIF0KQEAgLTEzNCwyMiArMTM1LDYg
QEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnNf
ZmlsZV9wb3NpdGlvbihzZWxmKToKICAgICAgICAgcmV0dXJuIDQKIAotICAgIEBzdGF0aWNtZXRo
b2QKLSAgICBkZWYgX2lzX3ZhbGlkX2lvc192ZXJzaW9uKHZlcnNpb25faWRlbnRpZmllcik6Ci0g
ICAgICAgICMgRXhhbXBsZXMgb2YgdmFsaWQgdmVyc2lvbnM6ICcxMScsICcxMC4zJywgJzEwLjMu
MScKLSAgICAgICAgaWYgbm90IHZlcnNpb25faWRlbnRpZmllcjoKLSAgICAgICAgICAgIHJldHVy
biBGYWxzZQotICAgICAgICBzcGxpdF9ieV9wZXJpb2QgPSB2ZXJzaW9uX2lkZW50aWZpZXIuc3Bs
aXQoJy4nKQotICAgICAgICBpZiBsZW4oc3BsaXRfYnlfcGVyaW9kKSA+IDM6Ci0gICAgICAgICAg
ICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIGFsbChwYXJ0LmlzZGlnaXQoKSBmb3IgcGFy
dCBpbiBzcGxpdF9ieV9wZXJpb2QpCi0KLSAgICBkZWYgZ2V0X29wdGlvbihzZWxmLCBuYW1lLCBk
ZWZhdWx0X3ZhbHVlPU5vbmUpOgotICAgICAgICByZXN1bHQgPSBzdXBlcihJT1NQb3J0LCBzZWxm
KS5nZXRfb3B0aW9uKG5hbWUsIGRlZmF1bHRfdmFsdWUpCi0gICAgICAgIGlmIG5hbWUgPT0gJ3Zl
cnNpb24nIGFuZCByZXN1bHQgYW5kIG5vdCBJT1NQb3J0Ll9pc192YWxpZF9pb3NfdmVyc2lvbihy
ZXN1bHQpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd7fSBpcyBhbiBpbnZhbGlk
IGlPUyB2ZXJzaW9uJy5mb3JtYXQocmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCiAg
ICAgZGVmIGlvc192ZXJzaW9uKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5CShy
ZXZpc2lvbiAyMjQ0MDUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2Rldmlj
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQCBpbXBvcnQgbG9nZ2luZwogCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncworZnJvbSB3ZWJraXRw
eS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZp
ZyBpbXBvcnQgYXBwbGVfYWRkaXRpb25zCiBmcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJ
T1NQb3J0CiAKQEAgLTY0LDggKzY1LDcgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToK
ICAgICAgICAgICAgIGlwaG9uZW9zX3Nka192ZXJzaW9uID0gaG9zdC5wbGF0Zm9ybS54Y29kZV9z
ZGtfdmVyc2lvbihjbHMuU0RLKQogICAgICAgICAgICAgaWYgbm90IGlwaG9uZW9zX3Nka192ZXJz
aW9uOgogICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiUGxlYXNlIGluc3RhbGwgdGhl
IGlPUyBTREsuIikKLSAgICAgICAgICAgIG1ham9yX3ZlcnNpb25fbnVtYmVyID0gaXBob25lb3Nf
c2RrX3ZlcnNpb24uc3BsaXQoJy4nKVswXQotICAgICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9u
YW1lICsgJy0nICsgbWFqb3JfdmVyc2lvbl9udW1iZXIKKyAgICAgICAgICAgIHBvcnRfbmFtZSA9
IHBvcnRfbmFtZSArICctJyArIHN0cihpcGhvbmVvc19zZGtfdmVyc2lvbi5tYWpvcikKICAgICAg
ICAgcmV0dXJuIHBvcnRfbmFtZQogCiAgICAgZGVmIHBhdGhfdG9fY3Jhc2hfbG9ncyhzZWxmKToK
QEAgLTk0LDcgKzk0LDcgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToKICAgICBAbWVt
b2l6ZWQKICAgICBkZWYgaW9zX3ZlcnNpb24oc2VsZik6CiAgICAgICAgIGlmIHNlbGYuZ2V0X29w
dGlvbigndmVyc2lvbicpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbigndmVy
c2lvbicpCisgICAgICAgICAgICByZXR1cm4gVmVyc2lvbihzZWxmLmdldF9vcHRpb24oJ3ZlcnNp
b24nKSkKIAogICAgICAgICBpZiBub3QgYXBwbGVfYWRkaXRpb25zKCk6CiAgICAgICAgICAgICBy
YWlzZSBSdW50aW1lRXJyb3Ioc2VsZi5OT19PTl9ERVZJQ0VfVEVTVElORykKQEAgLTEwOSw3ICsx
MDksNyBAQCBjbGFzcyBJT1NEZXZpY2VQb3J0KElPU1BvcnQpOgogICAgICAgICAgICAgICAgIGlm
IGRldmljZS5wbGF0Zm9ybS5vc192ZXJzaW9uICE9IHZlcnNpb246CiAgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTXVsdGlwbGUgY29ubmVjdGVkIGRldmljZXMgaGF2ZSBk
aWZmZXJlbnQgaU9TIHZlcnNpb25zJykKIAotICAgICAgICByZXR1cm4gdmVyc2lvbgorICAgICAg
ICByZXR1cm4gVmVyc2lvbih2ZXJzaW9uKQogCiAgICAgIyBGSVhNRTogVGhlc2UgbmVlZCBkZXZp
Y2UgaW1wbGVtZW50YXRpb25zIDxyZGFyOi8vcHJvYmxlbS8zMDQ5Nzk5MT4uCiAgICAgZGVmIGNo
ZWNrX2Zvcl9sZWFrcyhzZWxmLCBwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkKToKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAy
MjQ0MDUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvci5weQko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCiBmcm9tIHdlYmtpdHB5LnBvcnQuZGV2aWNlIGltcG9y
dCBEZXZpY2UKIGZyb20gd2Via2l0cHkucG9ydC5pb3MgaW1wb3J0IElPU1BvcnQKIGZyb20gd2Vi
a2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0b3IsIFJ1bnRpbWUsIERldmljZVR5
cGUKQEAgLTEwMiwxNiArMTAzLDE2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoSU9TUG9ydCk6
CiAgICAgICAgIGlmIHJ1bnRpbWVfaWRlbnRpZmllcjoKICAgICAgICAgICAgIHJ1bnRpbWUgPSBS
dW50aW1lLmZyb21faWRlbnRpZmllcihydW50aW1lX2lkZW50aWZpZXIpCiAgICAgICAgIGVsaWYg
c2VsZi5nZXRfb3B0aW9uKCd2ZXJzaW9uJyk6Ci0gICAgICAgICAgICBydW50aW1lID0gUnVudGlt
ZS5mcm9tX3ZlcnNpb25fc3RyaW5nKHNlbGYuZ2V0X29wdGlvbigndmVyc2lvbicpKQorICAgICAg
ICAgICAgcnVudGltZSA9IFJ1bnRpbWUuZnJvbV92ZXJzaW9uKFZlcnNpb24oc2VsZi5nZXRfb3B0
aW9uKCd2ZXJzaW9uJykpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcnVudGltZSA9IFJ1
bnRpbWUuZnJvbV92ZXJzaW9uX3N0cmluZyhzZWxmLmhvc3QucGxhdGZvcm0ueGNvZGVfc2RrX3Zl
cnNpb24oJ2lwaG9uZXNpbXVsYXRvcicpKQorICAgICAgICAgICAgcnVudGltZSA9IFJ1bnRpbWUu
ZnJvbV92ZXJzaW9uKHNlbGYuaG9zdC5wbGF0Zm9ybS54Y29kZV9zZGtfdmVyc2lvbignaXBob25l
c2ltdWxhdG9yJykpCiAgICAgICAgIHJldHVybiBydW50aW1lCiAKICAgICBAbWVtb2l6ZWQKICAg
ICBkZWYgaW9zX3ZlcnNpb24oc2VsZik6CiAgICAgICAgIHJ1bnRpbWVfaWRlbnRpZmllciA9IHNl
bGYuZ2V0X29wdGlvbigncnVudGltZScpCiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigndmVy
c2lvbicpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbigndmVyc2lvbicpCisg
ICAgICAgICAgICByZXR1cm4gVmVyc2lvbihzZWxmLmdldF9vcHRpb24oJ3ZlcnNpb24nKSkKICAg
ICAgICAgaWYgcnVudGltZV9pZGVudGlmaWVyOgogICAgICAgICAgICAgcmV0dXJuICcuJy5qb2lu
KHN0cihpKSBmb3IgaSBpbiBSdW50aW1lLmZyb21faWRlbnRpZmllcihydW50aW1lX2lkZW50aWZp
ZXIpLnZlcnNpb24pCiAgICAgICAgIHJldHVybiBzZWxmLmhvc3QucGxhdGZvcm0ueGNvZGVfc2Rr
X3ZlcnNpb24oJ2lwaG9uZXNpbXVsYXRvcicpCkBAIC0xODcsNyArMTg4LDcgQEAgY2xhc3MgSU9T
U2ltdWxhdG9yUG9ydChJT1NQb3J0KToKICAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1Vu
YWJsZSB0byByZW1vdmUgU2ltdWxhdG9yJyArIHN0cihpKSkKIAogICAgIGRlZiB1c2VfbXVsdGlw
bGVfc2ltdWxhdG9yX2FwcHMoc2VsZik6Ci0gICAgICAgIHJldHVybiBpbnQoc2VsZi5ob3N0LnBs
YXRmb3JtLnhjb2RlX3ZlcnNpb24oKS5zcGxpdCgnLicpWzBdKSA8IDkKKyAgICAgICAgcmV0dXJu
IGludChzZWxmLmhvc3QucGxhdGZvcm0ueGNvZGVfdmVyc2lvbigpWzBdKSA8IDkKIAogICAgIGRl
ZiBfY3JlYXRlX3NpbXVsYXRvcnMoc2VsZik6CiAgICAgICAgIGlmIChzZWxmLmRlZmF1bHRfY2hp
bGRfcHJvY2Vzc2VzKCkgPCBzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAyMjQ0MDUpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQCBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi50aW1l
b3V0X2NvbnRleHQgaW1wb3J0IFRpbWVvdXQKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1w
b3J0IEhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIAog
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCkBAIC0xMjksOCArMTMwLDggQEAg
Y2xhc3MgUnVudGltZShvYmplY3QpOgogICAgICAgICBzZWxmLmlzX2ludGVybmFsX3J1bnRpbWUg
PSBpc19pbnRlcm5hbF9ydW50aW1lCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZnJvbV92
ZXJzaW9uX3N0cmluZyhjbHMsIHZlcnNpb24pOgotICAgICAgICByZXR1cm4gY2xzLmZyb21faWRl
bnRpZmllcignY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS5pT1MtJyArIHZlcnNp
b24ucmVwbGFjZSgnLicsICctJykpCisgICAgZGVmIGZyb21fdmVyc2lvbihjbHMsIHZlcnNpb24p
OgorICAgICAgICByZXR1cm4gY2xzLmZyb21faWRlbnRpZmllcignY29tLmFwcGxlLkNvcmVTaW11
bGF0b3IuU2ltUnVudGltZS5pT1MtJyArICd7fS17fScuZm9ybWF0KHZlcnNpb25bMF0sIHZlcnNp
b25bMV0pKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGZyb21faWRlbnRpZmllcihjbHMs
IGlkZW50aWZpZXIpOgpAQCAtMTU2LDcgKzE1Nyw3IEBAIGNsYXNzIFJ1bnRpbWUob2JqZWN0KToK
ICAgICAgICAgaWYgc2VsZi5pc19pbnRlcm5hbF9ydW50aW1lOgogICAgICAgICAgICAgdmVyc2lv
bl9zdWZmaXggPSAiIEludGVybmFsIgogICAgICAgICByZXR1cm4gJzxSdW50aW1lIHt2ZXJzaW9u
fToge2lkZW50aWZpZXJ9LiBBdmFpbGFibGU6IHthdmFpbGFibGV9LCB7bnVtX2RldmljZXN9IGRl
dmljZXM+Jy5mb3JtYXQoCi0gICAgICAgICAgICB2ZXJzaW9uPScuJy5qb2luKG1hcChzdHIsIHNl
bGYudmVyc2lvbikpICsgdmVyc2lvbl9zdWZmaXgsCisgICAgICAgICAgICB2ZXJzaW9uPXN0cihz
ZWxmLnZlcnNpb24pICsgdmVyc2lvbl9zdWZmaXgsCiAgICAgICAgICAgICBpZGVudGlmaWVyPXNl
bGYuaWRlbnRpZmllciwKICAgICAgICAgICAgIGF2YWlsYWJsZT1zZWxmLmF2YWlsYWJsZSwKICAg
ICAgICAgICAgIG51bV9kZXZpY2VzPWxlbihzZWxmLmRldmljZXMpKQpAQCAtMzM0LDggKzMzNSw3
IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0g
Jz09IERldmljZXMgPT0nOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Io
J0V4cGVjdGVkID09IERldmljZXMgPT0gaGVhZGVyIGJ1dCBnb3Q6ICJ7fSInLmZvcm1hdChsaW5l
KSkKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgdmVyc2lvbiA9IHR1cGxlKG1h
cChpbnQsIHJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ3ZlcnNpb24nKS5zcGxpdCgnLicpKSkKLSAgICAg
ICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lKHZlcnNpb249dmVyc2lvbiwKKyAgICAgICAgICAgIHJ1
bnRpbWUgPSBSdW50aW1lKHZlcnNpb249VmVyc2lvbihydW50aW1lX21hdGNoLmdyb3VwKCd2ZXJz
aW9uJykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1ydW50aW1l
X21hdGNoLmdyb3VwKCdpZGVudGlmaWVyJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFibGU9cnVudGltZV9tYXRjaC5ncm91cCgnYXZhaWxhYmlsaXR5JykgaXMgTm9uZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2ludGVybmFsX3J1bnRpbWU9Ym9vbChy
dW50aW1lX21hdGNoLmdyb3VwKCdpbnRlcm5hbCcpKSkKQEAgLTM1Myw4ICszNTMsNyBAQCBjbGFz
cyBTaW11bGF0b3Iob2JqZWN0KToKICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CiAgICAgICAg
ICAgICB2ZXJzaW9uX21hdGNoID0gc2VsZi52ZXJzaW9uX3JlLm1hdGNoKGxpbmUpCiAgICAgICAg
ICAgICBpZiB2ZXJzaW9uX21hdGNoOgotICAgICAgICAgICAgICAgIHZlcnNpb24gPSB0dXBsZSht
YXAoaW50LCB2ZXJzaW9uX21hdGNoLmdyb3VwKCd2ZXJzaW9uJykuc3BsaXQoJy4nKSkpCi0gICAg
ICAgICAgICAgICAgY3VycmVudF9ydW50aW1lID0gc2VsZi5ydW50aW1lKHZlcnNpb249dmVyc2lv
biwgaXNfaW50ZXJuYWxfcnVudGltZT1ib29sKHZlcnNpb25fbWF0Y2guZ3JvdXAoJ2ludGVybmFs
JykpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRfcnVudGltZSA9IHNlbGYucnVudGltZSh2ZXJz
aW9uPVZlcnNpb24odmVyc2lvbl9tYXRjaC5ncm91cCgndmVyc2lvbicpKSwgaXNfaW50ZXJuYWxf
cnVudGltZT1ib29sKHZlcnNpb25fbWF0Y2guZ3JvdXAoJ2ludGVybmFsJykpKQogICAgICAgICAg
ICAgICAgIGFzc2VydCBjdXJyZW50X3J1bnRpbWUKICAgICAgICAgICAgICAgICBjb250aW51ZQog
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvcl91bml0dGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvcl91
bml0dGVzdC5weQkocmV2aXNpb24gMjI0NDA1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS94
Y29kZS9zaW11bGF0b3JfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBA
Ci0jIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsNiArMjMsNyBAQAogaW1wb3J0IHVu
aXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20gd2Via2l0
cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0b3IKIAogCkBAIC0xMzQsNyArMTM1LDcg
QEAgQXBwbGUgVFYgMTA4MHAgKDU1MjgxQUJFLTlDMjctNDM4Qi1BRDUwLQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy04LTAn
LCBydW50aW1lX2lvc184LmlkZW50aWZpZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1
ZSwgcnVudGltZV9pb3NfOC5hdmFpbGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFs
c2UsIHJ1bnRpbWVfaW9zXzguaXNfaW50ZXJuYWxfcnVudGltZSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCh0dXBsZShbOCwgMF0pLCBydW50aW1lX2lvc184LnZlcnNpb24pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoVmVyc2lvbihbOCwgMF0pLCBydW50aW1lX2lvc184LnZlcnNpb24pCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTEsIGxlbihydW50aW1lX2lvc184LmRldmljZXMpKQog
CiAgICAgICAgIGRldmljZV9pcGhvbmVfNHMgPSBydW50aW1lX2lvc184LmRldmljZXNbMF0KQEAg
LTIwNywyMSArMjA4LDIxIEBAIEFwcGxlIFRWIDEwODBwICg1NTI4MUFCRS05QzI3LTQzOEItQUQ1
MC0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2lt
UnVudGltZS5pT1MtOC0wLUludGVybmFsJywgcnVudGltZV9pb3NfOF9pbnRlcm5hbC5pZGVudGlm
aWVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBydW50aW1lX2lvc184X2ludGVy
bmFsLmF2YWlsYWJsZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBydW50aW1lX2lv
c184X2ludGVybmFsLmlzX2ludGVybmFsX3J1bnRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodHVwbGUoWzgsIDBdKSwgcnVudGltZV9pb3NfOF9pbnRlcm5hbC52ZXJzaW9uKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKFZlcnNpb24oWzgsIDBdKSwgcnVudGltZV9pb3NfOF9pbnRlcm5h
bC52ZXJzaW9uKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihydW50aW1lX2lvc184
X2ludGVybmFsLmRldmljZXMpKQogCiAgICAgICAgIHJ1bnRpbWVfaW9zXzhfNCA9IHNpbXVsYXRv
ci5ydW50aW1lc1syXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdjb20uYXBwbGUuQ29yZVNp
bXVsYXRvci5TaW1SdW50aW1lLmlPUy04LTQnLCBydW50aW1lX2lvc184XzQuaWRlbnRpZmllcikK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBydW50aW1lX2lvc184XzQuYXZhaWxhYmxl
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBydW50aW1lX2lvc184XzQuaXNfaW50
ZXJuYWxfcnVudGltZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShbOCwgNF0pLCBy
dW50aW1lX2lvc184XzQudmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9u
KFs4LCA0XSksIHJ1bnRpbWVfaW9zXzhfNC52ZXJzaW9uKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKDAsIGxlbihydW50aW1lX2lvc184XzQuZGV2aWNlcykpCiAKICAgICAgICAgcnVudGltZV90
dm9zXzkgPSBzaW11bGF0b3IucnVudGltZXNbM10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
Y29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS50dk9TLTktMCcsIHJ1bnRpbWVfdHZv
c185LmlkZW50aWZpZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgcnVudGltZV90
dm9zXzkuYXZhaWxhYmxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBydW50aW1l
X3R2b3NfOS5pc19pbnRlcm5hbF9ydW50aW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1
cGxlKFs5LCAwXSksIHJ1bnRpbWVfdHZvc185LnZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoVmVyc2lvbihbOSwgMF0pLCBydW50aW1lX3R2b3NfOS52ZXJzaW9uKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKDEsIGxlbihydW50aW1lX3R2b3NfOS5kZXZpY2VzKSkKIAogICAgICAg
ICBkZXZpY2VfYXBwbGVfdHZfMTA4MHAgPSBydW50aW1lX3R2b3NfOS5kZXZpY2VzWzBdCkBAIC0y
MzQsMTQgKzIzNSwxNCBAQCBBcHBsZSBUViAxMDgwcCAoNTUyODFBQkUtOUMyNy00MzhCLUFENTAt
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbVJ1
bnRpbWUud2F0Y2hPUy0yLTAnLCBydW50aW1lX3dhdGNob3NfMi5pZGVudGlmaWVyKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHJ1bnRpbWVfd2F0Y2hvc18yLmF2YWlsYWJsZSkKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgcnVudGltZV93YXRjaG9zXzIuaXNfaW50ZXJu
YWxfcnVudGltZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShbMiwgMF0pLCBydW50
aW1lX3dhdGNob3NfMi52ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZlcnNpb24o
WzIsIDBdKSwgcnVudGltZV93YXRjaG9zXzIudmVyc2lvbikKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgyLCBsZW4ocnVudGltZV93YXRjaG9zXzIuZGV2aWNlcykpCiAKICAgICAgICAgcnVudGlt
ZV9pb3NfMTAgPSBzaW11bGF0b3IucnVudGltZXNbNV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS5pT1MtMTAtMCcsIHJ1bnRpbWVf
aW9zXzEwLmlkZW50aWZpZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgcnVudGlt
ZV9pb3NfMTAuYXZhaWxhYmxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBydW50
aW1lX2lvc18xMC5pc19pbnRlcm5hbF9ydW50aW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHR1cGxlKFsxMCwgMF0pLCBydW50aW1lX2lvc18xMC52ZXJzaW9uKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKFZlcnNpb24oWzEwLCAwXSksIHJ1bnRpbWVfaW9zXzEwLnZlcnNpb24pCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKHJ1bnRpbWVfaW9zXzEwLmRldmljZXMpKQogCiAg
ICAgICAgIGRldmljZV9hcHBsZV93YXRjaF8zOG1tID0gcnVudGltZV93YXRjaG9zXzIuZGV2aWNl
c1swXQpAQCAtMzE1LDcgKzMxNiw3IEBAIGlPUyA4LjAgSW50ZXJuYWwgKDguMCAtIFVua25vd24p
IChjb20uYXAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY29tLmFwcGxlLkNvcmVTaW11bGF0
b3IuU2ltUnVudGltZS5pT1MtOC0wJywgcnVudGltZV9pb3NfOC5pZGVudGlmaWVyKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHJ1bnRpbWVfaW9zXzguYXZhaWxhYmxlKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBydW50aW1lX2lvc184LmlzX2ludGVybmFsX3J1bnRp
bWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoWzgsIDBdKSwgcnVudGltZV9pb3Nf
OC52ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZlcnNpb24oWzgsIDBdKSwgcnVu
dGltZV9pb3NfOC52ZXJzaW9uKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihydW50
aW1lX2lvc184LmRldmljZXMpKQogCiAgICAgICAgIGRldmljZV9pcGhvbmVfNHMgPSBydW50aW1l
X2lvc184LmRldmljZXNbMF0KQEAgLTMyOCw3ICszMjksNyBAQCBpT1MgOC4wIEludGVybmFsICg4
LjAgLSBVbmtub3duKSAoY29tLmFwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NvbS5hcHBs
ZS5Db3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLTgtMC1JbnRlcm5hbCcsIHJ1bnRpbWVfaW9z
XzhfaW50ZXJuYWwuaWRlbnRpZmllcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwg
cnVudGltZV9pb3NfOF9pbnRlcm5hbC5hdmFpbGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoVHJ1ZSwgcnVudGltZV9pb3NfOF9pbnRlcm5hbC5pc19pbnRlcm5hbF9ydW50aW1lKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKFs4LCAwXSksIHJ1bnRpbWVfaW9zXzhfaW50ZXJu
YWwudmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9uKFs4LCAwXSksIHJ1
bnRpbWVfaW9zXzhfaW50ZXJuYWwudmVyc2lvbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgw
LCBsZW4ocnVudGltZV9pb3NfOF9pbnRlcm5hbC5kZXZpY2VzKSkKIAogICAgIGRlZiB0ZXN0X2Rl
dmljZV9wYWlycyhzZWxmKToKQEAgLTM1Niw3ICszNTcsNyBAQCBpT1MgOC4wIEludGVybmFsICg4
LjAgLSBVbmtub3duKSAoY29tLmFwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NvbS5hcHBs
ZS5Db3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLTgtMCcsIHJ1bnRpbWVfaW9zXzguaWRlbnRp
ZmllcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBydW50aW1lX2lvc184LmF2YWls
YWJsZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgcnVudGltZV9pb3NfOC5pc19p
bnRlcm5hbF9ydW50aW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKFs4LCAwXSks
IHJ1bnRpbWVfaW9zXzgudmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9u
KFs4LCAwXSksIHJ1bnRpbWVfaW9zXzgudmVyc2lvbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgxLCBsZW4ocnVudGltZV9pb3NfOC5kZXZpY2VzKSkKIAogICAgICAgICBkZXZpY2VfaXBob25l
XzRzID0gcnVudGltZV9pb3NfOC5kZXZpY2VzWzBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326498</attachid>
            <date>2017-11-09 15:40:18 -0800</date>
            <delta_ts>2017-11-09 16:58:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179426-20171109154017.patch</filename>
            <type>text/plain</type>
            <size>34605</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNDY0NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYzIEBACisyMDE3LTExLTA5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVW5pZnkgdmVyc2lvbiBwYXJzaW5nIGNvZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTQyNgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzU0MTUxOTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQg
S2lsemVyLgorCisgICAgICAgIHdlYmtpdHB5IG5lZWRzIHRvIHBhcnNlIHZlcnNpb24gc3RyaW5n
cyBvciB2ZXJzaW9uIGxpc3RzIGZyZXF1ZW50bHkuIFJhdGhlciB0aGFuCisgICAgICAgIGR1cGxp
Y2F0ZSB0aGlzIGNvZGUgZWFjaCB0aW1lIGl0J3MgbmVlZGVkLCB1bmlmeSBpdCBpbiBhIFZlcnNp
b24gY2xhc3MuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxh
dGZvcm1pbmZvLnB5OgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9faW5pdF9fKTogQ29udmVydCBt
YWMgdmVyc2lvbiBzdHJpbmcgdG8gdmVyc2lvbiBvYmplY3QgYW5kCisgICAgICAgIHVzZSBfd2lu
X3ZlcnNpb24gaW5zdGVhZCBvZiBfd2luX3ZlcnNpb25fdHVwbGUuCisgICAgICAgIChQbGF0Zm9y
bUluZm8ueGNvZGVfc2RrX3ZlcnNpb24pOiBDb252ZXJ0IFNESyB2ZXJzaW9uIHN0cmluZyB0byBW
ZXJzaW9uIG9iamVjdAorICAgICAgICBiZWZvcmUgcmV0dXJuaW5nIGl0LgorICAgICAgICAoUGxh
dGZvcm1JbmZvLnhjb2RlX3ZlcnNpb24pOiBSZXR1cm4gVmVyc2lvbiBvYmplY3QgaW5zdGVhZCBv
ZiB2ZXJzaW9uIHN0cmluZy4KKyAgICAgICAgKFBsYXRmb3JtSW5mby5fZGV0ZXJtaW5lX21hY192
ZXJzaW9uKTogQWNjZXB0IFZlcnNpb24gb2JqZWN0IGluc3RlYWQgb2Ygc3RyaW5nLAorICAgICAg
ICBlbGltaW5hdGUgcGFyc2luZy4KKyAgICAgICAgKFBsYXRmb3JtSW5mby5fZGV0ZXJtaW5lX3dp
bl92ZXJzaW9uKTogQWNjZXB0IFZlcnNpb24gb2JqZWN0IGluc3RlYWQgb2YgdHVwbGUuCisgICAg
ICAgIChQbGF0Zm9ybUluZm8uX3dpbl92ZXJzaW9uKTogUmV0dXJuIFZlcnNpb24gb2JqZWN0IGlu
c3RlYWQgb2YgdHVwbGUsIGhhdmUgVmVyc2lvbgorICAgICAgICBvYmplY3Qgb3duIHZlcnNpb24g
c3RyaW5nIHBhcnNpbmcuCisgICAgICAgIChQbGF0Zm9ybUluZm8uX3dpbl92ZXJzaW9uX3R1cGxl
KTogUmVuYW1lZCB0byBfd2luX3ZlcnNpb24oKS4KKyAgICAgICAgKFBsYXRmb3JtSW5mby5fd2lu
X3ZlcnNpb25fdHVwbGVfZnJvbV9jbWQpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weToKKyAgICAgICAgKE1vY2tQ
bGF0Zm9ybUluZm8ueGNvZGVfc2RrX3ZlcnNpb24pOiBSZXR1cm4gVmVyc2lvbiBvYmplY3QgaW5z
dGVhZCBvZiBzdHJpbmcuCisgICAgICAgIChNb2NrUGxhdGZvcm1JbmZvLnhjb2RlX3ZlcnNpb24p
OiBEaXR0aW8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weTog
QWRkZWQuCisgICAgICAgIChWZXJzaW9uKTogVmVyc2lvbiBvYmplY3QuCisgICAgICAgIChWZXJz
aW9uLl9faW5pdF9fKTogSW5pdGlhbGl6ZSB0aGUgVmVyc2lvbiBvYmplY3Qgd2l0aCBhIHN0cmlu
ZywgaW50ZWdlciwKKyAgICAgICAgdHVwbGUgb2YgaW50ZWdlcnMsIGxpc3Qgb2YgaW50ZWdlcnMg
b3IgYW5vdGhlciBWZXJzaW9uIG9iamVjdC4KKyAgICAgICAgKFZlcnNpb24uX19sZW5fXyk6IFJl
dHVybiA1IHNvIHRoYXQgdGhlIFZlcnNpb24gb2JqZWN0IGNhbiBiZSB0cmVhdGVkIGFzCisgICAg
ICAgIGEgbGlzdCBvciB0dXBsZS4KKyAgICAgICAgKFZlcnNpb24uX19nZXRpdGVtX18pOiBHZXQg
aXRlbSBpbiBWZXJzaW9uIG9iamVjdCBieSBpbmRleCBvciBzdHJpbmcuCisgICAgICAgIChWZXJz
aW9uLl9fc2V0aXRlbV9fKTogU2V0IGl0ZW0gaW4gVmVyc2lvbiBvYmplY3QgYnkgaW5kZXggb3Ig
c3RyaW5nLgorICAgICAgICAoVmVyc2lvbi5fX3N0cl9fKTogQ29udmVydCB2ZXJzaW9uIHRvIHBy
aW50YWJsZSBzdHJpbmcsIG9taXR0aW5nIHRyYWlsaW5nIDAncy4KKyAgICAgICAgKFZlcnNpb24u
X19jbXBfXyk6IENvbXBhcmUgdHdvIHZlcnNpb24gc3RyaW5ncywgbWFqb3IgdGFraW5nIHByZWNl
ZGVuY2Ugb3ZlcgorICAgICAgICBtaW5vciwgbWlub3IgdGFraW5nIHByZWNlZGVuY2Ugb3ZlciBi
dWlsZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKFZlcnNpb25UZXN0Q2FzZSk6IFRlc3QgYmVoYXZpb3Igb2Yg
VmVyc2lvbiBvYmplY3QuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weToK
KyAgICAgICAgKElPU1BvcnQuZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aCk6IGlvc192ZXJz
aW9uIG5vdyByZXR1cm5zIGEgVmVyc2lvbiBvYmplY3QuCisgICAgICAgIChJT1NQb3J0Ll9pc192
YWxpZF9pb3NfdmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChJT1NQb3J0LmdldF9vcHRpb24p
OiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5
OgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5kZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUpOiBVc2Ug
VmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiBvd25pbmcgcGFyc2luZy4KKyAgICAgICAgKElPU0Rl
dmljZVBvcnQuaW9zX3ZlcnNpb24pOiBSZXR1cm4gVmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiBz
dHJpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHk6
CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnNpbXVsYXRvcl9ydW50aW1lKTogVXNlIGZyb21f
dmVyc2lvbiBpbnN0ZWFkIG9mIGZyb21fdmVyc2lvbl9zdHJpbmcuCisgICAgICAgIChJT1NTaW11
bGF0b3JQb3J0Lmlvc192ZXJzaW9uKTogUmV0dXJuIFZlcnNpb24gb2JqZWN0IGluc3RlYWQgb2Yg
c3RyaW5nLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC51c2VfbXVsdGlwbGVfc2ltdWxhdG9y
X2FwcHMpOiBVc2UgVmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6CisgICAgICAgIChSdW50aW1lLmZy
b21fdmVyc2lvbik6IEFjY2VwdCBWZXJzaW9uIG9iamVjdCBpbnN0ZWFkIG9mIHN0cmluZy4KKyAg
ICAgICAgKFJ1bnRpbWUuZnJvbV92ZXJzaW9uX3N0cmluZyk6IFJlcGxhY2VkIGJ5IGZyb21fdmVy
c2lvbi4KKyAgICAgICAgKFJ1bnRpbWUuX19yZXByX18pOiBXaGVuIHByaW50aW5nLCBhIHJ1bnRp
bWUncyB2ZXJzaW9uIHdpbGwgYmUgYSBWZXJzaW9uIG9iamVjdCBpbnN0ZWFkCisgICAgICAgIG9m
IGEgdHVwbGUuCisgICAgICAgIChTaW11bGF0b3IuX3BhcnNlX3J1bnRpbWVzKTogVXNlIFZlcnNp
b24gb2JqZWN0IGluc3RlYWQgb2YgdHVwbGUuCisgICAgICAgIChTaW11bGF0b3IuX3BhcnNlX2Rl
dmljZXMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRv
cl91bml0dGVzdC5weTogVXNlIFZlcnNpb24gb2JqZWN0IGluc3RlYWQgb2YgdHVwbGVzLgorCiAy
MDE3LTExLTA5ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAg
ICAgICAgIFtXaW5DYWlybyBFV1NdIHN2bi1hcHBseTogJ2NwJyBpcyBub3QgcmVjb2duaXplZCBh
cyBhbiBpbnRlcm5hbCBvciBleHRlcm5hbCBjb21tYW5kCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3ZlcnNpb24ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNyBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2NsYXNzIFZlcnNp
b24ob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXI9JzAnKToKKyAgICAgICAg
c2VsZi5tYWpvciA9IDAKKyAgICAgICAgc2VsZi5taW5vciA9IDAKKyAgICAgICAgc2VsZi50aW55
ID0gMAorICAgICAgICBzZWxmLm1pY3JvID0gMAorICAgICAgICBzZWxmLm5hbm8gPSAwCisgICAg
ICAgIGlmIGlzaW5zdGFuY2UodmVyLCBpbnQpOgorICAgICAgICAgICAgc2VsZi5tYWpvciA9IHZl
cgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2ZXIsIHN0cikg
b3IgaXNpbnN0YW5jZSh2ZXIsIHVuaWNvZGUpOgorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdl
KGxlbih2ZXIuc3BsaXQoJy4nKSkpOgorICAgICAgICAgICAgICAgIHNlbGZbaV0gPSB2ZXIuc3Bs
aXQoJy4nKVtpXQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2
ZXIsIGxpc3QpIG9yIGlzaW5zdGFuY2UodmVyLCBWZXJzaW9uKSBvciBpc2luc3RhbmNlKHZlciwg
dHVwbGUpOgorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbih2ZXIpKToKKyAgICAgICAg
ICAgICAgICBzZWxmW2ldID0gdmVyW2ldCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxp
ZiB2ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAgIyBFbXB0eSB2ZXJzaW9uIGlzIGlt
cGxpY2l0bHkgemVybworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdWZXJzaW9uIGV4cGVjdGVk
IHRvIGJlIHN0cmluZywgaW50ZWdlciwgdHVwbGUgb3IgbGlzdCBvZiBpbnRlZ2VycycpCisKKyAg
ICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDUKKworICAgIGRlZiBfX2dldGl0
ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgaW50KToKKyAgICAg
ICAgICAgIGlmIGtleSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm1ham9yCisg
ICAgICAgICAgICBlbGlmIGtleSA9PSAxOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm1p
bm9yCisgICAgICAgICAgICBlbGlmIGtleSA9PSAyOgorICAgICAgICAgICAgICAgIHJldHVybiBz
ZWxmLnRpbnkKKyAgICAgICAgICAgIGVsaWYga2V5ID09IDM6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHNlbGYubWljcm8KKyAgICAgICAgICAgIGVsaWYga2V5ID09IDQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHNlbGYubmFubworICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVmVyc2lv
biBrZXkgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDQnKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo
a2V5LCBzdHIpOgorICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCBrZXkpOgorICAgICAgICAg
ICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsIGtleSkKKyAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoJ1ZlcnNpb24ga2V5IG11c3QgYmUgbWFqb3IsIG1pbm9yLCB0aW55LCBtaWNybyBvciBu
YW5vJykKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRXhwZWN0ZWQgdmVyc2lvbiBrZXkgdG8g
YmUgc3RyaW5nIG9yIGludGVnZXInKQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwg
dmFsdWUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgaW50KToKKyAgICAgICAgICAgIGlm
IGtleSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYubWFqb3IgPSBpbnQodmFsdWUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFqb3IKKyAgICAgICAgICAgIGVsaWYga2V5ID09IDE6
CisgICAgICAgICAgICAgICAgc2VsZi5taW5vciA9IGludCh2YWx1ZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc2VsZi5taW5vcgorICAgICAgICAgICAgZWxpZiBrZXkgPT0gMjoKKyAgICAgICAg
ICAgICAgICBzZWxmLnRpbnkgPSBpbnQodmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGYudGlueQorICAgICAgICAgICAgZWxpZiBrZXkgPT0gMzoKKyAgICAgICAgICAgICAgICBzZWxm
Lm1pY3JvID0gaW50KHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm1pY3JvCisg
ICAgICAgICAgICBlbGlmIGtleSA9PSA0OgorICAgICAgICAgICAgICAgIHNlbGYubmFubyA9IGlu
dCh2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW5vCisgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCdWZXJzaW9uIGtleSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNCcpCisg
ICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CisgICAgICAgICAgICBpZiBoYXNhdHRy
KHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNldGF0dHIoc2VsZiwga2V5LCB2
YWx1ZSkKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1ZlcnNpb24ga2V5IG11c3QgYmUg
bWFqb3IsIG1pbm9yLCB0aW55LCBtaWNybyBvciBuYW5vJykKKyAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcignRXhwZWN0ZWQgdmVyc2lvbiBrZXkgdG8gYmUgc3RyaW5nIG9yIGludGVnZXInKQorCisg
ICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGxlbl90b19wcmludCA9IDEKKyAgICAgICAg
Zm9yIGkgaW4geHJhbmdlKGxlbihzZWxmKSk6CisgICAgICAgICAgICBpZiBzZWxmW2ldOgorICAg
ICAgICAgICAgICAgIGxlbl90b19wcmludCA9IGkgKyAxCisgICAgICAgIHJlc3VsdCA9IHN0cihz
ZWxmLm1ham9yKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuX3RvX3ByaW50IC0gMSk6Cisg
ICAgICAgICAgICByZXN1bHQgKz0gJy57fScuZm9ybWF0KHNlbGZbaSArIDFdKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGZv
ciBpIGluIHhyYW5nZShsZW4oc2VsZikpOgorICAgICAgICAgICAgaWYgY21wKHNlbGZbaV0sIG90
aGVyW2ldKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGZbaV0sIG90aGVyW2ldKQor
ICAgICAgICByZXR1cm4gMApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMzIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IHVuaXR0ZXN0CisKK2Zyb20gdmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorCisKK2NsYXNzIFZl
cnNpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zdHJpbmdf
Y29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHYgPSBWZXJzaW9uKCcxLjIuMy40LjUnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWFqb3IsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodi5taW5vciwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnRpbnksIDMpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5taWNybywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCh2Lm5hbm8sIDUpCisKKyAgICBkZWYgdGVzdF9saXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAg
ICAgICB2ID0gVmVyc2lvbihbMSwgMiwgMywgNCwgNV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodi5tYWpvciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1pbm9yLCAyKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHYudGlueSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCh2Lm1pY3JvLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYubmFubywgNSkKKworICAg
IGRlZiB0ZXN0X3R1cGxlX2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICB2ID0gVmVyc2lvbigo
MSwgMiwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5tYWpvciwgMSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh2Lm1pbm9yLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYu
dGlueSwgMykKKworICAgIGRlZiB0ZXN0X2ludF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAg
diA9IFZlcnNpb24oMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1ham9yLCAxKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWlub3IsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodi50aW55LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWljcm8sIDApCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5uYW5vLCAwKQorCisgICAgZGVmIHRlc3RfY29weV9jb25z
dHJ1Y3RvcihzZWxmKToKKyAgICAgICAgdiA9IFZlcnNpb24oVmVyc2lvbihbMSwgMiwgMywgNCwg
NV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYubWFqb3IsIDEpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwodi5taW5vciwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnRpbnks
IDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5taWNybywgNCkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCh2Lm5hbm8sIDUpCisKKyAgICBkZWYgdGVzdF9ub25lX2NvbnN0cnVjdG9yKHNl
bGYpOgorICAgICAgICB2ID0gVmVyc2lvbihOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHYubWFqb3IsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5taW5vciwgMCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCh2LnRpbnksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
di5taWNybywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm5hbm8sIDApCisKKyAgICBk
ZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFZlcnNpb24o
JzEuMi4zLjQuNScpKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oVmVyc2lvbigp
KSwgNSkKKworICAgIGRlZiB0ZXN0X3NldF9ieV9pbnQoc2VsZik6CisgICAgICAgIHYgPSBWZXJz
aW9uKE5vbmUpCisgICAgICAgIHZbMF0gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5t
YWpvciwgMSkKKyAgICAgICAgdlsxXSA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1p
bm9yLCAyKQorICAgICAgICB2WzJdID0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudGlu
eSwgMykKKyAgICAgICAgdlszXSA9IDQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm1pY3Jv
LCA0KQorICAgICAgICB2WzRdID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYubmFubywg
NSkKKworICAgIGRlZiB0ZXN0X3NldF9ieV9zdHJpbmcoc2VsZik6CisgICAgICAgIHYgPSBWZXJz
aW9uKE5vbmUpCisgICAgICAgIHZbJ21ham9yJ10gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodi5tYWpvciwgMSkKKyAgICAgICAgdlsnbWlub3InXSA9IDIKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCh2Lm1pbm9yLCAyKQorICAgICAgICB2Wyd0aW55J10gPSAzCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwodi50aW55LCAzKQorICAgICAgICB2WydtaWNybyddID0gNAorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHYubWljcm8sIDQpCisgICAgICAgIHZbJ25hbm8nXSA9IDUKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCh2Lm5hbm8sIDUpCisKKyAgICBkZWYgdGVzdF9nZXRfYnlfaW50
KHNlbGYpOgorICAgICAgICB2ID0gVmVyc2lvbignMS4yLjMuNC41JykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCh2WzBdLCB2Lm1ham9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbMV0s
IHYubWlub3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodlsyXSwgdi50aW55KQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHZbM10sIHYubWljcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodls0XSwgdi5uYW5vKQorCisgICAgZGVmIHRlc3RfZ2V0X2J5X3N0cmluZyhzZWxmKToKKyAg
ICAgICAgdiA9IFZlcnNpb24oJzEuMi4zLjQuNScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
dlsnbWFqb3InXSwgdi5tYWpvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WydtaW5vcidd
LCB2Lm1pbm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbJ3RpbnknXSwgdi50aW55KQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbJ21pY3JvJ10sIHYubWljcm8pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwodlsnbmFubyddLCB2Lm5hbm8pCisKKyAgICBkZWYgdGVzdF9zdHJpbmco
c2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzEuMi4zJykpLCAn
MS4yLjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihWZXJzaW9uKCcxLjIuMCcpKSwg
JzEuMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzEuMicpKSwgJzEu
MicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzAuMC4zJykpLCAnMC4w
LjMnKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV92ZXJzaW9ucyhzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChWZXJzaW9uKCcxLjIuMycpLCBWZXJzaW9uKCcxLjIuMycpKQorICAgICAg
ICBzZWxmLmFzc2VydEdyZWF0ZXIoVmVyc2lvbignMS4yLjQnKSwgVmVyc2lvbignMS4yLjMnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKFZlcnNpb24oJzEuMy4yJyksIFZlcnNpb24oJzEu
Mi4zJykpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihWZXJzaW9uKCcyLjEuMScpLCBWZXJz
aW9uKCcxLjIuMycpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3BsYXRmb3JtaW5mby5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lvbiAyMjQ2NDcpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzAs
NiArMzAsNyBAQAogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiAKK2Zyb20gd2Via2l0cHkuY29tbW9u
LnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVj
dXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQogCiAKQEAgLTU1LDkgKzU2LDkgQEAgY2xhc3MgUGxhdGZv
cm1JbmZvKG9iamVjdCk6CiAgICAgICAgIGlmIHNlbGYub3NfbmFtZSA9PSAnZnJlZWJzZCcgb3Ig
c2VsZi5vc19uYW1lID09ICdvcGVuYnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ25ldGJzZCcgb3Ig
c2VsZi5vc19uYW1lID09ICdpb3MnOgogICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gcGxh
dGZvcm1fbW9kdWxlLnJlbGVhc2UoKQogICAgICAgICBpZiBzZWxmLm9zX25hbWUuc3RhcnRzd2l0
aCgnbWFjJyk6Ci0gICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLl9kZXRlcm1pbmVf
bWFjX3ZlcnNpb24ocGxhdGZvcm1fbW9kdWxlLm1hY192ZXIoKVswXSkKKyAgICAgICAgICAgIHNl
bGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV9tYWNfdmVyc2lvbihWZXJzaW9uKHBsYXRm
b3JtX21vZHVsZS5tYWNfdmVyKClbMF0pKQogICAgICAgICBpZiBzZWxmLm9zX25hbWUuc3RhcnRz
d2l0aCgnd2luJyk6Ci0gICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLl9kZXRlcm1p
bmVfd2luX3ZlcnNpb24oc2VsZi5fd2luX3ZlcnNpb25fdHVwbGUoc3lzX21vZHVsZSkpCisgICAg
ICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLl9kZXRlcm1pbmVfd2luX3ZlcnNpb24oc2Vs
Zi5fd2luX3ZlcnNpb24oc3lzX21vZHVsZSkpCiAgICAgICAgIHNlbGYuX2lzX2N5Z3dpbiA9IHN5
c19tb2R1bGUucGxhdGZvcm0gPT0gJ2N5Z3dpbicKIAogICAgIGRlZiBpc19tYWMoc2VsZik6CkBA
IC0xMjcsOCArMTI4LDggQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgZGVmIHhj
b2RlX3Nka192ZXJzaW9uKHNlbGYsIHNka19uYW1lKToKICAgICAgICAgaWYgc2VsZi5pc19tYWMo
KToKICAgICAgICAgICAgICMgQXNzdW1lcyB0aGF0IHhjcnVuIGRvZXMgbm90IHdyaXRlIHRvIHN0
YW5kYXJkIG91dHB1dCBvbiBmYWlsdXJlIChlLmcuIFNESyBkb2VzIG5vdCBleGlzdCkuCi0gICAg
ICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsieGNydW4iLCAiLS1z
ZGsiLCBzZGtfbmFtZSwgIi0tc2hvdy1zZGstdmVyc2lvbiJdLCByZXR1cm5fc3RkZXJyPUZhbHNl
LCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpLnJzdHJpcCgpCi0gICAgICAg
IHJldHVybiAnJworICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24oc2VsZi5fZXhlY3V0aXZlLnJ1
bl9jb21tYW5kKFsieGNydW4iLCAiLS1zZGsiLCBzZGtfbmFtZSwgIi0tc2hvdy1zZGstdmVyc2lv
biJdLCByZXR1cm5fc3RkZXJyPUZhbHNlLCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVf
ZXJyb3IpLnJzdHJpcCgpKQorICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIHhjb2RlX3Np
bWN0bF9saXN0KHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5pc19tYWMoKToKQEAgLTEzOSw3
ICsxNDAsNyBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBkZWYgeGNvZGVfdmVy
c2lvbihzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuaXNfbWFjKCk6CiAgICAgICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0gICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUu
cnVuX2NvbW1hbmQoWyd4Y29kZWJ1aWxkJywgJy12ZXJzaW9uJ10pLnNwbGl0KClbMV0KKyAgICAg
ICAgcmV0dXJuIFZlcnNpb24oc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNvZGVidWls
ZCcsICctdmVyc2lvbiddKS5zcGxpdCgpWzFdKQogCiAgICAgZGVmIF9kZXRlcm1pbmVfb3NfbmFt
ZShzZWxmLCBzeXNfcGxhdGZvcm0pOgogICAgICAgICBpZiBzeXNfcGxhdGZvcm0gPT0gJ2Rhcndp
bic6CkBAIC0xNTgsOCArMTU5LDcgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAg
ICAgICAgICByZXR1cm4gJ2hhaWt1JwogICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigndW5y
ZWNvZ25pemVkIHBsYXRmb3JtIHN0cmluZyAiJXMiJyAlIHN5c19wbGF0Zm9ybSkKIAotICAgIGRl
ZiBfZGV0ZXJtaW5lX21hY192ZXJzaW9uKHNlbGYsIG1hY192ZXJzaW9uX3N0cmluZyk6Ci0gICAg
ICAgIHJlbGVhc2VfdmVyc2lvbiA9IGludChtYWNfdmVyc2lvbl9zdHJpbmcuc3BsaXQoJy4nKVsx
XSkKKyAgICBkZWYgX2RldGVybWluZV9tYWNfdmVyc2lvbihzZWxmLCBtYWNfdmVyc2lvbik6CiAg
ICAgICAgIHZlcnNpb25fc3RyaW5ncyA9IHsKICAgICAgICAgICAgIDU6ICdsZW9wYXJkJywKICAg
ICAgICAgICAgIDY6ICdzbm93bGVvcGFyZCcsCkBAIC0xNzEsMzQgKzE3MSwyNyBAQCBjbGFzcyBQ
bGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgICAgIDEyOiAnc2llcnJhJywKICAgICAgICAg
ICAgIDEzOiAnaGlnaHNpZXJyYScsCiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0IHJlbGVhc2Vf
dmVyc2lvbiA+PSBtaW4odmVyc2lvbl9zdHJpbmdzLmtleXMoKSkKLSAgICAgICAgcmV0dXJuIHZl
cnNpb25fc3RyaW5ncy5nZXQocmVsZWFzZV92ZXJzaW9uLCAnZnV0dXJlJykKKyAgICAgICAgYXNz
ZXJ0IG1hY192ZXJzaW9uLm1pbm9yID49IG1pbih2ZXJzaW9uX3N0cmluZ3Mua2V5cygpKQorICAg
ICAgICByZXR1cm4gdmVyc2lvbl9zdHJpbmdzLmdldChtYWNfdmVyc2lvbi5taW5vciwgJ2Z1dHVy
ZScpCiAKICAgICBkZWYgX2RldGVybWluZV9saW51eF92ZXJzaW9uKHNlbGYpOgogICAgICAgICAj
IEZJWE1FOiB3ZSBpZ25vcmUgd2hhdGV2ZXIgdGhlIHJlYWwgdmVyc2lvbiBpcyBhbmQgcHJldGVu
ZCBpdCdzIGx1Y2lkIGZvciBub3cuCiAgICAgICAgIHJldHVybiAnbHVjaWQnCiAKLSAgICBkZWYg
X2RldGVybWluZV93aW5fdmVyc2lvbihzZWxmLCB3aW5fdmVyc2lvbl90dXBsZSk6Ci0gICAgICAg
IGlmIHdpbl92ZXJzaW9uX3R1cGxlWzoyXSA9PSAoMCwgMCk6Ci0gICAgICAgICAgICBpZiB3aW5f
dmVyc2lvbl90dXBsZVsyXSA+IDEwMDAwOgorICAgIGRlZiBfZGV0ZXJtaW5lX3dpbl92ZXJzaW9u
KHNlbGYsIHdpbl92ZXJzaW9uKToKKyAgICAgICAgaWYgd2luX3ZlcnNpb24ubWFqb3IgPT0gMCBh
bmQgd2luX3ZlcnNpb24ubWlub3IgPT0gMDoKKyAgICAgICAgICAgIGlmIHdpbl92ZXJzaW9uWzJd
ID4gMTAwMDA6CiAgICAgICAgICAgICAgICAgcmV0dXJuICd3aW4xMCcKLSAgICAgICAgaWYgd2lu
X3ZlcnNpb25fdHVwbGVbOjNdID09ICg2LCAxLCA3NjAwKToKKyAgICAgICAgaWYgd2luX3ZlcnNp
b24gPT0gVmVyc2lvbihbNiwgMSwgNzYwMF0pOgogICAgICAgICAgICAgcmV0dXJuICc3c3AwJwot
ICAgICAgICBpZiB3aW5fdmVyc2lvbl90dXBsZVs6Ml0gPT0gKDYsIDApOgorICAgICAgICBpZiB3
aW5fdmVyc2lvbi5tYWpvciA9PSA2IGFuZCB3aW5fdmVyc2lvbi5taW5vciA9PSAwOgogICAgICAg
ICAgICAgcmV0dXJuICd2aXN0YScKLSAgICAgICAgaWYgd2luX3ZlcnNpb25fdHVwbGVbOjJdID09
ICg1LCAxKToKKyAgICAgICAgaWYgd2luX3ZlcnNpb24ubWFqb3IgPT0gNSBhbmQgd2luX3ZlcnNp
b24ubWlub3IgPT0gMToKICAgICAgICAgICAgIHJldHVybiAneHAnCi0gICAgICAgIGFzc2VydCB3
aW5fdmVyc2lvbl90dXBsZVswXSA+IDYgb3Igd2luX3ZlcnNpb25fdHVwbGVbMV0gPj0gMSwgJ1Vu
cmVjb2duaXplZCBXaW5kb3dzIHZlcnNpb24gdHVwbGU6ICIlcyInICUgKHdpbl92ZXJzaW9uX3R1
cGxlLCkKKyAgICAgICAgYXNzZXJ0IHdpbl92ZXJzaW9uWzBdID4gNiBvciB3aW5fdmVyc2lvblsx
XSA+PSAxLCAnVW5yZWNvZ25pemVkIFdpbmRvd3MgdmVyc2lvbjogInt9IicuZm9ybWF0KHdpbl92
ZXJzaW9uKQogICAgICAgICByZXR1cm4gJ2Z1dHVyZScKIAotICAgIGRlZiBfd2luX3ZlcnNpb25f
dHVwbGUoc2VsZiwgc3lzX21vZHVsZSk6CisgICAgZGVmIF93aW5fdmVyc2lvbihzZWxmLCBzeXNf
bW9kdWxlKToKICAgICAgICAgaWYgaGFzYXR0cihzeXNfbW9kdWxlLCAnZ2V0d2luZG93c3ZlcnNp
b24nKToKLSAgICAgICAgICAgIHJldHVybiBzeXNfbW9kdWxlLmdldHdpbmRvd3N2ZXJzaW9uKCkK
LSAgICAgICAgcmV0dXJuIHNlbGYuX3dpbl92ZXJzaW9uX3R1cGxlX2Zyb21fY21kKCkKLQotICAg
IGRlZiBfd2luX3ZlcnNpb25fdHVwbGVfZnJvbV9jbWQoc2VsZik6Ci0gICAgICAgICMgTm90ZSB0
aGF0IHRoaXMgc2hvdWxkIG9ubHkgZXZlciBiZSBjYWxsZWQgb24gd2luZG93cywgc28gdGhpcyBz
aG91bGQgYWx3YXlzIHdvcmsuCi0gICAgICAgIHZlcl9vdXRwdXQgPSBzZWxmLl9leGVjdXRpdmUu
cnVuX2NvbW1hbmQoWydjbWQnLCAnL2MnLCAndmVyJ10sIGRlY29kZV9vdXRwdXQ9RmFsc2UpCi0g
ICAgICAgIG1hdGNoX29iamVjdCA9IHJlLnNlYXJjaChyJyg/UDxtYWpvcj5cZClcLig/UDxtaW5v
cj5cZClcLig/UDxidWlsZD5cZCspJywgdmVyX291dHB1dCkKLSAgICAgICAgYXNzZXJ0IG1hdGNo
X29iamVjdCwgJ2NtZCByZXR1cm5lZCBhbiB1bmV4cGVjdGVkIHZlcnNpb24gc3RyaW5nOiAnICsg
dmVyX291dHB1dAotICAgICAgICByZXR1cm4gdHVwbGUobWFwKGludCwgbWF0Y2hfb2JqZWN0Lmdy
b3VwcygpKSkKKyAgICAgICAgICAgIHJldHVybiBWZXJzaW9uKHN5c19tb2R1bGUuZ2V0d2luZG93
c3ZlcnNpb24oKSkKKyAgICAgICAgcmV0dXJuIFZlcnNpb24oc2VsZi5fZXhlY3V0aXZlLnJ1bl9j
b21tYW5kKFsnY21kJywgJy9jJywgJ3ZlciddLCBkZWNvZGVfb3V0cHV0PUZhbHNlKSkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxh
dGZvcm1pbmZvX21vY2sucHkJKHJldmlzaW9uIDIyNDY0NykKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQkod29ya2luZyBjb3B5KQpA
QCAtMSw0ICsxLDUgQEAKICMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0yNiw2ICsyNyw3
IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCiAKIGNsYXNzIE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0
KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgb3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj0nc25v
d2xlb3BhcmQnKToKQEAgLTYxLDEwICs2MywxMCBAQCBjbGFzcyBNb2NrUGxhdGZvcm1JbmZvKG9i
amVjdCk6CiAgICAgICAgIHJldHVybiA4MAogCiAgICAgZGVmIHhjb2RlX3Nka192ZXJzaW9uKHNl
bGYsIHNka19uYW1lKToKLSAgICAgICAgcmV0dXJuICc4LjEnCisgICAgICAgIHJldHVybiBWZXJz
aW9uKCc4LjEnKQogCiAgICAgZGVmIHhjb2RlX3ZlcnNpb24oc2VsZik6Ci0gICAgICAgIHJldHVy
biAnOC4wJworICAgICAgICByZXR1cm4gVmVyc2lvbignOC4wJykKIAogICAgIGRlZiB4Y29kZV9z
aW1jdGxfbGlzdChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuZXhwZWN0ZWRfeGNvZGVfc2lt
Y3RsX2xpc3QKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2aXNpb24gMjI0
NjQ3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5
KQpAQCAtMjQsNiArMjQsNyBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHRyYWNlYmFjawogCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0
cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCiBm
cm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9hZGRpdGlvbnMKIGZyb20gd2Vi
a2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKQEAgLTEwOSwxMSArMTEwLDExIEBA
IGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbign
d2Via2l0X3Rlc3RfcnVubmVyJyk6CiAgICAgICAgICAgICB3a19zdHJpbmcgPSAnd2syJwogICAg
ICAgICBmYWxsYmFja19uYW1lcyA9IFsKLSAgICAgICAgICAgICd7fS17fS17fScuZm9ybWF0KHNl
bGYucG9ydF9uYW1lLCBzZWxmLmlvc192ZXJzaW9uKCkuc3BsaXQoJy4nKVswXSwgd2tfc3RyaW5n
KSwKLSAgICAgICAgICAgICd7fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1lLCBzZWxmLmlvc192
ZXJzaW9uKCkuc3BsaXQoJy4nKVswXSksCisgICAgICAgICAgICAne30te30te30nLmZvcm1hdChz
ZWxmLnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVyc2lvbigpLm1ham9yLCB3a19zdHJpbmcpLAorICAg
ICAgICAgICAgJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNpb24o
KS5tYWpvciksCiAgICAgICAgICAgICAne30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgd2tf
c3RyaW5nKSwKICAgICAgICAgICAgIHNlbGYucG9ydF9uYW1lLAotICAgICAgICAgICAgJ3t9LXt9
Jy5mb3JtYXQoSU9TUG9ydC5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5zcGxpdCgnLicp
WzBdKSwKKyAgICAgICAgICAgICd7fS17fScuZm9ybWF0KElPU1BvcnQucG9ydF9uYW1lLCBzZWxm
Lmlvc192ZXJzaW9uKCkubWFqb3IpLAogICAgICAgICAgICAgJ3t9LXt9Jy5mb3JtYXQoSU9TUG9y
dC5wb3J0X25hbWUsIHdrX3N0cmluZyksCiAgICAgICAgICAgICBJT1NQb3J0LnBvcnRfbmFtZSwK
ICAgICAgICAgXQpAQCAtMTM0LDIyICsxMzUsNiBAQCBjbGFzcyBJT1NQb3J0KERhcndpblBvcnQp
OgogICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9uc19maWxlX3Bvc2l0aW9uKHNlbGYpOgogICAgICAg
ICByZXR1cm4gNAogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfaXNfdmFsaWRfaW9zX3Zl
cnNpb24odmVyc2lvbl9pZGVudGlmaWVyKToKLSAgICAgICAgIyBFeGFtcGxlcyBvZiB2YWxpZCB2
ZXJzaW9uczogJzExJywgJzEwLjMnLCAnMTAuMy4xJwotICAgICAgICBpZiBub3QgdmVyc2lvbl9p
ZGVudGlmaWVyOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHNwbGl0X2J5X3Bl
cmlvZCA9IHZlcnNpb25faWRlbnRpZmllci5zcGxpdCgnLicpCi0gICAgICAgIGlmIGxlbihzcGxp
dF9ieV9wZXJpb2QpID4gMzoKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1
cm4gYWxsKHBhcnQuaXNkaWdpdCgpIGZvciBwYXJ0IGluIHNwbGl0X2J5X3BlcmlvZCkKLQotICAg
IGRlZiBnZXRfb3B0aW9uKHNlbGYsIG5hbWUsIGRlZmF1bHRfdmFsdWU9Tm9uZSk6Ci0gICAgICAg
IHJlc3VsdCA9IHN1cGVyKElPU1BvcnQsIHNlbGYpLmdldF9vcHRpb24obmFtZSwgZGVmYXVsdF92
YWx1ZSkKLSAgICAgICAgaWYgbmFtZSA9PSAndmVyc2lvbicgYW5kIHJlc3VsdCBhbmQgbm90IElP
U1BvcnQuX2lzX3ZhbGlkX2lvc192ZXJzaW9uKHJlc3VsdCk6Ci0gICAgICAgICAgICByYWlzZSBS
dW50aW1lRXJyb3IoJ3t9IGlzIGFuIGludmFsaWQgaU9TIHZlcnNpb24nLmZvcm1hdChyZXN1bHQp
KQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KICAgICBkZWYgaW9zX3ZlcnNpb24oc2VsZik6CiAg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIApJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkJKHJldmlzaW9uIDIyNDY0NykKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw3IEBAIGltcG9ydCBsb2dnaW5nCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVk
IGltcG9ydCBtZW1vaXplZAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBp
bXBvcnQgQ3Jhc2hMb2dzCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJz
aW9uCiBmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9hZGRpdGlvbnMKIGZy
b20gd2Via2l0cHkucG9ydC5pb3MgaW1wb3J0IElPU1BvcnQKIApAQCAtNjQsOCArNjUsNyBAQCBj
bGFzcyBJT1NEZXZpY2VQb3J0KElPU1BvcnQpOgogICAgICAgICAgICAgaXBob25lb3Nfc2RrX3Zl
cnNpb24gPSBob3N0LnBsYXRmb3JtLnhjb2RlX3Nka192ZXJzaW9uKGNscy5TREspCiAgICAgICAg
ICAgICBpZiBub3QgaXBob25lb3Nfc2RrX3ZlcnNpb246CiAgICAgICAgICAgICAgICAgcmFpc2Ug
RXhjZXB0aW9uKCJQbGVhc2UgaW5zdGFsbCB0aGUgaU9TIFNESy4iKQotICAgICAgICAgICAgbWFq
b3JfdmVyc2lvbl9udW1iZXIgPSBpcGhvbmVvc19zZGtfdmVyc2lvbi5zcGxpdCgnLicpWzBdCi0g
ICAgICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWUgKyAnLScgKyBtYWpvcl92ZXJzaW9uX251
bWJlcgorICAgICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lICsgJy0nICsgc3RyKGlwaG9u
ZW9zX3Nka192ZXJzaW9uLm1ham9yKQogICAgICAgICByZXR1cm4gcG9ydF9uYW1lCiAKICAgICBk
ZWYgcGF0aF90b19jcmFzaF9sb2dzKHNlbGYpOgpAQCAtOTQsNyArOTQsNyBAQCBjbGFzcyBJT1NE
ZXZpY2VQb3J0KElPU1BvcnQpOgogICAgIEBtZW1vaXplZAogICAgIGRlZiBpb3NfdmVyc2lvbihz
ZWxmKToKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd2ZXJzaW9uJyk6Ci0gICAgICAgICAg
ICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCd2ZXJzaW9uJykKKyAgICAgICAgICAgIHJldHVybiBW
ZXJzaW9uKHNlbGYuZ2V0X29wdGlvbigndmVyc2lvbicpKQogCiAgICAgICAgIGlmIG5vdCBhcHBs
ZV9hZGRpdGlvbnMoKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihzZWxmLk5PX09O
X0RFVklDRV9URVNUSU5HKQpAQCAtMTA5LDcgKzEwOSw3IEBAIGNsYXNzIElPU0RldmljZVBvcnQo
SU9TUG9ydCk6CiAgICAgICAgICAgICAgICAgaWYgZGV2aWNlLnBsYXRmb3JtLm9zX3ZlcnNpb24g
IT0gdmVyc2lvbjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdNdWx0
aXBsZSBjb25uZWN0ZWQgZGV2aWNlcyBoYXZlIGRpZmZlcmVudCBpT1MgdmVyc2lvbnMnKQogCi0g
ICAgICAgIHJldHVybiB2ZXJzaW9uCisgICAgICAgIHJldHVybiBWZXJzaW9uKHZlcnNpb24pCiAK
ICAgICAjIEZJWE1FOiBUaGVzZSBuZWVkIGRldmljZSBpbXBsZW1lbnRhdGlvbnMgPHJkYXI6Ly9w
cm9ibGVtLzMwNDk3OTkxPi4KICAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3Nf
bmFtZSwgcHJvY2Vzc19waWQpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lv
c19zaW11bGF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvc19zaW11bGF0b3IucHkJKHJldmlzaW9uIDIyNDY0NykKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBAIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBt
ZW1vaXplZAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2Ny
aXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZy
b20gd2Via2l0cHkucG9ydC5kZXZpY2UgaW1wb3J0IERldmljZQogZnJvbSB3ZWJraXRweS5wb3J0
LmlvcyBpbXBvcnQgSU9TUG9ydAogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0
IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQpAQCAtMTAyLDE2ICsxMDMsMTYgQEAgY2xh
c3MgSU9TU2ltdWxhdG9yUG9ydChJT1NQb3J0KToKICAgICAgICAgaWYgcnVudGltZV9pZGVudGlm
aWVyOgogICAgICAgICAgICAgcnVudGltZSA9IFJ1bnRpbWUuZnJvbV9pZGVudGlmaWVyKHJ1bnRp
bWVfaWRlbnRpZmllcikKICAgICAgICAgZWxpZiBzZWxmLmdldF9vcHRpb24oJ3ZlcnNpb24nKToK
LSAgICAgICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lLmZyb21fdmVyc2lvbl9zdHJpbmcoc2VsZi5n
ZXRfb3B0aW9uKCd2ZXJzaW9uJykpCisgICAgICAgICAgICBydW50aW1lID0gUnVudGltZS5mcm9t
X3ZlcnNpb24oVmVyc2lvbihzZWxmLmdldF9vcHRpb24oJ3ZlcnNpb24nKSkpCiAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBydW50aW1lID0gUnVudGltZS5mcm9tX3ZlcnNpb25fc3RyaW5nKHNl
bGYuaG9zdC5wbGF0Zm9ybS54Y29kZV9zZGtfdmVyc2lvbignaXBob25lc2ltdWxhdG9yJykpCisg
ICAgICAgICAgICBydW50aW1lID0gUnVudGltZS5mcm9tX3ZlcnNpb24oc2VsZi5ob3N0LnBsYXRm
b3JtLnhjb2RlX3Nka192ZXJzaW9uKCdpcGhvbmVzaW11bGF0b3InKSkKICAgICAgICAgcmV0dXJu
IHJ1bnRpbWUKIAogICAgIEBtZW1vaXplZAogICAgIGRlZiBpb3NfdmVyc2lvbihzZWxmKToKICAg
ICAgICAgcnVudGltZV9pZGVudGlmaWVyID0gc2VsZi5nZXRfb3B0aW9uKCdydW50aW1lJykKICAg
ICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd2ZXJzaW9uJyk6Ci0gICAgICAgICAgICByZXR1cm4g
c2VsZi5nZXRfb3B0aW9uKCd2ZXJzaW9uJykKKyAgICAgICAgICAgIHJldHVybiBWZXJzaW9uKHNl
bGYuZ2V0X29wdGlvbigndmVyc2lvbicpKQogICAgICAgICBpZiBydW50aW1lX2lkZW50aWZpZXI6
CiAgICAgICAgICAgICByZXR1cm4gJy4nLmpvaW4oc3RyKGkpIGZvciBpIGluIFJ1bnRpbWUuZnJv
bV9pZGVudGlmaWVyKHJ1bnRpbWVfaWRlbnRpZmllcikudmVyc2lvbikKICAgICAgICAgcmV0dXJu
IHNlbGYuaG9zdC5wbGF0Zm9ybS54Y29kZV9zZGtfdmVyc2lvbignaXBob25lc2ltdWxhdG9yJykK
QEAgLTE4Nyw3ICsxODgsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KElPU1BvcnQpOgogICAg
ICAgICAgICAgICAgIF9sb2cud2FybmluZygnVW5hYmxlIHRvIHJlbW92ZSBTaW11bGF0b3InICsg
c3RyKGkpKQogCiAgICAgZGVmIHVzZV9tdWx0aXBsZV9zaW11bGF0b3JfYXBwcyhzZWxmKToKLSAg
ICAgICAgcmV0dXJuIGludChzZWxmLmhvc3QucGxhdGZvcm0ueGNvZGVfdmVyc2lvbigpLnNwbGl0
KCcuJylbMF0pIDwgOQorICAgICAgICByZXR1cm4gaW50KHNlbGYuaG9zdC5wbGF0Zm9ybS54Y29k
ZV92ZXJzaW9uKCkubWFqb3IpIDwgOQogCiAgICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhzZWxm
KToKICAgICAgICAgaWYgKHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYuY2hp
bGRfcHJvY2Vzc2VzKCkpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11
bGF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11
bGF0b3IucHkJKHJldmlzaW9uIDIyNDY0NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNv
ZGUvc2ltdWxhdG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIGltcG9ydCB0
aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnRpbWVvdXRfY29udGV4dCBpbXBvcnQgVGltZW91
dAogZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5j
b21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
X19uYW1lX18pCiAKQEAgLTEyOSw4ICsxMzAsOCBAQCBjbGFzcyBSdW50aW1lKG9iamVjdCk6CiAg
ICAgICAgIHNlbGYuaXNfaW50ZXJuYWxfcnVudGltZSA9IGlzX2ludGVybmFsX3J1bnRpbWUKIAog
ICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmcm9tX3ZlcnNpb25fc3RyaW5nKGNscywgdmVyc2lv
bik6Ci0gICAgICAgIHJldHVybiBjbHMuZnJvbV9pZGVudGlmaWVyKCdjb20uYXBwbGUuQ29yZVNp
bXVsYXRvci5TaW1SdW50aW1lLmlPUy0nICsgdmVyc2lvbi5yZXBsYWNlKCcuJywgJy0nKSkKKyAg
ICBkZWYgZnJvbV92ZXJzaW9uKGNscywgdmVyc2lvbik6CisgICAgICAgIHJldHVybiBjbHMuZnJv
bV9pZGVudGlmaWVyKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy0nICsg
J3t9LXt9Jy5mb3JtYXQodmVyc2lvblswXSwgdmVyc2lvblsxXSkpCiAKICAgICBAY2xhc3NtZXRo
b2QKICAgICBkZWYgZnJvbV9pZGVudGlmaWVyKGNscywgaWRlbnRpZmllcik6CkBAIC0xNTYsNyAr
MTU3LDcgQEAgY2xhc3MgUnVudGltZShvYmplY3QpOgogICAgICAgICBpZiBzZWxmLmlzX2ludGVy
bmFsX3J1bnRpbWU6CiAgICAgICAgICAgICB2ZXJzaW9uX3N1ZmZpeCA9ICIgSW50ZXJuYWwiCiAg
ICAgICAgIHJldHVybiAnPFJ1bnRpbWUge3ZlcnNpb259OiB7aWRlbnRpZmllcn0uIEF2YWlsYWJs
ZToge2F2YWlsYWJsZX0sIHtudW1fZGV2aWNlc30gZGV2aWNlcz4nLmZvcm1hdCgKLSAgICAgICAg
ICAgIHZlcnNpb249Jy4nLmpvaW4obWFwKHN0ciwgc2VsZi52ZXJzaW9uKSkgKyB2ZXJzaW9uX3N1
ZmZpeCwKKyAgICAgICAgICAgIHZlcnNpb249c3RyKHNlbGYudmVyc2lvbikgKyB2ZXJzaW9uX3N1
ZmZpeCwKICAgICAgICAgICAgIGlkZW50aWZpZXI9c2VsZi5pZGVudGlmaWVyLAogICAgICAgICAg
ICAgYXZhaWxhYmxlPXNlbGYuYXZhaWxhYmxlLAogICAgICAgICAgICAgbnVtX2RldmljZXM9bGVu
KHNlbGYuZGV2aWNlcykpCkBAIC0zMzQsOCArMzM1LDcgQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVj
dCk6CiAgICAgICAgICAgICAgICAgaWYgbGluZSAhPSAnPT0gRGV2aWNlcyA9PSc6CiAgICAgICAg
ICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXhwZWN0ZWQgPT0gRGV2aWNlcyA9PSBo
ZWFkZXIgYnV0IGdvdDogInt9IicuZm9ybWF0KGxpbmUpKQogICAgICAgICAgICAgICAgIGJyZWFr
Ci0gICAgICAgICAgICB2ZXJzaW9uID0gdHVwbGUobWFwKGludCwgcnVudGltZV9tYXRjaC5ncm91
cCgndmVyc2lvbicpLnNwbGl0KCcuJykpKQotICAgICAgICAgICAgcnVudGltZSA9IFJ1bnRpbWUo
dmVyc2lvbj12ZXJzaW9uLAorICAgICAgICAgICAgcnVudGltZSA9IFJ1bnRpbWUodmVyc2lvbj1W
ZXJzaW9uKHJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ3ZlcnNpb24nKSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyPXJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ2lkZW50aWZpZXIn
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZT1ydW50aW1lX21hdGNo
Lmdyb3VwKCdhdmFpbGFiaWxpdHknKSBpcyBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXNfaW50ZXJuYWxfcnVudGltZT1ib29sKHJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ2ludGVy
bmFsJykpKQpAQCAtMzUzLDggKzM1Myw3IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAg
ICAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICAgICAgIHZlcnNpb25fbWF0Y2ggPSBzZWxm
LnZlcnNpb25fcmUubWF0Y2gobGluZSkKICAgICAgICAgICAgIGlmIHZlcnNpb25fbWF0Y2g6Ci0g
ICAgICAgICAgICAgICAgdmVyc2lvbiA9IHR1cGxlKG1hcChpbnQsIHZlcnNpb25fbWF0Y2guZ3Jv
dXAoJ3ZlcnNpb24nKS5zcGxpdCgnLicpKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50X3J1bnRp
bWUgPSBzZWxmLnJ1bnRpbWUodmVyc2lvbj12ZXJzaW9uLCBpc19pbnRlcm5hbF9ydW50aW1lPWJv
b2wodmVyc2lvbl9tYXRjaC5ncm91cCgnaW50ZXJuYWwnKSkpCisgICAgICAgICAgICAgICAgY3Vy
cmVudF9ydW50aW1lID0gc2VsZi5ydW50aW1lKHZlcnNpb249VmVyc2lvbih2ZXJzaW9uX21hdGNo
Lmdyb3VwKCd2ZXJzaW9uJykpLCBpc19pbnRlcm5hbF9ydW50aW1lPWJvb2wodmVyc2lvbl9tYXRj
aC5ncm91cCgnaW50ZXJuYWwnKSkpCiAgICAgICAgICAgICAgICAgYXNzZXJ0IGN1cnJlbnRfcnVu
dGltZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkveGNvZGUvc2ltdWxhdG9yX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjQ2
NDcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvcl91bml0dGVzdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yMyw2ICsyMyw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5j
b21tb24uaG9zdF9tb2NrIGltcG9ydCBNb2NrSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24udmVy
c2lvbiBpbXBvcnQgVmVyc2lvbgogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0
IFNpbXVsYXRvcgogCiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBBcHBsZSBUViAxMDgwcCAoNTUyODFB
QkUtOUMyNy00MzhCLUFENTAtCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2NvbS5hcHBsZS5D
b3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLTgtMCcsIHJ1bnRpbWVfaW9zXzguaWRlbnRpZmll
cikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBydW50aW1lX2lvc184LmF2YWlsYWJs
ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgcnVudGltZV9pb3NfOC5pc19pbnRl
cm5hbF9ydW50aW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKFs4LCAwXSksIHJ1
bnRpbWVfaW9zXzgudmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9uKFs4
LCAwXSksIHJ1bnRpbWVfaW9zXzgudmVyc2lvbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgx
MSwgbGVuKHJ1bnRpbWVfaW9zXzguZGV2aWNlcykpCiAKICAgICAgICAgZGV2aWNlX2lwaG9uZV80
cyA9IHJ1bnRpbWVfaW9zXzguZGV2aWNlc1swXQpAQCAtMjA3LDIxICsyMDgsMjEgQEAgQXBwbGUg
VFYgMTA4MHAgKDU1MjgxQUJFLTlDMjctNDM4Qi1BRDUwLQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy04LTAtSW50ZXJuYWwn
LCBydW50aW1lX2lvc184X2ludGVybmFsLmlkZW50aWZpZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoRmFsc2UsIHJ1bnRpbWVfaW9zXzhfaW50ZXJuYWwuYXZhaWxhYmxlKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKFRydWUsIHJ1bnRpbWVfaW9zXzhfaW50ZXJuYWwuaXNfaW50ZXJuYWxf
cnVudGltZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShbOCwgMF0pLCBydW50aW1l
X2lvc184X2ludGVybmFsLnZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVmVyc2lv
bihbOCwgMF0pLCBydW50aW1lX2lvc184X2ludGVybmFsLnZlcnNpb24pCiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMCwgbGVuKHJ1bnRpbWVfaW9zXzhfaW50ZXJuYWwuZGV2aWNlcykpCiAKICAg
ICAgICAgcnVudGltZV9pb3NfOF80ID0gc2ltdWxhdG9yLnJ1bnRpbWVzWzJdCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ2NvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLTgt
NCcsIHJ1bnRpbWVfaW9zXzhfNC5pZGVudGlmaWVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KFRydWUsIHJ1bnRpbWVfaW9zXzhfNC5hdmFpbGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoRmFsc2UsIHJ1bnRpbWVfaW9zXzhfNC5pc19pbnRlcm5hbF9ydW50aW1lKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHR1cGxlKFs4LCA0XSksIHJ1bnRpbWVfaW9zXzhfNC52ZXJzaW9uKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZlcnNpb24oWzgsIDRdKSwgcnVudGltZV9pb3NfOF80
LnZlcnNpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKHJ1bnRpbWVfaW9zXzhf
NC5kZXZpY2VzKSkKIAogICAgICAgICBydW50aW1lX3R2b3NfOSA9IHNpbXVsYXRvci5ydW50aW1l
c1szXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5T
aW1SdW50aW1lLnR2T1MtOS0wJywgcnVudGltZV90dm9zXzkuaWRlbnRpZmllcikKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChUcnVlLCBydW50aW1lX3R2b3NfOS5hdmFpbGFibGUpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIHJ1bnRpbWVfdHZvc185LmlzX2ludGVybmFsX3J1bnRp
bWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoWzksIDBdKSwgcnVudGltZV90dm9z
XzkudmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9uKFs5LCAwXSksIHJ1
bnRpbWVfdHZvc185LnZlcnNpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHJ1
bnRpbWVfdHZvc185LmRldmljZXMpKQogCiAgICAgICAgIGRldmljZV9hcHBsZV90dl8xMDgwcCA9
IHJ1bnRpbWVfdHZvc185LmRldmljZXNbMF0KQEAgLTIzNCwxNCArMjM1LDE0IEBAIEFwcGxlIFRW
IDEwODBwICg1NTI4MUFCRS05QzI3LTQzOEItQUQ1MC0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS53YXRjaE9TLTItMCcsIHJ1bnRp
bWVfd2F0Y2hvc18yLmlkZW50aWZpZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwg
cnVudGltZV93YXRjaG9zXzIuYXZhaWxhYmxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZh
bHNlLCBydW50aW1lX3dhdGNob3NfMi5pc19pbnRlcm5hbF9ydW50aW1lKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHR1cGxlKFsyLCAwXSksIHJ1bnRpbWVfd2F0Y2hvc18yLnZlcnNpb24pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVmVyc2lvbihbMiwgMF0pLCBydW50aW1lX3dhdGNob3Nf
Mi52ZXJzaW9uKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihydW50aW1lX3dhdGNo
b3NfMi5kZXZpY2VzKSkKIAogICAgICAgICBydW50aW1lX2lvc18xMCA9IHNpbXVsYXRvci5ydW50
aW1lc1s1XQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRv
ci5TaW1SdW50aW1lLmlPUy0xMC0wJywgcnVudGltZV9pb3NfMTAuaWRlbnRpZmllcikKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBydW50aW1lX2lvc18xMC5hdmFpbGFibGUpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIHJ1bnRpbWVfaW9zXzEwLmlzX2ludGVybmFsX3J1
bnRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoWzEwLCAwXSksIHJ1bnRpbWVf
aW9zXzEwLnZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVmVyc2lvbihbMTAsIDBd
KSwgcnVudGltZV9pb3NfMTAudmVyc2lvbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBs
ZW4ocnVudGltZV9pb3NfMTAuZGV2aWNlcykpCiAKICAgICAgICAgZGV2aWNlX2FwcGxlX3dhdGNo
XzM4bW0gPSBydW50aW1lX3dhdGNob3NfMi5kZXZpY2VzWzBdCkBAIC0zMTUsNyArMzE2LDcgQEAg
aU9TIDguMCBJbnRlcm5hbCAoOC4wIC0gVW5rbm93bikgKGNvbS5hcAogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50aW1lLmlPUy04LTAnLCBy
dW50aW1lX2lvc184LmlkZW50aWZpZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwg
cnVudGltZV9pb3NfOC5hdmFpbGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2Us
IHJ1bnRpbWVfaW9zXzguaXNfaW50ZXJuYWxfcnVudGltZSkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCh0dXBsZShbOCwgMF0pLCBydW50aW1lX2lvc184LnZlcnNpb24pCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoVmVyc2lvbihbOCwgMF0pLCBydW50aW1lX2lvc184LnZlcnNpb24pCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHJ1bnRpbWVfaW9zXzguZGV2aWNlcykpCiAKICAg
ICAgICAgZGV2aWNlX2lwaG9uZV80cyA9IHJ1bnRpbWVfaW9zXzguZGV2aWNlc1swXQpAQCAtMzI4
LDcgKzMyOSw3IEBAIGlPUyA4LjAgSW50ZXJuYWwgKDguMCAtIFVua25vd24pIChjb20uYXAKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGlt
ZS5pT1MtOC0wLUludGVybmFsJywgcnVudGltZV9pb3NfOF9pbnRlcm5hbC5pZGVudGlmaWVyKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBydW50aW1lX2lvc184X2ludGVybmFsLmF2
YWlsYWJsZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBydW50aW1lX2lvc184X2lu
dGVybmFsLmlzX2ludGVybmFsX3J1bnRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVw
bGUoWzgsIDBdKSwgcnVudGltZV9pb3NfOF9pbnRlcm5hbC52ZXJzaW9uKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKFZlcnNpb24oWzgsIDBdKSwgcnVudGltZV9pb3NfOF9pbnRlcm5hbC52ZXJz
aW9uKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihydW50aW1lX2lvc184X2ludGVy
bmFsLmRldmljZXMpKQogCiAgICAgZGVmIHRlc3RfZGV2aWNlX3BhaXJzKHNlbGYpOgpAQCAtMzU2
LDcgKzM1Nyw3IEBAIGlPUyA4LjAgSW50ZXJuYWwgKDguMCAtIFVua25vd24pIChjb20uYXAKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGlt
ZS5pT1MtOC0wJywgcnVudGltZV9pb3NfOC5pZGVudGlmaWVyKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKFRydWUsIHJ1bnRpbWVfaW9zXzguYXZhaWxhYmxlKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKEZhbHNlLCBydW50aW1lX2lvc184LmlzX2ludGVybmFsX3J1bnRpbWUpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoWzgsIDBdKSwgcnVudGltZV9pb3NfOC52ZXJzaW9uKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZlcnNpb24oWzgsIDBdKSwgcnVudGltZV9pb3NfOC52
ZXJzaW9uKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihydW50aW1lX2lvc184LmRl
dmljZXMpKQogCiAgICAgICAgIGRldmljZV9pcGhvbmVfNHMgPSBydW50aW1lX2lvc184LmRldmlj
ZXNbMF0K
</data>

          </attachment>
      

    </bug>

</bugzilla>