<?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>225601</bug_id>
          
          <creation_ts>2021-05-10 11:28:44 -0700</creation_ts>
          <short_desc>Introduce an internal unit to render audio MediaStreamTrack(s)</short_desc>
          <delta_ts>2021-05-12 01:58:16 -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>WebRTC</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225603</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1758563</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-05-10 11:28:44 -0700</bug_when>
    <thetext>Introduce an internal unit to render audio MediaStreamTrack(s)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758568</commentid>
    <comment_count>1</comment_count>
      <attachid>428187</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-05-10 11:34:40 -0700</bug_when>
    <thetext>Created attachment 428187
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758586</commentid>
    <comment_count>2</comment_count>
      <attachid>428191</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-05-10 12:04:44 -0700</bug_when>
    <thetext>Created attachment 428191
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758944</commentid>
    <comment_count>3</comment_count>
      <attachid>428191</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-05-11 10:13:43 -0700</bug_when>
    <thetext>Comment on attachment 428191
Patch

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

&gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:2
&gt; + * Copyright (C) 2017-2020 Apple Inc. All rights reserved.

s/2017-2020/2017-2021/

&gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:125
&gt; +    m_dataSource-&gt;pushSamples(sampleTime, audioData, sampleCount);

Is it OK to push samples into a newly created source, before the main thread setup block runs?

&gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.h:2
&gt; + * Copyright (C) 2017 Apple Inc. All rights reserved.

s/2017/2017-2021/

&gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:2
&gt; + * Copyright (C) 2020 Apple Inc. All rights reserved.

s/2020/2021/

&gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:100
&gt; +    auto audioUnitDeviceID = device ? device-&gt;deviceID() : 0;

`device` can&apos;t be NULL because of the early return above.

&gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:130
&gt; +    if (auto error = AudioOutputUnitStart(m_remoteIOUnit)) {
&gt; +        RELEASE_LOG_ERROR(WebRTC, &quot;AudioMediaStreamTrackRendererInternalUnit::start AudioOutputUnitStart failed, error = %d&quot;, error);
&gt; +        AudioComponentInstanceDispose(m_remoteIOUnit);
&gt; +        m_remoteIOUnit = nullptr;
&gt; +    }

Shouldn&apos;t this return so we don&apos;t set m_isStarted to true?

&gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.h:2
&gt; + * Copyright (C) 2020 Apple Inc. All rights reserved.

s/2020/2021/

&gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:2
&gt; + * Copyright (C) 2020 Apple Inc. All rights reserved.

Ditto

&gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:84
&gt; +void AudioMediaStreamTrackRendererUnit::addSource(Ref&lt;AudioSampleDataSource&gt;&amp;&amp; source)
&gt; +{
&gt; +    RELEASE_LOG(WebRTC, &quot;AudioMediaStreamTrackRendererUnit::addSource&quot;);
&gt; +

This is currently always called on the main thread. If that will always be true, it is probably worth ASSERTing that here.

&gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:98
&gt; +void AudioMediaStreamTrackRendererUnit::removeSource(AudioSampleDataSource&amp; source)
&gt; +{
&gt; +    RELEASE_LOG(WebRTC, &quot;AudioMediaStreamTrackRendererUnit::removeSource&quot;);
&gt; +

Ditto

&gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:154
&gt; +    return 0;

All exit points return 0. Will they always?

&gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:2
&gt; + * Copyright (C) 2020 Apple Inc. All rights reserved.

s/2020/2021/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759202</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-05-12 01:22:37 -0700</bug_when>
    <thetext>Thanks for the review, I updated accordingly.

(In reply to Eric Carlson from comment #3)
&gt; Comment on attachment 428191 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428191&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:2
&gt; &gt; + * Copyright (C) 2017-2020 Apple Inc. All rights reserved.
&gt; 
&gt; s/2017-2020/2017-2021/
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:125
&gt; &gt; +    m_dataSource-&gt;pushSamples(sampleTime, audioData, sampleCount);
&gt; 
&gt; Is it OK to push samples into a newly created source, before the main thread
&gt; setup block runs?

Yes, the main thread block will trigger rendering of audio but we can still store audio in the ring buffer before that.

&gt; &gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.h:2
&gt; &gt; + * Copyright (C) 2017 Apple Inc. All rights reserved.
&gt; 
&gt; s/2017/2017-2021/
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:2
&gt; &gt; + * Copyright (C) 2020 Apple Inc. All rights reserved.
&gt; 
&gt; s/2020/2021/
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:100
&gt; &gt; +    auto audioUnitDeviceID = device ? device-&gt;deviceID() : 0;
&gt; 
&gt; `device` can&apos;t be NULL because of the early return above.

Not really, in case we are given an empty string, we want to reset deviceID to 0.

&gt; &gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:130
&gt; &gt; +    if (auto error = AudioOutputUnitStart(m_remoteIOUnit)) {
&gt; &gt; +        RELEASE_LOG_ERROR(WebRTC, &quot;AudioMediaStreamTrackRendererInternalUnit::start AudioOutputUnitStart failed, error = %d&quot;, error);
&gt; &gt; +        AudioComponentInstanceDispose(m_remoteIOUnit);
&gt; &gt; +        m_remoteIOUnit = nullptr;
&gt; &gt; +    }
&gt; 
&gt; Shouldn&apos;t this return so we don&apos;t set m_isStarted to true?

Seems better indeed!

&gt; &gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.h:2
&gt; &gt; + * Copyright (C) 2020 Apple Inc. All rights reserved.
&gt; 
&gt; s/2020/2021/
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:2
&gt; &gt; + * Copyright (C) 2020 Apple Inc. All rights reserved.
&gt; 
&gt; Ditto
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:84
&gt; &gt; +void AudioMediaStreamTrackRendererUnit::addSource(Ref&lt;AudioSampleDataSource&gt;&amp;&amp; source)
&gt; &gt; +{
&gt; &gt; +    RELEASE_LOG(WebRTC, &quot;AudioMediaStreamTrackRendererUnit::addSource&quot;);
&gt; &gt; +
&gt; 
&gt; This is currently always called on the main thread. If that will always be
&gt; true, it is probably worth ASSERTing that here.

Sounds good but we cannot do it right now since this is currently used in GPUProcess from a work queue. Once we switch to an internal source in bug 225603, we will be able to add it.

&gt; &gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:98
&gt; &gt; +void AudioMediaStreamTrackRendererUnit::removeSource(AudioSampleDataSource&amp; source)
&gt; &gt; +{
&gt; &gt; +    RELEASE_LOG(WebRTC, &quot;AudioMediaStreamTrackRendererUnit::removeSource&quot;);
&gt; &gt; +
&gt; 
&gt; Ditto
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:154
&gt; &gt; +    return 0;
&gt; 
&gt; All exit points return 0. Will they always?
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:2
&gt; &gt; + * Copyright (C) 2020 Apple Inc. All rights reserved.
&gt; 
&gt; s/2020/2021/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759203</commentid>
    <comment_count>5</comment_count>
      <attachid>428361</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-05-12 01:23:17 -0700</bug_when>
    <thetext>Created attachment 428361
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759214</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-12 01:57:44 -0700</bug_when>
    <thetext>Committed r277364 (237622@main): &lt;https://commits.webkit.org/237622@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428361.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759215</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-12 01:58:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/77893147&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428187</attachid>
            <date>2021-05-10 11:34:40 -0700</date>
            <delta_ts>2021-05-10 12:07:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225601-20210510203438.patch</filename>
            <type>text/plain</type>
            <size>71455</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MjU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTRlYzI0YTM4ZDFmZDZi
MjE3ZWNiYmEwNGFiOTI3YTEzN2UzNTc3Mi4uYTExZTAxNTI5YmI1YTkyZGEwY2FhMjU3M2RkNTll
ZDRhZjkyMjZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTA1LTEwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgYW4gaW50
ZXJuYWwgdW5pdCB0byByZW5kZXIgYXVkaW8gTWVkaWFTdHJlYW1UcmFjayhzKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NjAxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBmaWxlcyBmcm9tIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYyB0byBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYSBzaW5j
ZSB0aGV5IGFyZSB1c2VkIGluIGJvdGggaU9TIGFuZCBtYWNPUy4KKyAgICAgICAgTW92ZSBBdWRp
byBVbml0IGZ1bmN0aW9uYWxpdHkgb3V0IG9mIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
VW5pdC4KKyAgICAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0IGlzIHJlc3Bv
bnNpYmxlIHRvIG1hbmFnZSBzb3VyY2VzIGFuZCBkbyB0aGUgbWl4aW5nLgorICAgICAgICBUbyBh
Y3R1YWxseSByZW5kZXIgYXVkaW8sIGl0IHdpbGwgdXNlIGFuIEludGVybmFsVW5pdCwgd2hpY2gg
aXMgY3VycmVudGx5IGRvbmUgaW4gcHJvY2Vzcy4KKworICAgICAgICBBIGZ1dHVyZSB3b3JrIHdp
bGwgYWRkIHN1cHBvcnQgZm9yIGEgcmVtb3RlIEludGVybmFsVW5pdCwgdGhhdCB3b3VsZCBydW4g
b24gR1BVUHJvY2Vzcy4KKyAgICAgICAgVG8gcHJlcGFyZSBmb3IgdGhhdCwgYSBjYWxsYmFjayBh
bGxvd3MgY3VzdG9taXppbmcgdGhlIEludGVybmFsIFVuaXQgY3JlYXRpb24uCisgICAgICAgIFdl
IGFsc28gY2hhbmdlIHJlbmRlcmVyIHN0YXJ0IHRvIGJlIGFzeW5jaHJvbm91cywgc2luY2UgaXQg
cmVxdWlyZXMgZmV0Y2hpbmcgdGhlIGF1ZGlvIGRlc2NyaXB0aW9uIGZyb20gR1BVUHJvY2Vzcy4K
KworICAgICAgICBObyBjaGFuZ2Ugb2YgYmVoYXZpb3IsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9B
dWRpb1NhbXBsZUJ1ZmZlckxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9B
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6c3RhcnRSZW5kZXJlcik6CisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAuCisgICAgICAg
IChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzdGFydCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJDb2NvYS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVySW50ZXJuYWxVbml0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVu
aXQ6OmNyZWF0ZUxvY2FsSW50ZXJuYWxVbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OkxvY2FsQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6cmV0cmlldmVGb3JtYXRE
ZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVySW50ZXJuYWxVbml0OjpzZXRBdWRpb091dHB1dERldmljZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0Ojpz
dGFydCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVySW50ZXJuYWxVbml0OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJ
bnRlcm5hbFVuaXQ6OnJlbmRlcmluZ0NhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdC5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmdldENyZWF0ZUludGVybmFsVW5pdEZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2V0
Q3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW50
ZXJuYWxVbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyVW5pdDo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdDo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6fkF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNldEF1ZGlvT3V0cHV0RGV2aWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6YWRkU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6
cmVtb3ZlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJVbml0OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyVW5pdDo6cmV0cmlldmVGb3JtYXREZXNjcmlwdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnJlbmRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmguCisKIDIwMjEt
MDUtMDkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBiYWNr
IHByb3RlY3Rpb24gb2YgdGhlIHBpeGVsIGJ1ZmZlciBpbiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
dG9DRkRhdGEgcmVtb3ZlZCBpbiByMjc3MjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBh
NzVkY2M3ZWFhZjlkYTkwODFiYmU3OTdiYzQ5ODRiNzg2Nzk1ZWZkLi44YmQwMDIyOThkNmRkZjBj
NWU2NzY4M2E0MmQwNzEzYWMxMTU3MTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTUy
NiwxNCArNTI2LDE1IEBAIHBsYXRmb3JtL21lZGlhcmVjb3JkZXIvTWVkaWFSZWNvcmRlclByaXZh
dGVBVkZJbXBsLmNwcAogcGxhdGZvcm0vbWVkaWFyZWNvcmRlci9jb2NvYS9BdWRpb1NhbXBsZUJ1
ZmZlckNvbXByZXNzb3IubW0KIHBsYXRmb3JtL21lZGlhcmVjb3JkZXIvY29jb2EvTWVkaWFSZWNv
cmRlclByaXZhdGVXcml0ZXJDb2NvYS5tbQogcGxhdGZvcm0vbWVkaWFyZWNvcmRlci9jb2NvYS9W
aWRlb1NhbXBsZUJ1ZmZlckNvbXByZXNzb3IubW0KK3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29h
L0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCitwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdC5jcHAK
K3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
VW5pdC5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVE
ZXZpY2UubW0KIHBsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9BVkF1ZGlvU2Vzc2lvbkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLm1tIEBuby11bmlmeQogcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0NvcmVB
dWRpb0NhcHR1cmVTb3VyY2VJT1MubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9s
aWJ3ZWJydGMvTGliV2ViUlRDUHJvdmlkZXJDb2NvYS5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tIEBuby11bmlmeQogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tIEBuby11bmlmeQotcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCi1wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNw
cAogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJlZFVuaXQuY3BwCiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5jcHAKIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBi
NThiOTg2Yzc2NGIzZDQxZjYxZjE0MDMxMTkyNzZiYjRiODlhNjQwLi5iNzZmY2UwZWE5ZmVlMDZl
OGY1YmY2OGJjZTRiOTBkZDE0NTAwNDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTc1LDYgKzExNzUsOCBAQAogCQk0MUI4
Nzc2MjIzREUxMDQ1MDAzNjM4QjggLyogUmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQjg3NzYwMjNE
RTEwNDIwMDM2MzhCOCAvKiBSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxQkJBODY2MjU3RTM3
M0IwMEFDN0Y2RCAvKiBTRnJhbWVVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDEyMDlFMjQyNTdBMkZCQjAwMTIwQUNBIC8qIFNGcmFtZVV0aWxz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFC
RjIwNDkyMkJBN0JFODAwMDRGODEyIC8qIFJlYWx0aW1lVmlkZW9Tb3VyY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkYyMDQwMjJCOTQ3MTYwMDA0
RjgxMiAvKiBSZWFsdGltZVZpZGVvU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDFDM0I4QTEyNjQ5QjFFMDAwNEVENERFIC8qIEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUMzQjg5RjI2NDlCMUI3MDA0RUQ0REUgLyog
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MUMzQjhBMjI2NDlCMUU1MDA0
RUQ0REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUMzQjg5QjI2NDlCMUI2MDA0RUQ0
REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFDNzYwQjEwRURFMDNEMzAwQzE2
NTVGIC8qIFNjcmlwdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MUNCODQwMTI1
Q0FCN0IzMDAxMEUyQjEgLyogUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQ0I4NDAwMjVDQUI3
QjAwMDEwRTJCMSAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VDb2NvYS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxQ0I4NDAyMjVDQUI4
MUUwMDEwRTJCMSAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDREQ4MzNBMUU0MzI0QkIwMDYyMUU5
MiAvKiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzY5Niw4ICs3Njk4LDYgQEAKIAkJM0ZCQzRB
RjIxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMDI0RkM4MjNDRjI1NEYwMEZE
Rjk4RSAvKiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDEwNzkwOEExRkMzRTRGMjAwNjFCMjdBIC8qIENsaWVudE9yaWdpbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDbGllbnRPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDEwODdGMDEyNDhFNTlDODAwNjgwRTkxIC8qIEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0MTA4N0YwMzI0OEU1OUM5MDA2ODBFOTEgLyogQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MTA5MzgyODIzNDc3OTlBMDA5NDI4QkEgLyogSlNBYm9ydENvbnRyb2xsZXJDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYm9ydENvbnRy
b2xsZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTA5MzgyQzIz
NDc4NTBFMDA5NDI4QkEgLyogSlNBYm9ydFNpZ25hbEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0Fib3J0U2lnbmFsQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDEwQThFRjQyNEY4MjNCOTAwNEY5MDcwIC8qIFRleHRFbmNvZGVyU3RyZWFtLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBUZXh0RW5jb2RlclN0cmVhbS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
ODYzLDggKzc4NjMsNiBAQAogCQk0MTYyQTQ0RjEwMTE0NUFFMDBERkYzRUQgLyogRGVkaWNhdGVk
V29ya2VyR2xvYmFsU2NvcGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2MkE0
NTUxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNjJBNDU2MTAxMTQ2
NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE2QTA2OTIyM0NDQUE5MzAwMzQ3MTA5IC8qIEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0MTZBMDY5MzIzQ0NBQTk0MDAzNDcxMDkgLyogQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2QTA2OTQyM0NDQUE5RTAwMzQ3MTA5IC8qIEF1
ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxNkEwNjk1MjNDQ0FBOUUwMDM0NzEwOSAvKiBBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxNkEwNjk2MjNDQ0FBOUYwMDM0NzEwOSAvKiBBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
ODAyMiw2ICs4MDIwLDEyIEBACiAJCTQxQkNFODc3MjVGN0E2N0EwMDQ2QzJFNSAvKiBSVENUcmFu
c2Zvcm1FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENUcmFuc2Zv
cm1FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUJGMjA0MDIyQjk0NzE2
MDAwNEY4MTIgLyogUmVhbHRpbWVWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFsdGlt
ZVZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQkYyMDQyMjJC
OTQ3MTcwMDA0RjgxMiAvKiBSZWFsdGltZVZpZGVvU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0MUMzQjg5QjI2NDlCMUI2MDA0RUQ0REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJVbml0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5p
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUMzQjg5QzI2NDlCMUI2MDA0RUQ0
REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQxQzNCODlEMjY0OUIxQjYwMDRFRDRERSAvKiBBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MUMzQjg5RTI2NDlCMUI3MDA0RUQ0REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJ
bnRlcm5hbFVuaXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJJbnRlcm5hbFVuaXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MUMzQjg5RjI2NDlCMUI3MDA0RUQ0REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJ
bnRlcm5hbFVuaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJJbnRlcm5hbFVuaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFDM0I4QTAy
NjQ5QjFCNzAwNEVENERFIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYg
LyogU2NyaXB0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0
U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFDN0UxMDUxRTZBNTQzNjAw
MjdCNERFIC8qIENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFDN0UxMDYxRTZBNTQzNjAwMjdCNERF
IC8qIENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNzU0NSw2ICsxNzU0OSw3IEBACiAJCTA3MjIxQjkyMTdDRjBB
RDQwMDg0OEU1MSAvKiBtZWRpYXN0cmVhbSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJNDFDM0I4OUEyNjQ5QjE4RTAwNEVENERFIC8qIGNvY29hICovLAog
CQkJCUNEQzY3NTFGMUVBRUE5OTYwMDcyN0M4NCAvKiBpb3MgKi8sCiAJCQkJNDE1NzQ3NDIxRTM4
Njk4MDAwRTkxNEQ4IC8qIGxpYndlYnJ0YyAqLywKIAkJCQkwNzI5QjE0RDE3Q0ZDQ0EwMDA0RjFE
NjAgLyogbWFjICovLApAQCAtMTc2MjksMTAgKzE3NjM0LDYgQEAKIAkJMDcyOUIxNEQxN0NGQ0NB
MDAwNEYxRDYwIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCi0JCQkJNDE2QTA2OTMyM0NDQUE5NDAwMzQ3MTA5IC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyQ29jb2EuY3BwICovLAotCQkJCTQxNkEwNjkyMjNDQ0FBOTMwMDM0NzEwOSAvKiBB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmggKi8sCi0JCQkJNDEwODdGMDEyNDhF
NTlDODAwNjgwRTkxIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHAgKi8s
Ci0JCQkJNDEwODdGMDMyNDhFNTlDOTAwNjgwRTkxIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdC5oICovLAogCQkJCTA3MDM2M0RBMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyLmggKi8sCiAJCQkJMDcwMzYzREIxODFBMUNEQzAwQzA3NEE1IC8qIEFW
Q2FwdHVyZURldmljZU1hbmFnZXIubW0gKi8sCiAJCQkJMDcwMzYzREUxODFBMUNEQzAwQzA3NEE1
IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLmggKi8sCkBAIC0xOTg3MSw2ICsxOTg3MiwxOSBAQAog
CQkJbmFtZSA9IFN0cmVhbXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk0
MUMzQjg5QTI2NDlCMThFMDA0RUQ0REUgLyogY29jb2EgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTQxQzNCODlEMjY0OUIxQjYwMDRFRDRERSAvKiBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcCAqLywKKwkJCQk0MUMzQjg5QzI2NDlC
MUI2MDA0RUQ0REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oICovLAor
CQkJCTQxQzNCODlFMjY0OUIxQjcwMDRFRDRERSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckludGVybmFsVW5pdC5jcHAgKi8sCisJCQkJNDFDM0I4OUYyNjQ5QjFCNzAwNEVENERFIC8q
IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0LmggKi8sCisJCQkJNDFD
M0I4QTAyNjQ5QjFCNzAwNEVENERFIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5p
dC5jcHAgKi8sCisJCQkJNDFDM0I4OUIyNjQ5QjFCNjAwNEVENERFIC8qIEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyVW5pdC5oICovLAorCQkJKTsKKwkJCXBhdGggPSBjb2NvYTsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTQxRjU0RjdDMUM1MEM0RjYwMDMzODQ4OCAv
KiBmZXRjaCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0z
MjEzMCw2ICszMjE0NCw3IEBACiAJCQkJRTUyQ0Y1NEQyMEEyNjhBQzAwREFEQTI3IC8qIERhdGFM
aXN0U3VnZ2VzdGlvbnNDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0NzM4NDU4MjVEREU5
RkIwMDZERThERCAvKiBEYXRhT3duZXJUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzY0NjQx
QzExRDdGNDE2MDA2NDU1QjAgLyogRGF0YXNldERPTVN0cmluZ01hcC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDFDM0I4QTEyNjQ5QjFFMDAwNEVENERFIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVySW50ZXJuYWxVbml0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAzMUIzRTBBNDRFRkM3
MDBGOTkyRTAgLyogRGF0YVRyYW5zZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MUFDNTk5OTEz
MTYzNkU2MDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODFBQzU5OUExMzE2MzZFNjAwMDlBN0UwIC8qIERhdGFUcmFuc2Zlckl0ZW1MaXN0LmggaW4gSGVh
ZGVycyAqLywKQEAgLTM0MDgxLDYgKzM0MDk2LDcgQEAKIAkJCQkwNzgyODk0ODI1QzIzRkU1MDBB
N0JBMDMgLyogTWVkaWFNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4Mjg5NEMyNUMz
NzAwQjAwQTdCQTAzIC8qIE1lZGlhTWV0YWRhdGFJbml0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1
RUJCODkzMTFDNzc3N0ZGMDBDNjVENDEgLyogTWVkaWFQYXlsb2FkLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0MUMzQjhBMjI2NDlCMUU1MDA0RUQ0REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJVbml0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0UzREZEMTFBOUU3ODY1MDA3NjRDQTgg
LyogTWVkaWFQbGF5YmFja1RhcmdldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5MjE2NTUxQUE1
NjBBQTAwQTNDMDQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA3MUU0OTcwMUFENUFCNUUwMDhBNTBCNCAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q29j
b2EuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vY29jb2EvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaAppbmRleCA4MWFjZGU3ZTk3
Y2Y5NTdiMDAwMTEwNzA5ZWQ5MzRiYzcxNDRkNTUzLi5iN2RlYzNmMTU1ZDQ2NWI0ZTg1MTQ5MWRh
NmExY2U5YzJjNzVhNGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9jb2NvYS9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaApAQCAtNzIsNyArNzIsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0KCk7CiAKLSAgICBzdGF0aWMgdm9pZCB6ZXJvQUJM
KEF1ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZv
aWQgemVyb0FCTChBdWRpb0J1ZmZlckxpc3QmLCBzaXplX3QpOwogICAgIHZvaWQgemVybygpOwog
CiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuaAppbmRleCA2
MWU0Y2U0Mzc0YTZmMWJiOWQ2NzIxMTU3Y2YyYWU4Y2RhNDExYzk0Li4wOTcyNzY4ZGVmZWJlYmE4
ZjAyODQ4NTkyMmFkNmIxODExZmNhMzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI+IGNyZWF0ZSgpOwogICAgIHZpcnR1
YWwgfkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyKCkgPSBkZWZhdWx0OwogCi0gICAgdmly
dHVhbCB2b2lkIHN0YXJ0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydChDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CiAgICAgLy8gTWF5IGJlIGNhbGxlZCBvbiBhIGJh
Y2tncm91bmQgdGhyZWFkLiBJdCBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgc3RhcnQvYmVm
b3JlIHN0b3AgaXMgY2FsbGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9BdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmNw
cAppbmRleCAwOTFmZDcyYzc5NWQyMzE0YzNiNDlhNzEyMTNkM2QxYjNkOTQ4NGY3Li5mODNlMjlk
MGYzODc1NjUwYmZhMTI0MThlODI2YzUyYzMxNzYwNTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9BdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9BdWRpb1RyYWNrUHJp
dmF0ZU1lZGlhU3RyZWFtLmNwcApAQCAtMTU5LDEzICsxNTksMTQgQEAgdm9pZCBBdWRpb1RyYWNr
UHJpdmF0ZU1lZGlhU3RyZWFtOjp1cGRhdGVSZW5kZXJlcigpCiB2b2lkIEF1ZGlvVHJhY2tQcml2
YXRlTWVkaWFTdHJlYW06OnN0YXJ0UmVuZGVyZXIoKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgaWYgKG1faXNQbGF5aW5nKQorICAgIGlmIChtX2lzUGxheWluZyB8fCAhbV9y
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOwotICAg
IGlmIChtX3JlbmRlcmVyKQotICAgICAgICBtX3JlbmRlcmVyLT5zdGFydCgpOwotICAgIG1fYXVk
aW9Tb3VyY2UtPmFkZEF1ZGlvU2FtcGxlT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1fcmVuZGVyZXIt
PnN0YXJ0KFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgaWYgKHBy
b3RlY3RlZFRoaXMtPm1faXNQbGF5aW5nKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9h
dWRpb1NvdXJjZS0+YWRkQXVkaW9TYW1wbGVPYnNlcnZlcihwcm90ZWN0ZWRUaGlzLmdldCgpKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjpzdG9wUmVu
ZGVyZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Y29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckNvY29hLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjliNzE3NDA2MDY4ODE2ZTcxOWE1N2E2MzdiZTZh
NThjMGU3ZDNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKQEAg
LTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmgiCisKKyNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJVbml0LmgiCisjaW5jbHVkZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCisjaW5jbHVkZSAi
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Nb2R1
bGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckNvY29hOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hKCkgPSBkZWZhdWx0
OworCitBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjp+QXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJDb2NvYSgpID0gZGVmYXVsdDsKKwordm9pZCBBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckNvY29hOjpzdGFydChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2spCit7CisgICAgY2xlYXIoKTsKKworICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyVW5pdDo6c2luZ2xldG9uKCkucmV0cmlldmVGb3JtYXREZXNjcmlwdGlvbihbd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cih0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byog
Zm9ybWF0RGVzY3JpcHRpb24pIG11dGFibGUgeworICAgICAgICBpZiAod2Vha1RoaXMpCisgICAg
ICAgICAgICB3ZWFrVGhpcy0+bV9vdXRwdXREZXNjcmlwdGlvbiA9IG1ha2VVbmlxdWU8Q0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uPigqZm9ybWF0RGVzY3JpcHRpb24pOworICAgICAgICBjYWxsYmFj
aygpOworICAgIH0pOworfQorCit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29j
b2E6OnN0b3AoKQoreworICAgIGlmIChtX2RhdGFTb3VyY2UpCisgICAgICAgIEF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2luZ2xldG9uKCkucmVtb3ZlU291cmNlKCptX2RhdGFT
b3VyY2UpOworfQorCit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OmNs
ZWFyKCkKK3sKKyAgICBzdG9wKCk7CisKKyAgICBtX2RhdGFTb3VyY2UgPSBudWxscHRyOworICAg
IG1fb3V0cHV0RGVzY3JpcHRpb24gPSB7IH07Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJDb2NvYTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlcjo6c2V0Vm9sdW1lKHZvbHVtZSk7CisgICAgaWYgKG1fZGF0
YVNvdXJjZSkKKyAgICAgICAgbV9kYXRhU291cmNlLT5zZXRWb2x1bWUodm9sdW1lKTsKK30KKwor
dm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzZXRBdWRpb091dHB1dERl
dmljZShjb25zdCBTdHJpbmcmIGRldmljZUlkKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
Y3JlYXRlIGEgdW5pdCBmb3Igb3Vyc2VsdmVzIGhlcmUgb3IgdXNlIHRoZSBkZWZhdWx0IHVuaXQg
aWYgZGV2aWNlSWQgaXMgbWF0Y2hpbmcuCisgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJVbml0OjpzaW5nbGV0b24oKS5zZXRBdWRpb091dHB1dERldmljZShkZXZpY2VJZCk7CisgICAg
bV9zaG91bGRSZXNldCA9IHRydWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBwb2xsU2FtcGxlc0Nv
dW50KCkKK3sKKyNpZiBVU0UoTElCV0VCUlRDKQorICAgIHJldHVybiBMaWJXZWJSVENBdWRpb01v
ZHVsZTo6UG9sbFNhbXBsZXNDb3VudCArIDE7CisjZWxzZQorICAgIHJldHVybiAyOworI2VuZGlm
Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6cHVzaFNhbXBs
ZXMoY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYg
YXVkaW9EYXRhLCBjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgc2l6
ZV90IHNhbXBsZUNvdW50KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFT
U0VSVChkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkudHlwZSA9PSBQbGF0Zm9ybURl
c2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtQmFzaWNUeXBlKTsKKyAgICBpZiAoIW1fZGF0YVNvdXJj
ZSB8fCBtX3Nob3VsZFJlc2V0IHx8ICFtX2RhdGFTb3VyY2UtPmlucHV0RGVzY3JpcHRpb24oKSB8
fCAqbV9kYXRhU291cmNlLT5pbnB1dERlc2NyaXB0aW9uKCkgIT0gZGVzY3JpcHRpb24pIHsKKyAg
ICAgICAgRGlzYWJsZU1hbGxvY1Jlc3RyaWN0aW9uc0ZvckN1cnJlbnRUaHJlYWRTY29wZSBzY29w
ZTsKKworICAgICAgICAvLyBGSVhNRTogRm9yIG5vbiBsaWJ3ZWJydGMgc291cmNlcywgd2UgY2Fu
IHByb2JhYmx5IHJlZHVjZSBwb2xsIHNhbXBsZXMgY291bnQgdG8gMi4KKyAgICAgICAgCisgICAg
ICAgIGF1dG8gZGF0YVNvdXJjZSA9IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6Y3JlYXRlKGRlc2Ny
aXB0aW9uLnNhbXBsZVJhdGUoKSAqIDAuNSwgKnRoaXMsIHBvbGxTYW1wbGVzQ291bnQoKSk7CisK
KyAgICAgICAgaWYgKGRhdGFTb3VyY2UtPnNldElucHV0Rm9ybWF0KHRvQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uKGRlc2NyaXB0aW9uKSkpIHsKKyAgICAgICAgICAgIEVSUk9SX0xPRyhMT0dJREVO
VElGSUVSLCAiVW5hYmxlIHRvIHNldCB0aGUgaW5wdXQgZm9ybWF0IG9mIGRhdGEgc291cmNlIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fb3V0cHV0
RGVzY3JpcHRpb24gfHwgZGF0YVNvdXJjZS0+c2V0T3V0cHV0Rm9ybWF0KCptX291dHB1dERlc2Ny
aXB0aW9uKSkgeworICAgICAgICAgICAgRVJST1JfTE9HKExPR0lERU5USUZJRVIsICJVbmFibGUg
dG8gc2V0IHRoZSBvdXRwdXQgZm9ybWF0IG9mIGRhdGEgc291cmNlIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBvbGRTb3VyY2UgPSBtX2RhdGFTb3VyY2UsIG5ld1Nv
dXJjZSA9IGRhdGFTb3VyY2VdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlz
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKG9sZFNvdXJjZSkK
KyAgICAgICAgICAgICAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmds
ZXRvbigpLnJlbW92ZVNvdXJjZSgqb2xkU291cmNlKTsKKworICAgICAgICAgICAgbmV3U291cmNl
LT5zZXRWb2x1bWUodm9sdW1lKCkpOworICAgICAgICAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0OjpzaW5nbGV0b24oKS5hZGRTb3VyY2UoV1RGTW92ZShuZXdTb3VyY2UpKTsK
KyAgICAgICAgfSk7CisgICAgICAgIG1fZGF0YVNvdXJjZSA9IFdURk1vdmUoZGF0YVNvdXJjZSk7
CisgICAgICAgIG1fc2hvdWxkUmVzZXQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtX2RhdGFTb3Vy
Y2UtPnB1c2hTYW1wbGVzKHNhbXBsZVRpbWUsIGF1ZGlvRGF0YSwgc2FtcGxlQ291bnQpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2Ev
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2Nv
YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRjMzU5NWVjZTk4NWJkMjdkZTFjYmY2NzhlNDdkYmMxNzJlZThmOGMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9j
b2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmgKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
KworI2luY2x1ZGUgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmgiCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKKyNpbmNsdWRlIDxBdWRpb1Rv
b2xib3gvQXVkaW9Ub29sYm94Lmg+CisjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9TYW1wbGVEYXRhU291cmNl
OworY2xhc3MgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OworY2xhc3MgQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uOworCitjbGFzcyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hIDogcHVi
bGljIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSwgV2Vha1B0ckZhY3RvcnlJbml0aWFs
aXphdGlvbjo6RWFnZXI+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hKCk7CisgICAgfkF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EoKTsKKworcHJpdmF0ZToKKyAgICAvLyBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlcgorICAgIHZvaWQgcHVzaFNhbXBsZXMoY29uc3QgV1RGOjpN
ZWRpYVRpbWUmLCBjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYsIGNvbnN0IEF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mLCBzaXplX3QpIGZpbmFsOworICAgIHZvaWQgc3RhcnQoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKSBmaW5hbDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsKKyAgICB2b2lkIGNs
ZWFyKCkgZmluYWw7CisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIGZpbmFsOworICAgIHZvaWQg
c2V0QXVkaW9PdXRwdXREZXZpY2UoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPiBtX291dHB1dERlc2NyaXB0aW9uOwor
ICAgIFJlZlB0cjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+IG1fZGF0YVNvdXJjZTsKKyAgICBib29s
IG1fc2hvdWxkUmVzZXQgeyBmYWxzZSB9OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOGM1M2YzZDNjNTFi
Yjc2ODBiZDQ0YWEwOGI3NzU0MzM0NDE1MmU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJJbnRlcm5hbFVuaXQuY3BwCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
SW50ZXJuYWxVbml0LmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAi
QXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCisjaW5j
bHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgor
CisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9BdWRpb1Rvb2xib3hTUEkuaD4KKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKKyNpZiBQTEFURk9STShD
T0NPQSkKKyNpbmNsdWRlICJDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmgiCisjaW5jbHVkZSAiQ29y
ZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8cGFsL2Nm
L0NvcmVNZWRpYVNvZnRMaW5rLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTG9j
YWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdCBmaW5hbCA6IHB1Ymxp
YyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTG9jYWxBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdChSZW5kZXJDYWxsYmFjayYmKTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIGNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVkKCk7CisKKyAgICAvLyBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdCBBUEkuCisgICAgdm9pZCBzdGFy
dCgpIGZpbmFsOworICAgIHZvaWQgc3RvcCgpIGZpbmFsOworICAgIHZvaWQgcmV0cmlldmVGb3Jt
YXREZXNjcmlwdGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiopPiYmKSBmaW5hbDsKKyAgICB2b2lkIHNldEF1ZGlvT3V0cHV0RGV2aWNlKGNv
bnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgc3RhdGljIE9TU3RhdHVzIHJlbmRlcmluZ0NhbGxi
YWNrKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0
YW1wKiwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVy
TGlzdCopOworCisgICAgUmVuZGVyQ2FsbGJhY2sgbV9yZW5kZXJDYWxsYmFjazsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPiBtX291dHB1dERlc2NyaXB0aW9u
OworICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2UgbV9yZW1vdGVJT1VuaXQgeyBudWxscHRyIH07
CisgICAgYm9vbCBtX2lzU3RhcnRlZCB7IGZhbHNlIH07CisjaWYgUExBVEZPUk0oTUFDKQorICAg
IHVpbnQzMl90IG1fZGV2aWNlSUQgeyAwIH07CisjZW5kaWYKK307CisKK1VuaXF1ZVJlZjxBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdD4gQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OmNyZWF0ZUxvY2FsSW50ZXJuYWxVbml0KFJlbmRlckNh
bGxiYWNrJiYgcmVuZGVyQ2FsbGJhY2spCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8TG9j
YWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdD4oV1RGTW92ZShyZW5k
ZXJDYWxsYmFjaykpOworfQorCitMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50
ZXJuYWxVbml0OjpMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0
KFJlbmRlckNhbGxiYWNrJiYgcmVuZGVyQ2FsbGJhY2spCisgICAgOiBtX3JlbmRlckNhbGxiYWNr
KFdURk1vdmUocmVuZGVyQ2FsbGJhY2spKQoreworfQorCit2b2lkIExvY2FsQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OnJldHJpZXZlRm9ybWF0RGVzY3JpcHRpb24o
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24qKT4m
JiBjYWxsYmFjaykKK3sKKyAgICBjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpOworICAgIGNhbGxi
YWNrKG1fb3V0cHV0RGVzY3JpcHRpb24uZ2V0KCkpOworfQorCit2b2lkIExvY2FsQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OnNldEF1ZGlvT3V0cHV0RGV2aWNlKGNv
bnN0IFN0cmluZyYgZGV2aWNlSUQpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGF1dG8gZGV2
aWNlID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLmNvcmVBdWRp
b0RldmljZVdpdGhVSUQoZGV2aWNlSUQpOworCisgICAgaWYgKCFkZXZpY2UgJiYgIWRldmljZUlE
LmlzRW1wdHkoKSkgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6c2V0QXVkaW9PdXRwdXREZXZpY2VJZCAtIGRp
ZCBub3QgZmluZCBkZXZpY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8g
YXVkaW9Vbml0RGV2aWNlSUQgPSBkZXZpY2UgPyBkZXZpY2UtPmRldmljZUlEKCkgOiAwOworICAg
IGlmIChtX2RldmljZUlEID09IGF1ZGlvVW5pdERldmljZUlEKQorICAgICAgICByZXR1cm47CisK
KyAgICBib29sIHNob3VsZFJlc3RhcnQgPSBtX2lzU3RhcnRlZDsKKyAgICBpZiAobV9pc1N0YXJ0
ZWQpCisgICAgICAgIHN0b3AoKTsKKworICAgIG1fZGV2aWNlSUQgPSBhdWRpb1VuaXREZXZpY2VJ
RDsKKworICAgIGlmIChzaG91bGRSZXN0YXJ0KQorICAgICAgICBzdGFydCgpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oZGV2aWNlSUQpOworI2VuZGlmCit9CisKK3ZvaWQgTG9jYWxBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6c3RhcnQoKQoreworICAgIGlmICht
X2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3JlYXRlQXVkaW9Vbml0SWZOZWVk
ZWQoKTsKKyAgICBpZiAoIW1fcmVtb3RlSU9Vbml0KQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoYXV0byBlcnJvciA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fcmVtb3RlSU9Vbml0KSkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckludGVybmFsVW5pdDo6c3RhcnQgQXVkaW9PdXRwdXRVbml0U3RhcnQgZmFpbGVkLCBl
cnJvciA9ICVkIiwgZXJyb3IpOworICAgICAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9z
ZShtX3JlbW90ZUlPVW5pdCk7CisgICAgICAgIG1fcmVtb3RlSU9Vbml0ID0gbnVsbHB0cjsKKyAg
ICB9CisgICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOworICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0IGlzIHN0YXJ0ZWQiKTsKK30K
Kwordm9pZCBMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0Ojpz
dG9wKCkKK3sKKyAgICBpZiAoIW1fcmVtb3RlSU9Vbml0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgQXVkaW9PdXRwdXRVbml0U3RvcChtX3JlbW90
ZUlPVW5pdCk7CisgICAgICAgIG1faXNTdGFydGVkID0gZmFsc2U7CisgICAgfQorCisgICAgQXVk
aW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9yZW1vdGVJT1VuaXQpOworICAgIG1fcmVtb3Rl
SU9Vbml0ID0gbnVsbHB0cjsKK30KKwordm9pZCBMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVySW50ZXJuYWxVbml0OjpjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpCit7CisgICAgQVNT
RVJUKCFtX3JlbW90ZUlPVW5pdCB8fCBtX291dHB1dERlc2NyaXB0aW9uKTsKKyAgICBpZiAobV9y
ZW1vdGVJT1VuaXQpCisgICAgICAgIHJldHVybjsKKworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiBvdXRwdXREZXNjcmlwdGlvbjsKKyAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlIHJlbW90
ZUlPVW5pdCB7IG51bGxwdHIgfTsKKworICAgIEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gaW9V
bml0RGVzY3JpcHRpb24geyBrQXVkaW9Vbml0VHlwZV9PdXRwdXQsIDAsIGtBdWRpb1VuaXRNYW51
ZmFjdHVyZXJfQXBwbGUsIDAsIDAgfTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlv
VW5pdERlc2NyaXB0aW9uLmNvbXBvbmVudFN1YlR5cGUgPSBrQXVkaW9Vbml0U3ViVHlwZV9SZW1v
dGVJTzsKKyNlbHNlCisgICAgaW9Vbml0RGVzY3JpcHRpb24uY29tcG9uZW50U3ViVHlwZSA9IGtB
dWRpb1VuaXRTdWJUeXBlX0RlZmF1bHRPdXRwdXQ7CisjZW5kaWYKKworICAgIEF1ZGlvQ29tcG9u
ZW50IGlvQ29tcG9uZW50ID0gQXVkaW9Db21wb25lbnRGaW5kTmV4dChudWxscHRyLCAmaW9Vbml0
RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChpb0NvbXBvbmVudCk7CisgICAgaWYgKCFpb0NvbXBv
bmVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBm
aW5kIHJlbW90ZSBJTyB1bml0IGNvbXBvbmVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYXV0byBlcnJvciA9IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoaW9Db21wb25lbnQs
ICZyZW1vdGVJT1VuaXQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6
Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBvcGVuIHZwaW8gdW5pdCwgZXJyb3IgPSAlZCIsIGVy
cm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgVUludDMyIHBhcmFtID0gMTsKKyAgICBlcnJvciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5
KHJlbW90ZUlPVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9V
bml0U2NvcGVfT3V0cHV0LCAwLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOworICAgIGlmIChlcnJv
cikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBlbmFi
bGUgdnBpbyB1bml0IG91dHB1dCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChtX2RldmljZUlE
KSB7CisgICAgICAgIGVycm9yID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBr
QXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1ZGlvVW5pdFNjb3BlX0ds
b2JhbCwgMCwgJm1fZGV2aWNlSUQsIHNpemVvZihtX2RldmljZUlEKSk7CisgICAgICAgIGlmIChl
cnJvcikgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdCB1bmFibGUg
dG8gc2V0IHVuaXQgZGV2aWNlIElEICVkLCBlcnJvciAlZCAoJS40cykiLCAoaW50KW1fZGV2aWNl
SUQsIChpbnQpZXJyb3IsIChjaGFyKikmZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxi
YWNrID0geyBMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0Ojpy
ZW5kZXJpbmdDYWxsYmFjaywgdGhpcyB9OworICAgIGVycm9yID0gQXVkaW9Vbml0U2V0UHJvcGVy
dHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtB
dWRpb1VuaXRTY29wZV9HbG9iYWwsIDAsICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7Cisg
ICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5h
YmxlIHRvIHNldCB2cGlvIHVuaXQgc3BlYWtlciBwcm9jLCBlcnJvciA9ICVkIiwgZXJyb3IpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVUludDMyIHNpemUgPSBzaXplb2Yob3V0cHV0
RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSk7CisgICAgZXJyb3IgID0gQXVkaW9Vbml0
R2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0
LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNj
cmlwdGlvbigpLCAmc2l6ZSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0
OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIGdldCBpbnB1dCBzdHJlYW0gZm9ybWF0LCBlcnJv
ciA9ICVkIiwgZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0cHV0RGVz
Y3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKS5tU2FtcGxlUmF0ZSA9IEF1ZGlvU2Vzc2lvbjo6
c2hhcmVkU2Vzc2lvbigpLnNhbXBsZVJhdGUoKTsKKworICAgIGVycm9yID0gQXVkaW9Vbml0U2V0
UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBr
QXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlw
dGlvbigpLCBzaXplb2Yob3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSkpOwor
ICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVu
YWJsZSB0byBzZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVycm9yID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShy
ZW1vdGVJT1VuaXQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6Y3Jl
YXRlQXVkaW9Vbml0IEF1ZGlvVW5pdEluaXRpYWxpemUoKSBmYWlsZWQsIGVycm9yID0gJWQiLCBl
cnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX291dHB1dERlc2NyaXB0aW9u
ID0gbWFrZVVuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KG91dHB1dERlc2NyaXB0aW9u
KTsKKyAgICBtX3JlbW90ZUlPVW5pdCA9IHJlbW90ZUlPVW5pdDsKK30KKworT1NTdGF0dXMgTG9j
YWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6cmVuZGVyaW5nQ2Fs
bGJhY2sodm9pZCogcHJvY2Vzc29yLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogYWN0aW9u
RmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiB0aW1lU3RhbXAsIFVJbnQzMiwgVUludDMyIHNh
bXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8TG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdCo+KHBy
b2Nlc3NvciktPm1fcmVuZGVyQ2FsbGJhY2soc2FtcGxlQ291bnQsICppb0RhdGEsIHRpbWVTdGFt
cC0+bVNhbXBsZVRpbWUsIHRpbWVTdGFtcC0+bUhvc3RUaW1lLCAqYWN0aW9uRmxhZ3MpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2Ev
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVySW50ZXJuYWxVbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ0ZTgzZWU0OGFiMjNlZTFmMmVkODdhYmY2
MzE3Njg3ZDMwODNjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxV
bml0LmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb1Rvb2xi
b3guaD4KKyNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ7Citj
bGFzcyBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb247CisKK2NsYXNzIEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVySW50ZXJuYWxVbml0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdCgpID0gZGVmYXVsdDsKKworICAgIHVz
aW5nIFJlbmRlckNhbGxiYWNrID0gRnVuY3Rpb248T1NTdGF0dXMoc2l6ZV90IHNhbXBsZUNvdW50
LCBBdWRpb0J1ZmZlckxpc3QmLCB1aW50NjRfdCBzYW1wbGVUaW1lLCBkb3VibGUgaG9zdFRpbWUs
IEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJik+OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBVbmlxdWVSZWY8QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ+IGNy
ZWF0ZUxvY2FsSW50ZXJuYWxVbml0KFJlbmRlckNhbGxiYWNrJiYpOworCisgICAgdmlydHVhbCB2
b2lkIHN0YXJ0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZXRyaWV2ZUZvcm1hdERlc2NyaXB0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKik+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0QXVkaW9PdXRwdXREZXZpY2UoY29uc3QgU3RyaW5nJikgPSAwOworfTsKKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
VW5pdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2NmI3YWNiNWNk
Mjk0MzM1YWUxMjdlMjUzMjhmYzMyMTUxZThlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlclVuaXQuY3BwCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5o
IgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0
YVNvdXJjZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpDcmVhdGVJbnRlcm5h
bFVuaXRGdW5jdGlvbiYgZ2V0Q3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rpb24oKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OkNy
ZWF0ZUludGVybmFsVW5pdEZ1bmN0aW9uPiBmdW5jdGlvbjsKKyAgICByZXR1cm4gZnVuY3Rpb247
Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzZXRDcmVhdGVJ
bnRlcm5hbFVuaXRGdW5jdGlvbihDcmVhdGVJbnRlcm5hbFVuaXRGdW5jdGlvbiYmIGZ1bmN0aW9u
KQoreworICAgIGdldENyZWF0ZUludGVybmFsVW5pdEZ1bmN0aW9uKCkgPSBXVEZNb3ZlKGZ1bmN0
aW9uKTsKK30KKworc3RhdGljIFVuaXF1ZVJlZjxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdD4gY3JlYXRlSW50ZXJuYWxVbml0KEF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdCYgdW5pdCkKK3sKKyAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcklu
dGVybmFsVW5pdDo6UmVuZGVyQ2FsbGJhY2sgY2FsbGJhY2sgPSBbJnVuaXRdKGF1dG8gc2FtcGxl
Q291bnQsIGF1dG8mIGxpc3QsIGF1dG8gc2FtcGxlVGltZSwgYXV0byBob3N0VGltZSwgYXV0byYg
ZmxhZ3MpIHsKKyAgICAgICAgcmV0dXJuIHVuaXQucmVuZGVyKHNhbXBsZUNvdW50LCBsaXN0LCBz
YW1wbGVUaW1lLCBob3N0VGltZSwgZmxhZ3MpOworICAgIH07CisKKyAgICBhdXRvJiBmdW5jdGlv
biA9IGdldENyZWF0ZUludGVybmFsVW5pdEZ1bmN0aW9uKCk7CisgICAgaWYgKGZ1bmN0aW9uKQor
ICAgICAgICByZXR1cm4gZnVuY3Rpb24oV1RGTW92ZShjYWxsYmFjaykpOworCisgICAgcmV0dXJu
IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpjcmVhdGVMb2NhbElu
dGVybmFsVW5pdChXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKK0F1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdCYgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5nbGV0
b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlclVuaXQ+IHJlZ2lzdHJ5OworICAgIHJldHVybiByZWdpc3RyeTsKK30KKworQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQoKQorICAgIDogbV9pbnRlcm5hbFVuaXQoY3JlYXRlSW50ZXJuYWxVbml0KCp0aGlzKSkK
K3sKK30KKworQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojp+QXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJVbml0KCkKK3sKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzZXRBdWRpb091dHB1dERldmljZShjb25zdCBT
dHJpbmcmIGRldmljZUlEKQoreworICAgIG1faW50ZXJuYWxVbml0LT5zZXRBdWRpb091dHB1dERl
dmljZShkZXZpY2VJRCk7Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJV
bml0OjphZGRTb3VyY2UoUmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4mJiBzb3VyY2UpCit7Cisg
ICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0
OjphZGRTb3VyY2UiKTsKKworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X3NvdXJjZXNMb2NrKTsKKyAgICAgICAgQVNTRVJUKCFtX3NvdXJjZXMuY29udGFpbnMoc291cmNl
LmdldCgpKSk7CisgICAgICAgIG1fc291cmNlcy5hZGQoV1RGTW92ZShzb3VyY2UpKTsKKyAgICAg
ICAgbV9zb3VyY2VzQ29weSA9IGNvcHlUb1ZlY3RvcihtX3NvdXJjZXMpOworICAgICAgICBtX3No
b3VsZFVwZGF0ZVJlbmRlclNvdXJjZXMgPSB0cnVlOworICAgIH0KKyAgICBzdGFydCgpOworfQor
Cit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmVtb3ZlU291cmNlKEF1
ZGlvU2FtcGxlRGF0YVNvdXJjZSYgc291cmNlKQoreworICAgIFJFTEVBU0VfTE9HKFdlYlJUQywg
IkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmVtb3ZlU291cmNlIik7CisKKyAg
ICBib29sIHNob3VsZFN0b3AgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9zb3VyY2VzTG9jayk7CisgICAgICAgIG1fc291cmNlcy5yZW1vdmUoc291cmNl
KTsKKyAgICAgICAgc2hvdWxkU3RvcCA9IG1fc291cmNlcy5pc0VtcHR5KCk7CisgICAgICAgIG1f
c291cmNlc0NvcHkgPSBjb3B5VG9WZWN0b3IobV9zb3VyY2VzKTsKKyAgICAgICAgbV9zaG91bGRV
cGRhdGVSZW5kZXJTb3VyY2VzID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHNob3VsZFN0b3ApCisg
ICAgICAgIHN0b3AoKTsKK30KKwordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQ6OnN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQ6OnN0YXJ0Iik7CisgICAgbV9pbnRlcm5hbFVuaXQtPnN0YXJ0KCk7
Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzdG9wKCkKK3sK
KyAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQ6OnN0b3AiKTsKKyAgICBtX2ludGVybmFsVW5pdC0+c3RvcCgpOworfQorCit2b2lkIEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmV0cmlldmVGb3JtYXREZXNjcmlwdGlvbihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiopPiYm
IGNhbGxiYWNrKQoreworICAgIG1faW50ZXJuYWxVbml0LT5yZXRyaWV2ZUZvcm1hdERlc2NyaXB0
aW9uKFdURk1vdmUoY2FsbGJhY2spKTsKK30KKworT1NTdGF0dXMgQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJVbml0OjpyZW5kZXIoc2l6ZV90IHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxp
c3QmIGlvRGF0YSwgdWludDY0X3Qgc2FtcGxlVGltZSwgZG91YmxlIGhvc3RUaW1lLCBBdWRpb1Vu
aXRSZW5kZXJBY3Rpb25GbGFncyYgYWN0aW9uRmxhZ3MpCit7CisgICAgLy8gRm9yIHBlcmZvcm1h
bmNlIHJlYXNvbnMsIHdlIGZvcmJpZCBoZWFwIGFsbG9jYXRpb25zIHdoaWxlIGRvaW5nIHJlbmRl
cmluZyBvbiB0aGUgYXVkaW8gdGhyZWFkLgorICAgIEZvcmJpZE1hbGxvY1VzZUZvckN1cnJlbnRU
aHJlYWRTY29wZSBmb3JiaWRNYWxsb2NVc2U7CisKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKKyAgICBpZiAobV9zaG91bGRVcGRhdGVSZW5kZXJTb3VyY2VzKSB7CisgICAgICAgIGF1dG8g
bG9ja2VyID0gdHJ5SG9sZExvY2sobV9zb3VyY2VzTG9jayk7CisgICAgICAgIGlmICghbG9ja2Vy
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgbV9yZW5kZXJTb3VyY2VzID0gV1RG
TW92ZShtX3NvdXJjZXNDb3B5KTsKKyAgICAgICAgbV9zaG91bGRVcGRhdGVSZW5kZXJTb3VyY2Vz
ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1fcmVuZGVyU291cmNlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgYWN0aW9uRmxhZ3MgPSBrQXVkaW9Vbml0UmVuZGVyQWN0aW9uX091dHB1dElzU2ls
ZW5jZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gTWl4IGFsbCBzb3VyY2Vz
LgorICAgIGJvb2wgaXNGaXJzdFNvdXJjZSA9IHRydWU7CisgICAgZm9yIChhdXRvJiBzb3VyY2Ug
OiBtX3JlbmRlclNvdXJjZXMpIHsKKyAgICAgICAgc291cmNlLT5wdWxsU2FtcGxlcyhpb0RhdGEs
IHNhbXBsZUNvdW50LCBzYW1wbGVUaW1lLCBob3N0VGltZSwgaXNGaXJzdFNvdXJjZSA/IEF1ZGlv
U2FtcGxlRGF0YVNvdXJjZTo6Q29weSA6IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6TWl4KTsKKyAg
ICAgICAgaXNGaXJzdFNvdXJjZSA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYTRlZDgwZTBhMmExZTdlMGE0ODVkNDZhZWJkMDg3MTE5MjczM2UxZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29h
L0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oCkBAIC0wLDAgKzEsNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNp
bmNsdWRlICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTsKK2NsYXNzIEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdDsKK2NsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKK2NsYXNzIEF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OworCitjbGFzcyBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQmIHNpbmdsZXRvbigpOwor
CisgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0KCk7CisgICAgfkF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgpOworCisgICAgdXNpbmcgQ3JlYXRlSW50ZXJuYWxV
bml0RnVuY3Rpb24gPSBGdW5jdGlvbjxVbmlxdWVSZWY8QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJJbnRlcm5hbFVuaXQ+KEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxV
bml0OjpSZW5kZXJDYWxsYmFjayYmKT47CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQg
c2V0Q3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rpb24oQ3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rpb24m
Jik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBPU1N0YXR1cyByZW5kZXIoc2l6ZV90IHNhbXBsZUNv
dW50LCBBdWRpb0J1ZmZlckxpc3QmLCB1aW50NjRfdCBzYW1wbGVUaW1lLCBkb3VibGUgaG9zdFRp
bWUsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJik7CisKKyAgICB2b2lkIHNldEF1ZGlvT3V0
cHV0RGV2aWNlKGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBhZGRTb3VyY2UoUmVmPEF1ZGlv
U2FtcGxlRGF0YVNvdXJjZT4mJik7CisgICAgdm9pZCByZW1vdmVTb3VyY2UoQXVkaW9TYW1wbGVE
YXRhU291cmNlJik7CisKKyAgICB2b2lkIHJldHJpZXZlRm9ybWF0RGVzY3JpcHRpb24oQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24qKT4mJik7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQgc3RvcCgpOworCisgICAgdm9p
ZCBjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpOworCisgICAgSGFzaFNldDxSZWY8QXVkaW9TYW1w
bGVEYXRhU291cmNlPj4gbV9zb3VyY2VzOworICAgIFZlY3RvcjxSZWY8QXVkaW9TYW1wbGVEYXRh
U291cmNlPj4gbV9zb3VyY2VzQ29weTsKKyAgICBWZWN0b3I8UmVmPEF1ZGlvU2FtcGxlRGF0YVNv
dXJjZT4+IG1fcmVuZGVyU291cmNlczsKKyAgICBib29sIG1fc2hvdWxkVXBkYXRlUmVuZGVyU291
cmNlcyB7IGZhbHNlIH07CisgICAgTG9jayBtX3NvdXJjZXNMb2NrOworICAgIFVuaXF1ZVJlZjxB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdD4gbV9pbnRlcm5hbFVuaXQ7
Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkOTliODhhNDIwMGMwYTJkMzU2ODM4ZWIwNDJlYmNkMjg4ODdi
YjYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJDb2NvYS5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2lu
Y2x1ZGUgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oIgotI2luY2x1ZGUgIkF1
ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgotI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bi5oIgotI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvTW9kdWxlLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6QXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSgpID0gZGVmYXVsdDsKLQotQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJDb2NvYTo6fkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EoKSA9
IGRlZmF1bHQ7Ci0KLXZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c3Rh
cnQoKQotewotICAgIGNsZWFyKCk7Ci0KLSAgICBpZiAoYXV0byogZm9ybWF0RGVzY3JpcHRpb24g
PSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRvbigpLmZvcm1hdERl
c2NyaXB0aW9uKCkpCi0gICAgICAgIG1fb3V0cHV0RGVzY3JpcHRpb24gPSBtYWtlVW5pcXVlPENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4oKmZvcm1hdERlc2NyaXB0aW9uKTsKLX0KLQotdm9pZCBB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzdG9wKCkKLXsKLSAgICBpZiAobV9k
YXRhU291cmNlKQotICAgICAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNp
bmdsZXRvbigpLnJlbW92ZVNvdXJjZSgqbV9kYXRhU291cmNlKTsKLX0KLQotdm9pZCBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpjbGVhcigpCi17Ci0gICAgc3RvcCgpOwotCi0g
ICAgbV9kYXRhU291cmNlID0gbnVsbHB0cjsKLSAgICBtX291dHB1dERlc2NyaXB0aW9uID0geyB9
OwotfQotCi12b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnNldFZvbHVt
ZShmbG9hdCB2b2x1bWUpCi17Ci0gICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6OnNl
dFZvbHVtZSh2b2x1bWUpOwotICAgIGlmIChtX2RhdGFTb3VyY2UpCi0gICAgICAgIG1fZGF0YVNv
dXJjZS0+c2V0Vm9sdW1lKHZvbHVtZSk7Ci19Ci0KLXZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJDb2NvYTo6c2V0QXVkaW9PdXRwdXREZXZpY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJ
ZCkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNyZWF0ZSBhIHVuaXQgZm9yIG91cnNlbHZl
cyBoZXJlIG9yIHVzZSB0aGUgZGVmYXVsdCB1bml0IGlmIGRldmljZUlkIGlzIG1hdGNoaW5nLgot
ICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2luZ2xldG9uKCkuc2V0QXVk
aW9PdXRwdXREZXZpY2UoZGV2aWNlSWQpOwotICAgIG1fc2hvdWxkUmVzZXQgPSB0cnVlOwotfQot
Ci1zdGF0aWMgdW5zaWduZWQgcG9sbFNhbXBsZXNDb3VudCgpCi17Ci0jaWYgVVNFKExJQldFQlJU
QykKLSAgICByZXR1cm4gTGliV2ViUlRDQXVkaW9Nb2R1bGU6OlBvbGxTYW1wbGVzQ291bnQgKyAx
OwotI2Vsc2UKLSAgICByZXR1cm4gMjsKLSNlbmRpZgotfQotCi12b2lkIEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyQ29jb2E6OnB1c2hTYW1wbGVzKGNvbnN0IE1lZGlhVGltZSYgc2FtcGxl
VGltZSwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGF1ZGlvRGF0YSwgY29uc3QgQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHNpemVfdCBzYW1wbGVDb3VudCkKLXsKLSAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoZGVzY3JpcHRpb24ucGxhdGZvcm1E
ZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJh
c2ljVHlwZSk7Ci0gICAgaWYgKCFtX2RhdGFTb3VyY2UgfHwgbV9zaG91bGRSZXNldCB8fCAhbV9k
YXRhU291cmNlLT5pbnB1dERlc2NyaXB0aW9uKCkgfHwgKm1fZGF0YVNvdXJjZS0+aW5wdXREZXNj
cmlwdGlvbigpICE9IGRlc2NyaXB0aW9uKSB7Ci0gICAgICAgIERpc2FibGVNYWxsb2NSZXN0cmlj
dGlvbnNGb3JDdXJyZW50VGhyZWFkU2NvcGUgc2NvcGU7Ci0KLSAgICAgICAgLy8gRklYTUU6IEZv
ciBub24gbGlid2VicnRjIHNvdXJjZXMsIHdlIGNhbiBwcm9iYWJseSByZWR1Y2UgcG9sbCBzYW1w
bGVzIGNvdW50IHRvIDIuCi0gICAgICAgIAotICAgICAgICBhdXRvIGRhdGFTb3VyY2UgPSBBdWRp
b1NhbXBsZURhdGFTb3VyY2U6OmNyZWF0ZShkZXNjcmlwdGlvbi5zYW1wbGVSYXRlKCkgKiAwLjUs
ICp0aGlzLCBwb2xsU2FtcGxlc0NvdW50KCkpOwotCi0gICAgICAgIGlmIChkYXRhU291cmNlLT5z
ZXRJbnB1dEZvcm1hdCh0b0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikpKSB7
Ci0gICAgICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgIlVuYWJsZSB0byBzZXQgdGhl
IGlucHV0IGZvcm1hdCBvZiBkYXRhIHNvdXJjZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX291dHB1dERlc2NyaXB0aW9uIHx8IGRhdGFTb3VyY2Ut
PnNldE91dHB1dEZvcm1hdCgqbV9vdXRwdXREZXNjcmlwdGlvbikpIHsKLSAgICAgICAgICAgIEVS
Uk9SX0xPRyhMT0dJREVOVElGSUVSLCAiVW5hYmxlIHRvIHNldCB0aGUgb3V0cHV0IGZvcm1hdCBv
ZiBkYXRhIHNvdXJjZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwg
b2xkU291cmNlID0gbV9kYXRhU291cmNlLCBuZXdTb3VyY2UgPSBkYXRhU291cmNlXSgpIG11dGFi
bGUgewotICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgICAgIGlmIChvbGRTb3VyY2UpCi0gICAgICAgICAgICAgICAgQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5nbGV0b24oKS5yZW1vdmVTb3VyY2UoKm9sZFNv
dXJjZSk7Ci0KLSAgICAgICAgICAgIG5ld1NvdXJjZS0+c2V0Vm9sdW1lKHZvbHVtZSgpKTsKLSAg
ICAgICAgICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2luZ2xldG9uKCku
YWRkU291cmNlKFdURk1vdmUobmV3U291cmNlKSk7Ci0gICAgICAgIH0pOwotICAgICAgICBtX2Rh
dGFTb3VyY2UgPSBXVEZNb3ZlKGRhdGFTb3VyY2UpOwotICAgICAgICBtX3Nob3VsZFJlc2V0ID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgbV9kYXRhU291cmNlLT5wdXNoU2FtcGxlcyhzYW1wbGVUaW1l
LCBhdWRpb0RhdGEsIHNhbXBsZUNvdW50KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkZTgzOTY3NGJkN2QwNDkzZWRjYzYxOTJjMGIxOTJhNGY3NDUwOGUyLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KLQotI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb1Rvb2xib3guaD4KLSNpbmNs
dWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBBdWRpb1NhbXBsZURhdGFTb3VyY2U7Ci1jbGFzcyBBdWRpb1NhbXBsZUJ1ZmZlckxp
c3Q7Ci1jbGFzcyBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb247Ci0KLWNsYXNzIEF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyQ29jb2EgOiBwdWJsaWMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckNvY29hLCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4gewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyQ29jb2EoKTsKLSAgICB+QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSgp
OwotCi1wcml2YXRlOgotICAgIC8vIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyCi0gICAg
dm9pZCBwdXNoU2FtcGxlcyhjb25zdCBXVEY6Ok1lZGlhVGltZSYsIGNvbnN0IFBsYXRmb3JtQXVk
aW9EYXRhJiwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCkgZmluYWw7Ci0g
ICAgdm9pZCBzdGFydCgpIGZpbmFsOwotICAgIHZvaWQgc3RvcCgpIGZpbmFsOwotICAgIHZvaWQg
Y2xlYXIoKSBmaW5hbDsKLSAgICB2b2lkIHNldFZvbHVtZShmbG9hdCkgZmluYWw7Ci0gICAgdm9p
ZCBzZXRBdWRpb091dHB1dERldmljZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+IG1fb3V0cHV0RGVzY3JpcHRpb247
Ci0gICAgUmVmUHRyPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4gbV9kYXRhU291cmNlOwotICAgIGJv
b2wgbV9zaG91bGRSZXNldCB7IGZhbHNlIH07Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJVbml0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgyMDJmNDk1MDBi
YzUxMzA1YzVjMWMyMTU5OWQxZTM4YWE5ODAwMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oIgotCi0jaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgotI2luY2x1
ZGUgIkF1ZGlvU2Vzc2lvbi5oIgotI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5o
IgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvQXVkaW9U
b29sYm94U1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYv
TG9jay5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVy
ZURldmljZS5oIgotI2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCi0j
ZW5kaWYKLQotI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCYgQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5nbGV0b24oKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ+IHJlZ2lzdHJ5
OwotICAgIHJldHVybiByZWdpc3RyeTsKLX0KLQotQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJVbml0Ojp+QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0KCkKLXsKLSAgICBzdG9w
KCk7Ci19Ci0KLXZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzZXRBdWRp
b091dHB1dERldmljZShjb25zdCBTdHJpbmcmIGRldmljZUlEKQotewotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICBhdXRvIGRldmljZSA9IENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5n
bGV0b24oKS5jb3JlQXVkaW9EZXZpY2VXaXRoVUlEKGRldmljZUlEKTsKLQotICAgIGlmICghZGV2
aWNlICYmICFkZXZpY2VJRC5pc0VtcHR5KCkpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRD
LCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzZXRBdWRpb091dHB1dERldmlj
ZUlkIC0gZGlkIG5vdCBmaW5kIGRldmljZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXV0byBhdWRpb1VuaXREZXZpY2VJRCA9IGRldmljZSA/IGRldmljZS0+ZGV2aWNlSUQoKSA6
IDA7Ci0gICAgaWYgKG1fZGV2aWNlSUQgPT0gYXVkaW9Vbml0RGV2aWNlSUQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGJvb2wgc2hvdWxkUmVzdGFydCA9IG1faXNTdGFydGVkOwotICAgIGlmICht
X2lzU3RhcnRlZCkKLSAgICAgICAgc3RvcCgpOwotCi0gICAgbV9kZXZpY2VJRCA9IGF1ZGlvVW5p
dERldmljZUlEOwotCi0gICAgaWYgKHNob3VsZFJlc3RhcnQpCi0gICAgICAgIHN0YXJ0KCk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZXZpY2VJRCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmFkZFNvdXJjZShSZWY8QXVkaW9TYW1wbGVE
YXRhU291cmNlPiYmIHNvdXJjZSkKLXsKLSAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmFkZFNvdXJjZSIpOwotCi0gICAgewotICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc291cmNlc0xvY2spOwotICAgICAgICBBU1NFUlQo
IW1fc291cmNlcy5jb250YWlucyhzb3VyY2UuZ2V0KCkpKTsKLSAgICAgICAgbV9zb3VyY2VzLmFk
ZChXVEZNb3ZlKHNvdXJjZSkpOwotICAgICAgICBtX3NvdXJjZXNDb3B5ID0gY29weVRvVmVjdG9y
KG1fc291cmNlcyk7Ci0gICAgICAgIG1fc2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcyA9IHRydWU7
Ci0gICAgfQotICAgIHN0YXJ0KCk7Ci19Ci0KLXZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJVbml0OjpyZW1vdmVTb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJiBzb3VyY2UpCi17
Ci0gICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJV
bml0OjpyZW1vdmVTb3VyY2UiKTsKLQotICAgIGJvb2wgc2hvdWxkU3RvcCA9IGZhbHNlOwotICAg
IHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NvdXJjZXNMb2NrKTsKLSAgICAg
ICAgbV9zb3VyY2VzLnJlbW92ZShzb3VyY2UpOwotICAgICAgICBzaG91bGRTdG9wID0gbV9zb3Vy
Y2VzLmlzRW1wdHkoKTsKLSAgICAgICAgbV9zb3VyY2VzQ29weSA9IGNvcHlUb1ZlY3RvcihtX3Nv
dXJjZXMpOwotICAgICAgICBtX3Nob3VsZFVwZGF0ZVJlbmRlclNvdXJjZXMgPSB0cnVlOwotICAg
IH0KLSAgICBpZiAoc2hvdWxkU3RvcCkKLSAgICAgICAgc3RvcCgpOwotfQotCi12b2lkIEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RhcnQoKQotewotICAgIFJFTEVBU0VfTE9H
KFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RhcnQiKTsKLQot
ICAgIGlmIChtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRlQXVkaW9V
bml0SWZOZWVkZWQoKTsKLSAgICBpZiAoIW1fcmVtb3RlSU9Vbml0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoYXV0byBlcnJvciA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fcmVtb3RlSU9V
bml0KSkgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnN0YXJ0IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCwg
ZXJyb3IgPSAlZCIsIGVycm9yKTsKLSAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bv
c2UobV9yZW1vdGVJT1VuaXQpOwotICAgICAgICBtX3JlbW90ZUlPVW5pdCA9IG51bGxwdHI7Ci0g
ICAgfQotICAgIG1faXNTdGFydGVkID0gdHJ1ZTsKLSAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQgaXMgc3RhcnRlZCIpOwotfQotCi12b2lk
IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RvcCgpCi17Ci0gICAgUkVMRUFT
RV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzdG9wIik7
Ci0KLSAgICBpZiAoIW1fcmVtb3RlSU9Vbml0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pc1N0YXJ0ZWQpIHsKLSAgICAgICAgQXVkaW9PdXRwdXRVbml0U3RvcChtX3JlbW90ZUlPVW5p
dCk7Ci0gICAgICAgIG1faXNTdGFydGVkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgQXVkaW9Db21w
b25lbnRJbnN0YW5jZURpc3Bvc2UobV9yZW1vdGVJT1VuaXQpOwotICAgIG1fcmVtb3RlSU9Vbml0
ID0gbnVsbHB0cjsKLX0KLQotQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKiBBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmZvcm1hdERlc2NyaXB0aW9uKCkKLXsKLSAgICBjcmVhdGVB
dWRpb1VuaXRJZk5lZWRlZCgpOwotICAgIHJldHVybiBtX291dHB1dERlc2NyaXB0aW9uLmdldCgp
OwotfQotCi12b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVk
aW9Vbml0SWZOZWVkZWQoKQotewotICAgIEFTU0VSVCghbV9yZW1vdGVJT1VuaXQgfHwgbV9vdXRw
dXREZXNjcmlwdGlvbik7Ci0gICAgaWYgKG1fcmVtb3RlSU9Vbml0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gb3V0cHV0RGVzY3JpcHRpb247Ci0gICAg
QXVkaW9Db21wb25lbnRJbnN0YW5jZSByZW1vdGVJT1VuaXQgeyBudWxscHRyIH07Ci0KLSAgICBB
dWRpb0NvbXBvbmVudERlc2NyaXB0aW9uIGlvVW5pdERlc2NyaXB0aW9uIHsga0F1ZGlvVW5pdFR5
cGVfT3V0cHV0LCAwLCBrQXVkaW9Vbml0TWFudWZhY3R1cmVyX0FwcGxlLCAwLCAwIH07Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpb1VuaXREZXNjcmlwdGlvbi5jb21wb25lbnRTdWJU
eXBlID0ga0F1ZGlvVW5pdFN1YlR5cGVfUmVtb3RlSU87Ci0jZWxzZQotICAgIGlvVW5pdERlc2Ny
aXB0aW9uLmNvbXBvbmVudFN1YlR5cGUgPSBrQXVkaW9Vbml0U3ViVHlwZV9EZWZhdWx0T3V0cHV0
OwotI2VuZGlmCi0KLSAgICBBdWRpb0NvbXBvbmVudCBpb0NvbXBvbmVudCA9IEF1ZGlvQ29tcG9u
ZW50RmluZE5leHQobnVsbHB0ciwgJmlvVW5pdERlc2NyaXB0aW9uKTsKLSAgICBBU1NFUlQoaW9D
b21wb25lbnQpOwotICAgIGlmICghaW9Db21wb25lbnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpjcmVhdGVB
dWRpb1VuaXQgdW5hYmxlIHRvIGZpbmQgcmVtb3RlIElPIHVuaXQgY29tcG9uZW50Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGVycm9yID0gQXVkaW9Db21wb25lbnRJbnN0
YW5jZU5ldyhpb0NvbXBvbmVudCwgJnJlbW90ZUlPVW5pdCk7Ci0gICAgaWYgKGVycm9yKSB7Ci0g
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBvcGVuIHZwaW8gdW5pdCwgZXJy
b3IgPSAlZCIsIGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgVUludDMyIHBhcmFtID0gMTsKLSAgICBlcnJvciA9IEF1ZGlvVW5p
dFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJs
ZUlPLCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LCAwLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOwot
ICAgIGlmIChlcnJvcikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdCB1bmFibGUgdG8g
ZW5hYmxlIHZwaW8gdW5pdCBvdXRwdXQsIGVycm9yID0gJWQiLCBlcnJvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAobV9kZXZp
Y2VJRCkgewotICAgICAgICBlcnJvciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5p
dCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29w
ZV9HbG9iYWwsIDAsICZtX2RldmljZUlELCBzaXplb2YobV9kZXZpY2VJRCkpOwotICAgICAgICBp
ZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBz
ZXQgdW5pdCBkZXZpY2UgSUQgJWQsIGVycm9yICVkICglLjRzKSIsIChpbnQpbV9kZXZpY2VJRCwg
KGludCllcnJvciwgKGNoYXIqKSZlcnJvcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJhY2sg
PSB7IHJlbmRlcmluZ0NhbGxiYWNrLCB0aGlzIH07Ci0gICAgZXJyb3IgPSBBdWRpb1VuaXRTZXRQ
cm9wZXJ0eShyZW1vdGVJT1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TZXRSZW5kZXJDYWxsYmFj
aywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgMCwgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2sp
KTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAi
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxl
IHRvIHNldCB2cGlvIHVuaXQgc3BlYWtlciBwcm9jLCBlcnJvciA9ICVkIiwgZXJyb3IpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVUludDMyIHNpemUgPSBzaXplb2Yob3V0cHV0RGVz
Y3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSk7Ci0gICAgZXJyb3IgID0gQXVkaW9Vbml0R2V0
UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBr
QXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlw
dGlvbigpLCAmc2l6ZSk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVk
aW9Vbml0IHVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgPSAlZCIsIGVy
cm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG91dHB1dERlc2NyaXB0aW9uLnN0
cmVhbURlc2NyaXB0aW9uKCkubVNhbXBsZVJhdGUgPSBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Np
b24oKS5zYW1wbGVSYXRlKCk7Ci0KLSAgICBlcnJvciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJl
bW90ZUlPVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNj
b3BlX0lucHV0LCAwLCAmb3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSwgc2l6
ZW9mKG91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCkpKTsKLSAgICBpZiAoZXJy
b3IpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIHNldCBpbnB1dCBz
dHJlYW0gZm9ybWF0LCBlcnJvciA9ICVkIiwgZXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgZXJyb3IgPSBBdWRpb1VuaXRJbml0aWFsaXplKHJlbW90ZUlPVW5pdCk7Ci0gICAg
aWYgKGVycm9yKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IEF1ZGlvVW5pdEluaXRp
YWxpemUoKSBmYWlsZWQsIGVycm9yID0gJWQiLCBlcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBtX291dHB1dERlc2NyaXB0aW9uID0gbWFrZVVuaXF1ZTxDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24+KG91dHB1dERlc2NyaXB0aW9uKTsKLSAgICBtX3JlbW90ZUlPVW5pdCA9IHJl
bW90ZUlPVW5pdDsKLX0KLQotT1NTdGF0dXMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJV
bml0OjpyZW5kZXIoVUludDMyIHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmIGlvRGF0YSwg
VUludDMyIC8qaW5CdXNOdW1iZXIqLywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwg
QXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmIGFjdGlvbkZsYWdzKQotewotICAgIC8vIEZvciBw
ZXJmb3JtYW5jZSByZWFzb25zLCB3ZSBmb3JiaWQgaGVhcCBhbGxvY2F0aW9ucyB3aGlsZSBkb2lu
ZyByZW5kZXJpbmcgb24gdGhlIGF1ZGlvIHRocmVhZC4KLSAgICBGb3JiaWRNYWxsb2NVc2VGb3JD
dXJyZW50VGhyZWFkU2NvcGUgZm9yYmlkTWFsbG9jVXNlOwotCi0gICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7Ci0gICAgaWYgKG1fc2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcykgewotICAgICAg
ICBhdXRvIGxvY2tlciA9IHRyeUhvbGRMb2NrKG1fc291cmNlc0xvY2spOwotICAgICAgICBpZiAo
IWxvY2tlcikKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIG1fcmVuZGVyU291cmNl
cyA9IFdURk1vdmUobV9zb3VyY2VzQ29weSk7Ci0gICAgICAgIG1fc2hvdWxkVXBkYXRlUmVuZGVy
U291cmNlcyA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtX3JlbmRlclNvdXJjZXMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGlmIChtX291dHB1dERlc2NyaXB0aW9uKQotICAgICAgICAgICAgQXVk
aW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGlvRGF0YSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
YW1wbGVDb3VudCAqIG1fb3V0cHV0RGVzY3JpcHRpb24tPmJ5dGVzUGVyRnJhbWUoKSkpOwotICAg
ICAgICBhY3Rpb25GbGFncyA9IGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxlbmNl
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBNaXggYWxsIHNvdXJjZXMuCi0g
ICAgYm9vbCBpc0ZpcnN0U291cmNlID0gdHJ1ZTsKLSAgICBmb3IgKGF1dG8mIHNvdXJjZSA6IG1f
cmVuZGVyU291cmNlcykgewotICAgICAgICBzb3VyY2UtPnB1bGxTYW1wbGVzKGlvRGF0YSwgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihzYW1wbGVDb3VudCksIHRpbWVTdGFtcC5tU2FtcGxlVGltZSwgdGlt
ZVN0YW1wLm1Ib3N0VGltZSwgaXNGaXJzdFNvdXJjZSA/IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6
Q29weSA6IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6TWl4KTsKLSAgICAgICAgaXNGaXJzdFNvdXJj
ZSA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotT1NTdGF0dXMgQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW5kZXJpbmdDYWxsYmFjayh2b2lkKiBwcm9jZXNz
b3IsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBhY3Rpb25GbGFncywgY29uc3QgQXVkaW9U
aW1lU3RhbXAqIHRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgc2FtcGxlQ291
bnQsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQqPihwcm9jZXNzb3IpLT5yZW5kZXIoc2Ft
cGxlQ291bnQsICppb0RhdGEsIGluQnVzTnVtYmVyLCAqdGltZVN0YW1wLCAqYWN0aW9uRmxhZ3Mp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFf
U1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5p
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGUwNjNmZmZhMmQ0NzEzYzczYjU4
ZDY3MjgwYmU3YWJlYzA5ZjNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0KLSNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Ub29sYm94Lmg+Ci0jaW5jbHVkZSA8Q29y
ZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb1NhbXBsZURhdGFTb3VyY2U7Ci1jbGFzcyBBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3Q7Ci1jbGFzcyBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb247Ci0KLWNsYXNz
IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCYgc2luZ2xldG9uKCk7Ci0KLSAgICBB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQoKSA9IGRlZmF1bHQ7Ci0gICAgfkF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgpOwotCi0gICAgc3RhdGljIE9TU3RhdHVzIHJl
bmRlcmluZ0NhbGxiYWNrKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0
IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgbnVtYmVyT2ZGcmFt
ZXMsIEF1ZGlvQnVmZmVyTGlzdCopOwotCi0gICAgdm9pZCBzdGFydCgpOwotICAgIHZvaWQgc3Rv
cCgpOwotCi0gICAgdm9pZCBzZXRBdWRpb091dHB1dERldmljZShjb25zdCBTdHJpbmcmKTsKLQot
ICAgIHZvaWQgYWRkU291cmNlKFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+JiYpOwotICAgIHZv
aWQgcmVtb3ZlU291cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYpOwotCi0gICAgQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uKiBmb3JtYXREZXNjcmlwdGlvbigpOwotCi1wcml2YXRlOgotICAgIHZv
aWQgY3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKTsKLSAgICBPU1N0YXR1cyByZW5kZXIoVUludDMy
IHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmLCBVSW50MzIgaW5CdXNOdW1iZXIsIGNvbnN0
IEF1ZGlvVGltZVN0YW1wJiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmKTsKLQotICAgIEF1
ZGlvQ29tcG9uZW50SW5zdGFuY2UgbV9yZW1vdGVJT1VuaXQgeyBudWxscHRyIH07Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4gbV9vdXRwdXREZXNjcmlwdGlv
bjsKLSAgICBIYXNoU2V0PFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+PiBtX3NvdXJjZXM7Ci0g
ICAgVmVjdG9yPFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+PiBtX3NvdXJjZXNDb3B5OwotICAg
IFZlY3RvcjxSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPj4gbV9yZW5kZXJTb3VyY2VzOwotICAg
IGJvb2wgbV9zaG91bGRVcGRhdGVSZW5kZXJTb3VyY2VzIHsgZmFsc2UgfTsKLSAgICBMb2NrIG1f
c291cmNlc0xvY2s7Ci0gICAgYm9vbCBtX2lzU3RhcnRlZCB7IGZhbHNlIH07Ci0jaWYgUExBVEZP
Uk0oTUFDKQotICAgIHVpbnQzMl90IG1fZGV2aWNlSUQgeyAwIH07Ci0jZW5kaWYKLX07Ci0KLX0K
LQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCg==
</data>
<flag name="commit-queue"
          id="449043"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428191</attachid>
            <date>2021-05-10 12:04:44 -0700</date>
            <delta_ts>2021-05-12 01:23:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225601-20210510210442.patch</filename>
            <type>text/plain</type>
            <size>74261</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MjU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTRlYzI0YTM4ZDFmZDZi
MjE3ZWNiYmEwNGFiOTI3YTEzN2UzNTc3Mi4uYTExZTAxNTI5YmI1YTkyZGEwY2FhMjU3M2RkNTll
ZDRhZjkyMjZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTA1LTEwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgYW4gaW50
ZXJuYWwgdW5pdCB0byByZW5kZXIgYXVkaW8gTWVkaWFTdHJlYW1UcmFjayhzKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NjAxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBmaWxlcyBmcm9tIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYyB0byBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYSBzaW5j
ZSB0aGV5IGFyZSB1c2VkIGluIGJvdGggaU9TIGFuZCBtYWNPUy4KKyAgICAgICAgTW92ZSBBdWRp
byBVbml0IGZ1bmN0aW9uYWxpdHkgb3V0IG9mIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
VW5pdC4KKyAgICAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0IGlzIHJlc3Bv
bnNpYmxlIHRvIG1hbmFnZSBzb3VyY2VzIGFuZCBkbyB0aGUgbWl4aW5nLgorICAgICAgICBUbyBh
Y3R1YWxseSByZW5kZXIgYXVkaW8sIGl0IHdpbGwgdXNlIGFuIEludGVybmFsVW5pdCwgd2hpY2gg
aXMgY3VycmVudGx5IGRvbmUgaW4gcHJvY2Vzcy4KKworICAgICAgICBBIGZ1dHVyZSB3b3JrIHdp
bGwgYWRkIHN1cHBvcnQgZm9yIGEgcmVtb3RlIEludGVybmFsVW5pdCwgdGhhdCB3b3VsZCBydW4g
b24gR1BVUHJvY2Vzcy4KKyAgICAgICAgVG8gcHJlcGFyZSBmb3IgdGhhdCwgYSBjYWxsYmFjayBh
bGxvd3MgY3VzdG9taXppbmcgdGhlIEludGVybmFsIFVuaXQgY3JlYXRpb24uCisgICAgICAgIFdl
IGFsc28gY2hhbmdlIHJlbmRlcmVyIHN0YXJ0IHRvIGJlIGFzeW5jaHJvbm91cywgc2luY2UgaXQg
cmVxdWlyZXMgZmV0Y2hpbmcgdGhlIGF1ZGlvIGRlc2NyaXB0aW9uIGZyb20gR1BVUHJvY2Vzcy4K
KworICAgICAgICBObyBjaGFuZ2Ugb2YgYmVoYXZpb3IsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9B
dWRpb1NhbXBsZUJ1ZmZlckxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9B
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbTo6c3RhcnRSZW5kZXJlcik6CisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJDb2NvYS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAuCisgICAgICAg
IChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzdGFydCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJDb2NvYS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oLgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVySW50ZXJuYWxVbml0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVu
aXQ6OmNyZWF0ZUxvY2FsSW50ZXJuYWxVbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OkxvY2FsQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6cmV0cmlldmVGb3JtYXRE
ZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVySW50ZXJuYWxVbml0OjpzZXRBdWRpb091dHB1dERldmljZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0Ojpz
dGFydCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVySW50ZXJuYWxVbml0OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJ
bnRlcm5hbFVuaXQ6OnJlbmRlcmluZ0NhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdC5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmdldENyZWF0ZUludGVybmFsVW5pdEZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2V0
Q3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW50
ZXJuYWxVbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyVW5pdDo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdDo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6fkF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNldEF1ZGlvT3V0cHV0RGV2aWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6YWRkU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6
cmVtb3ZlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJVbml0OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyVW5pdDo6cmV0cmlldmVGb3JtYXREZXNjcmlwdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnJlbmRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmguCisKIDIwMjEt
MDUtMDkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBiYWNr
IHByb3RlY3Rpb24gb2YgdGhlIHBpeGVsIGJ1ZmZlciBpbiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
dG9DRkRhdGEgcmVtb3ZlZCBpbiByMjc3MjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM5NzJmZDYzNzNkZjI2ZTIy
Y2FjMWUwYjZkMDdiYjA4ZjY3Nzg3YzUuLjhkOWU1ZmE4ZjVkOWIwODIyODkxYWJiMWZhMTk3OTZh
NGI3OWE0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDUtMTAgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIEludHJvZHVjZSBhbiBpbnRlcm5h
bCB1bml0IHRvIHJlbmRlciBhdWRpbyBNZWRpYVN0cmVhbVRyYWNrKHMpCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU2MDEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgYWNjb3JkaW5nIG5ldyBX
ZWJDb3JlIEFQSS4KKworICAgICAgICAqIEdQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZUF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6OnN0YXJ0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS93ZWJydGMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcjo6c3RhcnQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL3dlYnJ0Yy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5oOgorCiAy
MDIxLTA1LTA5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBI
YXZlIElQQzo6U2VtYXBob3JlOjp3YWl0IHJldHVybiBhIHN0YXRlIGJvb2xlYW4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzQ29jb2EudHh0CmluZGV4IGE3NWRjYzdlYWFmOWRhOTA4MWJiZTc5N2JjNDk4NGI3ODY3OTVl
ZmQuLjhiZDAwMjI5OGQ2ZGRmMGM1ZTY3NjgzYTQyZDA3MTNhYzExNTcxMWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dApAQCAtNTI2LDE0ICs1MjYsMTUgQEAgcGxhdGZvcm0vbWVkaWFyZWNvcmRl
ci9NZWRpYVJlY29yZGVyUHJpdmF0ZUFWRkltcGwuY3BwCiBwbGF0Zm9ybS9tZWRpYXJlY29yZGVy
L2NvY29hL0F1ZGlvU2FtcGxlQnVmZmVyQ29tcHJlc3Nvci5tbQogcGxhdGZvcm0vbWVkaWFyZWNv
cmRlci9jb2NvYS9NZWRpYVJlY29yZGVyUHJpdmF0ZVdyaXRlckNvY29hLm1tCiBwbGF0Zm9ybS9t
ZWRpYXJlY29yZGVyL2NvY29hL1ZpZGVvU2FtcGxlQnVmZmVyQ29tcHJlc3Nvci5tbQorcGxhdGZv
cm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5j
cHAKK3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVySW50ZXJuYWxVbml0LmNwcAorcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcAogcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FW
QXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZS5tbQogcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0FW
QXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9pb3MvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5tbSBAbm8tdW5pZnkKIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlckNvY29hLmNwcAog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0gQG5vLXVu
aWZ5CiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0gQG5v
LXVuaWZ5Ci1wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJDb2NvYS5jcHAKLXBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQmFzZUF1ZGlv
U2hhcmVkVW5pdC5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJl
RGV2aWNlLmNwcAogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGI1OGI5ODZjNzY0YjNkNDFmNjFmMTQwMzExOTI3NmJiNGI4OWE2
NDAuLmE4NDk3MTdlN2NiYzZkM2VmMmI4ZjVkZWViZGUyNjU2ZmU4MzZhZGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExNzUs
NiArMTE3NSw4IEBACiAJCTQxQjg3NzYyMjNERTEwNDUwMDM2MzhCOCAvKiBSZWFsdGltZU1lZGlh
U291cmNlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFCODc3NjAyM0RFMTA0MjAwMzYzOEI4IC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VJ
ZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDFCQkE4NjYyNTdFMzczQjAwQUM3RjZEIC8qIFNGcmFtZVV0aWxzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTIwOUUyNDI1N0EyRkJCMDAx
MjBBQ0EgLyogU0ZyYW1lVXRpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk0MUJGMjA0OTIyQkE3QkU4MDAwNEY4MTIgLyogUmVhbHRpbWVWaWRl
b1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDFCRjIwNDAyMkI5NDcxNjAwMDRGODEyIC8qIFJlYWx0aW1lVmlkZW9Tb3VyY2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MUMzQjhBMTI2NDlC
MUUwMDA0RUQ0REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQzNCODlG
MjY0OUIxQjcwMDRFRDRERSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTQxQzNCOEEyMjY0OUIxRTUwMDRFRDRERSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
QzNCODlCMjY0OUIxQjYwMDRFRDRERSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0
MUM3NjBCMTBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAv
KiBTY3JpcHRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQxQ0I4NDAxMjVDQUI3QjMwMDEwRTJCMSAvKiBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDFDQjg0MDAyNUNBQjdCMDAwMTBFMkIxIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUNvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDFDQjg0MDIyNUNBQjgxRTAwMTBFMkIxIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNE
RDgzM0ExRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03Njk2LDgg
Kzc2OTgsNiBAQAogCQkzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDEwMjRGQzgyM0NGMjU0RjAwRkRGOThFIC8qIFNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MTA3OTA4QTFGQzNFNEYyMDA2MUIyN0EgLyogQ2xpZW50
T3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaWVudE9yaWdpbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTA4N0YwMTI0OEU1OUM4MDA2ODBFOTEg
LyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxMDg3RjAzMjQ4RTU5QzkwMDY4MEU5
MSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMDkzODI4MjM0Nzc5OUEwMDk0MjhCQSAvKiBK
U0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0Fib3J0Q29udHJvbGxlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQxMDkzODJDMjM0Nzg1MEUwMDk0MjhCQSAvKiBKU0Fib3J0U2lnbmFsQ3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQWJvcnRTaWduYWxDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MTBBOEVGNDI0RjgyM0I5MDA0RjkwNzAgLyogVGV4dEVu
Y29kZXJTdHJlYW0uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFRleHRFbmNvZGVyU3RyZWFtLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTc4NjMsOCArNzg2Myw2IEBACiAJCTQxNjJBNDRGMTAxMTQ1QUUw
MERGRjNFRCAvKiBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MTYyQTQ1NTEwMTE0NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDE2MkE0NTYxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTZBMDY5MjIz
Q0NBQTkzMDAzNDcxMDkgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxNkEwNjkzMjNDQ0FB
OTQwMDM0NzEwOSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyQ29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZBMDY5NDIz
Q0NBQTlFMDAzNDcxMDkgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3Ry
ZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2QTA2OTUyM0NDQUE5RTAw
MzQ3MTA5IC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2QTA2OTYyM0NDQUE5RjAwMzQ3MTA5
IC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC04MDIyLDYgKzgwMjAsMTIgQEAKIAkJNDFCQ0U4NzcyNUY3QTY3
QTAwNDZDMkU1IC8qIFJUQ1RyYW5zZm9ybUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJUQ1RyYW5zZm9ybUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxQkYyMDQwMjJCOTQ3MTYwMDA0RjgxMiAvKiBSZWFsdGltZVZpZGVvU291cmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlYWx0aW1lVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDFCRjIwNDIyMkI5NDcxNzAwMDRGODEyIC8qIFJlYWx0aW1lVmlkZW9Tb3VyY2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQzNCODlCMjY0OUIxQjYwMDRFRDRERSAvKiBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJVbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQx
QzNCODlDMjY0OUIxQjYwMDRFRDRERSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNv
Y29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2Eu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFDM0I4OUQyNjQ5QjFCNjAwNEVENERF
IC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQxQzNCODlFMjY0OUIxQjcwMDRFRDRERSAvKiBBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQxQzNCODlGMjY0OUIxQjcwMDRFRDRERSAvKiBBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0MUMzQjhBMDI2NDlCMUI3MDA0RUQ0REUgLyogQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJVbml0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQzc2
MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MUM3RTEwNTFFNkE1NDM2MDAyN0I0REUgLyogQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJh
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzQ2FwdHVy
ZU1lZGlhU3RyZWFtVHJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUM3
RTEwNjFFNkE1NDM2MDAyN0I0REUgLyogQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFt
VHJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NTQ1LDYgKzE3NTQ5LDcg
QEAKIAkJMDcyMjFCOTIxN0NGMEFENDAwODQ4RTUxIC8qIG1lZGlhc3RyZWFtICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0MUMzQjg5QTI2NDlCMThFMDA0
RUQ0REUgLyogY29jb2EgKi8sCiAJCQkJQ0RDNjc1MUYxRUFFQTk5NjAwNzI3Qzg0IC8qIGlvcyAq
LywKIAkJCQk0MTU3NDc0MjFFMzg2OTgwMDBFOTE0RDggLyogbGlid2VicnRjICovLAogCQkJCTA3
MjlCMTREMTdDRkNDQTAwMDRGMUQ2MCAvKiBtYWMgKi8sCkBAIC0xNzYyOSwxMCArMTc2MzQsNiBA
QAogCQkwNzI5QjE0RDE3Q0ZDQ0EwMDA0RjFENjAgLyogbWFjICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk0MTZBMDY5MzIzQ0NBQTk0MDAzNDcxMDkgLyog
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAgKi8sCi0JCQkJNDE2QTA2OTIy
M0NDQUE5MzAwMzQ3MTA5IC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaCAq
LywKLQkJCQk0MTA4N0YwMTI0OEU1OUM4MDA2ODBFOTEgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0LmNwcCAqLywKLQkJCQk0MTA4N0YwMzI0OEU1OUM5MDA2ODBFOTEgLyogQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmggKi8sCiAJCQkJMDcwMzYzREExODFBMUNE
QzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLywKIAkJCQkwNzAzNjNEQjE4
MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSAqLywKIAkJCQkwNzAz
NjNERTE4MUExQ0RDMDBDMDc0QTUgLyogQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCAqLywKQEAgLTE5
ODcxLDYgKzE5ODcyLDE5IEBACiAJCQluYW1lID0gU3RyZWFtczsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CiAJCX07CisJCTQxQzNCODlBMjY0OUIxOEUwMDRFRDRERSAvKiBjb2NvYSAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNDFDM0I4OUQyNjQ5
QjFCNjAwNEVENERFIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwICov
LAorCQkJCTQxQzNCODlDMjY0OUIxQjYwMDRFRDRERSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hLmggKi8sCisJCQkJNDFDM0I4OUUyNjQ5QjFCNzAwNEVENERFIC8qIEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0LmNwcCAqLywKKwkJCQk0MUMzQjg5
RjI2NDlCMUI3MDA0RUQ0REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5h
bFVuaXQuaCAqLywKKwkJCQk0MUMzQjhBMDI2NDlCMUI3MDA0RUQ0REUgLyogQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcCAqLywKKwkJCQk0MUMzQjg5QjI2NDlCMUI2MDA0RUQ0
REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmggKi8sCisJCQkpOworCQkJ
cGF0aCA9IGNvY29hOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNDFGNTRG
N0MxQzUwQzRGNjAwMzM4NDg4IC8qIGZldGNoICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTMxNTQ3LDYgKzMxNTYxLDggQEAKIAkJCQlGREUyRDU1QjE1OUU2
NkVCMDBEQ0NDRjggLyogQXVkaW9JT0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMx
NjAxMDEyQjAyNjc2MDBDMUEzNTkgLyogQXVkaW9MaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDE2QTA2QTEyM0NDQUQwMzAwMzQ3MTA5IC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUMzQjhBMTI2NDlCMUUwMDA0RUQ0REUgLyogQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTQxQzNCOEEyMjY0OUIxRTUwMDRFRDRERSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlclVuaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDEzMTJCMDI2NzYwMEMxQTM1OSAv
KiBBdWRpb05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDE2MTJCMDI2NzYwMEMxQTM1
OSAvKiBBdWRpb05vZGVJbnB1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTcxNDY3QjMyNEFCQUVG
MjAwRkIyRjUwIC8qIEF1ZGlvTm9kZU9wdGlvbnMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVCdWZmZXJM
aXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZUJ1
ZmZlckxpc3QuaAppbmRleCA4MWFjZGU3ZTk3Y2Y5NTdiMDAwMTEwNzA5ZWQ5MzRiYzcxNDRkNTUz
Li5iN2RlYzNmMTU1ZDQ2NWI0ZTg1MTQ5MWRhNmExY2U5YzJjNzVhNGJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZUJ1ZmZlckxpc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZUJ1
ZmZlckxpc3QuaApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0KCk7
CiAKLSAgICBzdGF0aWMgdm9pZCB6ZXJvQUJMKEF1ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgemVyb0FCTChBdWRpb0J1ZmZlckxpc3QmLCBz
aXplX3QpOwogICAgIHZvaWQgemVybygpOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXIuaAppbmRleCA2MWU0Y2U0Mzc0YTZmMWJiOWQ2NzIxMTU3Y2YyYWU4
Y2RhNDExYzk0Li4wOTcyNzY4ZGVmZWJlYmE4ZjAyODQ4NTkyMmFkNmIxODExZmNhMzBiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9BdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXI+IGNyZWF0ZSgpOwogICAgIHZpcnR1YWwgfkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyKCkgPSBkZWZhdWx0OwogCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0KCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzdGFydChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CiAg
ICAgLy8gTWF5IGJlIGNhbGxlZCBvbiBhIGJhY2tncm91bmQgdGhyZWFkLiBJdCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgYWZ0ZXIgc3RhcnQvYmVmb3JlIHN0b3AgaXMgY2FsbGVkLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vQXVkaW9UcmFja1ByaXZhdGVN
ZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9BdWRp
b1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmNwcAppbmRleCAwOTFmZDcyYzc5NWQyMzE0YzNiNDlh
NzEyMTNkM2QxYjNkOTQ4NGY3Li5mODNlMjlkMGYzODc1NjUwYmZhMTI0MThlODI2YzUyYzMxNzYw
NTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9BdWRp
b1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9BdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmNwcApAQCAtMTU5LDEz
ICsxNTksMTQgQEAgdm9pZCBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtOjp1cGRhdGVSZW5k
ZXJlcigpCiB2b2lkIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OnN0YXJ0UmVuZGVyZXIo
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1faXNQbGF5aW5nKQor
ICAgIGlmIChtX2lzUGxheWluZyB8fCAhbV9yZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9pc1BsYXlpbmcgPSB0cnVlOwotICAgIGlmIChtX3JlbmRlcmVyKQotICAgICAgICBtX3Jl
bmRlcmVyLT5zdGFydCgpOwotICAgIG1fYXVkaW9Tb3VyY2UtPmFkZEF1ZGlvU2FtcGxlT2JzZXJ2
ZXIoKnRoaXMpOworICAgIG1fcmVuZGVyZXItPnN0YXJ0KFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyldIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1faXNQbGF5aW5nKQorICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9hdWRpb1NvdXJjZS0+YWRkQXVkaW9TYW1wbGVPYnNl
cnZlcihwcm90ZWN0ZWRUaGlzLmdldCgpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBBdWRpb1RyYWNr
UHJpdmF0ZU1lZGlhU3RyZWFtOjpzdG9wUmVuZGVyZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2Nv
YS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Zjli
NzE3NDA2MDY4ODE2ZTcxOWE1N2E2MzdiZTZhNThjMGU3ZDNkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAi
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmgiCisjaW5jbHVkZSAiQXVkaW9TYW1w
bGVEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisj
aW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckNvY29hKCkgPSBkZWZhdWx0OworCitBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckNvY29hOjp+QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSgpID0gZGVmYXVs
dDsKKwordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzdGFydChDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgY2xlYXIoKTsKKworICAg
IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2luZ2xldG9uKCkucmV0cmlldmVG
b3JtYXREZXNjcmlwdGlvbihbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byogZm9ybWF0RGVzY3JpcHRpb24pIG11dGFibGUgewor
ICAgICAgICBpZiAod2Vha1RoaXMpCisgICAgICAgICAgICB3ZWFrVGhpcy0+bV9vdXRwdXREZXNj
cmlwdGlvbiA9IG1ha2VVbmlxdWU8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPigqZm9ybWF0RGVz
Y3JpcHRpb24pOworICAgICAgICBjYWxsYmFjaygpOworICAgIH0pOworfQorCit2b2lkIEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnN0b3AoKQoreworICAgIGlmIChtX2RhdGFT
b3VyY2UpCisgICAgICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2luZ2xl
dG9uKCkucmVtb3ZlU291cmNlKCptX2RhdGFTb3VyY2UpOworfQorCit2b2lkIEF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OmNsZWFyKCkKK3sKKyAgICBzdG9wKCk7CisKKyAgICBt
X2RhdGFTb3VyY2UgPSBudWxscHRyOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24gPSB7IH07Cit9
CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c2V0Vm9sdW1lKGZs
b2F0IHZvbHVtZSkKK3sKKyAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcjo6c2V0Vm9s
dW1lKHZvbHVtZSk7CisgICAgaWYgKG1fZGF0YVNvdXJjZSkKKyAgICAgICAgbV9kYXRhU291cmNl
LT5zZXRWb2x1bWUodm9sdW1lKTsKK30KKwordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckNvY29hOjpzZXRBdWRpb091dHB1dERldmljZShjb25zdCBTdHJpbmcmIGRldmljZUlkKQor
eworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY3JlYXRlIGEgdW5pdCBmb3Igb3Vyc2VsdmVzIGhl
cmUgb3IgdXNlIHRoZSBkZWZhdWx0IHVuaXQgaWYgZGV2aWNlSWQgaXMgbWF0Y2hpbmcuCisgICAg
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5nbGV0b24oKS5zZXRBdWRpb091
dHB1dERldmljZShkZXZpY2VJZCk7CisgICAgbV9zaG91bGRSZXNldCA9IHRydWU7Cit9CisKK3N0
YXRpYyB1bnNpZ25lZCBwb2xsU2FtcGxlc0NvdW50KCkKK3sKKyNpZiBVU0UoTElCV0VCUlRDKQor
ICAgIHJldHVybiBMaWJXZWJSVENBdWRpb01vZHVsZTo6UG9sbFNhbXBsZXNDb3VudCArIDE7Cisj
ZWxzZQorICAgIHJldHVybiAyOworI2VuZGlmCit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJDb2NvYTo6cHVzaFNhbXBsZXMoY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1l
LCBjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYgYXVkaW9EYXRhLCBjb25zdCBBdWRpb1N0cmVhbURl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgc2l6ZV90IHNhbXBsZUNvdW50KQoreworICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2Ny
aXB0aW9uKCkudHlwZSA9PSBQbGF0Zm9ybURlc2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtQmFzaWNU
eXBlKTsKKyAgICBpZiAoIW1fZGF0YVNvdXJjZSB8fCBtX3Nob3VsZFJlc2V0IHx8ICFtX2RhdGFT
b3VyY2UtPmlucHV0RGVzY3JpcHRpb24oKSB8fCAqbV9kYXRhU291cmNlLT5pbnB1dERlc2NyaXB0
aW9uKCkgIT0gZGVzY3JpcHRpb24pIHsKKyAgICAgICAgRGlzYWJsZU1hbGxvY1Jlc3RyaWN0aW9u
c0ZvckN1cnJlbnRUaHJlYWRTY29wZSBzY29wZTsKKworICAgICAgICAvLyBGSVhNRTogRm9yIG5v
biBsaWJ3ZWJydGMgc291cmNlcywgd2UgY2FuIHByb2JhYmx5IHJlZHVjZSBwb2xsIHNhbXBsZXMg
Y291bnQgdG8gMi4KKyAgICAgICAgCisgICAgICAgIGF1dG8gZGF0YVNvdXJjZSA9IEF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZTo6Y3JlYXRlKGRlc2NyaXB0aW9uLnNhbXBsZVJhdGUoKSAqIDAuNSwgKnRo
aXMsIHBvbGxTYW1wbGVzQ291bnQoKSk7CisKKyAgICAgICAgaWYgKGRhdGFTb3VyY2UtPnNldElu
cHV0Rm9ybWF0KHRvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSkpIHsKKyAg
ICAgICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAiVW5hYmxlIHRvIHNldCB0aGUgaW5w
dXQgZm9ybWF0IG9mIGRhdGEgc291cmNlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIW1fb3V0cHV0RGVzY3JpcHRpb24gfHwgZGF0YVNvdXJjZS0+c2V0
T3V0cHV0Rm9ybWF0KCptX291dHB1dERlc2NyaXB0aW9uKSkgeworICAgICAgICAgICAgRVJST1Jf
TE9HKExPR0lERU5USUZJRVIsICJVbmFibGUgdG8gc2V0IHRoZSBvdXRwdXQgZm9ybWF0IG9mIGRh
dGEgc291cmNlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBvbGRT
b3VyY2UgPSBtX2RhdGFTb3VyY2UsIG5ld1NvdXJjZSA9IGRhdGFTb3VyY2VdKCkgbXV0YWJsZSB7
CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgaWYgKG9sZFNvdXJjZSkKKyAgICAgICAgICAgICAgICBBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRvbigpLnJlbW92ZVNvdXJjZSgqb2xkU291cmNl
KTsKKworICAgICAgICAgICAgbmV3U291cmNlLT5zZXRWb2x1bWUodm9sdW1lKCkpOworICAgICAg
ICAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5nbGV0b24oKS5hZGRT
b3VyY2UoV1RGTW92ZShuZXdTb3VyY2UpKTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fZGF0YVNv
dXJjZSA9IFdURk1vdmUoZGF0YVNvdXJjZSk7CisgICAgICAgIG1fc2hvdWxkUmVzZXQgPSBmYWxz
ZTsKKyAgICB9CisKKyAgICBtX2RhdGFTb3VyY2UtPnB1c2hTYW1wbGVzKHNhbXBsZVRpbWUsIGF1
ZGlvRGF0YSwgc2FtcGxlQ291bnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJD
b2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjMzU5NWVjZTk4NWJk
MjdkZTFjYmY2NzhlNDdkYmMxNzJlZThmOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckNvY29hLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9XZWFr
UHRyLmg+CisKKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Ub29sYm94Lmg+CisjaW5jbHVk
ZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQXVkaW9TYW1wbGVEYXRhU291cmNlOworY2xhc3MgQXVkaW9TYW1wbGVCdWZmZXJMaXN0
OworY2xhc3MgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOworCitjbGFzcyBBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckNvY29hIDogcHVibGljIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJD
b2NvYSwgV2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckNvY29hKCk7CisgICAgfkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EoKTsK
KworcHJpdmF0ZToKKyAgICAvLyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcgorICAgIHZv
aWQgcHVzaFNhbXBsZXMoY29uc3QgV1RGOjpNZWRpYVRpbWUmLCBjb25zdCBQbGF0Zm9ybUF1ZGlv
RGF0YSYsIGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBzaXplX3QpIGZpbmFsOworICAg
IHZvaWQgc3RhcnQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKKyAgICB2b2lk
IHN0b3AoKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKCkgZmluYWw7CisgICAgdm9pZCBzZXRWb2x1
bWUoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc2V0QXVkaW9PdXRwdXREZXZpY2UoY29uc3QgU3Ry
aW5nJikgZmluYWw7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uPiBtX291dHB1dERlc2NyaXB0aW9uOworICAgIFJlZlB0cjxBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U+IG1fZGF0YVNvdXJjZTsKKyAgICBib29sIG1fc2hvdWxkUmVzZXQgeyBmYWxzZSB9OworfTsK
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVySW50ZXJuYWxVbml0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jOGM1M2YzZDNjNTFiYjc2ODBiZDQ0YWEwOGI3NzU0MzM0NDE1MmU3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29j
b2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQuY3BwCkBAIC0wLDAg
KzEsMjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0LmgiCisKKyNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCisjaW5j
bHVkZSAiQXVkaW9TZXNzaW9uLmgiCisjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9BdWRp
b1Rvb2xib3hTUEkuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJDb3JlQXVkaW9DYXB0
dXJlRGV2aWNlLmgiCisjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuaCIK
KyNlbmRpZgorCisjaW5jbHVkZSA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdCBmaW5hbCA6IHB1YmxpYyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgTG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5p
dChSZW5kZXJDYWxsYmFjayYmKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZUF1ZGlvVW5p
dElmTmVlZGVkKCk7CisKKyAgICAvLyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVy
bmFsVW5pdCBBUEkuCisgICAgdm9pZCBzdGFydCgpIGZpbmFsOworICAgIHZvaWQgc3RvcCgpIGZp
bmFsOworICAgIHZvaWQgcmV0cmlldmVGb3JtYXREZXNjcmlwdGlvbihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiopPiYmKSBmaW5hbDsKKyAgICB2
b2lkIHNldEF1ZGlvT3V0cHV0RGV2aWNlKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgc3Rh
dGljIE9TU3RhdHVzIHJlbmRlcmluZ0NhbGxiYWNrKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rp
b25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50
MzIgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCopOworCisgICAgUmVuZGVyQ2FsbGJhY2sg
bV9yZW5kZXJDYWxsYmFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uPiBtX291dHB1dERlc2NyaXB0aW9uOworICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2Ug
bV9yZW1vdGVJT1VuaXQgeyBudWxscHRyIH07CisgICAgYm9vbCBtX2lzU3RhcnRlZCB7IGZhbHNl
IH07CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHVpbnQzMl90IG1fZGV2aWNlSUQgeyAwIH07Cisj
ZW5kaWYKK307CisKK1VuaXF1ZVJlZjxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVy
bmFsVW5pdD4gQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OmNyZWF0
ZUxvY2FsSW50ZXJuYWxVbml0KFJlbmRlckNhbGxiYWNrJiYgcmVuZGVyQ2FsbGJhY2spCit7Cisg
ICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8TG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdD4oV1RGTW92ZShyZW5kZXJDYWxsYmFjaykpOworfQorCitMb2NhbEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpMb2NhbEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0KFJlbmRlckNhbGxiYWNrJiYgcmVuZGVyQ2FsbGJh
Y2spCisgICAgOiBtX3JlbmRlckNhbGxiYWNrKFdURk1vdmUocmVuZGVyQ2FsbGJhY2spKQorewor
fQorCit2b2lkIExvY2FsQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6
OnJldHJpZXZlRm9ybWF0RGVzY3JpcHRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24qKT4mJiBjYWxsYmFjaykKK3sKKyAgICBjcmVhdGVBdWRp
b1VuaXRJZk5lZWRlZCgpOworICAgIGNhbGxiYWNrKG1fb3V0cHV0RGVzY3JpcHRpb24uZ2V0KCkp
OworfQorCit2b2lkIExvY2FsQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVu
aXQ6OnNldEF1ZGlvT3V0cHV0RGV2aWNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQpCit7CisjaWYg
UExBVEZPUk0oTUFDKQorICAgIGF1dG8gZGV2aWNlID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1h
bmFnZXI6OnNpbmdsZXRvbigpLmNvcmVBdWRpb0RldmljZVdpdGhVSUQoZGV2aWNlSUQpOworCisg
ICAgaWYgKCFkZXZpY2UgJiYgIWRldmljZUlELmlzRW1wdHkoKSkgeworICAgICAgICBSRUxFQVNF
X0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6
c2V0QXVkaW9PdXRwdXREZXZpY2VJZCAtIGRpZCBub3QgZmluZCBkZXZpY2UiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGF1dG8gYXVkaW9Vbml0RGV2aWNlSUQgPSBkZXZpY2UgPyBk
ZXZpY2UtPmRldmljZUlEKCkgOiAwOworICAgIGlmIChtX2RldmljZUlEID09IGF1ZGlvVW5pdERl
dmljZUlEKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNob3VsZFJlc3RhcnQgPSBtX2lz
U3RhcnRlZDsKKyAgICBpZiAobV9pc1N0YXJ0ZWQpCisgICAgICAgIHN0b3AoKTsKKworICAgIG1f
ZGV2aWNlSUQgPSBhdWRpb1VuaXREZXZpY2VJRDsKKworICAgIGlmIChzaG91bGRSZXN0YXJ0KQor
ICAgICAgICBzdGFydCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZGV2aWNlSUQpOworI2Vu
ZGlmCit9CisKK3ZvaWQgTG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdDo6c3RhcnQoKQoreworICAgIGlmIChtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKTsKKyAgICBpZiAoIW1fcmVtb3RlSU9Vbml0
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byBlcnJvciA9IEF1ZGlvT3V0cHV0VW5p
dFN0YXJ0KG1fcmVtb3RlSU9Vbml0KSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJS
VEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6c3RhcnQgQXVk
aW9PdXRwdXRVbml0U3RhcnQgZmFpbGVkLCBlcnJvciA9ICVkIiwgZXJyb3IpOworICAgICAgICBB
dWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZShtX3JlbW90ZUlPVW5pdCk7CisgICAgICAgIG1f
cmVtb3RlSU9Vbml0ID0gbnVsbHB0cjsKKyAgICB9CisgICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOwor
ICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50
ZXJuYWxVbml0IGlzIHN0YXJ0ZWQiKTsKK30KKwordm9pZCBMb2NhbEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpzdG9wKCkKK3sKKyAgICBpZiAoIW1fcmVtb3RlSU9V
bml0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAg
QXVkaW9PdXRwdXRVbml0U3RvcChtX3JlbW90ZUlPVW5pdCk7CisgICAgICAgIG1faXNTdGFydGVk
ID0gZmFsc2U7CisgICAgfQorCisgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9y
ZW1vdGVJT1VuaXQpOworICAgIG1fcmVtb3RlSU9Vbml0ID0gbnVsbHB0cjsKK30KKwordm9pZCBM
b2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpjcmVhdGVBdWRp
b1VuaXRJZk5lZWRlZCgpCit7CisgICAgQVNTRVJUKCFtX3JlbW90ZUlPVW5pdCB8fCBtX291dHB1
dERlc2NyaXB0aW9uKTsKKyAgICBpZiAobV9yZW1vdGVJT1VuaXQpCisgICAgICAgIHJldHVybjsK
KworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBvdXRwdXREZXNjcmlwdGlvbjsKKyAgICBB
dWRpb0NvbXBvbmVudEluc3RhbmNlIHJlbW90ZUlPVW5pdCB7IG51bGxwdHIgfTsKKworICAgIEF1
ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gaW9Vbml0RGVzY3JpcHRpb24geyBrQXVkaW9Vbml0VHlw
ZV9PdXRwdXQsIDAsIGtBdWRpb1VuaXRNYW51ZmFjdHVyZXJfQXBwbGUsIDAsIDAgfTsKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgIGlvVW5pdERlc2NyaXB0aW9uLmNvbXBvbmVudFN1YlR5
cGUgPSBrQXVkaW9Vbml0U3ViVHlwZV9SZW1vdGVJTzsKKyNlbHNlCisgICAgaW9Vbml0RGVzY3Jp
cHRpb24uY29tcG9uZW50U3ViVHlwZSA9IGtBdWRpb1VuaXRTdWJUeXBlX0RlZmF1bHRPdXRwdXQ7
CisjZW5kaWYKKworICAgIEF1ZGlvQ29tcG9uZW50IGlvQ29tcG9uZW50ID0gQXVkaW9Db21wb25l
bnRGaW5kTmV4dChudWxscHRyLCAmaW9Vbml0RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChpb0Nv
bXBvbmVudCk7CisgICAgaWYgKCFpb0NvbXBvbmVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6
Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBmaW5kIHJlbW90ZSBJTyB1bml0IGNvbXBvbmVudCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBlcnJvciA9IEF1ZGlvQ29tcG9u
ZW50SW5zdGFuY2VOZXcoaW9Db21wb25lbnQsICZyZW1vdGVJT1VuaXQpOworICAgIGlmIChlcnJv
cikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBvcGVu
IHZwaW8gdW5pdCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgVUludDMyIHBhcmFtID0gMTsKKyAgICBl
cnJvciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1ZGlvT3V0cHV0VW5p
dFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LCAwLCAmcGFyYW0sIHNp
emVvZihwYXJhbSkpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6Y3Jl
YXRlQXVkaW9Vbml0IHVuYWJsZSB0byBlbmFibGUgdnBpbyB1bml0IG91dHB1dCwgZXJyb3IgPSAl
ZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIGlmIChtX2RldmljZUlEKSB7CisgICAgICAgIGVycm9yID0gQXVkaW9Vbml0
U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVu
dERldmljZSwga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgMCwgJm1fZGV2aWNlSUQsIHNpemVvZiht
X2RldmljZUlEKSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVu
aXQ6OmNyZWF0ZUF1ZGlvVW5pdCB1bmFibGUgdG8gc2V0IHVuaXQgZGV2aWNlIElEICVkLCBlcnJv
ciAlZCAoJS40cykiLCAoaW50KW1fZGV2aWNlSUQsIChpbnQpZXJyb3IsIChjaGFyKikmZXJyb3Ip
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBB
VVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBMb2NhbEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpyZW5kZXJpbmdDYWxsYmFjaywgdGhpcyB9OworICAg
IGVycm9yID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJv
cGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIDAsICZjYWxs
YmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJu
YWxVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgc3BlYWtlciBw
cm9jLCBlcnJvciA9ICVkIiwgZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
VUludDMyIHNpemUgPSBzaXplb2Yob3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24o
KSk7CisgICAgZXJyb3IgID0gQXVkaW9Vbml0R2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVk
aW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZv
dXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpLCAmc2l6ZSk7CisgICAgaWYgKGVy
cm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIGdl
dCBpbnB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciA9ICVkIiwgZXJyb3IpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgb3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKS5t
U2FtcGxlUmF0ZSA9IEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNhbXBsZVJhdGUoKTsK
KworICAgIGVycm9yID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9V
bml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZvdXRw
dXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpLCBzaXplb2Yob3V0cHV0RGVzY3JpcHRp
b24uc3RyZWFtRGVzY3JpcHRpb24oKSkpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVy
bmFsVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBzZXQgaW5wdXQgc3RyZWFtIGZvcm1h
dCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVy
cm9yID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShyZW1vdGVJT1VuaXQpOworICAgIGlmIChlcnJvcikg
eworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckludGVybmFsVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IEF1ZGlvVW5pdEluaXRpYWxp
emUoKSBmYWlsZWQsIGVycm9yID0gJWQiLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX291dHB1dERlc2NyaXB0aW9uID0gbWFrZVVuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24+KG91dHB1dERlc2NyaXB0aW9uKTsKKyAgICBtX3JlbW90ZUlPVW5pdCA9IHJlbW90
ZUlPVW5pdDsKK30KKworT1NTdGF0dXMgTG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdDo6cmVuZGVyaW5nQ2FsbGJhY2sodm9pZCogcHJvY2Vzc29yLCBBdWRpb1Vu
aXRSZW5kZXJBY3Rpb25GbGFncyogYWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiB0
aW1lU3RhbXAsIFVJbnQzMiwgVUludDMyIHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QqIGlv
RGF0YSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TG9jYWxBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckludGVybmFsVW5pdCo+KHByb2Nlc3NvciktPm1fcmVuZGVyQ2FsbGJhY2soc2Ft
cGxlQ291bnQsICppb0RhdGEsIHRpbWVTdGFtcC0+bVNhbXBsZVRpbWUsIHRpbWVTdGFtcC0+bUhv
c3RUaW1lLCAqYWN0aW9uRmxhZ3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJ
bnRlcm5hbFVuaXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29h
L0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NWQ0ZTgzZWU0OGFiMjNlZTFmMmVkODdhYmY2MzE3Njg3ZDMwODNjMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0LmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1
ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb1Rvb2xib3guaD4KKyNpbmNsdWRlIDxDb3JlQXVkaW8vQ29y
ZUF1ZGlvVHlwZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ7CitjbGFzcyBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb247
CisKK2NsYXNzIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdCgpID0gZGVmYXVsdDsKKworICAgIHVzaW5nIFJlbmRlckNhbGxiYWNrID0gRnVuY3Rpb248
T1NTdGF0dXMoc2l6ZV90IHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmLCB1aW50NjRfdCBz
YW1wbGVUaW1lLCBkb3VibGUgaG9zdFRpbWUsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJik+
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBVbmlxdWVSZWY8QXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ+IGNyZWF0ZUxvY2FsSW50ZXJuYWxVbml0KFJlbmRlckNh
bGxiYWNrJiYpOworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzdG9wKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXRyaWV2ZUZvcm1hdERlc2NyaXB0
aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
Kik+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9PdXRwdXREZXZpY2UoY29uc3Qg
U3RyaW5nJikgPSAwOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjg2NmI3YWNiNWNkMjk0MzM1YWUxMjdlMjUzMjhmYzMyMTUxZThlMGYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9j
b2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwCkBAIC0wLDAgKzEsMTU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
KworI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0OjpDcmVhdGVJbnRlcm5hbFVuaXRGdW5jdGlvbiYgZ2V0Q3JlYXRlSW50ZXJu
YWxVbml0RnVuY3Rpb24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OkNyZWF0ZUludGVybmFsVW5pdEZ1bmN0aW9uPiBmdW5j
dGlvbjsKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJVbml0OjpzZXRDcmVhdGVJbnRlcm5hbFVuaXRGdW5jdGlvbihDcmVhdGVJbnRl
cm5hbFVuaXRGdW5jdGlvbiYmIGZ1bmN0aW9uKQoreworICAgIGdldENyZWF0ZUludGVybmFsVW5p
dEZ1bmN0aW9uKCkgPSBXVEZNb3ZlKGZ1bmN0aW9uKTsKK30KKworc3RhdGljIFVuaXF1ZVJlZjxB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdD4gY3JlYXRlSW50ZXJuYWxV
bml0KEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCYgdW5pdCkKK3sKKyAgICBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6UmVuZGVyQ2FsbGJhY2sgY2Fs
bGJhY2sgPSBbJnVuaXRdKGF1dG8gc2FtcGxlQ291bnQsIGF1dG8mIGxpc3QsIGF1dG8gc2FtcGxl
VGltZSwgYXV0byBob3N0VGltZSwgYXV0byYgZmxhZ3MpIHsKKyAgICAgICAgcmV0dXJuIHVuaXQu
cmVuZGVyKHNhbXBsZUNvdW50LCBsaXN0LCBzYW1wbGVUaW1lLCBob3N0VGltZSwgZmxhZ3MpOwor
ICAgIH07CisKKyAgICBhdXRvJiBmdW5jdGlvbiA9IGdldENyZWF0ZUludGVybmFsVW5pdEZ1bmN0
aW9uKCk7CisgICAgaWYgKGZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gZnVuY3Rpb24oV1RGTW92
ZShjYWxsYmFjaykpOworCisgICAgcmV0dXJuIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
SW50ZXJuYWxVbml0OjpjcmVhdGVMb2NhbEludGVybmFsVW5pdChXVEZNb3ZlKGNhbGxiYWNrKSk7
Cit9CisKK0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCYgQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0OjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ+IHJlZ2lzdHJ5OworICAgIHJl
dHVybiByZWdpc3RyeTsKK30KKworQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQoKQorICAgIDogbV9pbnRlcm5hbFVuaXQo
Y3JlYXRlSW50ZXJuYWxVbml0KCp0aGlzKSkKK3sKK30KKworQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0Ojp+QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0KCkKK3sKKyAg
ICBzdG9wKCk7Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojpz
ZXRBdWRpb091dHB1dERldmljZShjb25zdCBTdHJpbmcmIGRldmljZUlEKQoreworICAgIG1faW50
ZXJuYWxVbml0LT5zZXRBdWRpb091dHB1dERldmljZShkZXZpY2VJRCk7Cit9CisKK3ZvaWQgQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjphZGRTb3VyY2UoUmVmPEF1ZGlvU2FtcGxl
RGF0YVNvdXJjZT4mJiBzb3VyY2UpCit7CisgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjphZGRTb3VyY2UiKTsKKworICAgIHsKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NvdXJjZXNMb2NrKTsKKyAgICAgICAgQVNTRVJU
KCFtX3NvdXJjZXMuY29udGFpbnMoc291cmNlLmdldCgpKSk7CisgICAgICAgIG1fc291cmNlcy5h
ZGQoV1RGTW92ZShzb3VyY2UpKTsKKyAgICAgICAgbV9zb3VyY2VzQ29weSA9IGNvcHlUb1ZlY3Rv
cihtX3NvdXJjZXMpOworICAgICAgICBtX3Nob3VsZFVwZGF0ZVJlbmRlclNvdXJjZXMgPSB0cnVl
OworICAgIH0KKyAgICBzdGFydCgpOworfQorCit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdDo6cmVtb3ZlU291cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYgc291cmNlKQor
eworICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
VW5pdDo6cmVtb3ZlU291cmNlIik7CisKKyAgICBib29sIHNob3VsZFN0b3AgPSBmYWxzZTsKKyAg
ICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zb3VyY2VzTG9jayk7CisgICAg
ICAgIG1fc291cmNlcy5yZW1vdmUoc291cmNlKTsKKyAgICAgICAgc2hvdWxkU3RvcCA9IG1fc291
cmNlcy5pc0VtcHR5KCk7CisgICAgICAgIG1fc291cmNlc0NvcHkgPSBjb3B5VG9WZWN0b3IobV9z
b3VyY2VzKTsKKyAgICAgICAgbV9zaG91bGRVcGRhdGVSZW5kZXJTb3VyY2VzID0gdHJ1ZTsKKyAg
ICB9CisgICAgaWYgKHNob3VsZFN0b3ApCisgICAgICAgIHN0b3AoKTsKK30KKwordm9pZCBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0xP
RyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnN0YXJ0Iik7Cisg
ICAgbV9pbnRlcm5hbFVuaXQtPnN0YXJ0KCk7Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJVbml0OjpzdG9wKCkKK3sKKyAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnN0b3AiKTsKKyAgICBtX2ludGVybmFsVW5p
dC0+c3RvcCgpOworfQorCit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6
cmV0cmlldmVGb3JtYXREZXNjcmlwdGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiopPiYmIGNhbGxiYWNrKQoreworICAgIG1faW50ZXJuYWxV
bml0LT5yZXRyaWV2ZUZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoY2FsbGJhY2spKTsKK30KKwor
T1NTdGF0dXMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW5kZXIoc2l6ZV90
IHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmIGlvRGF0YSwgdWludDY0X3Qgc2FtcGxlVGlt
ZSwgZG91YmxlIGhvc3RUaW1lLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgYWN0aW9uRmxh
Z3MpCit7CisgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHdlIGZvcmJpZCBoZWFwIGFs
bG9jYXRpb25zIHdoaWxlIGRvaW5nIHJlbmRlcmluZyBvbiB0aGUgYXVkaW8gdGhyZWFkLgorICAg
IEZvcmJpZE1hbGxvY1VzZUZvckN1cnJlbnRUaHJlYWRTY29wZSBmb3JiaWRNYWxsb2NVc2U7CisK
KyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9zaG91bGRVcGRhdGVSZW5k
ZXJTb3VyY2VzKSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gdHJ5SG9sZExvY2sobV9zb3VyY2Vz
TG9jayk7CisgICAgICAgIGlmICghbG9ja2VyKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICAgICAgbV9yZW5kZXJTb3VyY2VzID0gV1RGTW92ZShtX3NvdXJjZXNDb3B5KTsKKyAgICAgICAg
bV9zaG91bGRVcGRhdGVSZW5kZXJTb3VyY2VzID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1f
cmVuZGVyU291cmNlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgYWN0aW9uRmxhZ3MgPSBrQXVkaW9V
bml0UmVuZGVyQWN0aW9uX091dHB1dElzU2lsZW5jZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgLy8gTWl4IGFsbCBzb3VyY2VzLgorICAgIGJvb2wgaXNGaXJzdFNvdXJjZSA9IHRy
dWU7CisgICAgZm9yIChhdXRvJiBzb3VyY2UgOiBtX3JlbmRlclNvdXJjZXMpIHsKKyAgICAgICAg
c291cmNlLT5wdWxsU2FtcGxlcyhpb0RhdGEsIHNhbXBsZUNvdW50LCBzYW1wbGVUaW1lLCBob3N0
VGltZSwgaXNGaXJzdFNvdXJjZSA/IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6Q29weSA6IEF1ZGlv
U2FtcGxlRGF0YVNvdXJjZTo6TWl4KTsKKyAgICAgICAgaXNGaXJzdFNvdXJjZSA9IGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5p
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTRlZDgwZTBhMmExZTdlMGE0
ODVkNDZhZWJkMDg3MTE5MjczM2UxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
VW5pdC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckludGVybmFsVW5pdC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvU2FtcGxl
RGF0YVNvdXJjZTsKK2NsYXNzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDsKK2NsYXNzIENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbjsKK2NsYXNzIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50
ZXJuYWxVbml0OworCitjbGFzcyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQgewor
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlclVuaXQmIHNpbmdsZXRvbigpOworCisgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJVbml0KCk7CisgICAgfkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgpOwor
CisgICAgdXNpbmcgQ3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rpb24gPSBGdW5jdGlvbjxVbmlxdWVS
ZWY8QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ+KEF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpSZW5kZXJDYWxsYmFjayYmKT47CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0Q3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rpb24o
Q3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rpb24mJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBPU1N0
YXR1cyByZW5kZXIoc2l6ZV90IHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmLCB1aW50NjRf
dCBzYW1wbGVUaW1lLCBkb3VibGUgaG9zdFRpbWUsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdz
Jik7CisKKyAgICB2b2lkIHNldEF1ZGlvT3V0cHV0RGV2aWNlKGNvbnN0IFN0cmluZyYpOworCisg
ICAgdm9pZCBhZGRTb3VyY2UoUmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4mJik7CisgICAgdm9p
ZCByZW1vdmVTb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJik7CisKKyAgICB2b2lkIHJldHJp
ZXZlRm9ybWF0RGVzY3JpcHRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24qKT4mJik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzdGFydCgpOwor
ICAgIHZvaWQgc3RvcCgpOworCisgICAgdm9pZCBjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpOwor
CisgICAgSGFzaFNldDxSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPj4gbV9zb3VyY2VzOworICAg
IFZlY3RvcjxSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPj4gbV9zb3VyY2VzQ29weTsKKyAgICBW
ZWN0b3I8UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+IG1fcmVuZGVyU291cmNlczsKKyAgICBi
b29sIG1fc2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcyB7IGZhbHNlIH07CisgICAgTG9jayBtX3Nv
dXJjZXNMb2NrOworICAgIFVuaXF1ZVJlZjxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcklu
dGVybmFsVW5pdD4gbV9pbnRlcm5hbFVuaXQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyQ29jb2EuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTliODhhNDIw
MGMwYTJkMzU2ODM4ZWIwNDJlYmNkMjg4ODdiYjYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5oIgotCi0jaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdC5oIgotI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgotI2luY2x1
ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlv
TW9kdWxlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJDb2NvYTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSgpID0gZGVm
YXVsdDsKLQotQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6fkF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyQ29jb2EoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c3RhcnQoKQotewotICAgIGNsZWFyKCk7Ci0KLSAgICBp
ZiAoYXV0byogZm9ybWF0RGVzY3JpcHRpb24gPSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQ6OnNpbmdsZXRvbigpLmZvcm1hdERlc2NyaXB0aW9uKCkpCi0gICAgICAgIG1fb3V0cHV0
RGVzY3JpcHRpb24gPSBtYWtlVW5pcXVlPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4oKmZvcm1h
dERlc2NyaXB0aW9uKTsKLX0KLQotdm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNv
Y29hOjpzdG9wKCkKLXsKLSAgICBpZiAobV9kYXRhU291cmNlKQotICAgICAgICBBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRvbigpLnJlbW92ZVNvdXJjZSgqbV9kYXRh
U291cmNlKTsKLX0KLQotdm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpj
bGVhcigpCi17Ci0gICAgc3RvcCgpOwotCi0gICAgbV9kYXRhU291cmNlID0gbnVsbHB0cjsKLSAg
ICBtX291dHB1dERlc2NyaXB0aW9uID0geyB9OwotfQotCi12b2lkIEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyQ29jb2E6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCi17Ci0gICAgQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6OnNldFZvbHVtZSh2b2x1bWUpOwotICAgIGlmIChtX2Rh
dGFTb3VyY2UpCi0gICAgICAgIG1fZGF0YVNvdXJjZS0+c2V0Vm9sdW1lKHZvbHVtZSk7Ci19Ci0K
LXZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c2V0QXVkaW9PdXRwdXRE
ZXZpY2UoY29uc3QgU3RyaW5nJiBkZXZpY2VJZCkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGNyZWF0ZSBhIHVuaXQgZm9yIG91cnNlbHZlcyBoZXJlIG9yIHVzZSB0aGUgZGVmYXVsdCB1bml0
IGlmIGRldmljZUlkIGlzIG1hdGNoaW5nLgotICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyVW5pdDo6c2luZ2xldG9uKCkuc2V0QXVkaW9PdXRwdXREZXZpY2UoZGV2aWNlSWQpOwotICAg
IG1fc2hvdWxkUmVzZXQgPSB0cnVlOwotfQotCi1zdGF0aWMgdW5zaWduZWQgcG9sbFNhbXBsZXND
b3VudCgpCi17Ci0jaWYgVVNFKExJQldFQlJUQykKLSAgICByZXR1cm4gTGliV2ViUlRDQXVkaW9N
b2R1bGU6OlBvbGxTYW1wbGVzQ291bnQgKyAxOwotI2Vsc2UKLSAgICByZXR1cm4gMjsKLSNlbmRp
ZgotfQotCi12b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnB1c2hTYW1w
bGVzKGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEm
IGF1ZGlvRGF0YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHNp
emVfdCBzYW1wbGVDb3VudCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBB
U1NFUlQoZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxhdGZvcm1E
ZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSk7Ci0gICAgaWYgKCFtX2RhdGFTb3Vy
Y2UgfHwgbV9zaG91bGRSZXNldCB8fCAhbV9kYXRhU291cmNlLT5pbnB1dERlc2NyaXB0aW9uKCkg
fHwgKm1fZGF0YVNvdXJjZS0+aW5wdXREZXNjcmlwdGlvbigpICE9IGRlc2NyaXB0aW9uKSB7Ci0g
ICAgICAgIERpc2FibGVNYWxsb2NSZXN0cmljdGlvbnNGb3JDdXJyZW50VGhyZWFkU2NvcGUgc2Nv
cGU7Ci0KLSAgICAgICAgLy8gRklYTUU6IEZvciBub24gbGlid2VicnRjIHNvdXJjZXMsIHdlIGNh
biBwcm9iYWJseSByZWR1Y2UgcG9sbCBzYW1wbGVzIGNvdW50IHRvIDIuCi0gICAgICAgIAotICAg
ICAgICBhdXRvIGRhdGFTb3VyY2UgPSBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OmNyZWF0ZShkZXNj
cmlwdGlvbi5zYW1wbGVSYXRlKCkgKiAwLjUsICp0aGlzLCBwb2xsU2FtcGxlc0NvdW50KCkpOwot
Ci0gICAgICAgIGlmIChkYXRhU291cmNlLT5zZXRJbnB1dEZvcm1hdCh0b0NBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbihkZXNjcmlwdGlvbikpKSB7Ci0gICAgICAgICAgICBFUlJPUl9MT0coTE9HSURF
TlRJRklFUiwgIlVuYWJsZSB0byBzZXQgdGhlIGlucHV0IGZvcm1hdCBvZiBkYXRhIHNvdXJjZSIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX291dHB1
dERlc2NyaXB0aW9uIHx8IGRhdGFTb3VyY2UtPnNldE91dHB1dEZvcm1hdCgqbV9vdXRwdXREZXNj
cmlwdGlvbikpIHsKLSAgICAgICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAiVW5hYmxl
IHRvIHNldCB0aGUgb3V0cHV0IGZvcm1hdCBvZiBkYXRhIHNvdXJjZSIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgb2xkU291cmNlID0gbV9kYXRhU291cmNlLCBuZXdT
b3VyY2UgPSBkYXRhU291cmNlXSgpIG11dGFibGUgewotICAgICAgICAgICAgaWYgKCF3ZWFrVGhp
cykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChvbGRTb3VyY2Up
Ci0gICAgICAgICAgICAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5n
bGV0b24oKS5yZW1vdmVTb3VyY2UoKm9sZFNvdXJjZSk7Ci0KLSAgICAgICAgICAgIG5ld1NvdXJj
ZS0+c2V0Vm9sdW1lKHZvbHVtZSgpKTsKLSAgICAgICAgICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdDo6c2luZ2xldG9uKCkuYWRkU291cmNlKFdURk1vdmUobmV3U291cmNlKSk7
Ci0gICAgICAgIH0pOwotICAgICAgICBtX2RhdGFTb3VyY2UgPSBXVEZNb3ZlKGRhdGFTb3VyY2Up
OwotICAgICAgICBtX3Nob3VsZFJlc2V0ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9kYXRhU291
cmNlLT5wdXNoU2FtcGxlcyhzYW1wbGVUaW1lLCBhdWRpb0RhdGEsIHNhbXBsZUNvdW50KTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9B
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTgzOTY3NGJkN2QwNDkzZWRjYzYxOTJj
MGIxOTJhNGY3NDUwOGUyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQot
Ci0jaW5jbHVkZSAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLQotI2luY2x1ZGUgPEF1ZGlvVG9v
bGJveC9BdWRpb1Rvb2xib3guaD4KLSNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb1NhbXBsZURhdGFTb3VyY2U7
Ci1jbGFzcyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q7Ci1jbGFzcyBDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb247Ci0KLWNsYXNzIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EgOiBwdWJs
aWMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLCBXZWFrUHRyRmFjdG9yeUluaXRpYWxp
emF0aW9uOjpFYWdlcj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EoKTsKLSAgICB+QXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSgpOwotCi1wcml2YXRlOgotICAgIC8vIEF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyCi0gICAgdm9pZCBwdXNoU2FtcGxlcyhjb25zdCBXVEY6Ok1l
ZGlhVGltZSYsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiwgY29uc3QgQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiYsIHNpemVfdCkgZmluYWw7Ci0gICAgdm9pZCBzdGFydCgpIGZpbmFsOwotICAgIHZv
aWQgc3RvcCgpIGZpbmFsOwotICAgIHZvaWQgY2xlYXIoKSBmaW5hbDsKLSAgICB2b2lkIHNldFZv
bHVtZShmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCBzZXRBdWRpb091dHB1dERldmljZShjb25zdCBT
dHJpbmcmKSBmaW5hbDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24+IG1fb3V0cHV0RGVzY3JpcHRpb247Ci0gICAgUmVmUHRyPEF1ZGlvU2FtcGxlRGF0YVNv
dXJjZT4gbV9kYXRhU291cmNlOwotICAgIGJvb2wgbV9zaG91bGRSZXNldCB7IGZhbHNlIH07Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYTgyMDJmNDk1MDBiYzUxMzA1YzVjMWMyMTU5OWQxZTM4YWE5ODAwMy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJVbml0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyVW5pdC5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIkF1ZGlv
U2FtcGxlRGF0YVNvdXJjZS5oIgotI2luY2x1ZGUgIkF1ZGlvU2Vzc2lvbi5oIgotI2luY2x1ZGUg
IkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotI2lu
Y2x1ZGUgPHBhbC9zcGkvY29jb2EvQXVkaW9Ub29sYm94U1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0jaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5oIgotI2luY2x1ZGUgIkNvcmVBdWRp
b0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHBhbC9jZi9Db3Jl
TWVkaWFTb2Z0TGluay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyVW5pdCYgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojpz
aW5nbGV0b24oKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQ+IHJlZ2lzdHJ5OwotICAgIHJldHVybiByZWdpc3RyeTsKLX0KLQot
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojp+QXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0KCkKLXsKLSAgICBzdG9wKCk7Ci19Ci0KLXZvaWQgQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0OjpzZXRBdWRpb091dHB1dERldmljZShjb25zdCBTdHJpbmcmIGRl
dmljZUlEKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBhdXRvIGRldmljZSA9IENvcmVBdWRp
b0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5jb3JlQXVkaW9EZXZpY2VXaXRoVUlE
KGRldmljZUlEKTsKLQotICAgIGlmICghZGV2aWNlICYmICFkZXZpY2VJRC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJVbml0OjpzZXRBdWRpb091dHB1dERldmljZUlkIC0gZGlkIG5vdCBmaW5kIGRldmljZSIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBhdWRpb1VuaXREZXZpY2VJRCA9IGRl
dmljZSA/IGRldmljZS0+ZGV2aWNlSUQoKSA6IDA7Ci0gICAgaWYgKG1fZGV2aWNlSUQgPT0gYXVk
aW9Vbml0RGV2aWNlSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgc2hvdWxkUmVzdGFy
dCA9IG1faXNTdGFydGVkOwotICAgIGlmIChtX2lzU3RhcnRlZCkKLSAgICAgICAgc3RvcCgpOwot
Ci0gICAgbV9kZXZpY2VJRCA9IGF1ZGlvVW5pdERldmljZUlEOwotCi0gICAgaWYgKHNob3VsZFJl
c3RhcnQpCi0gICAgICAgIHN0YXJ0KCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZXZpY2VJ
RCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6
OmFkZFNvdXJjZShSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPiYmIHNvdXJjZSkKLXsKLSAgICBS
RUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmFk
ZFNvdXJjZSIpOwotCi0gICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc291
cmNlc0xvY2spOwotICAgICAgICBBU1NFUlQoIW1fc291cmNlcy5jb250YWlucyhzb3VyY2UuZ2V0
KCkpKTsKLSAgICAgICAgbV9zb3VyY2VzLmFkZChXVEZNb3ZlKHNvdXJjZSkpOwotICAgICAgICBt
X3NvdXJjZXNDb3B5ID0gY29weVRvVmVjdG9yKG1fc291cmNlcyk7Ci0gICAgICAgIG1fc2hvdWxk
VXBkYXRlUmVuZGVyU291cmNlcyA9IHRydWU7Ci0gICAgfQotICAgIHN0YXJ0KCk7Ci19Ci0KLXZv
aWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW1vdmVTb3VyY2UoQXVkaW9T
YW1wbGVEYXRhU291cmNlJiBzb3VyY2UpCi17Ci0gICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW1vdmVTb3VyY2UiKTsKLQotICAgIGJv
b2wgc2hvdWxkU3RvcCA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX3NvdXJjZXNMb2NrKTsKLSAgICAgICAgbV9zb3VyY2VzLnJlbW92ZShzb3VyY2UpOwot
ICAgICAgICBzaG91bGRTdG9wID0gbV9zb3VyY2VzLmlzRW1wdHkoKTsKLSAgICAgICAgbV9zb3Vy
Y2VzQ29weSA9IGNvcHlUb1ZlY3RvcihtX3NvdXJjZXMpOwotICAgICAgICBtX3Nob3VsZFVwZGF0
ZVJlbmRlclNvdXJjZXMgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoc2hvdWxkU3RvcCkKLSAgICAg
ICAgc3RvcCgpOwotfQotCi12b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6
c3RhcnQoKQotewotICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdDo6c3RhcnQiKTsKLQotICAgIGlmIChtX2lzU3RhcnRlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKTsKLSAgICBpZiAoIW1fcmVt
b3RlSU9Vbml0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBlcnJvciA9IEF1ZGlv
T3V0cHV0VW5pdFN0YXJ0KG1fcmVtb3RlSU9Vbml0KSkgewotICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnN0YXJ0IEF1
ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKLSAgICAgICAg
QXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9yZW1vdGVJT1VuaXQpOwotICAgICAgICBt
X3JlbW90ZUlPVW5pdCA9IG51bGxwdHI7Ci0gICAgfQotICAgIG1faXNTdGFydGVkID0gdHJ1ZTsK
LSAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQgaXMgc3RhcnRlZCIpOwotfQotCi12b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
VW5pdDo6c3RvcCgpCi17Ci0gICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0OjpzdG9wIik7Ci0KLSAgICBpZiAoIW1fcmVtb3RlSU9Vbml0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pc1N0YXJ0ZWQpIHsKLSAgICAgICAgQXVkaW9P
dXRwdXRVbml0U3RvcChtX3JlbW90ZUlPVW5pdCk7Ci0gICAgICAgIG1faXNTdGFydGVkID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9yZW1vdGVJ
T1VuaXQpOwotICAgIG1fcmVtb3RlSU9Vbml0ID0gbnVsbHB0cjsKLX0KLQotQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmZvcm1hdERl
c2NyaXB0aW9uKCkKLXsKLSAgICBjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpOwotICAgIHJldHVy
biBtX291dHB1dERlc2NyaXB0aW9uLmdldCgpOwotfQotCi12b2lkIEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKQotewotICAgIEFTU0VS
VCghbV9yZW1vdGVJT1VuaXQgfHwgbV9vdXRwdXREZXNjcmlwdGlvbik7Ci0gICAgaWYgKG1fcmVt
b3RlSU9Vbml0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24gb3V0cHV0RGVzY3JpcHRpb247Ci0gICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZSByZW1vdGVJ
T1VuaXQgeyBudWxscHRyIH07Ci0KLSAgICBBdWRpb0NvbXBvbmVudERlc2NyaXB0aW9uIGlvVW5p
dERlc2NyaXB0aW9uIHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCAwLCBrQXVkaW9Vbml0TWFudWZh
Y3R1cmVyX0FwcGxlLCAwLCAwIH07Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpb1Vu
aXREZXNjcmlwdGlvbi5jb21wb25lbnRTdWJUeXBlID0ga0F1ZGlvVW5pdFN1YlR5cGVfUmVtb3Rl
SU87Ci0jZWxzZQotICAgIGlvVW5pdERlc2NyaXB0aW9uLmNvbXBvbmVudFN1YlR5cGUgPSBrQXVk
aW9Vbml0U3ViVHlwZV9EZWZhdWx0T3V0cHV0OwotI2VuZGlmCi0KLSAgICBBdWRpb0NvbXBvbmVu
dCBpb0NvbXBvbmVudCA9IEF1ZGlvQ29tcG9uZW50RmluZE5leHQobnVsbHB0ciwgJmlvVW5pdERl
c2NyaXB0aW9uKTsKLSAgICBBU1NFUlQoaW9Db21wb25lbnQpOwotICAgIGlmICghaW9Db21wb25l
bnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIGZpbmQgcmVtb3Rl
IElPIHVuaXQgY29tcG9uZW50Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRv
IGVycm9yID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhpb0NvbXBvbmVudCwgJnJlbW90ZUlP
VW5pdCk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJU
QywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVu
YWJsZSB0byBvcGVuIHZwaW8gdW5pdCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgVUludDMyIHBhcmFt
ID0gMTsKLSAgICBlcnJvciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1
ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LCAw
LCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6
OmNyZWF0ZUF1ZGlvVW5pdCB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBvdXRwdXQsIGVycm9y
ID0gJWQiLCBlcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKE1BQykKLSAgICBpZiAobV9kZXZpY2VJRCkgewotICAgICAgICBlcnJvciA9IEF1ZGlv
VW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0N1
cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIDAsICZtX2RldmljZUlELCBzaXpl
b2YobV9kZXZpY2VJRCkpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6
Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBzZXQgdW5pdCBkZXZpY2UgSUQgJWQsIGVycm9yICVk
ICglLjRzKSIsIChpbnQpbV9kZXZpY2VJRCwgKGludCllcnJvciwgKGNoYXIqKSZlcnJvcik7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIEFVUmVu
ZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJhY2sgPSB7IHJlbmRlcmluZ0NhbGxiYWNrLCB0aGlzIH07
Ci0gICAgZXJyb3IgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShyZW1vdGVJT1VuaXQsIGtBdWRpb1Vu
aXRQcm9wZXJ0eV9TZXRSZW5kZXJDYWxsYmFjaywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgMCwg
JmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2spKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJV
bml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgc3BlYWtlciBwcm9j
LCBlcnJvciA9ICVkIiwgZXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVUlu
dDMyIHNpemUgPSBzaXplb2Yob3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSk7
Ci0gICAgZXJyb3IgID0gQXVkaW9Vbml0R2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9V
bml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZvdXRw
dXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpLCAmc2l6ZSk7Ci0gICAgaWYgKGVycm9y
KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBnZXQgaW5wdXQgc3Ry
ZWFtIGZvcm1hdCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURlc2NyaXB0aW9uKCkubVNhbXBsZVJhdGUg
PSBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zYW1wbGVSYXRlKCk7Ci0KLSAgICBlcnJv
ciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5
X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAmb3V0cHV0RGVzY3JpcHRp
b24uc3RyZWFtRGVzY3JpcHRpb24oKSwgc2l6ZW9mKG91dHB1dERlc2NyaXB0aW9uLnN0cmVhbURl
c2NyaXB0aW9uKCkpKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpjcmVhdGVBdWRp
b1VuaXQgdW5hYmxlIHRvIHNldCBpbnB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciA9ICVkIiwgZXJy
b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZXJyb3IgPSBBdWRpb1VuaXRJbml0
aWFsaXplKHJlbW90ZUlPVW5pdCk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3Jl
YXRlQXVkaW9Vbml0IEF1ZGlvVW5pdEluaXRpYWxpemUoKSBmYWlsZWQsIGVycm9yID0gJWQiLCBl
cnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX291dHB1dERlc2NyaXB0aW9u
ID0gbWFrZVVuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KG91dHB1dERlc2NyaXB0aW9u
KTsKLSAgICBtX3JlbW90ZUlPVW5pdCA9IHJlbW90ZUlPVW5pdDsKLX0KLQotT1NTdGF0dXMgQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW5kZXIoVUludDMyIHNhbXBsZUNvdW50
LCBBdWRpb0J1ZmZlckxpc3QmIGlvRGF0YSwgVUludDMyIC8qaW5CdXNOdW1iZXIqLywgY29uc3Qg
QXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmIGFj
dGlvbkZsYWdzKQotewotICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB3ZSBmb3JiaWQg
aGVhcCBhbGxvY2F0aW9ucyB3aGlsZSBkb2luZyByZW5kZXJpbmcgb24gdGhlIGF1ZGlvIHRocmVh
ZC4KLSAgICBGb3JiaWRNYWxsb2NVc2VGb3JDdXJyZW50VGhyZWFkU2NvcGUgZm9yYmlkTWFsbG9j
VXNlOwotCi0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fc2hvdWxkVXBk
YXRlUmVuZGVyU291cmNlcykgewotICAgICAgICBhdXRvIGxvY2tlciA9IHRyeUhvbGRMb2NrKG1f
c291cmNlc0xvY2spOwotICAgICAgICBpZiAoIWxvY2tlcikKLSAgICAgICAgICAgIHJldHVybiAw
OwotCi0gICAgICAgIG1fcmVuZGVyU291cmNlcyA9IFdURk1vdmUobV9zb3VyY2VzQ29weSk7Ci0g
ICAgICAgIG1fc2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcyA9IGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChtX3JlbmRlclNvdXJjZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChtX291dHB1dERl
c2NyaXB0aW9uKQotICAgICAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGlv
RGF0YSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzYW1wbGVDb3VudCAqIG1fb3V0cHV0RGVzY3JpcHRp
b24tPmJ5dGVzUGVyRnJhbWUoKSkpOwotICAgICAgICBhY3Rpb25GbGFncyA9IGtBdWRpb1VuaXRS
ZW5kZXJBY3Rpb25fT3V0cHV0SXNTaWxlbmNlOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICAvLyBNaXggYWxsIHNvdXJjZXMuCi0gICAgYm9vbCBpc0ZpcnN0U291cmNlID0gdHJ1ZTsK
LSAgICBmb3IgKGF1dG8mIHNvdXJjZSA6IG1fcmVuZGVyU291cmNlcykgewotICAgICAgICBzb3Vy
Y2UtPnB1bGxTYW1wbGVzKGlvRGF0YSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzYW1wbGVDb3VudCks
IHRpbWVTdGFtcC5tU2FtcGxlVGltZSwgdGltZVN0YW1wLm1Ib3N0VGltZSwgaXNGaXJzdFNvdXJj
ZSA/IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6Q29weSA6IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6
TWl4KTsKLSAgICAgICAgaXNGaXJzdFNvdXJjZSA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
MDsKLX0KLQotT1NTdGF0dXMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW5k
ZXJpbmdDYWxsYmFjayh2b2lkKiBwcm9jZXNzb3IsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdz
KiBhY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIHRpbWVTdGFtcCwgVUludDMyIGlu
QnVzTnVtYmVyLCBVSW50MzIgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQot
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQqPihwcm9jZXNzb3IpLT5yZW5kZXIoc2FtcGxlQ291bnQsICppb0RhdGEsIGluQnVzTnVtYmVy
LCAqdGltZVN0YW1wLCAqYWN0aW9uRmxhZ3MpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyVW5pdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkNGUwNjNmZmZhMmQ0NzEzYzczYjU4ZDY3MjgwYmU3YWJlYzA5ZjNjLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVk
aW9Ub29sYm94Lmg+Ci0jaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+Ci0jaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb1NhbXBs
ZURhdGFTb3VyY2U7Ci1jbGFzcyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q7Ci1jbGFzcyBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb247Ci0KLWNsYXNzIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
VW5pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
VW5pdCYgc2luZ2xldG9uKCk7Ci0KLSAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQoKSA9IGRlZmF1bHQ7Ci0gICAgfkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgp
OwotCi0gICAgc3RhdGljIE9TU3RhdHVzIHJlbmRlcmluZ0NhbGxiYWNrKHZvaWQqLCBBdWRpb1Vu
aXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyIGluQnVz
TnVtYmVyLCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCopOwotCi0gICAg
dm9pZCBzdGFydCgpOwotICAgIHZvaWQgc3RvcCgpOwotCi0gICAgdm9pZCBzZXRBdWRpb091dHB1
dERldmljZShjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgYWRkU291cmNlKFJlZjxBdWRpb1Nh
bXBsZURhdGFTb3VyY2U+JiYpOwotICAgIHZvaWQgcmVtb3ZlU291cmNlKEF1ZGlvU2FtcGxlRGF0
YVNvdXJjZSYpOwotCi0gICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKiBmb3JtYXREZXNjcmlw
dGlvbigpOwotCi1wcml2YXRlOgotICAgIHZvaWQgY3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKTsK
LSAgICBPU1N0YXR1cyByZW5kZXIoVUludDMyIHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3Qm
LCBVSW50MzIgaW5CdXNOdW1iZXIsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgQXVkaW9Vbml0UmVu
ZGVyQWN0aW9uRmxhZ3MmKTsKLQotICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2UgbV9yZW1vdGVJ
T1VuaXQgeyBudWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbj4gbV9vdXRwdXREZXNjcmlwdGlvbjsKLSAgICBIYXNoU2V0PFJlZjxBdWRpb1NhbXBs
ZURhdGFTb3VyY2U+PiBtX3NvdXJjZXM7Ci0gICAgVmVjdG9yPFJlZjxBdWRpb1NhbXBsZURhdGFT
b3VyY2U+PiBtX3NvdXJjZXNDb3B5OwotICAgIFZlY3RvcjxSZWY8QXVkaW9TYW1wbGVEYXRhU291
cmNlPj4gbV9yZW5kZXJTb3VyY2VzOwotICAgIGJvb2wgbV9zaG91bGRVcGRhdGVSZW5kZXJTb3Vy
Y2VzIHsgZmFsc2UgfTsKLSAgICBMb2NrIG1fc291cmNlc0xvY2s7Ci0gICAgYm9vbCBtX2lzU3Rh
cnRlZCB7IGZhbHNlIH07Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHVpbnQzMl90IG1fZGV2aWNl
SUQgeyAwIH07Ci0jZW5kaWYKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZUF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy93ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuY3BwCmluZGV4IGE4
ZjlhODgyZDRmMWZhZDMwNjg0ZDU2MGM3YTNlM2NhZmFiNDdhZWIuLmVlYmM4YzcyMjBjMDliNTg5
NTU3MTAxNjM2NmZkY2M1ZGQ3NzdiOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXIuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyOjp+UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIoKQogCiB2
b2lkIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyOjpzdGFydCgpCiB7Ci0gICAg
bV9yZW5kZXJlci0+c3RhcnQoKTsKKyAgICBtX3JlbmRlcmVyLT5zdGFydChbXSB7IH0pOwogfQog
CiB2b2lkIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyOjpzdG9wKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0F1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRj
L0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmNwcAppbmRleCA2YjliMDY0YmRiZGVjYjNm
NDA4ZDY1OWVhNDU0MTUyN2JkYjY3ZDhmLi4wNzhhMDJmZDkzNjc1ZGYzMjQ0M2VhNjQyOTE5YTU5
ZTFiM2NiOGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0
Yy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS93ZWJydGMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuY3BwCkBA
IC02NCwxMCArNjQsMTEgQEAgdm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcjo6aW5p
dGlhbGl6ZSgpCiAgICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlck1hbmFnZXI6OkNyZWF0ZVJlbmRlcmVyIHsgbV9pZGVudGlm
aWVyIH0sIDApOwogfQogCi12b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyOjpzdGFy
dCgpCit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyOjpzdGFydChDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCiB7CiAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOwog
ICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXI6OlN0YXJ0IHsgfSwgbV9pZGVudGlmaWVyKTsKKyAgICBjYWxsYmFjaygpOwog
fQogCiB2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyOjpzdG9wKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0F1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9BdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5oCmluZGV4IDk5ZTQ5Yzc3ODA4ZTIwYzQ3MjI4NmJk
MmQxYWVkMDg2OTcyMmE5YzUuLjcwODY5YTFmNWE0ZDlmMTM4OTY4NWIyOGY2OGI3NDRlYjBlOGEw
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0F1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS93ZWJydGMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuaApAQCAtNTQsNyArNTQs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcmFnZUNoYW5nZWQoU2hhcmVkTWVtb3J5KiwgY29u
c3QgV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQsIHNpemVfdCBmcmFt
ZUNvdW50KTsKIAogICAgIC8vIFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
Ci0gICAgdm9pZCBzdGFydCgpIGZpbmFsOworICAgIHZvaWQgc3RhcnQoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKSBmaW5hbDsKICAgICB2b2lkIHN0b3AoKSBmaW5hbDsKICAgICB2b2lkIGNs
ZWFyKCkgZmluYWw7CiAgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIGZpbmFsOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428361</attachid>
            <date>2021-05-12 01:23:17 -0700</date>
            <delta_ts>2021-05-12 01:57:45 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-225601-20210512102315.patch</filename>
            <type>text/plain</type>
            <size>74251</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MjU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGZiOWQyMThlM2NhM2Zi
YzQyYTZjMDEyY2M3NGI2Zjg0MGY1MWViZC4uM2UxNDdkOWI1YzIzMjA5NmQ2MDg2OTU2Mjc5NTBm
MjZiMGNiN2NmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTA1LTEyICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgYW4gaW50
ZXJuYWwgdW5pdCB0byByZW5kZXIgYXVkaW8gTWVkaWFTdHJlYW1UcmFjayhzKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NjAxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgorCisgICAgICAgIE1vdmUgZmlsZXMgZnJvbSBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMgdG8gcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2Egc2luY2Ug
dGhleSBhcmUgdXNlZCBpbiBib3RoIGlPUyBhbmQgbWFjT1MuCisgICAgICAgIE1vdmUgQXVkaW8g
VW5pdCBmdW5jdGlvbmFsaXR5IG91dCBvZiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQuCisgICAgICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCBpcyByZXNwb25z
aWJsZSB0byBtYW5hZ2Ugc291cmNlcyBhbmQgZG8gdGhlIG1peGluZy4KKyAgICAgICAgVG8gYWN0
dWFsbHkgcmVuZGVyIGF1ZGlvLCBpdCB3aWxsIHVzZSBhbiBJbnRlcm5hbFVuaXQsIHdoaWNoIGlz
IGN1cnJlbnRseSBkb25lIGluIHByb2Nlc3MuCisKKyAgICAgICAgQSBmdXR1cmUgd29yayB3aWxs
IGFkZCBzdXBwb3J0IGZvciBhIHJlbW90ZSBJbnRlcm5hbFVuaXQsIHRoYXQgd291bGQgcnVuIG9u
IEdQVVByb2Nlc3MuCisgICAgICAgIFRvIHByZXBhcmUgZm9yIHRoYXQsIGEgY2FsbGJhY2sgYWxs
b3dzIGN1c3RvbWl6aW5nIHRoZSBJbnRlcm5hbCBVbml0IGNyZWF0aW9uLgorICAgICAgICBXZSBh
bHNvIGNoYW5nZSByZW5kZXJlciBzdGFydCB0byBiZSBhc3luY2hyb25vdXMsIHNpbmNlIGl0IHJl
cXVpcmVzIGZldGNoaW5nIHRoZSBhdWRpbyBkZXNjcmlwdGlvbiBmcm9tIEdQVVByb2Nlc3MuCisK
KyAgICAgICAgTm8gY2hhbmdlIG9mIGJlaGF2aW9yLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Rz
LgorCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVk
aW9TYW1wbGVCdWZmZXJMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9BdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OnN0YXJ0UmVuZGVyZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
Q29jb2EuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c3RhcnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyQ29jb2EuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcC4KKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0
OjpjcmVhdGVMb2NhbEludGVybmFsVW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpMb2NhbEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OnJldHJpZXZlRm9ybWF0RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckludGVybmFsVW5pdDo6c2V0QXVkaW9PdXRwdXREZXZpY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6TG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6c3Rh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdDo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50
ZXJuYWxVbml0OjpyZW5kZXJpbmdDYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmguCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpnZXRDcmVhdGVJbnRlcm5hbFVuaXRGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNldENy
ZWF0ZUludGVybmFsVW5pdEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludGVy
bmFsVW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQ6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlclVuaXQ6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6On5BdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzZXRBdWRpb091dHB1dERldmljZSk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmFkZFNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnJl
bW92ZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlclVuaXQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdDo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQ6OnJldHJpZXZlRm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpyZW5kZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oLgorCiAyMDIxLTA1
LTExICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBFbnVtZXJh
dGUgQVZDYXB0dXJlRGV2aWNlIGxpc3QgaW4gYSBiYWNrZ3JvdW5kIHRocmVhZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCBjOTcyZmQ2MzczZGYyNmUyMmNhYzFlMGI2ZDA3YmIwOGY2Nzc4N2M1Li4xMjg4MzQ4NzU2ZWEx
OWQwNjliMDMxNzc2OGMyNjkzYTVkZGU0ZDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisy
MDIxLTA1LTEyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBJ
bnRyb2R1Y2UgYW4gaW50ZXJuYWwgdW5pdCB0byByZW5kZXIgYXVkaW8gTWVkaWFTdHJlYW1UcmFj
ayhzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1
NjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgorCisgICAgICAgIFVwZGF0
ZSBhY2NvcmRpbmcgbmV3IFdlYkNvcmUgQVBJLgorCisgICAgICAgICogR1BVUHJvY2Vzcy93ZWJy
dGMvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcjo6c3RhcnQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyOjpzdGFy
dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0F1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyLmg6CisKIDIwMjEtMDUtMDkgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgogCiAgICAgICAgIEhhdmUgSVBDOjpTZW1hcGhvcmU6OndhaXQgcmV0dXJuIGEgc3RhdGUg
Ym9vbGVhbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYTc1ZGNjN2VhYWY5ZGE5MDgxYmJl
Nzk3YmM0OTg0Yjc4Njc5NWVmZC4uOGJkMDAyMjk4ZDZkZGYwYzVlNjc2ODNhNDJkMDcxM2FjMTE1
NzExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC01MjYsMTQgKzUyNiwxNSBAQCBwbGF0
Zm9ybS9tZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXJQcml2YXRlQVZGSW1wbC5jcHAKIHBsYXRm
b3JtL21lZGlhcmVjb3JkZXIvY29jb2EvQXVkaW9TYW1wbGVCdWZmZXJDb21wcmVzc29yLm1tCiBw
bGF0Zm9ybS9tZWRpYXJlY29yZGVyL2NvY29hL01lZGlhUmVjb3JkZXJQcml2YXRlV3JpdGVyQ29j
b2EubW0KIHBsYXRmb3JtL21lZGlhcmVjb3JkZXIvY29jb2EvVmlkZW9TYW1wbGVCdWZmZXJDb21w
cmVzc29yLm1tCitwbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckNvY29hLmNwcAorcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQuY3BwCitwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwCiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlLm1tCiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9pb3MvQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5tbSBAbm8t
dW5pZnkKIHBsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9T
Lm1tIEBuby11bmlmeQogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1By
b3ZpZGVyQ29jb2EuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNl
TWFuYWdlci5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2Fw
dHVyZVNvdXJjZS5tbSBAbm8tdW5pZnkKLXBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAotcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5jcHAKIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNwcAogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0NvcmVBdWRpb0NhcHR1cmVEZXZpY2UuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29y
ZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjU4Yjk4NmM3NjRiM2Q0MWY2MWYx
NDAzMTE5Mjc2YmI0Yjg5YTY0MC4uYTg0OTcxN2U3Y2JjNmQzZWYyYjhmNWRlZWJkZTI2NTZmZTgz
NmFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTE3NSw2ICsxMTc1LDggQEAKIAkJNDFCODc3NjIyM0RFMTA0NTAwMzYzOEI4
IC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUI4Nzc2MDIzREUxMDQyMDAzNjM4QjggLyogUmVh
bHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk0MUJCQTg2NjI1N0UzNzNCMDBBQzdGNkQgLyogU0ZyYW1l
VXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
MjA5RTI0MjU3QTJGQkIwMDEyMEFDQSAvKiBTRnJhbWVVdGlscy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxQkYyMDQ5MjJCQTdCRTgwMDA0Rjgx
MiAvKiBSZWFsdGltZVZpZGVvU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MUJGMjA0MDIyQjk0NzE2MDAwNEY4MTIgLyogUmVhbHRpbWVWaWRl
b1NvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTQxQzNCOEExMjY0OUIxRTAwMDRFRDRERSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckludGVybmFsVW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFDM0I4OUYyNjQ5QjFCNzAwNEVENERFIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVySW50ZXJuYWxVbml0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNDFDM0I4QTIyNjQ5QjFFNTAwNEVENERFIC8qIEF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDFDM0I4OUIyNjQ5QjFCNjAwNEVENERFIC8qIEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyVW5pdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTQxQzc2MEIxMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFDNzYwQjAw
RURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFDQjg0MDEyNUNBQjdCMzAwMTBFMkIxIC8qIFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUNCODQwMDI1Q0FCN0IwMDAxMEUyQjEgLyogUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlQ29jb2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk0MUNCODQwMjI1Q0FCODFFMDAxMEUyQjEgLyogUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0REODMzQTFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTc2OTYsOCArNzY5OCw2IEBACiAJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAv
KiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MTAyNEZDODIzQ0YyNTRGMDBGREY5OEUgLyogU2FtcGxlQnVmZmVy
RGlzcGxheUxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMDc5MDhBMUZDM0U0RjIw
MDYxQjI3QSAvKiBDbGllbnRPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2xpZW50T3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxMDg3RjAx
MjQ4RTU5QzgwMDY4MEU5MSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJVbml0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDEwODdG
MDMyNDhFNTlDOTAwNjgwRTkxIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlclVuaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwOTM4MjgyMzQ3
Nzk5QTAwOTQyOEJBIC8qIEpTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQWJvcnRDb250cm9sbGVyQ3VzdG9tLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEwOTM4MkMyMzQ3ODUwRTAwOTQyOEJBIC8qIEpT
QWJvcnRTaWduYWxDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYm9ydFNpZ25hbEN1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMEE4RUY0MjRGODIzQjkw
MDRGOTA3MCAvKiBUZXh0RW5jb2RlclN0cmVhbS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVGV4dEVuY29kZXJTdHJlYW0u
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzg2Myw4ICs3ODYzLDYgQEAKIAkJ
NDE2MkE0NEYxMDExNDVBRTAwREZGM0VEIC8qIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNjJBNDU1MTAxMTQ2NDcwMERGRjNFRCAv
KiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MTYyQTQ1NjEwMTE0NjQ3MDBERkYzRUQgLyogSlNEZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTQxNkEwNjkyMjNDQ0FBOTMwMDM0NzEwOSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDE2QTA2OTMyM0NDQUE5NDAwMzQ3MTA5IC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyQ29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxNkEwNjk0MjNDQ0FBOUUwMDM0NzEwOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlh
U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvVHJh
Y2tQcml2YXRlTWVkaWFTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MTZBMDY5NTIzQ0NBQTlFMDAzNDcxMDkgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZBMDY5
NjIzQ0NBQTlGMDAzNDcxMDkgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgwMjIsNiArODAyMCwxMiBAQAog
CQk0MUJDRTg3NzI1RjdBNjdBMDA0NkMyRTUgLyogUlRDVHJhbnNmb3JtRXZlbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDVHJhbnNmb3JtRXZlbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFCRjIwNDAyMkI5NDcxNjAwMDRGODEyIC8qIFJlYWx0aW1l
VmlkZW9Tb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhbHRpbWVWaWRlb1NvdXJjZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUJGMjA0MjIyQjk0NzE3MDAwNEY4MTIgLyogUmVh
bHRpbWVWaWRlb1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFsdGltZVZpZGVvU291
cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFDM0I4OUIyNjQ5QjFCNjAw
NEVENERFIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDFDM0I4OUMyNjQ5QjFCNjAwNEVENERFIC8qIEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUMzQjg5
RDI2NDlCMUI2MDA0RUQ0REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29h
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFDM0I4OUUyNjQ5QjFCNzAwNEVE
NERFIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFDM0I4OUYyNjQ5QjFCNzAwNEVE
NERFIC8qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQzNCOEEwMjY0OUIxQjcwMDRFRDRERSAvKiBB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFN0YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxQzdFMTA1MUU2QTU0MzYwMDI3QjRERSAvKiBDYW52YXNDYXB0
dXJlTWVkaWFTdHJlYW1UcmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxQzdFMTA2MUU2QTU0MzYwMDI3QjRERSAvKiBDYW52YXNDYXB0dXJlTWVk
aWFTdHJlYW1UcmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYW52YXND
YXB0dXJlTWVkaWFTdHJlYW1UcmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTc1NDUsNiArMTc1NDksNyBAQAogCQkwNzIyMUI5MjE3Q0YwQUQ0MDA4NDhFNTEgLyogbWVkaWFz
dHJlYW0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTQx
QzNCODlBMjY0OUIxOEUwMDRFRDRERSAvKiBjb2NvYSAqLywKIAkJCQlDREM2NzUxRjFFQUVBOTk2
MDA3MjdDODQgLyogaW9zICovLAogCQkJCTQxNTc0NzQyMUUzODY5ODAwMEU5MTREOCAvKiBsaWJ3
ZWJydGMgKi8sCiAJCQkJMDcyOUIxNEQxN0NGQ0NBMDAwNEYxRDYwIC8qIG1hYyAqLywKQEAgLTE3
NjI5LDEwICsxNzYzNCw2IEBACiAJCTA3MjlCMTREMTdDRkNDQTAwMDRGMUQ2MCAvKiBtYWMgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTQxNkEwNjkzMjND
Q0FBOTQwMDM0NzEwOSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcCAq
LywKLQkJCQk0MTZBMDY5MjIzQ0NBQTkzMDAzNDcxMDkgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJDb2NvYS5oICovLAotCQkJCTQxMDg3RjAxMjQ4RTU5QzgwMDY4MEU5MSAvKiBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwICovLAotCQkJCTQxMDg3RjAzMjQ4RTU5
QzkwMDY4MEU5MSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaCAqLywKIAkJ
CQkwNzAzNjNEQTE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oICov
LAogCQkJCTA3MDM2M0RCMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
Lm1tICovLAogCQkJCTA3MDM2M0RFMTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNv
dXJjZS5oICovLApAQCAtMTk4NzEsNiArMTk4NzIsMTkgQEAKIAkJCW5hbWUgPSBTdHJlYW1zOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNDFDM0I4OUEyNjQ5QjE4RTAwNEVE
NERFIC8qIGNvY29hICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQk0MUMzQjg5RDI2NDlCMUI2MDA0RUQ0REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJDb2NvYS5jcHAgKi8sCisJCQkJNDFDM0I4OUMyNjQ5QjFCNjAwNEVENERFIC8qIEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaCAqLywKKwkJCQk0MUMzQjg5RTI2NDlCMUI3
MDA0RUQ0REUgLyogQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQuY3Bw
ICovLAorCQkJCTQxQzNCODlGMjY0OUIxQjcwMDRFRDRERSAvKiBBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckludGVybmFsVW5pdC5oICovLAorCQkJCTQxQzNCOEEwMjY0OUIxQjcwMDRFRDRE
RSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwICovLAorCQkJCTQxQzNC
ODlCMjY0OUIxQjYwMDRFRDRERSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQu
aCAqLywKKwkJCSk7CisJCQlwYXRoID0gY29jb2E7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OwogCQk0MUY1NEY3QzFDNTBDNEY2MDAzMzg0ODggLyogZmV0Y2ggKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMzE1NDcsNiArMzE1NjEsOCBAQAog
CQkJCUZERTJENTVCMTU5RTY2RUIwMERDQ0NGOCAvKiBBdWRpb0lPQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZEMzE2MDEwMTJCMDI2NzYwMEMxQTM1OSAvKiBBdWRpb0xpc3RlbmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0MTZBMDZBMTIzQ0NBRDAzMDAzNDcxMDkgLyogQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxQzNCOEExMjY0OUIx
RTAwMDRFRDRERSAvKiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNDFDM0I4QTIyNjQ5QjFFNTAwNEVENERFIC8qIEF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMTMx
MkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYw
MTYxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvTm9kZUlucHV0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFNzE0NjdCMzI0QUJBRUYyMDBGQjJGNTAgLyogQXVkaW9Ob2RlT3B0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9B
dWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2Nv
Y29hL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oCmluZGV4IDgxYWNkZTdlOTdjZjk1N2IwMDAxMTA3
MDllZDkzNGJjNzE0NGQ1NTMuLmI3ZGVjM2YxNTVkNDY1YjRlODUxNDkxZGE2YTFjZTljMmM3NWE0
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlv
U2FtcGxlQnVmZmVyTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2Nv
Y29hL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgcmVzZXQoKTsKIAotICAgIHN0YXRpYyB2b2lkIHplcm9BQkwoQXVkaW9CdWZmZXJM
aXN0Jiwgc2l6ZV90KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCB6ZXJvQUJMKEF1
ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCk7CiAgICAgdm9pZCB6ZXJvKCk7CiAKIHByb3RlY3RlZDoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0F1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5oCmluZGV4IDYxZTRjZTQzNzRhNmYx
YmI5ZDY3MjExNTdjZjJhZThjZGE0MTFjOTQuLjA5NzI3NjhkZWZlYmViYThmMDI4NDg1OTIyYWQ2
YjE4MTFmY2EzMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIuaApAQCAt
NDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlcj4gY3JlYXRlKCk7CiAgICAgdmlydHVhbCB+QXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhcigpID0gMDsKICAgICAvLyBNYXkgYmUgY2FsbGVkIG9uIGEgYmFja2dyb3VuZCB0aHJl
YWQuIEl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBzdGFydC9iZWZvcmUgc3RvcCBpcyBj
YWxsZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9B
dWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uY3BwCmluZGV4IDA5MWZk
NzJjNzk1ZDIzMTRjM2I0OWE3MTIxM2QzZDFiM2Q5NDg0ZjcuLmY4M2UyOWQwZjM4NzU2NTBiZmEx
MjQxOGU4MjZjNTJjMzE3NjA1NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0F1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJl
YW0uY3BwCkBAIC0xNTksMTMgKzE1OSwxNCBAQCB2b2lkIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFT
dHJlYW06OnVwZGF0ZVJlbmRlcmVyKCkKIHZvaWQgQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVh
bTo6c3RhcnRSZW5kZXJlcigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBp
ZiAobV9pc1BsYXlpbmcpCisgICAgaWYgKG1faXNQbGF5aW5nIHx8ICFtX3JlbmRlcmVyKQogICAg
ICAgICByZXR1cm47CiAKICAgICBtX2lzUGxheWluZyA9IHRydWU7Ci0gICAgaWYgKG1fcmVuZGVy
ZXIpCi0gICAgICAgIG1fcmVuZGVyZXItPnN0YXJ0KCk7Ci0gICAgbV9hdWRpb1NvdXJjZS0+YWRk
QXVkaW9TYW1wbGVPYnNlcnZlcigqdGhpcyk7CisgICAgbV9yZW5kZXJlci0+c3RhcnQoW3Byb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+
bV9pc1BsYXlpbmcpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2F1ZGlvU291cmNlLT5h
ZGRBdWRpb1NhbXBsZU9ic2VydmVyKHByb3RlY3RlZFRoaXMuZ2V0KCkpOworICAgIH0pOwogfQog
CiB2b2lkIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW06OnN0b3BSZW5kZXJlcigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA5ZmFlZWVlOWVhY2I1MDMyZjFhNzlkNzNiYTAxOGE5YjY1NWJkMmIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2Nv
YS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcApAQCAtMCwwICsxLDEzMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisKKyNpbmNsdWRlICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaCIKKyNp
bmNsdWRlICJBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCIKKyNpbmNsdWRlICJDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJMaWJXZWJSVENBdWRpb01vZHVsZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OkF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EoKSA9IGRlZmF1bHQ7CisKK0F1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6On5BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckNvY29hKCkgPSBkZWZhdWx0OworCit2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
Q29jb2E6OnN0YXJ0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAg
ICBjbGVhcigpOworCisgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzaW5n
bGV0b24oKS5yZXRyaWV2ZUZvcm1hdERlc2NyaXB0aW9uKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KHRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvKiBmb3JtYXREZXNjcmlw
dGlvbikgbXV0YWJsZSB7CisgICAgICAgIGlmICh3ZWFrVGhpcykKKyAgICAgICAgICAgIHdlYWtU
aGlzLT5tX291dHB1dERlc2NyaXB0aW9uID0gbWFrZVVuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24+KCpmb3JtYXREZXNjcmlwdGlvbik7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6c3RvcCgpCit7
CisgICAgaWYgKG1fZGF0YVNvdXJjZSkKKyAgICAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJVbml0OjpzaW5nbGV0b24oKS5yZW1vdmVTb3VyY2UoKm1fZGF0YVNvdXJjZSk7Cit9CisK
K3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6Y2xlYXIoKQoreworICAg
IHN0b3AoKTsKKworICAgIG1fZGF0YVNvdXJjZSA9IG51bGxwdHI7CisgICAgbV9vdXRwdXREZXNj
cmlwdGlvbiA9IHsgfTsKK30KKwordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNv
Y29hOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQoreworICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyOjpzZXRWb2x1bWUodm9sdW1lKTsKKyAgICBpZiAobV9kYXRhU291cmNlKQorICAg
ICAgICBtX2RhdGFTb3VyY2UtPnNldFZvbHVtZSh2b2x1bWUpOworfQorCit2b2lkIEF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnNldEF1ZGlvT3V0cHV0RGV2aWNlKGNvbnN0IFN0
cmluZyYgZGV2aWNlSWQpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjcmVhdGUgYSB1bml0
IGZvciBvdXJzZWx2ZXMgaGVyZSBvciB1c2UgdGhlIGRlZmF1bHQgdW5pdCBpZiBkZXZpY2VJZCBp
cyBtYXRjaGluZy4KKyAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmds
ZXRvbigpLnNldEF1ZGlvT3V0cHV0RGV2aWNlKGRldmljZUlkKTsKKyAgICBtX3Nob3VsZFJlc2V0
ID0gdHJ1ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIHBvbGxTYW1wbGVzQ291bnQoKQoreworI2lm
IFVTRShMSUJXRUJSVEMpCisgICAgcmV0dXJuIExpYldlYlJUQ0F1ZGlvTW9kdWxlOjpQb2xsU2Ft
cGxlc0NvdW50ICsgMTsKKyNlbHNlCisgICAgcmV0dXJuIDI7CisjZW5kaWYKK30KKwordm9pZCBB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpwdXNoU2FtcGxlcyhjb25zdCBNZWRp
YVRpbWUmIHNhbXBsZVRpbWUsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBhdWRpb0RhdGEsIGNv
bnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBzaXplX3Qgc2FtcGxlQ291
bnQpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKGRlc2NyaXB0
aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlID09IFBsYXRmb3JtRGVzY3JpcHRpb246OkNB
QXVkaW9TdHJlYW1CYXNpY1R5cGUpOworICAgIGlmICghbV9kYXRhU291cmNlIHx8IG1fc2hvdWxk
UmVzZXQgfHwgIW1fZGF0YVNvdXJjZS0+aW5wdXREZXNjcmlwdGlvbigpIHx8ICptX2RhdGFTb3Vy
Y2UtPmlucHV0RGVzY3JpcHRpb24oKSAhPSBkZXNjcmlwdGlvbikgeworICAgICAgICBEaXNhYmxl
TWFsbG9jUmVzdHJpY3Rpb25zRm9yQ3VycmVudFRocmVhZFNjb3BlIHNjb3BlOworCisgICAgICAg
IC8vIEZJWE1FOiBGb3Igbm9uIGxpYndlYnJ0YyBzb3VyY2VzLCB3ZSBjYW4gcHJvYmFibHkgcmVk
dWNlIHBvbGwgc2FtcGxlcyBjb3VudCB0byAyLgorICAgICAgICAKKyAgICAgICAgYXV0byBkYXRh
U291cmNlID0gQXVkaW9TYW1wbGVEYXRhU291cmNlOjpjcmVhdGUoZGVzY3JpcHRpb24uc2FtcGxl
UmF0ZSgpICogMC41LCAqdGhpcywgcG9sbFNhbXBsZXNDb3VudCgpKTsKKworICAgICAgICBpZiAo
ZGF0YVNvdXJjZS0+c2V0SW5wdXRGb3JtYXQodG9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oZGVz
Y3JpcHRpb24pKSkgeworICAgICAgICAgICAgRVJST1JfTE9HKExPR0lERU5USUZJRVIsICJVbmFi
bGUgdG8gc2V0IHRoZSBpbnB1dCBmb3JtYXQgb2YgZGF0YSBzb3VyY2UiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9vdXRwdXREZXNjcmlwdGlvbiB8
fCBkYXRhU291cmNlLT5zZXRPdXRwdXRGb3JtYXQoKm1fb3V0cHV0RGVzY3JpcHRpb24pKSB7Cisg
ICAgICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgIlVuYWJsZSB0byBzZXQgdGhlIG91
dHB1dCBmb3JtYXQgb2YgZGF0YSBzb3VyY2UiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIodGhpcyksIG9sZFNvdXJjZSA9IG1fZGF0YVNvdXJjZSwgbmV3U291cmNlID0gZGF0YVNv
dXJjZV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAob2xkU291cmNlKQorICAgICAgICAgICAg
ICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2luZ2xldG9uKCkucmVtb3Zl
U291cmNlKCpvbGRTb3VyY2UpOworCisgICAgICAgICAgICBuZXdTb3VyY2UtPnNldFZvbHVtZSh2
b2x1bWUoKSk7CisgICAgICAgICAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6
OnNpbmdsZXRvbigpLmFkZFNvdXJjZShXVEZNb3ZlKG5ld1NvdXJjZSkpOworICAgICAgICB9KTsK
KyAgICAgICAgbV9kYXRhU291cmNlID0gV1RGTW92ZShkYXRhU291cmNlKTsKKyAgICAgICAgbV9z
aG91bGRSZXNldCA9IGZhbHNlOworICAgIH0KKworICAgIG1fZGF0YVNvdXJjZS0+cHVzaFNhbXBs
ZXMoc2FtcGxlVGltZSwgYXVkaW9EYXRhLCBzYW1wbGVDb3VudCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTQzZTQ1MTI2YTBmZDBiYWFmYTk5YmY2NTYxMTJjNDlkNjAyM2M5ZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNs
dWRlICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1
ZGlvVG9vbGJveC5oPgorI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTsKK2NsYXNz
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDsKK2NsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsK
KworY2xhc3MgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSA6IHB1YmxpYyBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlciwgcHVibGljIENhbk1ha2VXZWFrUHRyPEF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EsIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246
OkVhZ2VyPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSgpOworICAgIH5BdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckNvY29hKCk7CisKK3ByaXZhdGU6CisgICAgLy8gQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXIKKyAgICB2b2lkIHB1c2hTYW1wbGVzKGNvbnN0IFdURjo6TWVkaWFUaW1l
JiwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmLCBjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9u
Jiwgc2l6ZV90KSBmaW5hbDsKKyAgICB2b2lkIHN0YXJ0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJikgZmluYWw7CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CisgICAgdm9pZCBjbGVhcigpIGZp
bmFsOworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHNldEF1ZGlv
T3V0cHV0RGV2aWNlKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgc3RkOjp1bmlxdWVfcHRy
PENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4gbV9vdXRwdXREZXNjcmlwdGlvbjsKKyAgICBSZWZQ
dHI8QXVkaW9TYW1wbGVEYXRhU291cmNlPiBtX2RhdGFTb3VyY2U7CisgICAgYm9vbCBtX3Nob3Vs
ZFJlc2V0IHsgZmFsc2UgfTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2Nv
YS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckludGVybmFsVW5pdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzNmZTgyMWI5YzUyMGM5MjI0ZTVk
ZTg4OGU1MThjMzE5NmYzMWNiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50
ZXJuYWxVbml0LmNwcApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdC5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZS5oIgorI2luY2x1ZGUgIkF1ZGlvU2Vzc2lvbi5oIgorI2luY2x1ZGUgIkNB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworI2luY2x1
ZGUgPHBhbC9zcGkvY29jb2EvQXVkaW9Ub29sYm94U1BJLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisj
aW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5oIgorI2luY2x1ZGUgIkNvcmVBdWRpb0Nh
cHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVk
aWFTb2Z0TGluay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExvY2FsQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQgZmluYWwgOiBwdWJsaWMgQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IExvY2FsQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQoUmVuZGVyQ2FsbGJhY2smJik7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpOworCisgICAgLy8gQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQgQVBJLgorICAgIHZvaWQgc3RhcnQoKSBmaW5h
bDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsKKyAgICB2b2lkIHJldHJpZXZlRm9ybWF0RGVzY3Jp
cHRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24qKT4mJikgZmluYWw7CisgICAgdm9pZCBzZXRBdWRpb091dHB1dERldmljZShjb25zdCBTdHJp
bmcmKSBmaW5hbDsKKworICAgIHN0YXRpYyBPU1N0YXR1cyByZW5kZXJpbmdDYWxsYmFjayh2b2lk
KiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJ
bnQzMiBpbkJ1c051bWJlciwgVUludDMyIHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QqKTsK
KworICAgIFJlbmRlckNhbGxiYWNrIG1fcmVuZGVyQ2FsbGJhY2s7CisgICAgc3RkOjp1bmlxdWVf
cHRyPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4gbV9vdXRwdXREZXNjcmlwdGlvbjsKKyAgICBB
dWRpb0NvbXBvbmVudEluc3RhbmNlIG1fcmVtb3RlSU9Vbml0IHsgbnVsbHB0ciB9OworICAgIGJv
b2wgbV9pc1N0YXJ0ZWQgeyBmYWxzZSB9OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB1aW50MzJf
dCBtX2RldmljZUlEIHsgMCB9OworI2VuZGlmCit9OworCitVbmlxdWVSZWY8QXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ+IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVySW50ZXJuYWxVbml0OjpjcmVhdGVMb2NhbEludGVybmFsVW5pdChSZW5kZXJDYWxsYmFjayYm
IHJlbmRlckNhbGxiYWNrKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPExvY2FsQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ+KFdURk1vdmUocmVuZGVyQ2FsbGJh
Y2spKTsKK30KKworTG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5p
dDo6TG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdChSZW5kZXJD
YWxsYmFjayYmIHJlbmRlckNhbGxiYWNrKQorICAgIDogbV9yZW5kZXJDYWxsYmFjayhXVEZNb3Zl
KHJlbmRlckNhbGxiYWNrKSkKK3sKK30KKwordm9pZCBMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVySW50ZXJuYWxVbml0OjpyZXRyaWV2ZUZvcm1hdERlc2NyaXB0aW9uKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKik+JiYgY2FsbGJh
Y2spCit7CisgICAgY3JlYXRlQXVkaW9Vbml0SWZOZWVkZWQoKTsKKyAgICBjYWxsYmFjayhtX291
dHB1dERlc2NyaXB0aW9uLmdldCgpKTsKK30KKwordm9pZCBMb2NhbEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpzZXRBdWRpb091dHB1dERldmljZShjb25zdCBTdHJp
bmcmIGRldmljZUlEKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBhdXRvIGRldmljZSA9IENv
cmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5jb3JlQXVkaW9EZXZpY2VX
aXRoVUlEKGRldmljZUlEKTsKKworICAgIGlmICghZGV2aWNlICYmICFkZXZpY2VJRC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJJbnRlcm5hbFVuaXQ6OnNldEF1ZGlvT3V0cHV0RGV2aWNlSWQgLSBkaWQgbm90IGZp
bmQgZGV2aWNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGF1ZGlvVW5p
dERldmljZUlEID0gZGV2aWNlID8gZGV2aWNlLT5kZXZpY2VJRCgpIDogMDsKKyAgICBpZiAobV9k
ZXZpY2VJRCA9PSBhdWRpb1VuaXREZXZpY2VJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9v
bCBzaG91bGRSZXN0YXJ0ID0gbV9pc1N0YXJ0ZWQ7CisgICAgaWYgKG1faXNTdGFydGVkKQorICAg
ICAgICBzdG9wKCk7CisKKyAgICBtX2RldmljZUlEID0gYXVkaW9Vbml0RGV2aWNlSUQ7CisKKyAg
ICBpZiAoc2hvdWxkUmVzdGFydCkKKyAgICAgICAgc3RhcnQoKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGRldmljZUlEKTsKKyNlbmRpZgorfQorCit2b2lkIExvY2FsQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OnN0YXJ0KCkKK3sKKyAgICBpZiAobV9pc1N0YXJ0
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVkKCk7Cisg
ICAgaWYgKCFtX3JlbW90ZUlPVW5pdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8g
ZXJyb3IgPSBBdWRpb091dHB1dFVuaXRTdGFydChtX3JlbW90ZUlPVW5pdCkpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJ
bnRlcm5hbFVuaXQ6OnN0YXJ0IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCwgZXJyb3IgPSAl
ZCIsIGVycm9yKTsKKyAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9yZW1v
dGVJT1VuaXQpOworICAgICAgICBtX3JlbW90ZUlPVW5pdCA9IG51bGxwdHI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOworICAgIFJFTEVBU0VfTE9HKFdl
YlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0IGlzIHN0YXJ0
ZWQiKTsKK30KKwordm9pZCBMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJu
YWxVbml0OjpzdG9wKCkKK3sKKyAgICBpZiAoIW1fcmVtb3RlSU9Vbml0KQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgQXVkaW9PdXRwdXRVbml0U3Rv
cChtX3JlbW90ZUlPVW5pdCk7CisgICAgICAgIG1faXNTdGFydGVkID0gZmFsc2U7CisgICAgfQor
CisgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9yZW1vdGVJT1VuaXQpOworICAg
IG1fcmVtb3RlSU9Vbml0ID0gbnVsbHB0cjsKK30KKwordm9pZCBMb2NhbEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpCit7
CisgICAgQVNTRVJUKCFtX3JlbW90ZUlPVW5pdCB8fCBtX291dHB1dERlc2NyaXB0aW9uKTsKKyAg
ICBpZiAobV9yZW1vdGVJT1VuaXQpCisgICAgICAgIHJldHVybjsKKworICAgIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbiBvdXRwdXREZXNjcmlwdGlvbjsKKyAgICBBdWRpb0NvbXBvbmVudEluc3Rh
bmNlIHJlbW90ZUlPVW5pdCB7IG51bGxwdHIgfTsKKworICAgIEF1ZGlvQ29tcG9uZW50RGVzY3Jp
cHRpb24gaW9Vbml0RGVzY3JpcHRpb24geyBrQXVkaW9Vbml0VHlwZV9PdXRwdXQsIDAsIGtBdWRp
b1VuaXRNYW51ZmFjdHVyZXJfQXBwbGUsIDAsIDAgfTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgIGlvVW5pdERlc2NyaXB0aW9uLmNvbXBvbmVudFN1YlR5cGUgPSBrQXVkaW9Vbml0U3Vi
VHlwZV9SZW1vdGVJTzsKKyNlbHNlCisgICAgaW9Vbml0RGVzY3JpcHRpb24uY29tcG9uZW50U3Vi
VHlwZSA9IGtBdWRpb1VuaXRTdWJUeXBlX0RlZmF1bHRPdXRwdXQ7CisjZW5kaWYKKworICAgIEF1
ZGlvQ29tcG9uZW50IGlvQ29tcG9uZW50ID0gQXVkaW9Db21wb25lbnRGaW5kTmV4dChudWxscHRy
LCAmaW9Vbml0RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChpb0NvbXBvbmVudCk7CisgICAgaWYg
KCFpb0NvbXBvbmVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVu
YWJsZSB0byBmaW5kIHJlbW90ZSBJTyB1bml0IGNvbXBvbmVudCIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgYXV0byBlcnJvciA9IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoaW9D
b21wb25lbnQsICZyZW1vdGVJT1VuaXQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVy
bmFsVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJsZSB0byBvcGVuIHZwaW8gdW5pdCwgZXJyb3Ig
PSAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgVUludDMyIHBhcmFtID0gMTsKKyAgICBlcnJvciA9IEF1ZGlvVW5pdFNl
dFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlP
LCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LCAwLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOworICAg
IGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6Y3JlYXRlQXVkaW9Vbml0IHVuYWJs
ZSB0byBlbmFibGUgdnBpbyB1bml0IG91dHB1dCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmICht
X2RldmljZUlEKSB7CisgICAgICAgIGVycm9yID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3Rl
SU9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1ZGlvVW5p
dFNjb3BlX0dsb2JhbCwgMCwgJm1fZGV2aWNlSUQsIHNpemVvZihtX2RldmljZUlEKSk7CisgICAg
ICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAi
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ6OmNyZWF0ZUF1ZGlvVW5p
dCB1bmFibGUgdG8gc2V0IHVuaXQgZGV2aWNlIElEICVkLCBlcnJvciAlZCAoJS40cykiLCAoaW50
KW1fZGV2aWNlSUQsIChpbnQpZXJyb3IsIChjaGFyKikmZXJyb3IpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBBVVJlbmRlckNhbGxiYWNrU3Ry
dWN0IGNhbGxiYWNrID0geyBMb2NhbEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJu
YWxVbml0OjpyZW5kZXJpbmdDYWxsYmFjaywgdGhpcyB9OworICAgIGVycm9yID0gQXVkaW9Vbml0
U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU2V0UmVuZGVyQ2Fs
bGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIDAsICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxi
YWNrKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJU
QywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpjcmVhdGVBdWRp
b1VuaXQgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgc3BlYWtlciBwcm9jLCBlcnJvciA9ICVkIiwg
ZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVUludDMyIHNpemUgPSBzaXpl
b2Yob3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKSk7CisgICAgZXJyb3IgID0g
QXVkaW9Vbml0R2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3Ry
ZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZvdXRwdXREZXNjcmlwdGlvbi5z
dHJlYW1EZXNjcmlwdGlvbigpLCAmc2l6ZSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50
ZXJuYWxVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIGdldCBpbnB1dCBzdHJlYW0gZm9y
bWF0LCBlcnJvciA9ICVkIiwgZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
b3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKS5tU2FtcGxlUmF0ZSA9IEF1ZGlv
U2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNhbXBsZVJhdGUoKTsKKworICAgIGVycm9yID0gQXVk
aW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFt
Rm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZvdXRwdXREZXNjcmlwdGlvbi5zdHJl
YW1EZXNjcmlwdGlvbigpLCBzaXplb2Yob3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRp
b24oKSkpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJS
VEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6Y3JlYXRlQXVk
aW9Vbml0IHVuYWJsZSB0byBzZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgPSAlZCIsIGVy
cm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVycm9yID0gQXVkaW9Vbml0SW5p
dGlhbGl6ZShyZW1vdGVJT1VuaXQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdDo6Y3JlYXRlQXVkaW9Vbml0IEF1ZGlvVW5pdEluaXRpYWxpemUoKSBmYWlsZWQsIGVycm9y
ID0gJWQiLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX291dHB1dERl
c2NyaXB0aW9uID0gbWFrZVVuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KG91dHB1dERl
c2NyaXB0aW9uKTsKKyAgICBtX3JlbW90ZUlPVW5pdCA9IHJlbW90ZUlPVW5pdDsKK30KKworT1NT
dGF0dXMgTG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdDo6cmVu
ZGVyaW5nQ2FsbGJhY2sodm9pZCogcHJvY2Vzc29yLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFn
cyogYWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiB0aW1lU3RhbXAsIFVJbnQzMiwg
VUludDMyIHNhbXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TG9jYWxBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFs
VW5pdCo+KHByb2Nlc3NvciktPm1fcmVuZGVyQ2FsbGJhY2soc2FtcGxlQ291bnQsICppb0RhdGEs
IHRpbWVTdGFtcC0+bVNhbXBsZVRpbWUsIHRpbWVTdGFtcC0+bUhvc3RUaW1lLCAqYWN0aW9uRmxh
Z3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVySW50ZXJuYWxVbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFiNWYxNzM4MGZjMTYwOGFh
YjIyMDUxY2U0OWMyODAyNTlmOGM2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
SW50ZXJuYWxVbml0LmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9B
dWRpb1Rvb2xib3guaD4KKyNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQ7CitjbGFzcyBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb247CisKK2NsYXNzIEF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckludGVybmFsVW5pdCgpID0gZGVmYXVsdDsK
KworICAgIHVzaW5nIFJlbmRlckNhbGxiYWNrID0gRnVuY3Rpb248T1NTdGF0dXMoc2l6ZV90IHNh
bXBsZUNvdW50LCBBdWRpb0J1ZmZlckxpc3QmLCB1aW50NjRfdCBzYW1wbGVUaW1lLCBkb3VibGUg
aG9zdFRpbWUsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJik+OworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBVbmlxdWVSZWY8QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5h
bFVuaXQ+IGNyZWF0ZUxvY2FsSW50ZXJuYWxVbml0KFJlbmRlckNhbGxiYWNrJiYpOworCisgICAg
dmlydHVhbCB2b2lkIHN0YXJ0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZXRyaWV2ZUZvcm1hdERlc2NyaXB0aW9uKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKik+JiYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0QXVkaW9PdXRwdXREZXZpY2UoY29uc3QgU3RyaW5nJikgPSAwOworfTsK
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9j
b2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4
MDQzZDk1Y2VmZjUyN2YyOGI3YWQyNDFmYzkzZjA3MzZiMTkzOGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJVbml0LmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAi
QXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6
OkNyZWF0ZUludGVybmFsVW5pdEZ1bmN0aW9uJiBnZXRDcmVhdGVJbnRlcm5hbFVuaXRGdW5jdGlv
bigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF1ZGlvTWVkaWFTdHJlYW1UcmFja1Jl
bmRlcmVyVW5pdDo6Q3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rpb24+IGZ1bmN0aW9uOworICAgIHJl
dHVybiBmdW5jdGlvbjsKK30KKwordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQ6OnNldENyZWF0ZUludGVybmFsVW5pdEZ1bmN0aW9uKENyZWF0ZUludGVybmFsVW5pdEZ1bmN0
aW9uJiYgZnVuY3Rpb24pCit7CisgICAgZ2V0Q3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rpb24oKSA9
IFdURk1vdmUoZnVuY3Rpb24pOworfQorCitzdGF0aWMgVW5pcXVlUmVmPEF1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0PiBjcmVhdGVJbnRlcm5hbFVuaXQoQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0JiB1bml0KQoreworICAgIEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpSZW5kZXJDYWxsYmFjayBjYWxsYmFjayA9IFsmdW5p
dF0oYXV0byBzYW1wbGVDb3VudCwgYXV0byYgbGlzdCwgYXV0byBzYW1wbGVUaW1lLCBhdXRvIGhv
c3RUaW1lLCBhdXRvJiBmbGFncykgeworICAgICAgICB1bml0LnJlbmRlcihzYW1wbGVDb3VudCwg
bGlzdCwgc2FtcGxlVGltZSwgaG9zdFRpbWUsIGZsYWdzKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfTsKKworICAgIGF1dG8mIGZ1bmN0aW9uID0gZ2V0Q3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rp
b24oKTsKKyAgICBpZiAoZnVuY3Rpb24pCisgICAgICAgIHJldHVybiBmdW5jdGlvbihXVEZNb3Zl
KGNhbGxiYWNrKSk7CisKKyAgICByZXR1cm4gQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJ
bnRlcm5hbFVuaXQ6OmNyZWF0ZUxvY2FsSW50ZXJuYWxVbml0KFdURk1vdmUoY2FsbGJhY2spKTsK
K30KKworQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0JiBBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdD4gcmVnaXN0cnk7CisgICAgcmV0
dXJuIHJlZ2lzdHJ5OworfQorCitBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OkF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgpCisgICAgOiBtX2ludGVybmFsVW5pdChj
cmVhdGVJbnRlcm5hbFVuaXQoKnRoaXMpKQoreworfQorCitBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlclVuaXQ6On5BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQoKQoreworICAg
IHN0b3AoKTsKK30KKwordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNl
dEF1ZGlvT3V0cHV0RGV2aWNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQpCit7CisgICAgbV9pbnRl
cm5hbFVuaXQtPnNldEF1ZGlvT3V0cHV0RGV2aWNlKGRldmljZUlEKTsKK30KKwordm9pZCBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmFkZFNvdXJjZShSZWY8QXVkaW9TYW1wbGVE
YXRhU291cmNlPiYmIHNvdXJjZSkKK3sKKyAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmFkZFNvdXJjZSIpOworCisgICAgeworICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc291cmNlc0xvY2spOworICAgICAgICBBU1NFUlQo
IW1fc291cmNlcy5jb250YWlucyhzb3VyY2UuZ2V0KCkpKTsKKyAgICAgICAgbV9zb3VyY2VzLmFk
ZChXVEZNb3ZlKHNvdXJjZSkpOworICAgICAgICBtX3NvdXJjZXNDb3B5ID0gY29weVRvVmVjdG9y
KG1fc291cmNlcyk7CisgICAgICAgIG1fc2hvdWxkVXBkYXRlUmVuZGVyU291cmNlcyA9IHRydWU7
CisgICAgfQorICAgIHN0YXJ0KCk7Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJVbml0OjpyZW1vdmVTb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJiBzb3VyY2UpCit7
CisgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJV
bml0OjpyZW1vdmVTb3VyY2UiKTsKKworICAgIGJvb2wgc2hvdWxkU3RvcCA9IGZhbHNlOworICAg
IHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NvdXJjZXNMb2NrKTsKKyAgICAg
ICAgbV9zb3VyY2VzLnJlbW92ZShzb3VyY2UpOworICAgICAgICBzaG91bGRTdG9wID0gbV9zb3Vy
Y2VzLmlzRW1wdHkoKTsKKyAgICAgICAgbV9zb3VyY2VzQ29weSA9IGNvcHlUb1ZlY3RvcihtX3Nv
dXJjZXMpOworICAgICAgICBtX3Nob3VsZFVwZGF0ZVJlbmRlclNvdXJjZXMgPSB0cnVlOworICAg
IH0KKyAgICBpZiAoc2hvdWxkU3RvcCkKKyAgICAgICAgc3RvcCgpOworfQorCit2b2lkIEF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RhcnQoKQoreworICAgIFJFTEVBU0VfTE9H
KFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RhcnQiKTsKKyAg
ICBtX2ludGVybmFsVW5pdC0+c3RhcnQoKTsKK30KKwordm9pZCBBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlclVuaXQ6OnN0b3AoKQoreworICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RvcCIpOworICAgIG1faW50ZXJuYWxVbml0
LT5zdG9wKCk7Cit9CisKK3ZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojpy
ZXRyaWV2ZUZvcm1hdERlc2NyaXB0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uKik+JiYgY2FsbGJhY2spCit7CisgICAgbV9pbnRlcm5hbFVu
aXQtPnJldHJpZXZlRm9ybWF0RGVzY3JpcHRpb24oV1RGTW92ZShjYWxsYmFjaykpOworfQorCit2
b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6cmVuZGVyKHNpemVfdCBzYW1w
bGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0JiBpb0RhdGEsIHVpbnQ2NF90IHNhbXBsZVRpbWUsIGRv
dWJsZSBob3N0VGltZSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmIGFjdGlvbkZsYWdzKQor
eworICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB3ZSBmb3JiaWQgaGVhcCBhbGxvY2F0
aW9ucyB3aGlsZSBkb2luZyByZW5kZXJpbmcgb24gdGhlIGF1ZGlvIHRocmVhZC4KKyAgICBGb3Ji
aWRNYWxsb2NVc2VGb3JDdXJyZW50VGhyZWFkU2NvcGUgZm9yYmlkTWFsbG9jVXNlOworCisgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fc2hvdWxkVXBkYXRlUmVuZGVyU291
cmNlcykgeworICAgICAgICBhdXRvIGxvY2tlciA9IHRyeUhvbGRMb2NrKG1fc291cmNlc0xvY2sp
OworICAgICAgICBpZiAoIWxvY2tlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBt
X3JlbmRlclNvdXJjZXMgPSBXVEZNb3ZlKG1fc291cmNlc0NvcHkpOworICAgICAgICBtX3Nob3Vs
ZFVwZGF0ZVJlbmRlclNvdXJjZXMgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobV9yZW5kZXJT
b3VyY2VzLmlzRW1wdHkoKSkgeworICAgICAgICBhY3Rpb25GbGFncyA9IGtBdWRpb1VuaXRSZW5k
ZXJBY3Rpb25fT3V0cHV0SXNTaWxlbmNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gTWl4IGFsbCBzb3VyY2VzLgorICAgIGJvb2wgaXNGaXJzdFNvdXJjZSA9IHRydWU7CisgICAg
Zm9yIChhdXRvJiBzb3VyY2UgOiBtX3JlbmRlclNvdXJjZXMpIHsKKyAgICAgICAgc291cmNlLT5w
dWxsU2FtcGxlcyhpb0RhdGEsIHNhbXBsZUNvdW50LCBzYW1wbGVUaW1lLCBob3N0VGltZSwgaXNG
aXJzdFNvdXJjZSA/IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6Q29weSA6IEF1ZGlvU2FtcGxlRGF0
YVNvdXJjZTo6TWl4KTsKKyAgICAgICAgaXNGaXJzdFNvdXJjZSA9IGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm47Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1ZWZkZjAzMjZiMmM2ODc5NWZiN2ZlNmQ1N2Vj
NzVmYTIwYzJhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuaApAQCAt
MCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckludGVybmFsVW5pdC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvU2FtcGxlRGF0YVNv
dXJjZTsKK2NsYXNzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDsKK2NsYXNzIENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbjsKK2NsYXNzIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxV
bml0OworCitjbGFzcyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQgeworcHVibGlj
OgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
clVuaXQmIHNpbmdsZXRvbigpOworCisgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJV
bml0KCk7CisgICAgfkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgpOworCisgICAg
dXNpbmcgQ3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rpb24gPSBGdW5jdGlvbjxVbmlxdWVSZWY8QXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJbnRlcm5hbFVuaXQ+KEF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVySW50ZXJuYWxVbml0OjpSZW5kZXJDYWxsYmFjayYmKT47CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0Q3JlYXRlSW50ZXJuYWxVbml0RnVuY3Rpb24oQ3JlYXRl
SW50ZXJuYWxVbml0RnVuY3Rpb24mJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbmRl
cihzaXplX3Qgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCYsIHVpbnQ2NF90IHNhbXBsZVRp
bWUsIGRvdWJsZSBob3N0VGltZSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmKTsKKworICAg
IHZvaWQgc2V0QXVkaW9PdXRwdXREZXZpY2UoY29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIGFk
ZFNvdXJjZShSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPiYmKTsKKyAgICB2b2lkIHJlbW92ZVNv
dXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmKTsKKworICAgIHZvaWQgcmV0cmlldmVGb3JtYXRE
ZXNjcmlwdGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiopPiYmKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN0YXJ0KCk7CisgICAgdm9pZCBz
dG9wKCk7CisKKyAgICB2b2lkIGNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVkKCk7CisKKyAgICBIYXNo
U2V0PFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+PiBtX3NvdXJjZXM7CisgICAgVmVjdG9yPFJl
ZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+PiBtX3NvdXJjZXNDb3B5OworICAgIFZlY3RvcjxSZWY8
QXVkaW9TYW1wbGVEYXRhU291cmNlPj4gbV9yZW5kZXJTb3VyY2VzOworICAgIGJvb2wgbV9zaG91
bGRVcGRhdGVSZW5kZXJTb3VyY2VzIHsgZmFsc2UgfTsKKyAgICBMb2NrIG1fc291cmNlc0xvY2s7
CisgICAgVW5pcXVlUmVmPEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySW50ZXJuYWxVbml0
PiBtX2ludGVybmFsVW5pdDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2Nv
YS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5OWI4OGE0MjAwYzBhMmQzNTY4
MzhlYjA0MmViY2QyODg4N2JiNjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmgiCi0KLSNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0
LmgiCi0jaW5jbHVkZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCi0jaW5jbHVkZSAiQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNv
Y29hOjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hKCkgPSBkZWZhdWx0OwotCi1B
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjp+QXVkaW9NZWRpYVN0cmVhbVRyYWNr
UmVuZGVyZXJDb2NvYSgpID0gZGVmYXVsdDsKLQotdm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hOjpzdGFydCgpCi17Ci0gICAgY2xlYXIoKTsKLQotICAgIGlmIChhdXRvKiBm
b3JtYXREZXNjcmlwdGlvbiA9IEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c2lu
Z2xldG9uKCkuZm9ybWF0RGVzY3JpcHRpb24oKSkKLSAgICAgICAgbV9vdXRwdXREZXNjcmlwdGlv
biA9IG1ha2VVbmlxdWU8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPigqZm9ybWF0RGVzY3JpcHRp
b24pOwotfQotCi12b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OnN0b3Ao
KQotewotICAgIGlmIChtX2RhdGFTb3VyY2UpCi0gICAgICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyVW5pdDo6c2luZ2xldG9uKCkucmVtb3ZlU291cmNlKCptX2RhdGFTb3VyY2UpOwot
fQotCi12b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2E6OmNsZWFyKCkKLXsK
LSAgICBzdG9wKCk7Ci0KLSAgICBtX2RhdGFTb3VyY2UgPSBudWxscHRyOwotICAgIG1fb3V0cHV0
RGVzY3JpcHRpb24gPSB7IH07Ci19Ci0KLXZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJDb2NvYTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKLXsKLSAgICBBdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlcjo6c2V0Vm9sdW1lKHZvbHVtZSk7Ci0gICAgaWYgKG1fZGF0YVNvdXJjZSkK
LSAgICAgICAgbV9kYXRhU291cmNlLT5zZXRWb2x1bWUodm9sdW1lKTsKLX0KLQotdm9pZCBBdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hOjpzZXRBdWRpb091dHB1dERldmljZShjb25z
dCBTdHJpbmcmIGRldmljZUlkKQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY3JlYXRlIGEg
dW5pdCBmb3Igb3Vyc2VsdmVzIGhlcmUgb3IgdXNlIHRoZSBkZWZhdWx0IHVuaXQgaWYgZGV2aWNl
SWQgaXMgbWF0Y2hpbmcuCi0gICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Ojpz
aW5nbGV0b24oKS5zZXRBdWRpb091dHB1dERldmljZShkZXZpY2VJZCk7Ci0gICAgbV9zaG91bGRS
ZXNldCA9IHRydWU7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBwb2xsU2FtcGxlc0NvdW50KCkKLXsK
LSNpZiBVU0UoTElCV0VCUlRDKQotICAgIHJldHVybiBMaWJXZWJSVENBdWRpb01vZHVsZTo6UG9s
bFNhbXBsZXNDb3VudCArIDE7Ci0jZWxzZQotICAgIHJldHVybiAyOwotI2VuZGlmCi19Ci0KLXZv
aWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYTo6cHVzaFNhbXBsZXMoY29uc3Qg
TWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYgYXVkaW9EYXRh
LCBjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgc2l6ZV90IHNhbXBs
ZUNvdW50KQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChkZXNj
cmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkudHlwZSA9PSBQbGF0Zm9ybURlc2NyaXB0aW9u
OjpDQUF1ZGlvU3RyZWFtQmFzaWNUeXBlKTsKLSAgICBpZiAoIW1fZGF0YVNvdXJjZSB8fCBtX3No
b3VsZFJlc2V0IHx8ICFtX2RhdGFTb3VyY2UtPmlucHV0RGVzY3JpcHRpb24oKSB8fCAqbV9kYXRh
U291cmNlLT5pbnB1dERlc2NyaXB0aW9uKCkgIT0gZGVzY3JpcHRpb24pIHsKLSAgICAgICAgRGlz
YWJsZU1hbGxvY1Jlc3RyaWN0aW9uc0ZvckN1cnJlbnRUaHJlYWRTY29wZSBzY29wZTsKLQotICAg
ICAgICAvLyBGSVhNRTogRm9yIG5vbiBsaWJ3ZWJydGMgc291cmNlcywgd2UgY2FuIHByb2JhYmx5
IHJlZHVjZSBwb2xsIHNhbXBsZXMgY291bnQgdG8gMi4KLSAgICAgICAgCi0gICAgICAgIGF1dG8g
ZGF0YVNvdXJjZSA9IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6Y3JlYXRlKGRlc2NyaXB0aW9uLnNh
bXBsZVJhdGUoKSAqIDAuNSwgKnRoaXMsIHBvbGxTYW1wbGVzQ291bnQoKSk7Ci0KLSAgICAgICAg
aWYgKGRhdGFTb3VyY2UtPnNldElucHV0Rm9ybWF0KHRvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
KGRlc2NyaXB0aW9uKSkpIHsKLSAgICAgICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAi
VW5hYmxlIHRvIHNldCB0aGUgaW5wdXQgZm9ybWF0IG9mIGRhdGEgc291cmNlIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1fb3V0cHV0RGVzY3JpcHRp
b24gfHwgZGF0YVNvdXJjZS0+c2V0T3V0cHV0Rm9ybWF0KCptX291dHB1dERlc2NyaXB0aW9uKSkg
ewotICAgICAgICAgICAgRVJST1JfTE9HKExPR0lERU5USUZJRVIsICJVbmFibGUgdG8gc2V0IHRo
ZSBvdXRwdXQgZm9ybWF0IG9mIGRhdGEgc291cmNlIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKHRoaXMpLCBvbGRTb3VyY2UgPSBtX2RhdGFTb3VyY2UsIG5ld1NvdXJjZSA9IGRh
dGFTb3VyY2VdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKG9sZFNvdXJjZSkKLSAgICAgICAg
ICAgICAgICBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRvbigpLnJl
bW92ZVNvdXJjZSgqb2xkU291cmNlKTsKLQotICAgICAgICAgICAgbmV3U291cmNlLT5zZXRWb2x1
bWUodm9sdW1lKCkpOwotICAgICAgICAgICAgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJV
bml0OjpzaW5nbGV0b24oKS5hZGRTb3VyY2UoV1RGTW92ZShuZXdTb3VyY2UpKTsKLSAgICAgICAg
fSk7Ci0gICAgICAgIG1fZGF0YVNvdXJjZSA9IFdURk1vdmUoZGF0YVNvdXJjZSk7Ci0gICAgICAg
IG1fc2hvdWxkUmVzZXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX2RhdGFTb3VyY2UtPnB1c2hT
YW1wbGVzKHNhbXBsZVRpbWUsIGF1ZGlvRGF0YSwgc2FtcGxlQ291bnQpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlODM5Njc0YmQ3ZDA0OTNlZGNjNjE5MmMwYjE5MmE0Zjc0
NTA4ZTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyQ29jb2EuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRl
ICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
LSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotCi0jaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlv
VG9vbGJveC5oPgotI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTsKLWNsYXNzIEF1
ZGlvU2FtcGxlQnVmZmVyTGlzdDsKLWNsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKLQot
Y2xhc3MgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSA6IHB1YmxpYyBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlciwgcHVibGljIENhbk1ha2VXZWFrUHRyPEF1ZGlvTWVkaWFT
dHJlYW1UcmFja1JlbmRlcmVyQ29jb2EsIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVh
Z2VyPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYSgpOwotICAgIH5BdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckNvY29hKCk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXIKLSAgICB2b2lkIHB1c2hTYW1wbGVzKGNvbnN0IFdURjo6TWVkaWFUaW1lJiwg
Y29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmLCBjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwg
c2l6ZV90KSBmaW5hbDsKLSAgICB2b2lkIHN0YXJ0KCkgZmluYWw7Ci0gICAgdm9pZCBzdG9wKCkg
ZmluYWw7Ci0gICAgdm9pZCBjbGVhcigpIGZpbmFsOwotICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0
KSBmaW5hbDsKLSAgICB2b2lkIHNldEF1ZGlvT3V0cHV0RGV2aWNlKGNvbnN0IFN0cmluZyYpIGZp
bmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4gbV9v
dXRwdXREZXNjcmlwdGlvbjsKLSAgICBSZWZQdHI8QXVkaW9TYW1wbGVEYXRhU291cmNlPiBtX2Rh
dGFTb3VyY2U7Ci0gICAgYm9vbCBtX3Nob3VsZFJlc2V0IHsgZmFsc2UgfTsKLX07Ci0KLX0KLQot
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJV
bml0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhODIwMmY0OTUwMGJjNTEzMDVjNWMxYzIxNTk5ZDFlMzhhYTk4MDAzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Lmgi
Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiQXVkaW9TYW1wbGVEYXRh
U291cmNlLmgiCi0jaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCi0jaW5jbHVkZSAiQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotCi0jaW5jbHVkZSA8cGFs
L3NwaS9jb2NvYS9BdWRpb1Rvb2xib3hTUEkuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRl
ICJDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmgiCi0jaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZURl
dmljZU1hbmFnZXIuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8cGFsL2NmL0NvcmVNZWRpYVNvZnRM
aW5rLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJVbml0JiBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNpbmdsZXRvbigp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyVW5pdD4gcmVnaXN0cnk7Ci0gICAgcmV0dXJuIHJlZ2lzdHJ5OwotfQotCi1BdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6On5BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVu
aXQoKQotewotICAgIHN0b3AoKTsKLX0KLQotdm9pZCBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlclVuaXQ6OnNldEF1ZGlvT3V0cHV0RGV2aWNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQpCi17
Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGF1dG8gZGV2aWNlID0gQ29yZUF1ZGlvQ2FwdHVyZURl
dmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLmNvcmVBdWRpb0RldmljZVdpdGhVSUQoZGV2aWNlSUQp
OwotCi0gICAgaWYgKCFkZXZpY2UgJiYgIWRldmljZUlELmlzRW1wdHkoKSkgewotICAgICAgICBS
RUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnNl
dEF1ZGlvT3V0cHV0RGV2aWNlSWQgLSBkaWQgbm90IGZpbmQgZGV2aWNlIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGF1ZGlvVW5pdERldmljZUlEID0gZGV2aWNlID8gZGV2
aWNlLT5kZXZpY2VJRCgpIDogMDsKLSAgICBpZiAobV9kZXZpY2VJRCA9PSBhdWRpb1VuaXREZXZp
Y2VJRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBzaG91bGRSZXN0YXJ0ID0gbV9pc1N0
YXJ0ZWQ7Ci0gICAgaWYgKG1faXNTdGFydGVkKQotICAgICAgICBzdG9wKCk7Ci0KLSAgICBtX2Rl
dmljZUlEID0gYXVkaW9Vbml0RGV2aWNlSUQ7Ci0KLSAgICBpZiAoc2hvdWxkUmVzdGFydCkKLSAg
ICAgICAgc3RhcnQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRldmljZUlEKTsKLSNlbmRp
ZgotfQotCi12b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6YWRkU291cmNl
KFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+JiYgc291cmNlKQotewotICAgIFJFTEVBU0VfTE9H
KFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6YWRkU291cmNlIik7
Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zb3VyY2VzTG9jayk7
Ci0gICAgICAgIEFTU0VSVCghbV9zb3VyY2VzLmNvbnRhaW5zKHNvdXJjZS5nZXQoKSkpOwotICAg
ICAgICBtX3NvdXJjZXMuYWRkKFdURk1vdmUoc291cmNlKSk7Ci0gICAgICAgIG1fc291cmNlc0Nv
cHkgPSBjb3B5VG9WZWN0b3IobV9zb3VyY2VzKTsKLSAgICAgICAgbV9zaG91bGRVcGRhdGVSZW5k
ZXJTb3VyY2VzID0gdHJ1ZTsKLSAgICB9Ci0gICAgc3RhcnQoKTsKLX0KLQotdm9pZCBBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnJlbW92ZVNvdXJjZShBdWRpb1NhbXBsZURhdGFT
b3VyY2UmIHNvdXJjZSkKLXsKLSAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnJlbW92ZVNvdXJjZSIpOwotCi0gICAgYm9vbCBzaG91bGRT
dG9wID0gZmFsc2U7Ci0gICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc291
cmNlc0xvY2spOwotICAgICAgICBtX3NvdXJjZXMucmVtb3ZlKHNvdXJjZSk7Ci0gICAgICAgIHNo
b3VsZFN0b3AgPSBtX3NvdXJjZXMuaXNFbXB0eSgpOwotICAgICAgICBtX3NvdXJjZXNDb3B5ID0g
Y29weVRvVmVjdG9yKG1fc291cmNlcyk7Ci0gICAgICAgIG1fc2hvdWxkVXBkYXRlUmVuZGVyU291
cmNlcyA9IHRydWU7Ci0gICAgfQotICAgIGlmIChzaG91bGRTdG9wKQotICAgICAgICBzdG9wKCk7
Ci19Ci0KLXZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzdGFydCgpCi17
Ci0gICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJV
bml0OjpzdGFydCIpOwotCi0gICAgaWYgKG1faXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpOwotICAgIGlmICghbV9yZW1vdGVJT1VuaXQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIGVycm9yID0gQXVkaW9PdXRwdXRVbml0
U3RhcnQobV9yZW1vdGVJT1VuaXQpKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFdlYlJU
QywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6c3RhcnQgQXVkaW9PdXRwdXRV
bml0U3RhcnQgZmFpbGVkLCBlcnJvciA9ICVkIiwgZXJyb3IpOwotICAgICAgICBBdWRpb0NvbXBv
bmVudEluc3RhbmNlRGlzcG9zZShtX3JlbW90ZUlPVW5pdCk7Ci0gICAgICAgIG1fcmVtb3RlSU9V
bml0ID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOwotICAgIFJFTEVB
U0VfTE9HKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCBpcyBzdGFy
dGVkIik7Ci19Ci0KLXZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpzdG9w
KCkKLXsKLSAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlclVuaXQ6OnN0b3AiKTsKLQotICAgIGlmICghbV9yZW1vdGVJT1VuaXQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2lzU3RhcnRlZCkgewotICAgICAgICBBdWRpb091dHB1dFVuaXRT
dG9wKG1fcmVtb3RlSU9Vbml0KTsKLSAgICAgICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZShtX3JlbW90ZUlPVW5pdCk7Ci0g
ICAgbV9yZW1vdGVJT1VuaXQgPSBudWxscHRyOwotfQotCi1DQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24qIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Zm9ybWF0RGVzY3JpcHRpb24o
KQotewotICAgIGNyZWF0ZUF1ZGlvVW5pdElmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIG1fb3V0cHV0
RGVzY3JpcHRpb24uZ2V0KCk7Ci19Ci0KLXZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJVbml0OjpjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpCi17Ci0gICAgQVNTRVJUKCFtX3JlbW90
ZUlPVW5pdCB8fCBtX291dHB1dERlc2NyaXB0aW9uKTsKLSAgICBpZiAobV9yZW1vdGVJT1VuaXQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBvdXRwdXRE
ZXNjcmlwdGlvbjsKLSAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlIHJlbW90ZUlPVW5pdCB7IG51
bGxwdHIgfTsKLQotICAgIEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gaW9Vbml0RGVzY3JpcHRp
b24geyBrQXVkaW9Vbml0VHlwZV9PdXRwdXQsIDAsIGtBdWRpb1VuaXRNYW51ZmFjdHVyZXJfQXBw
bGUsIDAsIDAgfTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlvVW5pdERlc2NyaXB0
aW9uLmNvbXBvbmVudFN1YlR5cGUgPSBrQXVkaW9Vbml0U3ViVHlwZV9SZW1vdGVJTzsKLSNlbHNl
Ci0gICAgaW9Vbml0RGVzY3JpcHRpb24uY29tcG9uZW50U3ViVHlwZSA9IGtBdWRpb1VuaXRTdWJU
eXBlX0RlZmF1bHRPdXRwdXQ7Ci0jZW5kaWYKLQotICAgIEF1ZGlvQ29tcG9uZW50IGlvQ29tcG9u
ZW50ID0gQXVkaW9Db21wb25lbnRGaW5kTmV4dChudWxscHRyLCAmaW9Vbml0RGVzY3JpcHRpb24p
OwotICAgIEFTU0VSVChpb0NvbXBvbmVudCk7Ci0gICAgaWYgKCFpb0NvbXBvbmVudCkgewotICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdCB1bmFibGUgdG8gZmluZCByZW1vdGUgSU8gdW5pdCBj
b21wb25lbnQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gZXJyb3IgPSBB
dWRpb0NvbXBvbmVudEluc3RhbmNlTmV3KGlvQ29tcG9uZW50LCAmcmVtb3RlSU9Vbml0KTsKLSAg
ICBpZiAoZXJyb3IpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIG9w
ZW4gdnBpbyB1bml0LCBlcnJvciA9ICVkIiwgZXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBVSW50MzIgcGFyYW0gPSAxOwotICAg
IGVycm9yID0gQXVkaW9Vbml0U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9PdXRwdXRV
bml0UHJvcGVydHlfRW5hYmxlSU8sIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIDAsICZwYXJhbSwg
c2l6ZW9mKHBhcmFtKSk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFdlYlJUQywgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdDo6Y3JlYXRlQXVk
aW9Vbml0IHVuYWJsZSB0byBlbmFibGUgdnBpbyB1bml0IG91dHB1dCwgZXJyb3IgPSAlZCIsIGVy
cm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFD
KQotICAgIGlmIChtX2RldmljZUlEKSB7Ci0gICAgICAgIGVycm9yID0gQXVkaW9Vbml0U2V0UHJv
cGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmlj
ZSwga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgMCwgJm1fZGV2aWNlSUQsIHNpemVvZihtX2Rldmlj
ZUlEKSk7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpjcmVhdGVBdWRp
b1VuaXQgdW5hYmxlIHRvIHNldCB1bml0IGRldmljZSBJRCAlZCwgZXJyb3IgJWQgKCUuNHMpIiwg
KGludCltX2RldmljZUlELCAoaW50KWVycm9yLCAoY2hhciopJmVycm9yKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgQVVSZW5kZXJDYWxsYmFj
a1N0cnVjdCBjYWxsYmFjayA9IHsgcmVuZGVyaW5nQ2FsbGJhY2ssIHRoaXMgfTsKLSAgICBlcnJv
ciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KHJlbW90ZUlPVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5
X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCAwLCAmY2FsbGJhY2ss
IHNpemVvZihjYWxsYmFjaykpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihXZWJSVEMsICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0
ZUF1ZGlvVW5pdCB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBzcGVha2VyIHByb2MsIGVycm9yID0g
JWQiLCBlcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBVSW50MzIgc2l6ZSA9
IHNpemVvZihvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1EZXNjcmlwdGlvbigpKTsKLSAgICBlcnJv
ciAgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShyZW1vdGVJT1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0
eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgJm91dHB1dERlc2NyaXB0
aW9uLnN0cmVhbURlc2NyaXB0aW9uKCksICZzaXplKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoV2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJVbml0OjpjcmVhdGVBdWRpb1VuaXQgdW5hYmxlIHRvIGdldCBpbnB1dCBzdHJlYW0gZm9ybWF0
LCBlcnJvciA9ICVkIiwgZXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgb3V0
cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24oKS5tU2FtcGxlUmF0ZSA9IEF1ZGlvU2Vz
c2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNhbXBsZVJhdGUoKTsKLQotICAgIGVycm9yID0gQXVkaW9V
bml0U2V0UHJvcGVydHkocmVtb3RlSU9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9y
bWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZvdXRwdXREZXNjcmlwdGlvbi5zdHJlYW1E
ZXNjcmlwdGlvbigpLCBzaXplb2Yob3V0cHV0RGVzY3JpcHRpb24uc3RyZWFtRGVzY3JpcHRpb24o
KSkpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihXZWJSVEMs
ICJBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OmNyZWF0ZUF1ZGlvVW5pdCB1bmFi
bGUgdG8gc2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yID0gJWQiLCBlcnJvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlcnJvciA9IEF1ZGlvVW5pdEluaXRpYWxpemUocmVt
b3RlSU9Vbml0KTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
V2ViUlRDLCAiQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0OjpjcmVhdGVBdWRpb1Vu
aXQgQXVkaW9Vbml0SW5pdGlhbGl6ZSgpIGZhaWxlZCwgZXJyb3IgPSAlZCIsIGVycm9yKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fb3V0cHV0RGVzY3JpcHRpb24gPSBtYWtlVW5p
cXVlPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4ob3V0cHV0RGVzY3JpcHRpb24pOwotICAgIG1f
cmVtb3RlSU9Vbml0ID0gcmVtb3RlSU9Vbml0OwotfQotCi1PU1N0YXR1cyBBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnJlbmRlcihVSW50MzIgc2FtcGxlQ291bnQsIEF1ZGlvQnVm
ZmVyTGlzdCYgaW9EYXRhLCBVSW50MzIgLyppbkJ1c051bWJlciovLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCYgdGltZVN0YW1wLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgYWN0aW9uRmxhZ3Mp
Ci17Ci0gICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHdlIGZvcmJpZCBoZWFwIGFsbG9j
YXRpb25zIHdoaWxlIGRvaW5nIHJlbmRlcmluZyBvbiB0aGUgYXVkaW8gdGhyZWFkLgotICAgIEZv
cmJpZE1hbGxvY1VzZUZvckN1cnJlbnRUaHJlYWRTY29wZSBmb3JiaWRNYWxsb2NVc2U7Ci0KLSAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9zaG91bGRVcGRhdGVSZW5kZXJT
b3VyY2VzKSB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gdHJ5SG9sZExvY2sobV9zb3VyY2VzTG9j
ayk7Ci0gICAgICAgIGlmICghbG9ja2VyKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAg
ICAgbV9yZW5kZXJTb3VyY2VzID0gV1RGTW92ZShtX3NvdXJjZXNDb3B5KTsKLSAgICAgICAgbV9z
aG91bGRVcGRhdGVSZW5kZXJTb3VyY2VzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fcmVu
ZGVyU291cmNlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG1fb3V0cHV0RGVzY3JpcHRpb24p
Ci0gICAgICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoaW9EYXRhLCBzdGF0
aWNfY2FzdDxzaXplX3Q+KHNhbXBsZUNvdW50ICogbV9vdXRwdXREZXNjcmlwdGlvbi0+Ynl0ZXNQ
ZXJGcmFtZSgpKSk7Ci0gICAgICAgIGFjdGlvbkZsYWdzID0ga0F1ZGlvVW5pdFJlbmRlckFjdGlv
bl9PdXRwdXRJc1NpbGVuY2U7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIE1p
eCBhbGwgc291cmNlcy4KLSAgICBib29sIGlzRmlyc3RTb3VyY2UgPSB0cnVlOwotICAgIGZvciAo
YXV0byYgc291cmNlIDogbV9yZW5kZXJTb3VyY2VzKSB7Ci0gICAgICAgIHNvdXJjZS0+cHVsbFNh
bXBsZXMoaW9EYXRhLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNhbXBsZUNvdW50KSwgdGltZVN0YW1w
Lm1TYW1wbGVUaW1lLCB0aW1lU3RhbXAubUhvc3RUaW1lLCBpc0ZpcnN0U291cmNlID8gQXVkaW9T
YW1wbGVEYXRhU291cmNlOjpDb3B5IDogQXVkaW9TYW1wbGVEYXRhU291cmNlOjpNaXgpOwotICAg
ICAgICBpc0ZpcnN0U291cmNlID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1P
U1N0YXR1cyBBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlclVuaXQ6OnJlbmRlcmluZ0NhbGxi
YWNrKHZvaWQqIHByb2Nlc3NvciwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqIGFjdGlvbkZs
YWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogdGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIs
IFVJbnQzMiBzYW1wbGVDb3VudCwgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCo+KHByb2Nl
c3NvciktPnJlbmRlcihzYW1wbGVDb3VudCwgKmlvRGF0YSwgaW5CdXNOdW1iZXIsICp0aW1lU3Rh
bXAsICphY3Rpb25GbGFncyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJVbml0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZTA2
M2ZmZmEyZDQ3MTNjNzNiNThkNjcyODBiZTdhYmVjMDlmM2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdC5oCisrKyAvZGV2L251
bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb1Rvb2xib3gu
aD4KLSNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZTsKLWNsYXNzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDsKLWNsYXNzIENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbjsKLQotY2xhc3MgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0JiBzaW5n
bGV0b24oKTsKLQotICAgIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyVW5pdCgpID0gZGVm
YXVsdDsKLSAgICB+QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJVbml0KCk7Ci0KLSAgICBz
dGF0aWMgT1NTdGF0dXMgcmVuZGVyaW5nQ2FsbGJhY2sodm9pZCosIEF1ZGlvVW5pdFJlbmRlckFj
dGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJ
bnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0Kik7Ci0KLSAgICB2b2lkIHN0YXJ0
KCk7Ci0gICAgdm9pZCBzdG9wKCk7Ci0KLSAgICB2b2lkIHNldEF1ZGlvT3V0cHV0RGV2aWNlKGNv
bnN0IFN0cmluZyYpOwotCi0gICAgdm9pZCBhZGRTb3VyY2UoUmVmPEF1ZGlvU2FtcGxlRGF0YVNv
dXJjZT4mJik7Ci0gICAgdm9pZCByZW1vdmVTb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJik7
Ci0KLSAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24qIGZvcm1hdERlc2NyaXB0aW9uKCk7Ci0K
LXByaXZhdGU6Ci0gICAgdm9pZCBjcmVhdGVBdWRpb1VuaXRJZk5lZWRlZCgpOwotICAgIE9TU3Rh
dHVzIHJlbmRlcihVSW50MzIgc2FtcGxlQ291bnQsIEF1ZGlvQnVmZmVyTGlzdCYsIFVJbnQzMiBp
bkJ1c051bWJlciwgY29uc3QgQXVkaW9UaW1lU3RhbXAmLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25G
bGFncyYpOwotCi0gICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZSBtX3JlbW90ZUlPVW5pdCB7IG51
bGxwdHIgfTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPiBt
X291dHB1dERlc2NyaXB0aW9uOwotICAgIEhhc2hTZXQ8UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZT4+IG1fc291cmNlczsKLSAgICBWZWN0b3I8UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+IG1f
c291cmNlc0NvcHk7Ci0gICAgVmVjdG9yPFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+PiBtX3Jl
bmRlclNvdXJjZXM7Ci0gICAgYm9vbCBtX3Nob3VsZFVwZGF0ZVJlbmRlclNvdXJjZXMgeyBmYWxz
ZSB9OwotICAgIExvY2sgbV9zb3VyY2VzTG9jazsKLSAgICBib29sIG1faXNTdGFydGVkIHsgZmFs
c2UgfTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgdWludDMyX3QgbV9kZXZpY2VJRCB7IDAgfTsK
LSNlbmRpZgotfTsKLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9S
ZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5jcHAKaW5kZXggYThmOWE4ODJkNGYx
ZmFkMzA2ODRkNTYwYzdhM2UzY2FmYWI0N2FlYi4uZWViYzhjNzIyMGMwOWI1ODk1NTcxMDE2MzY2
ZmRjYzVkZDc3N2I5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0
Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ci5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXI6On5SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcigpCiAKIHZvaWQgUmVtb3Rl
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6OnN0YXJ0KCkKIHsKLSAgICBtX3JlbmRlcmVy
LT5zdGFydCgpOworICAgIG1fcmVuZGVyZXItPnN0YXJ0KFtdIHsgfSk7CiB9CiAKIHZvaWQgUmVt
b3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6OnN0b3AoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXIuY3BwCmluZGV4IDZiOWIwNjRiZGJkZWNiM2Y0MDhkNjU5ZWE0
NTQxNTI3YmRiNjdkOGYuLjA3OGEwMmZkOTM2NzVkZjMyNDQzZWE2NDI5MTlhNTllMWIzY2I4YTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0F1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL3dlYnJ0Yy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5jcHAKQEAgLTY0LDEwICs2
NCwxMSBAQCB2b2lkIEF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyOjppbml0aWFsaXplKCkK
ICAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyTWFuYWdlcjo6Q3JlYXRlUmVuZGVyZXIgeyBtX2lkZW50aWZpZXIgfSwgMCk7
CiB9CiAKLXZvaWQgQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6OnN0YXJ0KCkKK3ZvaWQg
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6OnN0YXJ0KENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjYWxsYmFjaykKIHsKICAgICBtX2lzUGxheWluZyA9IHRydWU7CiAgICAgbV9jb25u
ZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
cjo6U3RhcnQgeyB9LCBtX2lkZW50aWZpZXIpOworICAgIGNhbGxiYWNrKCk7CiB9CiAKIHZvaWQg
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6OnN0b3AoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0F1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyLmgKaW5kZXggOTllNDljNzc4MDhlMjBjNDcyMjg2YmQyZDFhZWQwODY5
NzIyYTljNS4uNzA4NjlhMWY1YTRkOWYxMzg5Njg1YjI4ZjY4Yjc0NGViMGU4YTA2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0
Yy9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlci5oCkBAIC01NCw3ICs1NCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzdG9yYWdlQ2hhbmdlZChTaGFyZWRNZW1vcnkqLCBjb25zdCBXZWJDb3Jl
OjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGZvcm1hdCwgc2l6ZV90IGZyYW1lQ291bnQpOwog
CiAgICAgLy8gV2ViQ29yZTo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIKLSAgICB2b2lk
IHN0YXJ0KCkgZmluYWw7CisgICAgdm9pZCBzdGFydChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpIGZpbmFsOwogICAgIHZvaWQgc3RvcCgpIGZpbmFsOwogICAgIHZvaWQgY2xlYXIoKSBmaW5h
bDsKICAgICB2b2lkIHNldFZvbHVtZShmbG9hdCkgZmluYWw7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>