<?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>170112</bug_id>
          
          <creation_ts>2017-03-26 23:52:53 -0700</creation_ts>
          <short_desc>Add CoreAudioCaptureSource.</short_desc>
          <delta_ts>2017-11-02 11:29:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Jones">jeremyj-wk</reporter>
          <assigned_to name="Jeremy Jones">jeremyj-wk</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jonlee</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1291412</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-03-26 23:52:53 -0700</bug_when>
    <thetext>Add CoreAudioCaptureSource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291422</commentid>
    <comment_count>1</comment_count>
      <attachid>305452</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-03-27 00:31:44 -0700</bug_when>
    <thetext>Created attachment 305452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293355</commentid>
    <comment_count>2</comment_count>
      <attachid>305452</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2017-03-31 16:17:47 -0700</bug_when>
    <thetext>Comment on attachment 305452
Patch

Should this be rebased?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293465</commentid>
    <comment_count>3</comment_count>
      <attachid>305452</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-04-01 08:04:24 -0700</bug_when>
    <thetext>Comment on attachment 305452
Patch

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

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:64
&gt; +    , m_captureDeviceID(0)

This can use a FIXME.

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:115
&gt; +    // FIXME: Get the preferred rate dynamically - kAUVoiceIOProperty_PreferredHWBlockSizeInSeconds / [[AVAudioSession sharedInstance] preferredIOBufferDuration]

Nit: preferred *duration*

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:148
&gt; +#if 0
&gt; +    microphoneProcFormat.mSampleRate = preferredSampleRate();
&gt; +    microphoneProcFormat.mChannelsPerFrame = 1;
&gt; +    microphoneProcFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved;
&gt; +
&gt; +    err = AudioUnitSetProperty(m_ioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, inputBus, &amp;microphoneProcFormat, sizeof(microphoneProcFormat));
&gt; +    if (err) {
&gt; +        LOG(Media, &quot;CoreAudioCaptureSource::configureMicrophoneProc(%p) unable to set output stream format, error %d (%.4s)&quot;, this, (int)err, (char*)&amp;err);
&gt; +        return err;
&gt; +    }
&gt; +#endif

Is this needed?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:186
&gt; +#if 0
&gt; +    speakerProcFormat.mSampleRate = preferredSampleRate();
&gt; +    speakerProcFormat.mChannelsPerFrame = 1;
&gt; +    speakerProcFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved;
&gt; +
&gt; +    err = AudioUnitSetProperty(m_ioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, outputBus, &amp;speakerProcFormat, sizeof(speakerProcFormat));
&gt; +    if (err) {
&gt; +        LOG(Media, &quot;CoreAudioCaptureSource::configureSpeakerProc(%p) unable to set input stream format, error %d (%.4s)&quot;, this, (int)err, (char*)&amp;err);
&gt; +        return err;
&gt; +    }
&gt; +#endif

Ditto.

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:336
&gt; +#if 0
&gt; +OSStatus CoreAudioCaptureSource::defaultOutputDevice(uint32_t* deviceID)
&gt; +{
&gt; +    AudioObjectPropertyAddress propertyInfo = { kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster };
&gt; +
&gt; +    *deviceID = 0;
&gt; +    UInt32 propertySize = sizeof(AudioDeviceID);
&gt; +    auto err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &amp;propertyInfo, outputBus, nullptr, &amp;propertySize, deviceID);
&gt; +    if (err)
&gt; +        LOG(Media, &quot;CoreAudioCaptureSource::defaultOutputDevice(%p) unable to get default output device ID, error %d (%.4s)&quot;, this, (int)err, (char*)&amp;err);
&gt; +
&gt; +    return err;
&gt; +}
&gt; +#endif

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294501</commentid>
    <comment_count>4</comment_count>
      <attachid>306285</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-04-05 09:07:22 -0700</bug_when>
    <thetext>Created attachment 306285
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294503</commentid>
    <comment_count>5</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-04-05 09:08:18 -0700</bug_when>
    <thetext>rdar://problem/30293338</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294505</commentid>
    <comment_count>6</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-04-05 09:12:02 -0700</bug_when>
    <thetext>(In reply to Eric Carlson from comment #3)
&gt; Comment on attachment 305452 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=305452&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:64
&gt; &gt; +    , m_captureDeviceID(0)
&gt; 
&gt; This can use a FIXME.

Added.

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:115
&gt; &gt; +    // FIXME: Get the preferred rate dynamically - kAUVoiceIOProperty_PreferredHWBlockSizeInSeconds / [[AVAudioSession sharedInstance] preferredIOBufferDuration]
&gt; 
&gt; Nit: preferred *duration*

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:148
&gt; &gt; +#if 0
&gt; &gt; +    microphoneProcFormat.mSampleRate = preferredSampleRate();
&gt; &gt; +    microphoneProcFormat.mChannelsPerFrame = 1;
&gt; &gt; +    microphoneProcFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved;
&gt; &gt; +
&gt; &gt; +    err = AudioUnitSetProperty(m_ioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, inputBus, &amp;microphoneProcFormat, sizeof(microphoneProcFormat));
&gt; &gt; +    if (err) {
&gt; &gt; +        LOG(Media, &quot;CoreAudioCaptureSource::configureMicrophoneProc(%p) unable to set output stream format, error %d (%.4s)&quot;, this, (int)err, (char*)&amp;err);
&gt; &gt; +        return err;
&gt; &gt; +    }
&gt; &gt; +#endif
&gt; 
&gt; Is this needed?

Removed

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:186
&gt; &gt; +#if 0
&gt; &gt; +    speakerProcFormat.mSampleRate = preferredSampleRate();
&gt; &gt; +    speakerProcFormat.mChannelsPerFrame = 1;
&gt; &gt; +    speakerProcFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved;
&gt; &gt; +
&gt; &gt; +    err = AudioUnitSetProperty(m_ioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, outputBus, &amp;speakerProcFormat, sizeof(speakerProcFormat));
&gt; &gt; +    if (err) {
&gt; &gt; +        LOG(Media, &quot;CoreAudioCaptureSource::configureSpeakerProc(%p) unable to set input stream format, error %d (%.4s)&quot;, this, (int)err, (char*)&amp;err);
&gt; &gt; +        return err;
&gt; &gt; +    }
&gt; &gt; +#endif
&gt; 
&gt; Ditto.

Removed

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:336
&gt; &gt; +#if 0
&gt; &gt; +OSStatus CoreAudioCaptureSource::defaultOutputDevice(uint32_t* deviceID)
&gt; &gt; +{
&gt; &gt; +    AudioObjectPropertyAddress propertyInfo = { kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster };
&gt; &gt; +
&gt; &gt; +    *deviceID = 0;
&gt; &gt; +    UInt32 propertySize = sizeof(AudioDeviceID);
&gt; &gt; +    auto err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &amp;propertyInfo, outputBus, nullptr, &amp;propertySize, deviceID);
&gt; &gt; +    if (err)
&gt; &gt; +        LOG(Media, &quot;CoreAudioCaptureSource::defaultOutputDevice(%p) unable to get default output device ID, error %d (%.4s)&quot;, this, (int)err, (char*)&amp;err);
&gt; &gt; +
&gt; &gt; +    return err;
&gt; &gt; +}
&gt; &gt; +#endif
&gt; 
&gt; Ditto.

Removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294506</commentid>
    <comment_count>7</comment_count>
      <attachid>306286</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-04-05 09:13:12 -0700</bug_when>
    <thetext>Created attachment 306286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294515</commentid>
    <comment_count>8</comment_count>
      <attachid>306286</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-04-05 09:29:51 -0700</bug_when>
    <thetext>Comment on attachment 306286
Patch

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

This looks fine to me once it builds everywhere, but a WK2 reviewer should give it the official r+.

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:37
&gt; +#include &lt;CoreAudio/AudioHardware.h&gt;

I believe this is macOS-only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294532</commentid>
    <comment_count>9</comment_count>
      <attachid>306286</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-04-05 10:07:51 -0700</bug_when>
    <thetext>Comment on attachment 306286
Patch

Some nits below.

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

&gt; Source/WebCore/page/Settings.h:315
&gt; +    WEBCORE_EXPORT static void setUseAVFoundationAudioCapture(bool);

It is strange that page Settings has both static and non static member fields.
I guess it is fine here but should we try to stick with one approach here?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:64
&gt; +            source = nullptr;

return early?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:122
&gt; +    m_ioUnitStarted  = false;

Why do we need to do all that clean-up there?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:193
&gt; +    m_microphoneDataCallbacks.add(m_nextMicrophoneDataCallbackID, callback);

last two lines as a one liner?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:221
&gt; +void CoreAudioCaptureSource::checkTimestamps(const AudioTimeStamp *inTimeStamp, uint64_t sampleTime, double hostTime)

Can inTimeStamp be a ref?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:227
&gt; +OSStatus CoreAudioCaptureSource::provideSpeakerData(AudioUnitRenderActionFlags* /*ioActionFlags*/, const AudioTimeStamp* inTimeStamp, UInt32 /*inBusNumber*/, UInt32 inNumberFrames, AudioBufferList* ioData)

Can take refs here?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:277
&gt; +    CoreAudioCaptureSource* dataSource = static_cast&lt;CoreAudioCaptureSource*&gt;(inRefCon);

auto*?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:65
&gt; +    uint64_t addMicrophoneDataConsumer(MicrophoneDataCallback);

Should it take a MicrophoneDataCallback&amp;&amp; instead?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:93
&gt; +    OSStatus processMicrophoneSamples(AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32, UInt32, AudioBufferList*);

microphoneCallback prototype is probably fixed but we might want to have processMicrophoneSamples take references if we can control it.

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:96
&gt; +    OSStatus provideSpeakerData(AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32, UInt32, AudioBufferList*);

Ditto.

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:105
&gt; +    Vector&lt;RefPtr&lt;AudioSampleDataSource&gt;&gt; m_activeSources;

Can it be a vector of Ref?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:108
&gt; +    Vector&lt;std::pair&lt;QueueAction, RefPtr&lt;AudioSampleDataSource&gt;&gt;&gt; m_pendingSources;

Ditto?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:137
&gt; +

Two lines

&gt; Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:131
&gt; +    RefPtr&lt;RealtimeMediaSource&gt; source = RealtimeMediaSourceCenter::singleton().audioFactory()-&gt;createMediaSourceForCaptureDeviceWithConstraints(device, constraints.ptr(), invalidConstraints);

auto?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294643</commentid>
    <comment_count>10</comment_count>
      <attachid>306286</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-04-05 14:17:00 -0700</bug_when>
    <thetext>Comment on attachment 306286
Patch

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

&gt;&gt; Source/WebCore/page/Settings.h:315
&gt;&gt; +    WEBCORE_EXPORT static void setUseAVFoundationAudioCapture(bool);
&gt; 
&gt; It is strange that page Settings has both static and non static member fields.
&gt; I guess it is fine here but should we try to stick with one approach here?

This needs to be static because it affects a singleton. There can&apos;t be a different value per page.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:37
&gt;&gt; +#include &lt;CoreAudio/AudioHardware.h&gt;
&gt; 
&gt; I believe this is macOS-only.

I&apos;ll see if I can remove it. It doesn&apos;t look necessary.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:64
&gt;&gt; +            source = nullptr;
&gt; 
&gt; return early?

Done.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:122
&gt;&gt; +    m_ioUnitStarted  = false;
&gt; 
&gt; Why do we need to do all that clean-up there?

Some things need to happen under the lock. I&apos;ll get rid of the unnecessary thing here.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:193
&gt;&gt; +    m_microphoneDataCallbacks.add(m_nextMicrophoneDataCallbackID, callback);
&gt; 
&gt; last two lines as a one liner?

Done.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:221
&gt;&gt; +void CoreAudioCaptureSource::checkTimestamps(const AudioTimeStamp *inTimeStamp, uint64_t sampleTime, double hostTime)
&gt; 
&gt; Can inTimeStamp be a ref?

Done. This will affect a few other places too.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:227
&gt;&gt; +OSStatus CoreAudioCaptureSource::provideSpeakerData(AudioUnitRenderActionFlags* /*ioActionFlags*/, const AudioTimeStamp* inTimeStamp, UInt32 /*inBusNumber*/, UInt32 inNumberFrames, AudioBufferList* ioData)
&gt; 
&gt; Can take refs here?

Sure. The C callback uses pointers, but we can use refs here.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:277
&gt;&gt; +    CoreAudioCaptureSource* dataSource = static_cast&lt;CoreAudioCaptureSource*&gt;(inRefCon);
&gt; 
&gt; auto*?

Done.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:65
&gt;&gt; +    uint64_t addMicrophoneDataConsumer(MicrophoneDataCallback);
&gt; 
&gt; Should it take a MicrophoneDataCallback&amp;&amp; instead?

Good idea.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:93
&gt;&gt; +    OSStatus processMicrophoneSamples(AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32, UInt32, AudioBufferList*);
&gt; 
&gt; microphoneCallback prototype is probably fixed but we might want to have processMicrophoneSamples take references if we can control it.

Agreed. Done.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:96
&gt;&gt; +    OSStatus provideSpeakerData(AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32, UInt32, AudioBufferList*);
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:105
&gt;&gt; +    Vector&lt;RefPtr&lt;AudioSampleDataSource&gt;&gt; m_activeSources;
&gt; 
&gt; Can it be a vector of Ref?

Done.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:108
&gt;&gt; +    Vector&lt;std::pair&lt;QueueAction, RefPtr&lt;AudioSampleDataSource&gt;&gt;&gt; m_pendingSources;
&gt; 
&gt; Ditto?

Done.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:137
&gt;&gt; +
&gt; 
&gt; Two lines

Removed extra white space.

&gt;&gt; Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:131
&gt;&gt; +    RefPtr&lt;RealtimeMediaSource&gt; source = RealtimeMediaSourceCenter::singleton().audioFactory()-&gt;createMediaSourceForCaptureDeviceWithConstraints(device, constraints.ptr(), invalidConstraints);
&gt; 
&gt; auto?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294681</commentid>
    <comment_count>11</comment_count>
      <attachid>306286</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-04-05 16:00:45 -0700</bug_when>
    <thetext>Comment on attachment 306286
Patch

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

&gt; Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:29
&gt; +#include &lt;WebCore/AVCaptureDeviceManager.h&gt;

This is a platform specific header, gtk bot does not seem to like that.

&gt; Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:335
&gt; +    WebCore::AVCaptureDeviceManager::setUseAVFoundationAudioCapture(useAVFoundationAudioCapture);

This might be COCOA specific stuff also I guess.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:3243
&gt; +    settings.setUseAVFoundationAudioCapture(store.getBoolValueForKey(WebPreferencesKey::useAVFoundationAudioCaptureKey()));

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294792</commentid>
    <comment_count>12</comment_count>
      <attachid>306364</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-04-05 21:16:19 -0700</bug_when>
    <thetext>Created attachment 306364
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294801</commentid>
    <comment_count>13</comment_count>
      <attachid>306367</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-04-05 21:46:18 -0700</bug_when>
    <thetext>Created attachment 306367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294985</commentid>
    <comment_count>14</comment_count>
      <attachid>306407</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-04-06 12:03:36 -0700</bug_when>
    <thetext>Created attachment 306407
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295672</commentid>
    <comment_count>15</comment_count>
      <attachid>306407</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-04-08 12:04:44 -0700</bug_when>
    <thetext>Comment on attachment 306407
Patch

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

&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm:99
&gt; +    if (active != enabled) {

Nit: an return early would be more idiomatic of WebKit style.

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:45
&gt; +
&gt; +

Nit: extra blank line.

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:165
&gt; +    // Set the format of the data we supply to the output stream.
&gt; +

Nit: this isn&apos;t necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296068</commentid>
    <comment_count>16</comment_count>
      <attachid>306407</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-04-10 11:03:24 -0700</bug_when>
    <thetext>Comment on attachment 306407
Patch

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

&gt;&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm:99
&gt;&gt; +    if (active != enabled) {
&gt; 
&gt; Nit: an return early would be more idiomatic of WebKit style.

Done.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:45
&gt;&gt; +
&gt; 
&gt; Nit: extra blank line.

Done.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:165
&gt;&gt; +
&gt; 
&gt; Nit: this isn&apos;t necessary.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296135</commentid>
    <comment_count>17</comment_count>
      <attachid>306736</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2017-04-10 13:40:13 -0700</bug_when>
    <thetext>Created attachment 306736
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296152</commentid>
    <comment_count>18</comment_count>
      <attachid>306736</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-10 14:24:17 -0700</bug_when>
    <thetext>Comment on attachment 306736
Patch for landing.

Clearing flags on attachment: 306736

Committed r215201: &lt;http://trac.webkit.org/changeset/215201&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305452</attachid>
            <date>2017-03-27 00:31:44 -0700</date>
            <delta_ts>2017-04-05 09:07:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170112-20170327003146.patch</filename>
            <type>text/plain</type>
            <size>53002</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEzNDYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDJiOGY4MWU2NTFjMTJmMTk2OGNhNzM2
YjczM2E4NjVjZGE3NWIxZDguLmI0MGE3ZDgxMTE1YjIxNzUxNmFlYmJhYjZiMjRhMzRiYzg4ODgy
NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDMtMjYgIEplcmVteSBKb25lcyAgPGplcmVt
eWpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTEyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIEVOQUJM
RV9NRURJQV9TVFJFQU0uIEl0IHNob3VsZCBiZSBzZXQgaW4gdGhlIHhjY29uZmlnIGZpbGVzLgor
CisgICAgICAgICogd3RmL0ZlYXR1cmVEZWZpbmVzLmg6CisKIDIwMTctMDMtMDYgIEFuZHJlYXMg
S2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFJlcG9ydCBkb21haW5z
IGNyYXNoaW5nIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSB2aWEgZW5oYW5jZWQgcHJpdmFjeSBsb2dn
aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDU2OTJmYTdmZGY4MDYxNzM0ZGMyZWU4YWRhOGViNGNhNWRjNmZl
MTkuLjU4ZWZjNDY2NTU5Njg0M2ViNTYzMjA2N2Y1NmQzNjIxZTg2NTA4YjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1OCBAQAorMjAxNy0wMy0yNiAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxMTIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVz
ZSB0aGlzIHByb3ZpZGVzIHRoZSBzYW1lIGZ1bmNpdG9uYWxpdHkgYXMgQVZBdWRpb0NhcHR1cmVT
b3VyY2UuIAorICAgICAgICBGdW5jaW9uYWxpdHkgaXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0
IGNhc2VzLgorCisgICAgICAgIEFkZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlIHRvIGF1ZGlvIGNh
cHR1cmUuCisgICAgICAgIEFkZCBVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUgc2V0dGluZyB0
byBzd2l0Y2ggYmFjayB0byBBVkZvdW5kYXRpb24gZm9yIGF1ZGlvIGNhcHR1cmUuCisKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9T
ZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6dXNlQVZGb3VuZGF0aW9u
QXVkaW9DYXB0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRVc2VBVkZvdW5k
YXRpb25BdWRpb0NhcHR1cmUpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmNyZWF0ZU1lZGlhU291cmNl
Rm9yQ2FwdHVyZURldmljZVdpdGhDb25zdHJhaW50cyk6CisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6On5Db3JlQXVkaW9DYXB0dXJl
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByZWZl
cnJlZFNhbXBsZVJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZTo6cHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVNaWNyb3Bob25lUHJvYyk6CisgICAgICAgIChXZWJD
b3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVTcGVha2VyUHJvYyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRNaWNyb3Bob25lRGF0YUNv
bnN1bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnJlbW92
ZU1pY3JvcGhvbmVEYXRhQ29uc3VtZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZTo6YWRkRWNob0NhbmNlbGxhdGlvblNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZW1vdmVFY2hvQ2FuY2VsbGF0aW9uU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNoZWNrVGltZXN0YW1w
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcm92aWRlU3Bl
YWtlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3Bl
YWtlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjptaWNyb3Bob25lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZGVmYXVsdE91dHB1dERldmljZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZhdWx0SW5wdXREZXZpY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVj
aW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzdXNw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnJlc3VtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MpOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNl
Lmg6IEFkZGVkLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbFNldHRpbmdzOjpzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0Nh
cHR1cmUpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oOgorICAgICAgICAq
IHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5pZGw6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRVc2VBVkZvdW5kYXRpb25B
dWRpb0NhcHR1cmUpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisKIDIwMTctMDMt
MDYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBEaXNh
YmxlIGF1dG9wbGF5IG9mIHNpbGVudCB2aWRlb3MgaW4gbG93IHBvd2VyIG1vZGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwppbmRleCA3ODZjZTNiNjBjYzgxMGEwY2M4MTJmOGQwYTdmZGUwOTczYjljZDZkLi5hZTk2
YjQxOWQ5Mjg1ZmQ2MjA2YzM4MTUzZjUyMjIyOThiNmM2OGY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTctMDMtMjYgIEplcmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTEyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZSBwcmVmZXJlbmNlLgorCisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAg
ICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFsaXplXSk6CisgICAgICAgICgtW1dlYlByZWZl
cmVuY2VzIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZV0pOgorICAgICAgICAoLVtXZWJQcmVm
ZXJlbmNlcyBzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmU6XSk6CisgICAgICAgICogV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcu
bW06CisgICAgICAgICgtW1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZDpdKToKKwogMjAxNy0w
My0wMyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFdlYkdQ
VSBjb21waWxlIGZsYWcgYW5kIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGZsYWcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCA0NzY2NmY4YWRjYzY2MmFkZWVlM2UxMTc4ZWQ0Y2U0N2M3NTI4NzI4Li4xZTRlYjdlYTdkMDli
NWNlMjhhMTE4M2FjNDg0M2IyNTI1YjVjODY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTctMDMtMjYgIEplcmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSBwcmVm
ZXJlbmNlLgorCisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChX
S1ByZWZlcmVuY2VzU2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKToKKyAgICAgICAgKFdL
UHJlZmVyZW5jZXNHZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBk
YXRlUHJlZmVyZW5jZXMpOgorCiAyMDE3LTAzLTA2ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBSZXBvcnQgZG9tYWlucyBjcmFzaGluZyB1bmRlciBt
ZW1vcnkgcHJlc3N1cmUgdmlhIGVuaGFuY2VkIHByaXZhY3kgbG9nZ2luZy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmggYi9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJl
RGVmaW5lcy5oCmluZGV4IDNlYzVkMGYxMjM0NDk2ZmZmNDZmNTMwMDliZDZlMDZlZDU2OTEwMjYu
LmE4ZDk0OWE0MTU3YTJhNjA2ZjcyZTYwODU3ZmRlZDgzNTQwOTAwYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKKysrIGIvU291cmNlL1dURi93dGYvRmVhdHVy
ZURlZmluZXMuaApAQCAtNTc0LDEwICs1NzQsNiBAQCB0aGUgcHVibGljIGlPUyBTREsuIFdlIHdp
bGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgRmVhdHVyZURlZmluZXMueGNjb25maWcgZmlsZQog
I2RlZmluZSBFTkFCTEVfTUVESUFfU1RBVElTVElDUyAwCiAjZW5kaWYKIAotI2lmICFkZWZpbmVk
KEVOQUJMRV9NRURJQV9TVFJFQU0pCi0jZGVmaW5lIEVOQUJMRV9NRURJQV9TVFJFQU0gMAotI2Vu
ZGlmCi0KICNpZiAhZGVmaW5lZChFTkFCTEVfTUVURVJfRUxFTUVOVCkKICNkZWZpbmUgRU5BQkxF
X01FVEVSX0VMRU1FTlQgMQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTlkMGM3NzFhMDM4MGQ2MTZiMGFmZjZlOTI2
MzZiZjkyMDU1NGJhMy4uYzI2MGM3MzM0OTVjMDgyMzNiYTc3NmNiNzA4YTAyMzFkMDNkZDZiNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTUwOSw2ICsxNTA5LDcgQEAKIAkJM0Y0MkIzMUUxODgxMTkxQjAwMjc4QUFDIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDJCMzFDMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gKi87IH07CiAJCTNGQkM0QUYzMTg5ODgx
NTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYxMTg5ODgxNTYw
MDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLzsgfTsKIAkJ
M0ZCQzRBRjQxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJD
NEFGMjE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzRkYx
RkE2NjFFNzM1MEZEMDBDMTAwMkYgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjNCQjU4MjFFNzA5RUU0
MDBDNzAxRjIgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi87IH07CiAJCTNGRjgxM0E3
MURCQTg2NDAwMDlCRjAwMSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRkM0MzRGMTkyNDA2QTkwMEEwRDNC
NSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkzRkZGRjlBODE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0
Q1NTVmlld3BvcnRSdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGRkZGOUE2MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1
bGUuY3BwICovOyB9OwogCQkzRkZGRjlBOTE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmll
d3BvcnRSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzRkZGRjlBNzE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggKi87
IH07CkBAIC04ODAzLDYgKzg4MDQsOCBAQAogCQkzRjJCMzNFMzE2NUFCRDM1MDBFMzk4N0MgLyog
V2ViS2l0Q1NTVmlld3BvcnRSdWxlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRD
U1NWaWV3cG9ydFJ1bGUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjJCMzNF
OTE2NUFGMTU1MDBFMzk4N0MgLyogSlNXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjJCMzNFQTE2NUFGMTU1MDBFMzk4N0Mg
LyogSlNXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJM0YzQkI1ODIxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGM0JCNTgzMUU3MDlF
RTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJM0Y0MkIzMUIxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJM0Y0MkIzMUMxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNTU4Niw2ICsxNTU4OSw4IEBACiAJCQkJMDcwMzYzREQxODFBMUNEQzAw
QzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tICovLAogCQkJCTA3MDM2M0RFMTgxQTFD
REMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oICovLAogCQkJCTA3MDM2M0RGMTgx
QTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbSAqLywKKwkJCQkzRjNCQjU4
MjFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi8sCisJCQkJ
M0YzQkI1ODMxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLywK
IAkJCQkwNzQ0RUNFQjFFMEM0QUU1MDAwRDA5NDQgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2VN
YWMuaCAqLywKIAkJCQkwNzQ0RUNFQzFFMEM0QUU1MDAwRDA5NDQgLyogTW9ja1JlYWx0aW1lQXVk
aW9Tb3VyY2VNYWMubW0gKi8sCiAJCQkJMDdFRTc2RUQxQkVBNjE5ODAwRjg5MTMzIC8qIE1vY2tS
ZWFsdGltZVZpZGVvU291cmNlTWFjLmggKi8sCkBAIC0yOTczOSw2ICsyOTc0NCw3IEBACiAJCQkJ
RTEzRjAxRjExMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk5NzQ2QUYyMTE0RjREREU2MDAzRTdBNzIgLyogQ29vcmRpbmF0ZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDQzODE3RkYxQTkxQjJGODAwNkUwNEYyIC8qIENvcmVNZWRpYVNv
ZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTNGRjFGQTY2MUU3MzUwRkQwMEMxMDAyRiAv
KiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEN0QzMzQ3
MUM3QTE2QkYwMDA0MTI5MyAvKiBDb3JlVmlkZW9Tb2Z0TGluay5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzVFQjk1MDBFODIwNTZCMDBCMjU5NjUgLyogQ291bnRlckRpcmVjdGl2ZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYxNTAwQUQxODYyMzAwNjkxQkQ0IC8qIENvdW50ZXJOb2Rl
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCA2YmI5ZDAz
YThiMzRjMTk2ODI0YThkMmJlZGNkZTNkYWFhZTFkNDIxLi4wNGExYTIwNmZlZTBlNGRhN2NhNGM0
OWVjNzcwNTI4YTIxZDRiZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtOTQsNiAr
OTQsNyBAQCBib29sIFNldHRpbmdzOjpnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCA9IGZhbHNl
OwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiBib29sIFNldHRpbmdzOjpnTW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZCA9IGZhbHNlOwogYm9vbCBTZXR0aW5nczo6Z01lZGlhQ2FwdHVyZVJlcXVp
cmVzU2VjdXJlQ29ubmVjdGlvbiA9IHRydWU7Citib29sIFNldHRpbmdzOjpnVXNlQVZGb3VuZGF0
aW9uQXVkaW9DYXB0dXJlID0gZmFsc2U7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKQEAg
LTYxOCw2ICs2MTksMTYgQEAgdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNT
ZWN1cmVDb25uZWN0aW9uKGJvb2wgbWVkaWFDYXB0dXJlUmVxdWlyZXMKIHsKICAgICBnTWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uID0gbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1
cmVDb25uZWN0aW9uOwogfQorCitib29sIFNldHRpbmdzOjp1c2VBVkZvdW5kYXRpb25BdWRpb0Nh
cHR1cmUoKQoreworICAgIHJldHVybiBnVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlOworfQor
Cit2b2lkIFNldHRpbmdzOjpzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoYm9vbCB1c2VB
VkZvdW5kYXRpb25BdWRpb0NhcHR1cmUpCit7CisgICAgZ1VzZUFWRm91bmRhdGlvbkF1ZGlvQ2Fw
dHVyZSA9IHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZTsKK30KICNlbmRpZgogCiB2b2lkIFNl
dHRpbmdzOjpzZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAppbmRleCA3ZmM1NzA4ZWM3OTY3MWM5OTI1YTc3OGZjMTRh
NDViZjUwNTU1MmU5Li40YmU0YmJmZWRjYTBkYzhkYjZlYzE5YWEwYjdhNGI1YzRlYWRhODM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5ncy5oCkBAIC0zMTAsNiArMzEwLDkgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNv
bm5lY3Rpb24oYm9vbCk7CisKKyAgICBzdGF0aWMgYm9vbCB1c2VBVkZvdW5kYXRpb25BdWRpb0Nh
cHR1cmUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRVc2VBVkZvdW5kYXRp
b25BdWRpb0NhcHR1cmUoYm9vbCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBUFBMRV9QQVkpCkBA
IC00MTUsNiArNDE4LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9tZWRpYURldmljZUlkZW50
aWZpZXJTdG9yYWdlRGlyZWN0b3J5OwogICAgIHN0YXRpYyBib29sIGdNb2NrQ2FwdHVyZURldmlj
ZXNFbmFibGVkOwogICAgIHN0YXRpYyBib29sIGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNv
bm5lY3Rpb247CisgICAgc3RhdGljIGJvb2wgZ1VzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1h
bmFnZXIubW0KaW5kZXggZjBkYmJiY2M5ZTg1NzZiMDEzZWUyOGUzZTA2NzRkYjdjZDZiMmZhZC4u
ZDcxMTExNjJhZTA2YThkMTJhMzVhOTg1YzQ3MjdmNTAwNTQwOGQ0MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFn
ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2Fw
dHVyZURldmljZU1hbmFnZXIubW0KQEAgLTMyLDEyICszMiwxNCBAQAogI2ltcG9ydCAiQVZNZWRp
YUNhcHR1cmVTb3VyY2UuaCIKICNpbXBvcnQgIkFWVmlkZW9DYXB0dXJlU291cmNlLmgiCiAjaW1w
b3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCisjaW1wb3J0ICJDb3JlQXVkaW9DYXB0dXJlU291
cmNlLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgi
CiAjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlLmgiCiAjaW1wb3J0ICJSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyLmgiCiAjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCIK
ICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5oIgorI2lt
cG9ydCAiU2V0dGluZ3MuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAjaW1wb3J0ICJVVUlE
LmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZDYXB0dXJlRGV2aWNlLmg+CkBAIC00Niw2ICs0
OCw3IEBACiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAKKwogdHlwZWRlZiBBVkNhcHR1cmVEZXZpY2UgQVZDYXB0dXJlRGV2aWNlVHlw
ZWRlZjsKIHR5cGVkZWYgQVZDYXB0dXJlU2Vzc2lvbiBBVkNhcHR1cmVTZXNzaW9uVHlwZTsKIApA
QCAtMTc4LDEzICsxODEsMjIgQEAgVmVjdG9yPENhcHR1cmVEZXZpY2U+IEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OmdldFNvdXJjZXNJbmZvKCkKIAogUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+
IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmNyZWF0ZU1lZGlhU291cmNlRm9yQ2FwdHVyZURldmlj
ZVdpdGhDb25zdHJhaW50cyhjb25zdCBDYXB0dXJlRGV2aWNlJiBjYXB0dXJlRGV2aWNlLCBjb25z
dCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cywgU3RyaW5nJiBpbnZhbGlkQ29uc3RyYWlu
dCkKIHsKKyAgICBpZiAoY2FwdHVyZURldmljZS50eXBlKCkgPT0gQ2FwdHVyZURldmljZTo6RGV2
aWNlVHlwZTo6QXVkaW8pIHsKKyAgICAgICAgaWYgKFNldHRpbmdzOjp1c2VBVkZvdW5kYXRpb25B
dWRpb0NhcHR1cmUoKSkgeworICAgICAgICAgICAgQVZDYXB0dXJlRGV2aWNlVHlwZWRlZiAqZGV2
aWNlID0gW2dldEFWQ2FwdHVyZURldmljZUNsYXNzKCkgZGV2aWNlV2l0aFVuaXF1ZUlEOmNhcHR1
cmVEZXZpY2UucGVyc2lzdGVudElkKCldOworICAgICAgICAgICAgaWYgKCFkZXZpY2UpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIHJldHVybiBBVkF1ZGlv
Q2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwgZW1wdHlTdHJpbmcoKSwgY29uc3RyYWludHMs
IGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpjcmVhdGUoY2FwdHVyZURldmljZSwgY29uc3RyYWludHMsIGludmFs
aWRDb25zdHJhaW50KTsKKyAgICB9CisKICAgICBBVkNhcHR1cmVEZXZpY2VUeXBlZGVmICpkZXZp
Y2UgPSBbZ2V0QVZDYXB0dXJlRGV2aWNlQ2xhc3MoKSBkZXZpY2VXaXRoVW5pcXVlSUQ6Y2FwdHVy
ZURldmljZS5wZXJzaXN0ZW50SWQoKV07CiAgICAgaWYgKCFkZXZpY2UpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgaWYgKGNhcHR1cmVEZXZpY2UudHlwZSgpID09IENhcHR1cmVEZXZp
Y2U6OkRldmljZVR5cGU6OkF1ZGlvKQotICAgICAgICByZXR1cm4gQVZBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmNyZWF0ZShkZXZpY2UsIGVtcHR5U3RyaW5nKCksIGNvbnN0cmFpbnRzLCBpbnZhbGlkQ29u
c3RyYWludCk7Ci0KICAgICByZXR1cm4gQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZp
Y2UsIGVtcHR5U3RyaW5nKCksIGNvbnN0cmFpbnRzLCBpbnZhbGlkQ29uc3RyYWludCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3Jl
QXVkaW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YjgxZTJmN2Y1
MTY1ODNkOTE5MWFhZWZmNmFhY2FlOGE1ZDY5NDVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2Uu
Y3BwCkBAIC0wLDAgKzEsNTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2UuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJBdWRp
b1NhbXBsZUJ1ZmZlckxpc3QuaCIKKyNpbmNsdWRlICJBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmgi
CisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlvQ29udmVydGVyLmg+CisjaW5jbHVkZSA8QXVk
aW9Vbml0L0F1ZGlvVW5pdC5oPgorI2luY2x1ZGUgPENvcmVBdWRpby9BdWRpb0hhcmR3YXJlLmg+
CisjaW5jbHVkZSA8Q29yZU1lZGlhL0NNU3luYy5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1l
Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbXBvcnQgIkNvcmVNZWRpYVNvZnRMaW5rLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgVUludDMyIG91dHB1dEJ1cyA9IDA7Citj
b25zdCBVSW50MzIgaW5wdXRCdXMgPSAxOworCitSZWZQdHI8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZT4gQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGNvbnN0IENhcHR1cmVEZXZpY2UmIGRl
dmljZUluZm8sIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzLCBTdHJpbmcmIGlu
dmFsaWRDb25zdHJhaW50KQoreworICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYobmV3IENvcmVB
dWRpb0NhcHR1cmVTb3VyY2UoZGV2aWNlSW5mbykpOworICAgIGlmIChjb25zdHJhaW50cykgewor
ICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJjZS0+YXBwbHlDb25zdHJhaW50cygqY29uc3RyYWlu
dHMpOworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBpbnZhbGlkQ29uc3RyYWlu
dCA9IHJlc3VsdC52YWx1ZSgpLmZpcnN0OworICAgICAgICAgICAgc291cmNlID0gbnVsbHB0cjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzb3VyY2U7Cit9CisKK0NvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3QgQ2FwdHVyZURldmljZSYg
ZGV2aWNlSW5mbykKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZW1wdHlTdHJpbmcoKSwgUmVh
bHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8sIGRldmljZUluZm8ubGFiZWwoKSkKKyAgICAsIG1fY2Fw
dHVyZURldmljZUlEKDApCit7CisgICAgc2V0UGVyc2lzdGVudElEKGRldmljZUluZm8ucGVyc2lz
dGVudElkKCkpOworICAgIHNldE11dGVkKHRydWUpOworCisgICAgbV9jdXJyZW50U2V0dGluZ3Mu
c2V0Vm9sdW1lKDEuMCk7CisgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0U2FtcGxlUmF0ZShwcmVm
ZXJyZWRTYW1wbGVSYXRlKCkpOworICAgIG1fY3VycmVudFNldHRpbmdzLnNldERldmljZUlkKGlk
KCkpOworICAgIG1fY3VycmVudFNldHRpbmdzLnNldEVjaG9DYW5jZWxsYXRpb24odHJ1ZSk7CisK
KyAgICBtYWNoX3RpbWViYXNlX2luZm9fZGF0YV90IHRpbWViYXNlSW5mbzsKKyAgICBtYWNoX3Rp
bWViYXNlX2luZm8oJnRpbWViYXNlSW5mbyk7CisgICAgbV9EVFNDb252ZXJzaW9uUmF0aW8gPSAx
ZS05ICogc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUluZm8ubnVtZXIpIC8gc3RhdGljX2Nh
c3Q8ZG91YmxlPih0aW1lYmFzZUluZm8uZGVub20pOworfQorCitDb3JlQXVkaW9DYXB0dXJlU291
cmNlOjp+Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSgpCit7CisgICAgc3VzcGVuZCgpOworCisgICAg
c3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBp
ZiAobV9pb1VuaXQpCisgICAgICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlKG1faW9V
bml0KTsKKworICAgIG1faW9Vbml0TmFtZSA9IGVtcHR5U3RyaW5nKCk7CisKKyAgICBtX21pY3Jv
cGhvbmVTYW1wbGVCdWZmZXIgPSBudWxscHRyOworICAgIG1fc3BlYWtlclNhbXBsZUJ1ZmZlciA9
IG51bGxwdHI7CisKKyAgICBtX3NwZWFrZXJQcm9jc0NhbGxlZCA9IDA7CisgICAgbV9taWNyb3Bo
b25lUHJvY3NDYWxsZWQgID0gMDsKKyAgICBtX2xhdGVzdE1pY1RpbWVTdGFtcCA9IDA7CisKKyAg
ICBtX2FjdGl2ZVNvdXJjZXMuY2xlYXIoKTsKKyAgICBtX3BlbmRpbmdTb3VyY2VzLmNsZWFyKCk7
CisKKyAgICBtX3NwZWFrZXJTYW1wbGVCdWZmZXIgPSBudWxscHRyOworCisgICAgbV9pb1VuaXRJ
bml0aWFsaXplZCA9IGZhbHNlOworICAgIG1faW9Vbml0U3RhcnRlZCAgPSBmYWxzZTsKK30KKwor
ZG91YmxlIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByZWZlcnJlZFNhbXBsZVJhdGUoKQorewor
ICAgIC8vIEZJWE1FOiBHZXQgdGhlIHByZWZlcnJlZCByYXRlIGR5bmFtaWNhbGx5LCBrQVVWb2lj
ZUlPUHJvcGVydHlfUHJlZmVycmVkSFdTYW1wbGVSYXRlLyBbW0FWQXVkaW9TZXNzaW9uIHNoYXJl
ZEluc3RhbmNlXSBwcmVmZXJyZWRTYW1wbGVSYXRlXQorICAgIHN0YXRpYyBjb25zdCBmbG9hdCBw
cmVmZXJyZWRSYXRlID0gMjQwMDAuOworICAgIHJldHVybiBwcmVmZXJyZWRSYXRlOworfQorCitk
b3VibGUgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbigp
Cit7CisgICAgLy8gRklYTUU6IEdldCB0aGUgcHJlZmVycmVkIHJhdGUgZHluYW1pY2FsbHkgLSBr
QVVWb2ljZUlPUHJvcGVydHlfUHJlZmVycmVkSFdCbG9ja1NpemVJblNlY29uZHMgLyBbW0FWQXVk
aW9TZXNzaW9uIHNoYXJlZEluc3RhbmNlXSBwcmVmZXJyZWRJT0J1ZmZlckR1cmF0aW9uXQorICAg
IHN0YXRpYyBjb25zdCBmbG9hdCBwcmVmZXJyZWREdXJhdGlvbiA9IDAuMDI7CisgICAgcmV0dXJu
IHByZWZlcnJlZER1cmF0aW9uOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNl
Ojpjb25maWd1cmVNaWNyb3Bob25lUHJvYygpCit7CisgICAgQVVSZW5kZXJDYWxsYmFja1N0cnVj
dCBjYWxsYmFjayA9IHsgbWljcm9waG9uZUNhbGxiYWNrLCB0aGlzIH07CisgICAgYXV0byBlcnIg
PSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5
X1NldElucHV0Q2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCAmY2Fs
bGJhY2ssIHNpemVvZihjYWxsYmFjaykpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1l
ZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlTWljcm9waG9uZVByb2MoJXAp
IHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IG1pYyBwcm9jLCBlcnJvciAlZCAoJS40cykiLCB0aGlz
LCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKwor
ICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBtaWNyb3Bob25lUHJvY0Zvcm1hdCA9IHsg
fTsKKworICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKG1pY3JvcGhvbmVQcm9jRm9ybWF0KTsKKyAg
ICBlcnIgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5
X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgaW5wdXRCdXMsICZtaWNyb3Bo
b25lUHJvY0Zvcm1hdCwgJnNpemUpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlh
LCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlTWljcm9waG9uZVByb2MoJXApIHVu
YWJsZSB0byBnZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMs
IChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisj
aWYgMAorICAgIG1pY3JvcGhvbmVQcm9jRm9ybWF0Lm1TYW1wbGVSYXRlID0gcHJlZmVycmVkU2Ft
cGxlUmF0ZSgpOworICAgIG1pY3JvcGhvbmVQcm9jRm9ybWF0Lm1DaGFubmVsc1BlckZyYW1lID0g
MTsKKyAgICBtaWNyb3Bob25lUHJvY0Zvcm1hdC5tRm9ybWF0RmxhZ3MgPSBrQXVkaW9Gb3JtYXRG
bGFnc05hdGl2ZUZsb2F0UGFja2VkIHwga0F1ZGlvRm9ybWF0RmxhZ0lzTm9uSW50ZXJsZWF2ZWQ7
CisKKyAgICBlcnIgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFBy
b3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgaW5wdXRCdXMsICZt
aWNyb3Bob25lUHJvY0Zvcm1hdCwgc2l6ZW9mKG1pY3JvcGhvbmVQcm9jRm9ybWF0KSk7CisgICAg
aWYgKGVycikgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpj
b25maWd1cmVNaWNyb3Bob25lUHJvYyglcCkgdW5hYmxlIHRvIHNldCBvdXRwdXQgc3RyZWFtIGZv
cm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAg
ICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisjZW5kaWYKKworICAgIG1fbWljcm9waG9uZVNhbXBs
ZUJ1ZmZlciA9IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y3JlYXRlKG1pY3JvcGhvbmVQcm9jRm9y
bWF0LCBwcmVmZXJyZWRJT0J1ZmZlckR1cmF0aW9uKCkgKiBtaWNyb3Bob25lUHJvY0Zvcm1hdC5t
U2FtcGxlUmF0ZSAqIDIpOworICAgIG1fbWljcm9waG9uZVByb2NGb3JtYXQgPSBtaWNyb3Bob25l
UHJvY0Zvcm1hdDsKKworICAgIHJldHVybiBlcnI7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCkKK3sKKyAgICAvLyBTZXQgdGhlIGZv
cm1hdCBvZiB0aGUgZGF0YSB3ZSBzdXBwbHkgdG8gdGhlIG91dHB1dCBzdHJlYW0uCisKKyAgICBB
VVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBzcGVha2VyQ2FsbGJhY2ssIHRoaXMg
fTsKKyAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9V
bml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIG91
dHB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2spKTsKKyAgICBpZiAoZXJyKSB7Cisg
ICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFr
ZXJQcm9jKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBzcGVha2VyIHByb2MsIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBl
cnI7CisgICAgfQorCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHNwZWFrZXJQcm9j
Rm9ybWF0ID0geyB9OworCisgICAgVUludDMyIHNpemUgPSBzaXplb2Yoc3BlYWtlclByb2NGb3Jt
YXQpOworICAgIGVyciAgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5p
dFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRwdXRCdXMs
ICZzcGVha2VyUHJvY0Zvcm1hdCwgJnNpemUpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9H
KE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlU3BlYWtlclByb2MoJXAp
IHVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhp
cywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisK
KyNpZiAwCisgICAgc3BlYWtlclByb2NGb3JtYXQubVNhbXBsZVJhdGUgPSBwcmVmZXJyZWRTYW1w
bGVSYXRlKCk7CisgICAgc3BlYWtlclByb2NGb3JtYXQubUNoYW5uZWxzUGVyRnJhbWUgPSAxOwor
ICAgIHNwZWFrZXJQcm9jRm9ybWF0Lm1Gb3JtYXRGbGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdzTmF0
aXZlRmxvYXRQYWNrZWQgfCBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxlYXZlZDsKKworICAg
IGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlf
U3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJnNwZWFrZXJQ
cm9jRm9ybWF0LCBzaXplb2Yoc3BlYWtlclByb2NGb3JtYXQpKTsKKyAgICBpZiAoZXJyKSB7Cisg
ICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFr
ZXJQcm9jKCVwKSB1bmFibGUgdG8gc2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICgl
LjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7
CisgICAgfQorI2VuZGlmCisKKyAgICBtX3NwZWFrZXJTYW1wbGVCdWZmZXIgPSBBdWRpb1NhbXBs
ZUJ1ZmZlckxpc3Q6OmNyZWF0ZShzcGVha2VyUHJvY0Zvcm1hdCwgcHJlZmVycmVkSU9CdWZmZXJE
dXJhdGlvbigpICogc3BlYWtlclByb2NGb3JtYXQubVNhbXBsZVJhdGUgKiAyKTsKKyAgICBtX3Nw
ZWFrZXJQcm9jRm9ybWF0ID0gc3BlYWtlclByb2NGb3JtYXQ7CisKKyAgICByZXR1cm4gZXJyOwor
fQorCit1aW50NjRfdCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRNaWNyb3Bob25lRGF0YUNv
bnN1bWVyKE1pY3JvcGhvbmVEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9wZW5kaW5nU291cmNlUXVldWVMb2NrKTsKKyAgICBtX25leHRN
aWNyb3Bob25lRGF0YUNhbGxiYWNrSUQrKzsKKyAgICBtX21pY3JvcGhvbmVEYXRhQ2FsbGJhY2tz
LmFkZChtX25leHRNaWNyb3Bob25lRGF0YUNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKKworICAgIHJl
dHVybiBtX25leHRNaWNyb3Bob25lRGF0YUNhbGxiYWNrSUQ7Cit9CisKK3ZvaWQgQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6cmVtb3ZlTWljcm9waG9uZURhdGFDb25zdW1lcih1aW50NjRfdCBjYWxs
YmFja0lEKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcGVuZGluZ1NvdXJj
ZVF1ZXVlTG9jayk7CisgICAgbV9taWNyb3Bob25lRGF0YUNhbGxiYWNrcy5yZW1vdmUoY2FsbGJh
Y2tJRCk7Cit9ICAgIAorCit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmFkZEVjaG9DYW5j
ZWxsYXRpb25Tb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJiBzb3VyY2UpCit7CisgICAgaWYg
KCFzb3VyY2Uuc2V0T3V0cHV0Rm9ybWF0KG1fc3BlYWtlclByb2NGb3JtYXQpKSB7CisgICAgICAg
IExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmFkZEVjaG9DYW5jZWxsYXRpb25T
b3VyY2U6IHNvdXJjZSAlcCBjb25maWd1cmVPdXRwdXQgZmFpbGVkIiwgJnNvdXJjZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3Bl
bmRpbmdTb3VyY2VRdWV1ZUxvY2spOworICAgIG1fcGVuZGluZ1NvdXJjZXMuYXBwZW5kKHsgUXVl
dWVBY3Rpb246OkFkZCwgJnNvdXJjZSB9KTsKK30KKwordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291
cmNlOjpyZW1vdmVFY2hvQ2FuY2VsbGF0aW9uU291cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYg
c291cmNlKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcGVuZGluZ1NvdXJj
ZVF1ZXVlTG9jayk7CisgICAgbV9wZW5kaW5nU291cmNlcy5hcHBlbmQoeyBRdWV1ZUFjdGlvbjo6
UmVtb3ZlLCAmc291cmNlIH0pOworfQorCit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNo
ZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1RpbWVTdGFtcCAqaW5UaW1lU3RhbXAsIHVpbnQ2NF90
IHNhbXBsZVRpbWUsIGRvdWJsZSBob3N0VGltZSkKK3sKKyAgICBpZiAoIWluVGltZVN0YW1wLT5t
U2FtcGxlVGltZSB8fCBzYW1wbGVUaW1lID09IG1fbGF0ZXN0TWljVGltZVN0YW1wIHx8ICFob3N0
VGltZSkKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y2hlY2tU
aW1lc3RhbXBzOiB1bnVzdWFsIHRpbWVzdGFtcHMsIHNhbXBsZSB0aW1lID0gJWxsZCwgcHJldmlv
dXMgc2FtcGxlIHRpbWUgPSAlbGxkLCBob3N0VGltZSAlZiIsIHNhbXBsZVRpbWUsIG1fbGF0ZXN0
TWljVGltZVN0YW1wLCBob3N0VGltZSk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogLypp
b0FjdGlvbkZsYWdzKi8sIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiBpblRpbWVTdGFtcCwgVUludDMy
IC8qaW5CdXNOdW1iZXIqLywgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3Qq
IGlvRGF0YSkKK3sKKyAgICAvLyBDYWxsZWQgd2hlbiB0aGUgYXVkaW8gdW5pdCBuZWVkcyBkYXRh
IHRvIHBsYXkgdGhyb3VnaCB0aGUgc3BlYWtlcnMuCisgICAgKyttX3NwZWFrZXJQcm9jc0NhbGxl
ZDsKKworICAgIGlmIChtX3NwZWFrZXJTYW1wbGVCdWZmZXItPnNhbXBsZUNhcGFjaXR5KCkgPCBp
bk51bWJlckZyYW1lcykgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291
cmNlOjpwcm92aWRlU3BlYWtlckRhdGE6IHNwZWFrZXIgc2FtcGxlIGJ1ZmZlciBzaXplICglZCkg
dG9vIHNtYWxsIGZvciBhbW91bnQgb2Ygc2FtcGxlIGRhdGEgcmVxdWVzdGVkICglZCkhIiwgbV9z
cGVha2VyU2FtcGxlQnVmZmVyLT5zYW1wbGVDYXBhY2l0eSgpLCAoaW50KWluTnVtYmVyRnJhbWVz
KTsKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOworICAgIH0KKworICAgIC8vIEFk
ZC9yZW1vdmUgc291cmNlcyBmcm9tIHRoZSBxdWV1ZSwgYnV0IG9ubHkgaWYgd2UgZ2V0IHRoZSBs
b2NrIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgdHJ5CisgICAgLy8gYWdhaW4gb24gdGhlIG5leHQg
Y2FsbGJhY2suCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9w
ZW5kaW5nU291cmNlUXVldWVMb2NrLCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICAgICAgaWYgKGxv
Y2sub3duc19sb2NrKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcGVuZGlu
Z1NvdXJjZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci5maXJzdCA9PSBRdWV1ZUFjdGlv
bjo6QWRkKQorICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZVNvdXJjZXMuYXBwZW5kKHBhaXIu
c2Vjb25kKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fYWN0
aXZlU291cmNlcy5yZW1vdmVGaXJzdChwYWlyLnNlY29uZCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX3BlbmRpbmdTb3VyY2VzLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAobV9hY3RpdmVTb3VyY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBkb3VibGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1fRFRTQ29udmVyc2lvblJhdGlvICogaW5UaW1l
U3RhbXAtPm1Ib3N0VGltZTsKKyAgICB1aW50NjRfdCBzYW1wbGVUaW1lID0gaW5UaW1lU3RhbXAt
Pm1TYW1wbGVUaW1lOworICAgIGNoZWNrVGltZXN0YW1wcyhpblRpbWVTdGFtcCwgc2FtcGxlVGlt
ZSwgYWRqdXN0ZWRIb3N0VGltZSk7CisKKyAgICBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPnJlc2V0
KCk7CisgICAgbV9zcGVha2VyU2FtcGxlQnVmZmVyLT5zZXRUaW1lcyhhZGp1c3RlZEhvc3RUaW1l
LCBzYW1wbGVUaW1lKTsKKworICAgIEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCA9IG1fc3Bl
YWtlclNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBidWZmZXJMaXN0Lm1OdW1iZXJCdWZmZXJzOyArK2kpCisgICAgICAgIGJ1ZmZlckxpc3Qu
bUJ1ZmZlcnNbaV0gPSBpb0RhdGEtPm1CdWZmZXJzW2ldOworCisgICAgYm9vbCBmaXJzdFNvdXJj
ZSA9IHRydWU7CisgICAgZm9yIChhdXRvJiBzb3VyY2UgOiBtX2FjdGl2ZVNvdXJjZXMpIHsKKyAg
ICAgICAgc291cmNlLT5wdWxsU2FtcGxlcygqbV9zcGVha2VyU2FtcGxlQnVmZmVyLmdldCgpLCBp
bk51bWJlckZyYW1lcywgYWRqdXN0ZWRIb3N0VGltZSwgc2FtcGxlVGltZSwgZmlyc3RTb3VyY2Ug
PyBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OkNvcHkgOiBBdWRpb1NhbXBsZURhdGFTb3VyY2U6Ok1p
eCk7CisgICAgICAgIGZpcnN0U291cmNlID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIG5v
RXJyOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzcGVha2VyQ2FsbGJh
Y2sodm9pZCAqaW5SZWZDb24sIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZs
YWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJl
ciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAg
ICBDb3JlQXVkaW9DYXB0dXJlU291cmNlKiBkYXRhU291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZSo+KGluUmVmQ29uKTsKKyAgICByZXR1cm4gZGF0YVNvdXJjZS0+cHJv
dmlkZVNwZWFrZXJEYXRhKGlvQWN0aW9uRmxhZ3MsIGluVGltZVN0YW1wLCBpbkJ1c051bWJlciwg
aW5OdW1iZXJGcmFtZXMsIGlvRGF0YSk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFn
cyogaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50
MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiAv
KmlvRGF0YSovKQoreworICAgICsrbV9taWNyb3Bob25lUHJvY3NDYWxsZWQ7CisKKyAgICAvLyBQ
dWxsIHRocm91Z2ggdGhlIHZwaW8gdW5pdCB0byBvdXIgbWljIGJ1ZmZlci4KKyAgICBtX21pY3Jv
cGhvbmVTYW1wbGVCdWZmZXItPnJlc2V0KCk7CisgICAgQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJM
aXN0ID0gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCk7CisgICAgYXV0byBl
cnIgPSBBdWRpb1VuaXRSZW5kZXIobV9pb1VuaXQsIGlvQWN0aW9uRmxhZ3MsIGluVGltZVN0YW1w
LCBpbkJ1c051bWJlciwgaW5OdW1iZXJGcmFtZXMsICZidWZmZXJMaXN0KTsKKyAgICBpZiAoZXJy
KSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NN
aWNyb3Bob25lU2FtcGxlcyglcCkgQXVkaW9Vbml0UmVuZGVyIGZhaWxlZCB3aXRoIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBl
cnI7CisgICAgfQorCisgICAgZG91YmxlIGFkanVzdGVkSG9zdFRpbWUgPSBtX0RUU0NvbnZlcnNp
b25SYXRpbyAqIGluVGltZVN0YW1wLT5tSG9zdFRpbWU7CisgICAgdWludDY0X3Qgc2FtcGxlVGlt
ZSA9IGluVGltZVN0YW1wLT5tU2FtcGxlVGltZTsKKyAgICBjaGVja1RpbWVzdGFtcHMoaW5UaW1l
U3RhbXAsIHNhbXBsZVRpbWUsIGFkanVzdGVkSG9zdFRpbWUpOworICAgIG1fbGF0ZXN0TWljVGlt
ZVN0YW1wID0gc2FtcGxlVGltZTsKKworICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+c2V0
VGltZXMoYWRqdXN0ZWRIb3N0VGltZSwgc2FtcGxlVGltZSk7CisKKyAgICBhdWRpb1NhbXBsZXNB
dmFpbGFibGUoTWVkaWFUaW1lKHNhbXBsZVRpbWUsIG1fbWljcm9waG9uZVByb2NGb3JtYXQuc2Ft
cGxlUmF0ZSgpKSwgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCksIG1fbWlj
cm9waG9uZVByb2NGb3JtYXQsIGluTnVtYmVyRnJhbWVzKTsKKworICAgIGlmIChtX21pY3JvcGhv
bmVEYXRhQ2FsbGJhY2tzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3Ig
KGF1dG8mIGNhbGxiYWNrIDogbV9taWNyb3Bob25lRGF0YUNhbGxiYWNrcy52YWx1ZXMoKSkKKyAg
ICAgICAgY2FsbGJhY2soTWVkaWFUaW1lKHNhbXBsZVRpbWUsIG1fbWljcm9waG9uZVByb2NGb3Jt
YXQuc2FtcGxlUmF0ZSgpKSwgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCks
IG1fbWljcm9waG9uZVByb2NGb3JtYXQsIGluTnVtYmVyRnJhbWVzKTsKKworICAgIHJldHVybiBu
b0VycjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6bWljcm9waG9uZUNh
bGxiYWNrKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rp
b25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNO
dW1iZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7
CisgICAgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSogZGF0YVNvdXJjZSA9IHN0YXRpY19jYXN0PENv
cmVBdWRpb0NhcHR1cmVTb3VyY2UqPihpblJlZkNvbik7CisgICAgcmV0dXJuIGRhdGFTb3VyY2Ut
PnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhpb0FjdGlvbkZsYWdzLCBpblRpbWVTdGFtcCwgaW5C
dXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCBpb0RhdGEpOworfQorCisjaWYgMAorT1NTdGF0dXMg
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZGVmYXVsdE91dHB1dERldmljZSh1aW50MzJfdCogZGV2
aWNlSUQpCit7CisgICAgQXVkaW9PYmplY3RQcm9wZXJ0eUFkZHJlc3MgcHJvcGVydHlJbmZvID0g
eyBrQXVkaW9IYXJkd2FyZVByb3BlcnR5RGVmYXVsdE91dHB1dERldmljZSwga0F1ZGlvT2JqZWN0
UHJvcGVydHlTY29wZUdsb2JhbCwga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyIH07
CisKKyAgICAqZGV2aWNlSUQgPSAwOworICAgIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2Yo
QXVkaW9EZXZpY2VJRCk7CisgICAgYXV0byBlcnIgPSBBdWRpb09iamVjdEdldFByb3BlcnR5RGF0
YShrQXVkaW9PYmplY3RTeXN0ZW1PYmplY3QsICZwcm9wZXJ0eUluZm8sIG91dHB1dEJ1cywgbnVs
bHB0ciwgJnByb3BlcnR5U2l6ZSwgZGV2aWNlSUQpOworICAgIGlmIChlcnIpCisgICAgICAgIExP
RyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmRlZmF1bHRPdXRwdXREZXZpY2UoJXAp
IHVuYWJsZSB0byBnZXQgZGVmYXVsdCBvdXRwdXQgZGV2aWNlIElELCBlcnJvciAlZCAoJS40cyki
LCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworCisgICAgcmV0dXJuIGVycjsKK30KKyNl
bmRpZgorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZhdWx0SW5wdXREZXZp
Y2UodWludDMyX3QqIGRldmljZUlEKQoreworICAgIEFTU0VSVChtX2lvVW5pdCk7CisKKyAgICBV
SW50MzIgcHJvcGVydHlTaXplID0gc2l6ZW9mKCpkZXZpY2VJRCk7CisgICAgYXV0byBlcnIgPSBB
dWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0N1
cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCBkZXZpY2VJRCwg
JnByb3BlcnR5U2l6ZSk7CisgICAgaWYgKGVycikKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6ZGVmYXVsdElucHV0RGV2aWNlKCVwKSB1bmFibGUgdG8gZ2V0IGRl
ZmF1bHQgaW5wdXQgZGV2aWNlIElELCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOworCisgICAgcmV0dXJuIGVycjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCkKK3sKKyAgICBBU1NFUlQobV9pbnRlcm5h
bFN0YXRlTG9jay5pc0hlbGQoKSk7CisKKyAgICBpZiAobV9pb1VuaXQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBpb1VuaXREZXNjcmlwdGlvbiA9
IHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCBrQXVkaW9Vbml0U3ViVHlwZV9Wb2ljZVByb2Nlc3Np
bmdJTywga0F1ZGlvVW5pdE1hbnVmYWN0dXJlcl9BcHBsZSwgMCwgMCB9OworICAgIEF1ZGlvQ29t
cG9uZW50IGlvQ29tcG9uZW50ID0gQXVkaW9Db21wb25lbnRGaW5kTmV4dChudWxscHRyLCAmaW9V
bml0RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChpb0NvbXBvbmVudCk7CisgICAgaWYgKCFpb0Nv
bXBvbmVudCkgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpz
ZXR1cEF1ZGlvVW5pdHMoJXApIHVuYWJsZSB0byBmaW5kIHZwaW8gdW5pdCBjb21wb25lbnQiLCB0
aGlzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIENGU3RyaW5nUmVmIG5hbWUg
PSBudWxscHRyOworICAgIEF1ZGlvQ29tcG9uZW50Q29weU5hbWUoaW9Db21wb25lbnQsICZuYW1l
KTsKKyAgICBpZiAobmFtZSkgeworICAgICAgICBtX2lvVW5pdE5hbWUgPSBuYW1lOworICAgICAg
ICBDRlJlbGVhc2UobmFtZSk7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgY3JlYXRlZCBcIiVzXCIgY29tcG9uZW50IiwgdGhp
cywgbV9pb1VuaXROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIGF1dG8gZXJyID0g
QXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhpb0NvbXBvbmVudCwgJm1faW9Vbml0KTsKKyAgICBp
ZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNl
dHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIG9wZW4gdnBpbyB1bml0LCBlcnJvciAlZCAoJS40
cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOwor
ICAgIH0KKworI2lmIFBMQVRGT1JNKElPUykKKyAgICB1aW50MzJfdCBwYXJhbSA9IDE7CisgICAg
ZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9w
ZXJ0eV9FbmFibGVJTywga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBpbnB1dEJ1cywgJnBhcmFtLCBz
aXplb2YocGFyYW0pKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIGVuYWJsZSB2
cGlvIHVuaXQgaW5wdXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciop
JmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgcGFyYW0gPSAxOworICAg
IGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJv
cGVydHlfRW5hYmxlSU8sIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIG91dHB1dEJ1cywgJnBhcmFt
LCBzaXplb2YocGFyYW0pKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIGVuYWJs
ZSB2cGlvIHVuaXQgb3V0cHV0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNo
YXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyNlbmRpZgorCisgICAgaWYg
KCFtX2NhcHR1cmVEZXZpY2VJRCkgeworICAgICAgICBlcnIgPSBkZWZhdWx0SW5wdXREZXZpY2Uo
Jm1fY2FwdHVyZURldmljZUlEKTsKKyAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHJldHVy
biBlcnI7CisgICAgfQorCisgICAgVUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZihtX2NhcHR1
cmVEZXZpY2VJRCk7CisgICAgZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtB
dWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xv
YmFsLCBpbnB1dEJ1cywgJm1fY2FwdHVyZURldmljZUlELCBwcm9wZXJ0eVNpemUpOworICAgIGlm
IChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0
dXBBdWRpb1VuaXRzKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBjYXB0dXJlIGRldmljZSBJ
RCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAg
ICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBlcnIgPSBjb25maWd1cmVNaWNyb3Bob25lUHJv
YygpOworICAgIGlmIChlcnIpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBlcnIgPSBBdWRp
b1VuaXRJbml0aWFsaXplKG1faW9Vbml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhN
ZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgQXVkaW9V
bml0SW5pdGlhbGl6ZSgpIGZhaWxlZCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIs
IChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgbV9pb1VuaXRJ
bml0aWFsaXplZCA9IHRydWU7CisKKyAgICBlcnIgPSBjb25maWd1cmVTcGVha2VyUHJvYygpOwor
ICAgIGlmIChlcnIpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gZXJyOworfQor
Cit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7Cisg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisgICAg
aWYgKG1faW9Vbml0U3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgT1NTdGF0dXMgZXJy
OworICAgIGlmICghbV9pb1VuaXQpIHsKKyAgICAgICAgZXJyID0gc2V0dXBBdWRpb1VuaXRzKCk7
CisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZXJy
ID0gQXVkaW9PdXRwdXRVbml0U3RhcnQobV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAgICAg
ICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RhcnQoJXApIEF1ZGlvT3V0
cHV0VW5pdFN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJy
LCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2lvVW5pdFN0
YXJ0ZWQgPSB0cnVlOworICAgIHNldE11dGVkKGZhbHNlKTsKK30KKwordm9pZCBDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBBU1NFUlQobV9pb1VuaXQp
OworCisgICAgYXV0byBlcnIgPSBBdWRpb091dHB1dFVuaXRTdG9wKG1faW9Vbml0KTsKKyAgICBp
ZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0
b3AoJXApIEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwg
dGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBtX2lvVW5pdFN0YXJ0ZWQgPSBmYWxzZTsKKyAgICBzZXRNdXRlZCh0cnVlKTsKK30KKworT1NT
dGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3VzcGVuZCgpCit7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBBU1NFUlQobV9p
b1VuaXQpOworCisgICAgaWYgKG1faW9Vbml0U3RhcnRlZCkgeworICAgICAgICBhdXRvIGVyciA9
IEF1ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQpOworICAgICAgICBpZiAoZXJyKSB7CisgICAg
ICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZXN1bWUoJXApIEF1
ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGlu
dCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0K
KyAgICAgICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1faW9V
bml0SW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRVbmluaXRpYWxp
emUobV9pb1VuaXQpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBMT0coTWVkaWEs
ICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZXN1bWUoJXApIEF1ZGlvVW5pdFVuaW5pdGlhbGl6
ZSBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZl
cnIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgICAgICBtX2lvVW5p
dEluaXRpYWxpemVkID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK09TU3Rh
dHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnJlc3VtZSgpCit7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBBU1NFUlQobV9pb1Vu
aXQpOworICAgIEFTU0VSVCghbV9pb1VuaXRTdGFydGVkKTsKKworICAgIGF1dG8gZXJyID0gQXVk
aW9PdXRwdXRVbml0U3RhcnQobV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9H
KE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVzdW1lKCVwKSBBdWRpb091dHB1dFVu
aXRTdGFydCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNo
YXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICBtX2lvVW5pdFN0YXJ0
ZWQgPSBmYWxzZTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK1JlZlB0cjxSZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzPiBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMo
KSBjb25zdAoreworICAgIGlmIChtX2NhcGFiaWxpdGllcykKKyAgICAgICAgcmV0dXJuIG1fY2Fw
YWJpbGl0aWVzOworCisgICAgbV9zdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Rldmlj
ZUlkKHRydWUpOworICAgIG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNFY2hvQ2Fu
Y2VsbGF0aW9uKHRydWUpOworICAgIG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNW
b2x1bWUodHJ1ZSk7CisKKyAgICAvLyBGSVhNRTogZmluaXNoIHRoaXMuCisgICAgbV9jYXBhYmls
aXRpZXMgPSBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpjcmVhdGUobV9zdXBwb3J0
ZWRDb25zdHJhaW50cyk7CisgICAgbV9jYXBhYmlsaXRpZXMtPnNldERldmljZUlkKGlkKCkpOwor
ICAgIG1fY2FwYWJpbGl0aWVzLT5zZXRFY2hvQ2FuY2VsbGF0aW9uKFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDYXBhYmlsaXRpZXM6OkVjaG9DYW5jZWxsYXRpb246OlJlYWRXcml0ZSk7CisgICAgbV9jYXBh
YmlsaXRpZXMtPnNldFZvbHVtZShDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDAuMCwgMS4wKSk7CisK
KyAgICByZXR1cm4gbV9jYXBhYmlsaXRpZXM7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5ncyYgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxMTYwYzcyODViNjA3ZDI0NTY0MWQ3ZDgwY2EzZjVkYzMz
MTllZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEsMTM5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmgiCisjaW5jbHVkZSAiQ2FwdHVyZURldmljZS5oIgorI2luY2x1ZGUgIlJlYWx0aW1l
TWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Ub29sYm94Lmg+Cisj
aW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCit0eXBlZGVmIHN0cnVjdCBPcGFxdWVDTUNsb2NrKiBDTUNsb2NrUmVmOworCituYW1lc3Bh
Y2UgV1RGIHsKK2NsYXNzIE1lZGlhVGltZTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q7CitjbGFzcyBBdWRpb1NhbXBsZURhdGFTb3VyY2U7
CitjbGFzcyBDYXB0dXJlRGV2aWNlSW5mbzsKKworY2xhc3MgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZSA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKK3B1YmxpYzoKKworICAgIHN0YXRpYyBS
ZWZQdHI8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZT4gY3JlYXRlKGNvbnN0IENhcHR1cmVEZXZpY2Um
LCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiwgU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIH5Db3Jl
QXVkaW9DYXB0dXJlU291cmNlKCk7CisKKyAgICB2b2lkIGFkZEVjaG9DYW5jZWxsYXRpb25Tb3Vy
Y2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJik7CisgICAgdm9pZCByZW1vdmVFY2hvQ2FuY2VsbGF0
aW9uU291cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYpOworCisgICAgdXNpbmcgTWljcm9waG9u
ZURhdGFDYWxsYmFjayA9IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBNZWRpYVRpbWUmIHNhbXBs
ZVRpbWUsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBhdWRpb0RhdGEsIGNvbnN0IEF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBzaXplX3Qgc2FtcGxlQ291bnQpPjsKKworICAg
IHVpbnQ2NF90IGFkZE1pY3JvcGhvbmVEYXRhQ29uc3VtZXIoTWljcm9waG9uZURhdGFDYWxsYmFj
ayk7CisgICAgdm9pZCByZW1vdmVNaWNyb3Bob25lRGF0YUNvbnN1bWVyKHVpbnQ2NF90KTsKKwor
ICAgIENNQ2xvY2tSZWYgdGltZWJhc2VDbG9jaygpOworCitwcml2YXRlOgorICAgIENvcmVBdWRp
b0NhcHR1cmVTb3VyY2UoY29uc3QgQ2FwdHVyZURldmljZSYpOworCisgICAgdm9pZCBzdGFydFBy
b2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgZmluYWw7
CisgICAgYm9vbCBpc1Byb2R1Y2luZ0RhdGEoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lvVW5p
dFN0YXJ0ZWQ7IH0KKworICAgIE9TU3RhdHVzIHN1c3BlbmQoKTsKKyAgICBPU1N0YXR1cyByZXN1
bWUoKTsKKworICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBjYXBh
YmlsaXRpZXMoKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7CisKKyAgICBPU1N0YXR1cyBzZXR1cEF1ZGlv
VW5pdHMoKTsKKyAgICBPU1N0YXR1cyBjb25maWd1cmVTcGVha2VyUHJvYygpOworICAgIE9TU3Rh
dHVzIGNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCk7CisgICAgT1NTdGF0dXMgZGVmYXVsdE91dHB1
dERldmljZSh1aW50MzJfdCopOworICAgIE9TU3RhdHVzIGRlZmF1bHRJbnB1dERldmljZSh1aW50
MzJfdCopOworCisgICAgdm9pZCBjaGVja1RpbWVzdGFtcHMoY29uc3QgQXVkaW9UaW1lU3RhbXAq
LCB1aW50NjRfdCwgZG91YmxlKTsKKworICAgIHN0YXRpYyBPU1N0YXR1cyBtaWNyb3Bob25lQ2Fs
bGJhY2sodm9pZCosIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1l
U3RhbXAqLCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7CisgICAgT1NTdGF0dXMg
cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29u
c3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7CisK
KyAgICBzdGF0aWMgT1NTdGF0dXMgc3BlYWtlckNhbGxiYWNrKHZvaWQqLCBBdWRpb1VuaXRSZW5k
ZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1
ZGlvQnVmZmVyTGlzdCopOworICAgIE9TU3RhdHVzIHByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1Vu
aXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50
MzIsIEF1ZGlvQnVmZmVyTGlzdCopOworCisgICAgc3RhdGljIGRvdWJsZSBwcmVmZXJyZWRTYW1w
bGVSYXRlKCk7CisgICAgc3RhdGljIGRvdWJsZSBwcmVmZXJyZWRJT0J1ZmZlckR1cmF0aW9uKCk7
CisKKyAgICBBdWRpb1VuaXQgbV9pb1VuaXQgeyBudWxscHRyIH07CisgICAgU3RyaW5nIG1faW9V
bml0TmFtZTsKKworICAgIC8vIE9ubHkgcmVhZC9tb2RpZmllZCBmcm9tIHRoZSBJTyB0aHJlYWQu
CisgICAgVmVjdG9yPFJlZlB0cjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+PiBtX2FjdGl2ZVNvdXJj
ZXM7CisKKyAgICBlbnVtIFF1ZXVlQWN0aW9uIHsgQWRkLCBSZW1vdmUgfTsKKyAgICBWZWN0b3I8
c3RkOjpwYWlyPFF1ZXVlQWN0aW9uLCBSZWZQdHI8QXVkaW9TYW1wbGVEYXRhU291cmNlPj4+IG1f
cGVuZGluZ1NvdXJjZXM7CisKKyAgICB1aW50MzJfdCBtX2NhcHR1cmVEZXZpY2VJRCB7IDAgfTsK
KworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX21pY3JvcGhvbmVQcm9jRm9ybWF0Owor
ICAgIFJlZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZl
cjsKKyAgICB1aW50NjRfdCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZCB7IDAgfTsKKyAgICB1aW50
NjRfdCBtX2xhdGVzdE1pY1RpbWVTdGFtcCB7IDAgfTsKKworICAgIEhhc2hNYXA8dWludDY0X3Qs
IE1pY3JvcGhvbmVEYXRhQ2FsbGJhY2s+IG1fbWljcm9waG9uZURhdGFDYWxsYmFja3M7CisgICAg
dWludDY0X3QgbV9uZXh0TWljcm9waG9uZURhdGFDYWxsYmFja0lEIHsgMCB9OworCisgICAgQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fc3BlYWtlclByb2NGb3JtYXQ7CisgICAgUmVmUHRyPEF1
ZGlvU2FtcGxlQnVmZmVyTGlzdD4gbV9zcGVha2VyU2FtcGxlQnVmZmVyOworICAgIHVpbnQ2NF90
IG1fc3BlYWtlclByb2NzQ2FsbGVkIHsgMCB9OworCisgICAgZG91YmxlIG1fRFRTQ29udmVyc2lv
blJhdGlvIHsgMCB9OworCisgICAgYm9vbCBtX2lvVW5pdEluaXRpYWxpemVkIHsgZmFsc2UgfTsK
KyAgICBib29sIG1faW9Vbml0U3RhcnRlZCB7IGZhbHNlIH07CisKKyAgICBMb2NrIG1fcGVuZGlu
Z1NvdXJjZVF1ZXVlTG9jazsKKyAgICBMb2NrIG1faW50ZXJuYWxTdGF0ZUxvY2s7CisKKyAgICBt
dXRhYmxlIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxp
dGllczsKKyAgICBtdXRhYmxlIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50
cyBtX3N1cHBvcnRlZENvbnN0cmFpbnRzOworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5n
cyBtX2N1cnJlbnRTZXR0aW5nczsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFsU2V0dGluZ3MuY3BwCmluZGV4IDRlMjQ0ODRiZDE3ODE0ZDg0NmY2Mjk4MWM1MGQ1ZDE2
YjllNjU4MWIuLmVhYmEwOTljZDZhMmQxYjZiMDQ4N2VmZmZmODJiZjFkMDgyNGNkMDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcApAQCAtNDM0LDYgKzQz
NCwxOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRNZWRpYUNhcHR1
cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9vbAogICAgIHJldHVybiB7IH07CiB9CiAKK0V4
Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFVzZUFWRm91bmRhdGlvbkF1ZGlv
Q2FwdHVyZShib29sIHJlcXVpcmVzKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKKyAgICBzZXR0aW5ncygpLnNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShyZXF1
aXJlcyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXF1aXJlcyk7CisjZW5kaWYKKyAgICBy
ZXR1cm4geyB9OworfQorCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNldHRpbmdzOjpzZXRF
ZGl0aW5nQmVoYXZpb3IoY29uc3QgU3RyaW5nJiBlZGl0aW5nQmVoYXZpb3IpCiB7CiAgICAgaWYg
KCFtX3BhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0
dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oCmluZGV4
IDhhMDlmOTU0YWJlMGE3MDBkMjQxMWJiOTg1NGZkYmFkNjcxZDk3NzQuLmZmMDQyYzBmZDAwOGQ5
MTRlOTgxOGNmOTI0N2I3NWRjMWRlMDlkNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxTZXR0aW5ncy5oCkBAIC02Niw2ICs2Niw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25P
cjx2b2lkPiBzZXRDYW5TdGFydE1lZGlhKGJvb2wpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNl
dEFsbG93c0FpclBsYXlGb3JNZWRpYVBsYXliYWNrKGJvb2wpOwogICAgIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihib29sKTsKKyAgICBF
eGNlcHRpb25Pcjx2b2lkPiBzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoYm9vbCk7CiAK
ICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRFZGl0aW5nQmVoYXZpb3IoY29uc3QgU3RyaW5nJik7
CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0UHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMoYm9vbCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRs
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbAppbmRleCA1Nzgw
ODg4ZGNjNmU3M2Y0MzUwODEyOTQ5YTc5NWM2MjlhZmM3MjA0Li43MDE3ODkwZGZkNTQwY2MwYWNk
N2NiMTlmYzI0OWRmZmNhMWQ1MjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFsU2V0dGluZ3MuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxTZXR0aW5ncy5pZGwKQEAgLTU2LDYgKzU2LDcgQEAgZW51bSBGb3JjZWRBY2Nlc3NpYmlsaXR5
VmFsdWUgeyAic3lzdGVtIiwgIm9uIiwgIm9mZiIgfTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25d
IHZvaWQgc2V0TWVkaWFUeXBlT3ZlcnJpZGUoRE9NU3RyaW5nIG1lZGlhVHlwZU92ZXJyaWRlKTsK
ICAgICB2b2lkIHNldEFsbG93c0FpclBsYXlGb3JNZWRpYVBsYXliYWNrKGJvb2xlYW4gYXZhaWxh
YmxlKTsKICAgICBbQ29uZGl0aW9uYWw9TUVESUFfU1RSRUFNLCBNYXlUaHJvd0V4Y2VwdGlvbl0g
dm9pZCBzZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9vbGVhbiBlbmFi
bGUpOworICAgIFtDb25kaXRpb25hbD1NRURJQV9TVFJFQU0sIE1heVRocm93RXhjZXB0aW9uXSB2
b2lkIHNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShib29sZWFuIGVuYWJsZSk7CiAKICAg
ICBbTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgc2V0Rm9yY2VQZW5kaW5nV2ViR0xQb2xpY3koYm9v
bGVhbiBmb3JjZWQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggNGM1
ZWIxODZjZTAwMmNhMDI1NmJjZWM3MjQ3ZWE5NTJjYzZkNTMyNC4uMzUxMGFlNjEzMjhlYWZjYjQy
ZWE5YTI0NWEzMTM2NjhmMDczMmY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cApAQCAtMTIxNSw2ICsxMjE1LDExIEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRNb2NrTWVkaWFDYXB0
dXJlRGV2aWNlc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIFdlYkNvcmU6OlNldHRpbmdzOjpz
ZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKGVuYWJsZWQpOwogfQogCit2b2lkIEludGVybmFs
czo6c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBX
ZWJDb3JlOjpTZXR0aW5nczo6c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKGVuYWJsZWQp
OworfQorCiAjZW5kaWYKIAogRXhjZXB0aW9uT3I8UmVmPENsaWVudFJlY3Q+PiBJbnRlcm5hbHM6
OmFic29sdXRlQ2FyZXRCb3VuZHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXgg
MWZlYWIyMDI1NWU3M2Q2NzcxMDk5NzI2NjQ0YmE4ZDFjZWRmZmMyNC4uYWE0ODNkYzcxYzhjMmYz
NjIyNjVhYmU3ZThlYzlhYWEzZDEzZmVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5o
CkBAIC0zOTQsNiArMzk0LDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
ICAgICB2b2lkIHNldE1vY2tNZWRpYUNhcHR1cmVEZXZpY2VzRW5hYmxlZChib29sKTsKKyAgICB2
b2lkIHNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShib29sKTsKICNlbmRpZgogCiAjaWYg
RU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQ
cmVmZXJlbmNlS2V5c1ByaXZhdGUuaAppbmRleCBkMmY5NWU4MGNiMDk2ZGViYjNiNWNmOGFmYWQ4
MmE2YjE5MTYwYTc2Li45NWI2ZDhmMzIwNzEwYTk1ZjBjMTAyNjAyM2FkNTAxNzU4Mjg0NWM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQ
cml2YXRlLmgKQEAgLTIyMiw2ICsyMjIsNyBAQAogI2RlZmluZSBXZWJLaXRFbmFibGVJbmhlcml0
VVJJUXVlcnlDb21wb25lbnRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RW5hYmxlSW5oZXJpdFVSSVF1
ZXJ5Q29tcG9uZW50IgogI2RlZmluZSBXZWJLaXRNZWRpYURhdGFMb2Fkc0F1dG9tYXRpY2FsbHlQ
cmVmZXJlbmNlS2V5IEAiV2ViS2l0TWVkaWFEYXRhTG9hZHNBdXRvbWF0aWNhbGx5IgogI2RlZmlu
ZSBXZWJLaXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdE1v
Y2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQiCisjZGVmaW5lIFdlYktpdFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZVByZWZlcmVuY2VLZXkgQCJXZWJLaXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1
cmVFbmFibGVkIgogI2RlZmluZSBXZWJLaXRFbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2Vz
RW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRFbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZh
Y2VzRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZFBy
ZWZlcmVuY2VLZXkgQCJXZWJLaXRJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkIgogI2RlZmlu
ZSBXZWJLaXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb25QcmVmZXJlbmNlS2V5
IEAiV2ViS2l0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbSBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KaW5kZXggZDQ4MTAxN2FmYzcxMWE2
MmJmZTE1ZDM5ZjM5MjdmYzJhMjVkNzUzYi4uNjBiYTRjOWI4MjJlNDg5ZTk1MmFhZTA5YzYxYjE0
OTYwZWMxODE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVm
ZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2Vz
Lm1tCkBAIC02MTIsNiArNjEyLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sIFdlYktpdE1vY2tDYXB0dXJl
RGV2aWNlc0VuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6WUVTXSwgV2ViS2l0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uUHJl
ZmVyZW5jZUtleSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgV2ViS2l0
VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlUHJlZmVyZW5jZUtleSwKICNlbmRpZgogICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgV2ViS2l0U2hhZG93RE9NRW5hYmxlZFBy
ZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBXZWJL
aXRDdXN0b21FbGVtZW50c0VuYWJsZWRQcmVmZXJlbmNlS2V5LApAQCAtMjg0Nyw2ICsyODQ4LDE2
IEBAIHN0YXRpYyBOU1N0cmluZyAqY2xhc3NJQkNyZWF0b3JJRCA9IG5pbDsKICAgICBbc2VsZiBf
c2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRQ
cmVmZXJlbmNlS2V5XTsKIH0KIAorLSAoQk9PTCl1c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUK
K3sKKyAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRVc2VBVkZvdW5kYXRp
b25BdWRpb0NhcHR1cmVQcmVmZXJlbmNlS2V5XTsKK30KKworLSAodm9pZClzZXRVc2VBVkZvdW5k
YXRpb25BdWRpb0NhcHR1cmU6KEJPT0wpZmxhZworeworICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6
ZmxhZyBmb3JLZXk6V2ViS2l0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlUHJlZmVyZW5jZUtl
eV07Cit9CisKIC0gKEJPT0wpZW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQK
IHsKICAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRFbnVtZXJhdGluZ0Fs
bE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZFByZWZlcmVuY2VLZXldOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKaW5kZXggMmVkMGRlOTNl
MzJjOTE2NjhiNjdjYjRmMzkyMmRkMjdiOTFkNGZhYy4uZDZmNWUxZGEwNGJiODEzMmNhZjU0ZjBh
YmM5OGVhNjQ5MjJjNzkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VzUHJpdmF0ZS5oCkBAIC01MDgsNiArNTA4LDkgQEAgZXh0ZXJuIE5TU3RyaW5n
ICpXZWJQcmVmZXJlbmNlc0NhY2hlTW9kZWxDaGFuZ2VkSW50ZXJuYWxOb3RpZmljYXRpb247CiAt
ICh2b2lkKXNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjooQk9PTClmbGFn
OwogLSAoQk9PTCltZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247CiAKKy0gKHZv
aWQpc2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlOihCT09MKWZsYWc7CistIChCT09MKXVz
ZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZTsKKwogLSAodm9pZClzZXRTaGFkb3dET01FbmFibGVk
OihCT09MKWZsYWc7CiAtIChCT09MKXNoYWRvd0RPTUVuYWJsZWQ7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQppbmRleCBiNWVkM2U1YTM1ZjNmYWYwODg5YmRlMTVmODdlZTA5NWJk
ZjhiYmI0Li5iMDc4NDQ3ZDUzZDFkNDFlODU1MWVjNDM1MTQxNWQxZDM2ZGZhNGViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0yODQwLDYgKzI4NDAsNyBAQCBzdGF0aWMg
Ym9vbCBuZWVkc1NlbGZSZXRhaW5XaGlsZUxvYWRpbmdRdWlyaygpCiAgICAgc2V0dGluZ3Muc2V0
TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZChbcHJlZmVyZW5jZXMgbW9ja0NhcHR1cmVEZXZpY2Vz
RW5hYmxlZF0pOwogICAgIHNldHRpbmdzLnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29u
bmVjdGlvbihbcHJlZmVyZW5jZXMgbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9u
XSk7CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRNZWRp
YVN0cmVhbUVuYWJsZWQoW3ByZWZlcmVuY2VzIG1lZGlhU3RyZWFtRW5hYmxlZF0pOworICAgIHNl
dHRpbmdzLnNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShbcHJlZmVyZW5jZXMgdXNlQVZG
b3VuZGF0aW9uQXVkaW9DYXB0dXJlXSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlv
bnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgK
aW5kZXggNDBhMWFmYzM3M2Q3OGM3ZTAwNzk1YTdkOTE4ZDdiYjdkZDVmZjk5OS4uZjA2OWJlMzc1
OWIwOTIyNTFjMGNhNjRhMjE1ZDMzM2UyYWZmMTAyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oCkBAIC0yMjUsNiArMjI1LDcgQEAK
ICAgICBtYWNybyhIVFRQRXF1aXZFbmFibGVkLCBodHRwRXF1aXZFbmFibGVkLCBCb29sLCBib29s
LCB0cnVlLCAiIiwgIiIpIFwKICAgICBtYWNybyhNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkLCBt
b2NrQ2FwdHVyZURldmljZXNFbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSwgIiIsICIiKSBcCiAg
ICAgbWFjcm8oTWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uLCBtZWRpYUNhcHR1
cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24sIEJvb2wsIGJvb2wsIHRydWUsICIiLCAiIikgXAor
ICAgIG1hY3JvKFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSwgdXNlQVZGb3VuZGF0aW9uQXVk
aW9DYXB0dXJlLCBCb29sLCBib29sLCBmYWxzZSwgIiIsICIiKSBcCiAgICAgbWFjcm8oRW51bWVy
YXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQsIGVudW1lcmF0aW5nQWxsTmV0d29ya0lu
dGVyZmFjZXNFbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSwgIiIsICIiKSBcCiAgICAgbWFjcm8o
SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZCwgaWNlQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxl
ZCwgQm9vbCwgYm9vbCwgdHJ1ZSwgIiIsICIiKSBcCiAgICAgbWFjcm8oU2hhZG93RE9NRW5hYmxl
ZCwgc2hhZG93RE9NRW5hYmxlZCwgQm9vbCwgYm9vbCwgdHJ1ZSwgIlNoYWRvdyBET00iLCAiSFRN
TCBTaGFkb3cgRE9NIHByb3RvdHlwZSIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAppbmRleCBiNTRiMTFjMWI1ZGIxODUxYzA3N2NlNTk5
YmEwOWRmOTkyOTExYmJiLi45Y2VjZDc1YjY5OTAwNjA2NTlkZDZhM2I2MGQxZDY3NTcxMTFjOTBl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNl
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMu
Y3BwCkBAIC0xNTcxLDYgKzE1NzEsMTYgQEAgYm9vbCBXS1ByZWZlcmVuY2VzR2V0TWVkaWFDYXB0
dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmUKICAgICBy
ZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVD
b25uZWN0aW9uKCk7CiB9CiAKK3ZvaWQgV0tQcmVmZXJlbmNlc1NldFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZShXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQp
Cit7CisgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9D
YXB0dXJlKGVuYWJsZWQpOworfQorCitib29sIFdLUHJlZmVyZW5jZXNHZXRVc2VBVkZvdW5kYXRp
b25BdWRpb0NhcHR1cmUoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKK3sKKyAgICBy
ZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+dXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJl
KCk7Cit9CisKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEZldGNoQVBJRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7CiAgICAgdG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+c2V0RmV0Y2hBUElFbmFibGVkKGZsYWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaAppbmRleCBj
NjMxOGZmYjZhODJkNDc3NjI1NjQ5YWUxMjNiMmEyNWIwMzA3NTY5Li4wMGJjM2Y4ZDI0NjRmNTNi
ODNhNDM1NDY2ZTNlNTRmN2I0M2ZiYjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaApAQCAtNDMzLDYgKzQz
MywxMCBAQCBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0RW51bWVyYXRpbmdBbGxOZXR3
b3JrSW50ZXJmYWNlc0VuYWJsZWQoV0tQcmVmZXJlbgogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJl
bmNlc1NldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihXS1ByZWZlcmVuY2Vz
UmVmLCBib29sKTsKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRNZWRpYUNhcHR1cmVS
ZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oV0tQcmVmZXJlbmNlc1JlZik7CiAKKy8vIERlZmF1bHRz
IHRvIGZhbHNlLgorV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldFVzZUFWRm91bmRhdGlv
bkF1ZGlvQ2FwdHVyZShXS1ByZWZlcmVuY2VzUmVmLCBib29sKTsKK1dLX0VYUE9SVCBib29sIFdL
UHJlZmVyZW5jZXNHZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoV0tQcmVmZXJlbmNlc1Jl
Zik7CisgICAgCiAvLyBEZWZhdWx0cyB0byBmYWxzZQogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJl
bmNlc1NldEZldGNoQVBJRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpOwogV0tf
RVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldEZldGNoQVBJRW5hYmxlZChXS1ByZWZlcmVuY2Vz
UmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApp
bmRleCBiZTMwY2RkMjc4ZjgyYjFlMjcwZWQzZGE0ZTNmNjBjOGIzY2RiMjdhLi5hZTNmZGMyMmFj
MDQ2YWE4ZGRkYzQzODUxZDkzMTEzYWU5ODA4YmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zMTY4LDYgKzMxNjgsNyBAQCB2b2lkIFdl
YlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3Jl
KQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgc2V0dGluZ3Muc2V0TW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6
Om1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRLZXkoKSkpOwogICAgIHNldHRpbmdzLnNldE1lZGlh
Q2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXko
V2ViUHJlZmVyZW5jZXNLZXk6Om1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbktl
eSgpKSk7CisgICAgc2V0dGluZ3Muc2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKHN0b3Jl
LmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6dXNlQVZGb3VuZGF0aW9uQXVk
aW9DYXB0dXJlS2V5KCkpKTsKICNlbmRpZgogCiAgICAgc2V0dGluZ3Muc2V0U2hvdWxkQ29udmVy
dFBvc2l0aW9uU3R5bGVPbkNvcHkoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVu
Y2VzS2V5OjpzaG91bGRDb252ZXJ0UG9zaXRpb25TdHlsZU9uQ29weUtleSgpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306285</attachid>
            <date>2017-04-05 09:07:22 -0700</date>
            <delta_ts>2017-04-05 09:09:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170112-20170405090717.patch</filename>
            <type>text/plain</type>
            <size>55941</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg2M2JlNThiOWFjZDEz
MTFiNWQ1NmQ3N2U2MzgxNjM1NzJkODQzNy4uNzMwYTg1Njg4YzY3NTY2ZDFlN2JjYjlkZWZhZmEx
NTViNTRhYmU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE3LTA0LTA1ICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDExMgorICAgICAgICByZGFyOi8vcHJvYmxlbS8zMDI5MzMzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNl
IHRoaXMgcHJvdmlkZXMgdGhlIHNhbWUgZnVuY2l0b25hbGl0eSBhcyBBVkF1ZGlvQ2FwdHVyZVNv
dXJjZS4gCisgICAgICAgIEZ1bmNpb25hbGl0eSBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Qg
Y2FzZXMuCisKKyAgICAgICAgQWRkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UgZm9yIGF1ZGlvIGNh
cHR1cmUuIEFuZCB1c2UgaXQgYnkgZGVmYXVsdCBpbiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLgor
ICAgICAgICBBZGQgVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlIHNldHRpbmcgdG8gc3dpdGNo
IGJhY2sgdG8gQVZGb3VuZGF0aW9uIGZvciBhdWRpbyBjYXB0dXJlLgorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnVzZUFWRm91bmRhdGlvbkF1ZGlvQ2Fw
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0VXNlQVZGb3VuZGF0aW9uQXVk
aW9DYXB0dXJlKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNldFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRp
b0NhcHR1cmVTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJl
U291cmNlOjpmYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6fkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJlZmVycmVkU2FtcGxlUmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcmVmZXJyZWRJT0J1ZmZlckR1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3Vy
ZU1pY3JvcGhvbmVQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmFkZE1pY3JvcGhvbmVEYXRhQ29uc3VtZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3ZlTWljcm9waG9uZURhdGFDb25zdW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRFY2hvQ2FuY2Vs
bGF0aW9uU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnJlbW92ZUVjaG9DYW5jZWxsYXRpb25Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6Y2hlY2tUaW1lc3RhbXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzcGVha2VyQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6Om1pY3JvcGhvbmVD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZh
dWx0T3V0cHV0RGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmRlZmF1bHRJbnB1dERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpzZXR0aW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYzo6UmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck1hYyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyTWFjOjpkZWZhdWx0QXVkaW9GYWN0b3J5KToKKwogMjAxNy0wMy0yOSAgTXlsZXMg
Qy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFRyeSB0byBub3Jt
YWxpemUgdmFyaWF0aW9uIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDRjOTE3ZDMwZTBmOTQ2
YTMzMGIyNGY3YjU4MWJkOWViNDAzZmNmOTMuLmRjYjViNjM3YjQzNzY2YmRhYTUwMzYzM2VlN2Fi
NTQ4ZTY3NWQ0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxNy0wNC0w
NSAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIENvcmVB
dWRpb0NhcHR1cmVTb3VyY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzAxMTIKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMzAyOTMzMzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVXNlQVZGb3Vu
ZGF0aW9uQXVkaW9DYXB0dXJlIHByZWZlcmVuY2UgdG8gc3dpdGNoIGJhY2sgZnJvbSB0aGUgbmV3
IGRlZmF1bHQgb2YgQ29yZUF1ZGlvLgorCisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAg
ICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFsaXplXSk6CisgICAgICAgICgtW1dlYlByZWZl
cmVuY2VzIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZV0pOgorICAgICAgICAoLVtXZWJQcmVm
ZXJlbmNlcyBzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmU6XSk6CisgICAgICAgICogV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcu
bW06CisgICAgICAgICgtW1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZDpdKToKKwogMjAxNy0w
My0yNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFNhdmluZyBmaWxlcyBzaG91bGQgbm90IHN1Z2dlc3QgdGhlIHRvcCBsZXZl
bCBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxMDkzOWNmMWM5ZWNlMDhiZDhmODgxOTU5NDFhZjg3
YmI1NGJjYmRhLi4zMjhhNjM1OTlhOWNlYTYxMzg1YjE2NDQxNTAyZjA5NGMzNTRmNmY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTctMDQtMDUgIEplcmVteSBKb25lcyAgPGplcmVt
eWpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTEyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzMwMjkzMzM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSBwcmVm
ZXJlbmNlIHRvIHN3aXRjaCBiYWNrIGZyb20gdGhlIG5ldyBkZWZhdWx0IG9mIENvcmVBdWRpby4K
KworICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV0tQcmVmZXJl
bmNlc1NldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSk6CisgICAgICAgIChXS1ByZWZlcmVu
Y2VzR2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVz
ZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OmNyZWF0ZU1lZGlhU291cmNlRm9yQ2FwdHVyZURl
dmljZVdpdGhDb25zdHJhaW50cyk6CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OnN5bmNXaXRoV2ViQ29yZVByZWZzKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKwogMjAxNy0wMy0yOSAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIFBhZ2VD
bGllbnQ6OnJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyYTRhYThlNGIzYmI1
ODU0MjEyNThkZWU3YjY0ZTEwMzFhNGNkNjRhLi5kNTJlN2MzNDA2NWFjYTFiYjI1NGNlOTY2MTZi
YjRmYmQ2MmVhNjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC03Myw3ICs3Myw3IEBACiAJCTA3MDMzNEU5MTQ1QTFGMzYwMDhE
OEQ0NSAvKiBKU1RyYWNrQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3MDMzNEU4MTQ1QTFGMzUwMDhEOEQ0NSAvKiBKU1RyYWNrQ3VzdG9t
LmNwcCAqLzsgfTsKIAkJMDcwMzYzRTAxODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJl
U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
NzAzNjNEODE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLzsgfTsK
IAkJMDcwMzYzRTExODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzRDkxODFB
MUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tICovOyB9OwotCQkwNzAzNjNF
MjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREExODFBMUNEQzAwQzA3
NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgfTsKKwkJMDcwMzYzRTIxODFBMUNE
QzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0RBMTgxQTFDREMwMEMwNzRBNSAvKiBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMDcwMzYzRTMxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURl
dmljZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzAzNjNEQjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5t
bSAqLzsgfTsKIAkJMDcwMzYzRTQxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAz
NjNEQzE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCAqLzsgfTsKIAkJ
MDcwMzYzRTUxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREQxODFBMUNE
QzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tICovOyB9OwpAQCAtMjc0LDcgKzI3
NCw3IEBACiAJCTA3QjVBMzBEMTQ2ODdENzEwMEE4MUVDRSAvKiBKU1RleHRUcmFja0xpc3RDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdC
NUEzMEMxNDY4N0Q3MTAwQTgxRUNFIC8qIEpTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAgKi87IH07
CiAJCTA3QjcxMTZEMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0I3MTE2QTFEODk5RTYzMDA5
RjBGRkIgLyogQ2FwdHVyZURldmljZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTA3QjcxMTZFMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2
aWNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwN0I3MTE2QjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuY3Bw
ICovOyB9OwotCQkwN0I3MTE2RjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Qjcx
MTZDMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovOyB9OworCQkw
N0I3MTE2RjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QjcxMTZDMUQ4OTlFNjMw
MDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3QzA0NkMzMUU0MjUwOEIwMDcyMDFFNyAvKiBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NTcxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5jcHAgKi87IH07CiAJCTA3QzA0NkM0MUU0MjUwOEIwMDcyMDFFNyAvKiBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3M0I4NzU4MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwN0MwNDZDODFFNDI1MTU1MDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRp
YVN0cmVhbUNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwN0MwNDZDNjFFNDI1MTJGMDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0
cmVhbUNvY29hLmggKi87IH07CkBAIC0xNjYxLDYgKzE2NjEsNyBAQAogCQkzRjQyQjMxRTE4ODEx
OTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MkIzMUMxODgxMTkx
QjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLzsgfTsK
IAkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0Lm1tICovOyB9OwogCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTNGRjFGQTY2MUU3MzUwRkQwMEMxMDAyRiAvKiBDb3JlQXVkaW9DYXB0dXJl
U291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCAq
LzsgfTsKIAkJM0ZGODEzQTcxREJBODY0MDAwOUJGMDAxIC8qIFBvaW50ZXJMb2NrQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNGQzQz
NEYxOTI0MDZBOTAwQTBEM0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUw
MDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdl
YktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CiAJCTNGRkZGOUE5MTU5RDlBNTUwMDIwQkJE
NSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNGRkZGOUE3MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuaCAqLzsgfTsKQEAgLTkyMTgsNiArOTIxOSw4IEBACiAJCTNGMkIzM0UzMTY1
QUJEMzUwMEUzOTg3QyAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFdlYktpdENTU1ZpZXdwb3J0UnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTNGMkIzM0U5MTY1QUYxNTUwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdwb3J0
UnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdENT
U1ZpZXdwb3J0UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGMkIzM0VB
MTY1QUYxNTUwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzRjNCQjU4MjFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJM0YzQkI1ODMxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjQyQjMxQjE4ODExOTFCMDAyNzhBQUMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjQyQjMxQzE4ODExOTFCMDAyNzhBQUMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MDcyLDYgKzE2MDc1LDggQEAKIAkJCQkw
NzAzNjNERDE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0gKi8sCiAJ
CQkJMDcwMzYzREUxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLmggKi8s
CiAJCQkJMDcwMzYzREYxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLm1t
ICovLAorCQkJCTNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291
cmNlLmNwcCAqLywKKwkJCQkzRjNCQjU4MzFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oICovLAogCQkJCTA3NDRFQ0VCMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZU1hYy5oICovLAogCQkJCTA3NDRFQ0VDMUUwQzRBRTUwMDBEMDk0NCAv
KiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5tbSAqLywKIAkJCQkwN0VFNzZFRDFCRUE2MTk4
MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaCAqLywKQEAgLTMwNTQ0LDYg
KzMwNTQ5LDcgQEAKIAkJCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3RvcmFn
ZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3NDZBRjIxMTRGNERERTYwMDNFN0E3MiAvKiBD
b29yZGluYXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NDM4MTdGRjFBOTFCMkY4MDA2RTA0
RjIgLyogQ29yZU1lZGlhU29mdExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJM0ZGMUZBNjYx
RTczNTBGRDAwQzEwMDJGIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0Q3RDMzNDcxQzdBMTZCRjAwMDQxMjkzIC8qIENvcmVWaWRlb1NvZnRMaW5rLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOTUwMEU4MjA1NkIwMEIyNTk2NSAvKiBDb3VudGVy
RGlyZWN0aXZlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzkyRjE1MDBBRDE4NjIzMDA2OTFC
RDQgLyogQ291bnRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCmluZGV4IDFiM2UyMmJmMWJmN2FjMzQyOTFhMDdlMTIwNjU1ZDViNmUyODQ5MjkuLmY2NWM4
M2Y3ZGE5MGQzNzE4MGI4MWIzNzk3ZTU0ODU1YmM2NDExZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwCkBAIC05NCw2ICs5NCw3IEBAIGJvb2wgU2V0dGluZ3M6OmdNb2NrU2Nyb2xsQW5pbWF0
b3JFbmFibGVkID0gZmFsc2U7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIGJvb2wgU2V0dGlu
Z3M6OmdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkID0gZmFsc2U7CiBib29sIFNldHRpbmdzOjpn
TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uID0gdHJ1ZTsKK2Jvb2wgU2V0dGlu
Z3M6OmdVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUgPSBmYWxzZTsKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oV0lOKQpAQCAtNjE1LDYgKzYxNiwxNiBAQCB2b2lkIFNldHRpbmdzOjpzZXRNZWRp
YUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9vbCBtZWRpYUNhcHR1cmVSZXF1aXJl
cwogewogICAgIGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24gPSBtZWRpYUNh
cHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247CiB9CisKK2Jvb2wgU2V0dGluZ3M6OnVzZUFW
Rm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSgpCit7CisgICAgcmV0dXJuIGdVc2VBVkZvdW5kYXRpb25B
dWRpb0NhcHR1cmU7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldFVzZUFWRm91bmRhdGlvbkF1ZGlv
Q2FwdHVyZShib29sIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSkKK3sKKyAgICBnVXNlQVZG
b3VuZGF0aW9uQXVkaW9DYXB0dXJlID0gdXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlOworfQog
I2VuZGlmCiAKIHZvaWQgU2V0dGluZ3M6OnNldFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCmluZGV4IDlmMzcwNzU1YjBi
ODJiZmU4MTkyODBhNTk4MTQwZGEzOWY1ODIzOGQuLjg2M2JkMTJlYWYxMjFhNWZjZTBiZDhlYmJl
YzJkYjFlMzYwMmIzNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKQEAgLTMxMCw2ICszMTAsOSBA
QCBwdWJsaWM6CiAKICAgICBib29sIG1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlv
bigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE1lZGlhQ2FwdHVy
ZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihib29sKTsKKworICAgIHN0YXRpYyBib29sIHVzZUFW
Rm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lk
IHNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShib29sKTsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKEFQUExFX1BBWSkKQEAgLTQxNSw2ICs0MTgsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBt
X21lZGlhRGV2aWNlSWRlbnRpZmllclN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgc3RhdGljIGJvb2wg
Z01vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQ7CiAgICAgc3RhdGljIGJvb2wgZ01lZGlhQ2FwdHVy
ZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjsKKyAgICBzdGF0aWMgYm9vbCBnVXNlQVZGb3VuZGF0
aW9uQXVkaW9DYXB0dXJlOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQVBQTEVfUEFZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURl
dmljZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9B
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKaW5kZXggMjRmNzNiMDRkYzNhNWI4MTY4YTMzNDdmYTBj
Y2EyYTIyN2NhNDE0Zi4uYzYwY2EzYjg1MmM2NDA3NzMyNzgyYjBkYTI3OGMzYjhmZWM0YjdkNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2Fw
dHVyZURldmljZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oCkBAIC00NSw2ICs0NSw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFWQ2FwdHVyZURldmljZU1hbmFnZXIgZmluYWwgOiBwdWJs
aWMgQ2FwdHVyZURldmljZU1hbmFnZXIgewogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3ll
ZDxBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyPjsKIHB1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgdm9pZCBzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoYm9vbCk7CisKICAgICBW
ZWN0b3I8Q2FwdHVyZURldmljZT4mIGNhcHR1cmVEZXZpY2VzKCkgZmluYWw7CiAKICAgICBzdGF0
aWMgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciYgc2luZ2xldG9uKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdl
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLm1tCmluZGV4IDNmMDM2ODMyZDUwZGE2YTAxZDM1MWViYWM4ZmIyMmJjMGZl
MjY4N2YuLmNiYzM3MTc2NmI5ZTMwMWI2MzY0MDdkNmIyNGE3ODhmZjVkN2U2MzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJB
Vk1lZGlhQ2FwdHVyZVNvdXJjZS5oIgogI2ltcG9ydCAiQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCIK
ICNpbXBvcnQgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNpbXBvcnQgIkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2UuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhQ29uc3RyYWlu
dHMuaCIKICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKQEAgLTkyLDYgKzkzLDE4IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQg
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKGJv
b2wgZW5hYmxlZCkKK3sKKyAgICBzdGF0aWMgYm9vbCBhY3RpdmUgPSBmYWxzZTsKKyAgICBpZiAo
YWN0aXZlICE9IGVuYWJsZWQpIHsKKyAgICAgICAgYWN0aXZlID0gZW5hYmxlZDsKKyAgICAgICAg
aWYgKGFjdGl2ZSkKKyAgICAgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmds
ZXRvbigpLnNldEF1ZGlvRmFjdG9yeShBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2lu
Z2xldG9uKCkuc2V0QXVkaW9GYWN0b3J5KENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmZhY3Rvcnko
KSk7CisgICAgfQorfQorCiBWZWN0b3I8Q2FwdHVyZURldmljZT4mIEFWQ2FwdHVyZURldmljZU1h
bmFnZXI6OmNhcHR1cmVEZXZpY2VzKCkKIHsKICAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU0ODJiNjFjNDBlODNi
ZGE5YTQ2YjQxMDc4ZjNhYmVlYTdlNmM5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcApA
QCAtMCwwICsxLDU1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9DYXB0dXJlU291
cmNlLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQXVkaW9TYW1w
bGVCdWZmZXJMaXN0LmgiCisjaW5jbHVkZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgorI2lu
Y2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb0NvbnZlcnRlci5oPgorI2luY2x1ZGUgPEF1ZGlvVW5p
dC9BdWRpb1VuaXQuaD4KKyNpbmNsdWRlIDxDb3JlQXVkaW8vQXVkaW9IYXJkd2FyZS5oPgorI2lu
Y2x1ZGUgPENvcmVNZWRpYS9DTVN5bmMuaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgor
I2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisK
K2NsYXNzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5IDogcHVibGljIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OkNhcHR1cmVGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBSZWZQdHI8UmVhbHRpbWVN
ZWRpYVNvdXJjZT4gY3JlYXRlTWVkaWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNlV2l0aENvbnN0cmFp
bnRzKGNvbnN0IENhcHR1cmVEZXZpY2UmIGNhcHR1cmVEZXZpY2UsIGNvbnN0IE1lZGlhQ29uc3Ry
YWludHMqIGNvbnN0cmFpbnRzLCBTdHJpbmcmIGludmFsaWRDb25zdHJhaW50KSBmaW5hbCB7Cisg
ICAgICAgIHJldHVybiBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUoY2FwdHVyZURldmlj
ZSwgY29uc3RyYWludHMsIGludmFsaWRDb25zdHJhaW50KTsKKyAgICB9Cit9OworCitjb25zdCBV
SW50MzIgb3V0cHV0QnVzID0gMDsKK2NvbnN0IFVJbnQzMiBpbnB1dEJ1cyA9IDE7CisKK1JlZlB0
cjxDb3JlQXVkaW9DYXB0dXJlU291cmNlPiBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUo
Y29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlSW5mbywgY29uc3QgTWVkaWFDb25zdHJhaW50cyog
Y29uc3RyYWludHMsIFN0cmluZyYgaW52YWxpZENvbnN0cmFpbnQpCit7CisgICAgYXV0byBzb3Vy
Y2UgPSBhZG9wdFJlZihuZXcgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZShkZXZpY2VJbmZvKSk7Cisg
ICAgaWYgKGNvbnN0cmFpbnRzKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc291cmNlLT5hcHBs
eUNvbnN0cmFpbnRzKCpjb25zdHJhaW50cyk7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAg
ICAgICAgIGludmFsaWRDb25zdHJhaW50ID0gcmVzdWx0LnZhbHVlKCkuZmlyc3Q7CisgICAgICAg
ICAgICBzb3VyY2UgPSBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHNv
dXJjZTsKK30KKworCitSZWFsdGltZU1lZGlhU291cmNlOjpDYXB0dXJlRmFjdG9yeSYgQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5PiBmYWN0b3J5OworICAgIHJldHVybiBmYWN0
b3J5LmdldCgpOworfQorCisKK0NvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2UoY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlSW5mbykKKyAgICA6IFJlYWx0aW1l
TWVkaWFTb3VyY2UoZW1wdHlTdHJpbmcoKSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVk
aW8sIGRldmljZUluZm8ubGFiZWwoKSkKKyAgICAsIG1fY2FwdHVyZURldmljZUlEKDApCit7Cisg
ICAgc2V0UGVyc2lzdGVudElEKGRldmljZUluZm8ucGVyc2lzdGVudElkKCkpOworICAgIHNldE11
dGVkKHRydWUpOworCisgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0Vm9sdW1lKDEuMCk7CisgICAg
bV9jdXJyZW50U2V0dGluZ3Muc2V0U2FtcGxlUmF0ZShwcmVmZXJyZWRTYW1wbGVSYXRlKCkpOwor
ICAgIG1fY3VycmVudFNldHRpbmdzLnNldERldmljZUlkKGlkKCkpOworICAgIG1fY3VycmVudFNl
dHRpbmdzLnNldEVjaG9DYW5jZWxsYXRpb24odHJ1ZSk7CisKKyAgICBtYWNoX3RpbWViYXNlX2lu
Zm9fZGF0YV90IHRpbWViYXNlSW5mbzsKKyAgICBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWViYXNl
SW5mbyk7CisgICAgbV9EVFNDb252ZXJzaW9uUmF0aW8gPSAxZS05ICogc3RhdGljX2Nhc3Q8ZG91
YmxlPih0aW1lYmFzZUluZm8ubnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUlu
Zm8uZGVub20pOworfQorCitDb3JlQXVkaW9DYXB0dXJlU291cmNlOjp+Q29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZSgpCit7CisgICAgc3VzcGVuZCgpOworCisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBpZiAobV9pb1VuaXQpCisgICAgICAg
IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlKG1faW9Vbml0KTsKKworICAgIG1faW9Vbml0
TmFtZSA9IGVtcHR5U3RyaW5nKCk7CisKKyAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXIgPSBu
dWxscHRyOworICAgIG1fc3BlYWtlclNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7CisKKyAgICBtX3Nw
ZWFrZXJQcm9jc0NhbGxlZCA9IDA7CisgICAgbV9taWNyb3Bob25lUHJvY3NDYWxsZWQgID0gMDsK
KyAgICBtX2xhdGVzdE1pY1RpbWVTdGFtcCA9IDA7CisKKyAgICBtX2FjdGl2ZVNvdXJjZXMuY2xl
YXIoKTsKKyAgICBtX3BlbmRpbmdTb3VyY2VzLmNsZWFyKCk7CisKKyAgICBtX3NwZWFrZXJTYW1w
bGVCdWZmZXIgPSBudWxscHRyOworCisgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IGZhbHNlOwor
ICAgIG1faW9Vbml0U3RhcnRlZCAgPSBmYWxzZTsKK30KKworZG91YmxlIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OnByZWZlcnJlZFNhbXBsZVJhdGUoKQoreworICAgIC8vIEZJWE1FOiBHZXQgdGhl
IHByZWZlcnJlZCByYXRlIGR5bmFtaWNhbGx5LCBrQVVWb2ljZUlPUHJvcGVydHlfUHJlZmVycmVk
SFdTYW1wbGVSYXRlLyBbW0FWQXVkaW9TZXNzaW9uIHNoYXJlZEluc3RhbmNlXSBwcmVmZXJyZWRT
YW1wbGVSYXRlXQorICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwcmVmZXJyZWRSYXRlID0gMjQwMDAu
OworICAgIHJldHVybiBwcmVmZXJyZWRSYXRlOworfQorCitkb3VibGUgQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6cHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbigpCit7CisgICAgLy8gRklYTUU6IEdl
dCB0aGUgcHJlZmVycmVkIHJhdGUgZHluYW1pY2FsbHkgLSBrQVVWb2ljZUlPUHJvcGVydHlfUHJl
ZmVycmVkSFdCbG9ja1NpemVJblNlY29uZHMgLyBbW0FWQXVkaW9TZXNzaW9uIHNoYXJlZEluc3Rh
bmNlXSBwcmVmZXJyZWRJT0J1ZmZlckR1cmF0aW9uXQorICAgIHN0YXRpYyBjb25zdCBmbG9hdCBw
cmVmZXJyZWREdXJhdGlvbiA9IDAuMDI7CisgICAgcmV0dXJuIHByZWZlcnJlZER1cmF0aW9uOwor
fQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVNaWNyb3Bob25l
UHJvYygpCit7CisgICAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBjYWxsYmFjayA9IHsgbWljcm9w
aG9uZUNhbGxiYWNrLCB0aGlzIH07CisgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0
eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X1NldElucHV0Q2FsbGJhY2ssIGtB
dWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCAmY2FsbGJhY2ssIHNpemVvZihjYWxsYmFj
aykpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6Y29uZmlndXJlTWljcm9waG9uZVByb2MoJXApIHVuYWJsZSB0byBzZXQgdnBpbyB1
bml0IG1pYyBwcm9jLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZl
cnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbiBtaWNyb3Bob25lUHJvY0Zvcm1hdCA9IHsgfTsKKworICAgIFVJbnQzMiBzaXpl
ID0gc2l6ZW9mKG1pY3JvcGhvbmVQcm9jRm9ybWF0KTsKKyAgICBlcnIgPSBBdWRpb1VuaXRHZXRQ
cm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlv
VW5pdFNjb3BlX091dHB1dCwgaW5wdXRCdXMsICZtaWNyb3Bob25lUHJvY0Zvcm1hdCwgJnNpemUp
OworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZTo6Y29uZmlndXJlTWljcm9waG9uZVByb2MoJXApIHVuYWJsZSB0byBnZXQgb3V0cHV0IHN0
cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVy
cik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisjaWYgMAorICAgIG1pY3JvcGhvbmVQ
cm9jRm9ybWF0Lm1TYW1wbGVSYXRlID0gcHJlZmVycmVkU2FtcGxlUmF0ZSgpOworICAgIG1pY3Jv
cGhvbmVQcm9jRm9ybWF0Lm1DaGFubmVsc1BlckZyYW1lID0gMTsKKyAgICBtaWNyb3Bob25lUHJv
Y0Zvcm1hdC5tRm9ybWF0RmxhZ3MgPSBrQXVkaW9Gb3JtYXRGbGFnc05hdGl2ZUZsb2F0UGFja2Vk
IHwga0F1ZGlvRm9ybWF0RmxhZ0lzTm9uSW50ZXJsZWF2ZWQ7CisKKyAgICBlcnIgPSBBdWRpb1Vu
aXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwg
a0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgaW5wdXRCdXMsICZtaWNyb3Bob25lUHJvY0Zvcm1hdCwg
c2l6ZW9mKG1pY3JvcGhvbmVQcm9jRm9ybWF0KSk7CisgICAgaWYgKGVycikgeworICAgICAgICBM
T0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVNaWNyb3Bob25lUHJv
YyglcCkgdW5hYmxlIHRvIHNldCBvdXRwdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMp
IiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAg
ICB9CisjZW5kaWYKKworICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlciA9IEF1ZGlvU2FtcGxl
QnVmZmVyTGlzdDo6Y3JlYXRlKG1pY3JvcGhvbmVQcm9jRm9ybWF0LCBwcmVmZXJyZWRJT0J1ZmZl
ckR1cmF0aW9uKCkgKiBtaWNyb3Bob25lUHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSAqIDIpOworICAg
IG1fbWljcm9waG9uZVByb2NGb3JtYXQgPSBtaWNyb3Bob25lUHJvY0Zvcm1hdDsKKworICAgIHJl
dHVybiBlcnI7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3Vy
ZVNwZWFrZXJQcm9jKCkKK3sKKyAgICAvLyBTZXQgdGhlIGZvcm1hdCBvZiB0aGUgZGF0YSB3ZSBz
dXBwbHkgdG8gdGhlIG91dHB1dCBzdHJlYW0uCisKKyAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0
IGNhbGxiYWNrID0geyBzcGVha2VyQ2FsbGJhY2ssIHRoaXMgfTsKKyAgICBhdXRvIGVyciA9IEF1
ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU2V0UmVuZGVy
Q2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIG91dHB1dEJ1cywgJmNhbGxiYWNrLCBz
aXplb2YoY2FsbGJhY2spKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8g
c2V0IHZwaW8gdW5pdCBzcGVha2VyIHByb2MsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgQXVk
aW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHNwZWFrZXJQcm9jRm9ybWF0ID0geyB9OworCisgICAg
VUludDMyIHNpemUgPSBzaXplb2Yoc3BlYWtlclByb2NGb3JtYXQpOworICAgIGVyciAgPSBBdWRp
b1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1h
dCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJvY0Zvcm1hdCwg
JnNpemUpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZTo6Y29uZmlndXJlU3BlYWtlclByb2MoJXApIHVuYWJsZSB0byBnZXQgaW5wdXQg
c3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikm
ZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyNpZiAwCisgICAgc3BlYWtlclBy
b2NGb3JtYXQubVNhbXBsZVJhdGUgPSBwcmVmZXJyZWRTYW1wbGVSYXRlKCk7CisgICAgc3BlYWtl
clByb2NGb3JtYXQubUNoYW5uZWxzUGVyRnJhbWUgPSAxOworICAgIHNwZWFrZXJQcm9jRm9ybWF0
Lm1Gb3JtYXRGbGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdzTmF0aXZlRmxvYXRQYWNrZWQgfCBrQXVk
aW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxlYXZlZDsKKworICAgIGVyciA9IEF1ZGlvVW5pdFNldFBy
b3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9V
bml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJnNwZWFrZXJQcm9jRm9ybWF0LCBzaXplb2Yoc3Bl
YWtlclByb2NGb3JtYXQpKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8g
c2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJy
LCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorI2VuZGlmCisKKyAg
ICBtX3NwZWFrZXJTYW1wbGVCdWZmZXIgPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNyZWF0ZShz
cGVha2VyUHJvY0Zvcm1hdCwgcHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbigpICogc3BlYWtlclBy
b2NGb3JtYXQubVNhbXBsZVJhdGUgKiAyKTsKKyAgICBtX3NwZWFrZXJQcm9jRm9ybWF0ID0gc3Bl
YWtlclByb2NGb3JtYXQ7CisKKyAgICByZXR1cm4gZXJyOworfQorCit1aW50NjRfdCBDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjphZGRNaWNyb3Bob25lRGF0YUNvbnN1bWVyKE1pY3JvcGhvbmVEYXRh
Q2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9w
ZW5kaW5nU291cmNlUXVldWVMb2NrKTsKKyAgICBtX25leHRNaWNyb3Bob25lRGF0YUNhbGxiYWNr
SUQrKzsKKyAgICBtX21pY3JvcGhvbmVEYXRhQ2FsbGJhY2tzLmFkZChtX25leHRNaWNyb3Bob25l
RGF0YUNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKKworICAgIHJldHVybiBtX25leHRNaWNyb3Bob25l
RGF0YUNhbGxiYWNrSUQ7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3Zl
TWljcm9waG9uZURhdGFDb25zdW1lcih1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcGVuZGluZ1NvdXJjZVF1ZXVlTG9jayk7CisgICAgbV9t
aWNyb3Bob25lRGF0YUNhbGxiYWNrcy5yZW1vdmUoY2FsbGJhY2tJRCk7Cit9ICAgIAorCit2b2lk
IENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmFkZEVjaG9DYW5jZWxsYXRpb25Tb3VyY2UoQXVkaW9T
YW1wbGVEYXRhU291cmNlJiBzb3VyY2UpCit7CisgICAgaWYgKCFzb3VyY2Uuc2V0T3V0cHV0Rm9y
bWF0KG1fc3BlYWtlclByb2NGb3JtYXQpKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6OmFkZEVjaG9DYW5jZWxsYXRpb25Tb3VyY2U6IHNvdXJjZSAlcCBjb25m
aWd1cmVPdXRwdXQgZmFpbGVkIiwgJnNvdXJjZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2sp
OworICAgIG1fcGVuZGluZ1NvdXJjZXMuYXBwZW5kKHsgUXVldWVBY3Rpb246OkFkZCwgJnNvdXJj
ZSB9KTsKK30KKwordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZW1vdmVFY2hvQ2FuY2Vs
bGF0aW9uU291cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYgc291cmNlKQoreworICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcGVuZGluZ1NvdXJjZVF1ZXVlTG9jayk7CisgICAgbV9w
ZW5kaW5nU291cmNlcy5hcHBlbmQoeyBRdWV1ZUFjdGlvbjo6UmVtb3ZlLCAmc291cmNlIH0pOwor
fQorCit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNoZWNrVGltZXN0YW1wcyhjb25zdCBB
dWRpb1RpbWVTdGFtcCAqaW5UaW1lU3RhbXAsIHVpbnQ2NF90IHNhbXBsZVRpbWUsIGRvdWJsZSBo
b3N0VGltZSkKK3sKKyAgICBpZiAoIWluVGltZVN0YW1wLT5tU2FtcGxlVGltZSB8fCBzYW1wbGVU
aW1lID09IG1fbGF0ZXN0TWljVGltZVN0YW1wIHx8ICFob3N0VGltZSkKKyAgICAgICAgTE9HKE1l
ZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y2hlY2tUaW1lc3RhbXBzOiB1bnVzdWFsIHRp
bWVzdGFtcHMsIHNhbXBsZSB0aW1lID0gJWxsZCwgcHJldmlvdXMgc2FtcGxlIHRpbWUgPSAlbGxk
LCBob3N0VGltZSAlZiIsIHNhbXBsZVRpbWUsIG1fbGF0ZXN0TWljVGltZVN0YW1wLCBob3N0VGlt
ZSk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb3ZpZGVTcGVha2Vy
RGF0YShBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogLyppb0FjdGlvbkZsYWdzKi8sIGNvbnN0
IEF1ZGlvVGltZVN0YW1wKiBpblRpbWVTdGFtcCwgVUludDMyIC8qaW5CdXNOdW1iZXIqLywgVUlu
dDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICAvLyBD
YWxsZWQgd2hlbiB0aGUgYXVkaW8gdW5pdCBuZWVkcyBkYXRhIHRvIHBsYXkgdGhyb3VnaCB0aGUg
c3BlYWtlcnMuCisgICAgKyttX3NwZWFrZXJQcm9jc0NhbGxlZDsKKworICAgIGlmIChtX3NwZWFr
ZXJTYW1wbGVCdWZmZXItPnNhbXBsZUNhcGFjaXR5KCkgPCBpbk51bWJlckZyYW1lcykgeworICAg
ICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcm92aWRlU3BlYWtlckRh
dGE6IHNwZWFrZXIgc2FtcGxlIGJ1ZmZlciBzaXplICglZCkgdG9vIHNtYWxsIGZvciBhbW91bnQg
b2Ygc2FtcGxlIGRhdGEgcmVxdWVzdGVkICglZCkhIiwgbV9zcGVha2VyU2FtcGxlQnVmZmVyLT5z
YW1wbGVDYXBhY2l0eSgpLCAoaW50KWluTnVtYmVyRnJhbWVzKTsKKyAgICAgICAgcmV0dXJuIGtB
dWRpb19QYXJhbUVycm9yOworICAgIH0KKworICAgIC8vIEFkZC9yZW1vdmUgc291cmNlcyBmcm9t
IHRoZSBxdWV1ZSwgYnV0IG9ubHkgaWYgd2UgZ2V0IHRoZSBsb2NrIGltbWVkaWF0ZWx5LiBPdGhl
cndpc2UgdHJ5CisgICAgLy8gYWdhaW4gb24gdGhlIG5leHQgY2FsbGJhY2suCisgICAgeworICAg
ICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9wZW5kaW5nU291cmNlUXVldWVMb2Nr
LCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICAgICAgaWYgKGxvY2sub3duc19sb2NrKCkpIHsKKyAg
ICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcGVuZGluZ1NvdXJjZXMpIHsKKyAgICAgICAg
ICAgICAgICBpZiAocGFpci5maXJzdCA9PSBRdWV1ZUFjdGlvbjo6QWRkKQorICAgICAgICAgICAg
ICAgICAgICBtX2FjdGl2ZVNvdXJjZXMuYXBwZW5kKHBhaXIuc2Vjb25kKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlU291cmNlcy5yZW1vdmVGaXJz
dChwYWlyLnNlY29uZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BlbmRpbmdTb3Vy
Y2VzLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9hY3RpdmVTb3VyY2Vz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBkb3VibGUgYWRqdXN0ZWRIb3N0
VGltZSA9IG1fRFRTQ29udmVyc2lvblJhdGlvICogaW5UaW1lU3RhbXAtPm1Ib3N0VGltZTsKKyAg
ICB1aW50NjRfdCBzYW1wbGVUaW1lID0gaW5UaW1lU3RhbXAtPm1TYW1wbGVUaW1lOworICAgIGNo
ZWNrVGltZXN0YW1wcyhpblRpbWVTdGFtcCwgc2FtcGxlVGltZSwgYWRqdXN0ZWRIb3N0VGltZSk7
CisKKyAgICBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPnJlc2V0KCk7CisgICAgbV9zcGVha2VyU2Ft
cGxlQnVmZmVyLT5zZXRUaW1lcyhhZGp1c3RlZEhvc3RUaW1lLCBzYW1wbGVUaW1lKTsKKworICAg
IEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCA9IG1fc3BlYWtlclNhbXBsZUJ1ZmZlci0+YnVm
ZmVyTGlzdCgpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBidWZmZXJMaXN0Lm1OdW1i
ZXJCdWZmZXJzOyArK2kpCisgICAgICAgIGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0gPSBpb0RhdGEt
Pm1CdWZmZXJzW2ldOworCisgICAgYm9vbCBmaXJzdFNvdXJjZSA9IHRydWU7CisgICAgZm9yIChh
dXRvJiBzb3VyY2UgOiBtX2FjdGl2ZVNvdXJjZXMpIHsKKyAgICAgICAgc291cmNlLT5wdWxsU2Ft
cGxlcygqbV9zcGVha2VyU2FtcGxlQnVmZmVyLmdldCgpLCBpbk51bWJlckZyYW1lcywgYWRqdXN0
ZWRIb3N0VGltZSwgc2FtcGxlVGltZSwgZmlyc3RTb3VyY2UgPyBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U6OkNvcHkgOiBBdWRpb1NhbXBsZURhdGFTb3VyY2U6Ok1peCk7CisgICAgICAgIGZpcnN0U291
cmNlID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1cyBD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjpzcGVha2VyQ2FsbGJhY2sodm9pZCAqaW5SZWZDb24sIEF1
ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJh
bWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICBDb3JlQXVkaW9DYXB0dXJlU291
cmNlKiBkYXRhU291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSo+KGlu
UmVmQ29uKTsKKyAgICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvdmlkZVNwZWFrZXJEYXRhKGlvQWN0
aW9uRmxhZ3MsIGluVGltZVN0YW1wLCBpbkJ1c051bWJlciwgaW5OdW1iZXJGcmFtZXMsIGlvRGF0
YSk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NNaWNyb3Bo
b25lU2FtcGxlcyhBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25GbGFncywgY29u
c3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQz
MiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiAvKmlvRGF0YSovKQoreworICAgICsr
bV9taWNyb3Bob25lUHJvY3NDYWxsZWQ7CisKKyAgICAvLyBQdWxsIHRocm91Z2ggdGhlIHZwaW8g
dW5pdCB0byBvdXIgbWljIGJ1ZmZlci4KKyAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPnJl
c2V0KCk7CisgICAgQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0ID0gbV9taWNyb3Bob25lU2Ft
cGxlQnVmZmVyLT5idWZmZXJMaXN0KCk7CisgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRSZW5kZXIo
bV9pb1VuaXQsIGlvQWN0aW9uRmxhZ3MsIGluVGltZVN0YW1wLCBpbkJ1c051bWJlciwgaW5OdW1i
ZXJGcmFtZXMsICZidWZmZXJMaXN0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRp
YSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyglcCkg
QXVkaW9Vbml0UmVuZGVyIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgZG91
YmxlIGFkanVzdGVkSG9zdFRpbWUgPSBtX0RUU0NvbnZlcnNpb25SYXRpbyAqIGluVGltZVN0YW1w
LT5tSG9zdFRpbWU7CisgICAgdWludDY0X3Qgc2FtcGxlVGltZSA9IGluVGltZVN0YW1wLT5tU2Ft
cGxlVGltZTsKKyAgICBjaGVja1RpbWVzdGFtcHMoaW5UaW1lU3RhbXAsIHNhbXBsZVRpbWUsIGFk
anVzdGVkSG9zdFRpbWUpOworICAgIG1fbGF0ZXN0TWljVGltZVN0YW1wID0gc2FtcGxlVGltZTsK
KworICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+c2V0VGltZXMoYWRqdXN0ZWRIb3N0VGlt
ZSwgc2FtcGxlVGltZSk7CisKKyAgICBhdWRpb1NhbXBsZXNBdmFpbGFibGUoTWVkaWFUaW1lKHNh
bXBsZVRpbWUsIG1fbWljcm9waG9uZVByb2NGb3JtYXQuc2FtcGxlUmF0ZSgpKSwgbV9taWNyb3Bo
b25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCksIG1fbWljcm9waG9uZVByb2NGb3JtYXQsIGlu
TnVtYmVyRnJhbWVzKTsKKworICAgIGlmIChtX21pY3JvcGhvbmVEYXRhQ2FsbGJhY2tzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9t
aWNyb3Bob25lRGF0YUNhbGxiYWNrcy52YWx1ZXMoKSkKKyAgICAgICAgY2FsbGJhY2soTWVkaWFU
aW1lKHNhbXBsZVRpbWUsIG1fbWljcm9waG9uZVByb2NGb3JtYXQuc2FtcGxlUmF0ZSgpKSwgbV9t
aWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCksIG1fbWljcm9waG9uZVByb2NGb3Jt
YXQsIGluTnVtYmVyRnJhbWVzKTsKKworICAgIHJldHVybiBub0VycjsKK30KKworT1NTdGF0dXMg
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6bWljcm9waG9uZUNhbGxiYWNrKHZvaWQgKmluUmVmQ29u
LCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9U
aW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBpbk51bWJl
ckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7CisgICAgQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZSogZGF0YVNvdXJjZSA9IHN0YXRpY19jYXN0PENvcmVBdWRpb0NhcHR1cmVTb3VyY2Uq
PihpblJlZkNvbik7CisgICAgcmV0dXJuIGRhdGFTb3VyY2UtPnByb2Nlc3NNaWNyb3Bob25lU2Ft
cGxlcyhpb0FjdGlvbkZsYWdzLCBpblRpbWVTdGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJh
bWVzLCBpb0RhdGEpOworfQorCisjaWYgMAorT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZTo6ZGVmYXVsdE91dHB1dERldmljZSh1aW50MzJfdCogZGV2aWNlSUQpCit7CisgICAgQXVkaW9P
YmplY3RQcm9wZXJ0eUFkZHJlc3MgcHJvcGVydHlJbmZvID0geyBrQXVkaW9IYXJkd2FyZVByb3Bl
cnR5RGVmYXVsdE91dHB1dERldmljZSwga0F1ZGlvT2JqZWN0UHJvcGVydHlTY29wZUdsb2JhbCwg
a0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyIH07CisKKyAgICAqZGV2aWNlSUQgPSAw
OworICAgIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2YoQXVkaW9EZXZpY2VJRCk7CisgICAg
YXV0byBlcnIgPSBBdWRpb09iamVjdEdldFByb3BlcnR5RGF0YShrQXVkaW9PYmplY3RTeXN0ZW1P
YmplY3QsICZwcm9wZXJ0eUluZm8sIG91dHB1dEJ1cywgbnVsbHB0ciwgJnByb3BlcnR5U2l6ZSwg
ZGV2aWNlSUQpOworICAgIGlmIChlcnIpCisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmRlZmF1bHRPdXRwdXREZXZpY2UoJXApIHVuYWJsZSB0byBnZXQgZGVmYXVs
dCBvdXRwdXQgZGV2aWNlIElELCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNo
YXIqKSZlcnIpOworCisgICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCitPU1N0YXR1cyBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpkZWZhdWx0SW5wdXREZXZpY2UodWludDMyX3QqIGRldmljZUlE
KQoreworICAgIEFTU0VSVChtX2lvVW5pdCk7CisKKyAgICBVSW50MzIgcHJvcGVydHlTaXplID0g
c2l6ZW9mKCpkZXZpY2VJRCk7CisgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eSht
X2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1Vu
aXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCBkZXZpY2VJRCwgJnByb3BlcnR5U2l6ZSk7CisgICAg
aWYgKGVycikKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZGVm
YXVsdElucHV0RGV2aWNlKCVwKSB1bmFibGUgdG8gZ2V0IGRlZmF1bHQgaW5wdXQgZGV2aWNlIElE
LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworCisgICAg
cmV0dXJuIGVycjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBB
dWRpb1VuaXRzKCkKK3sKKyAgICBBU1NFUlQobV9pbnRlcm5hbFN0YXRlTG9jay5pc0hlbGQoKSk7
CisKKyAgICBpZiAobV9pb1VuaXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQXVkaW9Db21w
b25lbnREZXNjcmlwdGlvbiBpb1VuaXREZXNjcmlwdGlvbiA9IHsga0F1ZGlvVW5pdFR5cGVfT3V0
cHV0LCBrQXVkaW9Vbml0U3ViVHlwZV9Wb2ljZVByb2Nlc3NpbmdJTywga0F1ZGlvVW5pdE1hbnVm
YWN0dXJlcl9BcHBsZSwgMCwgMCB9OworICAgIEF1ZGlvQ29tcG9uZW50IGlvQ29tcG9uZW50ID0g
QXVkaW9Db21wb25lbnRGaW5kTmV4dChudWxscHRyLCAmaW9Vbml0RGVzY3JpcHRpb24pOworICAg
IEFTU0VSVChpb0NvbXBvbmVudCk7CisgICAgaWYgKCFpb0NvbXBvbmVudCkgeworICAgICAgICBM
T0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMoJXApIHVu
YWJsZSB0byBmaW5kIHZwaW8gdW5pdCBjb21wb25lbnQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIH0KKworICAgIENGU3RyaW5nUmVmIG5hbWUgPSBudWxscHRyOworICAgIEF1ZGlv
Q29tcG9uZW50Q29weU5hbWUoaW9Db21wb25lbnQsICZuYW1lKTsKKyAgICBpZiAobmFtZSkgewor
ICAgICAgICBtX2lvVW5pdE5hbWUgPSBuYW1lOworICAgICAgICBDRlJlbGVhc2UobmFtZSk7Cisg
ICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0
cyglcCkgY3JlYXRlZCBcIiVzXCIgY29tcG9uZW50IiwgdGhpcywgbV9pb1VuaXROYW1lLnV0Zjgo
KS5kYXRhKCkpOworICAgIH0KKworICAgIGF1dG8gZXJyID0gQXVkaW9Db21wb25lbnRJbnN0YW5j
ZU5ldyhpb0NvbXBvbmVudCwgJm1faW9Vbml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExP
RyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5h
YmxlIHRvIG9wZW4gdnBpbyB1bml0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworI2lmIFBMQVRGT1JN
KElPUykKKyAgICB1aW50MzJfdCBwYXJhbSA9IDE7CisgICAgZXJyID0gQXVkaW9Vbml0U2V0UHJv
cGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywga0F1ZGlv
VW5pdFNjb3BlX0lucHV0LCBpbnB1dEJ1cywgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKKyAgICBp
ZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNl
dHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIGVuYWJsZSB2cGlvIHVuaXQgaW5wdXQsIGVycm9y
ICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVy
biBlcnI7CisgICAgfQorCisgICAgcGFyYW0gPSAxOworICAgIGVyciA9IEF1ZGlvVW5pdFNldFBy
b3BlcnR5KG1faW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfRW5hYmxlSU8sIGtBdWRp
b1VuaXRTY29wZV9PdXRwdXQsIG91dHB1dEJ1cywgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKKyAg
ICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIGVuYWJsZSB2cGlvIHVuaXQgb3V0cHV0LCBl
cnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICBy
ZXR1cm4gZXJyOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCFtX2NhcHR1cmVEZXZpY2VJRCkg
eworICAgICAgICBlcnIgPSBkZWZhdWx0SW5wdXREZXZpY2UoJm1fY2FwdHVyZURldmljZUlEKTsK
KyAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAg
VUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZihtX2NhcHR1cmVEZXZpY2VJRCk7CisgICAgZXJy
ID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0
eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJm1fY2Fw
dHVyZURldmljZUlELCBwcm9wZXJ0eVNpemUpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9H
KE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCVwKSB1bmFi
bGUgdG8gc2V0IHZwaW8gdW5pdCBjYXB0dXJlIGRldmljZSBJRCwgZXJyb3IgJWQgKCUuNHMpIiwg
dGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9
CisKKyAgICBlcnIgPSBjb25maWd1cmVNaWNyb3Bob25lUHJvYygpOworICAgIGlmIChlcnIpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICBlcnIgPSBBdWRpb1VuaXRJbml0aWFsaXplKG1faW9V
bml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgQXVkaW9Vbml0SW5pdGlhbGl6ZSgpIGZhaWxl
ZCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAg
ICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IHRydWU7CisK
KyAgICBlcnIgPSBjb25maWd1cmVTcGVha2VyUHJvYygpOworICAgIGlmIChlcnIpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gZXJyOworfQorCit2b2lkIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAgc3RkOjpsb2NrX2d1YXJkPExv
Y2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisgICAgaWYgKG1faW9Vbml0U3RhcnRlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgT1NTdGF0dXMgZXJyOworICAgIGlmICghbV9pb1VuaXQp
IHsKKyAgICAgICAgZXJyID0gc2V0dXBBdWRpb1VuaXRzKCk7CisgICAgICAgIGlmIChlcnIpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZXJyID0gQXVkaW9PdXRwdXRVbml0U3Rh
cnQobV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6c3RhcnQoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCB3
aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2lvVW5pdFN0YXJ0ZWQgPSB0cnVlOworICAgIHNl
dE11dGVkKGZhbHNlKTsKK30KKwordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzdG9wUHJv
ZHVjaW5nRGF0YSgpCit7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbnRlcm5h
bFN0YXRlTG9jayk7CisKKyAgICBBU1NFUlQobV9pb1VuaXQpOworCisgICAgYXV0byBlcnIgPSBB
dWRpb091dHB1dFVuaXRTdG9wKG1faW9Vbml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExP
RyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0b3AoJXApIEF1ZGlvT3V0cHV0VW5p
dFN0b3AgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFy
KikmZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2lvVW5pdFN0YXJ0ZWQgPSBm
YWxzZTsKKyAgICBzZXRNdXRlZCh0cnVlKTsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6c3VzcGVuZCgpCit7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9p
bnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBBU1NFUlQobV9pb1VuaXQpOworCisgICAgaWYgKG1f
aW9Vbml0U3RhcnRlZCkgeworICAgICAgICBhdXRvIGVyciA9IEF1ZGlvT3V0cHV0VW5pdFN0b3Ao
bV9pb1VuaXQpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBMT0coTWVkaWEsICJD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZXN1bWUoJXApIEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFp
bGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsK
KyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICAgICAgbV9pb1VuaXRTdGFy
dGVkID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1faW9Vbml0SW5pdGlhbGl6ZWQpIHsKKyAg
ICAgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRVbmluaXRpYWxpemUobV9pb1VuaXQpOworICAgICAg
ICBpZiAoZXJyKSB7CisgICAgICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291
cmNlOjpyZXN1bWUoJXApIEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZSBmYWlsZWQgd2l0aCBlcnJvciAl
ZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICAgICAgcmV0
dXJuIGVycjsKKyAgICAgICAgfQorICAgICAgICBtX2lvVW5pdEluaXRpYWxpemVkID0gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OnJlc3VtZSgpCit7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbnRl
cm5hbFN0YXRlTG9jayk7CisKKyAgICBBU1NFUlQobV9pb1VuaXQpOworICAgIEFTU0VSVCghbV9p
b1VuaXRTdGFydGVkKTsKKworICAgIGF1dG8gZXJyID0gQXVkaW9PdXRwdXRVbml0U3RhcnQobV9p
b1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZTo6cmVzdW1lKCVwKSBBdWRpb091dHB1dFVuaXRTdGFydCBmYWlsZWQgd2l0aCBl
cnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICBy
ZXR1cm4gZXJyOworICAgIH0KKyAgICBtX2lvVW5pdFN0YXJ0ZWQgPSBmYWxzZTsKKworICAgIHJl
dHVybiBlcnI7Cit9CisKK1JlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIGlmICht
X2NhcGFiaWxpdGllcykKKyAgICAgICAgcmV0dXJuIG1fY2FwYWJpbGl0aWVzOworCisgICAgbV9z
dXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRydWUpOworICAgIG1fc3Vw
cG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNFY2hvQ2FuY2VsbGF0aW9uKHRydWUpOworICAg
IG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNWb2x1bWUodHJ1ZSk7CisKKyAgICAv
LyBGSVhNRTogZmluaXNoIHRoaXMuCisgICAgbV9jYXBhYmlsaXRpZXMgPSBSZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzOjpjcmVhdGUobV9zdXBwb3J0ZWRDb25zdHJhaW50cyk7CisgICAg
bV9jYXBhYmlsaXRpZXMtPnNldERldmljZUlkKGlkKCkpOworICAgIG1fY2FwYWJpbGl0aWVzLT5z
ZXRFY2hvQ2FuY2VsbGF0aW9uKFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OkVjaG9D
YW5jZWxsYXRpb246OlJlYWRXcml0ZSk7CisgICAgbV9jYXBhYmlsaXRpZXMtPnNldFZvbHVtZShD
YXBhYmlsaXR5VmFsdWVPclJhbmdlKDAuMCwgMS4wKSk7CisKKyAgICByZXR1cm4gbV9jYXBhYmls
aXRpZXM7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtX2N1cnJlbnRT
ZXR0aW5nczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ0ZjNiN2Y0ZTFhNGZmODIzOTVjMzg1M2IzZGIwNzE2MGU3ZTYyMmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQorCisjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAi
Q2FwdHVyZURldmljZS5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKyNpbmNs
dWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Ub29sYm94Lmg+CisjaW5jbHVkZSA8Q29yZUF1ZGlvL0Nv
cmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBP
cGFxdWVDTUNsb2NrKiBDTUNsb2NrUmVmOworCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIE1lZGlh
VGltZTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1NhbXBsZUJ1ZmZl
ckxpc3Q7CitjbGFzcyBBdWRpb1NhbXBsZURhdGFTb3VyY2U7CitjbGFzcyBDYXB0dXJlRGV2aWNl
SW5mbzsKKworY2xhc3MgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSA6IHB1YmxpYyBSZWFsdGltZU1l
ZGlhU291cmNlIHsKK3B1YmxpYzoKKworICAgIHN0YXRpYyBSZWZQdHI8Q29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZT4gY3JlYXRlKGNvbnN0IENhcHR1cmVEZXZpY2UmLCBjb25zdCBNZWRpYUNvbnN0cmFp
bnRzKiwgU3RyaW5nJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgQ2FwdHVyZUZhY3Rv
cnkmIGZhY3RvcnkoKTsKKworICAgIHZvaWQgYWRkRWNob0NhbmNlbGxhdGlvblNvdXJjZShBdWRp
b1NhbXBsZURhdGFTb3VyY2UmKTsKKyAgICB2b2lkIHJlbW92ZUVjaG9DYW5jZWxsYXRpb25Tb3Vy
Y2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJik7CisKKyAgICB1c2luZyBNaWNyb3Bob25lRGF0YUNh
bGxiYWNrID0gc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwg
Y29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGF1ZGlvRGF0YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIHNpemVfdCBzYW1wbGVDb3VudCk+OworCisgICAgdWludDY0
X3QgYWRkTWljcm9waG9uZURhdGFDb25zdW1lcihNaWNyb3Bob25lRGF0YUNhbGxiYWNrKTsKKyAg
ICB2b2lkIHJlbW92ZU1pY3JvcGhvbmVEYXRhQ29uc3VtZXIodWludDY0X3QpOworCisgICAgQ01D
bG9ja1JlZiB0aW1lYmFzZUNsb2NrKCk7CisKK3ByaXZhdGU6CisgICAgQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZShjb25zdCBDYXB0dXJlRGV2aWNlJik7CisgICAgdmlydHVhbCB+Q29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZSgpOworCisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAg
ICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgYm9vbCBpc1Byb2R1Y2luZ0Rh
dGEoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lvVW5pdFN0YXJ0ZWQ7IH0KKworICAgIE9TU3Rh
dHVzIHN1c3BlbmQoKTsKKyAgICBPU1N0YXR1cyByZXN1bWUoKTsKKworICAgIFJlZlB0cjxSZWFs
dGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBjYXBhYmlsaXRpZXMoKSBjb25zdCBmaW5hbDsK
KyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3Qg
ZmluYWw7CisKKyAgICBPU1N0YXR1cyBzZXR1cEF1ZGlvVW5pdHMoKTsKKyAgICBPU1N0YXR1cyBj
b25maWd1cmVTcGVha2VyUHJvYygpOworICAgIE9TU3RhdHVzIGNvbmZpZ3VyZU1pY3JvcGhvbmVQ
cm9jKCk7CisgICAgT1NTdGF0dXMgZGVmYXVsdE91dHB1dERldmljZSh1aW50MzJfdCopOworICAg
IE9TU3RhdHVzIGRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCopOworCisgICAgdm9pZCBjaGVj
a1RpbWVzdGFtcHMoY29uc3QgQXVkaW9UaW1lU3RhbXAqLCB1aW50NjRfdCwgZG91YmxlKTsKKwor
ICAgIHN0YXRpYyBPU1N0YXR1cyBtaWNyb3Bob25lQ2FsbGJhY2sodm9pZCosIEF1ZGlvVW5pdFJl
bmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQzMiwg
QXVkaW9CdWZmZXJMaXN0Kik7CisgICAgT1NTdGF0dXMgcHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVz
KEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50
MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7CisKKyAgICBzdGF0aWMgT1NTdGF0dXMgc3Bl
YWtlckNhbGxiYWNrKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1
ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOworICAgIE9T
U3RhdHVzIHByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNv
bnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOwor
CisgICAgc3RhdGljIGRvdWJsZSBwcmVmZXJyZWRTYW1wbGVSYXRlKCk7CisgICAgc3RhdGljIGRv
dWJsZSBwcmVmZXJyZWRJT0J1ZmZlckR1cmF0aW9uKCk7CisKKyAgICBBdWRpb1VuaXQgbV9pb1Vu
aXQgeyBudWxscHRyIH07CisgICAgU3RyaW5nIG1faW9Vbml0TmFtZTsKKworICAgIC8vIE9ubHkg
cmVhZC9tb2RpZmllZCBmcm9tIHRoZSBJTyB0aHJlYWQuCisgICAgVmVjdG9yPFJlZlB0cjxBdWRp
b1NhbXBsZURhdGFTb3VyY2U+PiBtX2FjdGl2ZVNvdXJjZXM7CisKKyAgICBlbnVtIFF1ZXVlQWN0
aW9uIHsgQWRkLCBSZW1vdmUgfTsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFF1ZXVlQWN0aW9uLCBS
ZWZQdHI8QXVkaW9TYW1wbGVEYXRhU291cmNlPj4+IG1fcGVuZGluZ1NvdXJjZXM7CisKKyAgICB1
aW50MzJfdCBtX2NhcHR1cmVEZXZpY2VJRCB7IDAgfTsKKworICAgIENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiBtX21pY3JvcGhvbmVQcm9jRm9ybWF0OworICAgIFJlZlB0cjxBdWRpb1NhbXBsZUJ1
ZmZlckxpc3Q+IG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlcjsKKyAgICB1aW50NjRfdCBtX21pY3Jv
cGhvbmVQcm9jc0NhbGxlZCB7IDAgfTsKKyAgICB1aW50NjRfdCBtX2xhdGVzdE1pY1RpbWVTdGFt
cCB7IDAgfTsKKworICAgIEhhc2hNYXA8dWludDY0X3QsIE1pY3JvcGhvbmVEYXRhQ2FsbGJhY2s+
IG1fbWljcm9waG9uZURhdGFDYWxsYmFja3M7CisgICAgdWludDY0X3QgbV9uZXh0TWljcm9waG9u
ZURhdGFDYWxsYmFja0lEIHsgMCB9OworCisgICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIG1f
c3BlYWtlclByb2NGb3JtYXQ7CisgICAgUmVmUHRyPEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gbV9z
cGVha2VyU2FtcGxlQnVmZmVyOworICAgIHVpbnQ2NF90IG1fc3BlYWtlclByb2NzQ2FsbGVkIHsg
MCB9OworCisgICAgZG91YmxlIG1fRFRTQ29udmVyc2lvblJhdGlvIHsgMCB9OworCisgICAgYm9v
bCBtX2lvVW5pdEluaXRpYWxpemVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faW9Vbml0U3RhcnRl
ZCB7IGZhbHNlIH07CisKKyAgICBMb2NrIG1fcGVuZGluZ1NvdXJjZVF1ZXVlTG9jazsKKyAgICBM
b2NrIG1faW50ZXJuYWxTdGF0ZUxvY2s7CisKKyAgICBtdXRhYmxlIFJlZlB0cjxSZWFsdGltZU1l
ZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKKyAgICBtdXRhYmxlIFJlYWx0
aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyBtX3N1cHBvcnRlZENvbnN0cmFpbnRz
OworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsKK307
CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NU
UkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcAppbmRl
eCBlZjhhZGMxMjc1NWUxZDIxOGQ1NDUyZWM1ZDA5MjZlZDlmZjM5MzRjLi4xNTAxOGM5OTk0ZWUw
NDg4MzQxNGZkNTY5ODVkOGQxMmQ4NDQ5MjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJNYWMuY3BwCkBAIC0zMyw5ICszMyw5IEBACiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmgiCiAKLSNp
bmNsdWRlICJBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgogI2luY2x1ZGUgIkFWQ2FwdHVyZURldmlj
ZU1hbmFnZXIuaCIKICNpbmNsdWRlICJBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUg
IkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAg
LTYzLDcgKzYzLDcgQEAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYzo6UmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlck1hYygpCiAgICAgbV9zdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0
c0RldmljZUlkKHRydWUpOwogICAgIG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNH
cm91cElkKHRydWUpOwogCi0gICAgbV9hdWRpb0ZhY3RvcnkgPSAmQVZBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmZhY3RvcnkoKTsKKyAgICBtX2F1ZGlvRmFjdG9yeSA9ICZDb3JlQXVkaW9DYXB0dXJlU291
cmNlOjpmYWN0b3J5KCk7CiAgICAgbV92aWRlb0ZhY3RvcnkgPSAmQVZWaWRlb0NhcHR1cmVTb3Vy
Y2U6OmZhY3RvcnkoKTsKIH0KIApAQCAtMTc0LDcgKzE3NCw3IEBAIFZlY3RvcjxTdHJpbmc+IFJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6OmJlc3RTb3VyY2VzRm9yVHlwZUFuZENvbnN0cmFp
bnRzKFJlCiAKIFJlYWx0aW1lTWVkaWFTb3VyY2U6OkNhcHR1cmVGYWN0b3J5KiBSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyTWFjOjpkZWZhdWx0QXVkaW9GYWN0b3J5KCkKIHsKLSAgICByZXR1cm4g
JkFWQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCk7CisgICAgcmV0dXJuICZDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpmYWN0b3J5KCk7CiB9CiAKIFJlYWx0aW1lTWVkaWFTb3VyY2U6OkNhcHR1
cmVGYWN0b3J5KiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjpkZWZhdWx0VmlkZW9GYWN0
b3J5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5j
ZUtleXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VL
ZXlzUHJpdmF0ZS5oCmluZGV4IGI2YWQ3NWU3ODQ1ZjE0MDEwMWZlNWZjNTc2NGY2YzM3OWU1NjYz
MTQuLjRkMWIxYzdhNzNlNTMwMWE0M2QxZTQ3N2JiZTQ4MmZkMTFhODMzMTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaApA
QCAtMjI0LDYgKzIyNCw3IEBACiAjZGVmaW5lIFdlYktpdEVuYWJsZUluaGVyaXRVUklRdWVyeUNv
bXBvbmVudFByZWZlcmVuY2VLZXkgQCJXZWJLaXRFbmFibGVJbmhlcml0VVJJUXVlcnlDb21wb25l
bnQiCiAjZGVmaW5lIFdlYktpdE1lZGlhRGF0YUxvYWRzQXV0b21hdGljYWxseVByZWZlcmVuY2VL
ZXkgQCJXZWJLaXRNZWRpYURhdGFMb2Fkc0F1dG9tYXRpY2FsbHkiCiAjZGVmaW5lIFdlYktpdE1v
Y2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0TW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZCIKKyNkZWZpbmUgV2ViS2l0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJl
UHJlZmVyZW5jZUtleSBAIldlYktpdFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZUVuYWJsZWQi
CiAjZGVmaW5lIFdlYktpdEVudW1lcmF0aW5nQWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVkUHJl
ZmVyZW5jZUtleSBAIldlYktpdEVudW1lcmF0aW5nQWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVk
IgogI2RlZmluZSBXZWJLaXRJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkUHJlZmVyZW5jZUtl
eSBAIldlYktpdElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQiCiAjZGVmaW5lIFdlYktpdE1l
ZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvblByZWZlcmVuY2VLZXkgQCJXZWJLaXRN
ZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24iCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tIGIvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQppbmRleCBkNTY4YTY5NjZiZjJmZWU4YzEzNDczMDMz
Mzg3NDM5MDc0OTc4NTFmLi5jMWI2MTJhNTc4NDBhZWU5M2EyYzliODYxYzY3MTc3ZjI2MDUzNDUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KQEAgLTYx
OSw2ICs2MTksNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgV2ViS2l0TW9ja0NhcHR1cmVEZXZpY2VzRW5h
YmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNd
LCBXZWJLaXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb25QcmVmZXJlbmNlS2V5
LAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCBXZWJLaXRVc2VBVkZvdW5k
YXRpb25BdWRpb0NhcHR1cmVQcmVmZXJlbmNlS2V5LAogI2VuZGlmCiAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpZRVNdLCBXZWJLaXRTaGFkb3dET01FbmFibGVkUHJlZmVyZW5jZUtl
eSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIFdlYktpdEN1c3RvbUVs
ZW1lbnRzRW5hYmxlZFByZWZlcmVuY2VLZXksCkBAIC0yODY2LDYgKzI4NjcsMTYgQEAgc3RhdGlj
IE5TU3RyaW5nICpjbGFzc0lCQ3JlYXRvcklEID0gbmlsOwogICAgIFtzZWxmIF9zZXRCb29sVmFs
dWU6ZmxhZyBmb3JLZXk6V2ViS2l0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZFByZWZlcmVuY2VL
ZXldOwogfQogCistIChCT09MKXVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZQoreworICAgIHJl
dHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2Fw
dHVyZVByZWZlcmVuY2VLZXldOworfQorCistICh2b2lkKXNldFVzZUFWRm91bmRhdGlvbkF1ZGlv
Q2FwdHVyZTooQk9PTClmbGFnCit7CisgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktl
eTpXZWJLaXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVQcmVmZXJlbmNlS2V5XTsKK30KKwog
LSAoQk9PTCllbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZAogewogICAgIHJl
dHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdEVudW1lcmF0aW5nQWxsTmV0d29ya0lu
dGVyZmFjZXNFbmFibGVkUHJlZmVyZW5jZUtleV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAppbmRleCBlZTk1ZmY4NzkyNzIzMTk0ZmU4
MjBjNjNhOWU0ZDdmMTYwOTY5OGNkLi5mODExM2MxYzk5M2Y0ODJjMzRiZWE0YjJiNjhkMDEwZjFl
MjcwNDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVu
Y2VzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5j
ZXNQcml2YXRlLmgKQEAgLTUxMSw2ICs1MTEsOSBAQCBleHRlcm4gTlNTdHJpbmcgKldlYlByZWZl
cmVuY2VzQ2FjaGVNb2RlbENoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlvbjsKIC0gKHZvaWQpc2V0
TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOihCT09MKWZsYWc7CiAtIChCT09M
KW1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjsKIAorLSAodm9pZClzZXRVc2VB
VkZvdW5kYXRpb25BdWRpb0NhcHR1cmU6KEJPT0wpZmxhZzsKKy0gKEJPT0wpdXNlQVZGb3VuZGF0
aW9uQXVkaW9DYXB0dXJlOworCiAtICh2b2lkKXNldFNoYWRvd0RPTUVuYWJsZWQ6KEJPT0wpZmxh
ZzsKIC0gKEJPT0wpc2hhZG93RE9NRW5hYmxlZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCmluZGV4IGNhYTcyMjM5YzVjODg4YWUxNGNhMWQwNDk3ODEyYjY5OThjNzliZWUuLjVj
YmIwNjM2M2ExY2Y3ZjRiN2ZiMDg3YTRiMDU1MWNjOGYwMjM5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0KQEAgLTI5NjQsNiArMjk2NCw3IEBAIHN0YXRpYyBib29sIG5lZWRz
U2VsZlJldGFpbldoaWxlTG9hZGluZ1F1aXJrKCkKICAgICBzZXR0aW5ncy5zZXRNb2NrQ2FwdHVy
ZURldmljZXNFbmFibGVkKFtwcmVmZXJlbmNlcyBtb2NrQ2FwdHVyZURldmljZXNFbmFibGVkXSk7
CiAgICAgc2V0dGluZ3Muc2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKFtw
cmVmZXJlbmNlcyBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb25dKTsKICAgICBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldE1lZGlhU3RyZWFtRW5h
YmxlZChbcHJlZmVyZW5jZXMgbWVkaWFTdHJlYW1FbmFibGVkXSk7CisgICAgc2V0dGluZ3Muc2V0
VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKFtwcmVmZXJlbmNlcyB1c2VBVkZvdW5kYXRpb25B
dWRpb0NhcHR1cmVdKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9SVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAppbmRleCA2YzE5
ZDU0NDVkZGRiZTY2NWNjZDcyZmM4OGVkYWM3M2Q1ZGM1OGFmLi42ZWYxN2RhNDE0OWExYmQ4YzYw
YzQwY2M5NmU1YTZiMTIyZmE5MGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgKQEAgLTIzNyw2ICsyMzcsNyBAQAogICAgIG1hY3Jv
KEhUVFBFcXVpdkVuYWJsZWQsIGh0dHBFcXVpdkVuYWJsZWQsIEJvb2wsIGJvb2wsIHRydWUsICIi
LCAiIikgXAogICAgIG1hY3JvKE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQsIG1vY2tDYXB0dXJl
RGV2aWNlc0VuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwgIiIpIFwKICAgICBtYWNybyhN
ZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24sIG1lZGlhQ2FwdHVyZVJlcXVpcmVz
U2VjdXJlQ29ubmVjdGlvbiwgQm9vbCwgYm9vbCwgdHJ1ZSwgIiIsICIiKSBcCisgICAgbWFjcm8o
VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlLCB1c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUs
IEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwgIiIpIFwKICAgICBtYWNybyhFbnVtZXJhdGluZ0FsbE5l
dHdvcmtJbnRlcmZhY2VzRW5hYmxlZCwgZW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0Vu
YWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwgIiIpIFwKICAgICBtYWNybyhXZWJSVENMZWdh
Y3lBUElFbmFibGVkLCB3ZWJSVENMZWdhY3lBUElFbmFibGVkLCBCb29sLCBib29sLCB0cnVlLCAi
IiwgIiIpIFwKICAgICBtYWNybyhJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkLCBpY2VDYW5k
aWRhdGVGaWx0ZXJpbmdFbmFibGVkLCBCb29sLCBib29sLCB0cnVlLCAiIiwgIiIpIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAppbmRleCA5
N2VjMTQ5ZTQ3NmI3YmI4YjgzZjAxNmMwNDU2NGMzYmRlYmQxN2ZiLi4xZDBjMTNiNTM5NTczM2Q1
ZGNkMTY2MGE1NjI4ZWMyMmYzMmIzMTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCkBAIC0xNTkxLDYgKzE1OTEsMTYgQEAgYm9vbCBX
S1ByZWZlcmVuY2VzR2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKFdLUHJl
ZmVyZW5jZXNSZWYgcHJlZmUKICAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bWVk
aWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKCk7CiB9CiAKK3ZvaWQgV0tQcmVmZXJl
bmNlc1NldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCit7CisgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKGVuYWJsZWQpOworfQorCitib29sIFdLUHJl
ZmVyZW5jZXNHZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoV0tQcmVmZXJlbmNlc1JlZiBw
cmVmZXJlbmNlc1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+dXNl
QVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKCk7Cit9CisKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEZl
dGNoQVBJRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcp
CiB7CiAgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RmV0Y2hBUElFbmFibGVkKGZsYWcp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5j
ZXNSZWZQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJl
bmNlc1JlZlByaXZhdGUuaAppbmRleCBjNWNkY2JhNDllYjlmMGYzMTI0ZThlMjc0MDA4OTc5Y2Q0
MTA1NjRmLi44YmI3MWQ5NmYxNTAyMmIyMjFkMzEzZGZiMTZmZGExYWZiMzI3NGEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1Jl
ZlByaXZhdGUuaApAQCAtNDMzLDYgKzQzMywxMCBAQCBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVu
Y2VzR2V0RW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQoV0tQcmVmZXJlbgog
V0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJl
Q29ubmVjdGlvbihXS1ByZWZlcmVuY2VzUmVmLCBib29sKTsKIFdLX0VYUE9SVCBib29sIFdLUHJl
ZmVyZW5jZXNHZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oV0tQcmVmZXJl
bmNlc1JlZik7CiAKKy8vIERlZmF1bHRzIHRvIGZhbHNlLgorV0tfRVhQT1JUIHZvaWQgV0tQcmVm
ZXJlbmNlc1NldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShXS1ByZWZlcmVuY2VzUmVmLCBi
b29sKTsKK1dLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRVc2VBVkZvdW5kYXRpb25BdWRp
b0NhcHR1cmUoV0tQcmVmZXJlbmNlc1JlZik7CisgICAgCiAvLyBEZWZhdWx0cyB0byBmYWxzZQog
V0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldEZldGNoQVBJRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmLCBib29sIGZsYWcpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldEZldGNo
QVBJRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNw
cAppbmRleCA3MGFmYzdhMjBjYTlhMmY3ODY1NzMxYjhjYjE5YTliNWMzOTBjNGRhLi4xNjg2ODhi
MGNhMmQ1YjAwNzI4NDk5MGJmYWU3ODIwNWE3OTFjMzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
UHJveHkuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94
eTo6flVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKQogdm9pZCBVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlclByb3h5OjpjcmVhdGVNZWRpYVNvdXJjZUZvckNhcHR1cmVEZXZpY2VXaXRoQ29uc3Ry
YWludHModWludDY0X3QgaWQsIGNvbnN0IENhcHR1cmVEZXZpY2UmIGRldmljZSwgY29uc3QgTWVk
aWFDb25zdHJhaW50c0RhdGEmIGNvbnN0cmFpbnRzRGF0YSwgYm9vbCYgc3VjY2VlZGVkLCBTdHJp
bmcmIGludmFsaWRDb25zdHJhaW50cykKIHsKICAgICBhdXRvIGNvbnN0cmFpbnRzID0gTWVkaWFD
b25zdHJhaW50c0ltcGw6OmNyZWF0ZShjb25zdHJhaW50c0RhdGEpOwotICAgIFJlZlB0cjxSZWFs
dGltZU1lZGlhU291cmNlPiBzb3VyY2UgPSBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5n
bGV0b24oKS5kZWZhdWx0QXVkaW9GYWN0b3J5KCktPmNyZWF0ZU1lZGlhU291cmNlRm9yQ2FwdHVy
ZURldmljZVdpdGhDb25zdHJhaW50cyhkZXZpY2UsIGNvbnN0cmFpbnRzLnB0cigpLCBpbnZhbGlk
Q29uc3RyYWludHMpOworICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBzb3VyY2UgPSBS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5hdWRpb0ZhY3RvcnkoKS0+Y3Jl
YXRlTWVkaWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNlV2l0aENvbnN0cmFpbnRzKGRldmljZSwgY29u
c3RyYWludHMucHRyKCksIGludmFsaWRDb25zdHJhaW50cyk7CiAgICAgc3VjY2VlZGVkID0gISFz
b3VyY2U7CiAgICAgCiAgICAgaWYgKHNvdXJjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHkuY3BwCmluZGV4IDI5NGRiYjE4Y2E2ODAwNTQ1YzViNzUxZTlhYTE1NzY5YmE4NDM4MjMu
LmYxMTVhYmFmZGM3NTQ1NTZhZjcyNTQzMzdiNDFhZGE1MTU2ZGQ1NjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIldl
YlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQVZDYXB0dXJlRGV2aWNlTWFuYWdl
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFDb25zdHJhaW50c0ltcGwuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZWFsdGltZU1lZGlhU291cmNlLmg+CkBAIC0zMjksNiArMzMwLDkgQEAgdm9pZCBVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6c3luY1dpdGhXZWJDb3JlUHJlZnMo
KSBjb25zdAogICAgIC8vIHRoaXMgaXMgYSBub29wIGlmIHRoZSBwcmVmZXJlbmNlIGhhc24ndCBj
aGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhpcyB3YXMgY2FsbGVkLgogICAgIGJvb2wgbW9j
a0RldmljZXNFbmFibGVkID0gbV9wYWdlLnByZWZlcmVuY2VzKCkubW9ja0NhcHR1cmVEZXZpY2Vz
RW5hYmxlZCgpOwogICAgIFdlYkNvcmU6Ok1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpz
ZXRNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQobW9ja0RldmljZXNFbmFibGVk
KTsKKworICAgIGJvb2wgdXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlID0gbV9wYWdlLnByZWZl
cmVuY2VzKCkudXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKCk7CisgICAgV2ViQ29yZTo6QVZD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKHVzZUFW
Rm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDQzNWE5ZWExYWNiYTkyMmMwYmJl
M2Y3MjYyYTFjYjA4MTA0OTZiNDAuLjI1OWE5NjI4NDU2OGZmMWYxMzYyMTcxODIzNTExYzE2YmUw
ZWUxMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAKQEAgLTMyNDAsNiArMzI0MCw3IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMo
Y29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKICAgICBzZXR0aW5ncy5zZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKHN0b3JlLmdldEJv
b2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6bW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxl
ZEtleSgpKSk7CiAgICAgc2V0dGluZ3Muc2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25u
ZWN0aW9uKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6bWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uS2V5KCkpKTsKKyAgICBzZXR0aW5ncy5zZXRV
c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlBy
ZWZlcmVuY2VzS2V5Ojp1c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVLZXkoKSkpOwogI2VuZGlm
CiAKICAgICBzZXR0aW5ncy5zZXRTaG91bGRDb252ZXJ0UG9zaXRpb25TdHlsZU9uQ29weShzdG9y
ZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnNob3VsZENvbnZlcnRQb3Np
dGlvblN0eWxlT25Db3B5S2V5KCkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306286</attachid>
            <date>2017-04-05 09:13:12 -0700</date>
            <delta_ts>2017-04-05 21:16:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170112-20170405091311.patch</filename>
            <type>text/plain</type>
            <size>54160</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg2M2JlNThiOWFjZDEz
MTFiNWQ1NmQ3N2U2MzgxNjM1NzJkODQzNy4uNzMwYTg1Njg4YzY3NTY2ZDFlN2JjYjlkZWZhZmEx
NTViNTRhYmU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE3LTA0LTA1ICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDExMgorICAgICAgICByZGFyOi8vcHJvYmxlbS8zMDI5MzMzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNl
IHRoaXMgcHJvdmlkZXMgdGhlIHNhbWUgZnVuY2l0b25hbGl0eSBhcyBBVkF1ZGlvQ2FwdHVyZVNv
dXJjZS4gCisgICAgICAgIEZ1bmNpb25hbGl0eSBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Qg
Y2FzZXMuCisKKyAgICAgICAgQWRkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UgZm9yIGF1ZGlvIGNh
cHR1cmUuIEFuZCB1c2UgaXQgYnkgZGVmYXVsdCBpbiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLgor
ICAgICAgICBBZGQgVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlIHNldHRpbmcgdG8gc3dpdGNo
IGJhY2sgdG8gQVZGb3VuZGF0aW9uIGZvciBhdWRpbyBjYXB0dXJlLgorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnVzZUFWRm91bmRhdGlvbkF1ZGlvQ2Fw
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0VXNlQVZGb3VuZGF0aW9uQXVk
aW9DYXB0dXJlKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNldFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRp
b0NhcHR1cmVTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJl
U291cmNlOjpmYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6fkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJlZmVycmVkU2FtcGxlUmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcmVmZXJyZWRJT0J1ZmZlckR1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3Vy
ZU1pY3JvcGhvbmVQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmFkZE1pY3JvcGhvbmVEYXRhQ29uc3VtZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3ZlTWljcm9waG9uZURhdGFDb25zdW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRFY2hvQ2FuY2Vs
bGF0aW9uU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnJlbW92ZUVjaG9DYW5jZWxsYXRpb25Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6Y2hlY2tUaW1lc3RhbXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzcGVha2VyQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6Om1pY3JvcGhvbmVD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZh
dWx0T3V0cHV0RGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmRlZmF1bHRJbnB1dERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpzZXR0aW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYzo6UmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck1hYyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyTWFjOjpkZWZhdWx0QXVkaW9GYWN0b3J5KToKKwogMjAxNy0wMy0yOSAgTXlsZXMg
Qy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFRyeSB0byBub3Jt
YWxpemUgdmFyaWF0aW9uIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDRjOTE3ZDMwZTBmOTQ2
YTMzMGIyNGY3YjU4MWJkOWViNDAzZmNmOTMuLmRjYjViNjM3YjQzNzY2YmRhYTUwMzYzM2VlN2Fi
NTQ4ZTY3NWQ0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxNy0wNC0w
NSAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIENvcmVB
dWRpb0NhcHR1cmVTb3VyY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzAxMTIKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMzAyOTMzMzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVXNlQVZGb3Vu
ZGF0aW9uQXVkaW9DYXB0dXJlIHByZWZlcmVuY2UgdG8gc3dpdGNoIGJhY2sgZnJvbSB0aGUgbmV3
IGRlZmF1bHQgb2YgQ29yZUF1ZGlvLgorCisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAg
ICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFsaXplXSk6CisgICAgICAgICgtW1dlYlByZWZl
cmVuY2VzIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZV0pOgorICAgICAgICAoLVtXZWJQcmVm
ZXJlbmNlcyBzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmU6XSk6CisgICAgICAgICogV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcu
bW06CisgICAgICAgICgtW1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZDpdKToKKwogMjAxNy0w
My0yNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFNhdmluZyBmaWxlcyBzaG91bGQgbm90IHN1Z2dlc3QgdGhlIHRvcCBsZXZl
bCBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxMDkzOWNmMWM5ZWNlMDhiZDhmODgxOTU5NDFhZjg3
YmI1NGJjYmRhLi4zMjhhNjM1OTlhOWNlYTYxMzg1YjE2NDQxNTAyZjA5NGMzNTRmNmY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTctMDQtMDUgIEplcmVteSBKb25lcyAgPGplcmVt
eWpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTEyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzMwMjkzMzM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSBwcmVm
ZXJlbmNlIHRvIHN3aXRjaCBiYWNrIGZyb20gdGhlIG5ldyBkZWZhdWx0IG9mIENvcmVBdWRpby4K
KworICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV0tQcmVmZXJl
bmNlc1NldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSk6CisgICAgICAgIChXS1ByZWZlcmVu
Y2VzR2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVz
ZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OmNyZWF0ZU1lZGlhU291cmNlRm9yQ2FwdHVyZURl
dmljZVdpdGhDb25zdHJhaW50cyk6CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OnN5bmNXaXRoV2ViQ29yZVByZWZzKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKwogMjAxNy0wMy0yOSAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIFBhZ2VD
bGllbnQ6OnJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyYTRhYThlNGIzYmI1
ODU0MjEyNThkZWU3YjY0ZTEwMzFhNGNkNjRhLi5kNTJlN2MzNDA2NWFjYTFiYjI1NGNlOTY2MTZi
YjRmYmQ2MmVhNjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC03Myw3ICs3Myw3IEBACiAJCTA3MDMzNEU5MTQ1QTFGMzYwMDhE
OEQ0NSAvKiBKU1RyYWNrQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3MDMzNEU4MTQ1QTFGMzUwMDhEOEQ0NSAvKiBKU1RyYWNrQ3VzdG9t
LmNwcCAqLzsgfTsKIAkJMDcwMzYzRTAxODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJl
U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
NzAzNjNEODE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLzsgfTsK
IAkJMDcwMzYzRTExODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzRDkxODFB
MUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tICovOyB9OwotCQkwNzAzNjNF
MjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREExODFBMUNEQzAwQzA3
NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgfTsKKwkJMDcwMzYzRTIxODFBMUNE
QzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0RBMTgxQTFDREMwMEMwNzRBNSAvKiBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMDcwMzYzRTMxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURl
dmljZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzAzNjNEQjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5t
bSAqLzsgfTsKIAkJMDcwMzYzRTQxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAz
NjNEQzE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCAqLzsgfTsKIAkJ
MDcwMzYzRTUxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREQxODFBMUNE
QzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tICovOyB9OwpAQCAtMjc0LDcgKzI3
NCw3IEBACiAJCTA3QjVBMzBEMTQ2ODdENzEwMEE4MUVDRSAvKiBKU1RleHRUcmFja0xpc3RDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdC
NUEzMEMxNDY4N0Q3MTAwQTgxRUNFIC8qIEpTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAgKi87IH07
CiAJCTA3QjcxMTZEMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0I3MTE2QTFEODk5RTYzMDA5
RjBGRkIgLyogQ2FwdHVyZURldmljZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTA3QjcxMTZFMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2
aWNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwN0I3MTE2QjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuY3Bw
ICovOyB9OwotCQkwN0I3MTE2RjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Qjcx
MTZDMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovOyB9OworCQkw
N0I3MTE2RjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QjcxMTZDMUQ4OTlFNjMw
MDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3QzA0NkMzMUU0MjUwOEIwMDcyMDFFNyAvKiBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NTcxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5jcHAgKi87IH07CiAJCTA3QzA0NkM0MUU0MjUwOEIwMDcyMDFFNyAvKiBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3M0I4NzU4MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwN0MwNDZDODFFNDI1MTU1MDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRp
YVN0cmVhbUNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwN0MwNDZDNjFFNDI1MTJGMDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0
cmVhbUNvY29hLmggKi87IH07CkBAIC0xNjYxLDYgKzE2NjEsNyBAQAogCQkzRjQyQjMxRTE4ODEx
OTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MkIzMUMxODgxMTkx
QjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLzsgfTsK
IAkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0Lm1tICovOyB9OwogCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTNGRjFGQTY2MUU3MzUwRkQwMEMxMDAyRiAvKiBDb3JlQXVkaW9DYXB0dXJl
U291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCAq
LzsgfTsKIAkJM0ZGODEzQTcxREJBODY0MDAwOUJGMDAxIC8qIFBvaW50ZXJMb2NrQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNGQzQz
NEYxOTI0MDZBOTAwQTBEM0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUw
MDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdl
YktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CiAJCTNGRkZGOUE5MTU5RDlBNTUwMDIwQkJE
NSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNGRkZGOUE3MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuaCAqLzsgfTsKQEAgLTkyMTgsNiArOTIxOSw4IEBACiAJCTNGMkIzM0UzMTY1
QUJEMzUwMEUzOTg3QyAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFdlYktpdENTU1ZpZXdwb3J0UnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTNGMkIzM0U5MTY1QUYxNTUwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdwb3J0
UnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdENT
U1ZpZXdwb3J0UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGMkIzM0VB
MTY1QUYxNTUwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzRjNCQjU4MjFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJM0YzQkI1ODMxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjQyQjMxQjE4ODExOTFCMDAyNzhBQUMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjQyQjMxQzE4ODExOTFCMDAyNzhBQUMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MDcyLDYgKzE2MDc1LDggQEAKIAkJCQkw
NzAzNjNERDE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0gKi8sCiAJ
CQkJMDcwMzYzREUxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLmggKi8s
CiAJCQkJMDcwMzYzREYxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLm1t
ICovLAorCQkJCTNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291
cmNlLmNwcCAqLywKKwkJCQkzRjNCQjU4MzFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oICovLAogCQkJCTA3NDRFQ0VCMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZU1hYy5oICovLAogCQkJCTA3NDRFQ0VDMUUwQzRBRTUwMDBEMDk0NCAv
KiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5tbSAqLywKIAkJCQkwN0VFNzZFRDFCRUE2MTk4
MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaCAqLywKQEAgLTMwNTQ0LDYg
KzMwNTQ5LDcgQEAKIAkJCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3RvcmFn
ZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3NDZBRjIxMTRGNERERTYwMDNFN0E3MiAvKiBD
b29yZGluYXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NDM4MTdGRjFBOTFCMkY4MDA2RTA0
RjIgLyogQ29yZU1lZGlhU29mdExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJM0ZGMUZBNjYx
RTczNTBGRDAwQzEwMDJGIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0Q3RDMzNDcxQzdBMTZCRjAwMDQxMjkzIC8qIENvcmVWaWRlb1NvZnRMaW5rLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOTUwMEU4MjA1NkIwMEIyNTk2NSAvKiBDb3VudGVy
RGlyZWN0aXZlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzkyRjE1MDBBRDE4NjIzMDA2OTFC
RDQgLyogQ291bnRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCmluZGV4IDFiM2UyMmJmMWJmN2FjMzQyOTFhMDdlMTIwNjU1ZDViNmUyODQ5MjkuLmY2NWM4
M2Y3ZGE5MGQzNzE4MGI4MWIzNzk3ZTU0ODU1YmM2NDExZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwCkBAIC05NCw2ICs5NCw3IEBAIGJvb2wgU2V0dGluZ3M6OmdNb2NrU2Nyb2xsQW5pbWF0
b3JFbmFibGVkID0gZmFsc2U7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIGJvb2wgU2V0dGlu
Z3M6OmdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkID0gZmFsc2U7CiBib29sIFNldHRpbmdzOjpn
TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uID0gdHJ1ZTsKK2Jvb2wgU2V0dGlu
Z3M6OmdVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUgPSBmYWxzZTsKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oV0lOKQpAQCAtNjE1LDYgKzYxNiwxNiBAQCB2b2lkIFNldHRpbmdzOjpzZXRNZWRp
YUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9vbCBtZWRpYUNhcHR1cmVSZXF1aXJl
cwogewogICAgIGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24gPSBtZWRpYUNh
cHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247CiB9CisKK2Jvb2wgU2V0dGluZ3M6OnVzZUFW
Rm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSgpCit7CisgICAgcmV0dXJuIGdVc2VBVkZvdW5kYXRpb25B
dWRpb0NhcHR1cmU7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldFVzZUFWRm91bmRhdGlvbkF1ZGlv
Q2FwdHVyZShib29sIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSkKK3sKKyAgICBnVXNlQVZG
b3VuZGF0aW9uQXVkaW9DYXB0dXJlID0gdXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlOworfQog
I2VuZGlmCiAKIHZvaWQgU2V0dGluZ3M6OnNldFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCmluZGV4IDlmMzcwNzU1YjBi
ODJiZmU4MTkyODBhNTk4MTQwZGEzOWY1ODIzOGQuLjg2M2JkMTJlYWYxMjFhNWZjZTBiZDhlYmJl
YzJkYjFlMzYwMmIzNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKQEAgLTMxMCw2ICszMTAsOSBA
QCBwdWJsaWM6CiAKICAgICBib29sIG1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlv
bigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE1lZGlhQ2FwdHVy
ZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihib29sKTsKKworICAgIHN0YXRpYyBib29sIHVzZUFW
Rm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lk
IHNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShib29sKTsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKEFQUExFX1BBWSkKQEAgLTQxNSw2ICs0MTgsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBt
X21lZGlhRGV2aWNlSWRlbnRpZmllclN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgc3RhdGljIGJvb2wg
Z01vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQ7CiAgICAgc3RhdGljIGJvb2wgZ01lZGlhQ2FwdHVy
ZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjsKKyAgICBzdGF0aWMgYm9vbCBnVXNlQVZGb3VuZGF0
aW9uQXVkaW9DYXB0dXJlOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQVBQTEVfUEFZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURl
dmljZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9B
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKaW5kZXggMjRmNzNiMDRkYzNhNWI4MTY4YTMzNDdmYTBj
Y2EyYTIyN2NhNDE0Zi4uYzYwY2EzYjg1MmM2NDA3NzMyNzgyYjBkYTI3OGMzYjhmZWM0YjdkNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2Fw
dHVyZURldmljZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oCkBAIC00NSw2ICs0NSw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFWQ2FwdHVyZURldmljZU1hbmFnZXIgZmluYWwgOiBwdWJs
aWMgQ2FwdHVyZURldmljZU1hbmFnZXIgewogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3ll
ZDxBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyPjsKIHB1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgdm9pZCBzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoYm9vbCk7CisKICAgICBW
ZWN0b3I8Q2FwdHVyZURldmljZT4mIGNhcHR1cmVEZXZpY2VzKCkgZmluYWw7CiAKICAgICBzdGF0
aWMgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciYgc2luZ2xldG9uKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdl
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLm1tCmluZGV4IDNmMDM2ODMyZDUwZGE2YTAxZDM1MWViYWM4ZmIyMmJjMGZl
MjY4N2YuLmNiYzM3MTc2NmI5ZTMwMWI2MzY0MDdkNmIyNGE3ODhmZjVkN2U2MzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJB
Vk1lZGlhQ2FwdHVyZVNvdXJjZS5oIgogI2ltcG9ydCAiQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCIK
ICNpbXBvcnQgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNpbXBvcnQgIkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2UuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhQ29uc3RyYWlu
dHMuaCIKICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKQEAgLTkyLDYgKzkzLDE4IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQg
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKGJv
b2wgZW5hYmxlZCkKK3sKKyAgICBzdGF0aWMgYm9vbCBhY3RpdmUgPSBmYWxzZTsKKyAgICBpZiAo
YWN0aXZlICE9IGVuYWJsZWQpIHsKKyAgICAgICAgYWN0aXZlID0gZW5hYmxlZDsKKyAgICAgICAg
aWYgKGFjdGl2ZSkKKyAgICAgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmds
ZXRvbigpLnNldEF1ZGlvRmFjdG9yeShBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2lu
Z2xldG9uKCkuc2V0QXVkaW9GYWN0b3J5KENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmZhY3Rvcnko
KSk7CisgICAgfQorfQorCiBWZWN0b3I8Q2FwdHVyZURldmljZT4mIEFWQ2FwdHVyZURldmljZU1h
bmFnZXI6OmNhcHR1cmVEZXZpY2VzKCkKIHsKICAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBmMzQ4OTZhZjdkNzA4
NDJkNzVlNzhjYmIzMzA2M2E5YzdjMTc5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcApA
QCAtMCwwICsxLDUxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9DYXB0dXJlU291
cmNlLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQXVkaW9TYW1w
bGVCdWZmZXJMaXN0LmgiCisjaW5jbHVkZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgorI2lu
Y2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb0NvbnZlcnRlci5oPgorI2luY2x1ZGUgPEF1ZGlvVW5p
dC9BdWRpb1VuaXQuaD4KKyNpbmNsdWRlIDxDb3JlQXVkaW8vQXVkaW9IYXJkd2FyZS5oPgorI2lu
Y2x1ZGUgPENvcmVNZWRpYS9DTVN5bmMuaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgor
I2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisK
K2NsYXNzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5IDogcHVibGljIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OkNhcHR1cmVGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBSZWZQdHI8UmVhbHRpbWVN
ZWRpYVNvdXJjZT4gY3JlYXRlTWVkaWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNlV2l0aENvbnN0cmFp
bnRzKGNvbnN0IENhcHR1cmVEZXZpY2UmIGNhcHR1cmVEZXZpY2UsIGNvbnN0IE1lZGlhQ29uc3Ry
YWludHMqIGNvbnN0cmFpbnRzLCBTdHJpbmcmIGludmFsaWRDb25zdHJhaW50KSBmaW5hbCB7Cisg
ICAgICAgIHJldHVybiBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUoY2FwdHVyZURldmlj
ZSwgY29uc3RyYWludHMsIGludmFsaWRDb25zdHJhaW50KTsKKyAgICB9Cit9OworCitjb25zdCBV
SW50MzIgb3V0cHV0QnVzID0gMDsKK2NvbnN0IFVJbnQzMiBpbnB1dEJ1cyA9IDE7CisKK1JlZlB0
cjxDb3JlQXVkaW9DYXB0dXJlU291cmNlPiBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUo
Y29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlSW5mbywgY29uc3QgTWVkaWFDb25zdHJhaW50cyog
Y29uc3RyYWludHMsIFN0cmluZyYgaW52YWxpZENvbnN0cmFpbnQpCit7CisgICAgYXV0byBzb3Vy
Y2UgPSBhZG9wdFJlZihuZXcgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZShkZXZpY2VJbmZvKSk7Cisg
ICAgaWYgKGNvbnN0cmFpbnRzKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc291cmNlLT5hcHBs
eUNvbnN0cmFpbnRzKCpjb25zdHJhaW50cyk7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAg
ICAgICAgIGludmFsaWRDb25zdHJhaW50ID0gcmVzdWx0LnZhbHVlKCkuZmlyc3Q7CisgICAgICAg
ICAgICBzb3VyY2UgPSBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHNv
dXJjZTsKK30KKworCitSZWFsdGltZU1lZGlhU291cmNlOjpDYXB0dXJlRmFjdG9yeSYgQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5PiBmYWN0b3J5OworICAgIHJldHVybiBmYWN0
b3J5LmdldCgpOworfQorCisKK0NvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2UoY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlSW5mbykKKyAgICA6IFJlYWx0aW1l
TWVkaWFTb3VyY2UoZW1wdHlTdHJpbmcoKSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVk
aW8sIGRldmljZUluZm8ubGFiZWwoKSkKKyAgICAsIG1fY2FwdHVyZURldmljZUlEKDApCit7Cisg
ICAgLy8gRklYTUU6IHVzZSBkZXZpY2VJbmZvIHRvIHNldCB0aGUgbV9jYXB0dXJlRGV2aWNlSUQK
KworICAgIHNldFBlcnNpc3RlbnRJRChkZXZpY2VJbmZvLnBlcnNpc3RlbnRJZCgpKTsKKyAgICBz
ZXRNdXRlZCh0cnVlKTsKKworICAgIG1fY3VycmVudFNldHRpbmdzLnNldFZvbHVtZSgxLjApOwor
ICAgIG1fY3VycmVudFNldHRpbmdzLnNldFNhbXBsZVJhdGUocHJlZmVycmVkU2FtcGxlUmF0ZSgp
KTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXREZXZpY2VJZChpZCgpKTsKKyAgICBtX2N1cnJl
bnRTZXR0aW5ncy5zZXRFY2hvQ2FuY2VsbGF0aW9uKHRydWUpOworCisgICAgbWFjaF90aW1lYmFz
ZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUluZm87CisgICAgbWFjaF90aW1lYmFzZV9pbmZvKCZ0aW1l
YmFzZUluZm8pOworICAgIG1fRFRTQ29udmVyc2lvblJhdGlvID0gMWUtOSAqIHN0YXRpY19jYXN0
PGRvdWJsZT4odGltZWJhc2VJbmZvLm51bWVyKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4odGltZWJh
c2VJbmZvLmRlbm9tKTsKK30KKworQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6fkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2UoKQoreworICAgIHN1c3BlbmQoKTsKKworICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrKG1faW50ZXJuYWxTdGF0ZUxvY2spOworCisgICAgaWYgKG1faW9Vbml0KQorICAg
ICAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZShtX2lvVW5pdCk7CisKKyAgICBtX2lv
VW5pdE5hbWUgPSBlbXB0eVN0cmluZygpOworCisgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVy
ID0gbnVsbHB0cjsKKyAgICBtX3NwZWFrZXJTYW1wbGVCdWZmZXIgPSBudWxscHRyOworCisgICAg
bV9zcGVha2VyUHJvY3NDYWxsZWQgPSAwOworICAgIG1fbWljcm9waG9uZVByb2NzQ2FsbGVkICA9
IDA7CisgICAgbV9sYXRlc3RNaWNUaW1lU3RhbXAgPSAwOworCisgICAgbV9hY3RpdmVTb3VyY2Vz
LmNsZWFyKCk7CisgICAgbV9wZW5kaW5nU291cmNlcy5jbGVhcigpOworCisgICAgbV9zcGVha2Vy
U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKKworICAgIG1faW9Vbml0SW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKKyAgICBtX2lvVW5pdFN0YXJ0ZWQgID0gZmFsc2U7Cit9CisKK2RvdWJsZSBDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpwcmVmZXJyZWRTYW1wbGVSYXRlKCkKK3sKKyAgICAvLyBGSVhNRTogR2V0
IHRoZSBwcmVmZXJyZWQgcmF0ZSBkeW5hbWljYWxseSwga0FVVm9pY2VJT1Byb3BlcnR5X1ByZWZl
cnJlZEhXU2FtcGxlUmF0ZS8gW1tBVkF1ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0YW5jZV0gcHJlZmVy
cmVkU2FtcGxlUmF0ZV0KKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgcHJlZmVycmVkUmF0ZSA9IDI0
MDAwLjsKKyAgICByZXR1cm4gcHJlZmVycmVkUmF0ZTsKK30KKworZG91YmxlIENvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OnByZWZlcnJlZElPQnVmZmVyRHVyYXRpb24oKQoreworICAgIC8vIEZJWE1F
OiBHZXQgdGhlIHByZWZlcnJlZCBkdXJhdGlvbiBkeW5hbWljYWxseSAtIGtBVVZvaWNlSU9Qcm9w
ZXJ0eV9QcmVmZXJyZWRIV0Jsb2NrU2l6ZUluU2Vjb25kcyAvIFtbQVZBdWRpb1Nlc3Npb24gc2hh
cmVkSW5zdGFuY2VdIHByZWZlcnJlZElPQnVmZmVyRHVyYXRpb25dCisgICAgc3RhdGljIGNvbnN0
IGZsb2F0IHByZWZlcnJlZER1cmF0aW9uID0gMC4wMjsKKyAgICByZXR1cm4gcHJlZmVycmVkRHVy
YXRpb247Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZU1p
Y3JvcGhvbmVQcm9jKCkKK3sKKyAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0g
eyBtaWNyb3Bob25lQ2FsbGJhY2ssIHRoaXMgfTsKKyAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdFNl
dFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfU2V0SW5wdXRDYWxs
YmFjaywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZjYWxsYmFjaywgc2l6ZW9m
KGNhbGxiYWNrKSk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVNaWNyb3Bob25lUHJvYyglcCkgdW5hYmxlIHRvIHNl
dCB2cGlvIHVuaXQgbWljIHByb2MsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAo
Y2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgQXVkaW9TdHJl
YW1CYXNpY0Rlc2NyaXB0aW9uIG1pY3JvcGhvbmVQcm9jRm9ybWF0ID0geyB9OworCisgICAgVUlu
dDMyIHNpemUgPSBzaXplb2YobWljcm9waG9uZVByb2NGb3JtYXQpOworICAgIGVyciA9IEF1ZGlv
VW5pdEdldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0
LCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LCBpbnB1dEJ1cywgJm1pY3JvcGhvbmVQcm9jRm9ybWF0
LCAmc2l6ZSk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpjb25maWd1cmVNaWNyb3Bob25lUHJvYyglcCkgdW5hYmxlIHRvIGdldCBv
dXRwdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChj
aGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBtX21pY3JvcGhv
bmVTYW1wbGVCdWZmZXIgPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNyZWF0ZShtaWNyb3Bob25l
UHJvY0Zvcm1hdCwgcHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbigpICogbWljcm9waG9uZVByb2NG
b3JtYXQubVNhbXBsZVJhdGUgKiAyKTsKKyAgICBtX21pY3JvcGhvbmVQcm9jRm9ybWF0ID0gbWlj
cm9waG9uZVByb2NGb3JtYXQ7CisKKyAgICByZXR1cm4gZXJyOworfQorCitPU1N0YXR1cyBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVTcGVha2VyUHJvYygpCit7CisgICAgLy8gU2V0
IHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgd2Ugc3VwcGx5IHRvIHRoZSBvdXRwdXQgc3RyZWFtLgor
CisgICAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBjYWxsYmFjayA9IHsgc3BlYWtlckNhbGxiYWNr
LCB0aGlzIH07CisgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwg
a0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfR2xv
YmFsLCBvdXRwdXRCdXMsICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7CisgICAgaWYgKGVy
cikgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1
cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgc3BlYWtlciBwcm9jLCBl
cnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICBy
ZXR1cm4gZXJyOworICAgIH0KKworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBzcGVh
a2VyUHJvY0Zvcm1hdCA9IHsgfTsKKworICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKHNwZWFrZXJQ
cm9jRm9ybWF0KTsKKyAgICBlcnIgID0gQXVkaW9Vbml0R2V0UHJvcGVydHkobV9pb1VuaXQsIGtB
dWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgb3V0
cHV0QnVzLCAmc3BlYWtlclByb2NGb3JtYXQsICZzaXplKTsKKyAgICBpZiAoZXJyKSB7CisgICAg
ICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFrZXJQ
cm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRz
KSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7Cisg
ICAgfQorCisgICAgbV9zcGVha2VyU2FtcGxlQnVmZmVyID0gQXVkaW9TYW1wbGVCdWZmZXJMaXN0
OjpjcmVhdGUoc3BlYWtlclByb2NGb3JtYXQsIHByZWZlcnJlZElPQnVmZmVyRHVyYXRpb24oKSAq
IHNwZWFrZXJQcm9jRm9ybWF0Lm1TYW1wbGVSYXRlICogMik7CisgICAgbV9zcGVha2VyUHJvY0Zv
cm1hdCA9IHNwZWFrZXJQcm9jRm9ybWF0OworCisgICAgcmV0dXJuIGVycjsKK30KKwordWludDY0
X3QgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6YWRkTWljcm9waG9uZURhdGFDb25zdW1lcihNaWNy
b3Bob25lRGF0YUNhbGxiYWNrIGNhbGxiYWNrKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2Nr
PiBsb2NrKG1fcGVuZGluZ1NvdXJjZVF1ZXVlTG9jayk7CisgICAgbV9uZXh0TWljcm9waG9uZURh
dGFDYWxsYmFja0lEKys7CisgICAgbV9taWNyb3Bob25lRGF0YUNhbGxiYWNrcy5hZGQobV9uZXh0
TWljcm9waG9uZURhdGFDYWxsYmFja0lELCBjYWxsYmFjayk7CisKKyAgICByZXR1cm4gbV9uZXh0
TWljcm9waG9uZURhdGFDYWxsYmFja0lEOworfQorCit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OnJlbW92ZU1pY3JvcGhvbmVEYXRhQ29uc3VtZXIodWludDY0X3QgY2FsbGJhY2tJRCkKK3sK
KyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2sp
OworICAgIG1fbWljcm9waG9uZURhdGFDYWxsYmFja3MucmVtb3ZlKGNhbGxiYWNrSUQpOworfSAg
ICAKKwordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRFY2hvQ2FuY2VsbGF0aW9uU291
cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYgc291cmNlKQoreworICAgIGlmICghc291cmNlLnNl
dE91dHB1dEZvcm1hdChtX3NwZWFrZXJQcm9jRm9ybWF0KSkgeworICAgICAgICBMT0coTWVkaWEs
ICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRFY2hvQ2FuY2VsbGF0aW9uU291cmNlOiBzb3Vy
Y2UgJXAgY29uZmlndXJlT3V0cHV0IGZhaWxlZCIsICZzb3VyY2UpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wZW5kaW5nU291cmNl
UXVldWVMb2NrKTsKKyAgICBtX3BlbmRpbmdTb3VyY2VzLmFwcGVuZCh7IFF1ZXVlQWN0aW9uOjpB
ZGQsICZzb3VyY2UgfSk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3Zl
RWNob0NhbmNlbGxhdGlvblNvdXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmIHNvdXJjZSkKK3sK
KyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2sp
OworICAgIG1fcGVuZGluZ1NvdXJjZXMuYXBwZW5kKHsgUXVldWVBY3Rpb246OlJlbW92ZSwgJnNv
dXJjZSB9KTsKK30KKwordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjaGVja1RpbWVzdGFt
cHMoY29uc3QgQXVkaW9UaW1lU3RhbXAgKmluVGltZVN0YW1wLCB1aW50NjRfdCBzYW1wbGVUaW1l
LCBkb3VibGUgaG9zdFRpbWUpCit7CisgICAgaWYgKCFpblRpbWVTdGFtcC0+bVNhbXBsZVRpbWUg
fHwgc2FtcGxlVGltZSA9PSBtX2xhdGVzdE1pY1RpbWVTdGFtcCB8fCAhaG9zdFRpbWUpCisgICAg
ICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNoZWNrVGltZXN0YW1wczog
dW51c3VhbCB0aW1lc3RhbXBzLCBzYW1wbGUgdGltZSA9ICVsbGQsIHByZXZpb3VzIHNhbXBsZSB0
aW1lID0gJWxsZCwgaG9zdFRpbWUgJWYiLCBzYW1wbGVUaW1lLCBtX2xhdGVzdE1pY1RpbWVTdGFt
cCwgaG9zdFRpbWUpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcm92
aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqIC8qaW9BY3Rpb25GbGFn
cyovLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogaW5UaW1lU3RhbXAsIFVJbnQzMiAvKmluQnVzTnVt
YmVyKi8sIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7
CisgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGF1ZGlvIHVuaXQgbmVlZHMgZGF0YSB0byBwbGF5IHRo
cm91Z2ggdGhlIHNwZWFrZXJzLgorICAgICsrbV9zcGVha2VyUHJvY3NDYWxsZWQ7CisKKyAgICBp
ZiAobV9zcGVha2VyU2FtcGxlQnVmZmVyLT5zYW1wbGVDYXBhY2l0eSgpIDwgaW5OdW1iZXJGcmFt
ZXMpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJvdmlk
ZVNwZWFrZXJEYXRhOiBzcGVha2VyIHNhbXBsZSBidWZmZXIgc2l6ZSAoJWQpIHRvbyBzbWFsbCBm
b3IgYW1vdW50IG9mIHNhbXBsZSBkYXRhIHJlcXVlc3RlZCAoJWQpISIsIG1fc3BlYWtlclNhbXBs
ZUJ1ZmZlci0+c2FtcGxlQ2FwYWNpdHkoKSwgKGludClpbk51bWJlckZyYW1lcyk7CisgICAgICAg
IHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKyAgICB9CisKKyAgICAvLyBBZGQvcmVtb3ZlIHNv
dXJjZXMgZnJvbSB0aGUgcXVldWUsIGJ1dCBvbmx5IGlmIHdlIGdldCB0aGUgbG9jayBpbW1lZGlh
dGVseS4gT3RoZXJ3aXNlIHRyeQorICAgIC8vIGFnYWluIG9uIHRoZSBuZXh0IGNhbGxiYWNrLgor
ICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcGVuZGluZ1NvdXJj
ZVF1ZXVlTG9jaywgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgICAgIGlmIChsb2NrLm93bnNfbG9j
aygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3BlbmRpbmdTb3VyY2VzKSB7
CisgICAgICAgICAgICAgICAgaWYgKHBhaXIuZmlyc3QgPT0gUXVldWVBY3Rpb246OkFkZCkKKyAg
ICAgICAgICAgICAgICAgICAgbV9hY3RpdmVTb3VyY2VzLmFwcGVuZChwYWlyLnNlY29uZCk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZVNvdXJjZXMu
cmVtb3ZlRmlyc3QocGFpci5zZWNvbmQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9w
ZW5kaW5nU291cmNlcy5jbGVhcigpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fYWN0
aXZlU291cmNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZG91YmxlIGFk
anVzdGVkSG9zdFRpbWUgPSBtX0RUU0NvbnZlcnNpb25SYXRpbyAqIGluVGltZVN0YW1wLT5tSG9z
dFRpbWU7CisgICAgdWludDY0X3Qgc2FtcGxlVGltZSA9IGluVGltZVN0YW1wLT5tU2FtcGxlVGlt
ZTsKKyAgICBjaGVja1RpbWVzdGFtcHMoaW5UaW1lU3RhbXAsIHNhbXBsZVRpbWUsIGFkanVzdGVk
SG9zdFRpbWUpOworCisgICAgbV9zcGVha2VyU2FtcGxlQnVmZmVyLT5yZXNldCgpOworICAgIG1f
c3BlYWtlclNhbXBsZUJ1ZmZlci0+c2V0VGltZXMoYWRqdXN0ZWRIb3N0VGltZSwgc2FtcGxlVGlt
ZSk7CisKKyAgICBBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlckxpc3QgPSBtX3NwZWFrZXJTYW1wbGVC
dWZmZXItPmJ1ZmZlckxpc3QoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYnVmZmVy
TGlzdC5tTnVtYmVyQnVmZmVyczsgKytpKQorICAgICAgICBidWZmZXJMaXN0Lm1CdWZmZXJzW2ld
ID0gaW9EYXRhLT5tQnVmZmVyc1tpXTsKKworICAgIGJvb2wgZmlyc3RTb3VyY2UgPSB0cnVlOwor
ICAgIGZvciAoYXV0byYgc291cmNlIDogbV9hY3RpdmVTb3VyY2VzKSB7CisgICAgICAgIHNvdXJj
ZS0+cHVsbFNhbXBsZXMoKm1fc3BlYWtlclNhbXBsZUJ1ZmZlci5nZXQoKSwgaW5OdW1iZXJGcmFt
ZXMsIGFkanVzdGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUsIGZpcnN0U291cmNlID8gQXVkaW9TYW1w
bGVEYXRhU291cmNlOjpDb3B5IDogQXVkaW9TYW1wbGVEYXRhU291cmNlOjpNaXgpOworICAgICAg
ICBmaXJzdFNvdXJjZSA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBub0VycjsKK30KKwor
T1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3BlYWtlckNhbGxiYWNrKHZvaWQgKmlu
UmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25GbGFncywgY29uc3Qg
QXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBp
bk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7CisgICAgQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZSogZGF0YVNvdXJjZSA9IHN0YXRpY19jYXN0PENvcmVBdWRpb0NhcHR1cmVT
b3VyY2UqPihpblJlZkNvbik7CisgICAgcmV0dXJuIGRhdGFTb3VyY2UtPnByb3ZpZGVTcGVha2Vy
RGF0YShpb0FjdGlvbkZsYWdzLCBpblRpbWVTdGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJh
bWVzLCBpb0RhdGEpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcm9j
ZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqIGlvQWN0aW9u
RmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiBpblRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVt
YmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogLyppb0RhdGEqLykK
K3sKKyAgICArK21fbWljcm9waG9uZVByb2NzQ2FsbGVkOworCisgICAgLy8gUHVsbCB0aHJvdWdo
IHRoZSB2cGlvIHVuaXQgdG8gb3VyIG1pYyBidWZmZXIuCisgICAgbV9taWNyb3Bob25lU2FtcGxl
QnVmZmVyLT5yZXNldCgpOworICAgIEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCA9IG1fbWlj
cm9waG9uZVNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpOworICAgIGF1dG8gZXJyID0gQXVkaW9V
bml0UmVuZGVyKG1faW9Vbml0LCBpb0FjdGlvbkZsYWdzLCBpblRpbWVTdGFtcCwgaW5CdXNOdW1i
ZXIsIGluTnVtYmVyRnJhbWVzLCAmYnVmZmVyTGlzdCk7CisgICAgaWYgKGVycikgeworICAgICAg
ICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcm9jZXNzTWljcm9waG9uZVNh
bXBsZXMoJXApIEF1ZGlvVW5pdFJlbmRlciBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0
aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0K
KworICAgIGRvdWJsZSBhZGp1c3RlZEhvc3RUaW1lID0gbV9EVFNDb252ZXJzaW9uUmF0aW8gKiBp
blRpbWVTdGFtcC0+bUhvc3RUaW1lOworICAgIHVpbnQ2NF90IHNhbXBsZVRpbWUgPSBpblRpbWVT
dGFtcC0+bVNhbXBsZVRpbWU7CisgICAgY2hlY2tUaW1lc3RhbXBzKGluVGltZVN0YW1wLCBzYW1w
bGVUaW1lLCBhZGp1c3RlZEhvc3RUaW1lKTsKKyAgICBtX2xhdGVzdE1pY1RpbWVTdGFtcCA9IHNh
bXBsZVRpbWU7CisKKyAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPnNldFRpbWVzKGFkanVz
dGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUpOworCisgICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1l
ZGlhVGltZShzYW1wbGVUaW1lLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSks
IG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9j
Rm9ybWF0LCBpbk51bWJlckZyYW1lcyk7CisKKyAgICBpZiAobV9taWNyb3Bob25lRGF0YUNhbGxi
YWNrcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZm9yIChhdXRvJiBjYWxs
YmFjayA6IG1fbWljcm9waG9uZURhdGFDYWxsYmFja3MudmFsdWVzKCkpCisgICAgICAgIGNhbGxi
YWNrKE1lZGlhVGltZShzYW1wbGVUaW1lLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJh
dGUoKSksIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhv
bmVQcm9jRm9ybWF0LCBpbk51bWJlckZyYW1lcyk7CisKKyAgICByZXR1cm4gbm9FcnI7Cit9CisK
K09TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6Om1pY3JvcGhvbmVDYWxsYmFjayh2b2lk
ICppblJlZkNvbiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqIGlvQWN0aW9uRmxhZ3MsIGNv
bnN0IEF1ZGlvVGltZVN0YW1wKiBpblRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50
MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQoreworICAgIENvcmVB
dWRpb0NhcHR1cmVTb3VyY2UqIGRhdGFTb3VyY2UgPSBzdGF0aWNfY2FzdDxDb3JlQXVkaW9DYXB0
dXJlU291cmNlKj4oaW5SZWZDb24pOworICAgIHJldHVybiBkYXRhU291cmNlLT5wcm9jZXNzTWlj
cm9waG9uZVNhbXBsZXMoaW9BY3Rpb25GbGFncywgaW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBp
bk51bWJlckZyYW1lcywgaW9EYXRhKTsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZTo6ZGVmYXVsdElucHV0RGV2aWNlKHVpbnQzMl90KiBkZXZpY2VJRCkKK3sKKyAgICBBU1NF
UlQobV9pb1VuaXQpOworCisgICAgVUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZigqZGV2aWNl
SUQpOworICAgIGF1dG8gZXJyID0gQXVkaW9Vbml0R2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRp
b091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFs
LCBpbnB1dEJ1cywgZGV2aWNlSUQsICZwcm9wZXJ0eVNpemUpOworICAgIGlmIChlcnIpCisgICAg
ICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmRlZmF1bHRJbnB1dERldmlj
ZSglcCkgdW5hYmxlIHRvIGdldCBkZWZhdWx0IGlucHV0IGRldmljZSBJRCwgZXJyb3IgJWQgKCUu
NHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKworICAgIHJldHVybiBlcnI7Cit9
CisKK09TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cygpCit7
CisgICAgQVNTRVJUKG1faW50ZXJuYWxTdGF0ZUxvY2suaXNIZWxkKCkpOworCisgICAgaWYgKG1f
aW9Vbml0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRp
b24gaW9Vbml0RGVzY3JpcHRpb24gPSB7IGtBdWRpb1VuaXRUeXBlX091dHB1dCwga0F1ZGlvVW5p
dFN1YlR5cGVfVm9pY2VQcm9jZXNzaW5nSU8sIGtBdWRpb1VuaXRNYW51ZmFjdHVyZXJfQXBwbGUs
IDAsIDAgfTsKKyAgICBBdWRpb0NvbXBvbmVudCBpb0NvbXBvbmVudCA9IEF1ZGlvQ29tcG9uZW50
RmluZE5leHQobnVsbHB0ciwgJmlvVW5pdERlc2NyaXB0aW9uKTsKKyAgICBBU1NFUlQoaW9Db21w
b25lbnQpOworICAgIGlmICghaW9Db21wb25lbnQpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCVwKSB1bmFibGUgdG8gZmluZCB2
cGlvIHVuaXQgY29tcG9uZW50IiwgdGhpcyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisK
KyAgICBDRlN0cmluZ1JlZiBuYW1lID0gbnVsbHB0cjsKKyAgICBBdWRpb0NvbXBvbmVudENvcHlO
YW1lKGlvQ29tcG9uZW50LCAmbmFtZSk7CisgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgbV9pb1Vu
aXROYW1lID0gbmFtZTsKKyAgICAgICAgQ0ZSZWxlYXNlKG5hbWUpOworICAgICAgICBMT0coTWVk
aWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMoJXApIGNyZWF0ZWQg
XCIlc1wiIGNvbXBvbmVudCIsIHRoaXMsIG1faW9Vbml0TmFtZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICB9CisKKyAgICBhdXRvIGVyciA9IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoaW9Db21wb25l
bnQsICZtX2lvVW5pdCk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0coTWVkaWEsICJDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMoJXApIHVuYWJsZSB0byBvcGVuIHZw
aW8gdW5pdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsK
KyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgdWlu
dDMyX3QgcGFyYW0gPSAxOworICAgIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0
LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfRW5hYmxlSU8sIGtBdWRpb1VuaXRTY29wZV9JbnB1
dCwgaW5wdXRCdXMsICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7CisgICAgaWYgKGVycikgeworICAg
ICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMo
JXApIHVuYWJsZSB0byBlbmFibGUgdnBpbyB1bml0IGlucHV0LCBlcnJvciAlZCAoJS40cykiLCB0
aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0K
KworICAgIHBhcmFtID0gMTsKKyAgICBlcnIgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5p
dCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9Vbml0U2NvcGVfT3V0
cHV0LCBvdXRwdXRCdXMsICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7CisgICAgaWYgKGVycikgewor
ICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5p
dHMoJXApIHVuYWJsZSB0byBlbmFibGUgdnBpbyB1bml0IG91dHB1dCwgZXJyb3IgJWQgKCUuNHMp
IiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAg
ICB9CisjZW5kaWYKKworICAgIGlmICghbV9jYXB0dXJlRGV2aWNlSUQpIHsKKyAgICAgICAgZXJy
ID0gZGVmYXVsdElucHV0RGV2aWNlKCZtX2NhcHR1cmVEZXZpY2VJRCk7CisgICAgICAgIGlmIChl
cnIpCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIFVJbnQzMiBwcm9wZXJ0
eVNpemUgPSBzaXplb2YobV9jYXB0dXJlRGV2aWNlSUQpOworICAgIGVyciA9IEF1ZGlvVW5pdFNl
dFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmlj
ZSwga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZtX2NhcHR1cmVEZXZpY2VJRCwg
cHJvcGVydHlTaXplKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIHNldCB2cGlv
IHVuaXQgY2FwdHVyZSBkZXZpY2UgSUQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJy
LCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgZXJyID0g
Y29uZmlndXJlTWljcm9waG9uZVByb2MoKTsKKyAgICBpZiAoZXJyKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgZXJyID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShtX2lvVW5pdCk7CisgICAgaWYg
KGVycikgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1
cEF1ZGlvVW5pdHMoJXApIEF1ZGlvVW5pdEluaXRpYWxpemUoKSBmYWlsZWQsIGVycm9yICVkICgl
LjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7
CisgICAgfQorICAgIG1faW9Vbml0SW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgZXJyID0gY29u
ZmlndXJlU3BlYWtlclByb2MoKTsKKyAgICBpZiAoZXJyKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgcmV0dXJuIGVycjsKK30KKwordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzdGFy
dFByb2R1Y2luZ0RhdGEoKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW50
ZXJuYWxTdGF0ZUxvY2spOworICAgIGlmIChtX2lvVW5pdFN0YXJ0ZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIE9TU3RhdHVzIGVycjsKKyAgICBpZiAoIW1faW9Vbml0KSB7CisgICAgICAgIGVy
ciA9IHNldHVwQXVkaW9Vbml0cygpOworICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGVyciA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1faW9Vbml0KTsK
KyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OnN0YXJ0KCVwKSBBdWRpb091dHB1dFVuaXRTdGFydCBmYWlsZWQgd2l0aCBlcnJvciAlZCAo
JS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9pb1VuaXRTdGFydGVkID0gdHJ1ZTsKKyAgICBzZXRNdXRlZChmYWxzZSk7
Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEoKQor
eworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW50ZXJuYWxTdGF0ZUxvY2spOwor
CisgICAgQVNTRVJUKG1faW9Vbml0KTsKKworICAgIGF1dG8gZXJyID0gQXVkaW9PdXRwdXRVbml0
U3RvcChtX2lvVW5pdCk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0coTWVkaWEsICJDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpzdG9wKCVwKSBBdWRpb091dHB1dFVuaXRTdG9wIGZhaWxlZCB3
aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7CisgICAgc2V0
TXV0ZWQodHJ1ZSk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN1c3Bl
bmQoKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW50ZXJuYWxTdGF0ZUxv
Y2spOworCisgICAgQVNTRVJUKG1faW9Vbml0KTsKKworICAgIGlmIChtX2lvVW5pdFN0YXJ0ZWQp
IHsKKyAgICAgICAgYXV0byBlcnIgPSBBdWRpb091dHB1dFVuaXRTdG9wKG1faW9Vbml0KTsKKyAg
ICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6cmVzdW1lKCVwKSBBdWRpb091dHB1dFVuaXRTdG9wIGZhaWxlZCB3aXRoIGVycm9y
ICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyOworICAgICAgICB9CisgICAgICAgIG1faW9Vbml0U3RhcnRlZCA9IGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChtX2lvVW5pdEluaXRpYWxpemVkKSB7CisgICAgICAgIGF1dG8gZXJy
ID0gQXVkaW9Vbml0VW5pbml0aWFsaXplKG1faW9Vbml0KTsKKyAgICAgICAgaWYgKGVycikgewor
ICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVzdW1lKCVw
KSBBdWRpb1VuaXRVbmluaXRpYWxpemUgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhp
cywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAg
ICAgIH0KKyAgICAgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiAwOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZXN1bWUo
KQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW50ZXJuYWxTdGF0ZUxvY2sp
OworCisgICAgQVNTRVJUKG1faW9Vbml0KTsKKyAgICBBU1NFUlQoIW1faW9Vbml0U3RhcnRlZCk7
CisKKyAgICBhdXRvIGVyciA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1faW9Vbml0KTsKKyAgICBp
ZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnJl
c3VtZSglcCkgQXVkaW9PdXRwdXRVbml0U3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMp
IiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAg
ICB9CisgICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7CisKKyAgICByZXR1cm4gZXJyOworfQor
CitSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4gQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMp
CisgICAgICAgIHJldHVybiBtX2NhcGFiaWxpdGllczsKKworICAgIG1fc3VwcG9ydGVkQ29uc3Ry
YWludHMuc2V0U3VwcG9ydHNEZXZpY2VJZCh0cnVlKTsKKyAgICBtX3N1cHBvcnRlZENvbnN0cmFp
bnRzLnNldFN1cHBvcnRzRWNob0NhbmNlbGxhdGlvbih0cnVlKTsKKyAgICBtX3N1cHBvcnRlZENv
bnN0cmFpbnRzLnNldFN1cHBvcnRzVm9sdW1lKHRydWUpOworCisgICAgLy8gRklYTUU6IGZpbmlz
aCB0aGlzLgorICAgIG1fY2FwYWJpbGl0aWVzID0gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllczo6Y3JlYXRlKG1fc3VwcG9ydGVkQ29uc3RyYWludHMpOworICAgIG1fY2FwYWJpbGl0aWVz
LT5zZXREZXZpY2VJZChpZCgpKTsKKyAgICBtX2NhcGFiaWxpdGllcy0+c2V0RWNob0NhbmNlbGxh
dGlvbihSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpFY2hvQ2FuY2VsbGF0aW9uOjpS
ZWFkV3JpdGUpOworICAgIG1fY2FwYWJpbGl0aWVzLT5zZXRWb2x1bWUoQ2FwYWJpbGl0eVZhbHVl
T3JSYW5nZSgwLjAsIDEuMCkpOworCisgICAgcmV0dXJuIG1fY2FwYWJpbGl0aWVzOworfQorCitj
b25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnNldHRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3M7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NGYzYjdmNGUxYTRm
ZjgyMzk1YzM4NTNiM2RiMDcxNjBlN2U2MjJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaApA
QCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1
ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2Uu
aCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisjaW5jbHVkZSA8QXVkaW9Ub29s
Ym94L0F1ZGlvVG9vbGJveC5oPgorI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ01DbG9jayog
Q01DbG9ja1JlZjsKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBNZWRpYVRpbWU7Cit9CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OworY2xhc3Mg
QXVkaW9TYW1wbGVEYXRhU291cmNlOworY2xhc3MgQ2FwdHVyZURldmljZUluZm87CisKK2NsYXNz
IENvcmVBdWRpb0NhcHR1cmVTb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7Citw
dWJsaWM6CisKKyAgICBzdGF0aWMgUmVmUHRyPENvcmVBdWRpb0NhcHR1cmVTb3VyY2U+IGNyZWF0
ZShjb25zdCBDYXB0dXJlRGV2aWNlJiwgY29uc3QgTWVkaWFDb25zdHJhaW50cyosIFN0cmluZyYp
OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIENhcHR1cmVGYWN0b3J5JiBmYWN0b3J5KCk7
CisKKyAgICB2b2lkIGFkZEVjaG9DYW5jZWxsYXRpb25Tb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291
cmNlJik7CisgICAgdm9pZCByZW1vdmVFY2hvQ2FuY2VsbGF0aW9uU291cmNlKEF1ZGlvU2FtcGxl
RGF0YVNvdXJjZSYpOworCisgICAgdXNpbmcgTWljcm9waG9uZURhdGFDYWxsYmFjayA9IHN0ZDo6
ZnVuY3Rpb248dm9pZChjb25zdCBNZWRpYVRpbWUmIHNhbXBsZVRpbWUsIGNvbnN0IFBsYXRmb3Jt
QXVkaW9EYXRhJiBhdWRpb0RhdGEsIGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uLCBzaXplX3Qgc2FtcGxlQ291bnQpPjsKKworICAgIHVpbnQ2NF90IGFkZE1pY3JvcGhv
bmVEYXRhQ29uc3VtZXIoTWljcm9waG9uZURhdGFDYWxsYmFjayk7CisgICAgdm9pZCByZW1vdmVN
aWNyb3Bob25lRGF0YUNvbnN1bWVyKHVpbnQ2NF90KTsKKworICAgIENNQ2xvY2tSZWYgdGltZWJh
c2VDbG9jaygpOworCitwcml2YXRlOgorICAgIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3Qg
Q2FwdHVyZURldmljZSYpOworICAgIHZpcnR1YWwgfkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoKTsK
KworICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJv
ZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIGJvb2wgaXNQcm9kdWNpbmdEYXRhKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9pb1VuaXRTdGFydGVkOyB9CisKKyAgICBPU1N0YXR1cyBzdXNwZW5kKCk7
CisgICAgT1NTdGF0dXMgcmVzdW1lKCk7CisKKyAgICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJj
ZUNhcGFiaWxpdGllcz4gY2FwYWJpbGl0aWVzKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IGZpbmFsOworCisgICAg
T1NTdGF0dXMgc2V0dXBBdWRpb1VuaXRzKCk7CisgICAgT1NTdGF0dXMgY29uZmlndXJlU3BlYWtl
clByb2MoKTsKKyAgICBPU1N0YXR1cyBjb25maWd1cmVNaWNyb3Bob25lUHJvYygpOworICAgIE9T
U3RhdHVzIGRlZmF1bHRPdXRwdXREZXZpY2UodWludDMyX3QqKTsKKyAgICBPU1N0YXR1cyBkZWZh
dWx0SW5wdXREZXZpY2UodWludDMyX3QqKTsKKworICAgIHZvaWQgY2hlY2tUaW1lc3RhbXBzKGNv
bnN0IEF1ZGlvVGltZVN0YW1wKiwgdWludDY0X3QsIGRvdWJsZSk7CisKKyAgICBzdGF0aWMgT1NT
dGF0dXMgbWljcm9waG9uZUNhbGxiYWNrKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFn
cyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlz
dCopOworICAgIE9TU3RhdHVzIHByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhBdWRpb1VuaXRSZW5k
ZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1
ZGlvQnVmZmVyTGlzdCopOworCisgICAgc3RhdGljIE9TU3RhdHVzIHNwZWFrZXJDYWxsYmFjayh2
b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCos
IFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKKyAgICBPU1N0YXR1cyBwcm92aWRl
U3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKKworICAgIHN0YXRpYyBk
b3VibGUgcHJlZmVycmVkU2FtcGxlUmF0ZSgpOworICAgIHN0YXRpYyBkb3VibGUgcHJlZmVycmVk
SU9CdWZmZXJEdXJhdGlvbigpOworCisgICAgQXVkaW9Vbml0IG1faW9Vbml0IHsgbnVsbHB0ciB9
OworICAgIFN0cmluZyBtX2lvVW5pdE5hbWU7CisKKyAgICAvLyBPbmx5IHJlYWQvbW9kaWZpZWQg
ZnJvbSB0aGUgSU8gdGhyZWFkLgorICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9TYW1wbGVEYXRhU291
cmNlPj4gbV9hY3RpdmVTb3VyY2VzOworCisgICAgZW51bSBRdWV1ZUFjdGlvbiB7IEFkZCwgUmVt
b3ZlIH07CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxRdWV1ZUFjdGlvbiwgUmVmUHRyPEF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZT4+PiBtX3BlbmRpbmdTb3VyY2VzOworCisgICAgdWludDMyX3QgbV9jYXB0
dXJlRGV2aWNlSUQgeyAwIH07CisKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gbV9taWNy
b3Bob25lUHJvY0Zvcm1hdDsKKyAgICBSZWZQdHI8QXVkaW9TYW1wbGVCdWZmZXJMaXN0PiBtX21p
Y3JvcGhvbmVTYW1wbGVCdWZmZXI7CisgICAgdWludDY0X3QgbV9taWNyb3Bob25lUHJvY3NDYWxs
ZWQgeyAwIH07CisgICAgdWludDY0X3QgbV9sYXRlc3RNaWNUaW1lU3RhbXAgeyAwIH07CisKKyAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBNaWNyb3Bob25lRGF0YUNhbGxiYWNrPiBtX21pY3JvcGhvbmVE
YXRhQ2FsbGJhY2tzOworICAgIHVpbnQ2NF90IG1fbmV4dE1pY3JvcGhvbmVEYXRhQ2FsbGJhY2tJ
RCB7IDAgfTsKKworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX3NwZWFrZXJQcm9jRm9y
bWF0OworICAgIFJlZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IG1fc3BlYWtlclNhbXBsZUJ1
ZmZlcjsKKyAgICB1aW50NjRfdCBtX3NwZWFrZXJQcm9jc0NhbGxlZCB7IDAgfTsKKworICAgIGRv
dWJsZSBtX0RUU0NvbnZlcnNpb25SYXRpbyB7IDAgfTsKKworICAgIGJvb2wgbV9pb1VuaXRJbml0
aWFsaXplZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lvVW5pdFN0YXJ0ZWQgeyBmYWxzZSB9Owor
CisgICAgTG9jayBtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2s7CisgICAgTG9jayBtX2ludGVybmFs
U3RhdGVMb2NrOworCisgICAgbXV0YWJsZSBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFi
aWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CisgICAgbXV0YWJsZSBSZWFsdGltZU1lZGlhU291cmNl
U3VwcG9ydGVkQ29uc3RyYWludHMgbV9zdXBwb3J0ZWRDb25zdHJhaW50czsKKyAgICBSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7Cit9OworCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlck1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAKaW5kZXggZWY4YWRjMTI3NTVl
MWQyMThkNTQ1MmVjNWQwOTI2ZWQ5ZmYzOTM0Yy4uMTUwMThjOTk5NGVlMDQ4ODM0MTRmZDU2OTg1
ZDhkMTJkODQ0OTIxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
TWFjLmNwcApAQCAtMzMsOSArMzMsOSBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5oIgogCi0jaW5jbHVkZSAiQVZBdWRp
b0NhcHR1cmVTb3VyY2UuaCIKICNpbmNsdWRlICJBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9DYXB0
dXJlU291cmNlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFt
UHJpdmF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC02Myw3ICs2Myw3IEBA
IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJN
YWMoKQogICAgIG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNEZXZpY2VJZCh0cnVl
KTsKICAgICBtX3N1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzR3JvdXBJZCh0cnVlKTsK
IAotICAgIG1fYXVkaW9GYWN0b3J5ID0gJkFWQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCk7
CisgICAgbV9hdWRpb0ZhY3RvcnkgPSAmQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgp
OwogICAgIG1fdmlkZW9GYWN0b3J5ID0gJkFWVmlkZW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCk7
CiB9CiAKQEAgLTE3NCw3ICsxNzQsNyBAQCBWZWN0b3I8U3RyaW5nPiBSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyTWFjOjpiZXN0U291cmNlc0ZvclR5cGVBbmRDb25zdHJhaW50cyhSZQogCiBSZWFs
dGltZU1lZGlhU291cmNlOjpDYXB0dXJlRmFjdG9yeSogUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ck1hYzo6ZGVmYXVsdEF1ZGlvRmFjdG9yeSgpCiB7Ci0gICAgcmV0dXJuICZBVkF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6ZmFjdG9yeSgpOworICAgIHJldHVybiAmQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6
ZmFjdG9yeSgpOwogfQogCiBSZWFsdGltZU1lZGlhU291cmNlOjpDYXB0dXJlRmFjdG9yeSogUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYzo6ZGVmYXVsdFZpZGVvRmFjdG9yeSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaApp
bmRleCBiNmFkNzVlNzg0NWYxNDAxMDFmZTVmYzU3NjRmNmMzNzllNTY2MzE0Li40ZDFiMWM3YTcz
ZTUzMDFhNDNkMWU0NzdiYmU0ODJmZDExYTgzMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKQEAgLTIyNCw2ICsyMjQs
NyBAQAogI2RlZmluZSBXZWJLaXRFbmFibGVJbmhlcml0VVJJUXVlcnlDb21wb25lbnRQcmVmZXJl
bmNlS2V5IEAiV2ViS2l0RW5hYmxlSW5oZXJpdFVSSVF1ZXJ5Q29tcG9uZW50IgogI2RlZmluZSBX
ZWJLaXRNZWRpYURhdGFMb2Fkc0F1dG9tYXRpY2FsbHlQcmVmZXJlbmNlS2V5IEAiV2ViS2l0TWVk
aWFEYXRhTG9hZHNBdXRvbWF0aWNhbGx5IgogI2RlZmluZSBXZWJLaXRNb2NrQ2FwdHVyZURldmlj
ZXNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQi
CisjZGVmaW5lIFdlYktpdFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZVByZWZlcmVuY2VLZXkg
QCJXZWJLaXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVFbmFibGVkIgogI2RlZmluZSBXZWJL
aXRFbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJX
ZWJLaXRFbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZCIKICNkZWZpbmUgV2Vi
S2l0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRJQ0VD
YW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkIgogI2RlZmluZSBXZWJLaXRNZWRpYUNhcHR1cmVSZXF1
aXJlc1NlY3VyZUNvbm5lY3Rpb25QcmVmZXJlbmNlS2V5IEAiV2ViS2l0TWVkaWFDYXB0dXJlUmVx
dWlyZXNTZWN1cmVDb25uZWN0aW9uIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlcy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJl
ZmVyZW5jZXMubW0KaW5kZXggZDU2OGE2OTY2YmYyZmVlOGMxMzQ3MzAzMzM4NzQzOTA3NDk3ODUx
Zi4uYzFiNjEyYTU3ODQwYWVlOTNhMmM5Yjg2MWM2NzE3N2YyNjA1MzQ1MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCkBAIC02MTksNiArNjE5LDcgQEAg
cHVibGljOgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoQm9vbDpOT10sIFdlYktpdE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRQcmVmZXJlbmNl
S2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgV2ViS2l0TWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uUHJlZmVyZW5jZUtleSwKKyAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgV2ViS2l0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0
dXJlUHJlZmVyZW5jZUtleSwKICNlbmRpZgogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6WUVTXSwgV2ViS2l0U2hhZG93RE9NRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBXZWJLaXRDdXN0b21FbGVtZW50c0VuYWJsZWRQ
cmVmZXJlbmNlS2V5LApAQCAtMjg2Niw2ICsyODY3LDE2IEBAIHN0YXRpYyBOU1N0cmluZyAqY2xh
c3NJQkNyZWF0b3JJRCA9IG5pbDsKICAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5
OldlYktpdE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKIH0KIAorLSAo
Qk9PTCl1c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUKK3sKKyAgICByZXR1cm4gW3NlbGYgX2Jv
b2xWYWx1ZUZvcktleTpXZWJLaXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVQcmVmZXJlbmNl
S2V5XTsKK30KKworLSAodm9pZClzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmU6KEJPT0wp
ZmxhZworeworICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6V2ViS2l0VXNlQVZG
b3VuZGF0aW9uQXVkaW9DYXB0dXJlUHJlZmVyZW5jZUtleV07Cit9CisKIC0gKEJPT0wpZW51bWVy
YXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQKIHsKICAgICByZXR1cm4gW3NlbGYgX2Jv
b2xWYWx1ZUZvcktleTpXZWJLaXRFbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxl
ZFByZWZlcmVuY2VLZXldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJl
ZmVyZW5jZXNQcml2YXRlLmgKaW5kZXggZWU5NWZmODc5MjcyMzE5NGZlODIwYzYzYTllNGQ3ZjE2
MDk2OThjZC4uZjgxMTNjMWM5OTNmNDgyYzM0YmVhNGIyYjY4ZDAxMGYxZTI3MDQ2OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCkBA
IC01MTEsNiArNTExLDkgQEAgZXh0ZXJuIE5TU3RyaW5nICpXZWJQcmVmZXJlbmNlc0NhY2hlTW9k
ZWxDaGFuZ2VkSW50ZXJuYWxOb3RpZmljYXRpb247CiAtICh2b2lkKXNldE1lZGlhQ2FwdHVyZVJl
cXVpcmVzU2VjdXJlQ29ubmVjdGlvbjooQk9PTClmbGFnOwogLSAoQk9PTCltZWRpYUNhcHR1cmVS
ZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247CiAKKy0gKHZvaWQpc2V0VXNlQVZGb3VuZGF0aW9uQXVk
aW9DYXB0dXJlOihCT09MKWZsYWc7CistIChCT09MKXVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVy
ZTsKKwogLSAodm9pZClzZXRTaGFkb3dET01FbmFibGVkOihCT09MKWZsYWc7CiAtIChCT09MKXNo
YWRvd0RPTUVuYWJsZWQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCBj
YWE3MjIzOWM1Yzg4OGFlMTRjYTFkMDQ5NzgxMmI2OTk4Yzc5YmVlLi41Y2JiMDYzNjNhMWNmN2Y0
YjdmYjA4N2E0YjA1NTFjYzhmMDIzOTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCkBAIC0yOTY0LDYgKzI5NjQsNyBAQCBzdGF0aWMgYm9vbCBuZWVkc1NlbGZSZXRhaW5XaGls
ZUxvYWRpbmdRdWlyaygpCiAgICAgc2V0dGluZ3Muc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxl
ZChbcHJlZmVyZW5jZXMgbW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZF0pOwogICAgIHNldHRpbmdz
LnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihbcHJlZmVyZW5jZXMgbWVk
aWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uXSk7CiAgICAgUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRNZWRpYVN0cmVhbUVuYWJsZWQoW3ByZWZlcmVu
Y2VzIG1lZGlhU3RyZWFtRW5hYmxlZF0pOworICAgIHNldHRpbmdzLnNldFVzZUFWRm91bmRhdGlv
bkF1ZGlvQ2FwdHVyZShbcHJlZmVyZW5jZXMgdXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlXSk7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgKaW5kZXggNmMxOWQ1NDQ1ZGRkYmU2NjVj
Y2Q3MmZjODhlZGFjNzNkNWRjNThhZi4uNmVmMTdkYTQxNDlhMWJkOGM2MGM0MGNjOTZlNWE2YjEy
MmZhOTBlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2Vz
RGVmaW5pdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNE
ZWZpbml0aW9ucy5oCkBAIC0yMzcsNiArMjM3LDcgQEAKICAgICBtYWNybyhIVFRQRXF1aXZFbmFi
bGVkLCBodHRwRXF1aXZFbmFibGVkLCBCb29sLCBib29sLCB0cnVlLCAiIiwgIiIpIFwKICAgICBt
YWNybyhNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkLCBtb2NrQ2FwdHVyZURldmljZXNFbmFibGVk
LCBCb29sLCBib29sLCBmYWxzZSwgIiIsICIiKSBcCiAgICAgbWFjcm8oTWVkaWFDYXB0dXJlUmVx
dWlyZXNTZWN1cmVDb25uZWN0aW9uLCBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rp
b24sIEJvb2wsIGJvb2wsIHRydWUsICIiLCAiIikgXAorICAgIG1hY3JvKFVzZUFWRm91bmRhdGlv
bkF1ZGlvQ2FwdHVyZSwgdXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlLCBCb29sLCBib29sLCBm
YWxzZSwgIiIsICIiKSBcCiAgICAgbWFjcm8oRW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNl
c0VuYWJsZWQsIGVudW1lcmF0aW5nQWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVkLCBCb29sLCBi
b29sLCBmYWxzZSwgIiIsICIiKSBcCiAgICAgbWFjcm8oV2ViUlRDTGVnYWN5QVBJRW5hYmxlZCwg
d2ViUlRDTGVnYWN5QVBJRW5hYmxlZCwgQm9vbCwgYm9vbCwgdHJ1ZSwgIiIsICIiKSBcCiAgICAg
bWFjcm8oSUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZCwgaWNlQ2FuZGlkYXRlRmlsdGVyaW5n
RW5hYmxlZCwgQm9vbCwgYm9vbCwgdHJ1ZSwgIiIsICIiKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKaW5kZXggOTdlYzE0OWU0NzZiN2Ji
OGI4M2YwMTZjMDQ1NjRjM2JkZWJkMTdmYi4uMWQwYzEzYjUzOTU3MzNkNWRjZDE2NjBhNTYyOGVj
MjJmMzJiMzE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
UHJlZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1By
ZWZlcmVuY2VzLmNwcApAQCAtMTU5MSw2ICsxNTkxLDE2IEBAIGJvb2wgV0tQcmVmZXJlbmNlc0dl
dE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlCiAgICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPm1lZGlhQ2FwdHVyZVJlcXVp
cmVzU2VjdXJlQ29ubmVjdGlvbigpOwogfQogCit2b2lkIFdLUHJlZmVyZW5jZXNTZXRVc2VBVkZv
dW5kYXRpb25BdWRpb0NhcHR1cmUoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9v
bCBlbmFibGVkKQoreworICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFVzZUFWRm91bmRh
dGlvbkF1ZGlvQ2FwdHVyZShlbmFibGVkKTsKK30KKworYm9vbCBXS1ByZWZlcmVuY2VzR2V0VXNl
QVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYp
Cit7CisgICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZSgpOworfQorCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRGZXRjaEFQSUVuYWJsZWQo
V0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewogICAgIHRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPnNldEZldGNoQVBJRW5hYmxlZChmbGFnKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRl
LmgKaW5kZXggYzVjZGNiYTQ5ZWI5ZjBmMzEyNGU4ZTI3NDAwODk3OWNkNDEwNTY0Zi4uOGJiNzFk
OTZmMTUwMjJiMjIxZDMxM2RmYjE2ZmRhMWFmYjMyNzRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgKQEAg
LTQzMyw2ICs0MzMsMTAgQEAgV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldEVudW1lcmF0
aW5nQWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVkKFdLUHJlZmVyZW4KIFdLX0VYUE9SVCB2b2lk
IFdLUHJlZmVyZW5jZXNTZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oV0tQ
cmVmZXJlbmNlc1JlZiwgYm9vbCk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0TWVk
aWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKFdLUHJlZmVyZW5jZXNSZWYpOwogCisv
LyBEZWZhdWx0cyB0byBmYWxzZS4KK1dLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRVc2VB
VkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoV0tQcmVmZXJlbmNlc1JlZiwgYm9vbCk7CitXS19FWFBP
UlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKFdLUHJl
ZmVyZW5jZXNSZWYpOworICAgIAogLy8gRGVmYXVsdHMgdG8gZmFsc2UKIFdLX0VYUE9SVCB2b2lk
IFdLUHJlZmVyZW5jZXNTZXRGZXRjaEFQSUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiwgYm9vbCBm
bGFnKTsKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRGZXRjaEFQSUVuYWJsZWQoV0tQ
cmVmZXJlbmNlc1JlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHAKaW5kZXggNzBhZmM3
YTIwY2E5YTJmNzg2NTczMWI4Y2IxOWE5YjVjMzkwYzRkYS4uMTY4Njg4YjBjYTJkNWIwMDcyODQ5
OTBiZmFlNzgyMDVhNzkxYzM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcApAQCAt
MTI4LDcgKzEyOCw3IEBAIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6On5Vc2VyTWVkaWFD
YXB0dXJlTWFuYWdlclByb3h5KCkKIHZvaWQgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6
Y3JlYXRlTWVkaWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNlV2l0aENvbnN0cmFpbnRzKHVpbnQ2NF90
IGlkLCBjb25zdCBDYXB0dXJlRGV2aWNlJiBkZXZpY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWludHNE
YXRhJiBjb25zdHJhaW50c0RhdGEsIGJvb2wmIHN1Y2NlZWRlZCwgU3RyaW5nJiBpbnZhbGlkQ29u
c3RyYWludHMpCiB7CiAgICAgYXV0byBjb25zdHJhaW50cyA9IE1lZGlhQ29uc3RyYWludHNJbXBs
OjpjcmVhdGUoY29uc3RyYWludHNEYXRhKTsKLSAgICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJj
ZT4gc291cmNlID0gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuZGVmYXVs
dEF1ZGlvRmFjdG9yeSgpLT5jcmVhdGVNZWRpYVNvdXJjZUZvckNhcHR1cmVEZXZpY2VXaXRoQ29u
c3RyYWludHMoZGV2aWNlLCBjb25zdHJhaW50cy5wdHIoKSwgaW52YWxpZENvbnN0cmFpbnRzKTsK
KyAgICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gc291cmNlID0gUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuYXVkaW9GYWN0b3J5KCktPmNyZWF0ZU1lZGlhU291cmNl
Rm9yQ2FwdHVyZURldmljZVdpdGhDb25zdHJhaW50cyhkZXZpY2UsIGNvbnN0cmFpbnRzLnB0cigp
LCBpbnZhbGlkQ29uc3RyYWludHMpOwogICAgIHN1Y2NlZWRlZCA9ICEhc291cmNlOwogICAgIAog
ICAgIGlmIChzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAppbmRl
eCAyOTRkYmIxOGNhNjgwMDU0NWM1Yjc1MWU5YWExNTc2OWJhODQzODIzLi5mMTE1YWJhZmRjNzU0
NTU2YWY3MjU0MzM3YjQxYWRhNTE1NmRkNTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXJQcm94eS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHku
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL01lZGlhQ29uc3RyYWludHNJbXBsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Nb2Nr
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVhbHRpbWVN
ZWRpYVNvdXJjZS5oPgpAQCAtMzI5LDYgKzMzMCw5IEBAIHZvaWQgVXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHk6OnN5bmNXaXRoV2ViQ29yZVByZWZzKCkgY29uc3QKICAgICAv
LyB0aGlzIGlzIGEgbm9vcCBpZiB0aGUgcHJlZmVyZW5jZSBoYXNuJ3QgY2hhbmdlZCBzaW5jZSB0
aGUgbGFzdCB0aW1lIHRoaXMgd2FzIGNhbGxlZC4KICAgICBib29sIG1vY2tEZXZpY2VzRW5hYmxl
ZCA9IG1fcGFnZS5wcmVmZXJlbmNlcygpLm1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoKTsKICAg
ICBXZWJDb3JlOjpNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2V0TW9ja1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkKG1vY2tEZXZpY2VzRW5hYmxlZCk7CisKKyAgICBib29s
IHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSA9IG1fcGFnZS5wcmVmZXJlbmNlcygpLnVzZUFW
Rm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSgpOworICAgIFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1h
bmFnZXI6OnNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSh1c2VBVkZvdW5kYXRpb25BdWRp
b0NhcHR1cmUpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAppbmRleCA0MzVhOWVhMWFjYmE5MjJjMGJiZTNmNzI2MmExY2IwODEw
NDk2YjQwLi4yNTlhOTYyODQ1NjhmZjFmMTM2MjE3MTgyMzUxMWMxNmJlMGVlMTEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zMjQwLDYg
KzMyNDAsNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZl
cmVuY2VzU3RvcmUmIHN0b3JlKQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgc2V0dGlu
Z3Muc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXko
V2ViUHJlZmVyZW5jZXNLZXk6Om1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRLZXkoKSkpOwogICAg
IHNldHRpbmdzLnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihzdG9yZS5n
ZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6Om1lZGlhQ2FwdHVyZVJlcXVpcmVz
U2VjdXJlQ29ubmVjdGlvbktleSgpKSk7CisgICAgc2V0dGluZ3Muc2V0VXNlQVZGb3VuZGF0aW9u
QXVkaW9DYXB0dXJlKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6
dXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlS2V5KCkpKTsKICNlbmRpZgogCiAgICAgc2V0dGlu
Z3Muc2V0U2hvdWxkQ29udmVydFBvc2l0aW9uU3R5bGVPbkNvcHkoc3RvcmUuZ2V0Qm9vbFZhbHVl
Rm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpzaG91bGRDb252ZXJ0UG9zaXRpb25TdHlsZU9uQ29w
eUtleSgpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306364</attachid>
            <date>2017-04-05 21:16:19 -0700</date>
            <delta_ts>2017-04-05 21:46:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170112-20170405211618.patch</filename>
            <type>text/plain</type>
            <size>54625</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg2M2JlNThiOWFjZDEz
MTFiNWQ1NmQ3N2U2MzgxNjM1NzJkODQzNy4uNzMwYTg1Njg4YzY3NTY2ZDFlN2JjYjlkZWZhZmEx
NTViNTRhYmU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE3LTA0LTA1ICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDExMgorICAgICAgICByZGFyOi8vcHJvYmxlbS8zMDI5MzMzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNl
IHRoaXMgcHJvdmlkZXMgdGhlIHNhbWUgZnVuY2l0b25hbGl0eSBhcyBBVkF1ZGlvQ2FwdHVyZVNv
dXJjZS4gCisgICAgICAgIEZ1bmNpb25hbGl0eSBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Qg
Y2FzZXMuCisKKyAgICAgICAgQWRkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UgZm9yIGF1ZGlvIGNh
cHR1cmUuIEFuZCB1c2UgaXQgYnkgZGVmYXVsdCBpbiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLgor
ICAgICAgICBBZGQgVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlIHNldHRpbmcgdG8gc3dpdGNo
IGJhY2sgdG8gQVZGb3VuZGF0aW9uIGZvciBhdWRpbyBjYXB0dXJlLgorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnVzZUFWRm91bmRhdGlvbkF1ZGlvQ2Fw
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0VXNlQVZGb3VuZGF0aW9uQXVk
aW9DYXB0dXJlKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNldFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRp
b0NhcHR1cmVTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJl
U291cmNlOjpmYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6fkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJlZmVycmVkU2FtcGxlUmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcmVmZXJyZWRJT0J1ZmZlckR1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3Vy
ZU1pY3JvcGhvbmVQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmFkZE1pY3JvcGhvbmVEYXRhQ29uc3VtZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3ZlTWljcm9waG9uZURhdGFDb25zdW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRFY2hvQ2FuY2Vs
bGF0aW9uU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnJlbW92ZUVjaG9DYW5jZWxsYXRpb25Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6Y2hlY2tUaW1lc3RhbXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzcGVha2VyQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6Om1pY3JvcGhvbmVD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZh
dWx0T3V0cHV0RGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmRlZmF1bHRJbnB1dERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpzZXR0aW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYzo6UmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck1hYyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyTWFjOjpkZWZhdWx0QXVkaW9GYWN0b3J5KToKKwogMjAxNy0wMy0yOSAgTXlsZXMg
Qy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFRyeSB0byBub3Jt
YWxpemUgdmFyaWF0aW9uIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDRjOTE3ZDMwZTBmOTQ2
YTMzMGIyNGY3YjU4MWJkOWViNDAzZmNmOTMuLmRjYjViNjM3YjQzNzY2YmRhYTUwMzYzM2VlN2Fi
NTQ4ZTY3NWQ0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxNy0wNC0w
NSAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIENvcmVB
dWRpb0NhcHR1cmVTb3VyY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzAxMTIKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMzAyOTMzMzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVXNlQVZGb3Vu
ZGF0aW9uQXVkaW9DYXB0dXJlIHByZWZlcmVuY2UgdG8gc3dpdGNoIGJhY2sgZnJvbSB0aGUgbmV3
IGRlZmF1bHQgb2YgQ29yZUF1ZGlvLgorCisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAg
ICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFsaXplXSk6CisgICAgICAgICgtW1dlYlByZWZl
cmVuY2VzIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZV0pOgorICAgICAgICAoLVtXZWJQcmVm
ZXJlbmNlcyBzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmU6XSk6CisgICAgICAgICogV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcu
bW06CisgICAgICAgICgtW1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZDpdKToKKwogMjAxNy0w
My0yNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFNhdmluZyBmaWxlcyBzaG91bGQgbm90IHN1Z2dlc3QgdGhlIHRvcCBsZXZl
bCBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxMDkzOWNmMWM5ZWNlMDhiZDhmODgxOTU5NDFhZjg3
YmI1NGJjYmRhLi4zMjhhNjM1OTlhOWNlYTYxMzg1YjE2NDQxNTAyZjA5NGMzNTRmNmY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTctMDQtMDUgIEplcmVteSBKb25lcyAgPGplcmVt
eWpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTEyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzMwMjkzMzM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSBwcmVm
ZXJlbmNlIHRvIHN3aXRjaCBiYWNrIGZyb20gdGhlIG5ldyBkZWZhdWx0IG9mIENvcmVBdWRpby4K
KworICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV0tQcmVmZXJl
bmNlc1NldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSk6CisgICAgICAgIChXS1ByZWZlcmVu
Y2VzR2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVz
ZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OmNyZWF0ZU1lZGlhU291cmNlRm9yQ2FwdHVyZURl
dmljZVdpdGhDb25zdHJhaW50cyk6CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OnN5bmNXaXRoV2ViQ29yZVByZWZzKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKwogMjAxNy0wMy0yOSAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIFBhZ2VD
bGllbnQ6OnJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyYTRhYThlNGIzYmI1
ODU0MjEyNThkZWU3YjY0ZTEwMzFhNGNkNjRhLi5kNTJlN2MzNDA2NWFjYTFiYjI1NGNlOTY2MTZi
YjRmYmQ2MmVhNjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC03Myw3ICs3Myw3IEBACiAJCTA3MDMzNEU5MTQ1QTFGMzYwMDhE
OEQ0NSAvKiBKU1RyYWNrQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3MDMzNEU4MTQ1QTFGMzUwMDhEOEQ0NSAvKiBKU1RyYWNrQ3VzdG9t
LmNwcCAqLzsgfTsKIAkJMDcwMzYzRTAxODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJl
U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
NzAzNjNEODE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLzsgfTsK
IAkJMDcwMzYzRTExODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzRDkxODFB
MUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tICovOyB9OwotCQkwNzAzNjNF
MjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREExODFBMUNEQzAwQzA3
NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgfTsKKwkJMDcwMzYzRTIxODFBMUNE
QzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0RBMTgxQTFDREMwMEMwNzRBNSAvKiBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMDcwMzYzRTMxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURl
dmljZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzAzNjNEQjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5t
bSAqLzsgfTsKIAkJMDcwMzYzRTQxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAz
NjNEQzE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCAqLzsgfTsKIAkJ
MDcwMzYzRTUxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREQxODFBMUNE
QzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tICovOyB9OwpAQCAtMjc0LDcgKzI3
NCw3IEBACiAJCTA3QjVBMzBEMTQ2ODdENzEwMEE4MUVDRSAvKiBKU1RleHRUcmFja0xpc3RDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdC
NUEzMEMxNDY4N0Q3MTAwQTgxRUNFIC8qIEpTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAgKi87IH07
CiAJCTA3QjcxMTZEMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0I3MTE2QTFEODk5RTYzMDA5
RjBGRkIgLyogQ2FwdHVyZURldmljZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTA3QjcxMTZFMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2
aWNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwN0I3MTE2QjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuY3Bw
ICovOyB9OwotCQkwN0I3MTE2RjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Qjcx
MTZDMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovOyB9OworCQkw
N0I3MTE2RjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QjcxMTZDMUQ4OTlFNjMw
MDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3QzA0NkMzMUU0MjUwOEIwMDcyMDFFNyAvKiBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NTcxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5jcHAgKi87IH07CiAJCTA3QzA0NkM0MUU0MjUwOEIwMDcyMDFFNyAvKiBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3M0I4NzU4MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwN0MwNDZDODFFNDI1MTU1MDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRp
YVN0cmVhbUNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwN0MwNDZDNjFFNDI1MTJGMDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0
cmVhbUNvY29hLmggKi87IH07CkBAIC0xNjYxLDYgKzE2NjEsNyBAQAogCQkzRjQyQjMxRTE4ODEx
OTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MkIzMUMxODgxMTkx
QjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLzsgfTsK
IAkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0Lm1tICovOyB9OwogCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTNGRjFGQTY2MUU3MzUwRkQwMEMxMDAyRiAvKiBDb3JlQXVkaW9DYXB0dXJl
U291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCAq
LzsgfTsKIAkJM0ZGODEzQTcxREJBODY0MDAwOUJGMDAxIC8qIFBvaW50ZXJMb2NrQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNGQzQz
NEYxOTI0MDZBOTAwQTBEM0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUw
MDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdl
YktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CiAJCTNGRkZGOUE5MTU5RDlBNTUwMDIwQkJE
NSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNGRkZGOUE3MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuaCAqLzsgfTsKQEAgLTkyMTgsNiArOTIxOSw4IEBACiAJCTNGMkIzM0UzMTY1
QUJEMzUwMEUzOTg3QyAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFdlYktpdENTU1ZpZXdwb3J0UnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTNGMkIzM0U5MTY1QUYxNTUwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdwb3J0
UnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdENT
U1ZpZXdwb3J0UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGMkIzM0VB
MTY1QUYxNTUwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzRjNCQjU4MjFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJM0YzQkI1ODMxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjQyQjMxQjE4ODExOTFCMDAyNzhBQUMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjQyQjMxQzE4ODExOTFCMDAyNzhBQUMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MDcyLDYgKzE2MDc1LDggQEAKIAkJCQkw
NzAzNjNERDE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0gKi8sCiAJ
CQkJMDcwMzYzREUxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLmggKi8s
CiAJCQkJMDcwMzYzREYxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLm1t
ICovLAorCQkJCTNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291
cmNlLmNwcCAqLywKKwkJCQkzRjNCQjU4MzFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oICovLAogCQkJCTA3NDRFQ0VCMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZU1hYy5oICovLAogCQkJCTA3NDRFQ0VDMUUwQzRBRTUwMDBEMDk0NCAv
KiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5tbSAqLywKIAkJCQkwN0VFNzZFRDFCRUE2MTk4
MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaCAqLywKQEAgLTMwNTQ0LDYg
KzMwNTQ5LDcgQEAKIAkJCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3RvcmFn
ZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3NDZBRjIxMTRGNERERTYwMDNFN0E3MiAvKiBD
b29yZGluYXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NDM4MTdGRjFBOTFCMkY4MDA2RTA0
RjIgLyogQ29yZU1lZGlhU29mdExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJM0ZGMUZBNjYx
RTczNTBGRDAwQzEwMDJGIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0Q3RDMzNDcxQzdBMTZCRjAwMDQxMjkzIC8qIENvcmVWaWRlb1NvZnRMaW5rLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOTUwMEU4MjA1NkIwMEIyNTk2NSAvKiBDb3VudGVy
RGlyZWN0aXZlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzkyRjE1MDBBRDE4NjIzMDA2OTFC
RDQgLyogQ291bnRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCmluZGV4IDFiM2UyMmJmMWJmN2FjMzQyOTFhMDdlMTIwNjU1ZDViNmUyODQ5MjkuLjJjYzRj
NDA1MTFhMDc0ODUyZWM0MDJiNmZmOGJhNDhkODk1MDA5NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKIAorI2luY2x1ZGUgIkFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKICNpbmNs
dWRlICJBdWRpb1Nlc3Npb24uaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgpAQCAtOTQsNiArOTUsNyBAQCBib29s
IFNldHRpbmdzOjpnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCA9IGZhbHNlOwogI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCiBib29sIFNldHRpbmdzOjpnTW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxl
ZCA9IGZhbHNlOwogYm9vbCBTZXR0aW5nczo6Z01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29u
bmVjdGlvbiA9IHRydWU7Citib29sIFNldHRpbmdzOjpnVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0
dXJlID0gZmFsc2U7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKQEAgLTYxNSw2ICs2MTcs
MTcgQEAgdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0
aW9uKGJvb2wgbWVkaWFDYXB0dXJlUmVxdWlyZXMKIHsKICAgICBnTWVkaWFDYXB0dXJlUmVxdWly
ZXNTZWN1cmVDb25uZWN0aW9uID0gbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9u
OwogfQorCitib29sIFNldHRpbmdzOjp1c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoKQorewor
ICAgIHJldHVybiBnVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlOworfQorCit2b2lkIFNldHRp
bmdzOjpzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoYm9vbCB1c2VBVkZvdW5kYXRpb25B
dWRpb0NhcHR1cmUpCit7CisgICAgZ1VzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSA9IHVzZUFW
Rm91bmRhdGlvbkF1ZGlvQ2FwdHVyZTsKKyAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXRV
c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUodXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKTsK
K30KICNlbmRpZgogCiB2b2lkIFNldHRpbmdzOjpzZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dp
bmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAppbmRleCA5ZjM3MDc1
NWIwYjgyYmZlODE5MjgwYTU5ODE0MGRhMzlmNTgyMzhkLi44NjNiZDEyZWFmMTIxYTVmY2UwYmQ4
ZWJiZWMyZGIxZTM2MDJiMzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCkBAIC0zMTAsNiArMzEw
LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5l
Y3Rpb24oKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRNZWRpYUNh
cHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9vbCk7CisKKyAgICBzdGF0aWMgYm9vbCB1
c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoYm9vbCk7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShBUFBMRV9QQVkpCkBAIC00MTUsNiArNDE4LDcgQEAgcHJpdmF0ZToKICAgICBTdHJp
bmcgbV9tZWRpYURldmljZUlkZW50aWZpZXJTdG9yYWdlRGlyZWN0b3J5OwogICAgIHN0YXRpYyBi
b29sIGdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOwogICAgIHN0YXRpYyBib29sIGdNZWRpYUNh
cHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247CisgICAgc3RhdGljIGJvb2wgZ1VzZUFWRm91
bmRhdGlvbkF1ZGlvQ2FwdHVyZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oCmluZGV4IDI0ZjczYjA0ZGMzYTViODE2OGEzMzQ3
ZmEwY2NhMmEyMjdjYTQxNGYuLmM2MGNhM2I4NTJjNjQwNzczMjc4MmIwZGEyNzhjM2I4ZmVjNGI3
ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9B
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaApAQCAtNDUsNiArNDUsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyIGZpbmFsIDog
cHVibGljIENhcHR1cmVEZXZpY2VNYW5hZ2VyIHsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0
cm95ZWQ8QVZDYXB0dXJlRGV2aWNlTWFuYWdlcj47CiBwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHZvaWQgc2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKGJvb2wpOworCiAg
ICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBjYXB0dXJlRGV2aWNlcygpIGZpbmFsOwogCiAgICAg
c3RhdGljIEFWQ2FwdHVyZURldmljZU1hbmFnZXImIHNpbmdsZXRvbigpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1h
bmFnZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0
dXJlRGV2aWNlTWFuYWdlci5tbQppbmRleCAzZjAzNjgzMmQ1MGRhNmEwMWQzNTFlYmFjOGZiMjJi
YzBmZTI2ODdmLi5jYmMzNzE3NjZiOWUzMDFiNjM2NDA3ZDZiMjRhNzg4ZmY1ZDdlNjM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJl
RGV2aWNlTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9y
dCAiQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCIKICNpbXBvcnQgIkFWVmlkZW9DYXB0dXJlU291cmNl
LmgiCiAjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCisjaW1wb3J0ICJDb3JlQXVkaW9D
YXB0dXJlU291cmNlLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnN0
cmFpbnRzLmgiCiAjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlLmgiCkBAIC05Miw2ICs5Mywx
OCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit2
b2lkIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVy
ZShib29sIGVuYWJsZWQpCit7CisgICAgc3RhdGljIGJvb2wgYWN0aXZlID0gZmFsc2U7CisgICAg
aWYgKGFjdGl2ZSAhPSBlbmFibGVkKSB7CisgICAgICAgIGFjdGl2ZSA9IGVuYWJsZWQ7CisgICAg
ICAgIGlmIChhY3RpdmUpCisgICAgICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpz
aW5nbGV0b24oKS5zZXRBdWRpb0ZhY3RvcnkoQVZBdWRpb0NhcHR1cmVTb3VyY2U6OmZhY3Rvcnko
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6
OnNpbmdsZXRvbigpLnNldEF1ZGlvRmFjdG9yeShDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0
b3J5KCkpOworICAgIH0KK30KKwogVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjpjYXB0dXJlRGV2aWNlcygpCiB7CiAgICAgaWYgKCFpc0F2YWlsYWJsZSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVB
dWRpb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2NDNkNmZkMmI4
YmY1OTBkYjlhNTc5ODI5NjM1NGZjOTZmOGM3MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5j
cHAKQEAgLTAsMCArMSw1MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZS5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkF1ZGlv
U2FtcGxlQnVmZmVyTGlzdC5oIgorI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIK
KyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Db252ZXJ0ZXIuaD4KKyNpbmNsdWRlIDxBdWRp
b1VuaXQvQXVkaW9Vbml0Lmg+CisjaW5jbHVkZSA8Q29yZU1lZGlhL0NNU3luYy5oPgorI2luY2x1
ZGUgPG1hY2gvbWFjaF90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlICJDb3JlTWVkaWFTb2Z0TGluay5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKworY2xhc3MgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3Rv
cnkgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6Q2FwdHVyZUZhY3RvcnkgeworcHVibGlj
OgorICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGVNZWRpYVNvdXJjZUZvckNh
cHR1cmVEZXZpY2VXaXRoQ29uc3RyYWludHMoY29uc3QgQ2FwdHVyZURldmljZSYgY2FwdHVyZURl
dmljZSwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMsIFN0cmluZyYgaW52YWxp
ZENvbnN0cmFpbnQpIGZpbmFsIHsKKyAgICAgICAgcmV0dXJuIENvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmNyZWF0ZShjYXB0dXJlRGV2aWNlLCBjb25zdHJhaW50cywgaW52YWxpZENvbnN0cmFpbnQp
OworICAgIH0KK307CisKK2NvbnN0IFVJbnQzMiBvdXRwdXRCdXMgPSAwOworY29uc3QgVUludDMy
IGlucHV0QnVzID0gMTsKKworUmVmUHRyPENvcmVBdWRpb0NhcHR1cmVTb3VyY2U+IENvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShjb25zdCBDYXB0dXJlRGV2aWNlJiBkZXZpY2VJbmZvLCBj
b25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cywgU3RyaW5nJiBpbnZhbGlkQ29uc3Ry
YWludCkKK3sKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKG5ldyBDb3JlQXVkaW9DYXB0dXJl
U291cmNlKGRldmljZUluZm8pKTsKKyAgICBpZiAoY29uc3RyYWludHMpIHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBzb3VyY2UtPmFwcGx5Q29uc3RyYWludHMoKmNvbnN0cmFpbnRzKTsKKyAgICAg
ICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgaW52YWxpZENvbnN0cmFpbnQgPSByZXN1bHQu
dmFsdWUoKS5maXJzdDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHNvdXJjZTsKK30KKworCitSZWFsdGltZU1lZGlhU291cmNlOjpD
YXB0dXJlRmFjdG9yeSYgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5PiBmYWN0
b3J5OworICAgIHJldHVybiBmYWN0b3J5LmdldCgpOworfQorCisKK0NvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNl
SW5mbykKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZW1wdHlTdHJpbmcoKSwgUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8sIGRldmljZUluZm8ubGFiZWwoKSkKKyAgICAsIG1fY2Fw
dHVyZURldmljZUlEKDApCit7CisgICAgLy8gRklYTUU6IHVzZSBkZXZpY2VJbmZvIHRvIHNldCB0
aGUgbV9jYXB0dXJlRGV2aWNlSUQKKworICAgIHNldFBlcnNpc3RlbnRJRChkZXZpY2VJbmZvLnBl
cnNpc3RlbnRJZCgpKTsKKyAgICBzZXRNdXRlZCh0cnVlKTsKKworICAgIG1fY3VycmVudFNldHRp
bmdzLnNldFZvbHVtZSgxLjApOworICAgIG1fY3VycmVudFNldHRpbmdzLnNldFNhbXBsZVJhdGUo
cHJlZmVycmVkU2FtcGxlUmF0ZSgpKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXREZXZpY2VJ
ZChpZCgpKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRFY2hvQ2FuY2VsbGF0aW9uKHRydWUp
OworCisgICAgbWFjaF90aW1lYmFzZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUluZm87CisgICAgbWFj
aF90aW1lYmFzZV9pbmZvKCZ0aW1lYmFzZUluZm8pOworICAgIG1fRFRTQ29udmVyc2lvblJhdGlv
ID0gMWUtOSAqIHN0YXRpY19jYXN0PGRvdWJsZT4odGltZWJhc2VJbmZvLm51bWVyKSAvIHN0YXRp
Y19jYXN0PGRvdWJsZT4odGltZWJhc2VJbmZvLmRlbm9tKTsKK30KKworQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6fkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoKQoreworICAgIHN1c3BlbmQoKTsKKwor
ICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW50ZXJuYWxTdGF0ZUxvY2spOworCisg
ICAgaWYgKG1faW9Vbml0KQorICAgICAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZSht
X2lvVW5pdCk7CisKKyAgICBtX2lvVW5pdE5hbWUgPSBlbXB0eVN0cmluZygpOworCisgICAgbV9t
aWNyb3Bob25lU2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX3NwZWFrZXJTYW1wbGVCdWZm
ZXIgPSBudWxscHRyOworCisgICAgbV9zcGVha2VyUHJvY3NDYWxsZWQgPSAwOworICAgIG1fbWlj
cm9waG9uZVByb2NzQ2FsbGVkICA9IDA7CisgICAgbV9sYXRlc3RNaWNUaW1lU3RhbXAgPSAwOwor
CisgICAgbV9hY3RpdmVTb3VyY2VzLmNsZWFyKCk7CisgICAgbV9wZW5kaW5nU291cmNlcy5jbGVh
cigpOworCisgICAgbV9zcGVha2VyU2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKKworICAgIG1faW9V
bml0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBtX2lvVW5pdFN0YXJ0ZWQgID0gZmFsc2U7Cit9
CisKK2RvdWJsZSBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcmVmZXJyZWRTYW1wbGVSYXRlKCkK
K3sKKyAgICAvLyBGSVhNRTogR2V0IHRoZSBwcmVmZXJyZWQgcmF0ZSBkeW5hbWljYWxseSwga0FV
Vm9pY2VJT1Byb3BlcnR5X1ByZWZlcnJlZEhXU2FtcGxlUmF0ZS8gW1tBVkF1ZGlvU2Vzc2lvbiBz
aGFyZWRJbnN0YW5jZV0gcHJlZmVycmVkU2FtcGxlUmF0ZV0KKyAgICBzdGF0aWMgY29uc3QgZmxv
YXQgcHJlZmVycmVkUmF0ZSA9IDI0MDAwLjsKKyAgICByZXR1cm4gcHJlZmVycmVkUmF0ZTsKK30K
KworZG91YmxlIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByZWZlcnJlZElPQnVmZmVyRHVyYXRp
b24oKQoreworICAgIC8vIEZJWE1FOiBHZXQgdGhlIHByZWZlcnJlZCBkdXJhdGlvbiBkeW5hbWlj
YWxseSAtIGtBVVZvaWNlSU9Qcm9wZXJ0eV9QcmVmZXJyZWRIV0Jsb2NrU2l6ZUluU2Vjb25kcyAv
IFtbQVZBdWRpb1Nlc3Npb24gc2hhcmVkSW5zdGFuY2VdIHByZWZlcnJlZElPQnVmZmVyRHVyYXRp
b25dCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHByZWZlcnJlZER1cmF0aW9uID0gMC4wMjsKKyAg
ICByZXR1cm4gcHJlZmVycmVkRHVyYXRpb247Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCkKK3sKKyAgICBBVVJlbmRlckNhbGxi
YWNrU3RydWN0IGNhbGxiYWNrID0geyBtaWNyb3Bob25lQ2FsbGJhY2ssIHRoaXMgfTsKKyAgICBh
dXRvIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0
UHJvcGVydHlfU2V0SW5wdXRDYWxsYmFjaywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRC
dXMsICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7CisgICAgaWYgKGVycikgeworICAgICAg
ICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVNaWNyb3Bob25l
UHJvYyglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgbWljIHByb2MsIGVycm9yICVkICglLjRz
KSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7Cisg
ICAgfQorCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG1pY3JvcGhvbmVQcm9jRm9y
bWF0ID0geyB9OworCisgICAgVUludDMyIHNpemUgPSBzaXplb2YobWljcm9waG9uZVByb2NGb3Jt
YXQpOworICAgIGVyciA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0
UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LCBpbnB1dEJ1cywg
Jm1pY3JvcGhvbmVQcm9jRm9ybWF0LCAmc2l6ZSk7CisgICAgaWYgKGVycikgeworICAgICAgICBM
T0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVNaWNyb3Bob25lUHJv
YyglcCkgdW5hYmxlIHRvIGdldCBvdXRwdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMp
IiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAg
ICB9CisKKyAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXIgPSBBdWRpb1NhbXBsZUJ1ZmZlckxp
c3Q6OmNyZWF0ZShtaWNyb3Bob25lUHJvY0Zvcm1hdCwgcHJlZmVycmVkSU9CdWZmZXJEdXJhdGlv
bigpICogbWljcm9waG9uZVByb2NGb3JtYXQubVNhbXBsZVJhdGUgKiAyKTsKKyAgICBtX21pY3Jv
cGhvbmVQcm9jRm9ybWF0ID0gbWljcm9waG9uZVByb2NGb3JtYXQ7CisKKyAgICByZXR1cm4gZXJy
OworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVTcGVha2Vy
UHJvYygpCit7CisgICAgLy8gU2V0IHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgd2Ugc3VwcGx5IHRv
IHRoZSBvdXRwdXQgc3RyZWFtLgorCisgICAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBjYWxsYmFj
ayA9IHsgc3BlYWtlckNhbGxiYWNrLCB0aGlzIH07CisgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRT
ZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNr
LCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBvdXRwdXRCdXMsICZjYWxsYmFjaywgc2l6ZW9mKGNh
bGxiYWNrKSk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpjb25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIHNldCB2cGlv
IHVuaXQgc3BlYWtlciBwcm9jLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNo
YXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbiBzcGVha2VyUHJvY0Zvcm1hdCA9IHsgfTsKKworICAgIFVJbnQzMiBz
aXplID0gc2l6ZW9mKHNwZWFrZXJQcm9jRm9ybWF0KTsKKyAgICBlcnIgID0gQXVkaW9Vbml0R2V0
UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRp
b1VuaXRTY29wZV9JbnB1dCwgb3V0cHV0QnVzLCAmc3BlYWtlclByb2NGb3JtYXQsICZzaXplKTsK
KyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBm
b3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Cisg
ICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbV9zcGVha2VyU2FtcGxlQnVmZmVyID0g
QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpjcmVhdGUoc3BlYWtlclByb2NGb3JtYXQsIHByZWZlcnJl
ZElPQnVmZmVyRHVyYXRpb24oKSAqIHNwZWFrZXJQcm9jRm9ybWF0Lm1TYW1wbGVSYXRlICogMik7
CisgICAgbV9zcGVha2VyUHJvY0Zvcm1hdCA9IHNwZWFrZXJQcm9jRm9ybWF0OworCisgICAgcmV0
dXJuIGVycjsKK30KKwordWludDY0X3QgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6YWRkTWljcm9w
aG9uZURhdGFDb25zdW1lcihNaWNyb3Bob25lRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2spCit7Cisg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wZW5kaW5nU291cmNlUXVldWVMb2NrKTsK
KyAgICBtX21pY3JvcGhvbmVEYXRhQ2FsbGJhY2tzLmFkZCgrK21fbmV4dE1pY3JvcGhvbmVEYXRh
Q2FsbGJhY2tJRCwgY2FsbGJhY2spOworCisgICAgcmV0dXJuIG1fbmV4dE1pY3JvcGhvbmVEYXRh
Q2FsbGJhY2tJRDsKK30KKwordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZW1vdmVNaWNy
b3Bob25lRGF0YUNvbnN1bWVyKHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9wZW5kaW5nU291cmNlUXVldWVMb2NrKTsKKyAgICBtX21pY3Jv
cGhvbmVEYXRhQ2FsbGJhY2tzLnJlbW92ZShjYWxsYmFja0lEKTsKK30gICAgCisKK3ZvaWQgQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6YWRkRWNob0NhbmNlbGxhdGlvblNvdXJjZShBdWRpb1NhbXBs
ZURhdGFTb3VyY2UmIHNvdXJjZSkKK3sKKyAgICBpZiAoIXNvdXJjZS5zZXRPdXRwdXRGb3JtYXQo
bV9zcGVha2VyUHJvY0Zvcm1hdCkpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZTo6YWRkRWNob0NhbmNlbGxhdGlvblNvdXJjZTogc291cmNlICVwIGNvbmZpZ3Vy
ZU91dHB1dCBmYWlsZWQiLCAmc291cmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcGVuZGluZ1NvdXJjZVF1ZXVlTG9jayk7Cisg
ICAgbV9wZW5kaW5nU291cmNlcy5hcHBlbmQoeyBRdWV1ZUFjdGlvbjo6QWRkLCBzb3VyY2UgfSk7
Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3ZlRWNob0NhbmNlbGxhdGlv
blNvdXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmIHNvdXJjZSkKK3sKKyAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2spOworICAgIG1fcGVuZGlu
Z1NvdXJjZXMuYXBwZW5kKHsgUXVldWVBY3Rpb246OlJlbW92ZSwgc291cmNlIH0pOworfQorCit2
b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1Rp
bWVTdGFtcCYgdGltZVN0YW1wLCB1aW50NjRfdCBzYW1wbGVUaW1lLCBkb3VibGUgaG9zdFRpbWUp
Cit7CisgICAgaWYgKCF0aW1lU3RhbXAubVNhbXBsZVRpbWUgfHwgc2FtcGxlVGltZSA9PSBtX2xh
dGVzdE1pY1RpbWVTdGFtcCB8fCAhaG9zdFRpbWUpCisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OmNoZWNrVGltZXN0YW1wczogdW51c3VhbCB0aW1lc3RhbXBzLCBz
YW1wbGUgdGltZSA9ICVsbGQsIHByZXZpb3VzIHNhbXBsZSB0aW1lID0gJWxsZCwgaG9zdFRpbWUg
JWYiLCBzYW1wbGVUaW1lLCBtX2xhdGVzdE1pY1RpbWVTdGFtcCwgaG9zdFRpbWUpOworfQorCitP
U1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9V
bml0UmVuZGVyQWN0aW9uRmxhZ3MmIC8qaW9BY3Rpb25GbGFncyovLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCYgdGltZVN0YW1wLCBVSW50MzIgLyppbkJ1c051bWJlciovLCBVSW50MzIgaW5OdW1iZXJG
cmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQoreworICAgIC8vIENhbGxlZCB3aGVuIHRo
ZSBhdWRpbyB1bml0IG5lZWRzIGRhdGEgdG8gcGxheSB0aHJvdWdoIHRoZSBzcGVha2Vycy4KKyAg
ICArK21fc3BlYWtlclByb2NzQ2FsbGVkOworCisgICAgaWYgKG1fc3BlYWtlclNhbXBsZUJ1ZmZl
ci0+c2FtcGxlQ2FwYWNpdHkoKSA8IGluTnVtYmVyRnJhbWVzKSB7CisgICAgICAgIExPRyhNZWRp
YSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YTogc3BlYWtlciBz
YW1wbGUgYnVmZmVyIHNpemUgKCVkKSB0b28gc21hbGwgZm9yIGFtb3VudCBvZiBzYW1wbGUgZGF0
YSByZXF1ZXN0ZWQgKCVkKSEiLCBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPnNhbXBsZUNhcGFjaXR5
KCksIChpbnQpaW5OdW1iZXJGcmFtZXMpOworICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJy
b3I7CisgICAgfQorCisgICAgLy8gQWRkL3JlbW92ZSBzb3VyY2VzIGZyb20gdGhlIHF1ZXVlLCBi
dXQgb25seSBpZiB3ZSBnZXQgdGhlIGxvY2sgaW1tZWRpYXRlbHkuIE90aGVyd2lzZSB0cnkKKyAg
ICAvLyBhZ2FpbiBvbiB0aGUgbmV4dCBjYWxsYmFjay4KKyAgICB7CisgICAgICAgIHN0ZDo6dW5p
cXVlX2xvY2s8TG9jaz4gbG9jayhtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2ssIHN0ZDo6dHJ5X3Rv
X2xvY2spOworICAgICAgICBpZiAobG9jay5vd25zX2xvY2soKSkgeworICAgICAgICAgICAgZm9y
IChhdXRvJiBwYWlyIDogbV9wZW5kaW5nU291cmNlcykgeworICAgICAgICAgICAgICAgIGlmIChw
YWlyLmZpcnN0ID09IFF1ZXVlQWN0aW9uOjpBZGQpCisgICAgICAgICAgICAgICAgICAgIG1fYWN0
aXZlU291cmNlcy5hcHBlbmQocGFpci5zZWNvbmQuY29weVJlZigpKTsKKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byByZW1vdmVTb3VyY2UgPSBwYWlyLnNl
Y29uZC5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlU291cmNlcy5yZW1v
dmVGaXJzdE1hdGNoaW5nKFsmcmVtb3ZlU291cmNlXShhdXRvJiBzb3VyY2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2UucHRyKCkgPT0gcmVtb3ZlU291cmNlLnB0cigp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBtX3BlbmRpbmdTb3VyY2VzLmNsZWFyKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAobV9hY3RpdmVTb3VyY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBkb3VibGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1fRFRTQ29udmVyc2lvblJhdGlv
ICogdGltZVN0YW1wLm1Ib3N0VGltZTsKKyAgICB1aW50NjRfdCBzYW1wbGVUaW1lID0gdGltZVN0
YW1wLm1TYW1wbGVUaW1lOworICAgIGNoZWNrVGltZXN0YW1wcyh0aW1lU3RhbXAsIHNhbXBsZVRp
bWUsIGFkanVzdGVkSG9zdFRpbWUpOworCisgICAgbV9zcGVha2VyU2FtcGxlQnVmZmVyLT5yZXNl
dCgpOworICAgIG1fc3BlYWtlclNhbXBsZUJ1ZmZlci0+c2V0VGltZXMoYWRqdXN0ZWRIb3N0VGlt
ZSwgc2FtcGxlVGltZSk7CisKKyAgICBBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlckxpc3QgPSBtX3Nw
ZWFrZXJTYW1wbGVCdWZmZXItPmJ1ZmZlckxpc3QoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgYnVmZmVyTGlzdC5tTnVtYmVyQnVmZmVyczsgKytpKQorICAgICAgICBidWZmZXJMaXN0
Lm1CdWZmZXJzW2ldID0gaW9EYXRhLT5tQnVmZmVyc1tpXTsKKworICAgIGJvb2wgZmlyc3RTb3Vy
Y2UgPSB0cnVlOworICAgIGZvciAoYXV0byYgc291cmNlIDogbV9hY3RpdmVTb3VyY2VzKSB7Cisg
ICAgICAgIHNvdXJjZS0+cHVsbFNhbXBsZXMoKm1fc3BlYWtlclNhbXBsZUJ1ZmZlci5nZXQoKSwg
aW5OdW1iZXJGcmFtZXMsIGFkanVzdGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUsIGZpcnN0U291cmNl
ID8gQXVkaW9TYW1wbGVEYXRhU291cmNlOjpDb3B5IDogQXVkaW9TYW1wbGVEYXRhU291cmNlOjpN
aXgpOworICAgICAgICBmaXJzdFNvdXJjZSA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBu
b0VycjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3BlYWtlckNhbGxi
YWNrKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25G
bGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1i
ZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7Cisg
ICAgQVNTRVJUKGlvQWN0aW9uRmxhZ3MpOworICAgIEFTU0VSVChpblRpbWVTdGFtcCk7CisgICAg
YXV0byBkYXRhU291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSo+KGlu
UmVmQ29uKTsKKyAgICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvdmlkZVNwZWFrZXJEYXRhKCppb0Fj
dGlvbkZsYWdzLCAqaW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgaW9E
YXRhKTsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc01pY3Jv
cGhvbmVTYW1wbGVzKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiBpb0FjdGlvbkZsYWdzLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCYgdGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQz
MiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiAvKmlvRGF0YSovKQoreworICAgICsr
bV9taWNyb3Bob25lUHJvY3NDYWxsZWQ7CisKKyAgICAvLyBQdWxsIHRocm91Z2ggdGhlIHZwaW8g
dW5pdCB0byBvdXIgbWljIGJ1ZmZlci4KKyAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPnJl
c2V0KCk7CisgICAgQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0ID0gbV9taWNyb3Bob25lU2Ft
cGxlQnVmZmVyLT5idWZmZXJMaXN0KCk7CisgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRSZW5kZXIo
bV9pb1VuaXQsICZpb0FjdGlvbkZsYWdzLCAmdGltZVN0YW1wLCBpbkJ1c051bWJlciwgaW5OdW1i
ZXJGcmFtZXMsICZidWZmZXJMaXN0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRp
YSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyglcCkg
QXVkaW9Vbml0UmVuZGVyIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgZG91
YmxlIGFkanVzdGVkSG9zdFRpbWUgPSBtX0RUU0NvbnZlcnNpb25SYXRpbyAqIHRpbWVTdGFtcC5t
SG9zdFRpbWU7CisgICAgdWludDY0X3Qgc2FtcGxlVGltZSA9IHRpbWVTdGFtcC5tU2FtcGxlVGlt
ZTsKKyAgICBjaGVja1RpbWVzdGFtcHModGltZVN0YW1wLCBzYW1wbGVUaW1lLCBhZGp1c3RlZEhv
c3RUaW1lKTsKKyAgICBtX2xhdGVzdE1pY1RpbWVTdGFtcCA9IHNhbXBsZVRpbWU7CisKKyAgICBt
X21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPnNldFRpbWVzKGFkanVzdGVkSG9zdFRpbWUsIHNhbXBs
ZVRpbWUpOworCisgICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhVGltZShzYW1wbGVUaW1l
LCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSksIG1fbWljcm9waG9uZVNhbXBs
ZUJ1ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LCBpbk51bWJlckZy
YW1lcyk7CisKKyAgICBpZiAobV9taWNyb3Bob25lRGF0YUNhbGxiYWNrcy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IG1fbWljcm9waG9u
ZURhdGFDYWxsYmFja3MudmFsdWVzKCkpCisgICAgICAgIGNhbGxiYWNrKE1lZGlhVGltZShzYW1w
bGVUaW1lLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSksIG1fbWljcm9waG9u
ZVNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LCBpbk51
bWJlckZyYW1lcyk7CisKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK09TU3RhdHVzIENvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6Om1pY3JvcGhvbmVDYWxsYmFjayh2b2lkICppblJlZkNvbiwgQXVkaW9V
bml0UmVuZGVyQWN0aW9uRmxhZ3MqIGlvQWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1w
KiBpblRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMs
IEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQoreworICAgIEFTU0VSVChpb0FjdGlvbkZsYWdzKTsK
KyAgICBBU1NFUlQoaW5UaW1lU3RhbXApOworICAgIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UqIGRh
dGFTb3VyY2UgPSBzdGF0aWNfY2FzdDxDb3JlQXVkaW9DYXB0dXJlU291cmNlKj4oaW5SZWZDb24p
OworICAgIHJldHVybiBkYXRhU291cmNlLT5wcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoKmlvQWN0
aW9uRmxhZ3MsICppblRpbWVTdGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCBpb0Rh
dGEpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZhdWx0SW5wdXRE
ZXZpY2UodWludDMyX3QqIGRldmljZUlEKQoreworICAgIEFTU0VSVChtX2lvVW5pdCk7CisKKyAg
ICBVSW50MzIgcHJvcGVydHlTaXplID0gc2l6ZW9mKCpkZXZpY2VJRCk7CisgICAgYXV0byBlcnIg
PSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5
X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCBkZXZpY2VJ
RCwgJnByb3BlcnR5U2l6ZSk7CisgICAgaWYgKGVycikKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZGVmYXVsdElucHV0RGV2aWNlKCVwKSB1bmFibGUgdG8gZ2V0
IGRlZmF1bHQgaW5wdXQgZGV2aWNlIElELCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVy
ciwgKGNoYXIqKSZlcnIpOworCisgICAgcmV0dXJuIGVycjsKK30KKworT1NTdGF0dXMgQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCkKK3sKKyAgICBBU1NFUlQobV9pbnRl
cm5hbFN0YXRlTG9jay5pc0hlbGQoKSk7CisKKyAgICBpZiAobV9pb1VuaXQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBpb1VuaXREZXNjcmlwdGlv
biA9IHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCBrQXVkaW9Vbml0U3ViVHlwZV9Wb2ljZVByb2Nl
c3NpbmdJTywga0F1ZGlvVW5pdE1hbnVmYWN0dXJlcl9BcHBsZSwgMCwgMCB9OworICAgIEF1ZGlv
Q29tcG9uZW50IGlvQ29tcG9uZW50ID0gQXVkaW9Db21wb25lbnRGaW5kTmV4dChudWxscHRyLCAm
aW9Vbml0RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChpb0NvbXBvbmVudCk7CisgICAgaWYgKCFp
b0NvbXBvbmVudCkgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNl
OjpzZXR1cEF1ZGlvVW5pdHMoJXApIHVuYWJsZSB0byBmaW5kIHZwaW8gdW5pdCBjb21wb25lbnQi
LCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIENGU3RyaW5nUmVmIG5h
bWUgPSBudWxscHRyOworICAgIEF1ZGlvQ29tcG9uZW50Q29weU5hbWUoaW9Db21wb25lbnQsICZu
YW1lKTsKKyAgICBpZiAobmFtZSkgeworICAgICAgICBtX2lvVW5pdE5hbWUgPSBuYW1lOworICAg
ICAgICBDRlJlbGVhc2UobmFtZSk7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgY3JlYXRlZCBcIiVzXCIgY29tcG9uZW50Iiwg
dGhpcywgbV9pb1VuaXROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIGF1dG8gZXJy
ID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhpb0NvbXBvbmVudCwgJm1faW9Vbml0KTsKKyAg
ICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIG9wZW4gdnBpbyB1bml0LCBlcnJvciAlZCAo
JS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJy
OworICAgIH0KKworI2lmIFBMQVRGT1JNKElPUykKKyAgICB1aW50MzJfdCBwYXJhbSA9IDE7Cisg
ICAgZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQ
cm9wZXJ0eV9FbmFibGVJTywga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBpbnB1dEJ1cywgJnBhcmFt
LCBzaXplb2YocGFyYW0pKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIGVuYWJs
ZSB2cGlvIHVuaXQgaW5wdXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hh
ciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgcGFyYW0gPSAxOwor
ICAgIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0
UHJvcGVydHlfRW5hYmxlSU8sIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIG91dHB1dEJ1cywgJnBh
cmFtLCBzaXplb2YocGFyYW0pKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwg
IkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIGVu
YWJsZSB2cGlvIHVuaXQgb3V0cHV0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyNlbmRpZgorCisgICAg
aWYgKCFtX2NhcHR1cmVEZXZpY2VJRCkgeworICAgICAgICBlcnIgPSBkZWZhdWx0SW5wdXREZXZp
Y2UoJm1fY2FwdHVyZURldmljZUlEKTsKKyAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHJl
dHVybiBlcnI7CisgICAgfQorCisgICAgVUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZihtX2Nh
cHR1cmVEZXZpY2VJRCk7CisgICAgZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQs
IGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0U2NvcGVf
R2xvYmFsLCBpbnB1dEJ1cywgJm1fY2FwdHVyZURldmljZUlELCBwcm9wZXJ0eVNpemUpOworICAg
IGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6
c2V0dXBBdWRpb1VuaXRzKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBjYXB0dXJlIGRldmlj
ZSBJRCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAg
ICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBlcnIgPSBjb25maWd1cmVNaWNyb3Bob25l
UHJvYygpOworICAgIGlmIChlcnIpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBlcnIgPSBB
dWRpb1VuaXRJbml0aWFsaXplKG1faW9Vbml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExP
RyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgQXVk
aW9Vbml0SW5pdGlhbGl6ZSgpIGZhaWxlZCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCll
cnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgbV9pb1Vu
aXRJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBlcnIgPSBjb25maWd1cmVTcGVha2VyUHJvYygp
OworICAgIGlmIChlcnIpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gZXJyOwor
fQorCit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7
CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7Cisg
ICAgaWYgKG1faW9Vbml0U3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgT1NTdGF0dXMg
ZXJyOworICAgIGlmICghbV9pb1VuaXQpIHsKKyAgICAgICAgZXJyID0gc2V0dXBBdWRpb1VuaXRz
KCk7CisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
ZXJyID0gQXVkaW9PdXRwdXRVbml0U3RhcnQobV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAg
ICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RhcnQoJXApIEF1ZGlv
T3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2lvVW5p
dFN0YXJ0ZWQgPSB0cnVlOworICAgIHNldE11dGVkKGZhbHNlKTsKK30KKwordm9pZCBDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBBU1NFUlQobV9pb1Vu
aXQpOworCisgICAgYXV0byBlcnIgPSBBdWRpb091dHB1dFVuaXRTdG9wKG1faW9Vbml0KTsKKyAg
ICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnN0b3AoJXApIEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMp
IiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2lvVW5pdFN0YXJ0ZWQgPSBmYWxzZTsKKyAgICBzZXRNdXRlZCh0cnVlKTsKK30KKwor
T1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3VzcGVuZCgpCit7CisgICAgc3RkOjps
b2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBBU1NFUlQo
bV9pb1VuaXQpOworCisgICAgaWYgKG1faW9Vbml0U3RhcnRlZCkgeworICAgICAgICBhdXRvIGVy
ciA9IEF1ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQpOworICAgICAgICBpZiAoZXJyKSB7Cisg
ICAgICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZXN1bWUoJXAp
IEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywg
KGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAg
IH0KKyAgICAgICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1f
aW9Vbml0SW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRVbmluaXRp
YWxpemUobV9pb1VuaXQpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBMT0coTWVk
aWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZXN1bWUoJXApIEF1ZGlvVW5pdFVuaW5pdGlh
bGl6ZSBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIq
KSZlcnIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgICAgICBtX2lv
VW5pdEluaXRpYWxpemVkID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK09T
U3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnJlc3VtZSgpCit7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBBU1NFUlQobV9p
b1VuaXQpOworICAgIEFTU0VSVCghbV9pb1VuaXRTdGFydGVkKTsKKworICAgIGF1dG8gZXJyID0g
QXVkaW9PdXRwdXRVbml0U3RhcnQobV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAg
TE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVzdW1lKCVwKSBBdWRpb091dHB1
dFVuaXRTdGFydCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICBtX2lvVW5pdFN0
YXJ0ZWQgPSBmYWxzZTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK1JlZlB0cjxSZWFsdGltZU1l
ZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRp
ZXMoKSBjb25zdAoreworICAgIGlmIChtX2NhcGFiaWxpdGllcykKKyAgICAgICAgcmV0dXJuIG1f
Y2FwYWJpbGl0aWVzOworCisgICAgbV9zdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Rl
dmljZUlkKHRydWUpOworICAgIG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNFY2hv
Q2FuY2VsbGF0aW9uKHRydWUpOworICAgIG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9y
dHNWb2x1bWUodHJ1ZSk7CisKKyAgICAvLyBGSVhNRTogZmluaXNoIHRoaXMuCisgICAgbV9jYXBh
YmlsaXRpZXMgPSBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpjcmVhdGUobV9zdXBw
b3J0ZWRDb25zdHJhaW50cyk7CisgICAgbV9jYXBhYmlsaXRpZXMtPnNldERldmljZUlkKGlkKCkp
OworICAgIG1fY2FwYWJpbGl0aWVzLT5zZXRFY2hvQ2FuY2VsbGF0aW9uKFJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXM6OkVjaG9DYW5jZWxsYXRpb246OlJlYWRXcml0ZSk7CisgICAgbV9j
YXBhYmlsaXRpZXMtPnNldFZvbHVtZShDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDAuMCwgMS4wKSk7
CisKKyAgICByZXR1cm4gbV9jYXBhYmlsaXRpZXM7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5ncyYgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAor
eworICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2NzY4YmU3YjYzYTY0ZmViMWRhYjVkNTgyZGU1M2Uw
YWJhMzkzY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEsMTM5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiQ2FwdHVyZURldmljZS5oIgorI2luY2x1ZGUgIlJlYWx0
aW1lTWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Ub29sYm94Lmg+
CisjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCit0eXBlZGVmIHN0cnVjdCBPcGFxdWVDTUNsb2NrKiBDTUNsb2NrUmVmOworCituYW1l
c3BhY2UgV1RGIHsKK2NsYXNzIE1lZGlhVGltZTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q7CitjbGFzcyBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U7CitjbGFzcyBDYXB0dXJlRGV2aWNlSW5mbzsKKworY2xhc3MgQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZSA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKK3B1YmxpYzoKKworICAgIHN0YXRp
YyBSZWZQdHI8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZT4gY3JlYXRlKGNvbnN0IENhcHR1cmVEZXZp
Y2UmLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiwgU3RyaW5nJik7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgQ2FwdHVyZUZhY3RvcnkmIGZhY3RvcnkoKTsKKworICAgIHZvaWQgYWRkRWNo
b0NhbmNlbGxhdGlvblNvdXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmKTsKKyAgICB2b2lkIHJl
bW92ZUVjaG9DYW5jZWxsYXRpb25Tb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJik7CisKKyAg
ICB1c2luZyBNaWNyb3Bob25lRGF0YUNhbGxiYWNrID0gc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0
IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGF1ZGlvRGF0
YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHNpemVfdCBzYW1w
bGVDb3VudCk+OworCisgICAgdWludDY0X3QgYWRkTWljcm9waG9uZURhdGFDb25zdW1lcihNaWNy
b3Bob25lRGF0YUNhbGxiYWNrJiYpOworICAgIHZvaWQgcmVtb3ZlTWljcm9waG9uZURhdGFDb25z
dW1lcih1aW50NjRfdCk7CisKKyAgICBDTUNsb2NrUmVmIHRpbWViYXNlQ2xvY2soKTsKKworcHJp
dmF0ZToKKyAgICBDb3JlQXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IENhcHR1cmVEZXZpY2UmKTsK
KyAgICB2aXJ0dWFsIH5Db3JlQXVkaW9DYXB0dXJlU291cmNlKCk7CisKKyAgICB2b2lkIHN0YXJ0
UHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBmaW5h
bDsKKyAgICBib29sIGlzUHJvZHVjaW5nRGF0YSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faW9V
bml0U3RhcnRlZDsgfQorCisgICAgT1NTdGF0dXMgc3VzcGVuZCgpOworICAgIE9TU3RhdHVzIHJl
c3VtZSgpOworCisgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IGNh
cGFiaWxpdGllcygpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsKKworICAgIE9TU3RhdHVzIHNldHVwQXVk
aW9Vbml0cygpOworICAgIE9TU3RhdHVzIGNvbmZpZ3VyZVNwZWFrZXJQcm9jKCk7CisgICAgT1NT
dGF0dXMgY29uZmlndXJlTWljcm9waG9uZVByb2MoKTsKKyAgICBPU1N0YXR1cyBkZWZhdWx0T3V0
cHV0RGV2aWNlKHVpbnQzMl90Kik7CisgICAgT1NTdGF0dXMgZGVmYXVsdElucHV0RGV2aWNlKHVp
bnQzMl90Kik7CisKKyAgICB2b2lkIGNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1RpbWVTdGFt
cCYsIHVpbnQ2NF90LCBkb3VibGUpOworCisgICAgc3RhdGljIE9TU3RhdHVzIG1pY3JvcGhvbmVD
YWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1Rp
bWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKKyAgICBPU1N0YXR1
cyBwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsK
KworICAgIHN0YXRpYyBPU1N0YXR1cyBzcGVha2VyQ2FsbGJhY2sodm9pZCosIEF1ZGlvVW5pdFJl
bmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQzMiwg
QXVkaW9CdWZmZXJMaXN0Kik7CisgICAgT1NTdGF0dXMgcHJvdmlkZVNwZWFrZXJEYXRhKEF1ZGlv
VW5pdFJlbmRlckFjdGlvbkZsYWdzJiwgY29uc3QgQXVkaW9UaW1lU3RhbXAmLCBVSW50MzIsIFVJ
bnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7CisKKyAgICBzdGF0aWMgZG91YmxlIHByZWZlcnJlZFNh
bXBsZVJhdGUoKTsKKyAgICBzdGF0aWMgZG91YmxlIHByZWZlcnJlZElPQnVmZmVyRHVyYXRpb24o
KTsKKworICAgIEF1ZGlvVW5pdCBtX2lvVW5pdCB7IG51bGxwdHIgfTsKKyAgICBTdHJpbmcgbV9p
b1VuaXROYW1lOworCisgICAgLy8gT25seSByZWFkL21vZGlmaWVkIGZyb20gdGhlIElPIHRocmVh
ZC4KKyAgICBWZWN0b3I8UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+IG1fYWN0aXZlU291cmNl
czsKKworICAgIGVudW0gUXVldWVBY3Rpb24geyBBZGQsIFJlbW92ZSB9OworICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8UXVldWVBY3Rpb24sIFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+Pj4gbV9wZW5k
aW5nU291cmNlczsKKworICAgIHVpbnQzMl90IG1fY2FwdHVyZURldmljZUlEIHsgMCB9OworCisg
ICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fbWljcm9waG9uZVByb2NGb3JtYXQ7CisgICAg
UmVmUHRyPEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyOwor
ICAgIHVpbnQ2NF90IG1fbWljcm9waG9uZVByb2NzQ2FsbGVkIHsgMCB9OworICAgIHVpbnQ2NF90
IG1fbGF0ZXN0TWljVGltZVN0YW1wIHsgMCB9OworCisgICAgSGFzaE1hcDx1aW50NjRfdCwgTWlj
cm9waG9uZURhdGFDYWxsYmFjaz4gbV9taWNyb3Bob25lRGF0YUNhbGxiYWNrczsKKyAgICB1aW50
NjRfdCBtX25leHRNaWNyb3Bob25lRGF0YUNhbGxiYWNrSUQgeyAwIH07CisKKyAgICBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24gbV9zcGVha2VyUHJvY0Zvcm1hdDsKKyAgICBSZWZQdHI8QXVkaW9T
YW1wbGVCdWZmZXJMaXN0PiBtX3NwZWFrZXJTYW1wbGVCdWZmZXI7CisgICAgdWludDY0X3QgbV9z
cGVha2VyUHJvY3NDYWxsZWQgeyAwIH07CisKKyAgICBkb3VibGUgbV9EVFNDb252ZXJzaW9uUmF0
aW8geyAwIH07CisKKyAgICBib29sIG1faW9Vbml0SW5pdGlhbGl6ZWQgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9pb1VuaXRTdGFydGVkIHsgZmFsc2UgfTsKKworICAgIExvY2sgbV9wZW5kaW5nU291
cmNlUXVldWVMb2NrOworICAgIExvY2sgbV9pbnRlcm5hbFN0YXRlTG9jazsKKworICAgIG11dGFi
bGUgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVz
OworICAgIG11dGFibGUgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIG1f
c3VwcG9ydGVkQ29uc3RyYWludHM7CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1f
Y3VycmVudFNldHRpbmdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyTWFjLmNwcAppbmRleCBlZjhhZGMxMjc1NWUxZDIxOGQ1NDUyZWM1ZDA5MjZlZDlmZjM5
MzRjLi4xNTAxOGM5OTk0ZWUwNDg4MzQxNGZkNTY5ODVkOGQxMmQ4NDQ5MjFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlck1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCkBAIC0zMyw5ICszMyw5IEBA
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyTWFjLmgiCiAKLSNpbmNsdWRlICJBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgogI2luY2x1
ZGUgIkFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKICNpbmNsdWRlICJBVlZpZGVvQ2FwdHVyZVNv
dXJjZS5oIgorI2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KQEAgLTYzLDcgKzYzLDcgQEAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ck1hYzo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYygpCiAgICAgbV9zdXBwb3J0ZWRDb25z
dHJhaW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRydWUpOwogICAgIG1fc3VwcG9ydGVkQ29uc3Ry
YWludHMuc2V0U3VwcG9ydHNHcm91cElkKHRydWUpOwogCi0gICAgbV9hdWRpb0ZhY3RvcnkgPSAm
QVZBdWRpb0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkoKTsKKyAgICBtX2F1ZGlvRmFjdG9yeSA9ICZD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCk7CiAgICAgbV92aWRlb0ZhY3RvcnkgPSAm
QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkoKTsKIH0KIApAQCAtMTc0LDcgKzE3NCw3IEBA
IFZlY3RvcjxTdHJpbmc+IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6OmJlc3RTb3VyY2Vz
Rm9yVHlwZUFuZENvbnN0cmFpbnRzKFJlCiAKIFJlYWx0aW1lTWVkaWFTb3VyY2U6OkNhcHR1cmVG
YWN0b3J5KiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjpkZWZhdWx0QXVkaW9GYWN0b3J5
KCkKIHsKLSAgICByZXR1cm4gJkFWQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCk7CisgICAg
cmV0dXJuICZDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCk7CiB9CiAKIFJlYWx0aW1l
TWVkaWFTb3VyY2U6OkNhcHR1cmVGYWN0b3J5KiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFj
OjpkZWZhdWx0VmlkZW9GYWN0b3J5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCmluZGV4IGI2YWQ3NWU3ODQ1ZjE0MDEwMWZl
NWZjNTc2NGY2YzM3OWU1NjYzMTQuLjRkMWIxYzdhNzNlNTMwMWE0M2QxZTQ3N2JiZTQ4MmZkMTFh
ODMzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5j
ZUtleXNQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJl
bmNlS2V5c1ByaXZhdGUuaApAQCAtMjI0LDYgKzIyNCw3IEBACiAjZGVmaW5lIFdlYktpdEVuYWJs
ZUluaGVyaXRVUklRdWVyeUNvbXBvbmVudFByZWZlcmVuY2VLZXkgQCJXZWJLaXRFbmFibGVJbmhl
cml0VVJJUXVlcnlDb21wb25lbnQiCiAjZGVmaW5lIFdlYktpdE1lZGlhRGF0YUxvYWRzQXV0b21h
dGljYWxseVByZWZlcmVuY2VLZXkgQCJXZWJLaXRNZWRpYURhdGFMb2Fkc0F1dG9tYXRpY2FsbHki
CiAjZGVmaW5lIFdlYktpdE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAi
V2ViS2l0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCIKKyNkZWZpbmUgV2ViS2l0VXNlQVZGb3Vu
ZGF0aW9uQXVkaW9DYXB0dXJlUHJlZmVyZW5jZUtleSBAIldlYktpdFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZUVuYWJsZWQiCiAjZGVmaW5lIFdlYktpdEVudW1lcmF0aW5nQWxsTmV0d29ya0lu
dGVyZmFjZXNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdEVudW1lcmF0aW5nQWxsTmV0d29y
a0ludGVyZmFjZXNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdF
bmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQi
CiAjZGVmaW5lIFdlYktpdE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvblByZWZl
cmVuY2VLZXkgQCJXZWJLaXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24iCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQppbmRleCBkNTY4YTY5
NjZiZjJmZWU4YzEzNDczMDMzMzg3NDM5MDc0OTc4NTFmLi5jMWI2MTJhNTc4NDBhZWU5M2EyYzli
ODYxYzY3MTc3ZjI2MDUzNDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJl
ZmVyZW5jZXMubW0KQEAgLTYxOSw2ICs2MTksNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgV2ViS2l0TW9j
a0NhcHR1cmVEZXZpY2VzRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpZRVNdLCBXZWJLaXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5l
Y3Rpb25QcmVmZXJlbmNlS2V5LAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9d
LCBXZWJLaXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVQcmVmZXJlbmNlS2V5LAogI2VuZGlm
CiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBXZWJLaXRTaGFkb3dET01F
bmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllF
U10sIFdlYktpdEN1c3RvbUVsZW1lbnRzRW5hYmxlZFByZWZlcmVuY2VLZXksCkBAIC0yODY2LDYg
KzI4NjcsMTYgQEAgc3RhdGljIE5TU3RyaW5nICpjbGFzc0lCQ3JlYXRvcklEID0gbmlsOwogICAg
IFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6V2ViS2l0TW9ja0NhcHR1cmVEZXZpY2Vz
RW5hYmxlZFByZWZlcmVuY2VLZXldOwogfQogCistIChCT09MKXVzZUFWRm91bmRhdGlvbkF1ZGlv
Q2FwdHVyZQoreworICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdFVzZUFW
Rm91bmRhdGlvbkF1ZGlvQ2FwdHVyZVByZWZlcmVuY2VLZXldOworfQorCistICh2b2lkKXNldFVz
ZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZTooQk9PTClmbGFnCit7CisgICAgW3NlbGYgX3NldEJv
b2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVQcmVm
ZXJlbmNlS2V5XTsKK30KKwogLSAoQk9PTCllbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2Vz
RW5hYmxlZAogewogICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdEVudW1l
cmF0aW5nQWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVkUHJlZmVyZW5jZUtleV07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAppbmRleCBl
ZTk1ZmY4NzkyNzIzMTk0ZmU4MjBjNjNhOWU0ZDdmMTYwOTY5OGNkLi5mODExM2MxYzk5M2Y0ODJj
MzRiZWE0YjJiNjhkMDEwZjFlMjcwNDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKQEAgLTUxMSw2ICs1MTEsOSBAQCBleHRlcm4g
TlNTdHJpbmcgKldlYlByZWZlcmVuY2VzQ2FjaGVNb2RlbENoYW5nZWRJbnRlcm5hbE5vdGlmaWNh
dGlvbjsKIC0gKHZvaWQpc2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOihC
T09MKWZsYWc7CiAtIChCT09MKW1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjsK
IAorLSAodm9pZClzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmU6KEJPT0wpZmxhZzsKKy0g
KEJPT0wpdXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlOworCiAtICh2b2lkKXNldFNoYWRvd0RP
TUVuYWJsZWQ6KEJPT0wpZmxhZzsKIC0gKEJPT0wpc2hhZG93RE9NRW5hYmxlZDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IGNhYTcyMjM5YzVjODg4YWUxNGNhMWQwNDk3
ODEyYjY5OThjNzliZWUuLjVjYmIwNjM2M2ExY2Y3ZjRiN2ZiMDg3YTRiMDU1MWNjOGYwMjM5NDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTI5NjQsNiArMjk2NCw3IEBA
IHN0YXRpYyBib29sIG5lZWRzU2VsZlJldGFpbldoaWxlTG9hZGluZ1F1aXJrKCkKICAgICBzZXR0
aW5ncy5zZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKFtwcmVmZXJlbmNlcyBtb2NrQ2FwdHVy
ZURldmljZXNFbmFibGVkXSk7CiAgICAgc2V0dGluZ3Muc2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNT
ZWN1cmVDb25uZWN0aW9uKFtwcmVmZXJlbmNlcyBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNv
bm5lY3Rpb25dKTsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LnNldE1lZGlhU3RyZWFtRW5hYmxlZChbcHJlZmVyZW5jZXMgbWVkaWFTdHJlYW1FbmFibGVkXSk7
CisgICAgc2V0dGluZ3Muc2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKFtwcmVmZXJlbmNl
cyB1c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVdKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdF
Ql9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNE
ZWZpbml0aW9ucy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5p
dGlvbnMuaAppbmRleCA2YzE5ZDU0NDVkZGRiZTY2NWNjZDcyZmM4OGVkYWM3M2Q1ZGM1OGFmLi42
ZWYxN2RhNDE0OWExYmQ4YzYwYzQwY2M5NmU1YTZiMTIyZmE5MGVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgKQEAgLTIzNyw2ICsy
MzcsNyBAQAogICAgIG1hY3JvKEhUVFBFcXVpdkVuYWJsZWQsIGh0dHBFcXVpdkVuYWJsZWQsIEJv
b2wsIGJvb2wsIHRydWUsICIiLCAiIikgXAogICAgIG1hY3JvKE1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWQsIG1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwg
IiIpIFwKICAgICBtYWNybyhNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24sIG1l
ZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbiwgQm9vbCwgYm9vbCwgdHJ1ZSwgIiIs
ICIiKSBcCisgICAgbWFjcm8oVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlLCB1c2VBVkZvdW5k
YXRpb25BdWRpb0NhcHR1cmUsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwgIiIpIFwKICAgICBtYWNy
byhFbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZCwgZW51bWVyYXRpbmdBbGxO
ZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwgIiIpIFwKICAg
ICBtYWNybyhXZWJSVENMZWdhY3lBUElFbmFibGVkLCB3ZWJSVENMZWdhY3lBUElFbmFibGVkLCBC
b29sLCBib29sLCB0cnVlLCAiIiwgIiIpIFwKICAgICBtYWNybyhJQ0VDYW5kaWRhdGVGaWx0ZXJp
bmdFbmFibGVkLCBpY2VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkLCBCb29sLCBib29sLCB0cnVl
LCAiIiwgIiIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S1ByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZl
cmVuY2VzLmNwcAppbmRleCA5N2VjMTQ5ZTQ3NmI3YmI4YjgzZjAxNmMwNDU2NGMzYmRlYmQxN2Zi
Li4xZDBjMTNiNTM5NTczM2Q1ZGNkMTY2MGE1NjI4ZWMyMmYzMmIzMTdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCkBAIC0xNTkxLDYg
KzE1OTEsMTYgQEAgYm9vbCBXS1ByZWZlcmVuY2VzR2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1
cmVDb25uZWN0aW9uKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmUKICAgICByZXR1cm4gdG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+bWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKCk7CiB9
CiAKK3ZvaWQgV0tQcmVmZXJlbmNlc1NldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCit7CisgICAgdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKGVuYWJsZWQp
OworfQorCitib29sIFdLUHJlZmVyZW5jZXNHZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUo
V0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+dXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKCk7Cit9CisKIHZvaWQg
V0tQcmVmZXJlbmNlc1NldEZldGNoQVBJRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmLCBib29sIGZsYWcpCiB7CiAgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RmV0
Y2hBUElFbmFibGVkKGZsYWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaAppbmRleCBjNWNkY2JhNDllYjlmMGYz
MTI0ZThlMjc0MDA4OTc5Y2Q0MTA1NjRmLi44YmI3MWQ5NmYxNTAyMmIyMjFkMzEzZGZiMTZmZGEx
YWZiMzI3NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQ
cmVmZXJlbmNlc1JlZlByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaApAQCAtNDMzLDYgKzQzMywxMCBAQCBXS19FWFBP
UlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0RW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0Vu
YWJsZWQoV0tQcmVmZXJlbgogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldE1lZGlhQ2Fw
dHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihXS1ByZWZlcmVuY2VzUmVmLCBib29sKTsKIFdL
X0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNv
bm5lY3Rpb24oV0tQcmVmZXJlbmNlc1JlZik7CiAKKy8vIERlZmF1bHRzIHRvIGZhbHNlLgorV0tf
RVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShX
S1ByZWZlcmVuY2VzUmVmLCBib29sKTsKK1dLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRV
c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoV0tQcmVmZXJlbmNlc1JlZik7CisgICAgCiAvLyBE
ZWZhdWx0cyB0byBmYWxzZQogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldEZldGNoQVBJ
RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpOwogV0tfRVhQT1JUIGJvb2wgV0tQ
cmVmZXJlbmNlc0dldEZldGNoQVBJRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdl
clByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0
dXJlTWFuYWdlclByb3h5LmNwcAppbmRleCA3MGFmYzdhMjBjYTlhMmY3ODY1NzMxYjhjYjE5YTli
NWMzOTBjNGRhLi5jNmY3YWU5YWM0NjZjZWRlNGM5MmIzYmI4N2Q5NWNiNDg2ZmEyOWIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1VzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgVXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXJQcm94eTo6flVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKQogdm9p
ZCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjpjcmVhdGVNZWRpYVNvdXJjZUZvckNhcHR1
cmVEZXZpY2VXaXRoQ29uc3RyYWludHModWludDY0X3QgaWQsIGNvbnN0IENhcHR1cmVEZXZpY2Um
IGRldmljZSwgY29uc3QgTWVkaWFDb25zdHJhaW50c0RhdGEmIGNvbnN0cmFpbnRzRGF0YSwgYm9v
bCYgc3VjY2VlZGVkLCBTdHJpbmcmIGludmFsaWRDb25zdHJhaW50cykKIHsKICAgICBhdXRvIGNv
bnN0cmFpbnRzID0gTWVkaWFDb25zdHJhaW50c0ltcGw6OmNyZWF0ZShjb25zdHJhaW50c0RhdGEp
OwotICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBzb3VyY2UgPSBSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5kZWZhdWx0QXVkaW9GYWN0b3J5KCktPmNyZWF0ZU1l
ZGlhU291cmNlRm9yQ2FwdHVyZURldmljZVdpdGhDb25zdHJhaW50cyhkZXZpY2UsIGNvbnN0cmFp
bnRzLnB0cigpLCBpbnZhbGlkQ29uc3RyYWludHMpOworICAgIGF1dG8gc291cmNlID0gUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuYXVkaW9GYWN0b3J5KCktPmNyZWF0ZU1l
ZGlhU291cmNlRm9yQ2FwdHVyZURldmljZVdpdGhDb25zdHJhaW50cyhkZXZpY2UsIGNvbnN0cmFp
bnRzLnB0cigpLCBpbnZhbGlkQ29uc3RyYWludHMpOwogICAgIHN1Y2NlZWRlZCA9ICEhc291cmNl
OwogICAgIAogICAgIGlmIChzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
LmNwcAppbmRleCAyOTRkYmIxOGNhNjgwMDU0NWM1Yjc1MWU5YWExNTc2OWJhODQzODIzLi5mMTE1
YWJhZmRjNzU0NTU2YWY3MjU0MzM3YjQxYWRhNTE1NmRkNTY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXJQcm94eS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJXZWJQYWdl
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhQ29uc3RyYWludHNJbXBsLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVhbHRpbWVNZWRpYVNvdXJjZS5oPgpAQCAtMzI5LDYgKzMzMCw5IEBAIHZvaWQgVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OnN5bmNXaXRoV2ViQ29yZVByZWZzKCkgY29u
c3QKICAgICAvLyB0aGlzIGlzIGEgbm9vcCBpZiB0aGUgcHJlZmVyZW5jZSBoYXNuJ3QgY2hhbmdl
ZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgd2FzIGNhbGxlZC4KICAgICBib29sIG1vY2tEZXZp
Y2VzRW5hYmxlZCA9IG1fcGFnZS5wcmVmZXJlbmNlcygpLm1vY2tDYXB0dXJlRGV2aWNlc0VuYWJs
ZWQoKTsKICAgICBXZWJDb3JlOjpNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2V0TW9j
a1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkKG1vY2tEZXZpY2VzRW5hYmxlZCk7CisK
KyAgICBib29sIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSA9IG1fcGFnZS5wcmVmZXJlbmNl
cygpLnVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSgpOworICAgIFdlYkNvcmU6OkFWQ2FwdHVy
ZURldmljZU1hbmFnZXI6OnNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSh1c2VBVkZvdW5k
YXRpb25BdWRpb0NhcHR1cmUpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA0MzVhOWVhMWFjYmE5MjJjMGJiZTNmNzI2
MmExY2IwODEwNDk2YjQwLi4yNTlhOTYyODQ1NjhmZjFmMTM2MjE3MTgyMzUxMWMxNmJlMGVlMTEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBA
IC0zMjQwLDYgKzMyNDAsNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0
IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAg
ICAgc2V0dGluZ3Muc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZChzdG9yZS5nZXRCb29sVmFs
dWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6Om1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRLZXko
KSkpOwogICAgIHNldHRpbmdzLnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlv
bihzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6Om1lZGlhQ2FwdHVy
ZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbktleSgpKSk7CisgICAgc2V0dGluZ3Muc2V0VXNlQVZG
b3VuZGF0aW9uQXVkaW9DYXB0dXJlKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJl
bmNlc0tleTo6dXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlS2V5KCkpKTsKICNlbmRpZgogCiAg
ICAgc2V0dGluZ3Muc2V0U2hvdWxkQ29udmVydFBvc2l0aW9uU3R5bGVPbkNvcHkoc3RvcmUuZ2V0
Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpzaG91bGRDb252ZXJ0UG9zaXRpb25T
dHlsZU9uQ29weUtleSgpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306367</attachid>
            <date>2017-04-05 21:46:18 -0700</date>
            <delta_ts>2017-04-06 12:03:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170112-20170405214618.patch</filename>
            <type>text/plain</type>
            <size>54746</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg2M2JlNThiOWFjZDEz
MTFiNWQ1NmQ3N2U2MzgxNjM1NzJkODQzNy4uNzMwYTg1Njg4YzY3NTY2ZDFlN2JjYjlkZWZhZmEx
NTViNTRhYmU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE3LTA0LTA1ICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDExMgorICAgICAgICByZGFyOi8vcHJvYmxlbS8zMDI5MzMzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNl
IHRoaXMgcHJvdmlkZXMgdGhlIHNhbWUgZnVuY2l0b25hbGl0eSBhcyBBVkF1ZGlvQ2FwdHVyZVNv
dXJjZS4gCisgICAgICAgIEZ1bmNpb25hbGl0eSBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Qg
Y2FzZXMuCisKKyAgICAgICAgQWRkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UgZm9yIGF1ZGlvIGNh
cHR1cmUuIEFuZCB1c2UgaXQgYnkgZGVmYXVsdCBpbiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLgor
ICAgICAgICBBZGQgVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlIHNldHRpbmcgdG8gc3dpdGNo
IGJhY2sgdG8gQVZGb3VuZGF0aW9uIGZvciBhdWRpbyBjYXB0dXJlLgorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnVzZUFWRm91bmRhdGlvbkF1ZGlvQ2Fw
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0VXNlQVZGb3VuZGF0aW9uQXVk
aW9DYXB0dXJlKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNldFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRp
b0NhcHR1cmVTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJl
U291cmNlOjpmYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6fkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJlZmVycmVkU2FtcGxlUmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcmVmZXJyZWRJT0J1ZmZlckR1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3Vy
ZU1pY3JvcGhvbmVQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmFkZE1pY3JvcGhvbmVEYXRhQ29uc3VtZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3ZlTWljcm9waG9uZURhdGFDb25zdW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRFY2hvQ2FuY2Vs
bGF0aW9uU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnJlbW92ZUVjaG9DYW5jZWxsYXRpb25Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6Y2hlY2tUaW1lc3RhbXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzcGVha2VyQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6Om1pY3JvcGhvbmVD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZh
dWx0T3V0cHV0RGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmRlZmF1bHRJbnB1dERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpzZXR0aW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYzo6UmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck1hYyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyTWFjOjpkZWZhdWx0QXVkaW9GYWN0b3J5KToKKwogMjAxNy0wMy0yOSAgTXlsZXMg
Qy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFRyeSB0byBub3Jt
YWxpemUgdmFyaWF0aW9uIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDRjOTE3ZDMwZTBmOTQ2
YTMzMGIyNGY3YjU4MWJkOWViNDAzZmNmOTMuLmRjYjViNjM3YjQzNzY2YmRhYTUwMzYzM2VlN2Fi
NTQ4ZTY3NWQ0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxNy0wNC0w
NSAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIENvcmVB
dWRpb0NhcHR1cmVTb3VyY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzAxMTIKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMzAyOTMzMzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVXNlQVZGb3Vu
ZGF0aW9uQXVkaW9DYXB0dXJlIHByZWZlcmVuY2UgdG8gc3dpdGNoIGJhY2sgZnJvbSB0aGUgbmV3
IGRlZmF1bHQgb2YgQ29yZUF1ZGlvLgorCisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAg
ICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFsaXplXSk6CisgICAgICAgICgtW1dlYlByZWZl
cmVuY2VzIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZV0pOgorICAgICAgICAoLVtXZWJQcmVm
ZXJlbmNlcyBzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmU6XSk6CisgICAgICAgICogV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcu
bW06CisgICAgICAgICgtW1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZDpdKToKKwogMjAxNy0w
My0yNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFNhdmluZyBmaWxlcyBzaG91bGQgbm90IHN1Z2dlc3QgdGhlIHRvcCBsZXZl
bCBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxMDkzOWNmMWM5ZWNlMDhiZDhmODgxOTU5NDFhZjg3
YmI1NGJjYmRhLi4zMjhhNjM1OTlhOWNlYTYxMzg1YjE2NDQxNTAyZjA5NGMzNTRmNmY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTctMDQtMDUgIEplcmVteSBKb25lcyAgPGplcmVt
eWpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTEyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzMwMjkzMzM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSBwcmVm
ZXJlbmNlIHRvIHN3aXRjaCBiYWNrIGZyb20gdGhlIG5ldyBkZWZhdWx0IG9mIENvcmVBdWRpby4K
KworICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV0tQcmVmZXJl
bmNlc1NldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSk6CisgICAgICAgIChXS1ByZWZlcmVu
Y2VzR2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVz
ZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OmNyZWF0ZU1lZGlhU291cmNlRm9yQ2FwdHVyZURl
dmljZVdpdGhDb25zdHJhaW50cyk6CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OnN5bmNXaXRoV2ViQ29yZVByZWZzKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKwogMjAxNy0wMy0yOSAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIFBhZ2VD
bGllbnQ6OnJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyYTRhYThlNGIzYmI1
ODU0MjEyNThkZWU3YjY0ZTEwMzFhNGNkNjRhLi5kNTJlN2MzNDA2NWFjYTFiYjI1NGNlOTY2MTZi
YjRmYmQ2MmVhNjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC03Myw3ICs3Myw3IEBACiAJCTA3MDMzNEU5MTQ1QTFGMzYwMDhE
OEQ0NSAvKiBKU1RyYWNrQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3MDMzNEU4MTQ1QTFGMzUwMDhEOEQ0NSAvKiBKU1RyYWNrQ3VzdG9t
LmNwcCAqLzsgfTsKIAkJMDcwMzYzRTAxODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJl
U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
NzAzNjNEODE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLzsgfTsK
IAkJMDcwMzYzRTExODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzRDkxODFB
MUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tICovOyB9OwotCQkwNzAzNjNF
MjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREExODFBMUNEQzAwQzA3
NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgfTsKKwkJMDcwMzYzRTIxODFBMUNE
QzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0RBMTgxQTFDREMwMEMwNzRBNSAvKiBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMDcwMzYzRTMxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURl
dmljZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzAzNjNEQjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5t
bSAqLzsgfTsKIAkJMDcwMzYzRTQxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAz
NjNEQzE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCAqLzsgfTsKIAkJ
MDcwMzYzRTUxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREQxODFBMUNE
QzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tICovOyB9OwpAQCAtMjc0LDcgKzI3
NCw3IEBACiAJCTA3QjVBMzBEMTQ2ODdENzEwMEE4MUVDRSAvKiBKU1RleHRUcmFja0xpc3RDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdC
NUEzMEMxNDY4N0Q3MTAwQTgxRUNFIC8qIEpTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAgKi87IH07
CiAJCTA3QjcxMTZEMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0I3MTE2QTFEODk5RTYzMDA5
RjBGRkIgLyogQ2FwdHVyZURldmljZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTA3QjcxMTZFMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2
aWNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwN0I3MTE2QjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuY3Bw
ICovOyB9OwotCQkwN0I3MTE2RjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Qjcx
MTZDMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovOyB9OworCQkw
N0I3MTE2RjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QjcxMTZDMUQ4OTlFNjMw
MDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3QzA0NkMzMUU0MjUwOEIwMDcyMDFFNyAvKiBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NTcxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5jcHAgKi87IH07CiAJCTA3QzA0NkM0MUU0MjUwOEIwMDcyMDFFNyAvKiBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3M0I4NzU4MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwN0MwNDZDODFFNDI1MTU1MDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRp
YVN0cmVhbUNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwN0MwNDZDNjFFNDI1MTJGMDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0
cmVhbUNvY29hLmggKi87IH07CkBAIC0xNjYxLDYgKzE2NjEsNyBAQAogCQkzRjQyQjMxRTE4ODEx
OTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MkIzMUMxODgxMTkx
QjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLzsgfTsK
IAkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0Lm1tICovOyB9OwogCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTNGRjFGQTY2MUU3MzUwRkQwMEMxMDAyRiAvKiBDb3JlQXVkaW9DYXB0dXJl
U291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCAq
LzsgfTsKIAkJM0ZGODEzQTcxREJBODY0MDAwOUJGMDAxIC8qIFBvaW50ZXJMb2NrQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNGQzQz
NEYxOTI0MDZBOTAwQTBEM0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUw
MDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdl
YktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CiAJCTNGRkZGOUE5MTU5RDlBNTUwMDIwQkJE
NSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNGRkZGOUE3MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuaCAqLzsgfTsKQEAgLTkyMTgsNiArOTIxOSw4IEBACiAJCTNGMkIzM0UzMTY1
QUJEMzUwMEUzOTg3QyAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFdlYktpdENTU1ZpZXdwb3J0UnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTNGMkIzM0U5MTY1QUYxNTUwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdwb3J0
UnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdENT
U1ZpZXdwb3J0UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGMkIzM0VB
MTY1QUYxNTUwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzRjNCQjU4MjFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJM0YzQkI1ODMxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjQyQjMxQjE4ODExOTFCMDAyNzhBQUMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjQyQjMxQzE4ODExOTFCMDAyNzhBQUMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MDcyLDYgKzE2MDc1LDggQEAKIAkJCQkw
NzAzNjNERDE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0gKi8sCiAJ
CQkJMDcwMzYzREUxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLmggKi8s
CiAJCQkJMDcwMzYzREYxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLm1t
ICovLAorCQkJCTNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291
cmNlLmNwcCAqLywKKwkJCQkzRjNCQjU4MzFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oICovLAogCQkJCTA3NDRFQ0VCMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZU1hYy5oICovLAogCQkJCTA3NDRFQ0VDMUUwQzRBRTUwMDBEMDk0NCAv
KiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5tbSAqLywKIAkJCQkwN0VFNzZFRDFCRUE2MTk4
MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaCAqLywKQEAgLTMwNTQ0LDYg
KzMwNTQ5LDcgQEAKIAkJCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3RvcmFn
ZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3NDZBRjIxMTRGNERERTYwMDNFN0E3MiAvKiBD
b29yZGluYXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NDM4MTdGRjFBOTFCMkY4MDA2RTA0
RjIgLyogQ29yZU1lZGlhU29mdExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJM0ZGMUZBNjYx
RTczNTBGRDAwQzEwMDJGIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0Q3RDMzNDcxQzdBMTZCRjAwMDQxMjkzIC8qIENvcmVWaWRlb1NvZnRMaW5rLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOTUwMEU4MjA1NkIwMEIyNTk2NSAvKiBDb3VudGVy
RGlyZWN0aXZlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzkyRjE1MDBBRDE4NjIzMDA2OTFC
RDQgLyogQ291bnRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCmluZGV4IDFiM2UyMmJmMWJmN2FjMzQyOTFhMDdlMTIwNjU1ZDViNmUyODQ5MjkuLjlmOTJh
NmU5ZDllMjg0OTQ1ZTg2NGM5ZDkyZWNhYTYwZGM1OGNjNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwCkBAIC00OCw2ICs0OCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAorI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisjaW5jbHVkZSAiQVZDYXB0dXJlRGV2aWNlTWFuYWdl
ci5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUgIk1vY2tS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCiAjZW5kaWYKQEAgLTk0LDYgKzk4LDcgQEAgYm9v
bCBTZXR0aW5nczo6Z01vY2tTY3JvbGxBbmltYXRvckVuYWJsZWQgPSBmYWxzZTsKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQogYm9vbCBTZXR0aW5nczo6Z01vY2tDYXB0dXJlRGV2aWNlc0VuYWJs
ZWQgPSBmYWxzZTsKIGJvb2wgU2V0dGluZ3M6OmdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNv
bm5lY3Rpb24gPSB0cnVlOworYm9vbCBTZXR0aW5nczo6Z1VzZUFWRm91bmRhdGlvbkF1ZGlvQ2Fw
dHVyZSA9IGZhbHNlOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC02MTUsNiArNjIw
LDE5IEBAIHZvaWQgU2V0dGluZ3M6OnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVj
dGlvbihib29sIG1lZGlhQ2FwdHVyZVJlcXVpcmVzCiB7CiAgICAgZ01lZGlhQ2FwdHVyZVJlcXVp
cmVzU2VjdXJlQ29ubmVjdGlvbiA9IG1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlv
bjsKIH0KKworYm9vbCBTZXR0aW5nczo6dXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKCkKK3sK
KyAgICByZXR1cm4gZ1VzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZTsKK30KKwordm9pZCBTZXR0
aW5nczo6c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKGJvb2wgdXNlQVZGb3VuZGF0aW9u
QXVkaW9DYXB0dXJlKQoreworICAgIGdVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUgPSB1c2VB
VkZvdW5kYXRpb25BdWRpb0NhcHR1cmU7CisjaWYgVVNFKEFWRk9VTkRBVElPTikKKyAgICBBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUodXNlQVZG
b3VuZGF0aW9uQXVkaW9DYXB0dXJlKTsKKyNlbmRpZgorfQogI2VuZGlmCiAKIHZvaWQgU2V0dGlu
Z3M6OnNldFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9TZXR0aW5ncy5oCmluZGV4IDlmMzcwNzU1YjBiODJiZmU4MTkyODBhNTk4MTQwZGEz
OWY1ODIzOGQuLjg2M2JkMTJlYWYxMjFhNWZjZTBiZDhlYmJlYzJkYjFlMzYwMmIzNDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmgKQEAgLTMxMCw2ICszMTAsOSBAQCBwdWJsaWM6CiAKICAgICBib29s
IG1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbigpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVj
dGlvbihib29sKTsKKworICAgIHN0YXRpYyBib29sIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVy
ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZShib29sKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKQEAgLTQx
NSw2ICs0MTgsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX21lZGlhRGV2aWNlSWRlbnRpZmll
clN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgc3RhdGljIGJvb2wgZ01vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWQ7CiAgICAgc3RhdGljIGJvb2wgZ01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVj
dGlvbjsKKyAgICBzdGF0aWMgYm9vbCBnVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlOwogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQVBQTEVfUEFZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmgKaW5kZXggMjRmNzNiMDRkYzNhNWI4MTY4YTMzNDdmYTBjY2EyYTIyN2NhNDE0Zi4uYzYwY2Ez
Yjg1MmM2NDA3NzMyNzgyYjBkYTI3OGMzYjhmZWM0YjdkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2
aWNlTWFuYWdlci5oCkBAIC00NSw2ICs0NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEFWQ2FwdHVyZURldmljZU1hbmFnZXIgZmluYWwgOiBwdWJsaWMgQ2FwdHVyZURldmljZU1hbmFn
ZXIgewogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyPjsKIHB1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRVc2VBVkZv
dW5kYXRpb25BdWRpb0NhcHR1cmUoYm9vbCk7CisKICAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4m
IGNhcHR1cmVEZXZpY2VzKCkgZmluYWw7CiAKICAgICBzdGF0aWMgQVZDYXB0dXJlRGV2aWNlTWFu
YWdlciYgc2luZ2xldG9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCmluZGV4
IDNmMDM2ODMyZDUwZGE2YTAxZDM1MWViYWM4ZmIyMmJjMGZlMjY4N2YuLmNiYzM3MTc2NmI5ZTMw
MWI2MzY0MDdkNmIyNGE3ODhmZjVkN2U2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJBVk1lZGlhQ2FwdHVyZVNvdXJjZS5o
IgogI2ltcG9ydCAiQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCIKICNpbXBvcnQgIkF1ZGlvU291cmNl
UHJvdmlkZXIuaCIKKyNpbXBvcnQgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCIKICNpbXBvcnQg
IkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhQ29uc3RyYWludHMuaCIKICNpbXBvcnQgIlJlYWx0
aW1lTWVkaWFTb3VyY2UuaCIKQEAgLTkyLDYgKzkzLDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQgQVZDYXB0dXJlRGV2aWNlTWFuYWdl
cjo6c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBz
dGF0aWMgYm9vbCBhY3RpdmUgPSBmYWxzZTsKKyAgICBpZiAoYWN0aXZlICE9IGVuYWJsZWQpIHsK
KyAgICAgICAgYWN0aXZlID0gZW5hYmxlZDsKKyAgICAgICAgaWYgKGFjdGl2ZSkKKyAgICAgICAg
ICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLnNldEF1ZGlvRmFjdG9y
eShBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuc2V0QXVkaW9GYWN0
b3J5KENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkoKSk7CisgICAgfQorfQorCiBWZWN0
b3I8Q2FwdHVyZURldmljZT4mIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmNhcHR1cmVEZXZpY2Vz
KCkKIHsKICAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY0M2Q2ZmQyYjhiZjU5MGRiOWE1Nzk4Mjk2MzU0ZmM5NmY4
YzcyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcApAQCAtMCwwICsxLDUxOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9DYXB0dXJlU291cmNlLmgiCisKKyNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgiCisjaW5j
bHVkZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgorI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9B
dWRpb0NvbnZlcnRlci5oPgorI2luY2x1ZGUgPEF1ZGlvVW5pdC9BdWRpb1VuaXQuaD4KKyNpbmNs
dWRlIDxDb3JlTWVkaWEvQ01TeW5jLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KKyNp
bmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lu
Y2x1ZGUgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitj
bGFzcyBDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeSA6IHB1YmxpYyBSZWFsdGltZU1lZGlh
U291cmNlOjpDYXB0dXJlRmFjdG9yeSB7CitwdWJsaWM6CisgICAgUmVmUHRyPFJlYWx0aW1lTWVk
aWFTb3VyY2U+IGNyZWF0ZU1lZGlhU291cmNlRm9yQ2FwdHVyZURldmljZVdpdGhDb25zdHJhaW50
cyhjb25zdCBDYXB0dXJlRGV2aWNlJiBjYXB0dXJlRGV2aWNlLCBjb25zdCBNZWRpYUNvbnN0cmFp
bnRzKiBjb25zdHJhaW50cywgU3RyaW5nJiBpbnZhbGlkQ29uc3RyYWludCkgZmluYWwgeworICAg
ICAgICByZXR1cm4gQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGNhcHR1cmVEZXZpY2Us
IGNvbnN0cmFpbnRzLCBpbnZhbGlkQ29uc3RyYWludCk7CisgICAgfQorfTsKKworY29uc3QgVUlu
dDMyIG91dHB1dEJ1cyA9IDA7Citjb25zdCBVSW50MzIgaW5wdXRCdXMgPSAxOworCitSZWZQdHI8
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZT4gQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGNv
bnN0IENhcHR1cmVEZXZpY2UmIGRldmljZUluZm8sIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNv
bnN0cmFpbnRzLCBTdHJpbmcmIGludmFsaWRDb25zdHJhaW50KQoreworICAgIGF1dG8gc291cmNl
ID0gYWRvcHRSZWYobmV3IENvcmVBdWRpb0NhcHR1cmVTb3VyY2UoZGV2aWNlSW5mbykpOworICAg
IGlmIChjb25zdHJhaW50cykgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJjZS0+YXBwbHlD
b25zdHJhaW50cygqY29uc3RyYWludHMpOworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAg
ICAgICBpbnZhbGlkQ29uc3RyYWludCA9IHJlc3VsdC52YWx1ZSgpLmZpcnN0OworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc291cmNl
OworfQorCisKK1JlYWx0aW1lTWVkaWFTb3VyY2U6OkNhcHR1cmVGYWN0b3J5JiBDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpmYWN0b3J5KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3Rvcnk+IGZhY3Rvcnk7CisgICAgcmV0dXJuIGZhY3Rvcnku
Z2V0KCk7Cit9CisKKworQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Q29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZShjb25zdCBDYXB0dXJlRGV2aWNlJiBkZXZpY2VJbmZvKQorICAgIDogUmVhbHRpbWVNZWRp
YVNvdXJjZShlbXB0eVN0cmluZygpLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbywg
ZGV2aWNlSW5mby5sYWJlbCgpKQorICAgICwgbV9jYXB0dXJlRGV2aWNlSUQoMCkKK3sKKyAgICAv
LyBGSVhNRTogdXNlIGRldmljZUluZm8gdG8gc2V0IHRoZSBtX2NhcHR1cmVEZXZpY2VJRAorCisg
ICAgc2V0UGVyc2lzdGVudElEKGRldmljZUluZm8ucGVyc2lzdGVudElkKCkpOworICAgIHNldE11
dGVkKHRydWUpOworCisgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0Vm9sdW1lKDEuMCk7CisgICAg
bV9jdXJyZW50U2V0dGluZ3Muc2V0U2FtcGxlUmF0ZShwcmVmZXJyZWRTYW1wbGVSYXRlKCkpOwor
ICAgIG1fY3VycmVudFNldHRpbmdzLnNldERldmljZUlkKGlkKCkpOworICAgIG1fY3VycmVudFNl
dHRpbmdzLnNldEVjaG9DYW5jZWxsYXRpb24odHJ1ZSk7CisKKyAgICBtYWNoX3RpbWViYXNlX2lu
Zm9fZGF0YV90IHRpbWViYXNlSW5mbzsKKyAgICBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWViYXNl
SW5mbyk7CisgICAgbV9EVFNDb252ZXJzaW9uUmF0aW8gPSAxZS05ICogc3RhdGljX2Nhc3Q8ZG91
YmxlPih0aW1lYmFzZUluZm8ubnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUlu
Zm8uZGVub20pOworfQorCitDb3JlQXVkaW9DYXB0dXJlU291cmNlOjp+Q29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZSgpCit7CisgICAgc3VzcGVuZCgpOworCisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBpZiAobV9pb1VuaXQpCisgICAgICAg
IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlKG1faW9Vbml0KTsKKworICAgIG1faW9Vbml0
TmFtZSA9IGVtcHR5U3RyaW5nKCk7CisKKyAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXIgPSBu
dWxscHRyOworICAgIG1fc3BlYWtlclNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7CisKKyAgICBtX3Nw
ZWFrZXJQcm9jc0NhbGxlZCA9IDA7CisgICAgbV9taWNyb3Bob25lUHJvY3NDYWxsZWQgID0gMDsK
KyAgICBtX2xhdGVzdE1pY1RpbWVTdGFtcCA9IDA7CisKKyAgICBtX2FjdGl2ZVNvdXJjZXMuY2xl
YXIoKTsKKyAgICBtX3BlbmRpbmdTb3VyY2VzLmNsZWFyKCk7CisKKyAgICBtX3NwZWFrZXJTYW1w
bGVCdWZmZXIgPSBudWxscHRyOworCisgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IGZhbHNlOwor
ICAgIG1faW9Vbml0U3RhcnRlZCAgPSBmYWxzZTsKK30KKworZG91YmxlIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OnByZWZlcnJlZFNhbXBsZVJhdGUoKQoreworICAgIC8vIEZJWE1FOiBHZXQgdGhl
IHByZWZlcnJlZCByYXRlIGR5bmFtaWNhbGx5LCBrQVVWb2ljZUlPUHJvcGVydHlfUHJlZmVycmVk
SFdTYW1wbGVSYXRlLyBbW0FWQXVkaW9TZXNzaW9uIHNoYXJlZEluc3RhbmNlXSBwcmVmZXJyZWRT
YW1wbGVSYXRlXQorICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwcmVmZXJyZWRSYXRlID0gMjQwMDAu
OworICAgIHJldHVybiBwcmVmZXJyZWRSYXRlOworfQorCitkb3VibGUgQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6cHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbigpCit7CisgICAgLy8gRklYTUU6IEdl
dCB0aGUgcHJlZmVycmVkIGR1cmF0aW9uIGR5bmFtaWNhbGx5IC0ga0FVVm9pY2VJT1Byb3BlcnR5
X1ByZWZlcnJlZEhXQmxvY2tTaXplSW5TZWNvbmRzIC8gW1tBVkF1ZGlvU2Vzc2lvbiBzaGFyZWRJ
bnN0YW5jZV0gcHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbl0KKyAgICBzdGF0aWMgY29uc3QgZmxv
YXQgcHJlZmVycmVkRHVyYXRpb24gPSAwLjAyOworICAgIHJldHVybiBwcmVmZXJyZWREdXJhdGlv
bjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlTWljcm9w
aG9uZVByb2MoKQoreworICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJhY2sgPSB7IG1p
Y3JvcGhvbmVDYWxsYmFjaywgdGhpcyB9OworICAgIGF1dG8gZXJyID0gQXVkaW9Vbml0U2V0UHJv
cGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9TZXRJbnB1dENhbGxiYWNr
LCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2Fs
bGJhY2spKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gc2V0IHZw
aW8gdW5pdCBtaWMgcHJvYywgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFy
KikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24gbWljcm9waG9uZVByb2NGb3JtYXQgPSB7IH07CisKKyAgICBVSW50MzIg
c2l6ZSA9IHNpemVvZihtaWNyb3Bob25lUHJvY0Zvcm1hdCk7CisgICAgZXJyID0gQXVkaW9Vbml0
R2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtB
dWRpb1VuaXRTY29wZV9PdXRwdXQsIGlucHV0QnVzLCAmbWljcm9waG9uZVByb2NGb3JtYXQsICZz
aXplKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IG91dHB1
dCBzdHJlYW0gZm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIq
KSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIG1fbWljcm9waG9uZVNh
bXBsZUJ1ZmZlciA9IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y3JlYXRlKG1pY3JvcGhvbmVQcm9j
Rm9ybWF0LCBwcmVmZXJyZWRJT0J1ZmZlckR1cmF0aW9uKCkgKiBtaWNyb3Bob25lUHJvY0Zvcm1h
dC5tU2FtcGxlUmF0ZSAqIDIpOworICAgIG1fbWljcm9waG9uZVByb2NGb3JtYXQgPSBtaWNyb3Bo
b25lUHJvY0Zvcm1hdDsKKworICAgIHJldHVybiBlcnI7Cit9CisKK09TU3RhdHVzIENvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCkKK3sKKyAgICAvLyBTZXQgdGhl
IGZvcm1hdCBvZiB0aGUgZGF0YSB3ZSBzdXBwbHkgdG8gdGhlIG91dHB1dCBzdHJlYW0uCisKKyAg
ICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBzcGVha2VyQ2FsbGJhY2ssIHRo
aXMgfTsKKyAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVk
aW9Vbml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWws
IG91dHB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2spKTsKKyAgICBpZiAoZXJyKSB7
CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNw
ZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBzcGVha2VyIHByb2MsIGVycm9y
ICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVy
biBlcnI7CisgICAgfQorCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHNwZWFrZXJQ
cm9jRm9ybWF0ID0geyB9OworCisgICAgVUludDMyIHNpemUgPSBzaXplb2Yoc3BlYWtlclByb2NG
b3JtYXQpOworICAgIGVyciAgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlv
VW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRwdXRC
dXMsICZzcGVha2VyUHJvY0Zvcm1hdCwgJnNpemUpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAg
TE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlU3BlYWtlclByb2Mo
JXApIHVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwg
dGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9
CisKKyAgICBtX3NwZWFrZXJTYW1wbGVCdWZmZXIgPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNy
ZWF0ZShzcGVha2VyUHJvY0Zvcm1hdCwgcHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbigpICogc3Bl
YWtlclByb2NGb3JtYXQubVNhbXBsZVJhdGUgKiAyKTsKKyAgICBtX3NwZWFrZXJQcm9jRm9ybWF0
ID0gc3BlYWtlclByb2NGb3JtYXQ7CisKKyAgICByZXR1cm4gZXJyOworfQorCit1aW50NjRfdCBD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRNaWNyb3Bob25lRGF0YUNvbnN1bWVyKE1pY3JvcGhv
bmVEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2spOworICAgIG1fbWljcm9waG9uZURhdGFDYWxs
YmFja3MuYWRkKCsrbV9uZXh0TWljcm9waG9uZURhdGFDYWxsYmFja0lELCBjYWxsYmFjayk7CisK
KyAgICByZXR1cm4gbV9uZXh0TWljcm9waG9uZURhdGFDYWxsYmFja0lEOworfQorCit2b2lkIENv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnJlbW92ZU1pY3JvcGhvbmVEYXRhQ29uc3VtZXIodWludDY0
X3QgY2FsbGJhY2tJRCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3BlbmRp
bmdTb3VyY2VRdWV1ZUxvY2spOworICAgIG1fbWljcm9waG9uZURhdGFDYWxsYmFja3MucmVtb3Zl
KGNhbGxiYWNrSUQpOworfSAgICAKKwordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRF
Y2hvQ2FuY2VsbGF0aW9uU291cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYgc291cmNlKQorewor
ICAgIGlmICghc291cmNlLnNldE91dHB1dEZvcm1hdChtX3NwZWFrZXJQcm9jRm9ybWF0KSkgewor
ICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRFY2hvQ2FuY2Vs
bGF0aW9uU291cmNlOiBzb3VyY2UgJXAgY29uZmlndXJlT3V0cHV0IGZhaWxlZCIsICZzb3VyY2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxv
Y2sobV9wZW5kaW5nU291cmNlUXVldWVMb2NrKTsKKyAgICBtX3BlbmRpbmdTb3VyY2VzLmFwcGVu
ZCh7IFF1ZXVlQWN0aW9uOjpBZGQsIHNvdXJjZSB9KTsKK30KKwordm9pZCBDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpyZW1vdmVFY2hvQ2FuY2VsbGF0aW9uU291cmNlKEF1ZGlvU2FtcGxlRGF0YVNv
dXJjZSYgc291cmNlKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcGVuZGlu
Z1NvdXJjZVF1ZXVlTG9jayk7CisgICAgbV9wZW5kaW5nU291cmNlcy5hcHBlbmQoeyBRdWV1ZUFj
dGlvbjo6UmVtb3ZlLCBzb3VyY2UgfSk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZTo6Y2hlY2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIHVpbnQ2
NF90IHNhbXBsZVRpbWUsIGRvdWJsZSBob3N0VGltZSkKK3sKKyAgICBpZiAoIXRpbWVTdGFtcC5t
U2FtcGxlVGltZSB8fCBzYW1wbGVUaW1lID09IG1fbGF0ZXN0TWljVGltZVN0YW1wIHx8ICFob3N0
VGltZSkKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y2hlY2tU
aW1lc3RhbXBzOiB1bnVzdWFsIHRpbWVzdGFtcHMsIHNhbXBsZSB0aW1lID0gJWxsZCwgcHJldmlv
dXMgc2FtcGxlIHRpbWUgPSAlbGxkLCBob3N0VGltZSAlZiIsIHNhbXBsZVRpbWUsIG1fbGF0ZXN0
TWljVGltZVN0YW1wLCBob3N0VGltZSk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgLypp
b0FjdGlvbkZsYWdzKi8sIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIFVJbnQzMiAv
KmluQnVzTnVtYmVyKi8sIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBp
b0RhdGEpCit7CisgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGF1ZGlvIHVuaXQgbmVlZHMgZGF0YSB0
byBwbGF5IHRocm91Z2ggdGhlIHNwZWFrZXJzLgorICAgICsrbV9zcGVha2VyUHJvY3NDYWxsZWQ7
CisKKyAgICBpZiAobV9zcGVha2VyU2FtcGxlQnVmZmVyLT5zYW1wbGVDYXBhY2l0eSgpIDwgaW5O
dW1iZXJGcmFtZXMpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZTo6cHJvdmlkZVNwZWFrZXJEYXRhOiBzcGVha2VyIHNhbXBsZSBidWZmZXIgc2l6ZSAoJWQpIHRv
byBzbWFsbCBmb3IgYW1vdW50IG9mIHNhbXBsZSBkYXRhIHJlcXVlc3RlZCAoJWQpISIsIG1fc3Bl
YWtlclNhbXBsZUJ1ZmZlci0+c2FtcGxlQ2FwYWNpdHkoKSwgKGludClpbk51bWJlckZyYW1lcyk7
CisgICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKyAgICB9CisKKyAgICAvLyBBZGQv
cmVtb3ZlIHNvdXJjZXMgZnJvbSB0aGUgcXVldWUsIGJ1dCBvbmx5IGlmIHdlIGdldCB0aGUgbG9j
ayBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlIHRyeQorICAgIC8vIGFnYWluIG9uIHRoZSBuZXh0IGNh
bGxiYWNrLgorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcGVu
ZGluZ1NvdXJjZVF1ZXVlTG9jaywgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgICAgIGlmIChsb2Nr
Lm93bnNfbG9jaygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3BlbmRpbmdT
b3VyY2VzKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhaXIuZmlyc3QgPT0gUXVldWVBY3Rpb246
OkFkZCkKKyAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVTb3VyY2VzLmFwcGVuZChwYWlyLnNl
Y29uZC5jb3B5UmVmKCkpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvIHJlbW92ZVNvdXJjZSA9IHBhaXIuc2Vjb25kLmNvcHlSZWYoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9hY3RpdmVTb3VyY2VzLnJlbW92ZUZpcnN0TWF0Y2hpbmcoWyZyZW1vdmVT
b3VyY2VdKGF1dG8mIHNvdXJjZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNv
dXJjZS5wdHIoKSA9PSByZW1vdmVTb3VyY2UucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcGVuZGlu
Z1NvdXJjZXMuY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2FjdGl2ZVNv
dXJjZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGRvdWJsZSBhZGp1c3Rl
ZEhvc3RUaW1lID0gbV9EVFNDb252ZXJzaW9uUmF0aW8gKiB0aW1lU3RhbXAubUhvc3RUaW1lOwor
ICAgIHVpbnQ2NF90IHNhbXBsZVRpbWUgPSB0aW1lU3RhbXAubVNhbXBsZVRpbWU7CisgICAgY2hl
Y2tUaW1lc3RhbXBzKHRpbWVTdGFtcCwgc2FtcGxlVGltZSwgYWRqdXN0ZWRIb3N0VGltZSk7CisK
KyAgICBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPnJlc2V0KCk7CisgICAgbV9zcGVha2VyU2FtcGxl
QnVmZmVyLT5zZXRUaW1lcyhhZGp1c3RlZEhvc3RUaW1lLCBzYW1wbGVUaW1lKTsKKworICAgIEF1
ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCA9IG1fc3BlYWtlclNhbXBsZUJ1ZmZlci0+YnVmZmVy
TGlzdCgpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBidWZmZXJMaXN0Lm1OdW1iZXJC
dWZmZXJzOyArK2kpCisgICAgICAgIGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0gPSBpb0RhdGEtPm1C
dWZmZXJzW2ldOworCisgICAgYm9vbCBmaXJzdFNvdXJjZSA9IHRydWU7CisgICAgZm9yIChhdXRv
JiBzb3VyY2UgOiBtX2FjdGl2ZVNvdXJjZXMpIHsKKyAgICAgICAgc291cmNlLT5wdWxsU2FtcGxl
cygqbV9zcGVha2VyU2FtcGxlQnVmZmVyLmdldCgpLCBpbk51bWJlckZyYW1lcywgYWRqdXN0ZWRI
b3N0VGltZSwgc2FtcGxlVGltZSwgZmlyc3RTb3VyY2UgPyBBdWRpb1NhbXBsZURhdGFTb3VyY2U6
OkNvcHkgOiBBdWRpb1NhbXBsZURhdGFTb3VyY2U6Ok1peCk7CisgICAgICAgIGZpcnN0U291cmNl
ID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1cyBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpzcGVha2VyQ2FsbGJhY2sodm9pZCAqaW5SZWZDb24sIEF1ZGlv
VW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFt
cCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVz
LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICBBU1NFUlQoaW9BY3Rpb25GbGFncyk7
CisgICAgQVNTRVJUKGluVGltZVN0YW1wKTsKKyAgICBhdXRvIGRhdGFTb3VyY2UgPSBzdGF0aWNf
Y2FzdDxDb3JlQXVkaW9DYXB0dXJlU291cmNlKj4oaW5SZWZDb24pOworICAgIHJldHVybiBkYXRh
U291cmNlLT5wcm92aWRlU3BlYWtlckRhdGEoKmlvQWN0aW9uRmxhZ3MsICppblRpbWVTdGFtcCwg
aW5CdXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCBpb0RhdGEpOworfQorCitPU1N0YXR1cyBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVu
ZGVyQWN0aW9uRmxhZ3MmIGlvQWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1l
U3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1
ZmZlckxpc3QqIC8qaW9EYXRhKi8pCit7CisgICAgKyttX21pY3JvcGhvbmVQcm9jc0NhbGxlZDsK
KworICAgIC8vIFB1bGwgdGhyb3VnaCB0aGUgdnBpbyB1bml0IHRvIG91ciBtaWMgYnVmZmVyLgor
ICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+cmVzZXQoKTsKKyAgICBBdWRpb0J1ZmZlckxp
c3QmIGJ1ZmZlckxpc3QgPSBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPmJ1ZmZlckxpc3QoKTsK
KyAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdFJlbmRlcihtX2lvVW5pdCwgJmlvQWN0aW9uRmxhZ3Ms
ICZ0aW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgJmJ1ZmZlckxpc3QpOwor
ICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZTo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKCVwKSBBdWRpb1VuaXRSZW5kZXIgZmFpbGVkIHdp
dGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAg
ICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBkb3VibGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1f
RFRTQ29udmVyc2lvblJhdGlvICogdGltZVN0YW1wLm1Ib3N0VGltZTsKKyAgICB1aW50NjRfdCBz
YW1wbGVUaW1lID0gdGltZVN0YW1wLm1TYW1wbGVUaW1lOworICAgIGNoZWNrVGltZXN0YW1wcyh0
aW1lU3RhbXAsIHNhbXBsZVRpbWUsIGFkanVzdGVkSG9zdFRpbWUpOworICAgIG1fbGF0ZXN0TWlj
VGltZVN0YW1wID0gc2FtcGxlVGltZTsKKworICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+
c2V0VGltZXMoYWRqdXN0ZWRIb3N0VGltZSwgc2FtcGxlVGltZSk7CisKKyAgICBhdWRpb1NhbXBs
ZXNBdmFpbGFibGUoTWVkaWFUaW1lKHNhbXBsZVRpbWUsIG1fbWljcm9waG9uZVByb2NGb3JtYXQu
c2FtcGxlUmF0ZSgpKSwgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCksIG1f
bWljcm9waG9uZVByb2NGb3JtYXQsIGluTnVtYmVyRnJhbWVzKTsKKworICAgIGlmIChtX21pY3Jv
cGhvbmVEYXRhQ2FsbGJhY2tzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBm
b3IgKGF1dG8mIGNhbGxiYWNrIDogbV9taWNyb3Bob25lRGF0YUNhbGxiYWNrcy52YWx1ZXMoKSkK
KyAgICAgICAgY2FsbGJhY2soTWVkaWFUaW1lKHNhbXBsZVRpbWUsIG1fbWljcm9waG9uZVByb2NG
b3JtYXQuc2FtcGxlUmF0ZSgpKSwgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0
KCksIG1fbWljcm9waG9uZVByb2NGb3JtYXQsIGluTnVtYmVyRnJhbWVzKTsKKworICAgIHJldHVy
biBub0VycjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6bWljcm9waG9u
ZUNhbGxiYWNrKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9B
Y3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5C
dXNOdW1iZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEp
Cit7CisgICAgQVNTRVJUKGlvQWN0aW9uRmxhZ3MpOworICAgIEFTU0VSVChpblRpbWVTdGFtcCk7
CisgICAgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSogZGF0YVNvdXJjZSA9IHN0YXRpY19jYXN0PENv
cmVBdWRpb0NhcHR1cmVTb3VyY2UqPihpblJlZkNvbik7CisgICAgcmV0dXJuIGRhdGFTb3VyY2Ut
PnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcygqaW9BY3Rpb25GbGFncywgKmluVGltZVN0YW1wLCBp
bkJ1c051bWJlciwgaW5OdW1iZXJGcmFtZXMsIGlvRGF0YSk7Cit9CisKK09TU3RhdHVzIENvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OmRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCogZGV2aWNlSUQp
Cit7CisgICAgQVNTRVJUKG1faW9Vbml0KTsKKworICAgIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBz
aXplb2YoKmRldmljZUlEKTsKKyAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KG1f
aW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1ZGlvVW5p
dFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsIGRldmljZUlELCAmcHJvcGVydHlTaXplKTsKKyAgICBp
ZiAoZXJyKQorICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZh
dWx0SW5wdXREZXZpY2UoJXApIHVuYWJsZSB0byBnZXQgZGVmYXVsdCBpbnB1dCBkZXZpY2UgSUQs
IGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisKKyAgICBy
ZXR1cm4gZXJyOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1
ZGlvVW5pdHMoKQoreworICAgIEFTU0VSVChtX2ludGVybmFsU3RhdGVMb2NrLmlzSGVsZCgpKTsK
KworICAgIGlmIChtX2lvVW5pdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBdWRpb0NvbXBv
bmVudERlc2NyaXB0aW9uIGlvVW5pdERlc2NyaXB0aW9uID0geyBrQXVkaW9Vbml0VHlwZV9PdXRw
dXQsIGtBdWRpb1VuaXRTdWJUeXBlX1ZvaWNlUHJvY2Vzc2luZ0lPLCBrQXVkaW9Vbml0TWFudWZh
Y3R1cmVyX0FwcGxlLCAwLCAwIH07CisgICAgQXVkaW9Db21wb25lbnQgaW9Db21wb25lbnQgPSBB
dWRpb0NvbXBvbmVudEZpbmROZXh0KG51bGxwdHIsICZpb1VuaXREZXNjcmlwdGlvbik7CisgICAg
QVNTRVJUKGlvQ29tcG9uZW50KTsKKyAgICBpZiAoIWlvQ29tcG9uZW50KSB7CisgICAgICAgIExP
RyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5h
YmxlIHRvIGZpbmQgdnBpbyB1bml0IGNvbXBvbmVudCIsIHRoaXMpOworICAgICAgICByZXR1cm4g
LTE7CisgICAgfQorCisgICAgQ0ZTdHJpbmdSZWYgbmFtZSA9IG51bGxwdHI7CisgICAgQXVkaW9D
b21wb25lbnRDb3B5TmFtZShpb0NvbXBvbmVudCwgJm5hbWUpOworICAgIGlmIChuYW1lKSB7Cisg
ICAgICAgIG1faW9Vbml0TmFtZSA9IG5hbWU7CisgICAgICAgIENGUmVsZWFzZShuYW1lKTsKKyAg
ICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRz
KCVwKSBjcmVhdGVkIFwiJXNcIiBjb21wb25lbnQiLCB0aGlzLCBtX2lvVW5pdE5hbWUudXRmOCgp
LmRhdGEoKSk7CisgICAgfQorCisgICAgYXV0byBlcnIgPSBBdWRpb0NvbXBvbmVudEluc3RhbmNl
TmV3KGlvQ29tcG9uZW50LCAmbV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9H
KE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCVwKSB1bmFi
bGUgdG8gb3BlbiB2cGlvIHVuaXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAo
Y2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIHVpbnQzMl90IHBhcmFtID0gMTsKKyAgICBlcnIgPSBBdWRpb1VuaXRTZXRQcm9w
ZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9V
bml0U2NvcGVfSW5wdXQsIGlucHV0QnVzLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOworICAgIGlm
IChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0
dXBBdWRpb1VuaXRzKCVwKSB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBpbnB1dCwgZXJyb3Ig
JWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJu
IGVycjsKKyAgICB9CisKKyAgICBwYXJhbSA9IDE7CisgICAgZXJyID0gQXVkaW9Vbml0U2V0UHJv
cGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywga0F1ZGlv
VW5pdFNjb3BlX091dHB1dCwgb3V0cHV0QnVzLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOworICAg
IGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6
c2V0dXBBdWRpb1VuaXRzKCVwKSB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBvdXRwdXQsIGVy
cm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJl
dHVybiBlcnI7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoIW1fY2FwdHVyZURldmljZUlEKSB7
CisgICAgICAgIGVyciA9IGRlZmF1bHRJbnB1dERldmljZSgmbV9jYXB0dXJlRGV2aWNlSUQpOwor
ICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBV
SW50MzIgcHJvcGVydHlTaXplID0gc2l6ZW9mKG1fY2FwdHVyZURldmljZUlEKTsKKyAgICBlcnIg
PSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5
X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCAmbV9jYXB0
dXJlRGV2aWNlSUQsIHByb3BlcnR5U2l6ZSk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0co
TWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMoJXApIHVuYWJs
ZSB0byBzZXQgdnBpbyB1bml0IGNhcHR1cmUgZGV2aWNlIElELCBlcnJvciAlZCAoJS40cykiLCB0
aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0K
KworICAgIGVyciA9IGNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCk7CisgICAgaWYgKGVycikKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworICAgIGVyciA9IEF1ZGlvVW5pdEluaXRpYWxpemUobV9pb1Vu
aXQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCVwKSBBdWRpb1VuaXRJbml0aWFsaXplKCkgZmFpbGVk
LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAg
ICByZXR1cm4gZXJyOworICAgIH0KKyAgICBtX2lvVW5pdEluaXRpYWxpemVkID0gdHJ1ZTsKKwor
ICAgIGVyciA9IGNvbmZpZ3VyZVNwZWFrZXJQcm9jKCk7CisgICAgaWYgKGVycikKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9j
az4gbG9jayhtX2ludGVybmFsU3RhdGVMb2NrKTsKKyAgICBpZiAobV9pb1VuaXRTdGFydGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBPU1N0YXR1cyBlcnI7CisgICAgaWYgKCFtX2lvVW5pdCkg
eworICAgICAgICBlcnIgPSBzZXR1cEF1ZGlvVW5pdHMoKTsKKyAgICAgICAgaWYgKGVycikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlcnIgPSBBdWRpb091dHB1dFVuaXRTdGFy
dChtX2lvVW5pdCk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpzdGFydCglcCkgQXVkaW9PdXRwdXRVbml0U3RhcnQgZmFpbGVkIHdp
dGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1faW9Vbml0U3RhcnRlZCA9IHRydWU7CisgICAgc2V0
TXV0ZWQoZmFsc2UpOworfQorCit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9k
dWNpbmdEYXRhKCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2ludGVybmFs
U3RhdGVMb2NrKTsKKworICAgIEFTU0VSVChtX2lvVW5pdCk7CisKKyAgICBhdXRvIGVyciA9IEF1
ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9H
KE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RvcCglcCkgQXVkaW9PdXRwdXRVbml0
U3RvcCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIq
KSZlcnIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faW9Vbml0U3RhcnRlZCA9IGZh
bHNlOworICAgIHNldE11dGVkKHRydWUpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJl
U291cmNlOjpzdXNwZW5kKCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2lu
dGVybmFsU3RhdGVMb2NrKTsKKworICAgIEFTU0VSVChtX2lvVW5pdCk7CisKKyAgICBpZiAobV9p
b1VuaXRTdGFydGVkKSB7CisgICAgICAgIGF1dG8gZXJyID0gQXVkaW9PdXRwdXRVbml0U3RvcCht
X2lvVW5pdCk7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnJlc3VtZSglcCkgQXVkaW9PdXRwdXRVbml0U3RvcCBmYWls
ZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwor
ICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgICAgICBtX2lvVW5pdFN0YXJ0
ZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobV9pb1VuaXRJbml0aWFsaXplZCkgeworICAg
ICAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZShtX2lvVW5pdCk7CisgICAgICAg
IGlmIChlcnIpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OnJlc3VtZSglcCkgQXVkaW9Vbml0VW5pbml0aWFsaXplIGZhaWxlZCB3aXRoIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgICAgICByZXR1
cm4gZXJyOworICAgICAgICB9CisgICAgICAgIG1faW9Vbml0SW5pdGlhbGl6ZWQgPSBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZTo6cmVzdW1lKCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2ludGVy
bmFsU3RhdGVMb2NrKTsKKworICAgIEFTU0VSVChtX2lvVW5pdCk7CisgICAgQVNTRVJUKCFtX2lv
VW5pdFN0YXJ0ZWQpOworCisgICAgYXV0byBlcnIgPSBBdWRpb091dHB1dFVuaXRTdGFydChtX2lv
VW5pdCk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpyZXN1bWUoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCB3aXRoIGVy
cm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJl
dHVybiBlcnI7CisgICAgfQorICAgIG1faW9Vbml0U3RhcnRlZCA9IGZhbHNlOworCisgICAgcmV0
dXJuIGVycjsKK30KKworUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IENv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgaWYgKG1f
Y2FwYWJpbGl0aWVzKQorICAgICAgICByZXR1cm4gbV9jYXBhYmlsaXRpZXM7CisKKyAgICBtX3N1
cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGV2aWNlSWQodHJ1ZSk7CisgICAgbV9zdXBw
b3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0VjaG9DYW5jZWxsYXRpb24odHJ1ZSk7CisgICAg
bV9zdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c1ZvbHVtZSh0cnVlKTsKKworICAgIC8v
IEZJWE1FOiBmaW5pc2ggdGhpcy4KKyAgICBtX2NhcGFiaWxpdGllcyA9IFJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXM6OmNyZWF0ZShtX3N1cHBvcnRlZENvbnN0cmFpbnRzKTsKKyAgICBt
X2NhcGFiaWxpdGllcy0+c2V0RGV2aWNlSWQoaWQoKSk7CisgICAgbV9jYXBhYmlsaXRpZXMtPnNl
dEVjaG9DYW5jZWxsYXRpb24oUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6RWNob0Nh
bmNlbGxhdGlvbjo6UmVhZFdyaXRlKTsKKyAgICBtX2NhcGFiaWxpdGllcy0+c2V0Vm9sdW1lKENh
cGFiaWxpdHlWYWx1ZU9yUmFuZ2UoMC4wLCAxLjApKTsKKworICAgIHJldHVybiBtX2NhcGFiaWxp
dGllczsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpzZXR0aW5ncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VycmVudFNl
dHRpbmdzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjY3NjhiZTdiNjNhNjRmZWIxZGFiNWQ1ODJkZTUzZTBhYmEzOTNjYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0
dXJlU291cmNlLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisKKyNpbmNsdWRlICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJD
YXB0dXJlRGV2aWNlLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1
ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb1Rvb2xib3guaD4KKyNpbmNsdWRlIDxDb3JlQXVkaW8vQ29y
ZUF1ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0IE9w
YXF1ZUNNQ2xvY2sqIENNQ2xvY2tSZWY7CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgTWVkaWFU
aW1lOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvU2FtcGxlQnVmZmVy
TGlzdDsKK2NsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTsKK2NsYXNzIENhcHR1cmVEZXZpY2VJ
bmZvOworCitjbGFzcyBDb3JlQXVkaW9DYXB0dXJlU291cmNlIDogcHVibGljIFJlYWx0aW1lTWVk
aWFTb3VyY2UgeworcHVibGljOgorCisgICAgc3RhdGljIFJlZlB0cjxDb3JlQXVkaW9DYXB0dXJl
U291cmNlPiBjcmVhdGUoY29uc3QgQ2FwdHVyZURldmljZSYsIGNvbnN0IE1lZGlhQ29uc3RyYWlu
dHMqLCBTdHJpbmcmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBDYXB0dXJlRmFjdG9y
eSYgZmFjdG9yeSgpOworCisgICAgdm9pZCBhZGRFY2hvQ2FuY2VsbGF0aW9uU291cmNlKEF1ZGlv
U2FtcGxlRGF0YVNvdXJjZSYpOworICAgIHZvaWQgcmVtb3ZlRWNob0NhbmNlbGxhdGlvblNvdXJj
ZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmKTsKKworICAgIHVzaW5nIE1pY3JvcGhvbmVEYXRhQ2Fs
bGJhY2sgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBj
b25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYgYXVkaW9EYXRhLCBjb25zdCBBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgc2l6ZV90IHNhbXBsZUNvdW50KT47CisKKyAgICB1aW50NjRf
dCBhZGRNaWNyb3Bob25lRGF0YUNvbnN1bWVyKE1pY3JvcGhvbmVEYXRhQ2FsbGJhY2smJik7Cisg
ICAgdm9pZCByZW1vdmVNaWNyb3Bob25lRGF0YUNvbnN1bWVyKHVpbnQ2NF90KTsKKworICAgIENN
Q2xvY2tSZWYgdGltZWJhc2VDbG9jaygpOworCitwcml2YXRlOgorICAgIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2UoY29uc3QgQ2FwdHVyZURldmljZSYpOworICAgIHZpcnR1YWwgfkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2UoKTsKKworICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7Cisg
ICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIGJvb2wgaXNQcm9kdWNpbmdE
YXRhKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pb1VuaXRTdGFydGVkOyB9CisKKyAgICBPU1N0
YXR1cyBzdXNwZW5kKCk7CisgICAgT1NTdGF0dXMgcmVzdW1lKCk7CisKKyAgICBSZWZQdHI8UmVh
bHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4gY2FwYWJpbGl0aWVzKCkgY29uc3QgZmluYWw7
CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0
IGZpbmFsOworCisgICAgT1NTdGF0dXMgc2V0dXBBdWRpb1VuaXRzKCk7CisgICAgT1NTdGF0dXMg
Y29uZmlndXJlU3BlYWtlclByb2MoKTsKKyAgICBPU1N0YXR1cyBjb25maWd1cmVNaWNyb3Bob25l
UHJvYygpOworICAgIE9TU3RhdHVzIGRlZmF1bHRPdXRwdXREZXZpY2UodWludDMyX3QqKTsKKyAg
ICBPU1N0YXR1cyBkZWZhdWx0SW5wdXREZXZpY2UodWludDMyX3QqKTsKKworICAgIHZvaWQgY2hl
Y2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgdWludDY0X3QsIGRvdWJsZSk7CisK
KyAgICBzdGF0aWMgT1NTdGF0dXMgbWljcm9waG9uZUNhbGxiYWNrKHZvaWQqLCBBdWRpb1VuaXRS
ZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIs
IEF1ZGlvQnVmZmVyTGlzdCopOworICAgIE9TU3RhdHVzIHByb2Nlc3NNaWNyb3Bob25lU2FtcGxl
cyhBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgVUlu
dDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOworCisgICAgc3RhdGljIE9TU3RhdHVzIHNw
ZWFrZXJDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBB
dWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKKyAgICBP
U1N0YXR1cyBwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsK
KworICAgIHN0YXRpYyBkb3VibGUgcHJlZmVycmVkU2FtcGxlUmF0ZSgpOworICAgIHN0YXRpYyBk
b3VibGUgcHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbigpOworCisgICAgQXVkaW9Vbml0IG1faW9V
bml0IHsgbnVsbHB0ciB9OworICAgIFN0cmluZyBtX2lvVW5pdE5hbWU7CisKKyAgICAvLyBPbmx5
IHJlYWQvbW9kaWZpZWQgZnJvbSB0aGUgSU8gdGhyZWFkLgorICAgIFZlY3RvcjxSZWY8QXVkaW9T
YW1wbGVEYXRhU291cmNlPj4gbV9hY3RpdmVTb3VyY2VzOworCisgICAgZW51bSBRdWV1ZUFjdGlv
biB7IEFkZCwgUmVtb3ZlIH07CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxRdWV1ZUFjdGlvbiwgUmVm
PEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+PiBtX3BlbmRpbmdTb3VyY2VzOworCisgICAgdWludDMy
X3QgbV9jYXB0dXJlRGV2aWNlSUQgeyAwIH07CisKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24gbV9taWNyb3Bob25lUHJvY0Zvcm1hdDsKKyAgICBSZWZQdHI8QXVkaW9TYW1wbGVCdWZmZXJM
aXN0PiBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXI7CisgICAgdWludDY0X3QgbV9taWNyb3Bob25l
UHJvY3NDYWxsZWQgeyAwIH07CisgICAgdWludDY0X3QgbV9sYXRlc3RNaWNUaW1lU3RhbXAgeyAw
IH07CisKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNaWNyb3Bob25lRGF0YUNhbGxiYWNrPiBtX21p
Y3JvcGhvbmVEYXRhQ2FsbGJhY2tzOworICAgIHVpbnQ2NF90IG1fbmV4dE1pY3JvcGhvbmVEYXRh
Q2FsbGJhY2tJRCB7IDAgfTsKKworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX3NwZWFr
ZXJQcm9jRm9ybWF0OworICAgIFJlZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IG1fc3BlYWtl
clNhbXBsZUJ1ZmZlcjsKKyAgICB1aW50NjRfdCBtX3NwZWFrZXJQcm9jc0NhbGxlZCB7IDAgfTsK
KworICAgIGRvdWJsZSBtX0RUU0NvbnZlcnNpb25SYXRpbyB7IDAgfTsKKworICAgIGJvb2wgbV9p
b1VuaXRJbml0aWFsaXplZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lvVW5pdFN0YXJ0ZWQgeyBm
YWxzZSB9OworCisgICAgTG9jayBtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2s7CisgICAgTG9jayBt
X2ludGVybmFsU3RhdGVMb2NrOworCisgICAgbXV0YWJsZSBSZWZQdHI8UmVhbHRpbWVNZWRpYVNv
dXJjZUNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CisgICAgbXV0YWJsZSBSZWFsdGltZU1l
ZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgbV9zdXBwb3J0ZWRDb25zdHJhaW50czsKKyAg
ICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCmluZGV4IGVmOGFk
YzEyNzU1ZTFkMjE4ZDU0NTJlYzVkMDkyNmVkOWZmMzkzNGMuLjE1MDE4Yzk5OTRlZTA0ODgzNDE0
ZmQ1Njk4NWQ4ZDEyZDg0NDkyMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlck1hYy5jcHAKQEAgLTMzLDkgKzMzLDkgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuaCIKIAotI2luY2x1ZGUg
IkFWQXVkaW9DYXB0dXJlU291cmNlLmgiCiAjaW5jbHVkZSAiQVZDYXB0dXJlRGV2aWNlTWFuYWdl
ci5oIgogI2luY2x1ZGUgIkFWVmlkZW9DYXB0dXJlU291cmNlLmgiCisjaW5jbHVkZSAiQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRp
YVN0cmVhbVByaXZhdGUuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtNjMsNyAr
NjMsNyBAQCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjpSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyTWFjKCkKICAgICBtX3N1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGV2aWNl
SWQodHJ1ZSk7CiAgICAgbV9zdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0dyb3VwSWQo
dHJ1ZSk7CiAKLSAgICBtX2F1ZGlvRmFjdG9yeSA9ICZBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFj
dG9yeSgpOworICAgIG1fYXVkaW9GYWN0b3J5ID0gJkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmZh
Y3RvcnkoKTsKICAgICBtX3ZpZGVvRmFjdG9yeSA9ICZBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6ZmFj
dG9yeSgpOwogfQogCkBAIC0xNzQsNyArMTc0LDcgQEAgVmVjdG9yPFN0cmluZz4gUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck1hYzo6YmVzdFNvdXJjZXNGb3JUeXBlQW5kQ29uc3RyYWludHMoUmUK
IAogUmVhbHRpbWVNZWRpYVNvdXJjZTo6Q2FwdHVyZUZhY3RvcnkqIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXJNYWM6OmRlZmF1bHRBdWRpb0ZhY3RvcnkoKQogewotICAgIHJldHVybiAmQVZBdWRp
b0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkoKTsKKyAgICByZXR1cm4gJkNvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OmZhY3RvcnkoKTsKIH0KIAogUmVhbHRpbWVNZWRpYVNvdXJjZTo6Q2FwdHVyZUZhY3Rv
cnkqIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6OmRlZmF1bHRWaWRlb0ZhY3RvcnkoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1By
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2
YXRlLmgKaW5kZXggYjZhZDc1ZTc4NDVmMTQwMTAxZmU1ZmM1NzY0ZjZjMzc5ZTU2NjMxNC4uNGQx
YjFjN2E3M2U1MzAxYTQzZDFlNDc3YmJlNDgyZmQxMWE4MzMxNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCkBAIC0yMjQs
NiArMjI0LDcgQEAKICNkZWZpbmUgV2ViS2l0RW5hYmxlSW5oZXJpdFVSSVF1ZXJ5Q29tcG9uZW50
UHJlZmVyZW5jZUtleSBAIldlYktpdEVuYWJsZUluaGVyaXRVUklRdWVyeUNvbXBvbmVudCIKICNk
ZWZpbmUgV2ViS2l0TWVkaWFEYXRhTG9hZHNBdXRvbWF0aWNhbGx5UHJlZmVyZW5jZUtleSBAIldl
YktpdE1lZGlhRGF0YUxvYWRzQXV0b21hdGljYWxseSIKICNkZWZpbmUgV2ViS2l0TW9ja0NhcHR1
cmVEZXZpY2VzRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRNb2NrQ2FwdHVyZURldmljZXNF
bmFibGVkIgorI2RlZmluZSBXZWJLaXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVQcmVmZXJl
bmNlS2V5IEAiV2ViS2l0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlRW5hYmxlZCIKICNkZWZp
bmUgV2ViS2l0RW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWRQcmVmZXJlbmNl
S2V5IEAiV2ViS2l0RW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQiCiAjZGVm
aW5lIFdlYktpdElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2Vi
S2l0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0TWVkaWFDYXB0
dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uUHJlZmVyZW5jZUtleSBAIldlYktpdE1lZGlhQ2Fw
dHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzLm1tCmluZGV4IGQ1NjhhNjk2NmJmMmZlZThjMTM0NzMwMzMzODc0Mzkw
NzQ5Nzg1MWYuLmMxYjYxMmE1Nzg0MGFlZTkzYTJjOWI4NjFjNjcxNzdmMjYwNTM0NTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KKysrIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQpAQCAtNjE5LDYgKzYx
OSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCBXZWJLaXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkUHJl
ZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIFdlYktp
dE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvblByZWZlcmVuY2VLZXksCisgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sIFdlYktpdFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZVByZWZlcmVuY2VLZXksCiAjZW5kaWYKICAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOllFU10sIFdlYktpdFNoYWRvd0RPTUVuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgV2ViS2l0Q3VzdG9tRWxlbWVudHNF
bmFibGVkUHJlZmVyZW5jZUtleSwKQEAgLTI4NjYsNiArMjg2NywxNiBAQCBzdGF0aWMgTlNTdHJp
bmcgKmNsYXNzSUJDcmVhdG9ySUQgPSBuaWw7CiAgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFn
IGZvcktleTpXZWJLaXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkUHJlZmVyZW5jZUtleV07CiB9
CiAKKy0gKEJPT0wpdXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlCit7CisgICAgcmV0dXJuIFtz
ZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlUHJl
ZmVyZW5jZUtleV07Cit9CisKKy0gKHZvaWQpc2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJl
OihCT09MKWZsYWcKK3sKKyAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktp
dFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZVByZWZlcmVuY2VLZXldOworfQorCiAtIChCT09M
KWVudW1lcmF0aW5nQWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVkCiB7CiAgICAgcmV0dXJuIFtz
ZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0RW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNl
c0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCmluZGV4IGVlOTVmZjg3OTI3MjMxOTRmZTgyMGM2M2E5
ZTRkN2YxNjA5Njk4Y2QuLmY4MTEzYzFjOTkzZjQ4MmMzNGJlYTRiMmI2OGQwMTBmMWUyNzA0Njkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2
YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaApAQCAtNTExLDYgKzUxMSw5IEBAIGV4dGVybiBOU1N0cmluZyAqV2ViUHJlZmVyZW5jZXND
YWNoZU1vZGVsQ2hhbmdlZEludGVybmFsTm90aWZpY2F0aW9uOwogLSAodm9pZClzZXRNZWRpYUNh
cHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb246KEJPT0wpZmxhZzsKIC0gKEJPT0wpbWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOwogCistICh2b2lkKXNldFVzZUFWRm91bmRh
dGlvbkF1ZGlvQ2FwdHVyZTooQk9PTClmbGFnOworLSAoQk9PTCl1c2VBVkZvdW5kYXRpb25BdWRp
b0NhcHR1cmU7CisKIC0gKHZvaWQpc2V0U2hhZG93RE9NRW5hYmxlZDooQk9PTClmbGFnOwogLSAo
Qk9PTClzaGFkb3dET01FbmFibGVkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
aW5kZXggY2FhNzIyMzljNWM4ODhhZTE0Y2ExZDA0OTc4MTJiNjk5OGM3OWJlZS4uNWNiYjA2MzYz
YTFjZjdmNGI3ZmIwODdhNGIwNTUxY2M4ZjAyMzk0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQpAQCAtMjk2NCw2ICsyOTY0LDcgQEAgc3RhdGljIGJvb2wgbmVlZHNTZWxmUmV0
YWluV2hpbGVMb2FkaW5nUXVpcmsoKQogICAgIHNldHRpbmdzLnNldE1vY2tDYXB0dXJlRGV2aWNl
c0VuYWJsZWQoW3ByZWZlcmVuY2VzIG1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRdKTsKICAgICBz
ZXR0aW5ncy5zZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oW3ByZWZlcmVu
Y2VzIG1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbl0pOwogICAgIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0TWVkaWFTdHJlYW1FbmFibGVkKFtw
cmVmZXJlbmNlcyBtZWRpYVN0cmVhbUVuYWJsZWRdKTsKKyAgICBzZXR0aW5ncy5zZXRVc2VBVkZv
dW5kYXRpb25BdWRpb0NhcHR1cmUoW3ByZWZlcmVuY2VzIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2Fw
dHVyZV0pOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oCmluZGV4IDZjMTlkNTQ0NWRk
ZGJlNjY1Y2NkNzJmYzg4ZWRhYzczZDVkYzU4YWYuLjZlZjE3ZGE0MTQ5YTFiZDhjNjBjNDBjYzk2
ZTVhNmIxMjJmYTkwZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVm
ZXJlbmNlc0RlZmluaXRpb25zLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZl
cmVuY2VzRGVmaW5pdGlvbnMuaApAQCAtMjM3LDYgKzIzNyw3IEBACiAgICAgbWFjcm8oSFRUUEVx
dWl2RW5hYmxlZCwgaHR0cEVxdWl2RW5hYmxlZCwgQm9vbCwgYm9vbCwgdHJ1ZSwgIiIsICIiKSBc
CiAgICAgbWFjcm8oTW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCwgbW9ja0NhcHR1cmVEZXZpY2Vz
RW5hYmxlZCwgQm9vbCwgYm9vbCwgZmFsc2UsICIiLCAiIikgXAogICAgIG1hY3JvKE1lZGlhQ2Fw
dHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbiwgbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVD
b25uZWN0aW9uLCBCb29sLCBib29sLCB0cnVlLCAiIiwgIiIpIFwKKyAgICBtYWNybyhVc2VBVkZv
dW5kYXRpb25BdWRpb0NhcHR1cmUsIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSwgQm9vbCwg
Ym9vbCwgZmFsc2UsICIiLCAiIikgXAogICAgIG1hY3JvKEVudW1lcmF0aW5nQWxsTmV0d29ya0lu
dGVyZmFjZXNFbmFibGVkLCBlbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZCwg
Qm9vbCwgYm9vbCwgZmFsc2UsICIiLCAiIikgXAogICAgIG1hY3JvKFdlYlJUQ0xlZ2FjeUFQSUVu
YWJsZWQsIHdlYlJUQ0xlZ2FjeUFQSUVuYWJsZWQsIEJvb2wsIGJvb2wsIHRydWUsICIiLCAiIikg
XAogICAgIG1hY3JvKElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQsIGljZUNhbmRpZGF0ZUZp
bHRlcmluZ0VuYWJsZWQsIEJvb2wsIGJvb2wsIHRydWUsICIiLCAiIikgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCmluZGV4IDk3ZWMxNDll
NDc2YjdiYjhiODNmMDE2YzA0NTY0YzNiZGViZDE3ZmIuLjFkMGMxM2I1Mzk1NzMzZDVkY2QxNjYw
YTU2MjhlYzIyZjMyYjMxN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1ByZWZlcmVuY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tQcmVmZXJlbmNlcy5jcHAKQEAgLTE1OTEsNiArMTU5MSwxNiBAQCBib29sIFdLUHJlZmVy
ZW5jZXNHZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oV0tQcmVmZXJlbmNl
c1JlZiBwcmVmZQogICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5tZWRpYUNhcHR1
cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKTsKIH0KIAordm9pZCBXS1ByZWZlcmVuY2VzU2V0
VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNS
ZWYsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRVc2VB
VkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoZW5hYmxlZCk7Cit9CisKK2Jvb2wgV0tQcmVmZXJlbmNl
c0dldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmKQoreworICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT51c2VBVkZvdW5k
YXRpb25BdWRpb0NhcHR1cmUoKTsKK30KKwogdm9pZCBXS1ByZWZlcmVuY2VzU2V0RmV0Y2hBUElF
bmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKICAg
ICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRGZXRjaEFQSUVuYWJsZWQoZmxhZyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVm
UHJpdmF0ZS5oCmluZGV4IGM1Y2RjYmE0OWViOWYwZjMxMjRlOGUyNzQwMDg5NzljZDQxMDU2NGYu
LjhiYjcxZDk2ZjE1MDIyYjIyMWQzMTNkZmIxNmZkYTFhZmIzMjc0YTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0
ZS5oCkBAIC00MzMsNiArNDMzLDEwIEBAIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRF
bnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZChXS1ByZWZlcmVuCiBXS19FWFBP
UlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0
aW9uKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNl
c0dldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihXS1ByZWZlcmVuY2VzUmVm
KTsKIAorLy8gRGVmYXVsdHMgdG8gZmFsc2UuCitXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2Vz
U2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wpOwor
V0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVy
ZShXS1ByZWZlcmVuY2VzUmVmKTsKKyAgICAKIC8vIERlZmF1bHRzIHRvIGZhbHNlCiBXS19FWFBP
UlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0RmV0Y2hBUElFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYs
IGJvb2wgZmxhZyk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0RmV0Y2hBUElFbmFi
bGVkKFdLUHJlZmVyZW5jZXNSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwCmluZGV4
IDcwYWZjN2EyMGNhOWEyZjc4NjU3MzFiOGNiMTlhOWI1YzM5MGM0ZGEuLmM2ZjdhZTlhYzQ2NmNl
ZGU0YzkyYjNiYjg3ZDk1Y2I0ODZmYTI5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5j
cHAKQEAgLTEyOCw3ICsxMjgsNyBAQCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5Ojp+VXNl
ck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpCiB2b2lkIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZU1lZGlhU291cmNlRm9yQ2FwdHVyZURldmljZVdpdGhDb25zdHJhaW50cyh1
aW50NjRfdCBpZCwgY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25zdCBNZWRpYUNvbnN0
cmFpbnRzRGF0YSYgY29uc3RyYWludHNEYXRhLCBib29sJiBzdWNjZWVkZWQsIFN0cmluZyYgaW52
YWxpZENvbnN0cmFpbnRzKQogewogICAgIGF1dG8gY29uc3RyYWludHMgPSBNZWRpYUNvbnN0cmFp
bnRzSW1wbDo6Y3JlYXRlKGNvbnN0cmFpbnRzRGF0YSk7Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVk
aWFTb3VyY2U+IHNvdXJjZSA9IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigp
LmRlZmF1bHRBdWRpb0ZhY3RvcnkoKS0+Y3JlYXRlTWVkaWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNl
V2l0aENvbnN0cmFpbnRzKGRldmljZSwgY29uc3RyYWludHMucHRyKCksIGludmFsaWRDb25zdHJh
aW50cyk7CisgICAgYXV0byBzb3VyY2UgPSBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5n
bGV0b24oKS5hdWRpb0ZhY3RvcnkoKS0+Y3JlYXRlTWVkaWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNl
V2l0aENvbnN0cmFpbnRzKGRldmljZSwgY29uc3RyYWludHMucHRyKCksIGludmFsaWRDb25zdHJh
aW50cyk7CiAgICAgc3VjY2VlZGVkID0gISFzb3VyY2U7CiAgICAgCiAgICAgaWYgKHNvdXJjZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDI5NGRiYjE4Y2E2ODAw
NTQ1YzViNzUxZTlhYTE1NzY5YmE4NDM4MjMuLmY3MmFjMDJjYjMwMDIwMWQxZWYwMDcyYTk1MmUy
MzE5YmJlMDhlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcApAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFD
b25zdHJhaW50c0ltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01vY2tSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWFsdGltZU1lZGlhU291cmNlLmg+CkBA
IC0zMjksNiArMzMwLDExIEBAIHZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHk6OnN5bmNXaXRoV2ViQ29yZVByZWZzKCkgY29uc3QKICAgICAvLyB0aGlzIGlzIGEgbm9v
cCBpZiB0aGUgcHJlZmVyZW5jZSBoYXNuJ3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRo
aXMgd2FzIGNhbGxlZC4KICAgICBib29sIG1vY2tEZXZpY2VzRW5hYmxlZCA9IG1fcGFnZS5wcmVm
ZXJlbmNlcygpLm1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoKTsKICAgICBXZWJDb3JlOjpNb2Nr
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2V0TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJFbmFibGVkKG1vY2tEZXZpY2VzRW5hYmxlZCk7CisKKyNpZiBVU0UoQVZGT1VOREFUSU9OKQor
ICAgIGJvb2wgdXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlID0gbV9wYWdlLnByZWZlcmVuY2Vz
KCkudXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKCk7CisgICAgV2ViQ29yZTo6QVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKHVzZUFWRm91bmRh
dGlvbkF1ZGlvQ2FwdHVyZSk7CisjZW5kaWYKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggNDM1YTllYTFhY2JhOTIyYzBi
YmUzZjcyNjJhMWNiMDgxMDQ5NmI0MC4uMjU5YTk2Mjg0NTY4ZmYxZjEzNjIxNzE4MjM1MTFjMTZi
ZTBlZTExMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcApAQCAtMzI0MCw2ICszMjQwLDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNl
cyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKICNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQogICAgIHNldHRpbmdzLnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoc3RvcmUuZ2V0
Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojptb2NrQ2FwdHVyZURldmljZXNFbmFi
bGVkS2V5KCkpKTsKICAgICBzZXR0aW5ncy5zZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNv
bm5lY3Rpb24oc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjptZWRp
YUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb25LZXkoKSkpOworICAgIHNldHRpbmdzLnNl
dFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2Vi
UHJlZmVyZW5jZXNLZXk6OnVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZUtleSgpKSk7CiAjZW5k
aWYKIAogICAgIHNldHRpbmdzLnNldFNob3VsZENvbnZlcnRQb3NpdGlvblN0eWxlT25Db3B5KHN0
b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6c2hvdWxkQ29udmVydFBv
c2l0aW9uU3R5bGVPbkNvcHlLZXkoKSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306407</attachid>
            <date>2017-04-06 12:03:36 -0700</date>
            <delta_ts>2017-04-08 12:04:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170112-20170406120335.patch</filename>
            <type>text/plain</type>
            <size>54713</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg2M2JlNThiOWFjZDEz
MTFiNWQ1NmQ3N2U2MzgxNjM1NzJkODQzNy4uNzMwYTg1Njg4YzY3NTY2ZDFlN2JjYjlkZWZhZmEx
NTViNTRhYmU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE3LTA0LTA1ICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDExMgorICAgICAgICByZGFyOi8vcHJvYmxlbS8zMDI5MzMzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNl
IHRoaXMgcHJvdmlkZXMgdGhlIHNhbWUgZnVuY2l0b25hbGl0eSBhcyBBVkF1ZGlvQ2FwdHVyZVNv
dXJjZS4gCisgICAgICAgIEZ1bmNpb25hbGl0eSBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Qg
Y2FzZXMuCisKKyAgICAgICAgQWRkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UgZm9yIGF1ZGlvIGNh
cHR1cmUuIEFuZCB1c2UgaXQgYnkgZGVmYXVsdCBpbiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLgor
ICAgICAgICBBZGQgVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlIHNldHRpbmcgdG8gc3dpdGNo
IGJhY2sgdG8gQVZGb3VuZGF0aW9uIGZvciBhdWRpbyBjYXB0dXJlLgorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnVzZUFWRm91bmRhdGlvbkF1ZGlvQ2Fw
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0VXNlQVZGb3VuZGF0aW9uQXVk
aW9DYXB0dXJlKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNldFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRp
b0NhcHR1cmVTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJl
U291cmNlOjpmYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6fkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJlZmVycmVkU2FtcGxlUmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcmVmZXJyZWRJT0J1ZmZlckR1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3Vy
ZU1pY3JvcGhvbmVQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmFkZE1pY3JvcGhvbmVEYXRhQ29uc3VtZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3ZlTWljcm9waG9uZURhdGFDb25zdW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRFY2hvQ2FuY2Vs
bGF0aW9uU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnJlbW92ZUVjaG9DYW5jZWxsYXRpb25Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6Y2hlY2tUaW1lc3RhbXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzcGVha2VyQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6Om1pY3JvcGhvbmVD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZh
dWx0T3V0cHV0RGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmRlZmF1bHRJbnB1dERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpzZXR0aW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYzo6UmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck1hYyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyTWFjOjpkZWZhdWx0QXVkaW9GYWN0b3J5KToKKwogMjAxNy0wMy0yOSAgTXlsZXMg
Qy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFRyeSB0byBub3Jt
YWxpemUgdmFyaWF0aW9uIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDRjOTE3ZDMwZTBmOTQ2
YTMzMGIyNGY3YjU4MWJkOWViNDAzZmNmOTMuLmRjYjViNjM3YjQzNzY2YmRhYTUwMzYzM2VlN2Fi
NTQ4ZTY3NWQ0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxNy0wNC0w
NSAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIENvcmVB
dWRpb0NhcHR1cmVTb3VyY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzAxMTIKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMzAyOTMzMzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVXNlQVZGb3Vu
ZGF0aW9uQXVkaW9DYXB0dXJlIHByZWZlcmVuY2UgdG8gc3dpdGNoIGJhY2sgZnJvbSB0aGUgbmV3
IGRlZmF1bHQgb2YgQ29yZUF1ZGlvLgorCisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAg
ICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFsaXplXSk6CisgICAgICAgICgtW1dlYlByZWZl
cmVuY2VzIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZV0pOgorICAgICAgICAoLVtXZWJQcmVm
ZXJlbmNlcyBzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmU6XSk6CisgICAgICAgICogV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcu
bW06CisgICAgICAgICgtW1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZDpdKToKKwogMjAxNy0w
My0yNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFNhdmluZyBmaWxlcyBzaG91bGQgbm90IHN1Z2dlc3QgdGhlIHRvcCBsZXZl
bCBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxMDkzOWNmMWM5ZWNlMDhiZDhmODgxOTU5NDFhZjg3
YmI1NGJjYmRhLi4zMjhhNjM1OTlhOWNlYTYxMzg1YjE2NDQxNTAyZjA5NGMzNTRmNmY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTctMDQtMDUgIEplcmVteSBKb25lcyAgPGplcmVt
eWpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTEyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzMwMjkzMzM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSBwcmVm
ZXJlbmNlIHRvIHN3aXRjaCBiYWNrIGZyb20gdGhlIG5ldyBkZWZhdWx0IG9mIENvcmVBdWRpby4K
KworICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV0tQcmVmZXJl
bmNlc1NldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSk6CisgICAgICAgIChXS1ByZWZlcmVu
Y2VzR2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVz
ZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6OmNyZWF0ZU1lZGlhU291cmNlRm9yQ2FwdHVyZURl
dmljZVdpdGhDb25zdHJhaW50cyk6CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OnN5bmNXaXRoV2ViQ29yZVByZWZzKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKwogMjAxNy0wMy0yOSAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIFBhZ2VD
bGllbnQ6OnJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyYTRhYThlNGIzYmI1
ODU0MjEyNThkZWU3YjY0ZTEwMzFhNGNkNjRhLi5kNTJlN2MzNDA2NWFjYTFiYjI1NGNlOTY2MTZi
YjRmYmQ2MmVhNjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC03Myw3ICs3Myw3IEBACiAJCTA3MDMzNEU5MTQ1QTFGMzYwMDhE
OEQ0NSAvKiBKU1RyYWNrQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3MDMzNEU4MTQ1QTFGMzUwMDhEOEQ0NSAvKiBKU1RyYWNrQ3VzdG9t
LmNwcCAqLzsgfTsKIAkJMDcwMzYzRTAxODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJl
U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
NzAzNjNEODE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLzsgfTsK
IAkJMDcwMzYzRTExODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzRDkxODFB
MUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tICovOyB9OwotCQkwNzAzNjNF
MjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREExODFBMUNEQzAwQzA3
NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgfTsKKwkJMDcwMzYzRTIxODFBMUNE
QzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0RBMTgxQTFDREMwMEMwNzRBNSAvKiBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMDcwMzYzRTMxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURl
dmljZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzAzNjNEQjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5t
bSAqLzsgfTsKIAkJMDcwMzYzRTQxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAz
NjNEQzE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCAqLzsgfTsKIAkJ
MDcwMzYzRTUxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREQxODFBMUNE
QzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tICovOyB9OwpAQCAtMjc0LDcgKzI3
NCw3IEBACiAJCTA3QjVBMzBEMTQ2ODdENzEwMEE4MUVDRSAvKiBKU1RleHRUcmFja0xpc3RDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdC
NUEzMEMxNDY4N0Q3MTAwQTgxRUNFIC8qIEpTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAgKi87IH07
CiAJCTA3QjcxMTZEMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0I3MTE2QTFEODk5RTYzMDA5
RjBGRkIgLyogQ2FwdHVyZURldmljZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTA3QjcxMTZFMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2
aWNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwN0I3MTE2QjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuY3Bw
ICovOyB9OwotCQkwN0I3MTE2RjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Qjcx
MTZDMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovOyB9OworCQkw
N0I3MTE2RjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QjcxMTZDMUQ4OTlFNjMw
MDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3QzA0NkMzMUU0MjUwOEIwMDcyMDFFNyAvKiBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NTcxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5jcHAgKi87IH07CiAJCTA3QzA0NkM0MUU0MjUwOEIwMDcyMDFFNyAvKiBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3M0I4NzU4MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwN0MwNDZDODFFNDI1MTU1MDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRp
YVN0cmVhbUNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwN0MwNDZDNjFFNDI1MTJGMDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0
cmVhbUNvY29hLmggKi87IH07CkBAIC0xNjYxLDYgKzE2NjEsNyBAQAogCQkzRjQyQjMxRTE4ODEx
OTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y0MkIzMUMxODgxMTkx
QjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLzsgfTsK
IAkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0Lm1tICovOyB9OwogCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTNGRjFGQTY2MUU3MzUwRkQwMEMxMDAyRiAvKiBDb3JlQXVkaW9DYXB0dXJl
U291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCAq
LzsgfTsKIAkJM0ZGODEzQTcxREJBODY0MDAwOUJGMDAxIC8qIFBvaW50ZXJMb2NrQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNGQzQz
NEYxOTI0MDZBOTAwQTBEM0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUw
MDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdl
YktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CiAJCTNGRkZGOUE5MTU5RDlBNTUwMDIwQkJE
NSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNGRkZGOUE3MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuaCAqLzsgfTsKQEAgLTkyMTgsNiArOTIxOSw4IEBACiAJCTNGMkIzM0UzMTY1
QUJEMzUwMEUzOTg3QyAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFdlYktpdENTU1ZpZXdwb3J0UnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTNGMkIzM0U5MTY1QUYxNTUwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdwb3J0
UnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdENT
U1ZpZXdwb3J0UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGMkIzM0VB
MTY1QUYxNTUwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzRjNCQjU4MjFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJM0YzQkI1ODMxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjQyQjMxQjE4ODExOTFCMDAyNzhBQUMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjQyQjMxQzE4ODExOTFCMDAyNzhBQUMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFGMTE4OTg4MTU2MDA0NkVFMzggLyog
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MDcyLDYgKzE2MDc1LDggQEAKIAkJCQkw
NzAzNjNERDE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0gKi8sCiAJ
CQkJMDcwMzYzREUxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLmggKi8s
CiAJCQkJMDcwMzYzREYxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLm1t
ICovLAorCQkJCTNGM0JCNTgyMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291
cmNlLmNwcCAqLywKKwkJCQkzRjNCQjU4MzFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oICovLAogCQkJCTA3NDRFQ0VCMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZU1hYy5oICovLAogCQkJCTA3NDRFQ0VDMUUwQzRBRTUwMDBEMDk0NCAv
KiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5tbSAqLywKIAkJCQkwN0VFNzZFRDFCRUE2MTk4
MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaCAqLywKQEAgLTMwNTQ0LDYg
KzMwNTQ5LDcgQEAKIAkJCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3RvcmFn
ZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3NDZBRjIxMTRGNERERTYwMDNFN0E3MiAvKiBD
b29yZGluYXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NDM4MTdGRjFBOTFCMkY4MDA2RTA0
RjIgLyogQ29yZU1lZGlhU29mdExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJM0ZGMUZBNjYx
RTczNTBGRDAwQzEwMDJGIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0Q3RDMzNDcxQzdBMTZCRjAwMDQxMjkzIC8qIENvcmVWaWRlb1NvZnRMaW5rLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOTUwMEU4MjA1NkIwMEIyNTk2NSAvKiBDb3VudGVy
RGlyZWN0aXZlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzkyRjE1MDBBRDE4NjIzMDA2OTFC
RDQgLyogQ291bnRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCmluZGV4IDFiM2UyMmJmMWJmN2FjMzQyOTFhMDdlMTIwNjU1ZDViNmUyODQ5MjkuLjlmOTJh
NmU5ZDllMjg0OTQ1ZTg2NGM5ZDkyZWNhYTYwZGM1OGNjNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwCkBAIC00OCw2ICs0OCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAorI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisjaW5jbHVkZSAiQVZDYXB0dXJlRGV2aWNlTWFuYWdl
ci5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUgIk1vY2tS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCiAjZW5kaWYKQEAgLTk0LDYgKzk4LDcgQEAgYm9v
bCBTZXR0aW5nczo6Z01vY2tTY3JvbGxBbmltYXRvckVuYWJsZWQgPSBmYWxzZTsKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQogYm9vbCBTZXR0aW5nczo6Z01vY2tDYXB0dXJlRGV2aWNlc0VuYWJs
ZWQgPSBmYWxzZTsKIGJvb2wgU2V0dGluZ3M6OmdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNv
bm5lY3Rpb24gPSB0cnVlOworYm9vbCBTZXR0aW5nczo6Z1VzZUFWRm91bmRhdGlvbkF1ZGlvQ2Fw
dHVyZSA9IGZhbHNlOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC02MTUsNiArNjIw
LDE5IEBAIHZvaWQgU2V0dGluZ3M6OnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVj
dGlvbihib29sIG1lZGlhQ2FwdHVyZVJlcXVpcmVzCiB7CiAgICAgZ01lZGlhQ2FwdHVyZVJlcXVp
cmVzU2VjdXJlQ29ubmVjdGlvbiA9IG1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlv
bjsKIH0KKworYm9vbCBTZXR0aW5nczo6dXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKCkKK3sK
KyAgICByZXR1cm4gZ1VzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZTsKK30KKwordm9pZCBTZXR0
aW5nczo6c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKGJvb2wgdXNlQVZGb3VuZGF0aW9u
QXVkaW9DYXB0dXJlKQoreworICAgIGdVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUgPSB1c2VB
VkZvdW5kYXRpb25BdWRpb0NhcHR1cmU7CisjaWYgVVNFKEFWRk9VTkRBVElPTikKKyAgICBBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUodXNlQVZG
b3VuZGF0aW9uQXVkaW9DYXB0dXJlKTsKKyNlbmRpZgorfQogI2VuZGlmCiAKIHZvaWQgU2V0dGlu
Z3M6OnNldFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9TZXR0aW5ncy5oCmluZGV4IDlmMzcwNzU1YjBiODJiZmU4MTkyODBhNTk4MTQwZGEz
OWY1ODIzOGQuLjg2M2JkMTJlYWYxMjFhNWZjZTBiZDhlYmJlYzJkYjFlMzYwMmIzNDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmgKQEAgLTMxMCw2ICszMTAsOSBAQCBwdWJsaWM6CiAKICAgICBib29s
IG1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbigpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVj
dGlvbihib29sKTsKKworICAgIHN0YXRpYyBib29sIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVy
ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZShib29sKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKQEAgLTQx
NSw2ICs0MTgsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX21lZGlhRGV2aWNlSWRlbnRpZmll
clN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgc3RhdGljIGJvb2wgZ01vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWQ7CiAgICAgc3RhdGljIGJvb2wgZ01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVj
dGlvbjsKKyAgICBzdGF0aWMgYm9vbCBnVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlOwogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQVBQTEVfUEFZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmgKaW5kZXggMjRmNzNiMDRkYzNhNWI4MTY4YTMzNDdmYTBjY2EyYTIyN2NhNDE0Zi4uYzYwY2Ez
Yjg1MmM2NDA3NzMyNzgyYjBkYTI3OGMzYjhmZWM0YjdkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2
aWNlTWFuYWdlci5oCkBAIC00NSw2ICs0NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEFWQ2FwdHVyZURldmljZU1hbmFnZXIgZmluYWwgOiBwdWJsaWMgQ2FwdHVyZURldmljZU1hbmFn
ZXIgewogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyPjsKIHB1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRVc2VBVkZv
dW5kYXRpb25BdWRpb0NhcHR1cmUoYm9vbCk7CisKICAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4m
IGNhcHR1cmVEZXZpY2VzKCkgZmluYWw7CiAKICAgICBzdGF0aWMgQVZDYXB0dXJlRGV2aWNlTWFu
YWdlciYgc2luZ2xldG9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCmluZGV4
IDNmMDM2ODMyZDUwZGE2YTAxZDM1MWViYWM4ZmIyMmJjMGZlMjY4N2YuLmNiYzM3MTc2NmI5ZTMw
MWI2MzY0MDdkNmIyNGE3ODhmZjVkN2U2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJBVk1lZGlhQ2FwdHVyZVNvdXJjZS5o
IgogI2ltcG9ydCAiQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCIKICNpbXBvcnQgIkF1ZGlvU291cmNl
UHJvdmlkZXIuaCIKKyNpbXBvcnQgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCIKICNpbXBvcnQg
IkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhQ29uc3RyYWludHMuaCIKICNpbXBvcnQgIlJlYWx0
aW1lTWVkaWFTb3VyY2UuaCIKQEAgLTkyLDYgKzkzLDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQgQVZDYXB0dXJlRGV2aWNlTWFuYWdl
cjo6c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBz
dGF0aWMgYm9vbCBhY3RpdmUgPSBmYWxzZTsKKyAgICBpZiAoYWN0aXZlICE9IGVuYWJsZWQpIHsK
KyAgICAgICAgYWN0aXZlID0gZW5hYmxlZDsKKyAgICAgICAgaWYgKGFjdGl2ZSkKKyAgICAgICAg
ICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLnNldEF1ZGlvRmFjdG9y
eShBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuc2V0QXVkaW9GYWN0
b3J5KENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkoKSk7CisgICAgfQorfQorCiBWZWN0
b3I8Q2FwdHVyZURldmljZT4mIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmNhcHR1cmVEZXZpY2Vz
KCkKIHsKICAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY0M2Q2ZmQyYjhiZjU5MGRiOWE1Nzk4Mjk2MzU0ZmM5NmY4
YzcyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcApAQCAtMCwwICsxLDUxOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9DYXB0dXJlU291cmNlLmgiCisKKyNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgiCisjaW5j
bHVkZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgorI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9B
dWRpb0NvbnZlcnRlci5oPgorI2luY2x1ZGUgPEF1ZGlvVW5pdC9BdWRpb1VuaXQuaD4KKyNpbmNs
dWRlIDxDb3JlTWVkaWEvQ01TeW5jLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KKyNp
bmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lu
Y2x1ZGUgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitj
bGFzcyBDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeSA6IHB1YmxpYyBSZWFsdGltZU1lZGlh
U291cmNlOjpDYXB0dXJlRmFjdG9yeSB7CitwdWJsaWM6CisgICAgUmVmUHRyPFJlYWx0aW1lTWVk
aWFTb3VyY2U+IGNyZWF0ZU1lZGlhU291cmNlRm9yQ2FwdHVyZURldmljZVdpdGhDb25zdHJhaW50
cyhjb25zdCBDYXB0dXJlRGV2aWNlJiBjYXB0dXJlRGV2aWNlLCBjb25zdCBNZWRpYUNvbnN0cmFp
bnRzKiBjb25zdHJhaW50cywgU3RyaW5nJiBpbnZhbGlkQ29uc3RyYWludCkgZmluYWwgeworICAg
ICAgICByZXR1cm4gQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGNhcHR1cmVEZXZpY2Us
IGNvbnN0cmFpbnRzLCBpbnZhbGlkQ29uc3RyYWludCk7CisgICAgfQorfTsKKworY29uc3QgVUlu
dDMyIG91dHB1dEJ1cyA9IDA7Citjb25zdCBVSW50MzIgaW5wdXRCdXMgPSAxOworCitSZWZQdHI8
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZT4gQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGNv
bnN0IENhcHR1cmVEZXZpY2UmIGRldmljZUluZm8sIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNv
bnN0cmFpbnRzLCBTdHJpbmcmIGludmFsaWRDb25zdHJhaW50KQoreworICAgIGF1dG8gc291cmNl
ID0gYWRvcHRSZWYobmV3IENvcmVBdWRpb0NhcHR1cmVTb3VyY2UoZGV2aWNlSW5mbykpOworICAg
IGlmIChjb25zdHJhaW50cykgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJjZS0+YXBwbHlD
b25zdHJhaW50cygqY29uc3RyYWludHMpOworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAg
ICAgICBpbnZhbGlkQ29uc3RyYWludCA9IHJlc3VsdC52YWx1ZSgpLmZpcnN0OworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc291cmNl
OworfQorCisKK1JlYWx0aW1lTWVkaWFTb3VyY2U6OkNhcHR1cmVGYWN0b3J5JiBDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpmYWN0b3J5KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3Rvcnk+IGZhY3Rvcnk7CisgICAgcmV0dXJuIGZhY3Rvcnku
Z2V0KCk7Cit9CisKKworQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Q29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZShjb25zdCBDYXB0dXJlRGV2aWNlJiBkZXZpY2VJbmZvKQorICAgIDogUmVhbHRpbWVNZWRp
YVNvdXJjZShlbXB0eVN0cmluZygpLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbywg
ZGV2aWNlSW5mby5sYWJlbCgpKQorICAgICwgbV9jYXB0dXJlRGV2aWNlSUQoMCkKK3sKKyAgICAv
LyBGSVhNRTogdXNlIGRldmljZUluZm8gdG8gc2V0IHRoZSBtX2NhcHR1cmVEZXZpY2VJRAorCisg
ICAgc2V0UGVyc2lzdGVudElEKGRldmljZUluZm8ucGVyc2lzdGVudElkKCkpOworICAgIHNldE11
dGVkKHRydWUpOworCisgICAgbV9jdXJyZW50U2V0dGluZ3Muc2V0Vm9sdW1lKDEuMCk7CisgICAg
bV9jdXJyZW50U2V0dGluZ3Muc2V0U2FtcGxlUmF0ZShwcmVmZXJyZWRTYW1wbGVSYXRlKCkpOwor
ICAgIG1fY3VycmVudFNldHRpbmdzLnNldERldmljZUlkKGlkKCkpOworICAgIG1fY3VycmVudFNl
dHRpbmdzLnNldEVjaG9DYW5jZWxsYXRpb24odHJ1ZSk7CisKKyAgICBtYWNoX3RpbWViYXNlX2lu
Zm9fZGF0YV90IHRpbWViYXNlSW5mbzsKKyAgICBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWViYXNl
SW5mbyk7CisgICAgbV9EVFNDb252ZXJzaW9uUmF0aW8gPSAxZS05ICogc3RhdGljX2Nhc3Q8ZG91
YmxlPih0aW1lYmFzZUluZm8ubnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUlu
Zm8uZGVub20pOworfQorCitDb3JlQXVkaW9DYXB0dXJlU291cmNlOjp+Q29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZSgpCit7CisgICAgc3VzcGVuZCgpOworCisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBpZiAobV9pb1VuaXQpCisgICAgICAg
IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlKG1faW9Vbml0KTsKKworICAgIG1faW9Vbml0
TmFtZSA9IGVtcHR5U3RyaW5nKCk7CisKKyAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXIgPSBu
dWxscHRyOworICAgIG1fc3BlYWtlclNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7CisKKyAgICBtX3Nw
ZWFrZXJQcm9jc0NhbGxlZCA9IDA7CisgICAgbV9taWNyb3Bob25lUHJvY3NDYWxsZWQgID0gMDsK
KyAgICBtX2xhdGVzdE1pY1RpbWVTdGFtcCA9IDA7CisKKyAgICBtX2FjdGl2ZVNvdXJjZXMuY2xl
YXIoKTsKKyAgICBtX3BlbmRpbmdTb3VyY2VzLmNsZWFyKCk7CisKKyAgICBtX3NwZWFrZXJTYW1w
bGVCdWZmZXIgPSBudWxscHRyOworCisgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IGZhbHNlOwor
ICAgIG1faW9Vbml0U3RhcnRlZCAgPSBmYWxzZTsKK30KKworZG91YmxlIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OnByZWZlcnJlZFNhbXBsZVJhdGUoKQoreworICAgIC8vIEZJWE1FOiBHZXQgdGhl
IHByZWZlcnJlZCByYXRlIGR5bmFtaWNhbGx5LCBrQVVWb2ljZUlPUHJvcGVydHlfUHJlZmVycmVk
SFdTYW1wbGVSYXRlLyBbW0FWQXVkaW9TZXNzaW9uIHNoYXJlZEluc3RhbmNlXSBwcmVmZXJyZWRT
YW1wbGVSYXRlXQorICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwcmVmZXJyZWRSYXRlID0gMjQwMDAu
OworICAgIHJldHVybiBwcmVmZXJyZWRSYXRlOworfQorCitkb3VibGUgQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6cHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbigpCit7CisgICAgLy8gRklYTUU6IEdl
dCB0aGUgcHJlZmVycmVkIGR1cmF0aW9uIGR5bmFtaWNhbGx5IC0ga0FVVm9pY2VJT1Byb3BlcnR5
X1ByZWZlcnJlZEhXQmxvY2tTaXplSW5TZWNvbmRzIC8gW1tBVkF1ZGlvU2Vzc2lvbiBzaGFyZWRJ
bnN0YW5jZV0gcHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbl0KKyAgICBzdGF0aWMgY29uc3QgZmxv
YXQgcHJlZmVycmVkRHVyYXRpb24gPSAwLjAyOworICAgIHJldHVybiBwcmVmZXJyZWREdXJhdGlv
bjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlTWljcm9w
aG9uZVByb2MoKQoreworICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJhY2sgPSB7IG1p
Y3JvcGhvbmVDYWxsYmFjaywgdGhpcyB9OworICAgIGF1dG8gZXJyID0gQXVkaW9Vbml0U2V0UHJv
cGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9TZXRJbnB1dENhbGxiYWNr
LCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2Fs
bGJhY2spKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gc2V0IHZw
aW8gdW5pdCBtaWMgcHJvYywgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFy
KikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24gbWljcm9waG9uZVByb2NGb3JtYXQgPSB7IH07CisKKyAgICBVSW50MzIg
c2l6ZSA9IHNpemVvZihtaWNyb3Bob25lUHJvY0Zvcm1hdCk7CisgICAgZXJyID0gQXVkaW9Vbml0
R2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtB
dWRpb1VuaXRTY29wZV9PdXRwdXQsIGlucHV0QnVzLCAmbWljcm9waG9uZVByb2NGb3JtYXQsICZz
aXplKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IG91dHB1
dCBzdHJlYW0gZm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIq
KSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIG1fbWljcm9waG9uZVNh
bXBsZUJ1ZmZlciA9IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y3JlYXRlKG1pY3JvcGhvbmVQcm9j
Rm9ybWF0LCBwcmVmZXJyZWRJT0J1ZmZlckR1cmF0aW9uKCkgKiBtaWNyb3Bob25lUHJvY0Zvcm1h
dC5tU2FtcGxlUmF0ZSAqIDIpOworICAgIG1fbWljcm9waG9uZVByb2NGb3JtYXQgPSBtaWNyb3Bo
b25lUHJvY0Zvcm1hdDsKKworICAgIHJldHVybiBlcnI7Cit9CisKK09TU3RhdHVzIENvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCkKK3sKKyAgICAvLyBTZXQgdGhl
IGZvcm1hdCBvZiB0aGUgZGF0YSB3ZSBzdXBwbHkgdG8gdGhlIG91dHB1dCBzdHJlYW0uCisKKyAg
ICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBzcGVha2VyQ2FsbGJhY2ssIHRo
aXMgfTsKKyAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVk
aW9Vbml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWws
IG91dHB1dEJ1cywgJmNhbGxiYWNrLCBzaXplb2YoY2FsbGJhY2spKTsKKyAgICBpZiAoZXJyKSB7
CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNw
ZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBzcGVha2VyIHByb2MsIGVycm9y
ICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVy
biBlcnI7CisgICAgfQorCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHNwZWFrZXJQ
cm9jRm9ybWF0ID0geyB9OworCisgICAgVUludDMyIHNpemUgPSBzaXplb2Yoc3BlYWtlclByb2NG
b3JtYXQpOworICAgIGVyciAgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlv
VW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBvdXRwdXRC
dXMsICZzcGVha2VyUHJvY0Zvcm1hdCwgJnNpemUpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAg
TE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlU3BlYWtlclByb2Mo
JXApIHVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwg
dGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9
CisKKyAgICBtX3NwZWFrZXJTYW1wbGVCdWZmZXIgPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNy
ZWF0ZShzcGVha2VyUHJvY0Zvcm1hdCwgcHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbigpICogc3Bl
YWtlclByb2NGb3JtYXQubVNhbXBsZVJhdGUgKiAyKTsKKyAgICBtX3NwZWFrZXJQcm9jRm9ybWF0
ID0gc3BlYWtlclByb2NGb3JtYXQ7CisKKyAgICByZXR1cm4gZXJyOworfQorCit1aW50NjRfdCBD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRNaWNyb3Bob25lRGF0YUNvbnN1bWVyKE1pY3JvcGhv
bmVEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2spOworICAgIG1fbWljcm9waG9uZURhdGFDYWxs
YmFja3MuYWRkKCsrbV9uZXh0TWljcm9waG9uZURhdGFDYWxsYmFja0lELCBjYWxsYmFjayk7CisK
KyAgICByZXR1cm4gbV9uZXh0TWljcm9waG9uZURhdGFDYWxsYmFja0lEOworfQorCit2b2lkIENv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnJlbW92ZU1pY3JvcGhvbmVEYXRhQ29uc3VtZXIodWludDY0
X3QgY2FsbGJhY2tJRCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3BlbmRp
bmdTb3VyY2VRdWV1ZUxvY2spOworICAgIG1fbWljcm9waG9uZURhdGFDYWxsYmFja3MucmVtb3Zl
KGNhbGxiYWNrSUQpOworfSAgICAKKwordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRF
Y2hvQ2FuY2VsbGF0aW9uU291cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYgc291cmNlKQorewor
ICAgIGlmICghc291cmNlLnNldE91dHB1dEZvcm1hdChtX3NwZWFrZXJQcm9jRm9ybWF0KSkgewor
ICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRFY2hvQ2FuY2Vs
bGF0aW9uU291cmNlOiBzb3VyY2UgJXAgY29uZmlndXJlT3V0cHV0IGZhaWxlZCIsICZzb3VyY2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxv
Y2sobV9wZW5kaW5nU291cmNlUXVldWVMb2NrKTsKKyAgICBtX3BlbmRpbmdTb3VyY2VzLmFwcGVu
ZCh7IFF1ZXVlQWN0aW9uOjpBZGQsIHNvdXJjZSB9KTsKK30KKwordm9pZCBDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpyZW1vdmVFY2hvQ2FuY2VsbGF0aW9uU291cmNlKEF1ZGlvU2FtcGxlRGF0YVNv
dXJjZSYgc291cmNlKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcGVuZGlu
Z1NvdXJjZVF1ZXVlTG9jayk7CisgICAgbV9wZW5kaW5nU291cmNlcy5hcHBlbmQoeyBRdWV1ZUFj
dGlvbjo6UmVtb3ZlLCBzb3VyY2UgfSk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZTo6Y2hlY2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIHVpbnQ2
NF90IHNhbXBsZVRpbWUsIGRvdWJsZSBob3N0VGltZSkKK3sKKyAgICBpZiAoIXRpbWVTdGFtcC5t
U2FtcGxlVGltZSB8fCBzYW1wbGVUaW1lID09IG1fbGF0ZXN0TWljVGltZVN0YW1wIHx8ICFob3N0
VGltZSkKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y2hlY2tU
aW1lc3RhbXBzOiB1bnVzdWFsIHRpbWVzdGFtcHMsIHNhbXBsZSB0aW1lID0gJWxsZCwgcHJldmlv
dXMgc2FtcGxlIHRpbWUgPSAlbGxkLCBob3N0VGltZSAlZiIsIHNhbXBsZVRpbWUsIG1fbGF0ZXN0
TWljVGltZVN0YW1wLCBob3N0VGltZSk7Cit9CisKK09TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgLypp
b0FjdGlvbkZsYWdzKi8sIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIFVJbnQzMiAv
KmluQnVzTnVtYmVyKi8sIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBp
b0RhdGEpCit7CisgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGF1ZGlvIHVuaXQgbmVlZHMgZGF0YSB0
byBwbGF5IHRocm91Z2ggdGhlIHNwZWFrZXJzLgorICAgICsrbV9zcGVha2VyUHJvY3NDYWxsZWQ7
CisKKyAgICBpZiAobV9zcGVha2VyU2FtcGxlQnVmZmVyLT5zYW1wbGVDYXBhY2l0eSgpIDwgaW5O
dW1iZXJGcmFtZXMpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZTo6cHJvdmlkZVNwZWFrZXJEYXRhOiBzcGVha2VyIHNhbXBsZSBidWZmZXIgc2l6ZSAoJWQpIHRv
byBzbWFsbCBmb3IgYW1vdW50IG9mIHNhbXBsZSBkYXRhIHJlcXVlc3RlZCAoJWQpISIsIG1fc3Bl
YWtlclNhbXBsZUJ1ZmZlci0+c2FtcGxlQ2FwYWNpdHkoKSwgKGludClpbk51bWJlckZyYW1lcyk7
CisgICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKyAgICB9CisKKyAgICAvLyBBZGQv
cmVtb3ZlIHNvdXJjZXMgZnJvbSB0aGUgcXVldWUsIGJ1dCBvbmx5IGlmIHdlIGdldCB0aGUgbG9j
ayBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlIHRyeQorICAgIC8vIGFnYWluIG9uIHRoZSBuZXh0IGNh
bGxiYWNrLgorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcGVu
ZGluZ1NvdXJjZVF1ZXVlTG9jaywgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgICAgIGlmIChsb2Nr
Lm93bnNfbG9jaygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3BlbmRpbmdT
b3VyY2VzKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhaXIuZmlyc3QgPT0gUXVldWVBY3Rpb246
OkFkZCkKKyAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVTb3VyY2VzLmFwcGVuZChwYWlyLnNl
Y29uZC5jb3B5UmVmKCkpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvIHJlbW92ZVNvdXJjZSA9IHBhaXIuc2Vjb25kLmNvcHlSZWYoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9hY3RpdmVTb3VyY2VzLnJlbW92ZUZpcnN0TWF0Y2hpbmcoWyZyZW1vdmVT
b3VyY2VdKGF1dG8mIHNvdXJjZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNv
dXJjZS5wdHIoKSA9PSByZW1vdmVTb3VyY2UucHRyKCk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcGVuZGlu
Z1NvdXJjZXMuY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2FjdGl2ZVNv
dXJjZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGRvdWJsZSBhZGp1c3Rl
ZEhvc3RUaW1lID0gbV9EVFNDb252ZXJzaW9uUmF0aW8gKiB0aW1lU3RhbXAubUhvc3RUaW1lOwor
ICAgIHVpbnQ2NF90IHNhbXBsZVRpbWUgPSB0aW1lU3RhbXAubVNhbXBsZVRpbWU7CisgICAgY2hl
Y2tUaW1lc3RhbXBzKHRpbWVTdGFtcCwgc2FtcGxlVGltZSwgYWRqdXN0ZWRIb3N0VGltZSk7CisK
KyAgICBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPnJlc2V0KCk7CisgICAgbV9zcGVha2VyU2FtcGxl
QnVmZmVyLT5zZXRUaW1lcyhhZGp1c3RlZEhvc3RUaW1lLCBzYW1wbGVUaW1lKTsKKworICAgIEF1
ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCA9IG1fc3BlYWtlclNhbXBsZUJ1ZmZlci0+YnVmZmVy
TGlzdCgpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBidWZmZXJMaXN0Lm1OdW1iZXJC
dWZmZXJzOyArK2kpCisgICAgICAgIGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0gPSBpb0RhdGEtPm1C
dWZmZXJzW2ldOworCisgICAgYm9vbCBmaXJzdFNvdXJjZSA9IHRydWU7CisgICAgZm9yIChhdXRv
JiBzb3VyY2UgOiBtX2FjdGl2ZVNvdXJjZXMpIHsKKyAgICAgICAgc291cmNlLT5wdWxsU2FtcGxl
cygqbV9zcGVha2VyU2FtcGxlQnVmZmVyLmdldCgpLCBpbk51bWJlckZyYW1lcywgYWRqdXN0ZWRI
b3N0VGltZSwgc2FtcGxlVGltZSwgZmlyc3RTb3VyY2UgPyBBdWRpb1NhbXBsZURhdGFTb3VyY2U6
OkNvcHkgOiBBdWRpb1NhbXBsZURhdGFTb3VyY2U6Ok1peCk7CisgICAgICAgIGZpcnN0U291cmNl
ID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIG5vRXJyOworfQorCitPU1N0YXR1cyBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpzcGVha2VyQ2FsbGJhY2sodm9pZCAqaW5SZWZDb24sIEF1ZGlv
VW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFt
cCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVz
LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICBBU1NFUlQoaW9BY3Rpb25GbGFncyk7
CisgICAgQVNTRVJUKGluVGltZVN0YW1wKTsKKyAgICBhdXRvIGRhdGFTb3VyY2UgPSBzdGF0aWNf
Y2FzdDxDb3JlQXVkaW9DYXB0dXJlU291cmNlKj4oaW5SZWZDb24pOworICAgIHJldHVybiBkYXRh
U291cmNlLT5wcm92aWRlU3BlYWtlckRhdGEoKmlvQWN0aW9uRmxhZ3MsICppblRpbWVTdGFtcCwg
aW5CdXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCBpb0RhdGEpOworfQorCitPU1N0YXR1cyBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVu
ZGVyQWN0aW9uRmxhZ3MmIGlvQWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1l
U3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1
ZmZlckxpc3QqIC8qaW9EYXRhKi8pCit7CisgICAgKyttX21pY3JvcGhvbmVQcm9jc0NhbGxlZDsK
KworICAgIC8vIFB1bGwgdGhyb3VnaCB0aGUgdnBpbyB1bml0IHRvIG91ciBtaWMgYnVmZmVyLgor
ICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+cmVzZXQoKTsKKyAgICBBdWRpb0J1ZmZlckxp
c3QmIGJ1ZmZlckxpc3QgPSBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPmJ1ZmZlckxpc3QoKTsK
KyAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdFJlbmRlcihtX2lvVW5pdCwgJmlvQWN0aW9uRmxhZ3Ms
ICZ0aW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgJmJ1ZmZlckxpc3QpOwor
ICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZTo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKCVwKSBBdWRpb1VuaXRSZW5kZXIgZmFpbGVkIHdp
dGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAg
ICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBkb3VibGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1f
RFRTQ29udmVyc2lvblJhdGlvICogdGltZVN0YW1wLm1Ib3N0VGltZTsKKyAgICB1aW50NjRfdCBz
YW1wbGVUaW1lID0gdGltZVN0YW1wLm1TYW1wbGVUaW1lOworICAgIGNoZWNrVGltZXN0YW1wcyh0
aW1lU3RhbXAsIHNhbXBsZVRpbWUsIGFkanVzdGVkSG9zdFRpbWUpOworICAgIG1fbGF0ZXN0TWlj
VGltZVN0YW1wID0gc2FtcGxlVGltZTsKKworICAgIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+
c2V0VGltZXMoYWRqdXN0ZWRIb3N0VGltZSwgc2FtcGxlVGltZSk7CisKKyAgICBhdWRpb1NhbXBs
ZXNBdmFpbGFibGUoTWVkaWFUaW1lKHNhbXBsZVRpbWUsIG1fbWljcm9waG9uZVByb2NGb3JtYXQu
c2FtcGxlUmF0ZSgpKSwgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCksIG1f
bWljcm9waG9uZVByb2NGb3JtYXQsIGluTnVtYmVyRnJhbWVzKTsKKworICAgIGlmIChtX21pY3Jv
cGhvbmVEYXRhQ2FsbGJhY2tzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBm
b3IgKGF1dG8mIGNhbGxiYWNrIDogbV9taWNyb3Bob25lRGF0YUNhbGxiYWNrcy52YWx1ZXMoKSkK
KyAgICAgICAgY2FsbGJhY2soTWVkaWFUaW1lKHNhbXBsZVRpbWUsIG1fbWljcm9waG9uZVByb2NG
b3JtYXQuc2FtcGxlUmF0ZSgpKSwgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0
KCksIG1fbWljcm9waG9uZVByb2NGb3JtYXQsIGluTnVtYmVyRnJhbWVzKTsKKworICAgIHJldHVy
biBub0VycjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6bWljcm9waG9u
ZUNhbGxiYWNrKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9B
Y3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5C
dXNOdW1iZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEp
Cit7CisgICAgQVNTRVJUKGlvQWN0aW9uRmxhZ3MpOworICAgIEFTU0VSVChpblRpbWVTdGFtcCk7
CisgICAgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSogZGF0YVNvdXJjZSA9IHN0YXRpY19jYXN0PENv
cmVBdWRpb0NhcHR1cmVTb3VyY2UqPihpblJlZkNvbik7CisgICAgcmV0dXJuIGRhdGFTb3VyY2Ut
PnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcygqaW9BY3Rpb25GbGFncywgKmluVGltZVN0YW1wLCBp
bkJ1c051bWJlciwgaW5OdW1iZXJGcmFtZXMsIGlvRGF0YSk7Cit9CisKK09TU3RhdHVzIENvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OmRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCogZGV2aWNlSUQp
Cit7CisgICAgQVNTRVJUKG1faW9Vbml0KTsKKworICAgIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBz
aXplb2YoKmRldmljZUlEKTsKKyAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KG1f
aW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1ZGlvVW5p
dFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsIGRldmljZUlELCAmcHJvcGVydHlTaXplKTsKKyAgICBp
ZiAoZXJyKQorICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZh
dWx0SW5wdXREZXZpY2UoJXApIHVuYWJsZSB0byBnZXQgZGVmYXVsdCBpbnB1dCBkZXZpY2UgSUQs
IGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisKKyAgICBy
ZXR1cm4gZXJyOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1
ZGlvVW5pdHMoKQoreworICAgIEFTU0VSVChtX2ludGVybmFsU3RhdGVMb2NrLmlzSGVsZCgpKTsK
KworICAgIGlmIChtX2lvVW5pdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBdWRpb0NvbXBv
bmVudERlc2NyaXB0aW9uIGlvVW5pdERlc2NyaXB0aW9uID0geyBrQXVkaW9Vbml0VHlwZV9PdXRw
dXQsIGtBdWRpb1VuaXRTdWJUeXBlX1ZvaWNlUHJvY2Vzc2luZ0lPLCBrQXVkaW9Vbml0TWFudWZh
Y3R1cmVyX0FwcGxlLCAwLCAwIH07CisgICAgQXVkaW9Db21wb25lbnQgaW9Db21wb25lbnQgPSBB
dWRpb0NvbXBvbmVudEZpbmROZXh0KG51bGxwdHIsICZpb1VuaXREZXNjcmlwdGlvbik7CisgICAg
QVNTRVJUKGlvQ29tcG9uZW50KTsKKyAgICBpZiAoIWlvQ29tcG9uZW50KSB7CisgICAgICAgIExP
RyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5h
YmxlIHRvIGZpbmQgdnBpbyB1bml0IGNvbXBvbmVudCIsIHRoaXMpOworICAgICAgICByZXR1cm4g
LTE7CisgICAgfQorCisgICAgQ0ZTdHJpbmdSZWYgbmFtZSA9IG51bGxwdHI7CisgICAgQXVkaW9D
b21wb25lbnRDb3B5TmFtZShpb0NvbXBvbmVudCwgJm5hbWUpOworICAgIGlmIChuYW1lKSB7Cisg
ICAgICAgIG1faW9Vbml0TmFtZSA9IG5hbWU7CisgICAgICAgIENGUmVsZWFzZShuYW1lKTsKKyAg
ICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRz
KCVwKSBjcmVhdGVkIFwiJXNcIiBjb21wb25lbnQiLCB0aGlzLCBtX2lvVW5pdE5hbWUudXRmOCgp
LmRhdGEoKSk7CisgICAgfQorCisgICAgYXV0byBlcnIgPSBBdWRpb0NvbXBvbmVudEluc3RhbmNl
TmV3KGlvQ29tcG9uZW50LCAmbV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9H
KE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCVwKSB1bmFi
bGUgdG8gb3BlbiB2cGlvIHVuaXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAo
Y2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIHVpbnQzMl90IHBhcmFtID0gMTsKKyAgICBlcnIgPSBBdWRpb1VuaXRTZXRQcm9w
ZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9V
bml0U2NvcGVfSW5wdXQsIGlucHV0QnVzLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOworICAgIGlm
IChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0
dXBBdWRpb1VuaXRzKCVwKSB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBpbnB1dCwgZXJyb3Ig
JWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJu
IGVycjsKKyAgICB9CisKKyAgICBwYXJhbSA9IDE7CisgICAgZXJyID0gQXVkaW9Vbml0U2V0UHJv
cGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywga0F1ZGlv
VW5pdFNjb3BlX091dHB1dCwgb3V0cHV0QnVzLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOworICAg
IGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6
c2V0dXBBdWRpb1VuaXRzKCVwKSB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBvdXRwdXQsIGVy
cm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJl
dHVybiBlcnI7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoIW1fY2FwdHVyZURldmljZUlEKSB7
CisgICAgICAgIGVyciA9IGRlZmF1bHRJbnB1dERldmljZSgmbV9jYXB0dXJlRGV2aWNlSUQpOwor
ICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBV
SW50MzIgcHJvcGVydHlTaXplID0gc2l6ZW9mKG1fY2FwdHVyZURldmljZUlEKTsKKyAgICBlcnIg
PSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5
X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCAmbV9jYXB0
dXJlRGV2aWNlSUQsIHByb3BlcnR5U2l6ZSk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0co
TWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMoJXApIHVuYWJs
ZSB0byBzZXQgdnBpbyB1bml0IGNhcHR1cmUgZGV2aWNlIElELCBlcnJvciAlZCAoJS40cykiLCB0
aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0K
KworICAgIGVyciA9IGNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCk7CisgICAgaWYgKGVycikKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworICAgIGVyciA9IEF1ZGlvVW5pdEluaXRpYWxpemUobV9pb1Vu
aXQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCVwKSBBdWRpb1VuaXRJbml0aWFsaXplKCkgZmFpbGVk
LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAg
ICByZXR1cm4gZXJyOworICAgIH0KKyAgICBtX2lvVW5pdEluaXRpYWxpemVkID0gdHJ1ZTsKKwor
ICAgIGVyciA9IGNvbmZpZ3VyZVNwZWFrZXJQcm9jKCk7CisgICAgaWYgKGVycikKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9j
az4gbG9jayhtX2ludGVybmFsU3RhdGVMb2NrKTsKKyAgICBpZiAobV9pb1VuaXRTdGFydGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBPU1N0YXR1cyBlcnI7CisgICAgaWYgKCFtX2lvVW5pdCkg
eworICAgICAgICBlcnIgPSBzZXR1cEF1ZGlvVW5pdHMoKTsKKyAgICAgICAgaWYgKGVycikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlcnIgPSBBdWRpb091dHB1dFVuaXRTdGFy
dChtX2lvVW5pdCk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpzdGFydCglcCkgQXVkaW9PdXRwdXRVbml0U3RhcnQgZmFpbGVkIHdp
dGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1faW9Vbml0U3RhcnRlZCA9IHRydWU7CisgICAgc2V0
TXV0ZWQoZmFsc2UpOworfQorCit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9k
dWNpbmdEYXRhKCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2ludGVybmFs
U3RhdGVMb2NrKTsKKworICAgIEFTU0VSVChtX2lvVW5pdCk7CisKKyAgICBhdXRvIGVyciA9IEF1
ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9H
KE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RvcCglcCkgQXVkaW9PdXRwdXRVbml0
U3RvcCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIq
KSZlcnIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faW9Vbml0U3RhcnRlZCA9IGZh
bHNlOworICAgIHNldE11dGVkKHRydWUpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJl
U291cmNlOjpzdXNwZW5kKCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2lu
dGVybmFsU3RhdGVMb2NrKTsKKworICAgIEFTU0VSVChtX2lvVW5pdCk7CisKKyAgICBpZiAobV9p
b1VuaXRTdGFydGVkKSB7CisgICAgICAgIGF1dG8gZXJyID0gQXVkaW9PdXRwdXRVbml0U3RvcCht
X2lvVW5pdCk7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnJlc3VtZSglcCkgQXVkaW9PdXRwdXRVbml0U3RvcCBmYWls
ZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwor
ICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgICAgICBtX2lvVW5pdFN0YXJ0
ZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobV9pb1VuaXRJbml0aWFsaXplZCkgeworICAg
ICAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZShtX2lvVW5pdCk7CisgICAgICAg
IGlmIChlcnIpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OnJlc3VtZSglcCkgQXVkaW9Vbml0VW5pbml0aWFsaXplIGZhaWxlZCB3aXRoIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgICAgICByZXR1
cm4gZXJyOworICAgICAgICB9CisgICAgICAgIG1faW9Vbml0SW5pdGlhbGl6ZWQgPSBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZTo6cmVzdW1lKCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2ludGVy
bmFsU3RhdGVMb2NrKTsKKworICAgIEFTU0VSVChtX2lvVW5pdCk7CisgICAgQVNTRVJUKCFtX2lv
VW5pdFN0YXJ0ZWQpOworCisgICAgYXV0byBlcnIgPSBBdWRpb091dHB1dFVuaXRTdGFydChtX2lv
VW5pdCk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpyZXN1bWUoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCB3aXRoIGVy
cm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJl
dHVybiBlcnI7CisgICAgfQorICAgIG1faW9Vbml0U3RhcnRlZCA9IGZhbHNlOworCisgICAgcmV0
dXJuIGVycjsKK30KKworUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IENv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgaWYgKG1f
Y2FwYWJpbGl0aWVzKQorICAgICAgICByZXR1cm4gbV9jYXBhYmlsaXRpZXM7CisKKyAgICBtX3N1
cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGV2aWNlSWQodHJ1ZSk7CisgICAgbV9zdXBw
b3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0VjaG9DYW5jZWxsYXRpb24odHJ1ZSk7CisgICAg
bV9zdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c1ZvbHVtZSh0cnVlKTsKKworICAgIC8v
IEZJWE1FOiBmaW5pc2ggdGhpcy4KKyAgICBtX2NhcGFiaWxpdGllcyA9IFJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXM6OmNyZWF0ZShtX3N1cHBvcnRlZENvbnN0cmFpbnRzKTsKKyAgICBt
X2NhcGFiaWxpdGllcy0+c2V0RGV2aWNlSWQoaWQoKSk7CisgICAgbV9jYXBhYmlsaXRpZXMtPnNl
dEVjaG9DYW5jZWxsYXRpb24oUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6RWNob0Nh
bmNlbGxhdGlvbjo6UmVhZFdyaXRlKTsKKyAgICBtX2NhcGFiaWxpdGllcy0+c2V0Vm9sdW1lKENh
cGFiaWxpdHlWYWx1ZU9yUmFuZ2UoMC4wLCAxLjApKTsKKworICAgIHJldHVybiBtX2NhcGFiaWxp
dGllczsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpzZXR0aW5ncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VycmVudFNl
dHRpbmdzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjY3NjhiZTdiNjNhNjRmZWIxZGFiNWQ1ODJkZTUzZTBhYmEzOTNjYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0
dXJlU291cmNlLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisKKyNpbmNsdWRlICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJD
YXB0dXJlRGV2aWNlLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1
ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb1Rvb2xib3guaD4KKyNpbmNsdWRlIDxDb3JlQXVkaW8vQ29y
ZUF1ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0IE9w
YXF1ZUNNQ2xvY2sqIENNQ2xvY2tSZWY7CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgTWVkaWFU
aW1lOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvU2FtcGxlQnVmZmVy
TGlzdDsKK2NsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTsKK2NsYXNzIENhcHR1cmVEZXZpY2VJ
bmZvOworCitjbGFzcyBDb3JlQXVkaW9DYXB0dXJlU291cmNlIDogcHVibGljIFJlYWx0aW1lTWVk
aWFTb3VyY2UgeworcHVibGljOgorCisgICAgc3RhdGljIFJlZlB0cjxDb3JlQXVkaW9DYXB0dXJl
U291cmNlPiBjcmVhdGUoY29uc3QgQ2FwdHVyZURldmljZSYsIGNvbnN0IE1lZGlhQ29uc3RyYWlu
dHMqLCBTdHJpbmcmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBDYXB0dXJlRmFjdG9y
eSYgZmFjdG9yeSgpOworCisgICAgdm9pZCBhZGRFY2hvQ2FuY2VsbGF0aW9uU291cmNlKEF1ZGlv
U2FtcGxlRGF0YVNvdXJjZSYpOworICAgIHZvaWQgcmVtb3ZlRWNob0NhbmNlbGxhdGlvblNvdXJj
ZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmKTsKKworICAgIHVzaW5nIE1pY3JvcGhvbmVEYXRhQ2Fs
bGJhY2sgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBj
b25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYgYXVkaW9EYXRhLCBjb25zdCBBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgc2l6ZV90IHNhbXBsZUNvdW50KT47CisKKyAgICB1aW50NjRf
dCBhZGRNaWNyb3Bob25lRGF0YUNvbnN1bWVyKE1pY3JvcGhvbmVEYXRhQ2FsbGJhY2smJik7Cisg
ICAgdm9pZCByZW1vdmVNaWNyb3Bob25lRGF0YUNvbnN1bWVyKHVpbnQ2NF90KTsKKworICAgIENN
Q2xvY2tSZWYgdGltZWJhc2VDbG9jaygpOworCitwcml2YXRlOgorICAgIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2UoY29uc3QgQ2FwdHVyZURldmljZSYpOworICAgIHZpcnR1YWwgfkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2UoKTsKKworICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7Cisg
ICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIGJvb2wgaXNQcm9kdWNpbmdE
YXRhKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pb1VuaXRTdGFydGVkOyB9CisKKyAgICBPU1N0
YXR1cyBzdXNwZW5kKCk7CisgICAgT1NTdGF0dXMgcmVzdW1lKCk7CisKKyAgICBSZWZQdHI8UmVh
bHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4gY2FwYWJpbGl0aWVzKCkgY29uc3QgZmluYWw7
CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0
IGZpbmFsOworCisgICAgT1NTdGF0dXMgc2V0dXBBdWRpb1VuaXRzKCk7CisgICAgT1NTdGF0dXMg
Y29uZmlndXJlU3BlYWtlclByb2MoKTsKKyAgICBPU1N0YXR1cyBjb25maWd1cmVNaWNyb3Bob25l
UHJvYygpOworICAgIE9TU3RhdHVzIGRlZmF1bHRPdXRwdXREZXZpY2UodWludDMyX3QqKTsKKyAg
ICBPU1N0YXR1cyBkZWZhdWx0SW5wdXREZXZpY2UodWludDMyX3QqKTsKKworICAgIHZvaWQgY2hl
Y2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgdWludDY0X3QsIGRvdWJsZSk7CisK
KyAgICBzdGF0aWMgT1NTdGF0dXMgbWljcm9waG9uZUNhbGxiYWNrKHZvaWQqLCBBdWRpb1VuaXRS
ZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIs
IEF1ZGlvQnVmZmVyTGlzdCopOworICAgIE9TU3RhdHVzIHByb2Nlc3NNaWNyb3Bob25lU2FtcGxl
cyhBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgVUlu
dDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOworCisgICAgc3RhdGljIE9TU3RhdHVzIHNw
ZWFrZXJDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBB
dWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKKyAgICBP
U1N0YXR1cyBwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsK
KworICAgIHN0YXRpYyBkb3VibGUgcHJlZmVycmVkU2FtcGxlUmF0ZSgpOworICAgIHN0YXRpYyBk
b3VibGUgcHJlZmVycmVkSU9CdWZmZXJEdXJhdGlvbigpOworCisgICAgQXVkaW9Vbml0IG1faW9V
bml0IHsgbnVsbHB0ciB9OworICAgIFN0cmluZyBtX2lvVW5pdE5hbWU7CisKKyAgICAvLyBPbmx5
IHJlYWQvbW9kaWZpZWQgZnJvbSB0aGUgSU8gdGhyZWFkLgorICAgIFZlY3RvcjxSZWY8QXVkaW9T
YW1wbGVEYXRhU291cmNlPj4gbV9hY3RpdmVTb3VyY2VzOworCisgICAgZW51bSBRdWV1ZUFjdGlv
biB7IEFkZCwgUmVtb3ZlIH07CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxRdWV1ZUFjdGlvbiwgUmVm
PEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+PiBtX3BlbmRpbmdTb3VyY2VzOworCisgICAgdWludDMy
X3QgbV9jYXB0dXJlRGV2aWNlSUQgeyAwIH07CisKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24gbV9taWNyb3Bob25lUHJvY0Zvcm1hdDsKKyAgICBSZWZQdHI8QXVkaW9TYW1wbGVCdWZmZXJM
aXN0PiBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXI7CisgICAgdWludDY0X3QgbV9taWNyb3Bob25l
UHJvY3NDYWxsZWQgeyAwIH07CisgICAgdWludDY0X3QgbV9sYXRlc3RNaWNUaW1lU3RhbXAgeyAw
IH07CisKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNaWNyb3Bob25lRGF0YUNhbGxiYWNrPiBtX21p
Y3JvcGhvbmVEYXRhQ2FsbGJhY2tzOworICAgIHVpbnQ2NF90IG1fbmV4dE1pY3JvcGhvbmVEYXRh
Q2FsbGJhY2tJRCB7IDAgfTsKKworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX3NwZWFr
ZXJQcm9jRm9ybWF0OworICAgIFJlZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IG1fc3BlYWtl
clNhbXBsZUJ1ZmZlcjsKKyAgICB1aW50NjRfdCBtX3NwZWFrZXJQcm9jc0NhbGxlZCB7IDAgfTsK
KworICAgIGRvdWJsZSBtX0RUU0NvbnZlcnNpb25SYXRpbyB7IDAgfTsKKworICAgIGJvb2wgbV9p
b1VuaXRJbml0aWFsaXplZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lvVW5pdFN0YXJ0ZWQgeyBm
YWxzZSB9OworCisgICAgTG9jayBtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2s7CisgICAgTG9jayBt
X2ludGVybmFsU3RhdGVMb2NrOworCisgICAgbXV0YWJsZSBSZWZQdHI8UmVhbHRpbWVNZWRpYVNv
dXJjZUNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CisgICAgbXV0YWJsZSBSZWFsdGltZU1l
ZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgbV9zdXBwb3J0ZWRDb25zdHJhaW50czsKKyAg
ICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCmluZGV4IGVmOGFk
YzEyNzU1ZTFkMjE4ZDU0NTJlYzVkMDkyNmVkOWZmMzkzNGMuLjE1MDE4Yzk5OTRlZTA0ODgzNDE0
ZmQ1Njk4NWQ4ZDEyZDg0NDkyMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlck1hYy5jcHAKQEAgLTMzLDkgKzMzLDkgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuaCIKIAotI2luY2x1ZGUg
IkFWQXVkaW9DYXB0dXJlU291cmNlLmgiCiAjaW5jbHVkZSAiQVZDYXB0dXJlRGV2aWNlTWFuYWdl
ci5oIgogI2luY2x1ZGUgIkFWVmlkZW9DYXB0dXJlU291cmNlLmgiCisjaW5jbHVkZSAiQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRp
YVN0cmVhbVByaXZhdGUuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtNjMsNyAr
NjMsNyBAQCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjpSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyTWFjKCkKICAgICBtX3N1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGV2aWNl
SWQodHJ1ZSk7CiAgICAgbV9zdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0dyb3VwSWQo
dHJ1ZSk7CiAKLSAgICBtX2F1ZGlvRmFjdG9yeSA9ICZBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFj
dG9yeSgpOworICAgIG1fYXVkaW9GYWN0b3J5ID0gJkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmZh
Y3RvcnkoKTsKICAgICBtX3ZpZGVvRmFjdG9yeSA9ICZBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6ZmFj
dG9yeSgpOwogfQogCkBAIC0xNzQsNyArMTc0LDcgQEAgVmVjdG9yPFN0cmluZz4gUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck1hYzo6YmVzdFNvdXJjZXNGb3JUeXBlQW5kQ29uc3RyYWludHMoUmUK
IAogUmVhbHRpbWVNZWRpYVNvdXJjZTo6Q2FwdHVyZUZhY3RvcnkqIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXJNYWM6OmRlZmF1bHRBdWRpb0ZhY3RvcnkoKQogewotICAgIHJldHVybiAmQVZBdWRp
b0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkoKTsKKyAgICByZXR1cm4gJkNvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OmZhY3RvcnkoKTsKIH0KIAogUmVhbHRpbWVNZWRpYVNvdXJjZTo6Q2FwdHVyZUZhY3Rv
cnkqIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6OmRlZmF1bHRWaWRlb0ZhY3RvcnkoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1By
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2
YXRlLmgKaW5kZXggYjZhZDc1ZTc4NDVmMTQwMTAxZmU1ZmM1NzY0ZjZjMzc5ZTU2NjMxNC4uNGQx
YjFjN2E3M2U1MzAxYTQzZDFlNDc3YmJlNDgyZmQxMWE4MzMxNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCkBAIC0yMjQs
NiArMjI0LDcgQEAKICNkZWZpbmUgV2ViS2l0RW5hYmxlSW5oZXJpdFVSSVF1ZXJ5Q29tcG9uZW50
UHJlZmVyZW5jZUtleSBAIldlYktpdEVuYWJsZUluaGVyaXRVUklRdWVyeUNvbXBvbmVudCIKICNk
ZWZpbmUgV2ViS2l0TWVkaWFEYXRhTG9hZHNBdXRvbWF0aWNhbGx5UHJlZmVyZW5jZUtleSBAIldl
YktpdE1lZGlhRGF0YUxvYWRzQXV0b21hdGljYWxseSIKICNkZWZpbmUgV2ViS2l0TW9ja0NhcHR1
cmVEZXZpY2VzRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRNb2NrQ2FwdHVyZURldmljZXNF
bmFibGVkIgorI2RlZmluZSBXZWJLaXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVQcmVmZXJl
bmNlS2V5IEAiV2ViS2l0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlRW5hYmxlZCIKICNkZWZp
bmUgV2ViS2l0RW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWRQcmVmZXJlbmNl
S2V5IEAiV2ViS2l0RW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQiCiAjZGVm
aW5lIFdlYktpdElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2Vi
S2l0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0TWVkaWFDYXB0
dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uUHJlZmVyZW5jZUtleSBAIldlYktpdE1lZGlhQ2Fw
dHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzLm1tCmluZGV4IGQ1NjhhNjk2NmJmMmZlZThjMTM0NzMwMzMzODc0Mzkw
NzQ5Nzg1MWYuLmMxYjYxMmE1Nzg0MGFlZTkzYTJjOWI4NjFjNjcxNzdmMjYwNTM0NTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KKysrIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQpAQCAtNjE5LDYgKzYx
OSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCBXZWJLaXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkUHJl
ZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIFdlYktp
dE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvblByZWZlcmVuY2VLZXksCisgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sIFdlYktpdFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZVByZWZlcmVuY2VLZXksCiAjZW5kaWYKICAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOllFU10sIFdlYktpdFNoYWRvd0RPTUVuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgV2ViS2l0Q3VzdG9tRWxlbWVudHNF
bmFibGVkUHJlZmVyZW5jZUtleSwKQEAgLTI4NjYsNiArMjg2NywxNiBAQCBzdGF0aWMgTlNTdHJp
bmcgKmNsYXNzSUJDcmVhdG9ySUQgPSBuaWw7CiAgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFn
IGZvcktleTpXZWJLaXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkUHJlZmVyZW5jZUtleV07CiB9
CiAKKy0gKEJPT0wpdXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlCit7CisgICAgcmV0dXJuIFtz
ZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlUHJl
ZmVyZW5jZUtleV07Cit9CisKKy0gKHZvaWQpc2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJl
OihCT09MKWZsYWcKK3sKKyAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktp
dFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZVByZWZlcmVuY2VLZXldOworfQorCiAtIChCT09M
KWVudW1lcmF0aW5nQWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVkCiB7CiAgICAgcmV0dXJuIFtz
ZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0RW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNl
c0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCmluZGV4IGVlOTVmZjg3OTI3MjMxOTRmZTgyMGM2M2E5
ZTRkN2YxNjA5Njk4Y2QuLmY4MTEzYzFjOTkzZjQ4MmMzNGJlYTRiMmI2OGQwMTBmMWUyNzA0Njkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2
YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaApAQCAtNTExLDYgKzUxMSw5IEBAIGV4dGVybiBOU1N0cmluZyAqV2ViUHJlZmVyZW5jZXND
YWNoZU1vZGVsQ2hhbmdlZEludGVybmFsTm90aWZpY2F0aW9uOwogLSAodm9pZClzZXRNZWRpYUNh
cHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb246KEJPT0wpZmxhZzsKIC0gKEJPT0wpbWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOwogCistICh2b2lkKXNldFVzZUFWRm91bmRh
dGlvbkF1ZGlvQ2FwdHVyZTooQk9PTClmbGFnOworLSAoQk9PTCl1c2VBVkZvdW5kYXRpb25BdWRp
b0NhcHR1cmU7CisKIC0gKHZvaWQpc2V0U2hhZG93RE9NRW5hYmxlZDooQk9PTClmbGFnOwogLSAo
Qk9PTClzaGFkb3dET01FbmFibGVkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
aW5kZXggY2FhNzIyMzljNWM4ODhhZTE0Y2ExZDA0OTc4MTJiNjk5OGM3OWJlZS4uNWNiYjA2MzYz
YTFjZjdmNGI3ZmIwODdhNGIwNTUxY2M4ZjAyMzk0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQpAQCAtMjk2NCw2ICsyOTY0LDcgQEAgc3RhdGljIGJvb2wgbmVlZHNTZWxmUmV0
YWluV2hpbGVMb2FkaW5nUXVpcmsoKQogICAgIHNldHRpbmdzLnNldE1vY2tDYXB0dXJlRGV2aWNl
c0VuYWJsZWQoW3ByZWZlcmVuY2VzIG1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRdKTsKICAgICBz
ZXR0aW5ncy5zZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oW3ByZWZlcmVu
Y2VzIG1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbl0pOwogICAgIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0TWVkaWFTdHJlYW1FbmFibGVkKFtw
cmVmZXJlbmNlcyBtZWRpYVN0cmVhbUVuYWJsZWRdKTsKKyAgICBzZXR0aW5ncy5zZXRVc2VBVkZv
dW5kYXRpb25BdWRpb0NhcHR1cmUoW3ByZWZlcmVuY2VzIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2Fw
dHVyZV0pOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX1JUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oCmluZGV4IDZjMTlkNTQ0NWRk
ZGJlNjY1Y2NkNzJmYzg4ZWRhYzczZDVkYzU4YWYuLjZlZjE3ZGE0MTQ5YTFiZDhjNjBjNDBjYzk2
ZTVhNmIxMjJmYTkwZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVm
ZXJlbmNlc0RlZmluaXRpb25zLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZl
cmVuY2VzRGVmaW5pdGlvbnMuaApAQCAtMjM3LDYgKzIzNyw3IEBACiAgICAgbWFjcm8oSFRUUEVx
dWl2RW5hYmxlZCwgaHR0cEVxdWl2RW5hYmxlZCwgQm9vbCwgYm9vbCwgdHJ1ZSwgIiIsICIiKSBc
CiAgICAgbWFjcm8oTW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCwgbW9ja0NhcHR1cmVEZXZpY2Vz
RW5hYmxlZCwgQm9vbCwgYm9vbCwgZmFsc2UsICIiLCAiIikgXAogICAgIG1hY3JvKE1lZGlhQ2Fw
dHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbiwgbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVD
b25uZWN0aW9uLCBCb29sLCBib29sLCB0cnVlLCAiIiwgIiIpIFwKKyAgICBtYWNybyhVc2VBVkZv
dW5kYXRpb25BdWRpb0NhcHR1cmUsIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSwgQm9vbCwg
Ym9vbCwgZmFsc2UsICIiLCAiIikgXAogICAgIG1hY3JvKEVudW1lcmF0aW5nQWxsTmV0d29ya0lu
dGVyZmFjZXNFbmFibGVkLCBlbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZCwg
Qm9vbCwgYm9vbCwgZmFsc2UsICIiLCAiIikgXAogICAgIG1hY3JvKFdlYlJUQ0xlZ2FjeUFQSUVu
YWJsZWQsIHdlYlJUQ0xlZ2FjeUFQSUVuYWJsZWQsIEJvb2wsIGJvb2wsIHRydWUsICIiLCAiIikg
XAogICAgIG1hY3JvKElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQsIGljZUNhbmRpZGF0ZUZp
bHRlcmluZ0VuYWJsZWQsIEJvb2wsIGJvb2wsIHRydWUsICIiLCAiIikgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCmluZGV4IDk3ZWMxNDll
NDc2YjdiYjhiODNmMDE2YzA0NTY0YzNiZGViZDE3ZmIuLjFkMGMxM2I1Mzk1NzMzZDVkY2QxNjYw
YTU2MjhlYzIyZjMyYjMxN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1ByZWZlcmVuY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tQcmVmZXJlbmNlcy5jcHAKQEAgLTE1OTEsNiArMTU5MSwxNiBAQCBib29sIFdLUHJlZmVy
ZW5jZXNHZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oV0tQcmVmZXJlbmNl
c1JlZiBwcmVmZQogICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5tZWRpYUNhcHR1
cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKTsKIH0KIAordm9pZCBXS1ByZWZlcmVuY2VzU2V0
VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNS
ZWYsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRVc2VB
VkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoZW5hYmxlZCk7Cit9CisKK2Jvb2wgV0tQcmVmZXJlbmNl
c0dldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmKQoreworICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT51c2VBVkZvdW5k
YXRpb25BdWRpb0NhcHR1cmUoKTsKK30KKwogdm9pZCBXS1ByZWZlcmVuY2VzU2V0RmV0Y2hBUElF
bmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKICAg
ICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRGZXRjaEFQSUVuYWJsZWQoZmxhZyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVm
UHJpdmF0ZS5oCmluZGV4IGM1Y2RjYmE0OWViOWYwZjMxMjRlOGUyNzQwMDg5NzljZDQxMDU2NGYu
LjhiYjcxZDk2ZjE1MDIyYjIyMWQzMTNkZmIxNmZkYTFhZmIzMjc0YTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0
ZS5oCkBAIC00MzMsNiArNDMzLDEwIEBAIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRF
bnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZChXS1ByZWZlcmVuCiBXS19FWFBP
UlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0
aW9uKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNl
c0dldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihXS1ByZWZlcmVuY2VzUmVm
KTsKIAorLy8gRGVmYXVsdHMgdG8gZmFsc2UuCitXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2Vz
U2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wpOwor
V0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVy
ZShXS1ByZWZlcmVuY2VzUmVmKTsKKyAgICAKIC8vIERlZmF1bHRzIHRvIGZhbHNlCiBXS19FWFBP
UlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0RmV0Y2hBUElFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYs
IGJvb2wgZmxhZyk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0RmV0Y2hBUElFbmFi
bGVkKFdLUHJlZmVyZW5jZXNSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwCmluZGV4
IDcwYWZjN2EyMGNhOWEyZjc4NjU3MzFiOGNiMTlhOWI1YzM5MGM0ZGEuLmM2ZjdhZTlhYzQ2NmNl
ZGU0YzkyYjNiYjg3ZDk1Y2I0ODZmYTI5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5j
cHAKQEAgLTEyOCw3ICsxMjgsNyBAQCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5Ojp+VXNl
ck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpCiB2b2lkIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
UHJveHk6OmNyZWF0ZU1lZGlhU291cmNlRm9yQ2FwdHVyZURldmljZVdpdGhDb25zdHJhaW50cyh1
aW50NjRfdCBpZCwgY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25zdCBNZWRpYUNvbnN0
cmFpbnRzRGF0YSYgY29uc3RyYWludHNEYXRhLCBib29sJiBzdWNjZWVkZWQsIFN0cmluZyYgaW52
YWxpZENvbnN0cmFpbnRzKQogewogICAgIGF1dG8gY29uc3RyYWludHMgPSBNZWRpYUNvbnN0cmFp
bnRzSW1wbDo6Y3JlYXRlKGNvbnN0cmFpbnRzRGF0YSk7Ci0gICAgUmVmUHRyPFJlYWx0aW1lTWVk
aWFTb3VyY2U+IHNvdXJjZSA9IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigp
LmRlZmF1bHRBdWRpb0ZhY3RvcnkoKS0+Y3JlYXRlTWVkaWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNl
V2l0aENvbnN0cmFpbnRzKGRldmljZSwgY29uc3RyYWludHMucHRyKCksIGludmFsaWRDb25zdHJh
aW50cyk7CisgICAgYXV0byBzb3VyY2UgPSBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5n
bGV0b24oKS5hdWRpb0ZhY3RvcnkoKS0+Y3JlYXRlTWVkaWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNl
V2l0aENvbnN0cmFpbnRzKGRldmljZSwgY29uc3RyYWludHMucHRyKCksIGludmFsaWRDb25zdHJh
aW50cyk7CiAgICAgc3VjY2VlZGVkID0gISFzb3VyY2U7CiAgICAgCiAgICAgaWYgKHNvdXJjZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDI5NGRiYjE4Y2E2ODAw
NTQ1YzViNzUxZTlhYTE1NzY5YmE4NDM4MjMuLmM4NDE3YjBjMjk4MjRiYjExZmE4ODExNDA2MDU2
MDA3MDZmYzNhZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcApAQCAt
MzEsNiArMzEsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFTb3VyY2UuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgogCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKyNpbmNsdWRlIDxXZWJDb3JlL0FWQ2Fw
dHVyZURldmljZU1hbmFnZXIuaD4KKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0zMjksNiArMzMzLDExIEBAIHZvaWQgVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OnN5bmNXaXRoV2ViQ29yZVByZWZzKCkgY29u
c3QKICAgICAvLyB0aGlzIGlzIGEgbm9vcCBpZiB0aGUgcHJlZmVyZW5jZSBoYXNuJ3QgY2hhbmdl
ZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgd2FzIGNhbGxlZC4KICAgICBib29sIG1vY2tEZXZp
Y2VzRW5hYmxlZCA9IG1fcGFnZS5wcmVmZXJlbmNlcygpLm1vY2tDYXB0dXJlRGV2aWNlc0VuYWJs
ZWQoKTsKICAgICBXZWJDb3JlOjpNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2V0TW9j
a1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVkKG1vY2tEZXZpY2VzRW5hYmxlZCk7CisK
KyNpZiBVU0UoQVZGT1VOREFUSU9OKQorICAgIGJvb2wgdXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0
dXJlID0gbV9wYWdlLnByZWZlcmVuY2VzKCkudXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKCk7
CisgICAgV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2V0VXNlQVZGb3VuZGF0aW9u
QXVkaW9DYXB0dXJlKHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSk7CisjZW5kaWYKICNlbmRp
ZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
aW5kZXggNDM1YTllYTFhY2JhOTIyYzBiYmUzZjcyNjJhMWNiMDgxMDQ5NmI0MC4uMjU5YTk2Mjg0
NTY4ZmYxZjEzNjIxNzE4MjM1MTFjMTZiZTBlZTExMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzI0MCw2ICszMjQwLDcgQEAgdm9pZCBX
ZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9y
ZSkKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIHNldHRpbmdzLnNldE1vY2tDYXB0dXJl
RGV2aWNlc0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5
Ojptb2NrQ2FwdHVyZURldmljZXNFbmFibGVkS2V5KCkpKTsKICAgICBzZXR0aW5ncy5zZXRNZWRp
YUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5
KFdlYlByZWZlcmVuY2VzS2V5OjptZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb25L
ZXkoKSkpOworICAgIHNldHRpbmdzLnNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShzdG9y
ZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZUtleSgpKSk7CiAjZW5kaWYKIAogICAgIHNldHRpbmdzLnNldFNob3VsZENvbnZl
cnRQb3NpdGlvblN0eWxlT25Db3B5KHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJl
bmNlc0tleTo6c2hvdWxkQ29udmVydFBvc2l0aW9uU3R5bGVPbkNvcHlLZXkoKSkpOwo=
</data>
<flag name="review"
          id="327754"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306736</attachid>
            <date>2017-04-10 13:40:13 -0700</date>
            <delta_ts>2017-04-10 14:24:17 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>bug-170112-20170410134012.patch</filename>
            <type>text/plain</type>
            <size>54624</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg2M2JlNThiOWFjZDEz
MTFiNWQ1NmQ3N2U2MzgxNjM1NzJkODQzNy4uMzE5MWI4OTBkNmVmMWZiNTBjMjFlOGJlZmM4ZDgw
MjllOGZiMTM1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE3LTA0LTA1ICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDExMgorICAgICAgICByZGFyOi8vcHJvYmxlbS8zMDI5MzMzOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0
aGlzIHByb3ZpZGVzIHRoZSBzYW1lIGZ1bmNpdG9uYWxpdHkgYXMgQVZBdWRpb0NhcHR1cmVTb3Vy
Y2UuIAorICAgICAgICBGdW5jaW9uYWxpdHkgaXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0IGNh
c2VzLgorCisgICAgICAgIEFkZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlIGZvciBhdWRpbyBjYXB0
dXJlLiBBbmQgdXNlIGl0IGJ5IGRlZmF1bHQgaW4gQVZDYXB0dXJlRGV2aWNlTWFuYWdlci4KKyAg
ICAgICAgQWRkIFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSBzZXR0aW5nIHRvIHN3aXRjaCBi
YWNrIHRvIEFWRm91bmRhdGlvbiBmb3IgYXVkaW8gY2FwdHVyZS4KKworICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjp1c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldFVzZUFWRm91bmRhdGlvbkF1ZGlv
Q2FwdHVyZSk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmg6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW06CisgICAgICAg
IChXZWJDb3JlOjpBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXRVc2VBVkZvdW5kYXRpb25BdWRp
b0NhcHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9D
YXB0dXJlU291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZTo6ZmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNl
OjpDb3JlQXVkaW9DYXB0dXJlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6On5Db3JlQXVkaW9DYXB0dXJlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByZWZlcnJlZFNhbXBsZVJhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJlZmVycmVkSU9CdWZmZXJEdXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVN
aWNyb3Bob25lUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNl
Ojpjb25maWd1cmVTcGVha2VyUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjphZGRNaWNyb3Bob25lRGF0YUNvbnN1bWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnJlbW92ZU1pY3JvcGhvbmVEYXRhQ29uc3VtZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6YWRkRWNob0NhbmNlbGxh
dGlvblNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpy
ZW1vdmVFY2hvQ2FuY2VsbGF0aW9uU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6OmNoZWNrVGltZXN0YW1wcyk6CisgICAgICAgIChXZWJDb3JlOjpDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpwcm92aWRlU3BlYWtlckRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3BlYWtlckNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjptaWNyb3Bob25lQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZGVmYXVs
dE91dHB1dERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNl
OjpkZWZhdWx0SW5wdXREZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6OlJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlck1hYzo6ZGVmYXVsdEF1ZGlvRmFjdG9yeSk6CisKIDIwMTctMDMtMjkgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBUcnkgdG8gbm9ybWFs
aXplIHZhcmlhdGlvbiByYW5nZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA0YzkxN2QzMGUwZjk0NmEz
MzBiMjRmN2I1ODFiZDllYjQwM2ZjZjkzLi40MmFhOTg3NjZiOTY0MWQ2ZWIyYmI4MjRjODFkODMz
MDVmNDIzZDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTctMDQtMDUg
IEplcmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBDb3JlQXVk
aW9DYXB0dXJlU291cmNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcwMTEyCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzMwMjkzMzM4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgorCisgICAgICAgIEFkZCBVc2VBVkZvdW5kYXRp
b25BdWRpb0NhcHR1cmUgcHJlZmVyZW5jZSB0byBzd2l0Y2ggYmFjayBmcm9tIHRoZSBuZXcgZGVm
YXVsdCBvZiBDb3JlQXVkaW8uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlz
UHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisgICAgICAg
ICgrW1dlYlByZWZlcmVuY2VzIGluaXRpYWxpemVdKToKKyAgICAgICAgKC1bV2ViUHJlZmVyZW5j
ZXMgdXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlXSk6CisgICAgICAgICgtW1dlYlByZWZlcmVu
Y2VzIHNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZTpdKToKKyAgICAgICAgKiBXZWJWaWV3
L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToK
KyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgorCiAyMDE3LTAzLTI3
ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogU2F2aW5nIGZpbGVzIHNob3VsZCBub3Qgc3VnZ2VzdCB0aGUgdG9wIGxldmVsIGRp
cmVjdG9yeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDEwOTM5Y2YxYzllY2UwOGJkOGY4ODE5NTk0MWFmODdiYjU0
YmNiZGEuLjU5OGNjMTA2ODYzOTVkNDRkOTc3MTQ0NTIwMmI0NDA4YTcyOTIyYTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNy0wNC0wNSAgSmVyZW15IEpvbmVzICA8amVyZW15akBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxMTIKKyAgICAgICAg
cmRhcjovL3Byb2JsZW0vMzAyOTMzMzgKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9u
LgorCisgICAgICAgIEFkZCBVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUgcHJlZmVyZW5jZSB0
byBzd2l0Y2ggYmFjayBmcm9tIHRoZSBuZXcgZGVmYXVsdCBvZiBDb3JlQXVkaW8uCisKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNTZXRV
c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUpOgorICAgICAgICAoV0tQcmVmZXJlbmNlc0dldFVz
ZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dL
UHJlZmVyZW5jZXNSZWZQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1VzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFD
YXB0dXJlTWFuYWdlclByb3h5OjpjcmVhdGVNZWRpYVNvdXJjZUZvckNhcHR1cmVEZXZpY2VXaXRo
Q29uc3RyYWludHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5OjpzeW5jV2l0aFdlYkNvcmVQcmVmcyk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
Ojp1cGRhdGVQcmVmZXJlbmNlcyk6CisKIDIwMTctMDMtMjkgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBQYWdlQ2xpZW50Ojpy
ZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmE0YWE4ZTRiM2JiNTg1NDIxMjU4
ZGVlN2I2NGUxMDMxYTRjZDY0YS4uZDUyZTdjMzQwNjVhY2ExYmIyNTRjZTk2NjE2YmI0ZmJkNjJl
YTY2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNzMsNyArNzMsNyBAQAogCQkwNzAzMzRFOTE0NUExRjM2MDA4RDhENDUgLyog
SlNUcmFja0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwNzAzMzRFODE0NUExRjM1MDA4RDhENDUgLyogSlNUcmFja0N1c3RvbS5jcHAgKi87
IH07CiAJCTA3MDM2M0UwMTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzRDgx
ODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLmggKi87IH07CiAJCTA3MDM2
M0UxMTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0Q5MTgxQTFDREMwMEMw
NzRBNSAvKiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbSAqLzsgfTsKLQkJMDcwMzYzRTIxODFBMUNE
QzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0RBMTgxQTFDREMwMEMwNzRBNSAvKiBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi87IH07CisJCTA3MDM2M0UyMTgxQTFDREMwMEMwNzRB
NSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAzNjNEQTE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJl
RGV2aWNlTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTA3MDM2M0UzMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcw
MzYzREIxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIubW0gKi87IH07
CiAJCTA3MDM2M0U0MTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREMxODFB
MUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLmggKi87IH07CiAJCTA3MDM2M0U1
MTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0REMTgxQTFDREMwMEMwNzRB
NSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbSAqLzsgfTsKQEAgLTI3NCw3ICsyNzQsNyBAQAog
CQkwN0I1QTMwRDE0Njg3RDcxMDBBODFFQ0UgLyogSlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QjVBMzBDMTQ2
ODdENzEwMEE4MUVDRSAvKiBKU1RleHRUcmFja0xpc3RDdXN0b20uY3BwICovOyB9OwogCQkwN0I3
MTE2RDFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdCNzExNkExRDg5OUU2MzAwOUYwRkZCIC8q
IENhcHR1cmVEZXZpY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwN0I3MTE2RTFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFn
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdC
NzExNkIxRDg5OUU2MzAwOUYwRkZCIC8qIENhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCAqLzsgfTsK
LQkJMDdCNzExNkYxRDg5OUU2MzAwOUYwRkZCIC8qIENhcHR1cmVEZXZpY2VNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0I3MTE2QzFEODk5
RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgfTsKKwkJMDdCNzExNkYx
RDg5OUU2MzAwOUYwRkZCIC8qIENhcHR1cmVEZXZpY2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0I3MTE2QzFEODk5RTYzMDA5RjBGRkIg
LyogQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwN0MwNDZDMzFFNDI1MDhCMDA3MjAxRTcgLyogQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3M0I4NzU3MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uY3BwICovOyB9OwogCQkwN0MwNDZDNDFFNDI1MDhCMDA3MjAxRTcgLyogQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwNzNCODc1ODFFNDBEQ0ZEMDA3MUMwRUMgLyogQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MDdDMDQ2QzgxRTQyNTE1NTAwNzIwMUU3IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW1D
b2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdD
MDQ2QzYxRTQyNTEyRjAwNzIwMUU3IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW1Db2Nv
YS5oICovOyB9OwpAQCAtMTY2MSw2ICsxNjYxLDcgQEAKIAkJM0Y0MkIzMUUxODgxMTkxQjAwMjc4
QUFDIC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGNDJCMzFDMTg4MTE5MUIwMDI3OEFB
QyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gKi87IH07CiAJCTNGQkM0
QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYx
MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAq
LzsgfTsKIAkJM0ZCQzRBRjQxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzRkJDNEFGMjE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkzRkYxRkE2NjFFNzM1MEZEMDBDMTAwMkYgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjNCQjU4
MjFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgKi87IH07CiAJ
CTNGRjgxM0E3MURCQTg2NDAwMDlCRjAwMSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRkM0MzRGMTkyNDA2
QTkwMEEwRDNCNSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzRkZGRjlBODE1OUQ5QTU1MDAyMEJCRDUg
LyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNGRkZGOUE2MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuY3BwICovOyB9OwogCQkzRkZGRjlBOTE1OUQ5QTU1MDAyMEJCRDUgLyogV2Vi
S2l0Q1NTVmlld3BvcnRSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzRkZGRjlBNzE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRS
dWxlLmggKi87IH07CkBAIC05MjE4LDYgKzkyMTksOCBAQAogCQkzRjJCMzNFMzE2NUFCRDM1MDBF
Mzk4N0MgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzRjJCMzNFOTE2NUFGMTU1MDBFMzk4N0MgLyogSlNXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRDU1NWaWV3cG9y
dFJ1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRjJCMzNFQTE2NUFGMTU1
MDBFMzk4N0MgLyogSlNXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJM0YzQkI1ODIxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGM0JC
NTgzMUU3MDlFRTQwMEM3MDFGMiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0Y0MkIzMUIxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJM0Y0MkIzMUMxODgxMTkxQjAwMjc4QUFDIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjA3Miw2ICsxNjA3NSw4IEBACiAJCQkJMDcwMzYzREQx
ODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tICovLAogCQkJCTA3MDM2
M0RFMTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oICovLAogCQkJCTA3
MDM2M0RGMTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbSAqLywKKwkJ
CQkzRjNCQjU4MjFFNzA5RUU0MDBDNzAxRjIgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAg
Ki8sCisJCQkJM0YzQkI1ODMxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2UuaCAqLywKIAkJCQkwNzQ0RUNFQjFFMEM0QUU1MDAwRDA5NDQgLyogTW9ja1JlYWx0aW1lQXVk
aW9Tb3VyY2VNYWMuaCAqLywKIAkJCQkwNzQ0RUNFQzFFMEM0QUU1MDAwRDA5NDQgLyogTW9ja1Jl
YWx0aW1lQXVkaW9Tb3VyY2VNYWMubW0gKi8sCiAJCQkJMDdFRTc2RUQxQkVBNjE5ODAwRjg5MTMz
IC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmggKi8sCkBAIC0zMDU0NCw2ICszMDU0OSw3
IEBACiAJCQkJRTEzRjAxRjExMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQk5NzQ2QUYyMTE0RjREREU2MDAzRTdBNzIgLyogQ29vcmRpbmF0
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDQzODE3RkYxQTkxQjJGODAwNkUwNEYyIC8qIENv
cmVNZWRpYVNvZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTNGRjFGQTY2MUU3MzUwRkQw
MEMxMDAyRiAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUNEN0QzMzQ3MUM3QTE2QkYwMDA0MTI5MyAvKiBDb3JlVmlkZW9Tb2Z0TGluay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzVFQjk1MDBFODIwNTZCMDBCMjU5NjUgLyogQ291bnRlckRpcmVjdGl2
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MkYxNTAwQUQxODYyMzAwNjkxQkQ0IC8qIENv
dW50ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRl
eCAxYjNlMjJiZjFiZjdhYzM0MjkxYTA3ZTEyMDY1NWQ1YjZlMjg0OTI5Li45ZjkyYTZlOWQ5ZTI4
NDk0NWU4NjRjOWQ5MmVjYWE2MGRjNThjYzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApA
QCAtNDgsNiArNDgsMTAgQEAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoQVZGT1VOREFUSU9OKQorI2luY2x1ZGUgIkFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKKyNl
bmRpZgorCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpbmNsdWRlICJNb2NrUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlci5oIgogI2VuZGlmCkBAIC05NCw2ICs5OCw3IEBAIGJvb2wgU2V0dGlu
Z3M6OmdNb2NrU2Nyb2xsQW5pbWF0b3JFbmFibGVkID0gZmFsc2U7CiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKIGJvb2wgU2V0dGluZ3M6OmdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkID0gZmFs
c2U7CiBib29sIFNldHRpbmdzOjpnTWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9u
ID0gdHJ1ZTsKK2Jvb2wgU2V0dGluZ3M6OmdVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUgPSBm
YWxzZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtNjE1LDYgKzYyMCwxOSBAQCB2
b2lkIFNldHRpbmdzOjpzZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9v
bCBtZWRpYUNhcHR1cmVSZXF1aXJlcwogewogICAgIGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3Vy
ZUNvbm5lY3Rpb24gPSBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247CiB9CisK
K2Jvb2wgU2V0dGluZ3M6OnVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSgpCit7CisgICAgcmV0
dXJuIGdVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmU7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNl
dFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShib29sIHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2Fw
dHVyZSkKK3sKKyAgICBnVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlID0gdXNlQVZGb3VuZGF0
aW9uQXVkaW9DYXB0dXJlOworI2lmIFVTRShBVkZPVU5EQVRJT04pCisgICAgQVZDYXB0dXJlRGV2
aWNlTWFuYWdlcjo6c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKHVzZUFWRm91bmRhdGlv
bkF1ZGlvQ2FwdHVyZSk7CisjZW5kaWYKK30KICNlbmRpZgogCiB2b2lkIFNldHRpbmdzOjpzZXRT
Y3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaAppbmRleCA5ZjM3MDc1NWIwYjgyYmZlODE5MjgwYTU5ODE0MGRhMzlmNTgyMzhk
Li44NjNiZDEyZWFmMTIxYTVmY2UwYmQ4ZWJiZWMyZGIxZTM2MDJiMzQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5oCkBAIC0zMTAsNiArMzEwLDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBtZWRpYUNh
cHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBzZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9v
bCk7CisKKyAgICBzdGF0aWMgYm9vbCB1c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1
cmUoYm9vbCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBUFBMRV9QQVkpCkBAIC00MTUsNiArNDE4
LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9tZWRpYURldmljZUlkZW50aWZpZXJTdG9yYWdl
RGlyZWN0b3J5OwogICAgIHN0YXRpYyBib29sIGdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOwog
ICAgIHN0YXRpYyBib29sIGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247Cisg
ICAgc3RhdGljIGJvb2wgZ1VzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKEFQUExFX1BBWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oCmluZGV4
IDI0ZjczYjA0ZGMzYTViODE2OGEzMzQ3ZmEwY2NhMmEyMjdjYTQxNGYuLmM2MGNhM2I4NTJjNjQw
NzczMjc4MmIwZGEyNzhjM2I4ZmVjNGI3ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFn
ZXIuaApAQCAtNDUsNiArNDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyIGZpbmFsIDogcHVibGljIENhcHR1cmVEZXZpY2VNYW5hZ2VyIHsKICAg
ICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8QVZDYXB0dXJlRGV2aWNlTWFuYWdlcj47CiBw
dWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0VXNlQVZGb3VuZGF0aW9u
QXVkaW9DYXB0dXJlKGJvb2wpOworCiAgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBjYXB0dXJl
RGV2aWNlcygpIGZpbmFsOwogCiAgICAgc3RhdGljIEFWQ2FwdHVyZURldmljZU1hbmFnZXImIHNp
bmdsZXRvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbQppbmRleCAzZjAzNjgz
MmQ1MGRhNmEwMWQzNTFlYmFjOGZiMjJiYzBmZTI2ODdmLi5iMzkxNTM2YzhiNTJmMWI3YmU5YWEx
OWNiNjZlYzFjZDQxODI1NTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbQpA
QCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCAiQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCIKICNpbXBv
cnQgIkFWVmlkZW9DYXB0dXJlU291cmNlLmgiCiAjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVy
LmgiCisjaW1wb3J0ICJDb3JlQXVkaW9DYXB0dXJlU291cmNlLmgiCiAjaW1wb3J0ICJMb2dnaW5n
LmgiCiAjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgiCiAjaW1wb3J0ICJSZWFsdGltZU1lZGlh
U291cmNlLmgiCkBAIC05Miw2ICs5MywxOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCit2b2lkIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNldFVz
ZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShib29sIGVuYWJsZWQpCit7CisgICAgc3RhdGljIGJv
b2wgYWN0aXZlID0gZmFsc2U7CisgICAgaWYgKGFjdGl2ZSA9PSBlbmFibGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhY3RpdmUgPSBlbmFibGVkOworICAgIGlmIChhY3RpdmUpCisgICAgICAg
IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLnNldEF1ZGlvRmFjdG9yeShB
VkF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpKTsKKyAgICBlbHNlCisgICAgICAgIFJlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLnNldEF1ZGlvRmFjdG9yeShDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCkpOworfQorCiBWZWN0b3I8Q2FwdHVyZURldmljZT4m
IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmNhcHR1cmVEZXZpY2VzKCkKIHsKICAgICBpZiAoIWlz
QXZhaWxhYmxlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjljNzAxMTQzOGM1MDQ0YWNiYWYyZTZlYWJlNzk5M2EzZDRmZmQ4ZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9D
YXB0dXJlU291cmNlLmNwcApAQCAtMCwwICsxLDUxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
b3JlQXVkaW9DYXB0dXJlU291cmNlLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisj
aW5jbHVkZSAiQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgiCisjaW5jbHVkZSAiQXVkaW9TYW1wbGVE
YXRhU291cmNlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhVGltZUFW
Rm91bmRhdGlvbi5oIgorI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb0NvbnZlcnRlci5oPgor
I2luY2x1ZGUgPEF1ZGlvVW5pdC9BdWRpb1VuaXQuaD4KKyNpbmNsdWRlIDxDb3JlTWVkaWEvQ01T
eW5jLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgIkNvcmVNZWRpYVNv
ZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZUZhY3RvcnkgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZTo6Q2FwdHVyZUZhY3Rv
cnkgeworcHVibGljOgorICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGVNZWRp
YVNvdXJjZUZvckNhcHR1cmVEZXZpY2VXaXRoQ29uc3RyYWludHMoY29uc3QgQ2FwdHVyZURldmlj
ZSYgY2FwdHVyZURldmljZSwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMsIFN0
cmluZyYgaW52YWxpZENvbnN0cmFpbnQpIGZpbmFsIHsKKyAgICAgICAgcmV0dXJuIENvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShjYXB0dXJlRGV2aWNlLCBjb25zdHJhaW50cywgaW52YWxp
ZENvbnN0cmFpbnQpOworICAgIH0KK307CisKK2NvbnN0IFVJbnQzMiBvdXRwdXRCdXMgPSAwOwor
Y29uc3QgVUludDMyIGlucHV0QnVzID0gMTsKKworUmVmUHRyPENvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U+IENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShjb25zdCBDYXB0dXJlRGV2aWNlJiBk
ZXZpY2VJbmZvLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cywgU3RyaW5nJiBp
bnZhbGlkQ29uc3RyYWludCkKK3sKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKG5ldyBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlKGRldmljZUluZm8pKTsKKyAgICBpZiAoY29uc3RyYWludHMpIHsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBzb3VyY2UtPmFwcGx5Q29uc3RyYWludHMoKmNvbnN0cmFp
bnRzKTsKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgaW52YWxpZENvbnN0cmFp
bnQgPSByZXN1bHQudmFsdWUoKS5maXJzdDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHNvdXJjZTsKK30KKworCitSZWFsdGltZU1l
ZGlhU291cmNlOjpDYXB0dXJlRmFjdG9yeSYgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9y
eSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvcmVBdWRpb0NhcHR1cmVTb3VyY2VG
YWN0b3J5PiBmYWN0b3J5OworICAgIHJldHVybiBmYWN0b3J5LmdldCgpOworfQorCisKK0NvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoY29uc3QgQ2FwdHVyZURl
dmljZSYgZGV2aWNlSW5mbykKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZW1wdHlTdHJpbmco
KSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8sIGRldmljZUluZm8ubGFiZWwoKSkK
KyAgICAsIG1fY2FwdHVyZURldmljZUlEKDApCit7CisgICAgLy8gRklYTUU6IHVzZSBkZXZpY2VJ
bmZvIHRvIHNldCB0aGUgbV9jYXB0dXJlRGV2aWNlSUQKKworICAgIHNldFBlcnNpc3RlbnRJRChk
ZXZpY2VJbmZvLnBlcnNpc3RlbnRJZCgpKTsKKyAgICBzZXRNdXRlZCh0cnVlKTsKKworICAgIG1f
Y3VycmVudFNldHRpbmdzLnNldFZvbHVtZSgxLjApOworICAgIG1fY3VycmVudFNldHRpbmdzLnNl
dFNhbXBsZVJhdGUocHJlZmVycmVkU2FtcGxlUmF0ZSgpKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5n
cy5zZXREZXZpY2VJZChpZCgpKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncy5zZXRFY2hvQ2FuY2Vs
bGF0aW9uKHRydWUpOworCisgICAgbWFjaF90aW1lYmFzZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUlu
Zm87CisgICAgbWFjaF90aW1lYmFzZV9pbmZvKCZ0aW1lYmFzZUluZm8pOworICAgIG1fRFRTQ29u
dmVyc2lvblJhdGlvID0gMWUtOSAqIHN0YXRpY19jYXN0PGRvdWJsZT4odGltZWJhc2VJbmZvLm51
bWVyKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4odGltZWJhc2VJbmZvLmRlbm9tKTsKK30KKworQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6fkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoKQoreworICAgIHN1
c3BlbmQoKTsKKworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW50ZXJuYWxTdGF0
ZUxvY2spOworCisgICAgaWYgKG1faW9Vbml0KQorICAgICAgICBBdWRpb0NvbXBvbmVudEluc3Rh
bmNlRGlzcG9zZShtX2lvVW5pdCk7CisKKyAgICBtX2lvVW5pdE5hbWUgPSBlbXB0eVN0cmluZygp
OworCisgICAgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX3NwZWFr
ZXJTYW1wbGVCdWZmZXIgPSBudWxscHRyOworCisgICAgbV9zcGVha2VyUHJvY3NDYWxsZWQgPSAw
OworICAgIG1fbWljcm9waG9uZVByb2NzQ2FsbGVkICA9IDA7CisgICAgbV9sYXRlc3RNaWNUaW1l
U3RhbXAgPSAwOworCisgICAgbV9hY3RpdmVTb3VyY2VzLmNsZWFyKCk7CisgICAgbV9wZW5kaW5n
U291cmNlcy5jbGVhcigpOworCisgICAgbV9zcGVha2VyU2FtcGxlQnVmZmVyID0gbnVsbHB0cjsK
KworICAgIG1faW9Vbml0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBtX2lvVW5pdFN0YXJ0ZWQg
ID0gZmFsc2U7Cit9CisKK2RvdWJsZSBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcmVmZXJyZWRT
YW1wbGVSYXRlKCkKK3sKKyAgICAvLyBGSVhNRTogR2V0IHRoZSBwcmVmZXJyZWQgcmF0ZSBkeW5h
bWljYWxseSwga0FVVm9pY2VJT1Byb3BlcnR5X1ByZWZlcnJlZEhXU2FtcGxlUmF0ZS8gW1tBVkF1
ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0YW5jZV0gcHJlZmVycmVkU2FtcGxlUmF0ZV0KKyAgICBzdGF0
aWMgY29uc3QgZmxvYXQgcHJlZmVycmVkUmF0ZSA9IDI0MDAwLjsKKyAgICByZXR1cm4gcHJlZmVy
cmVkUmF0ZTsKK30KKworZG91YmxlIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByZWZlcnJlZElP
QnVmZmVyRHVyYXRpb24oKQoreworICAgIC8vIEZJWE1FOiBHZXQgdGhlIHByZWZlcnJlZCBkdXJh
dGlvbiBkeW5hbWljYWxseSAtIGtBVVZvaWNlSU9Qcm9wZXJ0eV9QcmVmZXJyZWRIV0Jsb2NrU2l6
ZUluU2Vjb25kcyAvIFtbQVZBdWRpb1Nlc3Npb24gc2hhcmVkSW5zdGFuY2VdIHByZWZlcnJlZElP
QnVmZmVyRHVyYXRpb25dCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHByZWZlcnJlZER1cmF0aW9u
ID0gMC4wMjsKKyAgICByZXR1cm4gcHJlZmVycmVkRHVyYXRpb247Cit9CisKK09TU3RhdHVzIENv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCkKK3sKKyAgICBB
VVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBtaWNyb3Bob25lQ2FsbGJhY2ssIHRo
aXMgfTsKKyAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVk
aW9PdXRwdXRVbml0UHJvcGVydHlfU2V0SW5wdXRDYWxsYmFjaywga0F1ZGlvVW5pdFNjb3BlX0ds
b2JhbCwgaW5wdXRCdXMsICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7CisgICAgaWYgKGVy
cikgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1
cmVNaWNyb3Bob25lUHJvYyglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgbWljIHByb2MsIGVy
cm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJl
dHVybiBlcnI7CisgICAgfQorCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG1pY3Jv
cGhvbmVQcm9jRm9ybWF0ID0geyB9OworCisgICAgVUludDMyIHNpemUgPSBzaXplb2YobWljcm9w
aG9uZVByb2NGb3JtYXQpOworICAgIGVyciA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KG1faW9Vbml0
LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0
LCBpbnB1dEJ1cywgJm1pY3JvcGhvbmVQcm9jRm9ybWF0LCAmc2l6ZSk7CisgICAgaWYgKGVycikg
eworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVN
aWNyb3Bob25lUHJvYyglcCkgdW5hYmxlIHRvIGdldCBvdXRwdXQgc3RyZWFtIGZvcm1hdCwgZXJy
b3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0
dXJuIGVycjsKKyAgICB9CisKKyAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXIgPSBBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3Q6OmNyZWF0ZShtaWNyb3Bob25lUHJvY0Zvcm1hdCwgcHJlZmVycmVkSU9C
dWZmZXJEdXJhdGlvbigpICogbWljcm9waG9uZVByb2NGb3JtYXQubVNhbXBsZVJhdGUgKiAyKTsK
KyAgICBtX21pY3JvcGhvbmVQcm9jRm9ybWF0ID0gbWljcm9waG9uZVByb2NGb3JtYXQ7CisKKyAg
ICByZXR1cm4gZXJyOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjb25m
aWd1cmVTcGVha2VyUHJvYygpCit7CisgICAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBjYWxsYmFj
ayA9IHsgc3BlYWtlckNhbGxiYWNrLCB0aGlzIH07CisgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRT
ZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNr
LCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBvdXRwdXRCdXMsICZjYWxsYmFjaywgc2l6ZW9mKGNh
bGxiYWNrKSk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpjb25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIHNldCB2cGlv
IHVuaXQgc3BlYWtlciBwcm9jLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNo
YXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbiBzcGVha2VyUHJvY0Zvcm1hdCA9IHsgfTsKKworICAgIFVJbnQzMiBz
aXplID0gc2l6ZW9mKHNwZWFrZXJQcm9jRm9ybWF0KTsKKyAgICBlcnIgID0gQXVkaW9Vbml0R2V0
UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRp
b1VuaXRTY29wZV9JbnB1dCwgb3V0cHV0QnVzLCAmc3BlYWtlclByb2NGb3JtYXQsICZzaXplKTsK
KyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBm
b3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Cisg
ICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbV9zcGVha2VyU2FtcGxlQnVmZmVyID0g
QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpjcmVhdGUoc3BlYWtlclByb2NGb3JtYXQsIHByZWZlcnJl
ZElPQnVmZmVyRHVyYXRpb24oKSAqIHNwZWFrZXJQcm9jRm9ybWF0Lm1TYW1wbGVSYXRlICogMik7
CisgICAgbV9zcGVha2VyUHJvY0Zvcm1hdCA9IHNwZWFrZXJQcm9jRm9ybWF0OworCisgICAgcmV0
dXJuIGVycjsKK30KKwordWludDY0X3QgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6YWRkTWljcm9w
aG9uZURhdGFDb25zdW1lcihNaWNyb3Bob25lRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2spCit7Cisg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wZW5kaW5nU291cmNlUXVldWVMb2NrKTsK
KyAgICBtX21pY3JvcGhvbmVEYXRhQ2FsbGJhY2tzLmFkZCgrK21fbmV4dE1pY3JvcGhvbmVEYXRh
Q2FsbGJhY2tJRCwgY2FsbGJhY2spOworCisgICAgcmV0dXJuIG1fbmV4dE1pY3JvcGhvbmVEYXRh
Q2FsbGJhY2tJRDsKK30KKwordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZW1vdmVNaWNy
b3Bob25lRGF0YUNvbnN1bWVyKHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9wZW5kaW5nU291cmNlUXVldWVMb2NrKTsKKyAgICBtX21pY3Jv
cGhvbmVEYXRhQ2FsbGJhY2tzLnJlbW92ZShjYWxsYmFja0lEKTsKK30gICAgCisKK3ZvaWQgQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6YWRkRWNob0NhbmNlbGxhdGlvblNvdXJjZShBdWRpb1NhbXBs
ZURhdGFTb3VyY2UmIHNvdXJjZSkKK3sKKyAgICBpZiAoIXNvdXJjZS5zZXRPdXRwdXRGb3JtYXQo
bV9zcGVha2VyUHJvY0Zvcm1hdCkpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZTo6YWRkRWNob0NhbmNlbGxhdGlvblNvdXJjZTogc291cmNlICVwIGNvbmZpZ3Vy
ZU91dHB1dCBmYWlsZWQiLCAmc291cmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcGVuZGluZ1NvdXJjZVF1ZXVlTG9jayk7Cisg
ICAgbV9wZW5kaW5nU291cmNlcy5hcHBlbmQoeyBRdWV1ZUFjdGlvbjo6QWRkLCBzb3VyY2UgfSk7
Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3ZlRWNob0NhbmNlbGxhdGlv
blNvdXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmIHNvdXJjZSkKK3sKKyAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2spOworICAgIG1fcGVuZGlu
Z1NvdXJjZXMuYXBwZW5kKHsgUXVldWVBY3Rpb246OlJlbW92ZSwgc291cmNlIH0pOworfQorCit2
b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1Rp
bWVTdGFtcCYgdGltZVN0YW1wLCB1aW50NjRfdCBzYW1wbGVUaW1lLCBkb3VibGUgaG9zdFRpbWUp
Cit7CisgICAgaWYgKCF0aW1lU3RhbXAubVNhbXBsZVRpbWUgfHwgc2FtcGxlVGltZSA9PSBtX2xh
dGVzdE1pY1RpbWVTdGFtcCB8fCAhaG9zdFRpbWUpCisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OmNoZWNrVGltZXN0YW1wczogdW51c3VhbCB0aW1lc3RhbXBzLCBz
YW1wbGUgdGltZSA9ICVsbGQsIHByZXZpb3VzIHNhbXBsZSB0aW1lID0gJWxsZCwgaG9zdFRpbWUg
JWYiLCBzYW1wbGVUaW1lLCBtX2xhdGVzdE1pY1RpbWVTdGFtcCwgaG9zdFRpbWUpOworfQorCitP
U1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9V
bml0UmVuZGVyQWN0aW9uRmxhZ3MmIC8qaW9BY3Rpb25GbGFncyovLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCYgdGltZVN0YW1wLCBVSW50MzIgLyppbkJ1c051bWJlciovLCBVSW50MzIgaW5OdW1iZXJG
cmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQoreworICAgIC8vIENhbGxlZCB3aGVuIHRo
ZSBhdWRpbyB1bml0IG5lZWRzIGRhdGEgdG8gcGxheSB0aHJvdWdoIHRoZSBzcGVha2Vycy4KKyAg
ICArK21fc3BlYWtlclByb2NzQ2FsbGVkOworCisgICAgaWYgKG1fc3BlYWtlclNhbXBsZUJ1ZmZl
ci0+c2FtcGxlQ2FwYWNpdHkoKSA8IGluTnVtYmVyRnJhbWVzKSB7CisgICAgICAgIExPRyhNZWRp
YSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YTogc3BlYWtlciBz
YW1wbGUgYnVmZmVyIHNpemUgKCVkKSB0b28gc21hbGwgZm9yIGFtb3VudCBvZiBzYW1wbGUgZGF0
YSByZXF1ZXN0ZWQgKCVkKSEiLCBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPnNhbXBsZUNhcGFjaXR5
KCksIChpbnQpaW5OdW1iZXJGcmFtZXMpOworICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJy
b3I7CisgICAgfQorCisgICAgLy8gQWRkL3JlbW92ZSBzb3VyY2VzIGZyb20gdGhlIHF1ZXVlLCBi
dXQgb25seSBpZiB3ZSBnZXQgdGhlIGxvY2sgaW1tZWRpYXRlbHkuIE90aGVyd2lzZSB0cnkKKyAg
ICAvLyBhZ2FpbiBvbiB0aGUgbmV4dCBjYWxsYmFjay4KKyAgICB7CisgICAgICAgIHN0ZDo6dW5p
cXVlX2xvY2s8TG9jaz4gbG9jayhtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2ssIHN0ZDo6dHJ5X3Rv
X2xvY2spOworICAgICAgICBpZiAobG9jay5vd25zX2xvY2soKSkgeworICAgICAgICAgICAgZm9y
IChhdXRvJiBwYWlyIDogbV9wZW5kaW5nU291cmNlcykgeworICAgICAgICAgICAgICAgIGlmIChw
YWlyLmZpcnN0ID09IFF1ZXVlQWN0aW9uOjpBZGQpCisgICAgICAgICAgICAgICAgICAgIG1fYWN0
aXZlU291cmNlcy5hcHBlbmQocGFpci5zZWNvbmQuY29weVJlZigpKTsKKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byByZW1vdmVTb3VyY2UgPSBwYWlyLnNl
Y29uZC5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlU291cmNlcy5yZW1v
dmVGaXJzdE1hdGNoaW5nKFsmcmVtb3ZlU291cmNlXShhdXRvJiBzb3VyY2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2UucHRyKCkgPT0gcmVtb3ZlU291cmNlLnB0cigp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBtX3BlbmRpbmdTb3VyY2VzLmNsZWFyKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAobV9hY3RpdmVTb3VyY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBkb3VibGUgYWRqdXN0ZWRIb3N0VGltZSA9IG1fRFRTQ29udmVyc2lvblJhdGlv
ICogdGltZVN0YW1wLm1Ib3N0VGltZTsKKyAgICB1aW50NjRfdCBzYW1wbGVUaW1lID0gdGltZVN0
YW1wLm1TYW1wbGVUaW1lOworICAgIGNoZWNrVGltZXN0YW1wcyh0aW1lU3RhbXAsIHNhbXBsZVRp
bWUsIGFkanVzdGVkSG9zdFRpbWUpOworCisgICAgbV9zcGVha2VyU2FtcGxlQnVmZmVyLT5yZXNl
dCgpOworICAgIG1fc3BlYWtlclNhbXBsZUJ1ZmZlci0+c2V0VGltZXMoYWRqdXN0ZWRIb3N0VGlt
ZSwgc2FtcGxlVGltZSk7CisKKyAgICBBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlckxpc3QgPSBtX3Nw
ZWFrZXJTYW1wbGVCdWZmZXItPmJ1ZmZlckxpc3QoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgYnVmZmVyTGlzdC5tTnVtYmVyQnVmZmVyczsgKytpKQorICAgICAgICBidWZmZXJMaXN0
Lm1CdWZmZXJzW2ldID0gaW9EYXRhLT5tQnVmZmVyc1tpXTsKKworICAgIGJvb2wgZmlyc3RTb3Vy
Y2UgPSB0cnVlOworICAgIGZvciAoYXV0byYgc291cmNlIDogbV9hY3RpdmVTb3VyY2VzKSB7Cisg
ICAgICAgIHNvdXJjZS0+cHVsbFNhbXBsZXMoKm1fc3BlYWtlclNhbXBsZUJ1ZmZlci5nZXQoKSwg
aW5OdW1iZXJGcmFtZXMsIGFkanVzdGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUsIGZpcnN0U291cmNl
ID8gQXVkaW9TYW1wbGVEYXRhU291cmNlOjpDb3B5IDogQXVkaW9TYW1wbGVEYXRhU291cmNlOjpN
aXgpOworICAgICAgICBmaXJzdFNvdXJjZSA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBu
b0VycjsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3BlYWtlckNhbGxi
YWNrKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25G
bGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1i
ZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7Cisg
ICAgQVNTRVJUKGlvQWN0aW9uRmxhZ3MpOworICAgIEFTU0VSVChpblRpbWVTdGFtcCk7CisgICAg
YXV0byBkYXRhU291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSo+KGlu
UmVmQ29uKTsKKyAgICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvdmlkZVNwZWFrZXJEYXRhKCppb0Fj
dGlvbkZsYWdzLCAqaW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgaW9E
YXRhKTsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc01pY3Jv
cGhvbmVTYW1wbGVzKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiBpb0FjdGlvbkZsYWdzLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCYgdGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQz
MiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiAvKmlvRGF0YSovKQoreworICAgICsr
bV9taWNyb3Bob25lUHJvY3NDYWxsZWQ7CisKKyAgICAvLyBQdWxsIHRocm91Z2ggdGhlIHZwaW8g
dW5pdCB0byBvdXIgbWljIGJ1ZmZlci4KKyAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPnJl
c2V0KCk7CisgICAgQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0ID0gbV9taWNyb3Bob25lU2Ft
cGxlQnVmZmVyLT5idWZmZXJMaXN0KCk7CisgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRSZW5kZXIo
bV9pb1VuaXQsICZpb0FjdGlvbkZsYWdzLCAmdGltZVN0YW1wLCBpbkJ1c051bWJlciwgaW5OdW1i
ZXJGcmFtZXMsICZidWZmZXJMaXN0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRp
YSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyglcCkg
QXVkaW9Vbml0UmVuZGVyIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgZG91
YmxlIGFkanVzdGVkSG9zdFRpbWUgPSBtX0RUU0NvbnZlcnNpb25SYXRpbyAqIHRpbWVTdGFtcC5t
SG9zdFRpbWU7CisgICAgdWludDY0X3Qgc2FtcGxlVGltZSA9IHRpbWVTdGFtcC5tU2FtcGxlVGlt
ZTsKKyAgICBjaGVja1RpbWVzdGFtcHModGltZVN0YW1wLCBzYW1wbGVUaW1lLCBhZGp1c3RlZEhv
c3RUaW1lKTsKKyAgICBtX2xhdGVzdE1pY1RpbWVTdGFtcCA9IHNhbXBsZVRpbWU7CisKKyAgICBt
X21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPnNldFRpbWVzKGFkanVzdGVkSG9zdFRpbWUsIHNhbXBs
ZVRpbWUpOworCisgICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhVGltZShzYW1wbGVUaW1l
LCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSksIG1fbWljcm9waG9uZVNhbXBs
ZUJ1ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LCBpbk51bWJlckZy
YW1lcyk7CisKKyAgICBpZiAobV9taWNyb3Bob25lRGF0YUNhbGxiYWNrcy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IG1fbWljcm9waG9u
ZURhdGFDYWxsYmFja3MudmFsdWVzKCkpCisgICAgICAgIGNhbGxiYWNrKE1lZGlhVGltZShzYW1w
bGVUaW1lLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSksIG1fbWljcm9waG9u
ZVNhbXBsZUJ1ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LCBpbk51
bWJlckZyYW1lcyk7CisKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKK09TU3RhdHVzIENvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6Om1pY3JvcGhvbmVDYWxsYmFjayh2b2lkICppblJlZkNvbiwgQXVkaW9V
bml0UmVuZGVyQWN0aW9uRmxhZ3MqIGlvQWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1w
KiBpblRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMs
IEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQoreworICAgIEFTU0VSVChpb0FjdGlvbkZsYWdzKTsK
KyAgICBBU1NFUlQoaW5UaW1lU3RhbXApOworICAgIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UqIGRh
dGFTb3VyY2UgPSBzdGF0aWNfY2FzdDxDb3JlQXVkaW9DYXB0dXJlU291cmNlKj4oaW5SZWZDb24p
OworICAgIHJldHVybiBkYXRhU291cmNlLT5wcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoKmlvQWN0
aW9uRmxhZ3MsICppblRpbWVTdGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCBpb0Rh
dGEpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZhdWx0SW5wdXRE
ZXZpY2UodWludDMyX3QqIGRldmljZUlEKQoreworICAgIEFTU0VSVChtX2lvVW5pdCk7CisKKyAg
ICBVSW50MzIgcHJvcGVydHlTaXplID0gc2l6ZW9mKCpkZXZpY2VJRCk7CisgICAgYXV0byBlcnIg
PSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5
X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCBkZXZpY2VJ
RCwgJnByb3BlcnR5U2l6ZSk7CisgICAgaWYgKGVycikKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZGVmYXVsdElucHV0RGV2aWNlKCVwKSB1bmFibGUgdG8gZ2V0
IGRlZmF1bHQgaW5wdXQgZGV2aWNlIElELCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVy
ciwgKGNoYXIqKSZlcnIpOworCisgICAgcmV0dXJuIGVycjsKK30KKworT1NTdGF0dXMgQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCkKK3sKKyAgICBBU1NFUlQobV9pbnRl
cm5hbFN0YXRlTG9jay5pc0hlbGQoKSk7CisKKyAgICBpZiAobV9pb1VuaXQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBpb1VuaXREZXNjcmlwdGlv
biA9IHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCBrQXVkaW9Vbml0U3ViVHlwZV9Wb2ljZVByb2Nl
c3NpbmdJTywga0F1ZGlvVW5pdE1hbnVmYWN0dXJlcl9BcHBsZSwgMCwgMCB9OworICAgIEF1ZGlv
Q29tcG9uZW50IGlvQ29tcG9uZW50ID0gQXVkaW9Db21wb25lbnRGaW5kTmV4dChudWxscHRyLCAm
aW9Vbml0RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChpb0NvbXBvbmVudCk7CisgICAgaWYgKCFp
b0NvbXBvbmVudCkgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNl
OjpzZXR1cEF1ZGlvVW5pdHMoJXApIHVuYWJsZSB0byBmaW5kIHZwaW8gdW5pdCBjb21wb25lbnQi
LCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIENGU3RyaW5nUmVmIG5h
bWUgPSBudWxscHRyOworICAgIEF1ZGlvQ29tcG9uZW50Q29weU5hbWUoaW9Db21wb25lbnQsICZu
YW1lKTsKKyAgICBpZiAobmFtZSkgeworICAgICAgICBtX2lvVW5pdE5hbWUgPSBuYW1lOworICAg
ICAgICBDRlJlbGVhc2UobmFtZSk7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgY3JlYXRlZCBcIiVzXCIgY29tcG9uZW50Iiwg
dGhpcywgbV9pb1VuaXROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIGF1dG8gZXJy
ID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhpb0NvbXBvbmVudCwgJm1faW9Vbml0KTsKKyAg
ICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIG9wZW4gdnBpbyB1bml0LCBlcnJvciAlZCAo
JS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJy
OworICAgIH0KKworI2lmIFBMQVRGT1JNKElPUykKKyAgICB1aW50MzJfdCBwYXJhbSA9IDE7Cisg
ICAgZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQ
cm9wZXJ0eV9FbmFibGVJTywga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBpbnB1dEJ1cywgJnBhcmFt
LCBzaXplb2YocGFyYW0pKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIGVuYWJs
ZSB2cGlvIHVuaXQgaW5wdXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hh
ciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgcGFyYW0gPSAxOwor
ICAgIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0
UHJvcGVydHlfRW5hYmxlSU8sIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIG91dHB1dEJ1cywgJnBh
cmFtLCBzaXplb2YocGFyYW0pKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwg
IkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIGVu
YWJsZSB2cGlvIHVuaXQgb3V0cHV0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyNlbmRpZgorCisgICAg
aWYgKCFtX2NhcHR1cmVEZXZpY2VJRCkgeworICAgICAgICBlcnIgPSBkZWZhdWx0SW5wdXREZXZp
Y2UoJm1fY2FwdHVyZURldmljZUlEKTsKKyAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHJl
dHVybiBlcnI7CisgICAgfQorCisgICAgVUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZihtX2Nh
cHR1cmVEZXZpY2VJRCk7CisgICAgZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQs
IGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0U2NvcGVf
R2xvYmFsLCBpbnB1dEJ1cywgJm1fY2FwdHVyZURldmljZUlELCBwcm9wZXJ0eVNpemUpOworICAg
IGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6
c2V0dXBBdWRpb1VuaXRzKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBjYXB0dXJlIGRldmlj
ZSBJRCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAg
ICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBlcnIgPSBjb25maWd1cmVNaWNyb3Bob25l
UHJvYygpOworICAgIGlmIChlcnIpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBlcnIgPSBB
dWRpb1VuaXRJbml0aWFsaXplKG1faW9Vbml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExP
RyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgQXVk
aW9Vbml0SW5pdGlhbGl6ZSgpIGZhaWxlZCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCll
cnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgbV9pb1Vu
aXRJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBlcnIgPSBjb25maWd1cmVTcGVha2VyUHJvYygp
OworICAgIGlmIChlcnIpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gZXJyOwor
fQorCit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7
CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7Cisg
ICAgaWYgKG1faW9Vbml0U3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgT1NTdGF0dXMg
ZXJyOworICAgIGlmICghbV9pb1VuaXQpIHsKKyAgICAgICAgZXJyID0gc2V0dXBBdWRpb1VuaXRz
KCk7CisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
ZXJyID0gQXVkaW9PdXRwdXRVbml0U3RhcnQobV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAg
ICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RhcnQoJXApIEF1ZGlv
T3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQp
ZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2lvVW5p
dFN0YXJ0ZWQgPSB0cnVlOworICAgIHNldE11dGVkKGZhbHNlKTsKK30KKwordm9pZCBDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBBU1NFUlQobV9pb1Vu
aXQpOworCisgICAgYXV0byBlcnIgPSBBdWRpb091dHB1dFVuaXRTdG9wKG1faW9Vbml0KTsKKyAg
ICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnN0b3AoJXApIEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMp
IiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2lvVW5pdFN0YXJ0ZWQgPSBmYWxzZTsKKyAgICBzZXRNdXRlZCh0cnVlKTsKK30KKwor
T1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3VzcGVuZCgpCit7CisgICAgc3RkOjps
b2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBBU1NFUlQo
bV9pb1VuaXQpOworCisgICAgaWYgKG1faW9Vbml0U3RhcnRlZCkgeworICAgICAgICBhdXRvIGVy
ciA9IEF1ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQpOworICAgICAgICBpZiAoZXJyKSB7Cisg
ICAgICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZXN1bWUoJXAp
IEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywg
KGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAg
IH0KKyAgICAgICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1f
aW9Vbml0SW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRVbmluaXRp
YWxpemUobV9pb1VuaXQpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBMT0coTWVk
aWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZXN1bWUoJXApIEF1ZGlvVW5pdFVuaW5pdGlh
bGl6ZSBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIq
KSZlcnIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgICAgICBtX2lv
VW5pdEluaXRpYWxpemVkID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK09T
U3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnJlc3VtZSgpCit7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9pbnRlcm5hbFN0YXRlTG9jayk7CisKKyAgICBBU1NFUlQobV9p
b1VuaXQpOworICAgIEFTU0VSVCghbV9pb1VuaXRTdGFydGVkKTsKKworICAgIGF1dG8gZXJyID0g
QXVkaW9PdXRwdXRVbml0U3RhcnQobV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAg
TE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVzdW1lKCVwKSBBdWRpb091dHB1
dFVuaXRTdGFydCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICBtX2lvVW5pdFN0
YXJ0ZWQgPSBmYWxzZTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK1JlZlB0cjxSZWFsdGltZU1l
ZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRp
ZXMoKSBjb25zdAoreworICAgIGlmIChtX2NhcGFiaWxpdGllcykKKyAgICAgICAgcmV0dXJuIG1f
Y2FwYWJpbGl0aWVzOworCisgICAgbV9zdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Rl
dmljZUlkKHRydWUpOworICAgIG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNFY2hv
Q2FuY2VsbGF0aW9uKHRydWUpOworICAgIG1fc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9y
dHNWb2x1bWUodHJ1ZSk7CisKKyAgICAvLyBGSVhNRTogZmluaXNoIHRoaXMuCisgICAgbV9jYXBh
YmlsaXRpZXMgPSBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpjcmVhdGUobV9zdXBw
b3J0ZWRDb25zdHJhaW50cyk7CisgICAgbV9jYXBhYmlsaXRpZXMtPnNldERldmljZUlkKGlkKCkp
OworICAgIG1fY2FwYWJpbGl0aWVzLT5zZXRFY2hvQ2FuY2VsbGF0aW9uKFJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXM6OkVjaG9DYW5jZWxsYXRpb246OlJlYWRXcml0ZSk7CisgICAgbV9j
YXBhYmlsaXRpZXMtPnNldFZvbHVtZShDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDAuMCwgMS4wKSk7
CisKKyAgICByZXR1cm4gbV9jYXBhYmlsaXRpZXM7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5ncyYgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3MoKSBjb25zdAor
eworICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2NzY4YmU3YjYzYTY0ZmViMWRhYjVkNTgyZGU1M2Uw
YWJhMzkzY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEsMTM5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiQ2FwdHVyZURldmljZS5oIgorI2luY2x1ZGUgIlJlYWx0
aW1lTWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Ub29sYm94Lmg+
CisjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCit0eXBlZGVmIHN0cnVjdCBPcGFxdWVDTUNsb2NrKiBDTUNsb2NrUmVmOworCituYW1l
c3BhY2UgV1RGIHsKK2NsYXNzIE1lZGlhVGltZTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q7CitjbGFzcyBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U7CitjbGFzcyBDYXB0dXJlRGV2aWNlSW5mbzsKKworY2xhc3MgQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZSA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKK3B1YmxpYzoKKworICAgIHN0YXRp
YyBSZWZQdHI8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZT4gY3JlYXRlKGNvbnN0IENhcHR1cmVEZXZp
Y2UmLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiwgU3RyaW5nJik7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgQ2FwdHVyZUZhY3RvcnkmIGZhY3RvcnkoKTsKKworICAgIHZvaWQgYWRkRWNo
b0NhbmNlbGxhdGlvblNvdXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmKTsKKyAgICB2b2lkIHJl
bW92ZUVjaG9DYW5jZWxsYXRpb25Tb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJik7CisKKyAg
ICB1c2luZyBNaWNyb3Bob25lRGF0YUNhbGxiYWNrID0gc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0
IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGF1ZGlvRGF0
YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHNpemVfdCBzYW1w
bGVDb3VudCk+OworCisgICAgdWludDY0X3QgYWRkTWljcm9waG9uZURhdGFDb25zdW1lcihNaWNy
b3Bob25lRGF0YUNhbGxiYWNrJiYpOworICAgIHZvaWQgcmVtb3ZlTWljcm9waG9uZURhdGFDb25z
dW1lcih1aW50NjRfdCk7CisKKyAgICBDTUNsb2NrUmVmIHRpbWViYXNlQ2xvY2soKTsKKworcHJp
dmF0ZToKKyAgICBDb3JlQXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IENhcHR1cmVEZXZpY2UmKTsK
KyAgICB2aXJ0dWFsIH5Db3JlQXVkaW9DYXB0dXJlU291cmNlKCk7CisKKyAgICB2b2lkIHN0YXJ0
UHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBmaW5h
bDsKKyAgICBib29sIGlzUHJvZHVjaW5nRGF0YSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faW9V
bml0U3RhcnRlZDsgfQorCisgICAgT1NTdGF0dXMgc3VzcGVuZCgpOworICAgIE9TU3RhdHVzIHJl
c3VtZSgpOworCisgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IGNh
cGFiaWxpdGllcygpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsKKworICAgIE9TU3RhdHVzIHNldHVwQXVk
aW9Vbml0cygpOworICAgIE9TU3RhdHVzIGNvbmZpZ3VyZVNwZWFrZXJQcm9jKCk7CisgICAgT1NT
dGF0dXMgY29uZmlndXJlTWljcm9waG9uZVByb2MoKTsKKyAgICBPU1N0YXR1cyBkZWZhdWx0T3V0
cHV0RGV2aWNlKHVpbnQzMl90Kik7CisgICAgT1NTdGF0dXMgZGVmYXVsdElucHV0RGV2aWNlKHVp
bnQzMl90Kik7CisKKyAgICB2b2lkIGNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1RpbWVTdGFt
cCYsIHVpbnQ2NF90LCBkb3VibGUpOworCisgICAgc3RhdGljIE9TU3RhdHVzIG1pY3JvcGhvbmVD
YWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1Rp
bWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKKyAgICBPU1N0YXR1
cyBwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsK
KworICAgIHN0YXRpYyBPU1N0YXR1cyBzcGVha2VyQ2FsbGJhY2sodm9pZCosIEF1ZGlvVW5pdFJl
bmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQzMiwg
QXVkaW9CdWZmZXJMaXN0Kik7CisgICAgT1NTdGF0dXMgcHJvdmlkZVNwZWFrZXJEYXRhKEF1ZGlv
VW5pdFJlbmRlckFjdGlvbkZsYWdzJiwgY29uc3QgQXVkaW9UaW1lU3RhbXAmLCBVSW50MzIsIFVJ
bnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7CisKKyAgICBzdGF0aWMgZG91YmxlIHByZWZlcnJlZFNh
bXBsZVJhdGUoKTsKKyAgICBzdGF0aWMgZG91YmxlIHByZWZlcnJlZElPQnVmZmVyRHVyYXRpb24o
KTsKKworICAgIEF1ZGlvVW5pdCBtX2lvVW5pdCB7IG51bGxwdHIgfTsKKyAgICBTdHJpbmcgbV9p
b1VuaXROYW1lOworCisgICAgLy8gT25seSByZWFkL21vZGlmaWVkIGZyb20gdGhlIElPIHRocmVh
ZC4KKyAgICBWZWN0b3I8UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+IG1fYWN0aXZlU291cmNl
czsKKworICAgIGVudW0gUXVldWVBY3Rpb24geyBBZGQsIFJlbW92ZSB9OworICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8UXVldWVBY3Rpb24sIFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+Pj4gbV9wZW5k
aW5nU291cmNlczsKKworICAgIHVpbnQzMl90IG1fY2FwdHVyZURldmljZUlEIHsgMCB9OworCisg
ICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fbWljcm9waG9uZVByb2NGb3JtYXQ7CisgICAg
UmVmUHRyPEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyOwor
ICAgIHVpbnQ2NF90IG1fbWljcm9waG9uZVByb2NzQ2FsbGVkIHsgMCB9OworICAgIHVpbnQ2NF90
IG1fbGF0ZXN0TWljVGltZVN0YW1wIHsgMCB9OworCisgICAgSGFzaE1hcDx1aW50NjRfdCwgTWlj
cm9waG9uZURhdGFDYWxsYmFjaz4gbV9taWNyb3Bob25lRGF0YUNhbGxiYWNrczsKKyAgICB1aW50
NjRfdCBtX25leHRNaWNyb3Bob25lRGF0YUNhbGxiYWNrSUQgeyAwIH07CisKKyAgICBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24gbV9zcGVha2VyUHJvY0Zvcm1hdDsKKyAgICBSZWZQdHI8QXVkaW9T
YW1wbGVCdWZmZXJMaXN0PiBtX3NwZWFrZXJTYW1wbGVCdWZmZXI7CisgICAgdWludDY0X3QgbV9z
cGVha2VyUHJvY3NDYWxsZWQgeyAwIH07CisKKyAgICBkb3VibGUgbV9EVFNDb252ZXJzaW9uUmF0
aW8geyAwIH07CisKKyAgICBib29sIG1faW9Vbml0SW5pdGlhbGl6ZWQgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9pb1VuaXRTdGFydGVkIHsgZmFsc2UgfTsKKworICAgIExvY2sgbV9wZW5kaW5nU291
cmNlUXVldWVMb2NrOworICAgIExvY2sgbV9pbnRlcm5hbFN0YXRlTG9jazsKKworICAgIG11dGFi
bGUgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVz
OworICAgIG11dGFibGUgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIG1f
c3VwcG9ydGVkQ29uc3RyYWludHM7CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1f
Y3VycmVudFNldHRpbmdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyTWFjLmNwcAppbmRleCBlZjhhZGMxMjc1NWUxZDIxOGQ1NDUyZWM1ZDA5MjZlZDlmZjM5
MzRjLi4xNTAxOGM5OTk0ZWUwNDg4MzQxNGZkNTY5ODVkOGQxMmQ4NDQ5MjFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlck1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCkBAIC0zMyw5ICszMyw5IEBA
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyTWFjLmgiCiAKLSNpbmNsdWRlICJBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgogI2luY2x1
ZGUgIkFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKICNpbmNsdWRlICJBVlZpZGVvQ2FwdHVyZVNv
dXJjZS5oIgorI2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KQEAgLTYzLDcgKzYzLDcgQEAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ck1hYzo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYygpCiAgICAgbV9zdXBwb3J0ZWRDb25z
dHJhaW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRydWUpOwogICAgIG1fc3VwcG9ydGVkQ29uc3Ry
YWludHMuc2V0U3VwcG9ydHNHcm91cElkKHRydWUpOwogCi0gICAgbV9hdWRpb0ZhY3RvcnkgPSAm
QVZBdWRpb0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkoKTsKKyAgICBtX2F1ZGlvRmFjdG9yeSA9ICZD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCk7CiAgICAgbV92aWRlb0ZhY3RvcnkgPSAm
QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkoKTsKIH0KIApAQCAtMTc0LDcgKzE3NCw3IEBA
IFZlY3RvcjxTdHJpbmc+IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6OmJlc3RTb3VyY2Vz
Rm9yVHlwZUFuZENvbnN0cmFpbnRzKFJlCiAKIFJlYWx0aW1lTWVkaWFTb3VyY2U6OkNhcHR1cmVG
YWN0b3J5KiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjpkZWZhdWx0QXVkaW9GYWN0b3J5
KCkKIHsKLSAgICByZXR1cm4gJkFWQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCk7CisgICAg
cmV0dXJuICZDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCk7CiB9CiAKIFJlYWx0aW1l
TWVkaWFTb3VyY2U6OkNhcHR1cmVGYWN0b3J5KiBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFj
OjpkZWZhdWx0VmlkZW9GYWN0b3J5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCmluZGV4IGI2YWQ3NWU3ODQ1ZjE0MDEwMWZl
NWZjNTc2NGY2YzM3OWU1NjYzMTQuLjRkMWIxYzdhNzNlNTMwMWE0M2QxZTQ3N2JiZTQ4MmZkMTFh
ODMzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5j
ZUtleXNQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJl
bmNlS2V5c1ByaXZhdGUuaApAQCAtMjI0LDYgKzIyNCw3IEBACiAjZGVmaW5lIFdlYktpdEVuYWJs
ZUluaGVyaXRVUklRdWVyeUNvbXBvbmVudFByZWZlcmVuY2VLZXkgQCJXZWJLaXRFbmFibGVJbmhl
cml0VVJJUXVlcnlDb21wb25lbnQiCiAjZGVmaW5lIFdlYktpdE1lZGlhRGF0YUxvYWRzQXV0b21h
dGljYWxseVByZWZlcmVuY2VLZXkgQCJXZWJLaXRNZWRpYURhdGFMb2Fkc0F1dG9tYXRpY2FsbHki
CiAjZGVmaW5lIFdlYktpdE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAi
V2ViS2l0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCIKKyNkZWZpbmUgV2ViS2l0VXNlQVZGb3Vu
ZGF0aW9uQXVkaW9DYXB0dXJlUHJlZmVyZW5jZUtleSBAIldlYktpdFVzZUFWRm91bmRhdGlvbkF1
ZGlvQ2FwdHVyZUVuYWJsZWQiCiAjZGVmaW5lIFdlYktpdEVudW1lcmF0aW5nQWxsTmV0d29ya0lu
dGVyZmFjZXNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdEVudW1lcmF0aW5nQWxsTmV0d29y
a0ludGVyZmFjZXNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdF
bmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQi
CiAjZGVmaW5lIFdlYktpdE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvblByZWZl
cmVuY2VLZXkgQCJXZWJLaXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24iCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQppbmRleCBkNTY4YTY5
NjZiZjJmZWU4YzEzNDczMDMzMzg3NDM5MDc0OTc4NTFmLi5jMWI2MTJhNTc4NDBhZWU5M2EyYzli
ODYxYzY3MTc3ZjI2MDUzNDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJl
ZmVyZW5jZXMubW0KQEAgLTYxOSw2ICs2MTksNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgV2ViS2l0TW9j
a0NhcHR1cmVEZXZpY2VzRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpZRVNdLCBXZWJLaXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5l
Y3Rpb25QcmVmZXJlbmNlS2V5LAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9d
LCBXZWJLaXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVQcmVmZXJlbmNlS2V5LAogI2VuZGlm
CiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBXZWJLaXRTaGFkb3dET01F
bmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllF
U10sIFdlYktpdEN1c3RvbUVsZW1lbnRzRW5hYmxlZFByZWZlcmVuY2VLZXksCkBAIC0yODY2LDYg
KzI4NjcsMTYgQEAgc3RhdGljIE5TU3RyaW5nICpjbGFzc0lCQ3JlYXRvcklEID0gbmlsOwogICAg
IFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6V2ViS2l0TW9ja0NhcHR1cmVEZXZpY2Vz
RW5hYmxlZFByZWZlcmVuY2VLZXldOwogfQogCistIChCT09MKXVzZUFWRm91bmRhdGlvbkF1ZGlv
Q2FwdHVyZQoreworICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdFVzZUFW
Rm91bmRhdGlvbkF1ZGlvQ2FwdHVyZVByZWZlcmVuY2VLZXldOworfQorCistICh2b2lkKXNldFVz
ZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZTooQk9PTClmbGFnCit7CisgICAgW3NlbGYgX3NldEJv
b2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVQcmVm
ZXJlbmNlS2V5XTsKK30KKwogLSAoQk9PTCllbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2Vz
RW5hYmxlZAogewogICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdEVudW1l
cmF0aW5nQWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVkUHJlZmVyZW5jZUtleV07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAppbmRleCBl
ZTk1ZmY4NzkyNzIzMTk0ZmU4MjBjNjNhOWU0ZDdmMTYwOTY5OGNkLi5mODExM2MxYzk5M2Y0ODJj
MzRiZWE0YjJiNjhkMDEwZjFlMjcwNDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKQEAgLTUxMSw2ICs1MTEsOSBAQCBleHRlcm4g
TlNTdHJpbmcgKldlYlByZWZlcmVuY2VzQ2FjaGVNb2RlbENoYW5nZWRJbnRlcm5hbE5vdGlmaWNh
dGlvbjsKIC0gKHZvaWQpc2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOihC
T09MKWZsYWc7CiAtIChCT09MKW1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjsK
IAorLSAodm9pZClzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmU6KEJPT0wpZmxhZzsKKy0g
KEJPT0wpdXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlOworCiAtICh2b2lkKXNldFNoYWRvd0RP
TUVuYWJsZWQ6KEJPT0wpZmxhZzsKIC0gKEJPT0wpc2hhZG93RE9NRW5hYmxlZDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IGNhYTcyMjM5YzVjODg4YWUxNGNhMWQwNDk3
ODEyYjY5OThjNzliZWUuLjVjYmIwNjM2M2ExY2Y3ZjRiN2ZiMDg3YTRiMDU1MWNjOGYwMjM5NDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTI5NjQsNiArMjk2NCw3IEBA
IHN0YXRpYyBib29sIG5lZWRzU2VsZlJldGFpbldoaWxlTG9hZGluZ1F1aXJrKCkKICAgICBzZXR0
aW5ncy5zZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKFtwcmVmZXJlbmNlcyBtb2NrQ2FwdHVy
ZURldmljZXNFbmFibGVkXSk7CiAgICAgc2V0dGluZ3Muc2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNT
ZWN1cmVDb25uZWN0aW9uKFtwcmVmZXJlbmNlcyBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNv
bm5lY3Rpb25dKTsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LnNldE1lZGlhU3RyZWFtRW5hYmxlZChbcHJlZmVyZW5jZXMgbWVkaWFTdHJlYW1FbmFibGVkXSk7
CisgICAgc2V0dGluZ3Muc2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKFtwcmVmZXJlbmNl
cyB1c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVdKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdF
Ql9SVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNE
ZWZpbml0aW9ucy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5p
dGlvbnMuaAppbmRleCA2YzE5ZDU0NDVkZGRiZTY2NWNjZDcyZmM4OGVkYWM3M2Q1ZGM1OGFmLi42
ZWYxN2RhNDE0OWExYmQ4YzYwYzQwY2M5NmU1YTZiMTIyZmE5MGVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgKQEAgLTIzNyw2ICsy
MzcsNyBAQAogICAgIG1hY3JvKEhUVFBFcXVpdkVuYWJsZWQsIGh0dHBFcXVpdkVuYWJsZWQsIEJv
b2wsIGJvb2wsIHRydWUsICIiLCAiIikgXAogICAgIG1hY3JvKE1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWQsIG1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwg
IiIpIFwKICAgICBtYWNybyhNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24sIG1l
ZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbiwgQm9vbCwgYm9vbCwgdHJ1ZSwgIiIs
ICIiKSBcCisgICAgbWFjcm8oVXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlLCB1c2VBVkZvdW5k
YXRpb25BdWRpb0NhcHR1cmUsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwgIiIpIFwKICAgICBtYWNy
byhFbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZCwgZW51bWVyYXRpbmdBbGxO
ZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwgIiIpIFwKICAg
ICBtYWNybyhXZWJSVENMZWdhY3lBUElFbmFibGVkLCB3ZWJSVENMZWdhY3lBUElFbmFibGVkLCBC
b29sLCBib29sLCB0cnVlLCAiIiwgIiIpIFwKICAgICBtYWNybyhJQ0VDYW5kaWRhdGVGaWx0ZXJp
bmdFbmFibGVkLCBpY2VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkLCBCb29sLCBib29sLCB0cnVl
LCAiIiwgIiIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S1ByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZl
cmVuY2VzLmNwcAppbmRleCA5N2VjMTQ5ZTQ3NmI3YmI4YjgzZjAxNmMwNDU2NGMzYmRlYmQxN2Zi
Li4xZDBjMTNiNTM5NTczM2Q1ZGNkMTY2MGE1NjI4ZWMyMmYzMmIzMTdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCkBAIC0xNTkxLDYg
KzE1OTEsMTYgQEAgYm9vbCBXS1ByZWZlcmVuY2VzR2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1
cmVDb25uZWN0aW9uKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmUKICAgICByZXR1cm4gdG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+bWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKCk7CiB9
CiAKK3ZvaWQgV0tQcmVmZXJlbmNlc1NldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCit7CisgICAgdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKGVuYWJsZWQp
OworfQorCitib29sIFdLUHJlZmVyZW5jZXNHZXRVc2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUo
V0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+dXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKCk7Cit9CisKIHZvaWQg
V0tQcmVmZXJlbmNlc1NldEZldGNoQVBJRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmLCBib29sIGZsYWcpCiB7CiAgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RmV0
Y2hBUElFbmFibGVkKGZsYWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaAppbmRleCBjNWNkY2JhNDllYjlmMGYz
MTI0ZThlMjc0MDA4OTc5Y2Q0MTA1NjRmLi44YmI3MWQ5NmYxNTAyMmIyMjFkMzEzZGZiMTZmZGEx
YWZiMzI3NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQ
cmVmZXJlbmNlc1JlZlByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaApAQCAtNDMzLDYgKzQzMywxMCBAQCBXS19FWFBP
UlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0RW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0Vu
YWJsZWQoV0tQcmVmZXJlbgogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldE1lZGlhQ2Fw
dHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihXS1ByZWZlcmVuY2VzUmVmLCBib29sKTsKIFdL
X0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNv
bm5lY3Rpb24oV0tQcmVmZXJlbmNlc1JlZik7CiAKKy8vIERlZmF1bHRzIHRvIGZhbHNlLgorV0tf
RVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZShX
S1ByZWZlcmVuY2VzUmVmLCBib29sKTsKK1dLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRV
c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmUoV0tQcmVmZXJlbmNlc1JlZik7CisgICAgCiAvLyBE
ZWZhdWx0cyB0byBmYWxzZQogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldEZldGNoQVBJ
RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpOwogV0tfRVhQT1JUIGJvb2wgV0tQ
cmVmZXJlbmNlc0dldEZldGNoQVBJRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdl
clByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0
dXJlTWFuYWdlclByb3h5LmNwcAppbmRleCA3MGFmYzdhMjBjYTlhMmY3ODY1NzMxYjhjYjE5YTli
NWMzOTBjNGRhLi5jNmY3YWU5YWM0NjZjZWRlNGM5MmIzYmI4N2Q5NWNiNDg2ZmEyOWIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1VzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgVXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXJQcm94eTo6flVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKQogdm9p
ZCBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjpjcmVhdGVNZWRpYVNvdXJjZUZvckNhcHR1
cmVEZXZpY2VXaXRoQ29uc3RyYWludHModWludDY0X3QgaWQsIGNvbnN0IENhcHR1cmVEZXZpY2Um
IGRldmljZSwgY29uc3QgTWVkaWFDb25zdHJhaW50c0RhdGEmIGNvbnN0cmFpbnRzRGF0YSwgYm9v
bCYgc3VjY2VlZGVkLCBTdHJpbmcmIGludmFsaWRDb25zdHJhaW50cykKIHsKICAgICBhdXRvIGNv
bnN0cmFpbnRzID0gTWVkaWFDb25zdHJhaW50c0ltcGw6OmNyZWF0ZShjb25zdHJhaW50c0RhdGEp
OwotICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBzb3VyY2UgPSBSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5kZWZhdWx0QXVkaW9GYWN0b3J5KCktPmNyZWF0ZU1l
ZGlhU291cmNlRm9yQ2FwdHVyZURldmljZVdpdGhDb25zdHJhaW50cyhkZXZpY2UsIGNvbnN0cmFp
bnRzLnB0cigpLCBpbnZhbGlkQ29uc3RyYWludHMpOworICAgIGF1dG8gc291cmNlID0gUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuYXVkaW9GYWN0b3J5KCktPmNyZWF0ZU1l
ZGlhU291cmNlRm9yQ2FwdHVyZURldmljZVdpdGhDb25zdHJhaW50cyhkZXZpY2UsIGNvbnN0cmFp
bnRzLnB0cigpLCBpbnZhbGlkQ29uc3RyYWludHMpOwogICAgIHN1Y2NlZWRlZCA9ICEhc291cmNl
OwogICAgIAogICAgIGlmIChzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
LmNwcAppbmRleCAyOTRkYmIxOGNhNjgwMDU0NWM1Yjc1MWU5YWExNTc2OWJhODQzODIzLi5jODQx
N2IwYzI5ODI0YmIxMWZhODgxMTQwNjA1NjAwNzA2ZmMzYWUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXJQcm94eS5jcHAKQEAgLTMxLDYgKzMxLDEwIEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZWFsdGltZU1lZGlhU291cmNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdp
bkRhdGEuaD4KIAorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04p
CisjaW5jbHVkZSA8V2ViQ29yZS9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmg+CisjZW5kaWYKKwog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMzI5LDYg
KzMzMywxMSBAQCB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Ojpz
eW5jV2l0aFdlYkNvcmVQcmVmcygpIGNvbnN0CiAgICAgLy8gdGhpcyBpcyBhIG5vb3AgaWYgdGhl
IHByZWZlcmVuY2UgaGFzbid0IGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIHdhcyBj
YWxsZWQuCiAgICAgYm9vbCBtb2NrRGV2aWNlc0VuYWJsZWQgPSBtX3BhZ2UucHJlZmVyZW5jZXMo
KS5tb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKCk7CiAgICAgV2ViQ29yZTo6TW9ja1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXI6OnNldE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxl
ZChtb2NrRGV2aWNlc0VuYWJsZWQpOworCisjaWYgVVNFKEFWRk9VTkRBVElPTikKKyAgICBib29s
IHVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSA9IG1fcGFnZS5wcmVmZXJlbmNlcygpLnVzZUFW
Rm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSgpOworICAgIFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1h
bmFnZXI6OnNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSh1c2VBVkZvdW5kYXRpb25BdWRp
b0NhcHR1cmUpOworI2VuZGlmCiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDQzNWE5ZWExYWNiYTkyMmMwYmJlM2Y3MjYy
YTFjYjA4MTA0OTZiNDAuLjI1OWE5NjI4NDU2OGZmMWYxMzYyMTcxODIzNTExYzE2YmUwZWUxMTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAg
LTMyNDAsNiArMzI0MCw3IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMoY29uc3Qg
V2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAg
ICBzZXR0aW5ncy5zZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1
ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6bW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZEtleSgp
KSk7CiAgICAgc2V0dGluZ3Muc2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9u
KHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6bWVkaWFDYXB0dXJl
UmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uS2V5KCkpKTsKKyAgICBzZXR0aW5ncy5zZXRVc2VBVkZv
dW5kYXRpb25BdWRpb0NhcHR1cmUoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVu
Y2VzS2V5Ojp1c2VBVkZvdW5kYXRpb25BdWRpb0NhcHR1cmVLZXkoKSkpOwogI2VuZGlmCiAKICAg
ICBzZXR0aW5ncy5zZXRTaG91bGRDb252ZXJ0UG9zaXRpb25TdHlsZU9uQ29weShzdG9yZS5nZXRC
b29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnNob3VsZENvbnZlcnRQb3NpdGlvblN0
eWxlT25Db3B5S2V5KCkpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>