<?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>168332</bug_id>
          
          <creation_ts>2017-02-14 13:26:46 -0800</creation_ts>
          <short_desc>webkitpy: Refactor Device class</short_desc>
          <delta_ts>2017-02-21 13:15:36 -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>
          
          
          <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>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</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>1276897</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-14 13:26:46 -0800</bug_when>
    <thetext>Differentiate between a simulated device and an abstract device.  Move the simulated device out of the Simulator.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276898</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-02-14 13:27:58 -0800</bug_when>
    <thetext>&lt;rdar://problem/30519212&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276902</commentid>
    <comment_count>2</comment_count>
      <attachid>301540</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-14 13:30:03 -0800</bug_when>
    <thetext>Created attachment 301540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279031</commentid>
    <comment_count>3</comment_count>
      <attachid>301540</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2017-02-20 12:48:12 -0800</bug_when>
    <thetext>Comment on attachment 301540
Patch

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

Looks good, mostly a refactor. Update the copyright notices and if all tests pass EWS then unofficial r=me. Still need an official r=me from a WebKit reviewer though.

&gt; Tools/Scripts/webkitpy/xcode/device.py:1
&gt; +# Copyright (C) 2014, 2015 Apple Inc. All rights reserved.

Add 2017 here.

&gt; Tools/Scripts/webkitpy/xcode/device.py:25
&gt; +

Nit: Add a docstring or remove this line.

&gt; Tools/Scripts/webkitpy/xcode/simulated_device.py:1
&gt; +# Copyright (C) 2014, 2015 Apple Inc. All rights reserved.

Add 2017 here.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:191
&gt; +            Simulator.Device = SimulatedDevice

I don&apos;t like this, but talking with Jonathan in-person it sounds like the SimulatedDevice::shutdown method uses Simulator, which causes this circular dependency. We should fix this for the future, but it should not block the landing of this patch since this patch organizes the Device/Simulator class hierarchy more logically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279045</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-02-20 13:49:02 -0800</bug_when>
    <thetext>Can you elaborate on the need to move the simctl classes to sinulated_device.py as opposed to leaving them in simulator.py?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279053</commentid>
    <comment_count>5</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-20 14:22:44 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Can you elaborate on the need to move the simctl classes to
&gt; sinulated_device.py as opposed to leaving them in simulator.py?

This is not a requirement for the code to work, but I feel that it makes the code more clear.

A SimulatedDevice is distinctly different from the Simulator class which is managing all SimulatedDevices.  The addition of on-device testing means that the Device class is relevant beyond just a UDID, which is currently how classes outside of the Simulator file interact with devices.  An impending change which is dependent on this patch moves management of Devices from iOSSimulatorPort to the iOSPort, where devices are managed as a class instead of as a UDID, and demonstrates that conceptually, the SimulatedDevice stands separate from the Simulator class.

Unfortunately, this is at odds with the current implementation of the Device class in Simulator.py, which depends on unbound methods defined in the Simulator class.  This is the reason for some of the strange imports in Simulator.py.  Eventually, the SimulatedDevice will not depend on Simulator.py and will implement some of Simulator.py&apos;s device specific unbound methods with it&apos;s own bound methods attached to an instance of a device.  Rather than cloud this refactor with those changes, I opted to make this change about the Device/SimulatedDevice relationship.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279091</commentid>
    <comment_count>6</comment_count>
      <attachid>302185</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-20 15:48:58 -0800</bug_when>
    <thetext>Created attachment 302185
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279371</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-02-21 09:28:39 -0800</bug_when>
    <thetext>Here are a couple thoughts that I have about how simulator related code could be designed nicer.

- I think that code that does &quot;simctl list&quot; doesn&apos;t need to be in the same class as code that manipulates simulators.
- As we move to JSON, the list would be basically unwrapped JSON, plus some code to refresh/cache/update the state.
- Manipulation that deals with individual devices should be in Device classes.

So I think that this is going in the right direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279373</commentid>
    <comment_count>8</comment_count>
      <attachid>302185</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-02-21 09:32:39 -0800</bug_when>
    <thetext>Comment on attachment 302185
Patch

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

&gt; Tools/Scripts/webkitpy/xcode/device.py:33
&gt; +    def launch_app(self, bundle_id, args, env=None, attempts=3):

attempts=3 seems out of place here, it&apos;s an implementation detail that would be different for subclasses.

&gt; Tools/Scripts/webkitpy/xcode/simulated_device.py:1
&gt; +# Copyright (C) 2014, 2015, 2016, 2017 Apple Inc. All rights reserved.

2014-2017

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:1
&gt; +# Copyright (C) 2014, 2015, 2016, 2017 Apple Inc. All rights reserved.

2014-2017

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:185
&gt; +    Device = None

Is this line needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279450</commentid>
    <comment_count>9</comment_count>
      <attachid>302185</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-21 11:31:35 -0800</bug_when>
    <thetext>Comment on attachment 302185
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/xcode/simulator.py:185
&gt;&gt; +    Device = None
&gt; 
&gt; Is this line needed?

Yes, it is.  I believe it&apos;s since I test it before setting so that we don&apos;t import more than we need to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279451</commentid>
    <comment_count>10</comment_count>
      <attachid>302290</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-21 11:34:22 -0800</bug_when>
    <thetext>Created attachment 302290
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279493</commentid>
    <comment_count>11</comment_count>
      <attachid>302290</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-21 13:05:41 -0800</bug_when>
    <thetext>Comment on attachment 302290
Patch

Clearing flags on attachment: 302290

Committed r212741: &lt;http://trac.webkit.org/changeset/212741&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279494</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-21 13:05:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279497</commentid>
    <comment_count>13</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-21 13:15:36 -0800</bug_when>
    <thetext>As an additional note, rdar://problem/30638036 will track the refactoring discussed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301540</attachid>
            <date>2017-02-14 13:30:03 -0800</date>
            <delta_ts>2017-02-20 15:48:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168332-20170214132729.patch</filename>
            <type>text/plain</type>
            <size>64763</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMjMxNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQyIEBACisyMDE3LTAyLTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUmVmYWN0b3IgRGV2aWNlIGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjgzMzIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZXBhcmF0ZSB0aGUgbW9yZSBz
cGVjaWZpYyBTaW11bGF0ZWREZXZpY2UgZnJvbSB0aGUgYWJzdHJhY3QKKyAgICAgICAgaWRlYSBv
ZiBhIGRldmljZS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvZGV2aWNlLnB5
OiBBZGRlZC4KKyAgICAgICAgKERldmljZSk6ICBCYXNlIGRldmljZSBjbGFzcy4KKyAgICAgICAg
KERldmljZS5fX2luaXRfXyk6IEluaXRpYWxpemUgX2hvc3QsIG5hbWUgYW5kIHVkaWQuCisgICAg
ICAgIChEZXZpY2UuaW5zdGFsbF9hcHApOiBGdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAgICAgICAg
KERldmljZS5sYXVuY2hfYXBwKTogRGl0dG8uCisgICAgICAgIChEZXZpY2UuX19lcV9fKTogQ29t
cGFyZSB0d28gZGV2aWNlcyBieSB1ZGlkLgorICAgICAgICAoRGV2aWNlLl9fbmVfXyk6IERpdHRv
LgorICAgICAgICAoRGV2aWNlLl9fcmVwcl9fKTogUmV0dXJuIGRldmljZSBuYW1lIGFuZCB1ZGlk
IGluIGZvcm1hdHRlZCBzdHJpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9z
aW11bGF0ZWRfZGV2aWNlLnB5OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hj
b2RlL3NpbXVsYXRvci5weS4KKyAgICAgICAgKFNpbXVsYXRlZERldmljZSk6CisgICAgICAgIChT
aW11bGF0ZWREZXZpY2UuX19pbml0X18pOiBDYWxsIERldmljZS5fX2luaXRfXyBmaXJzdC4KKyAg
ICAgICAgKFNpbXVsYXRlZERldmljZS5kZWxldGUpOiBEZXZpY2UgLT4gU2ltdWxhdGVkRGV2aWNl
LgorICAgICAgICAoU2ltdWxhdGVkRGV2aWNlLnJlc2V0KTogRGl0dG8uCisgICAgICAgIChTaW11
bGF0ZWREZXZpY2UuX19lcV9fKTogTW92ZWQgdG8gZGV2aWNlLnB5LgorICAgICAgICAoU2ltdWxh
dGVkRGV2aWNlLl9fbmVfXyk6IERpdHRvLgorICAgICAgICAoU2ltdWxhdGVkRGV2aWNlLl9fcmVw
cl9fKTogQ2FsbCBEZXZpY2UgX19yZXByX18gZmlyc3QuCisgICAgICAgIChEZXZpY2VUeXBlKTog
S2VwdCBpbiBTY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weS4KKyAgICAgICAgKFJ1
bnRpbWUpOiBLZXB0IGluIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5LgorICAg
ICAgICAoRGV2aWNlKTogUmVuYW1lZCBTaW11bGF0ZWREZXZpY2UuCisgICAgICAgIChTaW11bGF0
b3IpOiBLZXB0IGluIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5LgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5OgorICAgICAgICAoU2ltdWxh
dG9yKTogRGVmaW5lIFNpbXVsYXRvci5EZXZpY2UgY2xhc3MgYXMgTm9uZS4KKyAgICAgICAgKFNp
bXVsYXRvci5fX2luaXRfXyk6IEltcG9ydCBTaW11bGF0ZWREZXZpY2UgYXMgU2ltdWxhdG9yLkRl
dmljZS4KKyAgICAgICAgKFNpbXVsYXRvci5kZWxldGVfZGV2aWNlKTogVXNlIFNpbXVsYXRvci5E
ZXZpY2UuCisgICAgICAgIChTaW11bGF0b3IucmVzZXRfZGV2aWNlKTogRGl0dG8uCisgICAgICAg
IChTaW11bGF0b3IuX3BhcnNlX2RldmljZXMpOiBEaXR0by4KKyAgICAgICAgKFNpbXVsYXRvci5s
b29rdXBfb3JfY3JlYXRlX2RldmljZSk6IE1ha2UgCisgICAgICAgIChEZXZpY2UpOiBNb3ZlZCB0
byBzaW11bGF0ZWRfZGV2aWNlIGFzIFNpbXVsYXRlZERldmljZS4KKwogMjAxNy0wMi0xNCAgSm9u
YXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBi
dWlsZC1maXggYWZ0ZXIgcjIxMjI5Ny4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNv
ZGUvZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUv
ZGV2aWNlLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUv
ZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitjbGFzcyBEZXZpY2Uob2JqZWN0KToK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1ZGlkLCBob3N0KToKKyAgICAgICAgc2Vs
Zi5faG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLnVk
aWQgPSB1ZGlkCisKKyAgICBkZWYgaW5zdGFsbF9hcHAoc2VsZiwgYXBwX3BhdGgsIGVudj1Ob25l
KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGxhdW5jaF9h
cHAoc2VsZiwgYnVuZGxlX2lkLCBhcmdzLCBlbnY9Tm9uZSwgYXR0ZW1wdHM9Myk6CisgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIp
OgorICAgICAgICByZXR1cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQKKworICAgIGRlZiBfX25l
X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX19lcV9fKG90aGVyKQor
CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ0RldmljZSAie25hbWV9
Ijoge3VkaWR9LicuZm9ybWF0KAorICAgICAgICAgICAgbmFtZT1zZWxmLm5hbWUsCisgICAgICAg
ICAgICB1ZGlkPXNlbGYudWRpZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUv
c2ltdWxhdGVkX2RldmljZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3hjb2RlL3NpbXVsYXRlZF9kZXZpY2UucHkJKHJldmlzaW9uIDIxMjMwNSkJKGZyb20gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6MjEyMzA1KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0ZWRfZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjc3IEBACisjIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9y
dCBwbGlzdGxpYgoraW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKKwor
ZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLnV0aWxzIGltcG9ydCB0aW1lb3V0Citmcm9t
IHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0CisKK19sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKKworIiIiCitNaW5pbWFsbHkgd3JhcHMgQ29yZVNpbXVsYXRvciBmdW5j
dGlvbmFsaXR5IHRocm91Z2ggc2ltY3RsLgorCitJZiBwb3NzaWJsZSwgdXNlIHJlYWwgQ29yZVNp
bXVsYXRvci5mcmFtZXdvcmsgZnVuY3Rpb25hbGl0eSBieSBsaW5raW5nIHRvIHRoZSBmcmFtZXdv
cmsgaXRzZWxmLgorRG8gbm90IHVzZSBQeU9iakMgdG8gZGxvcGVuIHRoZSBmcmFtZXdvcmsuCisi
IiIKKworCitjbGFzcyBEZXZpY2VUeXBlKG9iamVjdCk6CisgICAgIiIiCisgICAgUmVwcmVzZW50
cyBhIENvcmVTaW11bGF0b3IgZGV2aWNlIHR5cGUuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG5hbWUsIGlkZW50aWZpZXIpOgorICAgICAgICAiIiIKKyAgICAgICAgOnBhcmFtIG5h
bWU6IFRoZSBkZXZpY2UgdHlwZSdzIGh1bWFuLXJlYWRhYmxlIG5hbWUKKyAgICAgICAgOnR5cGUg
bmFtZTogc3RyCisgICAgICAgIDpwYXJhbSBpZGVudGlmaWVyOiBUaGUgQ29yZVNpbXVsYXRvciBp
ZGVudGlmaWVyLgorICAgICAgICA6dHlwZSBpZGVudGlmaWVyOiBzdHIKKyAgICAgICAgIiIiCisg
ICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5pZGVudGlmaWVyID0gaWRlbnRp
ZmllcgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fbmFtZShjbHMsIG5hbWUpOgor
ICAgICAgICAiIiIKKyAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIGZvciB0aGUgZGVzaXJl
ZCBkZXZpY2UgdHlwZS4KKyAgICAgICAgOnR5cGUgbmFtZTogc3RyCisgICAgICAgIDpyZXR1cm5z
OiBBIGBEZXZpY2VUeXBlYCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGlkZW50aWZpZXIgb3Ig
dGhyb3dzIGEgVHlwZUVycm9yIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisgICAgICAgIDpydHlwZTog
RGV2aWNlVHlwZQorICAgICAgICAiIiIKKyAgICAgICAgaWRlbnRpZmllciA9IE5vbmUKKyAgICAg
ICAgZm9yIGRldmljZV90eXBlIGluIFNpbXVsYXRvcigpLmRldmljZV90eXBlczoKKyAgICAgICAg
ICAgIGlmIGRldmljZV90eXBlLm5hbWUgPT0gbmFtZToKKyAgICAgICAgICAgICAgICBpZGVudGlm
aWVyID0gZGV2aWNlX3R5cGUuaWRlbnRpZmllcgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAg
ICAgICAgaWYgaWRlbnRpZmllciBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9y
KCdBIGRldmljZSB0eXBlIHdpdGggbmFtZSAie25hbWV9IiBkb2VzIG5vdCBleGlzdC4nLmZvcm1h
dChuYW1lPW5hbWUpKQorCisgICAgICAgIHJldHVybiBEZXZpY2VUeXBlKG5hbWUsIGlkZW50aWZp
ZXIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9pZGVudGlmaWVyKGNscywgaWRl
bnRpZmllcik6CisgICAgICAgICIiIgorICAgICAgICA6cGFyYW0gaWRlbnRpZmllcjogVGhlIENv
cmVTaW11bGF0b3IgaWRlbnRpZmllciBmb3IgdGhlIGRlc2lyZWQgcnVudGltZS4KKyAgICAgICAg
OnR5cGUgaWRlbnRpZmllcjogc3RyCisgICAgICAgIDpyZXR1cm5zOiBBIGBSdW50aW1lYCBvYmpl
Y3Qgd2l0aHQgdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIG9yIHRocm93cyBhIFR5cGVFcnJvciBp
ZiBpdCBkb2Vzbid0IGV4aXN0LgorICAgICAgICA6cnR5cGU6IERldmljZVR5cGUKKyAgICAgICAg
IiIiCisgICAgICAgIG5hbWUgPSBOb25lCisgICAgICAgIGZvciBkZXZpY2VfdHlwZSBpbiBTaW11
bGF0b3IoKS5kZXZpY2VfdHlwZXM6CisgICAgICAgICAgICBpZiBkZXZpY2VfdHlwZS5pZGVudGlm
aWVyID09IGlkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgbmFtZSA9IGRldmljZV90eXBlLm5h
bWUKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKKyAg
ICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQSBkZXZpY2UgdHlwZSB3aXRoIGlkZW50aWZpZXIg
IntpZGVudGlmaWVyfSIgZG9lcyBub3QgZXhpc3QuJy5mb3JtYXQoCisgICAgICAgICAgICAgICAg
aWRlbnRpZmllcj1pZGVudGlmaWVyKSkKKworICAgICAgICByZXR1cm4gRGV2aWNlVHlwZShuYW1l
LCBpZGVudGlmaWVyKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJl
dHVybiAoc2VsZi5uYW1lID09IG90aGVyLm5hbWUpIGFuZCAoc2VsZi5pZGVudGlmaWVyID09IG90
aGVyLmlkZW50aWZpZXIpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAg
cmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToK
KyAgICAgICAgcmV0dXJuICc8RGV2aWNlVHlwZSAie25hbWV9Ijoge2lkZW50aWZpZXJ9PicuZm9y
bWF0KG5hbWU9c2VsZi5uYW1lLCBpZGVudGlmaWVyPXNlbGYuaWRlbnRpZmllcikKKworCitjbGFz
cyBSdW50aW1lKG9iamVjdCk6CisgICAgIiIiCisgICAgUmVwcmVzZW50cyBhIENvcmVTaW11bGF0
b3IgcnVudGltZSBhc3NvY2lhdGVkIHdpdGggYW4gaU9TIFNESy4KKyAgICAiIiIKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCB2ZXJzaW9uLCBpZGVudGlmaWVyLCBhdmFpbGFibGUsIGRldmljZXM9
Tm9uZSwgaXNfaW50ZXJuYWxfcnVudGltZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICA6
cGFyYW0gdmVyc2lvbjogVGhlIGlPUyBTREsgdmVyc2lvbgorICAgICAgICA6dHlwZSB2ZXJzaW9u
OiB0dXBsZQorICAgICAgICA6cGFyYW0gaWRlbnRpZmllcjogVGhlIENvcmVTaW11bGF0b3IgcnVu
dGltZSBpZGVudGlmaWVyCisgICAgICAgIDp0eXBlIGlkZW50aWZpZXI6IHN0cgorICAgICAgICA6
cGFyYW0gYXZhaWxhYmlsaXR5OiBXaGV0aGVyIHRoZSBydW50aW1lIGlzIGF2YWlsYWJsZSBmb3Ig
dXNlLgorICAgICAgICA6dHlwZSBhdmFpbGFiaWxpdHk6IGJvb2wKKyAgICAgICAgOnBhcmFtIGRl
dmljZXM6IEEgbGlzdCBvZiBkZXZpY2VzIHVuZGVyIHRoaXMgcnVudGltZQorICAgICAgICA6dHlw
ZSBkZXZpY2VzOiBsaXN0IG9yIE5vbmUKKyAgICAgICAgOnBhcmFtIGlzX2ludGVybmFsX3J1bnRp
bWU6IFdoZXRoZXIgdGhlIHJ1bnRpbWUgaXMgYW4gQXBwbGUgaW50ZXJuYWwgcnVudGltZQorICAg
ICAgICA6dHlwZSBpc19pbnRlcm5hbF9ydW50aW1lOiBib29sCisgICAgICAgICIiIgorICAgICAg
ICBzZWxmLnZlcnNpb24gPSB2ZXJzaW9uCisgICAgICAgIHNlbGYuaWRlbnRpZmllciA9IGlkZW50
aWZpZXIKKyAgICAgICAgc2VsZi5hdmFpbGFibGUgPSBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5k
ZXZpY2VzID0gZGV2aWNlcyBvciBbXQorICAgICAgICBzZWxmLmlzX2ludGVybmFsX3J1bnRpbWUg
PSBpc19pbnRlcm5hbF9ydW50aW1lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV92
ZXJzaW9uX3N0cmluZyhjbHMsIHZlcnNpb24pOgorICAgICAgICByZXR1cm4gY2xzLmZyb21faWRl
bnRpZmllcignY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS5pT1MtJyArIHZlcnNp
b24ucmVwbGFjZSgnLicsICctJykpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9p
ZGVudGlmaWVyKGNscywgaWRlbnRpZmllcik6CisgICAgICAgICIiIgorICAgICAgICA6cGFyYW0g
aWRlbnRpZmllcjogVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBkZXNpcmVkIENvcmVTaW11bGF0b3Ig
cnVudGltZS4KKyAgICAgICAgOnR5cGUgaWRlbnRpZmllcjogc3RyCisgICAgICAgIDpyZXR1cm5z
OiBBIGBSdW50aW1lYCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGlkZW50aWZpZXIgb3IgdGhy
b3dzIGEgVHlwZUVycm9yIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisgICAgICAgIDpydHlwZTogUnVu
dGltZQorICAgICAgICAiIiIKKyAgICAgICAgZm9yIHJ1bnRpbWUgaW4gU2ltdWxhdG9yKCkucnVu
dGltZXM6CisgICAgICAgICAgICBpZiBydW50aW1lLmlkZW50aWZpZXIgPT0gaWRlbnRpZmllcjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gcnVudGltZQorICAgICAgICByYWlzZSBUeXBlRXJyb3Io
J0EgcnVudGltZSB3aXRoIGlkZW50aWZpZXIgIntpZGVudGlmaWVyfSIgZG9lcyBub3QgZXhpc3Qu
Jy5mb3JtYXQoaWRlbnRpZmllcj1pZGVudGlmaWVyKSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwg
b3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYudmVyc2lvbiA9PSBvdGhlci52ZXJzaW9uKSBh
bmQgKHNlbGYuaWRlbnRpZmllciA9PSBvdGhlci5pZGVudGlmaWVyKSBhbmQgKHNlbGYuaXNfaW50
ZXJuYWxfcnVudGltZSA9PSBvdGhlci5pc19pbnRlcm5hbF9ydW50aW1lKQorCisgICAgZGVmIF9f
bmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIp
CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHZlcnNpb25fc3VmZml4ID0gIiIK
KyAgICAgICAgaWYgc2VsZi5pc19pbnRlcm5hbF9ydW50aW1lOgorICAgICAgICAgICAgdmVyc2lv
bl9zdWZmaXggPSAiIEludGVybmFsIgorICAgICAgICByZXR1cm4gJzxSdW50aW1lIHt2ZXJzaW9u
fToge2lkZW50aWZpZXJ9LiBBdmFpbGFibGU6IHthdmFpbGFibGV9LCB7bnVtX2RldmljZXN9IGRl
dmljZXM+Jy5mb3JtYXQoCisgICAgICAgICAgICB2ZXJzaW9uPScuJy5qb2luKG1hcChzdHIsIHNl
bGYudmVyc2lvbikpICsgdmVyc2lvbl9zdWZmaXgsCisgICAgICAgICAgICBpZGVudGlmaWVyPXNl
bGYuaWRlbnRpZmllciwKKyAgICAgICAgICAgIGF2YWlsYWJsZT1zZWxmLmF2YWlsYWJsZSwKKyAg
ICAgICAgICAgIG51bV9kZXZpY2VzPWxlbihzZWxmLmRldmljZXMpKQorCisKK2NsYXNzIERldmlj
ZShvYmplY3QpOgorICAgICIiIgorICAgIFJlcHJlc2VudHMgYSBDb3JlU2ltdWxhdG9yIGRldmlj
ZSB1bmRlcm5lYXRoIGEgcnVudGltZQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IG5hbWUsIHVkaWQsIGF2YWlsYWJsZSwgcnVudGltZSwgaG9zdCk6CisgICAgICAgICIiIgorICAg
ICAgICA6cGFyYW0gbmFtZTogVGhlIGRldmljZSBuYW1lCisgICAgICAgIDp0eXBlIG5hbWU6IHN0
cgorICAgICAgICA6cGFyYW0gdWRpZDogVGhlIGRldmljZSBVRElEIChhIFVVSUQgc3RyaW5nKQor
ICAgICAgICA6dHlwZSB1ZGlkOiBzdHIKKyAgICAgICAgOnBhcmFtIGF2YWlsYWJsZTogV2hldGhl
ciB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSBmb3IgdXNlLgorICAgICAgICA6dHlwZSBhdmFpbGFi
bGU6IGJvb2wKKyAgICAgICAgOnBhcmFtIHJ1bnRpbWU6IFRoZSBpT1MgU2ltdWxhdG9yIHJ1bnRp
bWUgdGhhdCBob3N0cyB0aGlzIGRldmljZQorICAgICAgICA6dHlwZSBydW50aW1lOiBSdW50aW1l
CisgICAgICAgIDpwYXJhbSBob3N0OiBUaGUgaG9zdCB3aGljaCBjYW4gcnVuIGNvbW1hbmQgbGlu
ZSBjb21tYW5kcworICAgICAgICA6dHlwZSBob3N0OiBIb3N0CisgICAgICAgICIiIgorICAgICAg
ICBzZWxmLl9ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNl
bGYudWRpZCA9IHVkaWQKKyAgICAgICAgc2VsZi5hdmFpbGFibGUgPSBhdmFpbGFibGUKKyAgICAg
ICAgc2VsZi5ydW50aW1lID0gcnVudGltZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN0YXRl
KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgOnJldHVybnM6IFRoZSBjdXJyZW50IHN0YXRl
IG9mIHRoZSBkZXZpY2UuCisgICAgICAgIDpydHlwZTogU2ltdWxhdG9yLkRldmljZVN0YXRlCisg
ICAgICAgICIiIgorICAgICAgICByZXR1cm4gU2ltdWxhdG9yLmRldmljZV9zdGF0ZShzZWxmLnVk
aWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGF0aChzZWxmKToKKyAgICAgICAgIiIiCisg
ICAgICAgIDpyZXR1cm5zOiBUaGUgZmlsZXN5c3RlbSBwYXRoIHRoYXQgY29udGFpbnMgdGhlIHNp
bXVsYXRvciBkZXZpY2UncyBkYXRhLgorICAgICAgICA6cnR5cGU6IHN0cgorICAgICAgICAiIiIK
KyAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5kZXZpY2VfZGlyZWN0b3J5KHNlbGYudWRpZCkKKwor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjcmVhdGUoY2xzLCBuYW1lLCBkZXZpY2VfdHlwZSwg
cnVudGltZSk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgYSBuZXcgQ29yZVNpbXVsYXRv
ciBkZXZpY2UuCisgICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgZGV2aWNlLgor
ICAgICAgICA6dHlwZSBuYW1lOiBzdHIKKyAgICAgICAgOnBhcmFtIGRldmljZV90eXBlOiBUaGUg
Q29yZVNpbXVsYXRvcnQgZGV2aWNlIHR5cGUuCisgICAgICAgIDp0eXBlIGRldmljZV90eXBlOiBE
ZXZpY2VUeXBlCisgICAgICAgIDpwYXJhbSBydW50aW1lOiAgVGhlIENvcmVTaW11YWx0b3IgcnVu
dGltZS4KKyAgICAgICAgOnR5cGUgcnVudGltZTogUnVudGltZQorICAgICAgICA6cmV0dXJuOiBU
aGUgbmV3IGRldmljZSBvciByYWlzZXMgYSBDYWxsZWRQcm9jZXNzRXJyb3IgaWYgYGBzaW1jdGwg
Y3JlYXRlYGAgZmFpbGVkLgorICAgICAgICA6cnR5cGU6IERldmljZQorICAgICAgICAiIiIKKyAg
ICAgICAgZGV2aWNlX3VkaWQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ3hjcnVuJywgJ3Np
bWN0bCcsICdjcmVhdGUnLCBuYW1lLCBkZXZpY2VfdHlwZS5pZGVudGlmaWVyLCBydW50aW1lLmlk
ZW50aWZpZXJdKS5yc3RyaXAoKQorICAgICAgICBfbG9nLmRlYnVnKCcieGNydW4gc2ltY3RsIGNy
ZWF0ZSAlcyAlcyAlcyIgcmV0dXJuZWQgJXMnLCBuYW1lLCBkZXZpY2VfdHlwZS5pZGVudGlmaWVy
LCBydW50aW1lLmlkZW50aWZpZXIsIGRldmljZV91ZGlkKQorICAgICAgICBTaW11bGF0b3Iud2Fp
dF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUoZGV2aWNlX3VkaWQsIFNpbXVsYXRvci5EZXZpY2VT
dGF0ZS5TSFVURE9XTikKKyAgICAgICAgcmV0dXJuIFNpbXVsYXRvcigpLmZpbmRfZGV2aWNlX2J5
X3VkaWQoZGV2aWNlX3VkaWQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2h1dGRvd24o
Y2xzLCB1ZGlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFNodXQgZG93biB0aGUgZ2l2ZW4gQ29y
ZVNpbXVsYXRvciBkZXZpY2UuCisgICAgICAgIDpwYXJhbSB1ZGlkOiBUaGUgdWRpZCBvZiB0aGUg
ZGV2aWNlLgorICAgICAgICA6dHlwZSB1ZGlkOiBzdHIKKyAgICAgICAgIiIiCisgICAgICAgIGRl
dmljZV9zdGF0ZSA9IFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUodWRpZCkKKyAgICAgICAgaWYgZGV2
aWNlX3N0YXRlID09IFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5CT09USU5HIG9yIGRldmljZV9zdGF0
ZSA9PSBTaW11bGF0b3IuRGV2aWNlU3RhdGUuQk9PVEVEOgorICAgICAgICAgICAgX2xvZy5kZWJ1
ZygneGNydW4gc2ltY3RsIHNodXRkb3duICVzJywgdWRpZCkKKyAgICAgICAgICAgICMgRG9uJ3Qg
dGhyb3cgb24gZXJyb3IuIERldmljZSBzaHV0ZG93biBzZWVtcyB0byBiZSByYWN5IHdpdGggU2lt
dWxhdG9yIGFwcCBraWxsaW5nLgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsneGNydW4n
LCAnc2ltY3RsJywgJ3NodXRkb3duJywgdWRpZF0pCisKKyAgICAgICAgU2ltdWxhdG9yLndhaXRf
dW50aWxfZGV2aWNlX2lzX2luX3N0YXRlKHVkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVU
RE9XTikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkZWxldGUoY2xzLCB1ZGlkKToKKyAg
ICAgICAgIiIiCisgICAgICAgIERlbGV0ZSB0aGUgZ2l2ZW4gQ29yZVNpbXVsYXRvciBkZXZpY2Uu
CisgICAgICAgIDpwYXJhbSB1ZGlkOiBUaGUgdWRpZCBvZiB0aGUgZGV2aWNlLgorICAgICAgICA6
dHlwZSB1ZGlkOiBzdHIKKyAgICAgICAgIiIiCisgICAgICAgIERldmljZS5zaHV0ZG93bih1ZGlk
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCd4Y3J1biBzaW1jdGwgZGVs
ZXRlICVzJywgdWRpZCkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ3hjcnVu
JywgJ3NpbWN0bCcsICdkZWxldGUnLCB1ZGlkXSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3Mu
Q2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCcieGNy
dW4gc2ltY3RsIGRlbGV0ZSIgZmFpbGVkOiBkZXZpY2Ugc3RhdGUgaXMge30nLmZvcm1hdChTaW11
bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBy
ZXNldChjbHMsIHVkaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVzZXQgdGhlIGdpdmVuIENv
cmVTaW11bGF0b3IgZGV2aWNlLgorICAgICAgICA6cGFyYW0gdWRpZDogVGhlIHVkaWQgb2YgdGhl
IGRldmljZS4KKyAgICAgICAgOnR5cGUgdWRpZDogc3RyCisgICAgICAgICIiIgorICAgICAgICBE
ZXZpY2Uuc2h1dGRvd24odWRpZCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX2xvZy5kZWJ1
ZygneGNydW4gc2ltY3RsIGVyYXNlICVzJywgdWRpZCkKKyAgICAgICAgICAgIHN1YnByb2Nlc3Mu
Y2hlY2tfY2FsbChbJ3hjcnVuJywgJ3NpbWN0bCcsICdlcmFzZScsIHVkaWRdKQorICAgICAgICBl
eGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICByYWlzZSBS
dW50aW1lRXJyb3IoJyJ4Y3J1biBzaW1jdGwgZXJhc2UiIGZhaWxlZDogZGV2aWNlIHN0YXRlIGlz
IHt9Jy5mb3JtYXQoU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1ZGlkKSkpCisKKyAgICBkZWYgaW5z
dGFsbF9hcHAoc2VsZiwgYXBwX3BhdGgsIGVudj1Ob25lKToKKyAgICAgICAgIyBGSVhNRTogVGhp
cyBpcyBhIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8zMDI3Mzk3Mz4sIFJhY2V5IGZh
aWx1cmUgb2Ygc2ltY3RsIGluc3RhbGwuCisgICAgICAgIGZvciB4IGluIHhyYW5nZSgzKToKKyAg
ICAgICAgICAgIGlmIHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAn
c2ltY3RsJywgJ2luc3RhbGwnLCBzZWxmLnVkaWQsIGFwcF9wYXRoXSwgcmV0dXJuX2V4aXRfY29k
ZT1UcnVlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICBidW5kbGVfaWQgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29t
bWFuZChbCisgICAgICAgICAgICAgICAgICAgICcvdXNyL2xpYmV4ZWMvUGxpc3RCdWRkeScsCisg
ICAgICAgICAgICAgICAgICAgICctYycsCisgICAgICAgICAgICAgICAgICAgICdQcmludCBDRkJ1
bmRsZUlkZW50aWZpZXInLAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9ob3N0LmZpbGVzeXN0
ZW0uam9pbihhcHBfcGF0aCwgJ0luZm8ucGxpc3QnKSwKKyAgICAgICAgICAgICAgICBdKS5yc3Ry
aXAoKQorICAgICAgICAgICAgICAgIHNlbGYuX2hvc3QuZXhlY3V0aXZlLmtpbGxfcHJvY2Vzcyhz
ZWxmLmxhdW5jaF9hcHAoYnVuZGxlX2lkLCBbXSwgZW52PWVudiwgYXR0ZW1wdHM9MSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6
CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBs
YXVuY2hfYXBwKHNlbGYsIGJ1bmRsZV9pZCwgYXJncywgZW52PU5vbmUsIGF0dGVtcHRzPTMpOgor
ICAgICAgICBlbnZpcm9ubWVudF90b191c2UgPSB7fQorICAgICAgICBTSU1DVExfRU5WX1BSRUZJ
WCA9ICdTSU1DVExfQ0hJTERfJworICAgICAgICBmb3IgdmFsdWUgaW4gKGVudiBvciB7fSk6Cisg
ICAgICAgICAgICBpZiBub3QgdmFsdWUuc3RhcnRzd2l0aChTSU1DVExfRU5WX1BSRUZJWCk6Cisg
ICAgICAgICAgICAgICAgZW52aXJvbm1lbnRfdG9fdXNlW1NJTUNUTF9FTlZfUFJFRklYICsgdmFs
dWVdID0gZW52W3ZhbHVlXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbnZp
cm9ubWVudF90b191c2VbdmFsdWVdID0gZW52W3ZhbHVlXQorCisgICAgICAgICMgRklYTUU6IFRo
aXMgaXMgYSB3b3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vMzAxNzI0NTM+LgorICAgICAg
ICBkZWYgX2xvZ19kZWJ1Z19lcnJvcihlcnJvcik6CisgICAgICAgICAgICBfbG9nLmRlYnVnKGVy
cm9yLm1lc3NhZ2Vfd2l0aF9vdXRwdXQoKSkKKworICAgICAgICBvdXRwdXQgPSBOb25lCisgICAg
ICAgIGZvciB4IGluIHhyYW5nZShhdHRlbXB0cyk6CisgICAgICAgICAgICBvdXRwdXQgPSBzZWxm
Ll9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZCgKKyAgICAgICAgICAgICAgICBbJ3hjcnVuJywg
J3NpbWN0bCcsICdsYXVuY2gnLCBzZWxmLnVkaWQsIGJ1bmRsZV9pZF0gKyBhcmdzLAorICAgICAg
ICAgICAgICAgIGVudj1lbnZpcm9ubWVudF90b191c2UsCisgICAgICAgICAgICAgICAgZXJyb3Jf
aGFuZGxlcj1fbG9nX2RlYnVnX2Vycm9yLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgbWF0
Y2ggPSByZS5tYXRjaChyJyg/UDxidW5kbGU+W146XSspOiAoP1A8cGlkPlxkKylcbicsIG91dHB1
dCkKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAg
ICAgaWYgbm90IG1hdGNoIG9yIG1hdGNoLmdyb3VwKCdidW5kbGUnKSAhPSBidW5kbGVfaWQ6Cisg
ICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0ZhaWxlZCB0byBmaW5kIHByb2Nlc3MgaWQg
Zm9yIHt9OiB7fScuZm9ybWF0KGJ1bmRsZV9pZCwgb3V0cHV0KSkKKyAgICAgICAgcmV0dXJuIGlu
dChtYXRjaC5ncm91cCgncGlkJykpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYudWRpZCA9PSBvdGhlci51ZGlkCisKKyAgICBkZWYgX19uZV9fKHNl
bGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKKworICAg
IGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8RGV2aWNlICJ7bmFtZX0iOiB7
dWRpZH0uIFN0YXRlOiB7c3RhdGV9LiBSdW50aW1lOiB7cnVudGltZX0sIEF2YWlsYWJsZToge2F2
YWlsYWJsZX0+Jy5mb3JtYXQoCisgICAgICAgICAgICBuYW1lPXNlbGYubmFtZSwKKyAgICAgICAg
ICAgIHVkaWQ9c2VsZi51ZGlkLAorICAgICAgICAgICAgc3RhdGU9c2VsZi5zdGF0ZSwKKyAgICAg
ICAgICAgIGF2YWlsYWJsZT1zZWxmLmF2YWlsYWJsZSwKKyAgICAgICAgICAgIHJ1bnRpbWU9c2Vs
Zi5ydW50aW1lLmlkZW50aWZpZXIpCisKKworIyBGSVhNRTogVGhpcyBjbGFzcyBpcyBmcmFnaWxl
IGJlY2F1c2UgaXQgcGFyc2VzIHRoZSBvdXRwdXQgb2YgdGhlIHNpbWN0bCBjb21tYW5kIGxpbmUg
dXRpbGl0eSwgd2hpY2ggbWF5IGNoYW5nZS4KKyMgICAgICAgIFdlIHNob3VsZCBmaW5kIGEgYmV0
dGVyIHdheSB0byBxdWVyeSBmb3Igc2ltdWxhdG9yIGRldmljZSBzdGF0ZSBhbmQgY2FwYWJpbGl0
aWVzLiBNYXliZSB0YWtlIGEgc2ltaWxpYXIKKyMgICAgICAgIGFwcHJvYWNoIGFzIGluIHdlYmtp
dGRpcnMucG0gYW5kIHV0aWxpemUgdGhlIHBhcnNlZCBvdXRwdXQgZnJvbSB0aGUgZGV2aWNlLnBs
aXN0IGZpbGVzIGluIHRoZSBzdWItCisjICAgICAgICBkaXJlY3RvcmllcyBvZiB+L0xpYnJhcnkv
RGV2ZWxvcGVyL0NvcmVTaW11bGF0b3IvRGV2aWNlcz8KKyMgICAgICAgIEFsc28sIHNpbWN0bCBo
YXMgdGhlIG9wdGlvbiB0byBvdXRwdXQgaW4gSlNPTiBmb3JtYXQgKHhjcnVuIHNpbWN0bCBsaXN0
IC0tanNvbikuCitjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToKKyAgICAiIiIKKyAgICBSZXByZXNl
bnRzIHRoZSBpT1MgU2ltdWxhdG9yIGluZnJhc3RydWN0dXJlIHVuZGVyIHRoZSBjdXJyZW50bHkg
c2VsZWN0IFhjb2RlLmFwcCBidW5kbGUuCisgICAgIiIiCisgICAgZGV2aWNlX3R5cGVfcmUgPSBy
ZS5jb21waWxlKCcoP1A8bmFtZT5bXihdKylcKCg/UDxpZGVudGlmaWVyPlteKV0rKVwpJykKKyAg
ICAjIEZJWE1FOiBydW50aW1lX3JlIHBhcnNlcyB0aGUgdmVyc2lvbiBmcm9tIHRoZSBydW50aW1l
IG5hbWUsIGJ1dCB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIGZ1bGwgdmVyc2lvbiBudW1iZXIK
KyAgICAjIChpdCBjYW4gb21pdCB0aGUgcmV2aXNpb24pLiBXZSBzaG91bGQgaW5zdGVhZCBwYXJz
ZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSBudW1iZXIgY29udGFpbmVkIGluIHBhcmVudGhlc2VzLgor
ICAgIHJ1bnRpbWVfcmUgPSByZS5jb21waWxlKAorICAgICAgICAnKGl8d2F0Y2h8dHYpT1MgKD9Q
PHZlcnNpb24+XGQrXC5cZCkoP1A8aW50ZXJuYWw+IEludGVybmFsKT8gXChcZCtcLlxkKyhcLlxk
Kyk/IC0gKD9QPGJ1aWxkX3ZlcnNpb24+W14pXSspXCkgXCgoP1A8aWRlbnRpZmllcj5bXildKylc
KSggXCgoP1A8YXZhaWxhYmlsaXR5PlteKV0rKVwpKT8nKQorICAgIHVuYXZhaWxhYmxlX3ZlcnNp
b25fcmUgPSByZS5jb21waWxlKCctLSBVbmF2YWlsYWJsZTogKD9QPGlkZW50aWZpZXI+W14gXSsp
IC0tJykKKyAgICB2ZXJzaW9uX3JlID0gcmUuY29tcGlsZSgnLS0gKGl8d2F0Y2h8dHYpT1MgKD9Q
PHZlcnNpb24+XGQrXC5cZCspKD9QPGludGVybmFsPiBJbnRlcm5hbCk/IC0tJykKKyAgICBkZXZp
Y2VzX3JlID0gcmUuY29tcGlsZSgKKyAgICAgICAgJ1xzKig/UDxuYW1lPlteKF0rIClcKCg/UDx1
ZGlkPlteKV0rKVwpIFwoKD9QPHN0YXRlPlteKV0rKVwpKCBcKCg/UDxhdmFpbGFiaWxpdHk+W14p
XSspXCkpPycpCisKKyAgICBfbWFuYWdlZF9kZXZpY2VzID0ge30KKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBob3N0PU5vbmUpOgorICAgICAgICBzZWxmLl9ob3N0ID0gaG9zdCBvciBIb3N0KCkK
KyAgICAgICAgc2VsZi5ydW50aW1lcyA9IFtdCisgICAgICAgIHNlbGYuZGV2aWNlX3R5cGVzID0g
W10KKyAgICAgICAgc2VsZi5yZWZyZXNoKCkKKworICAgICMgS2VlcCB0aGVzZSBjb25zdGFudHMg
c3luY2hyb25pemVkIHdpdGggdGhlIFNpbURldmljZVN0YXRlIGNvbnN0YW50cyBpbiBDb3JlU2lt
dWxhdG9yL1NpbURldmljZS5oLgorICAgIGNsYXNzIERldmljZVN0YXRlOgorICAgICAgICBET0VT
X05PVF9FWElTVCA9IC0xCisgICAgICAgIENSRUFUSU5HID0gMAorICAgICAgICBTSFVURE9XTiA9
IDEKKyAgICAgICAgQk9PVElORyA9IDIKKyAgICAgICAgQk9PVEVEID0gMworICAgICAgICBTSFVU
VElOR19ET1dOID0gNAorCisgICAgTkFNRV9GT1JfU1RBVEUgPSBbCisgICAgICAgICdDUkVBVElO
RycsCisgICAgICAgICdTSFVURE9XTicsCisgICAgICAgICdCT09USU5HJywKKyAgICAgICAgJ0JP
T1RFRCcsCisgICAgICAgICdTSFVUVElOR19ET1dOJworICAgIF0KKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgY3JlYXRlX2RldmljZShudW1iZXIsIGRldmljZV90eXBlLCBydW50aW1lKToK
KyAgICAgICAgZGV2aWNlID0gU2ltdWxhdG9yKCkubG9va3VwX29yX2NyZWF0ZV9kZXZpY2UoZGV2
aWNlX3R5cGUubmFtZSArICcgV2ViS2l0IFRlc3RlcicgKyBzdHIobnVtYmVyKSwgZGV2aWNlX3R5
cGUsIHJ1bnRpbWUpCisgICAgICAgIF9sb2cuZGVidWcoJ2NyZWF0ZWQgZGV2aWNlIHt9IHt9Jy5m
b3JtYXQobnVtYmVyLCBkZXZpY2UpKQorICAgICAgICBhc3NlcnQobGVuKFNpbXVsYXRvci5fbWFu
YWdlZF9kZXZpY2VzKSA9PSBudW1iZXIpCisgICAgICAgIFNpbXVsYXRvci5fbWFuYWdlZF9kZXZp
Y2VzW251bWJlcl0gPSBkZXZpY2UKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcmVtb3Zl
X2RldmljZShudW1iZXIpOgorICAgICAgICBpZiBub3QgU2ltdWxhdG9yLl9tYW5hZ2VkX2Rldmlj
ZXNbbnVtYmVyXToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkZXZpY2VfdWRpZCA9IFNp
bXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzW251bWJlcl0udWRpZAorICAgICAgICBfbG9nLmRlYnVn
KCdyZW1vdmluZyBkZXZpY2Uge30ge30nLmZvcm1hdChudW1iZXIsIGRldmljZV91ZGlkKSkKKyAg
ICAgICAgZGVsIFNpbXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzW251bWJlcl0KKyAgICAgICAgU2lt
dWxhdG9yLmRlbGV0ZV9kZXZpY2UoZGV2aWNlX3VkaWQpCisKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIGRldmljZV9udW1iZXIobnVtYmVyKToKKyAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5f
bWFuYWdlZF9kZXZpY2VzW251bWJlcl0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZGV2
aWNlX3N0YXRlX2Rlc2NyaXB0aW9uKHN0YXRlKToKKyAgICAgICAgaWYgKHN0YXRlID09IFNpbXVs
YXRvci5EZXZpY2VTdGF0ZS5ET0VTX05PVF9FWElTVCk6CisgICAgICAgICAgICByZXR1cm4gJ0RP
RVNfTk9UX0VYSVNUJworICAgICAgICByZXR1cm4gU2ltdWxhdG9yLk5BTUVfRk9SX1NUQVRFW3N0
YXRlXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB3YWl0X3VudGlsX2RldmljZV9pc19i
b290ZWQodWRpZCwgdGltZW91dF9zZWNvbmRzPTYwICogNSk6CisgICAgICAgIFNpbXVsYXRvci53
YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZSh1ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUu
Qk9PVEVELCB0aW1lb3V0X3NlY29uZHMpCisgICAgICAgIHdpdGggdGltZW91dChzZWNvbmRzPXRp
bWVvdXRfc2Vjb25kcyk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1
dChbJ3hjcnVuJywgJ3NpbWN0bCcsICdzcGF3bicsIHVkaWQsICdsYXVuY2hjdGwnLCAncHJpbnQn
LCAnc3lzdGVtJ10pLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygneGNy
dW4gc2ltY3RsIHNwYXduICVzJywgdWRpZCkKKworICAgICAgICAgICAgICAgICAgICBpZiByZS5z
ZWFyY2goIkFbXHNdK2NvbS5hcHBsZS5zcHJpbmdib2FyZC5zZXJ2aWNlcyIsIHN0YXRlKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJw
cm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgU2ltdWxh
dG9yLmRldmljZV9zdGF0ZSh1ZGlkKSAhPSBTaW11bGF0b3IuRGV2aWNlU3RhdGUuQk9PVEVEOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdTaW11YXRvciBkZXZp
Y2UgcXVpdCB1bmV4cGVjdGVkbHkuJykKKyAgICAgICAgICAgICAgICAgICAgX2xvZy53YXJuKCJF
cnJvciBpbiBjaGVja2luZyBTaW11bGF0b3IgYm9vdCBzdGF0dXMuIFdpbGwgcmV0cnkgaW4gMSBz
ZWNvbmQuIikKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIHdhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0YXRlKHVkaWQsIHdhaXRfdW50
aWxfc3RhdGUsIHRpbWVvdXRfc2Vjb25kcz02MCAqIDUpOgorICAgICAgICBfbG9nLmRlYnVnKCd3
YWl0aW5nIGZvciBkZXZpY2UgJXMgdG8gZW50ZXIgc3RhdGUgJXMgd2l0aCB0aW1lb3V0ICVzJywg
dWRpZCwgU2ltdWxhdG9yLmRldmljZV9zdGF0ZV9kZXNjcmlwdGlvbih3YWl0X3VudGlsX3N0YXRl
KSwgdGltZW91dF9zZWNvbmRzKQorICAgICAgICB3aXRoIHRpbWVvdXQoc2Vjb25kcz10aW1lb3V0
X3NlY29uZHMpOgorICAgICAgICAgICAgZGV2aWNlX3N0YXRlID0gU2ltdWxhdG9yLmRldmljZV9z
dGF0ZSh1ZGlkKQorICAgICAgICAgICAgd2hpbGUgKGRldmljZV9zdGF0ZSAhPSB3YWl0X3VudGls
X3N0YXRlKToKKyAgICAgICAgICAgICAgICBkZXZpY2Vfc3RhdGUgPSBTaW11bGF0b3IuZGV2aWNl
X3N0YXRlKHVkaWQpCisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnIGRldmljZSBzdGF0ZSAl
cycsIFNpbXVsYXRvci5kZXZpY2Vfc3RhdGVfZGVzY3JpcHRpb24oZGV2aWNlX3N0YXRlKSkKKyAg
ICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKworICAgICAgICBlbmRfc3RhdGUgPSBTaW11
bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpCisgICAgICAgIGlmIChlbmRfc3RhdGUgIT0gd2FpdF91
bnRpbF9zdGF0ZSk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RpbWVkIG91dCB3
YWl0aW5nIGZvciBzaW11bGF0b3IgZGV2aWNlIHRvIGVudGVyIHN0YXRlIHswfTsgY3VycmVudCBz
dGF0ZSBpcyB7MX0nLmZvcm1hdChTaW11bGF0b3IuZGV2aWNlX3N0YXRlX2Rlc2NyaXB0aW9uKHdh
aXRfdW50aWxfc3RhdGUpLCBTaW11bGF0b3IuZGV2aWNlX3N0YXRlX2Rlc2NyaXB0aW9uKGVuZF9z
dGF0ZSkpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBkZXZpY2Vfc3RhdGUodWRpZCk6
CisgICAgICAgIGRldmljZV9wbGlzdCA9IG9zLnBhdGguam9pbihTaW11bGF0b3IuZGV2aWNlX2Rp
cmVjdG9yeSh1ZGlkKSwgJ2RldmljZS5wbGlzdCcpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlz
ZmlsZShkZXZpY2VfcGxpc3QpOgorICAgICAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5EZXZpY2VT
dGF0ZS5ET0VTX05PVF9FWElTVAorICAgICAgICByZXR1cm4gcGxpc3RsaWIucmVhZFBsaXN0KGRl
dmljZV9wbGlzdClbJ3N0YXRlJ10KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZGV2aWNl
X2RpcmVjdG9yeSh1ZGlkKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgob3MucGF0
aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbignfi9MaWJyYXJ5L0RldmVsb3Blci9Db3JlU2ltdWxh
dG9yL0RldmljZXMnLCB1ZGlkKSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGRlbGV0
ZV9kZXZpY2UodWRpZCk6CisgICAgICAgIERldmljZS5kZWxldGUodWRpZCkKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgcmVzZXRfZGV2aWNlKHVkaWQpOgorICAgICAgICBEZXZpY2UucmVz
ZXQodWRpZCkKKworICAgIGRlZiByZWZyZXNoKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAg
UmVmcmVzaCBydW50aW1lIGFuZCBkZXZpY2UgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIGBgc2ltY3Rs
IGxpc3RgYC4KKyAgICAgICAgIiIiCisgICAgICAgIGxpbmVzID0gc2VsZi5faG9zdC5wbGF0Zm9y
bS54Y29kZV9zaW1jdGxfbGlzdCgpCisgICAgICAgIGlmIG5vdCBsaW5lczoKKyAgICAgICAgICAg
IHJldHVybgorICAgICAgICBkZXZpY2VfdHlwZXNfaGVhZGVyID0gbmV4dChsaW5lcykKKyAgICAg
ICAgaWYgZGV2aWNlX3R5cGVzX2hlYWRlciAhPSAnPT0gRGV2aWNlIFR5cGVzID09JzoKKyAgICAg
ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXhwZWN0ZWQgPT0gRGV2aWNlIFR5cGVzID09IGhl
YWRlciBidXQgZ290OiAie30iJy5mb3JtYXQoZGV2aWNlX3R5cGVzX2hlYWRlcikpCisgICAgICAg
IHNlbGYuX3BhcnNlX2RldmljZV90eXBlcyhsaW5lcykKKworICAgIGRlZiBfcGFyc2VfZGV2aWNl
X3R5cGVzKHNlbGYsIGxpbmVzKToKKyAgICAgICAgIiIiCisgICAgICAgIFBhcnNlIGRldmljZSB0
eXBlcyBmcm9tIGBgc2ltY3RsIGxpc3RgYC4KKyAgICAgICAgOnBhcmFtIGxpbmVzOiBBIGdlbmVy
YXRvciBmb3IgdGhlIG91dHB1dCBsaW5lcyBmcm9tIGBgc2ltY3RsIGxpc3RgYC4KKyAgICAgICAg
OnR5cGUgbGluZXM6IGdlbmV4cHIKKyAgICAgICAgOnJldHVybjogTm9uZQorICAgICAgICAiIiIK
KyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBkZXZpY2VfdHlwZV9tYXRj
aCA9IHNlbGYuZGV2aWNlX3R5cGVfcmUubWF0Y2gobGluZSkKKyAgICAgICAgICAgIGlmIG5vdCBk
ZXZpY2VfdHlwZV9tYXRjaDoKKyAgICAgICAgICAgICAgICBpZiBsaW5lICE9ICc9PSBSdW50aW1l
cyA9PSc6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXhwZWN0ZWQg
PT0gUnVudGltZXMgPT0gaGVhZGVyIGJ1dCBnb3Q6ICJ7fSInLmZvcm1hdChsaW5lKSkKKyAgICAg
ICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZGV2aWNlX3R5cGUgPSBEZXZpY2VUeXBlKG5h
bWU9ZGV2aWNlX3R5cGVfbWF0Y2guZ3JvdXAoJ25hbWUnKS5yc3RyaXAoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyPWRldmljZV90eXBlX21hdGNoLmdy
b3VwKCdpZGVudGlmaWVyJykpCisgICAgICAgICAgICBzZWxmLmRldmljZV90eXBlcy5hcHBlbmQo
ZGV2aWNlX3R5cGUpCisKKyAgICAgICAgc2VsZi5fcGFyc2VfcnVudGltZXMobGluZXMpCisKKyAg
ICBkZWYgX3BhcnNlX3J1bnRpbWVzKHNlbGYsIGxpbmVzKToKKyAgICAgICAgIiIiCisgICAgICAg
IENvbnRpbnVlIHRvIHBhcnNlIHJ1bnRpbWVzIGZyb20gYGBzaW1jdGwgbGlzdGBgLgorICAgICAg
ICA6cGFyYW0gbGluZXM6IEEgZ2VuZXJhdG9yIGZvciB0aGUgb3V0cHV0IGxpbmVzIGZyb20gYGBz
aW1jdGwgbGlzdGBgLgorICAgICAgICA6dHlwZSBsaW5lczogZ2VuZXhwcgorICAgICAgICA6cmV0
dXJuOiBOb25lCisgICAgICAgICIiIgorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAg
ICAgICAgIHJ1bnRpbWVfbWF0Y2ggPSBzZWxmLnJ1bnRpbWVfcmUubWF0Y2gobGluZSkKKyAgICAg
ICAgICAgIGlmIG5vdCBydW50aW1lX21hdGNoOgorICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0g
Jz09IERldmljZXMgPT0nOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Io
J0V4cGVjdGVkID09IERldmljZXMgPT0gaGVhZGVyIGJ1dCBnb3Q6ICJ7fSInLmZvcm1hdChsaW5l
KSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdmVyc2lvbiA9IHR1cGxlKG1h
cChpbnQsIHJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ3ZlcnNpb24nKS5zcGxpdCgnLicpKSkKKyAgICAg
ICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lKHZlcnNpb249dmVyc2lvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9cnVudGltZV9tYXRjaC5ncm91cCgnaWRlbnRpZmll
cicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlPXJ1bnRpbWVfbWF0
Y2guZ3JvdXAoJ2F2YWlsYWJpbGl0eScpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc19pbnRlcm5hbF9ydW50aW1lPWJvb2wocnVudGltZV9tYXRjaC5ncm91cCgnaW50
ZXJuYWwnKSkpCisgICAgICAgICAgICBzZWxmLnJ1bnRpbWVzLmFwcGVuZChydW50aW1lKQorICAg
ICAgICBzZWxmLl9wYXJzZV9kZXZpY2VzKGxpbmVzKQorCisgICAgZGVmIF9wYXJzZV9kZXZpY2Vz
KHNlbGYsIGxpbmVzKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnRpbnVlIHRvIHBhcnNlIGRl
dmljZXMgZnJvbSBgYHNpbWN0bCBsaXN0YGAuCisgICAgICAgIDpwYXJhbSBsaW5lczogQSBnZW5l
cmF0b3IgZm9yIHRoZSBvdXRwdXQgbGluZXMgZnJvbSBgYHNpbWN0bCBsaXN0YGAuCisgICAgICAg
IDp0eXBlIGxpbmVzOiBnZW5leHByCisgICAgICAgIDpyZXR1cm46IE5vbmUKKyAgICAgICAgIiIi
CisgICAgICAgIGN1cnJlbnRfcnVudGltZSA9IE5vbmUKKyAgICAgICAgZm9yIGxpbmUgaW4gbGlu
ZXM6CisgICAgICAgICAgICB2ZXJzaW9uX21hdGNoID0gc2VsZi52ZXJzaW9uX3JlLm1hdGNoKGxp
bmUpCisgICAgICAgICAgICBpZiB2ZXJzaW9uX21hdGNoOgorICAgICAgICAgICAgICAgIHZlcnNp
b24gPSB0dXBsZShtYXAoaW50LCB2ZXJzaW9uX21hdGNoLmdyb3VwKCd2ZXJzaW9uJykuc3BsaXQo
Jy4nKSkpCisgICAgICAgICAgICAgICAgY3VycmVudF9ydW50aW1lID0gc2VsZi5ydW50aW1lKHZl
cnNpb249dmVyc2lvbiwgaXNfaW50ZXJuYWxfcnVudGltZT1ib29sKHZlcnNpb25fbWF0Y2guZ3Jv
dXAoJ2ludGVybmFsJykpKQorICAgICAgICAgICAgICAgIGFzc2VydCBjdXJyZW50X3J1bnRpbWUK
KyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB1bmF2YWlsYWJsZV92ZXJz
aW9uX21hdGNoID0gc2VsZi51bmF2YWlsYWJsZV92ZXJzaW9uX3JlLm1hdGNoKGxpbmUpCisgICAg
ICAgICAgICBpZiB1bmF2YWlsYWJsZV92ZXJzaW9uX21hdGNoOgorICAgICAgICAgICAgICAgIGN1
cnJlbnRfcnVudGltZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAg
ICAgICBkZXZpY2VfbWF0Y2ggPSBzZWxmLmRldmljZXNfcmUubWF0Y2gobGluZSkKKyAgICAgICAg
ICAgIGlmIG5vdCBkZXZpY2VfbWF0Y2g6CisgICAgICAgICAgICAgICAgaWYgbGluZSAhPSAnPT0g
RGV2aWNlIFBhaXJzID09JzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y
KCdFeHBlY3RlZCA9PSBEZXZpY2UgUGFpcnMgPT0gaGVhZGVyIGJ1dCBnb3Q6ICJ7fSInLmZvcm1h
dChsaW5lKSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgY3VycmVudF9y
dW50aW1lOgorICAgICAgICAgICAgICAgIGRldmljZSA9IERldmljZShuYW1lPWRldmljZV9tYXRj
aC5ncm91cCgnbmFtZScpLnJzdHJpcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1ZGlkPWRldmljZV9tYXRjaC5ncm91cCgndWRpZCcpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhdmFpbGFibGU9ZGV2aWNlX21hdGNoLmdyb3VwKCdhdmFpbGFiaWxpdHknKSBp
cyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lPWN1cnJlbnRf
cnVudGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdD1zZWxmLl9ob3N0
KQorICAgICAgICAgICAgICAgIGN1cnJlbnRfcnVudGltZS5kZXZpY2VzLmFwcGVuZChkZXZpY2Up
CisKKyAgICBkZWYgZGV2aWNlX3R5cGUoc2VsZiwgbmFtZT1Ob25lLCBpZGVudGlmaWVyPU5vbmUp
OgorICAgICAgICAiIiIKKyAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBzaG9ydCBuYW1lIG9mIHRo
ZSBkZXZpY2UgdHlwZS4KKyAgICAgICAgOnR5cGUgbmFtZTogc3RyCisgICAgICAgIDpwYXJhbSBp
ZGVudGlmaWVyOiBUaGUgQ29yZVNpbXVsYXRvciBpZGVudGlmaWVyIG9mIHRoZSBkZXNpcmVkIGRl
dmljZSB0eXBlLgorICAgICAgICA6dHlwZSBpZGVudGlmaWVyOiBzdHIKKyAgICAgICAgOnJldHVy
bjogQSBkZXZpY2UgdHlwZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQvb3IgaWRlbnRpZmll
ciwgb3IgTm9uZSBpZiBvbmUgZG9lc24ndCBleGlzdCBhcyBzdWNoLgorICAgICAgICA6cnR5cGU6
IERldmljZVR5cGUKKyAgICAgICAgIiIiCisgICAgICAgIGZvciBkZXZpY2VfdHlwZSBpbiBzZWxm
LmRldmljZV90eXBlczoKKyAgICAgICAgICAgIGlmIG5hbWUgYW5kIGRldmljZV90eXBlLm5hbWUg
IT0gbmFtZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaWRlbnRp
ZmllciBhbmQgZGV2aWNlX3R5cGUuaWRlbnRpZmllciAhPSBpZGVudGlmaWVyOgorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZXR1cm4gZGV2aWNlX3R5cGUKKyAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgIGRlZiBydW50aW1lKHNlbGYsIHZlcnNpb249Tm9uZSwgaWRlbnRp
Zmllcj1Ob25lLCBpc19pbnRlcm5hbF9ydW50aW1lPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAg
ICAgOnBhcmFtIHZlcnNpb246IFRoZSBpT1MgdmVyc2lvbiBvZiB0aGUgZGVzaXJlZCBydW50aW1l
LgorICAgICAgICA6dHlwZSB2ZXJzaW9uOiB0dXBsZQorICAgICAgICA6cGFyYW0gaWRlbnRpZmll
cjogVGhlIENvcmVTaW11bGF0b3IgaWRlbnRpZmllciBvZiB0aGUgZGVzaXJlZCBydW50aW1lLgor
ICAgICAgICA6dHlwZSBpZGVudGlmaWVyOiBzdHIKKyAgICAgICAgOnJldHVybjogQSBydW50aW1l
IHdpdGggdGhlIHNwZWNpZmllZCB2ZXJzaW9uIGFuZC9vciBpZGVudGlmaWVyLCBvciBOb25lIGlm
IG9uZSBkb2Vzbid0IGV4aXN0IGFzIHN1Y2guCisgICAgICAgIDpydHlwZTogUnVudGltZSBvciBO
b25lCisgICAgICAgICIiIgorICAgICAgICBpZiB2ZXJzaW9uIGlzIE5vbmUgYW5kIGlkZW50aWZp
ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignTXVzdCBzdXBwbHkgdmVy
c2lvbiBhbmQvb3IgaWRlbnRpZmllci4nKQorCisgICAgICAgIGZvciBydW50aW1lIGluIHNlbGYu
cnVudGltZXM6CisgICAgICAgICAgICBpZiB2ZXJzaW9uIGFuZCBydW50aW1lLnZlcnNpb24gIT0g
dmVyc2lvbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNfaW50
ZXJuYWxfcnVudGltZSBhbmQgcnVudGltZS5pc19pbnRlcm5hbF9ydW50aW1lICE9IGlzX2ludGVy
bmFsX3J1bnRpbWU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlk
ZW50aWZpZXIgYW5kIHJ1bnRpbWUuaWRlbnRpZmllciAhPSBpZGVudGlmaWVyOgorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZXR1cm4gcnVudGltZQorICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgZGVmIGZpbmRfZGV2aWNlX2J5X3VkaWQoc2VsZiwgdWRpZCk6CisgICAg
ICAgICIiIgorICAgICAgICA6cGFyYW0gdWRpZDogVGhlIFVESUQgb2YgdGhlIGRldmljZSB0byBm
aW5kLgorICAgICAgICA6dHlwZSB1ZGlkOiBzdHIKKyAgICAgICAgOnJldHVybjogVGhlIGBEZXZp
Y2VgIHdpdGggdGhlIHNwZWNpZmllZCBVRElELgorICAgICAgICA6cnR5cGU6IERldmljZQorICAg
ICAgICAiIiIKKyAgICAgICAgZm9yIGRldmljZSBpbiBzZWxmLmRldmljZXM6CisgICAgICAgICAg
ICBpZiBkZXZpY2UudWRpZCA9PSB1ZGlkOgorICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2UK
KyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBjdXJyZW50X2RldmljZShzZWxmKToKKyAg
ICAgICAgIyBGSVhNRTogRmluZCB0aGUgc2ltdWxhdG9yIGRldmljZSB0aGF0IHdhcyBib290ZWQg
YnkgU2ltdWxhdG9yLmFwcC4gRm9yIG5vdywgcGljayBzb21lIGJvb3RlZCBzaW11bGF0b3IgZGV2
aWNlLCB3aGljaAorICAgICAgICAjIG1heSBoYXZlIGJlZW4gYm9vdGVkIHVzaW5nIHRoZSBzaW1j
dGwgY29tbWFuZCBsaW5lIHRvb2wuCisgICAgICAgIGZvciBkZXZpY2UgaW4gc2VsZi5kZXZpY2Vz
OgorICAgICAgICAgICAgaWYgZGV2aWNlLnN0YXRlID09IFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5C
T09URUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZQorICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGZpbmQgYW4gZXhpc3RpbmcgZGV2aWNlIHdpdGgg
cmVzcGVjdCB0byBpdHMgbmFtZSwgZGV2aWNlIHR5cGUgYW5kIHJ1bnRpbWUuCisgICAgZGVmIGRl
dmljZShzZWxmLCBuYW1lPU5vbmUsIHJ1bnRpbWU9Tm9uZSwgc2hvdWxkX2lnbm9yZV91bmF2YWls
YWJsZV9kZXZpY2VzPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIDpwYXJhbSBuYW1lOiBU
aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBkZXZpY2UuCisgICAgICAgIDp0eXBlIG5hbWU6IHN0cgor
ICAgICAgICA6cGFyYW0gcnVudGltZTogVGhlIHJ1bnRpbWUgb2YgdGhlIGRlc2lyZWQgZGV2aWNl
LgorICAgICAgICA6dHlwZSBydW50aW1lOiBSdW50aW1lCisgICAgICAgIDpyZXR1cm46IEEgZGV2
aWNlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFuZC9vciBydW50aW1lLCBvciBOb25lIGlmIG9u
ZSBkb2Vzbid0IGV4aXN0IGFzIHN1Y2gKKyAgICAgICAgOnJ0eXBlOiBEZXZpY2Ugb3IgTm9uZQor
ICAgICAgICAiIiIKKyAgICAgICAgaWYgbmFtZSBpcyBOb25lIGFuZCBydW50aW1lIGlzIE5vbmU6
CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ011c3Qgc3VwcGx5IG5hbWUgYW5kL29yIHJ1
bnRpbWUuJykKKworICAgICAgICBmb3IgZGV2aWNlIGluIHNlbGYuZGV2aWNlczoKKyAgICAgICAg
ICAgIGlmIHNob3VsZF9pZ25vcmVfdW5hdmFpbGFibGVfZGV2aWNlcyBhbmQgbm90IGRldmljZS5h
dmFpbGFibGU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5hbWUg
YW5kIGRldmljZS5uYW1lICE9IG5hbWU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgICAgIGlmIHJ1bnRpbWUgYW5kIGRldmljZS5ydW50aW1lICE9IHJ1bnRpbWU6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJldHVybiBkZXZpY2UKKyAgICAgICAgcmV0
dXJuIE5vbmUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhdmFpbGFibGVfcnVudGltZXMoc2Vs
Zik6CisgICAgICAgICIiIgorICAgICAgICA6cmV0dXJuOiBBbiBpdGVyYXRvciBvZiBhbGwgYXZh
aWxhYmxlIHJ1bnRpbWVzLgorICAgICAgICA6cnR5cGU6IGl0ZXIKKyAgICAgICAgIiIiCisgICAg
ICAgIHJldHVybiBpdGVydG9vbHMuaWZpbHRlcihsYW1iZGEgcnVudGltZTogcnVudGltZS5hdmFp
bGFibGUsIHNlbGYucnVudGltZXMpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGV2aWNlcyhz
ZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIDpyZXR1cm46IEFuIGl0ZXJhdG9yIG9mIGFsbCBk
ZXZpY2VzIGZyb20gYWxsIHJ1bnRpbWVzLgorICAgICAgICA6cnR5cGU6IGl0ZXIKKyAgICAgICAg
IiIiCisgICAgICAgIHJldHVybiBpdGVydG9vbHMuY2hhaW4oKltydW50aW1lLmRldmljZXMgZm9y
IHJ1bnRpbWUgaW4gc2VsZi5ydW50aW1lc10pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGF0
ZXN0X2F2YWlsYWJsZV9ydW50aW1lKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgOnJldHVy
bjogUmV0dXJucyBhIFJ1bnRpbWUgb2JqZWN0IHdpdGggdGhlIGhpZ2hlc3QgdmVyc2lvbi4KKyAg
ICAgICAgOnJ0eXBlOiBSdW50aW1lIG9yIE5vbmUKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5v
dCBzZWxmLnJ1bnRpbWVzOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJu
IHNvcnRlZChzZWxmLmF2YWlsYWJsZV9ydW50aW1lcywga2V5PWxhbWJkYSBydW50aW1lOiBydW50
aW1lLnZlcnNpb24sIHJldmVyc2U9VHJ1ZSlbMF0KKworICAgIGRlZiBsb29rdXBfb3JfY3JlYXRl
X2RldmljZShzZWxmLCBuYW1lLCBkZXZpY2VfdHlwZSwgcnVudGltZSk6CisgICAgICAgICIiIgor
ICAgICAgICBSZXR1cm5zIGFuIGF2YWlsYWJsZSBpT1MgU2ltdWxhdG9yIGRldmljZSBmb3IgdGVz
dGluZy4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGEgbmV3IHNpbXVsYXRv
ciBkZXZpY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsCisgICAgICAgIGRldmljZSB0eXBlIGFu
ZCBydW50aW1lIGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorCisgICAgICAgIDpwYXJh
bSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgc2ltdWxhdG9yIGRldmljZSB0byBsb29rdXAgb3IgY3Jl
YXRlLgorICAgICAgICA6dHlwZSBuYW1lOiBzdHIKKyAgICAgICAgOnBhcmFtIGRldmljZV90eXBl
OiBUaGUgQ29yZVNpbXVsYXRvciBkZXZpY2UgdHlwZS4KKyAgICAgICAgOnR5cGUgZGV2aWNlX3R5
cGU6IERldmljZVR5cGUKKyAgICAgICAgOnBhcmFtIHJ1bnRpbWU6IFRoZSBDb3JlU2ltdWxhdG9y
IHJ1bnRpbWUuCisgICAgICAgIDp0eXBlIHJ1bnRpbWU6IFJ1bnRpbWUKKyAgICAgICAgOnJldHVy
bjogQSBkaWN0aW9uYXJ5IGRlc2NyaWJpbmcgdGhlIGRldmljZS4KKyAgICAgICAgOnJ0eXBlOiBE
ZXZpY2UKKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydChydW50aW1lLmF2YWlsYWJsZSkKKyAg
ICAgICAgdGVzdGluZ19kZXZpY2UgPSBzZWxmLmRldmljZShuYW1lPW5hbWUsIHJ1bnRpbWU9cnVu
dGltZSwgc2hvdWxkX2lnbm9yZV91bmF2YWlsYWJsZV9kZXZpY2VzPVRydWUpCisgICAgICAgIGlm
IHRlc3RpbmdfZGV2aWNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnbG9va3VwX29yX2NyZWF0
ZV9kZXZpY2UgJXMgJXMgJXMgZm91bmQgJXMnLCBuYW1lLCBkZXZpY2VfdHlwZSwgcnVudGltZSwg
dGVzdGluZ19kZXZpY2UubmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0aW5nX2RldmljZQor
ICAgICAgICB0ZXN0aW5nX2RldmljZSA9IERldmljZS5jcmVhdGUobmFtZSwgZGV2aWNlX3R5cGUs
IHJ1bnRpbWUpCisgICAgICAgIF9sb2cuZGVidWcoJ2xvb2t1cF9vcl9jcmVhdGVfZGV2aWNlICVz
ICVzICVzIGNyZWF0ZWQgJXMnLCBuYW1lLCBkZXZpY2VfdHlwZSwgcnVudGltZSwgdGVzdGluZ19k
ZXZpY2UubmFtZSkKKyAgICAgICAgYXNzZXJ0KHRlc3RpbmdfZGV2aWNlLmF2YWlsYWJsZSkKKyAg
ICAgICAgcmV0dXJuIHRlc3RpbmdfZGV2aWNlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6Cisg
ICAgICAgIHJldHVybiAnPGlPUyBTaW11bGF0b3I6IHtudW1fcnVudGltZXN9IHJ1bnRpbWVzLCB7
bnVtX2RldmljZV90eXBlc30gZGV2aWNlIHR5cGVzPicuZm9ybWF0KAorICAgICAgICAgICAgbnVt
X3J1bnRpbWVzPWxlbihzZWxmLnJ1bnRpbWVzKSwKKyAgICAgICAgICAgIG51bV9kZXZpY2VfdHlw
ZXM9bGVuKHNlbGYuZGV2aWNlX3R5cGVzKSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAg
ICAgICBkZXNjcmlwdGlvbiA9IFsnaU9TIFNpbXVsYXRvcjonXQorICAgICAgICBkZXNjcmlwdGlv
biArPSBtYXAoc3RyLCBzZWxmLnJ1bnRpbWVzKQorICAgICAgICBkZXNjcmlwdGlvbiArPSBtYXAo
c3RyLCBzZWxmLmRldmljZV90eXBlcykKKyAgICAgICAgZGVzY3JpcHRpb24gKz0gbWFwKHN0ciwg
c2VsZi5kZXZpY2VzKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGRlc2NyaXB0aW9uKQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0ZWRfZGV2aWNlLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdGVkX2RldmljZS5w
eQkocmV2aXNpb24gMjEyMzA1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11
bGF0ZWRfZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNDkgKzIwLDE4IEBACiAjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbG9n
Z2luZwotaW1wb3J0IG9zCi1pbXBvcnQgcGxpc3RsaWIKIGltcG9ydCByZQogaW1wb3J0IHN1YnBy
b2Nlc3MKLWltcG9ydCB0aW1lCiAKLWZyb20gd2Via2l0cHkuYmVuY2htYXJrX3J1bm5lci51dGls
cyBpbXBvcnQgdGltZW91dAorZnJvbSB3ZWJraXRweS54Y29kZS5kZXZpY2UgaW1wb3J0IERldmlj
ZQorZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvcgogZnJvbSB3
ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoX19uYW1lX18pCiAKLSIiIgotTWluaW1hbGx5IHdyYXBzIENvcmVTaW11bGF0b3IgZnVuY3Rp
b25hbGl0eSB0aHJvdWdoIHNpbWN0bC4KIAotSWYgcG9zc2libGUsIHVzZSByZWFsIENvcmVTaW11
bGF0b3IuZnJhbWV3b3JrIGZ1bmN0aW9uYWxpdHkgYnkgbGlua2luZyB0byB0aGUgZnJhbWV3b3Jr
IGl0c2VsZi4KLURvIG5vdCB1c2UgUHlPYmpDIHRvIGRsb3BlbiB0aGUgZnJhbWV3b3JrLgotIiIi
Ci0KLQotY2xhc3MgRGV2aWNlVHlwZShvYmplY3QpOgotICAgICIiIgotICAgIFJlcHJlc2VudHMg
YSBDb3JlU2ltdWxhdG9yIGRldmljZSB0eXBlLgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBuYW1lLCBpZGVudGlmaWVyKToKLSAgICAgICAgIiIiCi0gICAgICAgIDpwYXJhbSBuYW1l
OiBUaGUgZGV2aWNlIHR5cGUncyBodW1hbi1yZWFkYWJsZSBuYW1lCi0gICAgICAgIDp0eXBlIG5h
bWU6IHN0cgotICAgICAgICA6cGFyYW0gaWRlbnRpZmllcjogVGhlIENvcmVTaW11bGF0b3IgaWRl
bnRpZmllci4KLSAgICAgICAgOnR5cGUgaWRlbnRpZmllcjogc3RyCi0gICAgICAgICIiIgotICAg
ICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYuaWRlbnRpZmllciA9IGlkZW50aWZp
ZXIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmcm9tX25hbWUoY2xzLCBuYW1lKToKLSAg
ICAgICAgIiIiCi0gICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBmb3IgdGhlIGRlc2lyZWQg
ZGV2aWNlIHR5cGUuCi0gICAgICAgIDp0eXBlIG5hbWU6IHN0cgotICAgICAgICA6cmV0dXJuczog
QSBgRGV2aWNlVHlwZWAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIG9yIHRo
cm93cyBhIFR5cGVFcnJvciBpZiBpdCBkb2Vzbid0IGV4aXN0LgotICAgICAgICA6cnR5cGU6IERl
dmljZVR5cGUKLSAgICAgICAgIiIiCi0gICAgICAgIGlkZW50aWZpZXIgPSBOb25lCi0gICAgICAg
IGZvciBkZXZpY2VfdHlwZSBpbiBTaW11bGF0b3IoKS5kZXZpY2VfdHlwZXM6Ci0gICAgICAgICAg
ICBpZiBkZXZpY2VfdHlwZS5uYW1lID09IG5hbWU6Ci0gICAgICAgICAgICAgICAgaWRlbnRpZmll
ciA9IGRldmljZV90eXBlLmlkZW50aWZpZXIKLSAgICAgICAgICAgICAgICBicmVhawotCi0gICAg
ICAgIGlmIGlkZW50aWZpZXIgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcign
QSBkZXZpY2UgdHlwZSB3aXRoIG5hbWUgIntuYW1lfSIgZG9lcyBub3QgZXhpc3QuJy5mb3JtYXQo
bmFtZT1uYW1lKSkKLQotICAgICAgICByZXR1cm4gRGV2aWNlVHlwZShuYW1lLCBpZGVudGlmaWVy
KQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZyb21faWRlbnRpZmllcihjbHMsIGlkZW50
aWZpZXIpOgotICAgICAgICAiIiIKLSAgICAgICAgOnBhcmFtIGlkZW50aWZpZXI6IFRoZSBDb3Jl
U2ltdWxhdG9yIGlkZW50aWZpZXIgZm9yIHRoZSBkZXNpcmVkIHJ1bnRpbWUuCi0gICAgICAgIDp0
eXBlIGlkZW50aWZpZXI6IHN0cgotICAgICAgICA6cmV0dXJuczogQSBgUnVudGltZWAgb2JqZWN0
IHdpdGh0IHRoZSBzcGVjaWZpZWQgaWRlbnRpZmllciBvciB0aHJvd3MgYSBUeXBlRXJyb3IgaWYg
aXQgZG9lc24ndCBleGlzdC4KLSAgICAgICAgOnJ0eXBlOiBEZXZpY2VUeXBlCi0gICAgICAgICIi
IgotICAgICAgICBuYW1lID0gTm9uZQotICAgICAgICBmb3IgZGV2aWNlX3R5cGUgaW4gU2ltdWxh
dG9yKCkuZGV2aWNlX3R5cGVzOgotICAgICAgICAgICAgaWYgZGV2aWNlX3R5cGUuaWRlbnRpZmll
ciA9PSBpZGVudGlmaWVyOgotICAgICAgICAgICAgICAgIG5hbWUgPSBkZXZpY2VfdHlwZS5uYW1l
Ci0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICBpZiBuYW1lIGlzIE5vbmU6Ci0gICAg
ICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0EgZGV2aWNlIHR5cGUgd2l0aCBpZGVudGlmaWVyICJ7
aWRlbnRpZmllcn0iIGRvZXMgbm90IGV4aXN0LicuZm9ybWF0KAotICAgICAgICAgICAgICAgIGlk
ZW50aWZpZXI9aWRlbnRpZmllcikpCi0KLSAgICAgICAgcmV0dXJuIERldmljZVR5cGUobmFtZSwg
aWRlbnRpZmllcikKLQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1
cm4gKHNlbGYubmFtZSA9PSBvdGhlci5uYW1lKSBhbmQgKHNlbGYuaWRlbnRpZmllciA9PSBvdGhl
ci5pZGVudGlmaWVyKQotCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJl
dHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0g
ICAgICAgIHJldHVybiAnPERldmljZVR5cGUgIntuYW1lfSI6IHtpZGVudGlmaWVyfT4nLmZvcm1h
dChuYW1lPXNlbGYubmFtZSwgaWRlbnRpZmllcj1zZWxmLmlkZW50aWZpZXIpCi0KLQotY2xhc3Mg
UnVudGltZShvYmplY3QpOgotICAgICIiIgotICAgIFJlcHJlc2VudHMgYSBDb3JlU2ltdWxhdG9y
IHJ1bnRpbWUgYXNzb2NpYXRlZCB3aXRoIGFuIGlPUyBTREsuCi0gICAgIiIiCi0KLSAgICBkZWYg
X19pbml0X18oc2VsZiwgdmVyc2lvbiwgaWRlbnRpZmllciwgYXZhaWxhYmxlLCBkZXZpY2VzPU5v
bmUsIGlzX2ludGVybmFsX3J1bnRpbWU9RmFsc2UpOgotICAgICAgICAiIiIKLSAgICAgICAgOnBh
cmFtIHZlcnNpb246IFRoZSBpT1MgU0RLIHZlcnNpb24KLSAgICAgICAgOnR5cGUgdmVyc2lvbjog
dHVwbGUKLSAgICAgICAgOnBhcmFtIGlkZW50aWZpZXI6IFRoZSBDb3JlU2ltdWxhdG9yIHJ1bnRp
bWUgaWRlbnRpZmllcgotICAgICAgICA6dHlwZSBpZGVudGlmaWVyOiBzdHIKLSAgICAgICAgOnBh
cmFtIGF2YWlsYWJpbGl0eTogV2hldGhlciB0aGUgcnVudGltZSBpcyBhdmFpbGFibGUgZm9yIHVz
ZS4KLSAgICAgICAgOnR5cGUgYXZhaWxhYmlsaXR5OiBib29sCi0gICAgICAgIDpwYXJhbSBkZXZp
Y2VzOiBBIGxpc3Qgb2YgZGV2aWNlcyB1bmRlciB0aGlzIHJ1bnRpbWUKLSAgICAgICAgOnR5cGUg
ZGV2aWNlczogbGlzdCBvciBOb25lCi0gICAgICAgIDpwYXJhbSBpc19pbnRlcm5hbF9ydW50aW1l
OiBXaGV0aGVyIHRoZSBydW50aW1lIGlzIGFuIEFwcGxlIGludGVybmFsIHJ1bnRpbWUKLSAgICAg
ICAgOnR5cGUgaXNfaW50ZXJuYWxfcnVudGltZTogYm9vbAotICAgICAgICAiIiIKLSAgICAgICAg
c2VsZi52ZXJzaW9uID0gdmVyc2lvbgotICAgICAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlm
aWVyCi0gICAgICAgIHNlbGYuYXZhaWxhYmxlID0gYXZhaWxhYmxlCi0gICAgICAgIHNlbGYuZGV2
aWNlcyA9IGRldmljZXMgb3IgW10KLSAgICAgICAgc2VsZi5pc19pbnRlcm5hbF9ydW50aW1lID0g
aXNfaW50ZXJuYWxfcnVudGltZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZyb21fdmVy
c2lvbl9zdHJpbmcoY2xzLCB2ZXJzaW9uKToKLSAgICAgICAgcmV0dXJuIGNscy5mcm9tX2lkZW50
aWZpZXIoJ2NvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLScgKyB2ZXJzaW9u
LnJlcGxhY2UoJy4nLCAnLScpKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZyb21faWRl
bnRpZmllcihjbHMsIGlkZW50aWZpZXIpOgotICAgICAgICAiIiIKLSAgICAgICAgOnBhcmFtIGlk
ZW50aWZpZXI6IFRoZSBpZGVudGlmaWVyIGZvciB0aGUgZGVzaXJlZCBDb3JlU2ltdWxhdG9yIHJ1
bnRpbWUuCi0gICAgICAgIDp0eXBlIGlkZW50aWZpZXI6IHN0cgotICAgICAgICA6cmV0dXJuczog
QSBgUnVudGltZWAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIG9yIHRocm93
cyBhIFR5cGVFcnJvciBpZiBpdCBkb2Vzbid0IGV4aXN0LgotICAgICAgICA6cnR5cGU6IFJ1bnRp
bWUKLSAgICAgICAgIiIiCi0gICAgICAgIGZvciBydW50aW1lIGluIFNpbXVsYXRvcigpLnJ1bnRp
bWVzOgotICAgICAgICAgICAgaWYgcnVudGltZS5pZGVudGlmaWVyID09IGlkZW50aWZpZXI6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJ1bnRpbWUKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdB
IHJ1bnRpbWUgd2l0aCBpZGVudGlmaWVyICJ7aWRlbnRpZmllcn0iIGRvZXMgbm90IGV4aXN0Licu
Zm9ybWF0KGlkZW50aWZpZXI9aWRlbnRpZmllcikpCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90
aGVyKToKLSAgICAgICAgcmV0dXJuIChzZWxmLnZlcnNpb24gPT0gb3RoZXIudmVyc2lvbikgYW5k
IChzZWxmLmlkZW50aWZpZXIgPT0gb3RoZXIuaWRlbnRpZmllcikgYW5kIChzZWxmLmlzX2ludGVy
bmFsX3J1bnRpbWUgPT0gb3RoZXIuaXNfaW50ZXJuYWxfcnVudGltZSkKLQotICAgIGRlZiBfX25l
X18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IHNlbGYuX19lcV9fKG90aGVyKQot
Ci0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICB2ZXJzaW9uX3N1ZmZpeCA9ICIiCi0g
ICAgICAgIGlmIHNlbGYuaXNfaW50ZXJuYWxfcnVudGltZToKLSAgICAgICAgICAgIHZlcnNpb25f
c3VmZml4ID0gIiBJbnRlcm5hbCIKLSAgICAgICAgcmV0dXJuICc8UnVudGltZSB7dmVyc2lvbn06
IHtpZGVudGlmaWVyfS4gQXZhaWxhYmxlOiB7YXZhaWxhYmxlfSwge251bV9kZXZpY2VzfSBkZXZp
Y2VzPicuZm9ybWF0KAotICAgICAgICAgICAgdmVyc2lvbj0nLicuam9pbihtYXAoc3RyLCBzZWxm
LnZlcnNpb24pKSArIHZlcnNpb25fc3VmZml4LAotICAgICAgICAgICAgaWRlbnRpZmllcj1zZWxm
LmlkZW50aWZpZXIsCi0gICAgICAgICAgICBhdmFpbGFibGU9c2VsZi5hdmFpbGFibGUsCi0gICAg
ICAgICAgICBudW1fZGV2aWNlcz1sZW4oc2VsZi5kZXZpY2VzKSkKLQotCi1jbGFzcyBEZXZpY2Uo
b2JqZWN0KToKK2NsYXNzIFNpbXVsYXRlZERldmljZShEZXZpY2UpOgogICAgICIiIgogICAgIFJl
cHJlc2VudHMgYSBDb3JlU2ltdWxhdG9yIGRldmljZSB1bmRlcm5lYXRoIGEgcnVudGltZQogICAg
ICIiIgpAQCAtMTgwLDkgKzQ5LDcgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAgIDpw
YXJhbSBob3N0OiBUaGUgaG9zdCB3aGljaCBjYW4gcnVuIGNvbW1hbmQgbGluZSBjb21tYW5kcwog
ICAgICAgICA6dHlwZSBob3N0OiBIb3N0CiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl9ob3N0
ID0gaG9zdAotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYudWRpZCA9IHVk
aWQKKyAgICAgICAgc3VwZXIoU2ltdWxhdGVkRGV2aWNlLCBzZWxmKS5fX2luaXRfXyhuYW1lLCB1
ZGlkLCBob3N0KQogICAgICAgICBzZWxmLmF2YWlsYWJsZSA9IGF2YWlsYWJsZQogICAgICAgICBz
ZWxmLnJ1bnRpbWUgPSBydW50aW1lCiAKQEAgLTI0Miw3ICsxMDksNyBAQCBjbGFzcyBEZXZpY2Uo
b2JqZWN0KToKICAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2UuCiAg
ICAgICAgIDp0eXBlIHVkaWQ6IHN0cgogICAgICAgICAiIiIKLSAgICAgICAgRGV2aWNlLnNodXRk
b3duKHVkaWQpCisgICAgICAgIFNpbXVsYXRlZERldmljZS5zaHV0ZG93bih1ZGlkKQogICAgICAg
ICB0cnk6CiAgICAgICAgICAgICBfbG9nLmRlYnVnKCd4Y3J1biBzaW1jdGwgZGVsZXRlICVzJywg
dWRpZCkKICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ3hjcnVuJywgJ3NpbWN0
bCcsICdkZWxldGUnLCB1ZGlkXSkKQEAgLTI1Niw3ICsxMjMsNyBAQCBjbGFzcyBEZXZpY2Uob2Jq
ZWN0KToKICAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2UuCiAgICAg
ICAgIDp0eXBlIHVkaWQ6IHN0cgogICAgICAgICAiIiIKLSAgICAgICAgRGV2aWNlLnNodXRkb3du
KHVkaWQpCisgICAgICAgIFNpbXVsYXRlZERldmljZS5zaHV0ZG93bih1ZGlkKQogICAgICAgICB0
cnk6CiAgICAgICAgICAgICBfbG9nLmRlYnVnKCd4Y3J1biBzaW1jdGwgZXJhc2UgJXMnLCB1ZGlk
KQogICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsneGNydW4nLCAnc2ltY3RsJywg
J2VyYXNlJywgdWRpZF0pCkBAIC0zMDksMzY5ICsxNzYsOSBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0
KToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRmFpbGVkIHRvIGZpbmQgcHJvY2Vz
cyBpZCBmb3Ige306IHt9Jy5mb3JtYXQoYnVuZGxlX2lkLCBvdXRwdXQpKQogICAgICAgICByZXR1
cm4gaW50KG1hdGNoLmdyb3VwKCdwaWQnKSkKIAotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIp
OgotICAgICAgICByZXR1cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQKLQotICAgIGRlZiBfX25l
X18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IHNlbGYuX19lcV9fKG90aGVyKQot
CiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJzxEZXZpY2UgIntuYW1l
fSI6IHt1ZGlkfS4gU3RhdGU6IHtzdGF0ZX0uIFJ1bnRpbWU6IHtydW50aW1lfSwgQXZhaWxhYmxl
OiB7YXZhaWxhYmxlfT4nLmZvcm1hdCgKLSAgICAgICAgICAgIG5hbWU9c2VsZi5uYW1lLAotICAg
ICAgICAgICAgdWRpZD1zZWxmLnVkaWQsCisgICAgICAgIHJldHVybiAnPHtkZXZpY2VfaW5mb30g
U3RhdGU6IHtzdGF0ZX0uIFJ1bnRpbWU6IHtydW50aW1lfSwgQXZhaWxhYmxlOiB7YXZhaWxhYmxl
fT4nLmZvcm1hdCgKKyAgICAgICAgICAgIGRldmljZV9pbmZvPXN1cGVyKFNpbXVsYXRlZERldmlj
ZSwgc2VsZikuX19yZXByX18oKSwKICAgICAgICAgICAgIHN0YXRlPXNlbGYuc3RhdGUsCiAgICAg
ICAgICAgICBhdmFpbGFibGU9c2VsZi5hdmFpbGFibGUsCiAgICAgICAgICAgICBydW50aW1lPXNl
bGYucnVudGltZS5pZGVudGlmaWVyKQotCi0KLSMgRklYTUU6IFRoaXMgY2xhc3MgaXMgZnJhZ2ls
ZSBiZWNhdXNlIGl0IHBhcnNlcyB0aGUgb3V0cHV0IG9mIHRoZSBzaW1jdGwgY29tbWFuZCBsaW5l
IHV0aWxpdHksIHdoaWNoIG1heSBjaGFuZ2UuCi0jICAgICAgICBXZSBzaG91bGQgZmluZCBhIGJl
dHRlciB3YXkgdG8gcXVlcnkgZm9yIHNpbXVsYXRvciBkZXZpY2Ugc3RhdGUgYW5kIGNhcGFiaWxp
dGllcy4gTWF5YmUgdGFrZSBhIHNpbWlsaWFyCi0jICAgICAgICBhcHByb2FjaCBhcyBpbiB3ZWJr
aXRkaXJzLnBtIGFuZCB1dGlsaXplIHRoZSBwYXJzZWQgb3V0cHV0IGZyb20gdGhlIGRldmljZS5w
bGlzdCBmaWxlcyBpbiB0aGUgc3ViLQotIyAgICAgICAgZGlyZWN0b3JpZXMgb2Ygfi9MaWJyYXJ5
L0RldmVsb3Blci9Db3JlU2ltdWxhdG9yL0RldmljZXM/Ci0jICAgICAgICBBbHNvLCBzaW1jdGwg
aGFzIHRoZSBvcHRpb24gdG8gb3V0cHV0IGluIEpTT04gZm9ybWF0ICh4Y3J1biBzaW1jdGwgbGlz
dCAtLWpzb24pLgotY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6Ci0gICAgIiIiCi0gICAgUmVwcmVz
ZW50cyB0aGUgaU9TIFNpbXVsYXRvciBpbmZyYXN0cnVjdHVyZSB1bmRlciB0aGUgY3VycmVudGx5
IHNlbGVjdCBYY29kZS5hcHAgYnVuZGxlLgotICAgICIiIgotICAgIGRldmljZV90eXBlX3JlID0g
cmUuY29tcGlsZSgnKD9QPG5hbWU+W14oXSspXCgoP1A8aWRlbnRpZmllcj5bXildKylcKScpCi0g
ICAgIyBGSVhNRTogcnVudGltZV9yZSBwYXJzZXMgdGhlIHZlcnNpb24gZnJvbSB0aGUgcnVudGlt
ZSBuYW1lLCBidXQgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBmdWxsIHZlcnNpb24gbnVtYmVy
Ci0gICAgIyAoaXQgY2FuIG9taXQgdGhlIHJldmlzaW9uKS4gV2Ugc2hvdWxkIGluc3RlYWQgcGFy
c2UgdGhlIHZlcnNpb24gZnJvbSB0aGUgbnVtYmVyIGNvbnRhaW5lZCBpbiBwYXJlbnRoZXNlcy4K
LSAgICBydW50aW1lX3JlID0gcmUuY29tcGlsZSgKLSAgICAgICAgJyhpfHdhdGNofHR2KU9TICg/
UDx2ZXJzaW9uPlxkK1wuXGQpKD9QPGludGVybmFsPiBJbnRlcm5hbCk/IFwoXGQrXC5cZCsoXC5c
ZCspPyAtICg/UDxidWlsZF92ZXJzaW9uPlteKV0rKVwpIFwoKD9QPGlkZW50aWZpZXI+W14pXSsp
XCkoIFwoKD9QPGF2YWlsYWJpbGl0eT5bXildKylcKSk/JykKLSAgICB1bmF2YWlsYWJsZV92ZXJz
aW9uX3JlID0gcmUuY29tcGlsZSgnLS0gVW5hdmFpbGFibGU6ICg/UDxpZGVudGlmaWVyPlteIF0r
KSAtLScpCi0gICAgdmVyc2lvbl9yZSA9IHJlLmNvbXBpbGUoJy0tIChpfHdhdGNofHR2KU9TICg/
UDx2ZXJzaW9uPlxkK1wuXGQrKSg/UDxpbnRlcm5hbD4gSW50ZXJuYWwpPyAtLScpCi0gICAgZGV2
aWNlc19yZSA9IHJlLmNvbXBpbGUoCi0gICAgICAgICdccyooP1A8bmFtZT5bXihdKyApXCgoP1A8
dWRpZD5bXildKylcKSBcKCg/UDxzdGF0ZT5bXildKylcKSggXCgoP1A8YXZhaWxhYmlsaXR5Plte
KV0rKVwpKT8nKQotCi0gICAgX21hbmFnZWRfZGV2aWNlcyA9IHt9Ci0KLSAgICBkZWYgX19pbml0
X18oc2VsZiwgaG9zdD1Ob25lKToKLSAgICAgICAgc2VsZi5faG9zdCA9IGhvc3Qgb3IgSG9zdCgp
Ci0gICAgICAgIHNlbGYucnVudGltZXMgPSBbXQotICAgICAgICBzZWxmLmRldmljZV90eXBlcyA9
IFtdCi0gICAgICAgIHNlbGYucmVmcmVzaCgpCi0KLSAgICAjIEtlZXAgdGhlc2UgY29uc3RhbnRz
IHN5bmNocm9uaXplZCB3aXRoIHRoZSBTaW1EZXZpY2VTdGF0ZSBjb25zdGFudHMgaW4gQ29yZVNp
bXVsYXRvci9TaW1EZXZpY2UuaC4KLSAgICBjbGFzcyBEZXZpY2VTdGF0ZToKLSAgICAgICAgRE9F
U19OT1RfRVhJU1QgPSAtMQotICAgICAgICBDUkVBVElORyA9IDAKLSAgICAgICAgU0hVVERPV04g
PSAxCi0gICAgICAgIEJPT1RJTkcgPSAyCi0gICAgICAgIEJPT1RFRCA9IDMKLSAgICAgICAgU0hV
VFRJTkdfRE9XTiA9IDQKLQotICAgIE5BTUVfRk9SX1NUQVRFID0gWwotICAgICAgICAnQ1JFQVRJ
TkcnLAotICAgICAgICAnU0hVVERPV04nLAotICAgICAgICAnQk9PVElORycsCi0gICAgICAgICdC
T09URUQnLAotICAgICAgICAnU0hVVFRJTkdfRE9XTicKLSAgICBdCi0KLSAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIGNyZWF0ZV9kZXZpY2UobnVtYmVyLCBkZXZpY2VfdHlwZSwgcnVudGltZSk6
Ci0gICAgICAgIGRldmljZSA9IFNpbXVsYXRvcigpLmxvb2t1cF9vcl9jcmVhdGVfZGV2aWNlKGRl
dmljZV90eXBlLm5hbWUgKyAnIFdlYktpdCBUZXN0ZXInICsgc3RyKG51bWJlciksIGRldmljZV90
eXBlLCBydW50aW1lKQotICAgICAgICBfbG9nLmRlYnVnKCdjcmVhdGVkIGRldmljZSB7fSB7fScu
Zm9ybWF0KG51bWJlciwgZGV2aWNlKSkKLSAgICAgICAgYXNzZXJ0KGxlbihTaW11bGF0b3IuX21h
bmFnZWRfZGV2aWNlcykgPT0gbnVtYmVyKQotICAgICAgICBTaW11bGF0b3IuX21hbmFnZWRfZGV2
aWNlc1tudW1iZXJdID0gZGV2aWNlCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHJlbW92
ZV9kZXZpY2UobnVtYmVyKToKLSAgICAgICAgaWYgbm90IFNpbXVsYXRvci5fbWFuYWdlZF9kZXZp
Y2VzW251bWJlcl06Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZGV2aWNlX3VkaWQgPSBT
aW11bGF0b3IuX21hbmFnZWRfZGV2aWNlc1tudW1iZXJdLnVkaWQKLSAgICAgICAgX2xvZy5kZWJ1
ZygncmVtb3ZpbmcgZGV2aWNlIHt9IHt9Jy5mb3JtYXQobnVtYmVyLCBkZXZpY2VfdWRpZCkpCi0g
ICAgICAgIGRlbCBTaW11bGF0b3IuX21hbmFnZWRfZGV2aWNlc1tudW1iZXJdCi0gICAgICAgIFNp
bXVsYXRvci5kZWxldGVfZGV2aWNlKGRldmljZV91ZGlkKQotCi0gICAgQHN0YXRpY21ldGhvZAot
ICAgIGRlZiBkZXZpY2VfbnVtYmVyKG51bWJlcik6Ci0gICAgICAgIHJldHVybiBTaW11bGF0b3Iu
X21hbmFnZWRfZGV2aWNlc1tudW1iZXJdCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGRl
dmljZV9zdGF0ZV9kZXNjcmlwdGlvbihzdGF0ZSk6Ci0gICAgICAgIGlmIChzdGF0ZSA9PSBTaW11
bGF0b3IuRGV2aWNlU3RhdGUuRE9FU19OT1RfRVhJU1QpOgotICAgICAgICAgICAgcmV0dXJuICdE
T0VTX05PVF9FWElTVCcKLSAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5OQU1FX0ZPUl9TVEFURVtz
dGF0ZV0KLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgd2FpdF91bnRpbF9kZXZpY2VfaXNf
Ym9vdGVkKHVkaWQsIHRpbWVvdXRfc2Vjb25kcz02MCAqIDUpOgotICAgICAgICBTaW11bGF0b3Iu
d2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUodWRpZCwgU2ltdWxhdG9yLkRldmljZVN0YXRl
LkJPT1RFRCwgdGltZW91dF9zZWNvbmRzKQotICAgICAgICB3aXRoIHRpbWVvdXQoc2Vjb25kcz10
aW1lb3V0X3NlY29uZHMpOgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3VicHJvY2Vzcy5jaGVja19vdXRw
dXQoWyd4Y3J1bicsICdzaW1jdGwnLCAnc3Bhd24nLCB1ZGlkLCAnbGF1bmNoY3RsJywgJ3ByaW50
JywgJ3N5c3RlbSddKS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ3hj
cnVuIHNpbWN0bCBzcGF3biAlcycsIHVkaWQpCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgcmUu
c2VhcmNoKCJBW1xzXStjb20uYXBwbGUuc3ByaW5nYm9hcmQuc2VydmljZXMiLCBzdGF0ZSk6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICBleGNlcHQgc3Vi
cHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIFNpbXVs
YXRvci5kZXZpY2Vfc3RhdGUodWRpZCkgIT0gU2ltdWxhdG9yLkRldmljZVN0YXRlLkJPT1RFRDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignU2ltdWF0b3IgZGV2
aWNlIHF1aXQgdW5leHBlY3RlZGx5LicpCi0gICAgICAgICAgICAgICAgICAgIF9sb2cud2Fybigi
RXJyb3IgaW4gY2hlY2tpbmcgU2ltdWxhdG9yIGJvb3Qgc3RhdHVzLiBXaWxsIHJldHJ5IGluIDEg
c2Vjb25kLiIpCi0gICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQotCi0gICAgQHN0YXRpY21l
dGhvZAotICAgIGRlZiB3YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZSh1ZGlkLCB3YWl0X3Vu
dGlsX3N0YXRlLCB0aW1lb3V0X3NlY29uZHM9NjAgKiA1KToKLSAgICAgICAgX2xvZy5kZWJ1Zygn
d2FpdGluZyBmb3IgZGV2aWNlICVzIHRvIGVudGVyIHN0YXRlICVzIHdpdGggdGltZW91dCAlcycs
IHVkaWQsIFNpbXVsYXRvci5kZXZpY2Vfc3RhdGVfZGVzY3JpcHRpb24od2FpdF91bnRpbF9zdGF0
ZSksIHRpbWVvdXRfc2Vjb25kcykKLSAgICAgICAgd2l0aCB0aW1lb3V0KHNlY29uZHM9dGltZW91
dF9zZWNvbmRzKToKLSAgICAgICAgICAgIGRldmljZV9zdGF0ZSA9IFNpbXVsYXRvci5kZXZpY2Vf
c3RhdGUodWRpZCkKLSAgICAgICAgICAgIHdoaWxlIChkZXZpY2Vfc3RhdGUgIT0gd2FpdF91bnRp
bF9zdGF0ZSk6Ci0gICAgICAgICAgICAgICAgZGV2aWNlX3N0YXRlID0gU2ltdWxhdG9yLmRldmlj
ZV9zdGF0ZSh1ZGlkKQotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyBkZXZpY2Ugc3RhdGUg
JXMnLCBTaW11bGF0b3IuZGV2aWNlX3N0YXRlX2Rlc2NyaXB0aW9uKGRldmljZV9zdGF0ZSkpCi0g
ICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjUpCi0KLSAgICAgICAgZW5kX3N0YXRlID0gU2lt
dWxhdG9yLmRldmljZV9zdGF0ZSh1ZGlkKQotICAgICAgICBpZiAoZW5kX3N0YXRlICE9IHdhaXRf
dW50aWxfc3RhdGUpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaW1lZCBvdXQg
d2FpdGluZyBmb3Igc2ltdWxhdG9yIGRldmljZSB0byBlbnRlciBzdGF0ZSB7MH07IGN1cnJlbnQg
c3RhdGUgaXMgezF9Jy5mb3JtYXQoU2ltdWxhdG9yLmRldmljZV9zdGF0ZV9kZXNjcmlwdGlvbih3
YWl0X3VudGlsX3N0YXRlKSwgU2ltdWxhdG9yLmRldmljZV9zdGF0ZV9kZXNjcmlwdGlvbihlbmRf
c3RhdGUpKSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZGV2aWNlX3N0YXRlKHVkaWQp
OgotICAgICAgICBkZXZpY2VfcGxpc3QgPSBvcy5wYXRoLmpvaW4oU2ltdWxhdG9yLmRldmljZV9k
aXJlY3RvcnkodWRpZCksICdkZXZpY2UucGxpc3QnKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5p
c2ZpbGUoZGV2aWNlX3BsaXN0KToKLSAgICAgICAgICAgIHJldHVybiBTaW11bGF0b3IuRGV2aWNl
U3RhdGUuRE9FU19OT1RfRVhJU1QKLSAgICAgICAgcmV0dXJuIHBsaXN0bGliLnJlYWRQbGlzdChk
ZXZpY2VfcGxpc3QpWydzdGF0ZSddCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGRldmlj
ZV9kaXJlY3RvcnkodWRpZCk6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLnJlYWxwYXRoKG9zLnBh
dGguZXhwYW5kdXNlcihvcy5wYXRoLmpvaW4oJ34vTGlicmFyeS9EZXZlbG9wZXIvQ29yZVNpbXVs
YXRvci9EZXZpY2VzJywgdWRpZCkpKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBkZWxl
dGVfZGV2aWNlKHVkaWQpOgotICAgICAgICBEZXZpY2UuZGVsZXRlKHVkaWQpCi0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIHJlc2V0X2RldmljZSh1ZGlkKToKLSAgICAgICAgRGV2aWNlLnJl
c2V0KHVkaWQpCi0KLSAgICBkZWYgcmVmcmVzaChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAg
IFJlZnJlc2ggcnVudGltZSBhbmQgZGV2aWNlIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBgYHNpbWN0
bCBsaXN0YGAuCi0gICAgICAgICIiIgotICAgICAgICBsaW5lcyA9IHNlbGYuX2hvc3QucGxhdGZv
cm0ueGNvZGVfc2ltY3RsX2xpc3QoKQotICAgICAgICBpZiBub3QgbGluZXM6Ci0gICAgICAgICAg
ICByZXR1cm4KLSAgICAgICAgZGV2aWNlX3R5cGVzX2hlYWRlciA9IG5leHQobGluZXMpCi0gICAg
ICAgIGlmIGRldmljZV90eXBlc19oZWFkZXIgIT0gJz09IERldmljZSBUeXBlcyA9PSc6Ci0gICAg
ICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0V4cGVjdGVkID09IERldmljZSBUeXBlcyA9PSBo
ZWFkZXIgYnV0IGdvdDogInt9IicuZm9ybWF0KGRldmljZV90eXBlc19oZWFkZXIpKQotICAgICAg
ICBzZWxmLl9wYXJzZV9kZXZpY2VfdHlwZXMobGluZXMpCi0KLSAgICBkZWYgX3BhcnNlX2Rldmlj
ZV90eXBlcyhzZWxmLCBsaW5lcyk6Ci0gICAgICAgICIiIgotICAgICAgICBQYXJzZSBkZXZpY2Ug
dHlwZXMgZnJvbSBgYHNpbWN0bCBsaXN0YGAuCi0gICAgICAgIDpwYXJhbSBsaW5lczogQSBnZW5l
cmF0b3IgZm9yIHRoZSBvdXRwdXQgbGluZXMgZnJvbSBgYHNpbWN0bCBsaXN0YGAuCi0gICAgICAg
IDp0eXBlIGxpbmVzOiBnZW5leHByCi0gICAgICAgIDpyZXR1cm46IE5vbmUKLSAgICAgICAgIiIi
Ci0gICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgZGV2aWNlX3R5cGVfbWF0
Y2ggPSBzZWxmLmRldmljZV90eXBlX3JlLm1hdGNoKGxpbmUpCi0gICAgICAgICAgICBpZiBub3Qg
ZGV2aWNlX3R5cGVfbWF0Y2g6Ci0gICAgICAgICAgICAgICAgaWYgbGluZSAhPSAnPT0gUnVudGlt
ZXMgPT0nOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0V4cGVjdGVk
ID09IFJ1bnRpbWVzID09IGhlYWRlciBidXQgZ290OiAie30iJy5mb3JtYXQobGluZSkpCi0gICAg
ICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZShu
YW1lPWRldmljZV90eXBlX21hdGNoLmdyb3VwKCduYW1lJykucnN0cmlwKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1kZXZpY2VfdHlwZV9tYXRjaC5n
cm91cCgnaWRlbnRpZmllcicpKQotICAgICAgICAgICAgc2VsZi5kZXZpY2VfdHlwZXMuYXBwZW5k
KGRldmljZV90eXBlKQotCi0gICAgICAgIHNlbGYuX3BhcnNlX3J1bnRpbWVzKGxpbmVzKQotCi0g
ICAgZGVmIF9wYXJzZV9ydW50aW1lcyhzZWxmLCBsaW5lcyk6Ci0gICAgICAgICIiIgotICAgICAg
ICBDb250aW51ZSB0byBwYXJzZSBydW50aW1lcyBmcm9tIGBgc2ltY3RsIGxpc3RgYC4KLSAgICAg
ICAgOnBhcmFtIGxpbmVzOiBBIGdlbmVyYXRvciBmb3IgdGhlIG91dHB1dCBsaW5lcyBmcm9tIGBg
c2ltY3RsIGxpc3RgYC4KLSAgICAgICAgOnR5cGUgbGluZXM6IGdlbmV4cHIKLSAgICAgICAgOnJl
dHVybjogTm9uZQotICAgICAgICAiIiIKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAg
ICAgICAgICBydW50aW1lX21hdGNoID0gc2VsZi5ydW50aW1lX3JlLm1hdGNoKGxpbmUpCi0gICAg
ICAgICAgICBpZiBub3QgcnVudGltZV9tYXRjaDoKLSAgICAgICAgICAgICAgICBpZiBsaW5lICE9
ICc9PSBEZXZpY2VzID09JzoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y
KCdFeHBlY3RlZCA9PSBEZXZpY2VzID09IGhlYWRlciBidXQgZ290OiAie30iJy5mb3JtYXQobGlu
ZSkpCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHZlcnNpb24gPSB0dXBsZSht
YXAoaW50LCBydW50aW1lX21hdGNoLmdyb3VwKCd2ZXJzaW9uJykuc3BsaXQoJy4nKSkpCi0gICAg
ICAgICAgICBydW50aW1lID0gUnVudGltZSh2ZXJzaW9uPXZlcnNpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZGVudGlmaWVyPXJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ2lkZW50aWZp
ZXInKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZT1ydW50aW1lX21h
dGNoLmdyb3VwKCdhdmFpbGFiaWxpdHknKSBpcyBOb25lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNfaW50ZXJuYWxfcnVudGltZT1ib29sKHJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ2lu
dGVybmFsJykpKQotICAgICAgICAgICAgc2VsZi5ydW50aW1lcy5hcHBlbmQocnVudGltZSkKLSAg
ICAgICAgc2VsZi5fcGFyc2VfZGV2aWNlcyhsaW5lcykKLQotICAgIGRlZiBfcGFyc2VfZGV2aWNl
cyhzZWxmLCBsaW5lcyk6Ci0gICAgICAgICIiIgotICAgICAgICBDb250aW51ZSB0byBwYXJzZSBk
ZXZpY2VzIGZyb20gYGBzaW1jdGwgbGlzdGBgLgotICAgICAgICA6cGFyYW0gbGluZXM6IEEgZ2Vu
ZXJhdG9yIGZvciB0aGUgb3V0cHV0IGxpbmVzIGZyb20gYGBzaW1jdGwgbGlzdGBgLgotICAgICAg
ICA6dHlwZSBsaW5lczogZ2VuZXhwcgotICAgICAgICA6cmV0dXJuOiBOb25lCi0gICAgICAgICIi
IgotICAgICAgICBjdXJyZW50X3J1bnRpbWUgPSBOb25lCi0gICAgICAgIGZvciBsaW5lIGluIGxp
bmVzOgotICAgICAgICAgICAgdmVyc2lvbl9tYXRjaCA9IHNlbGYudmVyc2lvbl9yZS5tYXRjaChs
aW5lKQotICAgICAgICAgICAgaWYgdmVyc2lvbl9tYXRjaDoKLSAgICAgICAgICAgICAgICB2ZXJz
aW9uID0gdHVwbGUobWFwKGludCwgdmVyc2lvbl9tYXRjaC5ncm91cCgndmVyc2lvbicpLnNwbGl0
KCcuJykpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRfcnVudGltZSA9IHNlbGYucnVudGltZSh2
ZXJzaW9uPXZlcnNpb24sIGlzX2ludGVybmFsX3J1bnRpbWU9Ym9vbCh2ZXJzaW9uX21hdGNoLmdy
b3VwKCdpbnRlcm5hbCcpKSkKLSAgICAgICAgICAgICAgICBhc3NlcnQgY3VycmVudF9ydW50aW1l
Ci0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgdW5hdmFpbGFibGVfdmVy
c2lvbl9tYXRjaCA9IHNlbGYudW5hdmFpbGFibGVfdmVyc2lvbl9yZS5tYXRjaChsaW5lKQotICAg
ICAgICAgICAgaWYgdW5hdmFpbGFibGVfdmVyc2lvbl9tYXRjaDoKLSAgICAgICAgICAgICAgICBj
dXJyZW50X3J1bnRpbWUgPSBOb25lCi0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAg
ICAgICAgZGV2aWNlX21hdGNoID0gc2VsZi5kZXZpY2VzX3JlLm1hdGNoKGxpbmUpCi0gICAgICAg
ICAgICBpZiBub3QgZGV2aWNlX21hdGNoOgotICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0gJz09
IERldmljZSBQYWlycyA9PSc6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJv
cignRXhwZWN0ZWQgPT0gRGV2aWNlIFBhaXJzID09IGhlYWRlciBidXQgZ290OiAie30iJy5mb3Jt
YXQobGluZSkpCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIGN1cnJlbnRf
cnVudGltZToKLSAgICAgICAgICAgICAgICBkZXZpY2UgPSBEZXZpY2UobmFtZT1kZXZpY2VfbWF0
Y2guZ3JvdXAoJ25hbWUnKS5yc3RyaXAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWRpZD1kZXZpY2VfbWF0Y2guZ3JvdXAoJ3VkaWQnKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXZhaWxhYmxlPWRldmljZV9tYXRjaC5ncm91cCgnYXZhaWxhYmlsaXR5Jykg
aXMgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZT1jdXJyZW50
X3J1bnRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q9c2VsZi5faG9z
dCkKLSAgICAgICAgICAgICAgICBjdXJyZW50X3J1bnRpbWUuZGV2aWNlcy5hcHBlbmQoZGV2aWNl
KQotCi0gICAgZGVmIGRldmljZV90eXBlKHNlbGYsIG5hbWU9Tm9uZSwgaWRlbnRpZmllcj1Ob25l
KToKLSAgICAgICAgIiIiCi0gICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgc2hvcnQgbmFtZSBvZiB0
aGUgZGV2aWNlIHR5cGUuCi0gICAgICAgIDp0eXBlIG5hbWU6IHN0cgotICAgICAgICA6cGFyYW0g
aWRlbnRpZmllcjogVGhlIENvcmVTaW11bGF0b3IgaWRlbnRpZmllciBvZiB0aGUgZGVzaXJlZCBk
ZXZpY2UgdHlwZS4KLSAgICAgICAgOnR5cGUgaWRlbnRpZmllcjogc3RyCi0gICAgICAgIDpyZXR1
cm46IEEgZGV2aWNlIHR5cGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kL29yIGlkZW50aWZp
ZXIsIG9yIE5vbmUgaWYgb25lIGRvZXNuJ3QgZXhpc3QgYXMgc3VjaC4KLSAgICAgICAgOnJ0eXBl
OiBEZXZpY2VUeXBlCi0gICAgICAgICIiIgotICAgICAgICBmb3IgZGV2aWNlX3R5cGUgaW4gc2Vs
Zi5kZXZpY2VfdHlwZXM6Ci0gICAgICAgICAgICBpZiBuYW1lIGFuZCBkZXZpY2VfdHlwZS5uYW1l
ICE9IG5hbWU6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGlkZW50
aWZpZXIgYW5kIGRldmljZV90eXBlLmlkZW50aWZpZXIgIT0gaWRlbnRpZmllcjoKLSAgICAgICAg
ICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgcmV0dXJuIGRldmljZV90eXBlCi0gICAgICAg
IHJldHVybiBOb25lCi0KLSAgICBkZWYgcnVudGltZShzZWxmLCB2ZXJzaW9uPU5vbmUsIGlkZW50
aWZpZXI9Tm9uZSwgaXNfaW50ZXJuYWxfcnVudGltZT1Ob25lKToKLSAgICAgICAgIiIiCi0gICAg
ICAgIDpwYXJhbSB2ZXJzaW9uOiBUaGUgaU9TIHZlcnNpb24gb2YgdGhlIGRlc2lyZWQgcnVudGlt
ZS4KLSAgICAgICAgOnR5cGUgdmVyc2lvbjogdHVwbGUKLSAgICAgICAgOnBhcmFtIGlkZW50aWZp
ZXI6IFRoZSBDb3JlU2ltdWxhdG9yIGlkZW50aWZpZXIgb2YgdGhlIGRlc2lyZWQgcnVudGltZS4K
LSAgICAgICAgOnR5cGUgaWRlbnRpZmllcjogc3RyCi0gICAgICAgIDpyZXR1cm46IEEgcnVudGlt
ZSB3aXRoIHRoZSBzcGVjaWZpZWQgdmVyc2lvbiBhbmQvb3IgaWRlbnRpZmllciwgb3IgTm9uZSBp
ZiBvbmUgZG9lc24ndCBleGlzdCBhcyBzdWNoLgotICAgICAgICA6cnR5cGU6IFJ1bnRpbWUgb3Ig
Tm9uZQotICAgICAgICAiIiIKLSAgICAgICAgaWYgdmVyc2lvbiBpcyBOb25lIGFuZCBpZGVudGlm
aWVyIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ011c3Qgc3VwcGx5IHZl
cnNpb24gYW5kL29yIGlkZW50aWZpZXIuJykKLQotICAgICAgICBmb3IgcnVudGltZSBpbiBzZWxm
LnJ1bnRpbWVzOgotICAgICAgICAgICAgaWYgdmVyc2lvbiBhbmQgcnVudGltZS52ZXJzaW9uICE9
IHZlcnNpb246Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGlzX2lu
dGVybmFsX3J1bnRpbWUgYW5kIHJ1bnRpbWUuaXNfaW50ZXJuYWxfcnVudGltZSAhPSBpc19pbnRl
cm5hbF9ydW50aW1lOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBp
ZGVudGlmaWVyIGFuZCBydW50aW1lLmlkZW50aWZpZXIgIT0gaWRlbnRpZmllcjoKLSAgICAgICAg
ICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgcmV0dXJuIHJ1bnRpbWUKLSAgICAgICAgcmV0
dXJuIE5vbmUKLQotICAgIGRlZiBmaW5kX2RldmljZV9ieV91ZGlkKHNlbGYsIHVkaWQpOgotICAg
ICAgICAiIiIKLSAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSBVRElEIG9mIHRoZSBkZXZpY2UgdG8g
ZmluZC4KLSAgICAgICAgOnR5cGUgdWRpZDogc3RyCi0gICAgICAgIDpyZXR1cm46IFRoZSBgRGV2
aWNlYCB3aXRoIHRoZSBzcGVjaWZpZWQgVURJRC4KLSAgICAgICAgOnJ0eXBlOiBEZXZpY2UKLSAg
ICAgICAgIiIiCi0gICAgICAgIGZvciBkZXZpY2UgaW4gc2VsZi5kZXZpY2VzOgotICAgICAgICAg
ICAgaWYgZGV2aWNlLnVkaWQgPT0gdWRpZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNl
Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgY3VycmVudF9kZXZpY2Uoc2VsZik6Ci0g
ICAgICAgICMgRklYTUU6IEZpbmQgdGhlIHNpbXVsYXRvciBkZXZpY2UgdGhhdCB3YXMgYm9vdGVk
IGJ5IFNpbXVsYXRvci5hcHAuIEZvciBub3csIHBpY2sgc29tZSBib290ZWQgc2ltdWxhdG9yIGRl
dmljZSwgd2hpY2gKLSAgICAgICAgIyBtYXkgaGF2ZSBiZWVuIGJvb3RlZCB1c2luZyB0aGUgc2lt
Y3RsIGNvbW1hbmQgbGluZSB0b29sLgotICAgICAgICBmb3IgZGV2aWNlIGluIHNlbGYuZGV2aWNl
czoKLSAgICAgICAgICAgIGlmIGRldmljZS5zdGF0ZSA9PSBTaW11bGF0b3IuRGV2aWNlU3RhdGUu
Qk9PVEVEOgotICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2UKLSAgICAgICAgcmV0dXJuIE5v
bmUKLQotICAgICMgRklYTUU6IFdlIHNob3VsZCBmaW5kIGFuIGV4aXN0aW5nIGRldmljZSB3aXRo
IHJlc3BlY3QgdG8gaXRzIG5hbWUsIGRldmljZSB0eXBlIGFuZCBydW50aW1lLgotICAgIGRlZiBk
ZXZpY2Uoc2VsZiwgbmFtZT1Ob25lLCBydW50aW1lPU5vbmUsIHNob3VsZF9pZ25vcmVfdW5hdmFp
bGFibGVfZGV2aWNlcz1GYWxzZSk6Ci0gICAgICAgICIiIgotICAgICAgICA6cGFyYW0gbmFtZTog
VGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgZGV2aWNlLgotICAgICAgICA6dHlwZSBuYW1lOiBzdHIK
LSAgICAgICAgOnBhcmFtIHJ1bnRpbWU6IFRoZSBydW50aW1lIG9mIHRoZSBkZXNpcmVkIGRldmlj
ZS4KLSAgICAgICAgOnR5cGUgcnVudGltZTogUnVudGltZQotICAgICAgICA6cmV0dXJuOiBBIGRl
dmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQvb3IgcnVudGltZSwgb3IgTm9uZSBpZiBv
bmUgZG9lc24ndCBleGlzdCBhcyBzdWNoCi0gICAgICAgIDpydHlwZTogRGV2aWNlIG9yIE5vbmUK
LSAgICAgICAgIiIiCi0gICAgICAgIGlmIG5hbWUgaXMgTm9uZSBhbmQgcnVudGltZSBpcyBOb25l
OgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdNdXN0IHN1cHBseSBuYW1lIGFuZC9vciBy
dW50aW1lLicpCi0KLSAgICAgICAgZm9yIGRldmljZSBpbiBzZWxmLmRldmljZXM6Ci0gICAgICAg
ICAgICBpZiBzaG91bGRfaWdub3JlX3VuYXZhaWxhYmxlX2RldmljZXMgYW5kIG5vdCBkZXZpY2Uu
YXZhaWxhYmxlOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBuYW1l
IGFuZCBkZXZpY2UubmFtZSAhPSBuYW1lOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAg
ICAgICAgICBpZiBydW50aW1lIGFuZCBkZXZpY2UucnVudGltZSAhPSBydW50aW1lOgotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICByZXR1cm4gZGV2aWNlCi0gICAgICAgIHJl
dHVybiBOb25lCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgYXZhaWxhYmxlX3J1bnRpbWVzKHNl
bGYpOgotICAgICAgICAiIiIKLSAgICAgICAgOnJldHVybjogQW4gaXRlcmF0b3Igb2YgYWxsIGF2
YWlsYWJsZSBydW50aW1lcy4KLSAgICAgICAgOnJ0eXBlOiBpdGVyCi0gICAgICAgICIiIgotICAg
ICAgICByZXR1cm4gaXRlcnRvb2xzLmlmaWx0ZXIobGFtYmRhIHJ1bnRpbWU6IHJ1bnRpbWUuYXZh
aWxhYmxlLCBzZWxmLnJ1bnRpbWVzKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIGRldmljZXMo
c2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICA6cmV0dXJuOiBBbiBpdGVyYXRvciBvZiBhbGwg
ZGV2aWNlcyBmcm9tIGFsbCBydW50aW1lcy4KLSAgICAgICAgOnJ0eXBlOiBpdGVyCi0gICAgICAg
ICIiIgotICAgICAgICByZXR1cm4gaXRlcnRvb2xzLmNoYWluKCpbcnVudGltZS5kZXZpY2VzIGZv
ciBydW50aW1lIGluIHNlbGYucnVudGltZXNdKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIGxh
dGVzdF9hdmFpbGFibGVfcnVudGltZShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIDpyZXR1
cm46IFJldHVybnMgYSBSdW50aW1lIG9iamVjdCB3aXRoIHRoZSBoaWdoZXN0IHZlcnNpb24uCi0g
ICAgICAgIDpydHlwZTogUnVudGltZSBvciBOb25lCi0gICAgICAgICIiIgotICAgICAgICBpZiBu
b3Qgc2VsZi5ydW50aW1lczoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJldHVy
biBzb3J0ZWQoc2VsZi5hdmFpbGFibGVfcnVudGltZXMsIGtleT1sYW1iZGEgcnVudGltZTogcnVu
dGltZS52ZXJzaW9uLCByZXZlcnNlPVRydWUpWzBdCi0KLSAgICBkZWYgbG9va3VwX29yX2NyZWF0
ZV9kZXZpY2Uoc2VsZiwgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUpOgotICAgICAgICAiIiIK
LSAgICAgICAgUmV0dXJucyBhbiBhdmFpbGFibGUgaU9TIFNpbXVsYXRvciBkZXZpY2UgZm9yIHRl
c3RpbmcuCi0KLSAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhIG5ldyBzaW11bGF0
b3IgZGV2aWNlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLAotICAgICAgICBkZXZpY2UgdHlwZSBh
bmQgcnVudGltZSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KLQotICAgICAgICA6cGFy
YW0gbmFtZTogVGhlIG5hbWUgb2YgdGhlIHNpbXVsYXRvciBkZXZpY2UgdG8gbG9va3VwIG9yIGNy
ZWF0ZS4KLSAgICAgICAgOnR5cGUgbmFtZTogc3RyCi0gICAgICAgIDpwYXJhbSBkZXZpY2VfdHlw
ZTogVGhlIENvcmVTaW11bGF0b3IgZGV2aWNlIHR5cGUuCi0gICAgICAgIDp0eXBlIGRldmljZV90
eXBlOiBEZXZpY2VUeXBlCi0gICAgICAgIDpwYXJhbSBydW50aW1lOiBUaGUgQ29yZVNpbXVsYXRv
ciBydW50aW1lLgotICAgICAgICA6dHlwZSBydW50aW1lOiBSdW50aW1lCi0gICAgICAgIDpyZXR1
cm46IEEgZGljdGlvbmFyeSBkZXNjcmliaW5nIHRoZSBkZXZpY2UuCi0gICAgICAgIDpydHlwZTog
RGV2aWNlCi0gICAgICAgICIiIgotICAgICAgICBhc3NlcnQocnVudGltZS5hdmFpbGFibGUpCi0g
ICAgICAgIHRlc3RpbmdfZGV2aWNlID0gc2VsZi5kZXZpY2UobmFtZT1uYW1lLCBydW50aW1lPXJ1
bnRpbWUsIHNob3VsZF9pZ25vcmVfdW5hdmFpbGFibGVfZGV2aWNlcz1UcnVlKQotICAgICAgICBp
ZiB0ZXN0aW5nX2RldmljZToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ2xvb2t1cF9vcl9jcmVh
dGVfZGV2aWNlICVzICVzICVzIGZvdW5kICVzJywgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUs
IHRlc3RpbmdfZGV2aWNlLm5hbWUpCi0gICAgICAgICAgICByZXR1cm4gdGVzdGluZ19kZXZpY2UK
LSAgICAgICAgdGVzdGluZ19kZXZpY2UgPSBEZXZpY2UuY3JlYXRlKG5hbWUsIGRldmljZV90eXBl
LCBydW50aW1lKQotICAgICAgICBfbG9nLmRlYnVnKCdsb29rdXBfb3JfY3JlYXRlX2RldmljZSAl
cyAlcyAlcyBjcmVhdGVkICVzJywgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUsIHRlc3Rpbmdf
ZGV2aWNlLm5hbWUpCi0gICAgICAgIGFzc2VydCh0ZXN0aW5nX2RldmljZS5hdmFpbGFibGUpCi0g
ICAgICAgIHJldHVybiB0ZXN0aW5nX2RldmljZQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgot
ICAgICAgICByZXR1cm4gJzxpT1MgU2ltdWxhdG9yOiB7bnVtX3J1bnRpbWVzfSBydW50aW1lcywg
e251bV9kZXZpY2VfdHlwZXN9IGRldmljZSB0eXBlcz4nLmZvcm1hdCgKLSAgICAgICAgICAgIG51
bV9ydW50aW1lcz1sZW4oc2VsZi5ydW50aW1lcyksCi0gICAgICAgICAgICBudW1fZGV2aWNlX3R5
cGVzPWxlbihzZWxmLmRldmljZV90eXBlcykpCi0KLSAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAg
ICAgICAgZGVzY3JpcHRpb24gPSBbJ2lPUyBTaW11bGF0b3I6J10KLSAgICAgICAgZGVzY3JpcHRp
b24gKz0gbWFwKHN0ciwgc2VsZi5ydW50aW1lcykKLSAgICAgICAgZGVzY3JpcHRpb24gKz0gbWFw
KHN0ciwgc2VsZi5kZXZpY2VfdHlwZXMpCi0gICAgICAgIGRlc2NyaXB0aW9uICs9IG1hcChzdHIs
IHNlbGYuZGV2aWNlcykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihkZXNjcmlwdGlvbikKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAy
MTIzMDUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkod29y
a2luZyBjb3B5KQpAQCAtMTYyLDE2OCArMTYyLDYgQEAgY2xhc3MgUnVudGltZShvYmplY3QpOgog
ICAgICAgICAgICAgbnVtX2RldmljZXM9bGVuKHNlbGYuZGV2aWNlcykpCiAKIAotY2xhc3MgRGV2
aWNlKG9iamVjdCk6Ci0gICAgIiIiCi0gICAgUmVwcmVzZW50cyBhIENvcmVTaW11bGF0b3IgZGV2
aWNlIHVuZGVybmVhdGggYSBydW50aW1lCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbmFtZSwgdWRpZCwgYXZhaWxhYmxlLCBydW50aW1lLCBob3N0KToKLSAgICAgICAgIiIiCi0g
ICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgZGV2aWNlIG5hbWUKLSAgICAgICAgOnR5cGUgbmFtZTog
c3RyCi0gICAgICAgIDpwYXJhbSB1ZGlkOiBUaGUgZGV2aWNlIFVESUQgKGEgVVVJRCBzdHJpbmcp
Ci0gICAgICAgIDp0eXBlIHVkaWQ6IHN0cgotICAgICAgICA6cGFyYW0gYXZhaWxhYmxlOiBXaGV0
aGVyIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlIGZvciB1c2UuCi0gICAgICAgIDp0eXBlIGF2YWls
YWJsZTogYm9vbAotICAgICAgICA6cGFyYW0gcnVudGltZTogVGhlIGlPUyBTaW11bGF0b3IgcnVu
dGltZSB0aGF0IGhvc3RzIHRoaXMgZGV2aWNlCi0gICAgICAgIDp0eXBlIHJ1bnRpbWU6IFJ1bnRp
bWUKLSAgICAgICAgOnBhcmFtIGhvc3Q6IFRoZSBob3N0IHdoaWNoIGNhbiBydW4gY29tbWFuZCBs
aW5lIGNvbW1hbmRzCi0gICAgICAgIDp0eXBlIGhvc3Q6IEhvc3QKLSAgICAgICAgIiIiCi0gICAg
ICAgIHNlbGYuX2hvc3QgPSBob3N0Ci0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAg
c2VsZi51ZGlkID0gdWRpZAotICAgICAgICBzZWxmLmF2YWlsYWJsZSA9IGF2YWlsYWJsZQotICAg
ICAgICBzZWxmLnJ1bnRpbWUgPSBydW50aW1lCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgc3Rh
dGUoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICA6cmV0dXJuczogVGhlIGN1cnJlbnQgc3Rh
dGUgb2YgdGhlIGRldmljZS4KLSAgICAgICAgOnJ0eXBlOiBTaW11bGF0b3IuRGV2aWNlU3RhdGUK
LSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBTaW11bGF0b3IuZGV2aWNlX3N0YXRlKHNlbGYu
dWRpZCkKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBwYXRoKHNlbGYpOgotICAgICAgICAiIiIK
LSAgICAgICAgOnJldHVybnM6IFRoZSBmaWxlc3lzdGVtIHBhdGggdGhhdCBjb250YWlucyB0aGUg
c2ltdWxhdG9yIGRldmljZSdzIGRhdGEuCi0gICAgICAgIDpydHlwZTogc3RyCi0gICAgICAgICIi
IgotICAgICAgICByZXR1cm4gU2ltdWxhdG9yLmRldmljZV9kaXJlY3Rvcnkoc2VsZi51ZGlkKQot
Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGNyZWF0ZShjbHMsIG5hbWUsIGRldmljZV90eXBl
LCBydW50aW1lKToKLSAgICAgICAgIiIiCi0gICAgICAgIENyZWF0ZSBhIG5ldyBDb3JlU2ltdWxh
dG9yIGRldmljZS4KLSAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBkZXZpY2Uu
Ci0gICAgICAgIDp0eXBlIG5hbWU6IHN0cgotICAgICAgICA6cGFyYW0gZGV2aWNlX3R5cGU6IFRo
ZSBDb3JlU2ltdWxhdG9ydCBkZXZpY2UgdHlwZS4KLSAgICAgICAgOnR5cGUgZGV2aWNlX3R5cGU6
IERldmljZVR5cGUKLSAgICAgICAgOnBhcmFtIHJ1bnRpbWU6ICBUaGUgQ29yZVNpbXVhbHRvciBy
dW50aW1lLgotICAgICAgICA6dHlwZSBydW50aW1lOiBSdW50aW1lCi0gICAgICAgIDpyZXR1cm46
IFRoZSBuZXcgZGV2aWNlIG9yIHJhaXNlcyBhIENhbGxlZFByb2Nlc3NFcnJvciBpZiBgYHNpbWN0
bCBjcmVhdGVgYCBmYWlsZWQuCi0gICAgICAgIDpydHlwZTogRGV2aWNlCi0gICAgICAgICIiIgot
ICAgICAgICBkZXZpY2VfdWRpZCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsneGNydW4nLCAn
c2ltY3RsJywgJ2NyZWF0ZScsIG5hbWUsIGRldmljZV90eXBlLmlkZW50aWZpZXIsIHJ1bnRpbWUu
aWRlbnRpZmllcl0pLnJzdHJpcCgpCi0gICAgICAgIF9sb2cuZGVidWcoJyJ4Y3J1biBzaW1jdGwg
Y3JlYXRlICVzICVzICVzIiByZXR1cm5lZCAlcycsIG5hbWUsIGRldmljZV90eXBlLmlkZW50aWZp
ZXIsIHJ1bnRpbWUuaWRlbnRpZmllciwgZGV2aWNlX3VkaWQpCi0gICAgICAgIFNpbXVsYXRvci53
YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZShkZXZpY2VfdWRpZCwgU2ltdWxhdG9yLkRldmlj
ZVN0YXRlLlNIVVRET1dOKQotICAgICAgICByZXR1cm4gU2ltdWxhdG9yKCkuZmluZF9kZXZpY2Vf
YnlfdWRpZChkZXZpY2VfdWRpZCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzaHV0ZG93
bihjbHMsIHVkaWQpOgotICAgICAgICAiIiIKLSAgICAgICAgU2h1dCBkb3duIHRoZSBnaXZlbiBD
b3JlU2ltdWxhdG9yIGRldmljZS4KLSAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRo
ZSBkZXZpY2UuCi0gICAgICAgIDp0eXBlIHVkaWQ6IHN0cgotICAgICAgICAiIiIKLSAgICAgICAg
ZGV2aWNlX3N0YXRlID0gU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1ZGlkKQotICAgICAgICBpZiBk
ZXZpY2Vfc3RhdGUgPT0gU2ltdWxhdG9yLkRldmljZVN0YXRlLkJPT1RJTkcgb3IgZGV2aWNlX3N0
YXRlID09IFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5CT09URUQ6Ci0gICAgICAgICAgICBfbG9nLmRl
YnVnKCd4Y3J1biBzaW1jdGwgc2h1dGRvd24gJXMnLCB1ZGlkKQotICAgICAgICAgICAgIyBEb24n
dCB0aHJvdyBvbiBlcnJvci4gRGV2aWNlIHNodXRkb3duIHNlZW1zIHRvIGJlIHJhY3kgd2l0aCBT
aW11bGF0b3IgYXBwIGtpbGxpbmcuCi0gICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoWyd4Y3J1
bicsICdzaW1jdGwnLCAnc2h1dGRvd24nLCB1ZGlkXSkKLQotICAgICAgICBTaW11bGF0b3Iud2Fp
dF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUodWRpZCwgU2ltdWxhdG9yLkRldmljZVN0YXRlLlNI
VVRET1dOKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRlbGV0ZShjbHMsIHVkaWQpOgot
ICAgICAgICAiIiIKLSAgICAgICAgRGVsZXRlIHRoZSBnaXZlbiBDb3JlU2ltdWxhdG9yIGRldmlj
ZS4KLSAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2UuCi0gICAgICAg
IDp0eXBlIHVkaWQ6IHN0cgotICAgICAgICAiIiIKLSAgICAgICAgRGV2aWNlLnNodXRkb3duKHVk
aWQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ3hjcnVuIHNpbWN0bCBk
ZWxldGUgJXMnLCB1ZGlkKQotICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsneGNy
dW4nLCAnc2ltY3RsJywgJ2RlbGV0ZScsIHVkaWRdKQotICAgICAgICBleGNlcHQgc3VicHJvY2Vz
cy5DYWxsZWRQcm9jZXNzRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyJ4
Y3J1biBzaW1jdGwgZGVsZXRlIiBmYWlsZWQ6IGRldmljZSBzdGF0ZSBpcyB7fScuZm9ybWF0KFNp
bXVsYXRvci5kZXZpY2Vfc3RhdGUodWRpZCkpKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVm
IHJlc2V0KGNscywgdWRpZCk6Ci0gICAgICAgICIiIgotICAgICAgICBSZXNldCB0aGUgZ2l2ZW4g
Q29yZVNpbXVsYXRvciBkZXZpY2UuCi0gICAgICAgIDpwYXJhbSB1ZGlkOiBUaGUgdWRpZCBvZiB0
aGUgZGV2aWNlLgotICAgICAgICA6dHlwZSB1ZGlkOiBzdHIKLSAgICAgICAgIiIiCi0gICAgICAg
IERldmljZS5zaHV0ZG93bih1ZGlkKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfbG9nLmRl
YnVnKCd4Y3J1biBzaW1jdGwgZXJhc2UgJXMnLCB1ZGlkKQotICAgICAgICAgICAgc3VicHJvY2Vz
cy5jaGVja19jYWxsKFsneGNydW4nLCAnc2ltY3RsJywgJ2VyYXNlJywgdWRpZF0pCi0gICAgICAg
IGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKLSAgICAgICAgICAgIHJhaXNl
IFJ1bnRpbWVFcnJvcignInhjcnVuIHNpbWN0bCBlcmFzZSIgZmFpbGVkOiBkZXZpY2Ugc3RhdGUg
aXMge30nLmZvcm1hdChTaW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpKSkKLQotICAgIGRlZiBp
bnN0YWxsX2FwcChzZWxmLCBhcHBfcGF0aCwgZW52PU5vbmUpOgotICAgICAgICAjIEZJWE1FOiBU
aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzMwMjczOTczPiwgUmFjZXkg
ZmFpbHVyZSBvZiBzaW1jdGwgaW5zdGFsbC4KLSAgICAgICAgZm9yIHggaW4geHJhbmdlKDMpOgot
ICAgICAgICAgICAgaWYgc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y3J1bics
ICdzaW1jdGwnLCAnaW5zdGFsbCcsIHNlbGYudWRpZCwgYXBwX3BhdGhdLCByZXR1cm5fZXhpdF9j
b2RlPVRydWUpOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgdHJ5
OgotICAgICAgICAgICAgICAgIGJ1bmRsZV9pZCA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9j
b21tYW5kKFsKLSAgICAgICAgICAgICAgICAgICAgJy91c3IvbGliZXhlYy9QbGlzdEJ1ZGR5JywK
LSAgICAgICAgICAgICAgICAgICAgJy1jJywKLSAgICAgICAgICAgICAgICAgICAgJ1ByaW50IENG
QnVuZGxlSWRlbnRpZmllcicsCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2hvc3QuZmlsZXN5
c3RlbS5qb2luKGFwcF9wYXRoLCAnSW5mby5wbGlzdCcpLAotICAgICAgICAgICAgICAgIF0pLnJz
dHJpcCgpCi0gICAgICAgICAgICAgICAgc2VsZi5faG9zdC5leGVjdXRpdmUua2lsbF9wcm9jZXNz
KHNlbGYubGF1bmNoX2FwcChidW5kbGVfaWQsIFtdLCBlbnY9ZW52LCBhdHRlbXB0cz0xKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJv
cjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVm
IGxhdW5jaF9hcHAoc2VsZiwgYnVuZGxlX2lkLCBhcmdzLCBlbnY9Tm9uZSwgYXR0ZW1wdHM9Myk6
Ci0gICAgICAgIGVudmlyb25tZW50X3RvX3VzZSA9IHt9Ci0gICAgICAgIFNJTUNUTF9FTlZfUFJF
RklYID0gJ1NJTUNUTF9DSElMRF8nCi0gICAgICAgIGZvciB2YWx1ZSBpbiAoZW52IG9yIHt9KToK
LSAgICAgICAgICAgIGlmIG5vdCB2YWx1ZS5zdGFydHN3aXRoKFNJTUNUTF9FTlZfUFJFRklYKToK
LSAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF90b191c2VbU0lNQ1RMX0VOVl9QUkVGSVggKyB2
YWx1ZV0gPSBlbnZbdmFsdWVdCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGVu
dmlyb25tZW50X3RvX3VzZVt2YWx1ZV0gPSBlbnZbdmFsdWVdCi0KLSAgICAgICAgIyBGSVhNRTog
VGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8zMDE3MjQ1Mz4uCi0gICAg
ICAgIGRlZiBfbG9nX2RlYnVnX2Vycm9yKGVycm9yKToKLSAgICAgICAgICAgIF9sb2cuZGVidWco
ZXJyb3IubWVzc2FnZV93aXRoX291dHB1dCgpKQotCi0gICAgICAgIG91dHB1dCA9IE5vbmUKLSAg
ICAgICAgZm9yIHggaW4geHJhbmdlKGF0dGVtcHRzKToKLSAgICAgICAgICAgIG91dHB1dCA9IHNl
bGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKAotICAgICAgICAgICAgICAgIFsneGNydW4n
LCAnc2ltY3RsJywgJ2xhdW5jaCcsIHNlbGYudWRpZCwgYnVuZGxlX2lkXSArIGFyZ3MsCi0gICAg
ICAgICAgICAgICAgZW52PWVudmlyb25tZW50X3RvX3VzZSwKLSAgICAgICAgICAgICAgICBlcnJv
cl9oYW5kbGVyPV9sb2dfZGVidWdfZXJyb3IsCi0gICAgICAgICAgICApCi0gICAgICAgICAgICBt
YXRjaCA9IHJlLm1hdGNoKHInKD9QPGJ1bmRsZT5bXjpdKyk6ICg/UDxwaWQ+XGQrKVxuJywgb3V0
cHV0KQotICAgICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAg
ICAgICBpZiBub3QgbWF0Y2ggb3IgbWF0Y2guZ3JvdXAoJ2J1bmRsZScpICE9IGJ1bmRsZV9pZDoK
LSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRmFpbGVkIHRvIGZpbmQgcHJvY2VzcyBp
ZCBmb3Ige306IHt9Jy5mb3JtYXQoYnVuZGxlX2lkLCBvdXRwdXQpKQotICAgICAgICByZXR1cm4g
aW50KG1hdGNoLmdyb3VwKCdwaWQnKSkKLQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgot
ICAgICAgICByZXR1cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQKLQotICAgIGRlZiBfX25lX18o
c2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IHNlbGYuX19lcV9fKG90aGVyKQotCi0g
ICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJzxEZXZpY2UgIntuYW1lfSI6
IHt1ZGlkfS4gU3RhdGU6IHtzdGF0ZX0uIFJ1bnRpbWU6IHtydW50aW1lfSwgQXZhaWxhYmxlOiB7
YXZhaWxhYmxlfT4nLmZvcm1hdCgKLSAgICAgICAgICAgIG5hbWU9c2VsZi5uYW1lLAotICAgICAg
ICAgICAgdWRpZD1zZWxmLnVkaWQsCi0gICAgICAgICAgICBzdGF0ZT1zZWxmLnN0YXRlLAotICAg
ICAgICAgICAgYXZhaWxhYmxlPXNlbGYuYXZhaWxhYmxlLAotICAgICAgICAgICAgcnVudGltZT1z
ZWxmLnJ1bnRpbWUuaWRlbnRpZmllcikKLQotCiAjIEZJWE1FOiBUaGlzIGNsYXNzIGlzIGZyYWdp
bGUgYmVjYXVzZSBpdCBwYXJzZXMgdGhlIG91dHB1dCBvZiB0aGUgc2ltY3RsIGNvbW1hbmQgbGlu
ZSB1dGlsaXR5LCB3aGljaCBtYXkgY2hhbmdlLgogIyAgICAgICAgV2Ugc2hvdWxkIGZpbmQgYSBi
ZXR0ZXIgd2F5IHRvIHF1ZXJ5IGZvciBzaW11bGF0b3IgZGV2aWNlIHN0YXRlIGFuZCBjYXBhYmls
aXRpZXMuIE1heWJlIHRha2UgYSBzaW1pbGlhcgogIyAgICAgICAgYXBwcm9hY2ggYXMgaW4gd2Vi
a2l0ZGlycy5wbSBhbmQgdXRpbGl6ZSB0aGUgcGFyc2VkIG91dHB1dCBmcm9tIHRoZSBkZXZpY2Uu
cGxpc3QgZmlsZXMgaW4gdGhlIHN1Yi0KQEAgLTM0NCw4ICsxODIsMTQgQEAgY2xhc3MgU2ltdWxh
dG9yKG9iamVjdCk6CiAgICAgICAgICdccyooP1A8bmFtZT5bXihdKyApXCgoP1A8dWRpZD5bXild
KylcKSBcKCg/UDxzdGF0ZT5bXildKylcKSggXCgoP1A8YXZhaWxhYmlsaXR5PlteKV0rKVwpKT8n
KQogCiAgICAgX21hbmFnZWRfZGV2aWNlcyA9IHt9CisgICAgRGV2aWNlID0gTm9uZQogCiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9Tm9uZSk6CisgICAgICAgICMgQXZvaWQgY2lyY3VsYXIg
aW1wb3J0LgorICAgICAgICBpZiBub3QgU2ltdWxhdG9yLkRldmljZToKKyAgICAgICAgICAgIGZy
b20gd2Via2l0cHkueGNvZGUuc2ltdWxhdGVkX2RldmljZSBpbXBvcnQgU2ltdWxhdGVkRGV2aWNl
CisgICAgICAgICAgICBTaW11bGF0b3IuRGV2aWNlID0gU2ltdWxhdGVkRGV2aWNlCisKICAgICAg
ICAgc2VsZi5faG9zdCA9IGhvc3Qgb3IgSG9zdCgpCiAgICAgICAgIHNlbGYucnVudGltZXMgPSBb
XQogICAgICAgICBzZWxmLmRldmljZV90eXBlcyA9IFtdCkBAIC00MzgsMTEgKzI4MiwxMSBAQCBj
bGFzcyBTaW11bGF0b3Iob2JqZWN0KToKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgZGVs
ZXRlX2RldmljZSh1ZGlkKToKLSAgICAgICAgRGV2aWNlLmRlbGV0ZSh1ZGlkKQorICAgICAgICBT
aW11bGF0b3IuRGV2aWNlLmRlbGV0ZSh1ZGlkKQogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRl
ZiByZXNldF9kZXZpY2UodWRpZCk6Ci0gICAgICAgIERldmljZS5yZXNldCh1ZGlkKQorICAgICAg
ICBTaW11bGF0b3IuRGV2aWNlLnJlc2V0KHVkaWQpCiAKICAgICBkZWYgcmVmcmVzaChzZWxmKToK
ICAgICAgICAgIiIiCkBAIC01MjMsNyArMzY3LDcgQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6
CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXhwZWN0ZWQgPT0gRGV2
aWNlIFBhaXJzID09IGhlYWRlciBidXQgZ290OiAie30iJy5mb3JtYXQobGluZSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGlmIGN1cnJlbnRfcnVudGltZToKLSAgICAgICAg
ICAgICAgICBkZXZpY2UgPSBEZXZpY2UobmFtZT1kZXZpY2VfbWF0Y2guZ3JvdXAoJ25hbWUnKS5y
c3RyaXAoKSwKKyAgICAgICAgICAgICAgICBkZXZpY2UgPSBTaW11bGF0b3IuRGV2aWNlKG5hbWU9
ZGV2aWNlX21hdGNoLmdyb3VwKCduYW1lJykucnN0cmlwKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVkaWQ9ZGV2aWNlX21hdGNoLmdyb3VwKCd1ZGlkJyksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZT1kZXZpY2VfbWF0Y2guZ3JvdXAoJ2F2YWls
YWJpbGl0eScpIGlzIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRp
bWU9Y3VycmVudF9ydW50aW1lLApAQCAtNjU5LDcgKzUwMyw3IEBAIGNsYXNzIFNpbXVsYXRvcihv
YmplY3QpOgogICAgICAgICBpZiB0ZXN0aW5nX2RldmljZToKICAgICAgICAgICAgIF9sb2cuZGVi
dWcoJ2xvb2t1cF9vcl9jcmVhdGVfZGV2aWNlICVzICVzICVzIGZvdW5kICVzJywgbmFtZSwgZGV2
aWNlX3R5cGUsIHJ1bnRpbWUsIHRlc3RpbmdfZGV2aWNlLm5hbWUpCiAgICAgICAgICAgICByZXR1
cm4gdGVzdGluZ19kZXZpY2UKLSAgICAgICAgdGVzdGluZ19kZXZpY2UgPSBEZXZpY2UuY3JlYXRl
KG5hbWUsIGRldmljZV90eXBlLCBydW50aW1lKQorICAgICAgICB0ZXN0aW5nX2RldmljZSA9IFNp
bXVsYXRvci5EZXZpY2UuY3JlYXRlKG5hbWUsIGRldmljZV90eXBlLCBydW50aW1lKQogICAgICAg
ICBfbG9nLmRlYnVnKCdsb29rdXBfb3JfY3JlYXRlX2RldmljZSAlcyAlcyAlcyBjcmVhdGVkICVz
JywgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUsIHRlc3RpbmdfZGV2aWNlLm5hbWUpCiAgICAg
ICAgIGFzc2VydCh0ZXN0aW5nX2RldmljZS5hdmFpbGFibGUpCiAgICAgICAgIHJldHVybiB0ZXN0
aW5nX2RldmljZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302185</attachid>
            <date>2017-02-20 15:48:58 -0800</date>
            <delta_ts>2017-02-21 11:34:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168332-20170220154614.patch</filename>
            <type>text/plain</type>
            <size>65387</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMjY3OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQyIEBACisyMDE3LTAyLTIwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUmVmYWN0b3IgRGV2aWNlIGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjgzMzIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZXBhcmF0ZSB0aGUgbW9yZSBz
cGVjaWZpYyBTaW11bGF0ZWREZXZpY2UgZnJvbSB0aGUgYWJzdHJhY3QKKyAgICAgICAgaWRlYSBv
ZiBhIGRldmljZS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvZGV2aWNlLnB5
OiBBZGRlZC4KKyAgICAgICAgKERldmljZSk6ICBCYXNlIGRldmljZSBjbGFzcy4KKyAgICAgICAg
KERldmljZS5fX2luaXRfXyk6IEluaXRpYWxpemUgX2hvc3QsIG5hbWUgYW5kIHVkaWQuCisgICAg
ICAgIChEZXZpY2UuaW5zdGFsbF9hcHApOiBGdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAgICAgICAg
KERldmljZS5sYXVuY2hfYXBwKTogRGl0dG8uCisgICAgICAgIChEZXZpY2UuX19lcV9fKTogQ29t
cGFyZSB0d28gZGV2aWNlcyBieSB1ZGlkLgorICAgICAgICAoRGV2aWNlLl9fbmVfXyk6IERpdHRv
LgorICAgICAgICAoRGV2aWNlLl9fcmVwcl9fKTogUmV0dXJuIGRldmljZSBuYW1lIGFuZCB1ZGlk
IGluIGZvcm1hdHRlZCBzdHJpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9z
aW11bGF0ZWRfZGV2aWNlLnB5OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hj
b2RlL3NpbXVsYXRvci5weS4KKyAgICAgICAgKFNpbXVsYXRlZERldmljZSk6CisgICAgICAgIChT
aW11bGF0ZWREZXZpY2UuX19pbml0X18pOiBDYWxsIERldmljZS5fX2luaXRfXyBmaXJzdC4KKyAg
ICAgICAgKFNpbXVsYXRlZERldmljZS5kZWxldGUpOiBEZXZpY2UgLT4gU2ltdWxhdGVkRGV2aWNl
LgorICAgICAgICAoU2ltdWxhdGVkRGV2aWNlLnJlc2V0KTogRGl0dG8uCisgICAgICAgIChTaW11
bGF0ZWREZXZpY2UuX19lcV9fKTogTW92ZWQgdG8gZGV2aWNlLnB5LgorICAgICAgICAoU2ltdWxh
dGVkRGV2aWNlLl9fbmVfXyk6IERpdHRvLgorICAgICAgICAoU2ltdWxhdGVkRGV2aWNlLl9fcmVw
cl9fKTogQ2FsbCBEZXZpY2UgX19yZXByX18gZmlyc3QuCisgICAgICAgIChEZXZpY2VUeXBlKTog
S2VwdCBpbiBTY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weS4KKyAgICAgICAgKFJ1
bnRpbWUpOiBLZXB0IGluIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5LgorICAg
ICAgICAoRGV2aWNlKTogUmVuYW1lZCBTaW11bGF0ZWREZXZpY2UuCisgICAgICAgIChTaW11bGF0
b3IpOiBLZXB0IGluIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5LgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5OgorICAgICAgICAoU2ltdWxh
dG9yKTogRGVmaW5lIFNpbXVsYXRvci5EZXZpY2UgY2xhc3MgYXMgTm9uZS4KKyAgICAgICAgKFNp
bXVsYXRvci5fX2luaXRfXyk6IEltcG9ydCBTaW11bGF0ZWREZXZpY2UgYXMgU2ltdWxhdG9yLkRl
dmljZS4KKyAgICAgICAgKFNpbXVsYXRvci5kZWxldGVfZGV2aWNlKTogVXNlIFNpbXVsYXRvci5E
ZXZpY2UuCisgICAgICAgIChTaW11bGF0b3IucmVzZXRfZGV2aWNlKTogRGl0dG8uCisgICAgICAg
IChTaW11bGF0b3IuX3BhcnNlX2RldmljZXMpOiBEaXR0by4KKyAgICAgICAgKFNpbXVsYXRvci5s
b29rdXBfb3JfY3JlYXRlX2RldmljZSk6IE1ha2UgCisgICAgICAgIChEZXZpY2UpOiBNb3ZlZCB0
byBzaW11bGF0ZWRfZGV2aWNlIGFzIFNpbXVsYXRlZERldmljZS4KKwogMjAxNy0wMi0xNyAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIG5ldyBk
cmFnIGNvZGUgcGF0aCBhbmQgdXNlIGl0IGZvciBkcmFnZ2luZyBwbGFpbiB0ZXh0CkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL2RldmljZS5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL2RldmljZS5weQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL2RldmljZS5weQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ1IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworY2xh
c3MgRGV2aWNlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQsIGhv
c3QpOgorICAgICAgICBzZWxmLl9ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLm5hbWUgPSBuYW1l
CisgICAgICAgIHNlbGYudWRpZCA9IHVkaWQKKworICAgIGRlZiBpbnN0YWxsX2FwcChzZWxmLCBh
cHBfcGF0aCwgZW52PU5vbmUpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisK
KyAgICBkZWYgbGF1bmNoX2FwcChzZWxmLCBidW5kbGVfaWQsIGFyZ3MsIGVudj1Ob25lLCBhdHRl
bXB0cz0zKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9f
ZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLnVkaWQgPT0gb3RoZXIudWRp
ZAorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3Qgc2Vs
Zi5fX2VxX18ob3RoZXIpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVy
biAnRGV2aWNlICJ7bmFtZX0iOiB7dWRpZH0uJy5mb3JtYXQoCisgICAgICAgICAgICBuYW1lPXNl
bGYubmFtZSwKKyAgICAgICAgICAgIHVkaWQ9c2VsZi51ZGlkKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS94Y29kZS9zaW11bGF0ZWRfZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdGVkX2RldmljZS5weQkocmV2aXNpb24gMjEy
Njc4KQkoZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weToyMTI2
NzgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRlZF9kZXZpY2UucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NzcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IGxvZ2dpbmcK
K2ltcG9ydCBvcworaW1wb3J0IHBsaXN0bGliCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNz
CitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LmJlbmNobWFya19ydW5uZXIudXRpbHMgaW1w
b3J0IHRpbWVvdXQKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKKworX2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisiIiIKK01pbmltYWxseSB3cmFwcyBD
b3JlU2ltdWxhdG9yIGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCBzaW1jdGwuCisKK0lmIHBvc3NpYmxl
LCB1c2UgcmVhbCBDb3JlU2ltdWxhdG9yLmZyYW1ld29yayBmdW5jdGlvbmFsaXR5IGJ5IGxpbmtp
bmcgdG8gdGhlIGZyYW1ld29yayBpdHNlbGYuCitEbyBub3QgdXNlIFB5T2JqQyB0byBkbG9wZW4g
dGhlIGZyYW1ld29yay4KKyIiIgorCisKK2NsYXNzIERldmljZVR5cGUob2JqZWN0KToKKyAgICAi
IiIKKyAgICBSZXByZXNlbnRzIGEgQ29yZVNpbXVsYXRvciBkZXZpY2UgdHlwZS4KKyAgICAiIiIK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgaWRlbnRpZmllcik6CisgICAgICAgICIiIgor
ICAgICAgICA6cGFyYW0gbmFtZTogVGhlIGRldmljZSB0eXBlJ3MgaHVtYW4tcmVhZGFibGUgbmFt
ZQorICAgICAgICA6dHlwZSBuYW1lOiBzdHIKKyAgICAgICAgOnBhcmFtIGlkZW50aWZpZXI6IFRo
ZSBDb3JlU2ltdWxhdG9yIGlkZW50aWZpZXIuCisgICAgICAgIDp0eXBlIGlkZW50aWZpZXI6IHN0
cgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmlk
ZW50aWZpZXIgPSBpZGVudGlmaWVyCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9u
YW1lKGNscywgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICA6cGFyYW0gbmFtZTogVGhlIG5h
bWUgZm9yIHRoZSBkZXNpcmVkIGRldmljZSB0eXBlLgorICAgICAgICA6dHlwZSBuYW1lOiBzdHIK
KyAgICAgICAgOnJldHVybnM6IEEgYERldmljZVR5cGVgIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZp
ZWQgaWRlbnRpZmllciBvciB0aHJvd3MgYSBUeXBlRXJyb3IgaWYgaXQgZG9lc24ndCBleGlzdC4K
KyAgICAgICAgOnJ0eXBlOiBEZXZpY2VUeXBlCisgICAgICAgICIiIgorICAgICAgICBpZGVudGlm
aWVyID0gTm9uZQorICAgICAgICBmb3IgZGV2aWNlX3R5cGUgaW4gU2ltdWxhdG9yKCkuZGV2aWNl
X3R5cGVzOgorICAgICAgICAgICAgaWYgZGV2aWNlX3R5cGUubmFtZSA9PSBuYW1lOgorICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXIgPSBkZXZpY2VfdHlwZS5pZGVudGlmaWVyCisgICAgICAgICAg
ICAgICAgYnJlYWsKKworICAgICAgICBpZiBpZGVudGlmaWVyIGlzIE5vbmU6CisgICAgICAgICAg
ICByYWlzZSBUeXBlRXJyb3IoJ0EgZGV2aWNlIHR5cGUgd2l0aCBuYW1lICJ7bmFtZX0iIGRvZXMg
bm90IGV4aXN0LicuZm9ybWF0KG5hbWU9bmFtZSkpCisKKyAgICAgICAgcmV0dXJuIERldmljZVR5
cGUobmFtZSwgaWRlbnRpZmllcikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2lk
ZW50aWZpZXIoY2xzLCBpZGVudGlmaWVyKToKKyAgICAgICAgIiIiCisgICAgICAgIDpwYXJhbSBp
ZGVudGlmaWVyOiBUaGUgQ29yZVNpbXVsYXRvciBpZGVudGlmaWVyIGZvciB0aGUgZGVzaXJlZCBy
dW50aW1lLgorICAgICAgICA6dHlwZSBpZGVudGlmaWVyOiBzdHIKKyAgICAgICAgOnJldHVybnM6
IEEgYFJ1bnRpbWVgIG9iamVjdCB3aXRodCB0aGUgc3BlY2lmaWVkIGlkZW50aWZpZXIgb3IgdGhy
b3dzIGEgVHlwZUVycm9yIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisgICAgICAgIDpydHlwZTogRGV2
aWNlVHlwZQorICAgICAgICAiIiIKKyAgICAgICAgbmFtZSA9IE5vbmUKKyAgICAgICAgZm9yIGRl
dmljZV90eXBlIGluIFNpbXVsYXRvcigpLmRldmljZV90eXBlczoKKyAgICAgICAgICAgIGlmIGRl
dmljZV90eXBlLmlkZW50aWZpZXIgPT0gaWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICBuYW1l
ID0gZGV2aWNlX3R5cGUubmFtZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYg
bmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdBIGRldmljZSB0eXBl
IHdpdGggaWRlbnRpZmllciAie2lkZW50aWZpZXJ9IiBkb2VzIG5vdCBleGlzdC4nLmZvcm1hdCgK
KyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPWlkZW50aWZpZXIpKQorCisgICAgICAgIHJldHVy
biBEZXZpY2VUeXBlKG5hbWUsIGlkZW50aWZpZXIpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90
aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLm5hbWUgPT0gb3RoZXIubmFtZSkgYW5kIChzZWxm
LmlkZW50aWZpZXIgPT0gb3RoZXIuaWRlbnRpZmllcikKKworICAgIGRlZiBfX25lX18oc2VsZiwg
b3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX19lcV9fKG90aGVyKQorCisgICAgZGVm
IF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxEZXZpY2VUeXBlICJ7bmFtZX0iOiB7
aWRlbnRpZmllcn0+Jy5mb3JtYXQobmFtZT1zZWxmLm5hbWUsIGlkZW50aWZpZXI9c2VsZi5pZGVu
dGlmaWVyKQorCisKK2NsYXNzIFJ1bnRpbWUob2JqZWN0KToKKyAgICAiIiIKKyAgICBSZXByZXNl
bnRzIGEgQ29yZVNpbXVsYXRvciBydW50aW1lIGFzc29jaWF0ZWQgd2l0aCBhbiBpT1MgU0RLLgor
ICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcnNpb24sIGlkZW50aWZpZXIsIGF2
YWlsYWJsZSwgZGV2aWNlcz1Ob25lLCBpc19pbnRlcm5hbF9ydW50aW1lPUZhbHNlKToKKyAgICAg
ICAgIiIiCisgICAgICAgIDpwYXJhbSB2ZXJzaW9uOiBUaGUgaU9TIFNESyB2ZXJzaW9uCisgICAg
ICAgIDp0eXBlIHZlcnNpb246IHR1cGxlCisgICAgICAgIDpwYXJhbSBpZGVudGlmaWVyOiBUaGUg
Q29yZVNpbXVsYXRvciBydW50aW1lIGlkZW50aWZpZXIKKyAgICAgICAgOnR5cGUgaWRlbnRpZmll
cjogc3RyCisgICAgICAgIDpwYXJhbSBhdmFpbGFiaWxpdHk6IFdoZXRoZXIgdGhlIHJ1bnRpbWUg
aXMgYXZhaWxhYmxlIGZvciB1c2UuCisgICAgICAgIDp0eXBlIGF2YWlsYWJpbGl0eTogYm9vbAor
ICAgICAgICA6cGFyYW0gZGV2aWNlczogQSBsaXN0IG9mIGRldmljZXMgdW5kZXIgdGhpcyBydW50
aW1lCisgICAgICAgIDp0eXBlIGRldmljZXM6IGxpc3Qgb3IgTm9uZQorICAgICAgICA6cGFyYW0g
aXNfaW50ZXJuYWxfcnVudGltZTogV2hldGhlciB0aGUgcnVudGltZSBpcyBhbiBBcHBsZSBpbnRl
cm5hbCBydW50aW1lCisgICAgICAgIDp0eXBlIGlzX2ludGVybmFsX3J1bnRpbWU6IGJvb2wKKyAg
ICAgICAgIiIiCisgICAgICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KKyAgICAgICAgc2VsZi5p
ZGVudGlmaWVyID0gaWRlbnRpZmllcgorICAgICAgICBzZWxmLmF2YWlsYWJsZSA9IGF2YWlsYWJs
ZQorICAgICAgICBzZWxmLmRldmljZXMgPSBkZXZpY2VzIG9yIFtdCisgICAgICAgIHNlbGYuaXNf
aW50ZXJuYWxfcnVudGltZSA9IGlzX2ludGVybmFsX3J1bnRpbWUKKworICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBmcm9tX3ZlcnNpb25fc3RyaW5nKGNscywgdmVyc2lvbik6CisgICAgICAgIHJl
dHVybiBjbHMuZnJvbV9pZGVudGlmaWVyKCdjb20uYXBwbGUuQ29yZVNpbXVsYXRvci5TaW1SdW50
aW1lLmlPUy0nICsgdmVyc2lvbi5yZXBsYWNlKCcuJywgJy0nKSkKKworICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBmcm9tX2lkZW50aWZpZXIoY2xzLCBpZGVudGlmaWVyKToKKyAgICAgICAgIiIi
CisgICAgICAgIDpwYXJhbSBpZGVudGlmaWVyOiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGRlc2ly
ZWQgQ29yZVNpbXVsYXRvciBydW50aW1lLgorICAgICAgICA6dHlwZSBpZGVudGlmaWVyOiBzdHIK
KyAgICAgICAgOnJldHVybnM6IEEgYFJ1bnRpbWVgIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQg
aWRlbnRpZmllciBvciB0aHJvd3MgYSBUeXBlRXJyb3IgaWYgaXQgZG9lc24ndCBleGlzdC4KKyAg
ICAgICAgOnJ0eXBlOiBSdW50aW1lCisgICAgICAgICIiIgorICAgICAgICBmb3IgcnVudGltZSBp
biBTaW11bGF0b3IoKS5ydW50aW1lczoKKyAgICAgICAgICAgIGlmIHJ1bnRpbWUuaWRlbnRpZmll
ciA9PSBpZGVudGlmaWVyOgorICAgICAgICAgICAgICAgIHJldHVybiBydW50aW1lCisgICAgICAg
IHJhaXNlIFR5cGVFcnJvcignQSBydW50aW1lIHdpdGggaWRlbnRpZmllciAie2lkZW50aWZpZXJ9
IiBkb2VzIG5vdCBleGlzdC4nLmZvcm1hdChpZGVudGlmaWVyPWlkZW50aWZpZXIpKQorCisgICAg
ZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi52ZXJzaW9uID09
IG90aGVyLnZlcnNpb24pIGFuZCAoc2VsZi5pZGVudGlmaWVyID09IG90aGVyLmlkZW50aWZpZXIp
IGFuZCAoc2VsZi5pc19pbnRlcm5hbF9ydW50aW1lID09IG90aGVyLmlzX2ludGVybmFsX3J1bnRp
bWUpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCBz
ZWxmLl9fZXFfXyhvdGhlcikKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgdmVy
c2lvbl9zdWZmaXggPSAiIgorICAgICAgICBpZiBzZWxmLmlzX2ludGVybmFsX3J1bnRpbWU6Cisg
ICAgICAgICAgICB2ZXJzaW9uX3N1ZmZpeCA9ICIgSW50ZXJuYWwiCisgICAgICAgIHJldHVybiAn
PFJ1bnRpbWUge3ZlcnNpb259OiB7aWRlbnRpZmllcn0uIEF2YWlsYWJsZToge2F2YWlsYWJsZX0s
IHtudW1fZGV2aWNlc30gZGV2aWNlcz4nLmZvcm1hdCgKKyAgICAgICAgICAgIHZlcnNpb249Jy4n
LmpvaW4obWFwKHN0ciwgc2VsZi52ZXJzaW9uKSkgKyB2ZXJzaW9uX3N1ZmZpeCwKKyAgICAgICAg
ICAgIGlkZW50aWZpZXI9c2VsZi5pZGVudGlmaWVyLAorICAgICAgICAgICAgYXZhaWxhYmxlPXNl
bGYuYXZhaWxhYmxlLAorICAgICAgICAgICAgbnVtX2RldmljZXM9bGVuKHNlbGYuZGV2aWNlcykp
CisKKworY2xhc3MgRGV2aWNlKG9iamVjdCk6CisgICAgIiIiCisgICAgUmVwcmVzZW50cyBhIENv
cmVTaW11bGF0b3IgZGV2aWNlIHVuZGVybmVhdGggYSBydW50aW1lCisgICAgIiIiCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdWRpZCwgYXZhaWxhYmxlLCBydW50aW1lLCBob3N0KToK
KyAgICAgICAgIiIiCisgICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgZGV2aWNlIG5hbWUKKyAgICAg
ICAgOnR5cGUgbmFtZTogc3RyCisgICAgICAgIDpwYXJhbSB1ZGlkOiBUaGUgZGV2aWNlIFVESUQg
KGEgVVVJRCBzdHJpbmcpCisgICAgICAgIDp0eXBlIHVkaWQ6IHN0cgorICAgICAgICA6cGFyYW0g
YXZhaWxhYmxlOiBXaGV0aGVyIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlIGZvciB1c2UuCisgICAg
ICAgIDp0eXBlIGF2YWlsYWJsZTogYm9vbAorICAgICAgICA6cGFyYW0gcnVudGltZTogVGhlIGlP
UyBTaW11bGF0b3IgcnVudGltZSB0aGF0IGhvc3RzIHRoaXMgZGV2aWNlCisgICAgICAgIDp0eXBl
IHJ1bnRpbWU6IFJ1bnRpbWUKKyAgICAgICAgOnBhcmFtIGhvc3Q6IFRoZSBob3N0IHdoaWNoIGNh
biBydW4gY29tbWFuZCBsaW5lIGNvbW1hbmRzCisgICAgICAgIDp0eXBlIGhvc3Q6IEhvc3QKKyAg
ICAgICAgIiIiCisgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CisgICAgICAgIHNlbGYubmFtZSA9
IG5hbWUKKyAgICAgICAgc2VsZi51ZGlkID0gdWRpZAorICAgICAgICBzZWxmLmF2YWlsYWJsZSA9
IGF2YWlsYWJsZQorICAgICAgICBzZWxmLnJ1bnRpbWUgPSBydW50aW1lCisKKyAgICBAcHJvcGVy
dHkKKyAgICBkZWYgc3RhdGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICA6cmV0dXJuczog
VGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRldmljZS4KKyAgICAgICAgOnJ0eXBlOiBTaW11bGF0
b3IuRGV2aWNlU3RhdGUKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBTaW11bGF0b3IuZGV2
aWNlX3N0YXRlKHNlbGYudWRpZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXRoKHNlbGYp
OgorICAgICAgICAiIiIKKyAgICAgICAgOnJldHVybnM6IFRoZSBmaWxlc3lzdGVtIHBhdGggdGhh
dCBjb250YWlucyB0aGUgc2ltdWxhdG9yIGRldmljZSdzIGRhdGEuCisgICAgICAgIDpydHlwZTog
c3RyCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gU2ltdWxhdG9yLmRldmljZV9kaXJlY3Rv
cnkoc2VsZi51ZGlkKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNyZWF0ZShjbHMsIG5h
bWUsIGRldmljZV90eXBlLCBydW50aW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBh
IG5ldyBDb3JlU2ltdWxhdG9yIGRldmljZS4KKyAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1l
IG9mIHRoZSBkZXZpY2UuCisgICAgICAgIDp0eXBlIG5hbWU6IHN0cgorICAgICAgICA6cGFyYW0g
ZGV2aWNlX3R5cGU6IFRoZSBDb3JlU2ltdWxhdG9ydCBkZXZpY2UgdHlwZS4KKyAgICAgICAgOnR5
cGUgZGV2aWNlX3R5cGU6IERldmljZVR5cGUKKyAgICAgICAgOnBhcmFtIHJ1bnRpbWU6ICBUaGUg
Q29yZVNpbXVhbHRvciBydW50aW1lLgorICAgICAgICA6dHlwZSBydW50aW1lOiBSdW50aW1lCisg
ICAgICAgIDpyZXR1cm46IFRoZSBuZXcgZGV2aWNlIG9yIHJhaXNlcyBhIENhbGxlZFByb2Nlc3NF
cnJvciBpZiBgYHNpbWN0bCBjcmVhdGVgYCBmYWlsZWQuCisgICAgICAgIDpydHlwZTogRGV2aWNl
CisgICAgICAgICIiIgorICAgICAgICBkZXZpY2VfdWRpZCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0
cHV0KFsneGNydW4nLCAnc2ltY3RsJywgJ2NyZWF0ZScsIG5hbWUsIGRldmljZV90eXBlLmlkZW50
aWZpZXIsIHJ1bnRpbWUuaWRlbnRpZmllcl0pLnJzdHJpcCgpCisgICAgICAgIF9sb2cuZGVidWco
JyJ4Y3J1biBzaW1jdGwgY3JlYXRlICVzICVzICVzIiByZXR1cm5lZCAlcycsIG5hbWUsIGRldmlj
ZV90eXBlLmlkZW50aWZpZXIsIHJ1bnRpbWUuaWRlbnRpZmllciwgZGV2aWNlX3VkaWQpCisgICAg
ICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZShkZXZpY2VfdWRpZCwg
U2ltdWxhdG9yLkRldmljZVN0YXRlLlNIVVRET1dOKQorICAgICAgICByZXR1cm4gU2ltdWxhdG9y
KCkuZmluZF9kZXZpY2VfYnlfdWRpZChkZXZpY2VfdWRpZCkKKworICAgIEBjbGFzc21ldGhvZAor
ICAgIGRlZiBzaHV0ZG93bihjbHMsIHVkaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgU2h1dCBk
b3duIHRoZSBnaXZlbiBDb3JlU2ltdWxhdG9yIGRldmljZS4KKyAgICAgICAgOnBhcmFtIHVkaWQ6
IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2UuCisgICAgICAgIDp0eXBlIHVkaWQ6IHN0cgorICAgICAg
ICAiIiIKKyAgICAgICAgZGV2aWNlX3N0YXRlID0gU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1ZGlk
KQorICAgICAgICBpZiBkZXZpY2Vfc3RhdGUgPT0gU2ltdWxhdG9yLkRldmljZVN0YXRlLkJPT1RJ
Tkcgb3IgZGV2aWNlX3N0YXRlID09IFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5CT09URUQ6CisgICAg
ICAgICAgICBfbG9nLmRlYnVnKCd4Y3J1biBzaW1jdGwgc2h1dGRvd24gJXMnLCB1ZGlkKQorICAg
ICAgICAgICAgIyBEb24ndCB0aHJvdyBvbiBlcnJvci4gRGV2aWNlIHNodXRkb3duIHNlZW1zIHRv
IGJlIHJhY3kgd2l0aCBTaW11bGF0b3IgYXBwIGtpbGxpbmcuCisgICAgICAgICAgICBzdWJwcm9j
ZXNzLmNhbGwoWyd4Y3J1bicsICdzaW1jdGwnLCAnc2h1dGRvd24nLCB1ZGlkXSkKKworICAgICAg
ICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUodWRpZCwgU2ltdWxhdG9y
LkRldmljZVN0YXRlLlNIVVRET1dOKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRlbGV0
ZShjbHMsIHVkaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVsZXRlIHRoZSBnaXZlbiBDb3Jl
U2ltdWxhdG9yIGRldmljZS4KKyAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBk
ZXZpY2UuCisgICAgICAgIDp0eXBlIHVkaWQ6IHN0cgorICAgICAgICAiIiIKKyAgICAgICAgRGV2
aWNlLnNodXRkb3duKHVkaWQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9sb2cuZGVidWco
J3hjcnVuIHNpbWN0bCBkZWxldGUgJXMnLCB1ZGlkKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5j
aGVja19jYWxsKFsneGNydW4nLCAnc2ltY3RsJywgJ2RlbGV0ZScsIHVkaWRdKQorICAgICAgICBl
eGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICByYWlzZSBS
dW50aW1lRXJyb3IoJyJ4Y3J1biBzaW1jdGwgZGVsZXRlIiBmYWlsZWQ6IGRldmljZSBzdGF0ZSBp
cyB7fScuZm9ybWF0KFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUodWRpZCkpKQorCisgICAgQGNsYXNz
bWV0aG9kCisgICAgZGVmIHJlc2V0KGNscywgdWRpZCk6CisgICAgICAgICIiIgorICAgICAgICBS
ZXNldCB0aGUgZ2l2ZW4gQ29yZVNpbXVsYXRvciBkZXZpY2UuCisgICAgICAgIDpwYXJhbSB1ZGlk
OiBUaGUgdWRpZCBvZiB0aGUgZGV2aWNlLgorICAgICAgICA6dHlwZSB1ZGlkOiBzdHIKKyAgICAg
ICAgIiIiCisgICAgICAgIERldmljZS5zaHV0ZG93bih1ZGlkKQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICBfbG9nLmRlYnVnKCd4Y3J1biBzaW1jdGwgZXJhc2UgJXMnLCB1ZGlkKQorICAgICAg
ICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsneGNydW4nLCAnc2ltY3RsJywgJ2VyYXNlJywg
dWRpZF0pCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAg
ICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignInhjcnVuIHNpbWN0bCBlcmFzZSIgZmFpbGVk
OiBkZXZpY2Ugc3RhdGUgaXMge30nLmZvcm1hdChTaW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQp
KSkKKworICAgIGRlZiBpbnN0YWxsX2FwcChzZWxmLCBhcHBfcGF0aCwgZW52PU5vbmUpOgorICAg
ICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzMw
MjczOTczPiwgUmFjZXkgZmFpbHVyZSBvZiBzaW1jdGwgaW5zdGFsbC4KKyAgICAgICAgZm9yIHgg
aW4geHJhbmdlKDMpOgorICAgICAgICAgICAgaWYgc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2Nv
bW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAnaW5zdGFsbCcsIHNlbGYudWRpZCwgYXBwX3BhdGhd
LCByZXR1cm5fZXhpdF9jb2RlPVRydWUpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJ1bmRsZV9pZCA9IHNlbGYuX2hvc3Qu
ZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAgICAgICAgICAgICAgICAgICAgJy91c3IvbGliZXhl
Yy9QbGlzdEJ1ZGR5JywKKyAgICAgICAgICAgICAgICAgICAgJy1jJywKKyAgICAgICAgICAgICAg
ICAgICAgJ1ByaW50IENGQnVuZGxlSWRlbnRpZmllcicsCisgICAgICAgICAgICAgICAgICAgIHNl
bGYuX2hvc3QuZmlsZXN5c3RlbS5qb2luKGFwcF9wYXRoLCAnSW5mby5wbGlzdCcpLAorICAgICAg
ICAgICAgICAgIF0pLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgc2VsZi5faG9zdC5leGVjdXRp
dmUua2lsbF9wcm9jZXNzKHNlbGYubGF1bmNoX2FwcChidW5kbGVfaWQsIFtdLCBlbnY9ZW52LCBh
dHRlbXB0cz0xKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZXhj
ZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgZGVmIGxhdW5jaF9hcHAoc2VsZiwgYnVuZGxlX2lkLCBhcmdzLCBlbnY9Tm9u
ZSwgYXR0ZW1wdHM9Myk6CisgICAgICAgIGVudmlyb25tZW50X3RvX3VzZSA9IHt9CisgICAgICAg
IFNJTUNUTF9FTlZfUFJFRklYID0gJ1NJTUNUTF9DSElMRF8nCisgICAgICAgIGZvciB2YWx1ZSBp
biAoZW52IG9yIHt9KToKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZS5zdGFydHN3aXRoKFNJTUNU
TF9FTlZfUFJFRklYKToKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF90b191c2VbU0lNQ1RM
X0VOVl9QUkVGSVggKyB2YWx1ZV0gPSBlbnZbdmFsdWVdCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIGVudmlyb25tZW50X3RvX3VzZVt2YWx1ZV0gPSBlbnZbdmFsdWVdCisKKyAg
ICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8z
MDE3MjQ1Mz4uCisgICAgICAgIGRlZiBfbG9nX2RlYnVnX2Vycm9yKGVycm9yKToKKyAgICAgICAg
ICAgIF9sb2cuZGVidWcoZXJyb3IubWVzc2FnZV93aXRoX291dHB1dCgpKQorCisgICAgICAgIG91
dHB1dCA9IE5vbmUKKyAgICAgICAgZm9yIHggaW4geHJhbmdlKGF0dGVtcHRzKToKKyAgICAgICAg
ICAgIG91dHB1dCA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKAorICAgICAgICAg
ICAgICAgIFsneGNydW4nLCAnc2ltY3RsJywgJ2xhdW5jaCcsIHNlbGYudWRpZCwgYnVuZGxlX2lk
XSArIGFyZ3MsCisgICAgICAgICAgICAgICAgZW52PWVudmlyb25tZW50X3RvX3VzZSwKKyAgICAg
ICAgICAgICAgICBlcnJvcl9oYW5kbGVyPV9sb2dfZGVidWdfZXJyb3IsCisgICAgICAgICAgICAp
CisgICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHInKD9QPGJ1bmRsZT5bXjpdKyk6ICg/UDxw
aWQ+XGQrKVxuJywgb3V0cHV0KQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAg
ICAgYnJlYWsKKworICAgICAgICBpZiBub3QgbWF0Y2ggb3IgbWF0Y2guZ3JvdXAoJ2J1bmRsZScp
ICE9IGJ1bmRsZV9pZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRmFpbGVkIHRv
IGZpbmQgcHJvY2VzcyBpZCBmb3Ige306IHt9Jy5mb3JtYXQoYnVuZGxlX2lkLCBvdXRwdXQpKQor
ICAgICAgICByZXR1cm4gaW50KG1hdGNoLmdyb3VwKCdwaWQnKSkKKworICAgIGRlZiBfX2VxX18o
c2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQKKwor
ICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX19l
cV9fKG90aGVyKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxE
ZXZpY2UgIntuYW1lfSI6IHt1ZGlkfS4gU3RhdGU6IHtzdGF0ZX0uIFJ1bnRpbWU6IHtydW50aW1l
fSwgQXZhaWxhYmxlOiB7YXZhaWxhYmxlfT4nLmZvcm1hdCgKKyAgICAgICAgICAgIG5hbWU9c2Vs
Zi5uYW1lLAorICAgICAgICAgICAgdWRpZD1zZWxmLnVkaWQsCisgICAgICAgICAgICBzdGF0ZT1z
ZWxmLnN0YXRlLAorICAgICAgICAgICAgYXZhaWxhYmxlPXNlbGYuYXZhaWxhYmxlLAorICAgICAg
ICAgICAgcnVudGltZT1zZWxmLnJ1bnRpbWUuaWRlbnRpZmllcikKKworCisjIEZJWE1FOiBUaGlz
IGNsYXNzIGlzIGZyYWdpbGUgYmVjYXVzZSBpdCBwYXJzZXMgdGhlIG91dHB1dCBvZiB0aGUgc2lt
Y3RsIGNvbW1hbmQgbGluZSB1dGlsaXR5LCB3aGljaCBtYXkgY2hhbmdlLgorIyAgICAgICAgV2Ug
c2hvdWxkIGZpbmQgYSBiZXR0ZXIgd2F5IHRvIHF1ZXJ5IGZvciBzaW11bGF0b3IgZGV2aWNlIHN0
YXRlIGFuZCBjYXBhYmlsaXRpZXMuIE1heWJlIHRha2UgYSBzaW1pbGlhcgorIyAgICAgICAgYXBw
cm9hY2ggYXMgaW4gd2Via2l0ZGlycy5wbSBhbmQgdXRpbGl6ZSB0aGUgcGFyc2VkIG91dHB1dCBm
cm9tIHRoZSBkZXZpY2UucGxpc3QgZmlsZXMgaW4gdGhlIHN1Yi0KKyMgICAgICAgIGRpcmVjdG9y
aWVzIG9mIH4vTGlicmFyeS9EZXZlbG9wZXIvQ29yZVNpbXVsYXRvci9EZXZpY2VzPworIyAgICAg
ICAgQWxzbywgc2ltY3RsIGhhcyB0aGUgb3B0aW9uIHRvIG91dHB1dCBpbiBKU09OIGZvcm1hdCAo
eGNydW4gc2ltY3RsIGxpc3QgLS1qc29uKS4KK2NsYXNzIFNpbXVsYXRvcihvYmplY3QpOgorICAg
ICIiIgorICAgIFJlcHJlc2VudHMgdGhlIGlPUyBTaW11bGF0b3IgaW5mcmFzdHJ1Y3R1cmUgdW5k
ZXIgdGhlIGN1cnJlbnRseSBzZWxlY3QgWGNvZGUuYXBwIGJ1bmRsZS4KKyAgICAiIiIKKyAgICBk
ZXZpY2VfdHlwZV9yZSA9IHJlLmNvbXBpbGUoJyg/UDxuYW1lPlteKF0rKVwoKD9QPGlkZW50aWZp
ZXI+W14pXSspXCknKQorICAgICMgRklYTUU6IHJ1bnRpbWVfcmUgcGFyc2VzIHRoZSB2ZXJzaW9u
IGZyb20gdGhlIHJ1bnRpbWUgbmFtZSwgYnV0IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgZnVs
bCB2ZXJzaW9uIG51bWJlcgorICAgICMgKGl0IGNhbiBvbWl0IHRoZSByZXZpc2lvbikuIFdlIHNo
b3VsZCBpbnN0ZWFkIHBhcnNlIHRoZSB2ZXJzaW9uIGZyb20gdGhlIG51bWJlciBjb250YWluZWQg
aW4gcGFyZW50aGVzZXMuCisgICAgcnVudGltZV9yZSA9IHJlLmNvbXBpbGUoCisgICAgICAgICco
aXx3YXRjaHx0dilPUyAoP1A8dmVyc2lvbj5cZCtcLlxkKSg/UDxpbnRlcm5hbD4gSW50ZXJuYWwp
PyBcKFxkK1wuXGQrKFwuXGQrKT8gLSAoP1A8YnVpbGRfdmVyc2lvbj5bXildKylcKSBcKCg/UDxp
ZGVudGlmaWVyPlteKV0rKVwpKCBcKCg/UDxhdmFpbGFiaWxpdHk+W14pXSspXCkpPycpCisgICAg
dW5hdmFpbGFibGVfdmVyc2lvbl9yZSA9IHJlLmNvbXBpbGUoJy0tIFVuYXZhaWxhYmxlOiAoP1A8
aWRlbnRpZmllcj5bXiBdKykgLS0nKQorICAgIHZlcnNpb25fcmUgPSByZS5jb21waWxlKCctLSAo
aXx3YXRjaHx0dilPUyAoP1A8dmVyc2lvbj5cZCtcLlxkKykoP1A8aW50ZXJuYWw+IEludGVybmFs
KT8gLS0nKQorICAgIGRldmljZXNfcmUgPSByZS5jb21waWxlKAorICAgICAgICAnXHMqKD9QPG5h
bWU+W14oXSsgKVwoKD9QPHVkaWQ+W14pXSspXCkgXCgoP1A8c3RhdGU+W14pXSspXCkoIFwoKD9Q
PGF2YWlsYWJpbGl0eT5bXildKylcKSk/JykKKworICAgIF9tYW5hZ2VkX2RldmljZXMgPSB7fQor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9Tm9uZSk6CisgICAgICAgIHNlbGYuX2hvc3Qg
PSBob3N0IG9yIEhvc3QoKQorICAgICAgICBzZWxmLnJ1bnRpbWVzID0gW10KKyAgICAgICAgc2Vs
Zi5kZXZpY2VfdHlwZXMgPSBbXQorICAgICAgICBzZWxmLnJlZnJlc2goKQorCisgICAgIyBLZWVw
IHRoZXNlIGNvbnN0YW50cyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgU2ltRGV2aWNlU3RhdGUgY29u
c3RhbnRzIGluIENvcmVTaW11bGF0b3IvU2ltRGV2aWNlLmguCisgICAgY2xhc3MgRGV2aWNlU3Rh
dGU6CisgICAgICAgIERPRVNfTk9UX0VYSVNUID0gLTEKKyAgICAgICAgQ1JFQVRJTkcgPSAwCisg
ICAgICAgIFNIVVRET1dOID0gMQorICAgICAgICBCT09USU5HID0gMgorICAgICAgICBCT09URUQg
PSAzCisgICAgICAgIFNIVVRUSU5HX0RPV04gPSA0CisKKyAgICBOQU1FX0ZPUl9TVEFURSA9IFsK
KyAgICAgICAgJ0NSRUFUSU5HJywKKyAgICAgICAgJ1NIVVRET1dOJywKKyAgICAgICAgJ0JPT1RJ
TkcnLAorICAgICAgICAnQk9PVEVEJywKKyAgICAgICAgJ1NIVVRUSU5HX0RPV04nCisgICAgXQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfZGV2aWNlKG51bWJlciwgZGV2aWNl
X3R5cGUsIHJ1bnRpbWUpOgorICAgICAgICBkZXZpY2UgPSBTaW11bGF0b3IoKS5sb29rdXBfb3Jf
Y3JlYXRlX2RldmljZShkZXZpY2VfdHlwZS5uYW1lICsgJyBXZWJLaXQgVGVzdGVyJyArIHN0cihu
dW1iZXIpLCBkZXZpY2VfdHlwZSwgcnVudGltZSkKKyAgICAgICAgX2xvZy5kZWJ1ZygnY3JlYXRl
ZCBkZXZpY2Uge30ge30nLmZvcm1hdChudW1iZXIsIGRldmljZSkpCisgICAgICAgIGFzc2VydChs
ZW4oU2ltdWxhdG9yLl9tYW5hZ2VkX2RldmljZXMpID09IG51bWJlcikKKyAgICAgICAgU2ltdWxh
dG9yLl9tYW5hZ2VkX2RldmljZXNbbnVtYmVyXSA9IGRldmljZQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiByZW1vdmVfZGV2aWNlKG51bWJlcik6CisgICAgICAgIGlmIG5vdCBTaW11bGF0
b3IuX21hbmFnZWRfZGV2aWNlc1tudW1iZXJdOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
IGRldmljZV91ZGlkID0gU2ltdWxhdG9yLl9tYW5hZ2VkX2RldmljZXNbbnVtYmVyXS51ZGlkCisg
ICAgICAgIF9sb2cuZGVidWcoJ3JlbW92aW5nIGRldmljZSB7fSB7fScuZm9ybWF0KG51bWJlciwg
ZGV2aWNlX3VkaWQpKQorICAgICAgICBkZWwgU2ltdWxhdG9yLl9tYW5hZ2VkX2RldmljZXNbbnVt
YmVyXQorICAgICAgICBTaW11bGF0b3IuZGVsZXRlX2RldmljZShkZXZpY2VfdWRpZCkKKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZGV2aWNlX251bWJlcihudW1iZXIpOgorICAgICAgICBy
ZXR1cm4gU2ltdWxhdG9yLl9tYW5hZ2VkX2RldmljZXNbbnVtYmVyXQorCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBkZXZpY2Vfc3RhdGVfZGVzY3JpcHRpb24oc3RhdGUpOgorICAgICAgICBp
ZiAoc3RhdGUgPT0gU2ltdWxhdG9yLkRldmljZVN0YXRlLkRPRVNfTk9UX0VYSVNUKToKKyAgICAg
ICAgICAgIHJldHVybiAnRE9FU19OT1RfRVhJU1QnCisgICAgICAgIHJldHVybiBTaW11bGF0b3Iu
TkFNRV9GT1JfU1RBVEVbc3RhdGVdCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHdhaXRf
dW50aWxfZGV2aWNlX2lzX2Jvb3RlZCh1ZGlkLCB0aW1lb3V0X3NlY29uZHM9NjAgKiA1KToKKyAg
ICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0YXRlKHVkaWQsIFNpbXVs
YXRvci5EZXZpY2VTdGF0ZS5CT09URUQsIHRpbWVvdXRfc2Vjb25kcykKKyAgICAgICAgd2l0aCB0
aW1lb3V0KHNlY29uZHM9dGltZW91dF9zZWNvbmRzKToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6
CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN1YnBy
b2Nlc3MuY2hlY2tfb3V0cHV0KFsneGNydW4nLCAnc2ltY3RsJywgJ3NwYXduJywgdWRpZCwgJ2xh
dW5jaGN0bCcsICdwcmludCcsICdzeXN0ZW0nXSkuc3RyaXAoKQorICAgICAgICAgICAgICAgICAg
ICBfbG9nLmRlYnVnKCd4Y3J1biBzaW1jdGwgc3Bhd24gJXMnLCB1ZGlkKQorCisgICAgICAgICAg
ICAgICAgICAgIGlmIHJlLnNlYXJjaCgiQVtcc10rY29tLmFwcGxlLnNwcmluZ2JvYXJkLnNlcnZp
Y2VzIiwgc3RhdGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAg
ICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAg
ICAgICAgICBpZiBTaW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpICE9IFNpbXVsYXRvci5EZXZp
Y2VTdGF0ZS5CT09URUQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJy
b3IoJ1NpbXVhdG9yIGRldmljZSBxdWl0IHVuZXhwZWN0ZWRseS4nKQorICAgICAgICAgICAgICAg
ICAgICBfbG9nLndhcm4oIkVycm9yIGluIGNoZWNraW5nIFNpbXVsYXRvciBib290IHN0YXR1cy4g
V2lsbCByZXRyeSBpbiAxIHNlY29uZC4iKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgd2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3Rh
dGUodWRpZCwgd2FpdF91bnRpbF9zdGF0ZSwgdGltZW91dF9zZWNvbmRzPTYwICogNSk6CisgICAg
ICAgIF9sb2cuZGVidWcoJ3dhaXRpbmcgZm9yIGRldmljZSAlcyB0byBlbnRlciBzdGF0ZSAlcyB3
aXRoIHRpbWVvdXQgJXMnLCB1ZGlkLCBTaW11bGF0b3IuZGV2aWNlX3N0YXRlX2Rlc2NyaXB0aW9u
KHdhaXRfdW50aWxfc3RhdGUpLCB0aW1lb3V0X3NlY29uZHMpCisgICAgICAgIHdpdGggdGltZW91
dChzZWNvbmRzPXRpbWVvdXRfc2Vjb25kcyk6CisgICAgICAgICAgICBkZXZpY2Vfc3RhdGUgPSBT
aW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpCisgICAgICAgICAgICB3aGlsZSAoZGV2aWNlX3N0
YXRlICE9IHdhaXRfdW50aWxfc3RhdGUpOgorICAgICAgICAgICAgICAgIGRldmljZV9zdGF0ZSA9
IFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUodWRpZCkKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVn
KCcgZGV2aWNlIHN0YXRlICVzJywgU2ltdWxhdG9yLmRldmljZV9zdGF0ZV9kZXNjcmlwdGlvbihk
ZXZpY2Vfc3RhdGUpKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC41KQorCisgICAgICAg
IGVuZF9zdGF0ZSA9IFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUodWRpZCkKKyAgICAgICAgaWYgKGVu
ZF9zdGF0ZSAhPSB3YWl0X3VudGlsX3N0YXRlKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVF
cnJvcignVGltZWQgb3V0IHdhaXRpbmcgZm9yIHNpbXVsYXRvciBkZXZpY2UgdG8gZW50ZXIgc3Rh
dGUgezB9OyBjdXJyZW50IHN0YXRlIGlzIHsxfScuZm9ybWF0KFNpbXVsYXRvci5kZXZpY2Vfc3Rh
dGVfZGVzY3JpcHRpb24od2FpdF91bnRpbF9zdGF0ZSksIFNpbXVsYXRvci5kZXZpY2Vfc3RhdGVf
ZGVzY3JpcHRpb24oZW5kX3N0YXRlKSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGRl
dmljZV9zdGF0ZSh1ZGlkKToKKyAgICAgICAgZGV2aWNlX3BsaXN0ID0gb3MucGF0aC5qb2luKFNp
bXVsYXRvci5kZXZpY2VfZGlyZWN0b3J5KHVkaWQpLCAnZGV2aWNlLnBsaXN0JykKKyAgICAgICAg
aWYgbm90IG9zLnBhdGguaXNmaWxlKGRldmljZV9wbGlzdCk6CisgICAgICAgICAgICByZXR1cm4g
U2ltdWxhdG9yLkRldmljZVN0YXRlLkRPRVNfTk9UX0VYSVNUCisgICAgICAgIHJldHVybiBwbGlz
dGxpYi5yZWFkUGxpc3QoZGV2aWNlX3BsaXN0KVsnc3RhdGUnXQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBkZXZpY2VfZGlyZWN0b3J5KHVkaWQpOgorICAgICAgICByZXR1cm4gb3MucGF0
aC5yZWFscGF0aChvcy5wYXRoLmV4cGFuZHVzZXIob3MucGF0aC5qb2luKCd+L0xpYnJhcnkvRGV2
ZWxvcGVyL0NvcmVTaW11bGF0b3IvRGV2aWNlcycsIHVkaWQpKSkKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgZGVsZXRlX2RldmljZSh1ZGlkKToKKyAgICAgICAgRGV2aWNlLmRlbGV0ZSh1
ZGlkKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiByZXNldF9kZXZpY2UodWRpZCk6Cisg
ICAgICAgIERldmljZS5yZXNldCh1ZGlkKQorCisgICAgZGVmIHJlZnJlc2goc2VsZik6CisgICAg
ICAgICIiIgorICAgICAgICBSZWZyZXNoIHJ1bnRpbWUgYW5kIGRldmljZSB0eXBlIGluZm9ybWF0
aW9uIGZyb20gYGBzaW1jdGwgbGlzdGBgLgorICAgICAgICAiIiIKKyAgICAgICAgbGluZXMgPSBz
ZWxmLl9ob3N0LnBsYXRmb3JtLnhjb2RlX3NpbWN0bF9saXN0KCkKKyAgICAgICAgaWYgbm90IGxp
bmVzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRldmljZV90eXBlc19oZWFkZXIgPSBu
ZXh0KGxpbmVzKQorICAgICAgICBpZiBkZXZpY2VfdHlwZXNfaGVhZGVyICE9ICc9PSBEZXZpY2Ug
VHlwZXMgPT0nOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFeHBlY3RlZCA9PSBE
ZXZpY2UgVHlwZXMgPT0gaGVhZGVyIGJ1dCBnb3Q6ICJ7fSInLmZvcm1hdChkZXZpY2VfdHlwZXNf
aGVhZGVyKSkKKyAgICAgICAgc2VsZi5fcGFyc2VfZGV2aWNlX3R5cGVzKGxpbmVzKQorCisgICAg
ZGVmIF9wYXJzZV9kZXZpY2VfdHlwZXMoc2VsZiwgbGluZXMpOgorICAgICAgICAiIiIKKyAgICAg
ICAgUGFyc2UgZGV2aWNlIHR5cGVzIGZyb20gYGBzaW1jdGwgbGlzdGBgLgorICAgICAgICA6cGFy
YW0gbGluZXM6IEEgZ2VuZXJhdG9yIGZvciB0aGUgb3V0cHV0IGxpbmVzIGZyb20gYGBzaW1jdGwg
bGlzdGBgLgorICAgICAgICA6dHlwZSBsaW5lczogZ2VuZXhwcgorICAgICAgICA6cmV0dXJuOiBO
b25lCisgICAgICAgICIiIgorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAg
IGRldmljZV90eXBlX21hdGNoID0gc2VsZi5kZXZpY2VfdHlwZV9yZS5tYXRjaChsaW5lKQorICAg
ICAgICAgICAgaWYgbm90IGRldmljZV90eXBlX21hdGNoOgorICAgICAgICAgICAgICAgIGlmIGxp
bmUgIT0gJz09IFJ1bnRpbWVzID09JzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGlt
ZUVycm9yKCdFeHBlY3RlZCA9PSBSdW50aW1lcyA9PSBoZWFkZXIgYnV0IGdvdDogInt9IicuZm9y
bWF0KGxpbmUpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBkZXZpY2VfdHlw
ZSA9IERldmljZVR5cGUobmFtZT1kZXZpY2VfdHlwZV9tYXRjaC5ncm91cCgnbmFtZScpLnJzdHJp
cCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9ZGV2
aWNlX3R5cGVfbWF0Y2guZ3JvdXAoJ2lkZW50aWZpZXInKSkKKyAgICAgICAgICAgIHNlbGYuZGV2
aWNlX3R5cGVzLmFwcGVuZChkZXZpY2VfdHlwZSkKKworICAgICAgICBzZWxmLl9wYXJzZV9ydW50
aW1lcyhsaW5lcykKKworICAgIGRlZiBfcGFyc2VfcnVudGltZXMoc2VsZiwgbGluZXMpOgorICAg
ICAgICAiIiIKKyAgICAgICAgQ29udGludWUgdG8gcGFyc2UgcnVudGltZXMgZnJvbSBgYHNpbWN0
bCBsaXN0YGAuCisgICAgICAgIDpwYXJhbSBsaW5lczogQSBnZW5lcmF0b3IgZm9yIHRoZSBvdXRw
dXQgbGluZXMgZnJvbSBgYHNpbWN0bCBsaXN0YGAuCisgICAgICAgIDp0eXBlIGxpbmVzOiBnZW5l
eHByCisgICAgICAgIDpyZXR1cm46IE5vbmUKKyAgICAgICAgIiIiCisgICAgICAgIGZvciBsaW5l
IGluIGxpbmVzOgorICAgICAgICAgICAgcnVudGltZV9tYXRjaCA9IHNlbGYucnVudGltZV9yZS5t
YXRjaChsaW5lKQorICAgICAgICAgICAgaWYgbm90IHJ1bnRpbWVfbWF0Y2g6CisgICAgICAgICAg
ICAgICAgaWYgbGluZSAhPSAnPT0gRGV2aWNlcyA9PSc6CisgICAgICAgICAgICAgICAgICAgIHJh
aXNlIFJ1bnRpbWVFcnJvcignRXhwZWN0ZWQgPT0gRGV2aWNlcyA9PSBoZWFkZXIgYnV0IGdvdDog
Int9IicuZm9ybWF0KGxpbmUpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB2
ZXJzaW9uID0gdHVwbGUobWFwKGludCwgcnVudGltZV9tYXRjaC5ncm91cCgndmVyc2lvbicpLnNw
bGl0KCcuJykpKQorICAgICAgICAgICAgcnVudGltZSA9IFJ1bnRpbWUodmVyc2lvbj12ZXJzaW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1ydW50aW1lX21hdGNo
Lmdyb3VwKCdpZGVudGlmaWVyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFp
bGFibGU9cnVudGltZV9tYXRjaC5ncm91cCgnYXZhaWxhYmlsaXR5JykgaXMgTm9uZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2ludGVybmFsX3J1bnRpbWU9Ym9vbChydW50aW1l
X21hdGNoLmdyb3VwKCdpbnRlcm5hbCcpKSkKKyAgICAgICAgICAgIHNlbGYucnVudGltZXMuYXBw
ZW5kKHJ1bnRpbWUpCisgICAgICAgIHNlbGYuX3BhcnNlX2RldmljZXMobGluZXMpCisKKyAgICBk
ZWYgX3BhcnNlX2RldmljZXMoc2VsZiwgbGluZXMpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29u
dGludWUgdG8gcGFyc2UgZGV2aWNlcyBmcm9tIGBgc2ltY3RsIGxpc3RgYC4KKyAgICAgICAgOnBh
cmFtIGxpbmVzOiBBIGdlbmVyYXRvciBmb3IgdGhlIG91dHB1dCBsaW5lcyBmcm9tIGBgc2ltY3Rs
IGxpc3RgYC4KKyAgICAgICAgOnR5cGUgbGluZXM6IGdlbmV4cHIKKyAgICAgICAgOnJldHVybjog
Tm9uZQorICAgICAgICAiIiIKKyAgICAgICAgY3VycmVudF9ydW50aW1lID0gTm9uZQorICAgICAg
ICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIHZlcnNpb25fbWF0Y2ggPSBzZWxmLnZl
cnNpb25fcmUubWF0Y2gobGluZSkKKyAgICAgICAgICAgIGlmIHZlcnNpb25fbWF0Y2g6CisgICAg
ICAgICAgICAgICAgdmVyc2lvbiA9IHR1cGxlKG1hcChpbnQsIHZlcnNpb25fbWF0Y2guZ3JvdXAo
J3ZlcnNpb24nKS5zcGxpdCgnLicpKSkKKyAgICAgICAgICAgICAgICBjdXJyZW50X3J1bnRpbWUg
PSBzZWxmLnJ1bnRpbWUodmVyc2lvbj12ZXJzaW9uLCBpc19pbnRlcm5hbF9ydW50aW1lPWJvb2wo
dmVyc2lvbl9tYXRjaC5ncm91cCgnaW50ZXJuYWwnKSkpCisgICAgICAgICAgICAgICAgYXNzZXJ0
IGN1cnJlbnRfcnVudGltZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAg
IHVuYXZhaWxhYmxlX3ZlcnNpb25fbWF0Y2ggPSBzZWxmLnVuYXZhaWxhYmxlX3ZlcnNpb25fcmUu
bWF0Y2gobGluZSkKKyAgICAgICAgICAgIGlmIHVuYXZhaWxhYmxlX3ZlcnNpb25fbWF0Y2g6Cisg
ICAgICAgICAgICAgICAgY3VycmVudF9ydW50aW1lID0gTm9uZQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlCisKKyAgICAgICAgICAgIGRldmljZV9tYXRjaCA9IHNlbGYuZGV2aWNlc19yZS5tYXRj
aChsaW5lKQorICAgICAgICAgICAgaWYgbm90IGRldmljZV9tYXRjaDoKKyAgICAgICAgICAgICAg
ICBpZiBsaW5lICE9ICc9PSBEZXZpY2UgUGFpcnMgPT0nOgorICAgICAgICAgICAgICAgICAgICBy
YWlzZSBSdW50aW1lRXJyb3IoJ0V4cGVjdGVkID09IERldmljZSBQYWlycyA9PSBoZWFkZXIgYnV0
IGdvdDogInt9IicuZm9ybWF0KGxpbmUpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAg
ICAgICBpZiBjdXJyZW50X3J1bnRpbWU6CisgICAgICAgICAgICAgICAgZGV2aWNlID0gRGV2aWNl
KG5hbWU9ZGV2aWNlX21hdGNoLmdyb3VwKCduYW1lJykucnN0cmlwKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVkaWQ9ZGV2aWNlX21hdGNoLmdyb3VwKCd1ZGlkJyksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZT1kZXZpY2VfbWF0Y2guZ3JvdXAo
J2F2YWlsYWJpbGl0eScpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJ1bnRpbWU9Y3VycmVudF9ydW50aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBob3N0PXNlbGYuX2hvc3QpCisgICAgICAgICAgICAgICAgY3VycmVudF9ydW50aW1lLmRldmlj
ZXMuYXBwZW5kKGRldmljZSkKKworICAgIGRlZiBkZXZpY2VfdHlwZShzZWxmLCBuYW1lPU5vbmUs
IGlkZW50aWZpZXI9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICA6cGFyYW0gbmFtZTogVGhl
IHNob3J0IG5hbWUgb2YgdGhlIGRldmljZSB0eXBlLgorICAgICAgICA6dHlwZSBuYW1lOiBzdHIK
KyAgICAgICAgOnBhcmFtIGlkZW50aWZpZXI6IFRoZSBDb3JlU2ltdWxhdG9yIGlkZW50aWZpZXIg
b2YgdGhlIGRlc2lyZWQgZGV2aWNlIHR5cGUuCisgICAgICAgIDp0eXBlIGlkZW50aWZpZXI6IHN0
cgorICAgICAgICA6cmV0dXJuOiBBIGRldmljZSB0eXBlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1l
IGFuZC9vciBpZGVudGlmaWVyLCBvciBOb25lIGlmIG9uZSBkb2Vzbid0IGV4aXN0IGFzIHN1Y2gu
CisgICAgICAgIDpydHlwZTogRGV2aWNlVHlwZQorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGRl
dmljZV90eXBlIGluIHNlbGYuZGV2aWNlX3R5cGVzOgorICAgICAgICAgICAgaWYgbmFtZSBhbmQg
ZGV2aWNlX3R5cGUubmFtZSAhPSBuYW1lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAg
ICAgICAgICBpZiBpZGVudGlmaWVyIGFuZCBkZXZpY2VfdHlwZS5pZGVudGlmaWVyICE9IGlkZW50
aWZpZXI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJldHVybiBkZXZp
Y2VfdHlwZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJ1bnRpbWUoc2VsZiwgdmVy
c2lvbj1Ob25lLCBpZGVudGlmaWVyPU5vbmUsIGlzX2ludGVybmFsX3J1bnRpbWU9Tm9uZSk6Cisg
ICAgICAgICIiIgorICAgICAgICA6cGFyYW0gdmVyc2lvbjogVGhlIGlPUyB2ZXJzaW9uIG9mIHRo
ZSBkZXNpcmVkIHJ1bnRpbWUuCisgICAgICAgIDp0eXBlIHZlcnNpb246IHR1cGxlCisgICAgICAg
IDpwYXJhbSBpZGVudGlmaWVyOiBUaGUgQ29yZVNpbXVsYXRvciBpZGVudGlmaWVyIG9mIHRoZSBk
ZXNpcmVkIHJ1bnRpbWUuCisgICAgICAgIDp0eXBlIGlkZW50aWZpZXI6IHN0cgorICAgICAgICA6
cmV0dXJuOiBBIHJ1bnRpbWUgd2l0aCB0aGUgc3BlY2lmaWVkIHZlcnNpb24gYW5kL29yIGlkZW50
aWZpZXIsIG9yIE5vbmUgaWYgb25lIGRvZXNuJ3QgZXhpc3QgYXMgc3VjaC4KKyAgICAgICAgOnJ0
eXBlOiBSdW50aW1lIG9yIE5vbmUKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHZlcnNpb24gaXMg
Tm9uZSBhbmQgaWRlbnRpZmllciBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9y
KCdNdXN0IHN1cHBseSB2ZXJzaW9uIGFuZC9vciBpZGVudGlmaWVyLicpCisKKyAgICAgICAgZm9y
IHJ1bnRpbWUgaW4gc2VsZi5ydW50aW1lczoKKyAgICAgICAgICAgIGlmIHZlcnNpb24gYW5kIHJ1
bnRpbWUudmVyc2lvbiAhPSB2ZXJzaW9uOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAg
ICAgICAgICBpZiBpc19pbnRlcm5hbF9ydW50aW1lIGFuZCBydW50aW1lLmlzX2ludGVybmFsX3J1
bnRpbWUgIT0gaXNfaW50ZXJuYWxfcnVudGltZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgaWYgaWRlbnRpZmllciBhbmQgcnVudGltZS5pZGVudGlmaWVyICE9IGlkZW50
aWZpZXI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJldHVybiBydW50
aW1lCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZmluZF9kZXZpY2VfYnlfdWRpZChz
ZWxmLCB1ZGlkKToKKyAgICAgICAgIiIiCisgICAgICAgIDpwYXJhbSB1ZGlkOiBUaGUgVURJRCBv
ZiB0aGUgZGV2aWNlIHRvIGZpbmQuCisgICAgICAgIDp0eXBlIHVkaWQ6IHN0cgorICAgICAgICA6
cmV0dXJuOiBUaGUgYERldmljZWAgd2l0aCB0aGUgc3BlY2lmaWVkIFVESUQuCisgICAgICAgIDpy
dHlwZTogRGV2aWNlCisgICAgICAgICIiIgorICAgICAgICBmb3IgZGV2aWNlIGluIHNlbGYuZGV2
aWNlczoKKyAgICAgICAgICAgIGlmIGRldmljZS51ZGlkID09IHVkaWQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGRldmljZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGN1cnJlbnRf
ZGV2aWNlKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBGaW5kIHRoZSBzaW11bGF0b3IgZGV2aWNl
IHRoYXQgd2FzIGJvb3RlZCBieSBTaW11bGF0b3IuYXBwLiBGb3Igbm93LCBwaWNrIHNvbWUgYm9v
dGVkIHNpbXVsYXRvciBkZXZpY2UsIHdoaWNoCisgICAgICAgICMgbWF5IGhhdmUgYmVlbiBib290
ZWQgdXNpbmcgdGhlIHNpbWN0bCBjb21tYW5kIGxpbmUgdG9vbC4KKyAgICAgICAgZm9yIGRldmlj
ZSBpbiBzZWxmLmRldmljZXM6CisgICAgICAgICAgICBpZiBkZXZpY2Uuc3RhdGUgPT0gU2ltdWxh
dG9yLkRldmljZVN0YXRlLkJPT1RFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlCisg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICAjIEZJWE1FOiBXZSBzaG91bGQgZmluZCBhbiBleGlz
dGluZyBkZXZpY2Ugd2l0aCByZXNwZWN0IHRvIGl0cyBuYW1lLCBkZXZpY2UgdHlwZSBhbmQgcnVu
dGltZS4KKyAgICBkZWYgZGV2aWNlKHNlbGYsIG5hbWU9Tm9uZSwgcnVudGltZT1Ob25lLCBzaG91
bGRfaWdub3JlX3VuYXZhaWxhYmxlX2RldmljZXM9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAg
ICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBkZXNpcmVkIGRldmljZS4KKyAgICAgICAg
OnR5cGUgbmFtZTogc3RyCisgICAgICAgIDpwYXJhbSBydW50aW1lOiBUaGUgcnVudGltZSBvZiB0
aGUgZGVzaXJlZCBkZXZpY2UuCisgICAgICAgIDp0eXBlIHJ1bnRpbWU6IFJ1bnRpbWUKKyAgICAg
ICAgOnJldHVybjogQSBkZXZpY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kL29yIHJ1bnRp
bWUsIG9yIE5vbmUgaWYgb25lIGRvZXNuJ3QgZXhpc3QgYXMgc3VjaAorICAgICAgICA6cnR5cGU6
IERldmljZSBvciBOb25lCisgICAgICAgICIiIgorICAgICAgICBpZiBuYW1lIGlzIE5vbmUgYW5k
IHJ1bnRpbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignTXVzdCBzdXBw
bHkgbmFtZSBhbmQvb3IgcnVudGltZS4nKQorCisgICAgICAgIGZvciBkZXZpY2UgaW4gc2VsZi5k
ZXZpY2VzOgorICAgICAgICAgICAgaWYgc2hvdWxkX2lnbm9yZV91bmF2YWlsYWJsZV9kZXZpY2Vz
IGFuZCBub3QgZGV2aWNlLmF2YWlsYWJsZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICAgICAgaWYgbmFtZSBhbmQgZGV2aWNlLm5hbWUgIT0gbmFtZToKKyAgICAgICAgICAgICAg
ICBjb250aW51ZQorICAgICAgICAgICAgaWYgcnVudGltZSBhbmQgZGV2aWNlLnJ1bnRpbWUgIT0g
cnVudGltZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmV0dXJuIGRl
dmljZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGF2YWls
YWJsZV9ydW50aW1lcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIDpyZXR1cm46IEFuIGl0
ZXJhdG9yIG9mIGFsbCBhdmFpbGFibGUgcnVudGltZXMuCisgICAgICAgIDpydHlwZTogaXRlcgor
ICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGl0ZXJ0b29scy5pZmlsdGVyKGxhbWJkYSBydW50
aW1lOiBydW50aW1lLmF2YWlsYWJsZSwgc2VsZi5ydW50aW1lcykKKworICAgIEBwcm9wZXJ0eQor
ICAgIGRlZiBkZXZpY2VzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgOnJldHVybjogQW4g
aXRlcmF0b3Igb2YgYWxsIGRldmljZXMgZnJvbSBhbGwgcnVudGltZXMuCisgICAgICAgIDpydHlw
ZTogaXRlcgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGl0ZXJ0b29scy5jaGFpbigqW3J1
bnRpbWUuZGV2aWNlcyBmb3IgcnVudGltZSBpbiBzZWxmLnJ1bnRpbWVzXSkKKworICAgIEBwcm9w
ZXJ0eQorICAgIGRlZiBsYXRlc3RfYXZhaWxhYmxlX3J1bnRpbWUoc2VsZik6CisgICAgICAgICIi
IgorICAgICAgICA6cmV0dXJuOiBSZXR1cm5zIGEgUnVudGltZSBvYmplY3Qgd2l0aCB0aGUgaGln
aGVzdCB2ZXJzaW9uLgorICAgICAgICA6cnR5cGU6IFJ1bnRpbWUgb3IgTm9uZQorICAgICAgICAi
IiIKKyAgICAgICAgaWYgbm90IHNlbGYucnVudGltZXM6CisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorICAgICAgICByZXR1cm4gc29ydGVkKHNlbGYuYXZhaWxhYmxlX3J1bnRpbWVzLCBrZXk9bGFt
YmRhIHJ1bnRpbWU6IHJ1bnRpbWUudmVyc2lvbiwgcmV2ZXJzZT1UcnVlKVswXQorCisgICAgZGVm
IGxvb2t1cF9vcl9jcmVhdGVfZGV2aWNlKHNlbGYsIG5hbWUsIGRldmljZV90eXBlLCBydW50aW1l
KToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgYW4gYXZhaWxhYmxlIGlPUyBTaW11bGF0
b3IgZGV2aWNlIGZvciB0ZXN0aW5nLgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVh
dGUgYSBuZXcgc2ltdWxhdG9yIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSwKKyAgICAg
ICAgZGV2aWNlIHR5cGUgYW5kIHJ1bnRpbWUgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3Qu
CisKKyAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBzaW11bGF0b3IgZGV2aWNl
IHRvIGxvb2t1cCBvciBjcmVhdGUuCisgICAgICAgIDp0eXBlIG5hbWU6IHN0cgorICAgICAgICA6
cGFyYW0gZGV2aWNlX3R5cGU6IFRoZSBDb3JlU2ltdWxhdG9yIGRldmljZSB0eXBlLgorICAgICAg
ICA6dHlwZSBkZXZpY2VfdHlwZTogRGV2aWNlVHlwZQorICAgICAgICA6cGFyYW0gcnVudGltZTog
VGhlIENvcmVTaW11bGF0b3IgcnVudGltZS4KKyAgICAgICAgOnR5cGUgcnVudGltZTogUnVudGlt
ZQorICAgICAgICA6cmV0dXJuOiBBIGRpY3Rpb25hcnkgZGVzY3JpYmluZyB0aGUgZGV2aWNlLgor
ICAgICAgICA6cnR5cGU6IERldmljZQorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0KHJ1bnRp
bWUuYXZhaWxhYmxlKQorICAgICAgICB0ZXN0aW5nX2RldmljZSA9IHNlbGYuZGV2aWNlKG5hbWU9
bmFtZSwgcnVudGltZT1ydW50aW1lLCBzaG91bGRfaWdub3JlX3VuYXZhaWxhYmxlX2RldmljZXM9
VHJ1ZSkKKyAgICAgICAgaWYgdGVzdGluZ19kZXZpY2U6CisgICAgICAgICAgICBfbG9nLmRlYnVn
KCdsb29rdXBfb3JfY3JlYXRlX2RldmljZSAlcyAlcyAlcyBmb3VuZCAlcycsIG5hbWUsIGRldmlj
ZV90eXBlLCBydW50aW1lLCB0ZXN0aW5nX2RldmljZS5uYW1lKQorICAgICAgICAgICAgcmV0dXJu
IHRlc3RpbmdfZGV2aWNlCisgICAgICAgIHRlc3RpbmdfZGV2aWNlID0gRGV2aWNlLmNyZWF0ZShu
YW1lLCBkZXZpY2VfdHlwZSwgcnVudGltZSkKKyAgICAgICAgX2xvZy5kZWJ1ZygnbG9va3VwX29y
X2NyZWF0ZV9kZXZpY2UgJXMgJXMgJXMgY3JlYXRlZCAlcycsIG5hbWUsIGRldmljZV90eXBlLCBy
dW50aW1lLCB0ZXN0aW5nX2RldmljZS5uYW1lKQorICAgICAgICBhc3NlcnQodGVzdGluZ19kZXZp
Y2UuYXZhaWxhYmxlKQorICAgICAgICByZXR1cm4gdGVzdGluZ19kZXZpY2UKKworICAgIGRlZiBf
X3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8aU9TIFNpbXVsYXRvcjoge251bV9ydW50
aW1lc30gcnVudGltZXMsIHtudW1fZGV2aWNlX3R5cGVzfSBkZXZpY2UgdHlwZXM+Jy5mb3JtYXQo
CisgICAgICAgICAgICBudW1fcnVudGltZXM9bGVuKHNlbGYucnVudGltZXMpLAorICAgICAgICAg
ICAgbnVtX2RldmljZV90eXBlcz1sZW4oc2VsZi5kZXZpY2VfdHlwZXMpKQorCisgICAgZGVmIF9f
c3RyX18oc2VsZik6CisgICAgICAgIGRlc2NyaXB0aW9uID0gWydpT1MgU2ltdWxhdG9yOiddCisg
ICAgICAgIGRlc2NyaXB0aW9uICs9IG1hcChzdHIsIHNlbGYucnVudGltZXMpCisgICAgICAgIGRl
c2NyaXB0aW9uICs9IG1hcChzdHIsIHNlbGYuZGV2aWNlX3R5cGVzKQorICAgICAgICBkZXNjcmlw
dGlvbiArPSBtYXAoc3RyLCBzZWxmLmRldmljZXMpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4o
ZGVzY3JpcHRpb24pCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRl
ZF9kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9z
aW11bGF0ZWRfZGV2aWNlLnB5CShyZXZpc2lvbiAyMTI2NzgpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3hjb2RlL3NpbXVsYXRlZF9kZXZpY2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNCAr
MSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSwgMjAxNiwgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwLDE0OSArMjAsMTggQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKICMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9y
dCBpdGVydG9vbHMKIGltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBwbGlzdGxpYgog
aW1wb3J0IHJlCiBpbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHRpbWUKIAotZnJvbSB3ZWJraXRw
eS5iZW5jaG1hcmtfcnVubmVyLnV0aWxzIGltcG9ydCB0aW1lb3V0Citmcm9tIHdlYmtpdHB5Lnhj
b2RlLmRldmljZSBpbXBvcnQgRGV2aWNlCitmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBp
bXBvcnQgU2ltdWxhdG9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0CiAK
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAotIiIiCi1NaW5pbWFsbHkgd3Jh
cHMgQ29yZVNpbXVsYXRvciBmdW5jdGlvbmFsaXR5IHRocm91Z2ggc2ltY3RsLgogCi1JZiBwb3Nz
aWJsZSwgdXNlIHJlYWwgQ29yZVNpbXVsYXRvci5mcmFtZXdvcmsgZnVuY3Rpb25hbGl0eSBieSBs
aW5raW5nIHRvIHRoZSBmcmFtZXdvcmsgaXRzZWxmLgotRG8gbm90IHVzZSBQeU9iakMgdG8gZGxv
cGVuIHRoZSBmcmFtZXdvcmsuCi0iIiIKLQotCi1jbGFzcyBEZXZpY2VUeXBlKG9iamVjdCk6Ci0g
ICAgIiIiCi0gICAgUmVwcmVzZW50cyBhIENvcmVTaW11bGF0b3IgZGV2aWNlIHR5cGUuCi0gICAg
IiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGlkZW50aWZpZXIpOgotICAgICAgICAi
IiIKLSAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBkZXZpY2UgdHlwZSdzIGh1bWFuLXJlYWRhYmxl
IG5hbWUKLSAgICAgICAgOnR5cGUgbmFtZTogc3RyCi0gICAgICAgIDpwYXJhbSBpZGVudGlmaWVy
OiBUaGUgQ29yZVNpbXVsYXRvciBpZGVudGlmaWVyLgotICAgICAgICA6dHlwZSBpZGVudGlmaWVy
OiBzdHIKLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAgc2Vs
Zi5pZGVudGlmaWVyID0gaWRlbnRpZmllcgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZy
b21fbmFtZShjbHMsIG5hbWUpOgotICAgICAgICAiIiIKLSAgICAgICAgOnBhcmFtIG5hbWU6IFRo
ZSBuYW1lIGZvciB0aGUgZGVzaXJlZCBkZXZpY2UgdHlwZS4KLSAgICAgICAgOnR5cGUgbmFtZTog
c3RyCi0gICAgICAgIDpyZXR1cm5zOiBBIGBEZXZpY2VUeXBlYCBvYmplY3Qgd2l0aCB0aGUgc3Bl
Y2lmaWVkIGlkZW50aWZpZXIgb3IgdGhyb3dzIGEgVHlwZUVycm9yIGlmIGl0IGRvZXNuJ3QgZXhp
c3QuCi0gICAgICAgIDpydHlwZTogRGV2aWNlVHlwZQotICAgICAgICAiIiIKLSAgICAgICAgaWRl
bnRpZmllciA9IE5vbmUKLSAgICAgICAgZm9yIGRldmljZV90eXBlIGluIFNpbXVsYXRvcigpLmRl
dmljZV90eXBlczoKLSAgICAgICAgICAgIGlmIGRldmljZV90eXBlLm5hbWUgPT0gbmFtZToKLSAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyID0gZGV2aWNlX3R5cGUuaWRlbnRpZmllcgotICAgICAg
ICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgaWYgaWRlbnRpZmllciBpcyBOb25lOgotICAgICAg
ICAgICAgcmFpc2UgVHlwZUVycm9yKCdBIGRldmljZSB0eXBlIHdpdGggbmFtZSAie25hbWV9IiBk
b2VzIG5vdCBleGlzdC4nLmZvcm1hdChuYW1lPW5hbWUpKQotCi0gICAgICAgIHJldHVybiBEZXZp
Y2VUeXBlKG5hbWUsIGlkZW50aWZpZXIpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZnJv
bV9pZGVudGlmaWVyKGNscywgaWRlbnRpZmllcik6Ci0gICAgICAgICIiIgotICAgICAgICA6cGFy
YW0gaWRlbnRpZmllcjogVGhlIENvcmVTaW11bGF0b3IgaWRlbnRpZmllciBmb3IgdGhlIGRlc2ly
ZWQgcnVudGltZS4KLSAgICAgICAgOnR5cGUgaWRlbnRpZmllcjogc3RyCi0gICAgICAgIDpyZXR1
cm5zOiBBIGBSdW50aW1lYCBvYmplY3Qgd2l0aHQgdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIG9y
IHRocm93cyBhIFR5cGVFcnJvciBpZiBpdCBkb2Vzbid0IGV4aXN0LgotICAgICAgICA6cnR5cGU6
IERldmljZVR5cGUKLSAgICAgICAgIiIiCi0gICAgICAgIG5hbWUgPSBOb25lCi0gICAgICAgIGZv
ciBkZXZpY2VfdHlwZSBpbiBTaW11bGF0b3IoKS5kZXZpY2VfdHlwZXM6Ci0gICAgICAgICAgICBp
ZiBkZXZpY2VfdHlwZS5pZGVudGlmaWVyID09IGlkZW50aWZpZXI6Ci0gICAgICAgICAgICAgICAg
bmFtZSA9IGRldmljZV90eXBlLm5hbWUKLSAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAg
IGlmIG5hbWUgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQSBkZXZpY2Ug
dHlwZSB3aXRoIGlkZW50aWZpZXIgIntpZGVudGlmaWVyfSIgZG9lcyBub3QgZXhpc3QuJy5mb3Jt
YXQoCi0gICAgICAgICAgICAgICAgaWRlbnRpZmllcj1pZGVudGlmaWVyKSkKLQotICAgICAgICBy
ZXR1cm4gRGV2aWNlVHlwZShuYW1lLCBpZGVudGlmaWVyKQotCi0gICAgZGVmIF9fZXFfXyhzZWxm
LCBvdGhlcik6Ci0gICAgICAgIHJldHVybiAoc2VsZi5uYW1lID09IG90aGVyLm5hbWUpIGFuZCAo
c2VsZi5pZGVudGlmaWVyID09IG90aGVyLmlkZW50aWZpZXIpCi0KLSAgICBkZWYgX19uZV9fKHNl
bGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKLQotICAg
IGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICc8RGV2aWNlVHlwZSAie25hbWV9
Ijoge2lkZW50aWZpZXJ9PicuZm9ybWF0KG5hbWU9c2VsZi5uYW1lLCBpZGVudGlmaWVyPXNlbGYu
aWRlbnRpZmllcikKLQotCi1jbGFzcyBSdW50aW1lKG9iamVjdCk6Ci0gICAgIiIiCi0gICAgUmVw
cmVzZW50cyBhIENvcmVTaW11bGF0b3IgcnVudGltZSBhc3NvY2lhdGVkIHdpdGggYW4gaU9TIFNE
Sy4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXJzaW9uLCBpZGVudGlmaWVy
LCBhdmFpbGFibGUsIGRldmljZXM9Tm9uZSwgaXNfaW50ZXJuYWxfcnVudGltZT1GYWxzZSk6Ci0g
ICAgICAgICIiIgotICAgICAgICA6cGFyYW0gdmVyc2lvbjogVGhlIGlPUyBTREsgdmVyc2lvbgot
ICAgICAgICA6dHlwZSB2ZXJzaW9uOiB0dXBsZQotICAgICAgICA6cGFyYW0gaWRlbnRpZmllcjog
VGhlIENvcmVTaW11bGF0b3IgcnVudGltZSBpZGVudGlmaWVyCi0gICAgICAgIDp0eXBlIGlkZW50
aWZpZXI6IHN0cgotICAgICAgICA6cGFyYW0gYXZhaWxhYmlsaXR5OiBXaGV0aGVyIHRoZSBydW50
aW1lIGlzIGF2YWlsYWJsZSBmb3IgdXNlLgotICAgICAgICA6dHlwZSBhdmFpbGFiaWxpdHk6IGJv
b2wKLSAgICAgICAgOnBhcmFtIGRldmljZXM6IEEgbGlzdCBvZiBkZXZpY2VzIHVuZGVyIHRoaXMg
cnVudGltZQotICAgICAgICA6dHlwZSBkZXZpY2VzOiBsaXN0IG9yIE5vbmUKLSAgICAgICAgOnBh
cmFtIGlzX2ludGVybmFsX3J1bnRpbWU6IFdoZXRoZXIgdGhlIHJ1bnRpbWUgaXMgYW4gQXBwbGUg
aW50ZXJuYWwgcnVudGltZQotICAgICAgICA6dHlwZSBpc19pbnRlcm5hbF9ydW50aW1lOiBib29s
Ci0gICAgICAgICIiIgotICAgICAgICBzZWxmLnZlcnNpb24gPSB2ZXJzaW9uCi0gICAgICAgIHNl
bGYuaWRlbnRpZmllciA9IGlkZW50aWZpZXIKLSAgICAgICAgc2VsZi5hdmFpbGFibGUgPSBhdmFp
bGFibGUKLSAgICAgICAgc2VsZi5kZXZpY2VzID0gZGV2aWNlcyBvciBbXQotICAgICAgICBzZWxm
LmlzX2ludGVybmFsX3J1bnRpbWUgPSBpc19pbnRlcm5hbF9ydW50aW1lCi0KLSAgICBAY2xhc3Nt
ZXRob2QKLSAgICBkZWYgZnJvbV92ZXJzaW9uX3N0cmluZyhjbHMsIHZlcnNpb24pOgotICAgICAg
ICByZXR1cm4gY2xzLmZyb21faWRlbnRpZmllcignY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2lt
UnVudGltZS5pT1MtJyArIHZlcnNpb24ucmVwbGFjZSgnLicsICctJykpCi0KLSAgICBAY2xhc3Nt
ZXRob2QKLSAgICBkZWYgZnJvbV9pZGVudGlmaWVyKGNscywgaWRlbnRpZmllcik6Ci0gICAgICAg
ICIiIgotICAgICAgICA6cGFyYW0gaWRlbnRpZmllcjogVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBk
ZXNpcmVkIENvcmVTaW11bGF0b3IgcnVudGltZS4KLSAgICAgICAgOnR5cGUgaWRlbnRpZmllcjog
c3RyCi0gICAgICAgIDpyZXR1cm5zOiBBIGBSdW50aW1lYCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lm
aWVkIGlkZW50aWZpZXIgb3IgdGhyb3dzIGEgVHlwZUVycm9yIGlmIGl0IGRvZXNuJ3QgZXhpc3Qu
Ci0gICAgICAgIDpydHlwZTogUnVudGltZQotICAgICAgICAiIiIKLSAgICAgICAgZm9yIHJ1bnRp
bWUgaW4gU2ltdWxhdG9yKCkucnVudGltZXM6Ci0gICAgICAgICAgICBpZiBydW50aW1lLmlkZW50
aWZpZXIgPT0gaWRlbnRpZmllcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gcnVudGltZQotICAg
ICAgICByYWlzZSBUeXBlRXJyb3IoJ0EgcnVudGltZSB3aXRoIGlkZW50aWZpZXIgIntpZGVudGlm
aWVyfSIgZG9lcyBub3QgZXhpc3QuJy5mb3JtYXQoaWRlbnRpZmllcj1pZGVudGlmaWVyKSkKLQot
ICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gKHNlbGYudmVyc2lv
biA9PSBvdGhlci52ZXJzaW9uKSBhbmQgKHNlbGYuaWRlbnRpZmllciA9PSBvdGhlci5pZGVudGlm
aWVyKSBhbmQgKHNlbGYuaXNfaW50ZXJuYWxfcnVudGltZSA9PSBvdGhlci5pc19pbnRlcm5hbF9y
dW50aW1lKQotCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBu
b3Qgc2VsZi5fX2VxX18ob3RoZXIpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAg
IHZlcnNpb25fc3VmZml4ID0gIiIKLSAgICAgICAgaWYgc2VsZi5pc19pbnRlcm5hbF9ydW50aW1l
OgotICAgICAgICAgICAgdmVyc2lvbl9zdWZmaXggPSAiIEludGVybmFsIgotICAgICAgICByZXR1
cm4gJzxSdW50aW1lIHt2ZXJzaW9ufToge2lkZW50aWZpZXJ9LiBBdmFpbGFibGU6IHthdmFpbGFi
bGV9LCB7bnVtX2RldmljZXN9IGRldmljZXM+Jy5mb3JtYXQoCi0gICAgICAgICAgICB2ZXJzaW9u
PScuJy5qb2luKG1hcChzdHIsIHNlbGYudmVyc2lvbikpICsgdmVyc2lvbl9zdWZmaXgsCi0gICAg
ICAgICAgICBpZGVudGlmaWVyPXNlbGYuaWRlbnRpZmllciwKLSAgICAgICAgICAgIGF2YWlsYWJs
ZT1zZWxmLmF2YWlsYWJsZSwKLSAgICAgICAgICAgIG51bV9kZXZpY2VzPWxlbihzZWxmLmRldmlj
ZXMpKQotCi0KLWNsYXNzIERldmljZShvYmplY3QpOgorY2xhc3MgU2ltdWxhdGVkRGV2aWNlKERl
dmljZSk6CiAgICAgIiIiCiAgICAgUmVwcmVzZW50cyBhIENvcmVTaW11bGF0b3IgZGV2aWNlIHVu
ZGVybmVhdGggYSBydW50aW1lCiAgICAgIiIiCkBAIC0xODAsOSArNDksNyBAQCBjbGFzcyBEZXZp
Y2Uob2JqZWN0KToKICAgICAgICAgOnBhcmFtIGhvc3Q6IFRoZSBob3N0IHdoaWNoIGNhbiBydW4g
Y29tbWFuZCBsaW5lIGNvbW1hbmRzCiAgICAgICAgIDp0eXBlIGhvc3Q6IEhvc3QKICAgICAgICAg
IiIiCi0gICAgICAgIHNlbGYuX2hvc3QgPSBob3N0Ci0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUK
LSAgICAgICAgc2VsZi51ZGlkID0gdWRpZAorICAgICAgICBzdXBlcihTaW11bGF0ZWREZXZpY2Us
IHNlbGYpLl9faW5pdF9fKG5hbWUsIHVkaWQsIGhvc3QpCiAgICAgICAgIHNlbGYuYXZhaWxhYmxl
ID0gYXZhaWxhYmxlCiAgICAgICAgIHNlbGYucnVudGltZSA9IHJ1bnRpbWUKIApAQCAtMjQyLDcg
KzEwOSw3IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgICAgICA6cGFyYW0gdWRpZDogVGhl
IHVkaWQgb2YgdGhlIGRldmljZS4KICAgICAgICAgOnR5cGUgdWRpZDogc3RyCiAgICAgICAgICIi
IgotICAgICAgICBEZXZpY2Uuc2h1dGRvd24odWRpZCkKKyAgICAgICAgU2ltdWxhdGVkRGV2aWNl
LnNodXRkb3duKHVkaWQpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIF9sb2cuZGVidWcoJ3hj
cnVuIHNpbWN0bCBkZWxldGUgJXMnLCB1ZGlkKQogICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVj
a19jYWxsKFsneGNydW4nLCAnc2ltY3RsJywgJ2RlbGV0ZScsIHVkaWRdKQpAQCAtMjU2LDcgKzEy
Myw3IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgICAgICA6cGFyYW0gdWRpZDogVGhlIHVk
aWQgb2YgdGhlIGRldmljZS4KICAgICAgICAgOnR5cGUgdWRpZDogc3RyCiAgICAgICAgICIiIgot
ICAgICAgICBEZXZpY2Uuc2h1dGRvd24odWRpZCkKKyAgICAgICAgU2ltdWxhdGVkRGV2aWNlLnNo
dXRkb3duKHVkaWQpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIF9sb2cuZGVidWcoJ3hjcnVu
IHNpbWN0bCBlcmFzZSAlcycsIHVkaWQpCiAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2Nh
bGwoWyd4Y3J1bicsICdzaW1jdGwnLCAnZXJhc2UnLCB1ZGlkXSkKQEAgLTMwOSwzNjkgKzE3Niw5
IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y
KCdGYWlsZWQgdG8gZmluZCBwcm9jZXNzIGlkIGZvciB7fToge30nLmZvcm1hdChidW5kbGVfaWQs
IG91dHB1dCkpCiAgICAgICAgIHJldHVybiBpbnQobWF0Y2guZ3JvdXAoJ3BpZCcpKQogCi0gICAg
ZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBzZWxmLnVkaWQgPT0gb3Ro
ZXIudWRpZAotCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBu
b3Qgc2VsZi5fX2VxX18ob3RoZXIpCi0KICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAg
IHJldHVybiAnPERldmljZSAie25hbWV9Ijoge3VkaWR9LiBTdGF0ZToge3N0YXRlfS4gUnVudGlt
ZToge3J1bnRpbWV9LCBBdmFpbGFibGU6IHthdmFpbGFibGV9PicuZm9ybWF0KAotICAgICAgICAg
ICAgbmFtZT1zZWxmLm5hbWUsCi0gICAgICAgICAgICB1ZGlkPXNlbGYudWRpZCwKKyAgICAgICAg
cmV0dXJuICc8e2RldmljZV9pbmZvfSBTdGF0ZToge3N0YXRlfS4gUnVudGltZToge3J1bnRpbWV9
LCBBdmFpbGFibGU6IHthdmFpbGFibGV9PicuZm9ybWF0KAorICAgICAgICAgICAgZGV2aWNlX2lu
Zm89c3VwZXIoU2ltdWxhdGVkRGV2aWNlLCBzZWxmKS5fX3JlcHJfXygpLAogICAgICAgICAgICAg
c3RhdGU9c2VsZi5zdGF0ZSwKICAgICAgICAgICAgIGF2YWlsYWJsZT1zZWxmLmF2YWlsYWJsZSwK
ICAgICAgICAgICAgIHJ1bnRpbWU9c2VsZi5ydW50aW1lLmlkZW50aWZpZXIpCi0KLQotIyBGSVhN
RTogVGhpcyBjbGFzcyBpcyBmcmFnaWxlIGJlY2F1c2UgaXQgcGFyc2VzIHRoZSBvdXRwdXQgb2Yg
dGhlIHNpbWN0bCBjb21tYW5kIGxpbmUgdXRpbGl0eSwgd2hpY2ggbWF5IGNoYW5nZS4KLSMgICAg
ICAgIFdlIHNob3VsZCBmaW5kIGEgYmV0dGVyIHdheSB0byBxdWVyeSBmb3Igc2ltdWxhdG9yIGRl
dmljZSBzdGF0ZSBhbmQgY2FwYWJpbGl0aWVzLiBNYXliZSB0YWtlIGEgc2ltaWxpYXIKLSMgICAg
ICAgIGFwcHJvYWNoIGFzIGluIHdlYmtpdGRpcnMucG0gYW5kIHV0aWxpemUgdGhlIHBhcnNlZCBv
dXRwdXQgZnJvbSB0aGUgZGV2aWNlLnBsaXN0IGZpbGVzIGluIHRoZSBzdWItCi0jICAgICAgICBk
aXJlY3RvcmllcyBvZiB+L0xpYnJhcnkvRGV2ZWxvcGVyL0NvcmVTaW11bGF0b3IvRGV2aWNlcz8K
LSMgICAgICAgIEFsc28sIHNpbWN0bCBoYXMgdGhlIG9wdGlvbiB0byBvdXRwdXQgaW4gSlNPTiBm
b3JtYXQgKHhjcnVuIHNpbWN0bCBsaXN0IC0tanNvbikuCi1jbGFzcyBTaW11bGF0b3Iob2JqZWN0
KToKLSAgICAiIiIKLSAgICBSZXByZXNlbnRzIHRoZSBpT1MgU2ltdWxhdG9yIGluZnJhc3RydWN0
dXJlIHVuZGVyIHRoZSBjdXJyZW50bHkgc2VsZWN0IFhjb2RlLmFwcCBidW5kbGUuCi0gICAgIiIi
Ci0gICAgZGV2aWNlX3R5cGVfcmUgPSByZS5jb21waWxlKCcoP1A8bmFtZT5bXihdKylcKCg/UDxp
ZGVudGlmaWVyPlteKV0rKVwpJykKLSAgICAjIEZJWE1FOiBydW50aW1lX3JlIHBhcnNlcyB0aGUg
dmVyc2lvbiBmcm9tIHRoZSBydW50aW1lIG5hbWUsIGJ1dCB0aGF0IGRvZXMgbm90IGNvbnRhaW4g
dGhlIGZ1bGwgdmVyc2lvbiBudW1iZXIKLSAgICAjIChpdCBjYW4gb21pdCB0aGUgcmV2aXNpb24p
LiBXZSBzaG91bGQgaW5zdGVhZCBwYXJzZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSBudW1iZXIgY29u
dGFpbmVkIGluIHBhcmVudGhlc2VzLgotICAgIHJ1bnRpbWVfcmUgPSByZS5jb21waWxlKAotICAg
ICAgICAnKGl8d2F0Y2h8dHYpT1MgKD9QPHZlcnNpb24+XGQrXC5cZCkoP1A8aW50ZXJuYWw+IElu
dGVybmFsKT8gXChcZCtcLlxkKyhcLlxkKyk/IC0gKD9QPGJ1aWxkX3ZlcnNpb24+W14pXSspXCkg
XCgoP1A8aWRlbnRpZmllcj5bXildKylcKSggXCgoP1A8YXZhaWxhYmlsaXR5PlteKV0rKVwpKT8n
KQotICAgIHVuYXZhaWxhYmxlX3ZlcnNpb25fcmUgPSByZS5jb21waWxlKCctLSBVbmF2YWlsYWJs
ZTogKD9QPGlkZW50aWZpZXI+W14gXSspIC0tJykKLSAgICB2ZXJzaW9uX3JlID0gcmUuY29tcGls
ZSgnLS0gKGl8d2F0Y2h8dHYpT1MgKD9QPHZlcnNpb24+XGQrXC5cZCspKD9QPGludGVybmFsPiBJ
bnRlcm5hbCk/IC0tJykKLSAgICBkZXZpY2VzX3JlID0gcmUuY29tcGlsZSgKLSAgICAgICAgJ1xz
Kig/UDxuYW1lPlteKF0rIClcKCg/UDx1ZGlkPlteKV0rKVwpIFwoKD9QPHN0YXRlPlteKV0rKVwp
KCBcKCg/UDxhdmFpbGFiaWxpdHk+W14pXSspXCkpPycpCi0KLSAgICBfbWFuYWdlZF9kZXZpY2Vz
ID0ge30KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0PU5vbmUpOgotICAgICAgICBzZWxm
Ll9ob3N0ID0gaG9zdCBvciBIb3N0KCkKLSAgICAgICAgc2VsZi5ydW50aW1lcyA9IFtdCi0gICAg
ICAgIHNlbGYuZGV2aWNlX3R5cGVzID0gW10KLSAgICAgICAgc2VsZi5yZWZyZXNoKCkKLQotICAg
ICMgS2VlcCB0aGVzZSBjb25zdGFudHMgc3luY2hyb25pemVkIHdpdGggdGhlIFNpbURldmljZVN0
YXRlIGNvbnN0YW50cyBpbiBDb3JlU2ltdWxhdG9yL1NpbURldmljZS5oLgotICAgIGNsYXNzIERl
dmljZVN0YXRlOgotICAgICAgICBET0VTX05PVF9FWElTVCA9IC0xCi0gICAgICAgIENSRUFUSU5H
ID0gMAotICAgICAgICBTSFVURE9XTiA9IDEKLSAgICAgICAgQk9PVElORyA9IDIKLSAgICAgICAg
Qk9PVEVEID0gMwotICAgICAgICBTSFVUVElOR19ET1dOID0gNAotCi0gICAgTkFNRV9GT1JfU1RB
VEUgPSBbCi0gICAgICAgICdDUkVBVElORycsCi0gICAgICAgICdTSFVURE9XTicsCi0gICAgICAg
ICdCT09USU5HJywKLSAgICAgICAgJ0JPT1RFRCcsCi0gICAgICAgICdTSFVUVElOR19ET1dOJwot
ICAgIF0KLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3JlYXRlX2RldmljZShudW1iZXIs
IGRldmljZV90eXBlLCBydW50aW1lKToKLSAgICAgICAgZGV2aWNlID0gU2ltdWxhdG9yKCkubG9v
a3VwX29yX2NyZWF0ZV9kZXZpY2UoZGV2aWNlX3R5cGUubmFtZSArICcgV2ViS2l0IFRlc3Rlcicg
KyBzdHIobnVtYmVyKSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUpCi0gICAgICAgIF9sb2cuZGVidWco
J2NyZWF0ZWQgZGV2aWNlIHt9IHt9Jy5mb3JtYXQobnVtYmVyLCBkZXZpY2UpKQotICAgICAgICBh
c3NlcnQobGVuKFNpbXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzKSA9PSBudW1iZXIpCi0gICAgICAg
IFNpbXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzW251bWJlcl0gPSBkZXZpY2UKLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgcmVtb3ZlX2RldmljZShudW1iZXIpOgotICAgICAgICBpZiBub3Qg
U2ltdWxhdG9yLl9tYW5hZ2VkX2RldmljZXNbbnVtYmVyXToKLSAgICAgICAgICAgIHJldHVybgot
ICAgICAgICBkZXZpY2VfdWRpZCA9IFNpbXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzW251bWJlcl0u
dWRpZAotICAgICAgICBfbG9nLmRlYnVnKCdyZW1vdmluZyBkZXZpY2Uge30ge30nLmZvcm1hdChu
dW1iZXIsIGRldmljZV91ZGlkKSkKLSAgICAgICAgZGVsIFNpbXVsYXRvci5fbWFuYWdlZF9kZXZp
Y2VzW251bWJlcl0KLSAgICAgICAgU2ltdWxhdG9yLmRlbGV0ZV9kZXZpY2UoZGV2aWNlX3VkaWQp
Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGRldmljZV9udW1iZXIobnVtYmVyKToKLSAg
ICAgICAgcmV0dXJuIFNpbXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzW251bWJlcl0KLQotICAgIEBz
dGF0aWNtZXRob2QKLSAgICBkZWYgZGV2aWNlX3N0YXRlX2Rlc2NyaXB0aW9uKHN0YXRlKToKLSAg
ICAgICAgaWYgKHN0YXRlID09IFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5ET0VTX05PVF9FWElTVCk6
Ci0gICAgICAgICAgICByZXR1cm4gJ0RPRVNfTk9UX0VYSVNUJwotICAgICAgICByZXR1cm4gU2lt
dWxhdG9yLk5BTUVfRk9SX1NUQVRFW3N0YXRlXQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRl
ZiB3YWl0X3VudGlsX2RldmljZV9pc19ib290ZWQodWRpZCwgdGltZW91dF9zZWNvbmRzPTYwICog
NSk6Ci0gICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZSh1ZGlk
LCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuQk9PVEVELCB0aW1lb3V0X3NlY29uZHMpCi0gICAgICAg
IHdpdGggdGltZW91dChzZWNvbmRzPXRpbWVvdXRfc2Vjb25kcyk6Ci0gICAgICAgICAgICB3aGls
ZSBUcnVlOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUg
PSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ3hjcnVuJywgJ3NpbWN0bCcsICdzcGF3bicsIHVk
aWQsICdsYXVuY2hjdGwnLCAncHJpbnQnLCAnc3lzdGVtJ10pLnN0cmlwKCkKLSAgICAgICAgICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygneGNydW4gc2ltY3RsIHNwYXduICVzJywgdWRpZCkKLQotICAg
ICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goIkFbXHNdK2NvbS5hcHBsZS5zcHJpbmdib2Fy
ZC5zZXJ2aWNlcyIsIHN0YXRlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAg
ICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKLSAgICAg
ICAgICAgICAgICAgICAgaWYgU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1ZGlkKSAhPSBTaW11bGF0
b3IuRGV2aWNlU3RhdGUuQk9PVEVEOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVu
dGltZUVycm9yKCdTaW11YXRvciBkZXZpY2UgcXVpdCB1bmV4cGVjdGVkbHkuJykKLSAgICAgICAg
ICAgICAgICAgICAgX2xvZy53YXJuKCJFcnJvciBpbiBjaGVja2luZyBTaW11bGF0b3IgYm9vdCBz
dGF0dXMuIFdpbGwgcmV0cnkgaW4gMSBzZWNvbmQuIikKLSAgICAgICAgICAgICAgICB0aW1lLnNs
ZWVwKDEpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHdhaXRfdW50aWxfZGV2aWNlX2lz
X2luX3N0YXRlKHVkaWQsIHdhaXRfdW50aWxfc3RhdGUsIHRpbWVvdXRfc2Vjb25kcz02MCAqIDUp
OgotICAgICAgICBfbG9nLmRlYnVnKCd3YWl0aW5nIGZvciBkZXZpY2UgJXMgdG8gZW50ZXIgc3Rh
dGUgJXMgd2l0aCB0aW1lb3V0ICVzJywgdWRpZCwgU2ltdWxhdG9yLmRldmljZV9zdGF0ZV9kZXNj
cmlwdGlvbih3YWl0X3VudGlsX3N0YXRlKSwgdGltZW91dF9zZWNvbmRzKQotICAgICAgICB3aXRo
IHRpbWVvdXQoc2Vjb25kcz10aW1lb3V0X3NlY29uZHMpOgotICAgICAgICAgICAgZGV2aWNlX3N0
YXRlID0gU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1ZGlkKQotICAgICAgICAgICAgd2hpbGUgKGRl
dmljZV9zdGF0ZSAhPSB3YWl0X3VudGlsX3N0YXRlKToKLSAgICAgICAgICAgICAgICBkZXZpY2Vf
c3RhdGUgPSBTaW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpCi0gICAgICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnIGRldmljZSBzdGF0ZSAlcycsIFNpbXVsYXRvci5kZXZpY2Vfc3RhdGVfZGVzY3Jp
cHRpb24oZGV2aWNlX3N0YXRlKSkKLSAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNSkKLQot
ICAgICAgICBlbmRfc3RhdGUgPSBTaW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpCi0gICAgICAg
IGlmIChlbmRfc3RhdGUgIT0gd2FpdF91bnRpbF9zdGF0ZSk6Ci0gICAgICAgICAgICByYWlzZSBS
dW50aW1lRXJyb3IoJ1RpbWVkIG91dCB3YWl0aW5nIGZvciBzaW11bGF0b3IgZGV2aWNlIHRvIGVu
dGVyIHN0YXRlIHswfTsgY3VycmVudCBzdGF0ZSBpcyB7MX0nLmZvcm1hdChTaW11bGF0b3IuZGV2
aWNlX3N0YXRlX2Rlc2NyaXB0aW9uKHdhaXRfdW50aWxfc3RhdGUpLCBTaW11bGF0b3IuZGV2aWNl
X3N0YXRlX2Rlc2NyaXB0aW9uKGVuZF9zdGF0ZSkpKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAg
IGRlZiBkZXZpY2Vfc3RhdGUodWRpZCk6Ci0gICAgICAgIGRldmljZV9wbGlzdCA9IG9zLnBhdGgu
am9pbihTaW11bGF0b3IuZGV2aWNlX2RpcmVjdG9yeSh1ZGlkKSwgJ2RldmljZS5wbGlzdCcpCi0g
ICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShkZXZpY2VfcGxpc3QpOgotICAgICAgICAgICAg
cmV0dXJuIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5ET0VTX05PVF9FWElTVAotICAgICAgICByZXR1
cm4gcGxpc3RsaWIucmVhZFBsaXN0KGRldmljZV9wbGlzdClbJ3N0YXRlJ10KLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgZGV2aWNlX2RpcmVjdG9yeSh1ZGlkKToKLSAgICAgICAgcmV0dXJu
IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbignfi9MaWJy
YXJ5L0RldmVsb3Blci9Db3JlU2ltdWxhdG9yL0RldmljZXMnLCB1ZGlkKSkpCi0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIGRlbGV0ZV9kZXZpY2UodWRpZCk6Ci0gICAgICAgIERldmljZS5k
ZWxldGUodWRpZCkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcmVzZXRfZGV2aWNlKHVk
aWQpOgotICAgICAgICBEZXZpY2UucmVzZXQodWRpZCkKLQotICAgIGRlZiByZWZyZXNoKHNlbGYp
OgotICAgICAgICAiIiIKLSAgICAgICAgUmVmcmVzaCBydW50aW1lIGFuZCBkZXZpY2UgdHlwZSBp
bmZvcm1hdGlvbiBmcm9tIGBgc2ltY3RsIGxpc3RgYC4KLSAgICAgICAgIiIiCi0gICAgICAgIGxp
bmVzID0gc2VsZi5faG9zdC5wbGF0Zm9ybS54Y29kZV9zaW1jdGxfbGlzdCgpCi0gICAgICAgIGlm
IG5vdCBsaW5lczoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBkZXZpY2VfdHlwZXNfaGVh
ZGVyID0gbmV4dChsaW5lcykKLSAgICAgICAgaWYgZGV2aWNlX3R5cGVzX2hlYWRlciAhPSAnPT0g
RGV2aWNlIFR5cGVzID09JzoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXhwZWN0
ZWQgPT0gRGV2aWNlIFR5cGVzID09IGhlYWRlciBidXQgZ290OiAie30iJy5mb3JtYXQoZGV2aWNl
X3R5cGVzX2hlYWRlcikpCi0gICAgICAgIHNlbGYuX3BhcnNlX2RldmljZV90eXBlcyhsaW5lcykK
LQotICAgIGRlZiBfcGFyc2VfZGV2aWNlX3R5cGVzKHNlbGYsIGxpbmVzKToKLSAgICAgICAgIiIi
Ci0gICAgICAgIFBhcnNlIGRldmljZSB0eXBlcyBmcm9tIGBgc2ltY3RsIGxpc3RgYC4KLSAgICAg
ICAgOnBhcmFtIGxpbmVzOiBBIGdlbmVyYXRvciBmb3IgdGhlIG91dHB1dCBsaW5lcyBmcm9tIGBg
c2ltY3RsIGxpc3RgYC4KLSAgICAgICAgOnR5cGUgbGluZXM6IGdlbmV4cHIKLSAgICAgICAgOnJl
dHVybjogTm9uZQotICAgICAgICAiIiIKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAg
ICAgICAgICBkZXZpY2VfdHlwZV9tYXRjaCA9IHNlbGYuZGV2aWNlX3R5cGVfcmUubWF0Y2gobGlu
ZSkKLSAgICAgICAgICAgIGlmIG5vdCBkZXZpY2VfdHlwZV9tYXRjaDoKLSAgICAgICAgICAgICAg
ICBpZiBsaW5lICE9ICc9PSBSdW50aW1lcyA9PSc6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNl
IFJ1bnRpbWVFcnJvcignRXhwZWN0ZWQgPT0gUnVudGltZXMgPT0gaGVhZGVyIGJ1dCBnb3Q6ICJ7
fSInLmZvcm1hdChsaW5lKSkKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZGV2
aWNlX3R5cGUgPSBEZXZpY2VUeXBlKG5hbWU9ZGV2aWNlX3R5cGVfbWF0Y2guZ3JvdXAoJ25hbWUn
KS5yc3RyaXAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlm
aWVyPWRldmljZV90eXBlX21hdGNoLmdyb3VwKCdpZGVudGlmaWVyJykpCi0gICAgICAgICAgICBz
ZWxmLmRldmljZV90eXBlcy5hcHBlbmQoZGV2aWNlX3R5cGUpCi0KLSAgICAgICAgc2VsZi5fcGFy
c2VfcnVudGltZXMobGluZXMpCi0KLSAgICBkZWYgX3BhcnNlX3J1bnRpbWVzKHNlbGYsIGxpbmVz
KToKLSAgICAgICAgIiIiCi0gICAgICAgIENvbnRpbnVlIHRvIHBhcnNlIHJ1bnRpbWVzIGZyb20g
YGBzaW1jdGwgbGlzdGBgLgotICAgICAgICA6cGFyYW0gbGluZXM6IEEgZ2VuZXJhdG9yIGZvciB0
aGUgb3V0cHV0IGxpbmVzIGZyb20gYGBzaW1jdGwgbGlzdGBgLgotICAgICAgICA6dHlwZSBsaW5l
czogZ2VuZXhwcgotICAgICAgICA6cmV0dXJuOiBOb25lCi0gICAgICAgICIiIgotICAgICAgICBm
b3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIHJ1bnRpbWVfbWF0Y2ggPSBzZWxmLnJ1bnRp
bWVfcmUubWF0Y2gobGluZSkKLSAgICAgICAgICAgIGlmIG5vdCBydW50aW1lX21hdGNoOgotICAg
ICAgICAgICAgICAgIGlmIGxpbmUgIT0gJz09IERldmljZXMgPT0nOgotICAgICAgICAgICAgICAg
ICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0V4cGVjdGVkID09IERldmljZXMgPT0gaGVhZGVyIGJ1
dCBnb3Q6ICJ7fSInLmZvcm1hdChsaW5lKSkKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAg
ICAgICAgdmVyc2lvbiA9IHR1cGxlKG1hcChpbnQsIHJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ3ZlcnNp
b24nKS5zcGxpdCgnLicpKSkKLSAgICAgICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lKHZlcnNpb249
dmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9cnVudGlt
ZV9tYXRjaC5ncm91cCgnaWRlbnRpZmllcicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXZhaWxhYmxlPXJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ2F2YWlsYWJpbGl0eScpIGlzIE5vbmUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19pbnRlcm5hbF9ydW50aW1lPWJvb2wo
cnVudGltZV9tYXRjaC5ncm91cCgnaW50ZXJuYWwnKSkpCi0gICAgICAgICAgICBzZWxmLnJ1bnRp
bWVzLmFwcGVuZChydW50aW1lKQotICAgICAgICBzZWxmLl9wYXJzZV9kZXZpY2VzKGxpbmVzKQot
Ci0gICAgZGVmIF9wYXJzZV9kZXZpY2VzKHNlbGYsIGxpbmVzKToKLSAgICAgICAgIiIiCi0gICAg
ICAgIENvbnRpbnVlIHRvIHBhcnNlIGRldmljZXMgZnJvbSBgYHNpbWN0bCBsaXN0YGAuCi0gICAg
ICAgIDpwYXJhbSBsaW5lczogQSBnZW5lcmF0b3IgZm9yIHRoZSBvdXRwdXQgbGluZXMgZnJvbSBg
YHNpbWN0bCBsaXN0YGAuCi0gICAgICAgIDp0eXBlIGxpbmVzOiBnZW5leHByCi0gICAgICAgIDpy
ZXR1cm46IE5vbmUKLSAgICAgICAgIiIiCi0gICAgICAgIGN1cnJlbnRfcnVudGltZSA9IE5vbmUK
LSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICB2ZXJzaW9uX21hdGNoID0g
c2VsZi52ZXJzaW9uX3JlLm1hdGNoKGxpbmUpCi0gICAgICAgICAgICBpZiB2ZXJzaW9uX21hdGNo
OgotICAgICAgICAgICAgICAgIHZlcnNpb24gPSB0dXBsZShtYXAoaW50LCB2ZXJzaW9uX21hdGNo
Lmdyb3VwKCd2ZXJzaW9uJykuc3BsaXQoJy4nKSkpCi0gICAgICAgICAgICAgICAgY3VycmVudF9y
dW50aW1lID0gc2VsZi5ydW50aW1lKHZlcnNpb249dmVyc2lvbiwgaXNfaW50ZXJuYWxfcnVudGlt
ZT1ib29sKHZlcnNpb25fbWF0Y2guZ3JvdXAoJ2ludGVybmFsJykpKQotICAgICAgICAgICAgICAg
IGFzc2VydCBjdXJyZW50X3J1bnRpbWUKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAg
ICAgICAgICB1bmF2YWlsYWJsZV92ZXJzaW9uX21hdGNoID0gc2VsZi51bmF2YWlsYWJsZV92ZXJz
aW9uX3JlLm1hdGNoKGxpbmUpCi0gICAgICAgICAgICBpZiB1bmF2YWlsYWJsZV92ZXJzaW9uX21h
dGNoOgotICAgICAgICAgICAgICAgIGN1cnJlbnRfcnVudGltZSA9IE5vbmUKLSAgICAgICAgICAg
ICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBkZXZpY2VfbWF0Y2ggPSBzZWxmLmRldmljZXNf
cmUubWF0Y2gobGluZSkKLSAgICAgICAgICAgIGlmIG5vdCBkZXZpY2VfbWF0Y2g6Ci0gICAgICAg
ICAgICAgICAgaWYgbGluZSAhPSAnPT0gRGV2aWNlIFBhaXJzID09JzoKLSAgICAgICAgICAgICAg
ICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFeHBlY3RlZCA9PSBEZXZpY2UgUGFpcnMgPT0gaGVh
ZGVyIGJ1dCBnb3Q6ICJ7fSInLmZvcm1hdChsaW5lKSkKLSAgICAgICAgICAgICAgICBicmVhawot
ICAgICAgICAgICAgaWYgY3VycmVudF9ydW50aW1lOgotICAgICAgICAgICAgICAgIGRldmljZSA9
IERldmljZShuYW1lPWRldmljZV9tYXRjaC5ncm91cCgnbmFtZScpLnJzdHJpcCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGlkPWRldmljZV9tYXRjaC5ncm91cCgndWRpZCcp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGU9ZGV2aWNlX21hdGNo
Lmdyb3VwKCdhdmFpbGFiaWxpdHknKSBpcyBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBydW50aW1lPWN1cnJlbnRfcnVudGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaG9zdD1zZWxmLl9ob3N0KQotICAgICAgICAgICAgICAgIGN1cnJlbnRfcnVudGlt
ZS5kZXZpY2VzLmFwcGVuZChkZXZpY2UpCi0KLSAgICBkZWYgZGV2aWNlX3R5cGUoc2VsZiwgbmFt
ZT1Ob25lLCBpZGVudGlmaWVyPU5vbmUpOgotICAgICAgICAiIiIKLSAgICAgICAgOnBhcmFtIG5h
bWU6IFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBkZXZpY2UgdHlwZS4KLSAgICAgICAgOnR5cGUgbmFt
ZTogc3RyCi0gICAgICAgIDpwYXJhbSBpZGVudGlmaWVyOiBUaGUgQ29yZVNpbXVsYXRvciBpZGVu
dGlmaWVyIG9mIHRoZSBkZXNpcmVkIGRldmljZSB0eXBlLgotICAgICAgICA6dHlwZSBpZGVudGlm
aWVyOiBzdHIKLSAgICAgICAgOnJldHVybjogQSBkZXZpY2UgdHlwZSB3aXRoIHRoZSBzcGVjaWZp
ZWQgbmFtZSBhbmQvb3IgaWRlbnRpZmllciwgb3IgTm9uZSBpZiBvbmUgZG9lc24ndCBleGlzdCBh
cyBzdWNoLgotICAgICAgICA6cnR5cGU6IERldmljZVR5cGUKLSAgICAgICAgIiIiCi0gICAgICAg
IGZvciBkZXZpY2VfdHlwZSBpbiBzZWxmLmRldmljZV90eXBlczoKLSAgICAgICAgICAgIGlmIG5h
bWUgYW5kIGRldmljZV90eXBlLm5hbWUgIT0gbmFtZToKLSAgICAgICAgICAgICAgICBjb250aW51
ZQotICAgICAgICAgICAgaWYgaWRlbnRpZmllciBhbmQgZGV2aWNlX3R5cGUuaWRlbnRpZmllciAh
PSBpZGVudGlmaWVyOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICByZXR1
cm4gZGV2aWNlX3R5cGUKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBydW50aW1lKHNl
bGYsIHZlcnNpb249Tm9uZSwgaWRlbnRpZmllcj1Ob25lLCBpc19pbnRlcm5hbF9ydW50aW1lPU5v
bmUpOgotICAgICAgICAiIiIKLSAgICAgICAgOnBhcmFtIHZlcnNpb246IFRoZSBpT1MgdmVyc2lv
biBvZiB0aGUgZGVzaXJlZCBydW50aW1lLgotICAgICAgICA6dHlwZSB2ZXJzaW9uOiB0dXBsZQot
ICAgICAgICA6cGFyYW0gaWRlbnRpZmllcjogVGhlIENvcmVTaW11bGF0b3IgaWRlbnRpZmllciBv
ZiB0aGUgZGVzaXJlZCBydW50aW1lLgotICAgICAgICA6dHlwZSBpZGVudGlmaWVyOiBzdHIKLSAg
ICAgICAgOnJldHVybjogQSBydW50aW1lIHdpdGggdGhlIHNwZWNpZmllZCB2ZXJzaW9uIGFuZC9v
ciBpZGVudGlmaWVyLCBvciBOb25lIGlmIG9uZSBkb2Vzbid0IGV4aXN0IGFzIHN1Y2guCi0gICAg
ICAgIDpydHlwZTogUnVudGltZSBvciBOb25lCi0gICAgICAgICIiIgotICAgICAgICBpZiB2ZXJz
aW9uIGlzIE5vbmUgYW5kIGlkZW50aWZpZXIgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIFR5
cGVFcnJvcignTXVzdCBzdXBwbHkgdmVyc2lvbiBhbmQvb3IgaWRlbnRpZmllci4nKQotCi0gICAg
ICAgIGZvciBydW50aW1lIGluIHNlbGYucnVudGltZXM6Ci0gICAgICAgICAgICBpZiB2ZXJzaW9u
IGFuZCBydW50aW1lLnZlcnNpb24gIT0gdmVyc2lvbjoKLSAgICAgICAgICAgICAgICBjb250aW51
ZQotICAgICAgICAgICAgaWYgaXNfaW50ZXJuYWxfcnVudGltZSBhbmQgcnVudGltZS5pc19pbnRl
cm5hbF9ydW50aW1lICE9IGlzX2ludGVybmFsX3J1bnRpbWU6Ci0gICAgICAgICAgICAgICAgY29u
dGludWUKLSAgICAgICAgICAgIGlmIGlkZW50aWZpZXIgYW5kIHJ1bnRpbWUuaWRlbnRpZmllciAh
PSBpZGVudGlmaWVyOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICByZXR1
cm4gcnVudGltZQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGZpbmRfZGV2aWNlX2J5
X3VkaWQoc2VsZiwgdWRpZCk6Ci0gICAgICAgICIiIgotICAgICAgICA6cGFyYW0gdWRpZDogVGhl
IFVESUQgb2YgdGhlIGRldmljZSB0byBmaW5kLgotICAgICAgICA6dHlwZSB1ZGlkOiBzdHIKLSAg
ICAgICAgOnJldHVybjogVGhlIGBEZXZpY2VgIHdpdGggdGhlIHNwZWNpZmllZCBVRElELgotICAg
ICAgICA6cnR5cGU6IERldmljZQotICAgICAgICAiIiIKLSAgICAgICAgZm9yIGRldmljZSBpbiBz
ZWxmLmRldmljZXM6Ci0gICAgICAgICAgICBpZiBkZXZpY2UudWRpZCA9PSB1ZGlkOgotICAgICAg
ICAgICAgICAgIHJldHVybiBkZXZpY2UKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBj
dXJyZW50X2RldmljZShzZWxmKToKLSAgICAgICAgIyBGSVhNRTogRmluZCB0aGUgc2ltdWxhdG9y
IGRldmljZSB0aGF0IHdhcyBib290ZWQgYnkgU2ltdWxhdG9yLmFwcC4gRm9yIG5vdywgcGljayBz
b21lIGJvb3RlZCBzaW11bGF0b3IgZGV2aWNlLCB3aGljaAotICAgICAgICAjIG1heSBoYXZlIGJl
ZW4gYm9vdGVkIHVzaW5nIHRoZSBzaW1jdGwgY29tbWFuZCBsaW5lIHRvb2wuCi0gICAgICAgIGZv
ciBkZXZpY2UgaW4gc2VsZi5kZXZpY2VzOgotICAgICAgICAgICAgaWYgZGV2aWNlLnN0YXRlID09
IFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5CT09URUQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRl
dmljZQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgIyBGSVhNRTogV2Ugc2hvdWxkIGZpbmQg
YW4gZXhpc3RpbmcgZGV2aWNlIHdpdGggcmVzcGVjdCB0byBpdHMgbmFtZSwgZGV2aWNlIHR5cGUg
YW5kIHJ1bnRpbWUuCi0gICAgZGVmIGRldmljZShzZWxmLCBuYW1lPU5vbmUsIHJ1bnRpbWU9Tm9u
ZSwgc2hvdWxkX2lnbm9yZV91bmF2YWlsYWJsZV9kZXZpY2VzPUZhbHNlKToKLSAgICAgICAgIiIi
Ci0gICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBkZXZpY2UuCi0g
ICAgICAgIDp0eXBlIG5hbWU6IHN0cgotICAgICAgICA6cGFyYW0gcnVudGltZTogVGhlIHJ1bnRp
bWUgb2YgdGhlIGRlc2lyZWQgZGV2aWNlLgotICAgICAgICA6dHlwZSBydW50aW1lOiBSdW50aW1l
Ci0gICAgICAgIDpyZXR1cm46IEEgZGV2aWNlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFuZC9v
ciBydW50aW1lLCBvciBOb25lIGlmIG9uZSBkb2Vzbid0IGV4aXN0IGFzIHN1Y2gKLSAgICAgICAg
OnJ0eXBlOiBEZXZpY2Ugb3IgTm9uZQotICAgICAgICAiIiIKLSAgICAgICAgaWYgbmFtZSBpcyBO
b25lIGFuZCBydW50aW1lIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ011
c3Qgc3VwcGx5IG5hbWUgYW5kL29yIHJ1bnRpbWUuJykKLQotICAgICAgICBmb3IgZGV2aWNlIGlu
IHNlbGYuZGV2aWNlczoKLSAgICAgICAgICAgIGlmIHNob3VsZF9pZ25vcmVfdW5hdmFpbGFibGVf
ZGV2aWNlcyBhbmQgbm90IGRldmljZS5hdmFpbGFibGU6Ci0gICAgICAgICAgICAgICAgY29udGlu
dWUKLSAgICAgICAgICAgIGlmIG5hbWUgYW5kIGRldmljZS5uYW1lICE9IG5hbWU6Ci0gICAgICAg
ICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIHJ1bnRpbWUgYW5kIGRldmljZS5ydW50
aW1lICE9IHJ1bnRpbWU6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHJl
dHVybiBkZXZpY2UKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBwcm9wZXJ0eQotICAgIGRl
ZiBhdmFpbGFibGVfcnVudGltZXMoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICA6cmV0dXJu
OiBBbiBpdGVyYXRvciBvZiBhbGwgYXZhaWxhYmxlIHJ1bnRpbWVzLgotICAgICAgICA6cnR5cGU6
IGl0ZXIKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBpdGVydG9vbHMuaWZpbHRlcihsYW1i
ZGEgcnVudGltZTogcnVudGltZS5hdmFpbGFibGUsIHNlbGYucnVudGltZXMpCi0KLSAgICBAcHJv
cGVydHkKLSAgICBkZWYgZGV2aWNlcyhzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIDpyZXR1
cm46IEFuIGl0ZXJhdG9yIG9mIGFsbCBkZXZpY2VzIGZyb20gYWxsIHJ1bnRpbWVzLgotICAgICAg
ICA6cnR5cGU6IGl0ZXIKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBpdGVydG9vbHMuY2hh
aW4oKltydW50aW1lLmRldmljZXMgZm9yIHJ1bnRpbWUgaW4gc2VsZi5ydW50aW1lc10pCi0KLSAg
ICBAcHJvcGVydHkKLSAgICBkZWYgbGF0ZXN0X2F2YWlsYWJsZV9ydW50aW1lKHNlbGYpOgotICAg
ICAgICAiIiIKLSAgICAgICAgOnJldHVybjogUmV0dXJucyBhIFJ1bnRpbWUgb2JqZWN0IHdpdGgg
dGhlIGhpZ2hlc3QgdmVyc2lvbi4KLSAgICAgICAgOnJ0eXBlOiBSdW50aW1lIG9yIE5vbmUKLSAg
ICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLnJ1bnRpbWVzOgotICAgICAgICAgICAgcmV0
dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIHNvcnRlZChzZWxmLmF2YWlsYWJsZV9ydW50aW1lcywg
a2V5PWxhbWJkYSBydW50aW1lOiBydW50aW1lLnZlcnNpb24sIHJldmVyc2U9VHJ1ZSlbMF0KLQot
ICAgIGRlZiBsb29rdXBfb3JfY3JlYXRlX2RldmljZShzZWxmLCBuYW1lLCBkZXZpY2VfdHlwZSwg
cnVudGltZSk6Ci0gICAgICAgICIiIgotICAgICAgICBSZXR1cm5zIGFuIGF2YWlsYWJsZSBpT1Mg
U2ltdWxhdG9yIGRldmljZSBmb3IgdGVzdGluZy4KLQotICAgICAgICBUaGlzIGZ1bmN0aW9uIHdp
bGwgY3JlYXRlIGEgbmV3IHNpbXVsYXRvciBkZXZpY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUs
Ci0gICAgICAgIGRldmljZSB0eXBlIGFuZCBydW50aW1lIGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5
IGV4aXN0LgotCi0gICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgc2ltdWxhdG9y
IGRldmljZSB0byBsb29rdXAgb3IgY3JlYXRlLgotICAgICAgICA6dHlwZSBuYW1lOiBzdHIKLSAg
ICAgICAgOnBhcmFtIGRldmljZV90eXBlOiBUaGUgQ29yZVNpbXVsYXRvciBkZXZpY2UgdHlwZS4K
LSAgICAgICAgOnR5cGUgZGV2aWNlX3R5cGU6IERldmljZVR5cGUKLSAgICAgICAgOnBhcmFtIHJ1
bnRpbWU6IFRoZSBDb3JlU2ltdWxhdG9yIHJ1bnRpbWUuCi0gICAgICAgIDp0eXBlIHJ1bnRpbWU6
IFJ1bnRpbWUKLSAgICAgICAgOnJldHVybjogQSBkaWN0aW9uYXJ5IGRlc2NyaWJpbmcgdGhlIGRl
dmljZS4KLSAgICAgICAgOnJ0eXBlOiBEZXZpY2UKLSAgICAgICAgIiIiCi0gICAgICAgIGFzc2Vy
dChydW50aW1lLmF2YWlsYWJsZSkKLSAgICAgICAgdGVzdGluZ19kZXZpY2UgPSBzZWxmLmRldmlj
ZShuYW1lPW5hbWUsIHJ1bnRpbWU9cnVudGltZSwgc2hvdWxkX2lnbm9yZV91bmF2YWlsYWJsZV9k
ZXZpY2VzPVRydWUpCi0gICAgICAgIGlmIHRlc3RpbmdfZGV2aWNlOgotICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnbG9va3VwX29yX2NyZWF0ZV9kZXZpY2UgJXMgJXMgJXMgZm91bmQgJXMnLCBuYW1l
LCBkZXZpY2VfdHlwZSwgcnVudGltZSwgdGVzdGluZ19kZXZpY2UubmFtZSkKLSAgICAgICAgICAg
IHJldHVybiB0ZXN0aW5nX2RldmljZQotICAgICAgICB0ZXN0aW5nX2RldmljZSA9IERldmljZS5j
cmVhdGUobmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUpCi0gICAgICAgIF9sb2cuZGVidWcoJ2xv
b2t1cF9vcl9jcmVhdGVfZGV2aWNlICVzICVzICVzIGNyZWF0ZWQgJXMnLCBuYW1lLCBkZXZpY2Vf
dHlwZSwgcnVudGltZSwgdGVzdGluZ19kZXZpY2UubmFtZSkKLSAgICAgICAgYXNzZXJ0KHRlc3Rp
bmdfZGV2aWNlLmF2YWlsYWJsZSkKLSAgICAgICAgcmV0dXJuIHRlc3RpbmdfZGV2aWNlCi0KLSAg
ICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAnPGlPUyBTaW11bGF0b3I6IHtu
dW1fcnVudGltZXN9IHJ1bnRpbWVzLCB7bnVtX2RldmljZV90eXBlc30gZGV2aWNlIHR5cGVzPicu
Zm9ybWF0KAotICAgICAgICAgICAgbnVtX3J1bnRpbWVzPWxlbihzZWxmLnJ1bnRpbWVzKSwKLSAg
ICAgICAgICAgIG51bV9kZXZpY2VfdHlwZXM9bGVuKHNlbGYuZGV2aWNlX3R5cGVzKSkKLQotICAg
IGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICBkZXNjcmlwdGlvbiA9IFsnaU9TIFNpbXVsYXRv
cjonXQotICAgICAgICBkZXNjcmlwdGlvbiArPSBtYXAoc3RyLCBzZWxmLnJ1bnRpbWVzKQotICAg
ICAgICBkZXNjcmlwdGlvbiArPSBtYXAoc3RyLCBzZWxmLmRldmljZV90eXBlcykKLSAgICAgICAg
ZGVzY3JpcHRpb24gKz0gbWFwKHN0ciwgc2VsZi5kZXZpY2VzKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGRlc2NyaXB0aW9uKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9z
aW11bGF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9z
aW11bGF0b3IucHkJKHJldmlzaW9uIDIxMjY3OCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
eGNvZGUvc2ltdWxhdG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUsIDIwMTYsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjIsMTY4ICsxNjIs
NiBAQCBjbGFzcyBSdW50aW1lKG9iamVjdCk6CiAgICAgICAgICAgICBudW1fZGV2aWNlcz1sZW4o
c2VsZi5kZXZpY2VzKSkKIAogCi1jbGFzcyBEZXZpY2Uob2JqZWN0KToKLSAgICAiIiIKLSAgICBS
ZXByZXNlbnRzIGEgQ29yZVNpbXVsYXRvciBkZXZpY2UgdW5kZXJuZWF0aCBhIHJ1bnRpbWUKLSAg
ICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1ZGlkLCBhdmFpbGFibGUsIHJ1
bnRpbWUsIGhvc3QpOgotICAgICAgICAiIiIKLSAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBkZXZp
Y2UgbmFtZQotICAgICAgICA6dHlwZSBuYW1lOiBzdHIKLSAgICAgICAgOnBhcmFtIHVkaWQ6IFRo
ZSBkZXZpY2UgVURJRCAoYSBVVUlEIHN0cmluZykKLSAgICAgICAgOnR5cGUgdWRpZDogc3RyCi0g
ICAgICAgIDpwYXJhbSBhdmFpbGFibGU6IFdoZXRoZXIgdGhlIGRldmljZSBpcyBhdmFpbGFibGUg
Zm9yIHVzZS4KLSAgICAgICAgOnR5cGUgYXZhaWxhYmxlOiBib29sCi0gICAgICAgIDpwYXJhbSBy
dW50aW1lOiBUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHRoYXQgaG9zdHMgdGhpcyBkZXZpY2UK
LSAgICAgICAgOnR5cGUgcnVudGltZTogUnVudGltZQotICAgICAgICA6cGFyYW0gaG9zdDogVGhl
IGhvc3Qgd2hpY2ggY2FuIHJ1biBjb21tYW5kIGxpbmUgY29tbWFuZHMKLSAgICAgICAgOnR5cGUg
aG9zdDogSG9zdAotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5faG9zdCA9IGhvc3QKLSAgICAg
ICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBzZWxmLnVkaWQgPSB1ZGlkCi0gICAgICAgIHNl
bGYuYXZhaWxhYmxlID0gYXZhaWxhYmxlCi0gICAgICAgIHNlbGYucnVudGltZSA9IHJ1bnRpbWUK
LQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBzdGF0ZShzZWxmKToKLSAgICAgICAgIiIiCi0gICAg
ICAgIDpyZXR1cm5zOiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGV2aWNlLgotICAgICAgICA6
cnR5cGU6IFNpbXVsYXRvci5EZXZpY2VTdGF0ZQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJu
IFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUoc2VsZi51ZGlkKQotCi0gICAgQHByb3BlcnR5Ci0gICAg
ZGVmIHBhdGgoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICA6cmV0dXJuczogVGhlIGZpbGVz
eXN0ZW0gcGF0aCB0aGF0IGNvbnRhaW5zIHRoZSBzaW11bGF0b3IgZGV2aWNlJ3MgZGF0YS4KLSAg
ICAgICAgOnJ0eXBlOiBzdHIKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBTaW11bGF0b3Iu
ZGV2aWNlX2RpcmVjdG9yeShzZWxmLnVkaWQpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYg
Y3JlYXRlKGNscywgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUpOgotICAgICAgICAiIiIKLSAg
ICAgICAgQ3JlYXRlIGEgbmV3IENvcmVTaW11bGF0b3IgZGV2aWNlLgotICAgICAgICA6cGFyYW0g
bmFtZTogVGhlIG5hbWUgb2YgdGhlIGRldmljZS4KLSAgICAgICAgOnR5cGUgbmFtZTogc3RyCi0g
ICAgICAgIDpwYXJhbSBkZXZpY2VfdHlwZTogVGhlIENvcmVTaW11bGF0b3J0IGRldmljZSB0eXBl
LgotICAgICAgICA6dHlwZSBkZXZpY2VfdHlwZTogRGV2aWNlVHlwZQotICAgICAgICA6cGFyYW0g
cnVudGltZTogIFRoZSBDb3JlU2ltdWFsdG9yIHJ1bnRpbWUuCi0gICAgICAgIDp0eXBlIHJ1bnRp
bWU6IFJ1bnRpbWUKLSAgICAgICAgOnJldHVybjogVGhlIG5ldyBkZXZpY2Ugb3IgcmFpc2VzIGEg
Q2FsbGVkUHJvY2Vzc0Vycm9yIGlmIGBgc2ltY3RsIGNyZWF0ZWBgIGZhaWxlZC4KLSAgICAgICAg
OnJ0eXBlOiBEZXZpY2UKLSAgICAgICAgIiIiCi0gICAgICAgIGRldmljZV91ZGlkID0gc3VicHJv
Y2Vzcy5jaGVja19vdXRwdXQoWyd4Y3J1bicsICdzaW1jdGwnLCAnY3JlYXRlJywgbmFtZSwgZGV2
aWNlX3R5cGUuaWRlbnRpZmllciwgcnVudGltZS5pZGVudGlmaWVyXSkucnN0cmlwKCkKLSAgICAg
ICAgX2xvZy5kZWJ1ZygnInhjcnVuIHNpbWN0bCBjcmVhdGUgJXMgJXMgJXMiIHJldHVybmVkICVz
JywgbmFtZSwgZGV2aWNlX3R5cGUuaWRlbnRpZmllciwgcnVudGltZS5pZGVudGlmaWVyLCBkZXZp
Y2VfdWRpZCkKLSAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0YXRl
KGRldmljZV91ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hVVERPV04pCi0gICAgICAgIHJl
dHVybiBTaW11bGF0b3IoKS5maW5kX2RldmljZV9ieV91ZGlkKGRldmljZV91ZGlkKQotCi0gICAg
QGNsYXNzbWV0aG9kCi0gICAgZGVmIHNodXRkb3duKGNscywgdWRpZCk6Ci0gICAgICAgICIiIgot
ICAgICAgICBTaHV0IGRvd24gdGhlIGdpdmVuIENvcmVTaW11bGF0b3IgZGV2aWNlLgotICAgICAg
ICA6cGFyYW0gdWRpZDogVGhlIHVkaWQgb2YgdGhlIGRldmljZS4KLSAgICAgICAgOnR5cGUgdWRp
ZDogc3RyCi0gICAgICAgICIiIgotICAgICAgICBkZXZpY2Vfc3RhdGUgPSBTaW11bGF0b3IuZGV2
aWNlX3N0YXRlKHVkaWQpCi0gICAgICAgIGlmIGRldmljZV9zdGF0ZSA9PSBTaW11bGF0b3IuRGV2
aWNlU3RhdGUuQk9PVElORyBvciBkZXZpY2Vfc3RhdGUgPT0gU2ltdWxhdG9yLkRldmljZVN0YXRl
LkJPT1RFRDoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ3hjcnVuIHNpbWN0bCBzaHV0ZG93biAl
cycsIHVkaWQpCi0gICAgICAgICAgICAjIERvbid0IHRocm93IG9uIGVycm9yLiBEZXZpY2Ugc2h1
dGRvd24gc2VlbXMgdG8gYmUgcmFjeSB3aXRoIFNpbXVsYXRvciBhcHAga2lsbGluZy4KLSAgICAg
ICAgICAgIHN1YnByb2Nlc3MuY2FsbChbJ3hjcnVuJywgJ3NpbWN0bCcsICdzaHV0ZG93bicsIHVk
aWRdKQotCi0gICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZSh1
ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hVVERPV04pCi0KLSAgICBAY2xhc3NtZXRob2QK
LSAgICBkZWYgZGVsZXRlKGNscywgdWRpZCk6Ci0gICAgICAgICIiIgotICAgICAgICBEZWxldGUg
dGhlIGdpdmVuIENvcmVTaW11bGF0b3IgZGV2aWNlLgotICAgICAgICA6cGFyYW0gdWRpZDogVGhl
IHVkaWQgb2YgdGhlIGRldmljZS4KLSAgICAgICAgOnR5cGUgdWRpZDogc3RyCi0gICAgICAgICIi
IgotICAgICAgICBEZXZpY2Uuc2h1dGRvd24odWRpZCkKLSAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygneGNydW4gc2ltY3RsIGRlbGV0ZSAlcycsIHVkaWQpCi0gICAgICAgICAg
ICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWyd4Y3J1bicsICdzaW1jdGwnLCAnZGVsZXRlJywgdWRp
ZF0pCi0gICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKLSAgICAg
ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignInhjcnVuIHNpbWN0bCBkZWxldGUiIGZhaWxlZDog
ZGV2aWNlIHN0YXRlIGlzIHt9Jy5mb3JtYXQoU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1ZGlkKSkp
Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcmVzZXQoY2xzLCB1ZGlkKToKLSAgICAgICAg
IiIiCi0gICAgICAgIFJlc2V0IHRoZSBnaXZlbiBDb3JlU2ltdWxhdG9yIGRldmljZS4KLSAgICAg
ICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2UuCi0gICAgICAgIDp0eXBlIHVk
aWQ6IHN0cgotICAgICAgICAiIiIKLSAgICAgICAgRGV2aWNlLnNodXRkb3duKHVkaWQpCi0gICAg
ICAgIHRyeToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ3hjcnVuIHNpbWN0bCBlcmFzZSAlcycs
IHVkaWQpCi0gICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWyd4Y3J1bicsICdzaW1j
dGwnLCAnZXJhc2UnLCB1ZGlkXSkKLSAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJv
Y2Vzc0Vycm9yOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCcieGNydW4gc2ltY3Rs
IGVyYXNlIiBmYWlsZWQ6IGRldmljZSBzdGF0ZSBpcyB7fScuZm9ybWF0KFNpbXVsYXRvci5kZXZp
Y2Vfc3RhdGUodWRpZCkpKQotCi0gICAgZGVmIGluc3RhbGxfYXBwKHNlbGYsIGFwcF9wYXRoLCBl
bnY9Tm9uZSk6Ci0gICAgICAgICMgRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciA8cmRh
cjovL3Byb2JsZW0vMzAyNzM5NzM+LCBSYWNleSBmYWlsdXJlIG9mIHNpbWN0bCBpbnN0YWxsLgot
ICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoMyk6Ci0gICAgICAgICAgICBpZiBzZWxmLl9ob3N0LmV4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICdpbnN0YWxsJywgc2VsZi51
ZGlkLCBhcHBfcGF0aF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSk6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYnVuZGxlX2lk
ID0gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoWwotICAgICAgICAgICAgICAgICAg
ICAnL3Vzci9saWJleGVjL1BsaXN0QnVkZHknLAotICAgICAgICAgICAgICAgICAgICAnLWMnLAot
ICAgICAgICAgICAgICAgICAgICAnUHJpbnQgQ0ZCdW5kbGVJZGVudGlmaWVyJywKLSAgICAgICAg
ICAgICAgICAgICAgc2VsZi5faG9zdC5maWxlc3lzdGVtLmpvaW4oYXBwX3BhdGgsICdJbmZvLnBs
aXN0JyksCi0gICAgICAgICAgICAgICAgXSkucnN0cmlwKCkKLSAgICAgICAgICAgICAgICBzZWxm
Ll9ob3N0LmV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5sYXVuY2hfYXBwKGJ1bmRsZV9pZCwg
W10sIGVudj1lbnYsIGF0dGVtcHRzPTEpKQotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0g
ICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAg
ICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgbGF1bmNoX2FwcChzZWxmLCBidW5kbGVfaWQs
IGFyZ3MsIGVudj1Ob25lLCBhdHRlbXB0cz0zKToKLSAgICAgICAgZW52aXJvbm1lbnRfdG9fdXNl
ID0ge30KLSAgICAgICAgU0lNQ1RMX0VOVl9QUkVGSVggPSAnU0lNQ1RMX0NISUxEXycKLSAgICAg
ICAgZm9yIHZhbHVlIGluIChlbnYgb3Ige30pOgotICAgICAgICAgICAgaWYgbm90IHZhbHVlLnN0
YXJ0c3dpdGgoU0lNQ1RMX0VOVl9QUkVGSVgpOgotICAgICAgICAgICAgICAgIGVudmlyb25tZW50
X3RvX3VzZVtTSU1DVExfRU5WX1BSRUZJWCArIHZhbHVlXSA9IGVudlt2YWx1ZV0KLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW52aXJvbm1lbnRfdG9fdXNlW3ZhbHVlXSA9IGVu
dlt2YWx1ZV0KLQotICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgPHJk
YXI6Ly9wcm9ibGVtLzMwMTcyNDUzPi4KLSAgICAgICAgZGVmIF9sb2dfZGVidWdfZXJyb3IoZXJy
b3IpOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZyhlcnJvci5tZXNzYWdlX3dpdGhfb3V0cHV0KCkp
Ci0KLSAgICAgICAgb3V0cHV0ID0gTm9uZQotICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoYXR0ZW1w
dHMpOgotICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1h
bmQoCi0gICAgICAgICAgICAgICAgWyd4Y3J1bicsICdzaW1jdGwnLCAnbGF1bmNoJywgc2VsZi51
ZGlkLCBidW5kbGVfaWRdICsgYXJncywKLSAgICAgICAgICAgICAgICBlbnY9ZW52aXJvbm1lbnRf
dG9fdXNlLAotICAgICAgICAgICAgICAgIGVycm9yX2hhbmRsZXI9X2xvZ19kZWJ1Z19lcnJvciwK
LSAgICAgICAgICAgICkKLSAgICAgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocicoP1A8YnVuZGxl
PlteOl0rKTogKD9QPHBpZD5cZCspXG4nLCBvdXRwdXQpCi0gICAgICAgICAgICBpZiBtYXRjaDoK
LSAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgIGlmIG5vdCBtYXRjaCBvciBtYXRjaC5n
cm91cCgnYnVuZGxlJykgIT0gYnVuZGxlX2lkOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVy
cm9yKCdGYWlsZWQgdG8gZmluZCBwcm9jZXNzIGlkIGZvciB7fToge30nLmZvcm1hdChidW5kbGVf
aWQsIG91dHB1dCkpCi0gICAgICAgIHJldHVybiBpbnQobWF0Y2guZ3JvdXAoJ3BpZCcpKQotCi0g
ICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBzZWxmLnVkaWQgPT0g
b3RoZXIudWRpZAotCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVy
biBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAg
ICAgIHJldHVybiAnPERldmljZSAie25hbWV9Ijoge3VkaWR9LiBTdGF0ZToge3N0YXRlfS4gUnVu
dGltZToge3J1bnRpbWV9LCBBdmFpbGFibGU6IHthdmFpbGFibGV9PicuZm9ybWF0KAotICAgICAg
ICAgICAgbmFtZT1zZWxmLm5hbWUsCi0gICAgICAgICAgICB1ZGlkPXNlbGYudWRpZCwKLSAgICAg
ICAgICAgIHN0YXRlPXNlbGYuc3RhdGUsCi0gICAgICAgICAgICBhdmFpbGFibGU9c2VsZi5hdmFp
bGFibGUsCi0gICAgICAgICAgICBydW50aW1lPXNlbGYucnVudGltZS5pZGVudGlmaWVyKQotCi0K
ICMgRklYTUU6IFRoaXMgY2xhc3MgaXMgZnJhZ2lsZSBiZWNhdXNlIGl0IHBhcnNlcyB0aGUgb3V0
cHV0IG9mIHRoZSBzaW1jdGwgY29tbWFuZCBsaW5lIHV0aWxpdHksIHdoaWNoIG1heSBjaGFuZ2Uu
CiAjICAgICAgICBXZSBzaG91bGQgZmluZCBhIGJldHRlciB3YXkgdG8gcXVlcnkgZm9yIHNpbXVs
YXRvciBkZXZpY2Ugc3RhdGUgYW5kIGNhcGFiaWxpdGllcy4gTWF5YmUgdGFrZSBhIHNpbWlsaWFy
CiAjICAgICAgICBhcHByb2FjaCBhcyBpbiB3ZWJraXRkaXJzLnBtIGFuZCB1dGlsaXplIHRoZSBw
YXJzZWQgb3V0cHV0IGZyb20gdGhlIGRldmljZS5wbGlzdCBmaWxlcyBpbiB0aGUgc3ViLQpAQCAt
MzQ0LDggKzE4MiwxNCBAQCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToKICAgICAgICAgJ1xzKig/
UDxuYW1lPlteKF0rIClcKCg/UDx1ZGlkPlteKV0rKVwpIFwoKD9QPHN0YXRlPlteKV0rKVwpKCBc
KCg/UDxhdmFpbGFiaWxpdHk+W14pXSspXCkpPycpCiAKICAgICBfbWFuYWdlZF9kZXZpY2VzID0g
e30KKyAgICBEZXZpY2UgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdD1Ob25l
KToKKyAgICAgICAgIyBGSVhNRTogVGhpcyBjaXJjdWxhciBpbXBvcnQgc2hvdWxkIGJlIHJlc29s
dmVkLgorICAgICAgICBpZiBub3QgU2ltdWxhdG9yLkRldmljZToKKyAgICAgICAgICAgIGZyb20g
d2Via2l0cHkueGNvZGUuc2ltdWxhdGVkX2RldmljZSBpbXBvcnQgU2ltdWxhdGVkRGV2aWNlCisg
ICAgICAgICAgICBTaW11bGF0b3IuRGV2aWNlID0gU2ltdWxhdGVkRGV2aWNlCisKICAgICAgICAg
c2VsZi5faG9zdCA9IGhvc3Qgb3IgSG9zdCgpCiAgICAgICAgIHNlbGYucnVudGltZXMgPSBbXQog
ICAgICAgICBzZWxmLmRldmljZV90eXBlcyA9IFtdCkBAIC00MzgsMTEgKzI4MiwxMSBAQCBjbGFz
cyBTaW11bGF0b3Iob2JqZWN0KToKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgZGVsZXRl
X2RldmljZSh1ZGlkKToKLSAgICAgICAgRGV2aWNlLmRlbGV0ZSh1ZGlkKQorICAgICAgICBTaW11
bGF0b3IuRGV2aWNlLmRlbGV0ZSh1ZGlkKQogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBy
ZXNldF9kZXZpY2UodWRpZCk6Ci0gICAgICAgIERldmljZS5yZXNldCh1ZGlkKQorICAgICAgICBT
aW11bGF0b3IuRGV2aWNlLnJlc2V0KHVkaWQpCiAKICAgICBkZWYgcmVmcmVzaChzZWxmKToKICAg
ICAgICAgIiIiCkBAIC01MjMsNyArMzY3LDcgQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CiAg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXhwZWN0ZWQgPT0gRGV2aWNl
IFBhaXJzID09IGhlYWRlciBidXQgZ290OiAie30iJy5mb3JtYXQobGluZSkpCiAgICAgICAgICAg
ICAgICAgYnJlYWsKICAgICAgICAgICAgIGlmIGN1cnJlbnRfcnVudGltZToKLSAgICAgICAgICAg
ICAgICBkZXZpY2UgPSBEZXZpY2UobmFtZT1kZXZpY2VfbWF0Y2guZ3JvdXAoJ25hbWUnKS5yc3Ry
aXAoKSwKKyAgICAgICAgICAgICAgICBkZXZpY2UgPSBTaW11bGF0b3IuRGV2aWNlKG5hbWU9ZGV2
aWNlX21hdGNoLmdyb3VwKCduYW1lJykucnN0cmlwKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVkaWQ9ZGV2aWNlX21hdGNoLmdyb3VwKCd1ZGlkJyksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZT1kZXZpY2VfbWF0Y2guZ3JvdXAoJ2F2YWlsYWJp
bGl0eScpIGlzIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWU9
Y3VycmVudF9ydW50aW1lLApAQCAtNjU5LDcgKzUwMyw3IEBAIGNsYXNzIFNpbXVsYXRvcihvYmpl
Y3QpOgogICAgICAgICBpZiB0ZXN0aW5nX2RldmljZToKICAgICAgICAgICAgIF9sb2cuZGVidWco
J2xvb2t1cF9vcl9jcmVhdGVfZGV2aWNlICVzICVzICVzIGZvdW5kICVzJywgbmFtZSwgZGV2aWNl
X3R5cGUsIHJ1bnRpbWUsIHRlc3RpbmdfZGV2aWNlLm5hbWUpCiAgICAgICAgICAgICByZXR1cm4g
dGVzdGluZ19kZXZpY2UKLSAgICAgICAgdGVzdGluZ19kZXZpY2UgPSBEZXZpY2UuY3JlYXRlKG5h
bWUsIGRldmljZV90eXBlLCBydW50aW1lKQorICAgICAgICB0ZXN0aW5nX2RldmljZSA9IFNpbXVs
YXRvci5EZXZpY2UuY3JlYXRlKG5hbWUsIGRldmljZV90eXBlLCBydW50aW1lKQogICAgICAgICBf
bG9nLmRlYnVnKCdsb29rdXBfb3JfY3JlYXRlX2RldmljZSAlcyAlcyAlcyBjcmVhdGVkICVzJywg
bmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUsIHRlc3RpbmdfZGV2aWNlLm5hbWUpCiAgICAgICAg
IGFzc2VydCh0ZXN0aW5nX2RldmljZS5hdmFpbGFibGUpCiAgICAgICAgIHJldHVybiB0ZXN0aW5n
X2RldmljZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302290</attachid>
            <date>2017-02-21 11:34:22 -0800</date>
            <delta_ts>2017-02-21 13:05:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168332-20170221113141.patch</filename>
            <type>text/plain</type>
            <size>65336</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMjcyOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQyIEBACisyMDE3LTAyLTIxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUmVmYWN0b3IgRGV2aWNlIGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjgzMzIKKworICAgICAgICBS
ZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgorCisgICAgICAgIFNlcGFyYXRlIHRoZSBt
b3JlIHNwZWNpZmljIFNpbXVsYXRlZERldmljZSBmcm9tIHRoZSBhYnN0cmFjdAorICAgICAgICBp
ZGVhIG9mIGEgZGV2aWNlLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9kZXZp
Y2UucHk6IEFkZGVkLgorICAgICAgICAoRGV2aWNlKTogIEJhc2UgZGV2aWNlIGNsYXNzLgorICAg
ICAgICAoRGV2aWNlLl9faW5pdF9fKTogSW5pdGlhbGl6ZSBfaG9zdCwgbmFtZSBhbmQgdWRpZC4K
KyAgICAgICAgKERldmljZS5pbnN0YWxsX2FwcCk6IEZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorICAg
ICAgICAoRGV2aWNlLmxhdW5jaF9hcHApOiBEaXR0by4KKyAgICAgICAgKERldmljZS5fX2VxX18p
OiBDb21wYXJlIHR3byBkZXZpY2VzIGJ5IHVkaWQuCisgICAgICAgIChEZXZpY2UuX19uZV9fKTog
RGl0dG8uCisgICAgICAgIChEZXZpY2UuX19yZXByX18pOiBSZXR1cm4gZGV2aWNlIG5hbWUgYW5k
IHVkaWQgaW4gZm9ybWF0dGVkIHN0cmluZy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3hj
b2RlL3NpbXVsYXRlZF9kZXZpY2UucHk6IENvcGllZCBmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkveGNvZGUvc2ltdWxhdG9yLnB5LgorICAgICAgICAoU2ltdWxhdGVkRGV2aWNlKToKKyAgICAg
ICAgKFNpbXVsYXRlZERldmljZS5fX2luaXRfXyk6IENhbGwgRGV2aWNlLl9faW5pdF9fIGZpcnN0
LgorICAgICAgICAoU2ltdWxhdGVkRGV2aWNlLmRlbGV0ZSk6IERldmljZSAtPiBTaW11bGF0ZWRE
ZXZpY2UuCisgICAgICAgIChTaW11bGF0ZWREZXZpY2UucmVzZXQpOiBEaXR0by4KKyAgICAgICAg
KFNpbXVsYXRlZERldmljZS5fX2VxX18pOiBNb3ZlZCB0byBkZXZpY2UucHkuCisgICAgICAgIChT
aW11bGF0ZWREZXZpY2UuX19uZV9fKTogRGl0dG8uCisgICAgICAgIChTaW11bGF0ZWREZXZpY2Uu
X19yZXByX18pOiBDYWxsIERldmljZSBfX3JlcHJfXyBmaXJzdC4KKyAgICAgICAgKERldmljZVR5
cGUpOiBLZXB0IGluIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5LgorICAgICAg
ICAoUnVudGltZSk6IEtlcHQgaW4gU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHku
CisgICAgICAgIChEZXZpY2UpOiBSZW5hbWVkIFNpbXVsYXRlZERldmljZS4KKyAgICAgICAgKFNp
bXVsYXRvcik6IEtlcHQgaW4gU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6CisgICAgICAgIChT
aW11bGF0b3IpOiBEZWZpbmUgU2ltdWxhdG9yLkRldmljZSBjbGFzcyBhcyBOb25lLgorICAgICAg
ICAoU2ltdWxhdG9yLl9faW5pdF9fKTogSW1wb3J0IFNpbXVsYXRlZERldmljZSBhcyBTaW11bGF0
b3IuRGV2aWNlLgorICAgICAgICAoU2ltdWxhdG9yLmRlbGV0ZV9kZXZpY2UpOiBVc2UgU2ltdWxh
dG9yLkRldmljZS4KKyAgICAgICAgKFNpbXVsYXRvci5yZXNldF9kZXZpY2UpOiBEaXR0by4KKyAg
ICAgICAgKFNpbXVsYXRvci5fcGFyc2VfZGV2aWNlcyk6IERpdHRvLgorICAgICAgICAoU2ltdWxh
dG9yLmxvb2t1cF9vcl9jcmVhdGVfZGV2aWNlKTogTWFrZSAKKyAgICAgICAgKERldmljZSk6IE1v
dmVkIHRvIHNpbXVsYXRlZF9kZXZpY2UgYXMgU2ltdWxhdGVkRGV2aWNlLgorCiAyMDE3LTAyLTIx
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUg
Ym90IHdhdGNoZXIncyBkYXNoYm9hcmQgcGVyZm9ybWFuY2UKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkveGNvZGUvZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkveGNvZGUvZGV2aWNlLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkveGNvZGUvZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitjbGFzcyBEZXZpY2Uob2Jq
ZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdWRpZCwgaG9zdCk6CisgICAgICAg
IHNlbGYuX2hvc3QgPSBob3N0CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2Vs
Zi51ZGlkID0gdWRpZAorCisgICAgZGVmIGluc3RhbGxfYXBwKHNlbGYsIGFwcF9wYXRoLCBlbnY9
Tm9uZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBsYXVu
Y2hfYXBwKHNlbGYsIGJ1bmRsZV9pZCwgYXJncywgZW52PU5vbmUpOgorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYudWRpZCA9PSBvdGhlci51ZGlkCisKKyAgICBkZWYgX19uZV9fKHNlbGYs
IG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKKworICAgIGRl
ZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICdEZXZpY2UgIntuYW1lfSI6IHt1ZGlk
fS4nLmZvcm1hdCgKKyAgICAgICAgICAgIG5hbWU9c2VsZi5uYW1lLAorICAgICAgICAgICAgdWRp
ZD1zZWxmLnVkaWQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRl
ZF9kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9z
aW11bGF0ZWRfZGV2aWNlLnB5CShyZXZpc2lvbiAyMTI3MjkpCShmcm9tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5OjIxMjcyOSkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkveGNvZGUvc2ltdWxhdGVkX2RldmljZS5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY3NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcGxpc3Rs
aWIKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Vi
a2l0cHkuYmVuY2htYXJrX3J1bm5lci51dGlscyBpbXBvcnQgdGltZW91dAorZnJvbSB3ZWJraXRw
eS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCisKKyIiIgorTWluaW1hbGx5IHdyYXBzIENvcmVTaW11bGF0b3IgZnVuY3Rpb25hbGl0
eSB0aHJvdWdoIHNpbWN0bC4KKworSWYgcG9zc2libGUsIHVzZSByZWFsIENvcmVTaW11bGF0b3Iu
ZnJhbWV3b3JrIGZ1bmN0aW9uYWxpdHkgYnkgbGlua2luZyB0byB0aGUgZnJhbWV3b3JrIGl0c2Vs
Zi4KK0RvIG5vdCB1c2UgUHlPYmpDIHRvIGRsb3BlbiB0aGUgZnJhbWV3b3JrLgorIiIiCisKKwor
Y2xhc3MgRGV2aWNlVHlwZShvYmplY3QpOgorICAgICIiIgorICAgIFJlcHJlc2VudHMgYSBDb3Jl
U2ltdWxhdG9yIGRldmljZSB0eXBlLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu
YW1lLCBpZGVudGlmaWVyKToKKyAgICAgICAgIiIiCisgICAgICAgIDpwYXJhbSBuYW1lOiBUaGUg
ZGV2aWNlIHR5cGUncyBodW1hbi1yZWFkYWJsZSBuYW1lCisgICAgICAgIDp0eXBlIG5hbWU6IHN0
cgorICAgICAgICA6cGFyYW0gaWRlbnRpZmllcjogVGhlIENvcmVTaW11bGF0b3IgaWRlbnRpZmll
ci4KKyAgICAgICAgOnR5cGUgaWRlbnRpZmllcjogc3RyCisgICAgICAgICIiIgorICAgICAgICBz
ZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuaWRlbnRpZmllciA9IGlkZW50aWZpZXIKKwor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX25hbWUoY2xzLCBuYW1lKToKKyAgICAgICAg
IiIiCisgICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBmb3IgdGhlIGRlc2lyZWQgZGV2aWNl
IHR5cGUuCisgICAgICAgIDp0eXBlIG5hbWU6IHN0cgorICAgICAgICA6cmV0dXJuczogQSBgRGV2
aWNlVHlwZWAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIG9yIHRocm93cyBh
IFR5cGVFcnJvciBpZiBpdCBkb2Vzbid0IGV4aXN0LgorICAgICAgICA6cnR5cGU6IERldmljZVR5
cGUKKyAgICAgICAgIiIiCisgICAgICAgIGlkZW50aWZpZXIgPSBOb25lCisgICAgICAgIGZvciBk
ZXZpY2VfdHlwZSBpbiBTaW11bGF0b3IoKS5kZXZpY2VfdHlwZXM6CisgICAgICAgICAgICBpZiBk
ZXZpY2VfdHlwZS5uYW1lID09IG5hbWU6CisgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGRl
dmljZV90eXBlLmlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlm
IGlkZW50aWZpZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQSBkZXZp
Y2UgdHlwZSB3aXRoIG5hbWUgIntuYW1lfSIgZG9lcyBub3QgZXhpc3QuJy5mb3JtYXQobmFtZT1u
YW1lKSkKKworICAgICAgICByZXR1cm4gRGV2aWNlVHlwZShuYW1lLCBpZGVudGlmaWVyKQorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21faWRlbnRpZmllcihjbHMsIGlkZW50aWZpZXIp
OgorICAgICAgICAiIiIKKyAgICAgICAgOnBhcmFtIGlkZW50aWZpZXI6IFRoZSBDb3JlU2ltdWxh
dG9yIGlkZW50aWZpZXIgZm9yIHRoZSBkZXNpcmVkIHJ1bnRpbWUuCisgICAgICAgIDp0eXBlIGlk
ZW50aWZpZXI6IHN0cgorICAgICAgICA6cmV0dXJuczogQSBgUnVudGltZWAgb2JqZWN0IHdpdGh0
IHRoZSBzcGVjaWZpZWQgaWRlbnRpZmllciBvciB0aHJvd3MgYSBUeXBlRXJyb3IgaWYgaXQgZG9l
c24ndCBleGlzdC4KKyAgICAgICAgOnJ0eXBlOiBEZXZpY2VUeXBlCisgICAgICAgICIiIgorICAg
ICAgICBuYW1lID0gTm9uZQorICAgICAgICBmb3IgZGV2aWNlX3R5cGUgaW4gU2ltdWxhdG9yKCku
ZGV2aWNlX3R5cGVzOgorICAgICAgICAgICAgaWYgZGV2aWNlX3R5cGUuaWRlbnRpZmllciA9PSBp
ZGVudGlmaWVyOgorICAgICAgICAgICAgICAgIG5hbWUgPSBkZXZpY2VfdHlwZS5uYW1lCisgICAg
ICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgICAg
ICByYWlzZSBUeXBlRXJyb3IoJ0EgZGV2aWNlIHR5cGUgd2l0aCBpZGVudGlmaWVyICJ7aWRlbnRp
Zmllcn0iIGRvZXMgbm90IGV4aXN0LicuZm9ybWF0KAorICAgICAgICAgICAgICAgIGlkZW50aWZp
ZXI9aWRlbnRpZmllcikpCisKKyAgICAgICAgcmV0dXJuIERldmljZVR5cGUobmFtZSwgaWRlbnRp
ZmllcikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNl
bGYubmFtZSA9PSBvdGhlci5uYW1lKSBhbmQgKHNlbGYuaWRlbnRpZmllciA9PSBvdGhlci5pZGVu
dGlmaWVyKQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBu
b3Qgc2VsZi5fX2VxX18ob3RoZXIpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAg
IHJldHVybiAnPERldmljZVR5cGUgIntuYW1lfSI6IHtpZGVudGlmaWVyfT4nLmZvcm1hdChuYW1l
PXNlbGYubmFtZSwgaWRlbnRpZmllcj1zZWxmLmlkZW50aWZpZXIpCisKKworY2xhc3MgUnVudGlt
ZShvYmplY3QpOgorICAgICIiIgorICAgIFJlcHJlc2VudHMgYSBDb3JlU2ltdWxhdG9yIHJ1bnRp
bWUgYXNzb2NpYXRlZCB3aXRoIGFuIGlPUyBTREsuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgdmVyc2lvbiwgaWRlbnRpZmllciwgYXZhaWxhYmxlLCBkZXZpY2VzPU5vbmUsIGlz
X2ludGVybmFsX3J1bnRpbWU9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgOnBhcmFtIHZl
cnNpb246IFRoZSBpT1MgU0RLIHZlcnNpb24KKyAgICAgICAgOnR5cGUgdmVyc2lvbjogdHVwbGUK
KyAgICAgICAgOnBhcmFtIGlkZW50aWZpZXI6IFRoZSBDb3JlU2ltdWxhdG9yIHJ1bnRpbWUgaWRl
bnRpZmllcgorICAgICAgICA6dHlwZSBpZGVudGlmaWVyOiBzdHIKKyAgICAgICAgOnBhcmFtIGF2
YWlsYWJpbGl0eTogV2hldGhlciB0aGUgcnVudGltZSBpcyBhdmFpbGFibGUgZm9yIHVzZS4KKyAg
ICAgICAgOnR5cGUgYXZhaWxhYmlsaXR5OiBib29sCisgICAgICAgIDpwYXJhbSBkZXZpY2VzOiBB
IGxpc3Qgb2YgZGV2aWNlcyB1bmRlciB0aGlzIHJ1bnRpbWUKKyAgICAgICAgOnR5cGUgZGV2aWNl
czogbGlzdCBvciBOb25lCisgICAgICAgIDpwYXJhbSBpc19pbnRlcm5hbF9ydW50aW1lOiBXaGV0
aGVyIHRoZSBydW50aW1lIGlzIGFuIEFwcGxlIGludGVybmFsIHJ1bnRpbWUKKyAgICAgICAgOnR5
cGUgaXNfaW50ZXJuYWxfcnVudGltZTogYm9vbAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi52
ZXJzaW9uID0gdmVyc2lvbgorICAgICAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyCisg
ICAgICAgIHNlbGYuYXZhaWxhYmxlID0gYXZhaWxhYmxlCisgICAgICAgIHNlbGYuZGV2aWNlcyA9
IGRldmljZXMgb3IgW10KKyAgICAgICAgc2VsZi5pc19pbnRlcm5hbF9ydW50aW1lID0gaXNfaW50
ZXJuYWxfcnVudGltZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fdmVyc2lvbl9z
dHJpbmcoY2xzLCB2ZXJzaW9uKToKKyAgICAgICAgcmV0dXJuIGNscy5mcm9tX2lkZW50aWZpZXIo
J2NvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLScgKyB2ZXJzaW9uLnJlcGxh
Y2UoJy4nLCAnLScpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21faWRlbnRpZmll
cihjbHMsIGlkZW50aWZpZXIpOgorICAgICAgICAiIiIKKyAgICAgICAgOnBhcmFtIGlkZW50aWZp
ZXI6IFRoZSBpZGVudGlmaWVyIGZvciB0aGUgZGVzaXJlZCBDb3JlU2ltdWxhdG9yIHJ1bnRpbWUu
CisgICAgICAgIDp0eXBlIGlkZW50aWZpZXI6IHN0cgorICAgICAgICA6cmV0dXJuczogQSBgUnVu
dGltZWAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIG9yIHRocm93cyBhIFR5
cGVFcnJvciBpZiBpdCBkb2Vzbid0IGV4aXN0LgorICAgICAgICA6cnR5cGU6IFJ1bnRpbWUKKyAg
ICAgICAgIiIiCisgICAgICAgIGZvciBydW50aW1lIGluIFNpbXVsYXRvcigpLnJ1bnRpbWVzOgor
ICAgICAgICAgICAgaWYgcnVudGltZS5pZGVudGlmaWVyID09IGlkZW50aWZpZXI6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJ1bnRpbWUKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdBIHJ1bnRp
bWUgd2l0aCBpZGVudGlmaWVyICJ7aWRlbnRpZmllcn0iIGRvZXMgbm90IGV4aXN0LicuZm9ybWF0
KGlkZW50aWZpZXI9aWRlbnRpZmllcikpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToK
KyAgICAgICAgcmV0dXJuIChzZWxmLnZlcnNpb24gPT0gb3RoZXIudmVyc2lvbikgYW5kIChzZWxm
LmlkZW50aWZpZXIgPT0gb3RoZXIuaWRlbnRpZmllcikgYW5kIChzZWxmLmlzX2ludGVybmFsX3J1
bnRpbWUgPT0gb3RoZXIuaXNfaW50ZXJuYWxfcnVudGltZSkKKworICAgIGRlZiBfX25lX18oc2Vs
Ziwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX19lcV9fKG90aGVyKQorCisgICAg
ZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICB2ZXJzaW9uX3N1ZmZpeCA9ICIiCisgICAgICAg
IGlmIHNlbGYuaXNfaW50ZXJuYWxfcnVudGltZToKKyAgICAgICAgICAgIHZlcnNpb25fc3VmZml4
ID0gIiBJbnRlcm5hbCIKKyAgICAgICAgcmV0dXJuICc8UnVudGltZSB7dmVyc2lvbn06IHtpZGVu
dGlmaWVyfS4gQXZhaWxhYmxlOiB7YXZhaWxhYmxlfSwge251bV9kZXZpY2VzfSBkZXZpY2VzPicu
Zm9ybWF0KAorICAgICAgICAgICAgdmVyc2lvbj0nLicuam9pbihtYXAoc3RyLCBzZWxmLnZlcnNp
b24pKSArIHZlcnNpb25fc3VmZml4LAorICAgICAgICAgICAgaWRlbnRpZmllcj1zZWxmLmlkZW50
aWZpZXIsCisgICAgICAgICAgICBhdmFpbGFibGU9c2VsZi5hdmFpbGFibGUsCisgICAgICAgICAg
ICBudW1fZGV2aWNlcz1sZW4oc2VsZi5kZXZpY2VzKSkKKworCitjbGFzcyBEZXZpY2Uob2JqZWN0
KToKKyAgICAiIiIKKyAgICBSZXByZXNlbnRzIGEgQ29yZVNpbXVsYXRvciBkZXZpY2UgdW5kZXJu
ZWF0aCBhIHJ1bnRpbWUKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1
ZGlkLCBhdmFpbGFibGUsIHJ1bnRpbWUsIGhvc3QpOgorICAgICAgICAiIiIKKyAgICAgICAgOnBh
cmFtIG5hbWU6IFRoZSBkZXZpY2UgbmFtZQorICAgICAgICA6dHlwZSBuYW1lOiBzdHIKKyAgICAg
ICAgOnBhcmFtIHVkaWQ6IFRoZSBkZXZpY2UgVURJRCAoYSBVVUlEIHN0cmluZykKKyAgICAgICAg
OnR5cGUgdWRpZDogc3RyCisgICAgICAgIDpwYXJhbSBhdmFpbGFibGU6IFdoZXRoZXIgdGhlIGRl
dmljZSBpcyBhdmFpbGFibGUgZm9yIHVzZS4KKyAgICAgICAgOnR5cGUgYXZhaWxhYmxlOiBib29s
CisgICAgICAgIDpwYXJhbSBydW50aW1lOiBUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHRoYXQg
aG9zdHMgdGhpcyBkZXZpY2UKKyAgICAgICAgOnR5cGUgcnVudGltZTogUnVudGltZQorICAgICAg
ICA6cGFyYW0gaG9zdDogVGhlIGhvc3Qgd2hpY2ggY2FuIHJ1biBjb21tYW5kIGxpbmUgY29tbWFu
ZHMKKyAgICAgICAgOnR5cGUgaG9zdDogSG9zdAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5f
aG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLnVkaWQg
PSB1ZGlkCisgICAgICAgIHNlbGYuYXZhaWxhYmxlID0gYXZhaWxhYmxlCisgICAgICAgIHNlbGYu
cnVudGltZSA9IHJ1bnRpbWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdGF0ZShzZWxmKToK
KyAgICAgICAgIiIiCisgICAgICAgIDpyZXR1cm5zOiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUg
ZGV2aWNlLgorICAgICAgICA6cnR5cGU6IFNpbXVsYXRvci5EZXZpY2VTdGF0ZQorICAgICAgICAi
IiIKKyAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUoc2VsZi51ZGlkKQorCisg
ICAgQHByb3BlcnR5CisgICAgZGVmIHBhdGgoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICA6
cmV0dXJuczogVGhlIGZpbGVzeXN0ZW0gcGF0aCB0aGF0IGNvbnRhaW5zIHRoZSBzaW11bGF0b3Ig
ZGV2aWNlJ3MgZGF0YS4KKyAgICAgICAgOnJ0eXBlOiBzdHIKKyAgICAgICAgIiIiCisgICAgICAg
IHJldHVybiBTaW11bGF0b3IuZGV2aWNlX2RpcmVjdG9yeShzZWxmLnVkaWQpCisKKyAgICBAY2xh
c3NtZXRob2QKKyAgICBkZWYgY3JlYXRlKGNscywgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUp
OgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgbmV3IENvcmVTaW11bGF0b3IgZGV2aWNl
LgorICAgICAgICA6cGFyYW0gbmFtZTogVGhlIG5hbWUgb2YgdGhlIGRldmljZS4KKyAgICAgICAg
OnR5cGUgbmFtZTogc3RyCisgICAgICAgIDpwYXJhbSBkZXZpY2VfdHlwZTogVGhlIENvcmVTaW11
bGF0b3J0IGRldmljZSB0eXBlLgorICAgICAgICA6dHlwZSBkZXZpY2VfdHlwZTogRGV2aWNlVHlw
ZQorICAgICAgICA6cGFyYW0gcnVudGltZTogIFRoZSBDb3JlU2ltdWFsdG9yIHJ1bnRpbWUuCisg
ICAgICAgIDp0eXBlIHJ1bnRpbWU6IFJ1bnRpbWUKKyAgICAgICAgOnJldHVybjogVGhlIG5ldyBk
ZXZpY2Ugb3IgcmFpc2VzIGEgQ2FsbGVkUHJvY2Vzc0Vycm9yIGlmIGBgc2ltY3RsIGNyZWF0ZWBg
IGZhaWxlZC4KKyAgICAgICAgOnJ0eXBlOiBEZXZpY2UKKyAgICAgICAgIiIiCisgICAgICAgIGRl
dmljZV91ZGlkID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd4Y3J1bicsICdzaW1jdGwnLCAn
Y3JlYXRlJywgbmFtZSwgZGV2aWNlX3R5cGUuaWRlbnRpZmllciwgcnVudGltZS5pZGVudGlmaWVy
XSkucnN0cmlwKCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnInhjcnVuIHNpbWN0bCBjcmVhdGUgJXMg
JXMgJXMiIHJldHVybmVkICVzJywgbmFtZSwgZGV2aWNlX3R5cGUuaWRlbnRpZmllciwgcnVudGlt
ZS5pZGVudGlmaWVyLCBkZXZpY2VfdWRpZCkKKyAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxf
ZGV2aWNlX2lzX2luX3N0YXRlKGRldmljZV91ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hV
VERPV04pCisgICAgICAgIHJldHVybiBTaW11bGF0b3IoKS5maW5kX2RldmljZV9ieV91ZGlkKGRl
dmljZV91ZGlkKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNodXRkb3duKGNscywgdWRp
ZCk6CisgICAgICAgICIiIgorICAgICAgICBTaHV0IGRvd24gdGhlIGdpdmVuIENvcmVTaW11bGF0
b3IgZGV2aWNlLgorICAgICAgICA6cGFyYW0gdWRpZDogVGhlIHVkaWQgb2YgdGhlIGRldmljZS4K
KyAgICAgICAgOnR5cGUgdWRpZDogc3RyCisgICAgICAgICIiIgorICAgICAgICBkZXZpY2Vfc3Rh
dGUgPSBTaW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpCisgICAgICAgIGlmIGRldmljZV9zdGF0
ZSA9PSBTaW11bGF0b3IuRGV2aWNlU3RhdGUuQk9PVElORyBvciBkZXZpY2Vfc3RhdGUgPT0gU2lt
dWxhdG9yLkRldmljZVN0YXRlLkJPT1RFRDoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ3hjcnVu
IHNpbWN0bCBzaHV0ZG93biAlcycsIHVkaWQpCisgICAgICAgICAgICAjIERvbid0IHRocm93IG9u
IGVycm9yLiBEZXZpY2Ugc2h1dGRvd24gc2VlbXMgdG8gYmUgcmFjeSB3aXRoIFNpbXVsYXRvciBh
cHAga2lsbGluZy4KKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbJ3hjcnVuJywgJ3NpbWN0
bCcsICdzaHV0ZG93bicsIHVkaWRdKQorCisgICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2Rl
dmljZV9pc19pbl9zdGF0ZSh1ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hVVERPV04pCisK
KyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGVsZXRlKGNscywgdWRpZCk6CisgICAgICAgICIi
IgorICAgICAgICBEZWxldGUgdGhlIGdpdmVuIENvcmVTaW11bGF0b3IgZGV2aWNlLgorICAgICAg
ICA6cGFyYW0gdWRpZDogVGhlIHVkaWQgb2YgdGhlIGRldmljZS4KKyAgICAgICAgOnR5cGUgdWRp
ZDogc3RyCisgICAgICAgICIiIgorICAgICAgICBEZXZpY2Uuc2h1dGRvd24odWRpZCkKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygneGNydW4gc2ltY3RsIGRlbGV0ZSAlcycs
IHVkaWQpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWyd4Y3J1bicsICdzaW1j
dGwnLCAnZGVsZXRlJywgdWRpZF0pCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFBy
b2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignInhjcnVuIHNpbWN0
bCBkZWxldGUiIGZhaWxlZDogZGV2aWNlIHN0YXRlIGlzIHt9Jy5mb3JtYXQoU2ltdWxhdG9yLmRl
dmljZV9zdGF0ZSh1ZGlkKSkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcmVzZXQoY2xz
LCB1ZGlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlc2V0IHRoZSBnaXZlbiBDb3JlU2ltdWxh
dG9yIGRldmljZS4KKyAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2Uu
CisgICAgICAgIDp0eXBlIHVkaWQ6IHN0cgorICAgICAgICAiIiIKKyAgICAgICAgRGV2aWNlLnNo
dXRkb3duKHVkaWQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ3hjcnVu
IHNpbWN0bCBlcmFzZSAlcycsIHVkaWQpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2Nh
bGwoWyd4Y3J1bicsICdzaW1jdGwnLCAnZXJhc2UnLCB1ZGlkXSkKKyAgICAgICAgZXhjZXB0IHN1
YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVy
cm9yKCcieGNydW4gc2ltY3RsIGVyYXNlIiBmYWlsZWQ6IGRldmljZSBzdGF0ZSBpcyB7fScuZm9y
bWF0KFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUodWRpZCkpKQorCisgICAgZGVmIGluc3RhbGxfYXBw
KHNlbGYsIGFwcF9wYXRoLCBlbnY9Tm9uZSk6CisgICAgICAgICMgRklYTUU6IFRoaXMgaXMgYSB3
b3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vMzAyNzM5NzM+LCBSYWNleSBmYWlsdXJlIG9m
IHNpbWN0bCBpbnN0YWxsLgorICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoMyk6CisgICAgICAgICAg
ICBpZiBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcs
ICdpbnN0YWxsJywgc2VsZi51ZGlkLCBhcHBfcGF0aF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgYnVuZGxlX2lkID0gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoWwor
ICAgICAgICAgICAgICAgICAgICAnL3Vzci9saWJleGVjL1BsaXN0QnVkZHknLAorICAgICAgICAg
ICAgICAgICAgICAnLWMnLAorICAgICAgICAgICAgICAgICAgICAnUHJpbnQgQ0ZCdW5kbGVJZGVu
dGlmaWVyJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5faG9zdC5maWxlc3lzdGVtLmpvaW4o
YXBwX3BhdGgsICdJbmZvLnBsaXN0JyksCisgICAgICAgICAgICAgICAgXSkucnN0cmlwKCkKKyAg
ICAgICAgICAgICAgICBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5sYXVu
Y2hfYXBwKGJ1bmRsZV9pZCwgW10sIGVudj1lbnYsIGF0dGVtcHRzPTEpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAg
ICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbGF1bmNoX2Fw
cChzZWxmLCBidW5kbGVfaWQsIGFyZ3MsIGVudj1Ob25lLCBhdHRlbXB0cz0zKToKKyAgICAgICAg
ZW52aXJvbm1lbnRfdG9fdXNlID0ge30KKyAgICAgICAgU0lNQ1RMX0VOVl9QUkVGSVggPSAnU0lN
Q1RMX0NISUxEXycKKyAgICAgICAgZm9yIHZhbHVlIGluIChlbnYgb3Ige30pOgorICAgICAgICAg
ICAgaWYgbm90IHZhbHVlLnN0YXJ0c3dpdGgoU0lNQ1RMX0VOVl9QUkVGSVgpOgorICAgICAgICAg
ICAgICAgIGVudmlyb25tZW50X3RvX3VzZVtTSU1DVExfRU5WX1BSRUZJWCArIHZhbHVlXSA9IGVu
dlt2YWx1ZV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRf
dG9fdXNlW3ZhbHVlXSA9IGVudlt2YWx1ZV0KKworICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEg
d29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzMwMTcyNDUzPi4KKyAgICAgICAgZGVmIF9s
b2dfZGVidWdfZXJyb3IoZXJyb3IpOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZyhlcnJvci5tZXNz
YWdlX3dpdGhfb3V0cHV0KCkpCisKKyAgICAgICAgb3V0cHV0ID0gTm9uZQorICAgICAgICBmb3Ig
eCBpbiB4cmFuZ2UoYXR0ZW1wdHMpOgorICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5faG9zdC5l
eGVjdXRpdmUucnVuX2NvbW1hbmQoCisgICAgICAgICAgICAgICAgWyd4Y3J1bicsICdzaW1jdGwn
LCAnbGF1bmNoJywgc2VsZi51ZGlkLCBidW5kbGVfaWRdICsgYXJncywKKyAgICAgICAgICAgICAg
ICBlbnY9ZW52aXJvbm1lbnRfdG9fdXNlLAorICAgICAgICAgICAgICAgIGVycm9yX2hhbmRsZXI9
X2xvZ19kZWJ1Z19lcnJvciwKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIG1hdGNoID0gcmUu
bWF0Y2gocicoP1A8YnVuZGxlPlteOl0rKTogKD9QPHBpZD5cZCspXG4nLCBvdXRwdXQpCisgICAg
ICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5v
dCBtYXRjaCBvciBtYXRjaC5ncm91cCgnYnVuZGxlJykgIT0gYnVuZGxlX2lkOgorICAgICAgICAg
ICAgcmFpc2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8gZmluZCBwcm9jZXNzIGlkIGZvciB7fTog
e30nLmZvcm1hdChidW5kbGVfaWQsIG91dHB1dCkpCisgICAgICAgIHJldHVybiBpbnQobWF0Y2gu
Z3JvdXAoJ3BpZCcpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJl
dHVybiBzZWxmLnVkaWQgPT0gb3RoZXIudWRpZAorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhl
cik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCisKKyAgICBkZWYgX19y
ZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPERldmljZSAie25hbWV9Ijoge3VkaWR9LiBT
dGF0ZToge3N0YXRlfS4gUnVudGltZToge3J1bnRpbWV9LCBBdmFpbGFibGU6IHthdmFpbGFibGV9
PicuZm9ybWF0KAorICAgICAgICAgICAgbmFtZT1zZWxmLm5hbWUsCisgICAgICAgICAgICB1ZGlk
PXNlbGYudWRpZCwKKyAgICAgICAgICAgIHN0YXRlPXNlbGYuc3RhdGUsCisgICAgICAgICAgICBh
dmFpbGFibGU9c2VsZi5hdmFpbGFibGUsCisgICAgICAgICAgICBydW50aW1lPXNlbGYucnVudGlt
ZS5pZGVudGlmaWVyKQorCisKKyMgRklYTUU6IFRoaXMgY2xhc3MgaXMgZnJhZ2lsZSBiZWNhdXNl
IGl0IHBhcnNlcyB0aGUgb3V0cHV0IG9mIHRoZSBzaW1jdGwgY29tbWFuZCBsaW5lIHV0aWxpdHks
IHdoaWNoIG1heSBjaGFuZ2UuCisjICAgICAgICBXZSBzaG91bGQgZmluZCBhIGJldHRlciB3YXkg
dG8gcXVlcnkgZm9yIHNpbXVsYXRvciBkZXZpY2Ugc3RhdGUgYW5kIGNhcGFiaWxpdGllcy4gTWF5
YmUgdGFrZSBhIHNpbWlsaWFyCisjICAgICAgICBhcHByb2FjaCBhcyBpbiB3ZWJraXRkaXJzLnBt
IGFuZCB1dGlsaXplIHRoZSBwYXJzZWQgb3V0cHV0IGZyb20gdGhlIGRldmljZS5wbGlzdCBmaWxl
cyBpbiB0aGUgc3ViLQorIyAgICAgICAgZGlyZWN0b3JpZXMgb2Ygfi9MaWJyYXJ5L0RldmVsb3Bl
ci9Db3JlU2ltdWxhdG9yL0RldmljZXM/CisjICAgICAgICBBbHNvLCBzaW1jdGwgaGFzIHRoZSBv
cHRpb24gdG8gb3V0cHV0IGluIEpTT04gZm9ybWF0ICh4Y3J1biBzaW1jdGwgbGlzdCAtLWpzb24p
LgorY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CisgICAgIiIiCisgICAgUmVwcmVzZW50cyB0aGUg
aU9TIFNpbXVsYXRvciBpbmZyYXN0cnVjdHVyZSB1bmRlciB0aGUgY3VycmVudGx5IHNlbGVjdCBY
Y29kZS5hcHAgYnVuZGxlLgorICAgICIiIgorICAgIGRldmljZV90eXBlX3JlID0gcmUuY29tcGls
ZSgnKD9QPG5hbWU+W14oXSspXCgoP1A8aWRlbnRpZmllcj5bXildKylcKScpCisgICAgIyBGSVhN
RTogcnVudGltZV9yZSBwYXJzZXMgdGhlIHZlcnNpb24gZnJvbSB0aGUgcnVudGltZSBuYW1lLCBi
dXQgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBmdWxsIHZlcnNpb24gbnVtYmVyCisgICAgIyAo
aXQgY2FuIG9taXQgdGhlIHJldmlzaW9uKS4gV2Ugc2hvdWxkIGluc3RlYWQgcGFyc2UgdGhlIHZl
cnNpb24gZnJvbSB0aGUgbnVtYmVyIGNvbnRhaW5lZCBpbiBwYXJlbnRoZXNlcy4KKyAgICBydW50
aW1lX3JlID0gcmUuY29tcGlsZSgKKyAgICAgICAgJyhpfHdhdGNofHR2KU9TICg/UDx2ZXJzaW9u
PlxkK1wuXGQpKD9QPGludGVybmFsPiBJbnRlcm5hbCk/IFwoXGQrXC5cZCsoXC5cZCspPyAtICg/
UDxidWlsZF92ZXJzaW9uPlteKV0rKVwpIFwoKD9QPGlkZW50aWZpZXI+W14pXSspXCkoIFwoKD9Q
PGF2YWlsYWJpbGl0eT5bXildKylcKSk/JykKKyAgICB1bmF2YWlsYWJsZV92ZXJzaW9uX3JlID0g
cmUuY29tcGlsZSgnLS0gVW5hdmFpbGFibGU6ICg/UDxpZGVudGlmaWVyPlteIF0rKSAtLScpCisg
ICAgdmVyc2lvbl9yZSA9IHJlLmNvbXBpbGUoJy0tIChpfHdhdGNofHR2KU9TICg/UDx2ZXJzaW9u
PlxkK1wuXGQrKSg/UDxpbnRlcm5hbD4gSW50ZXJuYWwpPyAtLScpCisgICAgZGV2aWNlc19yZSA9
IHJlLmNvbXBpbGUoCisgICAgICAgICdccyooP1A8bmFtZT5bXihdKyApXCgoP1A8dWRpZD5bXild
KylcKSBcKCg/UDxzdGF0ZT5bXildKylcKSggXCgoP1A8YXZhaWxhYmlsaXR5PlteKV0rKVwpKT8n
KQorCisgICAgX21hbmFnZWRfZGV2aWNlcyA9IHt9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
aG9zdD1Ob25lKToKKyAgICAgICAgc2VsZi5faG9zdCA9IGhvc3Qgb3IgSG9zdCgpCisgICAgICAg
IHNlbGYucnVudGltZXMgPSBbXQorICAgICAgICBzZWxmLmRldmljZV90eXBlcyA9IFtdCisgICAg
ICAgIHNlbGYucmVmcmVzaCgpCisKKyAgICAjIEtlZXAgdGhlc2UgY29uc3RhbnRzIHN5bmNocm9u
aXplZCB3aXRoIHRoZSBTaW1EZXZpY2VTdGF0ZSBjb25zdGFudHMgaW4gQ29yZVNpbXVsYXRvci9T
aW1EZXZpY2UuaC4KKyAgICBjbGFzcyBEZXZpY2VTdGF0ZToKKyAgICAgICAgRE9FU19OT1RfRVhJ
U1QgPSAtMQorICAgICAgICBDUkVBVElORyA9IDAKKyAgICAgICAgU0hVVERPV04gPSAxCisgICAg
ICAgIEJPT1RJTkcgPSAyCisgICAgICAgIEJPT1RFRCA9IDMKKyAgICAgICAgU0hVVFRJTkdfRE9X
TiA9IDQKKworICAgIE5BTUVfRk9SX1NUQVRFID0gWworICAgICAgICAnQ1JFQVRJTkcnLAorICAg
ICAgICAnU0hVVERPV04nLAorICAgICAgICAnQk9PVElORycsCisgICAgICAgICdCT09URUQnLAor
ICAgICAgICAnU0hVVFRJTkdfRE9XTicKKyAgICBdCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIGNyZWF0ZV9kZXZpY2UobnVtYmVyLCBkZXZpY2VfdHlwZSwgcnVudGltZSk6CisgICAgICAg
IGRldmljZSA9IFNpbXVsYXRvcigpLmxvb2t1cF9vcl9jcmVhdGVfZGV2aWNlKGRldmljZV90eXBl
Lm5hbWUgKyAnIFdlYktpdCBUZXN0ZXInICsgc3RyKG51bWJlciksIGRldmljZV90eXBlLCBydW50
aW1lKQorICAgICAgICBfbG9nLmRlYnVnKCdjcmVhdGVkIGRldmljZSB7fSB7fScuZm9ybWF0KG51
bWJlciwgZGV2aWNlKSkKKyAgICAgICAgYXNzZXJ0KGxlbihTaW11bGF0b3IuX21hbmFnZWRfZGV2
aWNlcykgPT0gbnVtYmVyKQorICAgICAgICBTaW11bGF0b3IuX21hbmFnZWRfZGV2aWNlc1tudW1i
ZXJdID0gZGV2aWNlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHJlbW92ZV9kZXZpY2Uo
bnVtYmVyKToKKyAgICAgICAgaWYgbm90IFNpbXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzW251bWJl
cl06CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGV2aWNlX3VkaWQgPSBTaW11bGF0b3Iu
X21hbmFnZWRfZGV2aWNlc1tudW1iZXJdLnVkaWQKKyAgICAgICAgX2xvZy5kZWJ1ZygncmVtb3Zp
bmcgZGV2aWNlIHt9IHt9Jy5mb3JtYXQobnVtYmVyLCBkZXZpY2VfdWRpZCkpCisgICAgICAgIGRl
bCBTaW11bGF0b3IuX21hbmFnZWRfZGV2aWNlc1tudW1iZXJdCisgICAgICAgIFNpbXVsYXRvci5k
ZWxldGVfZGV2aWNlKGRldmljZV91ZGlkKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBk
ZXZpY2VfbnVtYmVyKG51bWJlcik6CisgICAgICAgIHJldHVybiBTaW11bGF0b3IuX21hbmFnZWRf
ZGV2aWNlc1tudW1iZXJdCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGRldmljZV9zdGF0
ZV9kZXNjcmlwdGlvbihzdGF0ZSk6CisgICAgICAgIGlmIChzdGF0ZSA9PSBTaW11bGF0b3IuRGV2
aWNlU3RhdGUuRE9FU19OT1RfRVhJU1QpOgorICAgICAgICAgICAgcmV0dXJuICdET0VTX05PVF9F
WElTVCcKKyAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5OQU1FX0ZPUl9TVEFURVtzdGF0ZV0KKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgd2FpdF91bnRpbF9kZXZpY2VfaXNfYm9vdGVkKHVk
aWQsIHRpbWVvdXRfc2Vjb25kcz02MCAqIDUpOgorICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRp
bF9kZXZpY2VfaXNfaW5fc3RhdGUodWRpZCwgU2ltdWxhdG9yLkRldmljZVN0YXRlLkJPT1RFRCwg
dGltZW91dF9zZWNvbmRzKQorICAgICAgICB3aXRoIHRpbWVvdXQoc2Vjb25kcz10aW1lb3V0X3Nl
Y29uZHMpOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd4Y3J1
bicsICdzaW1jdGwnLCAnc3Bhd24nLCB1ZGlkLCAnbGF1bmNoY3RsJywgJ3ByaW50JywgJ3N5c3Rl
bSddKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ3hjcnVuIHNpbWN0
bCBzcGF3biAlcycsIHVkaWQpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJB
W1xzXStjb20uYXBwbGUuc3ByaW5nYm9hcmQuc2VydmljZXMiLCBzdGF0ZSk6CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5D
YWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGlmIFNpbXVsYXRvci5kZXZp
Y2Vfc3RhdGUodWRpZCkgIT0gU2ltdWxhdG9yLkRldmljZVN0YXRlLkJPT1RFRDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignU2ltdWF0b3IgZGV2aWNlIHF1aXQg
dW5leHBlY3RlZGx5LicpCisgICAgICAgICAgICAgICAgICAgIF9sb2cud2FybigiRXJyb3IgaW4g
Y2hlY2tpbmcgU2ltdWxhdG9yIGJvb3Qgc3RhdHVzLiBXaWxsIHJldHJ5IGluIDEgc2Vjb25kLiIp
CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiB3YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZSh1ZGlkLCB3YWl0X3VudGlsX3N0YXRl
LCB0aW1lb3V0X3NlY29uZHM9NjAgKiA1KToKKyAgICAgICAgX2xvZy5kZWJ1Zygnd2FpdGluZyBm
b3IgZGV2aWNlICVzIHRvIGVudGVyIHN0YXRlICVzIHdpdGggdGltZW91dCAlcycsIHVkaWQsIFNp
bXVsYXRvci5kZXZpY2Vfc3RhdGVfZGVzY3JpcHRpb24od2FpdF91bnRpbF9zdGF0ZSksIHRpbWVv
dXRfc2Vjb25kcykKKyAgICAgICAgd2l0aCB0aW1lb3V0KHNlY29uZHM9dGltZW91dF9zZWNvbmRz
KToKKyAgICAgICAgICAgIGRldmljZV9zdGF0ZSA9IFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUodWRp
ZCkKKyAgICAgICAgICAgIHdoaWxlIChkZXZpY2Vfc3RhdGUgIT0gd2FpdF91bnRpbF9zdGF0ZSk6
CisgICAgICAgICAgICAgICAgZGV2aWNlX3N0YXRlID0gU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1
ZGlkKQorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyBkZXZpY2Ugc3RhdGUgJXMnLCBTaW11
bGF0b3IuZGV2aWNlX3N0YXRlX2Rlc2NyaXB0aW9uKGRldmljZV9zdGF0ZSkpCisgICAgICAgICAg
ICAgICAgdGltZS5zbGVlcCgwLjUpCisKKyAgICAgICAgZW5kX3N0YXRlID0gU2ltdWxhdG9yLmRl
dmljZV9zdGF0ZSh1ZGlkKQorICAgICAgICBpZiAoZW5kX3N0YXRlICE9IHdhaXRfdW50aWxfc3Rh
dGUpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaW1lZCBvdXQgd2FpdGluZyBm
b3Igc2ltdWxhdG9yIGRldmljZSB0byBlbnRlciBzdGF0ZSB7MH07IGN1cnJlbnQgc3RhdGUgaXMg
ezF9Jy5mb3JtYXQoU2ltdWxhdG9yLmRldmljZV9zdGF0ZV9kZXNjcmlwdGlvbih3YWl0X3VudGls
X3N0YXRlKSwgU2ltdWxhdG9yLmRldmljZV9zdGF0ZV9kZXNjcmlwdGlvbihlbmRfc3RhdGUpKSkK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZGV2aWNlX3N0YXRlKHVkaWQpOgorICAgICAg
ICBkZXZpY2VfcGxpc3QgPSBvcy5wYXRoLmpvaW4oU2ltdWxhdG9yLmRldmljZV9kaXJlY3Rvcnko
dWRpZCksICdkZXZpY2UucGxpc3QnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZGV2
aWNlX3BsaXN0KToKKyAgICAgICAgICAgIHJldHVybiBTaW11bGF0b3IuRGV2aWNlU3RhdGUuRE9F
U19OT1RfRVhJU1QKKyAgICAgICAgcmV0dXJuIHBsaXN0bGliLnJlYWRQbGlzdChkZXZpY2VfcGxp
c3QpWydzdGF0ZSddCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGRldmljZV9kaXJlY3Rv
cnkodWRpZCk6CisgICAgICAgIHJldHVybiBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguZXhwYW5k
dXNlcihvcy5wYXRoLmpvaW4oJ34vTGlicmFyeS9EZXZlbG9wZXIvQ29yZVNpbXVsYXRvci9EZXZp
Y2VzJywgdWRpZCkpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBkZWxldGVfZGV2aWNl
KHVkaWQpOgorICAgICAgICBEZXZpY2UuZGVsZXRlKHVkaWQpCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIHJlc2V0X2RldmljZSh1ZGlkKToKKyAgICAgICAgRGV2aWNlLnJlc2V0KHVkaWQp
CisKKyAgICBkZWYgcmVmcmVzaChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlZnJlc2gg
cnVudGltZSBhbmQgZGV2aWNlIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBgYHNpbWN0bCBsaXN0YGAu
CisgICAgICAgICIiIgorICAgICAgICBsaW5lcyA9IHNlbGYuX2hvc3QucGxhdGZvcm0ueGNvZGVf
c2ltY3RsX2xpc3QoKQorICAgICAgICBpZiBub3QgbGluZXM6CisgICAgICAgICAgICByZXR1cm4K
KyAgICAgICAgZGV2aWNlX3R5cGVzX2hlYWRlciA9IG5leHQobGluZXMpCisgICAgICAgIGlmIGRl
dmljZV90eXBlc19oZWFkZXIgIT0gJz09IERldmljZSBUeXBlcyA9PSc6CisgICAgICAgICAgICBy
YWlzZSBSdW50aW1lRXJyb3IoJ0V4cGVjdGVkID09IERldmljZSBUeXBlcyA9PSBoZWFkZXIgYnV0
IGdvdDogInt9IicuZm9ybWF0KGRldmljZV90eXBlc19oZWFkZXIpKQorICAgICAgICBzZWxmLl9w
YXJzZV9kZXZpY2VfdHlwZXMobGluZXMpCisKKyAgICBkZWYgX3BhcnNlX2RldmljZV90eXBlcyhz
ZWxmLCBsaW5lcyk6CisgICAgICAgICIiIgorICAgICAgICBQYXJzZSBkZXZpY2UgdHlwZXMgZnJv
bSBgYHNpbWN0bCBsaXN0YGAuCisgICAgICAgIDpwYXJhbSBsaW5lczogQSBnZW5lcmF0b3IgZm9y
IHRoZSBvdXRwdXQgbGluZXMgZnJvbSBgYHNpbWN0bCBsaXN0YGAuCisgICAgICAgIDp0eXBlIGxp
bmVzOiBnZW5leHByCisgICAgICAgIDpyZXR1cm46IE5vbmUKKyAgICAgICAgIiIiCisgICAgICAg
IGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgZGV2aWNlX3R5cGVfbWF0Y2ggPSBzZWxm
LmRldmljZV90eXBlX3JlLm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBub3QgZGV2aWNlX3R5
cGVfbWF0Y2g6CisgICAgICAgICAgICAgICAgaWYgbGluZSAhPSAnPT0gUnVudGltZXMgPT0nOgor
ICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0V4cGVjdGVkID09IFJ1bnRp
bWVzID09IGhlYWRlciBidXQgZ290OiAie30iJy5mb3JtYXQobGluZSkpCisgICAgICAgICAgICAg
ICAgYnJlYWsKKyAgICAgICAgICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZShuYW1lPWRldmlj
ZV90eXBlX21hdGNoLmdyb3VwKCduYW1lJykucnN0cmlwKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1kZXZpY2VfdHlwZV9tYXRjaC5ncm91cCgnaWRl
bnRpZmllcicpKQorICAgICAgICAgICAgc2VsZi5kZXZpY2VfdHlwZXMuYXBwZW5kKGRldmljZV90
eXBlKQorCisgICAgICAgIHNlbGYuX3BhcnNlX3J1bnRpbWVzKGxpbmVzKQorCisgICAgZGVmIF9w
YXJzZV9ydW50aW1lcyhzZWxmLCBsaW5lcyk6CisgICAgICAgICIiIgorICAgICAgICBDb250aW51
ZSB0byBwYXJzZSBydW50aW1lcyBmcm9tIGBgc2ltY3RsIGxpc3RgYC4KKyAgICAgICAgOnBhcmFt
IGxpbmVzOiBBIGdlbmVyYXRvciBmb3IgdGhlIG91dHB1dCBsaW5lcyBmcm9tIGBgc2ltY3RsIGxp
c3RgYC4KKyAgICAgICAgOnR5cGUgbGluZXM6IGdlbmV4cHIKKyAgICAgICAgOnJldHVybjogTm9u
ZQorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBy
dW50aW1lX21hdGNoID0gc2VsZi5ydW50aW1lX3JlLm1hdGNoKGxpbmUpCisgICAgICAgICAgICBp
ZiBub3QgcnVudGltZV9tYXRjaDoKKyAgICAgICAgICAgICAgICBpZiBsaW5lICE9ICc9PSBEZXZp
Y2VzID09JzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFeHBlY3Rl
ZCA9PSBEZXZpY2VzID09IGhlYWRlciBidXQgZ290OiAie30iJy5mb3JtYXQobGluZSkpCisgICAg
ICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHZlcnNpb24gPSB0dXBsZShtYXAoaW50LCBy
dW50aW1lX21hdGNoLmdyb3VwKCd2ZXJzaW9uJykuc3BsaXQoJy4nKSkpCisgICAgICAgICAgICBy
dW50aW1lID0gUnVudGltZSh2ZXJzaW9uPXZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZGVudGlmaWVyPXJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ2lkZW50aWZpZXInKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZT1ydW50aW1lX21hdGNoLmdyb3Vw
KCdhdmFpbGFiaWxpdHknKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXNfaW50ZXJuYWxfcnVudGltZT1ib29sKHJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ2ludGVybmFsJykp
KQorICAgICAgICAgICAgc2VsZi5ydW50aW1lcy5hcHBlbmQocnVudGltZSkKKyAgICAgICAgc2Vs
Zi5fcGFyc2VfZGV2aWNlcyhsaW5lcykKKworICAgIGRlZiBfcGFyc2VfZGV2aWNlcyhzZWxmLCBs
aW5lcyk6CisgICAgICAgICIiIgorICAgICAgICBDb250aW51ZSB0byBwYXJzZSBkZXZpY2VzIGZy
b20gYGBzaW1jdGwgbGlzdGBgLgorICAgICAgICA6cGFyYW0gbGluZXM6IEEgZ2VuZXJhdG9yIGZv
ciB0aGUgb3V0cHV0IGxpbmVzIGZyb20gYGBzaW1jdGwgbGlzdGBgLgorICAgICAgICA6dHlwZSBs
aW5lczogZ2VuZXhwcgorICAgICAgICA6cmV0dXJuOiBOb25lCisgICAgICAgICIiIgorICAgICAg
ICBjdXJyZW50X3J1bnRpbWUgPSBOb25lCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAg
ICAgICAgICAgdmVyc2lvbl9tYXRjaCA9IHNlbGYudmVyc2lvbl9yZS5tYXRjaChsaW5lKQorICAg
ICAgICAgICAgaWYgdmVyc2lvbl9tYXRjaDoKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gdHVw
bGUobWFwKGludCwgdmVyc2lvbl9tYXRjaC5ncm91cCgndmVyc2lvbicpLnNwbGl0KCcuJykpKQor
ICAgICAgICAgICAgICAgIGN1cnJlbnRfcnVudGltZSA9IHNlbGYucnVudGltZSh2ZXJzaW9uPXZl
cnNpb24sIGlzX2ludGVybmFsX3J1bnRpbWU9Ym9vbCh2ZXJzaW9uX21hdGNoLmdyb3VwKCdpbnRl
cm5hbCcpKSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgY3VycmVudF9ydW50aW1lCisgICAgICAg
ICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdW5hdmFpbGFibGVfdmVyc2lvbl9tYXRj
aCA9IHNlbGYudW5hdmFpbGFibGVfdmVyc2lvbl9yZS5tYXRjaChsaW5lKQorICAgICAgICAgICAg
aWYgdW5hdmFpbGFibGVfdmVyc2lvbl9tYXRjaDoKKyAgICAgICAgICAgICAgICBjdXJyZW50X3J1
bnRpbWUgPSBOb25lCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGV2
aWNlX21hdGNoID0gc2VsZi5kZXZpY2VzX3JlLm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBu
b3QgZGV2aWNlX21hdGNoOgorICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0gJz09IERldmljZSBQ
YWlycyA9PSc6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXhwZWN0
ZWQgPT0gRGV2aWNlIFBhaXJzID09IGhlYWRlciBidXQgZ290OiAie30iJy5mb3JtYXQobGluZSkp
CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGN1cnJlbnRfcnVudGltZToK
KyAgICAgICAgICAgICAgICBkZXZpY2UgPSBEZXZpY2UobmFtZT1kZXZpY2VfbWF0Y2guZ3JvdXAo
J25hbWUnKS5yc3RyaXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRpZD1k
ZXZpY2VfbWF0Y2guZ3JvdXAoJ3VkaWQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXZhaWxhYmxlPWRldmljZV9tYXRjaC5ncm91cCgnYXZhaWxhYmlsaXR5JykgaXMgTm9uZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZT1jdXJyZW50X3J1bnRpbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q9c2VsZi5faG9zdCkKKyAgICAg
ICAgICAgICAgICBjdXJyZW50X3J1bnRpbWUuZGV2aWNlcy5hcHBlbmQoZGV2aWNlKQorCisgICAg
ZGVmIGRldmljZV90eXBlKHNlbGYsIG5hbWU9Tm9uZSwgaWRlbnRpZmllcj1Ob25lKToKKyAgICAg
ICAgIiIiCisgICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgc2hvcnQgbmFtZSBvZiB0aGUgZGV2aWNl
IHR5cGUuCisgICAgICAgIDp0eXBlIG5hbWU6IHN0cgorICAgICAgICA6cGFyYW0gaWRlbnRpZmll
cjogVGhlIENvcmVTaW11bGF0b3IgaWRlbnRpZmllciBvZiB0aGUgZGVzaXJlZCBkZXZpY2UgdHlw
ZS4KKyAgICAgICAgOnR5cGUgaWRlbnRpZmllcjogc3RyCisgICAgICAgIDpyZXR1cm46IEEgZGV2
aWNlIHR5cGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kL29yIGlkZW50aWZpZXIsIG9yIE5v
bmUgaWYgb25lIGRvZXNuJ3QgZXhpc3QgYXMgc3VjaC4KKyAgICAgICAgOnJ0eXBlOiBEZXZpY2VU
eXBlCisgICAgICAgICIiIgorICAgICAgICBmb3IgZGV2aWNlX3R5cGUgaW4gc2VsZi5kZXZpY2Vf
dHlwZXM6CisgICAgICAgICAgICBpZiBuYW1lIGFuZCBkZXZpY2VfdHlwZS5uYW1lICE9IG5hbWU6
CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlkZW50aWZpZXIgYW5k
IGRldmljZV90eXBlLmlkZW50aWZpZXIgIT0gaWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICBj
b250aW51ZQorICAgICAgICAgICAgcmV0dXJuIGRldmljZV90eXBlCisgICAgICAgIHJldHVybiBO
b25lCisKKyAgICBkZWYgcnVudGltZShzZWxmLCB2ZXJzaW9uPU5vbmUsIGlkZW50aWZpZXI9Tm9u
ZSwgaXNfaW50ZXJuYWxfcnVudGltZT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIDpwYXJh
bSB2ZXJzaW9uOiBUaGUgaU9TIHZlcnNpb24gb2YgdGhlIGRlc2lyZWQgcnVudGltZS4KKyAgICAg
ICAgOnR5cGUgdmVyc2lvbjogdHVwbGUKKyAgICAgICAgOnBhcmFtIGlkZW50aWZpZXI6IFRoZSBD
b3JlU2ltdWxhdG9yIGlkZW50aWZpZXIgb2YgdGhlIGRlc2lyZWQgcnVudGltZS4KKyAgICAgICAg
OnR5cGUgaWRlbnRpZmllcjogc3RyCisgICAgICAgIDpyZXR1cm46IEEgcnVudGltZSB3aXRoIHRo
ZSBzcGVjaWZpZWQgdmVyc2lvbiBhbmQvb3IgaWRlbnRpZmllciwgb3IgTm9uZSBpZiBvbmUgZG9l
c24ndCBleGlzdCBhcyBzdWNoLgorICAgICAgICA6cnR5cGU6IFJ1bnRpbWUgb3IgTm9uZQorICAg
ICAgICAiIiIKKyAgICAgICAgaWYgdmVyc2lvbiBpcyBOb25lIGFuZCBpZGVudGlmaWVyIGlzIE5v
bmU6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ011c3Qgc3VwcGx5IHZlcnNpb24gYW5k
L29yIGlkZW50aWZpZXIuJykKKworICAgICAgICBmb3IgcnVudGltZSBpbiBzZWxmLnJ1bnRpbWVz
OgorICAgICAgICAgICAgaWYgdmVyc2lvbiBhbmQgcnVudGltZS52ZXJzaW9uICE9IHZlcnNpb246
CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzX2ludGVybmFsX3J1
bnRpbWUgYW5kIHJ1bnRpbWUuaXNfaW50ZXJuYWxfcnVudGltZSAhPSBpc19pbnRlcm5hbF9ydW50
aW1lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpZGVudGlmaWVy
IGFuZCBydW50aW1lLmlkZW50aWZpZXIgIT0gaWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICBj
b250aW51ZQorICAgICAgICAgICAgcmV0dXJuIHJ1bnRpbWUKKyAgICAgICAgcmV0dXJuIE5vbmUK
KworICAgIGRlZiBmaW5kX2RldmljZV9ieV91ZGlkKHNlbGYsIHVkaWQpOgorICAgICAgICAiIiIK
KyAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSBVRElEIG9mIHRoZSBkZXZpY2UgdG8gZmluZC4KKyAg
ICAgICAgOnR5cGUgdWRpZDogc3RyCisgICAgICAgIDpyZXR1cm46IFRoZSBgRGV2aWNlYCB3aXRo
IHRoZSBzcGVjaWZpZWQgVURJRC4KKyAgICAgICAgOnJ0eXBlOiBEZXZpY2UKKyAgICAgICAgIiIi
CisgICAgICAgIGZvciBkZXZpY2UgaW4gc2VsZi5kZXZpY2VzOgorICAgICAgICAgICAgaWYgZGV2
aWNlLnVkaWQgPT0gdWRpZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlCisgICAgICAg
IHJldHVybiBOb25lCisKKyAgICBkZWYgY3VycmVudF9kZXZpY2Uoc2VsZik6CisgICAgICAgICMg
RklYTUU6IEZpbmQgdGhlIHNpbXVsYXRvciBkZXZpY2UgdGhhdCB3YXMgYm9vdGVkIGJ5IFNpbXVs
YXRvci5hcHAuIEZvciBub3csIHBpY2sgc29tZSBib290ZWQgc2ltdWxhdG9yIGRldmljZSwgd2hp
Y2gKKyAgICAgICAgIyBtYXkgaGF2ZSBiZWVuIGJvb3RlZCB1c2luZyB0aGUgc2ltY3RsIGNvbW1h
bmQgbGluZSB0b29sLgorICAgICAgICBmb3IgZGV2aWNlIGluIHNlbGYuZGV2aWNlczoKKyAgICAg
ICAgICAgIGlmIGRldmljZS5zdGF0ZSA9PSBTaW11bGF0b3IuRGV2aWNlU3RhdGUuQk9PVEVEOgor
ICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2UKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
ICMgRklYTUU6IFdlIHNob3VsZCBmaW5kIGFuIGV4aXN0aW5nIGRldmljZSB3aXRoIHJlc3BlY3Qg
dG8gaXRzIG5hbWUsIGRldmljZSB0eXBlIGFuZCBydW50aW1lLgorICAgIGRlZiBkZXZpY2Uoc2Vs
ZiwgbmFtZT1Ob25lLCBydW50aW1lPU5vbmUsIHNob3VsZF9pZ25vcmVfdW5hdmFpbGFibGVfZGV2
aWNlcz1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICA6cGFyYW0gbmFtZTogVGhlIG5hbWUg
b2YgdGhlIGRlc2lyZWQgZGV2aWNlLgorICAgICAgICA6dHlwZSBuYW1lOiBzdHIKKyAgICAgICAg
OnBhcmFtIHJ1bnRpbWU6IFRoZSBydW50aW1lIG9mIHRoZSBkZXNpcmVkIGRldmljZS4KKyAgICAg
ICAgOnR5cGUgcnVudGltZTogUnVudGltZQorICAgICAgICA6cmV0dXJuOiBBIGRldmljZSB3aXRo
IHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQvb3IgcnVudGltZSwgb3IgTm9uZSBpZiBvbmUgZG9lc24n
dCBleGlzdCBhcyBzdWNoCisgICAgICAgIDpydHlwZTogRGV2aWNlIG9yIE5vbmUKKyAgICAgICAg
IiIiCisgICAgICAgIGlmIG5hbWUgaXMgTm9uZSBhbmQgcnVudGltZSBpcyBOb25lOgorICAgICAg
ICAgICAgcmFpc2UgVHlwZUVycm9yKCdNdXN0IHN1cHBseSBuYW1lIGFuZC9vciBydW50aW1lLicp
CisKKyAgICAgICAgZm9yIGRldmljZSBpbiBzZWxmLmRldmljZXM6CisgICAgICAgICAgICBpZiBz
aG91bGRfaWdub3JlX3VuYXZhaWxhYmxlX2RldmljZXMgYW5kIG5vdCBkZXZpY2UuYXZhaWxhYmxl
OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBuYW1lIGFuZCBkZXZp
Y2UubmFtZSAhPSBuYW1lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBp
ZiBydW50aW1lIGFuZCBkZXZpY2UucnVudGltZSAhPSBydW50aW1lOgorICAgICAgICAgICAgICAg
IGNvbnRpbnVlCisgICAgICAgICAgICByZXR1cm4gZGV2aWNlCisgICAgICAgIHJldHVybiBOb25l
CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYXZhaWxhYmxlX3J1bnRpbWVzKHNlbGYpOgorICAg
ICAgICAiIiIKKyAgICAgICAgOnJldHVybjogQW4gaXRlcmF0b3Igb2YgYWxsIGF2YWlsYWJsZSBy
dW50aW1lcy4KKyAgICAgICAgOnJ0eXBlOiBpdGVyCisgICAgICAgICIiIgorICAgICAgICByZXR1
cm4gaXRlcnRvb2xzLmlmaWx0ZXIobGFtYmRhIHJ1bnRpbWU6IHJ1bnRpbWUuYXZhaWxhYmxlLCBz
ZWxmLnJ1bnRpbWVzKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRldmljZXMoc2VsZik6Cisg
ICAgICAgICIiIgorICAgICAgICA6cmV0dXJuOiBBbiBpdGVyYXRvciBvZiBhbGwgZGV2aWNlcyBm
cm9tIGFsbCBydW50aW1lcy4KKyAgICAgICAgOnJ0eXBlOiBpdGVyCisgICAgICAgICIiIgorICAg
ICAgICByZXR1cm4gaXRlcnRvb2xzLmNoYWluKCpbcnVudGltZS5kZXZpY2VzIGZvciBydW50aW1l
IGluIHNlbGYucnVudGltZXNdKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxhdGVzdF9hdmFp
bGFibGVfcnVudGltZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIDpyZXR1cm46IFJldHVy
bnMgYSBSdW50aW1lIG9iamVjdCB3aXRoIHRoZSBoaWdoZXN0IHZlcnNpb24uCisgICAgICAgIDpy
dHlwZTogUnVudGltZSBvciBOb25lCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5y
dW50aW1lczoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzb3J0ZWQo
c2VsZi5hdmFpbGFibGVfcnVudGltZXMsIGtleT1sYW1iZGEgcnVudGltZTogcnVudGltZS52ZXJz
aW9uLCByZXZlcnNlPVRydWUpWzBdCisKKyAgICBkZWYgbG9va3VwX29yX2NyZWF0ZV9kZXZpY2Uo
c2VsZiwgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUpOgorICAgICAgICAiIiIKKyAgICAgICAg
UmV0dXJucyBhbiBhdmFpbGFibGUgaU9TIFNpbXVsYXRvciBkZXZpY2UgZm9yIHRlc3RpbmcuCisK
KyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhIG5ldyBzaW11bGF0b3IgZGV2aWNl
IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLAorICAgICAgICBkZXZpY2UgdHlwZSBhbmQgcnVudGlt
ZSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KKworICAgICAgICA6cGFyYW0gbmFtZTog
VGhlIG5hbWUgb2YgdGhlIHNpbXVsYXRvciBkZXZpY2UgdG8gbG9va3VwIG9yIGNyZWF0ZS4KKyAg
ICAgICAgOnR5cGUgbmFtZTogc3RyCisgICAgICAgIDpwYXJhbSBkZXZpY2VfdHlwZTogVGhlIENv
cmVTaW11bGF0b3IgZGV2aWNlIHR5cGUuCisgICAgICAgIDp0eXBlIGRldmljZV90eXBlOiBEZXZp
Y2VUeXBlCisgICAgICAgIDpwYXJhbSBydW50aW1lOiBUaGUgQ29yZVNpbXVsYXRvciBydW50aW1l
LgorICAgICAgICA6dHlwZSBydW50aW1lOiBSdW50aW1lCisgICAgICAgIDpyZXR1cm46IEEgZGlj
dGlvbmFyeSBkZXNjcmliaW5nIHRoZSBkZXZpY2UuCisgICAgICAgIDpydHlwZTogRGV2aWNlCisg
ICAgICAgICIiIgorICAgICAgICBhc3NlcnQocnVudGltZS5hdmFpbGFibGUpCisgICAgICAgIHRl
c3RpbmdfZGV2aWNlID0gc2VsZi5kZXZpY2UobmFtZT1uYW1lLCBydW50aW1lPXJ1bnRpbWUsIHNo
b3VsZF9pZ25vcmVfdW5hdmFpbGFibGVfZGV2aWNlcz1UcnVlKQorICAgICAgICBpZiB0ZXN0aW5n
X2RldmljZToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ2xvb2t1cF9vcl9jcmVhdGVfZGV2aWNl
ICVzICVzICVzIGZvdW5kICVzJywgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUsIHRlc3Rpbmdf
ZGV2aWNlLm5hbWUpCisgICAgICAgICAgICByZXR1cm4gdGVzdGluZ19kZXZpY2UKKyAgICAgICAg
dGVzdGluZ19kZXZpY2UgPSBEZXZpY2UuY3JlYXRlKG5hbWUsIGRldmljZV90eXBlLCBydW50aW1l
KQorICAgICAgICBfbG9nLmRlYnVnKCdsb29rdXBfb3JfY3JlYXRlX2RldmljZSAlcyAlcyAlcyBj
cmVhdGVkICVzJywgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUsIHRlc3RpbmdfZGV2aWNlLm5h
bWUpCisgICAgICAgIGFzc2VydCh0ZXN0aW5nX2RldmljZS5hdmFpbGFibGUpCisgICAgICAgIHJl
dHVybiB0ZXN0aW5nX2RldmljZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gJzxpT1MgU2ltdWxhdG9yOiB7bnVtX3J1bnRpbWVzfSBydW50aW1lcywge251bV9kZXZp
Y2VfdHlwZXN9IGRldmljZSB0eXBlcz4nLmZvcm1hdCgKKyAgICAgICAgICAgIG51bV9ydW50aW1l
cz1sZW4oc2VsZi5ydW50aW1lcyksCisgICAgICAgICAgICBudW1fZGV2aWNlX3R5cGVzPWxlbihz
ZWxmLmRldmljZV90eXBlcykpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgZGVz
Y3JpcHRpb24gPSBbJ2lPUyBTaW11bGF0b3I6J10KKyAgICAgICAgZGVzY3JpcHRpb24gKz0gbWFw
KHN0ciwgc2VsZi5ydW50aW1lcykKKyAgICAgICAgZGVzY3JpcHRpb24gKz0gbWFwKHN0ciwgc2Vs
Zi5kZXZpY2VfdHlwZXMpCisgICAgICAgIGRlc2NyaXB0aW9uICs9IG1hcChzdHIsIHNlbGYuZGV2
aWNlcykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihkZXNjcmlwdGlvbikKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdGVkX2RldmljZS5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRlZF9kZXZpY2UucHkJKHJldmlz
aW9uIDIxMjcyOSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdGVkX2Rl
dmljZS5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yMCwxNDkgKzIwLDE4IEBACiAjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogCi1pbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9z
Ci1pbXBvcnQgcGxpc3RsaWIKIGltcG9ydCByZQogaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCB0
aW1lCiAKLWZyb20gd2Via2l0cHkuYmVuY2htYXJrX3J1bm5lci51dGlscyBpbXBvcnQgdGltZW91
dAorZnJvbSB3ZWJraXRweS54Y29kZS5kZXZpY2UgaW1wb3J0IERldmljZQorZnJvbSB3ZWJraXRw
eS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvcgogZnJvbSB3ZWJraXRweS5jb21tb24u
aG9zdCBpbXBvcnQgSG9zdAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAK
LSIiIgotTWluaW1hbGx5IHdyYXBzIENvcmVTaW11bGF0b3IgZnVuY3Rpb25hbGl0eSB0aHJvdWdo
IHNpbWN0bC4KIAotSWYgcG9zc2libGUsIHVzZSByZWFsIENvcmVTaW11bGF0b3IuZnJhbWV3b3Jr
IGZ1bmN0aW9uYWxpdHkgYnkgbGlua2luZyB0byB0aGUgZnJhbWV3b3JrIGl0c2VsZi4KLURvIG5v
dCB1c2UgUHlPYmpDIHRvIGRsb3BlbiB0aGUgZnJhbWV3b3JrLgotIiIiCi0KLQotY2xhc3MgRGV2
aWNlVHlwZShvYmplY3QpOgotICAgICIiIgotICAgIFJlcHJlc2VudHMgYSBDb3JlU2ltdWxhdG9y
IGRldmljZSB0eXBlLgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBpZGVu
dGlmaWVyKToKLSAgICAgICAgIiIiCi0gICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgZGV2aWNlIHR5
cGUncyBodW1hbi1yZWFkYWJsZSBuYW1lCi0gICAgICAgIDp0eXBlIG5hbWU6IHN0cgotICAgICAg
ICA6cGFyYW0gaWRlbnRpZmllcjogVGhlIENvcmVTaW11bGF0b3IgaWRlbnRpZmllci4KLSAgICAg
ICAgOnR5cGUgaWRlbnRpZmllcjogc3RyCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLm5hbWUg
PSBuYW1lCi0gICAgICAgIHNlbGYuaWRlbnRpZmllciA9IGlkZW50aWZpZXIKLQotICAgIEBjbGFz
c21ldGhvZAotICAgIGRlZiBmcm9tX25hbWUoY2xzLCBuYW1lKToKLSAgICAgICAgIiIiCi0gICAg
ICAgIDpwYXJhbSBuYW1lOiBUaGUgbmFtZSBmb3IgdGhlIGRlc2lyZWQgZGV2aWNlIHR5cGUuCi0g
ICAgICAgIDp0eXBlIG5hbWU6IHN0cgotICAgICAgICA6cmV0dXJuczogQSBgRGV2aWNlVHlwZWAg
b2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIG9yIHRocm93cyBhIFR5cGVFcnJv
ciBpZiBpdCBkb2Vzbid0IGV4aXN0LgotICAgICAgICA6cnR5cGU6IERldmljZVR5cGUKLSAgICAg
ICAgIiIiCi0gICAgICAgIGlkZW50aWZpZXIgPSBOb25lCi0gICAgICAgIGZvciBkZXZpY2VfdHlw
ZSBpbiBTaW11bGF0b3IoKS5kZXZpY2VfdHlwZXM6Ci0gICAgICAgICAgICBpZiBkZXZpY2VfdHlw
ZS5uYW1lID09IG5hbWU6Ci0gICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGRldmljZV90eXBl
LmlkZW50aWZpZXIKLSAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgIGlmIGlkZW50aWZp
ZXIgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQSBkZXZpY2UgdHlwZSB3
aXRoIG5hbWUgIntuYW1lfSIgZG9lcyBub3QgZXhpc3QuJy5mb3JtYXQobmFtZT1uYW1lKSkKLQot
ICAgICAgICByZXR1cm4gRGV2aWNlVHlwZShuYW1lLCBpZGVudGlmaWVyKQotCi0gICAgQGNsYXNz
bWV0aG9kCi0gICAgZGVmIGZyb21faWRlbnRpZmllcihjbHMsIGlkZW50aWZpZXIpOgotICAgICAg
ICAiIiIKLSAgICAgICAgOnBhcmFtIGlkZW50aWZpZXI6IFRoZSBDb3JlU2ltdWxhdG9yIGlkZW50
aWZpZXIgZm9yIHRoZSBkZXNpcmVkIHJ1bnRpbWUuCi0gICAgICAgIDp0eXBlIGlkZW50aWZpZXI6
IHN0cgotICAgICAgICA6cmV0dXJuczogQSBgUnVudGltZWAgb2JqZWN0IHdpdGh0IHRoZSBzcGVj
aWZpZWQgaWRlbnRpZmllciBvciB0aHJvd3MgYSBUeXBlRXJyb3IgaWYgaXQgZG9lc24ndCBleGlz
dC4KLSAgICAgICAgOnJ0eXBlOiBEZXZpY2VUeXBlCi0gICAgICAgICIiIgotICAgICAgICBuYW1l
ID0gTm9uZQotICAgICAgICBmb3IgZGV2aWNlX3R5cGUgaW4gU2ltdWxhdG9yKCkuZGV2aWNlX3R5
cGVzOgotICAgICAgICAgICAgaWYgZGV2aWNlX3R5cGUuaWRlbnRpZmllciA9PSBpZGVudGlmaWVy
OgotICAgICAgICAgICAgICAgIG5hbWUgPSBkZXZpY2VfdHlwZS5uYW1lCi0gICAgICAgICAgICAg
ICAgYnJlYWsKLQotICAgICAgICBpZiBuYW1lIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBU
eXBlRXJyb3IoJ0EgZGV2aWNlIHR5cGUgd2l0aCBpZGVudGlmaWVyICJ7aWRlbnRpZmllcn0iIGRv
ZXMgbm90IGV4aXN0LicuZm9ybWF0KAotICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9aWRlbnRp
ZmllcikpCi0KLSAgICAgICAgcmV0dXJuIERldmljZVR5cGUobmFtZSwgaWRlbnRpZmllcikKLQot
ICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gKHNlbGYubmFtZSA9
PSBvdGhlci5uYW1lKSBhbmQgKHNlbGYuaWRlbnRpZmllciA9PSBvdGhlci5pZGVudGlmaWVyKQot
Ci0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZi5f
X2VxX18ob3RoZXIpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAn
PERldmljZVR5cGUgIntuYW1lfSI6IHtpZGVudGlmaWVyfT4nLmZvcm1hdChuYW1lPXNlbGYubmFt
ZSwgaWRlbnRpZmllcj1zZWxmLmlkZW50aWZpZXIpCi0KLQotY2xhc3MgUnVudGltZShvYmplY3Qp
OgotICAgICIiIgotICAgIFJlcHJlc2VudHMgYSBDb3JlU2ltdWxhdG9yIHJ1bnRpbWUgYXNzb2Np
YXRlZCB3aXRoIGFuIGlPUyBTREsuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwg
dmVyc2lvbiwgaWRlbnRpZmllciwgYXZhaWxhYmxlLCBkZXZpY2VzPU5vbmUsIGlzX2ludGVybmFs
X3J1bnRpbWU9RmFsc2UpOgotICAgICAgICAiIiIKLSAgICAgICAgOnBhcmFtIHZlcnNpb246IFRo
ZSBpT1MgU0RLIHZlcnNpb24KLSAgICAgICAgOnR5cGUgdmVyc2lvbjogdHVwbGUKLSAgICAgICAg
OnBhcmFtIGlkZW50aWZpZXI6IFRoZSBDb3JlU2ltdWxhdG9yIHJ1bnRpbWUgaWRlbnRpZmllcgot
ICAgICAgICA6dHlwZSBpZGVudGlmaWVyOiBzdHIKLSAgICAgICAgOnBhcmFtIGF2YWlsYWJpbGl0
eTogV2hldGhlciB0aGUgcnVudGltZSBpcyBhdmFpbGFibGUgZm9yIHVzZS4KLSAgICAgICAgOnR5
cGUgYXZhaWxhYmlsaXR5OiBib29sCi0gICAgICAgIDpwYXJhbSBkZXZpY2VzOiBBIGxpc3Qgb2Yg
ZGV2aWNlcyB1bmRlciB0aGlzIHJ1bnRpbWUKLSAgICAgICAgOnR5cGUgZGV2aWNlczogbGlzdCBv
ciBOb25lCi0gICAgICAgIDpwYXJhbSBpc19pbnRlcm5hbF9ydW50aW1lOiBXaGV0aGVyIHRoZSBy
dW50aW1lIGlzIGFuIEFwcGxlIGludGVybmFsIHJ1bnRpbWUKLSAgICAgICAgOnR5cGUgaXNfaW50
ZXJuYWxfcnVudGltZTogYm9vbAotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi52ZXJzaW9uID0g
dmVyc2lvbgotICAgICAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyCi0gICAgICAgIHNl
bGYuYXZhaWxhYmxlID0gYXZhaWxhYmxlCi0gICAgICAgIHNlbGYuZGV2aWNlcyA9IGRldmljZXMg
b3IgW10KLSAgICAgICAgc2VsZi5pc19pbnRlcm5hbF9ydW50aW1lID0gaXNfaW50ZXJuYWxfcnVu
dGltZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZyb21fdmVyc2lvbl9zdHJpbmcoY2xz
LCB2ZXJzaW9uKToKLSAgICAgICAgcmV0dXJuIGNscy5mcm9tX2lkZW50aWZpZXIoJ2NvbS5hcHBs
ZS5Db3JlU2ltdWxhdG9yLlNpbVJ1bnRpbWUuaU9TLScgKyB2ZXJzaW9uLnJlcGxhY2UoJy4nLCAn
LScpKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZyb21faWRlbnRpZmllcihjbHMsIGlk
ZW50aWZpZXIpOgotICAgICAgICAiIiIKLSAgICAgICAgOnBhcmFtIGlkZW50aWZpZXI6IFRoZSBp
ZGVudGlmaWVyIGZvciB0aGUgZGVzaXJlZCBDb3JlU2ltdWxhdG9yIHJ1bnRpbWUuCi0gICAgICAg
IDp0eXBlIGlkZW50aWZpZXI6IHN0cgotICAgICAgICA6cmV0dXJuczogQSBgUnVudGltZWAgb2Jq
ZWN0IHdpdGggdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIG9yIHRocm93cyBhIFR5cGVFcnJvciBp
ZiBpdCBkb2Vzbid0IGV4aXN0LgotICAgICAgICA6cnR5cGU6IFJ1bnRpbWUKLSAgICAgICAgIiIi
Ci0gICAgICAgIGZvciBydW50aW1lIGluIFNpbXVsYXRvcigpLnJ1bnRpbWVzOgotICAgICAgICAg
ICAgaWYgcnVudGltZS5pZGVudGlmaWVyID09IGlkZW50aWZpZXI6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJ1bnRpbWUKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdBIHJ1bnRpbWUgd2l0aCBp
ZGVudGlmaWVyICJ7aWRlbnRpZmllcn0iIGRvZXMgbm90IGV4aXN0LicuZm9ybWF0KGlkZW50aWZp
ZXI9aWRlbnRpZmllcikpCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAg
cmV0dXJuIChzZWxmLnZlcnNpb24gPT0gb3RoZXIudmVyc2lvbikgYW5kIChzZWxmLmlkZW50aWZp
ZXIgPT0gb3RoZXIuaWRlbnRpZmllcikgYW5kIChzZWxmLmlzX2ludGVybmFsX3J1bnRpbWUgPT0g
b3RoZXIuaXNfaW50ZXJuYWxfcnVudGltZSkKLQotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIp
OgotICAgICAgICByZXR1cm4gbm90IHNlbGYuX19lcV9fKG90aGVyKQotCi0gICAgZGVmIF9fcmVw
cl9fKHNlbGYpOgotICAgICAgICB2ZXJzaW9uX3N1ZmZpeCA9ICIiCi0gICAgICAgIGlmIHNlbGYu
aXNfaW50ZXJuYWxfcnVudGltZToKLSAgICAgICAgICAgIHZlcnNpb25fc3VmZml4ID0gIiBJbnRl
cm5hbCIKLSAgICAgICAgcmV0dXJuICc8UnVudGltZSB7dmVyc2lvbn06IHtpZGVudGlmaWVyfS4g
QXZhaWxhYmxlOiB7YXZhaWxhYmxlfSwge251bV9kZXZpY2VzfSBkZXZpY2VzPicuZm9ybWF0KAot
ICAgICAgICAgICAgdmVyc2lvbj0nLicuam9pbihtYXAoc3RyLCBzZWxmLnZlcnNpb24pKSArIHZl
cnNpb25fc3VmZml4LAotICAgICAgICAgICAgaWRlbnRpZmllcj1zZWxmLmlkZW50aWZpZXIsCi0g
ICAgICAgICAgICBhdmFpbGFibGU9c2VsZi5hdmFpbGFibGUsCi0gICAgICAgICAgICBudW1fZGV2
aWNlcz1sZW4oc2VsZi5kZXZpY2VzKSkKLQotCi1jbGFzcyBEZXZpY2Uob2JqZWN0KToKK2NsYXNz
IFNpbXVsYXRlZERldmljZShEZXZpY2UpOgogICAgICIiIgogICAgIFJlcHJlc2VudHMgYSBDb3Jl
U2ltdWxhdG9yIGRldmljZSB1bmRlcm5lYXRoIGEgcnVudGltZQogICAgICIiIgpAQCAtMTgwLDkg
KzQ5LDcgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAgIDpwYXJhbSBob3N0OiBUaGUg
aG9zdCB3aGljaCBjYW4gcnVuIGNvbW1hbmQgbGluZSBjb21tYW5kcwogICAgICAgICA6dHlwZSBo
b3N0OiBIb3N0CiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl9ob3N0ID0gaG9zdAotICAgICAg
ICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYudWRpZCA9IHVkaWQKKyAgICAgICAgc3Vw
ZXIoU2ltdWxhdGVkRGV2aWNlLCBzZWxmKS5fX2luaXRfXyhuYW1lLCB1ZGlkLCBob3N0KQogICAg
ICAgICBzZWxmLmF2YWlsYWJsZSA9IGF2YWlsYWJsZQogICAgICAgICBzZWxmLnJ1bnRpbWUgPSBy
dW50aW1lCiAKQEAgLTI0Miw3ICsxMDksNyBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0KToKICAgICAg
ICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2UuCiAgICAgICAgIDp0eXBlIHVk
aWQ6IHN0cgogICAgICAgICAiIiIKLSAgICAgICAgRGV2aWNlLnNodXRkb3duKHVkaWQpCisgICAg
ICAgIFNpbXVsYXRlZERldmljZS5zaHV0ZG93bih1ZGlkKQogICAgICAgICB0cnk6CiAgICAgICAg
ICAgICBfbG9nLmRlYnVnKCd4Y3J1biBzaW1jdGwgZGVsZXRlICVzJywgdWRpZCkKICAgICAgICAg
ICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ3hjcnVuJywgJ3NpbWN0bCcsICdkZWxldGUnLCB1
ZGlkXSkKQEAgLTI1Niw3ICsxMjMsNyBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0KToKICAgICAgICAg
OnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2UuCiAgICAgICAgIDp0eXBlIHVkaWQ6
IHN0cgogICAgICAgICAiIiIKLSAgICAgICAgRGV2aWNlLnNodXRkb3duKHVkaWQpCisgICAgICAg
IFNpbXVsYXRlZERldmljZS5zaHV0ZG93bih1ZGlkKQogICAgICAgICB0cnk6CiAgICAgICAgICAg
ICBfbG9nLmRlYnVnKCd4Y3J1biBzaW1jdGwgZXJhc2UgJXMnLCB1ZGlkKQogICAgICAgICAgICAg
c3VicHJvY2Vzcy5jaGVja19jYWxsKFsneGNydW4nLCAnc2ltY3RsJywgJ2VyYXNlJywgdWRpZF0p
CkBAIC0zMDksMzY5ICsxNzYsOSBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0KToKICAgICAgICAgICAg
IHJhaXNlIFJ1bnRpbWVFcnJvcignRmFpbGVkIHRvIGZpbmQgcHJvY2VzcyBpZCBmb3Ige306IHt9
Jy5mb3JtYXQoYnVuZGxlX2lkLCBvdXRwdXQpKQogICAgICAgICByZXR1cm4gaW50KG1hdGNoLmdy
b3VwKCdwaWQnKSkKIAotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1
cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQKLQotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIp
OgotICAgICAgICByZXR1cm4gbm90IHNlbGYuX19lcV9fKG90aGVyKQotCiAgICAgZGVmIF9fcmVw
cl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJzxEZXZpY2UgIntuYW1lfSI6IHt1ZGlkfS4gU3Rh
dGU6IHtzdGF0ZX0uIFJ1bnRpbWU6IHtydW50aW1lfSwgQXZhaWxhYmxlOiB7YXZhaWxhYmxlfT4n
LmZvcm1hdCgKLSAgICAgICAgICAgIG5hbWU9c2VsZi5uYW1lLAotICAgICAgICAgICAgdWRpZD1z
ZWxmLnVkaWQsCisgICAgICAgIHJldHVybiAnPHtkZXZpY2VfaW5mb30gU3RhdGU6IHtzdGF0ZX0u
IFJ1bnRpbWU6IHtydW50aW1lfSwgQXZhaWxhYmxlOiB7YXZhaWxhYmxlfT4nLmZvcm1hdCgKKyAg
ICAgICAgICAgIGRldmljZV9pbmZvPXN1cGVyKFNpbXVsYXRlZERldmljZSwgc2VsZikuX19yZXBy
X18oKSwKICAgICAgICAgICAgIHN0YXRlPXNlbGYuc3RhdGUsCiAgICAgICAgICAgICBhdmFpbGFi
bGU9c2VsZi5hdmFpbGFibGUsCiAgICAgICAgICAgICBydW50aW1lPXNlbGYucnVudGltZS5pZGVu
dGlmaWVyKQotCi0KLSMgRklYTUU6IFRoaXMgY2xhc3MgaXMgZnJhZ2lsZSBiZWNhdXNlIGl0IHBh
cnNlcyB0aGUgb3V0cHV0IG9mIHRoZSBzaW1jdGwgY29tbWFuZCBsaW5lIHV0aWxpdHksIHdoaWNo
IG1heSBjaGFuZ2UuCi0jICAgICAgICBXZSBzaG91bGQgZmluZCBhIGJldHRlciB3YXkgdG8gcXVl
cnkgZm9yIHNpbXVsYXRvciBkZXZpY2Ugc3RhdGUgYW5kIGNhcGFiaWxpdGllcy4gTWF5YmUgdGFr
ZSBhIHNpbWlsaWFyCi0jICAgICAgICBhcHByb2FjaCBhcyBpbiB3ZWJraXRkaXJzLnBtIGFuZCB1
dGlsaXplIHRoZSBwYXJzZWQgb3V0cHV0IGZyb20gdGhlIGRldmljZS5wbGlzdCBmaWxlcyBpbiB0
aGUgc3ViLQotIyAgICAgICAgZGlyZWN0b3JpZXMgb2Ygfi9MaWJyYXJ5L0RldmVsb3Blci9Db3Jl
U2ltdWxhdG9yL0RldmljZXM/Ci0jICAgICAgICBBbHNvLCBzaW1jdGwgaGFzIHRoZSBvcHRpb24g
dG8gb3V0cHV0IGluIEpTT04gZm9ybWF0ICh4Y3J1biBzaW1jdGwgbGlzdCAtLWpzb24pLgotY2xh
c3MgU2ltdWxhdG9yKG9iamVjdCk6Ci0gICAgIiIiCi0gICAgUmVwcmVzZW50cyB0aGUgaU9TIFNp
bXVsYXRvciBpbmZyYXN0cnVjdHVyZSB1bmRlciB0aGUgY3VycmVudGx5IHNlbGVjdCBYY29kZS5h
cHAgYnVuZGxlLgotICAgICIiIgotICAgIGRldmljZV90eXBlX3JlID0gcmUuY29tcGlsZSgnKD9Q
PG5hbWU+W14oXSspXCgoP1A8aWRlbnRpZmllcj5bXildKylcKScpCi0gICAgIyBGSVhNRTogcnVu
dGltZV9yZSBwYXJzZXMgdGhlIHZlcnNpb24gZnJvbSB0aGUgcnVudGltZSBuYW1lLCBidXQgdGhh
dCBkb2VzIG5vdCBjb250YWluIHRoZSBmdWxsIHZlcnNpb24gbnVtYmVyCi0gICAgIyAoaXQgY2Fu
IG9taXQgdGhlIHJldmlzaW9uKS4gV2Ugc2hvdWxkIGluc3RlYWQgcGFyc2UgdGhlIHZlcnNpb24g
ZnJvbSB0aGUgbnVtYmVyIGNvbnRhaW5lZCBpbiBwYXJlbnRoZXNlcy4KLSAgICBydW50aW1lX3Jl
ID0gcmUuY29tcGlsZSgKLSAgICAgICAgJyhpfHdhdGNofHR2KU9TICg/UDx2ZXJzaW9uPlxkK1wu
XGQpKD9QPGludGVybmFsPiBJbnRlcm5hbCk/IFwoXGQrXC5cZCsoXC5cZCspPyAtICg/UDxidWls
ZF92ZXJzaW9uPlteKV0rKVwpIFwoKD9QPGlkZW50aWZpZXI+W14pXSspXCkoIFwoKD9QPGF2YWls
YWJpbGl0eT5bXildKylcKSk/JykKLSAgICB1bmF2YWlsYWJsZV92ZXJzaW9uX3JlID0gcmUuY29t
cGlsZSgnLS0gVW5hdmFpbGFibGU6ICg/UDxpZGVudGlmaWVyPlteIF0rKSAtLScpCi0gICAgdmVy
c2lvbl9yZSA9IHJlLmNvbXBpbGUoJy0tIChpfHdhdGNofHR2KU9TICg/UDx2ZXJzaW9uPlxkK1wu
XGQrKSg/UDxpbnRlcm5hbD4gSW50ZXJuYWwpPyAtLScpCi0gICAgZGV2aWNlc19yZSA9IHJlLmNv
bXBpbGUoCi0gICAgICAgICdccyooP1A8bmFtZT5bXihdKyApXCgoP1A8dWRpZD5bXildKylcKSBc
KCg/UDxzdGF0ZT5bXildKylcKSggXCgoP1A8YXZhaWxhYmlsaXR5PlteKV0rKVwpKT8nKQotCi0g
ICAgX21hbmFnZWRfZGV2aWNlcyA9IHt9Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdD1O
b25lKToKLSAgICAgICAgc2VsZi5faG9zdCA9IGhvc3Qgb3IgSG9zdCgpCi0gICAgICAgIHNlbGYu
cnVudGltZXMgPSBbXQotICAgICAgICBzZWxmLmRldmljZV90eXBlcyA9IFtdCi0gICAgICAgIHNl
bGYucmVmcmVzaCgpCi0KLSAgICAjIEtlZXAgdGhlc2UgY29uc3RhbnRzIHN5bmNocm9uaXplZCB3
aXRoIHRoZSBTaW1EZXZpY2VTdGF0ZSBjb25zdGFudHMgaW4gQ29yZVNpbXVsYXRvci9TaW1EZXZp
Y2UuaC4KLSAgICBjbGFzcyBEZXZpY2VTdGF0ZToKLSAgICAgICAgRE9FU19OT1RfRVhJU1QgPSAt
MQotICAgICAgICBDUkVBVElORyA9IDAKLSAgICAgICAgU0hVVERPV04gPSAxCi0gICAgICAgIEJP
T1RJTkcgPSAyCi0gICAgICAgIEJPT1RFRCA9IDMKLSAgICAgICAgU0hVVFRJTkdfRE9XTiA9IDQK
LQotICAgIE5BTUVfRk9SX1NUQVRFID0gWwotICAgICAgICAnQ1JFQVRJTkcnLAotICAgICAgICAn
U0hVVERPV04nLAotICAgICAgICAnQk9PVElORycsCi0gICAgICAgICdCT09URUQnLAotICAgICAg
ICAnU0hVVFRJTkdfRE9XTicKLSAgICBdCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNy
ZWF0ZV9kZXZpY2UobnVtYmVyLCBkZXZpY2VfdHlwZSwgcnVudGltZSk6Ci0gICAgICAgIGRldmlj
ZSA9IFNpbXVsYXRvcigpLmxvb2t1cF9vcl9jcmVhdGVfZGV2aWNlKGRldmljZV90eXBlLm5hbWUg
KyAnIFdlYktpdCBUZXN0ZXInICsgc3RyKG51bWJlciksIGRldmljZV90eXBlLCBydW50aW1lKQot
ICAgICAgICBfbG9nLmRlYnVnKCdjcmVhdGVkIGRldmljZSB7fSB7fScuZm9ybWF0KG51bWJlciwg
ZGV2aWNlKSkKLSAgICAgICAgYXNzZXJ0KGxlbihTaW11bGF0b3IuX21hbmFnZWRfZGV2aWNlcykg
PT0gbnVtYmVyKQotICAgICAgICBTaW11bGF0b3IuX21hbmFnZWRfZGV2aWNlc1tudW1iZXJdID0g
ZGV2aWNlCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHJlbW92ZV9kZXZpY2UobnVtYmVy
KToKLSAgICAgICAgaWYgbm90IFNpbXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzW251bWJlcl06Ci0g
ICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZGV2aWNlX3VkaWQgPSBTaW11bGF0b3IuX21hbmFn
ZWRfZGV2aWNlc1tudW1iZXJdLnVkaWQKLSAgICAgICAgX2xvZy5kZWJ1ZygncmVtb3ZpbmcgZGV2
aWNlIHt9IHt9Jy5mb3JtYXQobnVtYmVyLCBkZXZpY2VfdWRpZCkpCi0gICAgICAgIGRlbCBTaW11
bGF0b3IuX21hbmFnZWRfZGV2aWNlc1tudW1iZXJdCi0gICAgICAgIFNpbXVsYXRvci5kZWxldGVf
ZGV2aWNlKGRldmljZV91ZGlkKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBkZXZpY2Vf
bnVtYmVyKG51bWJlcik6Ci0gICAgICAgIHJldHVybiBTaW11bGF0b3IuX21hbmFnZWRfZGV2aWNl
c1tudW1iZXJdCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGRldmljZV9zdGF0ZV9kZXNj
cmlwdGlvbihzdGF0ZSk6Ci0gICAgICAgIGlmIChzdGF0ZSA9PSBTaW11bGF0b3IuRGV2aWNlU3Rh
dGUuRE9FU19OT1RfRVhJU1QpOgotICAgICAgICAgICAgcmV0dXJuICdET0VTX05PVF9FWElTVCcK
LSAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5OQU1FX0ZPUl9TVEFURVtzdGF0ZV0KLQotICAgIEBz
dGF0aWNtZXRob2QKLSAgICBkZWYgd2FpdF91bnRpbF9kZXZpY2VfaXNfYm9vdGVkKHVkaWQsIHRp
bWVvdXRfc2Vjb25kcz02MCAqIDUpOgotICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZp
Y2VfaXNfaW5fc3RhdGUodWRpZCwgU2ltdWxhdG9yLkRldmljZVN0YXRlLkJPT1RFRCwgdGltZW91
dF9zZWNvbmRzKQotICAgICAgICB3aXRoIHRpbWVvdXQoc2Vjb25kcz10aW1lb3V0X3NlY29uZHMp
OgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICAgICAgICAgIHN0YXRlID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd4Y3J1bicsICdz
aW1jdGwnLCAnc3Bhd24nLCB1ZGlkLCAnbGF1bmNoY3RsJywgJ3ByaW50JywgJ3N5c3RlbSddKS5z
dHJpcCgpCi0gICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ3hjcnVuIHNpbWN0bCBzcGF3
biAlcycsIHVkaWQpCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJBW1xzXStj
b20uYXBwbGUuc3ByaW5nYm9hcmQuc2VydmljZXMiLCBzdGF0ZSk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQ
cm9jZXNzRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIFNpbXVsYXRvci5kZXZpY2Vfc3Rh
dGUodWRpZCkgIT0gU2ltdWxhdG9yLkRldmljZVN0YXRlLkJPT1RFRDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignU2ltdWF0b3IgZGV2aWNlIHF1aXQgdW5leHBl
Y3RlZGx5LicpCi0gICAgICAgICAgICAgICAgICAgIF9sb2cud2FybigiRXJyb3IgaW4gY2hlY2tp
bmcgU2ltdWxhdG9yIGJvb3Qgc3RhdHVzLiBXaWxsIHJldHJ5IGluIDEgc2Vjb25kLiIpCi0gICAg
ICAgICAgICAgICAgdGltZS5zbGVlcCgxKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB3
YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZSh1ZGlkLCB3YWl0X3VudGlsX3N0YXRlLCB0aW1l
b3V0X3NlY29uZHM9NjAgKiA1KToKLSAgICAgICAgX2xvZy5kZWJ1Zygnd2FpdGluZyBmb3IgZGV2
aWNlICVzIHRvIGVudGVyIHN0YXRlICVzIHdpdGggdGltZW91dCAlcycsIHVkaWQsIFNpbXVsYXRv
ci5kZXZpY2Vfc3RhdGVfZGVzY3JpcHRpb24od2FpdF91bnRpbF9zdGF0ZSksIHRpbWVvdXRfc2Vj
b25kcykKLSAgICAgICAgd2l0aCB0aW1lb3V0KHNlY29uZHM9dGltZW91dF9zZWNvbmRzKToKLSAg
ICAgICAgICAgIGRldmljZV9zdGF0ZSA9IFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUodWRpZCkKLSAg
ICAgICAgICAgIHdoaWxlIChkZXZpY2Vfc3RhdGUgIT0gd2FpdF91bnRpbF9zdGF0ZSk6Ci0gICAg
ICAgICAgICAgICAgZGV2aWNlX3N0YXRlID0gU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1ZGlkKQot
ICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyBkZXZpY2Ugc3RhdGUgJXMnLCBTaW11bGF0b3Iu
ZGV2aWNlX3N0YXRlX2Rlc2NyaXB0aW9uKGRldmljZV9zdGF0ZSkpCi0gICAgICAgICAgICAgICAg
dGltZS5zbGVlcCgwLjUpCi0KLSAgICAgICAgZW5kX3N0YXRlID0gU2ltdWxhdG9yLmRldmljZV9z
dGF0ZSh1ZGlkKQotICAgICAgICBpZiAoZW5kX3N0YXRlICE9IHdhaXRfdW50aWxfc3RhdGUpOgot
ICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaW1lZCBvdXQgd2FpdGluZyBmb3Igc2lt
dWxhdG9yIGRldmljZSB0byBlbnRlciBzdGF0ZSB7MH07IGN1cnJlbnQgc3RhdGUgaXMgezF9Jy5m
b3JtYXQoU2ltdWxhdG9yLmRldmljZV9zdGF0ZV9kZXNjcmlwdGlvbih3YWl0X3VudGlsX3N0YXRl
KSwgU2ltdWxhdG9yLmRldmljZV9zdGF0ZV9kZXNjcmlwdGlvbihlbmRfc3RhdGUpKSkKLQotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZGV2aWNlX3N0YXRlKHVkaWQpOgotICAgICAgICBkZXZp
Y2VfcGxpc3QgPSBvcy5wYXRoLmpvaW4oU2ltdWxhdG9yLmRldmljZV9kaXJlY3RvcnkodWRpZCks
ICdkZXZpY2UucGxpc3QnKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZGV2aWNlX3Bs
aXN0KToKLSAgICAgICAgICAgIHJldHVybiBTaW11bGF0b3IuRGV2aWNlU3RhdGUuRE9FU19OT1Rf
RVhJU1QKLSAgICAgICAgcmV0dXJuIHBsaXN0bGliLnJlYWRQbGlzdChkZXZpY2VfcGxpc3QpWydz
dGF0ZSddCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGRldmljZV9kaXJlY3RvcnkodWRp
ZCk6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguZXhwYW5kdXNlcihv
cy5wYXRoLmpvaW4oJ34vTGlicmFyeS9EZXZlbG9wZXIvQ29yZVNpbXVsYXRvci9EZXZpY2VzJywg
dWRpZCkpKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBkZWxldGVfZGV2aWNlKHVkaWQp
OgotICAgICAgICBEZXZpY2UuZGVsZXRlKHVkaWQpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAg
ZGVmIHJlc2V0X2RldmljZSh1ZGlkKToKLSAgICAgICAgRGV2aWNlLnJlc2V0KHVkaWQpCi0KLSAg
ICBkZWYgcmVmcmVzaChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJlZnJlc2ggcnVudGlt
ZSBhbmQgZGV2aWNlIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBgYHNpbWN0bCBsaXN0YGAuCi0gICAg
ICAgICIiIgotICAgICAgICBsaW5lcyA9IHNlbGYuX2hvc3QucGxhdGZvcm0ueGNvZGVfc2ltY3Rs
X2xpc3QoKQotICAgICAgICBpZiBub3QgbGluZXM6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAg
ICAgZGV2aWNlX3R5cGVzX2hlYWRlciA9IG5leHQobGluZXMpCi0gICAgICAgIGlmIGRldmljZV90
eXBlc19oZWFkZXIgIT0gJz09IERldmljZSBUeXBlcyA9PSc6Ci0gICAgICAgICAgICByYWlzZSBS
dW50aW1lRXJyb3IoJ0V4cGVjdGVkID09IERldmljZSBUeXBlcyA9PSBoZWFkZXIgYnV0IGdvdDog
Int9IicuZm9ybWF0KGRldmljZV90eXBlc19oZWFkZXIpKQotICAgICAgICBzZWxmLl9wYXJzZV9k
ZXZpY2VfdHlwZXMobGluZXMpCi0KLSAgICBkZWYgX3BhcnNlX2RldmljZV90eXBlcyhzZWxmLCBs
aW5lcyk6Ci0gICAgICAgICIiIgotICAgICAgICBQYXJzZSBkZXZpY2UgdHlwZXMgZnJvbSBgYHNp
bWN0bCBsaXN0YGAuCi0gICAgICAgIDpwYXJhbSBsaW5lczogQSBnZW5lcmF0b3IgZm9yIHRoZSBv
dXRwdXQgbGluZXMgZnJvbSBgYHNpbWN0bCBsaXN0YGAuCi0gICAgICAgIDp0eXBlIGxpbmVzOiBn
ZW5leHByCi0gICAgICAgIDpyZXR1cm46IE5vbmUKLSAgICAgICAgIiIiCi0gICAgICAgIGZvciBs
aW5lIGluIGxpbmVzOgotICAgICAgICAgICAgZGV2aWNlX3R5cGVfbWF0Y2ggPSBzZWxmLmRldmlj
ZV90eXBlX3JlLm1hdGNoKGxpbmUpCi0gICAgICAgICAgICBpZiBub3QgZGV2aWNlX3R5cGVfbWF0
Y2g6Ci0gICAgICAgICAgICAgICAgaWYgbGluZSAhPSAnPT0gUnVudGltZXMgPT0nOgotICAgICAg
ICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0V4cGVjdGVkID09IFJ1bnRpbWVzID09
IGhlYWRlciBidXQgZ290OiAie30iJy5mb3JtYXQobGluZSkpCi0gICAgICAgICAgICAgICAgYnJl
YWsKLSAgICAgICAgICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZShuYW1lPWRldmljZV90eXBl
X21hdGNoLmdyb3VwKCduYW1lJykucnN0cmlwKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWRlbnRpZmllcj1kZXZpY2VfdHlwZV9tYXRjaC5ncm91cCgnaWRlbnRpZmll
cicpKQotICAgICAgICAgICAgc2VsZi5kZXZpY2VfdHlwZXMuYXBwZW5kKGRldmljZV90eXBlKQot
Ci0gICAgICAgIHNlbGYuX3BhcnNlX3J1bnRpbWVzKGxpbmVzKQotCi0gICAgZGVmIF9wYXJzZV9y
dW50aW1lcyhzZWxmLCBsaW5lcyk6Ci0gICAgICAgICIiIgotICAgICAgICBDb250aW51ZSB0byBw
YXJzZSBydW50aW1lcyBmcm9tIGBgc2ltY3RsIGxpc3RgYC4KLSAgICAgICAgOnBhcmFtIGxpbmVz
OiBBIGdlbmVyYXRvciBmb3IgdGhlIG91dHB1dCBsaW5lcyBmcm9tIGBgc2ltY3RsIGxpc3RgYC4K
LSAgICAgICAgOnR5cGUgbGluZXM6IGdlbmV4cHIKLSAgICAgICAgOnJldHVybjogTm9uZQotICAg
ICAgICAiIiIKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBydW50aW1l
X21hdGNoID0gc2VsZi5ydW50aW1lX3JlLm1hdGNoKGxpbmUpCi0gICAgICAgICAgICBpZiBub3Qg
cnVudGltZV9tYXRjaDoKLSAgICAgICAgICAgICAgICBpZiBsaW5lICE9ICc9PSBEZXZpY2VzID09
JzoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFeHBlY3RlZCA9PSBE
ZXZpY2VzID09IGhlYWRlciBidXQgZ290OiAie30iJy5mb3JtYXQobGluZSkpCi0gICAgICAgICAg
ICAgICAgYnJlYWsKLSAgICAgICAgICAgIHZlcnNpb24gPSB0dXBsZShtYXAoaW50LCBydW50aW1l
X21hdGNoLmdyb3VwKCd2ZXJzaW9uJykuc3BsaXQoJy4nKSkpCi0gICAgICAgICAgICBydW50aW1l
ID0gUnVudGltZSh2ZXJzaW9uPXZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyPXJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ2lkZW50aWZpZXInKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZT1ydW50aW1lX21hdGNoLmdyb3VwKCdhdmFp
bGFiaWxpdHknKSBpcyBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW50
ZXJuYWxfcnVudGltZT1ib29sKHJ1bnRpbWVfbWF0Y2guZ3JvdXAoJ2ludGVybmFsJykpKQotICAg
ICAgICAgICAgc2VsZi5ydW50aW1lcy5hcHBlbmQocnVudGltZSkKLSAgICAgICAgc2VsZi5fcGFy
c2VfZGV2aWNlcyhsaW5lcykKLQotICAgIGRlZiBfcGFyc2VfZGV2aWNlcyhzZWxmLCBsaW5lcyk6
Ci0gICAgICAgICIiIgotICAgICAgICBDb250aW51ZSB0byBwYXJzZSBkZXZpY2VzIGZyb20gYGBz
aW1jdGwgbGlzdGBgLgotICAgICAgICA6cGFyYW0gbGluZXM6IEEgZ2VuZXJhdG9yIGZvciB0aGUg
b3V0cHV0IGxpbmVzIGZyb20gYGBzaW1jdGwgbGlzdGBgLgotICAgICAgICA6dHlwZSBsaW5lczog
Z2VuZXhwcgotICAgICAgICA6cmV0dXJuOiBOb25lCi0gICAgICAgICIiIgotICAgICAgICBjdXJy
ZW50X3J1bnRpbWUgPSBOb25lCi0gICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAg
ICAgdmVyc2lvbl9tYXRjaCA9IHNlbGYudmVyc2lvbl9yZS5tYXRjaChsaW5lKQotICAgICAgICAg
ICAgaWYgdmVyc2lvbl9tYXRjaDoKLSAgICAgICAgICAgICAgICB2ZXJzaW9uID0gdHVwbGUobWFw
KGludCwgdmVyc2lvbl9tYXRjaC5ncm91cCgndmVyc2lvbicpLnNwbGl0KCcuJykpKQotICAgICAg
ICAgICAgICAgIGN1cnJlbnRfcnVudGltZSA9IHNlbGYucnVudGltZSh2ZXJzaW9uPXZlcnNpb24s
IGlzX2ludGVybmFsX3J1bnRpbWU9Ym9vbCh2ZXJzaW9uX21hdGNoLmdyb3VwKCdpbnRlcm5hbCcp
KSkKLSAgICAgICAgICAgICAgICBhc3NlcnQgY3VycmVudF9ydW50aW1lCi0gICAgICAgICAgICAg
ICAgY29udGludWUKLQotICAgICAgICAgICAgdW5hdmFpbGFibGVfdmVyc2lvbl9tYXRjaCA9IHNl
bGYudW5hdmFpbGFibGVfdmVyc2lvbl9yZS5tYXRjaChsaW5lKQotICAgICAgICAgICAgaWYgdW5h
dmFpbGFibGVfdmVyc2lvbl9tYXRjaDoKLSAgICAgICAgICAgICAgICBjdXJyZW50X3J1bnRpbWUg
PSBOb25lCi0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgZGV2aWNlX21h
dGNoID0gc2VsZi5kZXZpY2VzX3JlLm1hdGNoKGxpbmUpCi0gICAgICAgICAgICBpZiBub3QgZGV2
aWNlX21hdGNoOgotICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0gJz09IERldmljZSBQYWlycyA9
PSc6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXhwZWN0ZWQgPT0g
RGV2aWNlIFBhaXJzID09IGhlYWRlciBidXQgZ290OiAie30iJy5mb3JtYXQobGluZSkpCi0gICAg
ICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIGN1cnJlbnRfcnVudGltZToKLSAgICAg
ICAgICAgICAgICBkZXZpY2UgPSBEZXZpY2UobmFtZT1kZXZpY2VfbWF0Y2guZ3JvdXAoJ25hbWUn
KS5yc3RyaXAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRpZD1kZXZpY2Vf
bWF0Y2guZ3JvdXAoJ3VkaWQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZh
aWxhYmxlPWRldmljZV9tYXRjaC5ncm91cCgnYXZhaWxhYmlsaXR5JykgaXMgTm9uZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZT1jdXJyZW50X3J1bnRpbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q9c2VsZi5faG9zdCkKLSAgICAgICAgICAg
ICAgICBjdXJyZW50X3J1bnRpbWUuZGV2aWNlcy5hcHBlbmQoZGV2aWNlKQotCi0gICAgZGVmIGRl
dmljZV90eXBlKHNlbGYsIG5hbWU9Tm9uZSwgaWRlbnRpZmllcj1Ob25lKToKLSAgICAgICAgIiIi
Ci0gICAgICAgIDpwYXJhbSBuYW1lOiBUaGUgc2hvcnQgbmFtZSBvZiB0aGUgZGV2aWNlIHR5cGUu
Ci0gICAgICAgIDp0eXBlIG5hbWU6IHN0cgotICAgICAgICA6cGFyYW0gaWRlbnRpZmllcjogVGhl
IENvcmVTaW11bGF0b3IgaWRlbnRpZmllciBvZiB0aGUgZGVzaXJlZCBkZXZpY2UgdHlwZS4KLSAg
ICAgICAgOnR5cGUgaWRlbnRpZmllcjogc3RyCi0gICAgICAgIDpyZXR1cm46IEEgZGV2aWNlIHR5
cGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kL29yIGlkZW50aWZpZXIsIG9yIE5vbmUgaWYg
b25lIGRvZXNuJ3QgZXhpc3QgYXMgc3VjaC4KLSAgICAgICAgOnJ0eXBlOiBEZXZpY2VUeXBlCi0g
ICAgICAgICIiIgotICAgICAgICBmb3IgZGV2aWNlX3R5cGUgaW4gc2VsZi5kZXZpY2VfdHlwZXM6
Ci0gICAgICAgICAgICBpZiBuYW1lIGFuZCBkZXZpY2VfdHlwZS5uYW1lICE9IG5hbWU6Ci0gICAg
ICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGlkZW50aWZpZXIgYW5kIGRldmlj
ZV90eXBlLmlkZW50aWZpZXIgIT0gaWRlbnRpZmllcjoKLSAgICAgICAgICAgICAgICBjb250aW51
ZQotICAgICAgICAgICAgcmV0dXJuIGRldmljZV90eXBlCi0gICAgICAgIHJldHVybiBOb25lCi0K
LSAgICBkZWYgcnVudGltZShzZWxmLCB2ZXJzaW9uPU5vbmUsIGlkZW50aWZpZXI9Tm9uZSwgaXNf
aW50ZXJuYWxfcnVudGltZT1Ob25lKToKLSAgICAgICAgIiIiCi0gICAgICAgIDpwYXJhbSB2ZXJz
aW9uOiBUaGUgaU9TIHZlcnNpb24gb2YgdGhlIGRlc2lyZWQgcnVudGltZS4KLSAgICAgICAgOnR5
cGUgdmVyc2lvbjogdHVwbGUKLSAgICAgICAgOnBhcmFtIGlkZW50aWZpZXI6IFRoZSBDb3JlU2lt
dWxhdG9yIGlkZW50aWZpZXIgb2YgdGhlIGRlc2lyZWQgcnVudGltZS4KLSAgICAgICAgOnR5cGUg
aWRlbnRpZmllcjogc3RyCi0gICAgICAgIDpyZXR1cm46IEEgcnVudGltZSB3aXRoIHRoZSBzcGVj
aWZpZWQgdmVyc2lvbiBhbmQvb3IgaWRlbnRpZmllciwgb3IgTm9uZSBpZiBvbmUgZG9lc24ndCBl
eGlzdCBhcyBzdWNoLgotICAgICAgICA6cnR5cGU6IFJ1bnRpbWUgb3IgTm9uZQotICAgICAgICAi
IiIKLSAgICAgICAgaWYgdmVyc2lvbiBpcyBOb25lIGFuZCBpZGVudGlmaWVyIGlzIE5vbmU6Ci0g
ICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ011c3Qgc3VwcGx5IHZlcnNpb24gYW5kL29yIGlk
ZW50aWZpZXIuJykKLQotICAgICAgICBmb3IgcnVudGltZSBpbiBzZWxmLnJ1bnRpbWVzOgotICAg
ICAgICAgICAgaWYgdmVyc2lvbiBhbmQgcnVudGltZS52ZXJzaW9uICE9IHZlcnNpb246Ci0gICAg
ICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGlzX2ludGVybmFsX3J1bnRpbWUg
YW5kIHJ1bnRpbWUuaXNfaW50ZXJuYWxfcnVudGltZSAhPSBpc19pbnRlcm5hbF9ydW50aW1lOgot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBpZGVudGlmaWVyIGFuZCBy
dW50aW1lLmlkZW50aWZpZXIgIT0gaWRlbnRpZmllcjoKLSAgICAgICAgICAgICAgICBjb250aW51
ZQotICAgICAgICAgICAgcmV0dXJuIHJ1bnRpbWUKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAg
IGRlZiBmaW5kX2RldmljZV9ieV91ZGlkKHNlbGYsIHVkaWQpOgotICAgICAgICAiIiIKLSAgICAg
ICAgOnBhcmFtIHVkaWQ6IFRoZSBVRElEIG9mIHRoZSBkZXZpY2UgdG8gZmluZC4KLSAgICAgICAg
OnR5cGUgdWRpZDogc3RyCi0gICAgICAgIDpyZXR1cm46IFRoZSBgRGV2aWNlYCB3aXRoIHRoZSBz
cGVjaWZpZWQgVURJRC4KLSAgICAgICAgOnJ0eXBlOiBEZXZpY2UKLSAgICAgICAgIiIiCi0gICAg
ICAgIGZvciBkZXZpY2UgaW4gc2VsZi5kZXZpY2VzOgotICAgICAgICAgICAgaWYgZGV2aWNlLnVk
aWQgPT0gdWRpZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlCi0gICAgICAgIHJldHVy
biBOb25lCi0KLSAgICBkZWYgY3VycmVudF9kZXZpY2Uoc2VsZik6Ci0gICAgICAgICMgRklYTUU6
IEZpbmQgdGhlIHNpbXVsYXRvciBkZXZpY2UgdGhhdCB3YXMgYm9vdGVkIGJ5IFNpbXVsYXRvci5h
cHAuIEZvciBub3csIHBpY2sgc29tZSBib290ZWQgc2ltdWxhdG9yIGRldmljZSwgd2hpY2gKLSAg
ICAgICAgIyBtYXkgaGF2ZSBiZWVuIGJvb3RlZCB1c2luZyB0aGUgc2ltY3RsIGNvbW1hbmQgbGlu
ZSB0b29sLgotICAgICAgICBmb3IgZGV2aWNlIGluIHNlbGYuZGV2aWNlczoKLSAgICAgICAgICAg
IGlmIGRldmljZS5zdGF0ZSA9PSBTaW11bGF0b3IuRGV2aWNlU3RhdGUuQk9PVEVEOgotICAgICAg
ICAgICAgICAgIHJldHVybiBkZXZpY2UKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICMgRklY
TUU6IFdlIHNob3VsZCBmaW5kIGFuIGV4aXN0aW5nIGRldmljZSB3aXRoIHJlc3BlY3QgdG8gaXRz
IG5hbWUsIGRldmljZSB0eXBlIGFuZCBydW50aW1lLgotICAgIGRlZiBkZXZpY2Uoc2VsZiwgbmFt
ZT1Ob25lLCBydW50aW1lPU5vbmUsIHNob3VsZF9pZ25vcmVfdW5hdmFpbGFibGVfZGV2aWNlcz1G
YWxzZSk6Ci0gICAgICAgICIiIgotICAgICAgICA6cGFyYW0gbmFtZTogVGhlIG5hbWUgb2YgdGhl
IGRlc2lyZWQgZGV2aWNlLgotICAgICAgICA6dHlwZSBuYW1lOiBzdHIKLSAgICAgICAgOnBhcmFt
IHJ1bnRpbWU6IFRoZSBydW50aW1lIG9mIHRoZSBkZXNpcmVkIGRldmljZS4KLSAgICAgICAgOnR5
cGUgcnVudGltZTogUnVudGltZQotICAgICAgICA6cmV0dXJuOiBBIGRldmljZSB3aXRoIHRoZSBz
cGVjaWZpZWQgbmFtZSBhbmQvb3IgcnVudGltZSwgb3IgTm9uZSBpZiBvbmUgZG9lc24ndCBleGlz
dCBhcyBzdWNoCi0gICAgICAgIDpydHlwZTogRGV2aWNlIG9yIE5vbmUKLSAgICAgICAgIiIiCi0g
ICAgICAgIGlmIG5hbWUgaXMgTm9uZSBhbmQgcnVudGltZSBpcyBOb25lOgotICAgICAgICAgICAg
cmFpc2UgVHlwZUVycm9yKCdNdXN0IHN1cHBseSBuYW1lIGFuZC9vciBydW50aW1lLicpCi0KLSAg
ICAgICAgZm9yIGRldmljZSBpbiBzZWxmLmRldmljZXM6Ci0gICAgICAgICAgICBpZiBzaG91bGRf
aWdub3JlX3VuYXZhaWxhYmxlX2RldmljZXMgYW5kIG5vdCBkZXZpY2UuYXZhaWxhYmxlOgotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBuYW1lIGFuZCBkZXZpY2UubmFt
ZSAhPSBuYW1lOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBydW50
aW1lIGFuZCBkZXZpY2UucnVudGltZSAhPSBydW50aW1lOgotICAgICAgICAgICAgICAgIGNvbnRp
bnVlCi0gICAgICAgICAgICByZXR1cm4gZGV2aWNlCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAg
ICBAcHJvcGVydHkKLSAgICBkZWYgYXZhaWxhYmxlX3J1bnRpbWVzKHNlbGYpOgotICAgICAgICAi
IiIKLSAgICAgICAgOnJldHVybjogQW4gaXRlcmF0b3Igb2YgYWxsIGF2YWlsYWJsZSBydW50aW1l
cy4KLSAgICAgICAgOnJ0eXBlOiBpdGVyCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gaXRl
cnRvb2xzLmlmaWx0ZXIobGFtYmRhIHJ1bnRpbWU6IHJ1bnRpbWUuYXZhaWxhYmxlLCBzZWxmLnJ1
bnRpbWVzKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIGRldmljZXMoc2VsZik6Ci0gICAgICAg
ICIiIgotICAgICAgICA6cmV0dXJuOiBBbiBpdGVyYXRvciBvZiBhbGwgZGV2aWNlcyBmcm9tIGFs
bCBydW50aW1lcy4KLSAgICAgICAgOnJ0eXBlOiBpdGVyCi0gICAgICAgICIiIgotICAgICAgICBy
ZXR1cm4gaXRlcnRvb2xzLmNoYWluKCpbcnVudGltZS5kZXZpY2VzIGZvciBydW50aW1lIGluIHNl
bGYucnVudGltZXNdKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIGxhdGVzdF9hdmFpbGFibGVf
cnVudGltZShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIDpyZXR1cm46IFJldHVybnMgYSBS
dW50aW1lIG9iamVjdCB3aXRoIHRoZSBoaWdoZXN0IHZlcnNpb24uCi0gICAgICAgIDpydHlwZTog
UnVudGltZSBvciBOb25lCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5ydW50aW1l
czoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJldHVybiBzb3J0ZWQoc2VsZi5h
dmFpbGFibGVfcnVudGltZXMsIGtleT1sYW1iZGEgcnVudGltZTogcnVudGltZS52ZXJzaW9uLCBy
ZXZlcnNlPVRydWUpWzBdCi0KLSAgICBkZWYgbG9va3VwX29yX2NyZWF0ZV9kZXZpY2Uoc2VsZiwg
bmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUpOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJu
cyBhbiBhdmFpbGFibGUgaU9TIFNpbXVsYXRvciBkZXZpY2UgZm9yIHRlc3RpbmcuCi0KLSAgICAg
ICAgVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhIG5ldyBzaW11bGF0b3IgZGV2aWNlIHdpdGgg
dGhlIHNwZWNpZmllZCBuYW1lLAotICAgICAgICBkZXZpY2UgdHlwZSBhbmQgcnVudGltZSBpZiBv
bmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KLQotICAgICAgICA6cGFyYW0gbmFtZTogVGhlIG5h
bWUgb2YgdGhlIHNpbXVsYXRvciBkZXZpY2UgdG8gbG9va3VwIG9yIGNyZWF0ZS4KLSAgICAgICAg
OnR5cGUgbmFtZTogc3RyCi0gICAgICAgIDpwYXJhbSBkZXZpY2VfdHlwZTogVGhlIENvcmVTaW11
bGF0b3IgZGV2aWNlIHR5cGUuCi0gICAgICAgIDp0eXBlIGRldmljZV90eXBlOiBEZXZpY2VUeXBl
Ci0gICAgICAgIDpwYXJhbSBydW50aW1lOiBUaGUgQ29yZVNpbXVsYXRvciBydW50aW1lLgotICAg
ICAgICA6dHlwZSBydW50aW1lOiBSdW50aW1lCi0gICAgICAgIDpyZXR1cm46IEEgZGljdGlvbmFy
eSBkZXNjcmliaW5nIHRoZSBkZXZpY2UuCi0gICAgICAgIDpydHlwZTogRGV2aWNlCi0gICAgICAg
ICIiIgotICAgICAgICBhc3NlcnQocnVudGltZS5hdmFpbGFibGUpCi0gICAgICAgIHRlc3Rpbmdf
ZGV2aWNlID0gc2VsZi5kZXZpY2UobmFtZT1uYW1lLCBydW50aW1lPXJ1bnRpbWUsIHNob3VsZF9p
Z25vcmVfdW5hdmFpbGFibGVfZGV2aWNlcz1UcnVlKQotICAgICAgICBpZiB0ZXN0aW5nX2Rldmlj
ZToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ2xvb2t1cF9vcl9jcmVhdGVfZGV2aWNlICVzICVz
ICVzIGZvdW5kICVzJywgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUsIHRlc3RpbmdfZGV2aWNl
Lm5hbWUpCi0gICAgICAgICAgICByZXR1cm4gdGVzdGluZ19kZXZpY2UKLSAgICAgICAgdGVzdGlu
Z19kZXZpY2UgPSBEZXZpY2UuY3JlYXRlKG5hbWUsIGRldmljZV90eXBlLCBydW50aW1lKQotICAg
ICAgICBfbG9nLmRlYnVnKCdsb29rdXBfb3JfY3JlYXRlX2RldmljZSAlcyAlcyAlcyBjcmVhdGVk
ICVzJywgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUsIHRlc3RpbmdfZGV2aWNlLm5hbWUpCi0g
ICAgICAgIGFzc2VydCh0ZXN0aW5nX2RldmljZS5hdmFpbGFibGUpCi0gICAgICAgIHJldHVybiB0
ZXN0aW5nX2RldmljZQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4g
JzxpT1MgU2ltdWxhdG9yOiB7bnVtX3J1bnRpbWVzfSBydW50aW1lcywge251bV9kZXZpY2VfdHlw
ZXN9IGRldmljZSB0eXBlcz4nLmZvcm1hdCgKLSAgICAgICAgICAgIG51bV9ydW50aW1lcz1sZW4o
c2VsZi5ydW50aW1lcyksCi0gICAgICAgICAgICBudW1fZGV2aWNlX3R5cGVzPWxlbihzZWxmLmRl
dmljZV90eXBlcykpCi0KLSAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgZGVzY3JpcHRp
b24gPSBbJ2lPUyBTaW11bGF0b3I6J10KLSAgICAgICAgZGVzY3JpcHRpb24gKz0gbWFwKHN0ciwg
c2VsZi5ydW50aW1lcykKLSAgICAgICAgZGVzY3JpcHRpb24gKz0gbWFwKHN0ciwgc2VsZi5kZXZp
Y2VfdHlwZXMpCi0gICAgICAgIGRlc2NyaXB0aW9uICs9IG1hcChzdHIsIHNlbGYuZGV2aWNlcykK
LSAgICAgICAgcmV0dXJuICdcbicuam9pbihkZXNjcmlwdGlvbikKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAyMTI3MjkpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAt
MSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjIsMTY4
ICsxNjIsNiBAQCBjbGFzcyBSdW50aW1lKG9iamVjdCk6CiAgICAgICAgICAgICBudW1fZGV2aWNl
cz1sZW4oc2VsZi5kZXZpY2VzKSkKIAogCi1jbGFzcyBEZXZpY2Uob2JqZWN0KToKLSAgICAiIiIK
LSAgICBSZXByZXNlbnRzIGEgQ29yZVNpbXVsYXRvciBkZXZpY2UgdW5kZXJuZWF0aCBhIHJ1bnRp
bWUKLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1ZGlkLCBhdmFpbGFi
bGUsIHJ1bnRpbWUsIGhvc3QpOgotICAgICAgICAiIiIKLSAgICAgICAgOnBhcmFtIG5hbWU6IFRo
ZSBkZXZpY2UgbmFtZQotICAgICAgICA6dHlwZSBuYW1lOiBzdHIKLSAgICAgICAgOnBhcmFtIHVk
aWQ6IFRoZSBkZXZpY2UgVURJRCAoYSBVVUlEIHN0cmluZykKLSAgICAgICAgOnR5cGUgdWRpZDog
c3RyCi0gICAgICAgIDpwYXJhbSBhdmFpbGFibGU6IFdoZXRoZXIgdGhlIGRldmljZSBpcyBhdmFp
bGFibGUgZm9yIHVzZS4KLSAgICAgICAgOnR5cGUgYXZhaWxhYmxlOiBib29sCi0gICAgICAgIDpw
YXJhbSBydW50aW1lOiBUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHRoYXQgaG9zdHMgdGhpcyBk
ZXZpY2UKLSAgICAgICAgOnR5cGUgcnVudGltZTogUnVudGltZQotICAgICAgICA6cGFyYW0gaG9z
dDogVGhlIGhvc3Qgd2hpY2ggY2FuIHJ1biBjb21tYW5kIGxpbmUgY29tbWFuZHMKLSAgICAgICAg
OnR5cGUgaG9zdDogSG9zdAotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5faG9zdCA9IGhvc3QK
LSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBzZWxmLnVkaWQgPSB1ZGlkCi0gICAg
ICAgIHNlbGYuYXZhaWxhYmxlID0gYXZhaWxhYmxlCi0gICAgICAgIHNlbGYucnVudGltZSA9IHJ1
bnRpbWUKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBzdGF0ZShzZWxmKToKLSAgICAgICAgIiIi
Ci0gICAgICAgIDpyZXR1cm5zOiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGV2aWNlLgotICAg
ICAgICA6cnR5cGU6IFNpbXVsYXRvci5EZXZpY2VTdGF0ZQotICAgICAgICAiIiIKLSAgICAgICAg
cmV0dXJuIFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUoc2VsZi51ZGlkKQotCi0gICAgQHByb3BlcnR5
Ci0gICAgZGVmIHBhdGgoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICA6cmV0dXJuczogVGhl
IGZpbGVzeXN0ZW0gcGF0aCB0aGF0IGNvbnRhaW5zIHRoZSBzaW11bGF0b3IgZGV2aWNlJ3MgZGF0
YS4KLSAgICAgICAgOnJ0eXBlOiBzdHIKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBTaW11
bGF0b3IuZGV2aWNlX2RpcmVjdG9yeShzZWxmLnVkaWQpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgY3JlYXRlKGNscywgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUpOgotICAgICAgICAi
IiIKLSAgICAgICAgQ3JlYXRlIGEgbmV3IENvcmVTaW11bGF0b3IgZGV2aWNlLgotICAgICAgICA6
cGFyYW0gbmFtZTogVGhlIG5hbWUgb2YgdGhlIGRldmljZS4KLSAgICAgICAgOnR5cGUgbmFtZTog
c3RyCi0gICAgICAgIDpwYXJhbSBkZXZpY2VfdHlwZTogVGhlIENvcmVTaW11bGF0b3J0IGRldmlj
ZSB0eXBlLgotICAgICAgICA6dHlwZSBkZXZpY2VfdHlwZTogRGV2aWNlVHlwZQotICAgICAgICA6
cGFyYW0gcnVudGltZTogIFRoZSBDb3JlU2ltdWFsdG9yIHJ1bnRpbWUuCi0gICAgICAgIDp0eXBl
IHJ1bnRpbWU6IFJ1bnRpbWUKLSAgICAgICAgOnJldHVybjogVGhlIG5ldyBkZXZpY2Ugb3IgcmFp
c2VzIGEgQ2FsbGVkUHJvY2Vzc0Vycm9yIGlmIGBgc2ltY3RsIGNyZWF0ZWBgIGZhaWxlZC4KLSAg
ICAgICAgOnJ0eXBlOiBEZXZpY2UKLSAgICAgICAgIiIiCi0gICAgICAgIGRldmljZV91ZGlkID0g
c3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd4Y3J1bicsICdzaW1jdGwnLCAnY3JlYXRlJywgbmFt
ZSwgZGV2aWNlX3R5cGUuaWRlbnRpZmllciwgcnVudGltZS5pZGVudGlmaWVyXSkucnN0cmlwKCkK
LSAgICAgICAgX2xvZy5kZWJ1ZygnInhjcnVuIHNpbWN0bCBjcmVhdGUgJXMgJXMgJXMiIHJldHVy
bmVkICVzJywgbmFtZSwgZGV2aWNlX3R5cGUuaWRlbnRpZmllciwgcnVudGltZS5pZGVudGlmaWVy
LCBkZXZpY2VfdWRpZCkKLSAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2lu
X3N0YXRlKGRldmljZV91ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hVVERPV04pCi0gICAg
ICAgIHJldHVybiBTaW11bGF0b3IoKS5maW5kX2RldmljZV9ieV91ZGlkKGRldmljZV91ZGlkKQot
Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHNodXRkb3duKGNscywgdWRpZCk6Ci0gICAgICAg
ICIiIgotICAgICAgICBTaHV0IGRvd24gdGhlIGdpdmVuIENvcmVTaW11bGF0b3IgZGV2aWNlLgot
ICAgICAgICA6cGFyYW0gdWRpZDogVGhlIHVkaWQgb2YgdGhlIGRldmljZS4KLSAgICAgICAgOnR5
cGUgdWRpZDogc3RyCi0gICAgICAgICIiIgotICAgICAgICBkZXZpY2Vfc3RhdGUgPSBTaW11bGF0
b3IuZGV2aWNlX3N0YXRlKHVkaWQpCi0gICAgICAgIGlmIGRldmljZV9zdGF0ZSA9PSBTaW11bGF0
b3IuRGV2aWNlU3RhdGUuQk9PVElORyBvciBkZXZpY2Vfc3RhdGUgPT0gU2ltdWxhdG9yLkRldmlj
ZVN0YXRlLkJPT1RFRDoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ3hjcnVuIHNpbWN0bCBzaHV0
ZG93biAlcycsIHVkaWQpCi0gICAgICAgICAgICAjIERvbid0IHRocm93IG9uIGVycm9yLiBEZXZp
Y2Ugc2h1dGRvd24gc2VlbXMgdG8gYmUgcmFjeSB3aXRoIFNpbXVsYXRvciBhcHAga2lsbGluZy4K
LSAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbJ3hjcnVuJywgJ3NpbWN0bCcsICdzaHV0ZG93
bicsIHVkaWRdKQotCi0gICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19pbl9z
dGF0ZSh1ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hVVERPV04pCi0KLSAgICBAY2xhc3Nt
ZXRob2QKLSAgICBkZWYgZGVsZXRlKGNscywgdWRpZCk6Ci0gICAgICAgICIiIgotICAgICAgICBE
ZWxldGUgdGhlIGdpdmVuIENvcmVTaW11bGF0b3IgZGV2aWNlLgotICAgICAgICA6cGFyYW0gdWRp
ZDogVGhlIHVkaWQgb2YgdGhlIGRldmljZS4KLSAgICAgICAgOnR5cGUgdWRpZDogc3RyCi0gICAg
ICAgICIiIgotICAgICAgICBEZXZpY2Uuc2h1dGRvd24odWRpZCkKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygneGNydW4gc2ltY3RsIGRlbGV0ZSAlcycsIHVkaWQpCi0gICAg
ICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWyd4Y3J1bicsICdzaW1jdGwnLCAnZGVsZXRl
JywgdWRpZF0pCi0gICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoK
LSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignInhjcnVuIHNpbWN0bCBkZWxldGUiIGZh
aWxlZDogZGV2aWNlIHN0YXRlIGlzIHt9Jy5mb3JtYXQoU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1
ZGlkKSkpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcmVzZXQoY2xzLCB1ZGlkKToKLSAg
ICAgICAgIiIiCi0gICAgICAgIFJlc2V0IHRoZSBnaXZlbiBDb3JlU2ltdWxhdG9yIGRldmljZS4K
LSAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2UuCi0gICAgICAgIDp0
eXBlIHVkaWQ6IHN0cgotICAgICAgICAiIiIKLSAgICAgICAgRGV2aWNlLnNodXRkb3duKHVkaWQp
Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ3hjcnVuIHNpbWN0bCBlcmFz
ZSAlcycsIHVkaWQpCi0gICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWyd4Y3J1bics
ICdzaW1jdGwnLCAnZXJhc2UnLCB1ZGlkXSkKLSAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2Fs
bGVkUHJvY2Vzc0Vycm9yOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCcieGNydW4g
c2ltY3RsIGVyYXNlIiBmYWlsZWQ6IGRldmljZSBzdGF0ZSBpcyB7fScuZm9ybWF0KFNpbXVsYXRv
ci5kZXZpY2Vfc3RhdGUodWRpZCkpKQotCi0gICAgZGVmIGluc3RhbGxfYXBwKHNlbGYsIGFwcF9w
YXRoLCBlbnY9Tm9uZSk6Ci0gICAgICAgICMgRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciA8cmRhcjovL3Byb2JsZW0vMzAyNzM5NzM+LCBSYWNleSBmYWlsdXJlIG9mIHNpbWN0bCBpbnN0
YWxsLgotICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoMyk6Ci0gICAgICAgICAgICBpZiBzZWxmLl9o
b3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICdpbnN0YWxsJywg
c2VsZi51ZGlkLCBhcHBfcGF0aF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSk6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYnVu
ZGxlX2lkID0gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoWwotICAgICAgICAgICAg
ICAgICAgICAnL3Vzci9saWJleGVjL1BsaXN0QnVkZHknLAotICAgICAgICAgICAgICAgICAgICAn
LWMnLAotICAgICAgICAgICAgICAgICAgICAnUHJpbnQgQ0ZCdW5kbGVJZGVudGlmaWVyJywKLSAg
ICAgICAgICAgICAgICAgICAgc2VsZi5faG9zdC5maWxlc3lzdGVtLmpvaW4oYXBwX3BhdGgsICdJ
bmZvLnBsaXN0JyksCi0gICAgICAgICAgICAgICAgXSkucnN0cmlwKCkKLSAgICAgICAgICAgICAg
ICBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5sYXVuY2hfYXBwKGJ1bmRs
ZV9pZCwgW10sIGVudj1lbnYsIGF0dGVtcHRzPTEpKQotICAgICAgICAgICAgICAgIHJldHVybiBU
cnVlCi0gICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgotICAgICAgICAgICAgICAgIHBh
c3MKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgbGF1bmNoX2FwcChzZWxmLCBidW5k
bGVfaWQsIGFyZ3MsIGVudj1Ob25lLCBhdHRlbXB0cz0zKToKLSAgICAgICAgZW52aXJvbm1lbnRf
dG9fdXNlID0ge30KLSAgICAgICAgU0lNQ1RMX0VOVl9QUkVGSVggPSAnU0lNQ1RMX0NISUxEXycK
LSAgICAgICAgZm9yIHZhbHVlIGluIChlbnYgb3Ige30pOgotICAgICAgICAgICAgaWYgbm90IHZh
bHVlLnN0YXJ0c3dpdGgoU0lNQ1RMX0VOVl9QUkVGSVgpOgotICAgICAgICAgICAgICAgIGVudmly
b25tZW50X3RvX3VzZVtTSU1DVExfRU5WX1BSRUZJWCArIHZhbHVlXSA9IGVudlt2YWx1ZV0KLSAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW52aXJvbm1lbnRfdG9fdXNlW3ZhbHVl
XSA9IGVudlt2YWx1ZV0KLQotICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBm
b3IgPHJkYXI6Ly9wcm9ibGVtLzMwMTcyNDUzPi4KLSAgICAgICAgZGVmIF9sb2dfZGVidWdfZXJy
b3IoZXJyb3IpOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZyhlcnJvci5tZXNzYWdlX3dpdGhfb3V0
cHV0KCkpCi0KLSAgICAgICAgb3V0cHV0ID0gTm9uZQotICAgICAgICBmb3IgeCBpbiB4cmFuZ2Uo
YXR0ZW1wdHMpOgotICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5faG9zdC5leGVjdXRpdmUucnVu
X2NvbW1hbmQoCi0gICAgICAgICAgICAgICAgWyd4Y3J1bicsICdzaW1jdGwnLCAnbGF1bmNoJywg
c2VsZi51ZGlkLCBidW5kbGVfaWRdICsgYXJncywKLSAgICAgICAgICAgICAgICBlbnY9ZW52aXJv
bm1lbnRfdG9fdXNlLAotICAgICAgICAgICAgICAgIGVycm9yX2hhbmRsZXI9X2xvZ19kZWJ1Z19l
cnJvciwKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocicoP1A8
YnVuZGxlPlteOl0rKTogKD9QPHBpZD5cZCspXG4nLCBvdXRwdXQpCi0gICAgICAgICAgICBpZiBt
YXRjaDoKLSAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgIGlmIG5vdCBtYXRjaCBvciBt
YXRjaC5ncm91cCgnYnVuZGxlJykgIT0gYnVuZGxlX2lkOgotICAgICAgICAgICAgcmFpc2UgUnVu
dGltZUVycm9yKCdGYWlsZWQgdG8gZmluZCBwcm9jZXNzIGlkIGZvciB7fToge30nLmZvcm1hdChi
dW5kbGVfaWQsIG91dHB1dCkpCi0gICAgICAgIHJldHVybiBpbnQobWF0Y2guZ3JvdXAoJ3BpZCcp
KQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBzZWxmLnVk
aWQgPT0gb3RoZXIudWRpZAotCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAg
IHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6
Ci0gICAgICAgIHJldHVybiAnPERldmljZSAie25hbWV9Ijoge3VkaWR9LiBTdGF0ZToge3N0YXRl
fS4gUnVudGltZToge3J1bnRpbWV9LCBBdmFpbGFibGU6IHthdmFpbGFibGV9PicuZm9ybWF0KAot
ICAgICAgICAgICAgbmFtZT1zZWxmLm5hbWUsCi0gICAgICAgICAgICB1ZGlkPXNlbGYudWRpZCwK
LSAgICAgICAgICAgIHN0YXRlPXNlbGYuc3RhdGUsCi0gICAgICAgICAgICBhdmFpbGFibGU9c2Vs
Zi5hdmFpbGFibGUsCi0gICAgICAgICAgICBydW50aW1lPXNlbGYucnVudGltZS5pZGVudGlmaWVy
KQotCi0KICMgRklYTUU6IFRoaXMgY2xhc3MgaXMgZnJhZ2lsZSBiZWNhdXNlIGl0IHBhcnNlcyB0
aGUgb3V0cHV0IG9mIHRoZSBzaW1jdGwgY29tbWFuZCBsaW5lIHV0aWxpdHksIHdoaWNoIG1heSBj
aGFuZ2UuCiAjICAgICAgICBXZSBzaG91bGQgZmluZCBhIGJldHRlciB3YXkgdG8gcXVlcnkgZm9y
IHNpbXVsYXRvciBkZXZpY2Ugc3RhdGUgYW5kIGNhcGFiaWxpdGllcy4gTWF5YmUgdGFrZSBhIHNp
bWlsaWFyCiAjICAgICAgICBhcHByb2FjaCBhcyBpbiB3ZWJraXRkaXJzLnBtIGFuZCB1dGlsaXpl
IHRoZSBwYXJzZWQgb3V0cHV0IGZyb20gdGhlIGRldmljZS5wbGlzdCBmaWxlcyBpbiB0aGUgc3Vi
LQpAQCAtMzQ0LDggKzE4MiwxNCBAQCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToKICAgICAgICAg
J1xzKig/UDxuYW1lPlteKF0rIClcKCg/UDx1ZGlkPlteKV0rKVwpIFwoKD9QPHN0YXRlPlteKV0r
KVwpKCBcKCg/UDxhdmFpbGFiaWxpdHk+W14pXSspXCkpPycpCiAKICAgICBfbWFuYWdlZF9kZXZp
Y2VzID0ge30KKyAgICBEZXZpY2UgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9z
dD1Ob25lKToKKyAgICAgICAgIyBGSVhNRTogVGhpcyBjaXJjdWxhciBpbXBvcnQgc2hvdWxkIGJl
IHJlc29sdmVkLgorICAgICAgICBpZiBub3QgU2ltdWxhdG9yLkRldmljZToKKyAgICAgICAgICAg
IGZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdGVkX2RldmljZSBpbXBvcnQgU2ltdWxhdGVkRGV2
aWNlCisgICAgICAgICAgICBTaW11bGF0b3IuRGV2aWNlID0gU2ltdWxhdGVkRGV2aWNlCisKICAg
ICAgICAgc2VsZi5faG9zdCA9IGhvc3Qgb3IgSG9zdCgpCiAgICAgICAgIHNlbGYucnVudGltZXMg
PSBbXQogICAgICAgICBzZWxmLmRldmljZV90eXBlcyA9IFtdCkBAIC00MzgsMTEgKzI4MiwxMSBA
QCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYg
ZGVsZXRlX2RldmljZSh1ZGlkKToKLSAgICAgICAgRGV2aWNlLmRlbGV0ZSh1ZGlkKQorICAgICAg
ICBTaW11bGF0b3IuRGV2aWNlLmRlbGV0ZSh1ZGlkKQogCiAgICAgQHN0YXRpY21ldGhvZAogICAg
IGRlZiByZXNldF9kZXZpY2UodWRpZCk6Ci0gICAgICAgIERldmljZS5yZXNldCh1ZGlkKQorICAg
ICAgICBTaW11bGF0b3IuRGV2aWNlLnJlc2V0KHVkaWQpCiAKICAgICBkZWYgcmVmcmVzaChzZWxm
KToKICAgICAgICAgIiIiCkBAIC01MjMsNyArMzY3LDcgQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVj
dCk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXhwZWN0ZWQgPT0g
RGV2aWNlIFBhaXJzID09IGhlYWRlciBidXQgZ290OiAie30iJy5mb3JtYXQobGluZSkpCiAgICAg
ICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGlmIGN1cnJlbnRfcnVudGltZToKLSAgICAg
ICAgICAgICAgICBkZXZpY2UgPSBEZXZpY2UobmFtZT1kZXZpY2VfbWF0Y2guZ3JvdXAoJ25hbWUn
KS5yc3RyaXAoKSwKKyAgICAgICAgICAgICAgICBkZXZpY2UgPSBTaW11bGF0b3IuRGV2aWNlKG5h
bWU9ZGV2aWNlX21hdGNoLmdyb3VwKCduYW1lJykucnN0cmlwKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVkaWQ9ZGV2aWNlX21hdGNoLmdyb3VwKCd1ZGlkJyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZT1kZXZpY2VfbWF0Y2guZ3JvdXAoJ2F2
YWlsYWJpbGl0eScpIGlzIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1
bnRpbWU9Y3VycmVudF9ydW50aW1lLApAQCAtNjU5LDcgKzUwMyw3IEBAIGNsYXNzIFNpbXVsYXRv
cihvYmplY3QpOgogICAgICAgICBpZiB0ZXN0aW5nX2RldmljZToKICAgICAgICAgICAgIF9sb2cu
ZGVidWcoJ2xvb2t1cF9vcl9jcmVhdGVfZGV2aWNlICVzICVzICVzIGZvdW5kICVzJywgbmFtZSwg
ZGV2aWNlX3R5cGUsIHJ1bnRpbWUsIHRlc3RpbmdfZGV2aWNlLm5hbWUpCiAgICAgICAgICAgICBy
ZXR1cm4gdGVzdGluZ19kZXZpY2UKLSAgICAgICAgdGVzdGluZ19kZXZpY2UgPSBEZXZpY2UuY3Jl
YXRlKG5hbWUsIGRldmljZV90eXBlLCBydW50aW1lKQorICAgICAgICB0ZXN0aW5nX2RldmljZSA9
IFNpbXVsYXRvci5EZXZpY2UuY3JlYXRlKG5hbWUsIGRldmljZV90eXBlLCBydW50aW1lKQogICAg
ICAgICBfbG9nLmRlYnVnKCdsb29rdXBfb3JfY3JlYXRlX2RldmljZSAlcyAlcyAlcyBjcmVhdGVk
ICVzJywgbmFtZSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUsIHRlc3RpbmdfZGV2aWNlLm5hbWUpCiAg
ICAgICAgIGFzc2VydCh0ZXN0aW5nX2RldmljZS5hdmFpbGFibGUpCiAgICAgICAgIHJldHVybiB0
ZXN0aW5nX2RldmljZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>