<?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>47264</bug_id>
          
          <creation_ts>2010-10-06 07:58:17 -0700</creation_ts>
          <short_desc>Introduce the device element as an experimental feature</short_desc>
          <delta_ts>2011-04-15 06:27:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>53672</dependson>
          <blocked>47265</blocked>
    
    <blocked>53264</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Adam Bergkvist">adam.bergkvist</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>anand.1.patil</cc>
    
    <cc>andreip</cc>
    
    <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>hans</cc>
    
    <cc>jknotten</cc>
    
    <cc>joone</cc>
    
    <cc>koivisto</cc>
    
    <cc>leandrogracia</cc>
    
    <cc>peter</cc>
    
    <cc>satish</cc>
    
    <cc>sjl</cc>
    
    <cc>vprajan</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>290294</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2010-10-06 07:58:17 -0700</bug_when>
    <thetext>We have experimented with the device element to enable audio and video capture in the browser. Even though the specification is in an early stage, our intention is to contribute as much as possible.

http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#devices</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341289</commentid>
    <comment_count>1</comment_count>
      <attachid>80411</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-01-27 20:31:10 -0800</bug_when>
    <thetext>Created attachment 80411
Proposed patch

Implementation of the device element without any platform specific parts (nothing added to the build systems). The patch contains a few lines of code which has been commented out to show how it ties together with the Stream API (see https://bugs.webkit.org/show_bug.cgi?id=47265). A proposed GTK implementation is available as a patch to https://bugs.webkit.org/show_bug.cgi?id=53264.



It&apos;s currently not possible to build without --device-element since the bindings generator, regardless of feature guards, adds includes of JSHTMLDeviceElement.h (in e.g. JSDOMWindow.cpp) which is not generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341293</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-27 20:43:49 -0800</bug_when>
    <thetext>Attachment 80411 did not build on chromium:
Build output: http://queues.webkit.org/results/7515405</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341296</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-27 20:51:57 -0800</bug_when>
    <thetext>Attachment 80411 did not build on qt:
Build output: http://queues.webkit.org/results/7549389</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341303</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-27 21:11:03 -0800</bug_when>
    <thetext>Attachment 80411 did not build on win:
Build output: http://queues.webkit.org/results/7524335</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341306</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-27 21:20:45 -0800</bug_when>
    <thetext>Attachment 80411 did not build on gtk:
Build output: http://queues.webkit.org/results/7581375</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341314</commentid>
    <comment_count>6</comment_count>
      <attachid>80411</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-27 21:59:32 -0800</bug_when>
    <thetext>Comment on attachment 80411
Proposed patch

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

r- for build failures and changing the parser without adding a test.

&gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:897
&gt; +#if ENABLE(DEVICE_ELEMENT)
&gt; +        || token.name() == deviceTag
&gt; +#endif

HTML parsing should not be conditional on which features are enabled.  If this line of could should be here, it should be here unconditionally and we should have parser test that demonstrates this change.

&gt; Source/WebCore/platform/device/StreamDeviceManager.cpp:38
&gt; +#if 0

#if 0 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341483</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-01-28 09:19:32 -0800</bug_when>
    <thetext>(In reply to comment #6)

&gt; HTML parsing should not be conditional on which features are enabled.  If this line of could should be here, it should be here unconditionally and we should have parser test that demonstrates this change.

Is it possible to remove the end tag requirement without touching the parser code, like you could with the old parser? I guess we still want the device element to be feature guarded?

&gt; #if 0 ?

 38 #if 0
 39 #else
 40 #define StreamDeviceManagerPrivateClassName NullStreamDeviceManagerPrivate
 41 #endif 

The &quot;if 0&quot; was intended has a hint to where platform specific code should go. That line is overwritten when you apply the GTK-specific patch (see https://bugs.webkit.org/show_bug.cgi?id=53264). In this case it forces the usage of the fallback class NullStreamDeviceManagerPrivate. Perhaps it would be better to just use a single #define.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341577</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-28 11:42:07 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; 
&gt; &gt; HTML parsing should not be conditional on which features are enabled.  If this line of could should be here, it should be here unconditionally and we should have parser test that demonstrates this change.
&gt; 
&gt; Is it possible to remove the end tag requirement without touching the parser code, like you could with the old parser? I guess we still want the device element to be feature guarded?

Does the HTML5 specification mention the device element when describing the parsing algorithm?  Our parsing algorithm matches the HTML5 spec exactly.  If the HTML5 parsing algorithm says the device element should be in this list, then it should be there unconditionally.  If it doesn&apos;t say that the device element should be in this list, then it should not be there unconditionally.  In no case should HTML parsing depend on which features are enabled.

&gt; &gt; #if 0 ?
&gt; 
&gt;  38 #if 0
&gt;  39 #else
&gt;  40 #define StreamDeviceManagerPrivateClassName NullStreamDeviceManagerPrivate
&gt;  41 #endif 
&gt; 
&gt; The &quot;if 0&quot; was intended has a hint to where platform specific code should go. That line is overwritten when you apply the GTK-specific patch (see https://bugs.webkit.org/show_bug.cgi?id=53264). In this case it forces the usage of the fallback class NullStreamDeviceManagerPrivate. Perhaps it would be better to just use a single #define.

That&apos;s fine, but we shouldn&apos;t have &quot;#if 0&quot; in the code.  IMHO, a FIXME comment is a better way of indicating that some port-specific logics goes here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342942</commentid>
    <comment_count>9</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2011-01-31 17:47:04 -0800</bug_when>
    <thetext>I have opened a thread to discuss the design and details of this implementation.

Please take a look to https://lists.webkit.org/pipermail/webkit-dev/2011-January/015822.html .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343634</commentid>
    <comment_count>10</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-02-01 16:08:34 -0800</bug_when>
    <thetext>A few more comments:

&gt;      for (int i = ((int) m_listEntries.size()) - 1; i &gt;= 0; i--) {

Please do not use C-style casts.

&gt; for (j = ((int) otherSelectedEntries.size()) - 1; j &gt;= 0; j--) 

ditto

&gt; void HTMLDeviceElement::defaultEventHandler(Event* evt)
&gt;  {
&gt;     if (evt-&gt;type() == eventNames().DOMActivateEvent) {
&gt;         runDialog();

...

&gt; void HTMLDeviceElement::runDialog()
&gt; {

(....)

&gt;     m_deviceList = deviceManagerProxy().createDeviceList(deviceType());

(...)

&gt;    if (Chrome* chrome = page-&gt;chrome())
&gt;         chrome-&gt;runDeviceDialog(m_deviceList.get());
 
The above design is a reason for concern: it seems you are invoking synchronously, from inside an event handler, two potentially expensive operations:

1. deviceManagerProxy().createDeviceList(deviceType());

createDeviceList() method above is synchronous and is implemented in platform code and probes for a list of devices (cameras, microphones).

2. runDeviceDialog() is also synchronous and seems to involve running a modal dialog


I am wondering why you made these choices and whether the alternative design proposed by Leandro in https://lists.webkit.org/pipermail/webkit-dev/2011-January/015822.html isn&apos;t a much better choice. 

Leandro has actually been working on this and has a patch that he could upload for review. Perhaps the best way to proceed is for him to upload it and see how it differs to the current proposal?

Thanks,
Andrei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343986</commentid>
    <comment_count>11</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2011-02-02 08:38:15 -0800</bug_when>
    <thetext>I have created a patch to introduce compilation guards for the device element. These should be required independently of the design approach we decide to take.

https://bugs.webkit.org/show_bug.cgi?id=53595</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344847</commentid>
    <comment_count>12</comment_count>
      <attachid>81085</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-02-03 10:54:35 -0800</bug_when>
    <thetext>Created attachment 81085
Updated patch

Thank you for your comments.

1. Build failures
Filed bug (https://bugs.webkit.org/show_bug.cgi?id=53672) with patch that modifies make_names.pl to not unconditionally include HTMLDeviceElement.h and JSHTMLDeviceElement.h.

2. Parser modification
Filed bug (http://www.w3.org/Bugs/Public/show_bug.cgi?id=11935) to include device in the list of self-closing elements in the specification.
Added parser test that demonstrates the behavior.

3. &quot;#if 0&quot;
Replaced with FIXME.

4. C-style casts
Fixed.

5. Synchronous dialog
Added callback from dialog.

6. Synchronous device list creation
Moved list creation to platform dialog code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344854</commentid>
    <comment_count>13</comment_count>
      <attachid>81085</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-03 11:06:17 -0800</bug_when>
    <thetext>Comment on attachment 81085
Updated patch

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

&gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:898
&gt;      if (token.name() == areaTag
&gt;          || token.name() == brTag
&gt; +        || token.name() == deviceTag
&gt;          || token.name() == embedTag
&gt;          || token.name() == imgTag
&gt;          || token.name() == keygenTag

This list of elements comes from &lt;http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#parsing-main-inbody&gt;.  The spec says:

&gt; A start tag whose tag name is one of: &quot;area&quot;, &quot;br&quot;, &quot;embed&quot;, &quot;img&quot;, &quot;keygen&quot;, &quot;wbr&quot;

I don&apos;t see &quot;device&quot; in that list.  Please do not add non-standard behavior to the parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344859</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-03 11:11:17 -0800</bug_when>
    <thetext>Attachment 81085 did not build on chromium:
Build output: http://queues.webkit.org/results/7691437</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344882</commentid>
    <comment_count>15</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-03 11:41:33 -0800</bug_when>
    <thetext>Attachment 81085 did not build on win:
Build output: http://queues.webkit.org/results/7694311</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344913</commentid>
    <comment_count>16</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-03 12:24:24 -0800</bug_when>
    <thetext>Attachment 81085 did not build on qt:
Build output: http://queues.webkit.org/results/7690582</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344957</commentid>
    <comment_count>17</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-02-03 13:16:34 -0800</bug_when>
    <thetext>Attachment 81085 did not build on gtk:
Build output: http://queues.webkit.org/results/7694408</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344958</commentid>
    <comment_count>18</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-02-03 13:20:01 -0800</bug_when>
    <thetext>Attachment 81085 did not build on gtk:
Build output: http://queues.webkit.org/results/7689741</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345021</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-03 14:40:05 -0800</bug_when>
    <thetext>&gt; I don&apos;t see &quot;device&quot; in that list.  Please do not add non-standard behavior to the parser.

I discussed this issue with Hixie on IRC.  He thinks its reasonable to make &lt;device&gt; a void element and is considering adding it to the spec.  Personally, I think it&apos;s going to cause more pain than it&apos;s worth, but that doesn&apos;t mean we shouldn&apos;t try.

If we decide to modify the parser in this way, I&apos;m unsure whether we should condition the parsing change on whether the feature is enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345436</commentid>
    <comment_count>20</comment_count>
    <who name="Pushparajan">vprajan</who>
    <bug_when>2011-02-04 04:08:41 -0800</bug_when>
    <thetext>what would be difference between http://www.w3.org/TR/2010/WD-html-media-capture-20100928/ and http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#devices ?

I think W3C is bringing up Device API spec(which is based on JIL/WAC) rather than having a whatwg way of HTML5 device element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345547</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-04 09:45:57 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; what would be difference between http://www.w3.org/TR/2010/WD-html-media-capture-20100928/ and http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#devices ?
&gt; 
&gt; I think W3C is bringing up Device API spec(which is based on JIL/WAC) rather than having a whatwg way of HTML5 device element.

This sounds like a larger discussion that we should have as a project.  Generally speaking, browser vendors are pretty disengaged from the DAP working group.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346678</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-02-07 10:50:42 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; If we decide to modify the parser in this way, I&apos;m unsure whether we should condition the parsing change on whether the feature is enabled.

Perhaps an experimental feature like this should not affect the parser behavior when not enabled, especially considering that the element will be an HTMLElement in that case. What&apos;s your preference?

Could you please have a look at the patch for https://bugs.webkit.org/show_bug.cgi?id=53672 to make this patch build?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359753</commentid>
    <comment_count>23</comment_count>
      <attachid>81085</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2011-03-01 01:50:49 -0800</bug_when>
    <thetext>Comment on attachment 81085
Updated patch

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

&gt; Source/WebCore/device/DeviceList.h:73
&gt; +    bool m_selected;

I think that it would be simpler to deal only with selected devices in WebCore, so would recommend removing m_selected as a field of DeviceListEntry. See comment below about DeviceList::selectionsMatch.

&gt; Source/WebCore/device/DeviceList.h:85
&gt; +    bool selectionsMatch(DeviceList* other);

I think that this class could be much simplified if DeviceList becomes a simple list of devices that does not deal with selection directly. I expect ChromeClient::runDeviceDialog to manage the details of selection and return only selected devices to DeviceDialogClient::selectionsMade().

Consequently, I would recommend simplifying the following methods so that they do not deal with selected status, and renaming them accordingly:
 DeviceList::selectionsMatch() could be renamed to matches(),
 DeviceList::updateSelections() could be renamed to assign(),
 DeviceList::selectedEntries could be renamed to entries()

&gt; Source/WebCore/device/DeviceManagerProxy.h:47
&gt; +    StreamDeviceManager* streamDeviceManager();

Only DeviceManagerProxy::createDeviceList() calls this method. But DeviceManagerProxy::createDeviceList() is not used, so I think we should remove this and introduce in a later patch if necessary.

&gt; Source/WebCore/device/DeviceManagerProxy.h:49
&gt; +    PassRefPtr&lt;DeviceList&gt; createDeviceList(const DeviceType);

I don&apos;t see any calls to DeviceManagerProxy::createDeviceList. Can we remove this method (or introduce in a later patch, if necessary)?

&gt; Source/WebCore/html/HTMLDeviceElement.cpp:173
&gt; +        chrome-&gt;runDeviceDialog(m_deviceList.get(), this);

ChromeClient::runDeviceDialog takes a raw pointer to the DeviceDialogClient. This will cause a problem if the HTMLDeviceElement is destroyed while the runDialog is occuring. 

One way of solving this would be for the DeviceDialogClient to be implemented by an object with page lifetime. See, for example, (WebCore/Source/page/SpeechInput.h) SpeechInput::startRecognition / SpeechInput::setRecognitionResult etc.

runDeviceDialog implies that a dialog will be presented to the user, but this should be UA-specific. Perhaps rename to something like selectDevice?

Why do we need to pass in a DeviceList to the client code? Wouldn&apos;t it be simpler to pass the type of the device required and leave the probing and device list management to the client?

&gt; Source/WebCore/html/HTMLDeviceElement.cpp:180
&gt; +    bool hasChanged = m_deviceList ? !newDeviceList-&gt;selectionsMatch(m_deviceList.get()) : hasSelections;

If the user didn&apos;t change the selection, could ChromeClient avoid calling this method at all? 
We could then avoid checking to see if the selection has changed or not.

&gt; Source/WebCore/html/HTMLDeviceElement.cpp:184
&gt; +        m_data = hasSelections ? deviceManagerProxy().createDeviceData(m_deviceList.get()) : 0;

What is the intended behaviour of DeviceManagerProxy::createDeviceData? If it needs to contact the embedder or perform potentially blocking code, it should be made asynchronous. And if so, it would make sense to merge it with ChromeClient::runDeviceDialog which is also asynchronous.

If these two methods can be merged, it would make sense to remove DeviceList altogether and simply receive a new device-specific data object here. In the case of device type=media, this would be a Stream object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365115</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-03-10 05:57:08 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 81085 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81085&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/device/DeviceList.h:73
&gt; &gt; +    bool m_selected;
&gt; 
&gt; I think that it would be simpler to deal only with selected devices in WebCore, so would recommend removing m_selected as a field of DeviceListEntry. See comment below about DeviceList::selectionsMatch.
&gt;
&gt; &gt; Source/WebCore/device/DeviceList.h:85
&gt; &gt; +    bool selectionsMatch(DeviceList* other);
&gt; 
&gt; I think that this class could be much simplified if DeviceList becomes a simple list of devices that does not deal with selection directly. I expect ChromeClient::runDeviceDialog to manage the details of selection and return only selected devices to DeviceDialogClient::selectionsMade().
&gt; 
&gt; Consequently, I would recommend simplifying the following methods so that they do not deal with selected status, and renaming them accordingly:
&gt;  DeviceList::selectionsMatch() could be renamed to matches(),
&gt;  DeviceList::updateSelections() could be renamed to assign(),
&gt;  DeviceList::selectedEntries could be renamed to entries()
&gt;

The reason for having both selected entries and unselected entries in the list at this point is to be able to update a newly probed list with previous selections before presenting the list in the device selector. To support this functionality without keeping track of selected entries would require two lists; one with all entries and one with previously selected entries. It would then be up to the device selector to combine these and present a single list. A new list would then have to be created only containing the new selections instead of simply marking the selected entries. Also, by handling both selected and unselected entries in the device element, it&apos;s possible to determine if a device has been unselected or disconnected from the UA since the last probe. We use this information to determine if a change event should be triggered or not.

The idea with putting quite a lot of functionality in DeviceList, is to minimize the work for platforms to implement the device element. The platform specific device selectors will pretty much be responsible for displaying the device list and update it with the user’s selections; the shared WebCore code will deal with the details from the specification.

&gt; &gt; Source/WebCore/device/DeviceManagerProxy.h:47
&gt; &gt; +    StreamDeviceManager* streamDeviceManager();
&gt; 
&gt; Only DeviceManagerProxy::createDeviceList() calls this method. But DeviceManagerProxy::createDeviceList() is not used, so I think we should remove this and introduce in a later patch if necessary.
&gt;

It&apos;s to be used by platforms implementing the device element (e.g. our GTK implementation, https://bugs.webkit.org/show_bug.cgi?id=53264).

&gt; &gt; Source/WebCore/device/DeviceManagerProxy.h:49
&gt; &gt; +    PassRefPtr&lt;DeviceList&gt; createDeviceList(const DeviceType);
&gt; 
&gt; I don&apos;t see any calls to DeviceManagerProxy::createDeviceList. Can we remove this method (or introduce in a later patch, if necessary)?
&gt;

See previous comment.
 
&gt; &gt; Source/WebCore/html/HTMLDeviceElement.cpp:173
&gt; &gt; +        chrome-&gt;runDeviceDialog(m_deviceList.get(), this);
&gt; 
&gt; ChromeClient::runDeviceDialog takes a raw pointer to the DeviceDialogClient. This will cause a problem if the HTMLDeviceElement is destroyed while the runDialog is occuring. 
&gt; 
&gt; One way of solving this would be for the DeviceDialogClient to be implemented by an object with page lifetime. See, for example, (WebCore/Source/page/SpeechInput.h) SpeechInput::startRecognition / SpeechInput::setRecognitionResult etc.
&gt;

Yes, I think you&apos;re right about this. The solution you proposed would do the trick. I&apos;ve also looked into how it&apos;s solved for &lt;input type=file&gt; since it has been the model of our implementation in other regards.

&gt; runDeviceDialog implies that a dialog will be presented to the user, but this should be UA-specific. Perhaps rename to something like selectDevice?
&gt;

That&apos;s true, as a result from the discussion with Leandro we have renamed that function to runDeviceSelector.

&gt; Why do we need to pass in a DeviceList to the client code? Wouldn&apos;t it be simpler to pass the type of the device required and leave the probing and device list management to the client?
&gt;

The DeviceList is used to transfer the result from the device probing to the device selector. It&apos;s quite likely that several platforms will share media engine (e.g. GStreamer), but implement their own device selectors. I.e. different combinations of clients will be involved and need a unified way to talk to each other.

&gt; &gt; Source/WebCore/html/HTMLDeviceElement.cpp:180
&gt; &gt; +    bool hasChanged = m_deviceList ? !newDeviceList-&gt;selectionsMatch(m_deviceList.get()) : hasSelections;
&gt; 
&gt; If the user didn&apos;t change the selection, could ChromeClient avoid calling this method at all? 
&gt; We could then avoid checking to see if the selection has changed or not.
&gt;

Yes, it would be possible, but we wanted to centralize this functionality to avoid duplicating code and risking inconsistent behavior between ports.

&gt; &gt; Source/WebCore/html/HTMLDeviceElement.cpp:184
&gt; &gt; +        m_data = hasSelections ? deviceManagerProxy().createDeviceData(m_deviceList.get()) : 0;
&gt; 
&gt; What is the intended behaviour of DeviceManagerProxy::createDeviceData? If it needs to contact the embedder or perform potentially blocking code, it should be made asynchronous. And if so, it would make sense to merge it with ChromeClient::runDeviceDialog which is also asynchronous.
&gt;

DeviceManagerProxy::createDeviceData should return a device handler API instance without blocking.

&gt; If these two methods can be merged, it would make sense to remove DeviceList altogether and simply receive a new device-specific data object here. In the case of device type=media, this would be a Stream object.

Merging would prevent us from delegating probing, device selection and device handler API creation to separate components (see comment above).

-----

Thanks for your comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366987</commentid>
    <comment_count>25</comment_count>
      <attachid>81085</attachid>
    <who name="Satish Sampath">satish</who>
    <bug_when>2011-03-14 08:09:41 -0700</bug_when>
    <thetext>Comment on attachment 81085
Updated patch

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

&gt;&gt;&gt; Source/WebCore/device/DeviceList.h:73
&gt;&gt;&gt; +    bool m_selected;
&gt;&gt; 
&gt;&gt; I think that it would be simpler to deal only with selected devices in WebCore, so would recommend removing m_selected as a field of DeviceListEntry. See comment below about DeviceList::selectionsMatch.
&gt; 
&gt; The reason for having both selected entries and unselected entries in the list at this point is to be able to update a newly probed list with previous selections before presenting the list in the device selector. To support this functionality without keeping track of selected entries would require two lists; one with all entries and one with previously selected entries. It would then be up to the device selector to combine these and present a single list. A new list would then have to be created only containing the new selections instead of simply marking the selected entries. Also, by handling both selected and unselected entries in the device element, it&apos;s possible to determine if a device has been unselected or disconnected from the UA since the last probe. We use this information to determine if a change event should be triggered or not.
&gt; 
&gt; The idea with putting quite a lot of functionality in DeviceList, is to minimize the work for platforms to implement the device element. The platform specific device selectors will pretty much be responsible for displaying the device list and update it with the user’s selections; the shared WebCore code will deal with the details from the specification.

Since you mentioned earlier that this device implementation is inspired by the file input element - I see the file input element only receives the list of selected files from the embedder, not the list of all files in all directories. This DeviceList is a list of all devices matching the given type and that seems unnecessarily complicated. Instead it could be done with just a vector of selected device IDs (similar to list of filenames in the input element case) without all this device data.

I also notice that different browsers fire the file input element fires onchange at different times. For example, Safari doesn&apos;t fire onchange when user selects the same file again whereas Chrome fires onchange on every invocation of the dialog, even if the same file was selected. I think for &lt;device&gt; onchange should fire even if the same device was selected. One use case is when the device has an issue and needs to be reset/plugged back in/connected to power etc. and the user wants to restart the process without reloading the page or closing the call.

&gt;&gt;&gt; Source/WebCore/device/DeviceManagerProxy.h:47
&gt;&gt;&gt; +    StreamDeviceManager* streamDeviceManager();
&gt;&gt; 
&gt;&gt; Only DeviceManagerProxy::createDeviceList() calls this method. But DeviceManagerProxy::createDeviceList() is not used, so I think we should remove this and introduce in a later patch if necessary.
&gt; 
&gt; It&apos;s to be used by platforms implementing the device element (e.g. our GTK implementation, https://bugs.webkit.org/show_bug.cgi?id=53264).

Can you move such code to the patch where it will be used? That would make it easier for reviewing the design.

&gt;&gt;&gt; Source/WebCore/device/DeviceManagerProxy.h:49
&gt;&gt;&gt; +    PassRefPtr&lt;DeviceList&gt; createDeviceList(const DeviceType);
&gt;&gt; 
&gt;&gt; I don&apos;t see any calls to DeviceManagerProxy::createDeviceList. Can we remove this method (or introduce in a later patch, if necessary)?
&gt; 
&gt; See previous comment.

Same as above

&gt;&gt;&gt; Source/WebCore/html/HTMLDeviceElement.cpp:180
&gt;&gt;&gt; +    bool hasChanged = m_deviceList ? !newDeviceList-&gt;selectionsMatch(m_deviceList.get()) : hasSelections;
&gt;&gt; 
&gt;&gt; If the user didn&apos;t change the selection, could ChromeClient avoid calling this method at all? 
&gt;&gt; We could then avoid checking to see if the selection has changed or not.
&gt; 
&gt; Yes, it would be possible, but we wanted to centralize this functionality to avoid duplicating code and risking inconsistent behavior between ports.

As I mentioned above, in the device case there are valid reasons to not do this check because the user may want to select the same device again in case of a failure. I&apos;d remove this check and all code managing the device list.

&gt;&gt;&gt; Source/WebCore/html/HTMLDeviceElement.cpp:184
&gt;&gt;&gt; +        m_data = hasSelections ? deviceManagerProxy().createDeviceData(m_deviceList.get()) : 0;
&gt;&gt; 
&gt;&gt; What is the intended behaviour of DeviceManagerProxy::createDeviceData? If it needs to contact the embedder or perform potentially blocking code, it should be made asynchronous. And if so, it would make sense to merge it with ChromeClient::runDeviceDialog which is also asynchronous.
&gt;&gt; 
&gt;&gt; If these two methods can be merged, it would make sense to remove DeviceList altogether and simply receive a new device-specific data object here. In the case of device type=media, this would be a Stream object.
&gt; 
&gt; DeviceManagerProxy::createDeviceData should return a device handler API instance without blocking.

I see bug 47265 (implement Stream API) doesn&apos;t have a patch uploaded yet so it is not clear if this involves a call to the embedder. Can you clarify?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382751</commentid>
    <comment_count>26</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-09 00:56:47 -0700</bug_when>
    <thetext>Isn&apos;t this a duplicate of bug 43572?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386546</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-04-15 06:27:00 -0700</bug_when>
    <thetext>Resolved as WONTFIX since the device element has been removed from the spec. The entry point to the Stream API is now a pure JavaScript API (navigator.getUserMedia(...)).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80411</attachid>
            <date>2011-01-27 20:31:10 -0800</date>
            <delta_ts>2011-02-03 10:54:35 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>device_element_1.patch</filename>
            <type>text/plain</type>
            <size>57709</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyZjBhMmFjLi4xNzg2MThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAy
IEBACisyMDExLTAxLTI4ICBBZGFtIEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29u
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bnRyb2R1Y2UgdGhlIGRldmljZSBlbGVtZW50IGFzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI2NAorCisg
ICAgICAgIEFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBkZXZpY2UgZWxlbWVudAorICAgICAg
ICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRp
cGFnZS9jb21tYW5kcy5odG1sI2RldmljZXMKKworICAgICAgICBDdXJyZW50bHkgbm90IHRlc3Rh
YmxlCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxEZXZpY2VFbGVtZW50Q3VzdG9tLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEZXZpY2VFbGVtZW50OjpkYXRhKToK
KyAgICAgICAgKiBjc3MvaHRtbC5jc3M6CisgICAgICAgIChidXR0b24sIGRldmljZSk6CisgICAg
ICAgIChpbnB1dCwgdGV4dGFyZWEsIGtleWdlbiwgc2VsZWN0LCBidXR0b24sIGlzaW5kZXgsIG1l
dGVyLCBwcm9ncmVzcywgZGV2aWNlKToKKyAgICAgICAgKGlucHV0LCB0ZXh0YXJlYSwga2V5Z2Vu
LCBzZWxlY3QsIGJ1dHRvbiwgaXNpbmRleCwgZGF0YWdyaWQsIGRldmljZSk6CisgICAgICAgIChp
bnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0ic3VibWl0Il0sIGlucHV0W3R5cGU9InJl
c2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1
dHRvbiwgZGV2aWNlKToKKyAgICAgICAgKGlucHV0W3R5cGU9ImJ1dHRvbiJdOmFjdGl2ZSwgaW5w
dXRbdHlwZT0ic3VibWl0Il06YWN0aXZlLCBpbnB1dFt0eXBlPSJyZXNldCJdOmFjdGl2ZSwgaW5w
dXRbdHlwZT0iZmlsZSJdOmFjdGl2ZTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRv
bjphY3RpdmUsIGRldmljZTphY3RpdmUpOgorICAgICAgICAqIGRldmljZS9EZXZpY2VEYXRhLmg6
IEFkZGVkLgorICAgICAgICAqIGRldmljZS9EZXZpY2VMaXN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEZXZpY2VMaXN0Ojp1cGRhdGVTZWxlY3Rpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkRldmljZUxpc3Q6OnNlbGVjdGVkRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpEZXZp
Y2VMaXN0OjpzZWxlY3Rpb25zTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6RGV2aWNlTGlzdDo6
dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGV2aWNlTGlzdDo6Z2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRldmljZUxpc3Q6Omxlbmd0aCk6CisgICAgICAgICogZGV2aWNlL0RldmljZUxpc3Qu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEZXZpY2VMaXN0RW50cnk6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZXZpY2VMaXN0RW50cnk6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRldmljZUxpc3RFbnRyeTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpEZXZpY2VMaXN0RW50
cnk6OmRpc3BsYXlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRldmljZUxpc3RFbnRyeTo6c2Vs
ZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGV2aWNlTGlzdEVudHJ5OjpzZXRTZWxlY3RlZCk6
CisgICAgICAgIChXZWJDb3JlOjpEZXZpY2VMaXN0RW50cnk6OnNhbWVFbnRyeSk6CisgICAgICAg
IChXZWJDb3JlOjpEZXZpY2VMaXN0RW50cnk6OkRldmljZUxpc3RFbnRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpEZXZpY2VMaXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGV2aWNlTGlz
dDo6RGV2aWNlTGlzdCk6CisgICAgICAgICogZGV2aWNlL0RldmljZU1hbmFnZXJQcm94eS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlTWFuYWdlclByb3h5KToKKyAgICAgICAg
KFdlYkNvcmU6OkRldmljZU1hbmFnZXJQcm94eTo6RGV2aWNlTWFuYWdlclByb3h5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRldmljZU1hbmFnZXJQcm94eTo6c3RyZWFtRGV2aWNlTWFuYWdlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEZXZpY2VNYW5hZ2VyUHJveHk6OmNyZWF0ZURldmljZUxpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGV2aWNlTWFuYWdlclByb3h5OjpjcmVhdGVEZXZpY2VEYXRhKToK
KyAgICAgICAgKiBkZXZpY2UvRGV2aWNlTWFuYWdlclByb3h5Lmg6IEFkZGVkLgorICAgICAgICAq
IGRldmljZS9EZXZpY2VUeXBlSW5mby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV2
aWNlVHlwZUluZm8pOgorICAgICAgICAqIGRldmljZS9EZXZpY2VUeXBlSW5mby5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRldmljZVR5cGVJbmZvOjpEZXZpY2VUeXBlSW5mbyk6CisgICAg
ICAgIChXZWJDb3JlOjpEZXZpY2VUeXBlSW5mbzo6ZGV2aWNlVHlwZUxhYmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OkRldmljZVR5cGVJbmZvOjpzdXBwb3J0c011bHRpcGxlU2VsZWN0aW9ucyk6Cisg
ICAgICAgICogaHRtbC9IVE1MRGV2aWNlRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRGV2aWNlVHlwZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRGV2aWNl
RWxlbWVudDo6SFRNTERldmljZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERldmlj
ZUVsZW1lbnQ6On5IVE1MRGV2aWNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRGV2
aWNlRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50
Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50OjpzZXRUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRGV2aWNlRWxlbWVudDo6YXR0YWNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRGV2aWNlRWxlbWVudDo6dXBkYXRlRGV2aWNlVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRGV2aWNlRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRGV2aWNlRWxlbWVudDo6cnVuRGlhbG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxEZXZpY2VFbGVtZW50Ojppc0ZvY3VzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRGV2aWNlRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRGV2aWNlRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZXZpY2VUeXBlTmFtZXM6Om1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRldmljZVR5cGVO
YW1lczo6YXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6RGV2aWNlVHlwZU5hbWVzOjp2aWRlbyk6
CisgICAgICAgICogaHRtbC9IVE1MRGV2aWNlRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50OjpkZXZpY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxEZXZpY2VFbGVtZW50OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEZXZpY2VF
bGVtZW50OjpjYW5TdGFydFNlbGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MRGV2aWNlRWxl
bWVudC5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmllRm9yYmlkc0luc2VydEhUTUwpOgorICAgICAgICAq
IGh0bWwvSFRNTFRhZ05hbWVzLmluOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFy
dFRhZ0ZvckluQm9keSk6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAgICAg
ICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6OnJ1bkRldmljZURpYWxvZyk6CisgICAgICAg
ICogcGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpydW5EZXZpY2VE
aWFsb2cpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVD
bGllbnQuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgICogcGxhdGZv
cm0vTG9jYWxpemVkU3RyaW5ncy5oOgorICAgICAgICAqIHBsYXRmb3JtL2RldmljZS9TdHJlYW1E
ZXZpY2VNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsU3RyZWFtRGV2
aWNlTWFuYWdlclByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOdWxsU3RyZWFt
RGV2aWNlTWFuYWdlclByaXZhdGU6OmNyZWF0ZURldmljZUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RyZWFtRGV2aWNlTWFuYWdlcjo6U3RyZWFtRGV2aWNlTWFuYWdlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJlYW1EZXZpY2VNYW5hZ2VyOjpjcmVhdGVEZXZpY2VMaXN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9kZXZpY2UvU3RyZWFtRGV2aWNlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0cmVhbURldmljZU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZGV2aWNlL1N0cmVhbURldmljZU1hbmFnZXJQcml2YXRlLmg6IEFkZGVkLgorCiAyMDExLTAx
LTI3ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgV2luQ0UgYnVpbGQgZml4IGZvciByNzY3NDMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEZXZpY2VFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERldmljZUVsZW1lbnRDdXN0b20uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYzNkYzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEZXZpY2VFbGVtZW50Q3VzdG9tLmNw
cApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFC
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShERVZJQ0VfRUxFTUVOVCkKKworI2luY2x1ZGUgIkpTSFRNTERldmljZUVsZW1lbnQuaCIK
KworI2luY2x1ZGUgIkRldmljZURhdGEuaCIKKyNpbmNsdWRlICJIVE1MRGV2aWNlRWxlbWVudC5o
IgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVmFs
dWUgSlNIVE1MRGV2aWNlRWxlbWVudDo6ZGF0YShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7Cisg
ICAgSFRNTERldmljZUVsZW1lbnQqIGRldmljZSA9IHN0YXRpY19jYXN0PEhUTUxEZXZpY2VFbGVt
ZW50Kj4oaW1wbCgpKTsKKyAgICBEZXZpY2VEYXRhKiBkYXRhID0gZGV2aWNlLT5kYXRhKCk7Cisg
ICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisKKyAgICAvLyBGSVhNRSAt
IGltcGxlbWVudCB0aGUgU3RyZWFtIEFQSSAoQnVnIDQ3MjY1KQorICAgIC8vIGlmIChTdHJlYW0q
IHN0cmVhbSA9IGRhdGEtPnRvU3RyZWFtKCkpCisgICAgLy8gICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBzdHJlYW0pOworCisgICAgLy8gQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGpzTnVsbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL2h0bWwuY3NzIGIvU291cmNlL1dl
YkNvcmUvY3NzL2h0bWwuY3NzCmluZGV4IDEzNWViZjkuLjQyZGVlNDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9odG1sLmNzcworKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvaHRtbC5j
c3MKQEAgLTM0OCwxNiArMzQ4LDE2IEBAIGZpZWxkc2V0IHsKICAgICBib3JkZXI6IDJweCBncm9v
dmUgVGhyZWVERmFjZQogfQogCi1idXR0b24geworYnV0dG9uLCBkZXZpY2UgewogICAgIC13ZWJr
aXQtYXBwZWFyYW5jZTogYnV0dG9uOwogfQogCiAvKiBGb3JtIGNvbnRyb2xzIGRvbid0IGdvIHZl
cnRpY2FsLiAqLwotaW5wdXQsIHRleHRhcmVhLCBrZXlnZW4sIHNlbGVjdCwgYnV0dG9uLCBpc2lu
ZGV4LCBtZXRlciwgcHJvZ3Jlc3MgeworaW5wdXQsIHRleHRhcmVhLCBrZXlnZW4sIHNlbGVjdCwg
YnV0dG9uLCBpc2luZGV4LCBtZXRlciwgcHJvZ3Jlc3MsIGRldmljZSB7CiAgICAgLXdlYmtpdC1i
bG9jay1mbG93OiB0YiAhaW1wb3J0YW50OwogfQogCi1pbnB1dCwgdGV4dGFyZWEsIGtleWdlbiwg
c2VsZWN0LCBidXR0b24sIGlzaW5kZXgsIGRhdGFncmlkIHsKK2lucHV0LCB0ZXh0YXJlYSwga2V5
Z2VuLCBzZWxlY3QsIGJ1dHRvbiwgaXNpbmRleCwgZGF0YWdyaWQsIGRldmljZSB7CiAgICAgbWFy
Z2luOiAwX19xZW07CiAgICAgZm9udDogLXdlYmtpdC1zbWFsbC1jb250cm9sOwogICAgIGNvbG9y
OiBpbml0aWFsOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIGlucHV0W3R5cGU9ImJ1dHRvbiJdLCBpbnB1
dFt0eXBlPSJzdWJtaXQiXSwgaW5wdXRbdHlwZT0icmVzZXQiXSwgaW5wdXRbdHlwZT0iZmlsCiAg
ICAgd2hpdGUtc3BhY2U6IHByZQogfQogCi1pbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlw
ZT0ic3VibWl0Il0sIGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6LXdl
YmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbiB7CitpbnB1dFt0eXBlPSJidXR0b24iXSwg
aW5wdXRbdHlwZT0ic3VibWl0Il0sIGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZp
bGUiXTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbiwgZGV2aWNlIHsKICAgICAt
d2Via2l0LWJveC1hbGlnbjogY2VudGVyOwogICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICBj
dXJzb3I6IGRlZmF1bHQ7CkBAIC01MTMsNyArNTEzLDcgQEAgc2VsZWN0OmRpc2FibGVkLCBrZXln
ZW46ZGlzYWJsZWQsIG9wdGdyb3VwOmRpc2FibGVkLCBvcHRpb246ZGlzYWJsZWQsIGRhdGFncmlk
OmQKICAgICBjb2xvcjogR3JheVRleHQKIH0KIAotaW5wdXRbdHlwZT0iYnV0dG9uIl06YWN0aXZl
LCBpbnB1dFt0eXBlPSJzdWJtaXQiXTphY3RpdmUsIGlucHV0W3R5cGU9InJlc2V0Il06YWN0aXZl
LCBpbnB1dFt0eXBlPSJmaWxlIl06YWN0aXZlOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiwg
YnV0dG9uOmFjdGl2ZSB7CitpbnB1dFt0eXBlPSJidXR0b24iXTphY3RpdmUsIGlucHV0W3R5cGU9
InN1Ym1pdCJdOmFjdGl2ZSwgaW5wdXRbdHlwZT0icmVzZXQiXTphY3RpdmUsIGlucHV0W3R5cGU9
ImZpbGUiXTphY3RpdmU6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uLCBidXR0b246YWN0aXZl
LCBkZXZpY2U6YWN0aXZlIHsKICAgICBib3JkZXItc3R5bGU6IGluc2V0CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RldmljZS9EZXZpY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9k
ZXZpY2UvRGV2aWNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdk
Yzc3YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kZXZpY2UvRGV2aWNlRGF0
YS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24g
QUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZXZpY2VEYXRhX2gKKyNkZWZp
bmUgRGV2aWNlRGF0YV9oCisKKyNpZiBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisKKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBTdHJlYW07CisKK2NsYXNzIERldmljZURhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxEZXZpY2VEYXRhPiB7CitwdWJsaWM6CisgICAgLy8gRklYTUUgLSBpbXBsZW1l
bnQgdGhlIFN0cmVhbSBBUEkgKEJ1ZyA0NzI2NSkKKyAgICAvLyB2aXJ0dWFsIFN0cmVhbSogdG9T
dHJlYW0oKSB7IHJldHVybiAwOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisKKyNlbmRpZiAvLyBEZXZpY2VEYXRhX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RldmljZS9EZXZpY2VMaXN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RldmljZS9EZXZpY2VMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xMDEzN2ZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGV2
aWNlL0RldmljZUxpc3QuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmli
dXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShERVZJQ0VfRUxFTUVOVCkKKworI2luY2x1ZGUgIkRldmlj
ZUxpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIERldmljZUxpc3Q6OnVwZGF0
ZVNlbGVjdGlvbnMoRGV2aWNlTGlzdCogcmVmZXJlbmNlTGlzdCkKK3sKKyAgICBWZWN0b3I8UmVm
UHRyPERldmljZUxpc3RFbnRyeT4gPiBzZWxlY3RlZEVudHJpZXMgPSByZWZlcmVuY2VMaXN0LT5z
ZWxlY3RlZEVudHJpZXMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyAhc2VsZWN0ZWRFbnRy
aWVzLmlzRW1wdHkoKSAmJiBpIDwgbV9saXN0RW50cmllcy5zaXplKCk7IGkrKykgeworICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHNlbGVjdGVkRW50cmllcy5zaXplKCk7IGorKykgewor
ICAgICAgICAgICAgaWYgKHNlbGVjdGVkRW50cmllc1tqXS0+c2FtZUVudHJ5KG1fbGlzdEVudHJp
ZXNbaV0uZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgbV9saXN0RW50cmllc1tpXS0+c2V0U2Vs
ZWN0ZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRFbnRyaWVzLnJlbW92ZShqKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKworVmVjdG9yPFJlZlB0cjxEZXZpY2VMaXN0RW50cnk+ID4gRGV2aWNlTGlzdDo6c2VsZWN0
ZWRFbnRyaWVzKCkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPERldmljZUxpc3RFbnRyeT4gPiBzZWxl
Y3RlZEVudHJpZXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGlzdEVudHJpZXMu
c2l6ZSgpOyBpKyspCisgICAgICAgIGlmIChtX2xpc3RFbnRyaWVzW2ldLT5zZWxlY3RlZCgpKQor
ICAgICAgICAgICAgc2VsZWN0ZWRFbnRyaWVzLmFwcGVuZChtX2xpc3RFbnRyaWVzW2ldKTsKKwor
ICAgIHJldHVybiBzZWxlY3RlZEVudHJpZXM7Cit9CisKK2Jvb2wgRGV2aWNlTGlzdDo6c2VsZWN0
aW9uc01hdGNoKERldmljZUxpc3QqIG90aGVyKQoreworICAgIFZlY3RvcjxSZWZQdHI8RGV2aWNl
TGlzdEVudHJ5PiA+IG90aGVyU2VsZWN0ZWRFbnRyaWVzID0gb3RoZXItPnNlbGVjdGVkRW50cmll
cygpOworCisgICAgZm9yIChpbnQgaSA9ICgoaW50KSBtX2xpc3RFbnRyaWVzLnNpemUoKSkgLSAx
OyBpID49IDA7IGktLSkgeworICAgICAgICBpbnQgajsKKyAgICAgICAgZm9yIChqID0gKChpbnQp
IG90aGVyU2VsZWN0ZWRFbnRyaWVzLnNpemUoKSkgLSAxOyBqID49IDA7IGotLSkgeworICAgICAg
ICAgICAgaWYgKG90aGVyU2VsZWN0ZWRFbnRyaWVzW2pdLT5zYW1lRW50cnkobV9saXN0RW50cmll
c1tpXS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbGlzdEVudHJpZXNbaV0tPnNl
bGVjdGVkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBvdGhlclNlbGVjdGVkRW50cmllcy5yZW1vdmUoaik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGogPCAwICYmIG1fbGlz
dEVudHJpZXNbaV0tPnNlbGVjdGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitWZWN0b3I8RGV2aWNlVHlwZT4gRGV2aWNlTGlzdDo6
dHlwZXMoKQoreworICAgIFZlY3RvcjxEZXZpY2VUeXBlPiB0eXBlczsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9saXN0RW50cmllcy5zaXplKCk7IGkrKykKKyAgICAgICAgaWYgKHR5
cGVzLmZpbmQobV9saXN0RW50cmllc1tpXS0+dHlwZSgpKSA9PSBXVEY6Om5vdEZvdW5kKQorICAg
ICAgICAgICAgdHlwZXMuYXBwZW5kKG1fbGlzdEVudHJpZXNbaV0tPnR5cGUoKSk7CisKKyAgICBy
ZXR1cm4gdHlwZXM7Cit9CisKK0RldmljZUxpc3RFbnRyeSogRGV2aWNlTGlzdDo6Z2V0KGludCBp
bmRleCkKK3sKKyAgICByZXR1cm4gbV9saXN0RW50cmllc1tpbmRleF0uZ2V0KCk7Cit9CisKK2lu
dCBEZXZpY2VMaXN0OjpsZW5ndGgoKQoreworICAgIHJldHVybiBtX2xpc3RFbnRyaWVzLnNpemUo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERFVklD
RV9FTEVNRU5UKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGV2aWNlL0RldmljZUxpc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL2RldmljZS9EZXZpY2VMaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNmQ0YzE1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RldmljZS9EZXZpY2VMaXN0LmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBEZXZpY2VMaXN0X2gKKyNkZWZpbmUgRGV2aWNlTGlzdF9oCisKKyNpZiBFTkFCTEUoREVWSUNF
X0VMRU1FTlQpCisKKyNpbmNsdWRlICJEZXZpY2VUeXBlSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEZXZpY2VMaXN0RW50cnkgOiBw
dWJsaWMgUmVmQ291bnRlZDxEZXZpY2VMaXN0RW50cnk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEZXZpY2VMaXN0RW50cnk+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkLCBjb25z
dCBEZXZpY2VUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERldmljZUxpc3RFbnRyeShpZCwgdHlwZSwgZGlzcGxh
eU5hbWUpKTsKKyAgICB9CisKKyAgICBTdHJpbmcgaWQoKSB7IHJldHVybiBtX2lkOyB9CisgICAg
RGV2aWNlVHlwZSB0eXBlKCkgeyByZXR1cm4gbV90eXBlOyB9CisgICAgU3RyaW5nIGRpc3BsYXlO
YW1lKCkgeyByZXR1cm4gbV9kaXNwbGF5TmFtZTsgfQorCisgICAgYm9vbCBzZWxlY3RlZCgpIHsg
cmV0dXJuIG1fc2VsZWN0ZWQ7IH0KKyAgICB2b2lkIHNldFNlbGVjdGVkKGJvb2wgc2VsZWN0ZWQp
IHsgbV9zZWxlY3RlZCA9IHNlbGVjdGVkOyB9CisKKyAgICBib29sIHNhbWVFbnRyeShEZXZpY2VM
aXN0RW50cnkqIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWQgPT0gb3RoZXItPm1f
aWQgJiYgbV9kaXNwbGF5TmFtZSA9PSBvdGhlci0+bV9kaXNwbGF5TmFtZSAmJiBtX3R5cGUgPT0g
b3RoZXItPm1fdHlwZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGV2aWNlTGlzdEVudHJ5KGNv
bnN0IFN0cmluZyYgaWQsIERldmljZVR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSkKKyAgICAgICAgOiBtX2lkKGlkKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAs
IG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUpCisgICAgICAgICwgbV9zZWxlY3RlZChmYWxzZSkg
eyB9CisKKyAgICBTdHJpbmcgbV9pZDsKKyAgICBEZXZpY2VUeXBlIG1fdHlwZTsKKyAgICBTdHJp
bmcgbV9kaXNwbGF5TmFtZTsKKyAgICBib29sIG1fc2VsZWN0ZWQ7Cit9OworCitjbGFzcyBEZXZp
Y2VMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8RGV2aWNlTGlzdD4geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERldmljZUxpc3Q+IGNyZWF0ZShjb25zdCBWZWN0b3I8UmVmUHRyPERl
dmljZUxpc3RFbnRyeT4gPiYgbGlzdEVudHJpZXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IERldmljZUxpc3QobGlzdEVudHJpZXMpKTsKKyAgICB9CisKKyAgICB2b2lkIHVw
ZGF0ZVNlbGVjdGlvbnMoRGV2aWNlTGlzdCogcmVmZXJlbmNlTGlzdCk7CisgICAgVmVjdG9yPFJl
ZlB0cjxEZXZpY2VMaXN0RW50cnk+ID4gc2VsZWN0ZWRFbnRyaWVzKCk7CisgICAgYm9vbCBzZWxl
Y3Rpb25zTWF0Y2goRGV2aWNlTGlzdCogb3RoZXIpOworICAgIFZlY3RvcjxEZXZpY2VUeXBlPiB0
eXBlcygpOworCisgICAgRGV2aWNlTGlzdEVudHJ5KiBnZXQoaW50IGluZGV4KTsKKyAgICBpbnQg
bGVuZ3RoKCk7CisKK3ByaXZhdGU6CisgICAgRGV2aWNlTGlzdChjb25zdCBWZWN0b3I8UmVmUHRy
PERldmljZUxpc3RFbnRyeT4gPiYgbGlzdEVudHJpZXMpCisgICAgICAgIDogbV9saXN0RW50cmll
cyhsaXN0RW50cmllcykgeyB9CisKKyAgICBWZWN0b3I8UmVmUHRyPERldmljZUxpc3RFbnRyeT4g
PiBtX2xpc3RFbnRyaWVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKERFVklDRV9FTEVNRU5UKQorCisjZW5kaWYgLy8gRGV2aWNlTGlzdF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kZXZpY2UvRGV2aWNlTWFuYWdlclByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RldmljZS9EZXZpY2VNYW5hZ2VyUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTg4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kZXZpY2UvRGV2aWNlTWFuYWdlclByb3h5LmNwcApAQCAtMCwwICsxLDkwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNz
c29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShERVZJQ0VfRUxFTUVOVCkK
KworI2luY2x1ZGUgIkRldmljZU1hbmFnZXJQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0RldmljZU1hbmFnZXJQcm94eSYgZGV2aWNlTWFuYWdlclByb3h5KCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKERldmljZU1hbmFnZXJQcm94eSwgaW5zdGFuY2UsICgpKTsKKyAgICBy
ZXR1cm4gaW5zdGFuY2U7Cit9CisKK0RldmljZU1hbmFnZXJQcm94eTo6RGV2aWNlTWFuYWdlclBy
b3h5KCkKKyAgICA6IG1fc3RyZWFtRGV2aWNlTWFuYWdlcigwKQoreworfQorCitTdHJlYW1EZXZp
Y2VNYW5hZ2VyKiBEZXZpY2VNYW5hZ2VyUHJveHk6OnN0cmVhbURldmljZU1hbmFnZXIoKQorewor
ICAgIGlmICghbV9zdHJlYW1EZXZpY2VNYW5hZ2VyKQorICAgICAgICBtX3N0cmVhbURldmljZU1h
bmFnZXIgPSBTdHJlYW1EZXZpY2VNYW5hZ2VyOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gbV9zdHJl
YW1EZXZpY2VNYW5hZ2VyLmdldCgpOworfQorCitQYXNzUmVmUHRyPERldmljZUxpc3Q+IERldmlj
ZU1hbmFnZXJQcm94eTo6Y3JlYXRlRGV2aWNlTGlzdChjb25zdCBEZXZpY2VUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBNZWRpYURldmljZVR5cGU6CisgICAgY2Fz
ZSBBdWRpb0RldmljZVR5cGU6CisgICAgY2FzZSBWaWRlb0RldmljZVR5cGU6CisgICAgICAgIHJl
dHVybiBzdHJlYW1EZXZpY2VNYW5hZ2VyKCktPmNyZWF0ZURldmljZUxpc3QodHlwZSk7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIERldmljZUxpc3Q6OmNyZWF0ZShWZWN0b3I8UmVmUHRy
PERldmljZUxpc3RFbnRyeT4gPigpKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8RGV2aWNlRGF0
YT4gRGV2aWNlTWFuYWdlclByb3h5OjpjcmVhdGVEZXZpY2VEYXRhKERldmljZUxpc3QqIGRldmlj
ZUxpc3QpCit7CisgICAgQVNTRVJUKGRldmljZUxpc3QtPmxlbmd0aCgpKTsKKyAgICBEZXZpY2VU
eXBlIHR5cGUgPSBkZXZpY2VMaXN0LT5nZXQoMCktPnR5cGUoKTsKKworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgTWVkaWFEZXZpY2VUeXBlOgorICAgIGNhc2UgQXVkaW9EZXZpY2VUeXBl
OgorICAgIGNhc2UgVmlkZW9EZXZpY2VUeXBlOgorICAgICAgICAvLyBGSVhNRSAtIGltcGxlbWVu
dCB0aGUgU3RyZWFtIEFQSSAoQnVnIDQ3MjY1KQorICAgICAgICByZXR1cm4gMDsKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERFVklD
RV9FTEVNRU5UKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGV2aWNlL0RldmljZU1hbmFn
ZXJQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvZGV2aWNlL0RldmljZU1hbmFnZXJQcm94eS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMzk3MjMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kZXZpY2UvRGV2aWNlTWFuYWdlclByb3h5LmgKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFt
ZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp
cworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERldmljZU1hbmFnZXJQcm94eV9oCisjZGVmaW5lIERl
dmljZU1hbmFnZXJQcm94eV9oCisKKyNpZiBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisKKyNpbmNs
dWRlICJEZXZpY2VEYXRhLmgiCisjaW5jbHVkZSAiRGV2aWNlTGlzdC5oIgorI2luY2x1ZGUgIlN0
cmVhbURldmljZU1hbmFnZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEZXZp
Y2VNYW5hZ2VyUHJveHkgeworcHVibGljOgorICAgIERldmljZU1hbmFnZXJQcm94eSgpOworCisg
ICAgU3RyZWFtRGV2aWNlTWFuYWdlciogc3RyZWFtRGV2aWNlTWFuYWdlcigpOworCisgICAgUGFz
c1JlZlB0cjxEZXZpY2VMaXN0PiBjcmVhdGVEZXZpY2VMaXN0KGNvbnN0IERldmljZVR5cGUpOwor
ICAgIFBhc3NSZWZQdHI8RGV2aWNlRGF0YT4gY3JlYXRlRGV2aWNlRGF0YShEZXZpY2VMaXN0Kik7
CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFN0cmVhbURldmljZU1hbmFnZXI+IG1fc3RyZWFtRGV2
aWNlTWFuYWdlcjsKK307CisKK0RldmljZU1hbmFnZXJQcm94eSYgZGV2aWNlTWFuYWdlclByb3h5
KCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShERVZJQ0Vf
RUxFTUVOVCkKKworI2VuZGlmIC8vIERldmljZU1hbmFnZXJQcm94eV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kZXZpY2UvRGV2aWNlVHlwZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
ZGV2aWNlL0RldmljZVR5cGVJbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41ZTNhMDdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGV2aWNlL0Rl
dmljZVR5cGVJbmZvLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRp
b24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShERVZJQ0VfRUxFTUVOVCkKKworI2luY2x1ZGUgIkRldmljZVR5
cGVJbmZvLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgRGV2aWNlVHlwZUluZm8m
IGRldmljZVR5cGVJbmZvKERldmljZVR5cGUgdHlwZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgRGV2
aWNlVHlwZUluZm8gZGV2aWNlSW5mb0xpc3RbXSA9IHsKKyAgICAgICAgRGV2aWNlVHlwZUluZm8o
Ik1lZGlhIiwgZmFsc2UpLAorICAgICAgICBEZXZpY2VUeXBlSW5mbygiQXVkaW8iLCBmYWxzZSks
CisgICAgICAgIERldmljZVR5cGVJbmZvKCJWaWRlbyIsIGZhbHNlKQorICAgIH07CisKKyAgICBB
U1NFUlQodHlwZSA+PSAwICYmIHR5cGUgPCBVbmtub3duRGV2aWNlVHlwZSk7CisgICAgcmV0dXJu
IGRldmljZUluZm9MaXN0W3R5cGVdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kZXZpY2UvRGV2aWNlVHlwZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL2RldmljZS9EZXZpY2VU
eXBlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxM2QxYjUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kZXZpY2UvRGV2aWNlVHlwZUluZm8uaApA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwor
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGV2aWNlVHlwZUluZm9faAorI2RlZmlu
ZSBEZXZpY2VUeXBlSW5mb19oCisKKyNpZiBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gRGV2
aWNlVHlwZSB7CisgICAgTWVkaWFEZXZpY2VUeXBlLAorICAgIEF1ZGlvRGV2aWNlVHlwZSwKKyAg
ICBWaWRlb0RldmljZVR5cGUsCisgICAgVW5rbm93bkRldmljZVR5cGUKK307CisKK2NsYXNzIERl
dmljZVR5cGVJbmZvIHsKK3B1YmxpYzoKKyAgICBEZXZpY2VUeXBlSW5mbyhTdHJpbmcgZGV2aWNl
VHlwZUxhYmVsLCBib29sIHN1cHBvcnRzTXVsdGlwbGVTZWxlY3Rpb25zKQorICAgICAgICA6IG1f
ZGV2aWNlVHlwZUxhYmVsKGRldmljZVR5cGVMYWJlbCkKKyAgICAgICAgLCBtX3N1cHBvcnRzTXVs
dGlwbGVTZWxlY3Rpb25zKHN1cHBvcnRzTXVsdGlwbGVTZWxlY3Rpb25zKQorICAgIHsgfQorCisg
ICAgU3RyaW5nIGRldmljZVR5cGVMYWJlbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlVHlwZUxh
YmVsOyB9CisgICAgYm9vbCBzdXBwb3J0c011bHRpcGxlU2VsZWN0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fc3VwcG9ydHNNdWx0aXBsZVNlbGVjdGlvbnM7IH0KKworcHJpdmF0ZToKKyAgICBTdHJp
bmcgbV9kZXZpY2VUeXBlTGFiZWw7CisgICAgYm9vbCBtX3N1cHBvcnRzTXVsdGlwbGVTZWxlY3Rp
b25zOworfTsKKworY29uc3QgRGV2aWNlVHlwZUluZm8mIGRldmljZVR5cGVJbmZvKERldmljZVR5
cGUpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoREVWSUNF
X0VMRU1FTlQpCisKKyNlbmRpZiAvLyBEZXZpY2VUeXBlSW5mb19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxEZXZpY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTERldmljZUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQzYWY4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxE
ZXZpY2VFbGVtZW50LmNwcApAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBFcmljc3NvbiBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0
aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisKKyNpbmNsdWRlICJIVE1MRGV2
aWNlRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiRGV2aWNlTWFu
YWdlclByb3h5LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNs
dWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyQnV0dG9uLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwordHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgRGV2aWNlVHlwZSwgQ2FzZUZvbGRpbmdIYXNoPiBEZXZpY2VUeXBl
TWFwOworCitzdGF0aWMgUGFzc093blB0cjxEZXZpY2VUeXBlTWFwPiBjcmVhdGVEZXZpY2VUeXBl
TWFwKCkKK3sKKyAgICBPd25QdHI8RGV2aWNlVHlwZU1hcD4gbWFwID0gYWRvcHRQdHIobmV3IERl
dmljZVR5cGVNYXApOworICAgIG1hcC0+YWRkKERldmljZVR5cGVOYW1lczo6bWVkaWEoKSwgTWVk
aWFEZXZpY2VUeXBlKTsKKyAgICBtYXAtPmFkZChEZXZpY2VUeXBlTmFtZXM6OmF1ZGlvKCksIEF1
ZGlvRGV2aWNlVHlwZSk7CisgICAgbWFwLT5hZGQoRGV2aWNlVHlwZU5hbWVzOjp2aWRlbygpLCBW
aWRlb0RldmljZVR5cGUpOworICAgIHJldHVybiBtYXAucmVsZWFzZSgpOworfQorCitIVE1MRGV2
aWNlRWxlbWVudDo6SFRNTERldmljZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAs
IG1fZGF0YSgwKQorICAgICwgbV9kZXZpY2VMaXN0KDApCit7CisgICAgQVNTRVJUKGhhc1RhZ05h
bWUoZGV2aWNlVGFnKSk7Cit9CisKK0hUTUxEZXZpY2VFbGVtZW50Ojp+SFRNTERldmljZUVsZW1l
bnQoKQoreworfQorCitQYXNzUmVmUHRyPEhUTUxEZXZpY2VFbGVtZW50PiBIVE1MRGV2aWNlRWxl
bWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEhUTUxEZXZpY2VFbGVtZW50KGRldmljZVRhZywgZG9jdW1lbnQpKTsKK30KKworUGFzc1Jl
ZlB0cjxIVE1MRGV2aWNlRWxlbWVudD4gSFRNTERldmljZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBIVE1MRGV2aWNlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOworfQor
CitTdHJpbmcgSFRNTERldmljZUVsZW1lbnQ6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUodHlwZUF0dHIpOworfQorCit2b2lkIEhUTUxEZXZpY2VFbGVtZW50OjpzZXRU
eXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHR5
cGUpOworfQorCitSZW5kZXJPYmplY3QqIEhUTUxEZXZpY2VFbGVtZW50OjpjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKK3sKKyAgICByZXR1cm4gbmV3IChh
cmVuYSkgUmVuZGVyQnV0dG9uKHRoaXMpOworfQorCit2b2lkIEhUTUxEZXZpY2VFbGVtZW50Ojph
dHRhY2goKQoreworICAgIEFTU0VSVCghYXR0YWNoZWQoKSk7CisKKyAgICBIVE1MRWxlbWVudDo6
YXR0YWNoKCk7CisKKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVu
ZGVyQnV0dG9uKj4ocmVuZGVyZXIoKSktPnNldFRleHQoZGV2aWNlRWxlbWVudEJ1dHRvbkxhYmVs
KCkpOworfQorCit2b2lkIEhUTUxEZXZpY2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqIGF0dHIpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikKKyAg
ICAgICAgdXBkYXRlRGV2aWNlVHlwZSgpOworICAgIGVsc2UKKyAgICAgICAgSFRNTEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCit2b2lkIEhUTUxEZXZpY2VFbGVtZW50
Ojp1cGRhdGVEZXZpY2VUeXBlKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgRGV2aWNlVHlwZU1hcCog
ZGV2aWNlVHlwZU1hcCA9IGNyZWF0ZURldmljZVR5cGVNYXAoKS5sZWFrUHRyKCk7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlU3RyaW5nID0gZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cik7
CisKKyAgICBEZXZpY2VUeXBlTWFwOjpjb25zdF9pdGVyYXRvciByZXN1bHQgPSBkZXZpY2VUeXBl
TWFwLT5maW5kKHR5cGVTdHJpbmcpOworICAgIG1fZGV2aWNlVHlwZSA9IHJlc3VsdCAhPSBkZXZp
Y2VUeXBlTWFwLT5lbmQoKSA/IHJlc3VsdC0+c2Vjb25kIDogVW5rbm93bkRldmljZVR5cGU7Cit9
CisKK3ZvaWQgSFRNTERldmljZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
dCkKK3sKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLkRPTUFjdGl2YXRlRXZl
bnQpIHsKKyAgICAgICAgcnVuRGlhbG9nKCk7CisgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChldnQtPmlzS2V5Ym9hcmRF
dmVudCgpKSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQqIGtleUV2ZW50ID0gc3RhdGljX2Nhc3Q8
S2V5Ym9hcmRFdmVudCo+KGV2dCk7CisKKyAgICAgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGtleUV2ZW50LT5j
aGFyQ29kZSgpKSB7CisgICAgICAgICAgICBjYXNlICdccic6CisgICAgICAgICAgICAgICAgZGlz
cGF0Y2hTaW11bGF0ZWRDbGljayhldnQpOworICAgICAgICAgICAgY2FzZSAnICc6CisgICAgICAg
ICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChrZXlFdmVudC0+a2V5SWRlbnRp
ZmllcigpID09ICJVKzAwMjAiKSB7CisgICAgICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCkKKyAgICAgICAgICAgICAgICBzZXRBY3RpdmUodHJ1ZSwg
dHJ1ZSk7CisgICAgICAgICAgICBlbHNlIHsgLy8ga2V5dXBFdmVudAorICAgICAgICAgICAgICAg
IGlmIChhY3RpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGlj
ayhldnQpOworICAgICAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBIVE1M
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOworfQorCit2b2lkIEhUTUxEZXZpY2VF
bGVtZW50OjpydW5EaWFsb2coKQoreworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZy
YW1lKCk7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmxvYWRlcigpLT5pc1Byb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RGV2aWNlTGlzdD4g
b2xkRGV2aWNlTGlzdCA9IG1fZGV2aWNlTGlzdDsKKyAgICBtX2RldmljZUxpc3QgPSBkZXZpY2VN
YW5hZ2VyUHJveHkoKS5jcmVhdGVEZXZpY2VMaXN0KGRldmljZVR5cGUoKSk7CisKKyAgICBpZiAo
b2xkRGV2aWNlTGlzdCkKKyAgICAgICAgbV9kZXZpY2VMaXN0LT51cGRhdGVTZWxlY3Rpb25zKG9s
ZERldmljZUxpc3QuZ2V0KCkpOworCisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Cisg
ICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKENocm9tZSogY2hyb21lID0g
cGFnZS0+Y2hyb21lKCkpCisgICAgICAgIGNocm9tZS0+cnVuRGV2aWNlRGlhbG9nKG1fZGV2aWNl
TGlzdC5nZXQoKSk7CisKKyAgICBib29sIGhhc1NlbGVjdGlvbnMgPSBtX2RldmljZUxpc3QtPnNl
bGVjdGVkRW50cmllcygpLnNpemUoKTsKKyAgICBib29sIGhhc0NoYW5nZWQgPSBvbGREZXZpY2VM
aXN0ID8gIW1fZGV2aWNlTGlzdC0+c2VsZWN0aW9uc01hdGNoKG9sZERldmljZUxpc3QuZ2V0KCkp
IDogaGFzU2VsZWN0aW9uczsKKyAgICBpZiAoaGFzQ2hhbmdlZCkgeworICAgICAgICBtX2RhdGEg
PSBoYXNTZWxlY3Rpb25zID8gZGV2aWNlTWFuYWdlclByb3h5KCkuY3JlYXRlRGV2aWNlRGF0YSht
X2RldmljZUxpc3QuZ2V0KCkpIDogMDsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgdHJ1ZSwgZmFsc2UpKTsKKyAgICB9Cit9CisK
K2Jvb2wgSFRNTERldmljZUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAoreworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEhUTUxEZXZpY2VFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNCb3goKSAmJiAh
dG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPnNpemUoKS5pc0VtcHR5KCkKKyAgICAgICAgICAgICYm
IEhUTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOworfQorCitib29sIEhUTUxEZXZpY2VFbGVtZW50
Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAg
IHJldHVybiBpc0ZvY3VzYWJsZSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkKKyAgICAgICAgICAg
ICYmIGRvY3VtZW50KCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT50YWJzVG9BbGxDb250cm9s
cyhldmVudCk7Cit9CisKK2Jvb2wgSFRNTERldmljZUVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUo
KSBjb25zdAoreworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCisgICAgcmV0dXJu
IEhUTUxFbGVtZW50Ojppc01vdXNlRm9jdXNhYmxlKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgorfQorCituYW1lc3BhY2UgRGV2aWNlVHlwZU5hbWVzIHsKKworY29uc3QgQXRv
bWljU3RyaW5nJiBtZWRpYSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJp
bmcsIG5hbWUsICgibWVkaWEiKSk7CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK2NvbnN0IEF0b21p
Y1N0cmluZyYgYXVkaW8oKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBuYW1lLCAoImF1ZGlvIikpOworICAgIHJldHVybiBuYW1lOworfQorCitjb25zdCBBdG9taWNT
dHJpbmcmIHZpZGVvKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywg
bmFtZSwgKCJ2aWRlbyIpKTsKKyAgICByZXR1cm4gbmFtZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZTo6RGV2aWNlVHlwZU5hbWVzCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXZpY2VFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXZpY2VFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzYjE3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTERldmljZUVsZW1lbnQuaApAQCAtMCwwICsxLDkzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSFRNTERldmljZUVsZW1lbnRfaAorI2RlZmluZSBIVE1MRGV2aWNlRWxlbWVudF9o
CisKKyNpZiBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisKKyNpbmNsdWRlICJEZXZpY2VEYXRhLmgi
CisjaW5jbHVkZSAiRGV2aWNlTGlzdC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTERldmljZUVsZW1lbnQgOiBwdWJsaWMgSFRN
TEVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxEZXZpY2VFbGVt
ZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRGV2aWNl
RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIH5I
VE1MRGV2aWNlRWxlbWVudCgpOworCisgICAgRGV2aWNlVHlwZSBkZXZpY2VUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9kZXZpY2VUeXBlOyB9OworCisgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKKyAg
ICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJik7CisKKyAgICBEZXZpY2VEYXRhKiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1
c2FibGUoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsK
KworICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OworCitwcml2
YXRlOgorICAgIEhUTUxEZXZpY2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOworCisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hKiwgUmVuZGVyU3R5bGUqKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKTsKKyAgICB2b2lkIHVwZGF0ZURldmljZVR5cGUoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZvaWQgcnVuRGlhbG9n
KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBjYW5TdGFydFNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAg
ICBSZWZQdHI8RGV2aWNlRGF0YT4gbV9kYXRhOworICAgIERldmljZVR5cGUgbV9kZXZpY2VUeXBl
OworICAgIFJlZlB0cjxEZXZpY2VMaXN0PiBtX2RldmljZUxpc3Q7Cit9OworCituYW1lc3BhY2Ug
RGV2aWNlVHlwZU5hbWVzIHsKKworY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYSgpOworY29uc3Qg
QXRvbWljU3RyaW5nJiBhdWRpbygpOworY29uc3QgQXRvbWljU3RyaW5nJiB2aWRlbygpOworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlOjpEZXZpY2VUeXBlTmFtZXMKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRGV2aWNlRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXZpY2VF
bGVtZW50LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjZjMmYxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV2aWNlRWxlbWVudC5p
ZGwKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBB
QgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVp
dGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgaHRtbCB7CisKKyAgICBpbnRlcmZh
Y2UgW0NvbmRpdGlvbmFsPURFVklDRV9FTEVNRU5UXSBIVE1MRGV2aWNlRWxlbWVudCA6IEhUTUxF
bGVtZW50IHsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0
cmluZ10gRE9NU3RyaW5nIHR5cGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ3VzdG9t
R2V0dGVyXSBhbnkgZGF0YTsKKyAgICB9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCmluZGV4IGI3ZWNhMDYuLjkxMzUyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCkBAIC04OSw2ICs4OSw5IEBAIGJvb2wgSFRNTEVsZW1lbnQ6OmllRm9yYmlkc0luc2VydEhU
TUwoKSBjb25zdAogICAgICAgICB8fCBoYXNMb2NhbE5hbWUoZGNlbGxUYWcpCiAgICAgICAgIHx8
IGhhc0xvY2FsTmFtZShkY29sVGFnKQogI2VuZGlmCisjaWYgRU5BQkxFKERFVklDRV9FTEVNRU5U
KQorICAgICAgICB8fCBoYXNMb2NhbE5hbWUoZGV2aWNlVGFnKQorI2VuZGlmCiAgICAgICAgIHx8
IGhhc0xvY2FsTmFtZShlbWJlZFRhZykKICAgICAgICAgfHwgaGFzTG9jYWxOYW1lKGZyYW1lVGFn
KQogICAgICAgICB8fCBoYXNMb2NhbE5hbWUoaHJUYWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbiBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhZ05h
bWVzLmluCmluZGV4IDgzZDQxZGUuLjgwMmFjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRhZ05hbWVzLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhZ05h
bWVzLmluCkBAIC0zMyw2ICszMyw3IEBAIGRhdGFncmlkIGludGVyZmFjZU5hbWU9SFRNTERhdGFH
cmlkRWxlbWVudCwgY29uZGl0aW9uYWw9REFUQUdSSUQKIGRhdGFsaXN0IGludGVyZmFjZU5hbWU9
SFRNTERhdGFMaXN0RWxlbWVudCwgY29uZGl0aW9uYWw9REFUQUxJU1QKIGRjZWxsIGludGVyZmFj
ZU5hbWU9SFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQsIGNvbmRpdGlvbmFsPURBVEFHUklECiBkY29s
IGludGVyZmFjZU5hbWU9SFRNTERhdGFHcmlkQ29sRWxlbWVudCwgY29uZGl0aW9uYWw9REFUQUdS
SUQKK2RldmljZSBjb25kaXRpb25hbD1ERVZJQ0VfRUxFTUVOVAogZHJvdyBpbnRlcmZhY2VOYW1l
PUhUTUxEYXRhR3JpZFJvd0VsZW1lbnQsIGNvbmRpdGlvbmFsPURBVEFHUklECiBkZCBpbnRlcmZh
Y2VOYW1lPUhUTUxFbGVtZW50CiBkZWwgaW50ZXJmYWNlTmFtZT1IVE1MTW9kRWxlbWVudApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggOTdj
ZWUxMy4uMmU2YWFjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCkBAIC04OTIsNiArODkyLDkgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIH0KICAg
ICBpZiAodG9rZW4ubmFtZSgpID09IGFyZWFUYWcKICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IGJyVGFnCisjaWYgRU5BQkxFKERFVklDRV9FTEVNRU5UKQorICAgICAgICB8fCB0b2tlbi5uYW1l
KCkgPT0gZGV2aWNlVGFnCisjZW5kaWYKICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGVtYmVk
VGFnCiAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBpbWdUYWcKICAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGtleWdlblRhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Vt
cHR5Q2xpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4
IDNlNThjN2EuLmY2NzAzYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0
eUNsaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAg
LTE4OSw2ICsxODksMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwo
RnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNo
b29zZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEZpbGVDaG9vc2VyKikgeyB9
CiAKKyNpZiBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisgICAgdmlydHVhbCB2b2lkIHJ1bkRldmlj
ZURpYWxvZyhEZXZpY2VMaXN0KikgeyB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCBmb3Jt
U3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGZvcm1E
aWRGb2N1cyhjb25zdCBOb2RlKikgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggZDk2YjZj
OS4uZTk0ZWQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNDM1LDYgKzQzNSwxMyBAQCB2
b2lkIENocm9tZTo6Y2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxl
bmFtZXMsIEZpbGVDaG9vc2VyKiBmaQogICAgIG1fY2xpZW50LT5jaG9vc2VJY29uRm9yRmlsZXMo
ZmlsZW5hbWVzLCBmaWxlQ2hvb3Nlcik7CiB9CiAKKyNpZiBFTkFCTEUoREVWSUNFX0VMRU1FTlQp
Cit2b2lkIENocm9tZTo6cnVuRGV2aWNlRGlhbG9nKERldmljZUxpc3QqIGRldmljZUxpc3QpCit7
CisgICAgbV9jbGllbnQtPnJ1bkRldmljZURpYWxvZyhkZXZpY2VMaXN0KTsKK30KKyNlbmRpZgor
CiB2b2lkIENocm9tZTo6ZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UoY29uc3QgVmlld3Bv
cnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3QKIHsKICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hW
aWV3cG9ydERhdGFEaWRDaGFuZ2UoYXJndW1lbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCmluZGV4IDBh
ZmQ4MDcuLjAwOTBiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaApAQCAtNDAsNiArNDAsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBDaHJvbWVDbGllbnQ7CiAgICAgY2xhc3MgQ29u
dGV4dE1lbnU7CisgICAgY2xhc3MgRGV2aWNlTGlzdDsKICAgICBjbGFzcyBGbG9hdFJlY3Q7CiAg
ICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgR2VvbG9jYXRpb247CkBAIC0xNTAsNiArMTUxLDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUq
LCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7CiAgICAgICAgIHZvaWQgY2hvb3NlSWNvbkZvckZp
bGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUNob29zZXIqKTsKIAorI2lmIEVOQUJMRShE
RVZJQ0VfRUxFTUVOVCkKKyAgICAgICAgdm9pZCBydW5EZXZpY2VEaWFsb2coRGV2aWNlTGlzdCop
OworI2VuZGlmCisKICAgICAgICAgdm9pZCBkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShj
b25zdCBWaWV3cG9ydEFyZ3VtZW50cyYpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgcmVxdWlyZXNG
dWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgK
aW5kZXggZTM0OGFmYi4uMzYxZDU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBA
IC00OCw2ICs0OCw3IEBAIGNsYXNzIE5TUmVzcG9uZGVyOwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgQWNjZXNzaWJpbGl0eU9iamVjdDsKKyAgICBjbGFzcyBEZXZpY2VMaXN0Owog
ICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRmlsZUNob29zZXI7CiAgICAgY2xhc3MgRmxv
YXRSZWN0OwpAQCAtMjIyLDYgKzIyMywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IC8vIEFzeW5jaHJvbm91cyByZXF1ZXN0IHRvIGxvYWQgYW4gaWNvbiBmb3Igc3BlY2lmaWVkIGZp
bGVuYW1lcy4KICAgICAgICAgdmlydHVhbCB2b2lkIGNob29zZUljb25Gb3JGaWxlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIEZpbGVDaG9vc2VyKikgPSAwOwogCisjaWYgRU5BQkxFKERFVklDRV9F
TEVNRU5UKQorICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuRGV2aWNlRGlhbG9nKERldmljZUxpc3Qq
KSA9IDA7CisjZW5kaWYKKwogICAgICAgICAvLyBOb3RpZmljYXRpb24gdGhhdCB0aGUgZ2l2ZW4g
Zm9ybSBlbGVtZW50IGhhcyBjaGFuZ2VkLiBUaGlzIGZ1bmN0aW9uCiAgICAgICAgIC8vIHdpbGwg
YmUgY2FsbGVkIGZyZXF1ZW50bHksIHNvIGhhbmRsaW5nIHNob3VsZCBiZSB2ZXJ5IGZhc3QuCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCAyNmZmNmQ2Li44Y2RmYjZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC00MjcsNiArNDI3LDcgQEAgbW9kdWxlIHdpbmRvdyB7
CiAgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9REFUQUdSSURdIEhUTUxEYXRhR3JpZEVs
ZW1lbnRDb25zdHJ1Y3RvciBIVE1MRGF0YUdyaWRFbGVtZW50OwogICAgICAgICBhdHRyaWJ1dGUg
W0NvbmRpdGlvbmFsPURBVEFHUklEXSBIVE1MRGF0YUdyaWRDZWxsRWxlbWVudENvbnN0cnVjdG9y
IEhUTUxEYXRhR3JpZENlbGxFbGVtZW50OwogICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFs
PURBVEFHUklEXSBIVE1MRGF0YUdyaWRDb2xFbGVtZW50Q29uc3RydWN0b3IgSFRNTERhdGFHcmlk
Q29sRWxlbWVudDsKKyAgICAgICAgYXR0cmlidXRlIFtDb25kaXRpb25hbD1ERVZJQ0VfRUxFTUVO
VF0gSFRNTERldmljZUVsZW1lbnRDb25zdHJ1Y3RvciBIVE1MRGV2aWNlRWxlbWVudDsKICAgICAg
ICAgYXR0cmlidXRlIEhUTUxETGlzdEVsZW1lbnRDb25zdHJ1Y3RvciBIVE1MRExpc3RFbGVtZW50
OwogICAgICAgICBhdHRyaWJ1dGUgSFRNTERpcmVjdG9yeUVsZW1lbnRDb25zdHJ1Y3RvciBIVE1M
RGlyZWN0b3J5RWxlbWVudDsKICAgICAgICAgYXR0cmlidXRlIEhUTUxEaXZFbGVtZW50Q29uc3Ry
dWN0b3IgSFRNTERpdkVsZW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Mb2NhbGl6ZWRTdHJpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRT
dHJpbmdzLmgKaW5kZXggZGEwZmU4Ni4uM2M0MWI0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xvY2FsaXplZFN0cmluZ3MuaApAQCAtMzksNiArMzksOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgU3RyaW5nIHN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpOwogICAgIFN0cmluZyBm
aWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCk7CiAgICAgU3RyaW5nIGZpbGVCdXR0b25Ob0ZpbGVT
ZWxlY3RlZExhYmVsKCk7CisjaWYgRU5BQkxFKERFVklDRV9FTEVNRU5UKQorICAgIFN0cmluZyBk
ZXZpY2VFbGVtZW50QnV0dG9uTGFiZWwoKTsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIFN0cmluZyBjb3B5SW1hZ2VVbmtub3duRmlsZUxhYmVsKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9kZXZpY2UvU3RyZWFtRGV2aWNlTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9kZXZpY2UvU3RyZWFtRGV2aWNlTWFuYWdlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2OGFmZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2RldmljZS9TdHJlYW1EZXZpY2VNYW5hZ2VyLmNwcApA
QCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwor
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShERVZJQ0VfRUxFTUVOVCkKKworI2luY2x1ZGUgIlN0cmVhbURldmljZU1hbmFnZXIuaCIKKwor
I2lmIDAKKyNlbHNlCisjZGVmaW5lIFN0cmVhbURldmljZU1hbmFnZXJQcml2YXRlQ2xhc3NOYW1l
IE51bGxTdHJlYW1EZXZpY2VNYW5hZ2VyUHJpdmF0ZQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgTnVsbFN0cmVhbURldmljZU1hbmFnZXJQcml2YXRlIDogcHVibGljIFN0
cmVhbURldmljZU1hbmFnZXJQcml2YXRlSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
U3RyZWFtRGV2aWNlTWFuYWdlclByaXZhdGVJbnRlcmZhY2UqIGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IE51bGxTdHJlYW1EZXZpY2VNYW5hZ2VyUHJpdmF0ZSgpOworICAgIH0K
KworICAgIFBhc3NSZWZQdHI8RGV2aWNlTGlzdD4gY3JlYXRlRGV2aWNlTGlzdChjb25zdCBEZXZp
Y2VUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldmljZUxpc3Q6OmNyZWF0ZShWZWN0b3I8
UmVmUHRyPERldmljZUxpc3RFbnRyeT4gPigpKTsKKyAgICB9Cit9OworCitTdHJlYW1EZXZpY2VN
YW5hZ2VyOjpTdHJlYW1EZXZpY2VNYW5hZ2VyKCkKKyAgICA6IG1fcHJpdmF0ZShTdHJlYW1EZXZp
Y2VNYW5hZ2VyUHJpdmF0ZUNsYXNzTmFtZTo6Y3JlYXRlKCkpCit7Cit9CisKK1Bhc3NSZWZQdHI8
RGV2aWNlTGlzdD4gU3RyZWFtRGV2aWNlTWFuYWdlcjo6Y3JlYXRlRGV2aWNlTGlzdChjb25zdCBE
ZXZpY2VUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlRGV2aWNlTGlz
dCh0eXBlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KERFVklDRV9FTEVNRU5UKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZGV2
aWNlL1N0cmVhbURldmljZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Rldmlj
ZS9TdHJlYW1EZXZpY2VNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNGEzYjdjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Rl
dmljZS9TdHJlYW1EZXZpY2VNYW5hZ2VyLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBFcmljc3NvbiBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAg
ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFN0cmVhbURldmljZU1hbmFnZXJfaAorI2RlZmluZSBTdHJlYW1EZXZpY2VNYW5hZ2VyX2gK
KworI2lmIEVOQUJMRShERVZJQ0VfRUxFTUVOVCkKKworI2luY2x1ZGUgIkRldmljZUxpc3QuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmVhbURldmljZU1hbmFn
ZXJQcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyZWFtRGV2aWNl
TWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFN0cmVhbURldmljZU1hbmFnZXI+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJlYW1EZXZpY2VNYW5hZ2VyPiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJlYW1EZXZpY2VNYW5hZ2VyKCkp
OworICAgIH0KKworICAgIFBhc3NSZWZQdHI8RGV2aWNlTGlzdD4gY3JlYXRlRGV2aWNlTGlzdChj
b25zdCBEZXZpY2VUeXBlKTsKKworcHJpdmF0ZToKKyAgICBTdHJlYW1EZXZpY2VNYW5hZ2VyKCk7
CisKKyAgICBPd25QdHI8U3RyZWFtRGV2aWNlTWFuYWdlclByaXZhdGVJbnRlcmZhY2UqPiBtX3By
aXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
REVWSUNFX0VMRU1FTlQpCisKKyNlbmRpZiAvLyBTdHJlYW1EZXZpY2VNYW5hZ2VyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2RldmljZS9TdHJlYW1EZXZpY2VNYW5hZ2Vy
UHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZGV2aWNlL1N0cmVhbURldmljZU1h
bmFnZXJQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y2Mzhm
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2RldmljZS9TdHJl
YW1EZXZpY2VNYW5hZ2VyUHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTdHJlYW1EZXZpY2VNYW5hZ2VyUHJpdmF0ZV9oCisjZGVmaW5lIFN0cmVhbURldmljZU1hbmFn
ZXJQcml2YXRlX2gKKworI2lmIEVOQUJMRShERVZJQ0VfRUxFTUVOVCkKKworI2luY2x1ZGUgIkRl
dmljZUxpc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFN0cmVhbURldmljZU1hbmFnZXJQcml2YXRlSW50ZXJmYWNlIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGV2aWNlTGlzdD4gY3JlYXRlRGV2aWNlTGlz
dChjb25zdCBEZXZpY2VUeXBlKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisKKyNlbmRpZiAvLyBTdHJlYW1EZXZp
Y2VNYW5hZ2VyUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggMTQ0NmM1OC4uNWU2MmIxOCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTAxLTI4ICBB
ZGFtIEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29uLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgdGhlIGRldmlj
ZSBlbGVtZW50IGFzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI2NAorCisgICAgICAgIEFkZGVkIC0tZGV2
aWNlLWVsZW1lbnQgYnVpbGQgb3B0aW9uCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtp
dDoKKwogMjAxMS0wMS0yNyAgSm9vbmUgSHVyIDxqb29uZS5odXJAY29sbGFib3JhLmNvLnVrPgog
CiAgICAgICAgIFVucmV2aWV3ZWQuIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13
ZWJraXQgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCAwYjU4MTEzLi44M2UwZWE4
IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3Jp
cHRzL2J1aWxkLXdlYmtpdApAQCAtNzAsNiArNzAsNyBAQCBteSAoCiAgICAgJGRhdGFiYXNlU3Vw
cG9ydCwKICAgICAkZGF0YWdyaWRTdXBwb3J0LAogICAgICRkYXRhbGlzdFN1cHBvcnQsCisgICAg
JGRldmljZUVsZW1lbnRTdXBwb3J0LAogICAgICRkZXZpY2VPcmllbnRhdGlvblN1cHBvcnQsCiAg
ICAgJGRpcmVjdG9yeVVwbG9hZFN1cHBvcnQsCiAgICAgJGRvbVN0b3JhZ2VTdXBwb3J0LApAQCAt
MTQ2LDYgKzE0Nyw5IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICB7IG9wdGlvbiA9PiAiZGF0YWxp
c3QiLCBkZXNjID0+ICJUb2dnbGUgSFRNTDUgZGF0YWxpc3Qgc3VwcG9ydCIsCiAgICAgICBkZWZp
bmUgPT4gIkVOQUJMRV9EQVRBTElTVCIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRkYXRhbGlz
dFN1cHBvcnQgfSwKIAorICAgIHsgb3B0aW9uID0+ICJkZXZpY2UtZWxlbWVudCIsIGRlc2MgPT4g
IlRvZ2dsZSBkZXZpY2UgZWxlbWVudCBzdXBwb3J0IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxF
X0RFVklDRV9FTEVNRU5UIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJGRldmljZUVsZW1lbnRT
dXBwb3J0IH0sCisKICAgICB7IG9wdGlvbiA9PiAiZGV2aWNlLW9yaWVudGF0aW9uIiwgZGVzYyA9
PiAiVG9nZ2xlIERldmljZU9yaWVudGF0aW9uIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJF
TkFCTEVfREVWSUNFX09SSUVOVEFUSU9OIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJGRldmlj
ZU9yaWVudGF0aW9uU3VwcG9ydCB9LAogCg==
</data>
<flag name="review"
          id="71890"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81085</attachid>
            <date>2011-02-03 10:54:35 -0800</date>
            <delta_ts>2011-03-14 08:09:41 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>device_element_2.patch</filename>
            <type>text/plain</type>
            <size>61493</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5OTNhZDc3Li5hMzc3ODIxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDIt
MDMgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSB0aGUg
ZGV2aWNlIGVsZW1lbnQgYXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MjY0CisKKyAgICAgICAgVGVzdCB0
aGF0IGRldmljZSBpcyBhIHZvaWQgZWxlbWVudC4KKworICAgICAgICAqIGh0bWw1bGliL3Jlc291
cmNlcy93ZWJraXQwMi5kYXQ6CisKIDIwMTEtMDItMDMgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9z
c3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZWJhc2VsaW5lIFF0IHN2ZyB0
ZXN0cyBhZnRlciByNzc0ODUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odG1sNWxpYi9yZXNv
dXJjZXMvd2Via2l0MDIuZGF0IGIvTGF5b3V0VGVzdHMvaHRtbDVsaWIvcmVzb3VyY2VzL3dlYmtp
dDAyLmRhdAppbmRleCA0Njg4NzliLi4yMmVjMDQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dG1sNWxpYi9yZXNvdXJjZXMvd2Via2l0MDIuZGF0CisrKyBiL0xheW91dFRlc3RzL2h0bWw1bGli
L3Jlc291cmNlcy93ZWJraXQwMi5kYXQKQEAgLTkyLDMgKzkyLDEzIEBACiB8ICAgICAgICAgPHRy
PgogfCAgICAgICAgICAgPHRkPgogfCAgICAgICAgICAgICAiQSIKKworI2RhdGEKKzxkZXZpY2U+
PGRpdj48L2Rpdj4KKyNlcnJvcnMKKyNkb2N1bWVudAorfCA8aHRtbD4KK3wgICA8aGVhZD4KK3wg
ICA8Ym9keT4KK3wgICAgIDxkZXZpY2U+Cit8ICAgICA8ZGl2PgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGIzYWY1
OTguLjI2ODVlMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDQgQEAKKzIwMTEtMDItMDMgIEFk
YW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSB0aGUgZGV2aWNl
IGVsZW1lbnQgYXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MjY0CisKKyAgICAgICAgQWRkZWQgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIGRldmljZSBlbGVtZW50CisgICAgICAgIGh0dHA6Ly93d3cud2hhdHdn
Lm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1hbmRzLmh0bWwj
ZGV2aWNlcworCisgICAgICAgIEZ1bmN0aW9uYWxpdHkgY3VycmVudGx5IG5vdCB0ZXN0YWJsZSAo
cGFyc2VyIHRlc3QgYWRkZWQpCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxEZXZpY2VF
bGVtZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxEZXZpY2VF
bGVtZW50OjpkYXRhKToKKyAgICAgICAgKiBjc3MvaHRtbC5jc3M6CisgICAgICAgIChidXR0b24s
IGRldmljZSk6CisgICAgICAgIChpbnB1dCwgdGV4dGFyZWEsIGtleWdlbiwgc2VsZWN0LCBidXR0
b24sIGlzaW5kZXgsIG1ldGVyLCBwcm9ncmVzcywgZGV2aWNlKToKKyAgICAgICAgKGlucHV0LCB0
ZXh0YXJlYSwga2V5Z2VuLCBzZWxlY3QsIGJ1dHRvbiwgaXNpbmRleCwgZGF0YWdyaWQsIGRldmlj
ZSk6CisgICAgICAgIChpbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0ic3VibWl0Il0s
IGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6LXdlYmtpdC1maWxlLXVw
bG9hZC1idXR0b24sIGJ1dHRvbiwgZGV2aWNlKToKKyAgICAgICAgKGlucHV0W3R5cGU9ImJ1dHRv
biJdOmFjdGl2ZSwgaW5wdXRbdHlwZT0ic3VibWl0Il06YWN0aXZlLCBpbnB1dFt0eXBlPSJyZXNl
dCJdOmFjdGl2ZSwgaW5wdXRbdHlwZT0iZmlsZSJdOmFjdGl2ZTo6LXdlYmtpdC1maWxlLXVwbG9h
ZC1idXR0b24sIGJ1dHRvbjphY3RpdmUsIGRldmljZTphY3RpdmUpOgorICAgICAgICAqIGRldmlj
ZS9EZXZpY2VEYXRhLmg6IEFkZGVkLgorICAgICAgICAqIGRldmljZS9EZXZpY2VEaWFsb2dDbGll
bnQuaDogQWRkZWQuCisgICAgICAgICogZGV2aWNlL0RldmljZUxpc3QuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRldmljZUxpc3Q6OnVwZGF0ZVNlbGVjdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6RGV2aWNlTGlzdDo6c2VsZWN0ZWRFbnRyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkRldmljZUxpc3Q6OnNlbGVjdGlvbnNNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpEZXZpY2VM
aXN0Ojp0eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpEZXZpY2VMaXN0OjpnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGV2aWNlTGlzdDo6bGVuZ3RoKToKKyAgICAgICAgKiBkZXZpY2UvRGV2aWNl
TGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRldmljZUxpc3RFbnRyeTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRldmljZUxpc3RFbnRyeTo6aWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGV2aWNlTGlzdEVudHJ5Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkRldmljZUxp
c3RFbnRyeTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGV2aWNlTGlzdEVudHJ5
OjpzZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpEZXZpY2VMaXN0RW50cnk6OnNldFNlbGVj
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRldmljZUxpc3RFbnRyeTo6c2FtZUVudHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRldmljZUxpc3RFbnRyeTo6RGV2aWNlTGlzdEVudHJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRldmljZUxpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZXZp
Y2VMaXN0OjpEZXZpY2VMaXN0KToKKyAgICAgICAgKiBkZXZpY2UvRGV2aWNlTWFuYWdlclByb3h5
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VNYW5hZ2VyUHJveHkpOgorICAg
ICAgICAoV2ViQ29yZTo6RGV2aWNlTWFuYWdlclByb3h5OjpEZXZpY2VNYW5hZ2VyUHJveHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RGV2aWNlTWFuYWdlclByb3h5OjpzdHJlYW1EZXZpY2VNYW5hZ2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRldmljZU1hbmFnZXJQcm94eTo6Y3JlYXRlRGV2aWNlTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpEZXZpY2VNYW5hZ2VyUHJveHk6OmNyZWF0ZURldmljZURh
dGEpOgorICAgICAgICAqIGRldmljZS9EZXZpY2VNYW5hZ2VyUHJveHkuaDogQWRkZWQuCisgICAg
ICAgICogZGV2aWNlL0RldmljZVR5cGVJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpkZXZpY2VUeXBlSW5mbyk6CisgICAgICAgICogZGV2aWNlL0RldmljZVR5cGVJbmZvLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGV2aWNlVHlwZUluZm86OkRldmljZVR5cGVJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OkRldmljZVR5cGVJbmZvOjpkZXZpY2VUeXBlTGFiZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGV2aWNlVHlwZUluZm86OnN1cHBvcnRzTXVsdGlwbGVTZWxlY3Rpb25z
KToKKyAgICAgICAgKiBodG1sL0hUTUxEZXZpY2VFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVEZXZpY2VUeXBlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxE
ZXZpY2VFbGVtZW50OjpIVE1MRGV2aWNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RGV2aWNlRWxlbWVudDo6fkhUTUxEZXZpY2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxEZXZpY2VFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERldmljZUVs
ZW1lbnQ6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERldmljZUVsZW1lbnQ6OnNldFR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERldmljZUVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50OjphdHRhY2gpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTERldmljZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50Ojp1cGRhdGVEZXZpY2VUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50OjpydW5EaWFsb2cpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTERldmljZUVsZW1lbnQ6OnNlbGVjdGlvbnNNYWRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50Ojppc0ZvY3VzYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRGV2aWNlRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRGV2aWNlRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpEZXZpY2VUeXBlTmFtZXM6Om1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRldmljZVR5
cGVOYW1lczo6YXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6RGV2aWNlVHlwZU5hbWVzOjp2aWRl
byk6CisgICAgICAgICogaHRtbC9IVE1MRGV2aWNlRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxEZXZpY2VFbGVtZW50OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxEZXZpY2VFbGVtZW50OjpkZXZpY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEZXZp
Y2VFbGVtZW50OjpjYW5TdGFydFNlbGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MRGV2aWNl
RWxlbWVudC5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmllRm9yYmlkc0luc2VydEhUTUwpOgorICAgICAg
ICAqIGh0bWwvSFRNTFRhZ05hbWVzLmluOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NT
dGFydFRhZ0ZvckluQm9keSk6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAg
ICAgICAoV2ViQ29yZTo6RW1wdHlDaHJvbWVDbGllbnQ6OnJ1bkRldmljZURpYWxvZyk6CisgICAg
ICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpydW5EZXZp
Y2VEaWFsb2cpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJv
bWVDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgICogcGxh
dGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oOgorICAgICAgICAqIHBsYXRmb3JtL2RldmljZS9TdHJl
YW1EZXZpY2VNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsU3RyZWFt
RGV2aWNlTWFuYWdlclByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOdWxsU3Ry
ZWFtRGV2aWNlTWFuYWdlclByaXZhdGU6OmNyZWF0ZURldmljZUxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RyZWFtRGV2aWNlTWFuYWdlcjo6U3RyZWFtRGV2aWNlTWFuYWdlcik6CisgICAgICAg
IChXZWJDb3JlOjpTdHJlYW1EZXZpY2VNYW5hZ2VyOjpjcmVhdGVEZXZpY2VMaXN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9kZXZpY2UvU3RyZWFtRGV2aWNlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0cmVhbURldmljZU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZGV2aWNlL1N0cmVhbURldmljZU1hbmFnZXJQcml2YXRlLmg6IEFkZGVkLgorCiAyMDEx
LTAyLTAyICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxEZXZpY2VFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTERldmljZUVsZW1lbnRDdXN0b20uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYzNkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEZXZpY2VFbGVtZW50Q3VzdG9tLmNwcApAQCAt
MCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShE
RVZJQ0VfRUxFTUVOVCkKKworI2luY2x1ZGUgIkpTSFRNTERldmljZUVsZW1lbnQuaCIKKworI2lu
Y2x1ZGUgIkRldmljZURhdGEuaCIKKyNpbmNsdWRlICJIVE1MRGV2aWNlRWxlbWVudC5oIgorCit1
c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVmFsdWUgSlNI
VE1MRGV2aWNlRWxlbWVudDo6ZGF0YShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgSFRN
TERldmljZUVsZW1lbnQqIGRldmljZSA9IHN0YXRpY19jYXN0PEhUTUxEZXZpY2VFbGVtZW50Kj4o
aW1wbCgpKTsKKyAgICBEZXZpY2VEYXRhKiBkYXRhID0gZGV2aWNlLT5kYXRhKCk7CisgICAgaWYg
KCFkYXRhKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisKKyAgICAvLyBGSVhNRSAtIGltcGxl
bWVudCB0aGUgU3RyZWFtIEFQSSAoQnVnIDQ3MjY1KQorICAgIC8vIGlmIChTdHJlYW0qIHN0cmVh
bSA9IGRhdGEtPnRvU3RyZWFtKCkpCisgICAgLy8gICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCgpLCBzdHJlYW0pOworCisgICAgLy8gQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIGpzTnVsbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL2h0bWwuY3NzIGIvU291cmNlL1dlYkNvcmUv
Y3NzL2h0bWwuY3NzCmluZGV4IDc5ZmRlODguLmU5ZDcxNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9odG1sLmNzcworKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvaHRtbC5jc3MKQEAg
LTM0OCwxNiArMzQ4LDE2IEBAIGZpZWxkc2V0IHsKICAgICBib3JkZXI6IDJweCBncm9vdmUgVGhy
ZWVERmFjZQogfQogCi1idXR0b24geworYnV0dG9uLCBkZXZpY2UgewogICAgIC13ZWJraXQtYXBw
ZWFyYW5jZTogYnV0dG9uOwogfQogCiAvKiBGb3JtIGNvbnRyb2xzIGRvbid0IGdvIHZlcnRpY2Fs
LiAqLwotaW5wdXQsIHRleHRhcmVhLCBrZXlnZW4sIHNlbGVjdCwgYnV0dG9uLCBpc2luZGV4LCBt
ZXRlciwgcHJvZ3Jlc3MgeworaW5wdXQsIHRleHRhcmVhLCBrZXlnZW4sIHNlbGVjdCwgYnV0dG9u
LCBpc2luZGV4LCBtZXRlciwgcHJvZ3Jlc3MsIGRldmljZSB7CiAgICAgLXdlYmtpdC1ibG9jay1m
bG93OiB0YiAhaW1wb3J0YW50OwogfQogCi1pbnB1dCwgdGV4dGFyZWEsIGtleWdlbiwgc2VsZWN0
LCBidXR0b24sIGlzaW5kZXgsIGRhdGFncmlkIHsKK2lucHV0LCB0ZXh0YXJlYSwga2V5Z2VuLCBz
ZWxlY3QsIGJ1dHRvbiwgaXNpbmRleCwgZGF0YWdyaWQsIGRldmljZSB7CiAgICAgbWFyZ2luOiAw
X19xZW07CiAgICAgZm9udDogLXdlYmtpdC1zbWFsbC1jb250cm9sOwogICAgIGNvbG9yOiBpbml0
aWFsOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIGlucHV0W3R5cGU9ImJ1dHRvbiJdLCBpbnB1dFt0eXBl
PSJzdWJtaXQiXSwgaW5wdXRbdHlwZT0icmVzZXQiXSwgaW5wdXRbdHlwZT0iZmlsCiAgICAgd2hp
dGUtc3BhY2U6IHByZQogfQogCi1pbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0ic3Vi
bWl0Il0sIGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6LXdlYmtpdC1m
aWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbiB7CitpbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRb
dHlwZT0ic3VibWl0Il0sIGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6
LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbiwgZGV2aWNlIHsKICAgICAtd2Via2l0
LWJveC1hbGlnbjogY2VudGVyOwogICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICBjdXJzb3I6
IGRlZmF1bHQ7CkBAIC01MTMsNyArNTEzLDcgQEAgc2VsZWN0OmRpc2FibGVkLCBrZXlnZW46ZGlz
YWJsZWQsIG9wdGdyb3VwOmRpc2FibGVkLCBvcHRpb246ZGlzYWJsZWQsIGRhdGFncmlkOmQKICAg
ICBjb2xvcjogR3JheVRleHQKIH0KIAotaW5wdXRbdHlwZT0iYnV0dG9uIl06YWN0aXZlLCBpbnB1
dFt0eXBlPSJzdWJtaXQiXTphY3RpdmUsIGlucHV0W3R5cGU9InJlc2V0Il06YWN0aXZlLCBpbnB1
dFt0eXBlPSJmaWxlIl06YWN0aXZlOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiwgYnV0dG9u
OmFjdGl2ZSB7CitpbnB1dFt0eXBlPSJidXR0b24iXTphY3RpdmUsIGlucHV0W3R5cGU9InN1Ym1p
dCJdOmFjdGl2ZSwgaW5wdXRbdHlwZT0icmVzZXQiXTphY3RpdmUsIGlucHV0W3R5cGU9ImZpbGUi
XTphY3RpdmU6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uLCBidXR0b246YWN0aXZlLCBkZXZp
Y2U6YWN0aXZlIHsKICAgICBib3JkZXItc3R5bGU6IGluc2V0CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RldmljZS9EZXZpY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kZXZpY2Uv
RGV2aWNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzc3YjEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kZXZpY2UvRGV2aWNlRGF0YS5oCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisg
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZXZpY2VEYXRhX2gKKyNkZWZpbmUgRGV2
aWNlRGF0YV9oCisKKyNpZiBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisKKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBTdHJlYW07CisKK2NsYXNzIERldmljZURhdGEgOiBwdWJsaWMgUmVmQ291
bnRlZDxEZXZpY2VEYXRhPiB7CitwdWJsaWM6CisgICAgLy8gRklYTUUgLSBpbXBsZW1lbnQgdGhl
IFN0cmVhbSBBUEkgKEJ1ZyA0NzI2NSkKKyAgICAvLyB2aXJ0dWFsIFN0cmVhbSogdG9TdHJlYW0o
KSB7IHJldHVybiAwOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisKKyNlbmRpZiAvLyBEZXZpY2VEYXRhX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RldmljZS9EZXZpY2VEaWFsb2dDbGllbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RldmljZS9EZXZpY2VEaWFsb2dDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41MWU4NzM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZGV2aWNlL0RldmljZURpYWxvZ0NsaWVudC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
ICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBEZXZpY2VEaWFsb2dDbGllbnRfaAorI2RlZmluZSBEZXZpY2VEaWFsb2dDbGllbnRf
aAorCisjaWYgRU5BQkxFKERFVklDRV9FTEVNRU5UKQorCisjaW5jbHVkZSAiRGV2aWNlTGlzdC5o
IgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRGV2aWNlRGlhbG9nQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIERldmljZVR5
cGUgZGV2aWNlVHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uc01h
ZGUoUGFzc1JlZlB0cjxEZXZpY2VMaXN0PikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERFVklDRV9FTEVNRU5UKQorCisjZW5kaWYgLy8gRGV2
aWNlRGlhbG9nQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RldmljZS9EZXZp
Y2VMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RldmljZS9EZXZpY2VMaXN0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTc0NWFjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvZGV2aWNlL0RldmljZUxpc3QuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNz
c29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShERVZJQ0VfRUxFTUVOVCkK
KworI2luY2x1ZGUgIkRldmljZUxpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lk
IERldmljZUxpc3Q6OnVwZGF0ZVNlbGVjdGlvbnMoRGV2aWNlTGlzdCogcmVmZXJlbmNlTGlzdCkK
K3sKKyAgICBWZWN0b3I8UmVmUHRyPERldmljZUxpc3RFbnRyeT4gPiBzZWxlY3RlZEVudHJpZXMg
PSByZWZlcmVuY2VMaXN0LT5zZWxlY3RlZEVudHJpZXMoKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyAhc2VsZWN0ZWRFbnRyaWVzLmlzRW1wdHkoKSAmJiBpIDwgbV9saXN0RW50cmllcy5zaXpl
KCk7IGkrKykgeworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHNlbGVjdGVkRW50cmll
cy5zaXplKCk7IGorKykgeworICAgICAgICAgICAgaWYgKHNlbGVjdGVkRW50cmllc1tqXS0+c2Ft
ZUVudHJ5KG1fbGlzdEVudHJpZXNbaV0uZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgbV9saXN0
RW50cmllc1tpXS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRF
bnRyaWVzLnJlbW92ZShqKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKworVmVjdG9yPFJlZlB0cjxEZXZpY2VMaXN0RW50cnk+ID4g
RGV2aWNlTGlzdDo6c2VsZWN0ZWRFbnRyaWVzKCkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPERldmlj
ZUxpc3RFbnRyeT4gPiBzZWxlY3RlZEVudHJpZXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fbGlzdEVudHJpZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIGlmIChtX2xpc3RFbnRyaWVz
W2ldLT5zZWxlY3RlZCgpKQorICAgICAgICAgICAgc2VsZWN0ZWRFbnRyaWVzLmFwcGVuZChtX2xp
c3RFbnRyaWVzW2ldKTsKKworICAgIHJldHVybiBzZWxlY3RlZEVudHJpZXM7Cit9CisKK2Jvb2wg
RGV2aWNlTGlzdDo6c2VsZWN0aW9uc01hdGNoKERldmljZUxpc3QqIG90aGVyKQoreworICAgIFZl
Y3RvcjxSZWZQdHI8RGV2aWNlTGlzdEVudHJ5PiA+IG90aGVyU2VsZWN0ZWRFbnRyaWVzID0gb3Ro
ZXItPnNlbGVjdGVkRW50cmllcygpOworCisgICAgZm9yIChpbnQgaSA9IHN0YXRpY19jYXN0PGlu
dD4obV9saXN0RW50cmllcy5zaXplKCkpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgaW50
IGo7CisgICAgICAgIGZvciAoaiA9IHN0YXRpY19jYXN0PGludD4ob3RoZXJTZWxlY3RlZEVudHJp
ZXMuc2l6ZSgpKSAtIDE7IGogPj0gMDsgai0tKSB7CisgICAgICAgICAgICBpZiAob3RoZXJTZWxl
Y3RlZEVudHJpZXNbal0tPnNhbWVFbnRyeShtX2xpc3RFbnRyaWVzW2ldLmdldCgpKSkgeworICAg
ICAgICAgICAgICAgIGlmICghbV9saXN0RW50cmllc1tpXS0+c2VsZWN0ZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG90aGVyU2VsZWN0ZWRF
bnRyaWVzLnJlbW92ZShqKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAoaiA8IDAgJiYgbV9saXN0RW50cmllc1tpXS0+c2VsZWN0
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1ZlY3RvcjxEZXZpY2VUeXBlPiBEZXZpY2VMaXN0Ojp0eXBlcygpCit7CisgICAgVmVj
dG9yPERldmljZVR5cGU+IHR5cGVzOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xp
c3RFbnRyaWVzLnNpemUoKTsgaSsrKQorICAgICAgICBpZiAodHlwZXMuZmluZChtX2xpc3RFbnRy
aWVzW2ldLT50eXBlKCkpID09IFdURjo6bm90Rm91bmQpCisgICAgICAgICAgICB0eXBlcy5hcHBl
bmQobV9saXN0RW50cmllc1tpXS0+dHlwZSgpKTsKKworICAgIHJldHVybiB0eXBlczsKK30KKwor
RGV2aWNlTGlzdEVudHJ5KiBEZXZpY2VMaXN0OjpnZXQoaW50IGluZGV4KQoreworICAgIHJldHVy
biBtX2xpc3RFbnRyaWVzW2luZGV4XS5nZXQoKTsKK30KKworaW50IERldmljZUxpc3Q6Omxlbmd0
aCgpCit7CisgICAgcmV0dXJuIG1fbGlzdEVudHJpZXMuc2l6ZSgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kZXZpY2UvRGV2aWNlTGlzdC5oIGIvU291cmNlL1dlYkNvcmUv
ZGV2aWNlL0RldmljZUxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
ZDRjMTVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZGV2aWNlL0RldmljZUxp
c3QuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3Nv
biBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4g
TmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmli
dXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERldmljZUxpc3RfaAorI2Rl
ZmluZSBEZXZpY2VMaXN0X2gKKworI2lmIEVOQUJMRShERVZJQ0VfRUxFTUVOVCkKKworI2luY2x1
ZGUgIkRldmljZVR5cGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIERldmljZUxpc3RFbnRyeSA6IHB1YmxpYyBSZWZDb3VudGVkPERl
dmljZUxpc3RFbnRyeT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERldmljZUxp
c3RFbnRyeT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IERldmljZVR5cGUgdHlwZSwg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRGV2aWNlTGlzdEVudHJ5KGlkLCB0eXBlLCBkaXNwbGF5TmFtZSkpOworICAgIH0KKwor
ICAgIFN0cmluZyBpZCgpIHsgcmV0dXJuIG1faWQ7IH0KKyAgICBEZXZpY2VUeXBlIHR5cGUoKSB7
IHJldHVybiBtX3R5cGU7IH0KKyAgICBTdHJpbmcgZGlzcGxheU5hbWUoKSB7IHJldHVybiBtX2Rp
c3BsYXlOYW1lOyB9CisKKyAgICBib29sIHNlbGVjdGVkKCkgeyByZXR1cm4gbV9zZWxlY3RlZDsg
fQorICAgIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbCBzZWxlY3RlZCkgeyBtX3NlbGVjdGVkID0gc2Vs
ZWN0ZWQ7IH0KKworICAgIGJvb2wgc2FtZUVudHJ5KERldmljZUxpc3RFbnRyeSogb3RoZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9pZCA9PSBvdGhlci0+bV9pZCAmJiBtX2Rpc3BsYXlOYW1l
ID09IG90aGVyLT5tX2Rpc3BsYXlOYW1lICYmIG1fdHlwZSA9PSBvdGhlci0+bV90eXBlOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBEZXZpY2VMaXN0RW50cnkoY29uc3QgU3RyaW5nJiBpZCwgRGV2
aWNlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lKQorICAgICAgICA6IG1faWQo
aWQpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9kaXNwbGF5TmFtZShkaXNw
bGF5TmFtZSkKKyAgICAgICAgLCBtX3NlbGVjdGVkKGZhbHNlKSB7IH0KKworICAgIFN0cmluZyBt
X2lkOworICAgIERldmljZVR5cGUgbV90eXBlOworICAgIFN0cmluZyBtX2Rpc3BsYXlOYW1lOwor
ICAgIGJvb2wgbV9zZWxlY3RlZDsKK307CisKK2NsYXNzIERldmljZUxpc3QgOiBwdWJsaWMgUmVm
Q291bnRlZDxEZXZpY2VMaXN0PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGV2
aWNlTGlzdD4gY3JlYXRlKGNvbnN0IFZlY3RvcjxSZWZQdHI8RGV2aWNlTGlzdEVudHJ5PiA+JiBs
aXN0RW50cmllcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGV2aWNlTGlz
dChsaXN0RW50cmllcykpOworICAgIH0KKworICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9ucyhEZXZp
Y2VMaXN0KiByZWZlcmVuY2VMaXN0KTsKKyAgICBWZWN0b3I8UmVmUHRyPERldmljZUxpc3RFbnRy
eT4gPiBzZWxlY3RlZEVudHJpZXMoKTsKKyAgICBib29sIHNlbGVjdGlvbnNNYXRjaChEZXZpY2VM
aXN0KiBvdGhlcik7CisgICAgVmVjdG9yPERldmljZVR5cGU+IHR5cGVzKCk7CisKKyAgICBEZXZp
Y2VMaXN0RW50cnkqIGdldChpbnQgaW5kZXgpOworICAgIGludCBsZW5ndGgoKTsKKworcHJpdmF0
ZToKKyAgICBEZXZpY2VMaXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8RGV2aWNlTGlzdEVudHJ5PiA+
JiBsaXN0RW50cmllcykKKyAgICAgICAgOiBtX2xpc3RFbnRyaWVzKGxpc3RFbnRyaWVzKSB7IH0K
KworICAgIFZlY3RvcjxSZWZQdHI8RGV2aWNlTGlzdEVudHJ5PiA+IG1fbGlzdEVudHJpZXM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoREVWSUNFX0VM
RU1FTlQpCisKKyNlbmRpZiAvLyBEZXZpY2VMaXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RldmljZS9EZXZpY2VNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvZGV2aWNl
L0RldmljZU1hbmFnZXJQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTlhODg4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RldmljZS9EZXZp
Y2VNYW5hZ2VyUHJveHkuY3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgRXJpY3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKERFVklDRV9FTEVNRU5UKQorCisjaW5jbHVkZSAiRGV2aWNl
TWFuYWdlclByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGV2aWNlTWFuYWdlclBy
b3h5JiBkZXZpY2VNYW5hZ2VyUHJveHkoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGV2
aWNlTWFuYWdlclByb3h5LCBpbnN0YW5jZSwgKCkpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30K
KworRGV2aWNlTWFuYWdlclByb3h5OjpEZXZpY2VNYW5hZ2VyUHJveHkoKQorICAgIDogbV9zdHJl
YW1EZXZpY2VNYW5hZ2VyKDApCit7Cit9CisKK1N0cmVhbURldmljZU1hbmFnZXIqIERldmljZU1h
bmFnZXJQcm94eTo6c3RyZWFtRGV2aWNlTWFuYWdlcigpCit7CisgICAgaWYgKCFtX3N0cmVhbURl
dmljZU1hbmFnZXIpCisgICAgICAgIG1fc3RyZWFtRGV2aWNlTWFuYWdlciA9IFN0cmVhbURldmlj
ZU1hbmFnZXI6OmNyZWF0ZSgpOworICAgIHJldHVybiBtX3N0cmVhbURldmljZU1hbmFnZXIuZ2V0
KCk7Cit9CisKK1Bhc3NSZWZQdHI8RGV2aWNlTGlzdD4gRGV2aWNlTWFuYWdlclByb3h5OjpjcmVh
dGVEZXZpY2VMaXN0KGNvbnN0IERldmljZVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIE1lZGlhRGV2aWNlVHlwZToKKyAgICBjYXNlIEF1ZGlvRGV2aWNlVHlwZToK
KyAgICBjYXNlIFZpZGVvRGV2aWNlVHlwZToKKyAgICAgICAgcmV0dXJuIHN0cmVhbURldmljZU1h
bmFnZXIoKS0+Y3JlYXRlRGV2aWNlTGlzdCh0eXBlKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gRGV2aWNlTGlzdDo6Y3JlYXRlKFZlY3RvcjxSZWZQdHI8RGV2aWNlTGlzdEVudHJ5PiA+
KCkpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxEZXZpY2VEYXRhPiBEZXZpY2VNYW5hZ2VyUHJv
eHk6OmNyZWF0ZURldmljZURhdGEoRGV2aWNlTGlzdCogZGV2aWNlTGlzdCkKK3sKKyAgICBBU1NF
UlQoZGV2aWNlTGlzdC0+bGVuZ3RoKCkpOworICAgIERldmljZVR5cGUgdHlwZSA9IGRldmljZUxp
c3QtPmdldCgwKS0+dHlwZSgpOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBNZWRp
YURldmljZVR5cGU6CisgICAgY2FzZSBBdWRpb0RldmljZVR5cGU6CisgICAgY2FzZSBWaWRlb0Rl
dmljZVR5cGU6CisgICAgICAgIC8vIEZJWE1FIC0gaW1wbGVtZW50IHRoZSBTdHJlYW0gQVBJIChC
dWcgNDcyNjUpCisgICAgICAgIHJldHVybiAwOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kZXZpY2UvRGV2aWNlTWFuYWdlclByb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kZXZpY2UvRGV2aWNlTWFuYWdlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjEzOTcyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RldmljZS9EZXZpY2VNYW5hZ2VyUHJveHkuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAg
ICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRGV2aWNlTWFuYWdlclByb3h5X2gKKyNkZWZpbmUgRGV2aWNlTWFuYWdlclByb3h5X2gK
KworI2lmIEVOQUJMRShERVZJQ0VfRUxFTUVOVCkKKworI2luY2x1ZGUgIkRldmljZURhdGEuaCIK
KyNpbmNsdWRlICJEZXZpY2VMaXN0LmgiCisjaW5jbHVkZSAiU3RyZWFtRGV2aWNlTWFuYWdlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERldmljZU1hbmFnZXJQcm94eSB7Citw
dWJsaWM6CisgICAgRGV2aWNlTWFuYWdlclByb3h5KCk7CisKKyAgICBTdHJlYW1EZXZpY2VNYW5h
Z2VyKiBzdHJlYW1EZXZpY2VNYW5hZ2VyKCk7CisKKyAgICBQYXNzUmVmUHRyPERldmljZUxpc3Q+
IGNyZWF0ZURldmljZUxpc3QoY29uc3QgRGV2aWNlVHlwZSk7CisgICAgUGFzc1JlZlB0cjxEZXZp
Y2VEYXRhPiBjcmVhdGVEZXZpY2VEYXRhKERldmljZUxpc3QqKTsKKworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8U3RyZWFtRGV2aWNlTWFuYWdlcj4gbV9zdHJlYW1EZXZpY2VNYW5hZ2VyOworfTsKKwor
RGV2aWNlTWFuYWdlclByb3h5JiBkZXZpY2VNYW5hZ2VyUHJveHkoKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERFVklDRV9FTEVNRU5UKQorCisjZW5kaWYg
Ly8gRGV2aWNlTWFuYWdlclByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rldmlj
ZS9EZXZpY2VUeXBlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kZXZpY2UvRGV2aWNlVHlwZUlu
Zm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlM2EwN2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kZXZpY2UvRGV2aWNlVHlwZUluZm8uY3BwCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisg
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KERFVklDRV9FTEVNRU5UKQorCisjaW5jbHVkZSAiRGV2aWNlVHlwZUluZm8uaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjb25zdCBEZXZpY2VUeXBlSW5mbyYgZGV2aWNlVHlwZUluZm8oRGV2
aWNlVHlwZSB0eXBlKQoreworICAgIHN0YXRpYyBjb25zdCBEZXZpY2VUeXBlSW5mbyBkZXZpY2VJ
bmZvTGlzdFtdID0geworICAgICAgICBEZXZpY2VUeXBlSW5mbygiTWVkaWEiLCBmYWxzZSksCisg
ICAgICAgIERldmljZVR5cGVJbmZvKCJBdWRpbyIsIGZhbHNlKSwKKyAgICAgICAgRGV2aWNlVHlw
ZUluZm8oIlZpZGVvIiwgZmFsc2UpCisgICAgfTsKKworICAgIEFTU0VSVCh0eXBlID49IDAgJiYg
dHlwZSA8IFVua25vd25EZXZpY2VUeXBlKTsKKyAgICByZXR1cm4gZGV2aWNlSW5mb0xpc3RbdHlw
ZV07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShERVZJ
Q0VfRUxFTUVOVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RldmljZS9EZXZpY2VUeXBl
SW5mby5oIGIvU291cmNlL1dlYkNvcmUvZGV2aWNlL0RldmljZVR5cGVJbmZvLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzZDFiNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RldmljZS9EZXZpY2VUeXBlSW5mby5oCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nz
b24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBEZXZpY2VUeXBlSW5mb19oCisjZGVmaW5lIERldmljZVR5cGVJbmZvX2gK
KworI2lmIEVOQUJMRShERVZJQ0VfRUxFTUVOVCkKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBEZXZpY2VUeXBlIHsKKyAgICBNZWRp
YURldmljZVR5cGUsCisgICAgQXVkaW9EZXZpY2VUeXBlLAorICAgIFZpZGVvRGV2aWNlVHlwZSwK
KyAgICBVbmtub3duRGV2aWNlVHlwZQorfTsKKworY2xhc3MgRGV2aWNlVHlwZUluZm8geworcHVi
bGljOgorICAgIERldmljZVR5cGVJbmZvKFN0cmluZyBkZXZpY2VUeXBlTGFiZWwsIGJvb2wgc3Vw
cG9ydHNNdWx0aXBsZVNlbGVjdGlvbnMpCisgICAgICAgIDogbV9kZXZpY2VUeXBlTGFiZWwoZGV2
aWNlVHlwZUxhYmVsKQorICAgICAgICAsIG1fc3VwcG9ydHNNdWx0aXBsZVNlbGVjdGlvbnMoc3Vw
cG9ydHNNdWx0aXBsZVNlbGVjdGlvbnMpCisgICAgeyB9CisKKyAgICBTdHJpbmcgZGV2aWNlVHlw
ZUxhYmVsKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2VUeXBlTGFiZWw7IH0KKyAgICBib29sIHN1
cHBvcnRzTXVsdGlwbGVTZWxlY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9zdXBwb3J0c011bHRp
cGxlU2VsZWN0aW9uczsgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBtX2RldmljZVR5cGVMYWJl
bDsKKyAgICBib29sIG1fc3VwcG9ydHNNdWx0aXBsZVNlbGVjdGlvbnM7Cit9OworCitjb25zdCBE
ZXZpY2VUeXBlSW5mbyYgZGV2aWNlVHlwZUluZm8oRGV2aWNlVHlwZSk7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShERVZJQ0VfRUxFTUVOVCkKKworI2VuZGlm
IC8vIERldmljZVR5cGVJbmZvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TERldmljZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV2aWNlRWxlbWVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdmMjk5ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldmljZUVsZW1lbnQuY3BwCkBA
IC0wLDAgKzEsMjM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwor
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShERVZJQ0VfRUxFTUVOVCkKKworI2luY2x1ZGUgIkhUTUxEZXZpY2VFbGVtZW50LmgiCisKKyNp
bmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJEZXZpY2VNYW5hZ2VyUHJveHkuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmlu
Z3MuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlICJSZW5kZXJCdXR0b24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBE
ZXZpY2VUeXBlLCBDYXNlRm9sZGluZ0hhc2g+IERldmljZVR5cGVNYXA7CisKK3N0YXRpYyBQYXNz
T3duUHRyPERldmljZVR5cGVNYXA+IGNyZWF0ZURldmljZVR5cGVNYXAoKQoreworICAgIE93blB0
cjxEZXZpY2VUeXBlTWFwPiBtYXAgPSBhZG9wdFB0cihuZXcgRGV2aWNlVHlwZU1hcCk7CisgICAg
bWFwLT5hZGQoRGV2aWNlVHlwZU5hbWVzOjptZWRpYSgpLCBNZWRpYURldmljZVR5cGUpOworICAg
IG1hcC0+YWRkKERldmljZVR5cGVOYW1lczo6YXVkaW8oKSwgQXVkaW9EZXZpY2VUeXBlKTsKKyAg
ICBtYXAtPmFkZChEZXZpY2VUeXBlTmFtZXM6OnZpZGVvKCksIFZpZGVvRGV2aWNlVHlwZSk7Cisg
ICAgcmV0dXJuIG1hcC5yZWxlYXNlKCk7Cit9CisKK0hUTUxEZXZpY2VFbGVtZW50OjpIVE1MRGV2
aWNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQor
ICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgbV9kYXRhKDApCisgICAgLCBt
X2RldmljZUxpc3QoMCkKK3sKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShkZXZpY2VUYWcpKTsKK30K
KworSFRNTERldmljZUVsZW1lbnQ6On5IVE1MRGV2aWNlRWxlbWVudCgpCit7Cit9CisKK1Bhc3NS
ZWZQdHI8SFRNTERldmljZUVsZW1lbnQ+IEhUTUxEZXZpY2VFbGVtZW50OjpjcmVhdGUoRG9jdW1l
bnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTERldmljZUVsZW1l
bnQoZGV2aWNlVGFnLCBkb2N1bWVudCkpOworfQorCitQYXNzUmVmUHRyPEhUTUxEZXZpY2VFbGVt
ZW50PiBIVE1MRGV2aWNlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxE
ZXZpY2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7Cit9CisKK1N0cmluZyBIVE1MRGV2aWNl
RWxlbWVudDo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0
cik7Cit9CisKK3ZvaWQgSFRNTERldmljZUVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nJiB0
eXBlKQoreworICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdHlwZSk7Cit9CisKK1JlbmRlck9i
amVjdCogSFRNTERldmljZUVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVu
YSwgUmVuZGVyU3R5bGUqKQoreworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJCdXR0b24o
dGhpcyk7Cit9CisKK3ZvaWQgSFRNTERldmljZUVsZW1lbnQ6OmF0dGFjaCgpCit7CisgICAgQVNT
RVJUKCFhdHRhY2hlZCgpKTsKKworICAgIEhUTUxFbGVtZW50OjphdHRhY2goKTsKKworICAgIGlm
IChyZW5kZXJlcigpKQorICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCdXR0b24qPihyZW5kZXJl
cigpKS0+c2V0VGV4dChkZXZpY2VFbGVtZW50QnV0dG9uTGFiZWwoKSk7Cit9CisKK3ZvaWQgSFRN
TERldmljZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKK3sK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKQorICAgICAgICB1cGRhdGVEZXZpY2VU
eXBlKCk7CisgICAgZWxzZQorICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7Cit9CisKK3ZvaWQgSFRNTERldmljZUVsZW1lbnQ6OnVwZGF0ZURldmljZVR5cGUo
KQoreworICAgIHN0YXRpYyBjb25zdCBEZXZpY2VUeXBlTWFwKiBkZXZpY2VUeXBlTWFwID0gY3Jl
YXRlRGV2aWNlVHlwZU1hcCgpLmxlYWtQdHIoKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGVTdHJpbmcgPSBmYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKKworICAgIERldmljZVR5cGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIHJlc3VsdCA9IGRldmljZVR5cGVNYXAtPmZpbmQodHlwZVN0cmlu
Zyk7CisgICAgbV9kZXZpY2VUeXBlID0gcmVzdWx0ICE9IGRldmljZVR5cGVNYXAtPmVuZCgpID8g
cmVzdWx0LT5zZWNvbmQgOiBVbmtub3duRGV2aWNlVHlwZTsKK30KKwordm9pZCBIVE1MRGV2aWNl
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQoreworICAgIGlmIChldnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCkgeworICAgICAgICBydW5E
aWFsb2coKTsKKyAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGV2dC0+aXNLZXlib2FyZEV2ZW50KCkpIHsKKyAgICAgICAg
S2V5Ym9hcmRFdmVudCoga2V5RXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0
KTsKKworICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZl
bnQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoa2V5RXZlbnQtPmNoYXJDb2RlKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgJ1xyJzoKKyAgICAgICAgICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNr
KGV2dCk7CisgICAgICAgICAgICBjYXNlICcgJzoKKyAgICAgICAgICAgICAgICBldnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKGtleUV2ZW50LT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIp
IHsKKyAgICAgICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2
ZW50KQorICAgICAgICAgICAgICAgIHNldEFjdGl2ZSh0cnVlLCB0cnVlKTsKKyAgICAgICAgICAg
IGVsc2UgeyAvLyBrZXl1cEV2ZW50CisgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZSgpKQorICAg
ICAgICAgICAgICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKGV2dCk7CisgICAgICAgICAg
ICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKGV2dCk7Cit9CisKK3ZvaWQgSFRNTERldmljZUVsZW1lbnQ6OnJ1bkRpYWxvZygp
Cit7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZy
YW1lIHx8ICFmcmFtZS0+bG9hZGVyKCktPmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICgh
cGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChDaHJvbWUqIGNocm9tZSA9IHBhZ2UtPmNo
cm9tZSgpKQorICAgICAgICBjaHJvbWUtPnJ1bkRldmljZURpYWxvZyhtX2RldmljZUxpc3QuZ2V0
KCksIHRoaXMpOworfQorCit2b2lkIEhUTUxEZXZpY2VFbGVtZW50OjpzZWxlY3Rpb25zTWFkZShQ
YXNzUmVmUHRyPERldmljZUxpc3Q+IHBycE5ld0RldmljZUxpc3QpCit7CisgICAgUmVmUHRyPERl
dmljZUxpc3Q+IG5ld0RldmljZUxpc3QgPSBwcnBOZXdEZXZpY2VMaXN0OworICAgIGJvb2wgaGFz
U2VsZWN0aW9ucyA9IG5ld0RldmljZUxpc3QtPnNlbGVjdGVkRW50cmllcygpLnNpemUoKTsKKyAg
ICBib29sIGhhc0NoYW5nZWQgPSBtX2RldmljZUxpc3QgPyAhbmV3RGV2aWNlTGlzdC0+c2VsZWN0
aW9uc01hdGNoKG1fZGV2aWNlTGlzdC5nZXQoKSkgOiBoYXNTZWxlY3Rpb25zOworICAgIG1fZGV2
aWNlTGlzdCA9IG5ld0RldmljZUxpc3Q7CisKKyAgICBpZiAoaGFzQ2hhbmdlZCkgeworICAgICAg
ICBtX2RhdGEgPSBoYXNTZWxlY3Rpb25zID8gZGV2aWNlTWFuYWdlclByb3h5KCkuY3JlYXRlRGV2
aWNlRGF0YShtX2RldmljZUxpc3QuZ2V0KCkpIDogMDsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgdHJ1ZSwgZmFsc2UpKTsKKyAg
ICB9Cit9CisKK2Jvb2wgSFRNTERldmljZUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAor
eworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxEZXZpY2VFbGVtZW50Ojppc0ZvY3Vz
YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNC
b3goKSAmJiAhdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPnNpemUoKS5pc0VtcHR5KCkKKyAgICAg
ICAgICAgICYmIEhUTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOworfQorCitib29sIEhUTUxEZXZp
Y2VFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25z
dAoreworICAgIHJldHVybiBpc0ZvY3VzYWJsZSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkKKyAg
ICAgICAgICAgICYmIGRvY3VtZW50KCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT50YWJzVG9B
bGxDb250cm9scyhldmVudCk7Cit9CisKK2Jvb2wgSFRNTERldmljZUVsZW1lbnQ6OmlzTW91c2VG
b2N1c2FibGUoKSBjb25zdAoreworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCisg
ICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc01vdXNlRm9jdXNhYmxlKCk7CisjZWxzZQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCituYW1lc3BhY2UgRGV2aWNlVHlwZU5hbWVzIHsKKwor
Y29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChB
dG9taWNTdHJpbmcsIG5hbWUsICgibWVkaWEiKSk7CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK2Nv
bnN0IEF0b21pY1N0cmluZyYgYXVkaW8oKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCBuYW1lLCAoImF1ZGlvIikpOworICAgIHJldHVybiBuYW1lOworfQorCitjb25z
dCBBdG9taWNTdHJpbmcmIHZpZGVvKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21p
Y1N0cmluZywgbmFtZSwgKCJ2aWRlbyIpKTsKKyAgICByZXR1cm4gbmFtZTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZTo6RGV2aWNlVHlwZU5hbWVzCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXZpY2VF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXZpY2VFbGVtZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0YjcyYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldmljZUVsZW1lbnQuaApAQCAtMCwwICsxLDk0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAg
ICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVy
aWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAg
ICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSFRNTERldmljZUVsZW1lbnRfaAorI2RlZmluZSBIVE1MRGV2aWNl
RWxlbWVudF9oCisKKyNpZiBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisKKyNpbmNsdWRlICJEZXZp
Y2VEYXRhLmgiCisjaW5jbHVkZSAiRGV2aWNlRGlhbG9nQ2xpZW50LmgiCisjaW5jbHVkZSAiSFRN
TEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1MRGV2aWNlRWxl
bWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgRGV2aWNlRGlhbG9nQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRGV2aWNlRWxlbWVudD4gY3JlYXRlKERvY3VtZW50
Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTERldmljZUVsZW1lbnQ+IGNyZWF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB+SFRNTERldmljZUVsZW1lbnQoKTsK
KworICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmlu
ZyYpOworCisgICAgRGV2aWNlRGF0YSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQo
KTsgfQorCisgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIERldmljZVR5cGUgZGV2aWNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlVHlwZTsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25zTWFkZShQYXNzUmVmUHRyPERldmljZUxpc3Q+
KTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKKworICAgIHZpcnR1
YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIEhU
TUxEZXZpY2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCisgICAg
dmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVy
U3R5bGUqKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKTsKKyAgICB2b2lkIHVwZGF0ZURldmljZVR5cGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZvaWQgcnVuRGlhbG9nKCk7CisKKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBjYW5T
dGFydFNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBSZWZQdHI8RGV2
aWNlRGF0YT4gbV9kYXRhOworICAgIERldmljZVR5cGUgbV9kZXZpY2VUeXBlOworICAgIFJlZlB0
cjxEZXZpY2VMaXN0PiBtX2RldmljZUxpc3Q7Cit9OworCituYW1lc3BhY2UgRGV2aWNlVHlwZU5h
bWVzIHsKKworY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYSgpOworY29uc3QgQXRvbWljU3RyaW5n
JiBhdWRpbygpOworY29uc3QgQXRvbWljU3RyaW5nJiB2aWRlbygpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlOjpEZXZpY2VUeXBlTmFtZXMKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV2aWNl
RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXZpY2VFbGVtZW50LmlkbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjZjMmYxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV2aWNlRWxlbWVudC5pZGwKQEAgLTAsMCAr
MSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFt
ZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp
cworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCittb2R1bGUgaHRtbCB7CisKKyAgICBpbnRlcmZhY2UgW0NvbmRpdGlv
bmFsPURFVklDRV9FTEVNRU5UXSBIVE1MRGV2aWNlRWxlbWVudCA6IEhUTUxFbGVtZW50IHsKKyAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3Ry
aW5nIHR5cGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBhbnkg
ZGF0YTsKKyAgICB9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IGI3
ZWNhMDYuLjkxMzUyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBAIC04OSw2
ICs4OSw5IEBAIGJvb2wgSFRNTEVsZW1lbnQ6OmllRm9yYmlkc0luc2VydEhUTUwoKSBjb25zdAog
ICAgICAgICB8fCBoYXNMb2NhbE5hbWUoZGNlbGxUYWcpCiAgICAgICAgIHx8IGhhc0xvY2FsTmFt
ZShkY29sVGFnKQogI2VuZGlmCisjaWYgRU5BQkxFKERFVklDRV9FTEVNRU5UKQorICAgICAgICB8
fCBoYXNMb2NhbE5hbWUoZGV2aWNlVGFnKQorI2VuZGlmCiAgICAgICAgIHx8IGhhc0xvY2FsTmFt
ZShlbWJlZFRhZykKICAgICAgICAgfHwgaGFzTG9jYWxOYW1lKGZyYW1lVGFnKQogICAgICAgICB8
fCBoYXNMb2NhbE5hbWUoaHJUYWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWdOYW1lcy5pbiBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCmluZGV4
IDgzZDQxZGUuLjczNmU3ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRh
Z05hbWVzLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCkBAIC0z
Miw2ICszMiw3IEBAIGNvbW1hbmQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogZGF0YWdyaWQg
aW50ZXJmYWNlTmFtZT1IVE1MRGF0YUdyaWRFbGVtZW50LCBjb25kaXRpb25hbD1EQVRBR1JJRAog
ZGF0YWxpc3QgaW50ZXJmYWNlTmFtZT1IVE1MRGF0YUxpc3RFbGVtZW50LCBjb25kaXRpb25hbD1E
QVRBTElTVAogZGNlbGwgaW50ZXJmYWNlTmFtZT1IVE1MRGF0YUdyaWRDZWxsRWxlbWVudCwgY29u
ZGl0aW9uYWw9REFUQUdSSUQKK2RldmljZSBjb25kaXRpb25hbD1ERVZJQ0VfRUxFTUVOVAogZGNv
bCBpbnRlcmZhY2VOYW1lPUhUTUxEYXRhR3JpZENvbEVsZW1lbnQsIGNvbmRpdGlvbmFsPURBVEFH
UklECiBkcm93IGludGVyZmFjZU5hbWU9SFRNTERhdGFHcmlkUm93RWxlbWVudCwgY29uZGl0aW9u
YWw9REFUQUdSSUQKIGRkIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IGRkOTlmODAuLjQxNzQz
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNw
cApAQCAtODkyLDYgKzg5Miw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRU
YWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICB9CiAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBhcmVhVGFnCiAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBiclRhZworICAg
ICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGV2aWNlVGFnCiAgICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSBlbWJlZFRhZwogICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaW1nVGFnCiAgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBrZXlnZW5UYWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVu
dHMuaAppbmRleCA4M2Y0MmFkLi42N2RmZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oCkBAIC0xOTAsNiArMTkwLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcnVu
T3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBGaWxlQ2hv
b3NlciopIHsgfQogCisjaWYgRU5BQkxFKERFVklDRV9FTEVNRU5UKQorICAgIHZpcnR1YWwgdm9p
ZCBydW5EZXZpY2VEaWFsb2coRGV2aWNlTGlzdCosIERldmljZURpYWxvZ0NsaWVudCopIHsgfQor
I2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUq
KSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBmb3JtRGlkRm9jdXMoY29uc3QgTm9kZSopIHsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IGI3OGIzZmYuLjYyNjk2NjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAKQEAgLTQzNSw2ICs0MzUsMTMgQEAgdm9pZCBDaHJvbWU6OmNob29zZUljb25Gb3JG
aWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBGaWxlQ2hvb3NlciogZmkKICAg
ICBtX2NsaWVudC0+Y2hvb3NlSWNvbkZvckZpbGVzKGZpbGVuYW1lcywgZmlsZUNob29zZXIpOwog
fQogCisjaWYgRU5BQkxFKERFVklDRV9FTEVNRU5UKQordm9pZCBDaHJvbWU6OnJ1bkRldmljZURp
YWxvZyhEZXZpY2VMaXN0KiBvbGREZXZpY2VMaXN0LCBEZXZpY2VEaWFsb2dDbGllbnQqIGNsaWVu
dCkKK3sKKyAgICBtX2NsaWVudC0+cnVuRGV2aWNlRGlhbG9nKG9sZERldmljZUxpc3QsIGNsaWVu
dCk7Cit9CisjZW5kaWYKKwogdm9pZCBDaHJvbWU6OmRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hh
bmdlKGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMpIGNvbnN0CiB7CiAgICAgbV9j
bGllbnQtPmRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKGFyZ3VtZW50cyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuaAppbmRleCBiZDQzNjc3Li4xYmZjNWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKQEAgLTQ5
LDYgKzQ5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBOb2RlOwogICAgIGNs
YXNzIFBhZ2U7CiAgICAgY2xhc3MgUG9wdXBNZW51Q2xpZW50OworCisjaWYgRU5BQkxFKERFVklD
RV9FTEVNRU5UKQorICAgIGNsYXNzIERldmljZURpYWxvZ0NsaWVudDsKKyAgICBjbGFzcyBEZXZp
Y2VMaXN0OworI2VuZGlmCisKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKICAgICBjbGFzcyBO
b3RpZmljYXRpb25QcmVzZW50ZXI7CiAjZW5kaWYKQEAgLTE1MCw2ICsxNTYsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQ
dHI8RmlsZUNob29zZXI+KTsKICAgICAgICAgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBGaWxlQ2hvb3NlciopOwogCisjaWYgRU5BQkxFKERFVklDRV9FTEVN
RU5UKQorICAgICAgICB2b2lkIHJ1bkRldmljZURpYWxvZyhEZXZpY2VMaXN0KiwgRGV2aWNlRGlh
bG9nQ2xpZW50Kik7CisjZW5kaWYKKwogICAgICAgICB2b2lkIGRpc3BhdGNoVmlld3BvcnREYXRh
RGlkQ2hhbmdlKGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJikgY29uc3Q7CiAKICAgICAgICAgYm9v
bCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaAppbmRleCBmZGQ1YjVhLi45MGMzYTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKQEAgLTcyLDYgKzcyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBHcmFwaGljc0xheWVyOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisg
ICAgY2xhc3MgRGV2aWNlRGlhbG9nQ2xpZW50OworICAgIGNsYXNzIERldmljZUxpc3Q7CisjZW5k
aWYKKwogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQogICAgIGNsYXNzIE5vdGlmaWNhdGlvblBy
ZXNlbnRlcjsKICNlbmRpZgpAQCAtMjI0LDYgKzIyOSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIC8vIEFzeW5jaHJvbm91cyByZXF1ZXN0IHRvIGxvYWQgYW4gaWNvbiBmb3Igc3Bl
Y2lmaWVkIGZpbGVuYW1lcy4KICAgICAgICAgdmlydHVhbCB2b2lkIGNob29zZUljb25Gb3JGaWxl
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEZpbGVDaG9vc2VyKikgPSAwOwogCisjaWYgRU5BQkxF
KERFVklDRV9FTEVNRU5UKQorICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuRGV2aWNlRGlhbG9nKERl
dmljZUxpc3QqLCBEZXZpY2VEaWFsb2dDbGllbnQqKSA9IDA7CisjZW5kaWYKKwogICAgICAgICAv
LyBOb3RpZmljYXRpb24gdGhhdCB0aGUgZ2l2ZW4gZm9ybSBlbGVtZW50IGhhcyBjaGFuZ2VkLiBU
aGlzIGZ1bmN0aW9uCiAgICAgICAgIC8vIHdpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHksIHNvIGhh
bmRsaW5nIHNob3VsZCBiZSB2ZXJ5IGZhc3QuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JtU3Rh
dGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbApp
bmRleCAyNmZmNmQ2Li4xOWFhNjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC00
MjcsNiArNDI3LDkgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0
aW9uYWw9REFUQUdSSURdIEhUTUxEYXRhR3JpZEVsZW1lbnRDb25zdHJ1Y3RvciBIVE1MRGF0YUdy
aWRFbGVtZW50OwogICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPURBVEFHUklEXSBIVE1M
RGF0YUdyaWRDZWxsRWxlbWVudENvbnN0cnVjdG9yIEhUTUxEYXRhR3JpZENlbGxFbGVtZW50Owog
ICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPURBVEFHUklEXSBIVE1MRGF0YUdyaWRDb2xF
bGVtZW50Q29uc3RydWN0b3IgSFRNTERhdGFHcmlkQ29sRWxlbWVudDsKKyNpZiBkZWZpbmVkKEVO
QUJMRV9ERVZJQ0VfRUxFTUVOVCkgJiYgRU5BQkxFX0RFVklDRV9FTEVNRU5UCisgICAgICAgIGF0
dHJpYnV0ZSBIVE1MRGV2aWNlRWxlbWVudENvbnN0cnVjdG9yIEhUTUxEZXZpY2VFbGVtZW50Owor
I2VuZGlmCiAgICAgICAgIGF0dHJpYnV0ZSBIVE1MRExpc3RFbGVtZW50Q29uc3RydWN0b3IgSFRN
TERMaXN0RWxlbWVudDsKICAgICAgICAgYXR0cmlidXRlIEhUTUxEaXJlY3RvcnlFbGVtZW50Q29u
c3RydWN0b3IgSFRNTERpcmVjdG9yeUVsZW1lbnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBIVE1MRGl2
RWxlbWVudENvbnN0cnVjdG9yIEhUTUxEaXZFbGVtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTG9jYWxpemVkU3RyaW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTG9jYWxpemVkU3RyaW5ncy5oCmluZGV4IGRhMGZlODYuLjNjNDFiNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmgKQEAgLTM5LDYgKzM5LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIFN0cmluZyBzdWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKTsK
ICAgICBTdHJpbmcgZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpOwogICAgIFN0cmluZyBmaWxl
QnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpOworI2lmIEVOQUJMRShERVZJQ0VfRUxFTUVOVCkK
KyAgICBTdHJpbmcgZGV2aWNlRWxlbWVudEJ1dHRvbkxhYmVsKCk7CisjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKE1BQykKICAgICBTdHJpbmcgY29weUltYWdlVW5rbm93bkZpbGVMYWJlbCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZGV2aWNlL1N0cmVhbURldmljZU1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZGV2aWNlL1N0cmVhbURldmljZU1hbmFn
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMmQ0NjYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9kZXZpY2UvU3RyZWFtRGV2aWNl
TWFuYWdlci5jcHAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBF
cmljc3NvbiBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgor
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisKKyNpbmNsdWRlICJTdHJlYW1EZXZpY2VN
YW5hZ2VyLmgiCisKKy8vIEZJWE1FIC0gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25z
IG9mIFN0cmVhbURldmljZU1hbmFnZXJQcml2YXRlQ2xhc3NOYW1lIGhlcmUKKyNkZWZpbmUgU3Ry
ZWFtRGV2aWNlTWFuYWdlclByaXZhdGVDbGFzc05hbWUgTnVsbFN0cmVhbURldmljZU1hbmFnZXJQ
cml2YXRlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTnVsbFN0cmVhbURldmljZU1h
bmFnZXJQcml2YXRlIDogcHVibGljIFN0cmVhbURldmljZU1hbmFnZXJQcml2YXRlSW50ZXJmYWNl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RyZWFtRGV2aWNlTWFuYWdlclByaXZhdGVJbnRlcmZh
Y2UqIGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IE51bGxTdHJlYW1EZXZpY2VN
YW5hZ2VyUHJpdmF0ZSgpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8RGV2aWNlTGlzdD4gY3Jl
YXRlRGV2aWNlTGlzdChjb25zdCBEZXZpY2VUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERl
dmljZUxpc3Q6OmNyZWF0ZShWZWN0b3I8UmVmUHRyPERldmljZUxpc3RFbnRyeT4gPigpKTsKKyAg
ICB9Cit9OworCitTdHJlYW1EZXZpY2VNYW5hZ2VyOjpTdHJlYW1EZXZpY2VNYW5hZ2VyKCkKKyAg
ICA6IG1fcHJpdmF0ZShTdHJlYW1EZXZpY2VNYW5hZ2VyUHJpdmF0ZUNsYXNzTmFtZTo6Y3JlYXRl
KCkpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGV2aWNlTGlzdD4gU3RyZWFtRGV2aWNlTWFuYWdlcjo6
Y3JlYXRlRGV2aWNlTGlzdChjb25zdCBEZXZpY2VUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+Y3JlYXRlRGV2aWNlTGlzdCh0eXBlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERFVklDRV9FTEVNRU5UKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZGV2aWNlL1N0cmVhbURldmljZU1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2RldmljZS9TdHJlYW1EZXZpY2VNYW5hZ2VyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzYjdjYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2RldmljZS9TdHJlYW1EZXZpY2VNYW5hZ2VyLmgKQEAgLTAs
MCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0cmVhbURldmljZU1hbmFnZXJfaAorI2RlZmlu
ZSBTdHJlYW1EZXZpY2VNYW5hZ2VyX2gKKworI2lmIEVOQUJMRShERVZJQ0VfRUxFTUVOVCkKKwor
I2luY2x1ZGUgIkRldmljZUxpc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlN0cmVhbURldmljZU1hbmFnZXJQcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgU3RyZWFtRGV2aWNlTWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFN0cmVh
bURldmljZU1hbmFnZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJlYW1E
ZXZpY2VNYW5hZ2VyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTdHJlYW1EZXZpY2VNYW5hZ2VyKCkpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8RGV2aWNl
TGlzdD4gY3JlYXRlRGV2aWNlTGlzdChjb25zdCBEZXZpY2VUeXBlKTsKKworcHJpdmF0ZToKKyAg
ICBTdHJlYW1EZXZpY2VNYW5hZ2VyKCk7CisKKyAgICBPd25QdHI8U3RyZWFtRGV2aWNlTWFuYWdl
clByaXZhdGVJbnRlcmZhY2UqPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoREVWSUNFX0VMRU1FTlQpCisKKyNlbmRpZiAvLyBTdHJl
YW1EZXZpY2VNYW5hZ2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Rl
dmljZS9TdHJlYW1EZXZpY2VNYW5hZ2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZGV2aWNlL1N0cmVhbURldmljZU1hbmFnZXJQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2Y2MzhmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2RldmljZS9TdHJlYW1EZXZpY2VNYW5hZ2VyUHJpdmF0ZS5oCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdHJlYW1EZXZpY2VNYW5hZ2VyUHJpdmF0ZV9oCisj
ZGVmaW5lIFN0cmVhbURldmljZU1hbmFnZXJQcml2YXRlX2gKKworI2lmIEVOQUJMRShERVZJQ0Vf
RUxFTUVOVCkKKworI2luY2x1ZGUgIkRldmljZUxpc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0cmVhbURldmljZU1hbmFn
ZXJQcml2YXRlSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGV2
aWNlTGlzdD4gY3JlYXRlRGV2aWNlTGlzdChjb25zdCBEZXZpY2VUeXBlKSA9IDA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoREVWSUNFX0VMRU1FTlQp
CisKKyNlbmRpZiAvLyBTdHJlYW1EZXZpY2VNYW5hZ2VyUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjRjNzFkYi4uZWJhYzAwNyAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDExLTAyLTAzICBBZGFtIEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVy
aWNzc29uLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbnRyb2R1Y2UgdGhlIGRldmljZSBlbGVtZW50IGFzIGFuIGV4cGVyaW1lbnRhbCBmZWF0
dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzI2
NAorCisgICAgICAgIEFkZGVkIC0tZGV2aWNlLWVsZW1lbnQgYnVpbGQgb3B0aW9uCisKKyAgICAg
ICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDoKKwogMjAxMS0wMi0wMyAgR2Fib3IgUmFwY3Nhbnlp
ICA8cmdhYm9yQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0IGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQK
aW5kZXggMzJhODFlOC4uNDBmYWIyYSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9idWlsZC13
ZWJraXQKKysrIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKQEAgLTcwLDYgKzcwLDcgQEAg
bXkgKAogICAgICRkYXRhYmFzZVN1cHBvcnQsCiAgICAgJGRhdGFncmlkU3VwcG9ydCwKICAgICAk
ZGF0YWxpc3RTdXBwb3J0LAorICAgICRkZXZpY2VFbGVtZW50U3VwcG9ydCwKICAgICAkZGV2aWNl
T3JpZW50YXRpb25TdXBwb3J0LAogICAgICRkaXJlY3RvcnlVcGxvYWRTdXBwb3J0LAogICAgICRk
b21TdG9yYWdlU3VwcG9ydCwKQEAgLTE0Nyw2ICsxNDgsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAg
ICAgeyBvcHRpb24gPT4gImRhdGFsaXN0IiwgZGVzYyA9PiAiVG9nZ2xlIEhUTUw1IGRhdGFsaXN0
IHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfREFUQUxJU1QiLCBkZWZhdWx0ID0+
IDEsIHZhbHVlID0+IFwkZGF0YWxpc3RTdXBwb3J0IH0sCiAKKyAgICB7IG9wdGlvbiA9PiAiZGV2
aWNlLWVsZW1lbnQiLCBkZXNjID0+ICJUb2dnbGUgZGV2aWNlIGVsZW1lbnQgc3VwcG9ydCIsCisg
ICAgICBkZWZpbmUgPT4gIkVOQUJMRV9ERVZJQ0VfRUxFTUVOVCIsIGRlZmF1bHQgPT4gMCwgdmFs
dWUgPT4gXCRkZXZpY2VFbGVtZW50U3VwcG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gImRldmlj
ZS1vcmllbnRhdGlvbiIsIGRlc2MgPT4gIlRvZ2dsZSBEZXZpY2VPcmllbnRhdGlvbiBzdXBwb3J0
IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTiIsIGRlZmF1bHQg
PT4gMCwgdmFsdWUgPT4gXCRkZXZpY2VPcmllbnRhdGlvblN1cHBvcnQgfSwKIAo=
</data>
<flag name="review"
          id="72623"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>