<?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>211888</bug_id>
          
          <creation_ts>2020-05-14 03:39:14 -0700</creation_ts>
          <short_desc>[WebXR] Implement requestSession()</short_desc>
          <delta_ts>2020-05-19 09:09:15 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>208988</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>cdumez</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1652578</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-14 03:39:14 -0700</bug_when>
    <thetext>[WebXR] Implement requestSession()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1652580</commentid>
    <comment_count>1</comment_count>
      <attachid>399350</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-14 04:01:35 -0700</bug_when>
    <thetext>Created attachment 399350
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653057</commentid>
    <comment_count>2</comment_count>
      <attachid>399350</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-05-15 08:13:48 -0700</bug_when>
    <thetext>Comment on attachment 399350
Patch

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

&gt; Source/WebCore/Modules/webxr/WebXRRenderState.h:54
&gt; +    WebXRRenderState(Optional&lt;double&gt;&amp;&amp; fieldOfView);

explicit

&gt; Source/WebCore/Modules/webxr/WebXRRenderState.h:55
&gt;      WebXRRenderState(const XRRenderStateInit&amp;);

explicit, but is this one used?

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:38
&gt; +Ref&lt;WebXRSession&gt; WebXRSession::create(ScriptExecutionContext&amp; context, Ref&lt;WebXRSystem&gt;&amp;&amp; system, XRSessionMode mode, WeakPtr&lt;PlatformXR::Device&gt;&amp;&amp; device)

Is there a plan to ship these in Workers? Should we use Document&amp; directly?

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:49
&gt; +    m_activeRenderState = WebXRRenderState::create(mode);

Could be set above directly as m_activeRenderState(...)

&gt; Source/WebCore/Modules/webxr/WebXRSession.h:96
&gt; +    WebXRInputSourceArray m_inputSources;

This should be a Ref&lt;WebXRInputSourceArray&gt; since this is ref counted.
We should really make WebXRInputSourceArray constructor private.

&gt; Source/WebCore/Modules/webxr/WebXRSession.h:102
&gt; +    RefPtr&lt;WebXRRenderState&gt; m_activeRenderState;

Should be a Ref instead of a RefPtr

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:113
&gt; +PlatformXR::Device* WebXRSystem::obtainCurrentDevice(XRSessionMode mode, const JSFeaturesArray&amp; requiredFeatures, const JSFeaturesArray&amp; optionalFeatures)

Is there a way to return a PlatformXR::Device&amp;?

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:167
&gt; +bool WebXRSystem::immersiveSessionRequestIsAllowedForGlobalObject(DOMWindow&amp; globalObject, Document&amp; document) const

Do we have tests for all these conditions?

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:171
&gt; +    if (!globalObject.hasTransientActivation() /* TODO: || !launching a web app */)

This TODO is not very clear to me, formatting is also not really right.
I guess we should also check that are not launching a web app?

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:174
&gt; +    // 2. If the requesting document is not considered trustworthy, return false.

I initially thought we were talking of SecureContext here.
Maybe refer to https://immersive-web.github.io/webxr/#trustworthy here.

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:221
&gt; +Optional&lt;WebXRSystem::ResolvedRequestedFeatures&gt; WebXRSystem::resolveRequestedFeatures(XRSessionMode mode, const XRSessionInit&amp; init, WeakPtr&lt;PlatformXR::Device&gt;&amp; device, JSC::JSGlobalObject* globalObject) const

Probably want to pass a JSGlobalObject&amp;
As of WeakPtr&lt;PlatformXR::Device&gt;&amp;, can we instead pass a Device*?

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:241
&gt; +    JSFeaturesArray requiredFeaturesWithDefaultFeatures = init.requiredFeatures;

auto

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:339
&gt; +    ASSERT(globalObject);

Is it guaranteed?

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:360
&gt; +    document.postTask([this, immersive, init, mode, promise = WTFMove(promise)] (ScriptExecutionContext&amp; context) mutable {

s/ (ScriptExecutionContext/(auto/

Are we sure this is valid in the lambda?

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:364
&gt; +        PlatformXR::Device* device = obtainCurrentDevice(mode, init.requiredFeatures, init.optionalFeatures);

auto

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:367
&gt; +        queueTaskKeepingObjectAlive(*this, TaskSource::WebXR, [this, context = makeRef(context), device = makeWeakPtr(device), immersive, init, mode, promise = WTFMove(promise)] () mutable {

We probably do not need to ref the context here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653586</commentid>
    <comment_count>3</comment_count>
      <attachid>399350</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-18 07:06:14 -0700</bug_when>
    <thetext>Comment on attachment 399350
Patch

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

&gt;&gt; Source/WebCore/Modules/webxr/WebXRRenderState.h:54
&gt;&gt; +    WebXRRenderState(Optional&lt;double&gt;&amp;&amp; fieldOfView);
&gt; 
&gt; explicit

ACK.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRRenderState.h:55
&gt;&gt;      WebXRRenderState(const XRRenderStateInit&amp;);
&gt; 
&gt; explicit, but is this one used?

Not now, but will be.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:38
&gt;&gt; +Ref&lt;WebXRSession&gt; WebXRSession::create(ScriptExecutionContext&amp; context, Ref&lt;WebXRSystem&gt;&amp;&amp; system, XRSessionMode mode, WeakPtr&lt;PlatformXR::Device&gt;&amp;&amp; device)
&gt; 
&gt; Is there a plan to ship these in Workers? Should we use Document&amp; directly?

Good point. I&apos;ll replace it.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:49
&gt;&gt; +    m_activeRenderState = WebXRRenderState::create(mode);
&gt; 
&gt; Could be set above directly as m_activeRenderState(...)

Right.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSession.h:96
&gt;&gt; +    WebXRInputSourceArray m_inputSources;
&gt; 
&gt; This should be a Ref&lt;WebXRInputSourceArray&gt; since this is ref counted.
&gt; We should really make WebXRInputSourceArray constructor private.

This was an unintended change. I am not touching the input sources code ATM so I&apos;ll just revert this.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSession.h:102
&gt;&gt; +    RefPtr&lt;WebXRRenderState&gt; m_activeRenderState;
&gt; 
&gt; Should be a Ref instead of a RefPtr

Note that in follow up patches we&apos;ll assign the pendingRenderState to the activeRenderState so I think it&apos;s better to keep it as a RefPtr.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:113
&gt;&gt; +PlatformXR::Device* WebXRSystem::obtainCurrentDevice(XRSessionMode mode, const JSFeaturesArray&amp; requiredFeatures, const JSFeaturesArray&amp; optionalFeatures)
&gt; 
&gt; Is there a way to return a PlatformXR::Device&amp;?

No, this must be a pointer because the output of ensureImmersiveXRDeviceIsSelected() might be a null device (as specified).

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:167
&gt;&gt; +bool WebXRSystem::immersiveSessionRequestIsAllowedForGlobalObject(DOMWindow&amp; globalObject, Document&amp; document) const
&gt; 
&gt; Do we have tests for all these conditions?

Yes, although I am not enabling some of them now because we need to implement more API to run them.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:171
&gt;&gt; +    if (!globalObject.hasTransientActivation() /* TODO: || !launching a web app */)
&gt; 
&gt; This TODO is not very clear to me, formatting is also not really right.
&gt; I guess we should also check that are not launching a web app?

Yeah, that&apos;s the thing. I am not sure how to do that (not sure even if we can check that). I&apos;ll format it as any other comment.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:174
&gt;&gt; +    // 2. If the requesting document is not considered trustworthy, return false.
&gt; 
&gt; I initially thought we were talking of SecureContext here.
&gt; Maybe refer to https://immersive-web.github.io/webxr/#trustworthy here.

OK will do it.

BTW, this is the best check I could come up with, not sure if there is a better way to do that.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:221
&gt;&gt; +Optional&lt;WebXRSystem::ResolvedRequestedFeatures&gt; WebXRSystem::resolveRequestedFeatures(XRSessionMode mode, const XRSessionInit&amp; init, WeakPtr&lt;PlatformXR::Device&gt;&amp; device, JSC::JSGlobalObject* globalObject) const
&gt; 
&gt; Probably want to pass a JSGlobalObject&amp;
&gt; As of WeakPtr&lt;PlatformXR::Device&gt;&amp;, can we instead pass a Device*?

Makes sense. After all I was doing an ASSERT on the pointer.

Regarding passing a pointer for the Device, yeah it seems sane to pass it, we don&apos;t need a WeakPtr for this call.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:241
&gt;&gt; +    JSFeaturesArray requiredFeaturesWithDefaultFeatures = init.requiredFeatures;
&gt; 
&gt; auto

OK.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:339
&gt;&gt; +    ASSERT(globalObject);
&gt; 
&gt; Is it guaranteed?

Hmm, right I guess we cannot guarantee that it was not detached. I&apos;ll return an InvalidAccessError in this case.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:360
&gt;&gt; +    document.postTask([this, immersive, init, mode, promise = WTFMove(promise)] (ScriptExecutionContext&amp; context) mutable {
&gt; 
&gt; s/ (ScriptExecutionContext/(auto/
&gt; 
&gt; Are we sure this is valid in the lambda?

OK regarding s/.

Not sure what you mean by &quot;valid in the lambda&quot;. In the case of a document.postTask() the ScripExecutionContext passed to the lambda is the document itself so it has to be valid.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:364
&gt;&gt; +        PlatformXR::Device* device = obtainCurrentDevice(mode, init.requiredFeatures, init.optionalFeatures);
&gt; 
&gt; auto

OK.

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:389
&gt; +                return;

BTW I replaced this early return with rejection and the above one by a ScopeExit.

&gt; Source/WebCore/testing/WebXRTest.cpp:60
&gt;                  if (auto referenceSpaceType = parseEnumeration&lt;XRReferenceSpaceType&gt;(*context.execState(), feature))

Also added a check to verify that we have a valid globalObject here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653591</commentid>
    <comment_count>4</comment_count>
      <attachid>399644</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-18 07:17:36 -0700</bug_when>
    <thetext>Created attachment 399644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653592</commentid>
    <comment_count>5</comment_count>
      <attachid>399350</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-05-18 07:19:14 -0700</bug_when>
    <thetext>Comment on attachment 399350
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:360
&gt;&gt;&gt; +    document.postTask([this, immersive, init, mode, promise = WTFMove(promise)] (ScriptExecutionContext&amp; context) mutable {
&gt;&gt; 
&gt;&gt; s/ (ScriptExecutionContext/(auto/
&gt;&gt; 
&gt;&gt; Are we sure this is valid in the lambda?
&gt; 
&gt; OK regarding s/.
&gt; 
&gt; Not sure what you mean by &quot;valid in the lambda&quot;. In the case of a document.postTask() the ScripExecutionContext passed to the lambda is the document itself so it has to be valid.

From a quick look, there is no guarantee the pointer &apos;this&apos; will stay valid when the lambda executes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653659</commentid>
    <comment_count>6</comment_count>
      <attachid>399350</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-18 10:36:30 -0700</bug_when>
    <thetext>Comment on attachment 399350
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:360
&gt;&gt;&gt;&gt; +    document.postTask([this, immersive, init, mode, promise = WTFMove(promise)] (ScriptExecutionContext&amp; context) mutable {
&gt;&gt;&gt; 
&gt;&gt;&gt; s/ (ScriptExecutionContext/(auto/
&gt;&gt;&gt; 
&gt;&gt;&gt; Are we sure this is valid in the lambda?
&gt;&gt; 
&gt;&gt; OK regarding s/.
&gt;&gt; 
&gt;&gt; Not sure what you mean by &quot;valid in the lambda&quot;. In the case of a document.postTask() the ScripExecutionContext passed to the lambda is the document itself so it has to be valid.
&gt; 
&gt; From a quick look, there is no guarantee the pointer &apos;this&apos; will stay valid when the lambda executes.

Ah :) now I understand, yeah we should protect it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653660</commentid>
    <comment_count>7</comment_count>
      <attachid>399656</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-18 10:36:37 -0700</bug_when>
    <thetext>Created attachment 399656
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653924</commentid>
    <comment_count>8</comment_count>
      <attachid>399656</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-05-19 00:02:07 -0700</bug_when>
    <thetext>Comment on attachment 399656
Patch

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

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:43
&gt; +WebXRSession::WebXRSession(Document&amp; document, Ref&lt;WebXRSystem&gt;&amp;&amp; system, XRSessionMode mode, WeakPtr&lt;PlatformXR::Device&gt;&amp;&amp; device)

If the goal is for device to be valid initially, it might be better to pass a PlatformXR::Device&amp;

&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:123
&gt; +    queueTaskKeepingObjectAlive(*this, TaskSource::WebXR, [promise = WTFMove(promise)] () mutable {

Do we need to keep the object alive?

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:233
&gt; +        resolvedFeatures.granted = device-&gt;enabledFeatures(mode);

It would make more sense to move that line after the early return in the next two lines.

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:358
&gt; +        if (!inlineSessionRequestIsAllowedForGlobalObject(*globalObject, document, init)) {

else if

&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:365
&gt; +    queueTaskKeepingObjectAlive(*this, TaskSource::WebXR, [this, document = makeRef(document), immersive, init, mode, promise = WTFMove(promise)] () mutable {

Why taking a ref here but capture document by ref below? You could take a weakref and move it as part of next lambda.
Another approach would be to get the global object from the promise itself, which would simplify things.

&gt; Source/WebCore/Modules/webxr/WebXRSystem.h:116
&gt; +    Vector&lt;Ref&lt;WebXRSession&gt;&gt; m_listOfInlineSessions;

Should it be a vector or a hashset?

&gt; Source/WebCore/platform/xr/PlatformXR.h:63
&gt; +    using EnabledFeaturesPerModeMap = WTF::HashMap&lt;SessionMode, ListOfEnabledFeatures, WTF::IntHash&lt;SessionMode&gt;, WTF::StrongEnumHashTraits&lt;SessionMode&gt;&gt;;

s/WTF:://

&gt; Source/WebCore/testing/WebXRTest.cpp:59
&gt; +            if (auto* globalObject = context.execState()) {

You could reserveInitialCapacity/uncheckedAppend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653998</commentid>
    <comment_count>9</comment_count>
      <attachid>399656</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-19 08:02:13 -0700</bug_when>
    <thetext>Comment on attachment 399656
Patch

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

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:43
&gt;&gt; +WebXRSession::WebXRSession(Document&amp; document, Ref&lt;WebXRSystem&gt;&amp;&amp; system, XRSessionMode mode, WeakPtr&lt;PlatformXR::Device&gt;&amp;&amp; device)
&gt; 
&gt; If the goal is for device to be valid initially, it might be better to pass a PlatformXR::Device&amp;

The thing is that the device might dissapear (i.e. user disconnecting it) so that&apos;s the point of having a weak pointer for it. We can still pass a reference and make the weak pointer inside the session.

And BTW I&apos;m changing the Ref&lt;WebXRSystem&gt;&amp;&amp; by just a WebXRSystem&amp;, otherwhise we&apos;d be adding a circular dependency. The XRSystem owns the XRSession&apos;s so it should be enough to have either a raw pointer or a reference.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSession.cpp:123
&gt;&gt; +    queueTaskKeepingObjectAlive(*this, TaskSource::WebXR, [promise = WTFMove(promise)] () mutable {
&gt; 
&gt; Do we need to keep the object alive?

We still need to implement the 3.1 step, i.e., properly shutdown the platform session, we&apos;ll need the WebXRSession alive to properly do that.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:233
&gt;&gt; +        resolvedFeatures.granted = device-&gt;enabledFeatures(mode);
&gt; 
&gt; It would make more sense to move that line after the early return in the next two lines.

Agree, I just wanted to follow literally what the spec says, but from the implementation POV it should be as you suggest.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.cpp:365
&gt;&gt; +    queueTaskKeepingObjectAlive(*this, TaskSource::WebXR, [this, document = makeRef(document), immersive, init, mode, promise = WTFMove(promise)] () mutable {
&gt; 
&gt; Why taking a ref here but capture document by ref below? You could take a weakref and move it as part of next lambda.
&gt; Another approach would be to get the global object from the promise itself, which would simplify things.

OK I&apos;ll do it as suggested. 

Taking the global object from the promise is indeed possible but we need the document anyway to create the session.

&gt;&gt; Source/WebCore/Modules/webxr/WebXRSystem.h:116
&gt;&gt; +    Vector&lt;Ref&lt;WebXRSession&gt;&gt; m_listOfInlineSessions;
&gt; 
&gt; Should it be a vector or a hashset?

Semantically it&apos;s indeed a set because there won&apos;t be any duplicates. We don&apos;t really need the fast lookup from hashmaps but I agree to make the change.

Also I could replace the Vector&lt;WeakPtr&lt;&gt;&gt; bellow by a WeakHashSet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654019</commentid>
    <comment_count>10</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2020-05-19 09:08:56 -0700</bug_when>
    <thetext>Committed r261863: &lt;https://trac.webkit.org/changeset/261863&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654020</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-19 09:09:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/63397466&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399350</attachid>
            <date>2020-05-14 04:01:35 -0700</date>
            <delta_ts>2020-05-18 07:17:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211888-20200514130132.patch</filename>
            <type>text/plain</type>
            <size>53769</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxNjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQ0NjYyNzMzN2I1YjJi
Y2IyOWYwZWMyYmY2MWQ5YzdkNzYxZjcwYS4uNTUwYzhmZWRhYzE5MjgyZmNmMTk3ODA4NDU4OTVm
ODhlYzIyYjczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIwLTA1LTE0ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXZWJYUl0g
SW1wbGVtZW50IHJlcXVlc3RTZXNzaW9uKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMTg4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIHByZWxpbWluYXIgaW1wbGVtZW50
YXRpb24gb2YgdGhlIHJlcXVlc3RTZXNzaW9uKCkKKyAgICAgICAgQVBJIHVzZWQgdG8gZ2V0IGEg
V2ViWFJTZXNzaW9uIGZyb20gdGhlIFVBLiBJdCBpbmNsdWRlcyBhIGZhaXJseSBnb29kCisgICAg
ICAgIGFtb3VudCBvZiBjaGVja3MgdG8gdmVyaWZ5IHRoYXQgdGhlIHJlcXVlc3QgY2FuIGJlIHNh
dGlzZmllZCBnaXZlbiB0aGUKKyAgICAgICAgZGV2aWNlJ3MgZW5hYmxlZCBmZWF0dXJlcyBwZXIg
c2Vzc2lvbiBtb2Rlcy4gVGhlIHNwZWNzIGFsc28gZGVzY3JpYmUgaG93CisgICAgICAgIHRvIHJl
cXVlc3QgcGVyc21pc3Npb24gZm9yIHNvbWUgYWN0aW9ucyB1c2luZyB0aGUgUGVybWlzc2lvbnMg
QVBJIHdoaWNoCisgICAgICAgIFdlYktpdCBkb2VzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50LiBU
aGF0IHNob3VsZCBiZSBkb25lIGluIGEgZm9sbG93IHVwCisgICAgICAgIHBhdGNoIHBlcmhhcHMg
dXNpbmcgYSBzaW1pbGFyIGFwcHJvYWNoIHRvIG90aGVyIEFQSXMgYXMgR2VvbG9jYXRpb24gZm9y
CisgICAgICAgIGV4YW1wbGUuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gZ2V0IHNvbWUgb2YgdGhl
IHJlcXVlc3RTZXNzaW9uKCkgdGVzdHMgcGFzc2luZyB0aGUgc2Vzc2lvbgorICAgICAgICBmaW5h
bGl6YXRpb24gKHNodXRkb3duKSBoYWQgdG8gYmUgaW1wbGVtZW50ZWQgdG9vLgorCisgICAgICAg
IFNldmVyYWwgdGVzdHMgd2hlcmUgdW5za2lwcGVkIGZvciBXUEUgcG9ydCBhcyB0aGV5J3JlIG5v
dyBwYXNzaW5nLgorCisgICAgICAgICogTW9kdWxlcy93ZWJ4ci9XZWJYUlJlbmRlclN0YXRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlhSUmVuZGVyU3RhdGU6OmNyZWF0ZSk6IFBhc3MgWFJT
ZXNzaW9uTW9kZSBhcyBhcmd1bWVudAorICAgICAgICBpbnN0ZWFkIG9mIGEgV2ViWFJTZXNzaW9u
LgorICAgICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJSZW5kZXJTdGF0ZS5oOiBEaXR0by4KKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJYUlNlc3Npb246OmNyZWF0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJT
ZXNzaW9uOjpXZWJYUlNlc3Npb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlhSU2Vz
c2lvbjo6cmVuZGVyU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9u
OjppbnB1dFNvdXJjZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpz
aHV0ZG93bik6IFNodXRkb3duIHByb2Nlc3MgY2FsbGVkIG9uIHNlc3Npb24gZW5kLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjplbmQpOiBJbXBsZW1lbnRlZCBzZXNzaW9uIGVuZGlu
Zy4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oOiBBZGRlZCBjcmVhdGUo
KSBhbmQgcHJpdmF0ZSBjb25zdHJ1Y3Rvci4gRml4ZWQgc29tZSBuYW1pbmcuCisgICAgICAgICog
TW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlN5
c3RlbTo6RHVtbXlJbmxpbmVEZXZpY2U6OkR1bW15SW5saW5lRGV2aWNlKTogQ29udHJ1Y3RvciBm
b3IgdGhlCisgICAgICAgIGR1bW15IGlubGluZSBkZXZpY2UuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJYUlN5c3RlbTo6ZW5zdXJlSW1tZXJzaXZlWFJEZXZpY2VJc1NlbGVjdGVkKTogVXNlIGEgY291
bnRlciBpbnN0ZWFkIG9mIGEgYm9vbGVhbgorICAgICAgICB0byB0cmFjayB0ZXN0aW5nIGRldmlj
ZXMgYXMgdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIDEuCisgICAgICAgIChXZWJDb3JlOjpXZWJY
UlN5c3RlbTo6b2J0YWluQ3VycmVudERldmljZSk6IEltcGxlbWVudGVkIGZyb20gc3BlY3MgdGV4
dC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlhSU3lzdGVtOjppbW1lcnNpdmVTZXNzaW9uUmVxdWVz
dElzQWxsb3dlZEZvckdsb2JhbE9iamVjdCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViWFJTeXN0ZW06OmlubGluZVNlc3Npb25SZXF1ZXN0SXNBbGxvd2VkRm9yR2xvYmFsT2Jq
ZWN0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJYUlN5c3RlbTo6cmVzb2x2
ZVJlcXVlc3RlZEZlYXR1cmVzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJY
UlN5c3RlbTo6aXNYUlBlcm1pc3Npb25HcmFudGVkIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJYUlN5c3RlbTo6cmVxdWVzdFNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OldlYlhSU3lzdGVtOjpyZWdpc3RlclNpbXVsYXRlZFhSRGV2aWNlRm9yVGVzdGluZyk6
IFVzZSBhIGNvdW50ZXIgaW5zdGVhZCBvZiBhIGJvb2wuCisgICAgICAgIChXZWJDb3JlOjpXZWJY
UlN5c3RlbTo6dW5yZWdpc3RlclNpbXVsYXRlZFhSRGV2aWNlRm9yVGVzdGluZyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViWFJTeXN0ZW06OnNlc3Npb25FbmRlZCk6IEFkZGVkLCB1c2Vk
IGJ5IHNlc3Npb25zIHRvIG5vdGlmeSB0aGUgWFJTeXN0ZW0uCisgICAgICAgICogTW9kdWxlcy93
ZWJ4ci9XZWJYUlN5c3RlbS5oOgorICAgICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0u
aWRsOiBDYWxsIHJlcXVlc3RTZXNzaW9uIHdpdGggRG9jdW1lbnQuCisgICAgICAgICogZG9tL1Rh
c2tTb3VyY2UuaDogQWRkZWQgYSBXZWJYUiB0YXNrIHNvdXJjZS4KKyAgICAgICAgKiBwbGF0Zm9y
bS94ci9QbGF0Zm9ybVhSLmg6IFNwZWNzIHN0YXRlIHRoYXQgZGV2aWNlcyBoYXZlIGEgbGlzdCBv
ZiBlbmFibGVkIGZlYXR1cmVzIHBlciBzZXNzaW9uCisgICAgICAgIG1vZGUgc28gc3RvcmUgdGhl
bSBpbiBhIGhhc2htYXAgaW5zdGVhZCBvZiBpbiBhIFZlY3Rvci4KKyAgICAgICAgKFBsYXRmb3Jt
WFI6OkRldmljZTo6c3VwcG9ydHMgY29uc3QpOiBVc2UgdGhlIG5ldyBIYXNobWFwIG9mIHNlc3Np
b24gbW9kZXMuCisgICAgICAgIChQbGF0Zm9ybVhSOjpEZXZpY2U6OnNldEVuYWJsZWRGZWF0dXJl
cyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1YUjo6RGV2aWNlOjplbmFibGVkRmVhdHVyZXMg
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtWFI6OkRldmljZTo6c2V0U3VwcG9ydGVk
TW9kZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhS
LmNwcDoKKyAgICAgICAgKFBsYXRmb3JtWFI6Okluc3RhbmNlOjpJbXBsOjpjb2xsZWN0U3VwcG9y
dGVkU2Vzc2lvbk1vZGVzKTogUmV0dXJuIHNlc3Npb24gbW9kZXMgaWYgYW55LgorICAgICAgICAo
UGxhdGZvcm1YUjo6SW5zdGFuY2U6OmVudW1lcmF0ZUltbWVyc2l2ZVhSRGV2aWNlcyk6IEZpbGwg
aW4gZmVhdHVyZXMgcGVyIHNlc3Npb24gbW9kZS4KKyAgICAgICAgKiB0ZXN0aW5nL1dlYlhSVGVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlRlc3Q6OnNpbXVsYXRlRGV2aWNlQ29ubmVj
dGlvbik6IEZpbGwgaW4gZmVhdHVyZXMgcGVyIHNlc3Npb24gbW9kZS4KKwogMjAyMC0wNS0wNiAg
U2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV2Vi
WFJdIEltcGxlbWVudCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYWtlWFJDb21wYXRpYmxl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJSZW5kZXJT
dGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSUmVuZGVyU3RhdGUu
Y3BwCmluZGV4IDA2Nzg5ZjgxOTI3MWU5MTU2NTI2OWRhM2YzYjk2MWQzM2Q5OTc2YWUuLmMwZjg5
NWIyYjFjNTk2NzZiZGNmNTgzNWMwOGY0YmIwNmUwODQ3YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJSZW5kZXJTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlJlbmRlclN0YXRlLmNwcApAQCAtMzcsMjYgKzM3LDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFdl
YlhSUmVuZGVyU3RhdGUpOwogCi1SZWY8V2ViWFJSZW5kZXJTdGF0ZT4gV2ViWFJSZW5kZXJTdGF0
ZTo6Y3JlYXRlKGNvbnN0IFdlYlhSU2Vzc2lvbiYgc2Vzc2lvbikKK1JlZjxXZWJYUlJlbmRlclN0
YXRlPiBXZWJYUlJlbmRlclN0YXRlOjpjcmVhdGUoWFJTZXNzaW9uTW9kZSBtb2RlKQogewotICAg
IC8vIFdoZW4gYW4gWFJSZW5kZXJTdGF0ZSBvYmplY3QgaXMgY3JlYXRlZCBmb3IgYW4gWFJTZXNz
aW9uIHNlc3Npb24sIHRoZSB1c2VyIGFnZW50IE1VU1QgaW5pdGlhbGl6ZSB0aGUgcmVuZGVyIHN0
YXRlIGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICAvLyAgIDEuIExldCBzdGF0
ZSBiZSB0aGUgbmV3bHkgY3JlYXRlZCBYUlJlbmRlclN0YXRlIG9iamVjdC4KLQotICAgIC8vICAg
Mi4gSW5pdGlhbGl6ZSBzdGF0ZeKAmXMgZGVwdGhOZWFyIHRvIDAuMS4KLSAgICAvLyAgIDMuIElu
aXRpYWxpemUgc3RhdGXigJlzIGRlcHRoRmFyIHRvIDEwMDAuMC4KLSAgICAvLyAoRGVmYXVsdC1p
bml0aWFsaXplZCBpbiB0aGUgWFJSZW5kZXJTdGF0ZSBjbGFzcyBkZWZpbml0aW9uLikKLQotICAg
IC8vICAgNC4gSWYgc2Vzc2lvbiBpcyBhbiBpbW1lcnNpdmUgc2Vzc2lvbiwgaW5pdGlhbGl6ZSBz
dGF0ZeKAmXMgaW5saW5lVmVydGljYWxGaWVsZE9mVmlldyB0byBudWxsLgotICAgIC8vICAgNS4g
RWxzZSBpbml0aWFsaXplIHN0YXRl4oCZcyBpbmxpbmVWZXJ0aWNhbEZpZWxkT2ZWaWV3IHRvIFBJ
ICogMC41LgotICAgIC8vIEZJWE1FOiAiaW1tZXJzaXZlIHNlc3Npb24iIHN1cHBvcnQKLSAgICBV
TlVTRURfUEFSQU0oc2Vzc2lvbik7Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBpbmxpbmVWZXJ0aWNh
bEZpZWxkT2ZWaWV3IHsgcGlPdmVyVHdvRG91YmxlIH07Ci0KLSAgICAvLyAgIDYuIEluaXRpYWxp
emUgc3RhdGXigJlzIGJhc2VMYXllciB0byBudWxsLgotICAgIC8vICAgNy4gSW5pdGlhbGl6ZSBz
dGF0ZeKAmXMgb3V0cHV0Q29udGV4dCB0byBudWxsLgotICAgIC8vIChJbml0aWFsaXplZCB0byBu
dWxsIGJ5IGRlZmF1bHQuKQotCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViWFJSZW5kZXJT
dGF0ZShXVEZNb3ZlKGlubGluZVZlcnRpY2FsRmllbGRPZlZpZXcpKSk7CisgICAgLy8gaHR0cHM6
Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jaW5pdGlhbGl6ZS10aGUtcmVuZGVyLXN0
YXRlCisgICAgLy8gZGVwdGhOZWFyLCBkZXB0aEZhciBhbmQgYmFzZUxheWVyIGFyZSBpbml0aWFs
aXplZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbgorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdl
YlhSUmVuZGVyU3RhdGUobW9kZSA9PSBYUlNlc3Npb25Nb2RlOjpJbmxpbmUgPyBtYWtlT3B0aW9u
YWwocGlPdmVyVHdvRG91YmxlKSA6IFdURjo6bnVsbG9wdCkpOwogfQogCiBXZWJYUlJlbmRlclN0
YXRlOjpXZWJYUlJlbmRlclN0YXRlKE9wdGlvbmFsPGRvdWJsZT4mJiBpbmxpbmVWZXJ0aWNhbEZp
ZWxkT2ZWaWV3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJY
UlJlbmRlclN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSUmVuZGVy
U3RhdGUuaAppbmRleCAzZjI5MmFjMWQ2ODFhNDY5ODc2MDE4MTg5YTg3YTk2ZjFlZGJhYzdkLi44
ZDFlYTE2YTM4ZDYyNTAyNmEzYmQwODk1MGYyNDc1MjQwYzExYmI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSUmVuZGVyU3RhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSUmVuZGVyU3RhdGUuaApAQCAtMjcsNiArMjcsNyBA
QAogCiAjaWYgRU5BQkxFKFdFQlhSKQogCisjaW5jbHVkZSAiWFJTZXNzaW9uTW9kZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvUmVmLmg+CkBAIC0zNywxMiArMzgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBXZWJYUldlYkdMTGF5ZXI7CiBzdHJ1Y3QgWFJSZW5kZXJTdGF0ZUluaXQ7Ci1jbGFz
cyBXZWJYUlNlc3Npb247CiAKIGNsYXNzIFdlYlhSUmVuZGVyU3RhdGUgOiBwdWJsaWMgUmVmQ291
bnRlZDxXZWJYUlJlbmRlclN0YXRlPiB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChXZWJY
UlJlbmRlclN0YXRlKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlhSUmVuZGVyU3RhdGU+
IGNyZWF0ZShjb25zdCBXZWJYUlNlc3Npb24mKTsKKyAgICBzdGF0aWMgUmVmPFdlYlhSUmVuZGVy
U3RhdGU+IGNyZWF0ZShYUlNlc3Npb25Nb2RlKTsKICAgICB+V2ViWFJSZW5kZXJTdGF0ZSgpOwog
CiAgICAgZG91YmxlIGRlcHRoTmVhcigpIGNvbnN0OwpAQCAtNTEsMTQgKzUxLDE1IEBAIHB1Ymxp
YzoKICAgICBSZWZQdHI8V2ViWFJXZWJHTExheWVyPiBiYXNlTGF5ZXIoKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBXZWJYUlJlbmRlclN0YXRlKE9wdGlvbmFsPGRvdWJsZT4mJik7CisgICAgV2Vi
WFJSZW5kZXJTdGF0ZShPcHRpb25hbDxkb3VibGU+JiYgZmllbGRPZlZpZXcpOwogICAgIFdlYlhS
UmVuZGVyU3RhdGUoY29uc3QgWFJSZW5kZXJTdGF0ZUluaXQmKTsKIAorICAgIC8vIGh0dHBzOi8v
aW1tZXJzaXZlLXdlYi5naXRodWIuaW8vd2VieHIvI2luaXRpYWxpemUtdGhlLXJlbmRlci1zdGF0
ZQogICAgIHN0cnVjdCB7Ci0gICAgICAgIGRvdWJsZSBuZWFyIHsgMC4xIH07Ci0gICAgICAgIGRv
dWJsZSBmYXIgeyAxMDAwIH07CisgICAgICAgIGRvdWJsZSBuZWFyIHsgMC4xIH07IC8vIGluIG1l
dGVycworICAgICAgICBkb3VibGUgZmFyIHsgMTAwMCB9OyAvLyBpbiBtZXRlcnMKICAgICB9IG1f
ZGVwdGg7Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBtX2lubGluZVZlcnRpY2FsRmllbGRPZlZpZXc7
CisgICAgT3B0aW9uYWw8ZG91YmxlPiBtX2lubGluZVZlcnRpY2FsRmllbGRPZlZpZXc7IC8vIGlu
IHJhZGlhbnMKICAgICBSZWZQdHI8V2ViWFJXZWJHTExheWVyPiBtX2Jhc2VMYXllcjsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmNwcAppbmRleCBl
ZDM1NjJmMmUzZjZjOGQ4ODk0M2IwOTEzOGY3NjY4NzAyMTU3YTJmLi5iOTAyZDg1MjYwN2FlMzg0
ZWM3MmYwZTVhMjM0MzBiZTEzMDcyNDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJ4ci9XZWJYUlNlc3Npb24uY3BwCkBAIC0yOCwxMiArMjgsMzIgQEAKIAogI2lmIEVOQUJMRShX
RUJYUikKIAorI2luY2x1ZGUgIldlYlhSU3lzdGVtLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoV2ViWFJTZXNzaW9uKTsKIAorUmVmPFdlYlhSU2Vzc2lvbj4gV2ViWFJTZXNzaW9u
OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgUmVmPFdlYlhSU3lzdGVt
PiYmIHN5c3RlbSwgWFJTZXNzaW9uTW9kZSBtb2RlLCBXZWFrUHRyPFBsYXRmb3JtWFI6OkRldmlj
ZT4mJiBkZXZpY2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViWFJTZXNzaW9uKGNv
bnRleHQsIFdURk1vdmUoc3lzdGVtKSwgbW9kZSwgV1RGTW92ZShkZXZpY2UpKSk7Cit9CisKK1dl
YlhSU2Vzc2lvbjo6V2ViWFJTZXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIFJlZjxXZWJYUlN5c3RlbT4mJiBzeXN0ZW0sIFhSU2Vzc2lvbk1vZGUg
bW9kZSwgV2Vha1B0cjxQbGF0Zm9ybVhSOjpEZXZpY2U+JiYgZGV2aWNlKQorICAgIDogQWN0aXZl
RE9NT2JqZWN0KCZzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICwgbV94clN5c3RlbShXVEZN
b3ZlKHN5c3RlbSkpCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fZGV2aWNlKFdURk1vdmUo
ZGV2aWNlKSkKK3sKKyAgICBtX2FjdGl2ZVJlbmRlclN0YXRlID0gV2ViWFJSZW5kZXJTdGF0ZTo6
Y3JlYXRlKG1vZGUpOworCisgICAgLy8gVE9ETzogSWYgbm8gb3RoZXIgZmVhdHVyZXMgb2YgdGhl
IHVzZXIgYWdlbnQgaGF2ZSBkb25lIHNvIGFscmVhZHksCisgICAgLy8gcGVyZm9ybSB0aGUgbmVj
ZXNzYXJ5IHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIHRvIGluaXRpYWxpemUgdGhlIGRldmljZeKA
mXMKKyAgICAvLyB0cmFja2luZyBhbmQgcmVuZGVyaW5nIGNhcGFiaWxpdGllcywgaW5jbHVkaW5n
IHNob3dpbmcgYW55IG5lY2Vzc2FyeQorICAgIC8vIGluc3RydWN0aW9ucyB0byB0aGUgdXNlci4K
K30KKwogV2ViWFJTZXNzaW9uOjp+V2ViWFJTZXNzaW9uKCkgPSBkZWZhdWx0OwogCiBYUkVudmly
b25tZW50QmxlbmRNb2RlIFdlYlhSU2Vzc2lvbjo6ZW52aXJvbm1lbnRCbGVuZE1vZGUoKSBjb25z
dApAQCAtNDgsMTIgKzY4LDEyIEBAIFhSVmlzaWJpbGl0eVN0YXRlIFdlYlhSU2Vzc2lvbjo6dmlz
aWJpbGl0eVN0YXRlKCkgY29uc3QKIAogY29uc3QgV2ViWFJSZW5kZXJTdGF0ZSYgV2ViWFJTZXNz
aW9uOjpyZW5kZXJTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICptX3JlbmRlclN0YXRlOwor
ICAgIHJldHVybiAqbV9hY3RpdmVSZW5kZXJTdGF0ZTsKIH0KIAogY29uc3QgV2ViWFJJbnB1dFNv
dXJjZUFycmF5JiBXZWJYUlNlc3Npb246OmlucHV0U291cmNlcygpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuICptX2lucHV0U291cmNlczsKKyAgICByZXR1cm4gbV9pbnB1dFNvdXJjZXM7CiB9CiAKIHZv
aWQgV2ViWFJTZXNzaW9uOjp1cGRhdGVSZW5kZXJTdGF0ZShjb25zdCBYUlJlbmRlclN0YXRlSW5p
dCYpCkBAIC03Myw4ICs5Myw0MSBAQCB2b2lkIFdlYlhSU2Vzc2lvbjo6Y2FuY2VsQW5pbWF0aW9u
RnJhbWUoaW50KQogewogfQogCi12b2lkIFdlYlhSU2Vzc2lvbjo6ZW5kKEVuZFByb21pc2UmJikK
Ky8vIGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRodWIuaW8vd2VieHIvI3NodXQtZG93bi10aGUt
c2Vzc2lvbgordm9pZCBXZWJYUlNlc3Npb246OnNodXRkb3duKCkKK3sKKyAgICAvLyAxLiBMZXQg
c2Vzc2lvbiBiZSB0aGUgdGFyZ2V0IFhSU2Vzc2lvbiBvYmplY3QuCisgICAgLy8gMi4gU2V0IHNl
c3Npb24ncyBlbmRlZCB2YWx1ZSB0byB0cnVlLgorICAgIG1fZW5kZWQgPSB0cnVlOworCisgICAg
Ly8gMy4gSWYgdGhlIGFjdGl2ZSBpbW1lcnNpdmUgc2Vzc2lvbiBpcyBlcXVhbCB0byBzZXNzaW9u
LCBzZXQgdGhlIGFjdGl2ZSBpbW1lcnNpdmUgc2Vzc2lvbiB0byBudWxsLgorICAgIC8vIDQuIFJl
bW92ZSBzZXNzaW9uIGZyb20gdGhlIGxpc3Qgb2YgaW5saW5lIHNlc3Npb25zLgorICAgIG1feHJT
eXN0ZW0tPnNlc3Npb25FbmRlZCh0aGlzKTsKKworICAgIC8vIFRPRE86IGNvbXBsZXRlIHRoZSBp
bXBsZW1lbnRhdGlvbgorICAgIC8vIDUuIFJlamVjdCBhbnkgb3V0c3RhbmRpbmcgcHJvbWlzZXMg
cmV0dXJuZWQgYnkgc2Vzc2lvbiB3aXRoIGFuIEludmFsaWRTdGF0ZUVycm9yLCBleGNlcHQgZm9y
IGFueSBwcm9taXNlcyByZXR1cm5lZCBieSBlbmQoKS4KKyAgICAvLyA2LiBJZiBubyBvdGhlciBm
ZWF0dXJlcyBvZiB0aGUgdXNlciBhZ2VudCBhcmUgYWN0aXZlbHkgdXNpbmcgdGhlbSwgcGVyZm9y
bSB0aGUgbmVjZXNzYXJ5IHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIHRvIHNodXQgZG93biB0aGUg
ZGV2aWNlJ3MgdHJhY2tpbmcgYW5kIHJlbmRlcmluZyBjYXBhYmlsaXRpZXMuIFRoaXMgTVVTVCBp
bmNsdWRlOgorICAgIC8vICA2LjEuIFJlbGVhc2luZyBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBY
UiBkZXZpY2UgaWYgc2Vzc2lvbiBpcyBhbiBpbW1lcnNpdmUgc2Vzc2lvbi4KKyAgICAvLyAgNi4y
LiBEZWFsbG9jYXRpbmcgYW55IGdyYXBoaWNzIHJlc291cmNlcyBhY3F1aXJlZCBieSBzZXNzaW9u
IGZvciBwcmVzZW50YXRpb24gdG8gdGhlIFhSIGRldmljZS4KKyAgICAvLyAgNi4zLiBQdXR0aW5n
IHRoZSBYUiBkZXZpY2UgaW4gYSBzdGF0ZSBzdWNoIHRoYXQgYSBkaWZmZXJlbnQgc291cmNlIG1h
eSBiZSBhYmxlIHRvIGluaXRpYXRlIGEgc2Vzc2lvbiB3aXRoIHRoZSBzYW1lIGRldmljZSBpZiBz
ZXNzaW9uIGlzIGFuIGltbWVyc2l2ZSBzZXNzaW9uLgorICAgIC8vIDcuIFF1ZXVlIGEgdGFzayB0
aGF0IGZpcmVzIGFuIFhSU2Vzc2lvbkV2ZW50IG5hbWVkIGVuZCBvbiBzZXNzaW9uLgorfQorCisv
LyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLyNkb20teHJzZXNzaW9uLWVu
ZAordm9pZCBXZWJYUlNlc3Npb246OmVuZChFbmRQcm9taXNlJiYgcHJvbWlzZSkKIHsKKyAgICAv
LyAxLiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBQcm9taXNlLgorICAgIC8vIDIuIFNodXQgZG93biB0
aGUgdGFyZ2V0IFhSU2Vzc2lvbiBvYmplY3QuCisgICAgc2h1dGRvd24oKTsKKworICAgIC8vIDMu
IFF1ZXVlIGEgdGFzayB0byBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgcXVldWVU
YXNrS2VlcGluZ09iamVjdEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpXZWJYUiwgW3Byb21pc2Ug
PSBXVEZNb3ZlKHByb21pc2UpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgLy8gMy4xIFdhaXQgdW50
aWwgYW55IHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIHJlbGF0ZWQgdG8gc2h1dHRpbmcgZG93biB0
aGUgc2Vzc2lvbiBoYXZlIGNvbXBsZXRlZC4KKyAgICAgICAgLy8gMy4yIFJlc29sdmUgcHJvbWlz
ZS4KKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7CisgICAgfSk7CisKKyAgICAvLyA0LiBSZXR1
cm4gcHJvbWlzZS4KIH0KIAogY29uc3QgY2hhciogV2ViWFJTZXNzaW9uOjphY3RpdmVET01PYmpl
Y3ROYW1lKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIv
V2ViWFJTZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lv
bi5oCmluZGV4IGYwMTE1MDE5N2I2NzBkZTczMmU5NmYwZTA3YjdjNjk2MDM1MGVhYzQuLjIyMWI2
NDE3YzRkNzllODk1ZjExNjFmNDdiYTZlOTRmYmEzZmY1YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUg
IldlYlhSU3BhY2UuaCIKICNpbmNsdWRlICJYUkVudmlyb25tZW50QmxlbmRNb2RlLmgiCiAjaW5j
bHVkZSAiWFJSZWZlcmVuY2VTcGFjZVR5cGUuaCIKKyNpbmNsdWRlICJYUlNlc3Npb25Nb2RlLmgi
CiAjaW5jbHVkZSAiWFJWaXNpYmlsaXR5U3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQ1LDYgKzQ2LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBYUkZyYW1lUmVxdWVzdENhbGxiYWNrOwogY2xhc3MgV2ViWFJSZWZl
cmVuY2VTcGFjZTsKK2NsYXNzIFdlYlhSU3lzdGVtOwogc3RydWN0IFhSUmVuZGVyU3RhdGVJbml0
OwogCiBjbGFzcyBXZWJYUlNlc3Npb24gZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJYUlNl
c3Npb24+LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIEFjdGl2ZURP
TU9iamVjdCB7CkBAIC01Myw2ICs1NSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZXF1ZXN0UmVm
ZXJlbmNlU3BhY2VQcm9taXNlID0gRE9NUHJvbWlzZURlZmVycmVkPElETEludGVyZmFjZTxXZWJY
UlJlZmVyZW5jZVNwYWNlPj47CiAgICAgdXNpbmcgRW5kUHJvbWlzZSA9IERPTVByb21pc2VEZWZl
cnJlZDx2b2lkPjsKIAorICAgIHN0YXRpYyBSZWY8V2ViWFJTZXNzaW9uPiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIFJlZjxXZWJYUlN5c3RlbT4mJiwgWFJTZXNzaW9uTW9kZSwgV2Vh
a1B0cjxQbGF0Zm9ybVhSOjpEZXZpY2U+JiYpOwogICAgIHZpcnR1YWwgfldlYlhSU2Vzc2lvbigp
OwogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJYUlNlc3Npb24+OjpyZWY7CkBAIC03NCw2ICs3
Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIGVuZGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmRlZDsg
fQogCiBwcml2YXRlOgorICAgIFdlYlhSU2Vzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
UmVmPFdlYlhSU3lzdGVtPiYmLCBYUlNlc3Npb25Nb2RlLCBXZWFrUHRyPFBsYXRmb3JtWFI6OkRl
dmljZT4mJik7CisKICAgICAvLyBFdmVudFRhcmdldAogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNl
IGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gV2ViWFJTZXNz
aW9uRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFjdGl2
ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CkBAIC04NCwxMSArODksMTgg
QEAgcHJpdmF0ZToKICAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CiAKKyAgICB2b2lkIHNodXRkb3du
KCk7CisKICAgICBYUkVudmlyb25tZW50QmxlbmRNb2RlIG1fZW52aXJvbm1lbnRCbGVuZE1vZGU7
CiAgICAgWFJWaXNpYmlsaXR5U3RhdGUgbV92aXNpYmlsaXR5U3RhdGU7Ci0gICAgUmVmUHRyPFdl
YlhSUmVuZGVyU3RhdGU+IG1fcmVuZGVyU3RhdGU7Ci0gICAgUmVmUHRyPFdlYlhSSW5wdXRTb3Vy
Y2VBcnJheT4gbV9pbnB1dFNvdXJjZXM7CisgICAgV2ViWFJJbnB1dFNvdXJjZUFycmF5IG1faW5w
dXRTb3VyY2VzOwogICAgIGJvb2wgbV9lbmRlZCB7IGZhbHNlIH07CisKKyAgICBSZWY8V2ViWFJT
eXN0ZW0+IG1feHJTeXN0ZW07CisgICAgWFJTZXNzaW9uTW9kZSBtX21vZGU7CisgICAgV2Vha1B0
cjxQbGF0Zm9ybVhSOjpEZXZpY2U+IG1fZGV2aWNlOworICAgIFJlZlB0cjxXZWJYUlJlbmRlclN0
YXRlPiBtX2FjdGl2ZVJlbmRlclN0YXRlOworICAgIFJlZlB0cjxXZWJYUlJlbmRlclN0YXRlPiBt
X3BlbmRpbmdSZW5kZXJTdGF0ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5jcHAKaW5kZXggOTg0MjJlYzBk
OWY0YTE0ZDA1YmViNmEyZmMzZDhmMDI1ZGIzNjhlNS4uM2YyOWMwZTgzODkyZjU4NjQ1YmE2MTU0
YTNhYjY2ODBhYjY2NDc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4
ci9XZWJYUlN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJY
UlN5c3RlbS5jcHAKQEAgLTI4LDE3ICsyOCwzMSBAQAogCiAjaWYgRU5BQkxFKFdFQlhSKQogCisj
aW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJG
ZWF0dXJlUG9saWN5LmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRlICJKU1dlYlhS
U2Vzc2lvbi5oIgorI2luY2x1ZGUgIkpTWFJSZWZlcmVuY2VTcGFjZVR5cGUuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVhSLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3Iu
aCIKICNpbmNsdWRlICJXZWJYUlNlc3Npb24uaCIKKyNpbmNsdWRlICJYUlJlZmVyZW5jZVNwYWNl
VHlwZS5oIgorI2luY2x1ZGUgIlhSU2Vzc2lvbkluaXQuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0dsb2JhbE9iamVjdC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFdl
YlhSU3lzdGVtKTsKIAorV2ViWFJTeXN0ZW06OkR1bW15SW5saW5lRGV2aWNlOjpEdW1teUlubGlu
ZURldmljZSgpCit7CisgICAgc2V0RW5hYmxlZEZlYXR1cmVzKFhSU2Vzc2lvbk1vZGU6OklubGlu
ZSwgeyBYUlJlZmVyZW5jZVNwYWNlVHlwZTo6Vmlld2VyIH0pOworfQorCiBSZWY8V2ViWFJTeXN0
ZW0+IFdlYlhSU3lzdGVtOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJYUlN5c3RlbShz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KSk7CkBAIC01Niw4ICs3MCw3IEBAIFdlYlhSU3lzdGVtOjp+
V2ViWFJTeXN0ZW0oKSA9IGRlZmF1bHQ7CiB2b2lkIFdlYlhSU3lzdGVtOjplbnN1cmVJbW1lcnNp
dmVYUkRldmljZUlzU2VsZWN0ZWQoKQogewogICAgIC8vIERvbid0IGFzayBwbGF0Zm9ybSBjb2Rl
IGZvciBYUiBkZXZpY2VzLCB3ZSdyZSB1c2luZyBzaW11bGF0ZWQgb25lcy4KLSAgICAvLyBUT0RP
OiBzaG91bGQgYmUgaGF2ZSBhIE1vY2tQbGF0Zm9ybVhSIGltcGxlbWVudGF0aW9uIGluc3RlYWQg
PwotICAgIGlmIChVTkxJS0VMWShtX3Rlc3RpbmdNb2RlKSkKKyAgICBpZiAoVU5MSUtFTFkobV90
ZXN0aW5nRGV2aWNlcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2FjdGl2ZUltbWVy
c2l2ZURldmljZSkKQEAgLTk2LDYgKzEwOSwyMCBAQCB2b2lkIFdlYlhSU3lzdGVtOjplbnN1cmVJ
bW1lcnNpdmVYUkRldmljZUlzU2VsZWN0ZWQoKQogICAgIC8vIFRPRE86IDkuIFF1ZXVlIGEgdGFz
ayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGRldmljZWNoYW5nZSBvbiB0aGUgY29udGV4dCBvYmpl
Y3QuCiB9CiAKKworUGxhdGZvcm1YUjo6RGV2aWNlKiBXZWJYUlN5c3RlbTo6b2J0YWluQ3VycmVu
dERldmljZShYUlNlc3Npb25Nb2RlIG1vZGUsIGNvbnN0IEpTRmVhdHVyZXNBcnJheSYgcmVxdWly
ZWRGZWF0dXJlcywgY29uc3QgSlNGZWF0dXJlc0FycmF5JiBvcHRpb25hbEZlYXR1cmVzKQorewor
ICAgIGlmIChtb2RlID09IFhSU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZUFyIHx8IG1vZGUgPT0gWFJT
ZXNzaW9uTW9kZTo6SW1tZXJzaXZlVnIpIHsKKyAgICAgICAgZW5zdXJlSW1tZXJzaXZlWFJEZXZp
Y2VJc1NlbGVjdGVkKCk7CisgICAgICAgIHJldHVybiBtX2FjdGl2ZUltbWVyc2l2ZURldmljZS5n
ZXQoKTsKKyAgICB9CisgICAgaWYgKCFyZXF1aXJlZEZlYXR1cmVzLmlzRW1wdHkoKSB8fCAhb3B0
aW9uYWxGZWF0dXJlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX2lubGluZVhSRGV2aWNl
LmdldCgpOworCisgICAgcmV0dXJuICZtX2RlZmF1bHRJbmxpbmVEZXZpY2U7Cit9CisKKwogLy8g
aHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jZG9tLXhyc3lzdGVtLWlzc2Vz
c2lvbnN1cHBvcnRlZAogdm9pZCBXZWJYUlN5c3RlbTo6aXNTZXNzaW9uU3VwcG9ydGVkKFhSU2Vz
c2lvbk1vZGUgbW9kZSwgSXNTZXNzaW9uU3VwcG9ydGVkUHJvbWlzZSYmIHByb21pc2UpCiB7CkBA
IC0xMzYsMjYgKzE2MywyNTcgQEAgdm9pZCBXZWJYUlN5c3RlbTo6aXNTZXNzaW9uU3VwcG9ydGVk
KFhSU2Vzc2lvbk1vZGUgbW9kZSwgSXNTZXNzaW9uU3VwcG9ydGVkUHJvbWkKICAgICB9KTsKIH0K
IAotdm9pZCBXZWJYUlN5c3RlbTo6cmVxdWVzdFNlc3Npb24oWFJTZXNzaW9uTW9kZSwgY29uc3Qg
WFJTZXNzaW9uSW5pdCYsIFJlcXVlc3RTZXNzaW9uUHJvbWlzZSYmKQorLy8gaHR0cHM6Ly9pbW1l
cnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jaW1tZXJzaXZlLXNlc3Npb24tcmVxdWVzdC1pcy1h
bGxvd2VkCitib29sIFdlYlhSU3lzdGVtOjppbW1lcnNpdmVTZXNzaW9uUmVxdWVzdElzQWxsb3dl
ZEZvckdsb2JhbE9iamVjdChET01XaW5kb3cmIGdsb2JhbE9iamVjdCwgRG9jdW1lbnQmIGRvY3Vt
ZW50KSBjb25zdAoreworICAgIC8vIDEuIElmIHRoZSByZXF1ZXN0IHdhcyBub3QgbWFkZSB3aGls
ZSB0aGUgZ2xvYmFsIG9iamVjdCBoYXMgdHJhbnNpZW50CisgICAgLy8gICAgYWN0aXZhdGlvbiBv
ciB3aGVuIGxhdW5jaGluZyBhIHdlYiBhcHBsaWNhdGlvbiwgcmV0dXJuIGZhbHNlCisgICAgaWYg
KCFnbG9iYWxPYmplY3QuaGFzVHJhbnNpZW50QWN0aXZhdGlvbigpIC8qIFRPRE86IHx8ICFsYXVu
Y2hpbmcgYSB3ZWIgYXBwICovKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAyLiBJ
ZiB0aGUgcmVxdWVzdGluZyBkb2N1bWVudCBpcyBub3QgY29uc2lkZXJlZCB0cnVzdHdvcnRoeSwg
cmV0dXJuIGZhbHNlLgorICAgIGlmICgmZG9jdW1lbnQgIT0gZ2xvYmFsT2JqZWN0LmRvY3VtZW50
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIGh0dHBzOi8vaW1tZXJzaXZlLXdl
Yi5naXRodWIuaW8vd2VieHIvI2FjdGl2ZS1hbmQtZm9jdXNlZAorICAgIGlmICghZG9jdW1lbnQu
aGFzRm9jdXMoKSB8fCAhZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKS5pc1NhbWVPcmlnaW5Bcyhn
bG9iYWxPYmplY3QuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIDMuIElmIHVzZXIgaW50ZW50IHRvIGJlZ2luIGFuIGltbWVyc2l2
ZSBzZXNzaW9uIGlzIG5vdCB3ZWxsIHVuZGVyc3Rvb2QsCisgICAgLy8gICAgZWl0aGVyIHZpYSBl
eHBsaWNpdCBjb25zZW50IG9yIGltcGxpY2l0IGNvbnNlbnQsIHJldHVybiBmYWxzZQorICAgIGlm
ICghVXNlckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gaHR0cHM6Ly9pbW1l
cnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jaW5saW5lLXNlc3Npb24tcmVxdWVzdC1pcy1hbGxv
d2VkCitib29sIFdlYlhSU3lzdGVtOjppbmxpbmVTZXNzaW9uUmVxdWVzdElzQWxsb3dlZEZvckds
b2JhbE9iamVjdChET01XaW5kb3cmIGdsb2JhbE9iamVjdCwgRG9jdW1lbnQmIGRvY3VtZW50LCBj
b25zdCBYUlNlc3Npb25Jbml0JiBpbml0KSBjb25zdAogewotICAgIFBsYXRmb3JtWFI6Okluc3Rh
bmNlOjpzaW5nbGV0b24oKTsKKyAgICAvLyAxLiBJZiB0aGUgc2Vzc2lvbiByZXF1ZXN0IGNvbnRh
aW5lZCBhbnkgcmVxdWlyZWQgZmVhdHVyZXMgb3Igb3B0aW9uYWwgZmVhdHVyZXMgYW5kIHRoZSBy
ZXF1ZXN0IHdhcyBub3QgbWFkZQorICAgIC8vICAgIHdoaWxlIHRoZSBnbG9iYWwgb2JqZWN0IGhh
cyB0cmFuc2llbnQgYWN0aXZhdGlvbiBvciB3aGVuIGxhdW5jaGluZyBhIHdlYiBhcHBsaWNhdGlv
biwgcmV0dXJuIGZhbHNlLgorICAgIGJvb2wgc2Vzc2lvblJlcXVlc3RDb250YWluZWRBbnlGZWF0
dXJlID0gIWluaXQub3B0aW9uYWxGZWF0dXJlcy5pc0VtcHR5KCkgfHwgIWluaXQucmVxdWlyZWRG
ZWF0dXJlcy5pc0VtcHR5KCk7CisgICAgaWYgKHNlc3Npb25SZXF1ZXN0Q29udGFpbmVkQW55RmVh
dHVyZSAmJiAhZ2xvYmFsT2JqZWN0Lmhhc1RyYW5zaWVudEFjdGl2YXRpb24oKSAvKiBUT0RPOiB8
fCAhbGF1bmNoaW5nIGEgd2ViIGFwcCAqLykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Ly8gV2hlbiB0aGUgcmVxdWVzdFNlc3Npb24obW9kZSkgbWV0aG9kIGlzIGludm9rZWQsIHRoZSB1
c2VyIGFnZW50IE1VU1QgcmV0dXJuIGEgbmV3IFByb21pc2UgcHJvbWlzZSBhbmQgcnVuIHRoZSBm
b2xsb3dpbmcgc3RlcHMgaW4gcGFyYWxsZWw6Ci0gICAgLy8gICAxLiBMZXQgaW1tZXJzaXZlIGJl
IHRydWUgaWYgbW9kZSBpcyAiaW1tZXJzaXZlLXZyIiBvciAiaW1tZXJzaXZlLWFyIiwgYW5kIGZh
bHNlIG90aGVyd2lzZS4KLSAgICAvLyAgIDIuIElmIGltbWVyc2l2ZSBpcyB0cnVlOgotICAgIC8v
ICAgICAxLiBJZiBwZW5kaW5nIGltbWVyc2l2ZSBzZXNzaW9uIGlzIHRydWUgb3IgYWN0aXZlIGlt
bWVyc2l2ZSBzZXNzaW9uIGlzIG5vdCBudWxsLCByZWplY3QgcHJvbWlzZSB3aXRoIGFuICJJbnZh
bGlkU3RhdGVFcnJvciIgRE9NRXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KLSAgICAv
LyAgICAgMi4gRWxzZSBzZXQgcGVuZGluZyBpbW1lcnNpdmUgc2Vzc2lvbiB0byBiZSB0cnVlLgot
ICAgIC8vICAgMy4gRW5zdXJlIGFuIFhSIGRldmljZSBpcyBzZWxlY3RlZC4KLSAgICAvLyAgIDQu
IElmIHRoZSBYUiBkZXZpY2UgaXMgbnVsbCwgcmVqZWN0IHByb21pc2Ugd2l0aCBudWxsLgotICAg
IC8vICAgNS4gRWxzZSBpZiB0aGUgWFIgZGV2aWNlJ3MgbGlzdCBvZiBzdXBwb3J0ZWQgbW9kZXMg
ZG9lcyBub3QgY29udGFpbiBtb2RlLCByZWplY3QgcHJvbWlzZSB3aXRoIGEgIk5vdFN1cHBvcnRl
ZEVycm9yIiBET01FeGNlcHRpb24uCi0gICAgLy8gICA2LiBFbHNlIElmIGltbWVyc2l2ZSBpcyB0
cnVlIGFuZCB0aGUgYWxnb3JpdGhtIGlzIG5vdCB0cmlnZ2VyZWQgYnkgdXNlciBhY3RpdmF0aW9u
LCByZWplY3QgcHJvbWlzZSB3aXRoIGEgIlNlY3VyaXR5RXJyb3IiIERPTUV4Y2VwdGlvbiBhbmQg
YWJvcnQgdGhlc2Ugc3RlcHMuCi0gICAgLy8gICA3LiBJZiBwcm9taXNlIHdhcyByZWplY3RlZCBh
bmQgaW1tZXJzaXZlIGlzIHRydWUsIHNldCBwZW5kaW5nIGltbWVyc2l2ZSBzZXNzaW9uIHRvIGZh
bHNlLgotICAgIC8vICAgOC4gSWYgcHJvbWlzZSB3YXMgcmVqZWN0ZWQsIGFib3J0IHRoZXNlIHN0
ZXBzLgotICAgIC8vICAgOS4gTGV0IHNlc3Npb24gYmUgYSBuZXcgWFJTZXNzaW9uIG9iamVjdC4K
LSAgICAvLyAgIDEwLiBJbml0aWFsaXplIHRoZSBzZXNzaW9uIHdpdGggc2Vzc2lvbiBhbmQgbW9k
ZS4KLSAgICAvLyAgIDExLiBJZiBpbW1lcnNpdmUgaXMgdHJ1ZSwgc2V0IHRoZSBhY3RpdmUgaW1t
ZXJzaXZlIHNlc3Npb24gdG8gc2Vzc2lvbiwgYW5kIHNldCBwZW5kaW5nIGltbWVyc2l2ZSBzZXNz
aW9uIHRvIGZhbHNlLgotICAgIC8vICAgMTIuIEVsc2UgYXBwZW5kIHNlc3Npb24gdG8gdGhlIGxp
c3Qgb2YgaW5saW5lIHNlc3Npb25zLgotICAgIC8vICAgMTMuIFJlc29sdmUgcHJvbWlzZSB3aXRo
IHNlc3Npb24uCisgICAgLy8gMi4gSWYgdGhlIHJlcXVlc3RpbmcgZG9jdW1lbnQgaXMgbm90IHJl
c3BvbnNpYmxlLCByZXR1cm4gZmFsc2UuCisgICAgaWYgKCZkb2N1bWVudCAhPSBnbG9iYWxPYmpl
Y3QuZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKKworc3RydWN0IFdlYlhSU3lzdGVtOjpSZXNvbHZlZFJlcXVlc3RlZEZlYXR1cmVzIHsK
KyAgICBGZWF0dXJlc0FycmF5IGdyYW50ZWQ7CisgICAgRmVhdHVyZXNBcnJheSBjb25zZW50UmVx
dWlyZWQ7CisgICAgRmVhdHVyZXNBcnJheSBjb25zZW50T3B0aW9uYWw7Cit9OworCisjZGVmaW5l
IFJFVFVSTl9GQUxTRV9PUl9DT05USU5VRShtdXN0UmV0dXJuKSB7IFwKKyAgICBpZiAobXVzdFJl
dHVybikge1wKKyAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisgICAgfSBcCisgICAgY29udGludWU7
IFwKK30KKworLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jcmVzb2x2
ZS10aGUtcmVxdWVzdGVkLWZlYXR1cmVzCitPcHRpb25hbDxXZWJYUlN5c3RlbTo6UmVzb2x2ZWRS
ZXF1ZXN0ZWRGZWF0dXJlcz4gV2ViWFJTeXN0ZW06OnJlc29sdmVSZXF1ZXN0ZWRGZWF0dXJlcyhY
UlNlc3Npb25Nb2RlIG1vZGUsIGNvbnN0IFhSU2Vzc2lvbkluaXQmIGluaXQsIFdlYWtQdHI8UGxh
dGZvcm1YUjo6RGV2aWNlPiYgZGV2aWNlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpIGNvbnN0Cit7CisgICAgLy8gMS4gTGV0IGNvbnNlbnRSZXF1aXJlZCBiZSBhbiBlbXB0eSBs
aXN0IG9mIERPTVN0cmluZy4KKyAgICAvLyAyLiBMZXQgY29uc2VudE9wdGlvbmFsIGJlIGFuIGVt
cHR5IGxpc3Qgb2YgRE9NU3RyaW5nLgorICAgIFJlc29sdmVkUmVxdWVzdGVkRmVhdHVyZXMgcmVz
b2x2ZWRGZWF0dXJlczsKKworICAgIC8vIDMuIExldCBkZXZpY2UgYmUgdGhlIHJlc3VsdCBvZiBv
YnRhaW5pbmcgdGhlIGN1cnJlbnQgZGV2aWNlIGZvciBtb2RlLCByZXF1aXJlZEZlYXR1cmVzLCBh
bmQgb3B0aW9uYWxGZWF0dXJlcy4KKyAgICAvLyA0LiBMZXQgZ3JhbnRlZCBiZSBhIGxpc3Qgb2Yg
RE9NU3RyaW5nIGluaXRpYWxpemVkIHRvIGRldmljZeKAmXMgbGlzdCBvZiBlbmFibGVkIGZlYXR1
cmVzIGZvciBtb2RlLgorICAgIGlmIChkZXZpY2UpCisgICAgICAgIHJlc29sdmVkRmVhdHVyZXMu
Z3JhbnRlZCA9IGRldmljZS0+ZW5hYmxlZEZlYXR1cmVzKG1vZGUpOworCisgICAgLy8gNS4gSWYg
ZGV2aWNlIGlzIG51bGwgb3IgZGV2aWNl4oCZcyBsaXN0IG9mIHN1cHBvcnRlZCBtb2RlcyBkb2Vz
IG5vdCBjb250YWluIG1vZGUsIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgIC8vICA1LjEg
UmV0dXJuIHRoZSB0dXBsZSAoY29uc2VudFJlcXVpcmVkLCBjb25zZW50T3B0aW9uYWwsIGdyYW50
ZWQpCisgICAgaWYgKCFkZXZpY2UgfHwgIWRldmljZS0+c3VwcG9ydHMobW9kZSkpCisgICAgICAg
IHJldHVybiByZXNvbHZlZEZlYXR1cmVzOworCisgICAgLy8gNi4gQWRkIGV2ZXJ5IGZlYXR1cmUg
ZGVzY3JpcHRvciBpbiB0aGUgZGVmYXVsdCBmZWF0dXJlcyB0YWJsZSBhc3NvY2lhdGVkCisgICAg
Ly8gICAgd2l0aCBtb2RlIHRvIHRoZSBpbmRpY2F0ZWQgZmVhdHVyZSBsaXN0IGlmIGl0IGlzIG5v
dCBhbHJlYWR5IHByZXNlbnQuCisgICAgLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5p
by93ZWJ4ci8jZGVmYXVsdC1mZWF0dXJlcworICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAg
IEpTRmVhdHVyZXNBcnJheSByZXF1aXJlZEZlYXR1cmVzV2l0aERlZmF1bHRGZWF0dXJlcyA9IGlu
aXQucmVxdWlyZWRGZWF0dXJlczsKKyAgICByZXF1aXJlZEZlYXR1cmVzV2l0aERlZmF1bHRGZWF0
dXJlcy5hcHBlbmQoY29udmVydEVudW1lcmF0aW9uVG9KUygqZ2xvYmFsT2JqZWN0LCBYUlJlZmVy
ZW5jZVNwYWNlVHlwZTo6Vmlld2VyKSk7CisgICAgaWYgKG1vZGUgPT0gWFJTZXNzaW9uTW9kZTo6
SW1tZXJzaXZlQXIgfHwgbW9kZSA9PSBYUlNlc3Npb25Nb2RlOjpJbW1lcnNpdmVWcikKKyAgICAg
ICAgcmVxdWlyZWRGZWF0dXJlc1dpdGhEZWZhdWx0RmVhdHVyZXMuYXBwZW5kKGNvbnZlcnRFbnVt
ZXJhdGlvblRvSlMoKmdsb2JhbE9iamVjdCwgWFJSZWZlcmVuY2VTcGFjZVR5cGU6OkxvY2FsKSk7
CisKKyAgICAvLyA3LiBGb3IgZWFjaCBmZWF0dXJlIGluIHJlcXVpcmVkRmVhdHVyZXN8b3B0aW9u
YWxGZWF0dXJlcyBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgLy8gOC4gRm9yIGVh
Y2ggZmVhdHVyZSBpbiBvcHRpb25hbEZlYXR1cmVzIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVw
czoKKyAgICAvLyBXZSdyZSBtZXJnaW5nIGJvdGggbG9vcHMgaW4gYSBzaW5nbGUgbGFtYmRhLiBU
aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgYSBmYWlsdXJlIG9uIGFueSByZXF1aXJlZCBmZWF0
dXJlcworICAgIC8vIGltcGxpZXMgY2FuY2VsbGluZyB0aGUgd2hvbGUgcHJvY2VzcyB3aGlsZSBm
YWlsdXJlcyBpbiBvcHRpb25hbCBmZWF0dXJlcyBhcmUganVzdCBza2lwcGVkLgorICAgIGVudW0g
Y2xhc3MgUGFyc2luZ01vZGUgeyBTdHJpY3QsIExvb3NlIH07CisgICAgYXV0byBwYXJzZUZlYXR1
cmVzID0gWyZkZXZpY2UsICZnbG9iYWxPYmplY3QsIG1vZGUsICZyZXNvbHZlZEZlYXR1cmVzXSAo
Y29uc3QgSlNGZWF0dXJlc0FycmF5JiBzZXNzaW9uRmVhdHVyZXMsIFBhcnNpbmdNb2RlIHBhcnNp
bmdNb2RlKSAtPiBib29sIHsKKyAgICAgICAgYm9vbCByZXR1cm5PbkZhaWx1cmUgPSBwYXJzaW5n
TW9kZSA9PSBQYXJzaW5nTW9kZTo6U3RyaWN0OworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHNl
c3Npb25GZWF0dXJlIDogc2Vzc2lvbkZlYXR1cmVzKSB7CisgICAgICAgICAgICAvLyAxLiBJZiB0
aGUgZmVhdHVyZSBpcyBudWxsLCBjb250aW51ZSB0byB0aGUgbmV4dCBlbnRyeS4KKyAgICAgICAg
ICAgIGlmIChzZXNzaW9uRmVhdHVyZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYgZmVhdHVyZSBpcyBub3QgYSB2YWxpZCBmZWF0dXJl
IGRlc2NyaXB0b3IsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwcworICAgICAgICAgICAgLy8g
ICAyLjEuIExldCBzIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyA/IFRvU3RyaW5nKGZlYXR1cmUp
LgorICAgICAgICAgICAgLy8gICAyLjIuIElmIHMgaXMgbm90IGEgdmFsaWQgZmVhdHVyZSBkZXNj
cmlwdG9yIG9yIGlzIHVuZGVmaW5lZCwgKHJldHVybiBudWxsfGNvbnRpbnVlIHRvIG5leHQgZW50
cnkpLgorICAgICAgICAgICAgLy8gICAyLjMuIFNldCBmZWF0dXJlIHRvIHMuCisgICAgICAgICAg
ICBhdXRvIGZlYXR1cmUgPSBwYXJzZUVudW1lcmF0aW9uPFhSUmVmZXJlbmNlU3BhY2VUeXBlPigq
Z2xvYmFsT2JqZWN0LCBzZXNzaW9uRmVhdHVyZSk7CisgICAgICAgICAgICBpZiAoIWZlYXR1cmUp
CisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBTFNFX09SX0NPTlRJTlVFKHJldHVybk9uRmFpbHVy
ZSk7CisKKyAgICAgICAgICAgIC8vIDMuIElmIGZlYXR1cmUgaXMgYWxyZWFkeSBpbiBncmFudGVk
LCBjb250aW51ZSB0byB0aGUgbmV4dCBlbnRyeS4KKyAgICAgICAgICAgIGlmIChyZXNvbHZlZEZl
YXR1cmVzLmdyYW50ZWQuY29udGFpbnMoZmVhdHVyZS52YWx1ZSgpKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gNC4gSWYgdGhlIHJlcXVlc3RpbmcgZG9jdW1l
bnTigJlzIG9yaWdpbiBpcyBub3QgYWxsb3dlZCB0byB1c2UgYW55IGZlYXR1cmUgcG9saWN5IHJl
cXVpcmVkIGJ5IGZlYXR1cmUKKyAgICAgICAgICAgIC8vICAgIGFzIGluZGljYXRlZCBieSB0aGUg
ZmVhdHVyZSByZXF1aXJlbWVudHMgdGFibGUsIChyZXR1cm4gbnVsbHxjb250aW51ZSB0byBuZXh0
IGVudHJ5KS4KKworICAgICAgICAgICAgLy8gNS4gSWYgc2Vzc2lvbuKAmXMgWFIgZGV2aWNlIGlz
IG5vdCBjYXBhYmxlIG9mIHN1cHBvcnRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGJ5
IGZlYXR1cmUgb3IgdGhlCisgICAgICAgICAgICAvLyAgICB1c2VyIGFnZW50IGhhcyBvdGhlcndp
c2UgZGV0ZXJtaW5lZCB0byByZWplY3QgdGhlIGZlYXR1cmUsIChyZXR1cm4gbnVsbHxjb250aW51
ZSB0byBuZXh0IGVudHJ5KS4KKyAgICAgICAgICAgIGlmICghZGV2aWNlLT5lbmFibGVkRmVhdHVy
ZXMobW9kZSkuY29udGFpbnMoZmVhdHVyZS52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fRkFMU0VfT1JfQ09OVElOVUUocmV0dXJuT25GYWlsdXJlKTsKKworICAgICAgICAgICAgLy8g
Ni4gSWYgdGhlIGZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGJ5IGZlYXR1cmUgcmVxdWlyZXMgZXhw
bGljaXQgY29uc2VudCwgYXBwZW5kIGl0IHRvIChjb25zZW50UmVxdWlyZWR8Y29uc2VudE9wdGlv
bmFsKS4KKyAgICAgICAgICAgIC8vIDcuIEVsc2UgYXBwZW5kIGZlYXR1cmUgdG8gZ3JhbnRlZC4K
KyAgICAgICAgICAgIHJlc29sdmVkRmVhdHVyZXMuZ3JhbnRlZC5hcHBlbmQoZmVhdHVyZS52YWx1
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgaWYg
KCFwYXJzZUZlYXR1cmVzKHJlcXVpcmVkRmVhdHVyZXNXaXRoRGVmYXVsdEZlYXR1cmVzLCBQYXJz
aW5nTW9kZTo6U3RyaWN0KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHBh
cnNlRmVhdHVyZXMoaW5pdC5vcHRpb25hbEZlYXR1cmVzLCBQYXJzaW5nTW9kZTo6TG9vc2UpOwor
ICAgIHJldHVybiByZXNvbHZlZEZlYXR1cmVzOworfQorCisvLyBodHRwczovL2ltbWVyc2l2ZS13
ZWIuZ2l0aHViLmlvL3dlYnhyLyNyZXF1ZXN0LXRoZS14ci1wZXJtaXNzaW9uCitib29sIFdlYlhS
U3lzdGVtOjppc1hSUGVybWlzc2lvbkdyYW50ZWQoWFJTZXNzaW9uTW9kZSBtb2RlLCBjb25zdCBY
UlNlc3Npb25Jbml0JiBpbml0LCBXZWFrUHRyPFBsYXRmb3JtWFI6OkRldmljZT4mIGRldmljZSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAoreworICAgIC8vIDEuIFNl
dCBzdGF0dXPigJlzIGdyYW50ZWQgdG8gYW4gZW1wdHkgRnJvemVuQXJyYXkuCisgICAgLy8gMi4g
TGV0IHJlcXVpcmVkRmVhdHVyZXMgYmUgZGVzY3JpcHRvcuKAmXMgcmVxdWlyZWRGZWF0dXJlcy4K
KyAgICAvLyAzLiBMZXQgb3B0aW9uYWxGZWF0dXJlcyBiZSBkZXNjcmlwdG9y4oCZcyBvcHRpb25h
bEZlYXR1cmVzLgorICAgIC8vIDQuIExldCBkZXZpY2UgYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5p
bmcgdGhlIGN1cnJlbnQgZGV2aWNlIGZvciBtb2RlLCByZXF1aXJlZEZlYXR1cmVzLCBhbmQgb3B0
aW9uYWxGZWF0dXJlcy4KKworICAgIC8vIDUuIExldCByZXN1bHQgYmUgdGhlIHJlc3VsdCBvZiBy
ZXNvbHZpbmcgdGhlIHJlcXVlc3RlZCBmZWF0dXJlcyBnaXZlbiByZXF1aXJlZEZlYXR1cmVzLG9w
dGlvbmFsRmVhdHVyZXMsIGFuZCBtb2RlLgorICAgIGF1dG8gcmVzb2x2ZWRGZWF0dXJlcyA9IHJl
c29sdmVSZXF1ZXN0ZWRGZWF0dXJlcyhtb2RlLCBpbml0LCBkZXZpY2UsIGdsb2JhbE9iamVjdCk7
CisKKyAgICAvLyA2LiBJZiByZXN1bHQgaXMgbnVsbCwgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6
CisgICAgLy8gIDYuMS4gU2V0IHN0YXR1c+KAmXMgc3RhdGUgdG8gImRlbmllZCIuCisgICAgLy8g
IDYuMi4gQWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgaWYgKCFyZXNvbHZlZEZlYXR1cmVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyA3LiBMZXQgKGNvbnNlbnRSZXF1aXJlZCwgY29u
c2VudE9wdGlvbmFsLCBncmFudGVkKSBiZSB0aGUgZmllbGRzIG9mIHJlc3VsdC4KKyAgICAvLyA4
LiBUaGUgdXNlciBhZ2VudCBNQVkgYXQgdGhpcyBwb2ludCBhc2sgdGhlIHVzZXLigJlzIHBlcm1p
c3Npb24gZm9yIHRoZSBjYWxsaW5nIGFsZ29yaXRobSB0byB1c2UgYW55IG9mIHRoZSBmZWF0dXJl
cworICAgIC8vICAgIGluIGNvbnNlbnRSZXF1aXJlZCBhbmQgY29uc2VudE9wdGlvbmFsLiBUaGUg
cmVzdWx0cyBvZiB0aGVzZSBwcm9tcHRzIHNob3VsZCBiZSBpbmNsdWRlZCB3aGVuIGRldGVybWlu
aW5nIGlmIHRoZXJlCisgICAgLy8gICAgaXMgYSBjbGVhciBzaWduYWwgb2YgdXNlciBpbnRlbnQg
Zm9yIGVuYWJsaW5nIHRoZXNlIGZlYXR1cmVzLgorICAgIC8vIDkuIEZvciBlYWNoIGZlYXR1cmUg
aW4gY29uc2VudFJlcXVpcmVkIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoKKyAgICAvLyAg
OS4xLiBUaGUgdXNlciBhZ2VudCBNQVkgYXQgdGhpcyBwb2ludCBhc2sgdGhlIHVzZXLigJlzIHBl
cm1pc3Npb24gZm9yIHRoZSBjYWxsaW5nIGFsZ29yaXRobSB0byB1c2UgZmVhdHVyZS4gVGhlIHJl
c3VsdHMKKyAgICAvLyAgICAgICBvZiB0aGVzZSBwcm9tcHRzIHNob3VsZCBiZSBpbmNsdWRlZCB3
aGVuIGRldGVybWluaW5nIGlmIHRoZXJlIGlzIGEgY2xlYXIgc2lnbmFsIG9mIHVzZXIgaW50ZW50
IHRvIGVuYWJsZSBmZWF0dXJlLgorICAgIC8vICA5LjIuIElmIGEgY2xlYXIgc2lnbmFsIG9mIHVz
ZXIgaW50ZW50IHRvIGVuYWJsZSBmZWF0dXJlIGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkLCBzZXQg
c3RhdHVz4oCZcyBzdGF0ZSB0byAiZGVuaWVkIiBhbmQKKyAgICAvLyAgICAgICBhYm9ydCB0aGVz
ZSBzdGVwcy4KKyAgICAvLyAgOS4zLiBJZiBmZWF0dXJlIGlzIG5vdCBpbiBncmFudGVkLCBhcHBl
bmQgZmVhdHVyZSB0byBncmFudGVkLgorICAgIC8vIDEwLiBGb3IgZWFjaCBmZWF0dXJlIGluIGNv
bnNlbnRPcHRpb25hbCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgLy8gIDEwLjEu
IFRoZSB1c2VyIGFnZW50IE1BWSBhdCB0aGlzIHBvaW50IGFzayB0aGUgdXNlcuKAmXMgcGVybWlz
c2lvbiBmb3IgdGhlIGNhbGxpbmcgYWxnb3JpdGhtIHRvIHVzZSBmZWF0dXJlLiBUaGUgcmVzdWx0
cworICAgIC8vICAgICAgICBvZiB0aGVzZSBwcm9tcHRzIHNob3VsZCBiZSBpbmNsdWRlZCB3aGVu
IGRldGVybWluaW5nIGlmIHRoZXJlIGlzIGEgY2xlYXIgc2lnbmFsIG9mIHVzZXIgaW50ZW50IHRv
IGVuYWJsZSBmZWF0dXJlLgorICAgIC8vICAxMC4yLiBJZiBhIGNsZWFyIHNpZ25hbCBvZiB1c2Vy
IGludGVudCB0byBlbmFibGUgZmVhdHVyZSBoYXMgbm90IGJlZW4gZGV0ZXJtaW5lZCwgY29udGlu
dWUgdG8gdGhlIG5leHQgZW50cnkuCisgICAgLy8gIDEwLjMuIElmIGZlYXR1cmUgaXMgbm90IGlu
IGdyYW50ZWQsIGFwcGVuZCBmZWF0dXJlIHRvIGdyYW50ZWQuCisgICAgLy8gMTEuIFNldCBzdGF0
dXPigJlzIGdyYW50ZWQgdG8gZ3JhbnRlZC4KKyAgICAvLyAxMi4gU2V0IGRldmljZeKAmXMgbGlz
dCBvZiBlbmFibGVkIGZlYXR1cmVzIGZvciBtb2RlIHRvIGdyYW50ZWQuCisgICAgLy8gMTMuIFNl
dCBzdGF0dXPigJlzIHN0YXRlIHRvICJncmFudGVkIi4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
CisvLyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLyNkb20teHJzeXN0ZW0t
cmVxdWVzdHNlc3Npb24KK3ZvaWQgV2ViWFJTeXN0ZW06OnJlcXVlc3RTZXNzaW9uKERvY3VtZW50
JiBkb2N1bWVudCwgWFJTZXNzaW9uTW9kZSBtb2RlLCBjb25zdCBYUlNlc3Npb25Jbml0JiBpbml0
LCBSZXF1ZXN0U2Vzc2lvblByb21pc2UmJiBwcm9taXNlKQoreworICAgIC8vIDEuIExldCBwcm9t
aXNlIGJlIGEgbmV3IFByb21pc2UuCisgICAgLy8gMi4gTGV0IGltbWVyc2l2ZSBiZSB0cnVlIGlm
IG1vZGUgaXMgYW4gaW1tZXJzaXZlIHNlc3Npb24gbW9kZSwgYW5kIGZhbHNlIG90aGVyd2lzZS4K
KyAgICAvLyAzLiBMZXQgZ2xvYmFsIG9iamVjdCBiZSB0aGUgcmVsZXZhbnQgR2xvYmFsIG9iamVj
dCBmb3IgdGhlIFhSU3lzdGVtIG9uIHdoaWNoIHRoaXMgbWV0aG9kIHdhcyBpbnZva2VkLgorICAg
IGJvb2wgaW1tZXJzaXZlID0gbW9kZSA9PSBYUlNlc3Npb25Nb2RlOjpJbW1lcnNpdmVBciB8fCBt
b2RlID09IFhSU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZVZyOworICAgIGF1dG8qIGdsb2JhbE9iamVj
dCA9IGRvY3VtZW50LmRvbVdpbmRvdygpOworICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworCisg
ICAgLy8gNC4gQ2hlY2sgd2hldGhlciB0aGUgc2Vzc2lvbiByZXF1ZXN0IGlzIGFsbG93ZWQgYXMg
Zm9sbG93czoKKyAgICBpZiAoaW1tZXJzaXZlKSB7CisgICAgICAgIGlmICghaW1tZXJzaXZlU2Vz
c2lvblJlcXVlc3RJc0FsbG93ZWRGb3JHbG9iYWxPYmplY3QoKmdsb2JhbE9iamVjdCwgZG9jdW1l
bnQpKSB7CisgICAgICAgICAgICBwcm9taXNlLnJlamVjdChFeGNlcHRpb24geyBTZWN1cml0eUVy
cm9yIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtX3Bl
bmRpbmdJbW1lcnNpdmVTZXNzaW9uIHx8IG1fYWN0aXZlSW1tZXJzaXZlU2Vzc2lvbikgeworICAg
ICAgICAgICAgcHJvbWlzZS5yZWplY3QoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9wZW5kaW5nSW1tZXJz
aXZlU2Vzc2lvbiA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFpbmxpbmVTZXNz
aW9uUmVxdWVzdElzQWxsb3dlZEZvckdsb2JhbE9iamVjdCgqZ2xvYmFsT2JqZWN0LCBkb2N1bWVu
dCwgaW5pdCkpIHsKKyAgICAgICAgICAgIHByb21pc2UucmVqZWN0KEV4Y2VwdGlvbiB7IFNlY3Vy
aXR5RXJyb3IgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyA1LiBSdW4gdGhlIGZvbGxvd2luZyBzdGVwcyBpbiBwYXJhbGxlbDoKKyAgICBkb2N1bWVu
dC5wb3N0VGFzayhbdGhpcywgaW1tZXJzaXZlLCBpbml0LCBtb2RlLCBwcm9taXNlID0gV1RGTW92
ZShwcm9taXNlKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgewor
ICAgICAgICAvLyA1LjEgTGV0IHJlcXVpcmVkRmVhdHVyZXMgYmUgb3B0aW9ucycgcmVxdWlyZWRG
ZWF0dXJlcy4KKyAgICAgICAgLy8gNS4yIExldCBvcHRpb25hbEZlYXR1cmVzIGJlIG9wdGlvbnMn
IG9wdGlvbmFsRmVhdHVyZXMuCisgICAgICAgIC8vIDUuMyBTZXQgZGV2aWNlIHRvIHRoZSByZXN1
bHQgb2Ygb2J0YWluaW5nIHRoZSBjdXJyZW50IGRldmljZSBmb3IgbW9kZSwgcmVxdWlyZWRGZWF0
dXJlcywgYW5kIG9wdGlvbmFsRmVhdHVyZXMuCisgICAgICAgIFBsYXRmb3JtWFI6OkRldmljZSog
ZGV2aWNlID0gb2J0YWluQ3VycmVudERldmljZShtb2RlLCBpbml0LnJlcXVpcmVkRmVhdHVyZXMs
IGluaXQub3B0aW9uYWxGZWF0dXJlcyk7CisKKyAgICAgICAgLy8gNS40IFF1ZXVlIGEgdGFzayB0
byBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgICAgIHF1ZXVlVGFza0tlZXBpbmdP
YmplY3RBbGl2ZSgqdGhpcywgVGFza1NvdXJjZTo6V2ViWFIsIFt0aGlzLCBjb250ZXh0ID0gbWFr
ZVJlZihjb250ZXh0KSwgZGV2aWNlID0gbWFrZVdlYWtQdHIoZGV2aWNlKSwgaW1tZXJzaXZlLCBp
bml0LCBtb2RlLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICAvLyA1LjQuMSBJZiBkZXZpY2UgaXMgbnVsbCBvciBkZXZpY2UncyBsaXN0IG9mIHN1
cHBvcnRlZCBtb2RlcyBkb2VzIG5vdCBjb250YWluIG1vZGUsIHJ1biB0aGUgZm9sbG93aW5nIHN0
ZXBzOgorICAgICAgICAgICAgaWYgKCFkZXZpY2UgfHwgIWRldmljZS0+c3VwcG9ydHMobW9kZSkp
IHsKKyAgICAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChFeGNlcHRpb24geyBOb3RTdXBwb3J0
ZWRFcnJvciB9KTsKKyAgICAgICAgICAgICAgICBtX3BlbmRpbmdJbW1lcnNpdmVTZXNzaW9uID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBXZWJLaXQgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIFBlcm1pc3Npb25z
IEFQSS4gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3Blcm1pc3Npb25zLworICAgICAgICAgICAgLy8g
SG93ZXZlciB3ZSBkbyBpbXBsZW1lbnQgaGVyZSB0aGUgcGVybWlzc2lvbiByZXF1ZXN0IGFsZ29y
aXRobSB3aXRob3V0IHRoZQorICAgICAgICAgICAgLy8gUGVybWlzc2lvbnMgQVBJIGJpdHMgYXMg
aXQgaGFuZGxlcywgYW1vbmcgb3RoZXJzLCB0aGUgc2Vzc2lvbiBmZWF0dXJlcyBwYXJzaW5nLiBX
ZSBhbHNvCisgICAgICAgICAgICAvLyBkbyBpdCBoZXJlIGJlZm9yZSBjcmVhdGluZyB0aGUgc2Vz
c2lvbiBhcyB0aGVyZSBpcyBubyBuZWVkIHRvIGRvIGl0IG9uIGFkdmFuY2UuCisgICAgICAgICAg
ICAvLyBUT0RPOiB3ZSBqdXN0IHBlcmZvcm0gYmFzaWMgY2hlY2tzIHdpdGhvdXQgYXNraW5nIGFu
eSBwZXJtaXNzaW9uIHRvIHRoZSB1c2VyIHNvIGZhci4gTWF5YmUgd2Ugc2hvdWxkIGltcGxlbWVu
dAorICAgICAgICAgICAgLy8gYSBtZWNoYW5pc20gc2ltaWxhciB0byB3aGF0IG90aGVycyBkbyBp
bnZvbHZpbmcgcGFzc2luZyBhIG1lc3NhZ2UgdG8gdGhlIFVJIHByb2Nlc3MuCisKKyAgICAgICAg
ICAgIC8vIDUuNC40IExldCBkZXNjcmlwdG9yIGJlIGFuIFhSUGVybWlzc2lvbkRlc2NyaXB0b3Ig
aW5pdGlhbGl6ZWQgd2l0aCBzZXNzaW9uLCByZXF1aXJlZEZlYXR1cmVzLCBhbmQgb3B0aW9uYWxG
ZWF0dXJlcworICAgICAgICAgICAgLy8gNS40LjUgTGV0IHN0YXR1cyBiZSBhbiBYUlBlcm1pc3Np
b25TdGF0dXMsIGluaXRpYWxseSBudWxsCisgICAgICAgICAgICAvLyA1LjQuNiBSZXF1ZXN0IHRo
ZSB4ciBwZXJtaXNzaW9uIHdpdGggZGVzY3JpcHRvciBhbmQgc3RhdHVzLgorICAgICAgICAgICAg
Ly8gNS40LjcgSWYgc3RhdHVzJyBzdGF0ZSBpcyAiZGVuaWVkIiBydW4gdGhlIGZvbGxvd2luZyBz
dGVwczoKKyAgICAgICAgICAgIGlmICghaXNYUlBlcm1pc3Npb25HcmFudGVkKG1vZGUsIGluaXQs
IGRldmljZSwgY29udGV4dC0+ZXhlY1N0YXRlKCkpKSB7CisgICAgICAgICAgICAgICAgcHJvbWlz
ZS5yZWplY3QoRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfSk7CisgICAgICAgICAgICAg
ICAgbV9wZW5kaW5nSW1tZXJzaXZlU2Vzc2lvbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gNS40LjIgTGV0IHNlc3Npb24g
YmUgYSBuZXcgWFJTZXNzaW9uIG9iamVjdC4KKyAgICAgICAgICAgIC8vIDUuNC4zIEluaXRpYWxp
emUgdGhlIHNlc3Npb24gd2l0aCBzZXNzaW9uLCBtb2RlLCBhbmQgZGV2aWNlLgorICAgICAgICAg
ICAgYXV0byBzZXNzaW9uID0gV2ViWFJTZXNzaW9uOjpjcmVhdGUoY29udGV4dCwgKnRoaXMsIG1v
ZGUsIFdURk1vdmUoZGV2aWNlKSk7CisKKyAgICAgICAgICAgIC8vIDUuNC44IFBvdGVudGlhbGx5
IHNldCB0aGUgYWN0aXZlIGltbWVyc2l2ZSBzZXNzaW9uIGFzIGZvbGxvd3M6CisgICAgICAgICAg
ICBpZiAoaW1tZXJzaXZlKSB7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVJbW1lcnNpdmVTZXNz
aW9uID0gc2Vzc2lvbi5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAgbV9wZW5kaW5nSW1tZXJz
aXZlU2Vzc2lvbiA9IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
bV9saXN0T2ZJbmxpbmVTZXNzaW9ucy5hcHBlbmQoc2Vzc2lvbi5jb3B5UmVmKCkpOworCisgICAg
ICAgICAgICAvLyA1LjQuOSBSZXNvbHZlIHByb21pc2Ugd2l0aCBzZXNzaW9uLgorICAgICAgICAg
ICAgcHJvbWlzZS5yZXNvbHZlKHNlc3Npb24pOworCisgICAgICAgICAgICAvLyBUT0RPOgorICAg
ICAgICAgICAgLy8gNS40LjEwIFF1ZXVlIGEgdGFzayB0byBwZXJmb3JtIHRoZSBmb2xsb3dpbmcg
c3RlcHM6IE5PVEU6IFRoZXNlIHN0ZXBzIGVuc3VyZSB0aGF0IGluaXRpYWwgaW5wdXRzb3VyY2Vz
Y2hhbmdlCisgICAgICAgICAgICAvLyBldmVudHMgb2NjdXIgYWZ0ZXIgdGhlIGluaXRpYWwgc2Vz
c2lvbiBpcyByZXNvbHZlZC4KKyAgICAgICAgICAgIC8vICAgICAxLiBTZXQgc2Vzc2lvbidzIHBy
b21pc2UgcmVzb2x2ZWQgZmxhZyB0byB0cnVlLgorICAgICAgICAgICAgLy8gICAgIDIuIExldCBz
b3VyY2VzIGJlIGFueSBleGlzdGluZyBpbnB1dCBzb3VyY2VzIGF0dGFjaGVkIHRvIHNlc3Npb24u
CisgICAgICAgICAgICAvLyAgICAgMy4gSWYgc291cmNlcyBpcyBub24tZW1wdHksIHBlcmZvcm0g
dGhlIGZvbGxvd2luZyBzdGVwczoKKyAgICAgICAgICAgIC8vICAgICAgICAxLiBTZXQgc2Vzc2lv
bidzIGxpc3Qgb2YgYWN0aXZlIFhSIGlucHV0IHNvdXJjZXMgdG8gc291cmNlcy4KKyAgICAgICAg
ICAgIC8vICAgICAgICAyLiBGaXJlIGFuIFhSSW5wdXRTb3VyY2VzQ2hhbmdlRXZlbnQgbmFtZWQg
aW5wdXRzb3VyY2VzY2hhbmdlIG9uIHNlc3Npb24gd2l0aCBhZGRlZCBzZXQgdG8gc291cmNlcy4K
KworICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAogY29uc3QgY2hhciogV2ViWFJTeXN0ZW06OmFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdApAQCAtMTcxLDcgKzQyOSw3IEBAIHZvaWQgV2ViWFJT
eXN0ZW06OnJlZ2lzdGVyU2ltdWxhdGVkWFJEZXZpY2VGb3JUZXN0aW5nKGNvbnN0IFBsYXRmb3Jt
WFI6OkRldmljZSYKIHsKICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViWFJFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Rlc3RpbmdN
b2RlID0gdHJ1ZTsKKyAgICBtX3Rlc3RpbmdEZXZpY2VzKys7CiAgICAgaWYgKGRldmljZS5zdXBw
b3J0cyhQbGF0Zm9ybVhSOjpTZXNzaW9uTW9kZTo6SW1tZXJzaXZlVnIpIHx8IGRldmljZS5zdXBw
b3J0cyhQbGF0Zm9ybVhSOjpTZXNzaW9uTW9kZTo6SW1tZXJzaXZlQXIpKSB7CiAgICAgICAgIG1f
aW1tZXJzaXZlRGV2aWNlcy5hcHBlbmQobWFrZVdlYWtQdHIoZGV2aWNlKSk7CiAgICAgICAgIG1f
YWN0aXZlSW1tZXJzaXZlRGV2aWNlID0gbV9pbW1lcnNpdmVEZXZpY2VzLmxhc3QoKTsKQEAgLTE4
NSwxNCArNDQzLDI0IEBAIHZvaWQgV2ViWFJTeXN0ZW06OnVucmVnaXN0ZXJTaW11bGF0ZWRYUkRl
dmljZUZvclRlc3RpbmcoUGxhdGZvcm1YUjo6RGV2aWNlKiBkZXZpCiAgICAgaWYgKCFSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYlhSRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAgICAgQVNTRVJUKG1faW1tZXJzaXZlRGV2aWNlcy5jb250YWlucyhkZXZpY2Up
KTsKKyAgICBBU1NFUlQobV90ZXN0aW5nRGV2aWNlcyk7CiAgICAgbV9pbW1lcnNpdmVEZXZpY2Vz
LnJlbW92ZUZpcnN0KGRldmljZSk7CiAgICAgaWYgKG1fYWN0aXZlSW1tZXJzaXZlRGV2aWNlID09
IGRldmljZSkKICAgICAgICAgbV9hY3RpdmVJbW1lcnNpdmVEZXZpY2UgPSBudWxscHRyOwogICAg
IGlmIChtX2lubGluZVhSRGV2aWNlID09IGRldmljZSkKICAgICAgICAgbV9pbmxpbmVYUkRldmlj
ZSA9IG1ha2VXZWFrUHRyKG1fZGVmYXVsdElubGluZURldmljZSk7Ci0gICAgbV90ZXN0aW5nTW9k
ZSA9IGZhbHNlOworICAgIG1fdGVzdGluZ0RldmljZXMtLTsKIH0KIAordm9pZCBXZWJYUlN5c3Rl
bTo6c2Vzc2lvbkVuZGVkKGNvbnN0IFdlYlhSU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAgICBpZiAo
bV9hY3RpdmVJbW1lcnNpdmVTZXNzaW9uID09IHNlc3Npb24pCisgICAgICAgIG1fYWN0aXZlSW1t
ZXJzaXZlU2Vzc2lvbiA9IG51bGxwdHI7CisKKyAgICBtX2xpc3RPZklubGluZVNlc3Npb25zLnJl
bW92ZUZpcnN0TWF0Y2hpbmcoW3Nlc3Npb25dKGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJu
IGl0ZW0ucHRyKCkgPT0gc2Vzc2lvbjsKKyAgICB9KTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lz
dGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lzdGVtLmgKaW5kZXgg
MmU5Y2U4NDY5YTc1OTQ4N2I4MjY1NjYwOWE3OTI2NDQwZWI3MWJhYi4uYjc4OGNmOGYzYWRmODA1
M2IzNGE0NzRiYzNkOWExMDIzMTlkNjBkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
eHIvV2ViWFJTeXN0ZW0uaApAQCAtMzMsMTMgKzMzLDIwIEBACiAjaW5jbHVkZSAiSlNET01Qcm9t
aXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCiAjaW5j
bHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2luY2x1ZGUgIlhSUmVmZXJlbmNl
U3BhY2VUeXBlLmgiCiAjaW5jbHVkZSAiWFJTZXNzaW9uTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKK25hbWVzcGFjZSBKU0Mgewor
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
RE9NV2luZG93OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFdlYlhSU2Vz
c2lvbjsKIHN0cnVjdCBYUlNlc3Npb25Jbml0OwpAQCAtNTcsMTIgKzY0LDE0IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBSZWZDb3VudGVkPFdlYlhSU3lzdGVtPjo6ZGVyZWY7CiAKICAgICB2b2lkIGlz
U2Vzc2lvblN1cHBvcnRlZChYUlNlc3Npb25Nb2RlLCBJc1Nlc3Npb25TdXBwb3J0ZWRQcm9taXNl
JiYpOwotICAgIHZvaWQgcmVxdWVzdFNlc3Npb24oWFJTZXNzaW9uTW9kZSwgY29uc3QgWFJTZXNz
aW9uSW5pdCYsIFJlcXVlc3RTZXNzaW9uUHJvbWlzZSYmKTsKKyAgICB2b2lkIHJlcXVlc3RTZXNz
aW9uKERvY3VtZW50JiwgWFJTZXNzaW9uTW9kZSwgY29uc3QgWFJTZXNzaW9uSW5pdCYsIFJlcXVl
c3RTZXNzaW9uUHJvbWlzZSYmKTsKIAogICAgIC8vIFRoaXMgaXMgYWxzbyBuZWVkZWQgYnkgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFrZVhSQ29tcGF0aWJsZSgpIGFuZCBIVE1MQ2FudmFz
RWxlbWVudDo6Y3JlYXRlQ29udGV4dFdlYkdMKCkuCiAgICAgdm9pZCBlbnN1cmVJbW1lcnNpdmVY
UkRldmljZUlzU2VsZWN0ZWQoKTsKICAgICBib29sIGhhc0FjdGl2ZUltbWVyc2l2ZVhSRGV2aWNl
KCkgeyByZXR1cm4gISFtX2FjdGl2ZUltbWVyc2l2ZURldmljZTsgfQogCisgICAgdm9pZCBzZXNz
aW9uRW5kZWQoY29uc3QgV2ViWFJTZXNzaW9uKik7CisKICAgICAvLyBGb3IgdGVzdGluZyBwdXJw
b3VzZXMgb25seS4KICAgICB2b2lkIHJlZ2lzdGVyU2ltdWxhdGVkWFJEZXZpY2VGb3JUZXN0aW5n
KGNvbnN0IFBsYXRmb3JtWFI6OkRldmljZSYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNpbXVsYXRl
ZFhSRGV2aWNlRm9yVGVzdGluZyhQbGF0Zm9ybVhSOjpEZXZpY2UqKTsKQEAgLTgxLDIwICs5MCwz
MCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIFdlYlhSU3lzdGVtKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmKTsKIAorICAgIHVzaW5nIEZlYXR1cmVzQXJyYXkgPSBQbGF0Zm9ybVhSOjpEZXZp
Y2U6Okxpc3RPZkVuYWJsZWRGZWF0dXJlczsKKyAgICB1c2luZyBKU0ZlYXR1cmVzQXJyYXkgPSBW
ZWN0b3I8SlNDOjpKU1ZhbHVlPjsKKyAgICBQbGF0Zm9ybVhSOjpEZXZpY2UqIG9idGFpbkN1cnJl
bnREZXZpY2UoWFJTZXNzaW9uTW9kZSwgY29uc3QgSlNGZWF0dXJlc0FycmF5JiByZXF1aXJlZEZl
YXR1cmVzLCBjb25zdCBKU0ZlYXR1cmVzQXJyYXkmIG9wdGlvbmFsRmVhdHVyZXMpOworCisgICAg
Ym9vbCBpbW1lcnNpdmVTZXNzaW9uUmVxdWVzdElzQWxsb3dlZEZvckdsb2JhbE9iamVjdChET01X
aW5kb3cmLCBEb2N1bWVudCYpIGNvbnN0OworICAgIGJvb2wgaW5saW5lU2Vzc2lvblJlcXVlc3RJ
c0FsbG93ZWRGb3JHbG9iYWxPYmplY3QoRE9NV2luZG93JiwgRG9jdW1lbnQmLCBjb25zdCBYUlNl
c3Npb25Jbml0JikgY29uc3Q7CisKKyAgICBzdHJ1Y3QgUmVzb2x2ZWRSZXF1ZXN0ZWRGZWF0dXJl
czsKKyAgICBPcHRpb25hbDxSZXNvbHZlZFJlcXVlc3RlZEZlYXR1cmVzPiByZXNvbHZlUmVxdWVz
dGVkRmVhdHVyZXMoWFJTZXNzaW9uTW9kZSwgY29uc3QgWFJTZXNzaW9uSW5pdCYsIFdlYWtQdHI8
UGxhdGZvcm1YUjo6RGV2aWNlPiYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKSBjb25zdDsKKyAgICBi
b29sIGlzWFJQZXJtaXNzaW9uR3JhbnRlZChYUlNlc3Npb25Nb2RlLCBjb25zdCBYUlNlc3Npb25J
bml0JiwgV2Vha1B0cjxQbGF0Zm9ybVhSOjpEZXZpY2U+JiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
IGNvbnN0OworCiAgICAgLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8j
ZGVmYXVsdC1pbmxpbmUteHItZGV2aWNlCiAgICAgY2xhc3MgRHVtbXlJbmxpbmVEZXZpY2UgZmlu
YWwgOiBwdWJsaWMgUGxhdGZvcm1YUjo6RGV2aWNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIER1
bW15SW5saW5lRGV2aWNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9zdXBwb3J0ZWRNb2Rl
cy5hcHBlbmQoWFJTZXNzaW9uTW9kZTo6SW5saW5lKTsKLSAgICAgICAgfQorICAgICAgICBEdW1t
eUlubGluZURldmljZSgpOwogICAgIH07CiAgICAgRHVtbXlJbmxpbmVEZXZpY2UgbV9kZWZhdWx0
SW5saW5lRGV2aWNlOwogCiAgICAgYm9vbCBtX2ltbWVyc2l2ZVhSRGV2aWNlc0hhdmVCZWVuRW51
bWVyYXRlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Rlc3RpbmdNb2RlIHsgZmFsc2UgfTsKKyAg
ICB1aW50IG1fdGVzdGluZ0RldmljZXMgeyAwIH07CiAKLSAgICBXZWFrUHRyPFdlYlhSU2Vzc2lv
bj4gbV9hY3RpdmVJbW1lcnNpdmVTZXNzaW9uOworICAgIGJvb2wgbV9wZW5kaW5nSW1tZXJzaXZl
U2Vzc2lvbiB7IGZhbHNlIH07CisgICAgUmVmUHRyPFdlYlhSU2Vzc2lvbj4gbV9hY3RpdmVJbW1l
cnNpdmVTZXNzaW9uOworICAgIFZlY3RvcjxSZWY8V2ViWFJTZXNzaW9uPj4gbV9saXN0T2ZJbmxp
bmVTZXNzaW9uczsKIAogICAgIFdlYWtQdHI8UGxhdGZvcm1YUjo6RGV2aWNlPiBtX2FjdGl2ZUlt
bWVyc2l2ZURldmljZTsKICAgICBWZWN0b3I8V2Vha1B0cjxQbGF0Zm9ybVhSOjpEZXZpY2U+PiBt
X2ltbWVyc2l2ZURldmljZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnhyL1dlYlhSU3lzdGVtLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJT
eXN0ZW0uaWRsCmluZGV4IGNhZDI3ZTMyN2Q2MzM1YTNhNzA3NmNmNjdjZTllNGMzZjA3YTVkN2Eu
LjJjN2MwMDgzMDczNGY5OGNiMmJmYTY2MTM3ZThlODM4MjhiOTRmZTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uaWRsCkBAIC0zMyw3ICszMyw3IEBACiBd
IGludGVyZmFjZSBXZWJYUlN5c3RlbSA6IEV2ZW50VGFyZ2V0IHsKICAgICAvLyBNZXRob2RzCiAg
ICAgUHJvbWlzZTx2b2lkPiBpc1Nlc3Npb25TdXBwb3J0ZWQoWFJTZXNzaW9uTW9kZSBtb2RlKTsK
LSAgICBbTmV3T2JqZWN0XSBQcm9taXNlPFdlYlhSU2Vzc2lvbj4gcmVxdWVzdFNlc3Npb24oWFJT
ZXNzaW9uTW9kZSBtb2RlLCBvcHRpb25hbCBYUlNlc3Npb25Jbml0IG9wdGlvbnMpOworICAgIFtO
ZXdPYmplY3QsIENhbGxXaXRoPURvY3VtZW50XSBQcm9taXNlPFdlYlhSU2Vzc2lvbj4gcmVxdWVz
dFNlc3Npb24oWFJTZXNzaW9uTW9kZSBtb2RlLCBvcHRpb25hbCBYUlNlc3Npb25Jbml0IG9wdGlv
bnMpOwogCiAgICAgLy8gRXZlbnRzCiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmRldmlj
ZWNoYW5nZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UYXNrU291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vVGFza1NvdXJjZS5oCmluZGV4IDg1NDhlZWUwNDc1ZWVjMGYyNjZk
Zjc3OGU2MGRjODU0MGM0ZDA5YjMuLjJmNzk0YTFjYmE1ZjE5OGVmNjgyMDMzNTYxZTlhOTVhODcx
OGNmNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UYXNrU291cmNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1Rhc2tTb3VyY2UuaApAQCAtMzksNiArMzksNyBAQCBlbnVtIGNs
YXNzIFRhc2tTb3VyY2UgOiB1aW50OF90IHsKICAgICBQb3N0ZWRNZXNzYWdlUXVldWUsCiAgICAg
VXNlckludGVyYWN0aW9uLAogICAgIFdlYkdMLAorICAgIFdlYlhSLAogCiAgICAgLy8gSW50ZXJu
YWwgdG8gV2ViQ29yZQogICAgIEludGVybmFsQXN5bmNUYXNrLCAvLyBTYWZlIHRvIHJlLW9yZGVy
IG9yIGRlbGF5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZv
cm1YUi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5oCmluZGV4IGUw
MmYwOWU3MWUzMzBjMzY3ZjE3OWM5MmMyYzRlYzEwOTMxODg5ZDAuLjBiMDQxM2JjYjU4N2I5ZjE0
YWIzNDBjZGE0ZTQ5ZTliMDZlOTRmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3hyL1BsYXRmb3JtWFIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0
Zm9ybVhSLmgKQEAgLTE5LDEyICsxOSwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxt
ZW1vcnk+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFBsYXRmb3JtWFIgewogCi1l
bnVtIGNsYXNzIFNlc3Npb25Nb2RlIHsKK2VudW0gY2xhc3MgU2Vzc2lvbk1vZGUgOiB1aW50OF90
IHsKICAgICBJbmxpbmUsCiAgICAgSW1tZXJzaXZlVnIsCiAgICAgSW1tZXJzaXZlQXIsCkBAIC00
OCwxOCArNDksMTkgQEAgcHVibGljOgogICAgIERldmljZSgpOwogICAgIERldmljZUlkIGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9pZDsgfQogCi0gICAgdXNpbmcgTGlzdE9mU3VwcG9ydGVkTW9kZXMg
PSBWZWN0b3I8U2Vzc2lvbk1vZGU+OwogICAgIHVzaW5nIExpc3RPZkVuYWJsZWRGZWF0dXJlcyA9
IFZlY3RvcjxSZWZlcmVuY2VTcGFjZVR5cGU+OwotCi0gICAgYm9vbCBzdXBwb3J0cyhTZXNzaW9u
TW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX3N1cHBvcnRlZE1vZGVzLmNvbnRhaW5zKG1vZGUp
OyB9Ci0gICAgdm9pZCBzZXRTdXBwb3J0ZWRNb2Rlcyhjb25zdCBMaXN0T2ZTdXBwb3J0ZWRNb2Rl
cyYgbW9kZXMpIHsgbV9zdXBwb3J0ZWRNb2RlcyA9IG1vZGVzOyB9Ci0gICAgdm9pZCBzZXRFbmFi
bGVkRmVhdHVyZXMoY29uc3QgTGlzdE9mRW5hYmxlZEZlYXR1cmVzJiBmZWF0dXJlcykgeyBtX2Vu
YWJsZWRGZWF0dXJlcyA9IGZlYXR1cmVzOyB9CisgICAgYm9vbCBzdXBwb3J0cyhTZXNzaW9uTW9k
ZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX2VuYWJsZWRGZWF0dXJlc01hcC5jb250YWlucyhtb2Rl
KTsgfQorICAgIHZvaWQgc2V0RW5hYmxlZEZlYXR1cmVzKFNlc3Npb25Nb2RlIG1vZGUsIGNvbnN0
IExpc3RPZkVuYWJsZWRGZWF0dXJlcyYgZmVhdHVyZXMpIHsgbV9lbmFibGVkRmVhdHVyZXNNYXAu
c2V0KG1vZGUsIGZlYXR1cmVzKTsgfQorICAgIExpc3RPZkVuYWJsZWRGZWF0dXJlcyBlbmFibGVk
RmVhdHVyZXMoU2Vzc2lvbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkRmVhdHVy
ZXNNYXAuZ2V0KG1vZGUpOyB9CiAKICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERl
dmljZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faWQgPT0gb3RoZXIubV9pZDsgfQogCiBwcm90
ZWN0ZWQ6Ci0gICAgTGlzdE9mU3VwcG9ydGVkTW9kZXMgbV9zdXBwb3J0ZWRNb2RlczsKLSAgICBM
aXN0T2ZFbmFibGVkRmVhdHVyZXMgbV9lbmFibGVkRmVhdHVyZXM7CisgICAgLy8gaHR0cHM6Ly9p
bW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jeHItZGV2aWNlLWNvbmNlcHQKKyAgICAvLyBF
YWNoIFhSIGRldmljZSBoYXMgYSBsaXN0IG9mIGVuYWJsZWQgZmVhdHVyZXMgZm9yIGVhY2ggWFJT
ZXNzaW9uTW9kZSBpbiBpdHMgbGlzdCBvZiBzdXBwb3J0ZWQgbW9kZXMsCisgICAgLy8gd2hpY2gg
aXMgYSBsaXN0IG9mIGZlYXR1cmUgZGVzY3JpcHRvcnMgd2hpY2ggTVVTVCBiZSBpbml0aWFsbHkg
YW4gZW1wdHkgbGlzdC4KKyAgICB1c2luZyBFbmFibGVkRmVhdHVyZXNQZXJNb2RlTWFwID0gV1RG
OjpIYXNoTWFwPFNlc3Npb25Nb2RlLCBMaXN0T2ZFbmFibGVkRmVhdHVyZXMsIFdURjo6SW50SGFz
aDxTZXNzaW9uTW9kZT4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8U2Vzc2lvbk1vZGU+PjsK
KyAgICBFbmFibGVkRmVhdHVyZXNQZXJNb2RlTWFwIG1fZW5hYmxlZEZlYXR1cmVzTWFwOwogCiBw
cml2YXRlOgogICAgIERldmljZUlkIG1faWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS94ci9vcGVueHIvUGxhdGZvcm1YUi5jcHAKaW5kZXggYTBhODVkMjExM2Q3MWJlMjMyYWU1M2Zk
N2UzZDk1ZmE3ZDczODE4Mi4uNGE2NDcwNTBmOTdlODYzZTU2ZjI1OTI4YjU1YWQ5ZjYyOWEyYThj
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3Jt
WFIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhS
LmNwcApAQCAtMjQsNiArMjQsNyBAQAogCiAjaWYgVVNFX09QRU5YUgogI2luY2x1ZGUgPG9wZW54
ci9vcGVueHIuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KICNlbmRpZiAvLyBVU0VfT1BFTlhSCkBAIC02Nyw3ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICB+SW1wbCgpOwogCiAjaWYgVVNFX09QRU5YUgotICAgIHZvaWQgY29sbGVjdFN1cHBvcnRlZFNl
c3Npb25Nb2RlcyhEZXZpY2UmLCBYclN5c3RlbUlkKTsKKyAgICBPcHRpb25hbDxWZWN0b3I8U2Vz
c2lvbk1vZGU+PiBjb2xsZWN0U3VwcG9ydGVkU2Vzc2lvbk1vZGVzKERldmljZSYsIFhyU3lzdGVt
SWQpOwogICAgIFhySW5zdGFuY2UgbV9pbnN0YW5jZSB7IFhSX05VTExfSEFORExFIH07CiAjZW5k
aWYgLy8gVVNFX09QRU5YUgogfTsKQEAgLTE1MCwxMyArMTUxLDEzIEBAIEluc3RhbmNlOjpJbXBs
Ojp+SW1wbCgpCiAKICNpZiBVU0VfT1BFTlhSCiAKLXZvaWQgSW5zdGFuY2U6OkltcGw6OmNvbGxl
Y3RTdXBwb3J0ZWRTZXNzaW9uTW9kZXMoRGV2aWNlJiBkZXZpY2UsIFhyU3lzdGVtSWQgc3lzdGVt
SWQpCitPcHRpb25hbDxWZWN0b3I8U2Vzc2lvbk1vZGU+PiBJbnN0YW5jZTo6SW1wbDo6Y29sbGVj
dFN1cHBvcnRlZFNlc3Npb25Nb2RlcyhEZXZpY2UmIGRldmljZSwgWHJTeXN0ZW1JZCBzeXN0ZW1J
ZCkKIHsKICAgICB1aW50MzJfdCB2aWV3Q29uZmlndXJhdGlvbkNvdW50OwogICAgIFhyUmVzdWx0
IHJlc3VsdCA9IHhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRpb25zKG1faW5zdGFuY2UsIHN5c3Rl
bUlkLCAwLCAmdmlld0NvbmZpZ3VyYXRpb25Db3VudCwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3Vs
dCAhPSBYUl9TVUNDRVNTKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygieHJFbnVtZXJhdGVWaWV3
Q29uZmlndXJhdGlvbnMoKTogZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgbV9p
bnN0YW5jZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICBYclZpZXdDb25maWd1cmF0aW9uVHlwZSB2aWV3
Q29uZmlndXJhdGlvbnNbdmlld0NvbmZpZ3VyYXRpb25Db3VudF07CkBAIC0xNjQsMjMgKzE2NSwy
MyBAQCB2b2lkIEluc3RhbmNlOjpJbXBsOjpjb2xsZWN0U3VwcG9ydGVkU2Vzc2lvbk1vZGVzKERl
dmljZSYgZGV2aWNlLCBYclN5c3RlbUlkIHN5cwogICAgIGlmIChyZXN1bHQgIT0gWFJfU1VDQ0VT
UykgewogICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRpb25z
KCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2UpLnV0Zjgo
KS5kYXRhKCkpOwogICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmlld0NvbmZpZ3Vy
YXRpb25zKCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2Up
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgfQogCi0gICAgRGV2aWNlOjpMaXN0T2ZTdXBwb3J0ZWRNb2RlcyBzdXBwb3J0
ZWRNb2RlczsKKyAgICBWZWN0b3I8U2Vzc2lvbk1vZGU+IHN1cHBvcnRlZE1vZGVzOwogICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCB2aWV3Q29uZmlndXJhdGlvbkNvdW50OyArK2kpIHsKICAg
ICAgICAgYXV0byB2aWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXMgPSBjcmVhdGVTdHJ1Y3R1cmU8
WHJWaWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXMsIFhSX1RZUEVfVklFV19DT05GSUdVUkFUSU9O
X1BST1BFUlRJRVM+KCk7CiAgICAgICAgIHJlc3VsdCA9IHhyR2V0Vmlld0NvbmZpZ3VyYXRpb25Q
cm9wZXJ0aWVzKG1faW5zdGFuY2UsIHN5c3RlbUlkLCB2aWV3Q29uZmlndXJhdGlvbnNbaV0sICZ2
aWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXMpOwogICAgICAgICBpZiAocmVzdWx0ICE9IFhSX1NV
Q0NFU1MpIHsKICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygieHJHZXRWaWV3Q29uZmlndXJhdGlv
blByb3BlcnRpZXMoKTogZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgbV9pbnN0
YW5jZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAgICAgICAgIGlmICh2aWV3Q29uZmlndXJh
dGlvblByb3BlcnRpZXMudmlld0NvbmZpZ3VyYXRpb25UeXBlID09IFhSX1ZJRVdfQ09ORklHVVJB
VElPTl9UWVBFX1BSSU1BUllfTU9OTykKICAgICAgICAgICAgIHN1cHBvcnRlZE1vZGVzLmFwcGVu
ZChTZXNzaW9uTW9kZTo6SW1tZXJzaXZlQXIpOwogICAgICAgICBlbHNlIGlmICh2aWV3Q29uZmln
dXJhdGlvblByb3BlcnRpZXMudmlld0NvbmZpZ3VyYXRpb25UeXBlID09IFhSX1ZJRVdfQ09ORklH
VVJBVElPTl9UWVBFX1BSSU1BUllfU1RFUkVPKQogICAgICAgICAgICAgc3VwcG9ydGVkTW9kZXMu
YXBwZW5kKFNlc3Npb25Nb2RlOjpJbW1lcnNpdmVWcik7CiAgICAgfQotICAgIGRldmljZS5zZXRT
dXBwb3J0ZWRNb2RlcyhzdXBwb3J0ZWRNb2Rlcyk7CisgICAgcmV0dXJuIHN1cHBvcnRlZE1vZGVz
OwogfQogCiAjZW5kaWYgLy8gVVNFX09QRU5YUgpAQCAtMjE4LDcgKzIxOSwxNCBAQCB2b2lkIElu
c3RhbmNlOjplbnVtZXJhdGVJbW1lcnNpdmVYUkRldmljZXMoKQogICAgIH0KIAogICAgIGF1dG8g
ZGV2aWNlID0gbWFrZVVuaXF1ZTxEZXZpY2U+KCk7Ci0gICAgbV9pbXBsLT5jb2xsZWN0U3VwcG9y
dGVkU2Vzc2lvbk1vZGVzKCpkZXZpY2UsIHN5c3RlbUlkKTsKKyAgICBhdXRvIHNlc3Npb25Nb2Rl
cyA9IG1faW1wbC0+Y29sbGVjdFN1cHBvcnRlZFNlc3Npb25Nb2RlcygqZGV2aWNlLCBzeXN0ZW1J
ZCk7CisgICAgaWYgKHNlc3Npb25Nb2RlcykgeworICAgICAgICBmb3IgKGF1dG8mIG1vZGUgOiBz
ZXNzaW9uTW9kZXMudmFsdWUoKSkgeworICAgICAgICAgICAgLy8gVE9ETzogZmlsbCBpbiBmZWF0
dXJlcworICAgICAgICAgICAgZGV2aWNlLT5zZXRFbmFibGVkRmVhdHVyZXMobW9kZSwgeyB9KTsK
KyAgICAgICAgfQorICAgIH0KKwogICAgIG1faW1tZXJzaXZlWFJEZXZpY2VzLmFwcGVuZChXVEZN
b3ZlKGRldmljZSkpOwogI2VuZGlmIC8vIFVTRV9PUEVOWFIKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvV2ViWFJUZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
V2ViWFJUZXN0LmNwcAppbmRleCBiMjBhNDMzNzJiMjRmZjdkZmM2ZWE1YmFhNzlmNWNhNTZlYzU1
MjI4Li44MmQ1ZWZiN2MxMzFmY2Q1MzU0YmE5NDg3ODk2ODhmMzU3YmVlOWFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1dlYlhSVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9XZWJYUlRlc3QuY3BwCkBAIC01NCwxMyArNTQsMTIgQEAgdm9pZCBXZWJYUlRl
c3Q6OnNpbXVsYXRlRGV2aWNlQ29ubmVjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBjb25zdAogICAgICAgICAgICAgc2ltdWxhdGVkRGV2aWNlLnZpZXdzKCkuYXBwZW5kKHZp
ZXcucmVsZWFzZVJldHVyblZhbHVlKCkpOwogICAgICAgICB9CiAKKyAgICAgICAgVmVjdG9yPFhS
UmVmZXJlbmNlU3BhY2VUeXBlPiBmZWF0dXJlczsKICAgICAgICAgaWYgKGluaXQuc3VwcG9ydGVk
RmVhdHVyZXMpIHsKLSAgICAgICAgICAgIFZlY3RvcjxYUlJlZmVyZW5jZVNwYWNlVHlwZT4gZmVh
dHVyZXM7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBpbml0LnN1cHBvcnRlZEZl
YXR1cmVzLnZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byByZWZlcmVuY2VTcGFj
ZVR5cGUgPSBwYXJzZUVudW1lcmF0aW9uPFhSUmVmZXJlbmNlU3BhY2VUeXBlPigqY29udGV4dC5l
eGVjU3RhdGUoKSwgZmVhdHVyZSkpCiAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLmFwcGVu
ZChyZWZlcmVuY2VTcGFjZVR5cGUudmFsdWUoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBzaW11bGF0ZWREZXZpY2Uuc2V0RW5hYmxlZEZlYXR1cmVzKGZlYXR1cmVzKTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChpbml0LmJvdW5kc0Nvb3JkaW5hdGVzKSB7CkBAIC04Nyw3ICs4Niw5
IEBAIHZvaWQgV2ViWFJUZXN0OjpzaW11bGF0ZURldmljZUNvbm5lY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICAgICAgICAgIGlmIChpbml0LnN1cHBvcnRz
SW1tZXJzaXZlKQogICAgICAgICAgICAgICAgIHN1cHBvcnRlZE1vZGVzLmFwcGVuZChYUlNlc3Np
b25Nb2RlOjpJbW1lcnNpdmVWcik7CiAgICAgICAgIH0KLSAgICAgICAgc2ltdWxhdGVkRGV2aWNl
LnNldFN1cHBvcnRlZE1vZGVzKHN1cHBvcnRlZE1vZGVzKTsKKworICAgICAgICBmb3IgKGF1dG8m
IG1vZGUgOiBzdXBwb3J0ZWRNb2RlcykKKyAgICAgICAgICAgIHNpbXVsYXRlZERldmljZS5zZXRF
bmFibGVkRmVhdHVyZXMobW9kZSwgZmVhdHVyZXMpOwogCiAgICAgICAgIG1fY29udGV4dC0+cmVn
aXN0ZXJTaW11bGF0ZWRYUkRldmljZUZvclRlc3Rpbmcoc2ltdWxhdGVkRGV2aWNlKTsKIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDNlMzRhY2E1ZmQ4YWI0OTY5M2NiODBlY2JkNjJiOTU0Zjk1MTI3YjQuLjQ1ZDEwYzlkM2Yz
NjZkMDI4Y2NjN2Q5ZGM1ODkxNTYwMGEyZjg2ZWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAy
MC0wNS0xNCAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbV2ViWFJdIEltcGxlbWVudCByZXF1ZXN0U2Vzc2lvbigpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE4ODgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL3dwZS9UZXN0RXhwZWN0
YXRpb25zOiBBZGRlZCBzZXZlcmFsIHByZXZpb3VzbHkgc2tpcHBlZCB0ZXN0cworICAgICAgICB0
aGF0IGFyZSBub3cgcGFzc2luZy4KKwogMjAyMC0wNS0xMyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIGZhc3QvdGV4dC9tdWx0aXBsZS1jb2RldW5p
dC12ZXJ0aWNhbC11cHJpZ2h0Lmh0bWwgaXMgZmFpbGluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFu
Z2VMb2cKaW5kZXggOTBiYzIwYTI5OTRhMzMxNmQzMGY0NGQ2M2Q4YjEyYWNlZjg3N2Y1Mi4uZjdm
ZmZhNjg2YTNmODU5M2ViN2E4MzgzZGM1N2RiYTQ2MWJjYjliMiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDUtMTQgIFNlcmdpbyBWaWxsYXIg
U2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dlYlhSXSBJbXBsZW1lbnQg
cmVxdWVzdFNlc3Npb24oKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjExODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Np
b25faW1tZXJzaXZlLmh0dHBzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX2ltbWVyc2l2ZV9ub19n
ZXN0dXJlLmh0dHBzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3Jt
LXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX2ltbWVyc2l2ZV91bnN1cHBvcnRl
ZC5odHRwcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9ub19tb2RlLmh0dHBzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3Jl
cXVlc3RTZXNzaW9uX25vbl9pbW1lcnNpdmVfbm9fZ2VzdHVyZS5odHRwcy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1
ZXN0U2Vzc2lvbl9vcHRpb25hbEZlYXR1cmVzLmh0dHBzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9u
X3JlcXVpcmVkRmVhdHVyZXNfdW5rbm93bi5odHRwcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fZmVhdHVyZXNfZGV2aWNl
U3VwcG9ydC5odHRwcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDIwLTA1LTEyICBBbGV4ZXkg
U2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgQGlz
Q29uc3RydWN0b3IgYnl0ZWNvZGUgaW50cmluc2ljIGFuZCBieXRlY29kZSBmb3IgdGhhdApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4
ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNpdmUuaHR0cHMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmlj
ZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNpdmUuaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQ2ZDk3YjI5NDkwNDg3NzYyM2E5MTY2ZGRiYzVhMGY2NGUyZjQzODIKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hy
RGV2aWNlX3JlcXVlc3RTZXNzaW9uX2ltbWVyc2l2ZS5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSw1IEBACisKK1BBU1MgVGVzdHMgcmVxdWVzdFNlc3Npb24gcmVzb2x2ZXMgd2hlbiBzdXBw
b3J0ZWQgCitQQVNTIFRlc3RzIHJlcXVlc3RTZXNzaW9uIGFjY2VwdHMgWFJTZXNzaW9uSW5pdCBk
aWN0aW9uYXJ5IAorUEFTUyBUZXN0cyByZXF1ZXN0U2Vzc2lvbiBpZ25vcmVzIHVua25vd24gb3B0
aW9uYWxGZWF0dXJlcyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNpdmVf
bm9fZ2VzdHVyZS5odHRwcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX2ltbWVyc2l2
ZV9ub19nZXN0dXJlLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzk2M2ZhOWE3YzY0
MjRkYWY5NjJhN2NkM2IzNTVlNTM0MTE2ZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0
U2Vzc2lvbl9pbW1lcnNpdmVfbm9fZ2VzdHVyZS5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwzIEBACisKK1BBU1MgUmVxdWVzdGluZyBpbW1lcnNpdmUgc2Vzc2lvbiBvdXRzaWRlIG9mIGEg
dXNlciBnZXN0dXJlIHJlamVjdHMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25faW1t
ZXJzaXZlX3Vuc3VwcG9ydGVkLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25f
aW1tZXJzaXZlX3Vuc3VwcG9ydGVkLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDkw
MzY3OTlhNTY3NGEyMzVjY2M2OThhODRiN2Y4YTYyOWJkNGQwCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmlj
ZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNpdmVfdW5zdXBwb3J0ZWQuaHR0cHMtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIFJlcXVlc3RpbmcgYW4gaW1tZXJzaXZlIHNlc3Npb24g
d2hlbiB1bnN1cHBvcnRlZCByZWplY3RzIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9u
X25vX21vZGUuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9ub19tb2RlLmh0
dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMGZkMWI2YWZkY2I0ZGVlYjdhNTRmM2E2M2Mx
YzUwZWNiN2E2M2JhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9ub19tb2Rl
Lmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBSZXF1ZXN0aW5nIGEg
c2Vzc2lvbiB3aXRoIG5vIG1vZGUgcmVqZWN0cyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vz
c2lvbl9ub25faW1tZXJzaXZlX25vX2dlc3R1cmUuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1
ZXN0U2Vzc2lvbl9ub25faW1tZXJzaXZlX25vX2dlc3R1cmUuaHR0cHMtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmYzYzI5NmU4MDhjNTI4NjcwYzc0NWZmMDc4ZTIxNWQyOTYwYmI3YjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX25vbl9pbW1lcnNpdmVfbm9fZ2VzdHVyZS5o
dHRwcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgUmVxdWVzdGluZyBub24t
aW1tZXJzaXZlIHNlc3Npb24gb3V0c2lkZSBvZiBhIHVzZXIgZ2VzdHVyZSBzdWNjZWVkcyAKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93
ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9vcHRpb25hbEZlYXR1cmVzLmh0dHBzLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2Vi
eHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25fb3B0aW9uYWxGZWF0dXJlcy5odHRwcy1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGEyZjIyNTM0OWEyODYwMGM4ZjczNWY5MTRmN2VhNWRhNzYxZjQ2
OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25fb3B0aW9uYWxGZWF0dXJlcy5o
dHRwcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2IEBACisKK1BBU1MgVGVzdHMgcmVxdWVzdFNl
c3Npb24gYWNjZXB0cyBYUlNlc3Npb25Jbml0IGRpY3Rpb25hcnkgCitQQVNTIFRlc3RzIHJlcXVl
c3RTZXNzaW9uIGFjY2VwdHMgWFJTZXNzaW9uSW5pdCBkaWN0aW9uYXJ5IHdpdGggZW1wdHkgZmVh
dHVyZSBsaXN0cyAKK1BBU1MgVGVzdHMgcmVxdWVzdFNlc3Npb24gaWdub3JlcyB1bmtub3duIHN0
cmluZ3MgaW4gb3B0aW9uYWxGZWF0dXJlcyAKK1BBU1MgVGVzdHMgcmVxdWVzdFNlc3Npb24gaWdu
b3JlcyB1bmtub3duIG9iamVjdHMgaW4gb3B0aW9uYWxGZWF0dXJlcyAKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmlj
ZV9yZXF1ZXN0U2Vzc2lvbl9yZXF1aXJlZEZlYXR1cmVzX3Vua25vd24uaHR0cHMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94
ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9yZXF1aXJlZEZlYXR1cmVzX3Vua25vd24uaHR0cHMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4YTI4YTg5NmZjMTNkMjM2YzRiNmU1MTk0ZTZjNjM2OGI5
YWNlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX3JlcXVpcmVkRmVhdHVy
ZXNfdW5rbm93bi5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgVGVz
dHMgcmVxdWVzdFNlc3Npb24gcmVqZWN0cyBmb3IgdW5rbm93biByZXF1aXJlZEZlYXR1cmVzIAor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYnhyL3hyU2Vzc2lvbl9mZWF0dXJlc19kZXZpY2VTdXBwb3J0Lmh0dHBzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJT
ZXNzaW9uX2ZlYXR1cmVzX2RldmljZVN1cHBvcnQuaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJmN2VhNDZlMGNmNzQ1ZTY5ZjVkNDYyMDA1YmUxZjc1NzQxODQxOGQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhy
L3hyU2Vzc2lvbl9mZWF0dXJlc19kZXZpY2VTdXBwb3J0Lmh0dHBzLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDMgQEAKKworUEFTUyBJbW1lcnNpdmUgWFJTZXNzaW9uIHJlcXVlc3RzIHdpdGggbm8g
c3VwcG9ydGVkIGRldmljZSBzaG91bGQgcmVqZWN0IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dw
ZS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDFlNWI3NmFmYTcxZWE1YmQ4NTE1MDVmMWJmOGJkZjdi
ZmI3MzQ5NmMuLmFjZDY0YWE2NjZiOTE4OWFkMWYxYjY3MGI3NDZjYjBmNjFhNDliZjQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dwZS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dwZS9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMDIyLDYgKzEwMjIs
MTQgQEAgd2Via2l0Lm9yZy9iLzIwOTg1OSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYnhyL2lkbGhhcm5lc3MuaHR0cHMud2luZG8KIHdlYmtpdC5vcmcvYi8yMDk4NTkgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9pc1Nlc3Npb25TdXBwb3J0
ZWRfaW5saW5lLmh0dHBzLmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8yMDk4NTkgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9pc1Nlc3Npb25TdXBwb3J0
ZWRfaW1tZXJzaXZlLmh0dHBzLmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8yMDk4NTkgaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9pc1Nlc3Npb25TdXBw
b3J0ZWRfaW1tZXJzaXZlX3Vuc3VwcG9ydGVkLmh0dHBzLmh0bWwgWyBQYXNzIF0KK3dlYmtpdC5v
cmcvYi8yMDk4NTkgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmlj
ZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNpdmUuaHR0cHMuaHRtbCBbIFBhc3MgXQord2Via2l0Lm9y
Zy9iLzIwOTg1OSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNl
X3JlcXVlc3RTZXNzaW9uX2ltbWVyc2l2ZV9ub19nZXN0dXJlLmh0dHBzLmh0bWwgWyBQYXNzIF0K
K3dlYmtpdC5vcmcvYi8yMDk4NTkgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4
ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNpdmVfdW5zdXBwb3J0ZWQuaHR0cHMuaHRt
bCBbIFBhc3MgXQord2Via2l0Lm9yZy9iLzIwOTg1OSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX25vX21vZGUuaHR0cHMuaHRtbCBb
IFBhc3MgXQord2Via2l0Lm9yZy9iLzIwOTg1OSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX25vbl9pbW1lcnNpdmVfbm9fZ2VzdHVy
ZS5odHRwcy5odG1sIFsgUGFzcyBdCit3ZWJraXQub3JnL2IvMjA5ODU5IGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25fb3B0aW9uYWxG
ZWF0dXJlcy5odHRwcy5odG1sIFsgUGFzcyBdCit3ZWJraXQub3JnL2IvMjA5ODU5IGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25fcmVx
dWlyZWRGZWF0dXJlc191bmtub3duLmh0dHBzLmh0bWwgWyBQYXNzIF0KK3dlYmtpdC5vcmcvYi8y
MDk4NTkgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fZmVh
dHVyZXNfZGV2aWNlU3VwcG9ydC5odHRwcy5odG1sIFsgUGFzcyBdCiAKICMgUGFzc2luZyBzaW5j
ZSByMjU5MDA2LgogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQv
YWxpZ25tZW50L3NlbGYtYmFzZWxpbmUvZ3JpZC1zZWxmLWJhc2VsaW5lLWNoYW5nZXMtZ3JpZC1h
cmVhLXNpemUtMDEwLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399644</attachid>
            <date>2020-05-18 07:17:36 -0700</date>
            <delta_ts>2020-05-18 10:36:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211888-20200518161734.patch</filename>
            <type>text/plain</type>
            <size>55519</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxNjkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGU4NmI2NjExYzFlMzcz
YzhhZmIzZGI2NmIyYWQ3ODE5NjlhZDcwZS4uOTU5ZjY4MmZjOGNiMDBhYWRiODk1Yjg3OWM1ZjAw
NjMzYjY1OTdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIwLTA1LTE0ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXZWJYUl0g
SW1wbGVtZW50IHJlcXVlc3RTZXNzaW9uKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMTg4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIHByZWxpbWluYXIgaW1wbGVtZW50
YXRpb24gb2YgdGhlIHJlcXVlc3RTZXNzaW9uKCkKKyAgICAgICAgQVBJIHVzZWQgdG8gZ2V0IGEg
V2ViWFJTZXNzaW9uIGZyb20gdGhlIFVBLiBJdCBpbmNsdWRlcyBhIGZhaXJseSBnb29kCisgICAg
ICAgIGFtb3VudCBvZiBjaGVja3MgdG8gdmVyaWZ5IHRoYXQgdGhlIHJlcXVlc3QgY2FuIGJlIHNh
dGlzZmllZCBnaXZlbiB0aGUKKyAgICAgICAgZGV2aWNlJ3MgZW5hYmxlZCBmZWF0dXJlcyBwZXIg
c2Vzc2lvbiBtb2Rlcy4gVGhlIHNwZWNzIGFsc28gZGVzY3JpYmUgaG93CisgICAgICAgIHRvIHJl
cXVlc3QgcGVyc21pc3Npb24gZm9yIHNvbWUgYWN0aW9ucyB1c2luZyB0aGUgUGVybWlzc2lvbnMg
QVBJIHdoaWNoCisgICAgICAgIFdlYktpdCBkb2VzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50LiBU
aGF0IHNob3VsZCBiZSBkb25lIGluIGEgZm9sbG93IHVwCisgICAgICAgIHBhdGNoIHBlcmhhcHMg
dXNpbmcgYSBzaW1pbGFyIGFwcHJvYWNoIHRvIG90aGVyIEFQSXMgYXMgR2VvbG9jYXRpb24gZm9y
CisgICAgICAgIGV4YW1wbGUuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gZ2V0IHNvbWUgb2YgdGhl
IHJlcXVlc3RTZXNzaW9uKCkgdGVzdHMgcGFzc2luZyB0aGUgc2Vzc2lvbgorICAgICAgICBmaW5h
bGl6YXRpb24gKHNodXRkb3duKSBoYWQgdG8gYmUgaW1wbGVtZW50ZWQgdG9vLgorCisgICAgICAg
IFNldmVyYWwgdGVzdHMgd2hlcmUgdW5za2lwcGVkIGZvciBXUEUgcG9ydCBhcyB0aGV5J3JlIG5v
dyBwYXNzaW5nLgorCisgICAgICAgICogTW9kdWxlcy93ZWJ4ci9XZWJYUlJlbmRlclN0YXRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlhSUmVuZGVyU3RhdGU6OmNyZWF0ZSk6IFBhc3MgWFJT
ZXNzaW9uTW9kZSBhcyBhcmd1bWVudAorICAgICAgICBpbnN0ZWFkIG9mIGEgV2ViWFJTZXNzaW9u
LgorICAgICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJSZW5kZXJTdGF0ZS5oOiBEaXR0by4KKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJYUlNlc3Npb246OmNyZWF0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJT
ZXNzaW9uOjpXZWJYUlNlc3Npb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlhSU2Vz
c2lvbjo6cmVuZGVyU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9u
OjppbnB1dFNvdXJjZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpz
aHV0ZG93bik6IFNodXRkb3duIHByb2Nlc3MgY2FsbGVkIG9uIHNlc3Npb24gZW5kLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjplbmQpOiBJbXBsZW1lbnRlZCBzZXNzaW9uIGVuZGlu
Zy4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oOiBBZGRlZCBjcmVhdGUo
KSBhbmQgcHJpdmF0ZSBjb25zdHJ1Y3Rvci4gRml4ZWQgc29tZSBuYW1pbmcuCisgICAgICAgICog
TW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlN5
c3RlbTo6RHVtbXlJbmxpbmVEZXZpY2U6OkR1bW15SW5saW5lRGV2aWNlKTogQ29udHJ1Y3RvciBm
b3IgdGhlCisgICAgICAgIGR1bW15IGlubGluZSBkZXZpY2UuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJYUlN5c3RlbTo6ZW5zdXJlSW1tZXJzaXZlWFJEZXZpY2VJc1NlbGVjdGVkKTogVXNlIGEgY291
bnRlciBpbnN0ZWFkIG9mIGEgYm9vbGVhbgorICAgICAgICB0byB0cmFjayB0ZXN0aW5nIGRldmlj
ZXMgYXMgdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIDEuCisgICAgICAgIChXZWJDb3JlOjpXZWJY
UlN5c3RlbTo6b2J0YWluQ3VycmVudERldmljZSk6IEltcGxlbWVudGVkIGZyb20gc3BlY3MgdGV4
dC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlhSU3lzdGVtOjppbW1lcnNpdmVTZXNzaW9uUmVxdWVz
dElzQWxsb3dlZEZvckdsb2JhbE9iamVjdCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViWFJTeXN0ZW06OmlubGluZVNlc3Npb25SZXF1ZXN0SXNBbGxvd2VkRm9yR2xvYmFsT2Jq
ZWN0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJYUlN5c3RlbTo6cmVzb2x2
ZVJlcXVlc3RlZEZlYXR1cmVzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJY
UlN5c3RlbTo6aXNYUlBlcm1pc3Npb25HcmFudGVkIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJYUlN5c3RlbTo6cmVxdWVzdFNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OldlYlhSU3lzdGVtOjpyZWdpc3RlclNpbXVsYXRlZFhSRGV2aWNlRm9yVGVzdGluZyk6
IFVzZSBhIGNvdW50ZXIgaW5zdGVhZCBvZiBhIGJvb2wuCisgICAgICAgIChXZWJDb3JlOjpXZWJY
UlN5c3RlbTo6dW5yZWdpc3RlclNpbXVsYXRlZFhSRGV2aWNlRm9yVGVzdGluZyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViWFJTeXN0ZW06OnNlc3Npb25FbmRlZCk6IEFkZGVkLCB1c2Vk
IGJ5IHNlc3Npb25zIHRvIG5vdGlmeSB0aGUgWFJTeXN0ZW0uCisgICAgICAgICogTW9kdWxlcy93
ZWJ4ci9XZWJYUlN5c3RlbS5oOgorICAgICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0u
aWRsOiBDYWxsIHJlcXVlc3RTZXNzaW9uIHdpdGggRG9jdW1lbnQuCisgICAgICAgICogZG9tL1Rh
c2tTb3VyY2UuaDogQWRkZWQgYSBXZWJYUiB0YXNrIHNvdXJjZS4KKyAgICAgICAgKiBwbGF0Zm9y
bS94ci9QbGF0Zm9ybVhSLmg6IFNwZWNzIHN0YXRlIHRoYXQgZGV2aWNlcyBoYXZlIGEgbGlzdCBv
ZiBlbmFibGVkIGZlYXR1cmVzIHBlciBzZXNzaW9uCisgICAgICAgIG1vZGUgc28gc3RvcmUgdGhl
bSBpbiBhIGhhc2htYXAgaW5zdGVhZCBvZiBpbiBhIFZlY3Rvci4KKyAgICAgICAgKFBsYXRmb3Jt
WFI6OkRldmljZTo6c3VwcG9ydHMgY29uc3QpOiBVc2UgdGhlIG5ldyBIYXNobWFwIG9mIHNlc3Np
b24gbW9kZXMuCisgICAgICAgIChQbGF0Zm9ybVhSOjpEZXZpY2U6OnNldEVuYWJsZWRGZWF0dXJl
cyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1YUjo6RGV2aWNlOjplbmFibGVkRmVhdHVyZXMg
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtWFI6OkRldmljZTo6c2V0U3VwcG9ydGVk
TW9kZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhS
LmNwcDoKKyAgICAgICAgKFBsYXRmb3JtWFI6Okluc3RhbmNlOjpJbXBsOjpjb2xsZWN0U3VwcG9y
dGVkU2Vzc2lvbk1vZGVzKTogUmV0dXJuIHNlc3Npb24gbW9kZXMgaWYgYW55LgorICAgICAgICAo
UGxhdGZvcm1YUjo6SW5zdGFuY2U6OmVudW1lcmF0ZUltbWVyc2l2ZVhSRGV2aWNlcyk6IEZpbGwg
aW4gZmVhdHVyZXMgcGVyIHNlc3Npb24gbW9kZS4KKyAgICAgICAgKiB0ZXN0aW5nL1dlYlhSVGVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlRlc3Q6OnNpbXVsYXRlRGV2aWNlQ29ubmVj
dGlvbik6IEZpbGwgaW4gZmVhdHVyZXMgcGVyIHNlc3Npb24gbW9kZS4KKwogMjAyMC0wNS0xNCAg
U2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
eHIvV2ViWFJJbnB1dFNvdXJjZUFycmF5LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhy
L1dlYlhSSW5wdXRTb3VyY2VBcnJheS5oCmluZGV4IGY0MjFmMDI5ZTY0Y2IwOGEyYmI5YjZhNjU2
ODVkYTBkNTk4N2QwMjUuLjU0NThiMzU3OTAwMWU3YWVlYjQ0Y2Y4NmNkMDgxY2RmMDNiMmJhMGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJj
ZUFycmF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUklucHV0U291
cmNlQXJyYXkuaApAQCAtMzksNiArMzksOSBAQCBjbGFzcyBXZWJYUklucHV0U291cmNlQXJyYXkg
OiBwdWJsaWMgUmVmQ291bnRlZDxXZWJYUklucHV0U291cmNlQXJyYXk+IHsKIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICBXZWJYUklucHV0U291cmNlKiBpdGVtKHVu
c2lnbmVkKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBXZWJYUklucHV0U291cmNlQXJyYXkoKTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VieHIvV2ViWFJSZW5kZXJTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnhyL1dlYlhSUmVuZGVyU3RhdGUuY3BwCmluZGV4IDA2Nzg5ZjgxOTI3MWU5MTU2NTI2
OWRhM2YzYjk2MWQzM2Q5OTc2YWUuLmMwZjg5NWIyYjFjNTk2NzZiZGNmNTgzNWMwOGY0YmIwNmUw
ODQ3YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJSZW5k
ZXJTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlJlbmRl
clN0YXRlLmNwcApAQCAtMzcsMjYgKzM3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFdlYlhSUmVuZGVyU3RhdGUpOwogCi1SZWY8V2ViWFJS
ZW5kZXJTdGF0ZT4gV2ViWFJSZW5kZXJTdGF0ZTo6Y3JlYXRlKGNvbnN0IFdlYlhSU2Vzc2lvbiYg
c2Vzc2lvbikKK1JlZjxXZWJYUlJlbmRlclN0YXRlPiBXZWJYUlJlbmRlclN0YXRlOjpjcmVhdGUo
WFJTZXNzaW9uTW9kZSBtb2RlKQogewotICAgIC8vIFdoZW4gYW4gWFJSZW5kZXJTdGF0ZSBvYmpl
Y3QgaXMgY3JlYXRlZCBmb3IgYW4gWFJTZXNzaW9uIHNlc3Npb24sIHRoZSB1c2VyIGFnZW50IE1V
U1QgaW5pdGlhbGl6ZSB0aGUgcmVuZGVyIHN0YXRlIGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBz
dGVwczoKLSAgICAvLyAgIDEuIExldCBzdGF0ZSBiZSB0aGUgbmV3bHkgY3JlYXRlZCBYUlJlbmRl
clN0YXRlIG9iamVjdC4KLQotICAgIC8vICAgMi4gSW5pdGlhbGl6ZSBzdGF0ZeKAmXMgZGVwdGhO
ZWFyIHRvIDAuMS4KLSAgICAvLyAgIDMuIEluaXRpYWxpemUgc3RhdGXigJlzIGRlcHRoRmFyIHRv
IDEwMDAuMC4KLSAgICAvLyAoRGVmYXVsdC1pbml0aWFsaXplZCBpbiB0aGUgWFJSZW5kZXJTdGF0
ZSBjbGFzcyBkZWZpbml0aW9uLikKLQotICAgIC8vICAgNC4gSWYgc2Vzc2lvbiBpcyBhbiBpbW1l
cnNpdmUgc2Vzc2lvbiwgaW5pdGlhbGl6ZSBzdGF0ZeKAmXMgaW5saW5lVmVydGljYWxGaWVsZE9m
VmlldyB0byBudWxsLgotICAgIC8vICAgNS4gRWxzZSBpbml0aWFsaXplIHN0YXRl4oCZcyBpbmxp
bmVWZXJ0aWNhbEZpZWxkT2ZWaWV3IHRvIFBJICogMC41LgotICAgIC8vIEZJWE1FOiAiaW1tZXJz
aXZlIHNlc3Npb24iIHN1cHBvcnQKLSAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbik7Ci0gICAgT3B0
aW9uYWw8ZG91YmxlPiBpbmxpbmVWZXJ0aWNhbEZpZWxkT2ZWaWV3IHsgcGlPdmVyVHdvRG91Ymxl
IH07Ci0KLSAgICAvLyAgIDYuIEluaXRpYWxpemUgc3RhdGXigJlzIGJhc2VMYXllciB0byBudWxs
LgotICAgIC8vICAgNy4gSW5pdGlhbGl6ZSBzdGF0ZeKAmXMgb3V0cHV0Q29udGV4dCB0byBudWxs
LgotICAgIC8vIChJbml0aWFsaXplZCB0byBudWxsIGJ5IGRlZmF1bHQuKQotCi0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViWFJSZW5kZXJTdGF0ZShXVEZNb3ZlKGlubGluZVZlcnRpY2FsRmll
bGRPZlZpZXcpKSk7CisgICAgLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4
ci8jaW5pdGlhbGl6ZS10aGUtcmVuZGVyLXN0YXRlCisgICAgLy8gZGVwdGhOZWFyLCBkZXB0aEZh
ciBhbmQgYmFzZUxheWVyIGFyZSBpbml0aWFsaXplZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbgor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlhSUmVuZGVyU3RhdGUobW9kZSA9PSBYUlNlc3Np
b25Nb2RlOjpJbmxpbmUgPyBtYWtlT3B0aW9uYWwocGlPdmVyVHdvRG91YmxlKSA6IFdURjo6bnVs
bG9wdCkpOwogfQogCiBXZWJYUlJlbmRlclN0YXRlOjpXZWJYUlJlbmRlclN0YXRlKE9wdGlvbmFs
PGRvdWJsZT4mJiBpbmxpbmVWZXJ0aWNhbEZpZWxkT2ZWaWV3KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlJlbmRlclN0YXRlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnhyL1dlYlhSUmVuZGVyU3RhdGUuaAppbmRleCAzZjI5MmFjMWQ2ODFhNDY5
ODc2MDE4MTg5YTg3YTk2ZjFlZGJhYzdkLi45NWU5NjU2YjEyMmJiMzNhYzRjNjg5ZTBhYTgyMDc2
ZWY0N2M4Y2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhS
UmVuZGVyU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSUmVu
ZGVyU3RhdGUuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQlhSKQogCisjaW5j
bHVkZSAiWFJTZXNzaW9uTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CkBAIC0zNywxMiArMzgs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBXZWJYUldlYkdMTGF5ZXI7CiBzdHJ1
Y3QgWFJSZW5kZXJTdGF0ZUluaXQ7Ci1jbGFzcyBXZWJYUlNlc3Npb247CiAKIGNsYXNzIFdlYlhS
UmVuZGVyU3RhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJYUlJlbmRlclN0YXRlPiB7CiAgICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChXZWJYUlJlbmRlclN0YXRlKTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFdlYlhSUmVuZGVyU3RhdGU+IGNyZWF0ZShjb25zdCBXZWJYUlNlc3Npb24mKTsK
KyAgICBzdGF0aWMgUmVmPFdlYlhSUmVuZGVyU3RhdGU+IGNyZWF0ZShYUlNlc3Npb25Nb2RlKTsK
ICAgICB+V2ViWFJSZW5kZXJTdGF0ZSgpOwogCiAgICAgZG91YmxlIGRlcHRoTmVhcigpIGNvbnN0
OwpAQCAtNTEsMTQgKzUxLDE1IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8V2ViWFJXZWJHTExheWVy
PiBiYXNlTGF5ZXIoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBXZWJYUlJlbmRlclN0YXRlKE9w
dGlvbmFsPGRvdWJsZT4mJik7Ci0gICAgV2ViWFJSZW5kZXJTdGF0ZShjb25zdCBYUlJlbmRlclN0
YXRlSW5pdCYpOworICAgIGV4cGxpY2l0IFdlYlhSUmVuZGVyU3RhdGUoT3B0aW9uYWw8ZG91Ymxl
PiYmIGZpZWxkT2ZWaWV3KTsKKyAgICBleHBsaWNpdCBXZWJYUlJlbmRlclN0YXRlKGNvbnN0IFhS
UmVuZGVyU3RhdGVJbml0Jik7CiAKKyAgICAvLyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHVi
LmlvL3dlYnhyLyNpbml0aWFsaXplLXRoZS1yZW5kZXItc3RhdGUKICAgICBzdHJ1Y3QgewotICAg
ICAgICBkb3VibGUgbmVhciB7IDAuMSB9OwotICAgICAgICBkb3VibGUgZmFyIHsgMTAwMCB9Owor
ICAgICAgICBkb3VibGUgbmVhciB7IDAuMSB9OyAvLyBpbiBtZXRlcnMKKyAgICAgICAgZG91Ymxl
IGZhciB7IDEwMDAgfTsgLy8gaW4gbWV0ZXJzCiAgICAgfSBtX2RlcHRoOwotICAgIE9wdGlvbmFs
PGRvdWJsZT4gbV9pbmxpbmVWZXJ0aWNhbEZpZWxkT2ZWaWV3OworICAgIE9wdGlvbmFsPGRvdWJs
ZT4gbV9pbmxpbmVWZXJ0aWNhbEZpZWxkT2ZWaWV3OyAvLyBpbiByYWRpYW5zCiAgICAgUmVmUHRy
PFdlYlhSV2ViR0xMYXllcj4gbV9iYXNlTGF5ZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKaW5kZXggZWQzNTYyZjJlM2Y2YzhkODg5NDNi
MDkxMzhmNzY2ODcwMjE1N2EyZi4uYTQzNTgzNzJkNzkxOTZjZmRhNWI2MjYyOTI1ZDY2MWVmZjI3
YjA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Np
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmNw
cApAQCAtMjgsMTIgKzI4LDMxIEBACiAKICNpZiBFTkFCTEUoV0VCWFIpCiAKKyNpbmNsdWRlICJX
ZWJYUlN5c3RlbS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFdlYlhSU2Vzc2lv
bik7CiAKK1JlZjxXZWJYUlNlc3Npb24+IFdlYlhSU2Vzc2lvbjo6Y3JlYXRlKERvY3VtZW50JiBk
b2N1bWVudCwgUmVmPFdlYlhSU3lzdGVtPiYmIHN5c3RlbSwgWFJTZXNzaW9uTW9kZSBtb2RlLCBX
ZWFrUHRyPFBsYXRmb3JtWFI6OkRldmljZT4mJiBkZXZpY2UpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViWFJTZXNzaW9uKGRvY3VtZW50LCBXVEZNb3ZlKHN5c3RlbSksIG1vZGUsIFdU
Rk1vdmUoZGV2aWNlKSkpOworfQorCitXZWJYUlNlc3Npb246OldlYlhSU2Vzc2lvbihEb2N1bWVu
dCYgZG9jdW1lbnQsIFJlZjxXZWJYUlN5c3RlbT4mJiBzeXN0ZW0sIFhSU2Vzc2lvbk1vZGUgbW9k
ZSwgV2Vha1B0cjxQbGF0Zm9ybVhSOjpEZXZpY2U+JiYgZGV2aWNlKQorICAgIDogQWN0aXZlRE9N
T2JqZWN0KCZkb2N1bWVudCkKKyAgICAsIG1feHJTeXN0ZW0oV1RGTW92ZShzeXN0ZW0pKQorICAg
ICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX2RldmljZShXVEZNb3ZlKGRldmljZSkpCisgICAgLCBt
X2FjdGl2ZVJlbmRlclN0YXRlKFdlYlhSUmVuZGVyU3RhdGU6OmNyZWF0ZShtb2RlKSkKK3sKKyAg
ICAvLyBUT0RPOiBJZiBubyBvdGhlciBmZWF0dXJlcyBvZiB0aGUgdXNlciBhZ2VudCBoYXZlIGRv
bmUgc28gYWxyZWFkeSwKKyAgICAvLyBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgcGxhdGZvcm0tc3Bl
Y2lmaWMgc3RlcHMgdG8gaW5pdGlhbGl6ZSB0aGUgZGV2aWNl4oCZcworICAgIC8vIHRyYWNraW5n
IGFuZCByZW5kZXJpbmcgY2FwYWJpbGl0aWVzLCBpbmNsdWRpbmcgc2hvd2luZyBhbnkgbmVjZXNz
YXJ5CisgICAgLy8gaW5zdHJ1Y3Rpb25zIHRvIHRoZSB1c2VyLgorfQorCiBXZWJYUlNlc3Npb246
On5XZWJYUlNlc3Npb24oKSA9IGRlZmF1bHQ7CiAKIFhSRW52aXJvbm1lbnRCbGVuZE1vZGUgV2Vi
WFJTZXNzaW9uOjplbnZpcm9ubWVudEJsZW5kTW9kZSgpIGNvbnN0CkBAIC00OCw3ICs2Nyw3IEBA
IFhSVmlzaWJpbGl0eVN0YXRlIFdlYlhSU2Vzc2lvbjo6dmlzaWJpbGl0eVN0YXRlKCkgY29uc3QK
IAogY29uc3QgV2ViWFJSZW5kZXJTdGF0ZSYgV2ViWFJTZXNzaW9uOjpyZW5kZXJTdGF0ZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuICptX3JlbmRlclN0YXRlOworICAgIHJldHVybiAqbV9hY3RpdmVS
ZW5kZXJTdGF0ZTsKIH0KIAogY29uc3QgV2ViWFJJbnB1dFNvdXJjZUFycmF5JiBXZWJYUlNlc3Np
b246OmlucHV0U291cmNlcygpIGNvbnN0CkBAIC03Myw4ICs5Miw0MSBAQCB2b2lkIFdlYlhSU2Vz
c2lvbjo6Y2FuY2VsQW5pbWF0aW9uRnJhbWUoaW50KQogewogfQogCi12b2lkIFdlYlhSU2Vzc2lv
bjo6ZW5kKEVuZFByb21pc2UmJikKKy8vIGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRodWIuaW8v
d2VieHIvI3NodXQtZG93bi10aGUtc2Vzc2lvbgordm9pZCBXZWJYUlNlc3Npb246OnNodXRkb3du
KCkKK3sKKyAgICAvLyAxLiBMZXQgc2Vzc2lvbiBiZSB0aGUgdGFyZ2V0IFhSU2Vzc2lvbiBvYmpl
Y3QuCisgICAgLy8gMi4gU2V0IHNlc3Npb24ncyBlbmRlZCB2YWx1ZSB0byB0cnVlLgorICAgIG1f
ZW5kZWQgPSB0cnVlOworCisgICAgLy8gMy4gSWYgdGhlIGFjdGl2ZSBpbW1lcnNpdmUgc2Vzc2lv
biBpcyBlcXVhbCB0byBzZXNzaW9uLCBzZXQgdGhlIGFjdGl2ZSBpbW1lcnNpdmUgc2Vzc2lvbiB0
byBudWxsLgorICAgIC8vIDQuIFJlbW92ZSBzZXNzaW9uIGZyb20gdGhlIGxpc3Qgb2YgaW5saW5l
IHNlc3Npb25zLgorICAgIG1feHJTeXN0ZW0tPnNlc3Npb25FbmRlZCh0aGlzKTsKKworICAgIC8v
IFRPRE86IGNvbXBsZXRlIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgIC8vIDUuIFJlamVjdCBhbnkg
b3V0c3RhbmRpbmcgcHJvbWlzZXMgcmV0dXJuZWQgYnkgc2Vzc2lvbiB3aXRoIGFuIEludmFsaWRT
dGF0ZUVycm9yLCBleGNlcHQgZm9yIGFueSBwcm9taXNlcyByZXR1cm5lZCBieSBlbmQoKS4KKyAg
ICAvLyA2LiBJZiBubyBvdGhlciBmZWF0dXJlcyBvZiB0aGUgdXNlciBhZ2VudCBhcmUgYWN0aXZl
bHkgdXNpbmcgdGhlbSwgcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IHBsYXRmb3JtLXNwZWNpZmljIHN0
ZXBzIHRvIHNodXQgZG93biB0aGUgZGV2aWNlJ3MgdHJhY2tpbmcgYW5kIHJlbmRlcmluZyBjYXBh
YmlsaXRpZXMuIFRoaXMgTVVTVCBpbmNsdWRlOgorICAgIC8vICA2LjEuIFJlbGVhc2luZyBleGNs
dXNpdmUgYWNjZXNzIHRvIHRoZSBYUiBkZXZpY2UgaWYgc2Vzc2lvbiBpcyBhbiBpbW1lcnNpdmUg
c2Vzc2lvbi4KKyAgICAvLyAgNi4yLiBEZWFsbG9jYXRpbmcgYW55IGdyYXBoaWNzIHJlc291cmNl
cyBhY3F1aXJlZCBieSBzZXNzaW9uIGZvciBwcmVzZW50YXRpb24gdG8gdGhlIFhSIGRldmljZS4K
KyAgICAvLyAgNi4zLiBQdXR0aW5nIHRoZSBYUiBkZXZpY2UgaW4gYSBzdGF0ZSBzdWNoIHRoYXQg
YSBkaWZmZXJlbnQgc291cmNlIG1heSBiZSBhYmxlIHRvIGluaXRpYXRlIGEgc2Vzc2lvbiB3aXRo
IHRoZSBzYW1lIGRldmljZSBpZiBzZXNzaW9uIGlzIGFuIGltbWVyc2l2ZSBzZXNzaW9uLgorICAg
IC8vIDcuIFF1ZXVlIGEgdGFzayB0aGF0IGZpcmVzIGFuIFhSU2Vzc2lvbkV2ZW50IG5hbWVkIGVu
ZCBvbiBzZXNzaW9uLgorfQorCisvLyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dl
YnhyLyNkb20teHJzZXNzaW9uLWVuZAordm9pZCBXZWJYUlNlc3Npb246OmVuZChFbmRQcm9taXNl
JiYgcHJvbWlzZSkKIHsKKyAgICAvLyAxLiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBQcm9taXNlLgor
ICAgIC8vIDIuIFNodXQgZG93biB0aGUgdGFyZ2V0IFhSU2Vzc2lvbiBvYmplY3QuCisgICAgc2h1
dGRvd24oKTsKKworICAgIC8vIDMuIFF1ZXVlIGEgdGFzayB0byBwZXJmb3JtIHRoZSBmb2xsb3dp
bmcgc3RlcHM6CisgICAgcXVldWVUYXNrS2VlcGluZ09iamVjdEFsaXZlKCp0aGlzLCBUYXNrU291
cmNlOjpXZWJYUiwgW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSAoKSBtdXRhYmxlIHsKKyAg
ICAgICAgLy8gMy4xIFdhaXQgdW50aWwgYW55IHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIHJlbGF0
ZWQgdG8gc2h1dHRpbmcgZG93biB0aGUgc2Vzc2lvbiBoYXZlIGNvbXBsZXRlZC4KKyAgICAgICAg
Ly8gMy4yIFJlc29sdmUgcHJvbWlzZS4KKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7CisgICAg
fSk7CisKKyAgICAvLyA0LiBSZXR1cm4gcHJvbWlzZS4KIH0KIAogY29uc3QgY2hhciogV2ViWFJT
ZXNzaW9uOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oCmluZGV4IGYwMTE1MDE5N2I2NzBkZTczMmU5NmYwZTA3
YjdjNjk2MDM1MGVhYzQuLjg5MzJhOTEyNzRlNmQwYmQ2YmRlNjQzMjYzNWFkYzUyNDM3NmE1NGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIldlYlhSU3BhY2UuaCIKICNpbmNsdWRlICJYUkVudmlyb25t
ZW50QmxlbmRNb2RlLmgiCiAjaW5jbHVkZSAiWFJSZWZlcmVuY2VTcGFjZVR5cGUuaCIKKyNpbmNs
dWRlICJYUlNlc3Npb25Nb2RlLmgiCiAjaW5jbHVkZSAiWFJWaXNpYmlsaXR5U3RhdGUuaCIKICNp
bmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQ1LDYg
KzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBYUkZyYW1lUmVxdWVzdENhbGxi
YWNrOwogY2xhc3MgV2ViWFJSZWZlcmVuY2VTcGFjZTsKK2NsYXNzIFdlYlhSU3lzdGVtOwogc3Ry
dWN0IFhSUmVuZGVyU3RhdGVJbml0OwogCiBjbGFzcyBXZWJYUlNlc3Npb24gZmluYWwgOiBwdWJs
aWMgUmVmQ291bnRlZDxXZWJYUlNlc3Npb24+LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5l
RGF0YSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CkBAIC01Myw2ICs1NSw3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBSZXF1ZXN0UmVmZXJlbmNlU3BhY2VQcm9taXNlID0gRE9NUHJvbWlzZURlZmVy
cmVkPElETEludGVyZmFjZTxXZWJYUlJlZmVyZW5jZVNwYWNlPj47CiAgICAgdXNpbmcgRW5kUHJv
bWlzZSA9IERPTVByb21pc2VEZWZlcnJlZDx2b2lkPjsKIAorICAgIHN0YXRpYyBSZWY8V2ViWFJT
ZXNzaW9uPiBjcmVhdGUoRG9jdW1lbnQmLCBSZWY8V2ViWFJTeXN0ZW0+JiYsIFhSU2Vzc2lvbk1v
ZGUsIFdlYWtQdHI8UGxhdGZvcm1YUjo6RGV2aWNlPiYmKTsKICAgICB2aXJ0dWFsIH5XZWJYUlNl
c3Npb24oKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPjo6cmVmOwpAQCAt
NzQsNiArNzcsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5kZWQ7IH0KIAogcHJpdmF0ZToKKyAgICBXZWJYUlNlc3Npb24oRG9jdW1lbnQmLCBSZWY8V2Vi
WFJTeXN0ZW0+JiYsIFhSU2Vzc2lvbk1vZGUsIFdlYWtQdHI8UGxhdGZvcm1YUjo6RGV2aWNlPiYm
KTsKKwogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRU
YXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBXZWJYUlNlc3Npb25FdmVu
dFRhcmdldEludGVyZmFjZVR5cGU7IH0KICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWN0aXZlRE9NT2Jq
ZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KQEAgLTg0LDExICs4OSwxOCBAQCBwcml2
YXRlOgogICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKIAorICAgIHZvaWQgc2h1dGRvd24oKTsKKwog
ICAgIFhSRW52aXJvbm1lbnRCbGVuZE1vZGUgbV9lbnZpcm9ubWVudEJsZW5kTW9kZTsKICAgICBY
UlZpc2liaWxpdHlTdGF0ZSBtX3Zpc2liaWxpdHlTdGF0ZTsKLSAgICBSZWZQdHI8V2ViWFJSZW5k
ZXJTdGF0ZT4gbV9yZW5kZXJTdGF0ZTsKICAgICBSZWZQdHI8V2ViWFJJbnB1dFNvdXJjZUFycmF5
PiBtX2lucHV0U291cmNlczsKICAgICBib29sIG1fZW5kZWQgeyBmYWxzZSB9OworCisgICAgUmVm
PFdlYlhSU3lzdGVtPiBtX3hyU3lzdGVtOworICAgIFhSU2Vzc2lvbk1vZGUgbV9tb2RlOworICAg
IFdlYWtQdHI8UGxhdGZvcm1YUjo6RGV2aWNlPiBtX2RldmljZTsKKyAgICBSZWZQdHI8V2ViWFJS
ZW5kZXJTdGF0ZT4gbV9hY3RpdmVSZW5kZXJTdGF0ZTsKKyAgICBSZWZQdHI8V2ViWFJSZW5kZXJT
dGF0ZT4gbV9wZW5kaW5nUmVuZGVyU3RhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lzdGVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uY3BwCmluZGV4IDk4
NDIyZWMwZDlmNGExNGQwNWJlYjZhMmZjM2Q4ZjAyNWRiMzY4ZTUuLjEwZDAxYWI1YmFmYmZkMDU0
NDE0YzE4OTZlOWE0NzdhNjVkZDBiOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2VieHIvV2ViWFJTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
eHIvV2ViWFJTeXN0ZW0uY3BwCkBAIC0yOCwxNyArMjgsMzIgQEAKIAogI2lmIEVOQUJMRShXRUJY
UikKIAorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRmVhdHVyZVBvbGljeS5oIgorI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAi
SlNXZWJYUlNlc3Npb24uaCIKKyNpbmNsdWRlICJKU1hSUmVmZXJlbmNlU3BhY2VUeXBlLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1YUi5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5k
aWNhdG9yLmgiCiAjaW5jbHVkZSAiV2ViWFJTZXNzaW9uLmgiCisjaW5jbHVkZSAiWFJSZWZlcmVu
Y2VTcGFjZVR5cGUuaCIKKyNpbmNsdWRlICJYUlNlc3Npb25Jbml0LmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3QuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChXZWJYUlN5c3RlbSk7CiAKK1dlYlhSU3lzdGVt
OjpEdW1teUlubGluZURldmljZTo6RHVtbXlJbmxpbmVEZXZpY2UoKQoreworICAgIHNldEVuYWJs
ZWRGZWF0dXJlcyhYUlNlc3Npb25Nb2RlOjpJbmxpbmUsIHsgWFJSZWZlcmVuY2VTcGFjZVR5cGU6
OlZpZXdlciB9KTsKK30KKwogUmVmPFdlYlhSU3lzdGVtPiBXZWJYUlN5c3RlbTo6Y3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViWFJTeXN0ZW0oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpOwpA
QCAtNTYsOCArNzEsNyBAQCBXZWJYUlN5c3RlbTo6fldlYlhSU3lzdGVtKCkgPSBkZWZhdWx0Owog
dm9pZCBXZWJYUlN5c3RlbTo6ZW5zdXJlSW1tZXJzaXZlWFJEZXZpY2VJc1NlbGVjdGVkKCkKIHsK
ICAgICAvLyBEb24ndCBhc2sgcGxhdGZvcm0gY29kZSBmb3IgWFIgZGV2aWNlcywgd2UncmUgdXNp
bmcgc2ltdWxhdGVkIG9uZXMuCi0gICAgLy8gVE9ETzogc2hvdWxkIGJlIGhhdmUgYSBNb2NrUGxh
dGZvcm1YUiBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkID8KLSAgICBpZiAoVU5MSUtFTFkobV90ZXN0
aW5nTW9kZSkpCisgICAgaWYgKFVOTElLRUxZKG1fdGVzdGluZ0RldmljZXMpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAobV9hY3RpdmVJbW1lcnNpdmVEZXZpY2UpCkBAIC05Niw2ICsxMTAs
MjAgQEAgdm9pZCBXZWJYUlN5c3RlbTo6ZW5zdXJlSW1tZXJzaXZlWFJEZXZpY2VJc1NlbGVjdGVk
KCkKICAgICAvLyBUT0RPOiA5LiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBk
ZXZpY2VjaGFuZ2Ugb24gdGhlIGNvbnRleHQgb2JqZWN0LgogfQogCisKK1BsYXRmb3JtWFI6OkRl
dmljZSogV2ViWFJTeXN0ZW06Om9idGFpbkN1cnJlbnREZXZpY2UoWFJTZXNzaW9uTW9kZSBtb2Rl
LCBjb25zdCBKU0ZlYXR1cmVzQXJyYXkmIHJlcXVpcmVkRmVhdHVyZXMsIGNvbnN0IEpTRmVhdHVy
ZXNBcnJheSYgb3B0aW9uYWxGZWF0dXJlcykKK3sKKyAgICBpZiAobW9kZSA9PSBYUlNlc3Npb25N
b2RlOjpJbW1lcnNpdmVBciB8fCBtb2RlID09IFhSU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZVZyKSB7
CisgICAgICAgIGVuc3VyZUltbWVyc2l2ZVhSRGV2aWNlSXNTZWxlY3RlZCgpOworICAgICAgICBy
ZXR1cm4gbV9hY3RpdmVJbW1lcnNpdmVEZXZpY2UuZ2V0KCk7CisgICAgfQorICAgIGlmICghcmVx
dWlyZWRGZWF0dXJlcy5pc0VtcHR5KCkgfHwgIW9wdGlvbmFsRmVhdHVyZXMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gbV9pbmxpbmVYUkRldmljZS5nZXQoKTsKKworICAgIHJldHVybiAmbV9k
ZWZhdWx0SW5saW5lRGV2aWNlOworfQorCisKIC8vIGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRo
dWIuaW8vd2VieHIvI2RvbS14cnN5c3RlbS1pc3Nlc3Npb25zdXBwb3J0ZWQKIHZvaWQgV2ViWFJT
eXN0ZW06OmlzU2Vzc2lvblN1cHBvcnRlZChYUlNlc3Npb25Nb2RlIG1vZGUsIElzU2Vzc2lvblN1
cHBvcnRlZFByb21pc2UmJiBwcm9taXNlKQogewpAQCAtMTA2LDcgKzEzNCw3IEBAIHZvaWQgV2Vi
WFJTeXN0ZW06OmlzU2Vzc2lvblN1cHBvcnRlZChYUlNlc3Npb25Nb2RlIG1vZGUsIElzU2Vzc2lv
blN1cHBvcnRlZFByb21pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyAzLiBJZiB0
aGUgcmVxdWVzdGluZyBkb2N1bWVudOKAmXMgb3JpZ2luIGlzIG5vdCBhbGxvd2VkIHRvIHVzZSB0
aGUgInhyLXNwYXRpYWwtdHJhY2tpbmciIGZlYXR1cmUgcG9saWN5LAorICAgIC8vIDMuIElmIHRo
ZSByZXF1ZXN0aW5nIGRvY3VtZW50J3Mgb3JpZ2luIGlzIG5vdCBhbGxvd2VkIHRvIHVzZSB0aGUg
InhyLXNwYXRpYWwtdHJhY2tpbmciIGZlYXR1cmUgcG9saWN5LAogICAgIC8vICAgIHJlamVjdCBw
cm9taXNlIHdpdGggYSAiU2VjdXJpdHlFcnJvciIgRE9NRXhjZXB0aW9uIGFuZCByZXR1cm4gaXQu
CiAgICAgYXV0byBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PihzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwogICAgIGlmICghaXNGZWF0dXJlUG9saWN5QWxsb3dlZEJ5RG9jdW1lbnRBbmRB
bGxPd25lcnMoRmVhdHVyZVBvbGljeTo6VHlwZTo6WFJTcGF0aWFsVHJhY2tpbmcsICpkb2N1bWVu
dCwgTG9nRmVhdHVyZVBvbGljeUZhaWx1cmU6OlllcykpIHsKQEAgLTEzNiwyNiArMTY0LDI2OSBA
QCB2b2lkIFdlYlhSU3lzdGVtOjppc1Nlc3Npb25TdXBwb3J0ZWQoWFJTZXNzaW9uTW9kZSBtb2Rl
LCBJc1Nlc3Npb25TdXBwb3J0ZWRQcm9taQogICAgIH0pOwogfQogCi12b2lkIFdlYlhSU3lzdGVt
OjpyZXF1ZXN0U2Vzc2lvbihYUlNlc3Npb25Nb2RlLCBjb25zdCBYUlNlc3Npb25Jbml0JiwgUmVx
dWVzdFNlc3Npb25Qcm9taXNlJiYpCisvLyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlv
L3dlYnhyLyNpbW1lcnNpdmUtc2Vzc2lvbi1yZXF1ZXN0LWlzLWFsbG93ZWQKK2Jvb2wgV2ViWFJT
eXN0ZW06OmltbWVyc2l2ZVNlc3Npb25SZXF1ZXN0SXNBbGxvd2VkRm9yR2xvYmFsT2JqZWN0KERP
TVdpbmRvdyYgZ2xvYmFsT2JqZWN0LCBEb2N1bWVudCYgZG9jdW1lbnQpIGNvbnN0Cit7CisgICAg
Ly8gMS4gSWYgdGhlIHJlcXVlc3Qgd2FzIG5vdCBtYWRlIHdoaWxlIHRoZSBnbG9iYWwgb2JqZWN0
IGhhcyB0cmFuc2llbnQKKyAgICAvLyAgICBhY3RpdmF0aW9uIG9yIHdoZW4gbGF1bmNoaW5nIGEg
d2ViIGFwcGxpY2F0aW9uLCByZXR1cm4gZmFsc2UKKyAgICAvLyBUT0RPOiBhZGQgYSBjaGVjayBm
b3IgIm5vdCBsYXVuY2hpbmcgYSB3ZWIgYXBwbGljYXRpb24iLgorICAgIGlmICghZ2xvYmFsT2Jq
ZWN0Lmhhc1RyYW5zaWVudEFjdGl2YXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gMi4gSWYgdGhlIHJlcXVlc3RpbmcgZG9jdW1lbnQgaXMgbm90IGNvbnNpZGVyZWQgdHJ1
c3R3b3J0aHksIHJldHVybiBmYWxzZS4KKyAgICAvLyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0
aHViLmlvL3dlYnhyLyN0cnVzdHdvcnRoeS4KKyAgICBpZiAoJmRvY3VtZW50ICE9IGdsb2JhbE9i
amVjdC5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBodHRwczov
L2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLyNhY3RpdmUtYW5kLWZvY3VzZWQKKyAgICBp
ZiAoIWRvY3VtZW50Lmhhc0ZvY3VzKCkgfHwgIWRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkuaXNT
YW1lT3JpZ2luQXMoZ2xvYmFsT2JqZWN0LmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAzLiBJZiB1c2VyIGludGVudCB0byBiZWdp
biBhbiBpbW1lcnNpdmUgc2Vzc2lvbiBpcyBub3Qgd2VsbCB1bmRlcnN0b29kLAorICAgIC8vICAg
IGVpdGhlciB2aWEgZXhwbGljaXQgY29uc2VudCBvciBpbXBsaWNpdCBjb25zZW50LCByZXR1cm4g
ZmFsc2UKKyAgICBpZiAoIVVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8v
IGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRodWIuaW8vd2VieHIvI2lubGluZS1zZXNzaW9uLXJl
cXVlc3QtaXMtYWxsb3dlZAorYm9vbCBXZWJYUlN5c3RlbTo6aW5saW5lU2Vzc2lvblJlcXVlc3RJ
c0FsbG93ZWRGb3JHbG9iYWxPYmplY3QoRE9NV2luZG93JiBnbG9iYWxPYmplY3QsIERvY3VtZW50
JiBkb2N1bWVudCwgY29uc3QgWFJTZXNzaW9uSW5pdCYgaW5pdCkgY29uc3QKK3sKKyAgICAvLyAx
LiBJZiB0aGUgc2Vzc2lvbiByZXF1ZXN0IGNvbnRhaW5lZCBhbnkgcmVxdWlyZWQgZmVhdHVyZXMg
b3Igb3B0aW9uYWwgZmVhdHVyZXMgYW5kIHRoZSByZXF1ZXN0IHdhcyBub3QgbWFkZQorICAgIC8v
ICAgIHdoaWxlIHRoZSBnbG9iYWwgb2JqZWN0IGhhcyB0cmFuc2llbnQgYWN0aXZhdGlvbiBvciB3
aGVuIGxhdW5jaGluZyBhIHdlYiBhcHBsaWNhdGlvbiwgcmV0dXJuIGZhbHNlLgorICAgIGJvb2wg
c2Vzc2lvblJlcXVlc3RDb250YWluZWRBbnlGZWF0dXJlID0gIWluaXQub3B0aW9uYWxGZWF0dXJl
cy5pc0VtcHR5KCkgfHwgIWluaXQucmVxdWlyZWRGZWF0dXJlcy5pc0VtcHR5KCk7CisgICAgaWYg
KHNlc3Npb25SZXF1ZXN0Q29udGFpbmVkQW55RmVhdHVyZSAmJiAhZ2xvYmFsT2JqZWN0Lmhhc1Ry
YW5zaWVudEFjdGl2YXRpb24oKSAvKiBUT0RPOiB8fCAhbGF1bmNoaW5nIGEgd2ViIGFwcCAqLykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gMi4gSWYgdGhlIHJlcXVlc3RpbmcgZG9j
dW1lbnQgaXMgbm90IHJlc3BvbnNpYmxlLCByZXR1cm4gZmFsc2UuCisgICAgaWYgKCZkb2N1bWVu
dCAhPSBnbG9iYWxPYmplY3QuZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKworc3RydWN0IFdlYlhSU3lzdGVtOjpSZXNvbHZlZFJlcXVl
c3RlZEZlYXR1cmVzIHsKKyAgICBGZWF0dXJlc0FycmF5IGdyYW50ZWQ7CisgICAgRmVhdHVyZXNB
cnJheSBjb25zZW50UmVxdWlyZWQ7CisgICAgRmVhdHVyZXNBcnJheSBjb25zZW50T3B0aW9uYWw7
Cit9OworCisjZGVmaW5lIFJFVFVSTl9GQUxTRV9PUl9DT05USU5VRShtdXN0UmV0dXJuKSB7IFwK
KyAgICBpZiAobXVzdFJldHVybikge1wKKyAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisgICAgfSBc
CisgICAgY29udGludWU7IFwKK30KKworLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5p
by93ZWJ4ci8jcmVzb2x2ZS10aGUtcmVxdWVzdGVkLWZlYXR1cmVzCitPcHRpb25hbDxXZWJYUlN5
c3RlbTo6UmVzb2x2ZWRSZXF1ZXN0ZWRGZWF0dXJlcz4gV2ViWFJTeXN0ZW06OnJlc29sdmVSZXF1
ZXN0ZWRGZWF0dXJlcyhYUlNlc3Npb25Nb2RlIG1vZGUsIGNvbnN0IFhSU2Vzc2lvbkluaXQmIGlu
aXQsIFBsYXRmb3JtWFI6OkRldmljZSogZGV2aWNlLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgUGxhdGZvcm1YUjo6SW5zdGFuY2U6OnNpbmdsZXRvbigp
OworICAgIC8vIDEuIExldCBjb25zZW50UmVxdWlyZWQgYmUgYW4gZW1wdHkgbGlzdCBvZiBET01T
dHJpbmcuCisgICAgLy8gMi4gTGV0IGNvbnNlbnRPcHRpb25hbCBiZSBhbiBlbXB0eSBsaXN0IG9m
IERPTVN0cmluZy4KKyAgICBSZXNvbHZlZFJlcXVlc3RlZEZlYXR1cmVzIHJlc29sdmVkRmVhdHVy
ZXM7CisKKyAgICAvLyAzLiBMZXQgZGV2aWNlIGJlIHRoZSByZXN1bHQgb2Ygb2J0YWluaW5nIHRo
ZSBjdXJyZW50IGRldmljZSBmb3IgbW9kZSwgcmVxdWlyZWRGZWF0dXJlcywgYW5kIG9wdGlvbmFs
RmVhdHVyZXMuCisgICAgLy8gNC4gTGV0IGdyYW50ZWQgYmUgYSBsaXN0IG9mIERPTVN0cmluZyBp
bml0aWFsaXplZCB0byBkZXZpY2UncyBsaXN0IG9mIGVuYWJsZWQgZmVhdHVyZXMgZm9yIG1vZGUu
CisgICAgaWYgKGRldmljZSkKKyAgICAgICAgcmVzb2x2ZWRGZWF0dXJlcy5ncmFudGVkID0gZGV2
aWNlLT5lbmFibGVkRmVhdHVyZXMobW9kZSk7CisKKyAgICAvLyA1LiBJZiBkZXZpY2UgaXMgbnVs
bCBvciBkZXZpY2UncyBsaXN0IG9mIHN1cHBvcnRlZCBtb2RlcyBkb2VzIG5vdCBjb250YWluIG1v
ZGUsIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgIC8vICA1LjEgUmV0dXJuIHRoZSB0dXBs
ZSAoY29uc2VudFJlcXVpcmVkLCBjb25zZW50T3B0aW9uYWwsIGdyYW50ZWQpCisgICAgaWYgKCFk
ZXZpY2UgfHwgIWRldmljZS0+c3VwcG9ydHMobW9kZSkpCisgICAgICAgIHJldHVybiByZXNvbHZl
ZEZlYXR1cmVzOworCisgICAgLy8gNi4gQWRkIGV2ZXJ5IGZlYXR1cmUgZGVzY3JpcHRvciBpbiB0
aGUgZGVmYXVsdCBmZWF0dXJlcyB0YWJsZSBhc3NvY2lhdGVkCisgICAgLy8gICAgd2l0aCBtb2Rl
IHRvIHRoZSBpbmRpY2F0ZWQgZmVhdHVyZSBsaXN0IGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNl
bnQuCisgICAgLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jZGVmYXVs
dC1mZWF0dXJlcworICAgIGF1dG8gcmVxdWlyZWRGZWF0dXJlc1dpdGhEZWZhdWx0RmVhdHVyZXMg
PSBpbml0LnJlcXVpcmVkRmVhdHVyZXM7CisgICAgcmVxdWlyZWRGZWF0dXJlc1dpdGhEZWZhdWx0
RmVhdHVyZXMuYXBwZW5kKGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZ2xvYmFsT2JqZWN0LCBYUlJl
ZmVyZW5jZVNwYWNlVHlwZTo6Vmlld2VyKSk7CisgICAgaWYgKG1vZGUgPT0gWFJTZXNzaW9uTW9k
ZTo6SW1tZXJzaXZlQXIgfHwgbW9kZSA9PSBYUlNlc3Npb25Nb2RlOjpJbW1lcnNpdmVWcikKKyAg
ICAgICAgcmVxdWlyZWRGZWF0dXJlc1dpdGhEZWZhdWx0RmVhdHVyZXMuYXBwZW5kKGNvbnZlcnRF
bnVtZXJhdGlvblRvSlMoZ2xvYmFsT2JqZWN0LCBYUlJlZmVyZW5jZVNwYWNlVHlwZTo6TG9jYWwp
KTsKKworICAgIC8vIDcuIEZvciBlYWNoIGZlYXR1cmUgaW4gcmVxdWlyZWRGZWF0dXJlc3xvcHRp
b25hbEZlYXR1cmVzIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoKKyAgICAvLyA4LiBGb3Ig
ZWFjaCBmZWF0dXJlIGluIG9wdGlvbmFsRmVhdHVyZXMgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0
ZXBzOgorICAgIC8vIFdlJ3JlIG1lcmdpbmcgYm90aCBsb29wcyBpbiBhIHNpbmdsZSBsYW1iZGEu
IFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCBhIGZhaWx1cmUgb24gYW55IHJlcXVpcmVkIGZl
YXR1cmVzCisgICAgLy8gaW1wbGllcyBjYW5jZWxsaW5nIHRoZSB3aG9sZSBwcm9jZXNzIHdoaWxl
IGZhaWx1cmVzIGluIG9wdGlvbmFsIGZlYXR1cmVzIGFyZSBqdXN0IHNraXBwZWQuCisgICAgZW51
bSBjbGFzcyBQYXJzaW5nTW9kZSB7IFN0cmljdCwgTG9vc2UgfTsKKyAgICBhdXRvIHBhcnNlRmVh
dHVyZXMgPSBbJmRldmljZSwgJmdsb2JhbE9iamVjdCwgbW9kZSwgJnJlc29sdmVkRmVhdHVyZXNd
IChjb25zdCBKU0ZlYXR1cmVzQXJyYXkmIHNlc3Npb25GZWF0dXJlcywgUGFyc2luZ01vZGUgcGFy
c2luZ01vZGUpIC0+IGJvb2wgeworICAgICAgICBib29sIHJldHVybk9uRmFpbHVyZSA9IHBhcnNp
bmdNb2RlID09IFBhcnNpbmdNb2RlOjpTdHJpY3Q7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYg
c2Vzc2lvbkZlYXR1cmUgOiBzZXNzaW9uRmVhdHVyZXMpIHsKKyAgICAgICAgICAgIC8vIDEuIElm
IHRoZSBmZWF0dXJlIGlzIG51bGwsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IGVudHJ5LgorICAgICAg
ICAgICAgaWYgKHNlc3Npb25GZWF0dXJlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICAvLyAyLiBJZiBmZWF0dXJlIGlzIG5vdCBhIHZhbGlkIGZlYXR1
cmUgZGVzY3JpcHRvciwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzCisgICAgICAgICAgICAv
LyAgIDIuMS4gTGV0IHMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nID8gVG9TdHJpbmcoZmVhdHVy
ZSkuCisgICAgICAgICAgICAvLyAgIDIuMi4gSWYgcyBpcyBub3QgYSB2YWxpZCBmZWF0dXJlIGRl
c2NyaXB0b3Igb3IgaXMgdW5kZWZpbmVkLCAocmV0dXJuIG51bGx8Y29udGludWUgdG8gbmV4dCBl
bnRyeSkuCisgICAgICAgICAgICAvLyAgIDIuMy4gU2V0IGZlYXR1cmUgdG8gcy4KKyAgICAgICAg
ICAgIGF1dG8gZmVhdHVyZSA9IHBhcnNlRW51bWVyYXRpb248WFJSZWZlcmVuY2VTcGFjZVR5cGU+
KGdsb2JhbE9iamVjdCwgc2Vzc2lvbkZlYXR1cmUpOworICAgICAgICAgICAgaWYgKCFmZWF0dXJl
KQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUxTRV9PUl9DT05USU5VRShyZXR1cm5PbkZhaWx1
cmUpOworCisgICAgICAgICAgICAvLyAzLiBJZiBmZWF0dXJlIGlzIGFscmVhZHkgaW4gZ3JhbnRl
ZCwgY29udGludWUgdG8gdGhlIG5leHQgZW50cnkuCisgICAgICAgICAgICBpZiAocmVzb2x2ZWRG
ZWF0dXJlcy5ncmFudGVkLmNvbnRhaW5zKGZlYXR1cmUudmFsdWUoKSkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIDQuIElmIHRoZSByZXF1ZXN0aW5nIGRvY3Vt
ZW50J3Mgb3JpZ2luIGlzIG5vdCBhbGxvd2VkIHRvIHVzZSBhbnkgZmVhdHVyZSBwb2xpY3kgcmVx
dWlyZWQgYnkgZmVhdHVyZQorICAgICAgICAgICAgLy8gICAgYXMgaW5kaWNhdGVkIGJ5IHRoZSBm
ZWF0dXJlIHJlcXVpcmVtZW50cyB0YWJsZSwgKHJldHVybiBudWxsfGNvbnRpbnVlIHRvIG5leHQg
ZW50cnkpLgorCisgICAgICAgICAgICAvLyA1LiBJZiBzZXNzaW9uJ3MgWFIgZGV2aWNlIGlzIG5v
dCBjYXBhYmxlIG9mIHN1cHBvcnRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGJ5IGZl
YXR1cmUgb3IgdGhlCisgICAgICAgICAgICAvLyAgICB1c2VyIGFnZW50IGhhcyBvdGhlcndpc2Ug
ZGV0ZXJtaW5lZCB0byByZWplY3QgdGhlIGZlYXR1cmUsIChyZXR1cm4gbnVsbHxjb250aW51ZSB0
byBuZXh0IGVudHJ5KS4KKyAgICAgICAgICAgIGlmICghZGV2aWNlLT5lbmFibGVkRmVhdHVyZXMo
bW9kZSkuY29udGFpbnMoZmVhdHVyZS52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5f
RkFMU0VfT1JfQ09OVElOVUUocmV0dXJuT25GYWlsdXJlKTsKKworICAgICAgICAgICAgLy8gNi4g
SWYgdGhlIGZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGJ5IGZlYXR1cmUgcmVxdWlyZXMgZXhwbGlj
aXQgY29uc2VudCwgYXBwZW5kIGl0IHRvIChjb25zZW50UmVxdWlyZWR8Y29uc2VudE9wdGlvbmFs
KS4KKyAgICAgICAgICAgIC8vIDcuIEVsc2UgYXBwZW5kIGZlYXR1cmUgdG8gZ3JhbnRlZC4KKyAg
ICAgICAgICAgIHJlc29sdmVkRmVhdHVyZXMuZ3JhbnRlZC5hcHBlbmQoZmVhdHVyZS52YWx1ZSgp
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgaWYgKCFw
YXJzZUZlYXR1cmVzKHJlcXVpcmVkRmVhdHVyZXNXaXRoRGVmYXVsdEZlYXR1cmVzLCBQYXJzaW5n
TW9kZTo6U3RyaWN0KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIC8vIFdo
ZW4gdGhlIHJlcXVlc3RTZXNzaW9uKG1vZGUpIG1ldGhvZCBpcyBpbnZva2VkLCB0aGUgdXNlciBh
Z2VudCBNVVNUIHJldHVybiBhIG5ldyBQcm9taXNlIHByb21pc2UgYW5kIHJ1biB0aGUgZm9sbG93
aW5nIHN0ZXBzIGluIHBhcmFsbGVsOgotICAgIC8vICAgMS4gTGV0IGltbWVyc2l2ZSBiZSB0cnVl
IGlmIG1vZGUgaXMgImltbWVyc2l2ZS12ciIgb3IgImltbWVyc2l2ZS1hciIsIGFuZCBmYWxzZSBv
dGhlcndpc2UuCi0gICAgLy8gICAyLiBJZiBpbW1lcnNpdmUgaXMgdHJ1ZToKLSAgICAvLyAgICAg
MS4gSWYgcGVuZGluZyBpbW1lcnNpdmUgc2Vzc2lvbiBpcyB0cnVlIG9yIGFjdGl2ZSBpbW1lcnNp
dmUgc2Vzc2lvbiBpcyBub3QgbnVsbCwgcmVqZWN0IHByb21pc2Ugd2l0aCBhbiAiSW52YWxpZFN0
YXRlRXJyb3IiIERPTUV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCi0gICAgLy8gICAg
IDIuIEVsc2Ugc2V0IHBlbmRpbmcgaW1tZXJzaXZlIHNlc3Npb24gdG8gYmUgdHJ1ZS4KLSAgICAv
LyAgIDMuIEVuc3VyZSBhbiBYUiBkZXZpY2UgaXMgc2VsZWN0ZWQuCi0gICAgLy8gICA0LiBJZiB0
aGUgWFIgZGV2aWNlIGlzIG51bGwsIHJlamVjdCBwcm9taXNlIHdpdGggbnVsbC4KLSAgICAvLyAg
IDUuIEVsc2UgaWYgdGhlIFhSIGRldmljZSdzIGxpc3Qgb2Ygc3VwcG9ydGVkIG1vZGVzIGRvZXMg
bm90IGNvbnRhaW4gbW9kZSwgcmVqZWN0IHByb21pc2Ugd2l0aCBhICJOb3RTdXBwb3J0ZWRFcnJv
ciIgRE9NRXhjZXB0aW9uLgotICAgIC8vICAgNi4gRWxzZSBJZiBpbW1lcnNpdmUgaXMgdHJ1ZSBh
bmQgdGhlIGFsZ29yaXRobSBpcyBub3QgdHJpZ2dlcmVkIGJ5IHVzZXIgYWN0aXZhdGlvbiwgcmVq
ZWN0IHByb21pc2Ugd2l0aCBhICJTZWN1cml0eUVycm9yIiBET01FeGNlcHRpb24gYW5kIGFib3J0
IHRoZXNlIHN0ZXBzLgotICAgIC8vICAgNy4gSWYgcHJvbWlzZSB3YXMgcmVqZWN0ZWQgYW5kIGlt
bWVyc2l2ZSBpcyB0cnVlLCBzZXQgcGVuZGluZyBpbW1lcnNpdmUgc2Vzc2lvbiB0byBmYWxzZS4K
LSAgICAvLyAgIDguIElmIHByb21pc2Ugd2FzIHJlamVjdGVkLCBhYm9ydCB0aGVzZSBzdGVwcy4K
LSAgICAvLyAgIDkuIExldCBzZXNzaW9uIGJlIGEgbmV3IFhSU2Vzc2lvbiBvYmplY3QuCi0gICAg
Ly8gICAxMC4gSW5pdGlhbGl6ZSB0aGUgc2Vzc2lvbiB3aXRoIHNlc3Npb24gYW5kIG1vZGUuCi0g
ICAgLy8gICAxMS4gSWYgaW1tZXJzaXZlIGlzIHRydWUsIHNldCB0aGUgYWN0aXZlIGltbWVyc2l2
ZSBzZXNzaW9uIHRvIHNlc3Npb24sIGFuZCBzZXQgcGVuZGluZyBpbW1lcnNpdmUgc2Vzc2lvbiB0
byBmYWxzZS4KLSAgICAvLyAgIDEyLiBFbHNlIGFwcGVuZCBzZXNzaW9uIHRvIHRoZSBsaXN0IG9m
IGlubGluZSBzZXNzaW9ucy4KLSAgICAvLyAgIDEzLiBSZXNvbHZlIHByb21pc2Ugd2l0aCBzZXNz
aW9uLgorICAgIHBhcnNlRmVhdHVyZXMoaW5pdC5vcHRpb25hbEZlYXR1cmVzLCBQYXJzaW5nTW9k
ZTo6TG9vc2UpOworICAgIHJldHVybiByZXNvbHZlZEZlYXR1cmVzOworfQorCisvLyBodHRwczov
L2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLyNyZXF1ZXN0LXRoZS14ci1wZXJtaXNzaW9u
Citib29sIFdlYlhSU3lzdGVtOjppc1hSUGVybWlzc2lvbkdyYW50ZWQoWFJTZXNzaW9uTW9kZSBt
b2RlLCBjb25zdCBYUlNlc3Npb25Jbml0JiBpbml0LCBQbGF0Zm9ybVhSOjpEZXZpY2UqIGRldmlj
ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KSBjb25zdAoreworICAgIC8vIDEu
IFNldCBzdGF0dXMncyBncmFudGVkIHRvIGFuIGVtcHR5IEZyb3plbkFycmF5LgorICAgIC8vIDIu
IExldCByZXF1aXJlZEZlYXR1cmVzIGJlIGRlc2NyaXB0b3IncyByZXF1aXJlZEZlYXR1cmVzLgor
ICAgIC8vIDMuIExldCBvcHRpb25hbEZlYXR1cmVzIGJlIGRlc2NyaXB0b3IncyBvcHRpb25hbEZl
YXR1cmVzLgorICAgIC8vIDQuIExldCBkZXZpY2UgYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcg
dGhlIGN1cnJlbnQgZGV2aWNlIGZvciBtb2RlLCByZXF1aXJlZEZlYXR1cmVzLCBhbmQgb3B0aW9u
YWxGZWF0dXJlcy4KKworICAgIC8vIDUuIExldCByZXN1bHQgYmUgdGhlIHJlc3VsdCBvZiByZXNv
bHZpbmcgdGhlIHJlcXVlc3RlZCBmZWF0dXJlcyBnaXZlbiByZXF1aXJlZEZlYXR1cmVzLG9wdGlv
bmFsRmVhdHVyZXMsIGFuZCBtb2RlLgorICAgIGF1dG8gcmVzb2x2ZWRGZWF0dXJlcyA9IHJlc29s
dmVSZXF1ZXN0ZWRGZWF0dXJlcyhtb2RlLCBpbml0LCBkZXZpY2UsIGdsb2JhbE9iamVjdCk7CisK
KyAgICAvLyA2LiBJZiByZXN1bHQgaXMgbnVsbCwgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6Cisg
ICAgLy8gIDYuMS4gU2V0IHN0YXR1cydzIHN0YXRlIHRvICJkZW5pZWQiLgorICAgIC8vICA2LjIu
IEFib3J0IHRoZXNlIHN0ZXBzLgorICAgIGlmICghcmVzb2x2ZWRGZWF0dXJlcykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gNy4gTGV0IChjb25zZW50UmVxdWlyZWQsIGNvbnNlbnRP
cHRpb25hbCwgZ3JhbnRlZCkgYmUgdGhlIGZpZWxkcyBvZiByZXN1bHQuCisgICAgLy8gOC4gVGhl
IHVzZXIgYWdlbnQgTUFZIGF0IHRoaXMgcG9pbnQgYXNrIHRoZSB1c2VyJ3MgcGVybWlzc2lvbiBm
b3IgdGhlIGNhbGxpbmcgYWxnb3JpdGhtIHRvIHVzZSBhbnkgb2YgdGhlIGZlYXR1cmVzCisgICAg
Ly8gICAgaW4gY29uc2VudFJlcXVpcmVkIGFuZCBjb25zZW50T3B0aW9uYWwuIFRoZSByZXN1bHRz
IG9mIHRoZXNlIHByb21wdHMgc2hvdWxkIGJlIGluY2x1ZGVkIHdoZW4gZGV0ZXJtaW5pbmcgaWYg
dGhlcmUKKyAgICAvLyAgICBpcyBhIGNsZWFyIHNpZ25hbCBvZiB1c2VyIGludGVudCBmb3IgZW5h
YmxpbmcgdGhlc2UgZmVhdHVyZXMuCisgICAgLy8gOS4gRm9yIGVhY2ggZmVhdHVyZSBpbiBjb25z
ZW50UmVxdWlyZWQgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgIC8vICA5LjEuIFRo
ZSB1c2VyIGFnZW50IE1BWSBhdCB0aGlzIHBvaW50IGFzayB0aGUgdXNlcidzIHBlcm1pc3Npb24g
Zm9yIHRoZSBjYWxsaW5nIGFsZ29yaXRobSB0byB1c2UgZmVhdHVyZS4gVGhlIHJlc3VsdHMKKyAg
ICAvLyAgICAgICBvZiB0aGVzZSBwcm9tcHRzIHNob3VsZCBiZSBpbmNsdWRlZCB3aGVuIGRldGVy
bWluaW5nIGlmIHRoZXJlIGlzIGEgY2xlYXIgc2lnbmFsIG9mIHVzZXIgaW50ZW50IHRvIGVuYWJs
ZSBmZWF0dXJlLgorICAgIC8vICA5LjIuIElmIGEgY2xlYXIgc2lnbmFsIG9mIHVzZXIgaW50ZW50
IHRvIGVuYWJsZSBmZWF0dXJlIGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkLCBzZXQgc3RhdHVzJ3Mg
c3RhdGUgdG8gImRlbmllZCIgYW5kCisgICAgLy8gICAgICAgYWJvcnQgdGhlc2Ugc3RlcHMuCisg
ICAgLy8gIDkuMy4gSWYgZmVhdHVyZSBpcyBub3QgaW4gZ3JhbnRlZCwgYXBwZW5kIGZlYXR1cmUg
dG8gZ3JhbnRlZC4KKyAgICAvLyAxMC4gRm9yIGVhY2ggZmVhdHVyZSBpbiBjb25zZW50T3B0aW9u
YWwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgIC8vICAxMC4xLiBUaGUgdXNlciBh
Z2VudCBNQVkgYXQgdGhpcyBwb2ludCBhc2sgdGhlIHVzZXIncyBwZXJtaXNzaW9uIGZvciB0aGUg
Y2FsbGluZyBhbGdvcml0aG0gdG8gdXNlIGZlYXR1cmUuIFRoZSByZXN1bHRzCisgICAgLy8gICAg
ICAgIG9mIHRoZXNlIHByb21wdHMgc2hvdWxkIGJlIGluY2x1ZGVkIHdoZW4gZGV0ZXJtaW5pbmcg
aWYgdGhlcmUgaXMgYSBjbGVhciBzaWduYWwgb2YgdXNlciBpbnRlbnQgdG8gZW5hYmxlIGZlYXR1
cmUuCisgICAgLy8gIDEwLjIuIElmIGEgY2xlYXIgc2lnbmFsIG9mIHVzZXIgaW50ZW50IHRvIGVu
YWJsZSBmZWF0dXJlIGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkLCBjb250aW51ZSB0byB0aGUgbmV4
dCBlbnRyeS4KKyAgICAvLyAgMTAuMy4gSWYgZmVhdHVyZSBpcyBub3QgaW4gZ3JhbnRlZCwgYXBw
ZW5kIGZlYXR1cmUgdG8gZ3JhbnRlZC4KKyAgICAvLyAxMS4gU2V0IHN0YXR1cydzIGdyYW50ZWQg
dG8gZ3JhbnRlZC4KKyAgICAvLyAxMi4gU2V0IGRldmljZSdzIGxpc3Qgb2YgZW5hYmxlZCBmZWF0
dXJlcyBmb3IgbW9kZSB0byBncmFudGVkLgorICAgIC8vIDEzLiBTZXQgc3RhdHVzJ3Mgc3RhdGUg
dG8gImdyYW50ZWQiLgorICAgIHJldHVybiB0cnVlOworfQorCisKKy8vIGh0dHBzOi8vaW1tZXJz
aXZlLXdlYi5naXRodWIuaW8vd2VieHIvI2RvbS14cnN5c3RlbS1yZXF1ZXN0c2Vzc2lvbgordm9p
ZCBXZWJYUlN5c3RlbTo6cmVxdWVzdFNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50LCBYUlNlc3Np
b25Nb2RlIG1vZGUsIGNvbnN0IFhSU2Vzc2lvbkluaXQmIGluaXQsIFJlcXVlc3RTZXNzaW9uUHJv
bWlzZSYmIHByb21pc2UpCit7CisgICAgLy8gMS4gTGV0IHByb21pc2UgYmUgYSBuZXcgUHJvbWlz
ZS4KKyAgICAvLyAyLiBMZXQgaW1tZXJzaXZlIGJlIHRydWUgaWYgbW9kZSBpcyBhbiBpbW1lcnNp
dmUgc2Vzc2lvbiBtb2RlLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgIC8vIDMuIExldCBnbG9i
YWwgb2JqZWN0IGJlIHRoZSByZWxldmFudCBHbG9iYWwgb2JqZWN0IGZvciB0aGUgWFJTeXN0ZW0g
b24gd2hpY2ggdGhpcyBtZXRob2Qgd2FzIGludm9rZWQuCisgICAgYm9vbCBpbW1lcnNpdmUgPSBt
b2RlID09IFhSU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZUFyIHx8IG1vZGUgPT0gWFJTZXNzaW9uTW9k
ZTo6SW1tZXJzaXZlVnI7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZG9jdW1lbnQuZG9tV2lu
ZG93KCk7CisgICAgaWYgKCFnbG9iYWxPYmplY3QpIHsKKyAgICAgICAgcHJvbWlzZS5yZWplY3Qo
RXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyA0LiBDaGVjayB3aGV0aGVyIHRoZSBzZXNzaW9uIHJlcXVlc3QgaXMgYWxsb3dl
ZCBhcyBmb2xsb3dzOgorICAgIGlmIChpbW1lcnNpdmUpIHsKKyAgICAgICAgaWYgKCFpbW1lcnNp
dmVTZXNzaW9uUmVxdWVzdElzQWxsb3dlZEZvckdsb2JhbE9iamVjdCgqZ2xvYmFsT2JqZWN0LCBk
b2N1bWVudCkpIHsKKyAgICAgICAgICAgIHByb21pc2UucmVqZWN0KEV4Y2VwdGlvbiB7IFNlY3Vy
aXR5RXJyb3IgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG1fcGVuZGluZ0ltbWVyc2l2ZVNlc3Npb24gfHwgbV9hY3RpdmVJbW1lcnNpdmVTZXNzaW9uKSB7
CisgICAgICAgICAgICBwcm9taXNlLnJlamVjdChFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJv
ciB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3BlbmRpbmdJ
bW1lcnNpdmVTZXNzaW9uID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWlubGlu
ZVNlc3Npb25SZXF1ZXN0SXNBbGxvd2VkRm9yR2xvYmFsT2JqZWN0KCpnbG9iYWxPYmplY3QsIGRv
Y3VtZW50LCBpbml0KSkgeworICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoRXhjZXB0aW9uIHsg
U2VjdXJpdHlFcnJvciB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIDUuIFJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzIGluIHBhcmFsbGVsOgorICAgIGRv
Y3VtZW50LnBvc3RUYXNrKFt0aGlzLCBpbW1lcnNpdmUsIGluaXQsIG1vZGUsIHByb21pc2UgPSBX
VEZNb3ZlKHByb21pc2UpXSAoYXV0byYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgIC8vIDUu
MSBMZXQgcmVxdWlyZWRGZWF0dXJlcyBiZSBvcHRpb25zJyByZXF1aXJlZEZlYXR1cmVzLgorICAg
ICAgICAvLyA1LjIgTGV0IG9wdGlvbmFsRmVhdHVyZXMgYmUgb3B0aW9ucycgb3B0aW9uYWxGZWF0
dXJlcy4KKyAgICAgICAgLy8gNS4zIFNldCBkZXZpY2UgdG8gdGhlIHJlc3VsdCBvZiBvYnRhaW5p
bmcgdGhlIGN1cnJlbnQgZGV2aWNlIGZvciBtb2RlLCByZXF1aXJlZEZlYXR1cmVzLCBhbmQgb3B0
aW9uYWxGZWF0dXJlcy4KKyAgICAgICAgYXV0byogZGV2aWNlID0gb2J0YWluQ3VycmVudERldmlj
ZShtb2RlLCBpbml0LnJlcXVpcmVkRmVhdHVyZXMsIGluaXQub3B0aW9uYWxGZWF0dXJlcyk7CisK
KyAgICAgICAgLy8gNS40IFF1ZXVlIGEgdGFzayB0byBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3Rl
cHM6CisgICAgICAgIHF1ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhpcywgVGFza1NvdXJj
ZTo6V2ViWFIsIFt0aGlzLCAmY29udGV4dCwgZGV2aWNlID0gbWFrZVdlYWtQdHIoZGV2aWNlKSwg
aW1tZXJzaXZlLCBpbml0LCBtb2RlLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0
YWJsZSB7CisgICAgICAgICAgICBhdXRvIHJlamVjdFByb21pc2VXaXRoTm90U3VwcG9ydGVkRXJy
b3IgPSBtYWtlU2NvcGVFeGl0KFsmXSAoKSB7CisgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWpl
Y3QoRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfSk7CisgICAgICAgICAgICAgICAgbV9w
ZW5kaW5nSW1tZXJzaXZlU2Vzc2lvbiA9IGZhbHNlOworICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgIC8vIDUuNC4xIElmIGRldmljZSBpcyBudWxsIG9yIGRldmljZSdzIGxpc3Qgb2Ygc3Vw
cG9ydGVkIG1vZGVzIGRvZXMgbm90IGNvbnRhaW4gbW9kZSwgcnVuIHRoZSBmb2xsb3dpbmcgc3Rl
cHM6CisgICAgICAgICAgICAvLyAgLSBSZWplY3QgcHJvbWlzZSB3aXRoIGEgIk5vdFN1cHBvcnRl
ZEVycm9yIiBET01FeGNlcHRpb24uCisgICAgICAgICAgICAvLyAgLSBJZiBpbW1lcnNpdmUgaXMg
dHJ1ZSwgc2V0IHBlbmRpbmcgaW1tZXJzaXZlIHNlc3Npb24gdG8gZmFsc2UuCisgICAgICAgICAg
ICAvLyAgLSBBYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAgICAgICAgIGlmICghZGV2aWNlIHx8ICFk
ZXZpY2UtPnN1cHBvcnRzKG1vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gY29udGV4dC5leGVjU3RhdGUoKTsKKyAgICAgICAg
ICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgLy8gV2ViS2l0IGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IHRoZSBQZXJtaXNzaW9u
cyBBUEkuIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9wZXJtaXNzaW9ucy8KKyAgICAgICAgICAgIC8v
IEhvd2V2ZXIgd2UgZG8gaW1wbGVtZW50IGhlcmUgdGhlIHBlcm1pc3Npb24gcmVxdWVzdCBhbGdv
cml0aG0gd2l0aG91dCB0aGUKKyAgICAgICAgICAgIC8vIFBlcm1pc3Npb25zIEFQSSBiaXRzIGFz
IGl0IGhhbmRsZXMsIGFtb25nIG90aGVycywgdGhlIHNlc3Npb24gZmVhdHVyZXMgcGFyc2luZy4g
V2UgYWxzbworICAgICAgICAgICAgLy8gZG8gaXQgaGVyZSBiZWZvcmUgY3JlYXRpbmcgdGhlIHNl
c3Npb24gYXMgdGhlcmUgaXMgbm8gbmVlZCB0byBkbyBpdCBvbiBhZHZhbmNlLgorICAgICAgICAg
ICAgLy8gVE9ETzogd2UganVzdCBwZXJmb3JtIGJhc2ljIGNoZWNrcyB3aXRob3V0IGFza2luZyBh
bnkgcGVybWlzc2lvbiB0byB0aGUgdXNlciBzbyBmYXIuIE1heWJlIHdlIHNob3VsZCBpbXBsZW1l
bnQKKyAgICAgICAgICAgIC8vIGEgbWVjaGFuaXNtIHNpbWlsYXIgdG8gd2hhdCBvdGhlcnMgZG8g
aW52b2x2aW5nIHBhc3NpbmcgYSBtZXNzYWdlIHRvIHRoZSBVSSBwcm9jZXNzLgorCisgICAgICAg
ICAgICAvLyA1LjQuNCBMZXQgZGVzY3JpcHRvciBiZSBhbiBYUlBlcm1pc3Npb25EZXNjcmlwdG9y
IGluaXRpYWxpemVkIHdpdGggc2Vzc2lvbiwgcmVxdWlyZWRGZWF0dXJlcywgYW5kIG9wdGlvbmFs
RmVhdHVyZXMKKyAgICAgICAgICAgIC8vIDUuNC41IExldCBzdGF0dXMgYmUgYW4gWFJQZXJtaXNz
aW9uU3RhdHVzLCBpbml0aWFsbHkgbnVsbAorICAgICAgICAgICAgLy8gNS40LjYgUmVxdWVzdCB0
aGUgeHIgcGVybWlzc2lvbiB3aXRoIGRlc2NyaXB0b3IgYW5kIHN0YXR1cy4KKyAgICAgICAgICAg
IC8vIDUuNC43IElmIHN0YXR1cycgc3RhdGUgaXMgImRlbmllZCIgcnVuIHRoZSBmb2xsb3dpbmcg
c3RlcHM6IChzYW1lIGFzIGFib3ZlIGluIDUuNC4xKQorICAgICAgICAgICAgaWYgKCFpc1hSUGVy
bWlzc2lvbkdyYW50ZWQobW9kZSwgaW5pdCwgZGV2aWNlLmdldCgpLCAqZ2xvYmFsT2JqZWN0KSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIDUuNC4yIExldCBzZXNz
aW9uIGJlIGEgbmV3IFhSU2Vzc2lvbiBvYmplY3QuCisgICAgICAgICAgICAvLyA1LjQuMyBJbml0
aWFsaXplIHRoZSBzZXNzaW9uIHdpdGggc2Vzc2lvbiwgbW9kZSwgYW5kIGRldmljZS4KKyAgICAg
ICAgICAgIEFTU0VSVChpczxEb2N1bWVudD4oY29udGV4dC5nZXQoKSkpOworICAgICAgICAgICAg
YXV0byBzZXNzaW9uID0gV2ViWFJTZXNzaW9uOjpjcmVhdGUoZG93bmNhc3Q8RG9jdW1lbnQ+KGNv
bnRleHQpLCAqdGhpcywgbW9kZSwgV1RGTW92ZShkZXZpY2UpKTsKKworICAgICAgICAgICAgLy8g
NS40LjggUG90ZW50aWFsbHkgc2V0IHRoZSBhY3RpdmUgaW1tZXJzaXZlIHNlc3Npb24gYXMgZm9s
bG93czoKKyAgICAgICAgICAgIGlmIChpbW1lcnNpdmUpIHsKKyAgICAgICAgICAgICAgICBtX2Fj
dGl2ZUltbWVyc2l2ZVNlc3Npb24gPSBzZXNzaW9uLmNvcHlSZWYoKTsKKyAgICAgICAgICAgICAg
ICBtX3BlbmRpbmdJbW1lcnNpdmVTZXNzaW9uID0gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBtX2xpc3RPZklubGluZVNlc3Npb25zLmFwcGVuZChzZXNzaW9uLmNv
cHlSZWYoKSk7CisKKyAgICAgICAgICAgIC8vIDUuNC45IFJlc29sdmUgcHJvbWlzZSB3aXRoIHNl
c3Npb24uCisgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoc2Vzc2lvbik7CisgICAgICAgICAg
ICByZWplY3RQcm9taXNlV2l0aE5vdFN1cHBvcnRlZEVycm9yLnJlbGVhc2UoKTsKKworICAgICAg
ICAgICAgLy8gVE9ETzoKKyAgICAgICAgICAgIC8vIDUuNC4xMCBRdWV1ZSBhIHRhc2sgdG8gcGVy
Zm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOiBOT1RFOiBUaGVzZSBzdGVwcyBlbnN1cmUgdGhhdCBp
bml0aWFsIGlucHV0c291cmNlc2NoYW5nZQorICAgICAgICAgICAgLy8gZXZlbnRzIG9jY3VyIGFm
dGVyIHRoZSBpbml0aWFsIHNlc3Npb24gaXMgcmVzb2x2ZWQuCisgICAgICAgICAgICAvLyAgICAg
MS4gU2V0IHNlc3Npb24ncyBwcm9taXNlIHJlc29sdmVkIGZsYWcgdG8gdHJ1ZS4KKyAgICAgICAg
ICAgIC8vICAgICAyLiBMZXQgc291cmNlcyBiZSBhbnkgZXhpc3RpbmcgaW5wdXQgc291cmNlcyBh
dHRhY2hlZCB0byBzZXNzaW9uLgorICAgICAgICAgICAgLy8gICAgIDMuIElmIHNvdXJjZXMgaXMg
bm9uLWVtcHR5LCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgICAgICAgICAvLyAg
ICAgICAgMS4gU2V0IHNlc3Npb24ncyBsaXN0IG9mIGFjdGl2ZSBYUiBpbnB1dCBzb3VyY2VzIHRv
IHNvdXJjZXMuCisgICAgICAgICAgICAvLyAgICAgICAgMi4gRmlyZSBhbiBYUklucHV0U291cmNl
c0NoYW5nZUV2ZW50IG5hbWVkIGlucHV0c291cmNlc2NoYW5nZSBvbiBzZXNzaW9uIHdpdGggYWRk
ZWQgc2V0IHRvIHNvdXJjZXMuCisKKyAgICAgICAgfSk7CisgICAgfSk7CiB9CiAKIGNvbnN0IGNo
YXIqIFdlYlhSU3lzdGVtOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKQEAgLTE3MSw3ICs0
NDIsNyBAQCB2b2lkIFdlYlhSU3lzdGVtOjpyZWdpc3RlclNpbXVsYXRlZFhSRGV2aWNlRm9yVGVz
dGluZyhjb25zdCBQbGF0Zm9ybVhSOjpEZXZpY2UmCiB7CiAgICAgaWYgKCFSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYlhSRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgbV90ZXN0aW5nTW9kZSA9IHRydWU7CisgICAgbV90ZXN0aW5nRGV2aWNlcysrOwog
ICAgIGlmIChkZXZpY2Uuc3VwcG9ydHMoUGxhdGZvcm1YUjo6U2Vzc2lvbk1vZGU6OkltbWVyc2l2
ZVZyKSB8fCBkZXZpY2Uuc3VwcG9ydHMoUGxhdGZvcm1YUjo6U2Vzc2lvbk1vZGU6OkltbWVyc2l2
ZUFyKSkgewogICAgICAgICBtX2ltbWVyc2l2ZURldmljZXMuYXBwZW5kKG1ha2VXZWFrUHRyKGRl
dmljZSkpOwogICAgICAgICBtX2FjdGl2ZUltbWVyc2l2ZURldmljZSA9IG1faW1tZXJzaXZlRGV2
aWNlcy5sYXN0KCk7CkBAIC0xODUsMTQgKzQ1NiwyNCBAQCB2b2lkIFdlYlhSU3lzdGVtOjp1bnJl
Z2lzdGVyU2ltdWxhdGVkWFJEZXZpY2VGb3JUZXN0aW5nKFBsYXRmb3JtWFI6OkRldmljZSogZGV2
aQogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJY
UkVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2ltbWVyc2l2ZURldmlj
ZXMuY29udGFpbnMoZGV2aWNlKSk7CisgICAgQVNTRVJUKG1fdGVzdGluZ0RldmljZXMpOwogICAg
IG1faW1tZXJzaXZlRGV2aWNlcy5yZW1vdmVGaXJzdChkZXZpY2UpOwogICAgIGlmIChtX2FjdGl2
ZUltbWVyc2l2ZURldmljZSA9PSBkZXZpY2UpCiAgICAgICAgIG1fYWN0aXZlSW1tZXJzaXZlRGV2
aWNlID0gbnVsbHB0cjsKICAgICBpZiAobV9pbmxpbmVYUkRldmljZSA9PSBkZXZpY2UpCiAgICAg
ICAgIG1faW5saW5lWFJEZXZpY2UgPSBtYWtlV2Vha1B0cihtX2RlZmF1bHRJbmxpbmVEZXZpY2Up
OwotICAgIG1fdGVzdGluZ01vZGUgPSBmYWxzZTsKKyAgICBtX3Rlc3RpbmdEZXZpY2VzLS07CiB9
CiAKK3ZvaWQgV2ViWFJTeXN0ZW06OnNlc3Npb25FbmRlZChjb25zdCBXZWJYUlNlc3Npb24qIHNl
c3Npb24pCit7CisgICAgaWYgKG1fYWN0aXZlSW1tZXJzaXZlU2Vzc2lvbiA9PSBzZXNzaW9uKQor
ICAgICAgICBtX2FjdGl2ZUltbWVyc2l2ZVNlc3Npb24gPSBudWxscHRyOworCisgICAgbV9saXN0
T2ZJbmxpbmVTZXNzaW9ucy5yZW1vdmVGaXJzdE1hdGNoaW5nKFtzZXNzaW9uXShhdXRvJiBpdGVt
KSB7CisgICAgICAgIHJldHVybiBpdGVtLnB0cigpID09IHNlc3Npb247CisgICAgfSk7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9X
ZWJYUlN5c3RlbS5oCmluZGV4IDJlOWNlODQ2OWE3NTk0ODdiODI2NTY2MDlhNzkyNjQ0MGViNzFi
YWIuLjFmOTNjY2I0MWI1MTE1MDA0MmRmYmY5MTAxOGRiM2QyNzgxMjBiZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lzdGVtLmgKQEAgLTMzLDEzICszMywyMCBAQAog
I2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0
QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKyNp
bmNsdWRlICJYUlJlZmVyZW5jZVNwYWNlVHlwZS5oIgogI2luY2x1ZGUgIlhSU2Vzc2lvbk1vZGUu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgog
CituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTR2xvYmFsT2JqZWN0OworfQorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIERPTVdpbmRvdzsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CiBjbGFzcyBXZWJYUlNlc3Npb247CiBzdHJ1Y3QgWFJTZXNzaW9uSW5pdDsKQEAgLTU3LDEy
ICs2NCwxNCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJYUlN5c3RlbT46OmRl
cmVmOwogCiAgICAgdm9pZCBpc1Nlc3Npb25TdXBwb3J0ZWQoWFJTZXNzaW9uTW9kZSwgSXNTZXNz
aW9uU3VwcG9ydGVkUHJvbWlzZSYmKTsKLSAgICB2b2lkIHJlcXVlc3RTZXNzaW9uKFhSU2Vzc2lv
bk1vZGUsIGNvbnN0IFhSU2Vzc2lvbkluaXQmLCBSZXF1ZXN0U2Vzc2lvblByb21pc2UmJik7Cisg
ICAgdm9pZCByZXF1ZXN0U2Vzc2lvbihEb2N1bWVudCYsIFhSU2Vzc2lvbk1vZGUsIGNvbnN0IFhS
U2Vzc2lvbkluaXQmLCBSZXF1ZXN0U2Vzc2lvblByb21pc2UmJik7CiAKICAgICAvLyBUaGlzIGlz
IGFsc28gbmVlZGVkIGJ5IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1ha2VYUkNvbXBhdGli
bGUoKSBhbmQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHRXZWJHTCgpLgogICAgIHZv
aWQgZW5zdXJlSW1tZXJzaXZlWFJEZXZpY2VJc1NlbGVjdGVkKCk7CiAgICAgYm9vbCBoYXNBY3Rp
dmVJbW1lcnNpdmVYUkRldmljZSgpIHsgcmV0dXJuICEhbV9hY3RpdmVJbW1lcnNpdmVEZXZpY2U7
IH0KIAorICAgIHZvaWQgc2Vzc2lvbkVuZGVkKGNvbnN0IFdlYlhSU2Vzc2lvbiopOworCiAgICAg
Ly8gRm9yIHRlc3RpbmcgcHVycG91c2VzIG9ubHkuCiAgICAgdm9pZCByZWdpc3RlclNpbXVsYXRl
ZFhSRGV2aWNlRm9yVGVzdGluZyhjb25zdCBQbGF0Zm9ybVhSOjpEZXZpY2UmKTsKICAgICB2b2lk
IHVucmVnaXN0ZXJTaW11bGF0ZWRYUkRldmljZUZvclRlc3RpbmcoUGxhdGZvcm1YUjo6RGV2aWNl
Kik7CkBAIC04MSwyMCArOTAsMzAgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBXZWJYUlN5
c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAKKyAgICB1c2luZyBGZWF0dXJlc0FycmF5
ID0gUGxhdGZvcm1YUjo6RGV2aWNlOjpMaXN0T2ZFbmFibGVkRmVhdHVyZXM7CisgICAgdXNpbmcg
SlNGZWF0dXJlc0FycmF5ID0gVmVjdG9yPEpTQzo6SlNWYWx1ZT47CisgICAgUGxhdGZvcm1YUjo6
RGV2aWNlKiBvYnRhaW5DdXJyZW50RGV2aWNlKFhSU2Vzc2lvbk1vZGUsIGNvbnN0IEpTRmVhdHVy
ZXNBcnJheSYgcmVxdWlyZWRGZWF0dXJlcywgY29uc3QgSlNGZWF0dXJlc0FycmF5JiBvcHRpb25h
bEZlYXR1cmVzKTsKKworICAgIGJvb2wgaW1tZXJzaXZlU2Vzc2lvblJlcXVlc3RJc0FsbG93ZWRG
b3JHbG9iYWxPYmplY3QoRE9NV2luZG93JiwgRG9jdW1lbnQmKSBjb25zdDsKKyAgICBib29sIGlu
bGluZVNlc3Npb25SZXF1ZXN0SXNBbGxvd2VkRm9yR2xvYmFsT2JqZWN0KERPTVdpbmRvdyYsIERv
Y3VtZW50JiwgY29uc3QgWFJTZXNzaW9uSW5pdCYpIGNvbnN0OworCisgICAgc3RydWN0IFJlc29s
dmVkUmVxdWVzdGVkRmVhdHVyZXM7CisgICAgT3B0aW9uYWw8UmVzb2x2ZWRSZXF1ZXN0ZWRGZWF0
dXJlcz4gcmVzb2x2ZVJlcXVlc3RlZEZlYXR1cmVzKFhSU2Vzc2lvbk1vZGUsIGNvbnN0IFhSU2Vz
c2lvbkluaXQmLCBQbGF0Zm9ybVhSOjpEZXZpY2UqLCBKU0M6OkpTR2xvYmFsT2JqZWN0JikgY29u
c3Q7CisgICAgYm9vbCBpc1hSUGVybWlzc2lvbkdyYW50ZWQoWFJTZXNzaW9uTW9kZSwgY29uc3Qg
WFJTZXNzaW9uSW5pdCYsIFBsYXRmb3JtWFI6OkRldmljZSosIEpTQzo6SlNHbG9iYWxPYmplY3Qm
KSBjb25zdDsKKwogICAgIC8vIGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRodWIuaW8vd2VieHIv
I2RlZmF1bHQtaW5saW5lLXhyLWRldmljZQogICAgIGNsYXNzIER1bW15SW5saW5lRGV2aWNlIGZp
bmFsIDogcHVibGljIFBsYXRmb3JtWFI6OkRldmljZSB7CiAgICAgcHVibGljOgotICAgICAgICBE
dW1teUlubGluZURldmljZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fc3VwcG9ydGVkTW9k
ZXMuYXBwZW5kKFhSU2Vzc2lvbk1vZGU6OklubGluZSk7Ci0gICAgICAgIH0KKyAgICAgICAgRHVt
bXlJbmxpbmVEZXZpY2UoKTsKICAgICB9OwogICAgIER1bW15SW5saW5lRGV2aWNlIG1fZGVmYXVs
dElubGluZURldmljZTsKIAogICAgIGJvb2wgbV9pbW1lcnNpdmVYUkRldmljZXNIYXZlQmVlbkVu
dW1lcmF0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90ZXN0aW5nTW9kZSB7IGZhbHNlIH07Cisg
ICAgdWludCBtX3Rlc3RpbmdEZXZpY2VzIHsgMCB9OwogCi0gICAgV2Vha1B0cjxXZWJYUlNlc3Np
b24+IG1fYWN0aXZlSW1tZXJzaXZlU2Vzc2lvbjsKKyAgICBib29sIG1fcGVuZGluZ0ltbWVyc2l2
ZVNlc3Npb24geyBmYWxzZSB9OworICAgIFJlZlB0cjxXZWJYUlNlc3Npb24+IG1fYWN0aXZlSW1t
ZXJzaXZlU2Vzc2lvbjsKKyAgICBWZWN0b3I8UmVmPFdlYlhSU2Vzc2lvbj4+IG1fbGlzdE9mSW5s
aW5lU2Vzc2lvbnM7CiAKICAgICBXZWFrUHRyPFBsYXRmb3JtWFI6OkRldmljZT4gbV9hY3RpdmVJ
bW1lcnNpdmVEZXZpY2U7CiAgICAgVmVjdG9yPFdlYWtQdHI8UGxhdGZvcm1YUjo6RGV2aWNlPj4g
bV9pbW1lcnNpdmVEZXZpY2VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJ4ci9XZWJYUlN5c3RlbS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhS
U3lzdGVtLmlkbAppbmRleCBjYWQyN2UzMjdkNjMzNWEzYTcwNzZjZjY3Y2U5ZTRjM2YwN2E1ZDdh
Li4yYzdjMDA4MzA3MzRmOThjYjJiZmE2NjEzN2U4ZTgzODI4Yjk0ZmUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lzdGVtLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lzdGVtLmlkbApAQCAtMzMsNyArMzMsNyBAQAog
XSBpbnRlcmZhY2UgV2ViWFJTeXN0ZW0gOiBFdmVudFRhcmdldCB7CiAgICAgLy8gTWV0aG9kcwog
ICAgIFByb21pc2U8dm9pZD4gaXNTZXNzaW9uU3VwcG9ydGVkKFhSU2Vzc2lvbk1vZGUgbW9kZSk7
Ci0gICAgW05ld09iamVjdF0gUHJvbWlzZTxXZWJYUlNlc3Npb24+IHJlcXVlc3RTZXNzaW9uKFhS
U2Vzc2lvbk1vZGUgbW9kZSwgb3B0aW9uYWwgWFJTZXNzaW9uSW5pdCBvcHRpb25zKTsKKyAgICBb
TmV3T2JqZWN0LCBDYWxsV2l0aD1Eb2N1bWVudF0gUHJvbWlzZTxXZWJYUlNlc3Npb24+IHJlcXVl
c3RTZXNzaW9uKFhSU2Vzc2lvbk1vZGUgbW9kZSwgb3B0aW9uYWwgWFJTZXNzaW9uSW5pdCBvcHRp
b25zKTsKIAogICAgIC8vIEV2ZW50cwogICAgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25kZXZp
Y2VjaGFuZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGFza1NvdXJjZS5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL1Rhc2tTb3VyY2UuaAppbmRleCA4NTQ4ZWVlMDQ3NWVlYzBmMjY2
ZGY3NzhlNjBkYzg1NDBjNGQwOWIzLi4yZjc5NGExY2JhNWYxOThlZjY4MjAzMzU2MWU5YTk1YTg3
MThjZjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGFza1NvdXJjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9UYXNrU291cmNlLmgKQEAgLTM5LDYgKzM5LDcgQEAgZW51bSBj
bGFzcyBUYXNrU291cmNlIDogdWludDhfdCB7CiAgICAgUG9zdGVkTWVzc2FnZVF1ZXVlLAogICAg
IFVzZXJJbnRlcmFjdGlvbiwKICAgICBXZWJHTCwKKyAgICBXZWJYUiwKIAogICAgIC8vIEludGVy
bmFsIHRvIFdlYkNvcmUKICAgICBJbnRlcm5hbEFzeW5jVGFzaywgLy8gU2FmZSB0byByZS1vcmRl
ciBvciBkZWxheS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1BsYXRm
b3JtWFIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL1BsYXRmb3JtWFIuaAppbmRleCBl
MDJmMDllNzFlMzMwYzM2N2YxNzljOTJjMmM0ZWMxMDkzMTg4OWQwLi4wYjA0MTNiY2I1ODdiOWYx
NGFiMzQwY2RhNGU0OWU5YjA2ZTk0ZjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS94ci9QbGF0Zm9ybVhSLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxh
dGZvcm1YUi5oCkBAIC0xOSwxMiArMTksMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8
bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKIAot
ZW51bSBjbGFzcyBTZXNzaW9uTW9kZSB7CitlbnVtIGNsYXNzIFNlc3Npb25Nb2RlIDogdWludDhf
dCB7CiAgICAgSW5saW5lLAogICAgIEltbWVyc2l2ZVZyLAogICAgIEltbWVyc2l2ZUFyLApAQCAt
NDgsMTggKzQ5LDE5IEBAIHB1YmxpYzoKICAgICBEZXZpY2UoKTsKICAgICBEZXZpY2VJZCBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KIAotICAgIHVzaW5nIExpc3RPZlN1cHBvcnRlZE1vZGVz
ID0gVmVjdG9yPFNlc3Npb25Nb2RlPjsKICAgICB1c2luZyBMaXN0T2ZFbmFibGVkRmVhdHVyZXMg
PSBWZWN0b3I8UmVmZXJlbmNlU3BhY2VUeXBlPjsKLQotICAgIGJvb2wgc3VwcG9ydHMoU2Vzc2lv
bk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9zdXBwb3J0ZWRNb2Rlcy5jb250YWlucyhtb2Rl
KTsgfQotICAgIHZvaWQgc2V0U3VwcG9ydGVkTW9kZXMoY29uc3QgTGlzdE9mU3VwcG9ydGVkTW9k
ZXMmIG1vZGVzKSB7IG1fc3VwcG9ydGVkTW9kZXMgPSBtb2RlczsgfQotICAgIHZvaWQgc2V0RW5h
YmxlZEZlYXR1cmVzKGNvbnN0IExpc3RPZkVuYWJsZWRGZWF0dXJlcyYgZmVhdHVyZXMpIHsgbV9l
bmFibGVkRmVhdHVyZXMgPSBmZWF0dXJlczsgfQorICAgIGJvb2wgc3VwcG9ydHMoU2Vzc2lvbk1v
ZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkRmVhdHVyZXNNYXAuY29udGFpbnMobW9k
ZSk7IH0KKyAgICB2b2lkIHNldEVuYWJsZWRGZWF0dXJlcyhTZXNzaW9uTW9kZSBtb2RlLCBjb25z
dCBMaXN0T2ZFbmFibGVkRmVhdHVyZXMmIGZlYXR1cmVzKSB7IG1fZW5hYmxlZEZlYXR1cmVzTWFw
LnNldChtb2RlLCBmZWF0dXJlcyk7IH0KKyAgICBMaXN0T2ZFbmFibGVkRmVhdHVyZXMgZW5hYmxl
ZEZlYXR1cmVzKFNlc3Npb25Nb2RlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlZEZlYXR1
cmVzTWFwLmdldChtb2RlKTsgfQogCiAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBE
ZXZpY2UmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lkID09IG90aGVyLm1faWQ7IH0KIAogcHJv
dGVjdGVkOgotICAgIExpc3RPZlN1cHBvcnRlZE1vZGVzIG1fc3VwcG9ydGVkTW9kZXM7Ci0gICAg
TGlzdE9mRW5hYmxlZEZlYXR1cmVzIG1fZW5hYmxlZEZlYXR1cmVzOworICAgIC8vIGh0dHBzOi8v
aW1tZXJzaXZlLXdlYi5naXRodWIuaW8vd2VieHIvI3hyLWRldmljZS1jb25jZXB0CisgICAgLy8g
RWFjaCBYUiBkZXZpY2UgaGFzIGEgbGlzdCBvZiBlbmFibGVkIGZlYXR1cmVzIGZvciBlYWNoIFhS
U2Vzc2lvbk1vZGUgaW4gaXRzIGxpc3Qgb2Ygc3VwcG9ydGVkIG1vZGVzLAorICAgIC8vIHdoaWNo
IGlzIGEgbGlzdCBvZiBmZWF0dXJlIGRlc2NyaXB0b3JzIHdoaWNoIE1VU1QgYmUgaW5pdGlhbGx5
IGFuIGVtcHR5IGxpc3QuCisgICAgdXNpbmcgRW5hYmxlZEZlYXR1cmVzUGVyTW9kZU1hcCA9IFdU
Rjo6SGFzaE1hcDxTZXNzaW9uTW9kZSwgTGlzdE9mRW5hYmxlZEZlYXR1cmVzLCBXVEY6OkludEhh
c2g8U2Vzc2lvbk1vZGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPFNlc3Npb25Nb2RlPj47
CisgICAgRW5hYmxlZEZlYXR1cmVzUGVyTW9kZU1hcCBtX2VuYWJsZWRGZWF0dXJlc01hcDsKIAog
cHJpdmF0ZToKICAgICBEZXZpY2VJZCBtX2lkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0veHIvb3BlbnhyL1BsYXRmb3JtWFIuY3BwCmluZGV4IGEwYTg1ZDIxMTNkNzFiZTIzMmFlNTNm
ZDdlM2Q5NWZhN2Q3MzgxODIuLjRhNjQ3MDUwZjk3ZTg2M2U1NmYyNTkyOGI1NWFkOWY2MjlhMmE4
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9y
bVhSLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1Y
Ui5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2lmIFVTRV9PUEVOWFIKICNpbmNsdWRlIDxvcGVu
eHIvb3BlbnhyLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAjZW5kaWYgLy8gVVNFX09QRU5YUgpAQCAtNjcsNyArNjgsNyBAQCBwdWJsaWM6CiAg
ICAgfkltcGwoKTsKIAogI2lmIFVTRV9PUEVOWFIKLSAgICB2b2lkIGNvbGxlY3RTdXBwb3J0ZWRT
ZXNzaW9uTW9kZXMoRGV2aWNlJiwgWHJTeXN0ZW1JZCk7CisgICAgT3B0aW9uYWw8VmVjdG9yPFNl
c3Npb25Nb2RlPj4gY29sbGVjdFN1cHBvcnRlZFNlc3Npb25Nb2RlcyhEZXZpY2UmLCBYclN5c3Rl
bUlkKTsKICAgICBYckluc3RhbmNlIG1faW5zdGFuY2UgeyBYUl9OVUxMX0hBTkRMRSB9OwogI2Vu
ZGlmIC8vIFVTRV9PUEVOWFIKIH07CkBAIC0xNTAsMTMgKzE1MSwxMyBAQCBJbnN0YW5jZTo6SW1w
bDo6fkltcGwoKQogCiAjaWYgVVNFX09QRU5YUgogCi12b2lkIEluc3RhbmNlOjpJbXBsOjpjb2xs
ZWN0U3VwcG9ydGVkU2Vzc2lvbk1vZGVzKERldmljZSYgZGV2aWNlLCBYclN5c3RlbUlkIHN5c3Rl
bUlkKQorT3B0aW9uYWw8VmVjdG9yPFNlc3Npb25Nb2RlPj4gSW5zdGFuY2U6OkltcGw6OmNvbGxl
Y3RTdXBwb3J0ZWRTZXNzaW9uTW9kZXMoRGV2aWNlJiBkZXZpY2UsIFhyU3lzdGVtSWQgc3lzdGVt
SWQpCiB7CiAgICAgdWludDMyX3Qgdmlld0NvbmZpZ3VyYXRpb25Db3VudDsKICAgICBYclJlc3Vs
dCByZXN1bHQgPSB4ckVudW1lcmF0ZVZpZXdDb25maWd1cmF0aW9ucyhtX2luc3RhbmNlLCBzeXN0
ZW1JZCwgMCwgJnZpZXdDb25maWd1cmF0aW9uQ291bnQsIG51bGxwdHIpOwogICAgIGlmIChyZXN1
bHQgIT0gWFJfU1VDQ0VTUykgewogICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmll
d0NvbmZpZ3VyYXRpb25zKCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1f
aW5zdGFuY2UpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgWHJWaWV3Q29uZmlndXJhdGlvblR5cGUgdmll
d0NvbmZpZ3VyYXRpb25zW3ZpZXdDb25maWd1cmF0aW9uQ291bnRdOwpAQCAtMTY0LDIzICsxNjUs
MjMgQEAgdm9pZCBJbnN0YW5jZTo6SW1wbDo6Y29sbGVjdFN1cHBvcnRlZFNlc3Npb25Nb2RlcyhE
ZXZpY2UmIGRldmljZSwgWHJTeXN0ZW1JZCBzeXMKICAgICBpZiAocmVzdWx0ICE9IFhSX1NVQ0NF
U1MpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckVudW1lcmF0ZVZpZXdDb25maWd1cmF0aW9u
cygpOiBlcnJvciAlc1xuIiwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBtX2luc3RhbmNlKS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJ4ckVudW1lcmF0ZVZpZXdDb25maWd1
cmF0aW9ucygpOiBlcnJvciAlc1xuIiwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBtX2luc3RhbmNl
KS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgIH0KIAotICAgIERldmljZTo6TGlzdE9mU3VwcG9ydGVkTW9kZXMgc3VwcG9y
dGVkTW9kZXM7CisgICAgVmVjdG9yPFNlc3Npb25Nb2RlPiBzdXBwb3J0ZWRNb2RlczsKICAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgdmlld0NvbmZpZ3VyYXRpb25Db3VudDsgKytpKSB7CiAg
ICAgICAgIGF1dG8gdmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzID0gY3JlYXRlU3RydWN0dXJl
PFhyVmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzLCBYUl9UWVBFX1ZJRVdfQ09ORklHVVJBVElP
Tl9QUk9QRVJUSUVTPigpOwogICAgICAgICByZXN1bHQgPSB4ckdldFZpZXdDb25maWd1cmF0aW9u
UHJvcGVydGllcyhtX2luc3RhbmNlLCBzeXN0ZW1JZCwgdmlld0NvbmZpZ3VyYXRpb25zW2ldLCAm
dmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBYUl9T
VUNDRVNTKSB7CiAgICAgICAgICAgICBXVEZMb2dBbHdheXMoInhyR2V0Vmlld0NvbmZpZ3VyYXRp
b25Qcm9wZXJ0aWVzKCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5z
dGFuY2UpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgICAgICBpZiAodmlld0NvbmZpZ3Vy
YXRpb25Qcm9wZXJ0aWVzLnZpZXdDb25maWd1cmF0aW9uVHlwZSA9PSBYUl9WSUVXX0NPTkZJR1VS
QVRJT05fVFlQRV9QUklNQVJZX01PTk8pCiAgICAgICAgICAgICBzdXBwb3J0ZWRNb2Rlcy5hcHBl
bmQoU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZUFyKTsKICAgICAgICAgZWxzZSBpZiAodmlld0NvbmZp
Z3VyYXRpb25Qcm9wZXJ0aWVzLnZpZXdDb25maWd1cmF0aW9uVHlwZSA9PSBYUl9WSUVXX0NPTkZJ
R1VSQVRJT05fVFlQRV9QUklNQVJZX1NURVJFTykKICAgICAgICAgICAgIHN1cHBvcnRlZE1vZGVz
LmFwcGVuZChTZXNzaW9uTW9kZTo6SW1tZXJzaXZlVnIpOwogICAgIH0KLSAgICBkZXZpY2Uuc2V0
U3VwcG9ydGVkTW9kZXMoc3VwcG9ydGVkTW9kZXMpOworICAgIHJldHVybiBzdXBwb3J0ZWRNb2Rl
czsKIH0KIAogI2VuZGlmIC8vIFVTRV9PUEVOWFIKQEAgLTIxOCw3ICsyMTksMTQgQEAgdm9pZCBJ
bnN0YW5jZTo6ZW51bWVyYXRlSW1tZXJzaXZlWFJEZXZpY2VzKCkKICAgICB9CiAKICAgICBhdXRv
IGRldmljZSA9IG1ha2VVbmlxdWU8RGV2aWNlPigpOwotICAgIG1faW1wbC0+Y29sbGVjdFN1cHBv
cnRlZFNlc3Npb25Nb2RlcygqZGV2aWNlLCBzeXN0ZW1JZCk7CisgICAgYXV0byBzZXNzaW9uTW9k
ZXMgPSBtX2ltcGwtPmNvbGxlY3RTdXBwb3J0ZWRTZXNzaW9uTW9kZXMoKmRldmljZSwgc3lzdGVt
SWQpOworICAgIGlmIChzZXNzaW9uTW9kZXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBtb2RlIDog
c2Vzc2lvbk1vZGVzLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIC8vIFRPRE86IGZpbGwgaW4gZmVh
dHVyZXMKKyAgICAgICAgICAgIGRldmljZS0+c2V0RW5hYmxlZEZlYXR1cmVzKG1vZGUsIHsgfSk7
CisgICAgICAgIH0KKyAgICB9CisKICAgICBtX2ltbWVyc2l2ZVhSRGV2aWNlcy5hcHBlbmQoV1RG
TW92ZShkZXZpY2UpKTsKICNlbmRpZiAvLyBVU0VfT1BFTlhSCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL1dlYlhSVGVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L1dlYlhSVGVzdC5jcHAKaW5kZXggYjIwYTQzMzcyYjI0ZmY3ZGZjNmVhNWJhYTc5ZjVjYTU2ZWM1
NTIyOC4uYjQxNjdkYTAwMmYzYmU2OTZkOWE5NWY0NGUzM2Q0MTcwY2RmNjc4MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJYUlRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvV2ViWFJUZXN0LmNwcApAQCAtNTQsMTMgKzU0LDE0IEBAIHZvaWQgV2ViWFJU
ZXN0OjpzaW11bGF0ZURldmljZUNvbm5lY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgY29uc3QKICAgICAgICAgICAgIHNpbXVsYXRlZERldmljZS52aWV3cygpLmFwcGVuZCh2
aWV3LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKICAgICAgICAgfQogCisgICAgICAgIFZlY3RvcjxY
UlJlZmVyZW5jZVNwYWNlVHlwZT4gZmVhdHVyZXM7CiAgICAgICAgIGlmIChpbml0LnN1cHBvcnRl
ZEZlYXR1cmVzKSB7Ci0gICAgICAgICAgICBWZWN0b3I8WFJSZWZlcmVuY2VTcGFjZVR5cGU+IGZl
YXR1cmVzOwotICAgICAgICAgICAgZm9yIChhdXRvJiBmZWF0dXJlIDogaW5pdC5zdXBwb3J0ZWRG
ZWF0dXJlcy52YWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gcmVmZXJlbmNlU3Bh
Y2VUeXBlID0gcGFyc2VFbnVtZXJhdGlvbjxYUlJlZmVyZW5jZVNwYWNlVHlwZT4oKmNvbnRleHQu
ZXhlY1N0YXRlKCksIGZlYXR1cmUpKQotICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy5hcHBl
bmQocmVmZXJlbmNlU3BhY2VUeXBlLnZhbHVlKCkpOworICAgICAgICAgICAgaWYgKGF1dG8qIGds
b2JhbE9iamVjdCA9IGNvbnRleHQuZXhlY1N0YXRlKCkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KGF1dG8mIGZlYXR1cmUgOiBpbml0LnN1cHBvcnRlZEZlYXR1cmVzLnZhbHVlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGF1dG8gcmVmZXJlbmNlU3BhY2VUeXBlID0gcGFyc2VFbnVtZXJh
dGlvbjxYUlJlZmVyZW5jZVNwYWNlVHlwZT4oKmdsb2JhbE9iamVjdCwgZmVhdHVyZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy5hcHBlbmQocmVmZXJlbmNlU3BhY2VUeXBlLnZh
bHVlKCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNp
bXVsYXRlZERldmljZS5zZXRFbmFibGVkRmVhdHVyZXMoZmVhdHVyZXMpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGluaXQuYm91bmRzQ29vcmRpbmF0ZXMpIHsKQEAgLTg3LDcgKzg4LDkgQEAg
dm9pZCBXZWJYUlRlc3Q6OnNpbXVsYXRlRGV2aWNlQ29ubmVjdGlvbihTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgICAgICAgICAgaWYgKGluaXQuc3VwcG9ydHNJbW1l
cnNpdmUpCiAgICAgICAgICAgICAgICAgc3VwcG9ydGVkTW9kZXMuYXBwZW5kKFhSU2Vzc2lvbk1v
ZGU6OkltbWVyc2l2ZVZyKTsKICAgICAgICAgfQotICAgICAgICBzaW11bGF0ZWREZXZpY2Uuc2V0
U3VwcG9ydGVkTW9kZXMoc3VwcG9ydGVkTW9kZXMpOworCisgICAgICAgIGZvciAoYXV0byYgbW9k
ZSA6IHN1cHBvcnRlZE1vZGVzKQorICAgICAgICAgICAgc2ltdWxhdGVkRGV2aWNlLnNldEVuYWJs
ZWRGZWF0dXJlcyhtb2RlLCBmZWF0dXJlcyk7CiAKICAgICAgICAgbV9jb250ZXh0LT5yZWdpc3Rl
clNpbXVsYXRlZFhSRGV2aWNlRm9yVGVzdGluZyhzaW11bGF0ZWREZXZpY2UpOwogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
ODRhMmY2ZGZjN2FmZmY4YTZkZDMwZDNmMGZhNWQ0ZmIyNmFhMDI2OS4uNTNlODMxM2UxZmE5NTFl
NmQ5ZjZiMWU2ZTUyZTQ0MGMzN2U2NDdiMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA1
LTE0ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAg
IFtXZWJYUl0gSW1wbGVtZW50IHJlcXVlc3RTZXNzaW9uKCkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTg4OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vd3BlL1Rlc3RFeHBlY3RhdGlv
bnM6IEFkZGVkIHNldmVyYWwgcHJldmlvdXNseSBza2lwcGVkIHRlc3RzCisgICAgICAgIHRoYXQg
YXJlIG5vdyBwYXNzaW5nLgorCiAyMDIwLTA1LTE0ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5v
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gR2FyZGVuaW5nLCB1cGRhdGUgZXhwZWN0YXRp
b25zIGFmdGVyIHIyNjE2MDkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IDkwYmMy
MGEyOTk0YTMzMTZkMzBmNDRkNjNkOGIxMmFjZWY4NzdmNTIuLmY3ZmZmYTY4NmEzZjg1OTNlYjdh
ODM4M2RjNTdkYmE0NjFiY2I5YjIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE5IEBACisyMDIwLTA1LTE0ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtXZWJYUl0gSW1wbGVtZW50IHJlcXVlc3RTZXNzaW9uKCkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTg4OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX2ltbWVyc2l2ZS5odHRw
cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4
ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNpdmVfbm9fZ2VzdHVyZS5odHRwcy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRl
dmljZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNpdmVfdW5zdXBwb3J0ZWQuaHR0cHMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2Vf
cmVxdWVzdFNlc3Npb25fbm9fbW9kZS5odHRwcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9ub25f
aW1tZXJzaXZlX25vX2dlc3R1cmUuaHR0cHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25fb3B0aW9u
YWxGZWF0dXJlcy5odHRwcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9yZXF1aXJlZEZlYXR1cmVz
X3Vua25vd24uaHR0cHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZv
cm0tdGVzdHMvd2VieHIveHJTZXNzaW9uX2ZlYXR1cmVzX2RldmljZVN1cHBvcnQuaHR0cHMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAyMC0wNS0xMiAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWth
bGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IEBpc0NvbnN0cnVjdG9yIGJ5dGVj
b2RlIGludHJpbnNpYyBhbmQgYnl0ZWNvZGUgZm9yIHRoYXQKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVz
dFNlc3Npb25faW1tZXJzaXZlLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25f
aW1tZXJzaXZlLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNmQ5N2IyOTQ5MDQ4Nzc2
MjNhOTE2NmRkYmM1YTBmNjRlMmY0MzgyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vz
c2lvbl9pbW1lcnNpdmUuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorCitQQVNT
IFRlc3RzIHJlcXVlc3RTZXNzaW9uIHJlc29sdmVzIHdoZW4gc3VwcG9ydGVkIAorUEFTUyBUZXN0
cyByZXF1ZXN0U2Vzc2lvbiBhY2NlcHRzIFhSU2Vzc2lvbkluaXQgZGljdGlvbmFyeSAKK1BBU1Mg
VGVzdHMgcmVxdWVzdFNlc3Npb24gaWdub3JlcyB1bmtub3duIG9wdGlvbmFsRmVhdHVyZXMgCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25faW1tZXJzaXZlX25vX2dlc3R1cmUuaHR0cHMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNpdmVfbm9fZ2VzdHVyZS5odHRw
cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjc5NjNmYTlhN2M2NDI0ZGFmOTYyYTdjZDNiMzU1
ZTUzNDExNmZkNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25faW1tZXJzaXZl
X25vX2dlc3R1cmUuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIFJl
cXVlc3RpbmcgaW1tZXJzaXZlIHNlc3Npb24gb3V0c2lkZSBvZiBhIHVzZXIgZ2VzdHVyZSByZWpl
Y3RzIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX2ltbWVyc2l2ZV91bnN1cHBvcnRl
ZC5odHRwcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX2ltbWVyc2l2ZV91bnN1cHBv
cnRlZC5odHRwcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ5MDM2Nzk5YTU2NzRhMjM1Y2Nj
Njk4YTg0YjdmOGE2MjliZDRkMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25f
aW1tZXJzaXZlX3Vuc3VwcG9ydGVkLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAK
KworUEFTUyBSZXF1ZXN0aW5nIGFuIGltbWVyc2l2ZSBzZXNzaW9uIHdoZW4gdW5zdXBwb3J0ZWQg
cmVqZWN0cyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9ub19tb2RlLmh0dHBzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25fbm9fbW9kZS5odHRwcy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjBmZDFiNmFmZGNiNGRlZWI3YTU0ZjNhNjNjMWM1MGVjYjdhNjNiYQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25fbm9fbW9kZS5odHRwcy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgUmVxdWVzdGluZyBhIHNlc3Npb24gd2l0aCBubyBt
b2RlIHJlamVjdHMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25fbm9uX2ltbWVyc2l2
ZV9ub19nZXN0dXJlLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25fbm9uX2lt
bWVyc2l2ZV9ub19nZXN0dXJlLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2MyOTZl
ODA4YzUyODY3MGM3NDVmZjA3OGUyMTVkMjk2MGJiN2IyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9y
ZXF1ZXN0U2Vzc2lvbl9ub25faW1tZXJzaXZlX25vX2dlc3R1cmUuaHR0cHMtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIFJlcXVlc3Rpbmcgbm9uLWltbWVyc2l2ZSBzZXNzaW9u
IG91dHNpZGUgb2YgYSB1c2VyIGdlc3R1cmUgc3VjY2VlZHMgCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVx
dWVzdFNlc3Npb25fb3B0aW9uYWxGZWF0dXJlcy5odHRwcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVl
c3RTZXNzaW9uX29wdGlvbmFsRmVhdHVyZXMuaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmRhMmYyMjUzNDlhMjg2MDBjOGY3MzVmOTE0ZjdlYTVkYTc2MWY0NjkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hy
RGV2aWNlX3JlcXVlc3RTZXNzaW9uX29wdGlvbmFsRmVhdHVyZXMuaHR0cHMtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsNiBAQAorCitQQVNTIFRlc3RzIHJlcXVlc3RTZXNzaW9uIGFjY2VwdHMgWFJT
ZXNzaW9uSW5pdCBkaWN0aW9uYXJ5IAorUEFTUyBUZXN0cyByZXF1ZXN0U2Vzc2lvbiBhY2NlcHRz
IFhSU2Vzc2lvbkluaXQgZGljdGlvbmFyeSB3aXRoIGVtcHR5IGZlYXR1cmUgbGlzdHMgCitQQVNT
IFRlc3RzIHJlcXVlc3RTZXNzaW9uIGlnbm9yZXMgdW5rbm93biBzdHJpbmdzIGluIG9wdGlvbmFs
RmVhdHVyZXMgCitQQVNTIFRlc3RzIHJlcXVlc3RTZXNzaW9uIGlnbm9yZXMgdW5rbm93biBvYmpl
Y3RzIGluIG9wdGlvbmFsRmVhdHVyZXMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25f
cmVxdWlyZWRGZWF0dXJlc191bmtub3duLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNl
c3Npb25fcmVxdWlyZWRGZWF0dXJlc191bmtub3duLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zOGEyOGE4OTZmYzEzZDIzNmM0YjZlNTE5NGU2YzYzNjhiOWFjZTdmCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4
ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9yZXF1aXJlZEZlYXR1cmVzX3Vua25vd24uaHR0cHMt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIFRlc3RzIHJlcXVlc3RTZXNzaW9u
IHJlamVjdHMgZm9yIHVua25vd24gcmVxdWlyZWRGZWF0dXJlcyAKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25f
ZmVhdHVyZXNfZGV2aWNlU3VwcG9ydC5odHRwcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyU2Vzc2lvbl9mZWF0dXJlc19k
ZXZpY2VTdXBwb3J0Lmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjdlYTQ2ZTBjZjc0
NWU2OWY1ZDQ2MjAwNWJlMWY3NTc0MTg0MThkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fZmVhdHVy
ZXNfZGV2aWNlU3VwcG9ydC5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BB
U1MgSW1tZXJzaXZlIFhSU2Vzc2lvbiByZXF1ZXN0cyB3aXRoIG5vIHN1cHBvcnRlZCBkZXZpY2Ug
c2hvdWxkIHJlamVjdCAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd3BlL1Rl
c3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9u
cwppbmRleCAxZTViNzZhZmE3MWVhNWJkODUxNTA1ZjFiZjhiZGY3YmZiNzM0OTZjLi5hY2Q2NGFh
NjY2YjkxODlhZDFmMWI2NzBiNzQ2Y2IwZjYxYTQ5YmY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93cGUvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTAyMiw2ICsxMDIyLDE0IEBAIHdlYmtpdC5vcmcv
Yi8yMDk4NTkgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci9pZGxoYXJuZXNz
Lmh0dHBzLndpbmRvCiB3ZWJraXQub3JnL2IvMjA5ODU5IGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvd2VieHIveHJEZXZpY2VfaXNTZXNzaW9uU3VwcG9ydGVkX2lubGluZS5odHRwcy5o
dG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMjA5ODU5IGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvd2VieHIveHJEZXZpY2VfaXNTZXNzaW9uU3VwcG9ydGVkX2ltbWVyc2l2ZS5odHRw
cy5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMjA5ODU5IGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfaXNTZXNzaW9uU3VwcG9ydGVkX2ltbWVyc2l2ZV91
bnN1cHBvcnRlZC5odHRwcy5odG1sIFsgUGFzcyBdCit3ZWJraXQub3JnL2IvMjA5ODU5IGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25f
aW1tZXJzaXZlLmh0dHBzLmh0bWwgWyBQYXNzIF0KK3dlYmtpdC5vcmcvYi8yMDk4NTkgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9p
bW1lcnNpdmVfbm9fZ2VzdHVyZS5odHRwcy5odG1sIFsgUGFzcyBdCit3ZWJraXQub3JnL2IvMjA5
ODU5IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVz
dFNlc3Npb25faW1tZXJzaXZlX3Vuc3VwcG9ydGVkLmh0dHBzLmh0bWwgWyBQYXNzIF0KK3dlYmtp
dC5vcmcvYi8yMDk4NTkgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRl
dmljZV9yZXF1ZXN0U2Vzc2lvbl9ub19tb2RlLmh0dHBzLmh0bWwgWyBQYXNzIF0KK3dlYmtpdC5v
cmcvYi8yMDk4NTkgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmlj
ZV9yZXF1ZXN0U2Vzc2lvbl9ub25faW1tZXJzaXZlX25vX2dlc3R1cmUuaHR0cHMuaHRtbCBbIFBh
c3MgXQord2Via2l0Lm9yZy9iLzIwOTg1OSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX29wdGlvbmFsRmVhdHVyZXMuaHR0cHMuaHRt
bCBbIFBhc3MgXQord2Via2l0Lm9yZy9iLzIwOTg1OSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX3JlcXVpcmVkRmVhdHVyZXNfdW5r
bm93bi5odHRwcy5odG1sIFsgUGFzcyBdCit3ZWJraXQub3JnL2IvMjA5ODU5IGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJTZXNzaW9uX2ZlYXR1cmVzX2RldmljZVN1cHBv
cnQuaHR0cHMuaHRtbCBbIFBhc3MgXQogCiAjIFBhc3Npbmcgc2luY2UgcjI1OTAwNi4KIGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL2FsaWdubWVudC9zZWxmLWJh
c2VsaW5lL2dyaWQtc2VsZi1iYXNlbGluZS1jaGFuZ2VzLWdyaWQtYXJlYS1zaXplLTAxMC5odG1s
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399656</attachid>
            <date>2020-05-18 10:36:37 -0700</date>
            <delta_ts>2020-05-19 00:02:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211888-20200518193634.patch</filename>
            <type>text/plain</type>
            <size>55512</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxNjkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGU4NmI2NjExYzFlMzcz
YzhhZmIzZGI2NmIyYWQ3ODE5NjlhZDcwZS4uOTU5ZjY4MmZjOGNiMDBhYWRiODk1Yjg3OWM1ZjAw
NjMzYjY1OTdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIwLTA1LTE0ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXZWJYUl0g
SW1wbGVtZW50IHJlcXVlc3RTZXNzaW9uKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMTg4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIHByZWxpbWluYXIgaW1wbGVtZW50
YXRpb24gb2YgdGhlIHJlcXVlc3RTZXNzaW9uKCkKKyAgICAgICAgQVBJIHVzZWQgdG8gZ2V0IGEg
V2ViWFJTZXNzaW9uIGZyb20gdGhlIFVBLiBJdCBpbmNsdWRlcyBhIGZhaXJseSBnb29kCisgICAg
ICAgIGFtb3VudCBvZiBjaGVja3MgdG8gdmVyaWZ5IHRoYXQgdGhlIHJlcXVlc3QgY2FuIGJlIHNh
dGlzZmllZCBnaXZlbiB0aGUKKyAgICAgICAgZGV2aWNlJ3MgZW5hYmxlZCBmZWF0dXJlcyBwZXIg
c2Vzc2lvbiBtb2Rlcy4gVGhlIHNwZWNzIGFsc28gZGVzY3JpYmUgaG93CisgICAgICAgIHRvIHJl
cXVlc3QgcGVyc21pc3Npb24gZm9yIHNvbWUgYWN0aW9ucyB1c2luZyB0aGUgUGVybWlzc2lvbnMg
QVBJIHdoaWNoCisgICAgICAgIFdlYktpdCBkb2VzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50LiBU
aGF0IHNob3VsZCBiZSBkb25lIGluIGEgZm9sbG93IHVwCisgICAgICAgIHBhdGNoIHBlcmhhcHMg
dXNpbmcgYSBzaW1pbGFyIGFwcHJvYWNoIHRvIG90aGVyIEFQSXMgYXMgR2VvbG9jYXRpb24gZm9y
CisgICAgICAgIGV4YW1wbGUuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gZ2V0IHNvbWUgb2YgdGhl
IHJlcXVlc3RTZXNzaW9uKCkgdGVzdHMgcGFzc2luZyB0aGUgc2Vzc2lvbgorICAgICAgICBmaW5h
bGl6YXRpb24gKHNodXRkb3duKSBoYWQgdG8gYmUgaW1wbGVtZW50ZWQgdG9vLgorCisgICAgICAg
IFNldmVyYWwgdGVzdHMgd2hlcmUgdW5za2lwcGVkIGZvciBXUEUgcG9ydCBhcyB0aGV5J3JlIG5v
dyBwYXNzaW5nLgorCisgICAgICAgICogTW9kdWxlcy93ZWJ4ci9XZWJYUlJlbmRlclN0YXRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlhSUmVuZGVyU3RhdGU6OmNyZWF0ZSk6IFBhc3MgWFJT
ZXNzaW9uTW9kZSBhcyBhcmd1bWVudAorICAgICAgICBpbnN0ZWFkIG9mIGEgV2ViWFJTZXNzaW9u
LgorICAgICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJSZW5kZXJTdGF0ZS5oOiBEaXR0by4KKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJYUlNlc3Npb246OmNyZWF0ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJT
ZXNzaW9uOjpXZWJYUlNlc3Npb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlhSU2Vz
c2lvbjo6cmVuZGVyU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9u
OjppbnB1dFNvdXJjZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjpz
aHV0ZG93bik6IFNodXRkb3duIHByb2Nlc3MgY2FsbGVkIG9uIHNlc3Npb24gZW5kLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViWFJTZXNzaW9uOjplbmQpOiBJbXBsZW1lbnRlZCBzZXNzaW9uIGVuZGlu
Zy4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oOiBBZGRlZCBjcmVhdGUo
KSBhbmQgcHJpdmF0ZSBjb25zdHJ1Y3Rvci4gRml4ZWQgc29tZSBuYW1pbmcuCisgICAgICAgICog
TW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlN5
c3RlbTo6RHVtbXlJbmxpbmVEZXZpY2U6OkR1bW15SW5saW5lRGV2aWNlKTogQ29udHJ1Y3RvciBm
b3IgdGhlCisgICAgICAgIGR1bW15IGlubGluZSBkZXZpY2UuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJYUlN5c3RlbTo6ZW5zdXJlSW1tZXJzaXZlWFJEZXZpY2VJc1NlbGVjdGVkKTogVXNlIGEgY291
bnRlciBpbnN0ZWFkIG9mIGEgYm9vbGVhbgorICAgICAgICB0byB0cmFjayB0ZXN0aW5nIGRldmlj
ZXMgYXMgdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIDEuCisgICAgICAgIChXZWJDb3JlOjpXZWJY
UlN5c3RlbTo6b2J0YWluQ3VycmVudERldmljZSk6IEltcGxlbWVudGVkIGZyb20gc3BlY3MgdGV4
dC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlhSU3lzdGVtOjppbW1lcnNpdmVTZXNzaW9uUmVxdWVz
dElzQWxsb3dlZEZvckdsb2JhbE9iamVjdCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViWFJTeXN0ZW06OmlubGluZVNlc3Npb25SZXF1ZXN0SXNBbGxvd2VkRm9yR2xvYmFsT2Jq
ZWN0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJYUlN5c3RlbTo6cmVzb2x2
ZVJlcXVlc3RlZEZlYXR1cmVzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJY
UlN5c3RlbTo6aXNYUlBlcm1pc3Npb25HcmFudGVkIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJYUlN5c3RlbTo6cmVxdWVzdFNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OldlYlhSU3lzdGVtOjpyZWdpc3RlclNpbXVsYXRlZFhSRGV2aWNlRm9yVGVzdGluZyk6
IFVzZSBhIGNvdW50ZXIgaW5zdGVhZCBvZiBhIGJvb2wuCisgICAgICAgIChXZWJDb3JlOjpXZWJY
UlN5c3RlbTo6dW5yZWdpc3RlclNpbXVsYXRlZFhSRGV2aWNlRm9yVGVzdGluZyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViWFJTeXN0ZW06OnNlc3Npb25FbmRlZCk6IEFkZGVkLCB1c2Vk
IGJ5IHNlc3Npb25zIHRvIG5vdGlmeSB0aGUgWFJTeXN0ZW0uCisgICAgICAgICogTW9kdWxlcy93
ZWJ4ci9XZWJYUlN5c3RlbS5oOgorICAgICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0u
aWRsOiBDYWxsIHJlcXVlc3RTZXNzaW9uIHdpdGggRG9jdW1lbnQuCisgICAgICAgICogZG9tL1Rh
c2tTb3VyY2UuaDogQWRkZWQgYSBXZWJYUiB0YXNrIHNvdXJjZS4KKyAgICAgICAgKiBwbGF0Zm9y
bS94ci9QbGF0Zm9ybVhSLmg6IFNwZWNzIHN0YXRlIHRoYXQgZGV2aWNlcyBoYXZlIGEgbGlzdCBv
ZiBlbmFibGVkIGZlYXR1cmVzIHBlciBzZXNzaW9uCisgICAgICAgIG1vZGUgc28gc3RvcmUgdGhl
bSBpbiBhIGhhc2htYXAgaW5zdGVhZCBvZiBpbiBhIFZlY3Rvci4KKyAgICAgICAgKFBsYXRmb3Jt
WFI6OkRldmljZTo6c3VwcG9ydHMgY29uc3QpOiBVc2UgdGhlIG5ldyBIYXNobWFwIG9mIHNlc3Np
b24gbW9kZXMuCisgICAgICAgIChQbGF0Zm9ybVhSOjpEZXZpY2U6OnNldEVuYWJsZWRGZWF0dXJl
cyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1YUjo6RGV2aWNlOjplbmFibGVkRmVhdHVyZXMg
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtWFI6OkRldmljZTo6c2V0U3VwcG9ydGVk
TW9kZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhS
LmNwcDoKKyAgICAgICAgKFBsYXRmb3JtWFI6Okluc3RhbmNlOjpJbXBsOjpjb2xsZWN0U3VwcG9y
dGVkU2Vzc2lvbk1vZGVzKTogUmV0dXJuIHNlc3Npb24gbW9kZXMgaWYgYW55LgorICAgICAgICAo
UGxhdGZvcm1YUjo6SW5zdGFuY2U6OmVudW1lcmF0ZUltbWVyc2l2ZVhSRGV2aWNlcyk6IEZpbGwg
aW4gZmVhdHVyZXMgcGVyIHNlc3Npb24gbW9kZS4KKyAgICAgICAgKiB0ZXN0aW5nL1dlYlhSVGVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUlRlc3Q6OnNpbXVsYXRlRGV2aWNlQ29ubmVj
dGlvbik6IEZpbGwgaW4gZmVhdHVyZXMgcGVyIHNlc3Npb24gbW9kZS4KKwogMjAyMC0wNS0xNCAg
U2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
eHIvV2ViWFJJbnB1dFNvdXJjZUFycmF5LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhy
L1dlYlhSSW5wdXRTb3VyY2VBcnJheS5oCmluZGV4IGY0MjFmMDI5ZTY0Y2IwOGEyYmI5YjZhNjU2
ODVkYTBkNTk4N2QwMjUuLjU0NThiMzU3OTAwMWU3YWVlYjQ0Y2Y4NmNkMDgxY2RmMDNiMmJhMGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJj
ZUFycmF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUklucHV0U291
cmNlQXJyYXkuaApAQCAtMzksNiArMzksOSBAQCBjbGFzcyBXZWJYUklucHV0U291cmNlQXJyYXkg
OiBwdWJsaWMgUmVmQ291bnRlZDxXZWJYUklucHV0U291cmNlQXJyYXk+IHsKIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICBXZWJYUklucHV0U291cmNlKiBpdGVtKHVu
c2lnbmVkKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBXZWJYUklucHV0U291cmNlQXJyYXkoKTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VieHIvV2ViWFJSZW5kZXJTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnhyL1dlYlhSUmVuZGVyU3RhdGUuY3BwCmluZGV4IDA2Nzg5ZjgxOTI3MWU5MTU2NTI2
OWRhM2YzYjk2MWQzM2Q5OTc2YWUuLmMwZjg5NWIyYjFjNTk2NzZiZGNmNTgzNWMwOGY0YmIwNmUw
ODQ3YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJSZW5k
ZXJTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlJlbmRl
clN0YXRlLmNwcApAQCAtMzcsMjYgKzM3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFdlYlhSUmVuZGVyU3RhdGUpOwogCi1SZWY8V2ViWFJS
ZW5kZXJTdGF0ZT4gV2ViWFJSZW5kZXJTdGF0ZTo6Y3JlYXRlKGNvbnN0IFdlYlhSU2Vzc2lvbiYg
c2Vzc2lvbikKK1JlZjxXZWJYUlJlbmRlclN0YXRlPiBXZWJYUlJlbmRlclN0YXRlOjpjcmVhdGUo
WFJTZXNzaW9uTW9kZSBtb2RlKQogewotICAgIC8vIFdoZW4gYW4gWFJSZW5kZXJTdGF0ZSBvYmpl
Y3QgaXMgY3JlYXRlZCBmb3IgYW4gWFJTZXNzaW9uIHNlc3Npb24sIHRoZSB1c2VyIGFnZW50IE1V
U1QgaW5pdGlhbGl6ZSB0aGUgcmVuZGVyIHN0YXRlIGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBz
dGVwczoKLSAgICAvLyAgIDEuIExldCBzdGF0ZSBiZSB0aGUgbmV3bHkgY3JlYXRlZCBYUlJlbmRl
clN0YXRlIG9iamVjdC4KLQotICAgIC8vICAgMi4gSW5pdGlhbGl6ZSBzdGF0ZeKAmXMgZGVwdGhO
ZWFyIHRvIDAuMS4KLSAgICAvLyAgIDMuIEluaXRpYWxpemUgc3RhdGXigJlzIGRlcHRoRmFyIHRv
IDEwMDAuMC4KLSAgICAvLyAoRGVmYXVsdC1pbml0aWFsaXplZCBpbiB0aGUgWFJSZW5kZXJTdGF0
ZSBjbGFzcyBkZWZpbml0aW9uLikKLQotICAgIC8vICAgNC4gSWYgc2Vzc2lvbiBpcyBhbiBpbW1l
cnNpdmUgc2Vzc2lvbiwgaW5pdGlhbGl6ZSBzdGF0ZeKAmXMgaW5saW5lVmVydGljYWxGaWVsZE9m
VmlldyB0byBudWxsLgotICAgIC8vICAgNS4gRWxzZSBpbml0aWFsaXplIHN0YXRl4oCZcyBpbmxp
bmVWZXJ0aWNhbEZpZWxkT2ZWaWV3IHRvIFBJICogMC41LgotICAgIC8vIEZJWE1FOiAiaW1tZXJz
aXZlIHNlc3Npb24iIHN1cHBvcnQKLSAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbik7Ci0gICAgT3B0
aW9uYWw8ZG91YmxlPiBpbmxpbmVWZXJ0aWNhbEZpZWxkT2ZWaWV3IHsgcGlPdmVyVHdvRG91Ymxl
IH07Ci0KLSAgICAvLyAgIDYuIEluaXRpYWxpemUgc3RhdGXigJlzIGJhc2VMYXllciB0byBudWxs
LgotICAgIC8vICAgNy4gSW5pdGlhbGl6ZSBzdGF0ZeKAmXMgb3V0cHV0Q29udGV4dCB0byBudWxs
LgotICAgIC8vIChJbml0aWFsaXplZCB0byBudWxsIGJ5IGRlZmF1bHQuKQotCi0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViWFJSZW5kZXJTdGF0ZShXVEZNb3ZlKGlubGluZVZlcnRpY2FsRmll
bGRPZlZpZXcpKSk7CisgICAgLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4
ci8jaW5pdGlhbGl6ZS10aGUtcmVuZGVyLXN0YXRlCisgICAgLy8gZGVwdGhOZWFyLCBkZXB0aEZh
ciBhbmQgYmFzZUxheWVyIGFyZSBpbml0aWFsaXplZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbgor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlhSUmVuZGVyU3RhdGUobW9kZSA9PSBYUlNlc3Np
b25Nb2RlOjpJbmxpbmUgPyBtYWtlT3B0aW9uYWwocGlPdmVyVHdvRG91YmxlKSA6IFdURjo6bnVs
bG9wdCkpOwogfQogCiBXZWJYUlJlbmRlclN0YXRlOjpXZWJYUlJlbmRlclN0YXRlKE9wdGlvbmFs
PGRvdWJsZT4mJiBpbmxpbmVWZXJ0aWNhbEZpZWxkT2ZWaWV3KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlJlbmRlclN0YXRlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnhyL1dlYlhSUmVuZGVyU3RhdGUuaAppbmRleCAzZjI5MmFjMWQ2ODFhNDY5
ODc2MDE4MTg5YTg3YTk2ZjFlZGJhYzdkLi45NWU5NjU2YjEyMmJiMzNhYzRjNjg5ZTBhYTgyMDc2
ZWY0N2M4Y2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhS
UmVuZGVyU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSUmVu
ZGVyU3RhdGUuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQlhSKQogCisjaW5j
bHVkZSAiWFJTZXNzaW9uTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CkBAIC0zNywxMiArMzgs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBXZWJYUldlYkdMTGF5ZXI7CiBzdHJ1
Y3QgWFJSZW5kZXJTdGF0ZUluaXQ7Ci1jbGFzcyBXZWJYUlNlc3Npb247CiAKIGNsYXNzIFdlYlhS
UmVuZGVyU3RhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJYUlJlbmRlclN0YXRlPiB7CiAgICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChXZWJYUlJlbmRlclN0YXRlKTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFdlYlhSUmVuZGVyU3RhdGU+IGNyZWF0ZShjb25zdCBXZWJYUlNlc3Npb24mKTsK
KyAgICBzdGF0aWMgUmVmPFdlYlhSUmVuZGVyU3RhdGU+IGNyZWF0ZShYUlNlc3Npb25Nb2RlKTsK
ICAgICB+V2ViWFJSZW5kZXJTdGF0ZSgpOwogCiAgICAgZG91YmxlIGRlcHRoTmVhcigpIGNvbnN0
OwpAQCAtNTEsMTQgKzUxLDE1IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8V2ViWFJXZWJHTExheWVy
PiBiYXNlTGF5ZXIoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBXZWJYUlJlbmRlclN0YXRlKE9w
dGlvbmFsPGRvdWJsZT4mJik7Ci0gICAgV2ViWFJSZW5kZXJTdGF0ZShjb25zdCBYUlJlbmRlclN0
YXRlSW5pdCYpOworICAgIGV4cGxpY2l0IFdlYlhSUmVuZGVyU3RhdGUoT3B0aW9uYWw8ZG91Ymxl
PiYmIGZpZWxkT2ZWaWV3KTsKKyAgICBleHBsaWNpdCBXZWJYUlJlbmRlclN0YXRlKGNvbnN0IFhS
UmVuZGVyU3RhdGVJbml0Jik7CiAKKyAgICAvLyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHVi
LmlvL3dlYnhyLyNpbml0aWFsaXplLXRoZS1yZW5kZXItc3RhdGUKICAgICBzdHJ1Y3QgewotICAg
ICAgICBkb3VibGUgbmVhciB7IDAuMSB9OwotICAgICAgICBkb3VibGUgZmFyIHsgMTAwMCB9Owor
ICAgICAgICBkb3VibGUgbmVhciB7IDAuMSB9OyAvLyBpbiBtZXRlcnMKKyAgICAgICAgZG91Ymxl
IGZhciB7IDEwMDAgfTsgLy8gaW4gbWV0ZXJzCiAgICAgfSBtX2RlcHRoOwotICAgIE9wdGlvbmFs
PGRvdWJsZT4gbV9pbmxpbmVWZXJ0aWNhbEZpZWxkT2ZWaWV3OworICAgIE9wdGlvbmFsPGRvdWJs
ZT4gbV9pbmxpbmVWZXJ0aWNhbEZpZWxkT2ZWaWV3OyAvLyBpbiByYWRpYW5zCiAgICAgUmVmUHRy
PFdlYlhSV2ViR0xMYXllcj4gbV9iYXNlTGF5ZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5jcHAKaW5kZXggZWQzNTYyZjJlM2Y2YzhkODg5NDNi
MDkxMzhmNzY2ODcwMjE1N2EyZi4uYTQzNTgzNzJkNzkxOTZjZmRhNWI2MjYyOTI1ZDY2MWVmZjI3
YjA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Np
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmNw
cApAQCAtMjgsMTIgKzI4LDMxIEBACiAKICNpZiBFTkFCTEUoV0VCWFIpCiAKKyNpbmNsdWRlICJX
ZWJYUlN5c3RlbS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFdlYlhSU2Vzc2lv
bik7CiAKK1JlZjxXZWJYUlNlc3Npb24+IFdlYlhSU2Vzc2lvbjo6Y3JlYXRlKERvY3VtZW50JiBk
b2N1bWVudCwgUmVmPFdlYlhSU3lzdGVtPiYmIHN5c3RlbSwgWFJTZXNzaW9uTW9kZSBtb2RlLCBX
ZWFrUHRyPFBsYXRmb3JtWFI6OkRldmljZT4mJiBkZXZpY2UpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViWFJTZXNzaW9uKGRvY3VtZW50LCBXVEZNb3ZlKHN5c3RlbSksIG1vZGUsIFdU
Rk1vdmUoZGV2aWNlKSkpOworfQorCitXZWJYUlNlc3Npb246OldlYlhSU2Vzc2lvbihEb2N1bWVu
dCYgZG9jdW1lbnQsIFJlZjxXZWJYUlN5c3RlbT4mJiBzeXN0ZW0sIFhSU2Vzc2lvbk1vZGUgbW9k
ZSwgV2Vha1B0cjxQbGF0Zm9ybVhSOjpEZXZpY2U+JiYgZGV2aWNlKQorICAgIDogQWN0aXZlRE9N
T2JqZWN0KCZkb2N1bWVudCkKKyAgICAsIG1feHJTeXN0ZW0oV1RGTW92ZShzeXN0ZW0pKQorICAg
ICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX2RldmljZShXVEZNb3ZlKGRldmljZSkpCisgICAgLCBt
X2FjdGl2ZVJlbmRlclN0YXRlKFdlYlhSUmVuZGVyU3RhdGU6OmNyZWF0ZShtb2RlKSkKK3sKKyAg
ICAvLyBUT0RPOiBJZiBubyBvdGhlciBmZWF0dXJlcyBvZiB0aGUgdXNlciBhZ2VudCBoYXZlIGRv
bmUgc28gYWxyZWFkeSwKKyAgICAvLyBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgcGxhdGZvcm0tc3Bl
Y2lmaWMgc3RlcHMgdG8gaW5pdGlhbGl6ZSB0aGUgZGV2aWNl4oCZcworICAgIC8vIHRyYWNraW5n
IGFuZCByZW5kZXJpbmcgY2FwYWJpbGl0aWVzLCBpbmNsdWRpbmcgc2hvd2luZyBhbnkgbmVjZXNz
YXJ5CisgICAgLy8gaW5zdHJ1Y3Rpb25zIHRvIHRoZSB1c2VyLgorfQorCiBXZWJYUlNlc3Npb246
On5XZWJYUlNlc3Npb24oKSA9IGRlZmF1bHQ7CiAKIFhSRW52aXJvbm1lbnRCbGVuZE1vZGUgV2Vi
WFJTZXNzaW9uOjplbnZpcm9ubWVudEJsZW5kTW9kZSgpIGNvbnN0CkBAIC00OCw3ICs2Nyw3IEBA
IFhSVmlzaWJpbGl0eVN0YXRlIFdlYlhSU2Vzc2lvbjo6dmlzaWJpbGl0eVN0YXRlKCkgY29uc3QK
IAogY29uc3QgV2ViWFJSZW5kZXJTdGF0ZSYgV2ViWFJTZXNzaW9uOjpyZW5kZXJTdGF0ZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuICptX3JlbmRlclN0YXRlOworICAgIHJldHVybiAqbV9hY3RpdmVS
ZW5kZXJTdGF0ZTsKIH0KIAogY29uc3QgV2ViWFJJbnB1dFNvdXJjZUFycmF5JiBXZWJYUlNlc3Np
b246OmlucHV0U291cmNlcygpIGNvbnN0CkBAIC03Myw4ICs5Miw0MSBAQCB2b2lkIFdlYlhSU2Vz
c2lvbjo6Y2FuY2VsQW5pbWF0aW9uRnJhbWUoaW50KQogewogfQogCi12b2lkIFdlYlhSU2Vzc2lv
bjo6ZW5kKEVuZFByb21pc2UmJikKKy8vIGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRodWIuaW8v
d2VieHIvI3NodXQtZG93bi10aGUtc2Vzc2lvbgordm9pZCBXZWJYUlNlc3Npb246OnNodXRkb3du
KCkKK3sKKyAgICAvLyAxLiBMZXQgc2Vzc2lvbiBiZSB0aGUgdGFyZ2V0IFhSU2Vzc2lvbiBvYmpl
Y3QuCisgICAgLy8gMi4gU2V0IHNlc3Npb24ncyBlbmRlZCB2YWx1ZSB0byB0cnVlLgorICAgIG1f
ZW5kZWQgPSB0cnVlOworCisgICAgLy8gMy4gSWYgdGhlIGFjdGl2ZSBpbW1lcnNpdmUgc2Vzc2lv
biBpcyBlcXVhbCB0byBzZXNzaW9uLCBzZXQgdGhlIGFjdGl2ZSBpbW1lcnNpdmUgc2Vzc2lvbiB0
byBudWxsLgorICAgIC8vIDQuIFJlbW92ZSBzZXNzaW9uIGZyb20gdGhlIGxpc3Qgb2YgaW5saW5l
IHNlc3Npb25zLgorICAgIG1feHJTeXN0ZW0tPnNlc3Npb25FbmRlZCh0aGlzKTsKKworICAgIC8v
IFRPRE86IGNvbXBsZXRlIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgIC8vIDUuIFJlamVjdCBhbnkg
b3V0c3RhbmRpbmcgcHJvbWlzZXMgcmV0dXJuZWQgYnkgc2Vzc2lvbiB3aXRoIGFuIEludmFsaWRT
dGF0ZUVycm9yLCBleGNlcHQgZm9yIGFueSBwcm9taXNlcyByZXR1cm5lZCBieSBlbmQoKS4KKyAg
ICAvLyA2LiBJZiBubyBvdGhlciBmZWF0dXJlcyBvZiB0aGUgdXNlciBhZ2VudCBhcmUgYWN0aXZl
bHkgdXNpbmcgdGhlbSwgcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IHBsYXRmb3JtLXNwZWNpZmljIHN0
ZXBzIHRvIHNodXQgZG93biB0aGUgZGV2aWNlJ3MgdHJhY2tpbmcgYW5kIHJlbmRlcmluZyBjYXBh
YmlsaXRpZXMuIFRoaXMgTVVTVCBpbmNsdWRlOgorICAgIC8vICA2LjEuIFJlbGVhc2luZyBleGNs
dXNpdmUgYWNjZXNzIHRvIHRoZSBYUiBkZXZpY2UgaWYgc2Vzc2lvbiBpcyBhbiBpbW1lcnNpdmUg
c2Vzc2lvbi4KKyAgICAvLyAgNi4yLiBEZWFsbG9jYXRpbmcgYW55IGdyYXBoaWNzIHJlc291cmNl
cyBhY3F1aXJlZCBieSBzZXNzaW9uIGZvciBwcmVzZW50YXRpb24gdG8gdGhlIFhSIGRldmljZS4K
KyAgICAvLyAgNi4zLiBQdXR0aW5nIHRoZSBYUiBkZXZpY2UgaW4gYSBzdGF0ZSBzdWNoIHRoYXQg
YSBkaWZmZXJlbnQgc291cmNlIG1heSBiZSBhYmxlIHRvIGluaXRpYXRlIGEgc2Vzc2lvbiB3aXRo
IHRoZSBzYW1lIGRldmljZSBpZiBzZXNzaW9uIGlzIGFuIGltbWVyc2l2ZSBzZXNzaW9uLgorICAg
IC8vIDcuIFF1ZXVlIGEgdGFzayB0aGF0IGZpcmVzIGFuIFhSU2Vzc2lvbkV2ZW50IG5hbWVkIGVu
ZCBvbiBzZXNzaW9uLgorfQorCisvLyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dl
YnhyLyNkb20teHJzZXNzaW9uLWVuZAordm9pZCBXZWJYUlNlc3Npb246OmVuZChFbmRQcm9taXNl
JiYgcHJvbWlzZSkKIHsKKyAgICAvLyAxLiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBQcm9taXNlLgor
ICAgIC8vIDIuIFNodXQgZG93biB0aGUgdGFyZ2V0IFhSU2Vzc2lvbiBvYmplY3QuCisgICAgc2h1
dGRvd24oKTsKKworICAgIC8vIDMuIFF1ZXVlIGEgdGFzayB0byBwZXJmb3JtIHRoZSBmb2xsb3dp
bmcgc3RlcHM6CisgICAgcXVldWVUYXNrS2VlcGluZ09iamVjdEFsaXZlKCp0aGlzLCBUYXNrU291
cmNlOjpXZWJYUiwgW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSAoKSBtdXRhYmxlIHsKKyAg
ICAgICAgLy8gMy4xIFdhaXQgdW50aWwgYW55IHBsYXRmb3JtLXNwZWNpZmljIHN0ZXBzIHJlbGF0
ZWQgdG8gc2h1dHRpbmcgZG93biB0aGUgc2Vzc2lvbiBoYXZlIGNvbXBsZXRlZC4KKyAgICAgICAg
Ly8gMy4yIFJlc29sdmUgcHJvbWlzZS4KKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7CisgICAg
fSk7CisKKyAgICAvLyA0LiBSZXR1cm4gcHJvbWlzZS4KIH0KIAogY29uc3QgY2hhciogV2ViWFJT
ZXNzaW9uOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnhyL1dlYlhSU2Vzc2lvbi5oCmluZGV4IGYwMTE1MDE5N2I2NzBkZTczMmU5NmYwZTA3
YjdjNjk2MDM1MGVhYzQuLjg5MzJhOTEyNzRlNmQwYmQ2YmRlNjQzMjYzNWFkYzUyNDM3NmE1NGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTZXNzaW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlNlc3Npb24uaApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIldlYlhSU3BhY2UuaCIKICNpbmNsdWRlICJYUkVudmlyb25t
ZW50QmxlbmRNb2RlLmgiCiAjaW5jbHVkZSAiWFJSZWZlcmVuY2VTcGFjZVR5cGUuaCIKKyNpbmNs
dWRlICJYUlNlc3Npb25Nb2RlLmgiCiAjaW5jbHVkZSAiWFJWaXNpYmlsaXR5U3RhdGUuaCIKICNp
bmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQ1LDYg
KzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBYUkZyYW1lUmVxdWVzdENhbGxi
YWNrOwogY2xhc3MgV2ViWFJSZWZlcmVuY2VTcGFjZTsKK2NsYXNzIFdlYlhSU3lzdGVtOwogc3Ry
dWN0IFhSUmVuZGVyU3RhdGVJbml0OwogCiBjbGFzcyBXZWJYUlNlc3Npb24gZmluYWwgOiBwdWJs
aWMgUmVmQ291bnRlZDxXZWJYUlNlc3Npb24+LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5l
RGF0YSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CkBAIC01Myw2ICs1NSw3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBSZXF1ZXN0UmVmZXJlbmNlU3BhY2VQcm9taXNlID0gRE9NUHJvbWlzZURlZmVy
cmVkPElETEludGVyZmFjZTxXZWJYUlJlZmVyZW5jZVNwYWNlPj47CiAgICAgdXNpbmcgRW5kUHJv
bWlzZSA9IERPTVByb21pc2VEZWZlcnJlZDx2b2lkPjsKIAorICAgIHN0YXRpYyBSZWY8V2ViWFJT
ZXNzaW9uPiBjcmVhdGUoRG9jdW1lbnQmLCBSZWY8V2ViWFJTeXN0ZW0+JiYsIFhSU2Vzc2lvbk1v
ZGUsIFdlYWtQdHI8UGxhdGZvcm1YUjo6RGV2aWNlPiYmKTsKICAgICB2aXJ0dWFsIH5XZWJYUlNl
c3Npb24oKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViWFJTZXNzaW9uPjo6cmVmOwpAQCAt
NzQsNiArNzcsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5kZWQ7IH0KIAogcHJpdmF0ZToKKyAgICBXZWJYUlNlc3Npb24oRG9jdW1lbnQmLCBSZWY8V2Vi
WFJTeXN0ZW0+JiYsIFhSU2Vzc2lvbk1vZGUsIFdlYWtQdHI8UGxhdGZvcm1YUjo6RGV2aWNlPiYm
KTsKKwogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRU
YXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBXZWJYUlNlc3Npb25FdmVu
dFRhcmdldEludGVyZmFjZVR5cGU7IH0KICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWN0aXZlRE9NT2Jq
ZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KQEAgLTg0LDExICs4OSwxOCBAQCBwcml2
YXRlOgogICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKIAorICAgIHZvaWQgc2h1dGRvd24oKTsKKwog
ICAgIFhSRW52aXJvbm1lbnRCbGVuZE1vZGUgbV9lbnZpcm9ubWVudEJsZW5kTW9kZTsKICAgICBY
UlZpc2liaWxpdHlTdGF0ZSBtX3Zpc2liaWxpdHlTdGF0ZTsKLSAgICBSZWZQdHI8V2ViWFJSZW5k
ZXJTdGF0ZT4gbV9yZW5kZXJTdGF0ZTsKICAgICBSZWZQdHI8V2ViWFJJbnB1dFNvdXJjZUFycmF5
PiBtX2lucHV0U291cmNlczsKICAgICBib29sIG1fZW5kZWQgeyBmYWxzZSB9OworCisgICAgUmVm
PFdlYlhSU3lzdGVtPiBtX3hyU3lzdGVtOworICAgIFhSU2Vzc2lvbk1vZGUgbV9tb2RlOworICAg
IFdlYWtQdHI8UGxhdGZvcm1YUjo6RGV2aWNlPiBtX2RldmljZTsKKyAgICBSZWZQdHI8V2ViWFJS
ZW5kZXJTdGF0ZT4gbV9hY3RpdmVSZW5kZXJTdGF0ZTsKKyAgICBSZWZQdHI8V2ViWFJSZW5kZXJT
dGF0ZT4gbV9wZW5kaW5nUmVuZGVyU3RhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lzdGVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uY3BwCmluZGV4IDk4
NDIyZWMwZDlmNGExNGQwNWJlYjZhMmZjM2Q4ZjAyNWRiMzY4ZTUuLmZlZDBiOTU1ODYyY2ZiN2Ni
OTgxYmI0ZDg1NmNkYjlkNGQ3ZDM5ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2VieHIvV2ViWFJTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
eHIvV2ViWFJTeXN0ZW0uY3BwCkBAIC0yOCwxNyArMjgsMzIgQEAKIAogI2lmIEVOQUJMRShXRUJY
UikKIAorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRmVhdHVyZVBvbGljeS5oIgorI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAi
SlNXZWJYUlNlc3Npb24uaCIKKyNpbmNsdWRlICJKU1hSUmVmZXJlbmNlU3BhY2VUeXBlLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1YUi5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5k
aWNhdG9yLmgiCiAjaW5jbHVkZSAiV2ViWFJTZXNzaW9uLmgiCisjaW5jbHVkZSAiWFJSZWZlcmVu
Y2VTcGFjZVR5cGUuaCIKKyNpbmNsdWRlICJYUlNlc3Npb25Jbml0LmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3QuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChXZWJYUlN5c3RlbSk7CiAKK1dlYlhSU3lzdGVt
OjpEdW1teUlubGluZURldmljZTo6RHVtbXlJbmxpbmVEZXZpY2UoKQoreworICAgIHNldEVuYWJs
ZWRGZWF0dXJlcyhYUlNlc3Npb25Nb2RlOjpJbmxpbmUsIHsgWFJSZWZlcmVuY2VTcGFjZVR5cGU6
OlZpZXdlciB9KTsKK30KKwogUmVmPFdlYlhSU3lzdGVtPiBXZWJYUlN5c3RlbTo6Y3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViWFJTeXN0ZW0oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpOwpA
QCAtNTYsOCArNzEsNyBAQCBXZWJYUlN5c3RlbTo6fldlYlhSU3lzdGVtKCkgPSBkZWZhdWx0Owog
dm9pZCBXZWJYUlN5c3RlbTo6ZW5zdXJlSW1tZXJzaXZlWFJEZXZpY2VJc1NlbGVjdGVkKCkKIHsK
ICAgICAvLyBEb24ndCBhc2sgcGxhdGZvcm0gY29kZSBmb3IgWFIgZGV2aWNlcywgd2UncmUgdXNp
bmcgc2ltdWxhdGVkIG9uZXMuCi0gICAgLy8gVE9ETzogc2hvdWxkIGJlIGhhdmUgYSBNb2NrUGxh
dGZvcm1YUiBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkID8KLSAgICBpZiAoVU5MSUtFTFkobV90ZXN0
aW5nTW9kZSkpCisgICAgaWYgKFVOTElLRUxZKG1fdGVzdGluZ0RldmljZXMpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAobV9hY3RpdmVJbW1lcnNpdmVEZXZpY2UpCkBAIC05Niw2ICsxMTAs
MjAgQEAgdm9pZCBXZWJYUlN5c3RlbTo6ZW5zdXJlSW1tZXJzaXZlWFJEZXZpY2VJc1NlbGVjdGVk
KCkKICAgICAvLyBUT0RPOiA5LiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBk
ZXZpY2VjaGFuZ2Ugb24gdGhlIGNvbnRleHQgb2JqZWN0LgogfQogCisKK1BsYXRmb3JtWFI6OkRl
dmljZSogV2ViWFJTeXN0ZW06Om9idGFpbkN1cnJlbnREZXZpY2UoWFJTZXNzaW9uTW9kZSBtb2Rl
LCBjb25zdCBKU0ZlYXR1cmVzQXJyYXkmIHJlcXVpcmVkRmVhdHVyZXMsIGNvbnN0IEpTRmVhdHVy
ZXNBcnJheSYgb3B0aW9uYWxGZWF0dXJlcykKK3sKKyAgICBpZiAobW9kZSA9PSBYUlNlc3Npb25N
b2RlOjpJbW1lcnNpdmVBciB8fCBtb2RlID09IFhSU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZVZyKSB7
CisgICAgICAgIGVuc3VyZUltbWVyc2l2ZVhSRGV2aWNlSXNTZWxlY3RlZCgpOworICAgICAgICBy
ZXR1cm4gbV9hY3RpdmVJbW1lcnNpdmVEZXZpY2UuZ2V0KCk7CisgICAgfQorICAgIGlmICghcmVx
dWlyZWRGZWF0dXJlcy5pc0VtcHR5KCkgfHwgIW9wdGlvbmFsRmVhdHVyZXMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gbV9pbmxpbmVYUkRldmljZS5nZXQoKTsKKworICAgIHJldHVybiAmbV9k
ZWZhdWx0SW5saW5lRGV2aWNlOworfQorCisKIC8vIGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRo
dWIuaW8vd2VieHIvI2RvbS14cnN5c3RlbS1pc3Nlc3Npb25zdXBwb3J0ZWQKIHZvaWQgV2ViWFJT
eXN0ZW06OmlzU2Vzc2lvblN1cHBvcnRlZChYUlNlc3Npb25Nb2RlIG1vZGUsIElzU2Vzc2lvblN1
cHBvcnRlZFByb21pc2UmJiBwcm9taXNlKQogewpAQCAtMTA2LDcgKzEzNCw3IEBAIHZvaWQgV2Vi
WFJTeXN0ZW06OmlzU2Vzc2lvblN1cHBvcnRlZChYUlNlc3Npb25Nb2RlIG1vZGUsIElzU2Vzc2lv
blN1cHBvcnRlZFByb21pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyAzLiBJZiB0
aGUgcmVxdWVzdGluZyBkb2N1bWVudOKAmXMgb3JpZ2luIGlzIG5vdCBhbGxvd2VkIHRvIHVzZSB0
aGUgInhyLXNwYXRpYWwtdHJhY2tpbmciIGZlYXR1cmUgcG9saWN5LAorICAgIC8vIDMuIElmIHRo
ZSByZXF1ZXN0aW5nIGRvY3VtZW50J3Mgb3JpZ2luIGlzIG5vdCBhbGxvd2VkIHRvIHVzZSB0aGUg
InhyLXNwYXRpYWwtdHJhY2tpbmciIGZlYXR1cmUgcG9saWN5LAogICAgIC8vICAgIHJlamVjdCBw
cm9taXNlIHdpdGggYSAiU2VjdXJpdHlFcnJvciIgRE9NRXhjZXB0aW9uIGFuZCByZXR1cm4gaXQu
CiAgICAgYXV0byBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PihzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwogICAgIGlmICghaXNGZWF0dXJlUG9saWN5QWxsb3dlZEJ5RG9jdW1lbnRBbmRB
bGxPd25lcnMoRmVhdHVyZVBvbGljeTo6VHlwZTo6WFJTcGF0aWFsVHJhY2tpbmcsICpkb2N1bWVu
dCwgTG9nRmVhdHVyZVBvbGljeUZhaWx1cmU6OlllcykpIHsKQEAgLTEzNiwyNiArMTY0LDI2OCBA
QCB2b2lkIFdlYlhSU3lzdGVtOjppc1Nlc3Npb25TdXBwb3J0ZWQoWFJTZXNzaW9uTW9kZSBtb2Rl
LCBJc1Nlc3Npb25TdXBwb3J0ZWRQcm9taQogICAgIH0pOwogfQogCi12b2lkIFdlYlhSU3lzdGVt
OjpyZXF1ZXN0U2Vzc2lvbihYUlNlc3Npb25Nb2RlLCBjb25zdCBYUlNlc3Npb25Jbml0JiwgUmVx
dWVzdFNlc3Npb25Qcm9taXNlJiYpCisvLyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlv
L3dlYnhyLyNpbW1lcnNpdmUtc2Vzc2lvbi1yZXF1ZXN0LWlzLWFsbG93ZWQKK2Jvb2wgV2ViWFJT
eXN0ZW06OmltbWVyc2l2ZVNlc3Npb25SZXF1ZXN0SXNBbGxvd2VkRm9yR2xvYmFsT2JqZWN0KERP
TVdpbmRvdyYgZ2xvYmFsT2JqZWN0LCBEb2N1bWVudCYgZG9jdW1lbnQpIGNvbnN0Cit7CisgICAg
Ly8gMS4gSWYgdGhlIHJlcXVlc3Qgd2FzIG5vdCBtYWRlIHdoaWxlIHRoZSBnbG9iYWwgb2JqZWN0
IGhhcyB0cmFuc2llbnQKKyAgICAvLyAgICBhY3RpdmF0aW9uIG9yIHdoZW4gbGF1bmNoaW5nIGEg
d2ViIGFwcGxpY2F0aW9uLCByZXR1cm4gZmFsc2UKKyAgICAvLyBUT0RPOiBhZGQgYSBjaGVjayBm
b3IgIm5vdCBsYXVuY2hpbmcgYSB3ZWIgYXBwbGljYXRpb24iLgorICAgIGlmICghZ2xvYmFsT2Jq
ZWN0Lmhhc1RyYW5zaWVudEFjdGl2YXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gMi4gSWYgdGhlIHJlcXVlc3RpbmcgZG9jdW1lbnQgaXMgbm90IGNvbnNpZGVyZWQgdHJ1
c3R3b3J0aHksIHJldHVybiBmYWxzZS4KKyAgICAvLyBodHRwczovL2ltbWVyc2l2ZS13ZWIuZ2l0
aHViLmlvL3dlYnhyLyN0cnVzdHdvcnRoeS4KKyAgICBpZiAoJmRvY3VtZW50ICE9IGdsb2JhbE9i
amVjdC5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBodHRwczov
L2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLyNhY3RpdmUtYW5kLWZvY3VzZWQKKyAgICBp
ZiAoIWRvY3VtZW50Lmhhc0ZvY3VzKCkgfHwgIWRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkuaXNT
YW1lT3JpZ2luQXMoZ2xvYmFsT2JqZWN0LmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAzLiBJZiB1c2VyIGludGVudCB0byBiZWdp
biBhbiBpbW1lcnNpdmUgc2Vzc2lvbiBpcyBub3Qgd2VsbCB1bmRlcnN0b29kLAorICAgIC8vICAg
IGVpdGhlciB2aWEgZXhwbGljaXQgY29uc2VudCBvciBpbXBsaWNpdCBjb25zZW50LCByZXR1cm4g
ZmFsc2UKKyAgICBpZiAoIVVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8v
IGh0dHBzOi8vaW1tZXJzaXZlLXdlYi5naXRodWIuaW8vd2VieHIvI2lubGluZS1zZXNzaW9uLXJl
cXVlc3QtaXMtYWxsb3dlZAorYm9vbCBXZWJYUlN5c3RlbTo6aW5saW5lU2Vzc2lvblJlcXVlc3RJ
c0FsbG93ZWRGb3JHbG9iYWxPYmplY3QoRE9NV2luZG93JiBnbG9iYWxPYmplY3QsIERvY3VtZW50
JiBkb2N1bWVudCwgY29uc3QgWFJTZXNzaW9uSW5pdCYgaW5pdCkgY29uc3QKK3sKKyAgICAvLyAx
LiBJZiB0aGUgc2Vzc2lvbiByZXF1ZXN0IGNvbnRhaW5lZCBhbnkgcmVxdWlyZWQgZmVhdHVyZXMg
b3Igb3B0aW9uYWwgZmVhdHVyZXMgYW5kIHRoZSByZXF1ZXN0IHdhcyBub3QgbWFkZQorICAgIC8v
ICAgIHdoaWxlIHRoZSBnbG9iYWwgb2JqZWN0IGhhcyB0cmFuc2llbnQgYWN0aXZhdGlvbiBvciB3
aGVuIGxhdW5jaGluZyBhIHdlYiBhcHBsaWNhdGlvbiwgcmV0dXJuIGZhbHNlLgorICAgIGJvb2wg
c2Vzc2lvblJlcXVlc3RDb250YWluZWRBbnlGZWF0dXJlID0gIWluaXQub3B0aW9uYWxGZWF0dXJl
cy5pc0VtcHR5KCkgfHwgIWluaXQucmVxdWlyZWRGZWF0dXJlcy5pc0VtcHR5KCk7CisgICAgaWYg
KHNlc3Npb25SZXF1ZXN0Q29udGFpbmVkQW55RmVhdHVyZSAmJiAhZ2xvYmFsT2JqZWN0Lmhhc1Ry
YW5zaWVudEFjdGl2YXRpb24oKSAvKiBUT0RPOiB8fCAhbGF1bmNoaW5nIGEgd2ViIGFwcCAqLykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gMi4gSWYgdGhlIHJlcXVlc3RpbmcgZG9j
dW1lbnQgaXMgbm90IHJlc3BvbnNpYmxlLCByZXR1cm4gZmFsc2UuCisgICAgaWYgKCZkb2N1bWVu
dCAhPSBnbG9iYWxPYmplY3QuZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKworc3RydWN0IFdlYlhSU3lzdGVtOjpSZXNvbHZlZFJlcXVl
c3RlZEZlYXR1cmVzIHsKKyAgICBGZWF0dXJlc0FycmF5IGdyYW50ZWQ7CisgICAgRmVhdHVyZXNB
cnJheSBjb25zZW50UmVxdWlyZWQ7CisgICAgRmVhdHVyZXNBcnJheSBjb25zZW50T3B0aW9uYWw7
Cit9OworCisjZGVmaW5lIFJFVFVSTl9GQUxTRV9PUl9DT05USU5VRShtdXN0UmV0dXJuKSB7IFwK
KyAgICBpZiAobXVzdFJldHVybikge1wKKyAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisgICAgfSBc
CisgICAgY29udGludWU7IFwKK30KKworLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5p
by93ZWJ4ci8jcmVzb2x2ZS10aGUtcmVxdWVzdGVkLWZlYXR1cmVzCitPcHRpb25hbDxXZWJYUlN5
c3RlbTo6UmVzb2x2ZWRSZXF1ZXN0ZWRGZWF0dXJlcz4gV2ViWFJTeXN0ZW06OnJlc29sdmVSZXF1
ZXN0ZWRGZWF0dXJlcyhYUlNlc3Npb25Nb2RlIG1vZGUsIGNvbnN0IFhSU2Vzc2lvbkluaXQmIGlu
aXQsIFBsYXRmb3JtWFI6OkRldmljZSogZGV2aWNlLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgUGxhdGZvcm1YUjo6SW5zdGFuY2U6OnNpbmdsZXRvbigp
OworICAgIC8vIDEuIExldCBjb25zZW50UmVxdWlyZWQgYmUgYW4gZW1wdHkgbGlzdCBvZiBET01T
dHJpbmcuCisgICAgLy8gMi4gTGV0IGNvbnNlbnRPcHRpb25hbCBiZSBhbiBlbXB0eSBsaXN0IG9m
IERPTVN0cmluZy4KKyAgICBSZXNvbHZlZFJlcXVlc3RlZEZlYXR1cmVzIHJlc29sdmVkRmVhdHVy
ZXM7CisKKyAgICAvLyAzLiBMZXQgZGV2aWNlIGJlIHRoZSByZXN1bHQgb2Ygb2J0YWluaW5nIHRo
ZSBjdXJyZW50IGRldmljZSBmb3IgbW9kZSwgcmVxdWlyZWRGZWF0dXJlcywgYW5kIG9wdGlvbmFs
RmVhdHVyZXMuCisgICAgLy8gNC4gTGV0IGdyYW50ZWQgYmUgYSBsaXN0IG9mIERPTVN0cmluZyBp
bml0aWFsaXplZCB0byBkZXZpY2UncyBsaXN0IG9mIGVuYWJsZWQgZmVhdHVyZXMgZm9yIG1vZGUu
CisgICAgaWYgKGRldmljZSkKKyAgICAgICAgcmVzb2x2ZWRGZWF0dXJlcy5ncmFudGVkID0gZGV2
aWNlLT5lbmFibGVkRmVhdHVyZXMobW9kZSk7CisKKyAgICAvLyA1LiBJZiBkZXZpY2UgaXMgbnVs
bCBvciBkZXZpY2UncyBsaXN0IG9mIHN1cHBvcnRlZCBtb2RlcyBkb2VzIG5vdCBjb250YWluIG1v
ZGUsIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgIC8vICA1LjEgUmV0dXJuIHRoZSB0dXBs
ZSAoY29uc2VudFJlcXVpcmVkLCBjb25zZW50T3B0aW9uYWwsIGdyYW50ZWQpCisgICAgaWYgKCFk
ZXZpY2UgfHwgIWRldmljZS0+c3VwcG9ydHMobW9kZSkpCisgICAgICAgIHJldHVybiByZXNvbHZl
ZEZlYXR1cmVzOworCisgICAgLy8gNi4gQWRkIGV2ZXJ5IGZlYXR1cmUgZGVzY3JpcHRvciBpbiB0
aGUgZGVmYXVsdCBmZWF0dXJlcyB0YWJsZSBhc3NvY2lhdGVkCisgICAgLy8gICAgd2l0aCBtb2Rl
IHRvIHRoZSBpbmRpY2F0ZWQgZmVhdHVyZSBsaXN0IGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNl
bnQuCisgICAgLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jZGVmYXVs
dC1mZWF0dXJlcworICAgIGF1dG8gcmVxdWlyZWRGZWF0dXJlc1dpdGhEZWZhdWx0RmVhdHVyZXMg
PSBpbml0LnJlcXVpcmVkRmVhdHVyZXM7CisgICAgcmVxdWlyZWRGZWF0dXJlc1dpdGhEZWZhdWx0
RmVhdHVyZXMuYXBwZW5kKGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZ2xvYmFsT2JqZWN0LCBYUlJl
ZmVyZW5jZVNwYWNlVHlwZTo6Vmlld2VyKSk7CisgICAgaWYgKG1vZGUgPT0gWFJTZXNzaW9uTW9k
ZTo6SW1tZXJzaXZlQXIgfHwgbW9kZSA9PSBYUlNlc3Npb25Nb2RlOjpJbW1lcnNpdmVWcikKKyAg
ICAgICAgcmVxdWlyZWRGZWF0dXJlc1dpdGhEZWZhdWx0RmVhdHVyZXMuYXBwZW5kKGNvbnZlcnRF
bnVtZXJhdGlvblRvSlMoZ2xvYmFsT2JqZWN0LCBYUlJlZmVyZW5jZVNwYWNlVHlwZTo6TG9jYWwp
KTsKKworICAgIC8vIDcuIEZvciBlYWNoIGZlYXR1cmUgaW4gcmVxdWlyZWRGZWF0dXJlc3xvcHRp
b25hbEZlYXR1cmVzIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoKKyAgICAvLyA4LiBGb3Ig
ZWFjaCBmZWF0dXJlIGluIG9wdGlvbmFsRmVhdHVyZXMgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0
ZXBzOgorICAgIC8vIFdlJ3JlIG1lcmdpbmcgYm90aCBsb29wcyBpbiBhIHNpbmdsZSBsYW1iZGEu
IFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCBhIGZhaWx1cmUgb24gYW55IHJlcXVpcmVkIGZl
YXR1cmVzCisgICAgLy8gaW1wbGllcyBjYW5jZWxsaW5nIHRoZSB3aG9sZSBwcm9jZXNzIHdoaWxl
IGZhaWx1cmVzIGluIG9wdGlvbmFsIGZlYXR1cmVzIGFyZSBqdXN0IHNraXBwZWQuCisgICAgZW51
bSBjbGFzcyBQYXJzaW5nTW9kZSB7IFN0cmljdCwgTG9vc2UgfTsKKyAgICBhdXRvIHBhcnNlRmVh
dHVyZXMgPSBbJmRldmljZSwgJmdsb2JhbE9iamVjdCwgbW9kZSwgJnJlc29sdmVkRmVhdHVyZXNd
IChjb25zdCBKU0ZlYXR1cmVzQXJyYXkmIHNlc3Npb25GZWF0dXJlcywgUGFyc2luZ01vZGUgcGFy
c2luZ01vZGUpIC0+IGJvb2wgeworICAgICAgICBib29sIHJldHVybk9uRmFpbHVyZSA9IHBhcnNp
bmdNb2RlID09IFBhcnNpbmdNb2RlOjpTdHJpY3Q7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYg
c2Vzc2lvbkZlYXR1cmUgOiBzZXNzaW9uRmVhdHVyZXMpIHsKKyAgICAgICAgICAgIC8vIDEuIElm
IHRoZSBmZWF0dXJlIGlzIG51bGwsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IGVudHJ5LgorICAgICAg
ICAgICAgaWYgKHNlc3Npb25GZWF0dXJlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICAvLyAyLiBJZiBmZWF0dXJlIGlzIG5vdCBhIHZhbGlkIGZlYXR1
cmUgZGVzY3JpcHRvciwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzCisgICAgICAgICAgICAv
LyAgIDIuMS4gTGV0IHMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nID8gVG9TdHJpbmcoZmVhdHVy
ZSkuCisgICAgICAgICAgICAvLyAgIDIuMi4gSWYgcyBpcyBub3QgYSB2YWxpZCBmZWF0dXJlIGRl
c2NyaXB0b3Igb3IgaXMgdW5kZWZpbmVkLCAocmV0dXJuIG51bGx8Y29udGludWUgdG8gbmV4dCBl
bnRyeSkuCisgICAgICAgICAgICAvLyAgIDIuMy4gU2V0IGZlYXR1cmUgdG8gcy4KKyAgICAgICAg
ICAgIGF1dG8gZmVhdHVyZSA9IHBhcnNlRW51bWVyYXRpb248WFJSZWZlcmVuY2VTcGFjZVR5cGU+
KGdsb2JhbE9iamVjdCwgc2Vzc2lvbkZlYXR1cmUpOworICAgICAgICAgICAgaWYgKCFmZWF0dXJl
KQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUxTRV9PUl9DT05USU5VRShyZXR1cm5PbkZhaWx1
cmUpOworCisgICAgICAgICAgICAvLyAzLiBJZiBmZWF0dXJlIGlzIGFscmVhZHkgaW4gZ3JhbnRl
ZCwgY29udGludWUgdG8gdGhlIG5leHQgZW50cnkuCisgICAgICAgICAgICBpZiAocmVzb2x2ZWRG
ZWF0dXJlcy5ncmFudGVkLmNvbnRhaW5zKGZlYXR1cmUudmFsdWUoKSkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIDQuIElmIHRoZSByZXF1ZXN0aW5nIGRvY3Vt
ZW50J3Mgb3JpZ2luIGlzIG5vdCBhbGxvd2VkIHRvIHVzZSBhbnkgZmVhdHVyZSBwb2xpY3kgcmVx
dWlyZWQgYnkgZmVhdHVyZQorICAgICAgICAgICAgLy8gICAgYXMgaW5kaWNhdGVkIGJ5IHRoZSBm
ZWF0dXJlIHJlcXVpcmVtZW50cyB0YWJsZSwgKHJldHVybiBudWxsfGNvbnRpbnVlIHRvIG5leHQg
ZW50cnkpLgorCisgICAgICAgICAgICAvLyA1LiBJZiBzZXNzaW9uJ3MgWFIgZGV2aWNlIGlzIG5v
dCBjYXBhYmxlIG9mIHN1cHBvcnRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGJ5IGZl
YXR1cmUgb3IgdGhlCisgICAgICAgICAgICAvLyAgICB1c2VyIGFnZW50IGhhcyBvdGhlcndpc2Ug
ZGV0ZXJtaW5lZCB0byByZWplY3QgdGhlIGZlYXR1cmUsIChyZXR1cm4gbnVsbHxjb250aW51ZSB0
byBuZXh0IGVudHJ5KS4KKyAgICAgICAgICAgIGlmICghZGV2aWNlLT5lbmFibGVkRmVhdHVyZXMo
bW9kZSkuY29udGFpbnMoZmVhdHVyZS52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5f
RkFMU0VfT1JfQ09OVElOVUUocmV0dXJuT25GYWlsdXJlKTsKKworICAgICAgICAgICAgLy8gNi4g
SWYgdGhlIGZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGJ5IGZlYXR1cmUgcmVxdWlyZXMgZXhwbGlj
aXQgY29uc2VudCwgYXBwZW5kIGl0IHRvIChjb25zZW50UmVxdWlyZWR8Y29uc2VudE9wdGlvbmFs
KS4KKyAgICAgICAgICAgIC8vIDcuIEVsc2UgYXBwZW5kIGZlYXR1cmUgdG8gZ3JhbnRlZC4KKyAg
ICAgICAgICAgIHJlc29sdmVkRmVhdHVyZXMuZ3JhbnRlZC5hcHBlbmQoZmVhdHVyZS52YWx1ZSgp
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgaWYgKCFw
YXJzZUZlYXR1cmVzKHJlcXVpcmVkRmVhdHVyZXNXaXRoRGVmYXVsdEZlYXR1cmVzLCBQYXJzaW5n
TW9kZTo6U3RyaWN0KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIC8vIFdo
ZW4gdGhlIHJlcXVlc3RTZXNzaW9uKG1vZGUpIG1ldGhvZCBpcyBpbnZva2VkLCB0aGUgdXNlciBh
Z2VudCBNVVNUIHJldHVybiBhIG5ldyBQcm9taXNlIHByb21pc2UgYW5kIHJ1biB0aGUgZm9sbG93
aW5nIHN0ZXBzIGluIHBhcmFsbGVsOgotICAgIC8vICAgMS4gTGV0IGltbWVyc2l2ZSBiZSB0cnVl
IGlmIG1vZGUgaXMgImltbWVyc2l2ZS12ciIgb3IgImltbWVyc2l2ZS1hciIsIGFuZCBmYWxzZSBv
dGhlcndpc2UuCi0gICAgLy8gICAyLiBJZiBpbW1lcnNpdmUgaXMgdHJ1ZToKLSAgICAvLyAgICAg
MS4gSWYgcGVuZGluZyBpbW1lcnNpdmUgc2Vzc2lvbiBpcyB0cnVlIG9yIGFjdGl2ZSBpbW1lcnNp
dmUgc2Vzc2lvbiBpcyBub3QgbnVsbCwgcmVqZWN0IHByb21pc2Ugd2l0aCBhbiAiSW52YWxpZFN0
YXRlRXJyb3IiIERPTUV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCi0gICAgLy8gICAg
IDIuIEVsc2Ugc2V0IHBlbmRpbmcgaW1tZXJzaXZlIHNlc3Npb24gdG8gYmUgdHJ1ZS4KLSAgICAv
LyAgIDMuIEVuc3VyZSBhbiBYUiBkZXZpY2UgaXMgc2VsZWN0ZWQuCi0gICAgLy8gICA0LiBJZiB0
aGUgWFIgZGV2aWNlIGlzIG51bGwsIHJlamVjdCBwcm9taXNlIHdpdGggbnVsbC4KLSAgICAvLyAg
IDUuIEVsc2UgaWYgdGhlIFhSIGRldmljZSdzIGxpc3Qgb2Ygc3VwcG9ydGVkIG1vZGVzIGRvZXMg
bm90IGNvbnRhaW4gbW9kZSwgcmVqZWN0IHByb21pc2Ugd2l0aCBhICJOb3RTdXBwb3J0ZWRFcnJv
ciIgRE9NRXhjZXB0aW9uLgotICAgIC8vICAgNi4gRWxzZSBJZiBpbW1lcnNpdmUgaXMgdHJ1ZSBh
bmQgdGhlIGFsZ29yaXRobSBpcyBub3QgdHJpZ2dlcmVkIGJ5IHVzZXIgYWN0aXZhdGlvbiwgcmVq
ZWN0IHByb21pc2Ugd2l0aCBhICJTZWN1cml0eUVycm9yIiBET01FeGNlcHRpb24gYW5kIGFib3J0
IHRoZXNlIHN0ZXBzLgotICAgIC8vICAgNy4gSWYgcHJvbWlzZSB3YXMgcmVqZWN0ZWQgYW5kIGlt
bWVyc2l2ZSBpcyB0cnVlLCBzZXQgcGVuZGluZyBpbW1lcnNpdmUgc2Vzc2lvbiB0byBmYWxzZS4K
LSAgICAvLyAgIDguIElmIHByb21pc2Ugd2FzIHJlamVjdGVkLCBhYm9ydCB0aGVzZSBzdGVwcy4K
LSAgICAvLyAgIDkuIExldCBzZXNzaW9uIGJlIGEgbmV3IFhSU2Vzc2lvbiBvYmplY3QuCi0gICAg
Ly8gICAxMC4gSW5pdGlhbGl6ZSB0aGUgc2Vzc2lvbiB3aXRoIHNlc3Npb24gYW5kIG1vZGUuCi0g
ICAgLy8gICAxMS4gSWYgaW1tZXJzaXZlIGlzIHRydWUsIHNldCB0aGUgYWN0aXZlIGltbWVyc2l2
ZSBzZXNzaW9uIHRvIHNlc3Npb24sIGFuZCBzZXQgcGVuZGluZyBpbW1lcnNpdmUgc2Vzc2lvbiB0
byBmYWxzZS4KLSAgICAvLyAgIDEyLiBFbHNlIGFwcGVuZCBzZXNzaW9uIHRvIHRoZSBsaXN0IG9m
IGlubGluZSBzZXNzaW9ucy4KLSAgICAvLyAgIDEzLiBSZXNvbHZlIHByb21pc2Ugd2l0aCBzZXNz
aW9uLgorICAgIHBhcnNlRmVhdHVyZXMoaW5pdC5vcHRpb25hbEZlYXR1cmVzLCBQYXJzaW5nTW9k
ZTo6TG9vc2UpOworICAgIHJldHVybiByZXNvbHZlZEZlYXR1cmVzOworfQorCisvLyBodHRwczov
L2ltbWVyc2l2ZS13ZWIuZ2l0aHViLmlvL3dlYnhyLyNyZXF1ZXN0LXRoZS14ci1wZXJtaXNzaW9u
Citib29sIFdlYlhSU3lzdGVtOjppc1hSUGVybWlzc2lvbkdyYW50ZWQoWFJTZXNzaW9uTW9kZSBt
b2RlLCBjb25zdCBYUlNlc3Npb25Jbml0JiBpbml0LCBQbGF0Zm9ybVhSOjpEZXZpY2UqIGRldmlj
ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KSBjb25zdAoreworICAgIC8vIDEu
IFNldCBzdGF0dXMncyBncmFudGVkIHRvIGFuIGVtcHR5IEZyb3plbkFycmF5LgorICAgIC8vIDIu
IExldCByZXF1aXJlZEZlYXR1cmVzIGJlIGRlc2NyaXB0b3IncyByZXF1aXJlZEZlYXR1cmVzLgor
ICAgIC8vIDMuIExldCBvcHRpb25hbEZlYXR1cmVzIGJlIGRlc2NyaXB0b3IncyBvcHRpb25hbEZl
YXR1cmVzLgorICAgIC8vIDQuIExldCBkZXZpY2UgYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcg
dGhlIGN1cnJlbnQgZGV2aWNlIGZvciBtb2RlLCByZXF1aXJlZEZlYXR1cmVzLCBhbmQgb3B0aW9u
YWxGZWF0dXJlcy4KKworICAgIC8vIDUuIExldCByZXN1bHQgYmUgdGhlIHJlc3VsdCBvZiByZXNv
bHZpbmcgdGhlIHJlcXVlc3RlZCBmZWF0dXJlcyBnaXZlbiByZXF1aXJlZEZlYXR1cmVzLG9wdGlv
bmFsRmVhdHVyZXMsIGFuZCBtb2RlLgorICAgIGF1dG8gcmVzb2x2ZWRGZWF0dXJlcyA9IHJlc29s
dmVSZXF1ZXN0ZWRGZWF0dXJlcyhtb2RlLCBpbml0LCBkZXZpY2UsIGdsb2JhbE9iamVjdCk7CisK
KyAgICAvLyA2LiBJZiByZXN1bHQgaXMgbnVsbCwgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6Cisg
ICAgLy8gIDYuMS4gU2V0IHN0YXR1cydzIHN0YXRlIHRvICJkZW5pZWQiLgorICAgIC8vICA2LjIu
IEFib3J0IHRoZXNlIHN0ZXBzLgorICAgIGlmICghcmVzb2x2ZWRGZWF0dXJlcykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gNy4gTGV0IChjb25zZW50UmVxdWlyZWQsIGNvbnNlbnRP
cHRpb25hbCwgZ3JhbnRlZCkgYmUgdGhlIGZpZWxkcyBvZiByZXN1bHQuCisgICAgLy8gOC4gVGhl
IHVzZXIgYWdlbnQgTUFZIGF0IHRoaXMgcG9pbnQgYXNrIHRoZSB1c2VyJ3MgcGVybWlzc2lvbiBm
b3IgdGhlIGNhbGxpbmcgYWxnb3JpdGhtIHRvIHVzZSBhbnkgb2YgdGhlIGZlYXR1cmVzCisgICAg
Ly8gICAgaW4gY29uc2VudFJlcXVpcmVkIGFuZCBjb25zZW50T3B0aW9uYWwuIFRoZSByZXN1bHRz
IG9mIHRoZXNlIHByb21wdHMgc2hvdWxkIGJlIGluY2x1ZGVkIHdoZW4gZGV0ZXJtaW5pbmcgaWYg
dGhlcmUKKyAgICAvLyAgICBpcyBhIGNsZWFyIHNpZ25hbCBvZiB1c2VyIGludGVudCBmb3IgZW5h
YmxpbmcgdGhlc2UgZmVhdHVyZXMuCisgICAgLy8gOS4gRm9yIGVhY2ggZmVhdHVyZSBpbiBjb25z
ZW50UmVxdWlyZWQgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgIC8vICA5LjEuIFRo
ZSB1c2VyIGFnZW50IE1BWSBhdCB0aGlzIHBvaW50IGFzayB0aGUgdXNlcidzIHBlcm1pc3Npb24g
Zm9yIHRoZSBjYWxsaW5nIGFsZ29yaXRobSB0byB1c2UgZmVhdHVyZS4gVGhlIHJlc3VsdHMKKyAg
ICAvLyAgICAgICBvZiB0aGVzZSBwcm9tcHRzIHNob3VsZCBiZSBpbmNsdWRlZCB3aGVuIGRldGVy
bWluaW5nIGlmIHRoZXJlIGlzIGEgY2xlYXIgc2lnbmFsIG9mIHVzZXIgaW50ZW50IHRvIGVuYWJs
ZSBmZWF0dXJlLgorICAgIC8vICA5LjIuIElmIGEgY2xlYXIgc2lnbmFsIG9mIHVzZXIgaW50ZW50
IHRvIGVuYWJsZSBmZWF0dXJlIGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkLCBzZXQgc3RhdHVzJ3Mg
c3RhdGUgdG8gImRlbmllZCIgYW5kCisgICAgLy8gICAgICAgYWJvcnQgdGhlc2Ugc3RlcHMuCisg
ICAgLy8gIDkuMy4gSWYgZmVhdHVyZSBpcyBub3QgaW4gZ3JhbnRlZCwgYXBwZW5kIGZlYXR1cmUg
dG8gZ3JhbnRlZC4KKyAgICAvLyAxMC4gRm9yIGVhY2ggZmVhdHVyZSBpbiBjb25zZW50T3B0aW9u
YWwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgIC8vICAxMC4xLiBUaGUgdXNlciBh
Z2VudCBNQVkgYXQgdGhpcyBwb2ludCBhc2sgdGhlIHVzZXIncyBwZXJtaXNzaW9uIGZvciB0aGUg
Y2FsbGluZyBhbGdvcml0aG0gdG8gdXNlIGZlYXR1cmUuIFRoZSByZXN1bHRzCisgICAgLy8gICAg
ICAgIG9mIHRoZXNlIHByb21wdHMgc2hvdWxkIGJlIGluY2x1ZGVkIHdoZW4gZGV0ZXJtaW5pbmcg
aWYgdGhlcmUgaXMgYSBjbGVhciBzaWduYWwgb2YgdXNlciBpbnRlbnQgdG8gZW5hYmxlIGZlYXR1
cmUuCisgICAgLy8gIDEwLjIuIElmIGEgY2xlYXIgc2lnbmFsIG9mIHVzZXIgaW50ZW50IHRvIGVu
YWJsZSBmZWF0dXJlIGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkLCBjb250aW51ZSB0byB0aGUgbmV4
dCBlbnRyeS4KKyAgICAvLyAgMTAuMy4gSWYgZmVhdHVyZSBpcyBub3QgaW4gZ3JhbnRlZCwgYXBw
ZW5kIGZlYXR1cmUgdG8gZ3JhbnRlZC4KKyAgICAvLyAxMS4gU2V0IHN0YXR1cydzIGdyYW50ZWQg
dG8gZ3JhbnRlZC4KKyAgICAvLyAxMi4gU2V0IGRldmljZSdzIGxpc3Qgb2YgZW5hYmxlZCBmZWF0
dXJlcyBmb3IgbW9kZSB0byBncmFudGVkLgorICAgIC8vIDEzLiBTZXQgc3RhdHVzJ3Mgc3RhdGUg
dG8gImdyYW50ZWQiLgorICAgIHJldHVybiB0cnVlOworfQorCisKKy8vIGh0dHBzOi8vaW1tZXJz
aXZlLXdlYi5naXRodWIuaW8vd2VieHIvI2RvbS14cnN5c3RlbS1yZXF1ZXN0c2Vzc2lvbgordm9p
ZCBXZWJYUlN5c3RlbTo6cmVxdWVzdFNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50LCBYUlNlc3Np
b25Nb2RlIG1vZGUsIGNvbnN0IFhSU2Vzc2lvbkluaXQmIGluaXQsIFJlcXVlc3RTZXNzaW9uUHJv
bWlzZSYmIHByb21pc2UpCit7CisgICAgLy8gMS4gTGV0IHByb21pc2UgYmUgYSBuZXcgUHJvbWlz
ZS4KKyAgICAvLyAyLiBMZXQgaW1tZXJzaXZlIGJlIHRydWUgaWYgbW9kZSBpcyBhbiBpbW1lcnNp
dmUgc2Vzc2lvbiBtb2RlLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgIC8vIDMuIExldCBnbG9i
YWwgb2JqZWN0IGJlIHRoZSByZWxldmFudCBHbG9iYWwgb2JqZWN0IGZvciB0aGUgWFJTeXN0ZW0g
b24gd2hpY2ggdGhpcyBtZXRob2Qgd2FzIGludm9rZWQuCisgICAgYm9vbCBpbW1lcnNpdmUgPSBt
b2RlID09IFhSU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZUFyIHx8IG1vZGUgPT0gWFJTZXNzaW9uTW9k
ZTo6SW1tZXJzaXZlVnI7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZG9jdW1lbnQuZG9tV2lu
ZG93KCk7CisgICAgaWYgKCFnbG9iYWxPYmplY3QpIHsKKyAgICAgICAgcHJvbWlzZS5yZWplY3Qo
RXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyA0LiBDaGVjayB3aGV0aGVyIHRoZSBzZXNzaW9uIHJlcXVlc3QgaXMgYWxsb3dl
ZCBhcyBmb2xsb3dzOgorICAgIGlmIChpbW1lcnNpdmUpIHsKKyAgICAgICAgaWYgKCFpbW1lcnNp
dmVTZXNzaW9uUmVxdWVzdElzQWxsb3dlZEZvckdsb2JhbE9iamVjdCgqZ2xvYmFsT2JqZWN0LCBk
b2N1bWVudCkpIHsKKyAgICAgICAgICAgIHByb21pc2UucmVqZWN0KEV4Y2VwdGlvbiB7IFNlY3Vy
aXR5RXJyb3IgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG1fcGVuZGluZ0ltbWVyc2l2ZVNlc3Npb24gfHwgbV9hY3RpdmVJbW1lcnNpdmVTZXNzaW9uKSB7
CisgICAgICAgICAgICBwcm9taXNlLnJlamVjdChFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJv
ciB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3BlbmRpbmdJ
bW1lcnNpdmVTZXNzaW9uID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWlubGlu
ZVNlc3Npb25SZXF1ZXN0SXNBbGxvd2VkRm9yR2xvYmFsT2JqZWN0KCpnbG9iYWxPYmplY3QsIGRv
Y3VtZW50LCBpbml0KSkgeworICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoRXhjZXB0aW9uIHsg
U2VjdXJpdHlFcnJvciB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIDUuIFJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzIGluIHBhcmFsbGVsOgorICAgIHF1
ZXVlVGFza0tlZXBpbmdPYmplY3RBbGl2ZSgqdGhpcywgVGFza1NvdXJjZTo6V2ViWFIsIFt0aGlz
LCBkb2N1bWVudCA9IG1ha2VSZWYoZG9jdW1lbnQpLCBpbW1lcnNpdmUsIGluaXQsIG1vZGUsIHBy
b21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgLy8gNS4xIExl
dCByZXF1aXJlZEZlYXR1cmVzIGJlIG9wdGlvbnMnIHJlcXVpcmVkRmVhdHVyZXMuCisgICAgICAg
IC8vIDUuMiBMZXQgb3B0aW9uYWxGZWF0dXJlcyBiZSBvcHRpb25zJyBvcHRpb25hbEZlYXR1cmVz
LgorICAgICAgICAvLyA1LjMgU2V0IGRldmljZSB0byB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyB0
aGUgY3VycmVudCBkZXZpY2UgZm9yIG1vZGUsIHJlcXVpcmVkRmVhdHVyZXMsIGFuZCBvcHRpb25h
bEZlYXR1cmVzLgorICAgICAgICBhdXRvKiBkZXZpY2UgPSBvYnRhaW5DdXJyZW50RGV2aWNlKG1v
ZGUsIGluaXQucmVxdWlyZWRGZWF0dXJlcywgaW5pdC5vcHRpb25hbEZlYXR1cmVzKTsKKworICAg
ICAgICAvLyA1LjQgUXVldWUgYSB0YXNrIHRvIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoK
KyAgICAgICAgcXVldWVUYXNrS2VlcGluZ09iamVjdEFsaXZlKCp0aGlzLCBUYXNrU291cmNlOjpX
ZWJYUiwgW3RoaXMsICZkb2N1bWVudCwgZGV2aWNlID0gbWFrZVdlYWtQdHIoZGV2aWNlKSwgaW1t
ZXJzaXZlLCBpbml0LCBtb2RlLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0gKCkgbXV0YWJs
ZSB7CisgICAgICAgICAgICBhdXRvIHJlamVjdFByb21pc2VXaXRoTm90U3VwcG9ydGVkRXJyb3Ig
PSBtYWtlU2NvcGVFeGl0KFsmXSAoKSB7CisgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWplY3Qo
RXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfSk7CisgICAgICAgICAgICAgICAgbV9wZW5k
aW5nSW1tZXJzaXZlU2Vzc2lvbiA9IGZhbHNlOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgIC8vIDUuNC4xIElmIGRldmljZSBpcyBudWxsIG9yIGRldmljZSdzIGxpc3Qgb2Ygc3VwcG9y
dGVkIG1vZGVzIGRvZXMgbm90IGNvbnRhaW4gbW9kZSwgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6
CisgICAgICAgICAgICAvLyAgLSBSZWplY3QgcHJvbWlzZSB3aXRoIGEgIk5vdFN1cHBvcnRlZEVy
cm9yIiBET01FeGNlcHRpb24uCisgICAgICAgICAgICAvLyAgLSBJZiBpbW1lcnNpdmUgaXMgdHJ1
ZSwgc2V0IHBlbmRpbmcgaW1tZXJzaXZlIHNlc3Npb24gdG8gZmFsc2UuCisgICAgICAgICAgICAv
LyAgLSBBYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAgICAgICAgIGlmICghZGV2aWNlIHx8ICFkZXZp
Y2UtPnN1cHBvcnRzKG1vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZG9jdW1lbnQtPmV4ZWNTdGF0ZSgpOworICAgICAgICAg
ICAgaWYgKCFnbG9iYWxPYmplY3QpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICAvLyBXZWJLaXQgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIFBlcm1pc3Npb25z
IEFQSS4gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3Blcm1pc3Npb25zLworICAgICAgICAgICAgLy8g
SG93ZXZlciB3ZSBkbyBpbXBsZW1lbnQgaGVyZSB0aGUgcGVybWlzc2lvbiByZXF1ZXN0IGFsZ29y
aXRobSB3aXRob3V0IHRoZQorICAgICAgICAgICAgLy8gUGVybWlzc2lvbnMgQVBJIGJpdHMgYXMg
aXQgaGFuZGxlcywgYW1vbmcgb3RoZXJzLCB0aGUgc2Vzc2lvbiBmZWF0dXJlcyBwYXJzaW5nLiBX
ZSBhbHNvCisgICAgICAgICAgICAvLyBkbyBpdCBoZXJlIGJlZm9yZSBjcmVhdGluZyB0aGUgc2Vz
c2lvbiBhcyB0aGVyZSBpcyBubyBuZWVkIHRvIGRvIGl0IG9uIGFkdmFuY2UuCisgICAgICAgICAg
ICAvLyBUT0RPOiB3ZSBqdXN0IHBlcmZvcm0gYmFzaWMgY2hlY2tzIHdpdGhvdXQgYXNraW5nIGFu
eSBwZXJtaXNzaW9uIHRvIHRoZSB1c2VyIHNvIGZhci4gTWF5YmUgd2Ugc2hvdWxkIGltcGxlbWVu
dAorICAgICAgICAgICAgLy8gYSBtZWNoYW5pc20gc2ltaWxhciB0byB3aGF0IG90aGVycyBkbyBp
bnZvbHZpbmcgcGFzc2luZyBhIG1lc3NhZ2UgdG8gdGhlIFVJIHByb2Nlc3MuCisKKyAgICAgICAg
ICAgIC8vIDUuNC40IExldCBkZXNjcmlwdG9yIGJlIGFuIFhSUGVybWlzc2lvbkRlc2NyaXB0b3Ig
aW5pdGlhbGl6ZWQgd2l0aCBzZXNzaW9uLCByZXF1aXJlZEZlYXR1cmVzLCBhbmQgb3B0aW9uYWxG
ZWF0dXJlcworICAgICAgICAgICAgLy8gNS40LjUgTGV0IHN0YXR1cyBiZSBhbiBYUlBlcm1pc3Np
b25TdGF0dXMsIGluaXRpYWxseSBudWxsCisgICAgICAgICAgICAvLyA1LjQuNiBSZXF1ZXN0IHRo
ZSB4ciBwZXJtaXNzaW9uIHdpdGggZGVzY3JpcHRvciBhbmQgc3RhdHVzLgorICAgICAgICAgICAg
Ly8gNS40LjcgSWYgc3RhdHVzJyBzdGF0ZSBpcyAiZGVuaWVkIiBydW4gdGhlIGZvbGxvd2luZyBz
dGVwczogKHNhbWUgYXMgYWJvdmUgaW4gNS40LjEpCisgICAgICAgICAgICBpZiAoIWlzWFJQZXJt
aXNzaW9uR3JhbnRlZChtb2RlLCBpbml0LCBkZXZpY2UuZ2V0KCksICpnbG9iYWxPYmplY3QpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgLy8gNS40LjIgTGV0IHNlc3Np
b24gYmUgYSBuZXcgWFJTZXNzaW9uIG9iamVjdC4KKyAgICAgICAgICAgIC8vIDUuNC4zIEluaXRp
YWxpemUgdGhlIHNlc3Npb24gd2l0aCBzZXNzaW9uLCBtb2RlLCBhbmQgZGV2aWNlLgorICAgICAg
ICAgICAgYXV0byBzZXNzaW9uID0gV2ViWFJTZXNzaW9uOjpjcmVhdGUoZG9jdW1lbnQuZ2V0KCks
ICp0aGlzLCBtb2RlLCBXVEZNb3ZlKGRldmljZSkpOworCisgICAgICAgICAgICAvLyA1LjQuOCBQ
b3RlbnRpYWxseSBzZXQgdGhlIGFjdGl2ZSBpbW1lcnNpdmUgc2Vzc2lvbiBhcyBmb2xsb3dzOgor
ICAgICAgICAgICAgaWYgKGltbWVyc2l2ZSkgeworICAgICAgICAgICAgICAgIG1fYWN0aXZlSW1t
ZXJzaXZlU2Vzc2lvbiA9IHNlc3Npb24uY29weVJlZigpOworICAgICAgICAgICAgICAgIG1fcGVu
ZGluZ0ltbWVyc2l2ZVNlc3Npb24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIG1fbGlzdE9mSW5saW5lU2Vzc2lvbnMuYXBwZW5kKHNlc3Npb24uY29weVJlZigp
KTsKKworICAgICAgICAgICAgLy8gNS40LjkgUmVzb2x2ZSBwcm9taXNlIHdpdGggc2Vzc2lvbi4K
KyAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShzZXNzaW9uKTsKKyAgICAgICAgICAgIHJlamVj
dFByb21pc2VXaXRoTm90U3VwcG9ydGVkRXJyb3IucmVsZWFzZSgpOworCisgICAgICAgICAgICAv
LyBUT0RPOgorICAgICAgICAgICAgLy8gNS40LjEwIFF1ZXVlIGEgdGFzayB0byBwZXJmb3JtIHRo
ZSBmb2xsb3dpbmcgc3RlcHM6IE5PVEU6IFRoZXNlIHN0ZXBzIGVuc3VyZSB0aGF0IGluaXRpYWwg
aW5wdXRzb3VyY2VzY2hhbmdlCisgICAgICAgICAgICAvLyBldmVudHMgb2NjdXIgYWZ0ZXIgdGhl
IGluaXRpYWwgc2Vzc2lvbiBpcyByZXNvbHZlZC4KKyAgICAgICAgICAgIC8vICAgICAxLiBTZXQg
c2Vzc2lvbidzIHByb21pc2UgcmVzb2x2ZWQgZmxhZyB0byB0cnVlLgorICAgICAgICAgICAgLy8g
ICAgIDIuIExldCBzb3VyY2VzIGJlIGFueSBleGlzdGluZyBpbnB1dCBzb3VyY2VzIGF0dGFjaGVk
IHRvIHNlc3Npb24uCisgICAgICAgICAgICAvLyAgICAgMy4gSWYgc291cmNlcyBpcyBub24tZW1w
dHksIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoKKyAgICAgICAgICAgIC8vICAgICAgICAx
LiBTZXQgc2Vzc2lvbidzIGxpc3Qgb2YgYWN0aXZlIFhSIGlucHV0IHNvdXJjZXMgdG8gc291cmNl
cy4KKyAgICAgICAgICAgIC8vICAgICAgICAyLiBGaXJlIGFuIFhSSW5wdXRTb3VyY2VzQ2hhbmdl
RXZlbnQgbmFtZWQgaW5wdXRzb3VyY2VzY2hhbmdlIG9uIHNlc3Npb24gd2l0aCBhZGRlZCBzZXQg
dG8gc291cmNlcy4KKworICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAogY29uc3QgY2hhciogV2Vi
WFJTeXN0ZW06OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdApAQCAtMTcxLDcgKzQ0MSw3IEBA
IHZvaWQgV2ViWFJTeXN0ZW06OnJlZ2lzdGVyU2ltdWxhdGVkWFJEZXZpY2VGb3JUZXN0aW5nKGNv
bnN0IFBsYXRmb3JtWFI6OkRldmljZSYKIHsKICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViWFJFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX3Rlc3RpbmdNb2RlID0gdHJ1ZTsKKyAgICBtX3Rlc3RpbmdEZXZpY2VzKys7CiAgICAgaWYg
KGRldmljZS5zdXBwb3J0cyhQbGF0Zm9ybVhSOjpTZXNzaW9uTW9kZTo6SW1tZXJzaXZlVnIpIHx8
IGRldmljZS5zdXBwb3J0cyhQbGF0Zm9ybVhSOjpTZXNzaW9uTW9kZTo6SW1tZXJzaXZlQXIpKSB7
CiAgICAgICAgIG1faW1tZXJzaXZlRGV2aWNlcy5hcHBlbmQobWFrZVdlYWtQdHIoZGV2aWNlKSk7
CiAgICAgICAgIG1fYWN0aXZlSW1tZXJzaXZlRGV2aWNlID0gbV9pbW1lcnNpdmVEZXZpY2VzLmxh
c3QoKTsKQEAgLTE4NSwxNCArNDU1LDI0IEBAIHZvaWQgV2ViWFJTeXN0ZW06OnVucmVnaXN0ZXJT
aW11bGF0ZWRYUkRldmljZUZvclRlc3RpbmcoUGxhdGZvcm1YUjo6RGV2aWNlKiBkZXZpCiAgICAg
aWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYlhSRW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKG1faW1tZXJzaXZlRGV2aWNlcy5jb250
YWlucyhkZXZpY2UpKTsKKyAgICBBU1NFUlQobV90ZXN0aW5nRGV2aWNlcyk7CiAgICAgbV9pbW1l
cnNpdmVEZXZpY2VzLnJlbW92ZUZpcnN0KGRldmljZSk7CiAgICAgaWYgKG1fYWN0aXZlSW1tZXJz
aXZlRGV2aWNlID09IGRldmljZSkKICAgICAgICAgbV9hY3RpdmVJbW1lcnNpdmVEZXZpY2UgPSBu
dWxscHRyOwogICAgIGlmIChtX2lubGluZVhSRGV2aWNlID09IGRldmljZSkKICAgICAgICAgbV9p
bmxpbmVYUkRldmljZSA9IG1ha2VXZWFrUHRyKG1fZGVmYXVsdElubGluZURldmljZSk7Ci0gICAg
bV90ZXN0aW5nTW9kZSA9IGZhbHNlOworICAgIG1fdGVzdGluZ0RldmljZXMtLTsKIH0KIAordm9p
ZCBXZWJYUlN5c3RlbTo6c2Vzc2lvbkVuZGVkKGNvbnN0IFdlYlhSU2Vzc2lvbiogc2Vzc2lvbikK
K3sKKyAgICBpZiAobV9hY3RpdmVJbW1lcnNpdmVTZXNzaW9uID09IHNlc3Npb24pCisgICAgICAg
IG1fYWN0aXZlSW1tZXJzaXZlU2Vzc2lvbiA9IG51bGxwdHI7CisKKyAgICBtX2xpc3RPZklubGlu
ZVNlc3Npb25zLnJlbW92ZUZpcnN0TWF0Y2hpbmcoW3Nlc3Npb25dKGF1dG8mIGl0ZW0pIHsKKyAg
ICAgICAgcmV0dXJuIGl0ZW0ucHRyKCkgPT0gc2Vzc2lvbjsKKyAgICB9KTsKK30KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnhyL1dlYlhSU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSU3lz
dGVtLmgKaW5kZXggMmU5Y2U4NDY5YTc1OTQ4N2I4MjY1NjYwOWE3OTI2NDQwZWI3MWJhYi4uMWY5
M2NjYjQxYjUxMTUwMDQyZGZiZjkxMDE4ZGIzZDI3ODEyMGJlNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUlN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uaApAQCAtMzMsMTMgKzMzLDIwIEBACiAjaW5jbHVk
ZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2luY2x1ZGUg
IlhSUmVmZXJlbmNlU3BhY2VUeXBlLmgiCiAjaW5jbHVkZSAiWFJTZXNzaW9uTW9kZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKK25hbWVz
cGFjZSBKU0MgeworY2xhc3MgSlNHbG9iYWxPYmplY3Q7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgRE9NV2luZG93OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNs
YXNzIFdlYlhSU2Vzc2lvbjsKIHN0cnVjdCBYUlNlc3Npb25Jbml0OwpAQCAtNTcsMTIgKzY0LDE0
IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVkPFdlYlhSU3lzdGVtPjo6ZGVyZWY7CiAK
ICAgICB2b2lkIGlzU2Vzc2lvblN1cHBvcnRlZChYUlNlc3Npb25Nb2RlLCBJc1Nlc3Npb25TdXBw
b3J0ZWRQcm9taXNlJiYpOwotICAgIHZvaWQgcmVxdWVzdFNlc3Npb24oWFJTZXNzaW9uTW9kZSwg
Y29uc3QgWFJTZXNzaW9uSW5pdCYsIFJlcXVlc3RTZXNzaW9uUHJvbWlzZSYmKTsKKyAgICB2b2lk
IHJlcXVlc3RTZXNzaW9uKERvY3VtZW50JiwgWFJTZXNzaW9uTW9kZSwgY29uc3QgWFJTZXNzaW9u
SW5pdCYsIFJlcXVlc3RTZXNzaW9uUHJvbWlzZSYmKTsKIAogICAgIC8vIFRoaXMgaXMgYWxzbyBu
ZWVkZWQgYnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFrZVhSQ29tcGF0aWJsZSgpIGFu
ZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dFdlYkdMKCkuCiAgICAgdm9pZCBlbnN1
cmVJbW1lcnNpdmVYUkRldmljZUlzU2VsZWN0ZWQoKTsKICAgICBib29sIGhhc0FjdGl2ZUltbWVy
c2l2ZVhSRGV2aWNlKCkgeyByZXR1cm4gISFtX2FjdGl2ZUltbWVyc2l2ZURldmljZTsgfQogCisg
ICAgdm9pZCBzZXNzaW9uRW5kZWQoY29uc3QgV2ViWFJTZXNzaW9uKik7CisKICAgICAvLyBGb3Ig
dGVzdGluZyBwdXJwb3VzZXMgb25seS4KICAgICB2b2lkIHJlZ2lzdGVyU2ltdWxhdGVkWFJEZXZp
Y2VGb3JUZXN0aW5nKGNvbnN0IFBsYXRmb3JtWFI6OkRldmljZSYpOwogICAgIHZvaWQgdW5yZWdp
c3RlclNpbXVsYXRlZFhSRGV2aWNlRm9yVGVzdGluZyhQbGF0Zm9ybVhSOjpEZXZpY2UqKTsKQEAg
LTgxLDIwICs5MCwzMCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIFdlYlhSU3lzdGVtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKIAorICAgIHVzaW5nIEZlYXR1cmVzQXJyYXkgPSBQbGF0
Zm9ybVhSOjpEZXZpY2U6Okxpc3RPZkVuYWJsZWRGZWF0dXJlczsKKyAgICB1c2luZyBKU0ZlYXR1
cmVzQXJyYXkgPSBWZWN0b3I8SlNDOjpKU1ZhbHVlPjsKKyAgICBQbGF0Zm9ybVhSOjpEZXZpY2Uq
IG9idGFpbkN1cnJlbnREZXZpY2UoWFJTZXNzaW9uTW9kZSwgY29uc3QgSlNGZWF0dXJlc0FycmF5
JiByZXF1aXJlZEZlYXR1cmVzLCBjb25zdCBKU0ZlYXR1cmVzQXJyYXkmIG9wdGlvbmFsRmVhdHVy
ZXMpOworCisgICAgYm9vbCBpbW1lcnNpdmVTZXNzaW9uUmVxdWVzdElzQWxsb3dlZEZvckdsb2Jh
bE9iamVjdChET01XaW5kb3cmLCBEb2N1bWVudCYpIGNvbnN0OworICAgIGJvb2wgaW5saW5lU2Vz
c2lvblJlcXVlc3RJc0FsbG93ZWRGb3JHbG9iYWxPYmplY3QoRE9NV2luZG93JiwgRG9jdW1lbnQm
LCBjb25zdCBYUlNlc3Npb25Jbml0JikgY29uc3Q7CisKKyAgICBzdHJ1Y3QgUmVzb2x2ZWRSZXF1
ZXN0ZWRGZWF0dXJlczsKKyAgICBPcHRpb25hbDxSZXNvbHZlZFJlcXVlc3RlZEZlYXR1cmVzPiBy
ZXNvbHZlUmVxdWVzdGVkRmVhdHVyZXMoWFJTZXNzaW9uTW9kZSwgY29uc3QgWFJTZXNzaW9uSW5p
dCYsIFBsYXRmb3JtWFI6OkRldmljZSosIEpTQzo6SlNHbG9iYWxPYmplY3QmKSBjb25zdDsKKyAg
ICBib29sIGlzWFJQZXJtaXNzaW9uR3JhbnRlZChYUlNlc3Npb25Nb2RlLCBjb25zdCBYUlNlc3Np
b25Jbml0JiwgUGxhdGZvcm1YUjo6RGV2aWNlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCYpIGNvbnN0
OworCiAgICAgLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jZGVmYXVs
dC1pbmxpbmUteHItZGV2aWNlCiAgICAgY2xhc3MgRHVtbXlJbmxpbmVEZXZpY2UgZmluYWwgOiBw
dWJsaWMgUGxhdGZvcm1YUjo6RGV2aWNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIER1bW15SW5s
aW5lRGV2aWNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9zdXBwb3J0ZWRNb2Rlcy5hcHBl
bmQoWFJTZXNzaW9uTW9kZTo6SW5saW5lKTsKLSAgICAgICAgfQorICAgICAgICBEdW1teUlubGlu
ZURldmljZSgpOwogICAgIH07CiAgICAgRHVtbXlJbmxpbmVEZXZpY2UgbV9kZWZhdWx0SW5saW5l
RGV2aWNlOwogCiAgICAgYm9vbCBtX2ltbWVyc2l2ZVhSRGV2aWNlc0hhdmVCZWVuRW51bWVyYXRl
ZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Rlc3RpbmdNb2RlIHsgZmFsc2UgfTsKKyAgICB1aW50
IG1fdGVzdGluZ0RldmljZXMgeyAwIH07CiAKLSAgICBXZWFrUHRyPFdlYlhSU2Vzc2lvbj4gbV9h
Y3RpdmVJbW1lcnNpdmVTZXNzaW9uOworICAgIGJvb2wgbV9wZW5kaW5nSW1tZXJzaXZlU2Vzc2lv
biB7IGZhbHNlIH07CisgICAgUmVmUHRyPFdlYlhSU2Vzc2lvbj4gbV9hY3RpdmVJbW1lcnNpdmVT
ZXNzaW9uOworICAgIFZlY3RvcjxSZWY8V2ViWFJTZXNzaW9uPj4gbV9saXN0T2ZJbmxpbmVTZXNz
aW9uczsKIAogICAgIFdlYWtQdHI8UGxhdGZvcm1YUjo6RGV2aWNlPiBtX2FjdGl2ZUltbWVyc2l2
ZURldmljZTsKICAgICBWZWN0b3I8V2Vha1B0cjxQbGF0Zm9ybVhSOjpEZXZpY2U+PiBtX2ltbWVy
c2l2ZURldmljZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dl
YlhSU3lzdGVtLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0u
aWRsCmluZGV4IGNhZDI3ZTMyN2Q2MzM1YTNhNzA3NmNmNjdjZTllNGMzZjA3YTVkN2EuLjJjN2Mw
MDgzMDczNGY5OGNiMmJmYTY2MTM3ZThlODM4MjhiOTRmZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VieHIvV2ViWFJTeXN0ZW0uaWRsCkBAIC0zMyw3ICszMyw3IEBACiBdIGludGVy
ZmFjZSBXZWJYUlN5c3RlbSA6IEV2ZW50VGFyZ2V0IHsKICAgICAvLyBNZXRob2RzCiAgICAgUHJv
bWlzZTx2b2lkPiBpc1Nlc3Npb25TdXBwb3J0ZWQoWFJTZXNzaW9uTW9kZSBtb2RlKTsKLSAgICBb
TmV3T2JqZWN0XSBQcm9taXNlPFdlYlhSU2Vzc2lvbj4gcmVxdWVzdFNlc3Npb24oWFJTZXNzaW9u
TW9kZSBtb2RlLCBvcHRpb25hbCBYUlNlc3Npb25Jbml0IG9wdGlvbnMpOworICAgIFtOZXdPYmpl
Y3QsIENhbGxXaXRoPURvY3VtZW50XSBQcm9taXNlPFdlYlhSU2Vzc2lvbj4gcmVxdWVzdFNlc3Np
b24oWFJTZXNzaW9uTW9kZSBtb2RlLCBvcHRpb25hbCBYUlNlc3Npb25Jbml0IG9wdGlvbnMpOwog
CiAgICAgLy8gRXZlbnRzCiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmRldmljZWNoYW5n
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UYXNrU291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vVGFza1NvdXJjZS5oCmluZGV4IDg1NDhlZWUwNDc1ZWVjMGYyNjZkZjc3OGU2
MGRjODU0MGM0ZDA5YjMuLjJmNzk0YTFjYmE1ZjE5OGVmNjgyMDMzNTYxZTlhOTVhODcxOGNmNDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UYXNrU291cmNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1Rhc2tTb3VyY2UuaApAQCAtMzksNiArMzksNyBAQCBlbnVtIGNsYXNzIFRh
c2tTb3VyY2UgOiB1aW50OF90IHsKICAgICBQb3N0ZWRNZXNzYWdlUXVldWUsCiAgICAgVXNlcklu
dGVyYWN0aW9uLAogICAgIFdlYkdMLAorICAgIFdlYlhSLAogCiAgICAgLy8gSW50ZXJuYWwgdG8g
V2ViQ29yZQogICAgIEludGVybmFsQXN5bmNUYXNrLCAvLyBTYWZlIHRvIHJlLW9yZGVyIG9yIGRl
bGF5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5oCmluZGV4IGUwMmYwOWU3
MWUzMzBjMzY3ZjE3OWM5MmMyYzRlYzEwOTMxODg5ZDAuLjBiMDQxM2JjYjU4N2I5ZjE0YWIzNDBj
ZGE0ZTQ5ZTliMDZlOTRmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hy
L1BsYXRmb3JtWFIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9QbGF0Zm9ybVhS
LmgKQEAgLTE5LDEyICsxOSwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxtZW1vcnk+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFBsYXRmb3JtWFIgewogCi1lbnVtIGNs
YXNzIFNlc3Npb25Nb2RlIHsKK2VudW0gY2xhc3MgU2Vzc2lvbk1vZGUgOiB1aW50OF90IHsKICAg
ICBJbmxpbmUsCiAgICAgSW1tZXJzaXZlVnIsCiAgICAgSW1tZXJzaXZlQXIsCkBAIC00OCwxOCAr
NDksMTkgQEAgcHVibGljOgogICAgIERldmljZSgpOwogICAgIERldmljZUlkIGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQogCi0gICAgdXNpbmcgTGlzdE9mU3VwcG9ydGVkTW9kZXMgPSBWZWN0
b3I8U2Vzc2lvbk1vZGU+OwogICAgIHVzaW5nIExpc3RPZkVuYWJsZWRGZWF0dXJlcyA9IFZlY3Rv
cjxSZWZlcmVuY2VTcGFjZVR5cGU+OwotCi0gICAgYm9vbCBzdXBwb3J0cyhTZXNzaW9uTW9kZSBt
b2RlKSBjb25zdCB7IHJldHVybiBtX3N1cHBvcnRlZE1vZGVzLmNvbnRhaW5zKG1vZGUpOyB9Ci0g
ICAgdm9pZCBzZXRTdXBwb3J0ZWRNb2Rlcyhjb25zdCBMaXN0T2ZTdXBwb3J0ZWRNb2RlcyYgbW9k
ZXMpIHsgbV9zdXBwb3J0ZWRNb2RlcyA9IG1vZGVzOyB9Ci0gICAgdm9pZCBzZXRFbmFibGVkRmVh
dHVyZXMoY29uc3QgTGlzdE9mRW5hYmxlZEZlYXR1cmVzJiBmZWF0dXJlcykgeyBtX2VuYWJsZWRG
ZWF0dXJlcyA9IGZlYXR1cmVzOyB9CisgICAgYm9vbCBzdXBwb3J0cyhTZXNzaW9uTW9kZSBtb2Rl
KSBjb25zdCB7IHJldHVybiBtX2VuYWJsZWRGZWF0dXJlc01hcC5jb250YWlucyhtb2RlKTsgfQor
ICAgIHZvaWQgc2V0RW5hYmxlZEZlYXR1cmVzKFNlc3Npb25Nb2RlIG1vZGUsIGNvbnN0IExpc3RP
ZkVuYWJsZWRGZWF0dXJlcyYgZmVhdHVyZXMpIHsgbV9lbmFibGVkRmVhdHVyZXNNYXAuc2V0KG1v
ZGUsIGZlYXR1cmVzKTsgfQorICAgIExpc3RPZkVuYWJsZWRGZWF0dXJlcyBlbmFibGVkRmVhdHVy
ZXMoU2Vzc2lvbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkRmVhdHVyZXNNYXAu
Z2V0KG1vZGUpOyB9CiAKICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERldmljZSYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faWQgPT0gb3RoZXIubV9pZDsgfQogCiBwcm90ZWN0ZWQ6
Ci0gICAgTGlzdE9mU3VwcG9ydGVkTW9kZXMgbV9zdXBwb3J0ZWRNb2RlczsKLSAgICBMaXN0T2ZF
bmFibGVkRmVhdHVyZXMgbV9lbmFibGVkRmVhdHVyZXM7CisgICAgLy8gaHR0cHM6Ly9pbW1lcnNp
dmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jeHItZGV2aWNlLWNvbmNlcHQKKyAgICAvLyBFYWNoIFhS
IGRldmljZSBoYXMgYSBsaXN0IG9mIGVuYWJsZWQgZmVhdHVyZXMgZm9yIGVhY2ggWFJTZXNzaW9u
TW9kZSBpbiBpdHMgbGlzdCBvZiBzdXBwb3J0ZWQgbW9kZXMsCisgICAgLy8gd2hpY2ggaXMgYSBs
aXN0IG9mIGZlYXR1cmUgZGVzY3JpcHRvcnMgd2hpY2ggTVVTVCBiZSBpbml0aWFsbHkgYW4gZW1w
dHkgbGlzdC4KKyAgICB1c2luZyBFbmFibGVkRmVhdHVyZXNQZXJNb2RlTWFwID0gV1RGOjpIYXNo
TWFwPFNlc3Npb25Nb2RlLCBMaXN0T2ZFbmFibGVkRmVhdHVyZXMsIFdURjo6SW50SGFzaDxTZXNz
aW9uTW9kZT4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8U2Vzc2lvbk1vZGU+PjsKKyAgICBF
bmFibGVkRmVhdHVyZXNQZXJNb2RlTWFwIG1fZW5hYmxlZEZlYXR1cmVzTWFwOwogCiBwcml2YXRl
OgogICAgIERldmljZUlkIG1faWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS94ci9vcGVueHIvUGxhdGZvcm1YUi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9v
cGVueHIvUGxhdGZvcm1YUi5jcHAKaW5kZXggYTBhODVkMjExM2Q3MWJlMjMyYWU1M2ZkN2UzZDk1
ZmE3ZDczODE4Mi4uNGE2NDcwNTBmOTdlODYzZTU2ZjI1OTI4YjU1YWQ5ZjYyOWEyYThjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhSLmNwcApA
QCAtMjQsNiArMjQsNyBAQAogCiAjaWYgVVNFX09QRU5YUgogI2luY2x1ZGUgPG9wZW54ci9vcGVu
eHIuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
ICNlbmRpZiAvLyBVU0VfT1BFTlhSCkBAIC02Nyw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB+SW1w
bCgpOwogCiAjaWYgVVNFX09QRU5YUgotICAgIHZvaWQgY29sbGVjdFN1cHBvcnRlZFNlc3Npb25N
b2RlcyhEZXZpY2UmLCBYclN5c3RlbUlkKTsKKyAgICBPcHRpb25hbDxWZWN0b3I8U2Vzc2lvbk1v
ZGU+PiBjb2xsZWN0U3VwcG9ydGVkU2Vzc2lvbk1vZGVzKERldmljZSYsIFhyU3lzdGVtSWQpOwog
ICAgIFhySW5zdGFuY2UgbV9pbnN0YW5jZSB7IFhSX05VTExfSEFORExFIH07CiAjZW5kaWYgLy8g
VVNFX09QRU5YUgogfTsKQEAgLTE1MCwxMyArMTUxLDEzIEBAIEluc3RhbmNlOjpJbXBsOjp+SW1w
bCgpCiAKICNpZiBVU0VfT1BFTlhSCiAKLXZvaWQgSW5zdGFuY2U6OkltcGw6OmNvbGxlY3RTdXBw
b3J0ZWRTZXNzaW9uTW9kZXMoRGV2aWNlJiBkZXZpY2UsIFhyU3lzdGVtSWQgc3lzdGVtSWQpCitP
cHRpb25hbDxWZWN0b3I8U2Vzc2lvbk1vZGU+PiBJbnN0YW5jZTo6SW1wbDo6Y29sbGVjdFN1cHBv
cnRlZFNlc3Npb25Nb2RlcyhEZXZpY2UmIGRldmljZSwgWHJTeXN0ZW1JZCBzeXN0ZW1JZCkKIHsK
ICAgICB1aW50MzJfdCB2aWV3Q29uZmlndXJhdGlvbkNvdW50OwogICAgIFhyUmVzdWx0IHJlc3Vs
dCA9IHhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRpb25zKG1faW5zdGFuY2UsIHN5c3RlbUlkLCAw
LCAmdmlld0NvbmZpZ3VyYXRpb25Db3VudCwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdCAhPSBY
Ul9TVUNDRVNTKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygieHJFbnVtZXJhdGVWaWV3Q29uZmln
dXJhdGlvbnMoKTogZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgbV9pbnN0YW5j
ZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICB9CiAKICAgICBYclZpZXdDb25maWd1cmF0aW9uVHlwZSB2aWV3Q29uZmln
dXJhdGlvbnNbdmlld0NvbmZpZ3VyYXRpb25Db3VudF07CkBAIC0xNjQsMjMgKzE2NSwyMyBAQCB2
b2lkIEluc3RhbmNlOjpJbXBsOjpjb2xsZWN0U3VwcG9ydGVkU2Vzc2lvbk1vZGVzKERldmljZSYg
ZGV2aWNlLCBYclN5c3RlbUlkIHN5cwogICAgIGlmIChyZXN1bHQgIT0gWFJfU1VDQ0VTUykgewog
ICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRpb25zKCk6IGVy
cm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2UpLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICBXVEZMb2dBbHdheXMoInhyRW51bWVyYXRlVmlld0NvbmZpZ3VyYXRpb25z
KCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1faW5zdGFuY2UpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCi0gICAgRGV2aWNlOjpMaXN0T2ZTdXBwb3J0ZWRNb2RlcyBzdXBwb3J0ZWRNb2Rl
czsKKyAgICBWZWN0b3I8U2Vzc2lvbk1vZGU+IHN1cHBvcnRlZE1vZGVzOwogICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCB2aWV3Q29uZmlndXJhdGlvbkNvdW50OyArK2kpIHsKICAgICAgICAg
YXV0byB2aWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXMgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJWaWV3
Q29uZmlndXJhdGlvblByb3BlcnRpZXMsIFhSX1RZUEVfVklFV19DT05GSUdVUkFUSU9OX1BST1BF
UlRJRVM+KCk7CiAgICAgICAgIHJlc3VsdCA9IHhyR2V0Vmlld0NvbmZpZ3VyYXRpb25Qcm9wZXJ0
aWVzKG1faW5zdGFuY2UsIHN5c3RlbUlkLCB2aWV3Q29uZmlndXJhdGlvbnNbaV0sICZ2aWV3Q29u
ZmlndXJhdGlvblByb3BlcnRpZXMpOwogICAgICAgICBpZiAocmVzdWx0ICE9IFhSX1NVQ0NFU1Mp
IHsKICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygieHJHZXRWaWV3Q29uZmlndXJhdGlvblByb3Bl
cnRpZXMoKTogZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgbV9pbnN0YW5jZSku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgICAgICB9CiAgICAgICAgIGlmICh2aWV3Q29uZmlndXJhdGlvblBy
b3BlcnRpZXMudmlld0NvbmZpZ3VyYXRpb25UeXBlID09IFhSX1ZJRVdfQ09ORklHVVJBVElPTl9U
WVBFX1BSSU1BUllfTU9OTykKICAgICAgICAgICAgIHN1cHBvcnRlZE1vZGVzLmFwcGVuZChTZXNz
aW9uTW9kZTo6SW1tZXJzaXZlQXIpOwogICAgICAgICBlbHNlIGlmICh2aWV3Q29uZmlndXJhdGlv
blByb3BlcnRpZXMudmlld0NvbmZpZ3VyYXRpb25UeXBlID09IFhSX1ZJRVdfQ09ORklHVVJBVElP
Tl9UWVBFX1BSSU1BUllfU1RFUkVPKQogICAgICAgICAgICAgc3VwcG9ydGVkTW9kZXMuYXBwZW5k
KFNlc3Npb25Nb2RlOjpJbW1lcnNpdmVWcik7CiAgICAgfQotICAgIGRldmljZS5zZXRTdXBwb3J0
ZWRNb2RlcyhzdXBwb3J0ZWRNb2Rlcyk7CisgICAgcmV0dXJuIHN1cHBvcnRlZE1vZGVzOwogfQog
CiAjZW5kaWYgLy8gVVNFX09QRU5YUgpAQCAtMjE4LDcgKzIxOSwxNCBAQCB2b2lkIEluc3RhbmNl
OjplbnVtZXJhdGVJbW1lcnNpdmVYUkRldmljZXMoKQogICAgIH0KIAogICAgIGF1dG8gZGV2aWNl
ID0gbWFrZVVuaXF1ZTxEZXZpY2U+KCk7Ci0gICAgbV9pbXBsLT5jb2xsZWN0U3VwcG9ydGVkU2Vz
c2lvbk1vZGVzKCpkZXZpY2UsIHN5c3RlbUlkKTsKKyAgICBhdXRvIHNlc3Npb25Nb2RlcyA9IG1f
aW1wbC0+Y29sbGVjdFN1cHBvcnRlZFNlc3Npb25Nb2RlcygqZGV2aWNlLCBzeXN0ZW1JZCk7Cisg
ICAgaWYgKHNlc3Npb25Nb2RlcykgeworICAgICAgICBmb3IgKGF1dG8mIG1vZGUgOiBzZXNzaW9u
TW9kZXMudmFsdWUoKSkgeworICAgICAgICAgICAgLy8gVE9ETzogZmlsbCBpbiBmZWF0dXJlcwor
ICAgICAgICAgICAgZGV2aWNlLT5zZXRFbmFibGVkRmVhdHVyZXMobW9kZSwgeyB9KTsKKyAgICAg
ICAgfQorICAgIH0KKwogICAgIG1faW1tZXJzaXZlWFJEZXZpY2VzLmFwcGVuZChXVEZNb3ZlKGRl
dmljZSkpOwogI2VuZGlmIC8vIFVTRV9PUEVOWFIKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvV2ViWFJUZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViWFJU
ZXN0LmNwcAppbmRleCBiMjBhNDMzNzJiMjRmZjdkZmM2ZWE1YmFhNzlmNWNhNTZlYzU1MjI4Li5i
NDE2N2RhMDAyZjNiZTY5NmQ5YTk1ZjQ0ZTMzZDQxNzBjZGY2NzgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL1dlYlhSVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9XZWJYUlRlc3QuY3BwCkBAIC01NCwxMyArNTQsMTQgQEAgdm9pZCBXZWJYUlRlc3Q6OnNp
bXVsYXRlRGV2aWNlQ29ubmVjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBj
b25zdAogICAgICAgICAgICAgc2ltdWxhdGVkRGV2aWNlLnZpZXdzKCkuYXBwZW5kKHZpZXcucmVs
ZWFzZVJldHVyblZhbHVlKCkpOwogICAgICAgICB9CiAKKyAgICAgICAgVmVjdG9yPFhSUmVmZXJl
bmNlU3BhY2VUeXBlPiBmZWF0dXJlczsKICAgICAgICAgaWYgKGluaXQuc3VwcG9ydGVkRmVhdHVy
ZXMpIHsKLSAgICAgICAgICAgIFZlY3RvcjxYUlJlZmVyZW5jZVNwYWNlVHlwZT4gZmVhdHVyZXM7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBpbml0LnN1cHBvcnRlZEZlYXR1cmVz
LnZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byByZWZlcmVuY2VTcGFjZVR5cGUg
PSBwYXJzZUVudW1lcmF0aW9uPFhSUmVmZXJlbmNlU3BhY2VUeXBlPigqY29udGV4dC5leGVjU3Rh
dGUoKSwgZmVhdHVyZSkpCi0gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLmFwcGVuZChyZWZl
cmVuY2VTcGFjZVR5cGUudmFsdWUoKSk7CisgICAgICAgICAgICBpZiAoYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gY29udGV4dC5leGVjU3RhdGUoKSkgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYg
ZmVhdHVyZSA6IGluaXQuc3VwcG9ydGVkRmVhdHVyZXMudmFsdWUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoYXV0byByZWZlcmVuY2VTcGFjZVR5cGUgPSBwYXJzZUVudW1lcmF0aW9uPFhS
UmVmZXJlbmNlU3BhY2VUeXBlPigqZ2xvYmFsT2JqZWN0LCBmZWF0dXJlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZlYXR1cmVzLmFwcGVuZChyZWZlcmVuY2VTcGFjZVR5cGUudmFsdWUoKSk7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2ltdWxhdGVk
RGV2aWNlLnNldEVuYWJsZWRGZWF0dXJlcyhmZWF0dXJlcyk7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoaW5pdC5ib3VuZHNDb29yZGluYXRlcykgewpAQCAtODcsNyArODgsOSBAQCB2b2lkIFdl
YlhSVGVzdDo6c2ltdWxhdGVEZXZpY2VDb25uZWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0CiAgICAgICAgICAgICBpZiAoaW5pdC5zdXBwb3J0c0ltbWVyc2l2ZSkK
ICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRNb2Rlcy5hcHBlbmQoWFJTZXNzaW9uTW9kZTo6SW1t
ZXJzaXZlVnIpOwogICAgICAgICB9Ci0gICAgICAgIHNpbXVsYXRlZERldmljZS5zZXRTdXBwb3J0
ZWRNb2RlcyhzdXBwb3J0ZWRNb2Rlcyk7CisKKyAgICAgICAgZm9yIChhdXRvJiBtb2RlIDogc3Vw
cG9ydGVkTW9kZXMpCisgICAgICAgICAgICBzaW11bGF0ZWREZXZpY2Uuc2V0RW5hYmxlZEZlYXR1
cmVzKG1vZGUsIGZlYXR1cmVzKTsKIAogICAgICAgICBtX2NvbnRleHQtPnJlZ2lzdGVyU2ltdWxh
dGVkWFJEZXZpY2VGb3JUZXN0aW5nKHNpbXVsYXRlZERldmljZSk7CiAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4NGEyZjZk
ZmM3YWZmZjhhNmRkMzBkM2YwZmE1ZDRmYjI2YWEwMjY5Li41M2U4MzEzZTFmYTk1MWU2ZDlmNmIx
ZTZlNTJlNDQwYzM3ZTY0N2IwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDUtMTQgIFNl
cmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dlYlhS
XSBJbXBsZW1lbnQgcmVxdWVzdFNlc3Npb24oKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93cGUvVGVzdEV4cGVjdGF0aW9uczogQWRk
ZWQgc2V2ZXJhbCBwcmV2aW91c2x5IHNraXBwZWQgdGVzdHMKKyAgICAgICAgdGhhdCBhcmUgbm93
IHBhc3NpbmcuCisKIDIwMjAtMDUtMTQgIERpZWdvIFBpbm8gR2FyY2lhICA8ZHBpbm9AaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBHYXJkZW5pbmcsIHVwZGF0ZSBleHBlY3RhdGlvbnMgYWZ0
ZXIgcjI2MTYwOQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5kZXggOTBiYzIwYTI5OTRh
MzMxNmQzMGY0NGQ2M2Q4YjEyYWNlZjg3N2Y1Mi4uZjdmZmZhNjg2YTNmODU5M2ViN2E4MzgzZGM1
N2RiYTQ2MWJjYjliMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTkgQEAKKzIwMjAtMDUtMTQgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW1dlYlhSXSBJbXBsZW1lbnQgcmVxdWVzdFNlc3Npb24oKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExODg4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25faW1tZXJzaXZlLmh0dHBzLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2
aWNlX3JlcXVlc3RTZXNzaW9uX2ltbWVyc2l2ZV9ub19nZXN0dXJlLmh0dHBzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3Jl
cXVlc3RTZXNzaW9uX2ltbWVyc2l2ZV91bnN1cHBvcnRlZC5odHRwcy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0
U2Vzc2lvbl9ub19tb2RlLmh0dHBzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX25vbl9pbW1lcnNp
dmVfbm9fZ2VzdHVyZS5odHRwcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9vcHRpb25hbEZlYXR1
cmVzLmh0dHBzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX3JlcXVpcmVkRmVhdHVyZXNfdW5rbm93
bi5odHRwcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJ4ci94clNlc3Npb25fZmVhdHVyZXNfZGV2aWNlU3VwcG9ydC5odHRwcy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorCiAyMDIwLTA1LTEyICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdt
YWlsLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgQGlzQ29uc3RydWN0b3IgYnl0ZWNvZGUgaW50
cmluc2ljIGFuZCBieXRlY29kZSBmb3IgdGhhdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lv
bl9pbW1lcnNpdmUuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNp
dmUuaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2ZDk3YjI5NDkwNDg3NzYyM2E5MTY2
ZGRiYzVhMGY2NGUyZjQzODIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX2lt
bWVyc2l2ZS5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACisKK1BBU1MgVGVzdHMg
cmVxdWVzdFNlc3Npb24gcmVzb2x2ZXMgd2hlbiBzdXBwb3J0ZWQgCitQQVNTIFRlc3RzIHJlcXVl
c3RTZXNzaW9uIGFjY2VwdHMgWFJTZXNzaW9uSW5pdCBkaWN0aW9uYXJ5IAorUEFTUyBUZXN0cyBy
ZXF1ZXN0U2Vzc2lvbiBpZ25vcmVzIHVua25vd24gb3B0aW9uYWxGZWF0dXJlcyAKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94
ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNpdmVfbm9fZ2VzdHVyZS5odHRwcy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhy
L3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX2ltbWVyc2l2ZV9ub19nZXN0dXJlLmh0dHBzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yNzk2M2ZhOWE3YzY0MjRkYWY5NjJhN2NkM2IzNTVlNTM0MTE2
ZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNpdmVfbm9fZ2Vz
dHVyZS5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgUmVxdWVzdGlu
ZyBpbW1lcnNpdmUgc2Vzc2lvbiBvdXRzaWRlIG9mIGEgdXNlciBnZXN0dXJlIHJlamVjdHMgCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25faW1tZXJzaXZlX3Vuc3VwcG9ydGVkLmh0dHBz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25faW1tZXJzaXZlX3Vuc3VwcG9ydGVkLmh0
dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDkwMzY3OTlhNTY3NGEyMzVjY2M2OThhODRi
N2Y4YTYyOWJkNGQwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNp
dmVfdW5zdXBwb3J0ZWQuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNT
IFJlcXVlc3RpbmcgYW4gaW1tZXJzaXZlIHNlc3Npb24gd2hlbiB1bnN1cHBvcnRlZCByZWplY3Rz
IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX25vX21vZGUuaHR0cHMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94
ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9ub19tb2RlLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mMGZkMWI2YWZkY2I0ZGVlYjdhNTRmM2E2M2MxYzUwZWNiN2E2M2JhCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4
ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9ub19tb2RlLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDMgQEAKKworUEFTUyBSZXF1ZXN0aW5nIGEgc2Vzc2lvbiB3aXRoIG5vIG1vZGUgcmVq
ZWN0cyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9ub25faW1tZXJzaXZlX25vX2dl
c3R1cmUuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9ub25faW1tZXJzaXZl
X25vX2dlc3R1cmUuaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzYzI5NmU4MDhjNTI4
NjcwYzc0NWZmMDc4ZTIxNWQyOTYwYmI3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RT
ZXNzaW9uX25vbl9pbW1lcnNpdmVfbm9fZ2VzdHVyZS5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwzIEBACisKK1BBU1MgUmVxdWVzdGluZyBub24taW1tZXJzaXZlIHNlc3Npb24gb3V0c2lk
ZSBvZiBhIHVzZXIgZ2VzdHVyZSBzdWNjZWVkcyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vz
c2lvbl9vcHRpb25hbEZlYXR1cmVzLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Np
b25fb3B0aW9uYWxGZWF0dXJlcy5odHRwcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGEyZjIy
NTM0OWEyODYwMGM4ZjczNWY5MTRmN2VhNWRhNzYxZjQ2OQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJEZXZpY2Vf
cmVxdWVzdFNlc3Npb25fb3B0aW9uYWxGZWF0dXJlcy5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSw2IEBACisKK1BBU1MgVGVzdHMgcmVxdWVzdFNlc3Npb24gYWNjZXB0cyBYUlNlc3Npb25J
bml0IGRpY3Rpb25hcnkgCitQQVNTIFRlc3RzIHJlcXVlc3RTZXNzaW9uIGFjY2VwdHMgWFJTZXNz
aW9uSW5pdCBkaWN0aW9uYXJ5IHdpdGggZW1wdHkgZmVhdHVyZSBsaXN0cyAKK1BBU1MgVGVzdHMg
cmVxdWVzdFNlc3Npb24gaWdub3JlcyB1bmtub3duIHN0cmluZ3MgaW4gb3B0aW9uYWxGZWF0dXJl
cyAKK1BBU1MgVGVzdHMgcmVxdWVzdFNlc3Npb24gaWdub3JlcyB1bmtub3duIG9iamVjdHMgaW4g
b3B0aW9uYWxGZWF0dXJlcyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9yZXF1aXJl
ZEZlYXR1cmVzX3Vua25vd24uaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9y
ZXF1aXJlZEZlYXR1cmVzX3Vua25vd24uaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4
YTI4YTg5NmZjMTNkMjM2YzRiNmU1MTk0ZTZjNjM2OGI5YWNlN2YKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2
aWNlX3JlcXVlc3RTZXNzaW9uX3JlcXVpcmVkRmVhdHVyZXNfdW5rbm93bi5odHRwcy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwzIEBACisKK1BBU1MgVGVzdHMgcmVxdWVzdFNlc3Npb24gcmVqZWN0
cyBmb3IgdW5rbm93biByZXF1aXJlZEZlYXR1cmVzIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyU2Vzc2lvbl9mZWF0dXJl
c19kZXZpY2VTdXBwb3J0Lmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIveHJTZXNzaW9uX2ZlYXR1cmVzX2RldmljZVN1
cHBvcnQuaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmN2VhNDZlMGNmNzQ1ZTY5ZjVk
NDYyMDA1YmUxZjc1NzQxODQxOGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyU2Vzc2lvbl9mZWF0dXJlc19kZXZp
Y2VTdXBwb3J0Lmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBJbW1l
cnNpdmUgWFJTZXNzaW9uIHJlcXVlc3RzIHdpdGggbm8gc3VwcG9ydGVkIGRldmljZSBzaG91bGQg
cmVqZWN0IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93cGUvVGVzdEV4cGVj
dGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dwZS9UZXN0RXhwZWN0YXRpb25zCmluZGV4
IDFlNWI3NmFmYTcxZWE1YmQ4NTE1MDVmMWJmOGJkZjdiZmI3MzQ5NmMuLmFjZDY0YWE2NjZiOTE4
OWFkMWYxYjY3MGI3NDZjYjBmNjFhNDliZjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dwZS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dwZS9U
ZXN0RXhwZWN0YXRpb25zCkBAIC0xMDIyLDYgKzEwMjIsMTQgQEAgd2Via2l0Lm9yZy9iLzIwOTg1
OSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL2lkbGhhcm5lc3MuaHR0cHMu
d2luZG8KIHdlYmtpdC5vcmcvYi8yMDk4NTkgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJ4ci94ckRldmljZV9pc1Nlc3Npb25TdXBwb3J0ZWRfaW5saW5lLmh0dHBzLmh0bWwgWyBQ
YXNzIF0KIHdlYmtpdC5vcmcvYi8yMDk4NTkgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJ4ci94ckRldmljZV9pc1Nlc3Npb25TdXBwb3J0ZWRfaW1tZXJzaXZlLmh0dHBzLmh0bWwg
WyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8yMDk4NTkgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy93ZWJ4ci94ckRldmljZV9pc1Nlc3Npb25TdXBwb3J0ZWRfaW1tZXJzaXZlX3Vuc3VwcG9y
dGVkLmh0dHBzLmh0bWwgWyBQYXNzIF0KK3dlYmtpdC5vcmcvYi8yMDk4NTkgaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lvbl9pbW1lcnNp
dmUuaHR0cHMuaHRtbCBbIFBhc3MgXQord2Via2l0Lm9yZy9iLzIwOTg1OSBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVlc3RTZXNzaW9uX2ltbWVyc2l2
ZV9ub19nZXN0dXJlLmh0dHBzLmh0bWwgWyBQYXNzIF0KK3dlYmtpdC5vcmcvYi8yMDk4NTkgaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJ4ci94ckRldmljZV9yZXF1ZXN0U2Vzc2lv
bl9pbW1lcnNpdmVfdW5zdXBwb3J0ZWQuaHR0cHMuaHRtbCBbIFBhc3MgXQord2Via2l0Lm9yZy9i
LzIwOTg1OSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3Jl
cXVlc3RTZXNzaW9uX25vX21vZGUuaHR0cHMuaHRtbCBbIFBhc3MgXQord2Via2l0Lm9yZy9iLzIw
OTg1OSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnhyL3hyRGV2aWNlX3JlcXVl
c3RTZXNzaW9uX25vbl9pbW1lcnNpdmVfbm9fZ2VzdHVyZS5odHRwcy5odG1sIFsgUGFzcyBdCit3
ZWJraXQub3JnL2IvMjA5ODU5IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VieHIv
eHJEZXZpY2VfcmVxdWVzdFNlc3Npb25fb3B0aW9uYWxGZWF0dXJlcy5odHRwcy5odG1sIFsgUGFz
cyBdCit3ZWJraXQub3JnL2IvMjA5ODU5IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VieHIveHJEZXZpY2VfcmVxdWVzdFNlc3Npb25fcmVxdWlyZWRGZWF0dXJlc191bmtub3duLmh0
dHBzLmh0bWwgWyBQYXNzIF0KK3dlYmtpdC5vcmcvYi8yMDk4NTkgaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJ4ci94clNlc3Npb25fZmVhdHVyZXNfZGV2aWNlU3VwcG9ydC5odHRw
cy5odG1sIFsgUGFzcyBdCiAKICMgUGFzc2luZyBzaW5jZSByMjU5MDA2LgogaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvYWxpZ25tZW50L3NlbGYtYmFzZWxpbmUv
Z3JpZC1zZWxmLWJhc2VsaW5lLWNoYW5nZXMtZ3JpZC1hcmVhLXNpemUtMDEwLmh0bWwK
</data>
<flag name="review"
          id="415067"
          type_id="1"
          status="+"
          setter="youennf"
    />
          </attachment>
      

    </bug>

</bugzilla>