<?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>221608</bug_id>
          
          <creation_ts>2021-02-09 06:59:39 -0800</creation_ts>
          <short_desc>Split RemoteRealtimeMediaSource in two audio-specific and video-specific classes</short_desc>
          <delta_ts>2021-02-11 03:09:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1727034</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-02-09 06:59:39 -0800</bug_when>
    <thetext>Split RemoteRealtimeMediaSource in two audio-specific and video-specific classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727035</commentid>
    <comment_count>1</comment_count>
      <attachid>419711</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-02-09 07:02:53 -0800</bug_when>
    <thetext>Created attachment 419711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727068</commentid>
    <comment_count>2</comment_count>
      <attachid>419725</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-02-09 08:48:24 -0800</bug_when>
    <thetext>Created attachment 419725
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727554</commentid>
    <comment_count>3</comment_count>
      <attachid>419725</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-02-10 08:53:12 -0800</bug_when>
    <thetext>Comment on attachment 419725
Patch

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

&gt; Source/WebKit/WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:131
&gt; +void RemoteRealtimeAudioSource::whenReady(CompletionHandler&lt;void(String)&gt;&amp;&amp; callback)
&gt; +{
&gt; +    if (m_isReady)
&gt; +        return callback(WTFMove(m_errorMessage));
&gt; +    m_callback = WTFMove(callback);
&gt; +}
&gt; +
&gt; +void RemoteRealtimeAudioSource::didFail(String&amp;&amp; errorMessage)
&gt; +{
&gt; +    m_isReady = true;
&gt; +    m_errorMessage = WTFMove(errorMessage);
&gt; +    if (m_callback)
&gt; +        m_callback(m_errorMessage);
&gt; +}
&gt; +
&gt; +void RemoteRealtimeAudioSource::setAsReady()
&gt; +{
&gt; +    m_isReady = true;
&gt; +    if (m_callback)
&gt; +        m_callback({ });
&gt; +}
&gt; +
&gt; +void RemoteRealtimeAudioSource::setCapabilities(RealtimeMediaSourceCapabilities&amp;&amp; capabilities)
&gt; +{
&gt; +    m_capabilities = WTFMove(capabilities);
&gt; +}
&gt; +
&gt; +void RemoteRealtimeAudioSource::setSettings(RealtimeMediaSourceSettings&amp;&amp; settings)
&gt; +{
&gt; +    auto changed = m_settings.difference(settings);
&gt; +    m_settings = WTFMove(settings);
&gt; +    notifySettingsDidChangeObservers(changed);
&gt; +}
&gt; +

These methods are identical in the Audio and Video classes, can they be moved into a base class?

&gt; Source/WebKit/WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:182
&gt; +IPC::Connection* RemoteRealtimeAudioSource::connection()
&gt; +{
&gt; +    ASSERT(isMainThread());
&gt; +#if ENABLE(GPU_PROCESS)
&gt; +    if (m_shouldCaptureInGPUProcess)
&gt; +        return &amp;WebProcess::singleton().ensureGPUProcessConnection().connection();
&gt; +#endif
&gt; +    return WebProcess::singleton().parentProcessConnection();
&gt; +}
&gt; +
&gt; +void RemoteRealtimeAudioSource::startProducingData()
&gt; +{
&gt; +    connection()-&gt;send(Messages::UserMediaCaptureManagerProxy::StartProducingData { m_identifier }, 0);
&gt; +}
&gt; +
&gt; +void RemoteRealtimeAudioSource::stopProducingData()
&gt; +{
&gt; +    connection()-&gt;send(Messages::UserMediaCaptureManagerProxy::StopProducingData { m_identifier }, 0);
&gt; +}
&gt; +
&gt; +const WebCore::RealtimeMediaSourceCapabilities&amp; RemoteRealtimeAudioSource::capabilities()
&gt; +{
&gt; +    return m_capabilities;
&gt; +}
&gt; +
&gt; +void RemoteRealtimeAudioSource::applyConstraints(const MediaConstraints&amp; constraints, ApplyConstraintsHandler&amp;&amp; completionHandler)
&gt; +{
&gt; +    m_pendingApplyConstraintsCallbacks.append(WTFMove(completionHandler));
&gt; +    // FIXME: Use sendAsyncWithReply.
&gt; +    connection()-&gt;send(Messages::UserMediaCaptureManagerProxy::ApplyConstraints { m_identifier, constraints }, 0);
&gt; +}
&gt; +
&gt; +void RemoteRealtimeAudioSource::applyConstraintsSucceeded(RealtimeMediaSourceSettings&amp;&amp; settings)
&gt; +{
&gt; +    setSettings(WTFMove(settings));
&gt; +
&gt; +    auto callback = m_pendingApplyConstraintsCallbacks.takeFirst();
&gt; +    callback({ });
&gt; +}
&gt; +
&gt; +void RemoteRealtimeAudioSource::applyConstraintsFailed(String&amp;&amp; failedConstraint, String&amp;&amp; errorMessage)
&gt; +{
&gt; +    auto callback = m_pendingApplyConstraintsCallbacks.takeFirst();
&gt; +    callback(ApplyConstraintsError { WTFMove(failedConstraint), WTFMove(errorMessage) });
&gt; +}

Ditto

&gt; Source/WebKit/WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:215
&gt; +void RemoteRealtimeAudioSource::captureStopped()
&gt; +{
&gt; +    stop();
&gt; +    hasEnded();
&gt; +}
&gt; +
&gt; +void RemoteRealtimeAudioSource::captureFailed()
&gt; +{
&gt; +    RealtimeMediaSource::captureFailed();
&gt; +    hasEnded();
&gt; +}
&gt; +
&gt; +#if ENABLE(GPU_PROCESS)
&gt; +void RemoteRealtimeAudioSource::gpuProcessConnectionDidClose(GPUProcessConnection&amp;)
&gt; +{
&gt; +    ASSERT(m_shouldCaptureInGPUProcess);
&gt; +    if (isEnded())
&gt; +        return;
&gt; +
&gt; +    m_manager.remoteCaptureSampleManager().didUpdateSourceConnection(*this);
&gt; +    createRemoteMediaSource();
&gt; +    // FIXME: We should update the track according current settings.
&gt; +    if (isProducingData())
&gt; +        startProducingData();
&gt; +}

Ditto.

&gt; Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp:118
&gt; +    if (auto source = m_audioSources.get(id))
&gt;          source-&gt;captureStopped();
&gt; +    else if (auto source = m_videoSources.get(id))
&gt; +        source-&gt;captureStopped();

This pattern is used in enough places this it would be good to have a method that returned the source given an identifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728018</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-02-11 03:02:49 -0800</bug_when>
    <thetext>I will look at sharing more code in a follow-up patch since the plan is for RemoteRealtimeVideoSource to become a RealtimeVideoCaptureSource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728020</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-11 03:08:27 -0800</bug_when>
    <thetext>Committed r272719: &lt;https://commits.webkit.org/r272719&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 419725.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728022</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-11 03:09:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/74227645&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419711</attachid>
            <date>2021-02-09 07:02:53 -0800</date>
            <delta_ts>2021-02-09 08:48:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221608-20210209160251.patch</filename>
            <type>text/plain</type>
            <size>72821</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYzMTkwYmQxZDJmYTUxYjQ5
NzcyMzhhODU4OWZiNjA0YTUyZDM0YzAuLjEyN2E2MDViZjZlYzU0NjVlNzQyNmNhYTAyYzcxNGU1
YWZkYzk2Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTQgQEAKKzIwMjEtMDItMDkgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFJlbW90ZVJlYWx0aW1l
TWVkaWFTb3VyY2UgaW4gdHdvIGF1ZGlvLXNwZWNpZmljIGFuZCB2aWRlby1zcGVjaWZpYyBjbGFz
c2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE2
MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxp
dCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlIGluIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2Ug
YW5kIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2UuCisgICAgICAgIFRoaXMgd2lsbCBhbGxvdyBS
ZW1vdGVSZWFsdGltZVZpZGVvU291cmNlIHRvIGJlY29tZSBhIFJlYWx0aW1lVmlkZW9DYXB0dXJl
U291cmNlIGluIGEgZm9sbG93LXVwCisgICAgICAgIHRvIHByb3Blcmx5IGhhbmRsZSBmYW4tb3V0
IHRvIG11bHRpcGxlIGNsb25lcyB3aXRoIHZhcmlvdXMgZnJhbWUgcmF0ZXMgYW5kIHJlc29sdXRp
b25zLgorICAgICAgICBUaGlzIGFsc28gYWxsb3dzIHJlbW92aW5nIGRpZmZlcmVuY2VzIG9mIGJl
aGF2aW9ycyBiZXR3ZWVuIGF1ZGlvIGFuZCB2aWRlbyBjbGFzc2VzLgorCisgICAgICAgIE5vIGNo
YW5nZSBvZiBiZWhhdmlvci4KKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAg
ICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vz
cy9jb2NvYS9SZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyOjphZGRTb3VyY2UpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlcjo6ZGlkVXBkYXRlU291cmNlQ29ubmVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyOjpSZW1vdGVBdWRp
bzo6UmVtb3RlQXVkaW8pOgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvUmVtb3RlQ2FwdHVy
ZVNhbXBsZU1hbmFnZXIuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0
aW1lQXVkaW9Tb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRp
bWVBdWRpb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVB
dWRpb1NvdXJjZTo6UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OmNyZWF0ZVJlbW90ZU1lZGlhU291cmNlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6flJlbW90ZVJlYWx0aW1l
QXVkaW9Tb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNl
Ojp3aGVuUmVhZHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNl
OjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6
c2V0QXNSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6
OnNldENhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lQXVkaW9T
b3VyY2U6OnNldFNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVBdWRp
b1NvdXJjZTo6cmVtb3RlQXVkaW9TYW1wbGVzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6Y29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6Y2FwYWJpbGl0aWVz
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6YXBwbHlDb25z
dHJhaW50cyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OmFw
cGx5Q29uc3RyYWludHNTdWNjZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZWFsdGlt
ZUF1ZGlvU291cmNlOjphcHBseUNvbnN0cmFpbnRzRmFpbGVkKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6aGFzRW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlOjpjYXB0dXJlU3RvcHBlZCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OmNhcHR1cmVGYWlsZWQpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlOjpncHVQcm9jZXNzQ29ubmVjdGlvbkRp
ZENsb3NlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0aW1lQXVkaW9T
b3VyY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90
ZVJlYWx0aW1lTWVkaWFTb3VyY2UuaC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVB
dWRpb1NvdXJjZTo6aWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2Nv
YS9SZW1vdGVSZWFsdGltZVZpZGVvU291cmNlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZU1lZGlhU291cmNlLmNwcC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6UmVtb3RlUmVhbHRpbWVWaWRlb1Nv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmNyZWF0
ZVJlbW90ZU1lZGlhU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVWaWRl
b1NvdXJjZTo6flJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjp3aGVuUmVhZHkpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0QXNSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmNsb25lKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0Q2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0U2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpyZW1vdGVWaWRlb1NhbXBsZUF2YWlsYWJsZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmNvbm5lY3Rpb24p
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpzdGFydFByb2R1
Y2luZ0RhdGEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpz
dG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lVmlkZW9T
b3VyY2U6OnNldFNob3VsZEFwcGx5Um90YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZWFsdGltZVZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZWFsdGltZVZpZGVvU291cmNlOjphcHBseUNvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6YXBwbHlDb25zdHJhaW50c1N1Y2NlZWRlZCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmFwcGx5Q29uc3Ry
YWludHNGYWlsZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZWFsdGltZVZpZGVvU291cmNl
OjpoYXNFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6
OmNhcHR1cmVTdG9wcGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVWaWRlb1Nv
dXJjZTo6Y2FwdHVyZUZhaWxlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lVmlk
ZW9Tb3VyY2U6OnN0b3BCZWluZ09ic2VydmVkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVh
bHRpbWVWaWRlb1NvdXJjZTo6cmVxdWVzdFRvRW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVhbHRpbWVWaWRlb1NvdXJjZTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZVZpZGVvU291cmNlLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVhbHRpbWVNZWRp
YVNvdXJjZS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvVXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6YWRk
QXVkaW9Tb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6
cmVtb3ZlQXVkaW9Tb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJlTWFu
YWdlcjo6YWRkVmlkZW9Tb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlcjo6cmVtb3ZlVmlkZW9Tb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFD
YXB0dXJlTWFuYWdlcjo6c291cmNlU3RvcHBlZCk6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyOjpzb3VyY2VFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyOjpjYXB0dXJlRmFpbGVkKToKKyAgICAgICAgKFdlYktpdDo6VXNlck1l
ZGlhQ2FwdHVyZU1hbmFnZXI6OnNvdXJjZU11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjpzb3VyY2VTZXR0aW5nc0NoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6cmVtb3RlVmlkZW9TYW1wbGVBdmFp
bGFibGUpOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6YXBwbHlD
b25zdHJhaW50c1N1Y2NlZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyOjphcHBseUNvbnN0cmFpbnRzRmFpbGVkKToKKyAgICAgICAgKFdlYktpdDo6VXNlck1l
ZGlhQ2FwdHVyZU1hbmFnZXI6OkF1ZGlvRmFjdG9yeTo6Y3JlYXRlQXVkaW9DYXB0dXJlU291cmNl
KToKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6OlZpZGVvRmFjdG9y
eTo6Y3JlYXRlVmlkZW9DYXB0dXJlU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXI6OkRpc3BsYXlGYWN0b3J5OjpjcmVhdGVEaXNwbGF5Q2FwdHVyZVNvdXJj
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5o
OgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6cmVtb3RlQ2FwdHVy
ZVNhbXBsZU1hbmFnZXIpOgorCiAyMDIxLTAyLTA4ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFw
cGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgR1BVIFdlYlJUQyBjb2RlY3MgaW4gR1BVUHJvY2Vz
cyBieSBkZWZhdWx0IG9uIGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29j
b2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDRkZjM0NDM1NWVh
NGExM2VhZTk5MzdjYzVkY2EzNjI2ZjBmODA5NTguLmY2ODY5YzVkZGQzZGRlNTA4ZGRjZGU3ZmIx
YjhkZmU4Y2ZkZWVhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTU4Myw3ICs1ODMsOCBA
QCBXZWJQcm9jZXNzL0FwcGxlUGF5L2NvY29hL1dlYlBheW1lbnRDb29yZGluYXRvckNvY29hLm1t
CiAKIFdlYlByb2Nlc3MvY29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlci5tbQogV2ViUHJvY2Vz
cy9jb2NvYS9SZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlci5jcHAKLVdlYlByb2Nlc3MvY29jb2Ev
UmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKK1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVh
bHRpbWVBdWRpb1NvdXJjZS5jcHAKK1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVhbHRpbWVWaWRl
b1NvdXJjZS5jcHAKIFdlYlByb2Nlc3MvY29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuY3Bw
CiBXZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KIFdlYlByb2Nlc3Mv
Y29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3ZTAwNzJjM2I2ODA4NGQ2YmMyNjI2YjkwNWQzMDJk
NzAwZWZlMjE5Li5jMzE4NDNlZTM2MTZhNzYxNjI5MGZiNGJkMmRiMTA1ZDg3MDgzNmYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM2
ODAsOCArMzY4MCw4IEBACiAJCTQxNjg0QzREMjQ2NDNCRkEwMDFDRThFRCAvKiBSZW1vdGVDYXB0
dXJlU2FtcGxlTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1v
dGVDYXB0dXJlU2FtcGxlTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDE2ODRDNEUyNDY0M0M4MTAwMUNFOEVEIC8qIFJlbW90ZUNhcHR1cmVTYW1wbGVN
YW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUNhcHR1cmVT
YW1wbGVNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNjg0QzRGMjQ2
NDNEM0YwMDFDRThFRCAvKiBSZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxNjg0QzUwMjQ2NDUwRkQwMDFDRThF
RCAvKiBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0MTY4NEM1MTI0NjQ1MEZEMDAxQ0U4RUQgLyogUmVtb3RlUmVh
bHRpbWVNZWRpYVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dGVSZWFsdGltZU1lZGlhU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQx
Njg0QzUwMjQ2NDUwRkQwMDFDRThFRCAvKiBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlYWx0aW1lVmlkZW9T
b3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTY4NEM1MTI0NjQ1MEZE
MDAxQ0U4RUQgLyogUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxNkNENzQ1MjNGQjE3OEIwMDY2MUQ5OSAvKiBNRE5TUmVnaXN0
ZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1ETlNSZWdp
c3RlcklkZW50aWZpZXIuaDsgcGF0aCA9IE5ldHdvcmsvd2VicnRjL01ETlNSZWdpc3RlcklkZW50
aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RjgwODYyNDVCMzk3NDAw
QjY4RjAyIC8qIExpYldlYlJUQ05ldHdvcmsubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gTGliV2ViUlRDTmV0d29yay5tZXNzYWdlcy5pbjsgcGF0aCA9IE5ldHdvcmsvd2VicnRj
L0xpYldlYlJUQ05ldHdvcmsubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxNkY4MDg5MjQ1QzdGRjUwMEI2OEYwMiAvKiBMaWJXZWJSVENOZXR3b3JrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExpYldlYlJUQ05ldHdvcmsuY3BwOyBw
YXRoID0gTmV0d29yay93ZWJydGMvTGliV2ViUlRDTmV0d29yay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zNzUxLDYgKzM3NTEsOCBAQAogCQk0MUUwQTdDNjIzQjYzOTc4MDA1
NjEwNjAgLyogTGliV2ViUlRDQ29kZWNzUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGliV2ViUlRD
Q29kZWNzUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFFMEE3QzcyM0I2
Mzk3OTAwNTYxMDYwIC8qIExpYldlYlJUQ0NvZGVjc1Byb3h5Lm1lc3NhZ2VzLmluICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IExp
YldlYlJUQ0NvZGVjc1Byb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MUUwQTdDODIzQjYzOTc5MDA1NjEwNjAgLyogTGliV2ViUlRDQ29kZWNzUHJveHkubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMaWJXZWJSVENDb2RlY3NQcm94eS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFFNjdBOEMyNUQyQ0ZEMDAwN0IwQTRDIC8qIFJlbW90ZVJl
YWx0aW1lQXVkaW9Tb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVhbHRpbWVBdWRpb1Nv
dXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUU2N0E4RDI1RDJDRkQwMDA3
QjBBNEMgLyogUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDFGMDYwREQxNjU0MzE3NTAwRjMyODFDIC8qIFdlYlNvY2tldENoYW5uZWxNZXNzYWdl
UmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU29ja2V0Q2hhbm5lbE1lc3NhZ2VS
ZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlNvY2tldENoYW5u
ZWxNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQk0MUY5RkQxODIzRUQ4QTgxMDA5OUI1NzkgLyogTGliV2ViUlRDUmVzb2x2ZXJJZGVudGlm
aWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpYldlYlJUQ1Jlc29sdmVy
SWRlbnRpZmllci5oOyBwYXRoID0gTmV0d29yay93ZWJydGMvTGliV2ViUlRDUmVzb2x2ZXJJZGVu
dGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRkFCRDI4MUY0RERGREMw
MDZBNkM5NyAvKiBDYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTA0MCw4ICs5MDQyLDEwIEBACiAJCQkJNDE2ODRDNEYyNDY0M0QzRjAw
MUNFOEVEIC8qIFJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyLmNwcCAqLywKIAkJCQk0MTY4NEM0
RTI0NjQzQzgxMDAxQ0U4RUQgLyogUmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXIuaCAqLywKIAkJ
CQk0MTY4NEM0RDI0NjQzQkZBMDAxQ0U4RUQgLyogUmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXIu
bWVzc2FnZXMuaW4gKi8sCi0JCQkJNDE2ODRDNTAyNDY0NTBGRDAwMUNFOEVEIC8qIFJlbW90ZVJl
YWx0aW1lTWVkaWFTb3VyY2UuY3BwICovLAotCQkJCTQxNjg0QzUxMjQ2NDUwRkQwMDFDRThFRCAv
KiBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlLmggKi8sCisJCQkJNDFFNjdBOEQyNUQyQ0ZEMDAw
N0IwQTRDIC8qIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwICovLAorCQkJCTQxRTY3QThD
MjVEMkNGRDAwMDdCMEE0QyAvKiBSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlLmggKi8sCisJCQkJ
NDE2ODRDNTAyNDY0NTBGRDAwMUNFOEVEIC8qIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2UuY3Bw
ICovLAorCQkJCTQxNjg0QzUxMjQ2NDUwRkQwMDFDRThFRCAvKiBSZW1vdGVSZWFsdGltZVZpZGVv
U291cmNlLmggKi8sCiAJCQkJQ0Q0OTFCMDUxRTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNh
cHR1cmVNYW5hZ2VyLmNwcCAqLywKIAkJCQlDRDQ5MUIwNjFFNzBEMDVGMDAwMDkwNjYgLyogVXNl
ck1lZGlhQ2FwdHVyZU1hbmFnZXIuaCAqLywKIAkJCQlDRDQ5MUIwQTFFNzMyRDEyMDAwMDkwNjYg
LyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZUNhcHR1cmVTYW1wbGVN
YW5hZ2VyLmNwcAppbmRleCBmYWM0ZWMxMTEyNzA3MGZmMTQyZTU0YTJlZWNmOTI5OTJlODlhODhh
Li5jZjFhZjEwOTg5OWM1OTlkN2E5ZGVlYzkwNjhlNGExZjU2OTg2NTE4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVDYXB0dXJlU2Ft
cGxlTWFuYWdlci5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBSZW1vdGVDYXB0dXJlU2FtcGxl
TWFuYWdlcjo6c2V0Q29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiAgICAg
ICAgIG1fY29ubmVjdGlvbi0+YWRkVGhyZWFkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1v
dGVDYXB0dXJlU2FtcGxlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCB0aGlzKTsKIH0K
IAotdm9pZCBSZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlcjo6YWRkU291cmNlKFJlZjxSZW1vdGVS
ZWFsdGltZU1lZGlhU291cmNlPiYmIHNvdXJjZSkKK3ZvaWQgUmVtb3RlQ2FwdHVyZVNhbXBsZU1h
bmFnZXI6OmFkZFNvdXJjZShSZWY8UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZT4mJiBzb3VyY2Up
CiB7CiAgICAgQVNTRVJUKFdURjo6aXNNYWluUnVuTG9vcCgpKTsKICAgICBzZXRDb25uZWN0aW9u
KHNvdXJjZS0+Y29ubmVjdGlvbigpKTsKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBSZW1vdGVDYXB0
dXJlU2FtcGxlTWFuYWdlcjo6cmVtb3ZlU291cmNlKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3Vy
Y2VJZGVudGkKICAgICB9KTsKIH0KIAotdm9pZCBSZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlcjo6
ZGlkVXBkYXRlU291cmNlQ29ubmVjdGlvbihSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlJiBzb3Vy
Y2UpCit2b2lkIFJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyOjpkaWRVcGRhdGVTb3VyY2VDb25u
ZWN0aW9uKFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2UmIHNvdXJjZSkKIHsKICAgICBBU1NFUlQo
V1RGOjppc01haW5SdW5Mb29wKCkpOwogICAgIHNldENvbm5lY3Rpb24oc291cmNlLmNvbm5lY3Rp
b24oKSk7CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBSZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdl
cjo6YXVkaW9TYW1wbGVzQXZhaWxhYmxlKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3UKICAgICBp
dGVyYXRvci0+dmFsdWUtPmF1ZGlvU2FtcGxlc0F2YWlsYWJsZSh0aW1lLCBudW1iZXJPZkZyYW1l
cyk7CiB9CiAKLVJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyOjpSZW1vdGVBdWRpbzo6UmVtb3Rl
QXVkaW8oUmVmPFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U+JiYgc291cmNlKQorUmVtb3RlQ2Fw
dHVyZVNhbXBsZU1hbmFnZXI6OlJlbW90ZUF1ZGlvOjpSZW1vdGVBdWRpbyhSZWY8UmVtb3RlUmVh
bHRpbWVBdWRpb1NvdXJjZT4mJiBzb3VyY2UpCiAgICAgOiBtX3NvdXJjZShXVEZNb3ZlKHNvdXJj
ZSkpCiAgICAgLCBtX3JpbmdCdWZmZXIobWFrZVVuaXF1ZTxDQVJpbmdCdWZmZXI+KCkpCiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlQ2FwdHVyZVNh
bXBsZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVDYXB0
dXJlU2FtcGxlTWFuYWdlci5oCmluZGV4IGE0MDk4YTk3ZDVkMTNlOWRlMzk4ZmY4ZGY4OGNmMDVi
MDU0ZWY4OWIuLmNmYTgxNWFhMmU4YjY3YmJlMGNhNGMyZTQ3ZmEzNDViM2QxZDE1ZjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVDYXB0dXJlU2FtcGxl
TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVDYXB0
dXJlU2FtcGxlTWFuYWdlci5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJDb25uZWN0
aW9uLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSAiUmVtb3RlUmVh
bHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2Uu
aCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ0FSaW5nQnVmZmVyLmg+CkBA
IC00NSwxMCArNDUsMTAgQEAgcHVibGljOgogICAgIFJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2Vy
KCk7CiAgICAgflJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyKCk7CiAKLSAgICB2b2lkIGFkZFNv
dXJjZShSZWY8UmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZT4mJik7CisgICAgdm9pZCBhZGRTb3Vy
Y2UoUmVmPFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U+JiYpOwogICAgIHZvaWQgcmVtb3ZlU291
cmNlKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyKTsKIAotICAgIHZvaWQg
ZGlkVXBkYXRlU291cmNlQ29ubmVjdGlvbihSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlJik7Cisg
ICAgdm9pZCBkaWRVcGRhdGVTb3VyY2VDb25uZWN0aW9uKFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3Vy
Y2UmKTsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJik7CiAKQEAgLTY1LDEzICs2NSwxMyBAQCBwcml2YXRlOgogICAgIGNsYXNzIFJl
bW90ZUF1ZGlvIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGlj
OgotICAgICAgICBleHBsaWNpdCBSZW1vdGVBdWRpbyhSZWY8UmVtb3RlUmVhbHRpbWVNZWRpYVNv
dXJjZT4mJik7CisgICAgICAgIGV4cGxpY2l0IFJlbW90ZUF1ZGlvKFJlZjxSZW1vdGVSZWFsdGlt
ZUF1ZGlvU291cmNlPiYmKTsKIAogICAgICAgICB2b2lkIHNldFN0b3JhZ2UoY29uc3QgU2hhcmVk
TWVtb3J5OjpIYW5kbGUmLCBjb25zdCBXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24m
LCB1aW50NjRfdCBudW1iZXJPZkZyYW1lcyk7CiAgICAgICAgIHZvaWQgYXVkaW9TYW1wbGVzQXZh
aWxhYmxlKE1lZGlhVGltZSwgdWludDY0X3QgbnVtYmVyT2ZGcmFtZXMpOwogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgUmVmPFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U+IG1fc291cmNlOworICAg
ICAgICBSZWY8UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZT4gbV9zb3VyY2U7CiAgICAgICAgIFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX2Rlc2NyaXB0aW9uOwogICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Q0FSaW5nQnVmZmVyPiBtX3JpbmdCdWZmZXI7CiAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpXZWJBdWRpb0J1ZmZlckxpc3Q+IG1fYnVmZmVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0
aW1lQXVkaW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90
ZVJlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2MDJhOTRiY2JiMDZiMzE4NTc4
NDEyNTgzMDE2ODNmMzVjNmEzOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvY29jb2EvUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwy
MjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3Rl
UmVhbHRpbWVBdWRpb1NvdXJjZS5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShN
RURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1
ZGUgIlNoYXJlZFJpbmdCdWZmZXJTdG9yYWdlLmgiCisjaW5jbHVkZSAiVXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJVc2VyTWVkaWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFDb25zdHJhaW50cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVhbHRpbWVNZWRpYVNvdXJjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViQXVkaW9CdWZmZXJMaXN0Lmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFBBTDsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitSZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gUmVtb3RlUmVhbHRpbWVBdWRp
b1NvdXJjZTo6Y3JlYXRlKGNvbnN0IENhcHR1cmVEZXZpY2UmIGRldmljZSwgY29uc3QgTWVkaWFD
b25zdHJhaW50cyYgY29uc3RyYWludHMsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhhc2hTYWx0
LCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlciYgbWFuYWdlciwgYm9vbCBzaG91bGRDYXB0dXJlSW5H
UFVQcm9jZXNzKQoreworICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBSZW1vdGVSZWFs
dGltZUF1ZGlvU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
LCBkZXZpY2UsIFdURk1vdmUobmFtZSksIFdURk1vdmUoaGFzaFNhbHQpLCBtYW5hZ2VyLCBzaG91
bGRDYXB0dXJlSW5HUFVQcm9jZXNzKSk7CisgICAgbWFuYWdlci5hZGRBdWRpb1NvdXJjZShzb3Vy
Y2UuY29weVJlZigpKTsKKyAgICBtYW5hZ2VyLnJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyKCku
YWRkU291cmNlKHNvdXJjZS5jb3B5UmVmKCkpOworICAgIHNvdXJjZS0+Y3JlYXRlUmVtb3RlTWVk
aWFTb3VyY2UoY29uc3RyYWludHMpOworICAgIHJldHVybiBzb3VyY2U7Cit9CisKK1JlbW90ZVJl
YWx0aW1lQXVkaW9Tb3VyY2U6OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2UoUmVhbHRpbWVNZWRp
YVNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNl
LCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcmJiBoYXNoU2FsdCwgVXNlck1lZGlhQ2FwdHVyZU1hbmFn
ZXImIG1hbmFnZXIsIGJvb2wgc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2VzcykKKyAgICA6IFJlYWx0
aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8sIFdURk1vdmUo
bmFtZSksIFN0cmluZzo6bnVtYmVyKGlkZW50aWZpZXIudG9VSW50NjQoKSksIFdURk1vdmUoaGFz
aFNhbHQpKQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX21hbmFnZXIo
bWFuYWdlcikKKyAgICAsIG1fc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2VzcyhzaG91bGRDYXB0dXJl
SW5HUFVQcm9jZXNzKQorICAgICwgbV9kZXZpY2UoZGV2aWNlKQoreworICAgIEFTU0VSVChtX2Rl
dmljZS50eXBlKCkgPT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSk7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpz
aW5nbGV0b24oKS5hdWRpb0NhcHR1cmVGYWN0b3J5KCkuc2V0QWN0aXZlU291cmNlKCp0aGlzKTsK
KyNlbmRpZgorfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OmNyZWF0ZVJlbW90
ZU1lZGlhU291cmNlKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIGNvbnN0cmFpbnRzKQoreworICAg
IGlmIChtX3Nob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpCisgICAgICAgIG1fY29uc3RyYWludHMg
PSBjb25zdHJhaW50czsKKworICAgIGNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjpDcmVhdGVNZWRpYVNvdXJjZUZv
ckNhcHR1cmVEZXZpY2VXaXRoQ29uc3RyYWludHMoaWRlbnRpZmllcigpLCBtX2RldmljZSwgZGV2
aWNlSURIYXNoU2FsdCgpLCBjb25zdHJhaW50cyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyldKGJvb2wgc3VjY2VlZGVkLCBhdXRvJiYgZXJyb3JNZXNzYWdlLCBhdXRvJiYg
c2V0dGluZ3MsIGF1dG8mJiBjYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgaWYgKCFzdWNjZWVkZWQp
IHsKKyAgICAgICAgICAgIGRpZEZhaWwoV1RGTW92ZShlcnJvck1lc3NhZ2UpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZXROYW1lKFN0cmluZyB7IHNldHRpbmdz
LmxhYmVsKCkuc3RyaW5nKCkgfSk7CisgICAgICAgIHNldFNldHRpbmdzKFdURk1vdmUoc2V0dGlu
Z3MpKTsKKyAgICAgICAgc2V0Q2FwYWJpbGl0aWVzKFdURk1vdmUoY2FwYWJpbGl0aWVzKSk7Cisg
ICAgICAgIHNldEFzUmVhZHkoKTsKKyAgICAgICAgaWYgKG1fc2hvdWxkQ2FwdHVyZUluR1BVUHJv
Y2VzcykKKyAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nl
c3NDb25uZWN0aW9uKCkuYWRkQ2xpZW50KCp0aGlzKTsKKyAgICB9KTsKK30KKworUmVtb3RlUmVh
bHRpbWVBdWRpb1NvdXJjZTo6flJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2UoKQoreworICAgIGlm
IChtX3Nob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpCisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkucmVtb3ZlQ2xpZW50KCp0aGlzKTsK
KworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
cjo6c2luZ2xldG9uKCkuYXVkaW9DYXB0dXJlRmFjdG9yeSgpLnVuc2V0QWN0aXZlU291cmNlKCp0
aGlzKTsKKyNlbmRpZgorfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OndoZW5S
ZWFkeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYgY2FsbGJhY2spCit7CisgICAg
aWYgKG1faXNSZWFkeSkKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrKFdURk1vdmUobV9lcnJvck1l
c3NhZ2UpKTsKKyAgICBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7Cit9CisKK3ZvaWQg
UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6ZGlkRmFpbChTdHJpbmcmJiBlcnJvck1lc3NhZ2Up
Cit7CisgICAgbV9pc1JlYWR5ID0gdHJ1ZTsKKyAgICBtX2Vycm9yTWVzc2FnZSA9IFdURk1vdmUo
ZXJyb3JNZXNzYWdlKTsKKyAgICBpZiAobV9jYWxsYmFjaykKKyAgICAgICAgbV9jYWxsYmFjayht
X2Vycm9yTWVzc2FnZSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6c2V0
QXNSZWFkeSgpCit7CisgICAgbV9pc1JlYWR5ID0gdHJ1ZTsKKyAgICBpZiAobV9jYWxsYmFjaykK
KyAgICAgICAgbV9jYWxsYmFjayh7IH0pOworfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lQXVkaW9T
b3VyY2U6OnNldENhcGFiaWxpdGllcyhSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiYg
Y2FwYWJpbGl0aWVzKQoreworICAgIG1fY2FwYWJpbGl0aWVzID0gV1RGTW92ZShjYXBhYmlsaXRp
ZXMpOworfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OnNldFNldHRpbmdzKFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYmIHNldHRpbmdzKQoreworICAgIGF1dG8gY2hhbmdl
ZCA9IG1fc2V0dGluZ3MuZGlmZmVyZW5jZShzZXR0aW5ncyk7CisgICAgbV9zZXR0aW5ncyA9IFdU
Rk1vdmUoc2V0dGluZ3MpOworICAgIG5vdGlmeVNldHRpbmdzRGlkQ2hhbmdlT2JzZXJ2ZXJzKGNo
YW5nZWQpOworfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OnJlbW90ZUF1ZGlv
U2FtcGxlc0F2YWlsYWJsZShjb25zdCBXVEY6Ok1lZGlhVGltZSYgdGltZSwgY29uc3QgUGxhdGZv
cm1BdWRpb0RhdGEmIGRhdGEsIGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBh
dWRpb1NhbXBsZXNBdmFpbGFibGUodGltZSwgZGF0YSwgZGVzY3JpcHRpb24sIHNpemUpOworfQor
CitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OmNvbm5lY3Rpb24o
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorICAgIGlmIChtX3Nob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpCisgICAgICAgIHJldHVybiAm
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25u
ZWN0aW9uKCk7CisjZW5kaWYKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKTsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZUF1ZGlvU291
cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKQoreworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6U3RhcnRQcm9kdWNpbmdEYXRhIHsg
bV9pZGVudGlmaWVyIH0sIDApOworfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6
OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBjb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OlN0b3BQcm9kdWNpbmdEYXRhIHsgbV9pZGVu
dGlmaWVyIH0sIDApOworfQorCitjb25zdCBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzJiBSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlOjpjYXBhYmlsaXRpZXMoKQorewor
ICAgIHJldHVybiBtX2NhcGFiaWxpdGllczsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZUF1ZGlv
U291cmNlOjphcHBseUNvbnN0cmFpbnRzKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIGNvbnN0cmFp
bnRzLCBBcHBseUNvbnN0cmFpbnRzSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IG1fcGVuZGluZ0FwcGx5Q29uc3RyYWludHNDYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKyAgICAvLyBGSVhNRTogVXNlIHNlbmRBc3luY1dpdGhSZXBseS4KKyAg
ICBjb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJv
eHk6OkFwcGx5Q29uc3RyYWludHMgeyBtX2lkZW50aWZpZXIsIGNvbnN0cmFpbnRzIH0sIDApOwor
fQorCit2b2lkIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OmFwcGx5Q29uc3RyYWludHNTdWNj
ZWVkZWQoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiYgc2V0dGluZ3MpCit7CisgICAgc2V0
U2V0dGluZ3MoV1RGTW92ZShzZXR0aW5ncykpOworCisgICAgYXV0byBjYWxsYmFjayA9IG1fcGVu
ZGluZ0FwcGx5Q29uc3RyYWludHNDYWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJhY2so
eyB9KTsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlOjphcHBseUNvbnN0cmFp
bnRzRmFpbGVkKFN0cmluZyYmIGZhaWxlZENvbnN0cmFpbnQsIFN0cmluZyYmIGVycm9yTWVzc2Fn
ZSkKK3sKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nQXBwbHlDb25zdHJhaW50c0NhbGxi
YWNrcy50YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFjayhBcHBseUNvbnN0cmFpbnRzRXJyb3IgeyBX
VEZNb3ZlKGZhaWxlZENvbnN0cmFpbnQpLCBXVEZNb3ZlKGVycm9yTWVzc2FnZSkgfSk7Cit9CisK
K3ZvaWQgUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6aGFzRW5kZWQoKQoreworICAgIGNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6RW5k
IHsgbV9pZGVudGlmaWVyIH0sIDApOworICAgIG1fbWFuYWdlci5yZW1vdmVBdWRpb1NvdXJjZSht
X2lkZW50aWZpZXIpOworICAgIG1fbWFuYWdlci5yZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlcigp
LnJlbW92ZVNvdXJjZShpZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lQXVk
aW9Tb3VyY2U6OmNhcHR1cmVTdG9wcGVkKCkKK3sKKyAgICBzdG9wKCk7CisgICAgaGFzRW5kZWQo
KTsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlOjpjYXB0dXJlRmFpbGVkKCkK
K3sKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpjYXB0dXJlRmFpbGVkKCk7CisgICAgaGFzRW5k
ZWQoKTsKK30KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKK3ZvaWQgUmVtb3RlUmVhbHRpbWVB
dWRpb1NvdXJjZTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZShHUFVQcm9jZXNzQ29ubmVj
dGlvbiYpCit7CisgICAgQVNTRVJUKG1fc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2Vzcyk7CisgICAg
aWYgKGlzRW5kZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9tYW5hZ2VyLnJlbW90ZUNh
cHR1cmVTYW1wbGVNYW5hZ2VyKCkuZGlkVXBkYXRlU291cmNlQ29ubmVjdGlvbigqdGhpcyk7Cisg
ICAgY3JlYXRlUmVtb3RlTWVkaWFTb3VyY2UobV9jb25zdHJhaW50cyk7CisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCB1cGRhdGUgdGhlIHRyYWNrIGFjY29yZGluZyBjdXJyZW50IHNldHRpbmdzLgor
ICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAgc3RhcnRQcm9kdWNpbmdEYXRhKCk7
Cit9CisjZW5kaWYKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmI2YjQxNWJmZWVlMWU4ZDdjMTNmOTNkN2RmODIyYTJjNjVjYTljMjEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVhbHRpbWVBdWRpb1Nv
dXJjZS5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkdQ
VVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DYXB0dXJlRGV2aWNlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9SZWFsdGltZU1lZGlhU291cmNlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9SZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIENvbm5lY3Rpb247Cit9CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKK2NsYXNzIEltYWdl
VHJhbnNmZXJTZXNzaW9uVlQ7CitzdHJ1Y3QgTWVkaWFDb25zdHJhaW50czsKK2NsYXNzIFJlbW90
ZVZpZGVvU2FtcGxlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXI7CisKK2NsYXNzIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2UgOiBwdWJs
aWMgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZQorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KyAgICAsIHB1YmxpYyBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50CisjZW5kaWYKK3sKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0
ZShjb25zdCBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlJiwgY29uc3QgV2ViQ29yZTo6TWVkaWFDb25z
dHJhaW50cyYsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhhc2hTYWx0LCBVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlciYsIGJvb2wgc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2Vzcyk7CisgICAgflJlbW90
ZVJlYWx0aW1lQXVkaW9Tb3VyY2UoKTsKKworICAgIFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3Vy
Y2VJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0K
KyAgICBJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKTsKKworICAgIHZvaWQgc2V0U2V0dGlu
Z3MoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiYpOworCisgICAgdm9pZCBh
cHBseUNvbnN0cmFpbnRzU3VjY2VlZGVkKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5ncyYmKTsKKyAgICB2b2lkIGFwcGx5Q29uc3RyYWludHNGYWlsZWQoU3RyaW5nJiYgZmFpbGVk
Q29uc3RyYWludCwgU3RyaW5nJiYgZXJyb3JNZXNzYWdlKTsKKworICAgIHZvaWQgY2FwdHVyZVN0
b3BwZWQoKTsKKyAgICB2b2lkIGNhcHR1cmVGYWlsZWQoKSBmaW5hbDsKKworICAgIHZvaWQgcmVt
b3RlQXVkaW9TYW1wbGVzQXZhaWxhYmxlKGNvbnN0IFdURjo6TWVkaWFUaW1lJiwgY29uc3QgV2Vi
Q29yZTo6UGxhdGZvcm1BdWRpb0RhdGEmLCBjb25zdCBXZWJDb3JlOjpBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uJiwgc2l6ZV90KTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZWFsdGltZUF1ZGlvU291
cmNlKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3Jl
OjpDYXB0dXJlRGV2aWNlJiwgU3RyaW5nJiYgbmFtZSwgU3RyaW5nJiYgaGFzaFNhbHQsIFVzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyJiwgYm9vbCBzaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKTsKKwor
ICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2UKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgp
IGZpbmFsOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICBib29sIGlz
Q2FwdHVyZVNvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIGJl
Z2luQ29uZmlndXJhdGlvbigpIGZpbmFsIHsgfQorICAgIHZvaWQgY29tbWl0Q29uZmlndXJhdGlv
bigpIGZpbmFsIHsgfQorICAgIHZvaWQgYXBwbHlDb25zdHJhaW50cyhjb25zdCBXZWJDb3JlOjpN
ZWRpYUNvbnN0cmFpbnRzJiwgQXBwbHlDb25zdHJhaW50c0hhbmRsZXImJikgZmluYWw7CisgICAg
dm9pZCBoYXNFbmRlZCgpIGZpbmFsOworICAgIGNvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBmaW5hbCB7IHJldHVybiBtX3NldHRpbmdzOyB9Cisg
ICAgY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJp
bGl0aWVzKCkgZmluYWw7CisgICAgdm9pZCB3aGVuUmVhZHkoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTdHJpbmcpPiYmKSBmaW5hbDsKKyAgICBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VU
eXBlIGRldmljZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2RldmljZS50eXBlKCk7IH0K
KworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICAvLyBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
Q2xpZW50CisgICAgdm9pZCBncHVQcm9jZXNzQ29ubmVjdGlvbkRpZENsb3NlKEdQVVByb2Nlc3ND
b25uZWN0aW9uJikgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgY3JlYXRlUmVtb3RlTWVkaWFT
b3VyY2UoY29uc3QgV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50cyYpOworICAgIHZvaWQgZGlkRmFp
bChTdHJpbmcmJiBlcnJvck1lc3NhZ2UpOworICAgIHZvaWQgc2V0QXNSZWFkeSgpOworICAgIHZv
aWQgc2V0Q2FwYWJpbGl0aWVzKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmJik7CisKKyAgICBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllciBtX2lk
ZW50aWZpZXI7CisgICAgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXImIG1fbWFuYWdlcjsKKyAgICBX
ZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOwor
ICAgIFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX3NldHRpbmdzOworCisg
ICAgRGVxdWU8QXBwbHlDb25zdHJhaW50c0hhbmRsZXI+IG1fcGVuZGluZ0FwcGx5Q29uc3RyYWlu
dHNDYWxsYmFja3M7CisgICAgYm9vbCBtX3Nob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9pc1JlYWR5IHsgZmFsc2UgfTsKKyAgICBTdHJpbmcgbV9lcnJvck1l
c3NhZ2U7CisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcpPiBtX2NhbGxiYWNrOwor
ICAgIFdlYkNvcmU6OkNhcHR1cmVEZXZpY2UgbV9kZXZpY2U7CisgICAgV2ViQ29yZTo6TWVkaWFD
b25zdHJhaW50cyBtX2NvbnN0cmFpbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90
ZVJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29h
L1JlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjZTA5NWFlMjU1OGQ3ZDk3YTlhYTdhYTUzZTc2Y2VjNGZiNTQ0ODhkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZU1lZGlhU291cmNlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDM0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKLQotI2lmIFBMQVRGT1JNKENPQ09BKSAm
JiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
aCIKLSNpbmNsdWRlICJTaGFyZWRSaW5nQnVmZmVyU3RvcmFnZS5oIgotI2luY2x1ZGUgIlVzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJN
ZXNzYWdlcy5oIgotI2luY2x1ZGUgIlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHlNZXNzYWdl
cy5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYlBy
b2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL01lZGlhQ29uc3RyYWludHMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jl
YWx0aW1lTWVkaWFTb3VyY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbW90ZVZpZGVvU2FtcGxlLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9XZWJBdWRpb0J1ZmZlckxpc3QuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci11c2luZyBuYW1lc3BhY2UgUEFMOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJlZjxS
ZWFsdGltZU1lZGlhU291cmNlPiBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpjcmVhdGUoY29u
c3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzJiBjb25zdHJh
aW50cywgU3RyaW5nJiYgbmFtZSwgU3RyaW5nJiYgaGFzaFNhbHQsIFVzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyJiBtYW5hZ2VyLCBib29sIHNob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpCi17Ci0gICAg
YXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UoUmVh
bHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXI6OmdlbmVyYXRlKCksIGRldmljZS50eXBlKCksIFdU
Rk1vdmUobmFtZSksIFdURk1vdmUoaGFzaFNhbHQpLCBtYW5hZ2VyLCBzaG91bGRDYXB0dXJlSW5H
UFVQcm9jZXNzKSk7Ci0gICAgbWFuYWdlci5hZGRTb3VyY2Uoc291cmNlLmNvcHlSZWYoKSk7Ci0g
ICAgc291cmNlLT5jcmVhdGVSZW1vdGVNZWRpYVNvdXJjZShkZXZpY2UsIGNvbnN0cmFpbnRzKTsK
LSAgICByZXR1cm4gc291cmNlOwotfQotCi1zdGF0aWMgaW5saW5lIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGUgc291cmNlVHlwZUZyb21EZXZpY2VUeXBlKENhcHR1cmVEZXZpY2U6OkRldmljZVR5
cGUgZGV2aWNlVHlwZSkKLXsKLSAgICBzd2l0Y2ggKGRldmljZVR5cGUpIHsKLSAgICBjYXNlIENh
cHR1cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1pY3JvcGhvbmU6Ci0gICAgICAgIHJldHVybiBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbzsKLSAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRl
dmljZVR5cGU6OkNhbWVyYToKLSAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNj
cmVlbjoKLSAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OldpbmRvdzoKLSAgICAg
ICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOwotICAgIGNhc2UgQ2Fw
dHVyZURldmljZTo6RGV2aWNlVHlwZTo6U3BlYWtlcjoKLSAgICBjYXNlIENhcHR1cmVEZXZpY2U6
OkRldmljZVR5cGU6OlVua25vd246Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLSAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZTsKLX0KLQotUmVt
b3RlUmVhbHRpbWVNZWRpYVNvdXJjZTo6UmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZShSZWFsdGlt
ZU1lZGlhU291cmNlSWRlbnRpZmllciBpZGVudGlmaWVyLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VU
eXBlIGRldmljZVR5cGUsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhhc2hTYWx0LCBVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlciYgbWFuYWdlciwgYm9vbCBzaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNz
KQotICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShzb3VyY2VUeXBlRnJvbURldmljZVR5cGUoZGV2
aWNlVHlwZSksIFdURk1vdmUobmFtZSksIFN0cmluZzo6bnVtYmVyKGlkZW50aWZpZXIudG9VSW50
NjQoKSksIFdURk1vdmUoaGFzaFNhbHQpKQotICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIp
Ci0gICAgLCBtX21hbmFnZXIobWFuYWdlcikKLSAgICAsIG1fZGV2aWNlVHlwZShkZXZpY2VUeXBl
KQotICAgICwgbV9zaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKHNob3VsZENhcHR1cmVJbkdQVVBy
b2Nlc3MpCi17Ci0gICAgc3dpdGNoIChtX2RldmljZVR5cGUpIHsKLSAgICBjYXNlIENhcHR1cmVE
ZXZpY2U6OkRldmljZVR5cGU6Ok1pY3JvcGhvbmU6Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuYXVkaW9DYXB0
dXJlRmFjdG9yeSgpLnNldEFjdGl2ZVNvdXJjZSgqdGhpcyk7Ci0jZW5kaWYKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmE6Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2lu
Z2xldG9uKCkudmlkZW9DYXB0dXJlRmFjdG9yeSgpLnNldEFjdGl2ZVNvdXJjZSgqdGhpcyk7Ci0j
ZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBl
OjpTY3JlZW46Ci0gICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpXaW5kb3c6Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U3BlYWtl
cjoKLSAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlVua25vd246Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBSZW1vdGVSZWFsdGltZU1l
ZGlhU291cmNlOjpjcmVhdGVSZW1vdGVNZWRpYVNvdXJjZShjb25zdCBDYXB0dXJlRGV2aWNlJiBk
ZXZpY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIGNvbnN0cmFpbnRzKQotewotICAgIGlmICht
X3Nob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpIHsKLSAgICAgICAgbV9kZXZpY2UgPSBkZXZpY2U7
Ci0gICAgICAgIG1fY29uc3RyYWludHMgPSBjb25zdHJhaW50czsKLSAgICB9Ci0KLSAgICBjb25u
ZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXJQcm94eTo6Q3JlYXRlTWVkaWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNlV2l0aENvbnN0cmFp
bnRzKGlkZW50aWZpZXIoKSwgZGV2aWNlLCBkZXZpY2VJREhhc2hTYWx0KCksIGNvbnN0cmFpbnRz
KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oYm9vbCBzdWNjZWVkZWQs
IGF1dG8mJiBlcnJvck1lc3NhZ2UsIGF1dG8mJiBzZXR0aW5ncywgYXV0byYmIGNhcGFiaWxpdGll
cykgewotICAgICAgICBpZiAoIXN1Y2NlZWRlZCkgewotICAgICAgICAgICAgZGlkRmFpbChXVEZN
b3ZlKGVycm9yTWVzc2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIHNldE5hbWUoU3RyaW5nIHsgc2V0dGluZ3MubGFiZWwoKS5zdHJpbmcoKSB9KTsKLSAgICAg
ICAgc2V0U2V0dGluZ3MoV1RGTW92ZShzZXR0aW5ncykpOwotICAgICAgICBzZXRDYXBhYmlsaXRp
ZXMoV1RGTW92ZShjYXBhYmlsaXRpZXMpKTsKLSAgICAgICAgc2V0QXNSZWFkeSgpOwotICAgICAg
ICBpZiAobV9zaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKQotICAgICAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5hZGRDbGllbnQoKnRo
aXMpOwotICAgIH0pOwotfQotCi1SZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjp+UmVtb3RlUmVh
bHRpbWVNZWRpYVNvdXJjZSgpCi17Ci0gICAgaWYgKG1fc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2Vz
cykKLSAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24oKS5yZW1vdmVDbGllbnQoKnRoaXMpOwotCi0gICAgc3dpdGNoIChtX2RldmljZVR5cGUp
IHsKLSAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1pY3JvcGhvbmU6Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6
c2luZ2xldG9uKCkuYXVkaW9DYXB0dXJlRmFjdG9yeSgpLnVuc2V0QWN0aXZlU291cmNlKCp0aGlz
KTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGU6OkNhbWVyYToKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS52aWRlb0NhcHR1cmVGYWN0b3J5KCkudW5z
ZXRBY3RpdmVTb3VyY2UoKnRoaXMpOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuOgotICAgIGNhc2UgQ2FwdHVyZURldmlj
ZTo6RGV2aWNlVHlwZTo6V2luZG93OgotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhcHR1cmVE
ZXZpY2U6OkRldmljZVR5cGU6OlNwZWFrZXI6Ci0gICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZp
Y2VUeXBlOjpVbmtub3duOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZTo6d2hlblJlYWR5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3RyaW5nKT4mJiBjYWxsYmFjaykKLXsKLSAgICBpZiAobV9pc1JlYWR5KQot
ICAgICAgICByZXR1cm4gY2FsbGJhY2soV1RGTW92ZShtX2Vycm9yTWVzc2FnZSkpOwotICAgIG1f
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKLX0KLQotdm9pZCBSZW1vdGVSZWFsdGltZU1l
ZGlhU291cmNlOjpkaWRGYWlsKFN0cmluZyYmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBtX2lzUmVh
ZHkgPSB0cnVlOwotICAgIG1fZXJyb3JNZXNzYWdlID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOwot
ICAgIGlmIChtX2NhbGxiYWNrKQotICAgICAgICBtX2NhbGxiYWNrKG1fZXJyb3JNZXNzYWdlKTsK
LX0KLQotdm9pZCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpzZXRBc1JlYWR5KCkKLXsKLSAg
ICBtX2lzUmVhZHkgPSB0cnVlOwotICAgIGlmIChtX2NhbGxiYWNrKQotICAgICAgICBtX2NhbGxi
YWNrKHsgfSk7Ci19Ci0KLVJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBSZW1vdGVSZWFsdGltZU1l
ZGlhU291cmNlOjpjbG9uZSgpCi17Ci0gICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICBjYXNlIFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOgotICAgICAgICByZXR1cm4gY2xvbmVWaWRl
b1NvdXJjZSgpOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiAqdGhpczsK
LX0KLQotUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U6
OmNsb25lVmlkZW9Tb3VyY2UoKQotewotICAgIGF1dG8gaWRlbnRpZmllciA9IFJlYWx0aW1lTWVk
aWFTb3VyY2VJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwotICAgIGlmICghY29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjpDbG9uZSB7IG1faWRl
bnRpZmllciwgaWRlbnRpZmllciB9LCAwKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAg
YXV0byBjbG9uZVNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJj
ZShpZGVudGlmaWVyLCBkZXZpY2VUeXBlKCksIFN0cmluZyB7IG1fc2V0dGluZ3MubGFiZWwoKS5z
dHJpbmcoKSB9LCBkZXZpY2VJREhhc2hTYWx0KCksIG1fbWFuYWdlciwgbV9zaG91bGRDYXB0dXJl
SW5HUFVQcm9jZXNzKSk7Ci0gICAgY2xvbmVTb3VyY2UtPnNldFNldHRpbmdzKFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5ncyB7IG1fc2V0dGluZ3MgfSk7Ci0gICAgbV9tYW5hZ2VyLmFkZFNvdXJj
ZShjbG9uZVNvdXJjZS5jb3B5UmVmKCkpOwotICAgIHJldHVybiBjbG9uZVNvdXJjZTsKLX0KLQot
dm9pZCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpzZXRDYXBhYmlsaXRpZXMoUmVhbHRpbWVN
ZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYmIGNhcGFiaWxpdGllcykKLXsKLSAgICBtX2NhcGFiaWxp
dGllcyA9IFdURk1vdmUoY2FwYWJpbGl0aWVzKTsKLX0KLQotdm9pZCBSZW1vdGVSZWFsdGltZU1l
ZGlhU291cmNlOjpzZXRTZXR0aW5ncyhSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmJiBzZXR0
aW5ncykKLXsKLSAgICBhdXRvIGNoYW5nZWQgPSBtX3NldHRpbmdzLmRpZmZlcmVuY2Uoc2V0dGlu
Z3MpOwotICAgIG1fc2V0dGluZ3MgPSBXVEZNb3ZlKHNldHRpbmdzKTsKLSAgICBub3RpZnlTZXR0
aW5nc0RpZENoYW5nZU9ic2VydmVycyhjaGFuZ2VkKTsKLX0KLQotdm9pZCBSZW1vdGVSZWFsdGlt
ZU1lZGlhU291cmNlOjpyZW1vdGVBdWRpb1NhbXBsZXNBdmFpbGFibGUoY29uc3QgV1RGOjpNZWRp
YVRpbWUmIHRpbWUsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBkYXRhLCBjb25zdCBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgc2l6ZV90IHNpemUpCi17Ci0gICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7Ci0gICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKHRpbWUsIGRhdGEs
IGRlc2NyaXB0aW9uLCBzaXplKTsKLX0KLQotdm9pZCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNl
OjpyZW1vdGVWaWRlb1NhbXBsZUF2YWlsYWJsZShSZW1vdGVWaWRlb1NhbXBsZSYmIHJlbW90ZVNh
bXBsZSkKLXsKLSAgICBBU1NFUlQodHlwZSgpID09IFR5cGU6OlZpZGVvKTsKLQotICAgIHNldElu
dHJpbnNpY1NpemUocmVtb3RlU2FtcGxlLnNpemUoKSk7Ci0KLSAgICBpZiAoIW1faW1hZ2VUcmFu
c2ZlclNlc3Npb24gfHwgbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbi0+cGl4ZWxGb3JtYXQoKSAhPSBy
ZW1vdGVTYW1wbGUudmlkZW9Gb3JtYXQoKSkKLSAgICAgICAgbV9pbWFnZVRyYW5zZmVyU2Vzc2lv
biA9IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZShyZW1vdGVTYW1wbGUudmlkZW9Gb3Jt
YXQoKSk7Ci0KLSAgICBpZiAoIW1faW1hZ2VUcmFuc2ZlclNlc3Npb24pIHsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHNh
bXBsZVJlZiA9IG1faW1hZ2VUcmFuc2ZlclNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxlKHJlbW90
ZVNhbXBsZSk7Ci0gICAgaWYgKCFzYW1wbGVSZWYpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWFsdGltZU1lZGlhU291cmNl
Ojp2aWRlb1NhbXBsZUF2YWlsYWJsZSgqc2FtcGxlUmVmKTsKLX0KLQotSVBDOjpDb25uZWN0aW9u
KiBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpjb25uZWN0aW9uKCkKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKLSAgICBpZiAobV9zaG91
bGRDYXB0dXJlSW5HUFVQcm9jZXNzKQotICAgICAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOwotI2VuZGlm
Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZTo6c3RhcnRQcm9kdWNp
bmdEYXRhKCkKLXsKLSAgICBjb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlVzZXJNZWRpYUNh
cHR1cmVNYW5hZ2VyUHJveHk6OlN0YXJ0UHJvZHVjaW5nRGF0YSB7IG1faWRlbnRpZmllciB9LCAw
KTsKLX0KLQotdm9pZCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0
YSgpCi17Ci0gICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlclByb3h5OjpTdG9wUHJvZHVjaW5nRGF0YSB7IG1faWRlbnRpZmllciB9LCAwKTsKLX0K
LQotYm9vbCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpzZXRTaG91bGRBcHBseVJvdGF0aW9u
KGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikKLXsKLSAgICBjb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OlNldFNob3VsZEFwcGx5Um90YXRp
b24geyBtX2lkZW50aWZpZXIsIHNob3VsZEFwcGx5Um90YXRpb24gfSwgMCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWNvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmIFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U6OmNhcGFiaWxpdGllcygpCi17Ci0gICAgcmV0
dXJuIG1fY2FwYWJpbGl0aWVzOwotfQotCi12b2lkIFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U6
OmFwcGx5Q29uc3RyYWludHMoY29uc3QgV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50cyYgY29uc3Ry
YWludHMsIEFwcGx5Q29uc3RyYWludHNIYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgbV9wZW5kaW5nQXBwbHlDb25zdHJhaW50c0NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIC8vIEZJWE1FOiBVc2Ugc2VuZEFzeW5jV2l0aFJlcGx5Lgot
ICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQ
cm94eTo6QXBwbHlDb25zdHJhaW50cyB7IG1faWRlbnRpZmllciwgY29uc3RyYWludHMgfSwgMCk7
Ci19Ci0KLXZvaWQgUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZTo6YXBwbHlDb25zdHJhaW50c1N1
Y2NlZWRlZChjb25zdCBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRp
bmdzKQotewotICAgIHNldFNldHRpbmdzKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5ncyhzZXR0aW5ncykpOwotCi0gICAgYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ0FwcGx5Q29u
c3RyYWludHNDYWxsYmFja3MudGFrZUZpcnN0KCk7Ci0gICAgY2FsbGJhY2soeyB9KTsKLX0KLQot
dm9pZCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbnRzRmFpbGVkKFN0
cmluZyYmIGZhaWxlZENvbnN0cmFpbnQsIFN0cmluZyYmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBh
dXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nQXBwbHlDb25zdHJhaW50c0NhbGxiYWNrcy50YWtlRmly
c3QoKTsKLSAgICBjYWxsYmFjayhBcHBseUNvbnN0cmFpbnRzRXJyb3IgeyBXVEZNb3ZlKGZhaWxl
ZENvbnN0cmFpbnQpLCBXVEZNb3ZlKGVycm9yTWVzc2FnZSkgfSk7Ci19Ci0KLXZvaWQgUmVtb3Rl
UmVhbHRpbWVNZWRpYVNvdXJjZTo6aGFzRW5kZWQoKQotewotICAgIGNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6RW5kIHsgbV9pZGVudGlm
aWVyIH0sIDApOwotICAgIG1fbWFuYWdlci5yZW1vdmVTb3VyY2UobV9pZGVudGlmaWVyKTsKLX0K
LQotdm9pZCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpjYXB0dXJlU3RvcHBlZCgpCi17Ci0g
ICAgc3RvcCgpOwotICAgIGhhc0VuZGVkKCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVhbHRpbWVNZWRp
YVNvdXJjZTo6Y2FwdHVyZUZhaWxlZCgpCi17Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6Y2Fw
dHVyZUZhaWxlZCgpOwotICAgIGhhc0VuZGVkKCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6c3RvcEJlaW5nT2JzZXJ2ZWQoKQotewotICAgIG1faGFzUmVxdWVzdGVkVG9F
bmQgPSB0cnVlOwotICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6VXNlck1lZGlhQ2Fw
dHVyZU1hbmFnZXJQcm94eTo6UmVxdWVzdFRvRW5kIHsgbV9pZGVudGlmaWVyIH0sIDApOwotfQot
Ci12b2lkIFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U6OnJlcXVlc3RUb0VuZChPYnNlcnZlciYg
b2JzZXJ2ZXIpCi17Ci0gICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICBjYXNlIFR5cGU6OkF1ZGlv
OgotICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlOjpyZXF1ZXN0VG9FbmQob2JzZXJ2ZXIpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFR5cGU6OlZpZGVvOgotICAgICAgICBzdG9wQmVpbmdP
YnNlcnZlZCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFR5cGU6Ok5vbmU6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKLXZvaWQgUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25E
aWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYpCi17Ci0gICAgQVNTRVJUKG1fc2hvdWxkQ2Fw
dHVyZUluR1BVUHJvY2Vzcyk7Ci0gICAgaWYgKGlzRW5kZWQoKSB8fCBtX2hhc1JlcXVlc3RlZFRv
RW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21hbmFnZXIuZGlkVXBkYXRlU291cmNlQ29u
bmVjdGlvbigqdGhpcyk7Ci0gICAgY3JlYXRlUmVtb3RlTWVkaWFTb3VyY2UobV9kZXZpY2UsIG1f
Y29uc3RyYWludHMpOwotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXBkYXRlIHRoZSB0cmFjayBh
Y2NvcmRpbmcgY3VycmVudCBzZXR0aW5ncy4KLSAgICBpZiAoaXNQcm9kdWNpbmdEYXRhKCkpCi0g
ICAgICAgIHN0YXJ0UHJvZHVjaW5nRGF0YSgpOwotfQotI2VuZGlmCi0KLX0KLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVhbHRpbWVN
ZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0
aW1lTWVkaWFTb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmExMmM5MjUx
NmI4NDQ5MDA2NDMzMDJiMGIzZTg1MjZlNzE2NzM1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVt
b3RlUmVhbHRpbWVNZWRpYVNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFC
TEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0NhcHR1cmVEZXZpY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0
aW1lTWVkaWFTb3VyY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFTb3VyY2VJ
ZGVudGlmaWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewot
Y2xhc3MgQ29ubmVjdGlvbjsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uOwotY2xhc3MgSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDsKLXN0cnVj
dCBNZWRpYUNvbnN0cmFpbnRzOwotY2xhc3MgUmVtb3RlVmlkZW9TYW1wbGU7Ci19Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjsKLQotY2xhc3Mg
UmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZSA6IHB1YmxpYyBXZWJDb3JlOjpSZWFsdGltZU1lZGlh
U291cmNlCi0jaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAgICwgcHVibGljIEdQVVByb2Nlc3ND
b25uZWN0aW9uOjpDbGllbnQKLSNlbmRpZgotewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2Vi
Q29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkNhcHR1cmVE
ZXZpY2UmLCBjb25zdCBXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnRzJiwgU3RyaW5nJiYgbmFtZSwg
U3RyaW5nJiYgaGFzaFNhbHQsIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyJiwgYm9vbCBzaG91bGRD
YXB0dXJlSW5HUFVQcm9jZXNzKTsKLSAgICB+UmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZSgpOwot
Ci0gICAgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotICAgIElQQzo6Q29ubmVjdGlvbiogY29u
bmVjdGlvbigpOwotCi0gICAgdm9pZCBzZXRTZXR0aW5ncyhXZWJDb3JlOjpSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3MmJik7Ci0KLSAgICB2b2lkIGFwcGx5Q29uc3RyYWludHNTdWNjZWVkZWQo
Y29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJik7Ci0gICAgdm9pZCBh
cHBseUNvbnN0cmFpbnRzRmFpbGVkKFN0cmluZyYmIGZhaWxlZENvbnN0cmFpbnQsIFN0cmluZyYm
IGVycm9yTWVzc2FnZSk7Ci0KLSAgICB2b2lkIGNhcHR1cmVTdG9wcGVkKCk7Ci0gICAgdm9pZCBj
YXB0dXJlRmFpbGVkKCkgZmluYWw7Ci0KLSAgICB2b2lkIHJlbW90ZVZpZGVvU2FtcGxlQXZhaWxh
YmxlKFdlYkNvcmU6OlJlbW90ZVZpZGVvU2FtcGxlJiYpOwotICAgIHZvaWQgcmVtb3RlQXVkaW9T
YW1wbGVzQXZhaWxhYmxlKGNvbnN0IFdURjo6TWVkaWFUaW1lJiwgY29uc3QgV2ViQ29yZTo6UGxh
dGZvcm1BdWRpb0RhdGEmLCBjb25zdCBXZWJDb3JlOjpBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwg
c2l6ZV90KTsKLQotcHJpdmF0ZToKLSAgICBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlKFdlYkNv
cmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpDYXB0dXJlRGV2aWNl
OjpEZXZpY2VUeXBlLCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcmJiBoYXNoU2FsdCwgVXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXImLCBib29sIHNob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpOwotCi0gICAg
Ly8gUmVhbHRpbWVNZWRpYVNvdXJjZQotICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmlu
YWw7Ci0gICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIGZpbmFsOwotICAgIGJvb2wgaXNDYXB0
dXJlU291cmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgYmVnaW5D
b25maWd1cmF0aW9uKCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjb21taXRDb25maWd1cmF0aW9uKCkg
ZmluYWwgeyB9Ci0gICAgYm9vbCBzZXRTaG91bGRBcHBseVJvdGF0aW9uKGJvb2wgLyogc2hvdWxk
QXBwbHlSb3RhdGlvbiAqLykgZmluYWw7Ci0gICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0
IFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHMmLCBBcHBseUNvbnN0cmFpbnRzSGFuZGxlciYmKSBm
aW5hbDsKLSAgICB2b2lkIHJlcXVlc3RUb0VuZChPYnNlcnZlciYpIGZpbmFsOwotICAgIHZvaWQg
c3RvcEJlaW5nT2JzZXJ2ZWQoKSBmaW5hbDsKLSAgICB2b2lkIGhhc0VuZGVkKCkgZmluYWw7Ci0g
ICAgY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygp
IGZpbmFsIHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0KLSAgICBjb25zdCBXZWJDb3JlOjpSZWFsdGlt
ZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBmaW5hbDsKLSAgICB2b2lk
IHdoZW5SZWFkeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYpIGZpbmFsOwotICAg
IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUgZGV2aWNlVHlwZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fZGV2aWNlVHlwZTsgfQotICAgIFJlZjxSZWFsdGltZU1lZGlhU291cmNl
PiBjbG9uZSgpIGZpbmFsOwotCi0jaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAgIC8vIEdQVVBy
b2Nlc3NDb25uZWN0aW9uOjpDbGllbnQKLSAgICB2b2lkIGdwdVByb2Nlc3NDb25uZWN0aW9uRGlk
Q2xvc2UoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgdm9pZCBj
cmVhdGVSZW1vdGVNZWRpYVNvdXJjZShjb25zdCBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlJiwgY29u
c3QgV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50cyYpOwotICAgIHZvaWQgZGlkRmFpbChTdHJpbmcm
JiBlcnJvck1lc3NhZ2UpOwotICAgIHZvaWQgc2V0QXNSZWFkeSgpOwotICAgIHZvaWQgc2V0Q2Fw
YWJpbGl0aWVzKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmJik7Ci0g
ICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNsb25lVmlkZW9Tb3VyY2UoKTsKLQotICAgIFdl
YkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKLSAgICBV
c2VyTWVkaWFDYXB0dXJlTWFuYWdlciYgbV9tYW5hZ2VyOwotICAgIFdlYkNvcmU6OlJlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7Ci0gICAgV2ViQ29yZTo6UmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fc2V0dGluZ3M7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVD4gbV9pbWFnZVRyYW5zZmVyU2Vzc2lv
bjsKLSAgICBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlIG1fZGV2aWNlVHlwZSB7
IFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlVua25vd24gfTsKLQotICAgIERl
cXVlPEFwcGx5Q29uc3RyYWludHNIYW5kbGVyPiBtX3BlbmRpbmdBcHBseUNvbnN0cmFpbnRzQ2Fs
bGJhY2tzOwotICAgIGJvb2wgbV9zaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzIHsgZmFsc2UgfTsK
LSAgICBib29sIG1faXNSZWFkeSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1JlcXVlc3RlZFRv
RW5kIHsgZmFsc2UgfTsKLSAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7Ci0gICAgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTdHJpbmcpPiBtX2NhbGxiYWNrOwotICAgIFdlYkNvcmU6OkNhcHR1cmVE
ZXZpY2UgbV9kZXZpY2U7Ci0gICAgV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50cyBtX2NvbnN0cmFp
bnRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2Uu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0aW1lVmlkZW9T
b3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyZTQ1MTE0MjkwYmUxZjQzMjQyYTY4YWU0OTdiMmQ4YTcz
YmYwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2Ev
UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVhbHRpbWVWaWRlb1Nv
dXJjZS5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCisK
KyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlNoYXJlZFJpbmdC
dWZmZXJTdG9yYWdlLmgiCisjaW5jbHVkZSAiVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuaCIKKyNp
bmNsdWRlICJVc2VyTWVkaWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiVXNl
ck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFDb25z
dHJhaW50cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVhbHRpbWVNZWRpYVNvdXJjZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVtb3RlVmlkZW9TYW1wbGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYkF1ZGlvQnVm
ZmVyTGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBQQUw7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IFJlbW90
ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmNyZWF0ZShjb25zdCBDYXB0dXJlRGV2aWNlJiBkZXZpY2Us
IGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIGNvbnN0cmFpbnRzLCBTdHJpbmcmJiBuYW1lLCBTdHJp
bmcmJiBoYXNoU2FsdCwgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXImIG1hbmFnZXIsIGJvb2wgc2hv
dWxkQ2FwdHVyZUluR1BVUHJvY2VzcykKK3sKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpu
ZXcgUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZShSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmll
cjo6Z2VuZXJhdGUoKSwgZGV2aWNlLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGhhc2hTYWx0KSwg
bWFuYWdlciwgc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2VzcykpOworICAgIG1hbmFnZXIuYWRkVmlk
ZW9Tb3VyY2Uoc291cmNlLmNvcHlSZWYoKSk7CisgICAgc291cmNlLT5jcmVhdGVSZW1vdGVNZWRp
YVNvdXJjZShjb25zdHJhaW50cyk7CisgICAgcmV0dXJuIHNvdXJjZTsKK30KKworUmVtb3RlUmVh
bHRpbWVWaWRlb1NvdXJjZTo6UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZShSZWFsdGltZU1lZGlh
U291cmNlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBDYXB0dXJlRGV2aWNlJiBkZXZpY2Us
IFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhhc2hTYWx0LCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdl
ciYgbWFuYWdlciwgYm9vbCBzaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKQorICAgIDogUmVhbHRp
bWVNZWRpYVNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbywgV1RGTW92ZShu
YW1lKSwgU3RyaW5nOjpudW1iZXIoaWRlbnRpZmllci50b1VJbnQ2NCgpKSwgV1RGTW92ZShoYXNo
U2FsdCkpCisgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fbWFuYWdlciht
YW5hZ2VyKQorICAgICwgbV9zaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKHNob3VsZENhcHR1cmVJ
bkdQVVByb2Nlc3MpCisgICAgLCBtX2RldmljZShkZXZpY2UpCit7CisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICBpZiAobV9kZXZpY2UudHlwZSgpID09IENhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGU6OkNhbWVyYSkKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xl
dG9uKCkudmlkZW9DYXB0dXJlRmFjdG9yeSgpLnNldEFjdGl2ZVNvdXJjZSgqdGhpcyk7CisjZW5k
aWYKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpjcmVhdGVSZW1vdGVNZWRp
YVNvdXJjZShjb25zdCBNZWRpYUNvbnN0cmFpbnRzJiBjb25zdHJhaW50cykKK3sKKyAgICBpZiAo
bV9zaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKQorICAgICAgICBtX2NvbnN0cmFpbnRzID0gY29u
c3RyYWludHM7CisKKyAgICBjb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6Q3JlYXRlTWVkaWFTb3VyY2VGb3JDYXB0
dXJlRGV2aWNlV2l0aENvbnN0cmFpbnRzKGlkZW50aWZpZXIoKSwgbV9kZXZpY2UsIGRldmljZUlE
SGFzaFNhbHQoKSwgY29uc3RyYWludHMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpXShib29sIHN1Y2NlZWRlZCwgYXV0byYmIGVycm9yTWVzc2FnZSwgYXV0byYmIHNldHRp
bmdzLCBhdXRvJiYgY2FwYWJpbGl0aWVzKSB7CisgICAgICAgIGlmICghc3VjY2VlZGVkKSB7Cisg
ICAgICAgICAgICBkaWRGYWlsKFdURk1vdmUoZXJyb3JNZXNzYWdlKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc2V0TmFtZShTdHJpbmcgeyBzZXR0aW5ncy5sYWJl
bCgpLnN0cmluZygpIH0pOworICAgICAgICBzZXRTZXR0aW5ncyhXVEZNb3ZlKHNldHRpbmdzKSk7
CisgICAgICAgIHNldENhcGFiaWxpdGllcyhXVEZNb3ZlKGNhcGFiaWxpdGllcykpOworICAgICAg
ICBzZXRBc1JlYWR5KCk7CisgICAgICAgIGlmIChtX3Nob3VsZENhcHR1cmVJbkdQVVByb2Nlc3Mp
CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29u
bmVjdGlvbigpLmFkZENsaWVudCgqdGhpcyk7CisgICAgfSk7Cit9CisKK1JlbW90ZVJlYWx0aW1l
VmlkZW9Tb3VyY2U6On5SZW1vdGVSZWFsdGltZVZpZGVvU291cmNlKCkKK3sKKyAgICBpZiAobV9z
aG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKQorICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLnJlbW92ZUNsaWVudCgqdGhpcyk7CisKKyNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChtX2RldmljZS50eXBlKCkgPT0gQ2FwdHVy
ZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJhKQorICAgICAgICBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyOjpzaW5nbGV0b24oKS52aWRlb0NhcHR1cmVGYWN0b3J5KCkudW5zZXRBY3RpdmVTb3Vy
Y2UoKnRoaXMpOworI2VuZGlmCit9CisKK3ZvaWQgUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6
d2hlblJlYWR5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJiBjYWxsYmFjaykKK3sK
KyAgICBpZiAobV9pc1JlYWR5KQorICAgICAgICByZXR1cm4gY2FsbGJhY2soV1RGTW92ZShtX2Vy
cm9yTWVzc2FnZSkpOworICAgIG1fY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKK30KKwor
dm9pZCBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpkaWRGYWlsKFN0cmluZyYmIGVycm9yTWVz
c2FnZSkKK3sKKyAgICBtX2lzUmVhZHkgPSB0cnVlOworICAgIG1fZXJyb3JNZXNzYWdlID0gV1RG
TW92ZShlcnJvck1lc3NhZ2UpOworICAgIGlmIChtX2NhbGxiYWNrKQorICAgICAgICBtX2NhbGxi
YWNrKG1fZXJyb3JNZXNzYWdlKTsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNl
OjpzZXRBc1JlYWR5KCkKK3sKKyAgICBtX2lzUmVhZHkgPSB0cnVlOworICAgIGlmIChtX2NhbGxi
YWNrKQorICAgICAgICBtX2NhbGxiYWNrKHsgfSk7Cit9CisKK1JlZjxSZWFsdGltZU1lZGlhU291
cmNlPiBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpjbG9uZSgpCit7CisgICAgYXV0byBpZGVu
dGlmaWVyID0gUmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAg
aWYgKCFjb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
UHJveHk6OkNsb25lIHsgbV9pZGVudGlmaWVyLCBpZGVudGlmaWVyIH0sIDApKQorICAgICAgICBy
ZXR1cm4gKnRoaXM7CisKKyAgICBhdXRvIGNsb25lU291cmNlID0gYWRvcHRSZWYoKm5ldyBSZW1v
dGVSZWFsdGltZVZpZGVvU291cmNlKGlkZW50aWZpZXIsIG1fZGV2aWNlLCBTdHJpbmcgeyBtX3Nl
dHRpbmdzLmxhYmVsKCkuc3RyaW5nKCkgfSwgZGV2aWNlSURIYXNoU2FsdCgpLCBtX21hbmFnZXIs
IG1fc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2VzcykpOworICAgIGNsb25lU291cmNlLT5zZXRTZXR0
aW5ncyhSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgeyBtX3NldHRpbmdzIH0pOworICAgIG1f
bWFuYWdlci5hZGRWaWRlb1NvdXJjZShjbG9uZVNvdXJjZS5jb3B5UmVmKCkpOworICAgIHJldHVy
biBjbG9uZVNvdXJjZTsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpzZXRD
YXBhYmlsaXRpZXMoUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYmIGNhcGFiaWxpdGll
cykKK3sKKyAgICBtX2NhcGFiaWxpdGllcyA9IFdURk1vdmUoY2FwYWJpbGl0aWVzKTsKK30KKwor
dm9pZCBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpzZXRTZXR0aW5ncyhSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3MmJiBzZXR0aW5ncykKK3sKKyAgICBhdXRvIGNoYW5nZWQgPSBtX3NldHRp
bmdzLmRpZmZlcmVuY2Uoc2V0dGluZ3MpOworICAgIG1fc2V0dGluZ3MgPSBXVEZNb3ZlKHNldHRp
bmdzKTsKKyAgICBub3RpZnlTZXR0aW5nc0RpZENoYW5nZU9ic2VydmVycyhjaGFuZ2VkKTsKK30K
Kwordm9pZCBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpyZW1vdGVWaWRlb1NhbXBsZUF2YWls
YWJsZShSZW1vdGVWaWRlb1NhbXBsZSYmIHJlbW90ZVNhbXBsZSkKK3sKKyAgICBBU1NFUlQodHlw
ZSgpID09IFR5cGU6OlZpZGVvKTsKKworICAgIHNldEludHJpbnNpY1NpemUocmVtb3RlU2FtcGxl
LnNpemUoKSk7CisKKyAgICBpZiAoIW1faW1hZ2VUcmFuc2ZlclNlc3Npb24gfHwgbV9pbWFnZVRy
YW5zZmVyU2Vzc2lvbi0+cGl4ZWxGb3JtYXQoKSAhPSByZW1vdGVTYW1wbGUudmlkZW9Gb3JtYXQo
KSkKKyAgICAgICAgbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbiA9IEltYWdlVHJhbnNmZXJTZXNzaW9u
VlQ6OmNyZWF0ZShyZW1vdGVTYW1wbGUudmlkZW9Gb3JtYXQoKSk7CisKKyAgICBpZiAoIW1faW1h
Z2VUcmFuc2ZlclNlc3Npb24pIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHNhbXBsZVJlZiA9IG1faW1hZ2VUcmFuc2Zl
clNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxlKHJlbW90ZVNhbXBsZSk7CisgICAgaWYgKCFzYW1w
bGVSZWYpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjp2aWRlb1NhbXBsZUF2YWlsYWJsZSgq
c2FtcGxlUmVmKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZWFsdGltZVZpZGVvU291
cmNlOjpjb25uZWN0aW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKyAgICBpZiAobV9zaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKQor
ICAgICAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3ND
b25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworI2VuZGlmCisgICAgcmV0dXJuIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCk7Cit9CisKK3ZvaWQgUmVtb3Rl
UmVhbHRpbWVWaWRlb1NvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBjb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OlN0YXJ0
UHJvZHVjaW5nRGF0YSB7IG1faWRlbnRpZmllciB9LCAwKTsKK30KKwordm9pZCBSZW1vdGVSZWFs
dGltZVZpZGVvU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgY29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjpTdG9wUHJvZHVj
aW5nRGF0YSB7IG1faWRlbnRpZmllciB9LCAwKTsKK30KKworYm9vbCBSZW1vdGVSZWFsdGltZVZp
ZGVvU291cmNlOjpzZXRTaG91bGRBcHBseVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlv
bikKK3sKKyAgICBjb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyUHJveHk6OlNldFNob3VsZEFwcGx5Um90YXRpb24geyBtX2lkZW50aWZpZXIsIHNob3Vs
ZEFwcGx5Um90YXRpb24gfSwgMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2NvbnN0IFJlYWx0
aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmNh
cGFiaWxpdGllcygpCit7CisgICAgcmV0dXJuIG1fY2FwYWJpbGl0aWVzOworfQorCit2b2lkIFJl
bW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgTWVkaWFDb25z
dHJhaW50cyYgY29uc3RyYWludHMsIEFwcGx5Q29uc3RyYWludHNIYW5kbGVyJiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgbV9wZW5kaW5nQXBwbHlDb25zdHJhaW50c0NhbGxiYWNrcy5hcHBl
bmQoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIC8vIEZJWE1FOiBVc2Ugc2VuZEFz
eW5jV2l0aFJlcGx5LgorICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6VXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXJQcm94eTo6QXBwbHlDb25zdHJhaW50cyB7IG1faWRlbnRpZmllciwgY29u
c3RyYWludHMgfSwgMCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6YXBw
bHlDb25zdHJhaW50c1N1Y2NlZWRlZChSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmJiBzZXR0
aW5ncykKK3sKKyAgICBzZXRTZXR0aW5ncyhXVEZNb3ZlKHNldHRpbmdzKSk7CisKKyAgICBhdXRv
IGNhbGxiYWNrID0gbV9wZW5kaW5nQXBwbHlDb25zdHJhaW50c0NhbGxiYWNrcy50YWtlRmlyc3Qo
KTsKKyAgICBjYWxsYmFjayh7IH0pOworfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3Vy
Y2U6OmFwcGx5Q29uc3RyYWludHNGYWlsZWQoU3RyaW5nJiYgZmFpbGVkQ29uc3RyYWludCwgU3Ry
aW5nJiYgZXJyb3JNZXNzYWdlKQoreworICAgIGF1dG8gY2FsbGJhY2sgPSBtX3BlbmRpbmdBcHBs
eUNvbnN0cmFpbnRzQ2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgIGNhbGxiYWNrKEFwcGx5Q29u
c3RyYWludHNFcnJvciB7IFdURk1vdmUoZmFpbGVkQ29uc3RyYWludCksIFdURk1vdmUoZXJyb3JN
ZXNzYWdlKSB9KTsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpoYXNFbmRl
ZCgpCit7CisgICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlclByb3h5OjpFbmQgeyBtX2lkZW50aWZpZXIgfSwgMCk7CisgICAgbV9tYW5hZ2VyLnJl
bW92ZUF1ZGlvU291cmNlKG1faWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlUmVhbHRpbWVW
aWRlb1NvdXJjZTo6Y2FwdHVyZVN0b3BwZWQoKQoreworICAgIHN0b3AoKTsKKyAgICBoYXNFbmRl
ZCgpOworfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmNhcHR1cmVGYWlsZWQo
KQoreworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmNhcHR1cmVGYWlsZWQoKTsKKyAgICBoYXNF
bmRlZCgpOworfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OnN0b3BCZWluZ09i
c2VydmVkKCkKK3sKKyAgICBtX2hhc1JlcXVlc3RlZFRvRW5kID0gdHJ1ZTsKKyAgICBjb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OlJlcXVl
c3RUb0VuZCB7IG1faWRlbnRpZmllciB9LCAwKTsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZVZp
ZGVvU291cmNlOjpyZXF1ZXN0VG9FbmQoT2JzZXJ2ZXImIG9ic2VydmVyKQoreworICAgIHN0b3BC
ZWluZ09ic2VydmVkKCk7Cit9CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCit2b2lkIFJlbW90
ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24mKQoreworICAgIEFTU0VSVChtX3Nob3VsZENhcHR1cmVJbkdQVVByb2Nl
c3MpOworICAgIGlmIChpc0VuZGVkKCkgfHwgbV9oYXNSZXF1ZXN0ZWRUb0VuZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgY3JlYXRlUmVtb3RlTWVkaWFTb3VyY2UobV9jb25zdHJhaW50cyk7Cisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCB1cGRhdGUgdGhlIHRyYWNrIGFjY29yZGluZyBjdXJyZW50
IHNldHRpbmdzLgorICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAgc3RhcnRQcm9k
dWNpbmdEYXRhKCk7Cit9CisjZW5kaWYKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZVZpZGVvU291cmNlLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdhNTYzMTYyYTRlZjRlZDRkYjAyZGNhYmQ2ZGJjM2UwZjUzNWI5ZjYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVh
bHRpbWVWaWRlb1NvdXJjZS5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKwor
I2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DYXB0
dXJlRGV2aWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWFsdGltZU1lZGlhU291cmNlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9SZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllci5oPgorI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIENvbm5lY3Rpb247Cit9
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsK
K2NsYXNzIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ7CitzdHJ1Y3QgTWVkaWFDb25zdHJhaW50czsK
K2NsYXNzIFJlbW90ZVZpZGVvU2FtcGxlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI7CisKK2NsYXNzIFJlbW90ZVJlYWx0aW1lVmlkZW9T
b3VyY2UgOiBwdWJsaWMgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZQorI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKyAgICAsIHB1YmxpYyBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50Cisj
ZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFT
b3VyY2U+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlJiwgY29uc3QgV2ViQ29y
ZTo6TWVkaWFDb25zdHJhaW50cyYsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhhc2hTYWx0LCBV
c2VyTWVkaWFDYXB0dXJlTWFuYWdlciYsIGJvb2wgc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2Vzcyk7
CisgICAgflJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2UoKTsKKworICAgIFdlYkNvcmU6OlJlYWx0
aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lk
ZW50aWZpZXI7IH0KKyAgICBJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKTsKKworICAgIHZv
aWQgc2V0U2V0dGluZ3MoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiYpOwor
CisgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzU3VjY2VlZGVkKFdlYkNvcmU6OlJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5ncyYmKTsKKyAgICB2b2lkIGFwcGx5Q29uc3RyYWludHNGYWlsZWQoU3Ry
aW5nJiYgZmFpbGVkQ29uc3RyYWludCwgU3RyaW5nJiYgZXJyb3JNZXNzYWdlKTsKKworICAgIHZv
aWQgY2FwdHVyZVN0b3BwZWQoKTsKKyAgICB2b2lkIGNhcHR1cmVGYWlsZWQoKSBmaW5hbDsKKwor
ICAgIHZvaWQgcmVtb3RlVmlkZW9TYW1wbGVBdmFpbGFibGUoV2ViQ29yZTo6UmVtb3RlVmlkZW9T
YW1wbGUmJik7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZShXZWJD
b3JlOjpSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6Q2FwdHVy
ZURldmljZSYsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhhc2hTYWx0LCBVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlciYsIGJvb2wgc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2Vzcyk7CisKKyAgICAvLyBS
ZWFsdGltZU1lZGlhU291cmNlCisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsK
KyAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgYm9vbCBpc0NhcHR1cmVT
b3VyY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBiZWdpbkNvbmZp
Z3VyYXRpb24oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNvbW1pdENvbmZpZ3VyYXRpb24oKSBmaW5h
bCB7IH0KKyAgICBib29sIHNldFNob3VsZEFwcGx5Um90YXRpb24oYm9vbCAvKiBzaG91bGRBcHBs
eVJvdGF0aW9uICovKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5Q29uc3RyYWludHMoY29uc3QgV2Vi
Q29yZTo6TWVkaWFDb25zdHJhaW50cyYsIEFwcGx5Q29uc3RyYWludHNIYW5kbGVyJiYpIGZpbmFs
OworICAgIHZvaWQgcmVxdWVzdFRvRW5kKE9ic2VydmVyJikgZmluYWw7CisgICAgdm9pZCBzdG9w
QmVpbmdPYnNlcnZlZCgpIGZpbmFsOworICAgIHZvaWQgaGFzRW5kZWQoKSBmaW5hbDsKKyAgICBj
b25zdCBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgZmlu
YWwgeyByZXR1cm4gbV9zZXR0aW5nczsgfQorICAgIGNvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGZpbmFsOworICAgIHZvaWQgd2hl
blJlYWR5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJikgZmluYWw7CisgICAgV2Vi
Q29yZTo6Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSBkZXZpY2VUeXBlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9kZXZpY2UudHlwZSgpOyB9CisgICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+
IGNsb25lKCkgZmluYWw7CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgLy8gR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb246OkNsaWVudAorICAgIHZvaWQgZ3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRD
bG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYpIGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIGNy
ZWF0ZVJlbW90ZU1lZGlhU291cmNlKGNvbnN0IFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHMmKTsK
KyAgICB2b2lkIGRpZEZhaWwoU3RyaW5nJiYgZXJyb3JNZXNzYWdlKTsKKyAgICB2b2lkIHNldEFz
UmVhZHkoKTsKKyAgICB2b2lkIHNldENhcGFiaWxpdGllcyhXZWJDb3JlOjpSZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzJiYpOworCisgICAgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJj
ZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyJiBt
X21hbmFnZXI7CisgICAgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyBt
X2NhcGFiaWxpdGllczsKKyAgICBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mg
bV9zZXR0aW5nczsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZVRyYW5zZmVy
U2Vzc2lvblZUPiBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uOworCisgICAgRGVxdWU8QXBwbHlDb25z
dHJhaW50c0hhbmRsZXI+IG1fcGVuZGluZ0FwcGx5Q29uc3RyYWludHNDYWxsYmFja3M7CisgICAg
Ym9vbCBtX3Nob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MgeyBmYWxzZSB9OworICAgIGJvb2wgbV9p
c1JlYWR5IHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzUmVxdWVzdGVkVG9FbmQgeyBmYWxzZSB9
OworICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFN0cmluZyk+IG1fY2FsbGJhY2s7CisgICAgV2ViQ29yZTo6Q2FwdHVyZURldmljZSBtX2Rldmlj
ZTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnRzIG1fY29uc3RyYWludHM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvY29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL2NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmNwcAppbmRleCBj
MWZmNGU1M2U5MmZiMDE0ZmM2ODgwYWRkYzI2NjBhMjdhOWQ4YjQxLi44ODc0YzMxZTU5ODJlZjUy
M2E5OTYwODA4NGY5YjU1MGM2YzY4NzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvY29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9jb2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5jcHAKQEAgLTMwLDcg
KzMwLDggQEAKIAogI2luY2x1ZGUgIkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyLmgiCiAj
aW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJSZW1vdGVSZWFsdGlt
ZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZS5oIgor
I2luY2x1ZGUgIlJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2UuaCIKICNpbmNsdWRlICJVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgpAQCAtODUsNjAgKzg2LDg3IEBAIHZvaWQg
VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6OnNldHVwQ2FwdHVyZVByb2Nlc3Nlcyhib29sIHNob3Vs
ZENhcHR1cmVBdWRpb0luVUlQCiAgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNp
bmdsZXRvbigpLnNldERpc3BsYXlDYXB0dXJlRmFjdG9yeShtX2Rpc3BsYXlGYWN0b3J5KTsKIH0K
IAotdm9pZCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6YWRkU291cmNlKFJlZjxSZW1vdGVSZWFs
dGltZU1lZGlhU291cmNlPiYmIHNvdXJjZSkKK3ZvaWQgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6
OmFkZEF1ZGlvU291cmNlKFJlZjxSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlPiYmIHNvdXJjZSkK
IHsKLSAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
QXVkaW8pCi0gICAgICAgIG1fcmVtb3RlQXVkaW9DYXB0dXJlU2FtcGxlTWFuYWdlci5hZGRTb3Vy
Y2Uoc291cmNlLmNvcHlSZWYoKSk7CisgICAgYXV0byBpZGVudGlmaWVyID0gc291cmNlLT5pZGVu
dGlmaWVyKCk7CisgICAgQVNTRVJUKCFtX2F1ZGlvU291cmNlcy5jb250YWlucyhpZGVudGlmaWVy
KSk7CisgICAgbV9hdWRpb1NvdXJjZXMuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoc291cmNlKSk7
Cit9CisKK3ZvaWQgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6OnJlbW92ZUF1ZGlvU291cmNlKFJl
YWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyIGlkKQoreworICAgIG1fYXVkaW9Tb3VyY2VzLnJl
bW92ZShpZCk7Cit9CiAKK3ZvaWQgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6OmFkZFZpZGVvU291
cmNlKFJlZjxSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlPiYmIHNvdXJjZSkKK3sKICAgICBhdXRv
IGlkZW50aWZpZXIgPSBzb3VyY2UtPmlkZW50aWZpZXIoKTsKLSAgICBBU1NFUlQoIW1fc291cmNl
cy5jb250YWlucyhpZGVudGlmaWVyKSk7Ci0gICAgbV9zb3VyY2VzLmFkZChpZGVudGlmaWVyLCBX
VEZNb3ZlKHNvdXJjZSkpOworICAgIEFTU0VSVCghbV92aWRlb1NvdXJjZXMuY29udGFpbnMoaWRl
bnRpZmllcikpOworICAgIG1fdmlkZW9Tb3VyY2VzLmFkZChpZGVudGlmaWVyLCBXVEZNb3ZlKHNv
dXJjZSkpOwogfQogCi12b2lkIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjpyZW1vdmVTb3VyY2Uo
UmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIgaWQpCit2b2lkIFVzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyOjpyZW1vdmVWaWRlb1NvdXJjZShSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllciBp
ZCkKIHsKLSAgICBtX3NvdXJjZXMucmVtb3ZlKGlkKTsKKyAgICBtX3ZpZGVvU291cmNlcy5yZW1v
dmUoaWQpOwogfQogCiB2b2lkIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjpzb3VyY2VTdG9wcGVk
KFJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyIGlkKQogewotICAgIGlmIChhdXRvIHNvdXJj
ZSA9IG1fc291cmNlcy5nZXQoaWQpKQorICAgIGlmIChhdXRvIHNvdXJjZSA9IG1fYXVkaW9Tb3Vy
Y2VzLmdldChpZCkpCiAgICAgICAgIHNvdXJjZS0+Y2FwdHVyZVN0b3BwZWQoKTsKKyAgICBlbHNl
IGlmIChhdXRvIHNvdXJjZSA9IG1fdmlkZW9Tb3VyY2VzLmdldChpZCkpCisgICAgICAgIHNvdXJj
ZS0+Y2FwdHVyZVN0b3BwZWQoKTsKK30KKwordm9pZCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6
c291cmNlRW5kZWQoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIgaWRlbnRp
ZmllcikKK3sKKyAgICBtX2F1ZGlvU291cmNlcy5yZW1vdmUoaWRlbnRpZmllcik7CisgICAgbV92
aWRlb1NvdXJjZXMucmVtb3ZlKGlkZW50aWZpZXIpOwogfQogCiB2b2lkIFVzZXJNZWRpYUNhcHR1
cmVNYW5hZ2VyOjpjYXB0dXJlRmFpbGVkKFJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyIGlk
KQogewotICAgIGlmIChhdXRvIHNvdXJjZSA9IG1fc291cmNlcy5nZXQoaWQpKQorICAgIGlmIChh
dXRvIHNvdXJjZSA9IG1fYXVkaW9Tb3VyY2VzLmdldChpZCkpCisgICAgICAgIHNvdXJjZS0+Y2Fw
dHVyZUZhaWxlZCgpOworICAgIGVsc2UgaWYgKGF1dG8gc291cmNlID0gbV92aWRlb1NvdXJjZXMu
Z2V0KGlkKSkKICAgICAgICAgc291cmNlLT5jYXB0dXJlRmFpbGVkKCk7CiB9CiAKIHZvaWQgVXNl
ck1lZGlhQ2FwdHVyZU1hbmFnZXI6OnNvdXJjZU11dGVkQ2hhbmdlZChSZWFsdGltZU1lZGlhU291
cmNlSWRlbnRpZmllciBpZCwgYm9vbCBtdXRlZCkKIHsKLSAgICBpZiAoYXV0byBzb3VyY2UgPSBt
X3NvdXJjZXMuZ2V0KGlkKSkKKyAgICBpZiAoYXV0byBzb3VyY2UgPSBtX2F1ZGlvU291cmNlcy5n
ZXQoaWQpKQorICAgICAgICBzb3VyY2UtPnNldE11dGVkKG11dGVkKTsKKyAgICBlbHNlIGlmIChh
dXRvIHNvdXJjZSA9IG1fdmlkZW9Tb3VyY2VzLmdldChpZCkpCiAgICAgICAgIHNvdXJjZS0+c2V0
TXV0ZWQobXV0ZWQpOwogfQogCi12b2lkIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjpzb3VyY2VT
ZXR0aW5nc0NoYW5nZWQoUmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIgaWQsIGNvbnN0IFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MpCit2b2lkIFVzZXJNZWRpYUNhcHR1
cmVNYW5hZ2VyOjpzb3VyY2VTZXR0aW5nc0NoYW5nZWQoUmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50
aWZpZXIgaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYmIHNldHRpbmdzKQogewotICAg
IGlmIChhdXRvIHNvdXJjZSA9IG1fc291cmNlcy5nZXQoaWQpKQotICAgICAgICBzb3VyY2UtPnNl
dFNldHRpbmdzKFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyhzZXR0aW5ncykpOworICAgIGlm
IChhdXRvIHNvdXJjZSA9IG1fYXVkaW9Tb3VyY2VzLmdldChpZCkpCisgICAgICAgIHNvdXJjZS0+
c2V0U2V0dGluZ3MoV1RGTW92ZShzZXR0aW5ncykpOworICAgIGVsc2UgaWYgKGF1dG8gc291cmNl
ID0gbV92aWRlb1NvdXJjZXMuZ2V0KGlkKSkKKyAgICAgICAgc291cmNlLT5zZXRTZXR0aW5ncyhX
VEZNb3ZlKHNldHRpbmdzKSk7CiB9CiAKIHZvaWQgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6OnJl
bW90ZVZpZGVvU2FtcGxlQXZhaWxhYmxlKFJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyIGlk
LCBSZW1vdGVWaWRlb1NhbXBsZSYmIHNhbXBsZSkKIHsKLSAgICBpZiAoYXV0byBzb3VyY2UgPSBt
X3NvdXJjZXMuZ2V0KGlkKSkKKyAgICBpZiAoYXV0byBzb3VyY2UgPSBtX3ZpZGVvU291cmNlcy5n
ZXQoaWQpKQogICAgICAgICBzb3VyY2UtPnJlbW90ZVZpZGVvU2FtcGxlQXZhaWxhYmxlKFdURk1v
dmUoc2FtcGxlKSk7CiB9CiAKLXZvaWQgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6OmFwcGx5Q29u
c3RyYWludHNTdWNjZWVkZWQoUmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIgaWQsIGNvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MpCit2b2lkIFVzZXJNZWRpYUNh
cHR1cmVNYW5hZ2VyOjphcHBseUNvbnN0cmFpbnRzU3VjY2VlZGVkKFJlYWx0aW1lTWVkaWFTb3Vy
Y2VJZGVudGlmaWVyIGlkLCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmJiBzZXR0aW5ncykK
IHsKLSAgICBpZiAoYXV0byBzb3VyY2UgPSBtX3NvdXJjZXMuZ2V0KGlkKSkKLSAgICAgICAgc291
cmNlLT5hcHBseUNvbnN0cmFpbnRzU3VjY2VlZGVkKHNldHRpbmdzKTsKKyAgICBpZiAoYXV0byBz
b3VyY2UgPSBtX2F1ZGlvU291cmNlcy5nZXQoaWQpKQorICAgICAgICBzb3VyY2UtPmFwcGx5Q29u
c3RyYWludHNTdWNjZWVkZWQoV1RGTW92ZShzZXR0aW5ncykpOworICAgIGVsc2UgaWYgKGF1dG8g
c291cmNlID0gbV92aWRlb1NvdXJjZXMuZ2V0KGlkKSkKKyAgICAgICAgc291cmNlLT5hcHBseUNv
bnN0cmFpbnRzU3VjY2VlZGVkKFdURk1vdmUoc2V0dGluZ3MpKTsKIH0KIAogdm9pZCBVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlcjo6YXBwbHlDb25zdHJhaW50c0ZhaWxlZChSZWFsdGltZU1lZGlhU291
cmNlSWRlbnRpZmllciBpZCwgU3RyaW5nJiYgZmFpbGVkQ29uc3RyYWludCwgU3RyaW5nJiYgbWVz
c2FnZSkKIHsKLSAgICBpZiAoYXV0byBzb3VyY2UgPSBtX3NvdXJjZXMuZ2V0KGlkKSkKKyAgICBp
ZiAoYXV0byBzb3VyY2UgPSBtX2F1ZGlvU291cmNlcy5nZXQoaWQpKQorICAgICAgICBzb3VyY2Ut
PmFwcGx5Q29uc3RyYWludHNGYWlsZWQoV1RGTW92ZShmYWlsZWRDb25zdHJhaW50KSwgV1RGTW92
ZShtZXNzYWdlKSk7CisgICAgZWxzZSBpZiAoYXV0byBzb3VyY2UgPSBtX3ZpZGVvU291cmNlcy5n
ZXQoaWQpKQogICAgICAgICBzb3VyY2UtPmFwcGx5Q29uc3RyYWludHNGYWlsZWQoV1RGTW92ZShm
YWlsZWRDb25zdHJhaW50KSwgV1RGTW92ZShtZXNzYWdlKSk7CiB9CiAKQEAgLTE1OCw3ICsxODYs
NyBAQCBDYXB0dXJlU291cmNlT3JFcnJvciBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6QXVkaW9G
YWN0b3J5OjpjcmVhdGVBdWRpb0NhcHR1cmVTbwogICAgICAgICBEZXByZWNhdGVkR2xvYmFsU2V0
dGluZ3M6OnNldFNob3VsZE1hbmFnZUF1ZGlvU2Vzc2lvbkNhdGVnb3J5KHRydWUpOwogI2VuZGlm
CiAKLSAgICByZXR1cm4gUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZTo6Y3JlYXRlKGRldmljZSwg
KmNvbnN0cmFpbnRzLCB7IH0sIFdURk1vdmUoaGFzaFNhbHQpLCBtX21hbmFnZXIsIG1fc2hvdWxk
Q2FwdHVyZUluR1BVUHJvY2Vzcyk7CisgICAgcmV0dXJuIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3Vy
Y2U6OmNyZWF0ZShkZXZpY2UsICpjb25zdHJhaW50cywgeyB9LCBXVEZNb3ZlKGhhc2hTYWx0KSwg
bV9tYW5hZ2VyLCBtX3Nob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpOwogfQogCiB2b2lkIFVzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyOjpBdWRpb0ZhY3Rvcnk6OnNldFNob3VsZENhcHR1cmVJbkdQVVBy
b2Nlc3MoYm9vbCB2YWx1ZSkKQEAgLTE3Niw3ICsyMDQsNyBAQCBDYXB0dXJlU291cmNlT3JFcnJv
ciBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6VmlkZW9GYWN0b3J5OjpjcmVhdGVWaWRlb0NhcHR1
cmVTbwogICAgICAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9yRXJyb3IgeyAiVmlkZW8gY2FwdHVy
ZSBpbiBHUFVQcm9jZXNzIGlzIG5vdCBpbXBsZW1lbnRlZCJfcyB9OwogI2VuZGlmCiAKLSAgICBy
ZXR1cm4gUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZTo6Y3JlYXRlKGRldmljZSwgKmNvbnN0cmFp
bnRzLCB7IH0sIFdURk1vdmUoaGFzaFNhbHQpLCBtX21hbmFnZXIsIG1fc2hvdWxkQ2FwdHVyZUlu
R1BVUHJvY2Vzcyk7CisgICAgcmV0dXJuIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmNyZWF0
ZShkZXZpY2UsICpjb25zdHJhaW50cywgeyB9LCBXVEZNb3ZlKGhhc2hTYWx0KSwgbV9tYW5hZ2Vy
LCBtX3Nob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKQEAgLTE5MSwxMyArMjE5LDcgQEAgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgVXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXI6OkRpc3BsYXlGYWN0b3J5OjpjcmVhdGVEaXNwbGF5Q2FwdHUKICAgICBp
ZiAoIWNvbnN0cmFpbnRzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIFJlbW90
ZVJlYWx0aW1lTWVkaWFTb3VyY2U6OmNyZWF0ZShkZXZpY2UsICpjb25zdHJhaW50cywgeyB9LCB7
IH0sIG1fbWFuYWdlciwgZmFsc2UpOwotfQotCi12b2lkIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
OjpkaWRVcGRhdGVTb3VyY2VDb25uZWN0aW9uKFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UmIHNv
dXJjZSkKLXsKLSAgICBpZiAoc291cmNlLnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlOjpBdWRpbykKLSAgICAgICAgbV9yZW1vdGVBdWRpb0NhcHR1cmVTYW1wbGVNYW5hZ2VyLmRp
ZFVwZGF0ZVNvdXJjZUNvbm5lY3Rpb24oc291cmNlKTsKKyAgICByZXR1cm4gUmVtb3RlUmVhbHRp
bWVWaWRlb1NvdXJjZTo6Y3JlYXRlKGRldmljZSwgKmNvbnN0cmFpbnRzLCB7IH0sIHsgfSwgbV9t
YW5hZ2VyLCBmYWxzZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9jb2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL2NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmgKaW5kZXggMWFmMWYxOGI5NTBi
ODhjODUzMGZjYjI5N2E0ZmQ4ODM1ZTgzNWQ4MC4uMTlkN2RkY2ZmN2U1MGQwZWNmM2M4N2FmMjVm
YjZiOGU0MTJkYWJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29h
L1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L2NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmgKQEAgLTQzLDcgKzQzLDggQEAgY2xhc3Mg
UmVtb3RlVmlkZW9TYW1wbGU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBSZW1vdGVS
ZWFsdGltZU1lZGlhU291cmNlOworY2xhc3MgUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTsKK2Ns
YXNzIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U7CiBjbGFzcyBXZWJQcm9jZXNzOwogCiBjbGFz
cyBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlciA6IHB1YmxpYyBXZWJQcm9jZXNzU3VwcGxlbWVudCwg
cHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKQEAgLTU3LDkgKzU4LDEzIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpIHsgZGlkUmVjZWl2ZU1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7IH0KICAgICB2b2lkIHNldHVwQ2FwdHVyZVByb2Nlc3Nlcyhi
b29sIHNob3VsZENhcHR1cmVBdWRpb0luVUlQcm9jZXNzLCBib29sIHNob3VsZENhcHR1cmVBdWRp
b0luR1BVUHJvY2VzcywgYm9vbCBzaG91bGRDYXB0dXJlVmlkZW9JblVJUHJvY2VzcywgYm9vbCBz
aG91bGRDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MsIGJvb2wgc2hvdWxkQ2FwdHVyZURpc3BsYXlJ
blVJUHJvY2Vzcyk7CiAKLSAgICB2b2lkIGFkZFNvdXJjZShSZWY8UmVtb3RlUmVhbHRpbWVNZWRp
YVNvdXJjZT4mJik7Ci0gICAgdm9pZCByZW1vdmVTb3VyY2UoV2ViQ29yZTo6UmVhbHRpbWVNZWRp
YVNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgZGlkVXBkYXRlU291cmNlQ29ubmVjdGlvbihS
ZW1vdGVSZWFsdGltZU1lZGlhU291cmNlJik7CisgICAgdm9pZCBhZGRBdWRpb1NvdXJjZShSZWY8
UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZT4mJik7CisgICAgdm9pZCByZW1vdmVBdWRpb1NvdXJj
ZShXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllcik7CisKKyAgICB2b2lkIGFk
ZFZpZGVvU291cmNlKFJlZjxSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlPiYmKTsKKyAgICB2b2lk
IHJlbW92ZVZpZGVvU291cmNlKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVy
KTsKKworICAgIFJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyJiByZW1vdGVDYXB0dXJlU2FtcGxl
TWFuYWdlcigpIHsgcmV0dXJuIG1fcmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXI7IH0KIAogcHJp
dmF0ZToKICAgICAvLyBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlIGZhY3RvcmllcwpAQCAt
MTIyLDIyICsxMjcsMjEgQEAgcHJpdmF0ZToKICAgICAvLyBNZXNzYWdlczo6VXNlck1lZGlhQ2Fw
dHVyZU1hbmFnZXIKICAgICB2b2lkIGNhcHR1cmVGYWlsZWQoV2ViQ29yZTo6UmVhbHRpbWVNZWRp
YVNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc291cmNlU3RvcHBlZChXZWJDb3JlOjpSZWFs
dGltZU1lZGlhU291cmNlSWRlbnRpZmllcik7Ci0gICAgdm9pZCBzb3VyY2VFbmRlZChXZWJDb3Jl
OjpSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllciBpZGVudGlmaWVyKSB7IHJlbW92ZVNvdXJj
ZShpZGVudGlmaWVyKTsgfQorICAgIHZvaWQgc291cmNlRW5kZWQoV2ViQ29yZTo6UmVhbHRpbWVN
ZWRpYVNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKFdlYkNv
cmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyLCBib29sIG11dGVkKTsKLSAgICB2b2lk
IHNvdXJjZVNldHRpbmdzQ2hhbmdlZChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlSWRlbnRp
ZmllciwgY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJik7CisgICAg
dm9pZCBzb3VyY2VTZXR0aW5nc0NoYW5nZWQoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUlk
ZW50aWZpZXIsIFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYmKTsKICAgICB2
b2lkIHJlbW90ZVZpZGVvU2FtcGxlQXZhaWxhYmxlKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3Vy
Y2VJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW1vdGVWaWRlb1NhbXBsZSYmKTsKLSAgICB2b2lkIGFw
cGx5Q29uc3RyYWludHNTdWNjZWVkZWQoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50
aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYpOworICAg
IHZvaWQgYXBwbHlDb25zdHJhaW50c1N1Y2NlZWRlZChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291
cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiYpOwog
ICAgIHZvaWQgYXBwbHlDb25zdHJhaW50c0ZhaWxlZChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291
cmNlSWRlbnRpZmllciwgU3RyaW5nJiYsIFN0cmluZyYmKTsKIAotICAgIFJlZjxXZWJDb3JlOjpS
ZWFsdGltZU1lZGlhU291cmNlPiBjbG9uZVZpZGVvU291cmNlKFJlbW90ZVJlYWx0aW1lTWVkaWFT
b3VyY2UmKTsKLQotICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50
aWZpZXIsIFJlZjxSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlPj4gbV9zb3VyY2VzOworICAgIEhh
c2hNYXA8V2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIsIFJlZjxSZW1vdGVS
ZWFsdGltZUF1ZGlvU291cmNlPj4gbV9hdWRpb1NvdXJjZXM7CisgICAgSGFzaE1hcDxXZWJDb3Jl
OjpSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllciwgUmVmPFJlbW90ZVJlYWx0aW1lVmlkZW9T
b3VyY2U+PiBtX3ZpZGVvU291cmNlczsKICAgICBXZWJQcm9jZXNzJiBtX3Byb2Nlc3M7CiAgICAg
Tm9PcENhcHR1cmVEZXZpY2VNYW5hZ2VyIG1fbm9PcENhcHR1cmVEZXZpY2VNYW5hZ2VyOwogICAg
IEF1ZGlvRmFjdG9yeSBtX2F1ZGlvRmFjdG9yeTsKICAgICBWaWRlb0ZhY3RvcnkgbV92aWRlb0Zh
Y3Rvcnk7CiAgICAgRGlzcGxheUZhY3RvcnkgbV9kaXNwbGF5RmFjdG9yeTsKLSAgICBSZW1vdGVD
YXB0dXJlU2FtcGxlTWFuYWdlciBtX3JlbW90ZUF1ZGlvQ2FwdHVyZVNhbXBsZU1hbmFnZXI7Cisg
ICAgUmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXIgbV9yZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdl
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419725</attachid>
            <date>2021-02-09 08:48:24 -0800</date>
            <delta_ts>2021-02-11 03:08:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221608-20210209174812.patch</filename>
            <type>text/plain</type>
            <size>72658</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDA4ZjQxNDkxMjgxM2JhNDg5
Mjc1YjNlMWQzZDMzZmFkNzQ4OGQ3MzcuLjIzMjQwOTljNDIwMTJjMDc1MjczNDFhOGExZjRhYmQz
MWYxZTg0ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTQgQEAKKzIwMjEtMDItMDkgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFJlbW90ZVJlYWx0aW1l
TWVkaWFTb3VyY2UgaW4gdHdvIGF1ZGlvLXNwZWNpZmljIGFuZCB2aWRlby1zcGVjaWZpYyBjbGFz
c2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE2
MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxp
dCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlIGluIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2Ug
YW5kIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2UuCisgICAgICAgIFRoaXMgd2lsbCBhbGxvdyBS
ZW1vdGVSZWFsdGltZVZpZGVvU291cmNlIHRvIGJlY29tZSBhIFJlYWx0aW1lVmlkZW9DYXB0dXJl
U291cmNlIGluIGEgZm9sbG93LXVwCisgICAgICAgIHRvIHByb3Blcmx5IGhhbmRsZSBmYW4tb3V0
IHRvIG11bHRpcGxlIGNsb25lcyB3aXRoIHZhcmlvdXMgZnJhbWUgcmF0ZXMgYW5kIHJlc29sdXRp
b25zLgorICAgICAgICBUaGlzIGFsc28gYWxsb3dzIHJlbW92aW5nIGRpZmZlcmVuY2VzIG9mIGJl
aGF2aW9ycyBiZXR3ZWVuIGF1ZGlvIGFuZCB2aWRlbyBjbGFzc2VzLgorCisgICAgICAgIE5vIGNo
YW5nZSBvZiBiZWhhdmlvci4KKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAg
ICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vz
cy9jb2NvYS9SZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyOjphZGRTb3VyY2UpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlcjo6ZGlkVXBkYXRlU291cmNlQ29ubmVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyOjpSZW1vdGVBdWRp
bzo6UmVtb3RlQXVkaW8pOgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvUmVtb3RlQ2FwdHVy
ZVNhbXBsZU1hbmFnZXIuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0
aW1lQXVkaW9Tb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRp
bWVBdWRpb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVB
dWRpb1NvdXJjZTo6UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OmNyZWF0ZVJlbW90ZU1lZGlhU291cmNlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6flJlbW90ZVJlYWx0aW1l
QXVkaW9Tb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNl
Ojp3aGVuUmVhZHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNl
OjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6
c2V0QXNSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6
OnNldENhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lQXVkaW9T
b3VyY2U6OnNldFNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVBdWRp
b1NvdXJjZTo6cmVtb3RlQXVkaW9TYW1wbGVzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6Y29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6Y2FwYWJpbGl0aWVz
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6YXBwbHlDb25z
dHJhaW50cyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OmFw
cGx5Q29uc3RyYWludHNTdWNjZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZWFsdGlt
ZUF1ZGlvU291cmNlOjphcHBseUNvbnN0cmFpbnRzRmFpbGVkKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6aGFzRW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlOjpjYXB0dXJlU3RvcHBlZCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OmNhcHR1cmVGYWlsZWQpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlOjpncHVQcm9jZXNzQ29ubmVjdGlvbkRp
ZENsb3NlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0aW1lQXVkaW9T
b3VyY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90
ZVJlYWx0aW1lTWVkaWFTb3VyY2UuaC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVB
dWRpb1NvdXJjZTo6aWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2Nv
YS9SZW1vdGVSZWFsdGltZVZpZGVvU291cmNlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZU1lZGlhU291cmNlLmNwcC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6UmVtb3RlUmVhbHRpbWVWaWRlb1Nv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmNyZWF0
ZVJlbW90ZU1lZGlhU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVWaWRl
b1NvdXJjZTo6flJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjp3aGVuUmVhZHkpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0QXNSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmNsb25lKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0Q2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0U2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpyZW1vdGVWaWRlb1NhbXBsZUF2YWlsYWJsZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmNvbm5lY3Rpb24p
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpzdGFydFByb2R1
Y2luZ0RhdGEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpz
dG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lVmlkZW9T
b3VyY2U6OnNldFNob3VsZEFwcGx5Um90YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZWFsdGltZVZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZWFsdGltZVZpZGVvU291cmNlOjphcHBseUNvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6YXBwbHlDb25zdHJhaW50c1N1Y2NlZWRlZCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmFwcGx5Q29uc3Ry
YWludHNGYWlsZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZWFsdGltZVZpZGVvU291cmNl
OjpoYXNFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6
OmNhcHR1cmVTdG9wcGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVhbHRpbWVWaWRlb1Nv
dXJjZTo6Y2FwdHVyZUZhaWxlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlYWx0aW1lVmlk
ZW9Tb3VyY2U6OnN0b3BCZWluZ09ic2VydmVkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVh
bHRpbWVWaWRlb1NvdXJjZTo6cmVxdWVzdFRvRW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVhbHRpbWVWaWRlb1NvdXJjZTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25EaWRDbG9zZSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZVZpZGVvU291cmNlLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVhbHRpbWVNZWRp
YVNvdXJjZS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvY29jb2EvVXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6YWRk
QXVkaW9Tb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6
cmVtb3ZlQXVkaW9Tb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJlTWFu
YWdlcjo6YWRkVmlkZW9Tb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlcjo6cmVtb3ZlVmlkZW9Tb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFD
YXB0dXJlTWFuYWdlcjo6c291cmNlU3RvcHBlZCk6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyOjpzb3VyY2VFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyOjpjYXB0dXJlRmFpbGVkKToKKyAgICAgICAgKFdlYktpdDo6VXNlck1l
ZGlhQ2FwdHVyZU1hbmFnZXI6OnNvdXJjZU11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjpzb3VyY2VTZXR0aW5nc0NoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6cmVtb3RlVmlkZW9TYW1wbGVBdmFp
bGFibGUpOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6YXBwbHlD
b25zdHJhaW50c1N1Y2NlZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyOjphcHBseUNvbnN0cmFpbnRzRmFpbGVkKToKKyAgICAgICAgKFdlYktpdDo6VXNlck1l
ZGlhQ2FwdHVyZU1hbmFnZXI6OkF1ZGlvRmFjdG9yeTo6Y3JlYXRlQXVkaW9DYXB0dXJlU291cmNl
KToKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6OlZpZGVvRmFjdG9y
eTo6Y3JlYXRlVmlkZW9DYXB0dXJlU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXI6OkRpc3BsYXlGYWN0b3J5OjpjcmVhdGVEaXNwbGF5Q2FwdHVyZVNvdXJj
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5o
OgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6cmVtb3RlQ2FwdHVy
ZVNhbXBsZU1hbmFnZXIpOgorCiAyMDIxLTAyLTA5ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1h
bmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCB0dk9TIGJ1aWxkIGZpeCBhZnRl
ciByMjcyNTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggNGRmMzQ0MzU1ZWE0YTEzZWFlOTkz
N2NjNWRjYTM2MjZmMGY4MDk1OC4uZjY4NjljNWRkZDNkZGU1MDhkZGNkZTdmYjFiOGRmZThjZmRl
ZWE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1Nv
dXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNTgzLDcgKzU4Myw4IEBAIFdlYlByb2Nl
c3MvQXBwbGVQYXkvY29jb2EvV2ViUGF5bWVudENvb3JkaW5hdG9yQ29jb2EubW0KIAogV2ViUHJv
Y2Vzcy9jb2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyLm1tCiBXZWJQcm9jZXNzL2NvY29hL1Jl
bW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyLmNwcAotV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFs
dGltZU1lZGlhU291cmNlLmNwcAorV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZUF1ZGlv
U291cmNlLmNwcAorV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZVZpZGVvU291cmNlLmNw
cAogV2ViUHJvY2Vzcy9jb2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5jcHAKIFdlYlByb2Nl
c3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQogV2ViUHJvY2Vzcy9jb2NvYS9XZWJQ
cm9jZXNzQ29jb2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGYwZGJjYjRjMDE4MWJmZjFiMzk4MjZlNTRiMDI3MTRiY2M2YjIxN2Uu
LjA1ZTU0NWJkODU5Nzk4MTdlNjJmZmYxNzBiYWYyYWE2ZTEyMjc3MWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzY4Niw4ICszNjg2
LDggQEAKIAkJNDE2ODRDNEQyNDY0M0JGQTAwMUNFOEVEIC8qIFJlbW90ZUNhcHR1cmVTYW1wbGVN
YW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUNhcHR1cmVT
YW1wbGVNYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MTY4NEM0RTI0NjQzQzgxMDAxQ0U4RUQgLyogUmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFn
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2ODRDNEYyNDY0M0QzRjAwMUNF
OEVEIC8qIFJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE2ODRDNTAyNDY0NTBGRDAwMUNFOEVEIC8qIFJlbW90
ZVJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQxNjg0QzUxMjQ2NDUwRkQwMDFDRThFRCAvKiBSZW1vdGVSZWFsdGltZU1lZGlh
U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlYWx0aW1l
TWVkaWFTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2ODRDNTAyNDY0
NTBGRDAwMUNFOEVEIC8qIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxNjg0QzUxMjQ2NDUwRkQwMDFDRThFRCAv
KiBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDE2Q0Q3NDUyM0ZCMTc4QjAwNjYxRDk5IC8qIE1ETlNSZWdpc3RlcklkZW50aWZp
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTUROU1JlZ2lzdGVySWRlbnRp
Zmllci5oOyBwYXRoID0gTmV0d29yay93ZWJydGMvTUROU1JlZ2lzdGVySWRlbnRpZmllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZGODA4NjI0NUIzOTc0MDBCNjhGMDIgLyog
TGliV2ViUlRDTmV0d29yay5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBMaWJX
ZWJSVENOZXR3b3JrLm1lc3NhZ2VzLmluOyBwYXRoID0gTmV0d29yay93ZWJydGMvTGliV2ViUlRD
TmV0d29yay5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2Rjgw
ODkyNDVDN0ZGNTAwQjY4RjAyIC8qIExpYldlYlJUQ05ldHdvcmsuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTGliV2ViUlRDTmV0d29yay5jcHA7IHBhdGggPSBOZXR3
b3JrL3dlYnJ0Yy9MaWJXZWJSVENOZXR3b3JrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTM3NTcsNiArMzc1Nyw4IEBACiAJCTQxRTBBN0M2MjNCNjM5NzgwMDU2MTA2MCAvKiBM
aWJXZWJSVENDb2RlY3NQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaWJXZWJSVENDb2RlY3NQcm94
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUwQTdDNzIzQjYzOTc5MDA1NjEw
NjAgLyogTGliV2ViUlRDQ29kZWNzUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTGliV2ViUlRDQ29k
ZWNzUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRTBB
N0M4MjNCNjM5NzkwMDU2MTA2MCAvKiBMaWJXZWJSVENDb2RlY3NQcm94eS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IExpYldlYlJUQ0NvZGVjc1Byb3h5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0MUU2N0E4QzI1RDJDRkQwMDA3QjBBNEMgLyogUmVtb3RlUmVhbHRpbWVBdWRp
b1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxRTY3QThEMjVEMkNGRDAwMDdCMEE0QyAvKiBS
ZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJl
YWx0aW1lQXVkaW9Tb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYw
NjBERDE2NTQzMTc1MDBGMzI4MUMgLyogV2ViU29ja2V0Q2hhbm5lbE1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJTb2NrZXRDaGFubmVsTWVzc2FnZVJlY2VpdmVyLmNw
cDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViU29ja2V0Q2hhbm5lbE1lc3NhZ2VS
ZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTQxRjlG
RDE4MjNFRDhBODEwMDk5QjU3OSAvKiBMaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRDUmVzb2x2ZXJJZGVudGlmaWVy
Lmg7IHBhdGggPSBOZXR3b3JrL3dlYnJ0Yy9MaWJXZWJSVENSZXNvbHZlcklkZW50aWZpZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGQUJEMjgxRjREREZEQzAwNkE2Qzk3IC8q
IENhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC05MDUyLDggKzkwNTQsMTAgQEAKIAkJCQk0MTY4NEM0RjI0NjQzRDNGMDAxQ0U4RUQgLyog
UmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXIuY3BwICovLAogCQkJCTQxNjg0QzRFMjQ2NDNDODEw
MDFDRThFRCAvKiBSZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlci5oICovLAogCQkJCTQxNjg0QzRE
MjQ2NDNCRkEwMDFDRThFRCAvKiBSZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlci5tZXNzYWdlcy5p
biAqLywKLQkJCQk0MTY4NEM1MDI0NjQ1MEZEMDAxQ0U4RUQgLyogUmVtb3RlUmVhbHRpbWVNZWRp
YVNvdXJjZS5jcHAgKi8sCi0JCQkJNDE2ODRDNTEyNDY0NTBGRDAwMUNFOEVEIC8qIFJlbW90ZVJl
YWx0aW1lTWVkaWFTb3VyY2UuaCAqLywKKwkJCQk0MUU2N0E4RDI1RDJDRkQwMDA3QjBBNEMgLyog
UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAgKi8sCisJCQkJNDFFNjdBOEMyNUQyQ0ZEMDAw
N0IwQTRDIC8qIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2UuaCAqLywKKwkJCQk0MTY4NEM1MDI0
NjQ1MEZEMDAxQ0U4RUQgLyogUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAgKi8sCisJCQkJ
NDE2ODRDNTEyNDY0NTBGRDAwMUNFOEVEIC8qIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2UuaCAq
LywKIAkJCQlDRDQ5MUIwNTFFNzBEMDVGMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFn
ZXIuY3BwICovLAogCQkJCUNENDkxQjA2MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlci5oICovLAogCQkJCUNENDkxQjBBMUU3MzJEMTIwMDAwOTA2NiAvKiBVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXIuY3Bw
CmluZGV4IGZhYzRlYzExMTI3MDcwZmYxNDJlNTRhMmVlY2Y5Mjk5MmU4OWE4OGEuLmNmMWFmMTA5
ODk5YzU5OWQ3YTlkZWVjOTA2OGU0YTFmNTY5ODY1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2Vy
LmNwcApAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyOjpz
ZXRDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbikKICAgICAgICAgbV9jb25u
ZWN0aW9uLT5hZGRUaHJlYWRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUNhcHR1cmVT
YW1wbGVNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHRoaXMpOwogfQogCi12b2lkIFJl
bW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyOjphZGRTb3VyY2UoUmVmPFJlbW90ZVJlYWx0aW1lTWVk
aWFTb3VyY2U+JiYgc291cmNlKQordm9pZCBSZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlcjo6YWRk
U291cmNlKFJlZjxSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlPiYmIHNvdXJjZSkKIHsKICAgICBB
U1NFUlQoV1RGOjppc01haW5SdW5Mb29wKCkpOwogICAgIHNldENvbm5lY3Rpb24oc291cmNlLT5j
b25uZWN0aW9uKCkpOwpAQCAtODIsNyArODIsNyBAQCB2b2lkIFJlbW90ZUNhcHR1cmVTYW1wbGVN
YW5hZ2VyOjpyZW1vdmVTb3VyY2UoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aQog
ICAgIH0pOwogfQogCi12b2lkIFJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyOjpkaWRVcGRhdGVT
b3VyY2VDb25uZWN0aW9uKFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UmIHNvdXJjZSkKK3ZvaWQg
UmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXI6OmRpZFVwZGF0ZVNvdXJjZUNvbm5lY3Rpb24oUmVt
b3RlUmVhbHRpbWVBdWRpb1NvdXJjZSYgc291cmNlKQogewogICAgIEFTU0VSVChXVEY6OmlzTWFp
blJ1bkxvb3AoKSk7CiAgICAgc2V0Q29ubmVjdGlvbihzb3VyY2UuY29ubmVjdGlvbigpKTsKQEAg
LTExNyw3ICsxMTcsNyBAQCB2b2lkIFJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyOjphdWRpb1Nh
bXBsZXNBdmFpbGFibGUoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdQogICAgIGl0ZXJhdG9yLT52
YWx1ZS0+YXVkaW9TYW1wbGVzQXZhaWxhYmxlKHRpbWUsIG51bWJlck9mRnJhbWVzKTsKIH0KIAot
UmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXI6OlJlbW90ZUF1ZGlvOjpSZW1vdGVBdWRpbyhSZWY8
UmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZT4mJiBzb3VyY2UpCitSZW1vdGVDYXB0dXJlU2FtcGxl
TWFuYWdlcjo6UmVtb3RlQXVkaW86OlJlbW90ZUF1ZGlvKFJlZjxSZW1vdGVSZWFsdGltZUF1ZGlv
U291cmNlPiYmIHNvdXJjZSkKICAgICA6IG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKICAgICAs
IG1fcmluZ0J1ZmZlcihtYWtlVW5pcXVlPENBUmluZ0J1ZmZlcj4oKSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdl
ci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZUNhcHR1cmVTYW1wbGVN
YW5hZ2VyLmgKaW5kZXggYTQwOThhOTdkNWQxM2U5ZGUzOThmZjhkZjg4Y2YwNWIwNTRlZjg5Yi4u
Y2ZhODE1YWEyZThiNjdiYmUwY2E0YzJlNDdmYTM0NWIzZDFkMTVmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyLmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZUNhcHR1cmVTYW1wbGVN
YW5hZ2VyLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlICJSZW1vdGVSZWFsdGltZU1lZGlh
U291cmNlLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZS5oIgogI2luY2x1
ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DQVJpbmdCdWZmZXIuaD4KQEAgLTQ1LDEwICs0
NSwxMCBAQCBwdWJsaWM6CiAgICAgUmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXIoKTsKICAgICB+
UmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXIoKTsKIAotICAgIHZvaWQgYWRkU291cmNlKFJlZjxS
ZW1vdGVSZWFsdGltZU1lZGlhU291cmNlPiYmKTsKKyAgICB2b2lkIGFkZFNvdXJjZShSZWY8UmVt
b3RlUmVhbHRpbWVBdWRpb1NvdXJjZT4mJik7CiAgICAgdm9pZCByZW1vdmVTb3VyY2UoV2ViQ29y
ZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIpOwogCi0gICAgdm9pZCBkaWRVcGRhdGVT
b3VyY2VDb25uZWN0aW9uKFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UmKTsKKyAgICB2b2lkIGRp
ZFVwZGF0ZVNvdXJjZUNvbm5lY3Rpb24oUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZSYpOwogCiAg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KTsKIApAQCAtNjUsMTMgKzY1LDEzIEBAIHByaXZhdGU6CiAgICAgY2xhc3MgUmVtb3RlQXVkaW8g
ewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAg
IGV4cGxpY2l0IFJlbW90ZUF1ZGlvKFJlZjxSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlPiYmKTsK
KyAgICAgICAgZXhwbGljaXQgUmVtb3RlQXVkaW8oUmVmPFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3Vy
Y2U+JiYpOwogCiAgICAgICAgIHZvaWQgc2V0U3RvcmFnZShjb25zdCBTaGFyZWRNZW1vcnk6Okhh
bmRsZSYsIGNvbnN0IFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHVpbnQ2NF90
IG51bWJlck9mRnJhbWVzKTsKICAgICAgICAgdm9pZCBhdWRpb1NhbXBsZXNBdmFpbGFibGUoTWVk
aWFUaW1lLCB1aW50NjRfdCBudW1iZXJPZkZyYW1lcyk7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBSZWY8UmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZT4gbV9zb3VyY2U7CisgICAgICAgIFJlZjxS
ZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlPiBtX3NvdXJjZTsKICAgICAgICAgV2ViQ29yZTo6Q0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fZGVzY3JpcHRpb247CiAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpDQVJpbmdCdWZmZXI+IG1fcmluZ0J1ZmZlcjsKICAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OldlYkF1ZGlvQnVmZmVyTGlzdD4gbV9idWZmZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVhbHRpbWVBdWRpb1Nv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVhbHRpbWVB
dWRpb1NvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQyMDUxMTdkMDYwMmM2NTdlNjM3OGM1YzYzMjZm
NWNmYzQxYjE4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9j
b2NvYS9SZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlLmNwcApAQCAtMCwwICsxLDIyMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZWFsdGltZUF1
ZGlvU291cmNlLmgiCisKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKworI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiU2hhcmVk
UmluZ0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNsdWRlICJVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5o
IgorI2luY2x1ZGUgIlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyTWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9NZWRpYUNvbnN0cmFpbnRzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWFsdGltZU1l
ZGlhU291cmNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJBdWRpb0J1ZmZlckxpc3QuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgUEFMOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK1JlZjxSZWFsdGltZU1lZGlhU291cmNlPiBSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlOjpj
cmVhdGUoY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRz
KiBjb25zdHJhaW50cywgU3RyaW5nJiYgbmFtZSwgU3RyaW5nJiYgaGFzaFNhbHQsIFVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyJiBtYW5hZ2VyLCBib29sIHNob3VsZENhcHR1cmVJbkdQVVByb2Nlc3Mp
Cit7CisgICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IFJlbW90ZVJlYWx0aW1lQXVkaW9T
b3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXI6OmdlbmVyYXRlKCksIGRldmljZSwg
Y29uc3RyYWludHMsIFdURk1vdmUobmFtZSksIFdURk1vdmUoaGFzaFNhbHQpLCBtYW5hZ2VyLCBz
aG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKSk7CisgICAgbWFuYWdlci5hZGRBdWRpb1NvdXJjZShz
b3VyY2UuY29weVJlZigpKTsKKyAgICBtYW5hZ2VyLnJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2Vy
KCkuYWRkU291cmNlKHNvdXJjZS5jb3B5UmVmKCkpOworICAgIHNvdXJjZS0+Y3JlYXRlUmVtb3Rl
TWVkaWFTb3VyY2UoKTsKKyAgICByZXR1cm4gc291cmNlOworfQorCitSZW1vdGVSZWFsdGltZUF1
ZGlvU291cmNlOjpSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2VJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IENhcHR1cmVEZXZpY2UmIGRldmljZSwgY29uc3Qg
TWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhh
c2hTYWx0LCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlciYgbWFuYWdlciwgYm9vbCBzaG91bGRDYXB0
dXJlSW5HUFVQcm9jZXNzKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlOjpBdWRpbywgV1RGTW92ZShuYW1lKSwgU3RyaW5nOjpudW1iZXIoaWRlbnRp
Zmllci50b1VJbnQ2NCgpKSwgV1RGTW92ZShoYXNoU2FsdCkpCisgICAgLCBtX2lkZW50aWZpZXIo
aWRlbnRpZmllcikKKyAgICAsIG1fbWFuYWdlcihtYW5hZ2VyKQorICAgICwgbV9zaG91bGRDYXB0
dXJlSW5HUFVQcm9jZXNzKHNob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpCisgICAgLCBtX2Rldmlj
ZShkZXZpY2UpCit7CisgICAgaWYgKGNvbnN0cmFpbnRzKQorICAgICAgICBtX2NvbnN0cmFpbnRz
ID0gKmNvbnN0cmFpbnRzOworCisgICAgQVNTRVJUKG1fZGV2aWNlLnR5cGUoKSA9PSBDYXB0dXJl
RGV2aWNlOjpEZXZpY2VUeXBlOjpNaWNyb3Bob25lKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLmF1ZGlvQ2FwdHVy
ZUZhY3RvcnkoKS5zZXRBY3RpdmVTb3VyY2UoKnRoaXMpOworI2VuZGlmCit9CisKK3ZvaWQgUmVt
b3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6Y3JlYXRlUmVtb3RlTWVkaWFTb3VyY2UoKQoreworICAg
IGNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlclByb3h5OjpDcmVhdGVNZWRpYVNvdXJjZUZvckNhcHR1cmVEZXZpY2VXaXRoQ29u
c3RyYWludHMoaWRlbnRpZmllcigpLCBtX2RldmljZSwgZGV2aWNlSURIYXNoU2FsdCgpLCBtX2Nv
bnN0cmFpbnRzKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oYm9vbCBz
dWNjZWVkZWQsIGF1dG8mJiBlcnJvck1lc3NhZ2UsIGF1dG8mJiBzZXR0aW5ncywgYXV0byYmIGNh
cGFiaWxpdGllcykgeworICAgICAgICBpZiAoIXN1Y2NlZWRlZCkgeworICAgICAgICAgICAgZGlk
RmFpbChXVEZNb3ZlKGVycm9yTWVzc2FnZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHNldE5hbWUoU3RyaW5nIHsgc2V0dGluZ3MubGFiZWwoKS5zdHJpbmcoKSB9
KTsKKyAgICAgICAgc2V0U2V0dGluZ3MoV1RGTW92ZShzZXR0aW5ncykpOworICAgICAgICBzZXRD
YXBhYmlsaXRpZXMoV1RGTW92ZShjYXBhYmlsaXRpZXMpKTsKKyAgICAgICAgc2V0QXNSZWFkeSgp
OworICAgICAgICBpZiAobV9zaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKQorICAgICAgICAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5hZGRD
bGllbnQoKnRoaXMpOworICAgIH0pOworfQorCitSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlOjp+
UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZSgpCit7CisgICAgaWYgKG1fc2hvdWxkQ2FwdHVyZUlu
R1BVUHJvY2VzcykKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24oKS5yZW1vdmVDbGllbnQoKnRoaXMpOworCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5hdWRp
b0NhcHR1cmVGYWN0b3J5KCkudW5zZXRBY3RpdmVTb3VyY2UoKnRoaXMpOworI2VuZGlmCit9CisK
K3ZvaWQgUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6d2hlblJlYWR5KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU3RyaW5nKT4mJiBjYWxsYmFjaykKK3sKKyAgICBpZiAobV9pc1JlYWR5KQorICAg
ICAgICByZXR1cm4gY2FsbGJhY2soV1RGTW92ZShtX2Vycm9yTWVzc2FnZSkpOworICAgIG1fY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZUF1ZGlv
U291cmNlOjpkaWRGYWlsKFN0cmluZyYmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBtX2lzUmVhZHkg
PSB0cnVlOworICAgIG1fZXJyb3JNZXNzYWdlID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOworICAg
IGlmIChtX2NhbGxiYWNrKQorICAgICAgICBtX2NhbGxiYWNrKG1fZXJyb3JNZXNzYWdlKTsKK30K
Kwordm9pZCBSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlOjpzZXRBc1JlYWR5KCkKK3sKKyAgICBt
X2lzUmVhZHkgPSB0cnVlOworICAgIGlmIChtX2NhbGxiYWNrKQorICAgICAgICBtX2NhbGxiYWNr
KHsgfSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6c2V0Q2FwYWJpbGl0
aWVzKFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmJiBjYXBhYmlsaXRpZXMpCit7Cisg
ICAgbV9jYXBhYmlsaXRpZXMgPSBXVEZNb3ZlKGNhcGFiaWxpdGllcyk7Cit9CisKK3ZvaWQgUmVt
b3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6c2V0U2V0dGluZ3MoUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzJiYgc2V0dGluZ3MpCit7CisgICAgYXV0byBjaGFuZ2VkID0gbV9zZXR0aW5ncy5kaWZm
ZXJlbmNlKHNldHRpbmdzKTsKKyAgICBtX3NldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7Cisg
ICAgbm90aWZ5U2V0dGluZ3NEaWRDaGFuZ2VPYnNlcnZlcnMoY2hhbmdlZCk7Cit9CisKK3ZvaWQg
UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6cmVtb3RlQXVkaW9TYW1wbGVzQXZhaWxhYmxlKGNv
bnN0IFdURjo6TWVkaWFUaW1lJiB0aW1lLCBjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYgZGF0YSwg
Y29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHNpemVfdCBzaXplKQor
eworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGF1ZGlvU2FtcGxlc0F2YWlsYWJs
ZSh0aW1lLCBkYXRhLCBkZXNjcmlwdGlvbiwgc2l6ZSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiog
UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6Y29ubmVjdGlvbigpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgaWYgKG1fc2hvdWxk
Q2FwdHVyZUluR1BVUHJvY2VzcykKKyAgICAgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyNlbmRpZgor
ICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpOworfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OnN0YXJ0UHJvZHVjaW5n
RGF0YSgpCit7CisgICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlclByb3h5OjpTdGFydFByb2R1Y2luZ0RhdGEgeyBtX2lkZW50aWZpZXIgfSwgMCk7
Cit9CisKK3ZvaWQgUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEo
KQoreworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXJQcm94eTo6U3RvcFByb2R1Y2luZ0RhdGEgeyBtX2lkZW50aWZpZXIgfSwgMCk7Cit9CisK
K2NvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIFJlbW90ZVJl
YWx0aW1lQXVkaW9Tb3VyY2U6OmNhcGFiaWxpdGllcygpCit7CisgICAgcmV0dXJuIG1fY2FwYWJp
bGl0aWVzOworfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OmFwcGx5Q29uc3Ry
YWludHMoY29uc3QgTWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMsIEFwcGx5Q29uc3RyYWlu
dHNIYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9wZW5kaW5nQXBwbHlDb25z
dHJhaW50c0NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IC8vIEZJWE1FOiBVc2Ugc2VuZEFzeW5jV2l0aFJlcGx5LgorICAgIGNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6QXBwbHlDb25zdHJhaW50
cyB7IG1faWRlbnRpZmllciwgY29uc3RyYWludHMgfSwgMCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVh
bHRpbWVBdWRpb1NvdXJjZTo6YXBwbHlDb25zdHJhaW50c1N1Y2NlZWRlZChSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3MmJiBzZXR0aW5ncykKK3sKKyAgICBzZXRTZXR0aW5ncyhXVEZNb3ZlKHNl
dHRpbmdzKSk7CisKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nQXBwbHlDb25zdHJhaW50
c0NhbGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFjayh7IH0pOworfQorCit2b2lkIFJl
bW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OmFwcGx5Q29uc3RyYWludHNGYWlsZWQoU3RyaW5nJiYg
ZmFpbGVkQ29uc3RyYWludCwgU3RyaW5nJiYgZXJyb3JNZXNzYWdlKQoreworICAgIGF1dG8gY2Fs
bGJhY2sgPSBtX3BlbmRpbmdBcHBseUNvbnN0cmFpbnRzQ2FsbGJhY2tzLnRha2VGaXJzdCgpOwor
ICAgIGNhbGxiYWNrKEFwcGx5Q29uc3RyYWludHNFcnJvciB7IFdURk1vdmUoZmFpbGVkQ29uc3Ry
YWludCksIFdURk1vdmUoZXJyb3JNZXNzYWdlKSB9KTsKK30KKwordm9pZCBSZW1vdGVSZWFsdGlt
ZUF1ZGlvU291cmNlOjpoYXNFbmRlZCgpCit7CisgICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjpFbmQgeyBtX2lkZW50aWZpZXIgfSwg
MCk7CisgICAgbV9tYW5hZ2VyLnJlbW92ZUF1ZGlvU291cmNlKG1faWRlbnRpZmllcik7CisgICAg
bV9tYW5hZ2VyLnJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyKCkucmVtb3ZlU291cmNlKGlkZW50
aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZTo6Y2FwdHVyZVN0
b3BwZWQoKQoreworICAgIHN0b3AoKTsKKyAgICBoYXNFbmRlZCgpOworfQorCit2b2lkIFJlbW90
ZVJlYWx0aW1lQXVkaW9Tb3VyY2U6OmNhcHR1cmVGYWlsZWQoKQoreworICAgIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OmNhcHR1cmVGYWlsZWQoKTsKKyAgICBoYXNFbmRlZCgpOworfQorCisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQordm9pZCBSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlOjpncHVQcm9j
ZXNzQ29ubmVjdGlvbkRpZENsb3NlKEdQVVByb2Nlc3NDb25uZWN0aW9uJikKK3sKKyAgICBBU1NF
UlQobV9zaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKTsKKyAgICBpZiAoaXNFbmRlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX21hbmFnZXIucmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXIo
KS5kaWRVcGRhdGVTb3VyY2VDb25uZWN0aW9uKCp0aGlzKTsKKyAgICBjcmVhdGVSZW1vdGVNZWRp
YVNvdXJjZSgpOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXBkYXRlIHRoZSB0cmFjayBhY2Nv
cmRpbmcgY3VycmVudCBzZXR0aW5ncy4KKyAgICBpZiAoaXNQcm9kdWNpbmdEYXRhKCkpCisgICAg
ICAgIHN0YXJ0UHJvZHVjaW5nRGF0YSgpOworfQorI2VuZGlmCisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVhbHRpbWVBdWRp
b1NvdXJjZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0aW1l
QXVkaW9Tb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZTg5MWZhOTMzOGIyM2I4M2I0MzRjYWM4MTYyYTI4
Y2NkMzQzOWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2Nv
Y29hL1JlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2UuaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvQ2FwdHVyZURldmljZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVhbHRpbWVNZWRp
YVNvdXJjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZp
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBD
b25uZWN0aW9uOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb247CitjbGFzcyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOworc3RydWN0IE1lZGlh
Q29uc3RyYWludHM7CitjbGFzcyBSZW1vdGVWaWRlb1NhbXBsZTsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOworCitjbGFzcyBSZW1vdGVS
ZWFsdGltZUF1ZGlvU291cmNlIDogcHVibGljIFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2UK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgLCBwdWJsaWMgR1BVUHJvY2Vzc0Nvbm5lY3Rp
b246OkNsaWVudAorI2VuZGlmCit7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJDb3JlOjpS
ZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6Q2FwdHVyZURldmljZSYs
IGNvbnN0IFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHMqLCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcm
JiBoYXNoU2FsdCwgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXImLCBib29sIHNob3VsZENhcHR1cmVJ
bkdQVVByb2Nlc3MpOworICAgIH5SZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlKCk7CisKKyAgICBX
ZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9u
KCk7CisKKyAgICB2b2lkIHNldFNldHRpbmdzKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyYmKTsKKworICAgIHZvaWQgYXBwbHlDb25zdHJhaW50c1N1Y2NlZWRlZChXZWJDb3Jl
OjpSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmJik7CisgICAgdm9pZCBhcHBseUNvbnN0cmFp
bnRzRmFpbGVkKFN0cmluZyYmIGZhaWxlZENvbnN0cmFpbnQsIFN0cmluZyYmIGVycm9yTWVzc2Fn
ZSk7CisKKyAgICB2b2lkIGNhcHR1cmVTdG9wcGVkKCk7CisgICAgdm9pZCBjYXB0dXJlRmFpbGVk
KCkgZmluYWw7CisKKyAgICB2b2lkIHJlbW90ZUF1ZGlvU2FtcGxlc0F2YWlsYWJsZShjb25zdCBX
VEY6Ok1lZGlhVGltZSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtQXVkaW9EYXRhJiwgY29uc3Qg
V2ViQ29yZTo6QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk7CisKK3ByaXZhdGU6Cisg
ICAgUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZShXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNl
SWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6Q2FwdHVyZURldmljZSYsIGNvbnN0IFdlYkNvcmU6
Ok1lZGlhQ29uc3RyYWludHMqLCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcmJiBoYXNoU2FsdCwgVXNl
ck1lZGlhQ2FwdHVyZU1hbmFnZXImLCBib29sIHNob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpOwor
CisgICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZQorICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRh
KCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIGJvb2wg
aXNDYXB0dXJlU291cmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQg
YmVnaW5Db25maWd1cmF0aW9uKCkgZmluYWwgeyB9CisgICAgdm9pZCBjb21taXRDb25maWd1cmF0
aW9uKCkgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0IFdlYkNvcmU6
Ok1lZGlhQ29uc3RyYWludHMmLCBBcHBseUNvbnN0cmFpbnRzSGFuZGxlciYmKSBmaW5hbDsKKyAg
ICB2b2lkIGhhc0VuZGVkKCkgZmluYWw7CisgICAgY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGZpbmFsIHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0K
KyAgICBjb25zdCBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBh
YmlsaXRpZXMoKSBmaW5hbDsKKyAgICB2b2lkIHdoZW5SZWFkeShDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFN0cmluZyk+JiYpIGZpbmFsOworICAgIFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGUgZGV2aWNlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGV2aWNlLnR5cGUoKTsg
fQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIC8vIEdQVVByb2Nlc3NDb25uZWN0aW9u
OjpDbGllbnQKKyAgICB2b2lkIGdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24mKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBjcmVhdGVSZW1vdGVNZWRp
YVNvdXJjZSgpOworICAgIHZvaWQgZGlkRmFpbChTdHJpbmcmJiBlcnJvck1lc3NhZ2UpOworICAg
IHZvaWQgc2V0QXNSZWFkeSgpOworICAgIHZvaWQgc2V0Q2FwYWJpbGl0aWVzKFdlYkNvcmU6OlJl
YWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmJik7CisKKyAgICBXZWJDb3JlOjpSZWFsdGlt
ZU1lZGlhU291cmNlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisgICAgVXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXImIG1fbWFuYWdlcjsKKyAgICBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOworICAgIFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5ncyBtX3NldHRpbmdzOworCisgICAgRGVxdWU8QXBwbHlDb25zdHJhaW50c0hhbmRs
ZXI+IG1fcGVuZGluZ0FwcGx5Q29uc3RyYWludHNDYWxsYmFja3M7CisgICAgYm9vbCBtX3Nob3Vs
ZENhcHR1cmVJbkdQVVByb2Nlc3MgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1JlYWR5IHsgZmFs
c2UgfTsKKyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CisgICAgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChTdHJpbmcpPiBtX2NhbGxiYWNrOworICAgIFdlYkNvcmU6OkNhcHR1cmVEZXZpY2UgbV9k
ZXZpY2U7CisgICAgV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50cyBtX2NvbnN0cmFpbnRzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTYxZGRlZDg2NmNkNWFkNDljNDZlMjJm
ZWNmOWVlMjczMmRkMjc0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZU1lZGlh
U291cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzOSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2Uu
aCIKLQotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5j
bHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJTaGFyZWRSaW5nQnVmZmVy
U3RvcmFnZS5oIgotI2luY2x1ZGUgIlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmgiCi0jaW5jbHVk
ZSAiVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVu
dENvZGVycy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0lt
YWdlVHJhbnNmZXJTZXNzaW9uVlQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01lZGlhQ29uc3RyYWlu
dHMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFTb3VyY2UuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1JlbW90ZVZpZGVvU2FtcGxlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJBdWRpb0J1ZmZlckxp
c3QuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgUEFMOwotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBSZW1vdGVSZWFs
dGltZU1lZGlhU291cmNlOjpjcmVhdGUoY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25z
dCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cywgU3RyaW5nJiYgbmFtZSwgU3RyaW5nJiYg
aGFzaFNhbHQsIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyJiBtYW5hZ2VyLCBib29sIHNob3VsZENh
cHR1cmVJbkdQVVByb2Nlc3MpCi17Ci0gICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IFJl
bW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXI6Omdl
bmVyYXRlKCksIGRldmljZSwgY29uc3RyYWludHMsIFdURk1vdmUobmFtZSksIFdURk1vdmUoaGFz
aFNhbHQpLCBtYW5hZ2VyLCBzaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKSk7Ci0gICAgbWFuYWdl
ci5hZGRTb3VyY2Uoc291cmNlLmNvcHlSZWYoKSk7Ci0gICAgc291cmNlLT5jcmVhdGVSZW1vdGVN
ZWRpYVNvdXJjZSgpOwotICAgIHJldHVybiBzb3VyY2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBzb3VyY2VUeXBlRnJvbURldmljZVR5cGUoQ2FwdHVyZURl
dmljZTo6RGV2aWNlVHlwZSBkZXZpY2VUeXBlKQotewotICAgIHN3aXRjaCAoZGV2aWNlVHlwZSkg
ewotICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZToKLSAgICAg
ICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvOwotICAgIGNhc2UgQ2Fw
dHVyZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJhOgotICAgIGNhc2UgQ2FwdHVyZURldmljZTo6
RGV2aWNlVHlwZTo6U2NyZWVuOgotICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6
V2luZG93OgotICAgICAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW87
Ci0gICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpTcGVha2VyOgotICAgIGNhc2Ug
Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6VW5rbm93bjoKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpO
b25lOwotfQotCi1SZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpSZW1vdGVSZWFsdGltZU1lZGlh
U291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IENh
cHR1cmVEZXZpY2UmIGRldmljZSwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMs
IFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhhc2hTYWx0LCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdl
ciYgbWFuYWdlciwgYm9vbCBzaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKQotICAgIDogUmVhbHRp
bWVNZWRpYVNvdXJjZShzb3VyY2VUeXBlRnJvbURldmljZVR5cGUoZGV2aWNlLnR5cGUoKSksIFdU
Rk1vdmUobmFtZSksIFN0cmluZzo6bnVtYmVyKGlkZW50aWZpZXIudG9VSW50NjQoKSksIFdURk1v
dmUoaGFzaFNhbHQpKQotICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX21h
bmFnZXIobWFuYWdlcikKLSAgICAsIG1fZGV2aWNlKGRldmljZSkKLSAgICAsIG1fc2hvdWxkQ2Fw
dHVyZUluR1BVUHJvY2VzcyhzaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKQotewotICAgIGlmIChj
b25zdHJhaW50cykKLSAgICAgICAgbV9jb25zdHJhaW50cyA9ICpjb25zdHJhaW50czsKLQotICAg
IHN3aXRjaCAobV9kZXZpY2UudHlwZSgpKSB7Ci0gICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZp
Y2VUeXBlOjpNaWNyb3Bob25lOgotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIFJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLmF1ZGlvQ2FwdHVyZUZhY3Rvcnko
KS5zZXRBY3RpdmVTb3VyY2UoKnRoaXMpOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJhOgotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLnZp
ZGVvQ2FwdHVyZUZhY3RvcnkoKS5zZXRBY3RpdmVTb3VyY2UoKnRoaXMpOwotI2VuZGlmCi0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuOgot
ICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6V2luZG93OgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNwZWFrZXI6Ci0gICAgY2Fz
ZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpVbmtub3duOgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZTo6
Y3JlYXRlUmVtb3RlTWVkaWFTb3VyY2UoKQotewotICAgIGNvbm5lY3Rpb24oKS0+c2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjpDcmVhdGVN
ZWRpYVNvdXJjZUZvckNhcHR1cmVEZXZpY2VXaXRoQ29uc3RyYWludHMoaWRlbnRpZmllcigpLCBt
X2RldmljZSwgZGV2aWNlSURIYXNoU2FsdCgpLCBtX2NvbnN0cmFpbnRzKSwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oYm9vbCBzdWNjZWVkZWQsIGF1dG8mJiBlcnJvck1l
c3NhZ2UsIGF1dG8mJiBzZXR0aW5ncywgYXV0byYmIGNhcGFiaWxpdGllcykgewotICAgICAgICBp
ZiAoIXN1Y2NlZWRlZCkgewotICAgICAgICAgICAgZGlkRmFpbChXVEZNb3ZlKGVycm9yTWVzc2Fn
ZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNldE5hbWUoU3Ry
aW5nIHsgc2V0dGluZ3MubGFiZWwoKS5zdHJpbmcoKSB9KTsKLSAgICAgICAgc2V0U2V0dGluZ3Mo
V1RGTW92ZShzZXR0aW5ncykpOwotICAgICAgICBzZXRDYXBhYmlsaXRpZXMoV1RGTW92ZShjYXBh
YmlsaXRpZXMpKTsKLSAgICAgICAgc2V0QXNSZWFkeSgpOwotICAgICAgICBpZiAobV9zaG91bGRD
YXB0dXJlSW5HUFVQcm9jZXNzKQotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5hZGRDbGllbnQoKnRoaXMpOwotICAgIH0pOwot
fQotCi1SZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjp+UmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJj
ZSgpCi17Ci0gICAgaWYgKG1fc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2VzcykKLSAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5yZW1vdmVD
bGllbnQoKnRoaXMpOwotCi0gICAgc3dpdGNoIChtX2RldmljZS50eXBlKCkpIHsKLSAgICBjYXNl
IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1pY3JvcGhvbmU6Ci0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCku
YXVkaW9DYXB0dXJlRmFjdG9yeSgpLnVuc2V0QWN0aXZlU291cmNlKCp0aGlzKTsKLSNlbmRpZgot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkNhbWVy
YToKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyOjpzaW5nbGV0b24oKS52aWRlb0NhcHR1cmVGYWN0b3J5KCkudW5zZXRBY3RpdmVTb3Vy
Y2UoKnRoaXMpOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FwdHVyZURldmlj
ZTo6RGV2aWNlVHlwZTo6U2NyZWVuOgotICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlw
ZTo6V2luZG93OgotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGU6OlNwZWFrZXI6Ci0gICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpVbmtu
b3duOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVt
b3RlUmVhbHRpbWVNZWRpYVNvdXJjZTo6d2hlblJlYWR5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
U3RyaW5nKT4mJiBjYWxsYmFjaykKLXsKLSAgICBpZiAobV9pc1JlYWR5KQotICAgICAgICByZXR1
cm4gY2FsbGJhY2soV1RGTW92ZShtX2Vycm9yTWVzc2FnZSkpOwotICAgIG1fY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKTsKLX0KLQotdm9pZCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpk
aWRGYWlsKFN0cmluZyYmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBtX2lzUmVhZHkgPSB0cnVlOwot
ICAgIG1fZXJyb3JNZXNzYWdlID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOwotICAgIGlmIChtX2Nh
bGxiYWNrKQotICAgICAgICBtX2NhbGxiYWNrKG1fZXJyb3JNZXNzYWdlKTsKLX0KLQotdm9pZCBS
ZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpzZXRBc1JlYWR5KCkKLXsKLSAgICBtX2lzUmVhZHkg
PSB0cnVlOwotICAgIGlmIChtX2NhbGxiYWNrKQotICAgICAgICBtX2NhbGxiYWNrKHsgfSk7Ci19
Ci0KLVJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpj
bG9uZSgpCi17Ci0gICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OlZpZGVvOgotICAgICAgICByZXR1cm4gY2xvbmVWaWRlb1NvdXJjZSgpOwot
ICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW86Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Tm9uZToKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiAqdGhpczsKLX0KLQotUmVmPFJl
YWx0aW1lTWVkaWFTb3VyY2U+IFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U6OmNsb25lVmlkZW9T
b3VyY2UoKQotewotICAgIGF1dG8gaWRlbnRpZmllciA9IFJlYWx0aW1lTWVkaWFTb3VyY2VJZGVu
dGlmaWVyOjpnZW5lcmF0ZSgpOwotICAgIGlmICghY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjpDbG9uZSB7IG1faWRlbnRpZmllciwgaWRl
bnRpZmllciB9LCAwKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgYXV0byBjbG9uZVNv
dXJjZSA9IGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZShpZGVudGlmaWVy
LCBtX2RldmljZSwgJm1fY29uc3RyYWludHMsIFN0cmluZyB7IG1fc2V0dGluZ3MubGFiZWwoKS5z
dHJpbmcoKSB9LCBkZXZpY2VJREhhc2hTYWx0KCksIG1fbWFuYWdlciwgbV9zaG91bGRDYXB0dXJl
SW5HUFVQcm9jZXNzKSk7Ci0gICAgY2xvbmVTb3VyY2UtPnNldFNldHRpbmdzKFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5ncyB7IG1fc2V0dGluZ3MgfSk7Ci0gICAgbV9tYW5hZ2VyLmFkZFNvdXJj
ZShjbG9uZVNvdXJjZS5jb3B5UmVmKCkpOwotICAgIHJldHVybiBjbG9uZVNvdXJjZTsKLX0KLQot
dm9pZCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpzZXRDYXBhYmlsaXRpZXMoUmVhbHRpbWVN
ZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYmIGNhcGFiaWxpdGllcykKLXsKLSAgICBtX2NhcGFiaWxp
dGllcyA9IFdURk1vdmUoY2FwYWJpbGl0aWVzKTsKLX0KLQotdm9pZCBSZW1vdGVSZWFsdGltZU1l
ZGlhU291cmNlOjpzZXRTZXR0aW5ncyhSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmJiBzZXR0
aW5ncykKLXsKLSAgICBhdXRvIGNoYW5nZWQgPSBtX3NldHRpbmdzLmRpZmZlcmVuY2Uoc2V0dGlu
Z3MpOwotICAgIG1fc2V0dGluZ3MgPSBXVEZNb3ZlKHNldHRpbmdzKTsKLSAgICBub3RpZnlTZXR0
aW5nc0RpZENoYW5nZU9ic2VydmVycyhjaGFuZ2VkKTsKLX0KLQotdm9pZCBSZW1vdGVSZWFsdGlt
ZU1lZGlhU291cmNlOjpyZW1vdGVBdWRpb1NhbXBsZXNBdmFpbGFibGUoY29uc3QgV1RGOjpNZWRp
YVRpbWUmIHRpbWUsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBkYXRhLCBjb25zdCBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgc2l6ZV90IHNpemUpCi17Ci0gICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7Ci0gICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKHRpbWUsIGRhdGEs
IGRlc2NyaXB0aW9uLCBzaXplKTsKLX0KLQotdm9pZCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNl
OjpyZW1vdGVWaWRlb1NhbXBsZUF2YWlsYWJsZShSZW1vdGVWaWRlb1NhbXBsZSYmIHJlbW90ZVNh
bXBsZSkKLXsKLSAgICBBU1NFUlQodHlwZSgpID09IFR5cGU6OlZpZGVvKTsKLQotICAgIHNldElu
dHJpbnNpY1NpemUocmVtb3RlU2FtcGxlLnNpemUoKSk7Ci0KLSAgICBpZiAoIW1faW1hZ2VUcmFu
c2ZlclNlc3Npb24gfHwgbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbi0+cGl4ZWxGb3JtYXQoKSAhPSBy
ZW1vdGVTYW1wbGUudmlkZW9Gb3JtYXQoKSkKLSAgICAgICAgbV9pbWFnZVRyYW5zZmVyU2Vzc2lv
biA9IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZShyZW1vdGVTYW1wbGUudmlkZW9Gb3Jt
YXQoKSk7Ci0KLSAgICBpZiAoIW1faW1hZ2VUcmFuc2ZlclNlc3Npb24pIHsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHNh
bXBsZVJlZiA9IG1faW1hZ2VUcmFuc2ZlclNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxlKHJlbW90
ZVNhbXBsZSk7Ci0gICAgaWYgKCFzYW1wbGVSZWYpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWFsdGltZU1lZGlhU291cmNl
Ojp2aWRlb1NhbXBsZUF2YWlsYWJsZSgqc2FtcGxlUmVmKTsKLX0KLQotSVBDOjpDb25uZWN0aW9u
KiBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpjb25uZWN0aW9uKCkKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKLSAgICBpZiAobV9zaG91
bGRDYXB0dXJlSW5HUFVQcm9jZXNzKQotICAgICAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOwotI2VuZGlm
Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZTo6c3RhcnRQcm9kdWNp
bmdEYXRhKCkKLXsKLSAgICBjb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlVzZXJNZWRpYUNh
cHR1cmVNYW5hZ2VyUHJveHk6OlN0YXJ0UHJvZHVjaW5nRGF0YSB7IG1faWRlbnRpZmllciB9LCAw
KTsKLX0KLQotdm9pZCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0
YSgpCi17Ci0gICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlclByb3h5OjpTdG9wUHJvZHVjaW5nRGF0YSB7IG1faWRlbnRpZmllciB9LCAwKTsKLX0K
LQotYm9vbCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpzZXRTaG91bGRBcHBseVJvdGF0aW9u
KGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikKLXsKLSAgICBjb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OlNldFNob3VsZEFwcGx5Um90YXRp
b24geyBtX2lkZW50aWZpZXIsIHNob3VsZEFwcGx5Um90YXRpb24gfSwgMCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWNvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmIFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U6OmNhcGFiaWxpdGllcygpCi17Ci0gICAgcmV0
dXJuIG1fY2FwYWJpbGl0aWVzOwotfQotCi12b2lkIFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U6
OmFwcGx5Q29uc3RyYWludHMoY29uc3QgV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50cyYgY29uc3Ry
YWludHMsIEFwcGx5Q29uc3RyYWludHNIYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgbV9wZW5kaW5nQXBwbHlDb25zdHJhaW50c0NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIC8vIEZJWE1FOiBVc2Ugc2VuZEFzeW5jV2l0aFJlcGx5Lgot
ICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQ
cm94eTo6QXBwbHlDb25zdHJhaW50cyB7IG1faWRlbnRpZmllciwgY29uc3RyYWludHMgfSwgMCk7
Ci19Ci0KLXZvaWQgUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZTo6YXBwbHlDb25zdHJhaW50c1N1
Y2NlZWRlZChjb25zdCBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRp
bmdzKQotewotICAgIHNldFNldHRpbmdzKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5ncyhzZXR0aW5ncykpOwotCi0gICAgYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ0FwcGx5Q29u
c3RyYWludHNDYWxsYmFja3MudGFrZUZpcnN0KCk7Ci0gICAgY2FsbGJhY2soeyB9KTsKLX0KLQot
dm9pZCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbnRzRmFpbGVkKFN0
cmluZyYmIGZhaWxlZENvbnN0cmFpbnQsIFN0cmluZyYmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBh
dXRvIGNhbGxiYWNrID0gbV9wZW5kaW5nQXBwbHlDb25zdHJhaW50c0NhbGxiYWNrcy50YWtlRmly
c3QoKTsKLSAgICBjYWxsYmFjayhBcHBseUNvbnN0cmFpbnRzRXJyb3IgeyBXVEZNb3ZlKGZhaWxl
ZENvbnN0cmFpbnQpLCBXVEZNb3ZlKGVycm9yTWVzc2FnZSkgfSk7Ci19Ci0KLXZvaWQgUmVtb3Rl
UmVhbHRpbWVNZWRpYVNvdXJjZTo6aGFzRW5kZWQoKQotewotICAgIGNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6RW5kIHsgbV9pZGVudGlm
aWVyIH0sIDApOwotICAgIG1fbWFuYWdlci5yZW1vdmVTb3VyY2UobV9pZGVudGlmaWVyKTsKLX0K
LQotdm9pZCBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpjYXB0dXJlU3RvcHBlZCgpCi17Ci0g
ICAgc3RvcCgpOwotICAgIGhhc0VuZGVkKCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVhbHRpbWVNZWRp
YVNvdXJjZTo6Y2FwdHVyZUZhaWxlZCgpCi17Ci0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6Y2Fw
dHVyZUZhaWxlZCgpOwotICAgIGhhc0VuZGVkKCk7Ci19Ci0KLXZvaWQgUmVtb3RlUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6c3RvcEJlaW5nT2JzZXJ2ZWQoKQotewotICAgIG1faGFzUmVxdWVzdGVkVG9F
bmQgPSB0cnVlOwotICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6VXNlck1lZGlhQ2Fw
dHVyZU1hbmFnZXJQcm94eTo6UmVxdWVzdFRvRW5kIHsgbV9pZGVudGlmaWVyIH0sIDApOwotfQot
Ci12b2lkIFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U6OnJlcXVlc3RUb0VuZChPYnNlcnZlciYg
b2JzZXJ2ZXIpCi17Ci0gICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICBjYXNlIFR5cGU6OkF1ZGlv
OgotICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlOjpyZXF1ZXN0VG9FbmQob2JzZXJ2ZXIpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFR5cGU6OlZpZGVvOgotICAgICAgICBzdG9wQmVpbmdP
YnNlcnZlZCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFR5cGU6Ok5vbmU6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKLXZvaWQgUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZTo6Z3B1UHJvY2Vzc0Nvbm5lY3Rpb25E
aWRDbG9zZShHUFVQcm9jZXNzQ29ubmVjdGlvbiYpCi17Ci0gICAgQVNTRVJUKG1fc2hvdWxkQ2Fw
dHVyZUluR1BVUHJvY2Vzcyk7Ci0gICAgaWYgKGlzRW5kZWQoKSB8fCBtX2hhc1JlcXVlc3RlZFRv
RW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21hbmFnZXIuZGlkVXBkYXRlU291cmNlQ29u
bmVjdGlvbigqdGhpcyk7Ci0gICAgY3JlYXRlUmVtb3RlTWVkaWFTb3VyY2UoKTsKLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHVwZGF0ZSB0aGUgdHJhY2sgYWNjb3JkaW5nIGN1cnJlbnQgc2V0dGlu
Z3MuCi0gICAgaWYgKGlzUHJvZHVjaW5nRGF0YSgpKQotICAgICAgICBzdGFydFByb2R1Y2luZ0Rh
dGEoKTsKLX0KLSNlbmRpZgotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZU1lZGlhU291cmNlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MzkzODhjODMxNmU5OGYyZDlmZjJjYzQzZDE1NTJh
YTQ5MTQ4NjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1JlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2Uu
aAorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2lu
Y2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DYXB0dXJl
RGV2aWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZWFsdGltZU1lZGlhU291cmNlLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9SZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllci5oPgotI2luY2x1ZGUg
PHd0Zi9EZXF1ZS5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIENvbm5lY3Rpb247Ci19Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKLWNs
YXNzIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ7Ci1zdHJ1Y3QgTWVkaWFDb25zdHJhaW50czsKLWNs
YXNzIFJlbW90ZVZpZGVvU2FtcGxlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI7Ci0KLWNsYXNzIFJlbW90ZVJlYWx0aW1lTWVkaWFTb3Vy
Y2UgOiBwdWJsaWMgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZQotI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKLSAgICAsIHB1YmxpYyBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6Q2xpZW50Ci0jZW5k
aWYKLXsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3Vy
Y2U+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlJiwgY29uc3QgV2ViQ29yZTo6
TWVkaWFDb25zdHJhaW50cyosIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhhc2hTYWx0LCBVc2Vy
TWVkaWFDYXB0dXJlTWFuYWdlciYsIGJvb2wgc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2Vzcyk7Ci0g
ICAgflJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UoKTsKLQotICAgIFdlYkNvcmU6OlJlYWx0aW1l
TWVkaWFTb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50
aWZpZXI7IH0KLSAgICBJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKTsKLQotICAgIHZvaWQg
c2V0U2V0dGluZ3MoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiYpOwotCi0g
ICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzU3VjY2VlZGVkKGNvbnN0IFdlYkNvcmU6OlJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5ncyYpOwotICAgIHZvaWQgYXBwbHlDb25zdHJhaW50c0ZhaWxlZChT
dHJpbmcmJiBmYWlsZWRDb25zdHJhaW50LCBTdHJpbmcmJiBlcnJvck1lc3NhZ2UpOwotCi0gICAg
dm9pZCBjYXB0dXJlU3RvcHBlZCgpOwotICAgIHZvaWQgY2FwdHVyZUZhaWxlZCgpIGZpbmFsOwot
Ci0gICAgdm9pZCByZW1vdGVWaWRlb1NhbXBsZUF2YWlsYWJsZShXZWJDb3JlOjpSZW1vdGVWaWRl
b1NhbXBsZSYmKTsKLSAgICB2b2lkIHJlbW90ZUF1ZGlvU2FtcGxlc0F2YWlsYWJsZShjb25zdCBX
VEY6Ok1lZGlhVGltZSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtQXVkaW9EYXRhJiwgY29uc3Qg
V2ViQ29yZTo6QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk7Ci0KLXByaXZhdGU6Ci0g
ICAgUmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZShXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNl
SWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6Q2FwdHVyZURldmljZSYsIGNvbnN0IFdlYkNvcmU6
Ok1lZGlhQ29uc3RyYWludHMqLCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcmJiBoYXNoU2FsdCwgVXNl
ck1lZGlhQ2FwdHVyZU1hbmFnZXImLCBib29sIHNob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpOwot
Ci0gICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZQotICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRh
KCkgZmluYWw7Ci0gICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIGZpbmFsOwotICAgIGJvb2wg
aXNDYXB0dXJlU291cmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQg
YmVnaW5Db25maWd1cmF0aW9uKCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjb21taXRDb25maWd1cmF0
aW9uKCkgZmluYWwgeyB9Ci0gICAgYm9vbCBzZXRTaG91bGRBcHBseVJvdGF0aW9uKGJvb2wgLyog
c2hvdWxkQXBwbHlSb3RhdGlvbiAqLykgZmluYWw7Ci0gICAgdm9pZCBhcHBseUNvbnN0cmFpbnRz
KGNvbnN0IFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHMmLCBBcHBseUNvbnN0cmFpbnRzSGFuZGxl
ciYmKSBmaW5hbDsKLSAgICB2b2lkIHJlcXVlc3RUb0VuZChPYnNlcnZlciYpIGZpbmFsOwotICAg
IHZvaWQgc3RvcEJlaW5nT2JzZXJ2ZWQoKSBmaW5hbDsKLSAgICB2b2lkIGhhc0VuZGVkKCkgZmlu
YWw7Ci0gICAgY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0
aW5ncygpIGZpbmFsIHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0KLSAgICBjb25zdCBXZWJDb3JlOjpS
ZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBmaW5hbDsKLSAg
ICB2b2lkIHdoZW5SZWFkeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYpIGZpbmFs
OwotICAgIFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUgZGV2aWNlVHlwZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fZGV2aWNlLnR5cGUoKTsgfQotICAgIFJlZjxSZWFsdGltZU1l
ZGlhU291cmNlPiBjbG9uZSgpIGZpbmFsOwotCi0jaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAg
IC8vIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpDbGllbnQKLSAgICB2b2lkIGdwdVByb2Nlc3NDb25u
ZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vzc0Nvbm5lY3Rpb24mKSBmaW5hbDsKLSNlbmRpZgotCi0g
ICAgdm9pZCBjcmVhdGVSZW1vdGVNZWRpYVNvdXJjZSgpOwotICAgIHZvaWQgZGlkRmFpbChTdHJp
bmcmJiBlcnJvck1lc3NhZ2UpOwotICAgIHZvaWQgc2V0QXNSZWFkeSgpOwotICAgIHZvaWQgc2V0
Q2FwYWJpbGl0aWVzKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmJik7
Ci0gICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNsb25lVmlkZW9Tb3VyY2UoKTsKLQotICAg
IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKLSAg
ICBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlciYgbV9tYW5hZ2VyOwotICAgIFdlYkNvcmU6OlJlYWx0
aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7Ci0gICAgV2ViQ29yZTo6
UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fc2V0dGluZ3M7Ci0KLSAgICBXZWJDb3JlOjpD
YXB0dXJlRGV2aWNlIG1fZGV2aWNlOwotICAgIFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHMgbV9j
b25zdHJhaW50czsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZVRyYW5zZmVy
U2Vzc2lvblZUPiBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uOwotCi0gICAgRGVxdWU8QXBwbHlDb25z
dHJhaW50c0hhbmRsZXI+IG1fcGVuZGluZ0FwcGx5Q29uc3RyYWludHNDYWxsYmFja3M7Ci0gICAg
Ym9vbCBtX3Nob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9p
c1JlYWR5IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzUmVxdWVzdGVkVG9FbmQgeyBmYWxzZSB9
OwotICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKLSAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFN0cmluZyk+IG1fY2FsbGJhY2s7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVh
bHRpbWVWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVt
b3RlUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzRlODA1YzZlODY4Njg5NTE5
Njg2MTc1M2M1MDkzNjIwYmMwZDFkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZVZpZGVvU291cmNlLmNwcApAQCAtMCwwICsx
LDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1v
dGVSZWFsdGltZVZpZGVvU291cmNlLmgiCisKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5j
bHVkZSAiU2hhcmVkUmluZ0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNsdWRlICJVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlci5oIgorI2luY2x1ZGUgIlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyTWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9NZWRpYUNvbnN0cmFpbnRzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWFsdGltZU1l
ZGlhU291cmNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW1vdGVWaWRlb1NhbXBsZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvV2ViQXVkaW9CdWZmZXJMaXN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcg
bmFtZXNwYWNlIFBBTDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZWY8UmVhbHRpbWVN
ZWRpYVNvdXJjZT4gUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6Y3JlYXRlKGNvbnN0IENhcHR1
cmVEZXZpY2UmIGRldmljZSwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMsIFN0
cmluZyYmIG5hbWUsIFN0cmluZyYmIGhhc2hTYWx0LCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlciYg
bWFuYWdlciwgYm9vbCBzaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKQoreworICAgIGF1dG8gc291
cmNlID0gYWRvcHRSZWYoKm5ldyBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlKFJlYWx0aW1lTWVk
aWFTb3VyY2VJZGVudGlmaWVyOjpnZW5lcmF0ZSgpLCBkZXZpY2UsIGNvbnN0cmFpbnRzLCBXVEZN
b3ZlKG5hbWUpLCBXVEZNb3ZlKGhhc2hTYWx0KSwgbWFuYWdlciwgc2hvdWxkQ2FwdHVyZUluR1BV
UHJvY2VzcykpOworICAgIG1hbmFnZXIuYWRkVmlkZW9Tb3VyY2Uoc291cmNlLmNvcHlSZWYoKSk7
CisgICAgc291cmNlLT5jcmVhdGVSZW1vdGVNZWRpYVNvdXJjZSgpOworICAgIHJldHVybiBzb3Vy
Y2U7Cit9CisKK1JlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OlJlbW90ZVJlYWx0aW1lVmlkZW9T
b3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgQ2Fw
dHVyZURldmljZSYgZGV2aWNlLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cywg
U3RyaW5nJiYgbmFtZSwgU3RyaW5nJiYgaGFzaFNhbHQsIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
JiBtYW5hZ2VyLCBib29sIHNob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpCisgICAgOiBSZWFsdGlt
ZU1lZGlhU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBXVEZNb3ZlKG5h
bWUpLCBTdHJpbmc6Om51bWJlcihpZGVudGlmaWVyLnRvVUludDY0KCkpLCBXVEZNb3ZlKGhhc2hT
YWx0KSkKKyAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgICwgbV9tYW5hZ2VyKG1h
bmFnZXIpCisgICAgLCBtX2RldmljZShkZXZpY2UpCisgICAgLCBtX3Nob3VsZENhcHR1cmVJbkdQ
VVByb2Nlc3Moc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2VzcykKK3sKKyAgICBpZiAoY29uc3RyYWlu
dHMpCisgICAgICAgIG1fY29uc3RyYWludHMgPSAqY29uc3RyYWludHM7CisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICBpZiAobV9kZXZpY2UudHlwZSgpID09IENhcHR1cmVEZXZpY2U6OkRl
dmljZVR5cGU6OkNhbWVyYSkKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2lu
Z2xldG9uKCkudmlkZW9DYXB0dXJlRmFjdG9yeSgpLnNldEFjdGl2ZVNvdXJjZSgqdGhpcyk7Cisj
ZW5kaWYKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpjcmVhdGVSZW1vdGVN
ZWRpYVNvdXJjZSgpCit7CisgICAgY29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OkNyZWF0ZU1lZGlhU291cmNlRm9y
Q2FwdHVyZURldmljZVdpdGhDb25zdHJhaW50cyhpZGVudGlmaWVyKCksIG1fZGV2aWNlLCBkZXZp
Y2VJREhhc2hTYWx0KCksIG1fY29uc3RyYWludHMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXShib29sIHN1Y2NlZWRlZCwgYXV0byYmIGVycm9yTWVzc2FnZSwgYXV0byYm
IHNldHRpbmdzLCBhdXRvJiYgY2FwYWJpbGl0aWVzKSB7CisgICAgICAgIGlmICghc3VjY2VlZGVk
KSB7CisgICAgICAgICAgICBkaWRGYWlsKFdURk1vdmUoZXJyb3JNZXNzYWdlKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc2V0TmFtZShTdHJpbmcgeyBzZXR0aW5n
cy5sYWJlbCgpLnN0cmluZygpIH0pOworICAgICAgICBzZXRTZXR0aW5ncyhXVEZNb3ZlKHNldHRp
bmdzKSk7CisgICAgICAgIHNldENhcGFiaWxpdGllcyhXVEZNb3ZlKGNhcGFiaWxpdGllcykpOwor
ICAgICAgICBzZXRBc1JlYWR5KCk7CisgICAgICAgIGlmIChtX3Nob3VsZENhcHR1cmVJbkdQVVBy
b2Nlc3MpCisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9j
ZXNzQ29ubmVjdGlvbigpLmFkZENsaWVudCgqdGhpcyk7CisgICAgfSk7Cit9CisKK1JlbW90ZVJl
YWx0aW1lVmlkZW9Tb3VyY2U6On5SZW1vdGVSZWFsdGltZVZpZGVvU291cmNlKCkKK3sKKyAgICBp
ZiAobV9zaG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKQorICAgICAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLnJlbW92ZUNsaWVudCgqdGhpcyk7
CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChtX2RldmljZS50eXBlKCkgPT0g
Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJhKQorICAgICAgICBSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS52aWRlb0NhcHR1cmVGYWN0b3J5KCkudW5zZXRBY3Rp
dmVTb3VyY2UoKnRoaXMpOworI2VuZGlmCit9CisKK3ZvaWQgUmVtb3RlUmVhbHRpbWVWaWRlb1Nv
dXJjZTo6d2hlblJlYWR5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJiBjYWxsYmFj
aykKK3sKKyAgICBpZiAobV9pc1JlYWR5KQorICAgICAgICByZXR1cm4gY2FsbGJhY2soV1RGTW92
ZShtX2Vycm9yTWVzc2FnZSkpOworICAgIG1fY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsK
K30KKwordm9pZCBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpkaWRGYWlsKFN0cmluZyYmIGVy
cm9yTWVzc2FnZSkKK3sKKyAgICBtX2lzUmVhZHkgPSB0cnVlOworICAgIG1fZXJyb3JNZXNzYWdl
ID0gV1RGTW92ZShlcnJvck1lc3NhZ2UpOworICAgIGlmIChtX2NhbGxiYWNrKQorICAgICAgICBt
X2NhbGxiYWNrKG1fZXJyb3JNZXNzYWdlKTsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZVZpZGVv
U291cmNlOjpzZXRBc1JlYWR5KCkKK3sKKyAgICBtX2lzUmVhZHkgPSB0cnVlOworICAgIGlmICht
X2NhbGxiYWNrKQorICAgICAgICBtX2NhbGxiYWNrKHsgfSk7Cit9CisKK1JlZjxSZWFsdGltZU1l
ZGlhU291cmNlPiBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpjbG9uZSgpCit7CisgICAgYXV0
byBpZGVudGlmaWVyID0gUmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXI6OmdlbmVyYXRlKCk7
CisgICAgaWYgKCFjb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyUHJveHk6OkNsb25lIHsgbV9pZGVudGlmaWVyLCBpZGVudGlmaWVyIH0sIDApKQorICAg
ICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBhdXRvIGNsb25lU291cmNlID0gYWRvcHRSZWYoKm5l
dyBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlKGlkZW50aWZpZXIsIG1fZGV2aWNlLCAmbV9jb25z
dHJhaW50cywgU3RyaW5nIHsgbV9zZXR0aW5ncy5sYWJlbCgpLnN0cmluZygpIH0sIGRldmljZUlE
SGFzaFNhbHQoKSwgbV9tYW5hZ2VyLCBtX3Nob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpKTsKKyAg
ICBjbG9uZVNvdXJjZS0+c2V0U2V0dGluZ3MoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHsg
bV9zZXR0aW5ncyB9KTsKKyAgICBtX21hbmFnZXIuYWRkVmlkZW9Tb3VyY2UoY2xvbmVTb3VyY2Uu
Y29weVJlZigpKTsKKyAgICByZXR1cm4gY2xvbmVTb3VyY2U7Cit9CisKK3ZvaWQgUmVtb3RlUmVh
bHRpbWVWaWRlb1NvdXJjZTo6c2V0Q2FwYWJpbGl0aWVzKFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMmJiBjYXBhYmlsaXRpZXMpCit7CisgICAgbV9jYXBhYmlsaXRpZXMgPSBXVEZNb3Zl
KGNhcGFiaWxpdGllcyk7Cit9CisKK3ZvaWQgUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0
U2V0dGluZ3MoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiYgc2V0dGluZ3MpCit7CisgICAg
YXV0byBjaGFuZ2VkID0gbV9zZXR0aW5ncy5kaWZmZXJlbmNlKHNldHRpbmdzKTsKKyAgICBtX3Nl
dHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7CisgICAgbm90aWZ5U2V0dGluZ3NEaWRDaGFuZ2VP
YnNlcnZlcnMoY2hhbmdlZCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6
cmVtb3RlVmlkZW9TYW1wbGVBdmFpbGFibGUoUmVtb3RlVmlkZW9TYW1wbGUmJiByZW1vdGVTYW1w
bGUpCit7CisgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlOjpWaWRlbyk7CisKKyAgICBzZXRJbnRy
aW5zaWNTaXplKHJlbW90ZVNhbXBsZS5zaXplKCkpOworCisgICAgaWYgKCFtX2ltYWdlVHJhbnNm
ZXJTZXNzaW9uIHx8IG1faW1hZ2VUcmFuc2ZlclNlc3Npb24tPnBpeGVsRm9ybWF0KCkgIT0gcmVt
b3RlU2FtcGxlLnZpZGVvRm9ybWF0KCkpCisgICAgICAgIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24g
PSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGUocmVtb3RlU2FtcGxlLnZpZGVvRm9ybWF0
KCkpOworCisgICAgaWYgKCFtX2ltYWdlVHJhbnNmZXJTZXNzaW9uKSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzYW1w
bGVSZWYgPSBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uLT5jcmVhdGVNZWRpYVNhbXBsZShyZW1vdGVT
YW1wbGUpOworICAgIGlmICghc2FtcGxlUmVmKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
dmlkZW9TYW1wbGVBdmFpbGFibGUoKnNhbXBsZVJlZik7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiog
UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6Y29ubmVjdGlvbigpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgaWYgKG1fc2hvdWxk
Q2FwdHVyZUluR1BVUHJvY2VzcykKKyAgICAgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyNlbmRpZgor
ICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpOworfQorCit2b2lkIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OnN0YXJ0UHJvZHVjaW5n
RGF0YSgpCit7CisgICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlclByb3h5OjpTdGFydFByb2R1Y2luZ0RhdGEgeyBtX2lkZW50aWZpZXIgfSwgMCk7
Cit9CisKK3ZvaWQgUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEo
KQoreworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXJQcm94eTo6U3RvcFByb2R1Y2luZ0RhdGEgeyBtX2lkZW50aWZpZXIgfSwgMCk7Cit9CisK
K2Jvb2wgUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0U2hvdWxkQXBwbHlSb3RhdGlvbihi
b29sIHNob3VsZEFwcGx5Um90YXRpb24pCit7CisgICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjpTZXRTaG91bGRBcHBseVJvdGF0aW9u
IHsgbV9pZGVudGlmaWVyLCBzaG91bGRBcHBseVJvdGF0aW9uIH0sIDApOworICAgIHJldHVybiB0
cnVlOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBSZW1vdGVS
ZWFsdGltZVZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMoKQoreworICAgIHJldHVybiBtX2NhcGFi
aWxpdGllczsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjphcHBseUNvbnN0
cmFpbnRzKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIGNvbnN0cmFpbnRzLCBBcHBseUNvbnN0cmFp
bnRzSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fcGVuZGluZ0FwcGx5Q29u
c3RyYWludHNDYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICAvLyBGSVhNRTogVXNlIHNlbmRBc3luY1dpdGhSZXBseS4KKyAgICBjb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OkFwcGx5Q29uc3RyYWlu
dHMgeyBtX2lkZW50aWZpZXIsIGNvbnN0cmFpbnRzIH0sIDApOworfQorCit2b2lkIFJlbW90ZVJl
YWx0aW1lVmlkZW9Tb3VyY2U6OmFwcGx5Q29uc3RyYWludHNTdWNjZWVkZWQoUmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzJiYgc2V0dGluZ3MpCit7CisgICAgc2V0U2V0dGluZ3MoV1RGTW92ZShz
ZXR0aW5ncykpOworCisgICAgYXV0byBjYWxsYmFjayA9IG1fcGVuZGluZ0FwcGx5Q29uc3RyYWlu
dHNDYWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJhY2soeyB9KTsKK30KKwordm9pZCBS
ZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjphcHBseUNvbnN0cmFpbnRzRmFpbGVkKFN0cmluZyYm
IGZhaWxlZENvbnN0cmFpbnQsIFN0cmluZyYmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBhdXRvIGNh
bGxiYWNrID0gbV9wZW5kaW5nQXBwbHlDb25zdHJhaW50c0NhbGxiYWNrcy50YWtlRmlyc3QoKTsK
KyAgICBjYWxsYmFjayhBcHBseUNvbnN0cmFpbnRzRXJyb3IgeyBXVEZNb3ZlKGZhaWxlZENvbnN0
cmFpbnQpLCBXVEZNb3ZlKGVycm9yTWVzc2FnZSkgfSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVhbHRp
bWVWaWRlb1NvdXJjZTo6aGFzRW5kZWQoKQoreworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6RW5kIHsgbV9pZGVudGlmaWVyIH0s
IDApOworICAgIG1fbWFuYWdlci5yZW1vdmVBdWRpb1NvdXJjZShtX2lkZW50aWZpZXIpOworfQor
Cit2b2lkIFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U6OmNhcHR1cmVTdG9wcGVkKCkKK3sKKyAg
ICBzdG9wKCk7CisgICAgaGFzRW5kZWQoKTsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZVZpZGVv
U291cmNlOjpjYXB0dXJlRmFpbGVkKCkKK3sKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpjYXB0
dXJlRmFpbGVkKCk7CisgICAgaGFzRW5kZWQoKTsKK30KKwordm9pZCBSZW1vdGVSZWFsdGltZVZp
ZGVvU291cmNlOjpzdG9wQmVpbmdPYnNlcnZlZCgpCit7CisgICAgbV9oYXNSZXF1ZXN0ZWRUb0Vu
ZCA9IHRydWU7CisgICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlclByb3h5OjpSZXF1ZXN0VG9FbmQgeyBtX2lkZW50aWZpZXIgfSwgMCk7Cit9CisK
K3ZvaWQgUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6cmVxdWVzdFRvRW5kKE9ic2VydmVyJiBv
YnNlcnZlcikKK3sKKyAgICBzdG9wQmVpbmdPYnNlcnZlZCgpOworfQorCisjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQordm9pZCBSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlOjpncHVQcm9jZXNzQ29u
bmVjdGlvbkRpZENsb3NlKEdQVVByb2Nlc3NDb25uZWN0aW9uJikKK3sKKyAgICBBU1NFUlQobV9z
aG91bGRDYXB0dXJlSW5HUFVQcm9jZXNzKTsKKyAgICBpZiAoaXNFbmRlZCgpIHx8IG1faGFzUmVx
dWVzdGVkVG9FbmQpCisgICAgICAgIHJldHVybjsKKworICAgIGNyZWF0ZVJlbW90ZU1lZGlhU291
cmNlKCk7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1cGRhdGUgdGhlIHRyYWNrIGFjY29yZGlu
ZyBjdXJyZW50IHNldHRpbmdzLgorICAgIGlmIChpc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAg
c3RhcnRQcm9kdWNpbmdEYXRhKCk7Cit9CisjZW5kaWYKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9SZW1vdGVSZWFsdGltZVZpZGVvU291
cmNlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvUmVtb3RlUmVhbHRpbWVWaWRl
b1NvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwODcyYjliYjkzOWM5ZjRlN2RmYjViMjRkOWRiNjg5MTgy
ZDQyMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2Ev
UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZS5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKKworI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9DYXB0dXJlRGV2aWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWFsdGltZU1lZGlhU291
cmNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllci5o
PgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIENvbm5l
Y3Rpb247Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbjsKK2NsYXNzIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ7CitzdHJ1Y3QgTWVkaWFDb25z
dHJhaW50czsKK2NsYXNzIFJlbW90ZVZpZGVvU2FtcGxlOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI7CisKK2NsYXNzIFJlbW90ZVJlYWx0
aW1lVmlkZW9Tb3VyY2UgOiBwdWJsaWMgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZQorI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICAsIHB1YmxpYyBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
Q2xpZW50CisjZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkNvcmU6OlJlYWx0
aW1lTWVkaWFTb3VyY2U+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpDYXB0dXJlRGV2aWNlJiwgY29u
c3QgV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50cyosIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhh
c2hTYWx0LCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlciYsIGJvb2wgc2hvdWxkQ2FwdHVyZUluR1BV
UHJvY2Vzcyk7CisgICAgflJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2UoKTsKKworICAgIFdlYkNv
cmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICBJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKTsK
KworICAgIHZvaWQgc2V0U2V0dGluZ3MoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzJiYpOworCisgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzU3VjY2VlZGVkKFdlYkNvcmU6OlJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYmKTsKKyAgICB2b2lkIGFwcGx5Q29uc3RyYWludHNG
YWlsZWQoU3RyaW5nJiYgZmFpbGVkQ29uc3RyYWludCwgU3RyaW5nJiYgZXJyb3JNZXNzYWdlKTsK
KworICAgIHZvaWQgY2FwdHVyZVN0b3BwZWQoKTsKKyAgICB2b2lkIGNhcHR1cmVGYWlsZWQoKSBm
aW5hbDsKKworICAgIHZvaWQgcmVtb3RlVmlkZW9TYW1wbGVBdmFpbGFibGUoV2ViQ29yZTo6UmVt
b3RlVmlkZW9TYW1wbGUmJik7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVhbHRpbWVWaWRlb1Nv
dXJjZShXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29y
ZTo6Q2FwdHVyZURldmljZSYsIGNvbnN0IFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHMqLCBTdHJp
bmcmJiBuYW1lLCBTdHJpbmcmJiBoYXNoU2FsdCwgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXImLCBi
b29sIHNob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpOworCisgICAgLy8gUmVhbHRpbWVNZWRpYVNv
dXJjZQorICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9w
UHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIGJvb2wgaXNDYXB0dXJlU291cmNlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgYmVnaW5Db25maWd1cmF0aW9uKCkgZmlu
YWwgeyB9CisgICAgdm9pZCBjb21taXRDb25maWd1cmF0aW9uKCkgZmluYWwgeyB9CisgICAgYm9v
bCBzZXRTaG91bGRBcHBseVJvdGF0aW9uKGJvb2wgLyogc2hvdWxkQXBwbHlSb3RhdGlvbiAqLykg
ZmluYWw7CisgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0IFdlYkNvcmU6Ok1lZGlhQ29u
c3RyYWludHMmLCBBcHBseUNvbnN0cmFpbnRzSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHJl
cXVlc3RUb0VuZChPYnNlcnZlciYpIGZpbmFsOworICAgIHZvaWQgc3RvcEJlaW5nT2JzZXJ2ZWQo
KSBmaW5hbDsKKyAgICB2b2lkIGhhc0VuZGVkKCkgZmluYWw7CisgICAgY29uc3QgV2ViQ29yZTo6
UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGZpbmFsIHsgcmV0dXJuIG1f
c2V0dGluZ3M7IH0KKyAgICBjb25zdCBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJp
bGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBmaW5hbDsKKyAgICB2b2lkIHdoZW5SZWFkeShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYpIGZpbmFsOworICAgIFdlYkNvcmU6OkNhcHR1cmVE
ZXZpY2U6OkRldmljZVR5cGUgZGV2aWNlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGV2
aWNlLnR5cGUoKTsgfQorICAgIFJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBjbG9uZSgpIGZpbmFs
OworCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIC8vIEdQVVByb2Nlc3NDb25uZWN0aW9u
OjpDbGllbnQKKyAgICB2b2lkIGdwdVByb2Nlc3NDb25uZWN0aW9uRGlkQ2xvc2UoR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24mKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBjcmVhdGVSZW1vdGVNZWRp
YVNvdXJjZSgpOworICAgIHZvaWQgZGlkRmFpbChTdHJpbmcmJiBlcnJvck1lc3NhZ2UpOworICAg
IHZvaWQgc2V0QXNSZWFkeSgpOworICAgIHZvaWQgc2V0Q2FwYWJpbGl0aWVzKFdlYkNvcmU6OlJl
YWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmJik7CisKKyAgICBXZWJDb3JlOjpSZWFsdGlt
ZU1lZGlhU291cmNlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisgICAgVXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXImIG1fbWFuYWdlcjsKKyAgICBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOworICAgIFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5ncyBtX3NldHRpbmdzOworCisgICAgV2ViQ29yZTo6Q2FwdHVyZURldmljZSBtX2Rl
dmljZTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnRzIG1fY29uc3RyYWludHM7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVD4gbV9pbWFn
ZVRyYW5zZmVyU2Vzc2lvbjsKKworICAgIERlcXVlPEFwcGx5Q29uc3RyYWludHNIYW5kbGVyPiBt
X3BlbmRpbmdBcHBseUNvbnN0cmFpbnRzQ2FsbGJhY2tzOworICAgIGJvb2wgbV9zaG91bGRDYXB0
dXJlSW5HUFVQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNSZWFkeSB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2hhc1JlcXVlc3RlZFRvRW5kIHsgZmFsc2UgfTsKKyAgICBTdHJpbmcgbV9l
cnJvck1lc3NhZ2U7CisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcpPiBtX2NhbGxi
YWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdl
ci5jcHAKaW5kZXggYzU1NzBlZDIxODkyNGRhOTJlNTY1YTg5ZjUzZDA0NDMyZTEzMjMyZi4uMDMz
Y2QwZDhkZmQ5MmQ4MTJkNjdjZjVmYjU3ZTVlZDM0YmU3OTE1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIu
Y3BwCkBAIC0zMCw3ICszMCw4IEBACiAKICNpbmNsdWRlICJBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlci5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAi
UmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbW90ZVJlYWx0aW1lQXVk
aW9Tb3VyY2UuaCIKKyNpbmNsdWRlICJSZW1vdGVSZWFsdGltZVZpZGVvU291cmNlLmgiCiAjaW5j
bHVkZSAiVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKQEAgLTg1LDYwICs4
Niw4NyBAQCB2b2lkIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjpzZXR1cENhcHR1cmVQcm9jZXNz
ZXMoYm9vbCBzaG91bGRDYXB0dXJlQXVkaW9JblVJUAogICAgICAgICBSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5zZXREaXNwbGF5Q2FwdHVyZUZhY3RvcnkobV9kaXNwbGF5
RmFjdG9yeSk7CiB9CiAKLXZvaWQgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6OmFkZFNvdXJjZShS
ZWY8UmVtb3RlUmVhbHRpbWVNZWRpYVNvdXJjZT4mJiBzb3VyY2UpCit2b2lkIFVzZXJNZWRpYUNh
cHR1cmVNYW5hZ2VyOjphZGRBdWRpb1NvdXJjZShSZWY8UmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJj
ZT4mJiBzb3VyY2UpCiB7Ci0gICAgaWYgKHNvdXJjZS0+dHlwZSgpID09IFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OkF1ZGlvKQotICAgICAgICBtX3JlbW90ZUF1ZGlvQ2FwdHVyZVNhbXBsZU1h
bmFnZXIuYWRkU291cmNlKHNvdXJjZS5jb3B5UmVmKCkpOworICAgIGF1dG8gaWRlbnRpZmllciA9
IHNvdXJjZS0+aWRlbnRpZmllcigpOworICAgIEFTU0VSVCghbV9hdWRpb1NvdXJjZXMuY29udGFp
bnMoaWRlbnRpZmllcikpOworICAgIG1fYXVkaW9Tb3VyY2VzLmFkZChpZGVudGlmaWVyLCBXVEZN
b3ZlKHNvdXJjZSkpOworfQorCit2b2lkIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjpyZW1vdmVB
dWRpb1NvdXJjZShSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllciBpZCkKK3sKKyAgICBtX2F1
ZGlvU291cmNlcy5yZW1vdmUoaWQpOworfQogCit2b2lkIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
OjphZGRWaWRlb1NvdXJjZShSZWY8UmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZT4mJiBzb3VyY2Up
Cit7CiAgICAgYXV0byBpZGVudGlmaWVyID0gc291cmNlLT5pZGVudGlmaWVyKCk7Ci0gICAgQVNT
RVJUKCFtX3NvdXJjZXMuY29udGFpbnMoaWRlbnRpZmllcikpOwotICAgIG1fc291cmNlcy5hZGQo
aWRlbnRpZmllciwgV1RGTW92ZShzb3VyY2UpKTsKKyAgICBBU1NFUlQoIW1fdmlkZW9Tb3VyY2Vz
LmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKyAgICBtX3ZpZGVvU291cmNlcy5hZGQoaWRlbnRpZmll
ciwgV1RGTW92ZShzb3VyY2UpKTsKIH0KIAotdm9pZCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6
cmVtb3ZlU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyIGlkKQordm9pZCBVc2Vy
TWVkaWFDYXB0dXJlTWFuYWdlcjo6cmVtb3ZlVmlkZW9Tb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJj
ZUlkZW50aWZpZXIgaWQpCiB7Ci0gICAgbV9zb3VyY2VzLnJlbW92ZShpZCk7CisgICAgbV92aWRl
b1NvdXJjZXMucmVtb3ZlKGlkKTsKIH0KIAogdm9pZCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6
c291cmNlU3RvcHBlZChSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllciBpZCkKIHsKLSAgICBp
ZiAoYXV0byBzb3VyY2UgPSBtX3NvdXJjZXMuZ2V0KGlkKSkKKyAgICBpZiAoYXV0byBzb3VyY2Ug
PSBtX2F1ZGlvU291cmNlcy5nZXQoaWQpKQogICAgICAgICBzb3VyY2UtPmNhcHR1cmVTdG9wcGVk
KCk7CisgICAgZWxzZSBpZiAoYXV0byBzb3VyY2UgPSBtX3ZpZGVvU291cmNlcy5nZXQoaWQpKQor
ICAgICAgICBzb3VyY2UtPmNhcHR1cmVTdG9wcGVkKCk7Cit9CisKK3ZvaWQgVXNlck1lZGlhQ2Fw
dHVyZU1hbmFnZXI6OnNvdXJjZUVuZGVkKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgbV9hdWRpb1NvdXJjZXMucmVtb3ZlKGlkZW50aWZp
ZXIpOworICAgIG1fdmlkZW9Tb3VyY2VzLnJlbW92ZShpZGVudGlmaWVyKTsKIH0KIAogdm9pZCBV
c2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6Y2FwdHVyZUZhaWxlZChSZWFsdGltZU1lZGlhU291cmNl
SWRlbnRpZmllciBpZCkKIHsKLSAgICBpZiAoYXV0byBzb3VyY2UgPSBtX3NvdXJjZXMuZ2V0KGlk
KSkKKyAgICBpZiAoYXV0byBzb3VyY2UgPSBtX2F1ZGlvU291cmNlcy5nZXQoaWQpKQorICAgICAg
ICBzb3VyY2UtPmNhcHR1cmVGYWlsZWQoKTsKKyAgICBlbHNlIGlmIChhdXRvIHNvdXJjZSA9IG1f
dmlkZW9Tb3VyY2VzLmdldChpZCkpCiAgICAgICAgIHNvdXJjZS0+Y2FwdHVyZUZhaWxlZCgpOwog
fQogCiB2b2lkIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjpzb3VyY2VNdXRlZENoYW5nZWQoUmVh
bHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIgaWQsIGJvb2wgbXV0ZWQpCiB7Ci0gICAgaWYgKGF1
dG8gc291cmNlID0gbV9zb3VyY2VzLmdldChpZCkpCisgICAgaWYgKGF1dG8gc291cmNlID0gbV9h
dWRpb1NvdXJjZXMuZ2V0KGlkKSkKKyAgICAgICAgc291cmNlLT5zZXRNdXRlZChtdXRlZCk7Cisg
ICAgZWxzZSBpZiAoYXV0byBzb3VyY2UgPSBtX3ZpZGVvU291cmNlcy5nZXQoaWQpKQogICAgICAg
ICBzb3VyY2UtPnNldE11dGVkKG11dGVkKTsKIH0KIAotdm9pZCBVc2VyTWVkaWFDYXB0dXJlTWFu
YWdlcjo6c291cmNlU2V0dGluZ3NDaGFuZ2VkKFJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVy
IGlkLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKQordm9pZCBV
c2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6c291cmNlU2V0dGluZ3NDaGFuZ2VkKFJlYWx0aW1lTWVk
aWFTb3VyY2VJZGVudGlmaWVyIGlkLCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmJiBzZXR0
aW5ncykKIHsKLSAgICBpZiAoYXV0byBzb3VyY2UgPSBtX3NvdXJjZXMuZ2V0KGlkKSkKLSAgICAg
ICAgc291cmNlLT5zZXRTZXR0aW5ncyhSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Moc2V0dGlu
Z3MpKTsKKyAgICBpZiAoYXV0byBzb3VyY2UgPSBtX2F1ZGlvU291cmNlcy5nZXQoaWQpKQorICAg
ICAgICBzb3VyY2UtPnNldFNldHRpbmdzKFdURk1vdmUoc2V0dGluZ3MpKTsKKyAgICBlbHNlIGlm
IChhdXRvIHNvdXJjZSA9IG1fdmlkZW9Tb3VyY2VzLmdldChpZCkpCisgICAgICAgIHNvdXJjZS0+
c2V0U2V0dGluZ3MoV1RGTW92ZShzZXR0aW5ncykpOwogfQogCiB2b2lkIFVzZXJNZWRpYUNhcHR1
cmVNYW5hZ2VyOjpyZW1vdGVWaWRlb1NhbXBsZUF2YWlsYWJsZShSZWFsdGltZU1lZGlhU291cmNl
SWRlbnRpZmllciBpZCwgUmVtb3RlVmlkZW9TYW1wbGUmJiBzYW1wbGUpCiB7Ci0gICAgaWYgKGF1
dG8gc291cmNlID0gbV9zb3VyY2VzLmdldChpZCkpCisgICAgaWYgKGF1dG8gc291cmNlID0gbV92
aWRlb1NvdXJjZXMuZ2V0KGlkKSkKICAgICAgICAgc291cmNlLT5yZW1vdGVWaWRlb1NhbXBsZUF2
YWlsYWJsZShXVEZNb3ZlKHNhbXBsZSkpOwogfQogCi12b2lkIFVzZXJNZWRpYUNhcHR1cmVNYW5h
Z2VyOjphcHBseUNvbnN0cmFpbnRzU3VjY2VlZGVkKFJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlm
aWVyIGlkLCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKQordm9p
ZCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6YXBwbHlDb25zdHJhaW50c1N1Y2NlZWRlZChSZWFs
dGltZU1lZGlhU291cmNlSWRlbnRpZmllciBpZCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
JiYgc2V0dGluZ3MpCiB7Ci0gICAgaWYgKGF1dG8gc291cmNlID0gbV9zb3VyY2VzLmdldChpZCkp
Ci0gICAgICAgIHNvdXJjZS0+YXBwbHlDb25zdHJhaW50c1N1Y2NlZWRlZChzZXR0aW5ncyk7Cisg
ICAgaWYgKGF1dG8gc291cmNlID0gbV9hdWRpb1NvdXJjZXMuZ2V0KGlkKSkKKyAgICAgICAgc291
cmNlLT5hcHBseUNvbnN0cmFpbnRzU3VjY2VlZGVkKFdURk1vdmUoc2V0dGluZ3MpKTsKKyAgICBl
bHNlIGlmIChhdXRvIHNvdXJjZSA9IG1fdmlkZW9Tb3VyY2VzLmdldChpZCkpCisgICAgICAgIHNv
dXJjZS0+YXBwbHlDb25zdHJhaW50c1N1Y2NlZWRlZChXVEZNb3ZlKHNldHRpbmdzKSk7CiB9CiAK
IHZvaWQgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6OmFwcGx5Q29uc3RyYWludHNGYWlsZWQoUmVh
bHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIgaWQsIFN0cmluZyYmIGZhaWxlZENvbnN0cmFpbnQs
IFN0cmluZyYmIG1lc3NhZ2UpCiB7Ci0gICAgaWYgKGF1dG8gc291cmNlID0gbV9zb3VyY2VzLmdl
dChpZCkpCisgICAgaWYgKGF1dG8gc291cmNlID0gbV9hdWRpb1NvdXJjZXMuZ2V0KGlkKSkKKyAg
ICAgICAgc291cmNlLT5hcHBseUNvbnN0cmFpbnRzRmFpbGVkKFdURk1vdmUoZmFpbGVkQ29uc3Ry
YWludCksIFdURk1vdmUobWVzc2FnZSkpOworICAgIGVsc2UgaWYgKGF1dG8gc291cmNlID0gbV92
aWRlb1NvdXJjZXMuZ2V0KGlkKSkKICAgICAgICAgc291cmNlLT5hcHBseUNvbnN0cmFpbnRzRmFp
bGVkKFdURk1vdmUoZmFpbGVkQ29uc3RyYWludCksIFdURk1vdmUobWVzc2FnZSkpOwogfQogCkBA
IC0xNTUsNyArMTgzLDcgQEAgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgVXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXI6OkF1ZGlvRmFjdG9yeTo6Y3JlYXRlQXVkaW9DYXB0dXJlU28KICAgICAgICAgRGVwcmVj
YXRlZEdsb2JhbFNldHRpbmdzOjpzZXRTaG91bGRNYW5hZ2VBdWRpb1Nlc3Npb25DYXRlZ29yeSh0
cnVlKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U6OmNy
ZWF0ZShkZXZpY2UsIGNvbnN0cmFpbnRzLCB7IH0sIFdURk1vdmUoaGFzaFNhbHQpLCBtX21hbmFn
ZXIsIG1fc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2Vzcyk7CisgICAgcmV0dXJuIFJlbW90ZVJlYWx0
aW1lQXVkaW9Tb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGNvbnN0cmFpbnRzLCB7IH0sIFdURk1vdmUo
aGFzaFNhbHQpLCBtX21hbmFnZXIsIG1fc2hvdWxkQ2FwdHVyZUluR1BVUHJvY2Vzcyk7CiB9CiAK
IHZvaWQgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6OkF1ZGlvRmFjdG9yeTo6c2V0U2hvdWxkQ2Fw
dHVyZUluR1BVUHJvY2Vzcyhib29sIHZhbHVlKQpAQCAtMTcwLDcgKzE5OCw3IEBAIENhcHR1cmVT
b3VyY2VPckVycm9yIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjpWaWRlb0ZhY3Rvcnk6OmNyZWF0
ZVZpZGVvQ2FwdHVyZVNvCiAgICAgICAgIHJldHVybiBDYXB0dXJlU291cmNlT3JFcnJvciB7ICJW
aWRlbyBjYXB0dXJlIGluIEdQVVByb2Nlc3MgaXMgbm90IGltcGxlbWVudGVkIl9zIH07CiAjZW5k
aWYKIAotICAgIHJldHVybiBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpjcmVhdGUoZGV2aWNl
LCBjb25zdHJhaW50cywgeyB9LCBXVEZNb3ZlKGhhc2hTYWx0KSwgbV9tYW5hZ2VyLCBtX3Nob3Vs
ZENhcHR1cmVJbkdQVVByb2Nlc3MpOworICAgIHJldHVybiBSZW1vdGVSZWFsdGltZVZpZGVvU291
cmNlOjpjcmVhdGUoZGV2aWNlLCBjb25zdHJhaW50cywgeyB9LCBXVEZNb3ZlKGhhc2hTYWx0KSwg
bV9tYW5hZ2VyLCBtX3Nob3VsZENhcHR1cmVJbkdQVVByb2Nlc3MpOwogfQogCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKQEAgLTE4MiwxMyArMjEwLDcgQEAgdm9pZCBVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlcjo6VmlkZW9GYWN0b3J5OjpzZXRBY3RpdmVTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJj
ZSYKIAogQ2FwdHVyZVNvdXJjZU9yRXJyb3IgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6OkRpc3Bs
YXlGYWN0b3J5OjpjcmVhdGVEaXNwbGF5Q2FwdHVyZVNvdXJjZShjb25zdCBDYXB0dXJlRGV2aWNl
JiBkZXZpY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQogewotICAgIHJl
dHVybiBSZW1vdGVSZWFsdGltZU1lZGlhU291cmNlOjpjcmVhdGUoZGV2aWNlLCBjb25zdHJhaW50
cywgeyB9LCB7IH0sIG1fbWFuYWdlciwgZmFsc2UpOwotfQotCi12b2lkIFVzZXJNZWRpYUNhcHR1
cmVNYW5hZ2VyOjpkaWRVcGRhdGVTb3VyY2VDb25uZWN0aW9uKFJlbW90ZVJlYWx0aW1lTWVkaWFT
b3VyY2UmIHNvdXJjZSkKLXsKLSAgICBpZiAoc291cmNlLnR5cGUoKSA9PSBSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlOjpBdWRpbykKLSAgICAgICAgbV9yZW1vdGVBdWRpb0NhcHR1cmVTYW1wbGVN
YW5hZ2VyLmRpZFVwZGF0ZVNvdXJjZUNvbm5lY3Rpb24oc291cmNlKTsKKyAgICByZXR1cm4gUmVt
b3RlUmVhbHRpbWVWaWRlb1NvdXJjZTo6Y3JlYXRlKGRldmljZSwgY29uc3RyYWludHMsIHsgfSwg
eyB9LCBtX21hbmFnZXIsIGZhbHNlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL2NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvY29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuaAppbmRleCAxYWYx
ZjE4Yjk1MGI4OGM4NTMwZmNiMjk3YTRmZDg4MzVlODM1ZDgwLi4xOWQ3ZGRjZmY3ZTUwZDBlY2Yz
Yzg3YWYyNWZiNmI4ZTQxMmRhYmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvY29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvY29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuaApAQCAtNDMsNyArNDMsOCBA
QCBjbGFzcyBSZW1vdGVWaWRlb1NhbXBsZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNz
IFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U7CitjbGFzcyBSZW1vdGVSZWFsdGltZUF1ZGlvU291
cmNlOworY2xhc3MgUmVtb3RlUmVhbHRpbWVWaWRlb1NvdXJjZTsKIGNsYXNzIFdlYlByb2Nlc3M7
CiAKIGNsYXNzIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyIDogcHVibGljIFdlYlByb2Nlc3NTdXBw
bGVtZW50LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewpAQCAtNTcsOSArNTgsMTMgQEAg
cHVibGljOgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2VzcyhJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikgeyBkaWRSZWNlaXZl
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsgfQogICAgIHZvaWQgc2V0dXBDYXB0dXJlUHJv
Y2Vzc2VzKGJvb2wgc2hvdWxkQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MsIGJvb2wgc2hvdWxkQ2Fw
dHVyZUF1ZGlvSW5HUFVQcm9jZXNzLCBib29sIHNob3VsZENhcHR1cmVWaWRlb0luVUlQcm9jZXNz
LCBib29sIHNob3VsZENhcHR1cmVWaWRlb0luR1BVUHJvY2VzcywgYm9vbCBzaG91bGRDYXB0dXJl
RGlzcGxheUluVUlQcm9jZXNzKTsKIAotICAgIHZvaWQgYWRkU291cmNlKFJlZjxSZW1vdGVSZWFs
dGltZU1lZGlhU291cmNlPiYmKTsKLSAgICB2b2lkIHJlbW92ZVNvdXJjZShXZWJDb3JlOjpSZWFs
dGltZU1lZGlhU291cmNlSWRlbnRpZmllcik7Ci0gICAgdm9pZCBkaWRVcGRhdGVTb3VyY2VDb25u
ZWN0aW9uKFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2UmKTsKKyAgICB2b2lkIGFkZEF1ZGlvU291
cmNlKFJlZjxSZW1vdGVSZWFsdGltZUF1ZGlvU291cmNlPiYmKTsKKyAgICB2b2lkIHJlbW92ZUF1
ZGlvU291cmNlKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyKTsKKworICAg
IHZvaWQgYWRkVmlkZW9Tb3VyY2UoUmVmPFJlbW90ZVJlYWx0aW1lVmlkZW9Tb3VyY2U+JiYpOwor
ICAgIHZvaWQgcmVtb3ZlVmlkZW9Tb3VyY2UoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUlk
ZW50aWZpZXIpOworCisgICAgUmVtb3RlQ2FwdHVyZVNhbXBsZU1hbmFnZXImIHJlbW90ZUNhcHR1
cmVTYW1wbGVNYW5hZ2VyKCkgeyByZXR1cm4gbV9yZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlcjsg
fQogCiBwcml2YXRlOgogICAgIC8vIFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2UgZmFjdG9y
aWVzCkBAIC0xMjIsMjIgKzEyNywyMSBAQCBwcml2YXRlOgogICAgIC8vIE1lc3NhZ2VzOjpVc2Vy
TWVkaWFDYXB0dXJlTWFuYWdlcgogICAgIHZvaWQgY2FwdHVyZUZhaWxlZChXZWJDb3JlOjpSZWFs
dGltZU1lZGlhU291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBzb3VyY2VTdG9wcGVkKFdlYkNv
cmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyKTsKLSAgICB2b2lkIHNvdXJjZUVuZGVk
KFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIpIHsgcmVt
b3ZlU291cmNlKGlkZW50aWZpZXIpOyB9CisgICAgdm9pZCBzb3VyY2VFbmRlZChXZWJDb3JlOjpS
ZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBzb3VyY2VNdXRlZENoYW5n
ZWQoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUlkZW50aWZpZXIsIGJvb2wgbXV0ZWQpOwot
ICAgIHZvaWQgc291cmNlU2V0dGluZ3NDaGFuZ2VkKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3Vy
Y2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mm
KTsKKyAgICB2b2lkIHNvdXJjZVNldHRpbmdzQ2hhbmdlZChXZWJDb3JlOjpSZWFsdGltZU1lZGlh
U291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiYp
OwogICAgIHZvaWQgcmVtb3RlVmlkZW9TYW1wbGVBdmFpbGFibGUoV2ViQ29yZTo6UmVhbHRpbWVN
ZWRpYVNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlJlbW90ZVZpZGVvU2FtcGxlJiYpOwotICAg
IHZvaWQgYXBwbHlDb25zdHJhaW50c1N1Y2NlZWRlZChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291
cmNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
Jik7CisgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzU3VjY2VlZGVkKFdlYkNvcmU6OlJlYWx0aW1l
TWVkaWFTb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MmJik7CiAgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzRmFpbGVkKFdlYkNvcmU6OlJlYWx0aW1l
TWVkaWFTb3VyY2VJZGVudGlmaWVyLCBTdHJpbmcmJiwgU3RyaW5nJiYpOwogCi0gICAgUmVmPFdl
YkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2U+IGNsb25lVmlkZW9Tb3VyY2UoUmVtb3RlUmVhbHRp
bWVNZWRpYVNvdXJjZSYpOwotCi0gICAgSGFzaE1hcDxXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291
cmNlSWRlbnRpZmllciwgUmVmPFJlbW90ZVJlYWx0aW1lTWVkaWFTb3VyY2U+PiBtX3NvdXJjZXM7
CisgICAgSGFzaE1hcDxXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllciwgUmVm
PFJlbW90ZVJlYWx0aW1lQXVkaW9Tb3VyY2U+PiBtX2F1ZGlvU291cmNlczsKKyAgICBIYXNoTWFw
PFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyLCBSZWY8UmVtb3RlUmVhbHRp
bWVWaWRlb1NvdXJjZT4+IG1fdmlkZW9Tb3VyY2VzOwogICAgIFdlYlByb2Nlc3MmIG1fcHJvY2Vz
czsKICAgICBOb09wQ2FwdHVyZURldmljZU1hbmFnZXIgbV9ub09wQ2FwdHVyZURldmljZU1hbmFn
ZXI7CiAgICAgQXVkaW9GYWN0b3J5IG1fYXVkaW9GYWN0b3J5OwogICAgIFZpZGVvRmFjdG9yeSBt
X3ZpZGVvRmFjdG9yeTsKICAgICBEaXNwbGF5RmFjdG9yeSBtX2Rpc3BsYXlGYWN0b3J5OwotICAg
IFJlbW90ZUNhcHR1cmVTYW1wbGVNYW5hZ2VyIG1fcmVtb3RlQXVkaW9DYXB0dXJlU2FtcGxlTWFu
YWdlcjsKKyAgICBSZW1vdGVDYXB0dXJlU2FtcGxlTWFuYWdlciBtX3JlbW90ZUNhcHR1cmVTYW1w
bGVNYW5hZ2VyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>