<?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>123316</bug_id>
          
          <creation_ts>2013-10-24 21:04:29 -0700</creation_ts>
          <short_desc>[Mac MediaStream] implement AVFoundation backed MediaStreamSource</short_desc>
          <delta_ts>2013-11-14 07:39:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>124288</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>lauro.neto</cc>
    
    <cc>rakuco</cc>
    
    <cc>thiago.lacerda</cc>
    
    <cc>tommyw</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>943429</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-24 21:04:29 -0700</bug_when>
    <thetext>Use AVFoundation media capture API for MediaStreamSource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943992</commentid>
    <comment_count>1</comment_count>
      <attachid>215278</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-27 15:11:54 -0700</bug_when>
    <thetext>Created attachment 215278
Patch for the hungry, hungry bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943994</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-27 15:12:44 -0700</bug_when>
    <thetext>Attachment 215278 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/mediastream/MediaStream-add-remove-tracks-expected.txt&apos;, u&apos;LayoutTests/fast/mediastream/MediaStream-add-remove-tracks.html&apos;, u&apos;LayoutTests/fast/mediastream/MediaStreamConstructor-expected.txt&apos;, u&apos;LayoutTests/fast/mediastream/MediaStreamConstructor.html&apos;, u&apos;LayoutTests/fast/mediastream/MediaStreamTrack-expected.txt&apos;, u&apos;LayoutTests/fast/mediastream/MediaStreamTrack-getSources.html&apos;, u&apos;LayoutTests/fast/mediastream/MediaStreamTrack.html&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaSourceStates.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaSourceStates.h&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaSourceStates.idl&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStream.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamCapabilities.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp&apos;, u&apos;Source/WebCore/Modules/mediastream/MediaStreamTrack.h&apos;, u&apos;Source/WebCore/Modules/mediastream/UserMediaRequest.cpp&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/JSMediaSourceStatesCustom.cpp&apos;, u&apos;Source/WebCore/platform/mediastream/MediaStreamCenter.h&apos;, u&apos;Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp&apos;, u&apos;Source/WebCore/platform/mediastream/MediaStreamSource.cpp&apos;, u&apos;Source/WebCore/platform/mediastream/MediaStreamSource.h&apos;, u&apos;Source/WebCore/platform/mediastream/MediaStreamSourceCapabilities.h&apos;, u&apos;Source/WebCore/platform/mediastream/MediaStreamSourceStates.cpp&apos;, u&apos;Source/WebCore/platform/mediastream/MediaStreamSourceStates.h&apos;, u&apos;Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp&apos;, u&apos;Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h&apos;, u&apos;Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.h&apos;, u&apos;Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm&apos;, u&apos;Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h&apos;, u&apos;Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm&apos;, u&apos;Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h&apos;, u&apos;Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm&apos;, u&apos;Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h&apos;, u&apos;Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm&apos;, u&apos;Source/WebCore/platform/mediastream/mac/MediaStreamCenterMac.cpp&apos;, u&apos;Source/WebCore/platform/mock/MockMediaStreamCenter.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm:150:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm:151:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm:152:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/platform/mediastream/MediaStreamSourceStates.cpp:35:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h:55:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h:60:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h:60:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h:61:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:130:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:145:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:215:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:224:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:225:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:234:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 14 in 39 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943995</commentid>
    <comment_count>3</comment_count>
      <attachid>215278</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-27 15:15:11 -0700</bug_when>
    <thetext>Comment on attachment 215278
Patch for the hungry, hungry bots.

Attachment 215278 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/15218005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943996</commentid>
    <comment_count>4</comment_count>
      <attachid>215278</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-27 15:15:59 -0700</bug_when>
    <thetext>Comment on attachment 215278
Patch for the hungry, hungry bots.

Attachment 215278 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/15218007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944001</commentid>
    <comment_count>5</comment_count>
      <attachid>215280</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-27 15:32:41 -0700</bug_when>
    <thetext>Created attachment 215280
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944012</commentid>
    <comment_count>6</comment_count>
      <attachid>215280</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-27 21:09:07 -0700</bug_when>
    <thetext>Comment on attachment 215280
Updated patch

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

&gt; Source/WebCore/platform/mediastream/MediaStreamSource.cpp:91
&gt; +    if (m_readyState == Ended)
&gt; +        // There are no more consumers of this source&apos;s data, shut it down as appropriate.
&gt; +        // http://www.w3.org/TR/mediacapture-streams/#widl-MediaStreamTrack-stop-void
&gt; +        // If the data is being generated from a live source (e.g., a microphone or camera), then the user
&gt; +        // agent should remove any active &quot;on-air&quot; indicator for that source. If the data is being
&gt; +        // generated from a prerecorded source (e.g. a video file), any remaining content in the file is ignored.
&gt; +        stopProducingData();

It goes agains the idea of the platform layer to embed any HTML level concepts (like this comment) here.

&gt; Source/WebCore/platform/mediastream/MediaStreamSource.cpp:127
&gt; +        for (Vector&lt;Observer*&gt;::iterator i = m_observers.begin(); i != m_observers.end(); ++i) {

This should use auto.

&gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:32
&gt; +#include &quot;Dictionary.h&quot;

#including this is a layering violation.

&gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:33
&gt; +#include &quot;MediaSourceStates.h&quot;

#including this is a layering violation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944164</commentid>
    <comment_count>7</comment_count>
      <attachid>215320</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-28 11:21:37 -0700</bug_when>
    <thetext>Created attachment 215320
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944165</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-28 11:22:41 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 215280 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215280&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamSource.cpp:91
&gt; &gt; +    if (m_readyState == Ended)
&gt; &gt; +        // There are no more consumers of this source&apos;s data, shut it down as appropriate.
&gt; &gt; +        // http://www.w3.org/TR/mediacapture-streams/#widl-MediaStreamTrack-stop-void
&gt; &gt; +        // If the data is being generated from a live source (e.g., a microphone or camera), then the user
&gt; &gt; +        // agent should remove any active &quot;on-air&quot; indicator for that source. If the data is being
&gt; &gt; +        // generated from a prerecorded source (e.g. a video file), any remaining content in the file is ignored.
&gt; &gt; +        stopProducingData();
&gt; 
&gt; It goes agains the idea of the platform layer to embed any HTML level concepts (like this comment) here.
&gt; 

Removed.

&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamSource.cpp:127
&gt; &gt; +        for (Vector&lt;Observer*&gt;::iterator i = m_observers.begin(); i != m_observers.end(); ++i) {
&gt; 
&gt; This should use auto.
&gt; 

Done.

&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:32
&gt; &gt; +#include &quot;Dictionary.h&quot;
&gt; 
&gt; #including this is a layering violation.
&gt; 

And completely unnecessary, removed.

&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:33
&gt; &gt; +#include &quot;MediaSourceStates.h&quot;
&gt; 
&gt; #including this is a layering violation.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944187</commentid>
    <comment_count>9</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-28 12:38:51 -0700</bug_when>
    <thetext>Could not post comments in the code due to permission, so I&apos;m pasting the output here:


I think that would be better to split this patch i 2: one for WebCore stuff and other to deal with AVFoundation implementation

&gt; Source/WebCore/Modules/mediastream/MediaSourceStates.cpp:48
&gt; +    return MediaStreamSourceStates::sourceType(m_sourceStates.sourceType());

Why don&apos;t just return m_sourceStates.sourceType()? Did understand why put it static.

&gt; Source/WebCore/Modules/mediastream/MediaSourceStates.cpp:53
&gt; +    return MediaStreamSourceStates::facingMode(m_sourceStates.facingMode());

Ditto.

&gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:192
&gt;  void MediaStreamTrack::stopProducingData()

I haven&apos;t seen anybody calling this method. Is that still being used?

&gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:199
&gt; +    m_stoppingTrack = true;

Is this really needed?

&gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:200
&gt; +    m_privateTrack-&gt;stop(MediaStreamTrackPrivate::StopTrackAndStopSource);

I think we can&apos;t stop the source here because it can be shared with another track that has not been stopped yet.

&gt; Source/WebCore/platform/mediastream/MediaStreamSource.cpp:153
&gt; +    // This is called from the track.stop() method, which should &quot;Permanently stop the generation of data

This source can be shared, so a track calling stop does not mean that the source should stop as well. I think that only the source can tell if it has to stop or not (by checking if there are any tracks using it, or the backend has told that it has stopped)

&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:74
&gt; +    enum Type { None, Audio, Video };

Does make sense to create a source of no type?

&gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:49
&gt; +    setSource(other-&gt;source());

Calling this here can result in muted and readystate events to be fired on the new track. Is that what we want?

&gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:175
&gt; +    if (stopSource == StopTrackAndStopSource &amp;&amp; m_source)

We can&apos;t stop the source, since it can be shared

&gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:234
&gt; +RefPtr&lt;MediaStreamCapabilities&gt; MediaStreamTrackPrivate::capabilities() const

Layering violation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944190</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-28 13:11:33 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/MediaSourceStates.cpp:48
&gt; &gt; +    return MediaStreamSourceStates::sourceType(m_sourceStates.sourceType());
&gt; 
&gt; Why don&apos;t just return m_sourceStates.sourceType()? Did understand why put it static.
&gt; 

  m_sourceStates.sourceType() returns an Enum, which is a string in JS so MediaSourceStates::sourceType() needs to return the string that represents the enum.

&gt; &gt; Source/WebCore/Modules/mediastream/MediaSourceStates.cpp:53
&gt; &gt; +    return MediaStreamSourceStates::facingMode(m_sourceStates.facingMode());
&gt; 
&gt; Ditto.
&gt; 

  Ditto.

&gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:192
&gt; &gt;  void MediaStreamTrack::stopProducingData()
&gt; 
&gt; I haven&apos;t seen anybody calling this method. Is that still being used?
&gt; 

  Yes, this is called when track.stop() is called from JavaScript (because we use &quot;[ImplementedAs= stopProducingData]&quot; in the IDL file).

&gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:199
&gt; &gt; +    m_stoppingTrack = true;
&gt; 
&gt; Is this really needed?
&gt; 

  Yes. The spec says that the &apos;ended&apos; event should not be fired when track.stop() is called.


&gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:200
&gt; &gt; +    m_privateTrack-&gt;stop(MediaStreamTrackPrivate::StopTrackAndStopSource);
&gt; 
&gt; I think we can&apos;t stop the source here because it can be shared with another track that has not been stopped yet.
&gt; 

  We have to, the spec says the stop() method must 

    Permanently stop the generation of data for track&apos;s source. If 
    the data is being generated from a live source (e.g., a 
    microphone or camera), then the user agent should remove any 
    active &quot;on-air&quot; indicator for that source. If the data is being 
    generated from a prerecorded source (e.g. a video file), any 
    remaining content in the file is ignored.

(http://www.w3.org/TR/mediacapture-streams/#dom-mediastreamtrack-stop)


&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamSource.cpp:153
&gt; &gt; +    // This is called from the track.stop() method, which should &quot;Permanently stop the generation of data
&gt; 
&gt; This source can be shared, so a track calling stop does not mean that the source should stop as well. I think that only the source can tell if it has to stop or not (by checking if there are any tracks using it, or the backend has told that it has stopped)
&gt; 

  That isn&apos;t my interpretation of the spec, but I have sent email to Adam Bergkvist asking for clarification. In the meantime, I have modified MediaStreamTrack.html to verify that WebKit behaves I think it should. 

&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:74
&gt; &gt; +    enum Type { None, Audio, Video };
&gt; 
&gt; Does make sense to create a source of no type?
&gt; 
  MediaStreamTrackPrivate::type has to return something when m_source is NULL.
 

&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:49
&gt; &gt; +    setSource(other-&gt;source());
&gt; 
&gt; Calling this here can result in muted and readystate events to be fired on the new track. Is that what we want?
&gt; 

  Probably not, good catch.

&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:175
&gt; &gt; +    if (stopSource == StopTrackAndStopSource &amp;&amp; m_source)
&gt; 
&gt; We can&apos;t stop the source, since it can be shared
&gt; 
  
  But we have to stop the source, even if it is shared :-)

&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:234
&gt; &gt; +RefPtr&lt;MediaStreamCapabilities&gt; MediaStreamTrackPrivate::capabilities() const
&gt; 
&gt; Layering violation?
&gt;

  Oops!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944192</commentid>
    <comment_count>11</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-28 13:27:36 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/mediastream/MediaSourceStates.cpp:48
&gt; &gt; &gt; +    return MediaStreamSourceStates::sourceType(m_sourceStates.sourceType());
&gt; &gt; 
&gt; &gt; Why don&apos;t just return m_sourceStates.sourceType()? Did understand why put it static.
&gt; &gt; 
&gt; 
&gt;   m_sourceStates.sourceType() returns an Enum, which is a string in JS so MediaSourceStates::sourceType() needs to return the string that represents the enum.

Huum, I see. Why don&apos;t just make this conversion inside MediaSourceState with a method like: toSourceTypeString (or any better name)?
&gt; 
&gt; &gt; &gt; Source/WebCore/Modules/mediastream/MediaSourceStates.cpp:53
&gt; &gt; &gt; +    return MediaStreamSourceStates::facingMode(m_sourceStates.facingMode());
&gt; &gt; 
&gt; &gt; Ditto.
&gt; &gt; 
&gt; 
&gt;   Ditto.
&gt; 
&gt; &gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:192
&gt; &gt; &gt;  void MediaStreamTrack::stopProducingData()
&gt; &gt; 
&gt; &gt; I haven&apos;t seen anybody calling this method. Is that still being used?
&gt; &gt; 
&gt; 
&gt;   Yes, this is called when track.stop() is called from JavaScript (because we use &quot;[ImplementedAs= stopProducingData]&quot; in the IDL file).

OK

&gt; 
&gt; &gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:199
&gt; &gt; &gt; +    m_stoppingTrack = true;
&gt; &gt; 
&gt; &gt; Is this really needed?
&gt; &gt; 
&gt; 
&gt;   Yes. The spec says that the &apos;ended&apos; event should not be fired when track.stop() is called.

But, check this -&gt; http://dev.w3.org/2011/webrtc/editor/getusermedia.html#event-mediastreamtrack-ended

&gt; 
&gt; 
&gt; &gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:200
&gt; &gt; &gt; +    m_privateTrack-&gt;stop(MediaStreamTrackPrivate::StopTrackAndStopSource);
&gt; &gt; 
&gt; &gt; I think we can&apos;t stop the source here because it can be shared with another track that has not been stopped yet.
&gt; &gt; 
&gt; 
&gt;   We have to, the spec says the stop() method must 
&gt; 
&gt;     Permanently stop the generation of data for track&apos;s source. If 
&gt;     the data is being generated from a live source (e.g., a 
&gt;     microphone or camera), then the user agent should remove any 
&gt;     active &quot;on-air&quot; indicator for that source. If the data is being 
&gt;     generated from a prerecorded source (e.g. a video file), any 
&gt;     remaining content in the file is ignored.
&gt; 
&gt; (http://www.w3.org/TR/mediacapture-streams/#dom-mediastreamtrack-stop)
&gt; 

You are right, didn&apos;t notice this on the spec.

&gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamSource.cpp:153
&gt; &gt; &gt; +    // This is called from the track.stop() method, which should &quot;Permanently stop the generation of data
&gt; &gt; 
&gt; &gt; This source can be shared, so a track calling stop does not mean that the source should stop as well. I think that only the source can tell if it has to stop or not (by checking if there are any tracks using it, or the backend has told that it has stopped)
&gt; &gt; 
&gt; 
&gt;   That isn&apos;t my interpretation of the spec, but I have sent email to Adam Bergkvist asking for clarification. In the meantime, I have modified MediaStreamTrack.html to verify that WebKit behaves I think it should. 

As you stated in the previous comment, this is the right behaviour.

&gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:74
&gt; &gt; &gt; +    enum Type { None, Audio, Video };
&gt; &gt; 
&gt; &gt; Does make sense to create a source of no type?
&gt; &gt; 
&gt;   MediaStreamTrackPrivate::type has to return something when m_source is NULL.

fair enough.

&gt; 
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:49
&gt; &gt; &gt; +    setSource(other-&gt;source());
&gt; &gt; 
&gt; &gt; Calling this here can result in muted and readystate events to be fired on the new track. Is that what we want?
&gt; &gt; 
&gt; 
&gt;   Probably not, good catch.
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:175
&gt; &gt; &gt; +    if (stopSource == StopTrackAndStopSource &amp;&amp; m_source)
&gt; &gt; 
&gt; &gt; We can&apos;t stop the source, since it can be shared
&gt; &gt; 
&gt; 
&gt;   But we have to stop the source, even if it is shared :-)

Yes, same as other previous comments :)
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:234
&gt; &gt; &gt; +RefPtr&lt;MediaStreamCapabilities&gt; MediaStreamTrackPrivate::capabilities() const
&gt; &gt; 
&gt; &gt; Layering violation?
&gt; &gt;
&gt; 
&gt;   Oops!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944200</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-28 13:40:38 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/Modules/mediastream/MediaSourceStates.cpp:48
&gt; &gt; &gt; &gt; +    return MediaStreamSourceStates::sourceType(m_sourceStates.sourceType());
&gt; &gt; &gt; 
&gt; &gt; &gt; Why don&apos;t just return m_sourceStates.sourceType()? Did understand why put it static.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt;   m_sourceStates.sourceType() returns an Enum, which is a string in JS so MediaSourceStates::sourceType() needs to return the string that represents the enum.
&gt; 
&gt; Huum, I see. Why don&apos;t just make this conversion inside MediaSourceState with a method like: toSourceTypeString (or any better name)?
&gt;

  I wanted the strings to be in /platform so they can be used by platform code when validating/evaluating constraints. See AVCaptureDeviceManager::validFacingModes for example.

&gt; &gt; &gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:199
&gt; &gt; &gt; &gt; +    m_stoppingTrack = true;
&gt; &gt; &gt; 
&gt; &gt; &gt; Is this really needed?
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt;   Yes. The spec says that the &apos;ended&apos; event should not be fired when track.stop() is called.
&gt; 
&gt; But, check this -&gt; http://dev.w3.org/2011/webrtc/editor/getusermedia.html#event-mediastreamtrack-ended
&gt; 
  
  I asked a spec editor about this over the weekend and he said that section of the spec is incorrect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944202</commentid>
    <comment_count>13</comment_count>
      <attachid>215329</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-28 13:47:46 -0700</bug_when>
    <thetext>Created attachment 215329
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944213</commentid>
    <comment_count>14</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-28 14:15:04 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Created an attachment (id=215329) [details]
&gt; Updated patch

We can get rid of m_stoppingTrack by only assigning the Ended state to m_readyState in MediaStreamTrackPrivate::stop, instead of calling setReadyState</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944490</commentid>
    <comment_count>15</comment_count>
      <attachid>215329</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-10-29 11:26:23 -0700</bug_when>
    <thetext>Comment on attachment 215329
Updated patch

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

r=me, with a few nits.

&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm:323
&gt; +Vector&lt;RefPtr&lt;TrackSourceInfo&gt;&gt; AVCaptureDeviceManager::getSourcesInfo(const String&amp; /*requestOrigin*/)

Why is this commented out?  Can we either uncomment and add a UNUSED_PARAM() or remove it?

&gt; LayoutTests/fast/mediastream/MediaStreamTrack.html:28
&gt; +counter = 0;
&gt; +var t = [];

Weird indentation.

&gt; LayoutTests/fast/mediastream/MediaStreamTrack.html:31
&gt; +t[counter++] = event.target;

Ditto.

&gt; LayoutTests/fast/mediastream/MediaStreamTrack.html:84
&gt; +                    debug(&quot;    &quot; + i + &quot; : &quot; + list[i]);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944514</commentid>
    <comment_count>16</comment_count>
      <attachid>215329</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-29 11:44:04 -0700</bug_when>
    <thetext>Comment on attachment 215329
Updated patch

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

&gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:207
&gt; +    m_stoppingTrack = true;

If you set m_stopped to true in MediaStreamTrackPrivate::stop prior to calling setReadyState you can get rid of this protection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944520</commentid>
    <comment_count>17</comment_count>
      <attachid>215329</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-29 11:47:57 -0700</bug_when>
    <thetext>Comment on attachment 215329
Updated patch

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

&gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:48
&gt; +    m_ignoreMutations = true;

You can also just set the properties (m_enabled, m_muted and m_readyState) by assigning it from the source, instead of calling setSource, which will call  trackReadyStateChanged and trackMutedChanged. By doing this you can also discard the m_ignoreMutations protection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944550</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-29 13:03:36 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 215329 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215329&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:207
&gt; &gt; +    m_stoppingTrack = true;
&gt; 
&gt; If you set m_stopped to true in MediaStreamTrackPrivate::stop prior to calling setReadyState you can get rid of this protection

We could, but the reason we need to do this is to avoid firing an &apos;ended&apos; event when track.stop() is called, and that is spec logic that we must not be aware of in platform (see comment #6).

 (In reply to comment #17)
&gt; (From update of attachment 215329 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215329&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:48
&gt; &gt; +    m_ignoreMutations = true;
&gt; 
&gt; You can also just set the properties (m_enabled, m_muted and m_readyState) by assigning it from the source, instead of calling setSource, which will call  trackReadyStateChanged and trackMutedChanged. By doing this you can also discard the m_ignoreMutations protection

We would have to set m_enabled, m_muted, m_readyState, m_source, and call m_source-&gt;addObserver() . This would mean that we would have the same code in both versions of the constructor and in setSource(). I think having a flag is preferable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944553</commentid>
    <comment_count>19</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-29 13:10:34 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #16)
&gt; &gt; (From update of attachment 215329 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215329&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:207
&gt; &gt; &gt; +    m_stoppingTrack = true;
&gt; &gt; 
&gt; &gt; If you set m_stopped to true in MediaStreamTrackPrivate::stop prior to calling setReadyState you can get rid of this protection
&gt; 
&gt; We could, but the reason we need to do this is to avoid firing an &apos;ended&apos; event when track.stop() is called, and that is spec logic that we must not be aware of in platform (see comment #6).

Doing what I said would prevent that as well. And also the decision of firing the event or not are still being decided in MediaStreamTrack (we are just not telling it that it has ended). Additionally, I think adding this flag can lead to future problems (like if one forget to set it when it was supposed to set).
Just my two cents on that.

&gt; 
&gt;  (In reply to comment #17)
&gt; &gt; (From update of attachment 215329 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215329&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:48
&gt; &gt; &gt; +    m_ignoreMutations = true;
&gt; &gt; 
&gt; &gt; You can also just set the properties (m_enabled, m_muted and m_readyState) by assigning it from the source, instead of calling setSource, which will call  trackReadyStateChanged and trackMutedChanged. By doing this you can also discard the m_ignoreMutations protection
&gt; 
&gt; We would have to set m_enabled, m_muted, m_readyState, m_source, and call m_source-&gt;addObserver() . This would mean that we would have the same code in both versions of the constructor and in setSource(). I think having a flag is preferable.

Maybe you could group those stuff in a method (initilizeFromSource?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944567</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-29 13:33:28 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; (From update of attachment 215329 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215329&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:207
&gt; &gt; &gt; &gt; +    m_stoppingTrack = true;
&gt; &gt; &gt; 
&gt; &gt; &gt; If you set m_stopped to true in MediaStreamTrackPrivate::stop prior to calling setReadyState you can get rid of this protection
&gt; &gt; 
&gt; &gt; We could, but the reason we need to do this is to avoid firing an &apos;ended&apos; event when track.stop() is called, and that is spec logic that we must not be aware of in platform (see comment #6).
&gt; 
&gt; Doing what I said would prevent that as well. And also the decision of firing the event or not are still being decided in MediaStreamTrack (we are just not telling it that it has ended). Additionally, I think adding this flag can lead to future problems (like if one forget to set it when it was supposed to set).
&gt; Just my two cents on that.
&gt; 

  MediaStreamTrack.cpp doesn&apos;t have an m_stopped instance variable. I could add one, but then we would be switching one flag for another :-)

&gt; &gt; 
&gt; &gt;  (In reply to comment #17)
&gt; &gt; &gt; (From update of attachment 215329 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215329&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:48
&gt; &gt; &gt; &gt; +    m_ignoreMutations = true;
&gt; &gt; &gt; 
&gt; &gt; &gt; You can also just set the properties (m_enabled, m_muted and m_readyState) by assigning it from the source, instead of calling setSource, which will call  trackReadyStateChanged and trackMutedChanged. By doing this you can also discard the m_ignoreMutations protection
&gt; &gt; 
&gt; &gt; We would have to set m_enabled, m_muted, m_readyState, m_source, and call m_source-&gt;addObserver() . This would mean that we would have the same code in both versions of the constructor and in setSource(). I think having a flag is preferable.
&gt; 
&gt; Maybe you could group those stuff in a method (initilizeFromSource?)

  And have the same code in initilizeFromSource and setSource?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944574</commentid>
    <comment_count>21</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-29 13:45:29 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (In reply to comment #18)
&gt; &gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; &gt; (From update of attachment 215329 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215329&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp:207
&gt; &gt; &gt; &gt; &gt; +    m_stoppingTrack = true;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; If you set m_stopped to true in MediaStreamTrackPrivate::stop prior to calling setReadyState you can get rid of this protection
&gt; &gt; &gt; 
&gt; &gt; &gt; We could, but the reason we need to do this is to avoid firing an &apos;ended&apos; event when track.stop() is called, and that is spec logic that we must not be aware of in platform (see comment #6).
&gt; &gt; 
&gt; &gt; Doing what I said would prevent that as well. And also the decision of firing the event or not are still being decided in MediaStreamTrack (we are just not telling it that it has ended). Additionally, I think adding this flag can lead to future problems (like if one forget to set it when it was supposed to set).
&gt; &gt; Just my two cents on that.
&gt; &gt; 
&gt; 
&gt;   MediaStreamTrack.cpp doesn&apos;t have an m_stopped instance variable. I could add one, but then we would be switching one flag for another :-)

No no. The workflow would be as follows: MediaStreamTrack::stop -&gt; MediaStreamTrackPrivate::stop, then in MediaStreamTrackPrivate::stop the m_stopped property could be set before calling MediaStreamTrackPrivate::setReadyState and inside MediaStreamTrackPrivate::setReadyState you can add a check (maybe in the same if (!m_client || !m_ignoreMutations)) to early return if track is stopped.
Or, you could just do m_readyState = MediaStreamSource::Ended in MediaStreamTrackPrivate::stop, instead of calling MediaStreamTrackPrivate::setReadyState. :)

&gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt;  (In reply to comment #17)
&gt; &gt; &gt; &gt; (From update of attachment 215329 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215329&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:48
&gt; &gt; &gt; &gt; &gt; +    m_ignoreMutations = true;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; You can also just set the properties (m_enabled, m_muted and m_readyState) by assigning it from the source, instead of calling setSource, which will call  trackReadyStateChanged and trackMutedChanged. By doing this you can also discard the m_ignoreMutations protection
&gt; &gt; &gt; 
&gt; &gt; &gt; We would have to set m_enabled, m_muted, m_readyState, m_source, and call m_source-&gt;addObserver() . This would mean that we would have the same code in both versions of the constructor and in setSource(). I think having a flag is preferable.
&gt; &gt; 
&gt; &gt; Maybe you could group those stuff in a method (initilizeFromSource?)
&gt; 
&gt;   And have the same code in initilizeFromSource and setSource?

No, setSource would still calling setMuted(m_source-&gt;muted()) and    setReadyState(m_source-&gt;readyState()), because it wants to notify WebCore that something has chanaged, this initializeFromSource is something only to be used by a new created MediaStreamTrackPrivate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944579</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-29 13:48:33 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 215329 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215329&amp;action=review
&gt; 
&gt; r=me, with a few nits.
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm:323
&gt; &gt; +Vector&lt;RefPtr&lt;TrackSourceInfo&gt;&gt; AVCaptureDeviceManager::getSourcesInfo(const String&amp; /*requestOrigin*/)
&gt; 
&gt; Why is this commented out?  Can we either uncomment and add a UNUSED_PARAM() or remove it?
&gt; 
  Fixed.

&gt; &gt; LayoutTests/fast/mediastream/MediaStreamTrack.html:28
&gt; &gt; +counter = 0;
&gt; &gt; +var t = [];
&gt; 
&gt; Weird indentation.
&gt; 
&gt; &gt; LayoutTests/fast/mediastream/MediaStreamTrack.html:31
&gt; &gt; +t[counter++] = event.target;
&gt; 
&gt; Ditto.
&gt; 
  Oops, debug code :-O. Removed.

&gt; &gt; LayoutTests/fast/mediastream/MediaStreamTrack.html:84
&gt; &gt; +                    debug(&quot;    &quot; + i + &quot; : &quot; + list[i]);
&gt; 
&gt; Ditto.
&gt;
  Actually this fixes the indentation, that line is in the for(...) loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944581</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-29 13:49:03 -0700</bug_when>
    <thetext>Committed r158220 : https://trac.webkit.org/r158220</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215278</attachid>
            <date>2013-10-27 15:11:54 -0700</date>
            <delta_ts>2013-10-27 15:32:41 -0700</delta_ts>
            <desc>Patch for the hungry, hungry bots.</desc>
            <filename>capture_device_12.txt</filename>
            <type>text/plain</type>
            <size>152868</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODA5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNiBAQAorMjAxMy0xMC0yNyAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjIE1lZGlhU3Ry
ZWFtXSBpbXBsZW1lbnQgQVZGb3VuZGF0aW9uIGJhY2tlZCBNZWRpYVN0cmVhbVNvdXJjZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzE2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBleGlzdGluZyB0ZXN0cyB1cGRhdGVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFk
ZCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHAuCisKKworICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTb3VyY2VTdGF0ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
b3VyY2VTdGF0ZXM6Ok1lZGlhU291cmNlU3RhdGVzKTogbV9Tb3VyY2VTdGF0ZXMgLT4gbV9zb3Vy
Y2VTdGF0ZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVN0YXRlczo6c291cmNlVHlw
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01v
ZGUpOiBEaXR0by4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU291cmNlU3Rh
dGVzLmg6IERpdHRvLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTb3VyY2VT
dGF0ZXMuaWRsOiBNYXJrIHNvbWUgYXR0cmlidXRlcyBhcyBvcHRpb25hbC4KKworICAgICAgICAq
IE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW06OmFkZFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjpy
ZW1vdmVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6YWRkUmVtb3RlU291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtOjpyZW1vdmVSZW1vdGVTb3VyY2Up
OgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNhcGFiaWxpdGll
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNhcGFiaWxpdGllczo6c291cmNl
VHlwZSk6IE1lZGlhU291cmNlU3RhdGVzIC0+IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNhcGFiaWxpdGllczo6ZmFjaW5nTW9kZSk6IERpdHRv
LgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6Ok1lZGlhU3RyZWFtVHJhY2spOiBE
b24ndCBvYnNlcnZlIHNvdXJjZSBjaGFuZ2VzIGRpcmVjdGx5LCBsZXQgdGhlCisgICAgICAgICAg
ICBwcml2YXRlIHRyYWNrIGRvIHRoYXQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRy
YWNrOjp+TWVkaWFTdHJlYW1UcmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
dHJlYW1UcmFjazo6c2V0U291cmNlKTogU2V0IHRyYWNrIGNsaWVudCB0byBudWxsLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6c3RvcHBlZCk6IFBhc3MgdGhyb3VnaCB0byBw
cml2YXRlIHRyYWNrLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6c3RhdGVz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpjYXBhYmlsaXRp
ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OmFwcGx5Q29u
c3RyYWludHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnN0
b3BQcm9kdWNpbmdEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRy
YWNrOjp0cmFja1JlYWR5U3RhdGVDaGFuZ2VkKTogUmVuYW1lZCBmcm9tIHNvdXJjZVN0YXRlQ2hh
bmdlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrTXV0ZWRDaGFu
Z2VkKTogUmVuYW1lcyBmcm9tIHNvdXJjZU11dGVkQ2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrRW5hYmxlZENoYW5nZWQpOiBSZW5hbWVkIGZyb20gc291
cmNlRW5hYmxlZENoYW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpz
dG9wKTogUGFzcyB0aHJvdWdoIHRvIHByaXZhdGUgdHJhY2suCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0
cmVhbVRyYWNrOjpPYnNlcnZlcjo6fk9ic2VydmVyKTogQWRkIHZpcnR1YWwgZGVzdHJ1Y3Rvci4K
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhUmVxdWVzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpVc2VyTWVkaWFSZXF1ZXN0OjpjYWxsU3VjY2Vzc0hhbmRsZXIpOiBT
ZXQgdHJhY2ssIG5vdCBzb3VyY2UsIGNvbnN0cmFpbnRzLgorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgbmV3IGZpbGVzLgorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU01lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKTogUmV0dXJuIGpzVW5kZWZpbmVkIHdo
ZW4gdGhlIGZhY2luZyBtb2RlCisgICAgICAgICAgICBpcyBVbmtub3duLgorCisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuaDogUmVtb3ZlIHVudXNlZCBj
bGFzcyBmb3J3YXJkIGRlZmluZXMgYW5kCisgICAgICAgICAgICB1bmRlZmluZWQgbWV0aG9kIHBy
b3RvdHlwZS4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVz
Y3JpcHRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFk
ZFNvdXJjZSk6IEFTU0VSVCBpZiBzb3VyY2UgaXMga2luZCBOb25lLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpyZW1vdmVTb3VyY2UpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yKToK
KworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpzZXRSZWFkeVN0YXRlKTogQ2Fs
bCBzdGFydFByb2R1Y2luZ0RhdGEgd2hlbiByZWFkeVN0YXRlIGNoYW5nZXMKKyAgICAgICAgICAg
IHRvIExpdmUsIHN0b3BQcm9kdWNpbmdEYXRhIHdoZW4gaXQgY2hhbmdlcyB0byBFbmRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpyZW1vdmVPYnNlcnZlcik6IENhbGwg
c3RvcCgpIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgb2JzZXJ2ZXJzLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnNldEVuYWJsZWQpOiBJZiBwYXNzZWQgZmFsc2UsIGRvIG5v
dGhpbmcgdW5sZXNzIGFsbCBvYnNlcnZlcnMKKyAgICAgICAgICAgIGFyZSBkaXNhYmxlZC4gQ2Fs
bCBzdGFydFByb2R1Y2luZ0RhdGEvc3RvcFByb2R1Y2luZ0RhdGEgd2hlbiBiZWNvbWluZyBlbmFi
bGVkL2Rpc2FibGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnN0b3Ap
OiBEb24ndCBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIG90aGVyIG9ic2VydmVycyBoYXZlCisg
ICAgICAgICAgICBzdG9wcGVkLCB0aGUgc3BlYyBzYXlzIHRoYXQgdHJhY2suc3RvcCgpIHNob3Vs
ZCBwZXJtYW5lbnRseSBzdG9wIHRoZSB0cmFjaydzIHNvdXJjZS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTdHJlYW1Tb3VyY2U6Om5hbWUpOiBNYWtlIHZpcnR1YWwgc28gZGVyaXZlZCBjbGFzc2VzIGNh
biBvdmVycmlkZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpzZXROYW1l
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6cmVhZHlTdGF0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OmVuYWJsZWQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjptdXRlZCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnNldFJlYWRvbmx5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6cmVtb3RlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6c2V0UmVtb3RlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdE
YXRhKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6c3RvcFBy
b2R1Y2luZ0RhdGEpOiBBZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzLmg6IE1vdmUgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0
ZXMgdG8KKyAgICAgICAgICAgIGl0cyBvd24gZmlsZS4KKworICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlU3RhdGVzLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZSk6IE1vdmVkIGhlcmUg
ZnJvbSBNZWRpYVNvdXJjZVN0YXRlcyBzbyB0aGUgCisgICAgICAgICAgICBzdHJpbmdzIGFyZSBh
dmFpbGFibGUgdG8gcGxhdGZvcm0gY29kZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
U291cmNlU3RhdGVzOjpzb3VyY2VUeXBlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuaDogQWRkZWQsIG1vdmVkIGZyb20gTWVk
aWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXMuaC4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUpOiBQYXNzIHByaXZhdGUgdHJhY2sgdG8gY29u
c3RydWN0b3IgYXMgUGFzc1JlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSk6IEluaXRpYWxpemUgbWVtYmVyIHZh
cmlhYmxlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjp+TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUpOiBVbnJlZ2lzdGVyIGFzIHNvdXJjZSBvYnNlcnZlci4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzZXRTb3VyY2UpOiBVbnJl
Z2lzdGVyL3JlZ2lzdGVyIGFzIHNvdXJjZSBvYnNlcnZlci4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzZXRFbmFibGVkKTogRW5hYmxlL2Rpc2FibGUgc291cmNl
LCBjYWxsIGNsaWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
OjpzdG9wKTogTmV3LiBTZXQgcmVhZHlTdGF0ZSB0byBFbmRlZCwgb3B0aW9uYWxseSBzdG9wIHNv
dXJjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzZXRSZWFk
eVN0YXRlKTogSW5saW5lIHRoZSBsb2dpYyBmcm9tIHNob3VsZEZpcmVUcmFja1JlYWR5U3RhdGVD
aGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNvbnN0
cmFpbnRzKTogTmV3LCBwYXNzdGhyb3VnaCB0byB0aGUgc291cmNlLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnN0YXRlcyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnR5cGUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjYXBhYmlsaXRpZXMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjphcHBseUNvbnN0cmFpbnRz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c291
cmNlUmVhZHlTdGF0ZUNoYW5nZWQpOiBSZWFjdCB0byBzb3VyY2UgY2hhbmdlcy4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzb3VyY2VNdXRlZENoYW5nZWQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzb3VyY2VF
bmFibGVkQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU6Om9ic2VydmVySXNFbmFibGVkKTogUmVzcG9uZCB0byBzb3VyY2UgcXVlcnkuCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6b2JzZXJ2ZXJJc1N0b3Bw
ZWQpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZS5oOgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQXVk
aW9DYXB0dXJlU291cmNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbTogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbTog
QWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1
cmVTb3VyY2UuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FW
TWVkaWFDYXB0dXJlU291cmNlLm1tOiBBZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW06IEFkZGVkLgorCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01lZGlhU3RyZWFtQ2VudGVyTWFjLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVyTWFjOjp2YWxpZGF0ZVJlcXVl
c3RDb25zdHJhaW50cyk6IEltcGxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
Q2VudGVyTWFjOjpjcmVhdGVNZWRpYVN0cmVhbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW1DZW50ZXJNYWM6OmdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKTogRGl0dG8u
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tNZWRpYVN0cmVhbUNlbnRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplTW9ja1NvdXJjZXMpOiBVcGRhdGUgZm9yIE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFT
dHJlYW1DZW50ZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKToKKwogMjAxMy0xMC0yNiAgVGltIEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjXSBSZW1vdmUgV2Vi
VGlsZWRMYXllcgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1ODAyNSkKKysr
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04MDYsNiAr
ODA2LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1DYXBhYmlsaXRpZXMuY3BwCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbUV2ZW50LmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1SZWdpc3Ry
eS5jcHAKKyAgICBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlU3RhdGVzLmNw
cAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKICAgICBNb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tFdmVudC5jcHAKICAgICBNb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdC5jcHAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTb3VyY2VTdGF0ZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTb3VyY2VT
dGF0ZXMuY3BwCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU291cmNlU3RhdGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNTkg
KzM5LDE4IEBAIFJlZlB0cjxNZWRpYVNvdXJjZVN0YXRlcz4gTWVkaWFTb3VyY2VTdGEKIH0KIAog
TWVkaWFTb3VyY2VTdGF0ZXM6Ok1lZGlhU291cmNlU3RhdGVzKGNvbnN0IE1lZGlhU3RyZWFtU291
cmNlU3RhdGVzJiBzdGF0ZXMpCi0gICAgOiBtX1NvdXJjZVN0YXRlcyhzdGF0ZXMpCisgICAgOiBt
X3NvdXJjZVN0YXRlcyhzdGF0ZXMpCiB7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFT
b3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlZpZGVvRmFj
aW5nTW9kZSBtb2RlKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IHVzZXJGYWNpbmcoInVzZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBlbnZpcm9ubWVudEZhY2lu
ZygiZW52aXJvbm1lbnQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBsZWZ0RmFjaW5nKCJsZWZ0Iiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gcmlnaHRGYWNpbmcoInJpZ2h0IiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgCi0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2Fz
ZSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VXNlcjoKLSAgICAgICAgcmV0dXJuIHVzZXJGYWNp
bmc7Ci0gICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6RW52aXJvbm1lbnQ6Ci0gICAg
ICAgIHJldHVybiBlbnZpcm9ubWVudEZhY2luZzsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNl
U3RhdGVzOjpMZWZ0OgotICAgICAgICByZXR1cm4gbGVmdEZhY2luZzsKLSAgICBjYXNlIE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzOjpSaWdodDoKLSAgICAgICAgcmV0dXJuIHJpZ2h0RmFjaW5nOwot
ICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBlbXB0eUF0b207
Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTb3VyY2VTdGF0ZXM6OnNvdXJjZVR5cGUo
TWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlNvdXJjZVR5cGUgc291cmNlVHlwZSkKLXsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBub25lKCJub25lIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4gY2FtZXJhKCJjYW1lcmEiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBtaWNyb3Bo
b25lKCJtaWNyb3Bob25lIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0K
LSAgICBzd2l0Y2ggKHNvdXJjZVR5cGUpIHsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlU3Rh
dGVzOjpOb25lOgotICAgICAgICByZXR1cm4gbm9uZTsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291
cmNlU3RhdGVzOjpDYW1lcmE6Ci0gICAgICAgIHJldHVybiBjYW1lcmE7Ci0gICAgY2FzZSBNZWRp
YVN0cmVhbVNvdXJjZVN0YXRlczo6TWljcm9waG9uZToKLSAgICAgICAgcmV0dXJuIG1pY3JvcGhv
bmU7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGVtcHR5
QXRvbTsKLX0KLQogY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVNvdXJjZVN0YXRlczo6c291cmNl
VHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIE1lZGlhU291cmNlU3RhdGVzOjpzb3VyY2VUeXBl
KG1fU291cmNlU3RhdGVzLnNvdXJjZVR5cGUpOworICAgIHJldHVybiBNZWRpYVN0cmVhbVNvdXJj
ZVN0YXRlczo6c291cmNlVHlwZShtX3NvdXJjZVN0YXRlcy5zb3VyY2VUeXBlKCkpOwogfQogCiBj
b25zdCBBdG9taWNTdHJpbmcmIE1lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUobV9Tb3VyY2VTdGF0
ZXMuZmFjaW5nTW9kZSk7CisgICAgcmV0dXJuIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpmYWNp
bmdNb2RlKG1fc291cmNlU3RhdGVzLmZhY2luZ01vZGUoKSk7CiB9CiAKIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTb3VyY2VTdGF0
ZXMuaAkocmV2aXNpb24gMTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyNCArMzksMjEg
QEAgY2xhc3MgTWVkaWFTb3VyY2VTdGF0ZXMgOiBwdWJsaWMgUmVmQ291bgogcHVibGljOgogICAg
IHN0YXRpYyBSZWZQdHI8TWVkaWFTb3VyY2VTdGF0ZXM+IGNyZWF0ZShjb25zdCBNZWRpYVN0cmVh
bVNvdXJjZVN0YXRlcyYpOwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc291cmNl
VHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6U291cmNlVHlwZSk7Ci0gICAgc3RhdGljIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFjaW5nTW9kZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6Vmlk
ZW9GYWNpbmdNb2RlKTsKLSAgICAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNvdXJjZVR5cGUo
KSBjb25zdDsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNvdXJjZUlkKCkgY29uc3QgeyByZXR1
cm4gbV9Tb3VyY2VTdGF0ZXMuc291cmNlSWQ7IH0KLSAgICB1bnNpZ25lZCBsb25nIHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9Tb3VyY2VTdGF0ZXMud2lkdGg7IH0KLSAgICB1bnNpZ25lZCBsb25n
IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fU291cmNlU3RhdGVzLmhlaWdodDsgfQotICAgIGZs
b2F0IGZyYW1lUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fU291cmNlU3RhdGVzLmZyYW1lUmF0ZTsg
fQotICAgIGZsb2F0IGFzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gbV9Tb3VyY2VTdGF0ZXMu
YXNwZWN0UmF0aW87IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNvdXJjZUlkKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VTdGF0ZXMuc291cmNlSWQoKTsgfQorICAgIHVuc2lnbmVkIGxvbmcg
d2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVN0YXRlcy53aWR0aCgpOyB9CisgICAgdW5z
aWduZWQgbG9uZyBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVN0YXRlcy5oZWlnaHQo
KTsgfQorICAgIGZsb2F0IGZyYW1lUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlU3RhdGVz
LmZyYW1lUmF0ZSgpOyB9CisgICAgZmxvYXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZVN0YXRlcy5hc3BlY3RSYXRpbygpOyB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBm
YWNpbmdNb2RlKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbG9uZyB2b2x1bWUoKSBjb25zdCB7IHJl
dHVybiBtX1NvdXJjZVN0YXRlcy52b2x1bWU7IH0KKyAgICB1bnNpZ25lZCBsb25nIHZvbHVtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlU3RhdGVzLnZvbHVtZSgpOyB9CiAgICAgCi0gICAgYm9v
bCBoYXNWaWRlb1NvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fU291cmNlU3RhdGVzLnNvdXJjZVR5
cGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkNhbWVyYTsgfQorICAgIGJvb2wgaGFzVmlk
ZW9Tb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVN0YXRlcy5zb3VyY2VUeXBlKCkgPT0g
TWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkNhbWVyYTsgfQogCiBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IE1lZGlhU291cmNlU3RhdGVzKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzJik7CiAK
LSAgICBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyBtX1NvdXJjZVN0YXRlczsKKyAgICBNZWRpYVN0
cmVhbVNvdXJjZVN0YXRlcyBtX3NvdXJjZVN0YXRlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTb3Vy
Y2VTdGF0ZXMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTb3VyY2VTdGF0ZXMuaWRsCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU291cmNlU3RhdGVzLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDExIEBAIGVudW0gVmlkZW9GYWNpbmdNb2RlRW51bSB7ICJ1
c2VyIiwgImVudmkKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU291cmNlVHlwZUVudW0gc291cmNl
VHlwZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNvdXJjZUlkOwogCi0gICAg
W0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgd2lkdGg7Ci0g
ICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgaGVpZ2h0
OwotICAgIFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBmcmFtZVJhdGU7
Ci0gICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IGFzcGVjdFJhdGlv
OwotICAgIFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSBWaWRlb0ZhY2luZ01vZGVF
bnVtIGZhY2luZ01vZGU7Ci0gICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIGxvbmcgdm9sdW1lOworICAgIFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nPyB3aWR0aDsKKyAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRy
aWJ1dGUgdW5zaWduZWQgbG9uZz8gaGVpZ2h0OworICAgIFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5
IGF0dHJpYnV0ZSBmbG9hdD8gZnJhbWVSYXRlOworICAgIFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5
IGF0dHJpYnV0ZSBmbG9hdD8gYXNwZWN0UmF0aW87CisgICAgW0N1c3RvbUdldHRlcl0gcmVhZG9u
bHkgYXR0cmlidXRlIFZpZGVvRmFjaW5nTW9kZUVudW0/IGZhY2luZ01vZGU7CisgICAgW0N1c3Rv
bUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IHZvbHVtZTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW0uY3BwCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSw5
IEBAIHZvaWQgTWVkaWFTdHJlYW06OmFkZFRyYWNrKFBhc3NSZWZQdHI8TWUKICAgICBjYXNlIE1l
ZGlhU3RyZWFtU291cmNlOjpWaWRlbzoKICAgICAgICAgbV92aWRlb1RyYWNrcy5hcHBlbmQodHJh
Y2spOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpOb25lOgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgdHJhY2stPmFkZE9ic2VydmVyKHRoaXMpOwpAQCAtMjIzLDYgKzIyNiw5IEBAIHZvaWQgTWVk
aWFTdHJlYW06OnJlbW92ZVRyYWNrKFBhc3NSZWZQdHIKICAgICAgICAgaWYgKHBvcyAhPSBub3RG
b3VuZCkKICAgICAgICAgICAgIG1fdmlkZW9UcmFja3MucmVtb3ZlKHBvcyk7CiAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6Ok5vbmU6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAocG9zID09IG5v
dEZvdW5kKQpAQCAtMzE1LDYgKzMyMSw5IEBAIHZvaWQgTWVkaWFTdHJlYW06OmFkZFJlbW90ZVNv
dXJjZShNZWRpYVMKICAgICAgICAgdHJhY2sgPSBWaWRlb1N0cmVhbVRyYWNrOjpjcmVhdGUoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHNv
dXJjZSkpOwogICAgICAgICBtX3ZpZGVvVHJhY2tzLmFwcGVuZCh0cmFjayk7CiAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6Ok5vbmU6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgdHJhY2stPmFkZE9ic2Vy
dmVyKHRoaXMpOwogICAgIG1fZGVzY3JpcHRvci0+YWRkU291cmNlKHNvdXJjZSk7CkBAIC0zMzUs
NiArMzQ0LDkgQEAgdm9pZCBNZWRpYVN0cmVhbTo6cmVtb3ZlUmVtb3RlU291cmNlKE1lZAogICAg
IGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvOgogICAgICAgICB0cmFja3MgPSAmbV92aWRl
b1RyYWNrczsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6Tm9u
ZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIFZlY3RvcjxpbnQ+IHRyYWNrc1RvUmVtb3ZlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNhcGFiaWxpdGllcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNhcGFi
aWxpdGllcy5jcHAJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw3ICs2Myw3IEBAIFZlY3RvcjxTdHJpbmc+IE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOjoK
ICAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKICAgICAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIGNhcGFiaWxpdGllcy5hcHBl
bmQoTWVkaWFTb3VyY2VTdGF0ZXM6OnNvdXJjZVR5cGUoc291cmNlVHlwZXNbaV0pKTsKKyAgICAg
ICAgY2FwYWJpbGl0aWVzLmFwcGVuZChNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6c291cmNlVHlw
ZShzb3VyY2VUeXBlc1tpXSkpOwogICAgIAogICAgIHJldHVybiBjYXBhYmlsaXRpZXM7CiB9CkBA
IC05Nyw3ICs5Nyw3IEBAIFZlY3RvcjxTdHJpbmc+IE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOjoK
ICAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKICAgICAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIGNhcGFiaWxpdGllcy5hcHBl
bmQoTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoZmFjaW5nTW9kZXNbaV0pKTsKKyAgICAg
ICAgY2FwYWJpbGl0aWVzLmFwcGVuZChNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9k
ZShmYWNpbmdNb2Rlc1tpXSkpOwogICAgIAogICAgIHJldHVybiBjYXBhYmlsaXRpZXM7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFjay5jcHAJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiRXZlbnQu
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBs
YWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiTWVkaWFDb25zdHJhaW50c0ltcGwuaCIKICNpbmNsdWRl
ICJNZWRpYVNvdXJjZVN0YXRlcy5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCkBAIC00NCw3
ICs0NSw2IEBACiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiTWVkaWFUcmFja0NvbnN0cmFpbnRzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJVVUlELmgiCiAjaW5jbHVkZSAiVmlkZW9TdHJlYW1UcmFjay5oIgog
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CkBAIC01NiwxMCArNTYsMTEgQEAgTWVkaWFTdHJlYW1UcmFjazo6TWVkaWFTdHJlYW1UcmFj
ayhTY3JpcAogICAgICwgbV9wcml2YXRlVHJhY2socHJpdmF0ZVRyYWNrKQogICAgICwgbV9ldmVu
dERpc3BhdGNoU2NoZWR1bGVkKGZhbHNlKQogeworICAgIEFTU0VSVChtX3ByaXZhdGVUcmFjayk7
CisKICAgICBzdXNwZW5kSWZOZWVkZWQoKTsKIAotICAgIGlmIChtX3ByaXZhdGVUcmFjay0+c291
cmNlKCkpCi0gICAgICAgIG1fcHJpdmF0ZVRyYWNrLT5zb3VyY2UoKS0+YWRkT2JzZXJ2ZXIodGhp
cyk7CisgICAgbV9wcml2YXRlVHJhY2stPnNldENsaWVudCh0aGlzKTsKIH0KIAogTWVkaWFTdHJl
YW1UcmFjazo6TWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0cmVhbVRyYWNrKiBvdGhlcikKQEAgLTY5
LDMxICs3MCwxNiBAQCBNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKE1lZGlhCiAK
ICAgICBtX3ByaXZhdGVUcmFjayA9IG90aGVyLT5wcml2YXRlVHJhY2soKS0+Y2xvbmUoKTsKIAot
ICAgIGlmIChtX3ByaXZhdGVUcmFjay0+c291cmNlKCkpCi0gICAgICAgIG1fcHJpdmF0ZVRyYWNr
LT5zb3VyY2UoKS0+YWRkT2JzZXJ2ZXIodGhpcyk7Ci0KICAgICBtX2V2ZW50RGlzcGF0Y2hTY2hl
ZHVsZWQgPSBmYWxzZTsKIH0KIAogTWVkaWFTdHJlYW1UcmFjazo6fk1lZGlhU3RyZWFtVHJhY2so
KQogeworICAgIG1fcHJpdmF0ZVRyYWNrLT5zZXRDbGllbnQobnVsbHB0cik7CiB9CiAKLWNvbnN0
IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6a2luZCgpIGNvbnN0Cit2b2lkIE1lZGlh
U3RyZWFtVHJhY2s6OnNldFNvdXJjZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBuZXdT
b3VyY2UpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZVRyYWNrLT5raW5kKCk7Ci19Ci0KLXZvaWQg
TWVkaWFTdHJlYW1UcmFjazo6c2V0U291cmNlKE1lZGlhU3RyZWFtU291cmNlKiBuZXdTb3VyY2Up
Ci17Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHRyYWNrU291cmNlID0gc291cmNlKCk7Ci0KLSAg
ICBpZiAodHJhY2tTb3VyY2UpCi0gICAgICAgIHRyYWNrU291cmNlLT5yZW1vdmVPYnNlcnZlcih0
aGlzKTsKLQotICAgIGlmIChuZXdTb3VyY2UpCi0gICAgICAgIG5ld1NvdXJjZS0+YWRkT2JzZXJ2
ZXIodGhpcyk7Ci0KICAgICBtX3ByaXZhdGVUcmFjay0+c2V0U291cmNlKG5ld1NvdXJjZSk7CiB9
CiAKQEAgLTExNyw2ICsxMDMsMTEgQEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzZXRFbmFibGVk
KGJvb2wgZQogICAgIG1fcHJpdmF0ZVRyYWNrLT5zZXRFbmFibGVkKGVuYWJsZWQpOwogfQogCiti
b29sIE1lZGlhU3RyZWFtVHJhY2s6OnN0b3BwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3By
aXZhdGVUcmFjay0+c3RvcHBlZCgpOworfQorCiBib29sIE1lZGlhU3RyZWFtVHJhY2s6Om11dGVk
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wcml2YXRlVHJhY2stPm11dGVkKCk7CkBAIC0xNjcs
MTggKzE1OCwxMiBAQCBSZWZQdHI8TWVkaWFUcmFja0NvbnN0cmFpbnRzPiBNZWRpYVN0cmVhCiAK
IFJlZlB0cjxNZWRpYVNvdXJjZVN0YXRlcz4gTWVkaWFTdHJlYW1UcmFjazo6c3RhdGVzKCkgY29u
c3QKIHsKLSAgICBpZiAoIXNvdXJjZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBNZWRpYVNvdXJjZVN0YXRlczo6Y3JlYXRlKHNvdXJjZSgpLT5zdGF0ZXMoKSk7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZVRyYWNrLT5zdGF0ZXMoKTsKIH0KIAogUmVmUHRyPE1lZGlhU3RyZWFtQ2Fw
YWJpbGl0aWVzPiBNZWRpYVN0cmVhbVRyYWNrOjpjYXBhYmlsaXRpZXMoKSBjb25zdAogewotICAg
IGlmICghc291cmNlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIE1lZGlhU3Ry
ZWFtQ2FwYWJpbGl0aWVzOjpjcmVhdGUoc291cmNlKCktPmNhcGFiaWxpdGllcygpKTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlVHJhY2stPmNhcGFiaWxpdGllcygpOwogfQogCiB2b2lkIE1lZGlhU3Ry
ZWFtVHJhY2s6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgRGljdGlvbmFyeSYgY29uc3RyYWludHMp
CkBAIC0xODYsNiArMTcxLDE0IEBAIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6YXBwbHlDb25zdHJh
aW50cygKICAgICAvLyBGSVhNRTogYXBwbHkgdGhlIG5ldyBjb25zdHJhaW50cyB0byB0aGUgdHJh
Y2sKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI4
CiAgICAgbV9jb25zdHJhaW50cy0+aW5pdGlhbGl6ZShjb25zdHJhaW50cyk7CisKKyAgICBtX3By
aXZhdGVUcmFjay0+YXBwbHlDb25zdHJhaW50cyhtX2NvbnN0cmFpbnRzKTsKK30KKwordm9pZCBN
ZWRpYVN0cmVhbVRyYWNrOjphcHBseUNvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFDb25zdHJh
aW50cz4pCit7CisgICAgLy8gRklYTUU6IGFwcGx5IHRoZSBuZXcgY29uc3RyYWludHMgdG8gdGhl
IHRyYWNrCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MjQyOAogfQogCiBSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gTWVkaWFTdHJlYW1UcmFjazo6Y2xv
bmUoKQpAQCAtMTk4LDExICsxOTEsMTIgQEAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IE1lZGlh
U3RyZWFtVHJhYwogCiB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnN0b3BQcm9kdWNpbmdEYXRhKCkK
IHsKLSAgICBpZiAoc3RvcHBlZCgpIHx8ICFzb3VyY2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9wcml2YXRlVHJhY2stPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkVuZGVk
KTsKLSAgICBtX3ByaXZhdGVUcmFjay0+c3RvcCgpOworICAgIC8vIE5PVEU6IHRoaXMgbWV0aG9k
IGlzIGNhbGxlZCB3aGVuIHRoZSAic3RvcCIgaXMgY2FsbGVkIGZyb20gSlMsIHVzaW5nIHRoZQor
ICAgIC8vICJJbXBsZW1lbnRlZEFzIiBJREwgYXR0cmlidXRlLiBUaGlzIGlzIGRvbmUgYmVjYXVz
ZSBBY3RpdmVET01PYmplY3QgcmVxdWlyZXMKKyAgICAvLyBhICJzdG9wIiBtZXRob2QuCisgICAg
CisgICAgLy8gVGhlIHN0b3AgbWV0aG9kIHNob3VsZCAiUGVybWFuZW50bHkgc3RvcCB0aGUgZ2Vu
ZXJhdGlvbiBvZiBkYXRhIGZvciB0cmFjaydzIHNvdXJjZS4iCisgICAgbV9wcml2YXRlVHJhY2st
PnN0b3AoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OlN0b3BUcmFja0FuZFN0b3BTb3VyY2UpOwog
fQogCiBib29sIE1lZGlhU3RyZWFtVHJhY2s6OmVuZGVkKCkgY29uc3QKQEAgLTIyMiwzMSArMjE2
LDQxIEBAIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6cmVtb3ZlT2JzZXJ2ZXIoTWUKICAgICAgICAg
bV9vYnNlcnZlcnMucmVtb3ZlKHBvcyk7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c291
cmNlU3RhdGVDaGFuZ2VkKCkKK3ZvaWQgTWVkaWFTdHJlYW1UcmFjazo6dHJhY2tSZWFkeVN0YXRl
Q2hhbmdlZCgpCiB7CiAgICAgaWYgKHN0b3BwZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9wcml2YXRlVHJhY2stPnNldFJlYWR5U3RhdGUoc291cmNlKCktPnJlYWR5U3RhdGUoKSk7Cisg
ICAgTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSA9IG1fcHJpdmF0ZVRy
YWNrLT5yZWFkeVN0YXRlKCk7CisgICAgaWYgKHJlYWR5U3RhdGUgPT0gTWVkaWFTdHJlYW1Tb3Vy
Y2U6OkxpdmUpCisgICAgICAgIHNjaGVkdWxlRXZlbnREaXNwYXRjaChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5zdGFydGVkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworICAgIGVsc2UgaWYgKHJl
YWR5U3RhdGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkVuZGVkKQorICAgICAgICBzY2hlZHVsZUV2
ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZW5kZWRFdmVudCwgZmFsc2Us
IGZhbHNlKSk7CisKKyAgICBjb25maWd1cmVUcmFja1JlbmRlcmluZygpOwogfQogICAgIAotdm9p
ZCBNZWRpYVN0cmVhbVRyYWNrOjpzb3VyY2VNdXRlZENoYW5nZWQoKQordm9pZCBNZWRpYVN0cmVh
bVRyYWNrOjp0cmFja011dGVkQ2hhbmdlZCgpCiB7CiAgICAgaWYgKHN0b3BwZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9wcml2YXRlVHJhY2stPnNldE11dGVkKHNvdXJjZSgpLT5tdXRl
ZCgpKTsKKyAgICBpZiAobXV0ZWQoKSkKKyAgICAgICAgc2NoZWR1bGVFdmVudERpc3BhdGNoKEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLm11dGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAg
ZWxzZQorICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkudW5tdXRlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogCiAgICAgY29uZmlndXJlVHJhY2tS
ZW5kZXJpbmcoKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzb3VyY2VFbmFibGVkQ2hh
bmdlZCgpCit2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrRW5hYmxlZENoYW5nZWQoKQogewog
ICAgIGlmIChzdG9wcGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNldEVuYWJsZWQoc291
cmNlKCktPmVuYWJsZWQoKSk7Ci0gICAgLy8gbWVkaWEgZnJvbSB0aGUgc291cmNlIG9ubHkgZmxv
d3Mgd2hlbiBhIE1lZGlhU3RyZWFtVHJhY2sgb2JqZWN0IGlzIGJvdGggdW5tdXRlZCBhbmQgZW5h
YmxlZAorCisgICAgLy8gTWVkaWEgZnJvbSB0aGUgc291cmNlIG9ubHkgZmxvd3Mgd2hlbiBhIE1l
ZGlhU3RyZWFtVHJhY2sgb2JqZWN0IGlzIGJvdGggdW5tdXRlZCBhbmQgZW5hYmxlZC4KICAgICBj
b25maWd1cmVUcmFja1JlbmRlcmluZygpOwogfQogCkBAIC0yNTksMTEgKzI2Myw2IEBAIHZvaWQg
TWVkaWFTdHJlYW1UcmFjazo6Y29uZmlndXJlVHJhY2tSZW4KICAgICAvLyAuLi4gbWVkaWEgZnJv
bSB0aGUgc291cmNlIG9ubHkgZmxvd3Mgd2hlbiBhIE1lZGlhU3RyZWFtVHJhY2sgb2JqZWN0IGlz
IGJvdGggdW5tdXRlZCBhbmQgZW5hYmxlZAogfQogCi1ib29sIE1lZGlhU3RyZWFtVHJhY2s6OnN0
b3BwZWQoKQotewotICAgIHJldHVybiBtX3ByaXZhdGVUcmFjay0+c3RvcHBlZCgpOwotfQotCiB2
b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrRGlkRW5kKCkKIHsKICAgICBtX3ByaXZhdGVUcmFj
ay0+c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpOwpAQCAtMjc0LDcgKzI3
Myw3IEBAIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6dHJhY2tEaWRFbmQoKQogCiB2b2lkIE1lZGlh
U3RyZWFtVHJhY2s6OnN0b3AoKQogewotICAgIHN0b3BQcm9kdWNpbmdEYXRhKCk7CisgICAgbV9w
cml2YXRlVHJhY2stPnN0b3AoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OlN0b3BUcmFja09ubHkp
OwogfQogCiB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnNjaGVkdWxlRXZlbnREaXNwYXRjaChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKQEAgLTMwNywyMiArMzA2LDYgQEAgdm9pZCBNZWRpYVN0cmVh
bVRyYWNrOjpkaXNwYXRjaFF1ZXVlZEV2ZQogICAgIGV2ZW50cy5jbGVhcigpOwogfQogCi12b2lk
IE1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQoKQotewotICAgIGlmICht
X3ByaXZhdGVUcmFjay0+cmVhZHlTdGF0ZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpMaXZlKQot
ICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
c3RhcnRlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLSAgICBlbHNlIGlmIChtX3ByaXZhdGVUcmFj
ay0+cmVhZHlTdGF0ZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCkKLSAgICAgICAgc2No
ZWR1bGVFdmVudERpc3BhdGNoKEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVuZGVkRXZlbnQs
IGZhbHNlLCBmYWxzZSkpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrTXV0ZWRD
aGFuZ2VkKCkKLXsKLSAgICBpZiAobXV0ZWQoKSkKLSAgICAgICAgc2NoZWR1bGVFdmVudERpc3Bh
dGNoKEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLm11dGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7
Ci0gICAgZWxzZQotICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkudW5tdXRlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRy
YWNrLmgJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTEg
QEAgY2xhc3MgTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNDYWxsYmFjazsKIGNsYXNzIE1lZGlhU3Ry
ZWFtQ2FwYWJpbGl0aWVzOwogY2xhc3MgTWVkaWFUcmFja0NvbnN0cmFpbnRzOwogCi1jbGFzcyBN
ZWRpYVN0cmVhbVRyYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFTdHJlYW1UcmFjaz4sIHB1
YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBFdmVu
dFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgTWVkaWFTdHJlYW1Tb3VyY2U6Ok9ic2VydmVy
LCBwdWJsaWMgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVDbGllbnQgeworY2xhc3MgTWVkaWFTdHJl
YW1UcmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtVHJhY2s+LCBwdWJsaWMgU2Ny
aXB0V3JhcHBhYmxlLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXRX
aXRoSW5saW5lRGF0YSwgcHVibGljIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50IHsKIHB1
YmxpYzoKICAgICBjbGFzcyBPYnNlcnZlciB7CiAgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFs
IH5PYnNlcnZlcigpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgdHJhY2tEaWRFbmQoKSA9IDA7
CiAgICAgfTsKIApAQCAtNjcsNiArNjgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtdXRlZCgpIGNv
bnN0OwogICAgIGJvb2wgcmVhZG9ubHkoKSBjb25zdDsKICAgICBib29sIHJlbW90ZSgpIGNvbnN0
OworICAgIGJvb2wgc3RvcHBlZCgpIGNvbnN0OwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBy
ZWFkeVN0YXRlKCkgY29uc3Q7CiAKQEAgLTc2LDYgKzc4LDcgQEAgcHVibGljOgogICAgIFJlZlB0
cjxNZWRpYVNvdXJjZVN0YXRlcz4gc3RhdGVzKCkgY29uc3Q7CiAgICAgUmVmUHRyPE1lZGlhU3Ry
ZWFtQ2FwYWJpbGl0aWVzPiBjYXBhYmlsaXRpZXMoKSBjb25zdDsKICAgICB2b2lkIGFwcGx5Q29u
c3RyYWludHMoY29uc3QgRGljdGlvbmFyeSYpOworICAgIHZvaWQgYXBwbHlDb25zdHJhaW50cyhQ
YXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KTsKIAogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRy
YWNrPiBjbG9uZSgpOwogICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKTsKQEAgLTg3LDcgKzkw
LDcgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIob3ZlcmNv
bnN0cmFpbmVkKTsKIAogICAgIE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3ByaXZhdGVUcmFjay0+c291cmNlKCk7IH0KLSAgICB2b2lkIHNldFNvdXJjZShNZWRp
YVN0cmVhbVNvdXJjZSopOworICAgIHZvaWQgc2V0U291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1Tb3VyY2U+KTsKIAogICAgIGJvb2wgZW5kZWQoKSBjb25zdDsKIApAQCAtOTUsMTAgKzk4LDYg
QEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKICAgICBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZSogcHJpdmF0ZVRyYWNrKCkgY29uc3QgeyByZXR1cm4gbV9wcml2
YXRlVHJhY2suZ2V0KCk7IH0KIAotICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50
Ci0gICAgdm9pZCB0cmFja1JlYWR5U3RhdGVDaGFuZ2VkKCk7Ci0gICAgdm9pZCB0cmFja011dGVk
Q2hhbmdlZCgpOwotCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0
SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyBy
ZXR1cm4gTWVkaWFTdHJlYW1UcmFja0V2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQogICAgIHZp
cnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOyB9CkBAIC0xMjQsMTEgKzEyMywxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIEZJTkFMIHsgcmVmKCk7IH0KICAgICB2
aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIEZJTkFMIHsgZGVyZWYoKTsg
fQogCi0gICAgLy8gTWVkaWFTdHJlYW1Tb3VyY2VPYnNlcnZlcgotICAgIHZpcnR1YWwgdm9pZCBz
b3VyY2VTdGF0ZUNoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKLSAgICB2aXJ0dWFsIHZvaWQgc291
cmNlTXV0ZWRDaGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIHNvdXJj
ZUVuYWJsZWRDaGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCBib29sIHN0b3Bw
ZWQoKSBPVkVSUklERSBGSU5BTDsKKyAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUNsaWVu
dAorICAgIHZvaWQgdHJhY2tSZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIHZvaWQgdHJhY2tNdXRl
ZENoYW5nZWQoKTsKKyAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoKTsKIAogICAgIFZlY3Rv
cjxSZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEV2ZW50czsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJlcXVlc3QuY3Bw
CShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1VzZXJNZWRpYVJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsMTEgKzE2NywxMSBA
QCB2b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OmNhbGxTdWNjZXNzSGFuZGxlCiAKICAgICBNZWRpYVN0
cmVhbVRyYWNrVmVjdG9yIHRyYWNrcyA9IHN0cmVhbS0+Z2V0QXVkaW9UcmFja3MoKTsKICAgICBm
b3IgKE1lZGlhU3RyZWFtVHJhY2tWZWN0b3I6Oml0ZXJhdG9yIGl0ZXIgPSB0cmFja3MuYmVnaW4o
KTsgaXRlciAhPSB0cmFja3MuZW5kKCk7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+c291cmNl
KCktPnNldENvbnN0cmFpbnRzKG1fYXVkaW9Db25zdHJhaW50cyk7CisgICAgICAgICgqaXRlcikt
PmFwcGx5Q29uc3RyYWludHMobV9hdWRpb0NvbnN0cmFpbnRzKTsKIAogICAgIHRyYWNrcyA9IHN0
cmVhbS0+Z2V0VmlkZW9UcmFja3MoKTsKICAgICBmb3IgKE1lZGlhU3RyZWFtVHJhY2tWZWN0b3I6
Oml0ZXJhdG9yIGl0ZXIgPSB0cmFja3MuYmVnaW4oKTsgaXRlciAhPSB0cmFja3MuZW5kKCk7ICsr
aXRlcikKLSAgICAgICAgKCppdGVyKS0+c291cmNlKCktPnNldENvbnN0cmFpbnRzKG1fdmlkZW9D
b25zdHJhaW50cyk7CisgICAgICAgICgqaXRlciktPmFwcGx5Q29uc3RyYWludHMobV92aWRlb0Nv
bnN0cmFpbnRzKTsKIAogICAgIG1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudChzdHJlYW0u
Z2V0KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4
NCwxNiBAQAogCQkwNzAzMzRENzE0NTlGRkQ1MDA4RDhENDUgLyogVHJhY2tCYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAzMzRENjE0NTlGRkQ1
MDA4RDhENDUgLyogVHJhY2tCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMDcwMzM0RDkxNDVBMDA2RjAwOEQ4RDQ1IC8qIFRyYWNrQmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAzMzRE
ODE0NUEwMDZGMDA4RDhENDUgLyogVHJhY2tCYXNlLmNwcCAqLzsgfTsKIAkJMDcwMzM0RTkxNDVB
MUYzNjAwOEQ4RDQ1IC8qIEpTVHJhY2tDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzM0RTgxNDVBMUYzNTAwOEQ4RDQ1IC8qIEpTVHJh
Y2tDdXN0b20uY3BwICovOyB9OworCQkwNzAzNjNENjE4MUExNDY1MDBDMDc0QTUgLyogTWVkaWFT
dHJlYW1Tb3VyY2VTdGF0ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDcwMzYzRDQxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFtU291cmNl
U3RhdGVzLmNwcCAqLzsgfTsKKwkJMDcwMzYzRDcxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3Ry
ZWFtU291cmNlU3RhdGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwNzAzNjNENTE4MUExNDY1MDBDMDc0QTUgLyogTWVkaWFTdHJlYW1Tb3VyY2VTdGF0
ZXMuaCAqLzsgfTsKKwkJMDcwMzYzRTAxODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJl
U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
NzAzNjNEODE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLzsgfTsK
KwkJMDcwMzYzRTExODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzRDkxODFB
MUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tICovOyB9OworCQkwNzAzNjNF
MjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREExODFBMUNEQzAwQzA3
NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLzsgfTsKKwkJMDcwMzYzRTMxODFBMUNE
QzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAzNjNEQjE4MUExQ0RDMDBDMDc0QTUgLyog
QVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSAqLzsgfTsKKwkJMDcwMzYzRTQxODFBMUNEQzAwQzA3
NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAzNjNEQzE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNh
cHR1cmVTb3VyY2UuaCAqLzsgfTsKKwkJMDcwMzYzRTUxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVk
aWFDYXB0dXJlU291cmNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDcwMzYzREQxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNl
Lm1tICovOyB9OworCQkwNzAzNjNFNjE4MUExQ0RDMDBDMDc0QTUgLyogQVZWaWRlb0NhcHR1cmVT
b3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
MDM2M0RFMTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oICovOyB9Owor
CQkwNzAzNjNFNzE4MUExQ0RDMDBDMDc0QTUgLyogQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAzNjNERjE4MUEx
Q0RDMDBDMDc0QTUgLyogQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0gKi87IH07CiAJCTA3MDU4NEZE
MTdGOUQ2REYwMDVGMkJDQiAvKiBNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwNTg0RkIxN0Y5RDZE
RjAwNUYyQkNCIC8qIE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDcwNTg0RkYxN0Y5RjA1RTAw
NUYyQkNCIC8qIENhcGFiaWxpdHlSYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwNzA1ODRGRTE3RjlGMDVFMDA1RjJCQ0IgLyogQ2FwYWJpbGl0
eVJhbmdlLmNwcCAqLzsgfTsKIAkJMDcwNTg1MDIxN0ZBMTBEMDAwNUYyQkNCIC8qIEpTQWxsVmlk
ZW9DYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDcwNTg1MDAxN0ZBMTBEMDAwNUYyQkNCIC8qIEpTQWxsVmlkZW9DYXBhYmlsaXRp
ZXMuY3BwICovOyB9OwpAQCAtMzEzLDYgKzMyMyw4IEBACiAJCTA3REM1RkQ0MTdEM0VFRTkwMDk5
Rjg5MCAvKiBKU1JUQ1N0YXRzUmVzcG9uc2VDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdEQzVGRDMxN0QzRUVFOTAwOTlGODkwIC8qIEpT
UlRDU3RhdHNSZXNwb25zZUN1c3RvbS5jcHAgKi87IH07CiAJCTA3RTExNkIxMTQ4OUM5QTEwMEVD
NUFDRSAvKiBKU1RleHRUcmFja0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwN0UxMTZCMDE0ODlDOUExMDBFQzVBQ0UgLyogSlNUZXh0VHJh
Y2tDdXN0b20uY3BwICovOyB9OwogCQkwN0UxMTcwNzE0ODlFQkVCMDBFQzVBQ0UgLyogSlNUZXh0
VHJhY2tDdWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDdFMTE3MDYxNDg5RUJFQjAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VlQ3VzdG9t
LmNwcCAqLzsgfTsKKwkJMDdGRkRFNjgxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3RkZERTY2MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5j
cHAgKi87IH07CisJCTA3RkZERTY5MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDdGRkRFNjcxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggKi87
IH07CiAJCTA4MDZFNTdBMTI4OTMwNDUwMDdDRUQzMiAvKiBTVkdNYXRyaXguaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MDZFNTc5MTI4OTMwNDUwMDdD
RUQzMiAvKiBTVkdNYXRyaXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwODBFNDkyNjEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVu
Z2luZUJhc2VsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODBFNDkyMjEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZUJhc2Vs
aW5lLmggKi87IH07CiAJCTA4MEU0OTI4MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDgwRTQ5MjQxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFj
aW5nLmggKi87IH07CkBAIC02NDgxLDYgKzY0OTMsMTYgQEAKIAkJMDcwMzM0RDYxNDU5RkZENTAw
OEQ4RDQ1IC8qIFRyYWNrQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
cmFja0Jhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwMzM0RDgxNDVBMDA2
RjAwOEQ4RDQ1IC8qIFRyYWNrQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUcmFja0Jhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzAz
MzRFODE0NUExRjM1MDA4RDhENDUgLyogSlNUcmFja0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1RyYWNrQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMDcwMzYzRDQxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFtU291
cmNlU3RhdGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcw
MzYzRDUxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDM2M0Q4MTgxQTFDREMwMEMwNzRBNSAvKiBB
VkF1ZGlvQ2FwdHVyZVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
VkF1ZGlvQ2FwdHVyZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzAz
NjNEOTE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwMzYzREExODFBMUNEQzAwQzA3NEE1IC8q
IEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwNzAzNjNEQjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFWQ2FwdHVyZURldmljZU1h
bmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDM2M0RDMTgxQTFDREMw
MEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwNzAzNjNERDE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2Uu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBVk1lZGlhQ2FwdHVy
ZVNvdXJjZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwMzYzREUxODFBMUNE
QzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFWVmlkZW9DYXB0dXJlU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTA3MDM2M0RGMTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJj
ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFWVmlkZW9DYXB0
dXJlU291cmNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzA1ODRGQjE3RjlE
NkRGMDA1RjJCQ0IgLyogTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwNTg0RkUxN0Y5RjA1RTAwNUYyQkNCIC8q
IENhcGFiaWxpdHlSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDYXBhYmlsaXR5UmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzA1
ODUwMDE3RkExMEQwMDA1RjJCQ0IgLyogSlNBbGxWaWRlb0NhcGFiaWxpdGllcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FsbFZpZGVvQ2FwYWJpbGl0aWVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY3NTAsNiArNjc3Miw4IEBACiAJCTA3
REM1RkQzMTdEM0VFRTkwMDk5Rjg5MCAvKiBKU1JUQ1N0YXRzUmVzcG9uc2VDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNSVENTdGF0c1Jlc3BvbnNlQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdFMTE2QjAxNDg5QzlBMTAw
RUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTVGV4dFRyYWNrQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDdFMTE3MDYxNDg5RUJFQjAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VlQ3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVGV4dFRyYWNrQ3Vl
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDdGRkRFNjYxODFBRUQ0
MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDdGRkRFNjcxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4
MDZFNTc5MTI4OTMwNDUwMDdDRUQzMiAvKiBTVkdNYXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1ZHTWF0cml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA4MEU0OTIxMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVGV4dExheW91dEVu
Z2luZUJhc2VsaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgwRTQ5MjIx
MjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNDY0LDYgKzEzNDg4LDEwIEBACiAJCTA3
MjIxQjkyMTdDRjBBRDQwMDg0OEU1MSAvKiBtZWRpYXN0cmVhbSAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMDdGRkRFNjYxODFBRUQ0MjAwNzJENDA5IC8q
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCAqLywKKwkJCQkwN0ZGREU2NzE4MUFFRDQyMDA3
MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCAqLywKKwkJCQkwNzAzNjNENDE4MUEx
NDY1MDBDMDc0QTUgLyogTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuY3BwICovLAorCQkJCTA3MDM2
M0Q1MTgxQTE0NjUwMEMwNzRBNSAvKiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oICovLAogCQkJ
CTA3MjlCMTREMTdDRkNDQTAwMDRGMUQ2MCAvKiBtYWMgKi8sCiAJCQkJMDcyMjFCOTkxN0NGMEFE
NDAwODQ4RTUxIC8qIE1lZGlhQ29uc3RyYWludHMuaCAqLywKIAkJCQkwNzIyMUI5QTE3Q0YwQUQ0
MDA4NDhFNTEgLyogTWVkaWFTdHJlYW1DZW50ZXIuY3BwICovLApAQCAtMTM0OTksNiArMTM1Mjcs
MTQgQEAKIAkJMDcyOUIxNEQxN0NGQ0NBMDAwNEYxRDYwIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMDcwMzYzRDgxODFBMUNEQzAwQzA3NEE1
IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLmggKi8sCisJCQkJMDcwMzYzRDkxODFBMUNEQzAwQzA3
NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tICovLAorCQkJCTA3MDM2M0RBMTgxQTFDREMw
MEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi8sCisJCQkJMDcwMzYzREIxODFB
MUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIubW0gKi8sCisJCQkJMDcwMzYz
REMxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLmggKi8sCisJCQkJMDcw
MzYzREQxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tICovLAorCQkJ
CTA3MDM2M0RFMTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oICovLAor
CQkJCTA3MDM2M0RGMTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbSAq
LywKIAkJCQkwNzI5QjE0RTE3Q0ZDQ0EwMDA0RjFENjAgLyogTWVkaWFTdHJlYW1DZW50ZXJNYWMu
Y3BwICovLAogCQkJCTA3MjlCMTRGMTdDRkNDQTAwMDRGMUQ2MCAvKiBNZWRpYVN0cmVhbUNlbnRl
ck1hYy5oICovLAogCQkJKTsKQEAgLTIyMzM4LDYgKzIyMzc0LDcgQEAKIAkJCQk4NUU3MTFEOTBB
QzVENTM1MDA1MzI3MEYgLyogRE9NVGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
ODg2MDRCNDBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTA1RkQ2OUUwMTI4NDVENDMwMEIyQkVCMyAvKiBET01UaW1lU3RhbXAuaCBpbiBIZWFkZXJzICov
LAorCQkJCTA3RkZERTY5MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzZGQzJCMEMxMjM3MERBMDAwNkE5OTFBIC8qIERPTVRv
a2VuTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE0NTM0OTcxNkE5QkI2QTAwMEY2RkQyIC8q
IERPTVRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE0NTM0OTkxNkE5QkI2
QTAwMEY2RkQyIC8qIERPTVRyYW5zaXRpb25FdmVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywK
QEAgLTIyNDI2LDYgKzIyNDYzLDcgQEAKIAkJCQlBOEVBN0VDMDBBMTk0NUQwMDBBOEVGNUYgLyog
RW50aXR5UmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjA5MzEyQjAyNkY3MDBD
MUEzNTkgLyogRXF1YWxQb3dlclBhbm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVDRjdBRTIx
MDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3MDM2
M0U0MTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODUwMzFCNDIwQTQ0RUZDNzAwRjk5MkUwIC8qIEV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MTM4RDMzNTEyNDQwNTQ4MDAzMjNEMzMgLyogRXZlbnRDb250ZXh0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDREFCNkQyOTE3QzdERTZDMDBDNjBCMzQgLyogTWVkaWFDb250cm9sc0hv
c3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjMzMjgsNiArMjMzNjYsNyBAQAogCQkJCUIyRkEzRTA3
MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyRkEzRTA5MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RpdGxlRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNFMEIwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZH
VHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzAzNjNENzE4MUExNDY1MDBDMDc0QTUg
LyogTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzRTBE
MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RyYW5zZm9ybUxpc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA3Mjc3RTRGMTdEMDE4Q0MwMDE1NTM0RCAvKiBKU01lZGlhU3RyZWFtQXVkaW9EZXN0aW5h
dGlvbk5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzRTBGMEFCNzVBNkYwMDBFNUFDNCAv
KiBKU1NWR1RSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzNjQ1LDYgKzIzNjg0LDcg
QEAKIAkJCQlCMjIyNzk3MTBEMDBCRjIyMDA3MUI3ODIgLyogUGF0dGVybkF0dHJpYnV0ZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyNzUzNTY1MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVu
dEltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4QTdDQzk2QjEyMDc2RDczMDAxRDQ1ODggLyog
UGVuZGluZ1NjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDcwMzYzRTYxODFBMUNEQzAwQzA3
NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4QTg0NEQw
NTExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3
OTY5REIwMTdEMTQxNTEwMDdGRjg0MiAvKiBKU1JUQ0RUTUZTZW5kZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2QkUzNDAxMTUwNThDQjIwMENFMEZEOCAvKiBQZXJmb3JtYW5jZUVudHJ5LmggaW4g
SGVhZGVycyAqLywKQEAgLTI0NTAyLDYgKzI0NTQyLDcgQEAKIAkJCQk0OUU5MTFEMjBFRjg2RDQ3
MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NTRGRTczNzBBMjI5N0JFMDA1OEQ3QUQgLyogVHJhdmVyc2FsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzN0ZENDI5ODExODM2ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTA3MDM2M0UwMTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1ZGlvQ2FwdHVy
ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRENjRCNUQxMzRBNUI2QjAwRTU4RkRBIC8q
IFRyZWVTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFENzE5RDExODExMDZFMDAwMTZEQzUx
IC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3RTFGRjAxNEFB
Q0I2RTAwNUI3Q0I2IC8qIFRyZWVTY29wZUFkb3B0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ1
OTAsNiArMjQ2MzEsNyBAQAogCQkJCUEwRUUwREY2MTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJHTERl
YnVnUmVuZGVyZXJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMEVFMERGODE0NEY4MjU1MDBG
ODBCMEQgLyogV2ViR0xEZWJ1Z1NoYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFM0ZBRThG
MTQ3MzNGREIwMEU0MjMwNyAvKiBXZWJHTERlcHRoVGV4dHVyZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMDcwMzYzRTIxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTZFQkYwRTU1MTJBODkyOTgwMERCMTcwOSAvKiBXZWJHTEV4dGVu
c2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5Q0YxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNDdFNjYxMTBCNzk0NEIwMEIx
ODZDOCAvKiBXZWJHTEdldEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMjYxMjYsNiArMjYxNjgs
NyBAQAogCQkJCTE0Q0Y3QjMzMDlGNkVDRDcwMEVCMzY2NSAvKiBKU0NTU1J1bGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM0NkMxRUUwQzBEREJERjAwMjBDRkMzIC8qIEpTQ1NTUnVsZUN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEQwNUZBNzBBMjNCMzAxMDA1RTcyMDMgLyogSlND
U1NSdWxlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzAzNjNFNTE4MUExQ0RDMDBDMDc0
QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzkyMjYy
RjEwMzIxMDg0MDA2RTdENUQgLyogSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDIwMTFCNjBBMDAzMTMzMDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTgyNUYzMEMwQjg5MzgwMDUzRjFCNSAvKiBKU0NT
U1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjUyNiw2ICsy
NjU2OSw3IEBACiAJCQkJQjJGQTNEOTgwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHRm9yZWlnbk9i
amVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNEOUEwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHR0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3QjI4MjcwQ0VG
MEMwNzAwRDM5RDU0IC8qIEpTU1ZHR2x5cGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTA3MDM2M0UxMTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTI0RDkxMjk4MTNDQTk2REUwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVm
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q5QzBBQjc1QTZGMDAwRTVBQzQg
LyogSlNTVkdHcmFkaWVudEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUxNzRFQzJC
Q0NBRjE3RUFFM0Y0NkY4IC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjY1OTcsNiArMjY2NDEsNyBAQAogCQkJCUIyRkEzRTBBMEFCNzVBNkYwMDBFNUFDNCAv
KiBKU1NWR1RyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0UwQzBBQjc1QTZG
MDAwRTVBQzQgLyogSlNTVkdUcmFuc2Zvcm1MaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
RkEzRTBFMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RSZWZFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTA3MDM2M0Q2MTgxQTE0NjUwMEMwNzRBNSAvKiBNZWRpYVN0cmVhbVNvdXJjZVN0
YXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0UxMDBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdUU3BhbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNFMTIwQUI3NUE2
RjAwMEU1QUM0IC8qIEpTU1ZHVW5pdFR5cGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEz
RTE0MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1VzZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0yNjkyMyw2ICsyNjk2OCw3IEBACiAJCQkJQTlDNkU0RjMwRDc0NUU0ODAwNjQ0MkU5IC8q
IFBsdWdpbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcyMDVBQkIxMjM5MjkyNzAwQjE3
MzgwIC8qIFBsdWdpbkRvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBREExNDEwMEUx
QUU1RDkwMDAyM0VFNSAvKiBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTA3MDM2M0UzMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNzFFMjE4M0IxNzM1OUZCODAwNkU2RTREIC8qIFBs
dWdJbnNSZXNvdXJjZXNEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc2RkYxN0UzMTEyMzU2
NzMwMDFENjFCNSAvKiBQbHVnaW5WaWV3Tm9uZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkIx
RjcxNjBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMjcyMjUsNiArMjcyNzEsNyBAQAogCQkJCTA3OEUwOTBFMTdEMTRDRUUwMDQy
MEFBMSAvKiBSVENTdGF0c1JlcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEMDFBMjdBRDEw
QzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2MjZDREUwRTExNDA0MjRDMDAxRTVBNjggLyogU3BhdGlhbE5hdmlnYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMDdGRkRFNjgxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc1NDE1QzI5MTI5QTk5MjAwMDNBRDY2
OSAvKiBTcGVlY2hJbnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyQTVB
RDUxNkE0ODYxNDAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBQTJBNUFEMzE2QTQ4NjBEMDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yNzYzNCw2ICsyNzY4MSw3IEBACiAJCQkJQjUwRjVCODEwRTk2
Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNvcmVPYmpDRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTE4MDgxMEUxNkZDRUNERjAwQjgwRDA3IC8qIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdh
dGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTUyNTUxNjE2RkQyMzUwMDAzRDdBREIgLyogV2Vi
Q29yZVJlc291cmNlSGFuZGxlQXNPcGVyYXRpb25RdWV1ZURlbGVnYXRlLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJMDcwMzYzRTcxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNFQjE2OTUwOUY4ODBCMDAwOTFGOEZGIC8qIFdlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkzN0Y4MThGRTBENjU3NjA2
MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNG
MTlCMDcwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3Lm0gaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3Vy
Y2VTdGF0ZXNDdXN0b20uY3BwCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lZGlhU291cmNlU3RhdGVzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNiArNzIsMTAgQEAgSlNWYWx1ZSBKU01lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2Rl
KAogICAgIGlmICghaW1wbCgpLmhhc1ZpZGVvU291cmNlKCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlID0gaW1wbCgpLmZhY2lu
Z01vZGUoKTsKKyAgICBpZiAobW9kZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIAogICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbXBsKCku
ZmFjaW5nTW9kZSgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5oCShyZXZpc2lvbiAxNTgwMjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMyArNDIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIE1lZGlhQ29uc3RyYWludHM7CiBjbGFzcyBNZWRpYVN0cmVhbUNyZWF0aW9uQ2xp
ZW50OwotY2xhc3MgTWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudDsKLWNsYXNzIE1lZGlhU3RyZWFt
RGVzY3JpcHRvcjsKLWNsYXNzIE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzOworY2xhc3Mg
TWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM7CiBjbGFzcyBNZWRpYVN0cmVhbVRyYWNrU291cmNlc1Jl
cXVlc3RDbGllbnQ7CiAKLXN0cnVjdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczsKLQogY2xhc3Mg
TWVkaWFTdHJlYW1DZW50ZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFtQ2Vu
dGVyKCk7CkBAIC02NSw3ICs2MSw2IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBNZWRpYVN0
cmVhbUNlbnRlcigpOwogCi0gICAgdm9pZCBlbmRMb2NhbE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFt
RGVzY3JpcHRvciopOwogICAgIHN0YXRpYyBNZWRpYVN0cmVhbUNlbnRlciYgcGxhdGZvcm1DZW50
ZXIoKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gMTU4
MDI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsOSBAQCB2b2lkIE1lZGlh
U3RyZWFtRGVzY3JpcHRvcjo6YWRkU291cmNlKFBhCiAgICAgICAgIGlmIChtX3ZpZGVvU3RyZWFt
U291cmNlcy5maW5kKHNvdXJjZSkgPT0gbm90Rm91bmQpCiAgICAgICAgICAgICBtX3ZpZGVvU3Ry
ZWFtU291cmNlcy5hcHBlbmQoc291cmNlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRp
YVN0cmVhbVNvdXJjZTo6Tm9uZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtNzksNiArODIsOSBAQCB2b2lkIE1lZGlhU3RyZWFt
RGVzY3JpcHRvcjo6cmVtb3ZlU291cmNlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1f
dmlkZW9TdHJlYW1Tb3VyY2VzLnJlbW92ZShwb3MpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IE1lZGlhU3RyZWFtU291cmNlOjpOb25lOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC0xMDUsMTMgKzExMSwxNSBAQCBNZWRpYVN0
cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFtRGVzY3JpCiB7CiAgICAgQVNTRVJUKG1faWQubGVu
Z3RoKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXVkaW9Tb3VyY2VzLnNpemUoKTsg
aSsrKSB7Ci0gICAgICAgIG1fYXVkaW9TdHJlYW1Tb3VyY2VzLmFwcGVuZChhdWRpb1NvdXJjZXNb
aV0pOwotICAgICAgICBtX2F1ZGlvVHJhY2tEZXNjcmlwdG9ycy5hcHBlbmQoTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU6OmNyZWF0ZShhdWRpb1NvdXJjZXNbaV0pKTsKKyAgICAgICAgUmVmUHRyPE1l
ZGlhU3RyZWFtU291cmNlPiBzb3VyY2UgPSBhdWRpb1NvdXJjZXNbaV07CisgICAgICAgIG1fYXVk
aW9TdHJlYW1Tb3VyY2VzLmFwcGVuZChzb3VyY2UpOworICAgICAgICBtX2F1ZGlvVHJhY2tEZXNj
cmlwdG9ycy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShzb3VyY2UpKTsK
ICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZpZGVvU291cmNlcy5zaXplKCk7
IGkrKykgewotICAgICAgICBtX3ZpZGVvU3RyZWFtU291cmNlcy5hcHBlbmQodmlkZW9Tb3VyY2Vz
W2ldKTsKLSAgICAgICAgbV92aWRlb1RyYWNrRGVzY3JpcHRvcnMuYXBwZW5kKE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlOjpjcmVhdGUodmlkZW9Tb3VyY2VzW2ldKSk7CisgICAgICAgIFJlZlB0cjxN
ZWRpYVN0cmVhbVNvdXJjZT4gc291cmNlID0gdmlkZW9Tb3VyY2VzW2ldOworICAgICAgICBtX3Zp
ZGVvU3RyZWFtU291cmNlcy5hcHBlbmQoc291cmNlKTsKKyAgICAgICAgbV92aWRlb1RyYWNrRGVz
Y3JpcHRvcnMuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoc291cmNlKSk7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCShyZXZpc2lvbiAxNTgwMjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDIwIEBAIHZvaWQgTWVkaWFTdHJlYW1Tb3Vy
Y2U6OnNldFJlYWR5U3RhdGUoUmUKIAogICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7CiAg
ICAgZm9yIChWZWN0b3I8T2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaSA9IG1fb2JzZXJ2ZXJzLmJlZ2lu
KCk7IGkgIT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsraSkKLSAgICAgICAgKCppKS0+c291cmNlU3Rh
dGVDaGFuZ2VkKCk7CisgICAgICAgICgqaSktPnNvdXJjZVJlYWR5U3RhdGVDaGFuZ2VkKCk7CisK
KyAgICBpZiAobV9yZWFkeVN0YXRlID09IExpdmUpIHsKKyAgICAgICAgc3RhcnRQcm9kdWNpbmdE
YXRhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKG1fcmVhZHlTdGF0
ZSA9PSBFbmRlZCkKKyAgICAgICAgLy8gVGhlcmUgYXJlIG5vIG1vcmUgY29uc3VtZXJzIG9mIHRo
aXMgc291cmNlJ3MgZGF0YSwgc2h1dCBpdCBkb3duIGFzIGFwcHJvcHJpYXRlLgorICAgICAgICAv
LyBodHRwOi8vd3d3LnczLm9yZy9UUi9tZWRpYWNhcHR1cmUtc3RyZWFtcy8jd2lkbC1NZWRpYVN0
cmVhbVRyYWNrLXN0b3Atdm9pZAorICAgICAgICAvLyBJZiB0aGUgZGF0YSBpcyBiZWluZyBnZW5l
cmF0ZWQgZnJvbSBhIGxpdmUgc291cmNlIChlLmcuLCBhIG1pY3JvcGhvbmUgb3IgY2FtZXJhKSwg
dGhlbiB0aGUgdXNlcgorICAgICAgICAvLyBhZ2VudCBzaG91bGQgcmVtb3ZlIGFueSBhY3RpdmUg
Im9uLWFpciIgaW5kaWNhdG9yIGZvciB0aGF0IHNvdXJjZS4gSWYgdGhlIGRhdGEgaXMgYmVpbmcK
KyAgICAgICAgLy8gZ2VuZXJhdGVkIGZyb20gYSBwcmVyZWNvcmRlZCBzb3VyY2UgKGUuZy4gYSB2
aWRlbyBmaWxlKSwgYW55IHJlbWFpbmluZyBjb250ZW50IGluIHRoZSBmaWxlIGlzIGlnbm9yZWQu
CisgICAgICAgIHN0b3BQcm9kdWNpbmdEYXRhKCk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1Tb3Vy
Y2U6OmFkZE9ic2VydmVyKE1lZGlhU3RyZWFtU291cmNlOjpPYnNlcnZlciogb2JzZXJ2ZXIpCkBA
IC04OCwxOCArMTAxLDkgQEAgdm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6cmVtb3ZlT2JzZXJ2ZXIo
TQogICAgIHNpemVfdCBwb3MgPSBtX29ic2VydmVycy5maW5kKG9ic2VydmVyKTsKICAgICBpZiAo
cG9zICE9IG5vdEZvdW5kKQogICAgICAgICBtX29ic2VydmVycy5yZW1vdmUocG9zKTsKLX0KIAot
TWVkaWFDb25zdHJhaW50cyogTWVkaWFTdHJlYW1Tb3VyY2U6OmNvbnN0cmFpbnRzKCkgY29uc3QK
LXsKLSAgICAvLyBGSVhNRTogV2hpbGUgdGhpcyByZXR1cm5zIAotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI0MjgKLSAgICByZXR1cm4gbV9jb25zdHJh
aW50cy5nZXQoKTsKLX0KLSAgICAKLXZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6OnNldENvbnN0cmFp
bnRzKFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpCi17Ci0gICAgbV9j
b25zdHJhaW50cyA9IGNvbnN0cmFpbnRzOworICAgIGlmICghbV9vYnNlcnZlcnMuc2l6ZSgpKQor
ICAgICAgICBzdG9wKCk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6OnNldE11dGVkKGJv
b2wgbXV0ZWQpCkBAIC0xMTgsMTQgKzEyMiwyNyBAQCB2b2lkIE1lZGlhU3RyZWFtU291cmNlOjpz
ZXRNdXRlZChib29sIG11CiAKIHZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6OnNldEVuYWJsZWQoYm9v
bCBlbmFibGVkKQogeworICAgIGlmICghZW5hYmxlZCkgeworICAgICAgICAvLyBEb24ndCBkaXNh
YmxlIHRoZSBzb3VyY2UgdW5sZXNzIGFsbCBvYnNlcnZlcnMgYXJlIGRpc2FibGVkLgorICAgICAg
ICBmb3IgKFZlY3RvcjxPYnNlcnZlcio+OjppdGVyYXRvciBpID0gbV9vYnNlcnZlcnMuYmVnaW4o
KTsgaSAhPSBtX29ic2VydmVycy5lbmQoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoKCppKS0+
b2JzZXJ2ZXJJc0VuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKICAgICBpZiAobV9lbmFibGVkID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsK
LSAgICAKKwogICAgIG1fZW5hYmxlZCA9IGVuYWJsZWQ7CiAKICAgICBpZiAobV9yZWFkeVN0YXRl
ID09IEVuZGVkKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBpZiAoIWVuYWJsZWQpCisg
ICAgICAgIHN0b3BQcm9kdWNpbmdEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBzdGFydFByb2R1
Y2luZ0RhdGEoKTsKKwogICAgIGZvciAoVmVjdG9yPE9ic2VydmVyKj46Oml0ZXJhdG9yIGkgPSBt
X29ic2VydmVycy5iZWdpbigpOyBpICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2kpCiAgICAgICAg
ICgqaSktPnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7CiB9CkBAIC0xNDEsMTggKzE1OCwxMCBAQCBi
b29sIE1lZGlhU3RyZWFtU291cmNlOjpyZWFkb25seSgpIGNvbnN0CiAKIHZvaWQgTWVkaWFTdHJl
YW1Tb3VyY2U6OnN0b3AoKQogewotICAgIGZvciAoVmVjdG9yPE9ic2VydmVyKj46Oml0ZXJhdG9y
IGkgPSBtX29ic2VydmVycy5iZWdpbigpOyBpICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2kpIHsK
LSAgICAgICAgaWYgKCEoKmkpLT5zdG9wcGVkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gVGhlcmUgYXJlIG5vIG1vcmUgY29uc3VtZXJzIG9mIHRoaXMgc291cmNlJ3Mg
ZGF0YSwgc2h1dCBpdCBkb3duIGFzIGFwcHJvcHJpYXRlLgorICAgIC8vIFRoaXMgaXMgY2FsbGVk
IGZyb20gdGhlIHRyYWNrLnN0b3AoKSBtZXRob2QsIHdoaWNoIHNob3VsZCAiUGVybWFuZW50bHkg
c3RvcCB0aGUgZ2VuZXJhdGlvbiBvZiBkYXRhCisgICAgLy8gZm9yIHRyYWNrJ3Mgc291cmNlIiwg
c28gZ28gc3RyYWlnaHQgdG8gZW5kZWQuIFRoaXMgd2lsbCBub3RpZnkgYW55IG90aGVyIHRyYWNr
cyB1c2luZyB0aGlzIHNvdXJjZQorICAgIC8vIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJs
ZS4KICAgICBzZXRSZWFkeVN0YXRlKEVuZGVkKTsKLQotICAgIC8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSL21lZGlhY2FwdHVyZS1zdHJlYW1zLyN3aWRsLU1lZGlhU3RyZWFtVHJhY2stc3RvcC12b2lk
Ci0gICAgLy8gSWYgdGhlIGRhdGEgaXMgYmVpbmcgZ2VuZXJhdGVkIGZyb20gYSBsaXZlIHNvdXJj
ZSAoZS5nLiwgYSBtaWNyb3Bob25lIG9yIGNhbWVyYSksIHRoZW4gdGhlIHVzZXIgCi0gICAgLy8g
YWdlbnQgc2hvdWxkIHJlbW92ZSBhbnkgYWN0aXZlICJvbi1haXIiIGluZGljYXRvciBmb3IgdGhh
dCBzb3VyY2UuIElmIHRoZSBkYXRhIGlzIGJlaW5nIAotICAgIC8vIGdlbmVyYXRlZCBmcm9tIGEg
cHJlcmVjb3JkZWQgc291cmNlIChlLmcuIGEgdmlkZW8gZmlsZSksIGFueSByZW1haW5pbmcgY29u
dGVudCBpbiB0aGUgZmlsZSBpcyBpZ25vcmVkLgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtU291cmNlLmgJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDU5ICs0Nyw2NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdWRpb0J1czsK
IGNsYXNzIE1lZGlhQ29uc3RyYWludHM7CiBjbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7Ci1z
dHJ1Y3QgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM7CitjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZVN0
YXRlczsKIAogY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRp
YVN0cmVhbVNvdXJjZT4gewogcHVibGljOgogICAgIGNsYXNzIE9ic2VydmVyIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIHZpcnR1YWwgfk9ic2VydmVyKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBzb3VyY2VTdGF0ZUNoYW5nZWQoKSA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBTb3VyY2Ug
c3RhdGUgY2hhbmdlcy4KKyAgICAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVJlYWR5U3RhdGVDaGFu
Z2VkKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCkgPSAw
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQoKSA9IDA7Ci0gICAg
ICAgIHZpcnR1YWwgYm9vbCBzdG9wcGVkKCkgPSAwOwotICAgIH07CiAKLSAgICBlbnVtIFR5cGUg
eyBBdWRpbywgVmlkZW8gfTsKLSAgICBlbnVtIFJlYWR5U3RhdGUgeyBOZXcgPSAwLCBMaXZlID0g
MSwgRW5kZWQgPSAyIH07CisgICAgICAgIC8vIE9ic2VydmVyIHN0YXRlIHF1ZXJpZXMuCisgICAg
ICAgIHZpcnR1YWwgYm9vbCBvYnNlcnZlcklzRW5hYmxlZCgpID0gMDsKKyAgICB9OwogCiAgICAg
dmlydHVhbCB+TWVkaWFTdHJlYW1Tb3VyY2UoKSB7IH0KIAogICAgIGJvb2wgaXNBdWRpb1N0cmVh
bVNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBBdWRpbzsgfQogICAgIHZpcnR1YWwg
Ym9vbCB1c2VJREZvclRyYWNrSUQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9p
ZCByZXNldCgpOwotCiAgICAgY29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7
IH0KKworICAgIGVudW0gVHlwZSB7IE5vbmUsIEF1ZGlvLCBWaWRlbyB9OwogICAgIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25z
dCBTdHJpbmcmIG5hbWUpIHsgbV9uYW1lID0gbmFtZTsgfQogCiAgICAgdmlydHVhbCBSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzJiBzdGF0ZXMoKSA9IDA7
CiAgICAgCi0gICAgdm9pZCBzZXRSZWFkeVN0YXRlKFJlYWR5U3RhdGUpOwotICAgIFJlYWR5U3Rh
dGUgcmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQotCi0gICAgdm9p
ZCBhZGRPYnNlcnZlcihPYnNlcnZlciopOwotICAgIHZvaWQgcmVtb3ZlT2JzZXJ2ZXIoT2JzZXJ2
ZXIqKTsKKyAgICBlbnVtIFJlYWR5U3RhdGUgeyBOZXcgPSAwLCBMaXZlID0gMSwgRW5kZWQgPSAy
IH07CisgICAgdmlydHVhbCBSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X3JlYWR5U3RhdGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShSZWFkeVN0YXRl
KTsKIAotICAgIHZvaWQgc2V0Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRz
Pik7Ci0gICAgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwogCi0gICAgYm9vbCBlbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworICAgIHZpcnR1
YWwgYm9vbCBtdXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0ZWQ7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TXV0ZWQoYm9vbCk7CiAKLSAgICBib29sIG11dGVkKCkgY29uc3QgeyByZXR1cm4gbV9t
dXRlZDsgfQotICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIHJlYWRv
bmx5KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFJlYWRvbmx5KGJvb2wgcmVhZG9ubHkp
IHsgbV9yZWFkb25seSA9IHJlYWRvbmx5OyB9CiAKLSAgICBib29sIHJlYWRvbmx5KCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRSZWFkb25seShib29sIHJlYWRvbmx5KSB7IG1fcmVhZG9ubHkgPSByZWFk
b25seTsgfQorICAgIHZpcnR1YWwgYm9vbCByZW1vdGUoKSBjb25zdCB7IHJldHVybiBtX3JlbW90
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRSZW1vdGUoYm9vbCByZW1vdGUpIHsgbV9yZW1vdGUg
PSByZW1vdGU7IH0KIAotICAgIGJvb2wgcmVtb3RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdGU7
IH0KLSAgICB2b2lkIHNldFJlbW90ZShib29sIHJlbW90ZSkgeyBtX3JlbW90ZSA9IHJlbW90ZTsg
fQorICAgIHZvaWQgYWRkT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKKyAgICB2b2lkIHJlbW92ZU9ic2Vy
dmVyKE9ic2VydmVyKik7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0
YSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIHsgfQogCiAgICAg
dm9pZCBzdG9wKCk7CiAKKyAgICB2b2lkIHJlc2V0KCk7CisKIHByb3RlY3RlZDoKICAgICBNZWRp
YVN0cmVhbVNvdXJjZShjb25zdCBTdHJpbmcmIGlkLCBUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUp
OwogCkBAIC0xMDksOCArMTE1LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAg
IFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAgIFZlY3RvcjxPYnNlcnZlcio+IG1fb2JzZXJ2
ZXJzOwotICAgIFJlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBtX2NvbnN0cmFpbnRzOwotICAgIE1l
ZGlhU3RyZWFtU291cmNlU3RhdGVzIG1fc3RhdGVzOwogCiAgICAgYm9vbCBtX2VuYWJsZWQ7CiAg
ICAgYm9vbCBtX211dGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGll
cy5oCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw0MCArMjgsMTMgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKKyNpbmNsdWRlICJN
ZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRl
cyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTb3VyY2VUeXBlIHsgTm9uZSwgQ2FtZXJhLCBNaWNyb3Bo
b25lIH07Ci0gICAgZW51bSBWaWRlb0ZhY2luZ01vZGUgeyBVc2VyLCBFbnZpcm9ubWVudCwgTGVm
dCwgUmlnaHQgfTsKLQotICAgIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzKCkKLSAgICAgICAgOiBz
b3VyY2VUeXBlKE5vbmUpCi0gICAgICAgICwgZmFjaW5nTW9kZShVc2VyKQotICAgICAgICAsIHdp
ZHRoKDApCi0gICAgICAgICwgaGVpZ2h0KDApCi0gICAgICAgICwgZnJhbWVSYXRlKDApCi0gICAg
ICAgICwgYXNwZWN0UmF0aW8oMCkKLSAgICAgICAgLCB2b2x1bWUoMCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgU291cmNlVHlwZSBzb3VyY2VUeXBlOwotICAgIEF0b21pY1N0cmluZyBzb3VyY2VJZDsK
LSAgICBWaWRlb0ZhY2luZ01vZGUgZmFjaW5nTW9kZTsKLSAgICB1bnNpZ25lZCBsb25nIHdpZHRo
OwotICAgIHVuc2lnbmVkIGxvbmcgaGVpZ2h0OwotICAgIGZsb2F0IGZyYW1lUmF0ZTsKLSAgICBm
bG9hdCBhc3BlY3RSYXRpbzsKLSAgICB1bnNpZ25lZCBsb25nIHZvbHVtZTsKLSAgICAKLSAgICBi
b29sIGhhc1ZpZGVvU291cmNlOwotfTsKLQogY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmls
aXR5UmFuZ2UgewogcHVibGljOgogICAgIApAQCAtMTE4LDYgKzkxLDcgQEAgcHVibGljOgogICAg
IH5NZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcygpIHsgfQogCiAgICAgY29uc3QgVmVjdG9y
PE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpTb3VyY2VUeXBlPiYgc291cmNlVHlwZXMoKSB7IHJl
dHVybiBtX3NvdXJjZVR5cGU7IH0KKyAgICB2b2lkIHNldFNvdXJjZVR5cGUoTWVkaWFTdHJlYW1T
b3VyY2VTdGF0ZXM6OlNvdXJjZVR5cGUgc291cmNlVHlwZSkgeyBtX3NvdXJjZVR5cGUucmVzaXpl
VG9GaXQoMSk7IGFkZFNvdXJjZVR5cGUoc291cmNlVHlwZSk7IH0KICAgICB2b2lkIGFkZFNvdXJj
ZVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlNvdXJjZVR5cGUgc291cmNlVHlwZSkKICAg
ICB7CiAgICAgICAgIGlmIChzb3VyY2VUeXBlID09IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpD
YW1lcmEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVNvdXJjZVN0YXRlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2VT
dGF0ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmli
dXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRp
YVN0cmVhbVNvdXJjZVN0YXRlcy5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1T
b3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlZpZGVvRmFj
aW5nTW9kZSBtb2RlKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IHVzZXJGYWNpbmcoInVzZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBlbnZpcm9ubWVudEZhY2lu
ZygiZW52aXJvbm1lbnQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBsZWZ0RmFjaW5nKCJsZWZ0Iiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gcmlnaHRGYWNpbmcoInJpZ2h0IiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2Fz
ZSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VXNlcjoKKyAgICAgICAgcmV0dXJuIHVzZXJGYWNp
bmc7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6RW52aXJvbm1lbnQ6CisgICAg
ICAgIHJldHVybiBlbnZpcm9ubWVudEZhY2luZzsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNl
U3RhdGVzOjpMZWZ0OgorICAgICAgICByZXR1cm4gbGVmdEZhY2luZzsKKyAgICBjYXNlIE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzOjpSaWdodDoKKyAgICAgICAgcmV0dXJuIHJpZ2h0RmFjaW5nOwor
ICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlVua25vd246CisgICAgICAgIHJldHVy
biBlbXB0eUF0b207CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBlbXB0eUF0b207Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1T
b3VyY2VTdGF0ZXM6OnNvdXJjZVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlNvdXJjZVR5
cGUgc291cmNlVHlwZSkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBub25lKCJub25lIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY2FtZXJhKCJjYW1lcmEiLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiBtaWNyb3Bob25lKCJtaWNyb3Bob25lIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgCisgICAgc3dpdGNoIChzb3VyY2VUeXBlKSB7Cisg
ICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6Tm9uZToKKyAgICAgICAgcmV0dXJuIG5v
bmU7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6Q2FtZXJhOgorICAgICAgICBy
ZXR1cm4gY2FtZXJhOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6Ok1pY3JvcGhv
bmU6CisgICAgICAgIHJldHVybiBtaWNyb3Bob25lOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZW1wdHlBdG9tOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVNvdXJjZVN0YXRlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
X2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXNfaAorCisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIFNvdXJjZVR5cGUgeyBOb25lLCBDYW1lcmEsIE1pY3JvcGhvbmUgfTsKKyAgICBlbnVt
IFZpZGVvRmFjaW5nTW9kZSB7IFVua25vd24sIFVzZXIsIEVudmlyb25tZW50LCBMZWZ0LCBSaWdo
dCB9OworCisgICAgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMoKQorICAgICAgICA6IG1fc291cmNl
VHlwZShOb25lKQorICAgICAgICAsIG1fZmFjaW5nTW9kZShVbmtub3duKQorICAgICAgICAsIG1f
d2lkdGgoMCkKKyAgICAgICAgLCBtX2hlaWdodCgwKQorICAgICAgICAsIG1fZnJhbWVSYXRlKDAp
CisgICAgICAgICwgbV9hc3BlY3RSYXRpbygwKQorICAgICAgICAsIG1fdm9sdW1lKDApCisgICAg
eworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHNvdXJjZVR5cGUoTWVk
aWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlNvdXJjZVR5cGUpOworICAgIHN0YXRpYyBjb25zdCBBdG9t
aWNTdHJpbmcmIGZhY2luZ01vZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5n
TW9kZSk7CisKKyAgICBTb3VyY2VUeXBlIHNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZVR5cGU7IH0KKyAgICB2b2lkIHNldFNvdXJjZVR5cGUoU291cmNlVHlwZSB0eXBlKSB7IG1f
c291cmNlVHlwZSA9IHR5cGU7IH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc291cmNlSWQo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUlkOyB9CisgICAgdm9pZCBzZXRTb3VyY2VJZChjb25z
dCBBdG9taWNTdHJpbmcmIHNvdXJjZUlkKSB7IG1fc291cmNlSWQgPSBzb3VyY2VJZDsgfQorCisg
ICAgVmlkZW9GYWNpbmdNb2RlIGZhY2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZhY2luZ01v
ZGU7IH0KKyAgICB2b2lkIHNldEZhY2luZ01vZGUoVmlkZW9GYWNpbmdNb2RlIGZhY2luZ01vZGUp
IHsgbV9mYWNpbmdNb2RlID0gZmFjaW5nTW9kZTsgfQorICAgIAorICAgIHVuc2lnbmVkIGxvbmcg
d2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgdm9pZCBzZXRXaWR0aCh1bnNp
Z25lZCBsb25nIHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQorICAgIAorICAgIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICB2b2lkIHNldEhl
aWdodCh1bnNpZ25lZCBsb25nIGhlaWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQorICAgIAor
ICAgIGZsb2F0IGZyYW1lUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSYXRlOyB9CisgICAg
dm9pZCBzZXRGcmFtZVJhdGUoZmxvYXQgZnJhbWVSYXRlKSB7IG1fZnJhbWVSYXRlID0gZnJhbWVS
YXRlOyB9CisgICAgCisgICAgZmxvYXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBtX2Fz
cGVjdFJhdGlvOyB9CisgICAgdm9pZCBzZXRBc3BlY3RSYXRpbyhmbG9hdCBhc3BlY3RSYXRpbykg
eyBtX2FzcGVjdFJhdGlvID0gYXNwZWN0UmF0aW87IH0KKyAgICAKKyAgICB1bnNpZ25lZCBsb25n
IHZvbHVtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sdW1lOyB9CisgICAgdm9pZCBzZXRWb2x1bWUo
dW5zaWduZWQgbG9uZyB2b2x1bWUpIHsgbV92b2x1bWUgPSB2b2x1bWU7IH0KKyAgICAKK3ByaXZh
dGU6CisgICAgU291cmNlVHlwZSBtX3NvdXJjZVR5cGU7CisgICAgQXRvbWljU3RyaW5nIG1fc291
cmNlSWQ7CisgICAgVmlkZW9GYWNpbmdNb2RlIG1fZmFjaW5nTW9kZTsKKyAgICB1bnNpZ25lZCBs
b25nIG1fd2lkdGg7CisgICAgdW5zaWduZWQgbG9uZyBtX2hlaWdodDsKKyAgICBmbG9hdCBtX2Zy
YW1lUmF0ZTsKKyAgICBmbG9hdCBtX2FzcGVjdFJhdGlvOworICAgIHVuc2lnbmVkIGxvbmcgbV92
b2x1bWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBNZWRpYVN0
cmVhbVNvdXJjZVN0YXRlc19oCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2
YXRlLmNwcAkocmV2aXNpb24gMTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSwxMCBAQAogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKIAor
I2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJNZWRpYVNvdXJjZVN0YXRlcy5oIgor
I2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKICNpbmNsdWRlICJVVUlELmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAKQEAgLTM2LDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRl
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKHNvdXJjZS5nZXQoKSkpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoc291cmNlKSk7CiB9CiAK
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSogb3RoZXIpCkBAIC00Nyw3ICs1MSw3IEBAIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlOjpNZWRpYVN0cmVhbVRyYWMKICAgICBtX2lkID0gY3JlYXRlQ2Fub25pY2FsVVVJ
RFN0cmluZygpOwogCiAgICAgLy8gMy4gTGV0IHRyYWNrQ2xvbmUgaW5oZXJpdCB0aGlzIHRyYWNr
J3MgdW5kZXJseWluZyBzb3VyY2UsIGtpbmQsIGxhYmVsIGFuZCBlbmFibGVkIGF0dHJpYnV0ZXMu
Ci0gICAgbV9zb3VyY2UgPSBvdGhlci0+c291cmNlKCk7CisgICAgc2V0U291cmNlKG90aGVyLT5z
b3VyY2UoKSk7CiAgICAgbV9yZWFkeVN0YXRlID0gbV9zb3VyY2UgPyBtX3NvdXJjZS0+cmVhZHlT
dGF0ZSgpIDogTWVkaWFTdHJlYW1Tb3VyY2U6Ok5ldzsKICAgICBtX2VuYWJsZWQgPSBvdGhlci0+
ZW5hYmxlZCgpOwogCkBAIC01NiwxMSArNjAsMTQgQEAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6
Ok1lZGlhU3RyZWFtVHJhYwogICAgIC8vIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlIChmb3IgZXhh
bWxwZSB3aGVuIGNsb25lZCkgYW5kIHRoZSBtdXRlZCBzdGF0ZSByZWZsZWN0cyB0aGUgc3RhdGUg
b2YgdGhlCiAgICAgLy8gc291cmNlIGF0IHRoZSB0aW1lIHRoZSB0cmFjayBpcyBjcmVhdGVkLgog
ICAgIG1fbXV0ZWQgPSBvdGhlci0+bXV0ZWQoKTsKKwogICAgIG1fc3RvcHBlZCA9IG90aGVyLT5z
dG9wcGVkKCk7CisgICAgbV9jbGllbnQgPSBvdGhlci0+Y2xpZW50KCk7CiB9CiAKLU1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShNZWRpYVN0cmVhbVNvdXJj
ZSogc291cmNlKQotICAgIDogbV9zb3VyY2UoMCkKK01lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBzb3Vy
Y2UpCisgICAgOiBtX3NvdXJjZShudWxscHRyKQorICAgICwgbV9jbGllbnQobnVsbHB0cikKICAg
ICAsIG1fcmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6TmV3KQogICAgICwgbV9tdXRlZChm
YWxzZSkKICAgICAsIG1fZW5hYmxlZCh0cnVlKQpAQCAtNjksOCArNzYsMTcgQEAgTWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU6Ok1lZGlhU3RyZWFtVHJhYwogICAgIHNldFNvdXJjZShzb3VyY2UpOwog
fQogCi12b2lkIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzZXRTb3VyY2UoTWVkaWFTdHJlYW1T
b3VyY2UqIHNvdXJjZSkKK01lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjp+TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUoKQoreworICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAgbV9zb3VyY2UtPnJlbW92
ZU9ic2VydmVyKHRoaXMpOworfQorCit2b2lkIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzZXRT
b3VyY2UoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gc291cmNlKQogeworICAgIGlmICht
X3NvdXJjZSkKKyAgICAgICAgbV9zb3VyY2UtPnJlbW92ZU9ic2VydmVyKHRoaXMpOworCiAgICAg
bV9zb3VyY2UgPSBzb3VyY2U7CiAKICAgICBpZiAoIW1fc291cmNlKQpAQCAtNzgsMjIgKzk0LDgg
QEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0U291cmNlKAogCiAgICAgc2V0TXV0
ZWQobV9zb3VyY2UtPm11dGVkKCkpOwogICAgIHNldFJlYWR5U3RhdGUobV9zb3VyY2UtPnJlYWR5
U3RhdGUoKSk7Ci19Ci0KLWJvb2wgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnNob3VsZEZpcmVU
cmFja1JlYWR5U3RhdGVDaGFuZ2VkKE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRlIG9sZFN0
YXRlKQotewotICAgIHJldHVybiAobV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpM
aXZlICYmIG9sZFN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpOZXcpIHx8IChtX3JlYWR5U3Rh
dGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkVuZGVkICYmIG9sZFN0YXRlICE9IE1lZGlhU3RyZWFt
U291cmNlOjpFbmRlZCk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU6OmtpbmQoKSBjb25zdAotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGF1ZGlvKCJhdWRpbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHZpZGVvKCJ2aWRl
byIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgaWYgKG1fdHlw
ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8pCi0gICAgICAgIHJldHVybiBhdWRpbzsKLQot
ICAgIHJldHVybiB2aWRlbzsKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIG1fc291cmNlLT5h
ZGRPYnNlcnZlcih0aGlzKTsKIH0KIAogY29uc3QgU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZTo6aWQoKSBjb25zdApAQCAtMTY5LDYgKzE3MSwyNCBAQCB2b2lkIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlOjpzZXRFbmFibGVkCiAgICAgLy8gLi4uIGFmdGVyIGEgTWVkaWFTdHJlYW1UcmFj
ayBpcyBkaXNhc3NvY2lhdGVkIGZyb20gaXRzIHRyYWNrLCBpdHMgZW5hYmxlZCBhdHRyaWJ1dGUg
c3RpbGwKICAgICAvLyBjaGFuZ2VzIHZhbHVlIHdoZW4gc2V0OyBpdCBqdXN0IGRvZXNuJ3QgZG8g
YW55dGhpbmcgd2l0aCB0aGF0IG5ldyB2YWx1ZS4KICAgICBtX2VuYWJsZWQgPSBlbmFibGVkOwor
CisgICAgaWYgKG1fc291cmNlKQorICAgICAgICBtX3NvdXJjZS0+c2V0RW5hYmxlZChlbmFibGVk
KTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnRyYWNrRW5hYmxlZENo
YW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c3RvcChTdG9wQmVo
YXZpb3Igc3RvcFNvdXJjZSkKK3sKKyAgICBpZiAobV9zdG9wcGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBzZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCk7CisgICAgbV9z
dG9wcGVkID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoc3RvcFNvdXJjZSA9PSBTdG9wVHJhY2tBbmRT
dG9wU291cmNlICYmIG1fc291cmNlKQorICAgICAgICBtX3NvdXJjZS0+c3RvcCgpOwogfQogCiBN
ZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6cmVh
ZHlTdGF0ZSgpIGNvbnN0CkBAIC0xODcsNyArMjA3LDEwIEBAIHZvaWQgTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU6OnNldFJlYWR5U3QKICAgICBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSBv
bGRTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKICAgICBtX3JlYWR5U3RhdGUgPSBzdGF0ZTsKIAotICAg
IGlmIChtX2NsaWVudCAmJiBzaG91bGRGaXJlVHJhY2tSZWFkeVN0YXRlQ2hhbmdlZChvbGRTdGF0
ZSkpCisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKChtX3Jl
YWR5U3RhdGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUgJiYgb2xkU3RhdGUgPT0gTWVkaWFT
dHJlYW1Tb3VyY2U6Ok5ldykgfHwgbV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpF
bmRlZCkKICAgICAgICAgbV9jbGllbnQtPnRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQoKTsKIH0KIApA
QCAtMTk2LDYgKzIxOSw3OCBAQCBSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IE1lZGlh
U3RyCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSh0aGlz
KSk7CiB9CiAKKyAgICAKK1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZTo6Y29uc3RyYWludHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnN0cmFpbnRz
OworfQorCitSZWZQdHI8TWVkaWFTb3VyY2VTdGF0ZXM+IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
OjpzdGF0ZXMoKSBjb25zdAoreworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybiAw
OworICAgIAorICAgIHJldHVybiBNZWRpYVNvdXJjZVN0YXRlczo6Y3JlYXRlKG1fc291cmNlLT5z
dGF0ZXMoKSk7Cit9CisKK01lZGlhU3RyZWFtU291cmNlOjpUeXBlIE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlOjp0eXBlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1
cm4gTWVkaWFTdHJlYW1Tb3VyY2U6Ok5vbmU7CisKKyAgICByZXR1cm4gbV9zb3VyY2UtPnR5cGUo
KTsKK30KKworUmVmUHRyPE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzPiBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZTo6Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc291cmNlKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICAKKyAgICAvLyBUaGUgc291cmNlIG1heSBiZSBzaGFyZWQgYnkg
bXVsdGlwbGUgdHJhY2tzLCBzbyBpdHMgc3RhdGVzIGlzIG5vdCBuZWNlc3NhcmlseQorICAgIC8v
IGluIHN5bmMgd2l0aCB0aGUgdHJhY2sgc3RhdGUuIEEgdHJhY2sgdGhhdCBpcyBuZXcgb3IgaGFz
IGVuZGVkIGFsd2F5cyBoYXMgYSBzb3VyY2UKKyAgICAvLyB0eXBlIG9mICJub25lIi4KKyAgICBS
ZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXM+IHNvdXJjZUNhcGFiaWxpdGllcyA9
IG1fc291cmNlLT5jYXBhYmlsaXRpZXMoKTsKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IE1lZGlh
U3RyZWFtU291cmNlOjpOZXcgfHwgbV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpF
bmRlZCkKKyAgICAgICAgc291cmNlQ2FwYWJpbGl0aWVzLT5zZXRTb3VyY2VUeXBlKE1lZGlhU3Ry
ZWFtU291cmNlU3RhdGVzOjpOb25lKTsKKyAgICAKKyAgICByZXR1cm4gTWVkaWFTdHJlYW1DYXBh
YmlsaXRpZXM6OmNyZWF0ZShzb3VyY2VDYXBhYmlsaXRpZXMucmVsZWFzZSgpKTsKK30KKwordm9p
ZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6YXBwbHlDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1l
ZGlhQ29uc3RyYWludHM+KQoreworICAgIC8vIEZJWE1FOiBhcHBseSB0aGUgbmV3IGNvbnN0cmFp
bnRzIHRvIHRoZSB0cmFjaworICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjI0MjgKK30KKwordm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c291cmNl
UmVhZHlTdGF0ZUNoYW5nZWQoKQoreworICAgIGlmIChzdG9wcGVkKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBzZXRSZWFkeVN0YXRlKG1fc291cmNlLT5yZWFkeVN0YXRlKCkpOworfQor
Cit2b2lkIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzb3VyY2VNdXRlZENoYW5nZWQoKQorewor
ICAgIGlmIChzdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzZXRNdXRlZCht
X3NvdXJjZS0+bXV0ZWQoKSk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnNv
dXJjZUVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoc3RvcHBlZCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgc2V0RW5hYmxlZChtX3NvdXJjZS0+ZW5hYmxlZCgpKTsKK30KKworYm9v
bCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6b2JzZXJ2ZXJJc0VuYWJsZWQoKQoreworICAgIHJl
dHVybiBlbmFibGVkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgJKHJl
dmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE4ICszNSwyNCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIE1lZGlhU291cmNlU3RhdGVzOworY2xh
c3MgTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM7CisKIGNsYXNzIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlQ2xpZW50IHsKIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZUNsaWVudCgpIHsgfQorCiAgICAgdmlydHVhbCB2b2lkIHRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQo
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB0cmFja0VuYWJsZWRDaGFuZ2VkKCkgPSAwOwogfTsKIAotY2xhc3MgTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4geworY2xhc3MgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUgOiBwdWJsaWMgUmVmQ291bnRl
ZDxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4sIHB1YmxpYyBNZWRpYVN0cmVhbVNvdXJjZTo6T2Jz
ZXJ2ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlPiBjcmVhdGUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4pOwotICAgIHZpcnR1
YWwgfk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKCkgeyB9CiAKLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGtpbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSgp
OworCiAgICAgY29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgbGFi
ZWwoKSBjb25zdDsKIApAQCAtNjcsMjkgKzczLDQ0IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+IGNsb25lKCk7CiAKICAgICBNZWRpYVN0cmVhbVNvdXJjZSog
c291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFNv
dXJjZShNZWRpYVN0cmVhbVNvdXJjZSopOworICAgIHZvaWQgc2V0U291cmNlKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2U+KTsKIAotICAgIHZvaWQgc3RvcCgpIHsgbV9zdG9wcGVkID0gdHJ1
ZTsgfQorICAgIGVudW0gU3RvcEJlaGF2aW9yIHsgU3RvcFRyYWNrQW5kU3RvcFNvdXJjZSwgU3Rv
cFRyYWNrT25seSB9OworICAgIHZvaWQgc3RvcChTdG9wQmVoYXZpb3IpOwogICAgIGJvb2wgc3Rv
cHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHBlZDsgfQorICAgIAorICAgIHZvaWQgc2V0Q2xp
ZW50KE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBj
bGllbnQ7IH0KIAotICAgIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KKyAgICBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlKCkgY29uc3Q7
CisKKyAgICBSZWZQdHI8TWVkaWFTb3VyY2VTdGF0ZXM+IHN0YXRlcygpIGNvbnN0OworICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbUNhcGFiaWxpdGllcz4gY2FwYWJpbGl0aWVzKCkgY29uc3Q7CisKKyAg
ICBSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMoKSBjb25zdDsKKyAgICB2b2lk
IGFwcGx5Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7CiAKLSAgICB2
b2lkIHNldENsaWVudChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUNsaWVudCogY2xpZW50KSB7IG1f
Y2xpZW50ID0gY2xpZW50OyB9CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqKTsKLSAgICBNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZShNZWRpYVN0cmVhbVNvdXJjZSopOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+KTsKIAogcHJpdmF0ZToKLSAgICBib29s
IHNob3VsZEZpcmVUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKE1lZGlhU3RyZWFtU291cmNlOjpSZWFk
eVN0YXRlKTsKKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUNsaWVudCogY2xpZW50KCkgY29u
c3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIC8vIE1lZGlhU3RyZWFtU291cmNlT2JzZXJ2
ZXIKKyAgICB2aXJ0dWFsIHZvaWQgc291cmNlUmVhZHlTdGF0ZUNoYW5nZWQoKSBPVkVSUklERSBG
SU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCkgT1ZFUlJJREUgRklO
QUw7CisgICAgdmlydHVhbCB2b2lkIHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkgT1ZFUlJJREUgRklO
QUw7CisgICAgdmlydHVhbCBib29sIG9ic2VydmVySXNFbmFibGVkKCkgT1ZFUlJJREUgRklOQUw7
CisgICAgCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBtX3NvdXJjZTsKKyAgICBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZUNsaWVudCogbV9jbGllbnQ7CisgICAgUmVmUHRyPE1lZGlhQ29u
c3RyYWludHM+IG1fY29uc3RyYWludHM7CiAgICAgTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3Rh
dGUgbV9yZWFkeVN0YXRlOwogICAgIG11dGFibGUgU3RyaW5nIG1faWQ7CiAKICAgICBib29sIG1f
bXV0ZWQ7CiAgICAgYm9vbCBtX2VuYWJsZWQ7CiAgICAgYm9vbCBtX3N0b3BwZWQ7Ci0gICAgTWVk
aWFTdHJlYW1Tb3VyY2U6OlR5cGUgbV90eXBlOwotICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
Q2xpZW50KiBtX2NsaWVudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQXVkaW9DYXB0dXJlU291cmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBVkF1ZGlvQ2FwdHVyZVNv
dXJjZV9oCisjZGVmaW5lIEFWQXVkaW9DYXB0dXJlU291cmNlX2gKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJBVk1lZGlhQ2FwdHVy
ZVNvdXJjZS5oIgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0
aW9uICpDTUZvcm1hdERlc2NyaXB0aW9uUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
CitjbGFzcyBBVkF1ZGlvQ2FwdHVyZVNvdXJjZSA6IHB1YmxpYyBBVk1lZGlhQ2FwdHVyZVNvdXJj
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxBVk1lZGlhQ2FwdHVyZVNvdXJjZT4gY3Jl
YXRlKEFWQ2FwdHVyZURldmljZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIFBhc3NSZWZQdHI8TWVk
aWFDb25zdHJhaW50cz4pOworICAgIAorcHJpdmF0ZToKKyAgICBBVkF1ZGlvQ2FwdHVyZVNvdXJj
ZShBVkNhcHR1cmVEZXZpY2UqLCBjb25zdCBBdG9taWNTdHJpbmcmLCBQYXNzUmVmUHRyPE1lZGlh
Q29uc3RyYWludHM+KTsKKyAgICB2aXJ0dWFsIH5BVkF1ZGlvQ2FwdHVyZVNvdXJjZSgpOworICAg
IAorICAgIHZpcnR1YWwgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzPiBjYXBh
YmlsaXRpZXMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZU91dHB1
dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dCosIENN
U2FtcGxlQnVmZmVyUmVmLCBBVkNhcHR1cmVDb25uZWN0aW9uKikgT1ZFUlJJREU7CisgICAgCisg
ICAgdmlydHVhbCB2b2lkIHNldHVwQ2FwdHVyZVNlc3Npb24oKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlU3RhdGVzKCkgT1ZFUlJJREU7CisgICAgICAgIAorICAgIFJldGFpblB0
cjxBVkNhcHR1cmVDb25uZWN0aW9uPiBtX2F1ZGlvQ29ubmVjdGlvbjsKKyAgICBSZXRhaW5QdHI8
Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
KworI2VuZGlmIC8vIEFWVmlkZW9DYXB0dXJlU291cmNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZBdWRpb0Nh
cHR1cmVTb3VyY2UubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQVZBdWRpb0NhcHR1cmVTb3VyY2UubW0JKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2ltcG9ydCAiQVZBdWRpb0Nh
cHR1cmVTb3VyY2UuaCIKKworI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFDb25z
dHJhaW50cy5oIgorI2ltcG9ydCAiTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuaCIKKyNpbXBvcnQg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCA8QVZG
b3VuZGF0aW9uL0FWRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisKK3R5
cGVkZWYgQVZDYXB0dXJlQ29ubmVjdGlvbiBBVkNhcHR1cmVDb25uZWN0aW9uVHlwZTsKK3R5cGVk
ZWYgQVZDYXB0dXJlRGV2aWNlIEFWQ2FwdHVyZURldmljZVR5cGU7Cit0eXBlZGVmIEFWQ2FwdHVy
ZURldmljZUlucHV0IEFWQ2FwdHVyZURldmljZUlucHV0VHlwZTsKK3R5cGVkZWYgQVZDYXB0dXJl
T3V0cHV0IEFWQ2FwdHVyZU91dHB1dFR5cGU7Cit0eXBlZGVmIEFWQ2FwdHVyZUF1ZGlvRGF0YU91
dHB1dCBBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXRUeXBlOworCitTT0ZUX0xJTktfRlJBTUVXT1JL
X09QVElPTkFMKEFWRm91bmRhdGlvbikKKworU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwg
QVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0KQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwg
QVZDYXB0dXJlQ29ubmVjdGlvbikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2Fw
dHVyZURldmljZSkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZURldmlj
ZUlucHV0KQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlT3V0cHV0KQor
CisjZGVmaW5lIEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dCBnZXRBVkNhcHR1cmVBdWRpb0RhdGFP
dXRwdXRDbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVyZUNvbm5lY3Rpb24gZ2V0QVZDYXB0dXJlQ29u
bmVjdGlvbkNsYXNzKCkKKyNkZWZpbmUgQVZDYXB0dXJlRGV2aWNlIGdldEFWQ2FwdHVyZURldmlj
ZUNsYXNzKCkKKyNkZWZpbmUgQVZDYXB0dXJlRGV2aWNlSW5wdXQgZ2V0QVZDYXB0dXJlRGV2aWNl
SW5wdXRDbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVyZU91dHB1dCBnZXRBVkNhcHR1cmVPdXRwdXRD
bGFzcygpCisKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYVR5cGVBdWRp
bywgTlNTdHJpbmcgKikKKworI2RlZmluZSBBVk1lZGlhVHlwZUF1ZGlvIGdldEFWTWVkaWFUeXBl
QXVkaW8oKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxBVk1lZGlhQ2FwdHVyZVNv
dXJjZT4gQVZBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShBVkNhcHR1cmVEZXZpY2VUeXBlKiBk
ZXZpY2UsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50
cz4gY29uc3RyYWludCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFWQXVkaW9DYXB0dXJl
U291cmNlKGRldmljZSwgaWQsIGNvbnN0cmFpbnQpKTsKK30KKyAgICAKK0FWQXVkaW9DYXB0dXJl
U291cmNlOjpBVkF1ZGlvQ2FwdHVyZVNvdXJjZShBVkNhcHR1cmVEZXZpY2VUeXBlKiBkZXZpY2Us
IGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29u
c3RyYWludHMpCisgICAgOiBBVk1lZGlhQ2FwdHVyZVNvdXJjZShkZXZpY2UsIGlkLCBNZWRpYVN0
cmVhbVNvdXJjZTo6QXVkaW8sIGNvbnN0cmFpbnRzKQoreworICAgIGN1cnJlbnRTdGF0ZXMoKS0+
c2V0U291cmNlSWQoaWQpOworICAgIGN1cnJlbnRTdGF0ZXMoKS0+c2V0U291cmNlVHlwZShNZWRp
YVN0cmVhbVNvdXJjZVN0YXRlczo6TWljcm9waG9uZSk7Cit9CisgICAgCitBVkF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6fkFWQXVkaW9DYXB0dXJlU291cmNlKCkKK3sKK30KKworUmVmUHRyPE1lZGlhU3Ry
ZWFtU291cmNlQ2FwYWJpbGl0aWVzPiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y2FwYWJpbGl0aWVz
KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2
b2lkIEFWQXVkaW9DYXB0dXJlU291cmNlOjp1cGRhdGVTdGF0ZXMoKQoreworICAgIC8vIEZJWE1F
OiB1c2UgW0FWQ2FwdHVyZUF1ZGlvUHJldmlld091dHB1dCB2b2x1bWVdIGZvciB2b2x1bWUKK30K
Kwordm9pZCBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBDYXB0dXJlU2Vzc2lvbigpCit7Cisg
ICAgUmV0YWluUHRyPEFWQ2FwdHVyZURldmljZUlucHV0VHlwZT4gYXVkaW9JbiA9IGFkb3B0TlMo
W1tBVkNhcHR1cmVEZXZpY2VJbnB1dCBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlKCkgZXJy
b3I6bmlsXSk7CisgICAgQVNTRVJUKFtzZXNzaW9uKCkgY2FuQWRkSW5wdXQ6YXVkaW9Jbi5nZXQo
KV0pOworICAgIGlmIChbc2Vzc2lvbigpIGNhbkFkZElucHV0OmF1ZGlvSW4uZ2V0KCldKQorICAg
ICAgICBbc2Vzc2lvbigpIGFkZElucHV0OmF1ZGlvSW4uZ2V0KCldOworICAgIAorICAgIFJldGFp
blB0cjxBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXRUeXBlPiBhdWRpb091dHB1dCA9IGFkb3B0TlMo
W1tBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXQgYWxsb2NdIGluaXRdKTsKKyAgICBzZXRBdWRpb1Nh
bXBsZUJ1ZmZlckRlbGVnYXRlKGF1ZGlvT3V0cHV0LmdldCgpKTsKKyAgICBBU1NFUlQoW3Nlc3Np
b24oKSBjYW5BZGRPdXRwdXQ6YXVkaW9PdXRwdXQuZ2V0KCldKTsKKyAgICBpZiAoW3Nlc3Npb24o
KSBjYW5BZGRPdXRwdXQ6YXVkaW9PdXRwdXQuZ2V0KCldKQorICAgICAgICBbc2Vzc2lvbigpIGFk
ZE91dHB1dDphdWRpb091dHB1dC5nZXQoKV07CisgICAgbV9hdWRpb0Nvbm5lY3Rpb24gPSBhZG9w
dE5TKFthdWRpb091dHB1dC5nZXQoKSBjb25uZWN0aW9uV2l0aE1lZGlhVHlwZTpBVk1lZGlhVHlw
ZUF1ZGlvXSk7Cit9CisKK3ZvaWQgQVZBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVPdXRwdXRE
aWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbihBVkNhcHR1cmVPdXRwdXRUeXBlKiwg
Q01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBBVkNhcHR1cmVDb25uZWN0aW9uVHlwZSop
Cit7CisgICAgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IENNU2Ft
cGxlQnVmZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24oc2FtcGxlQnVmZmVyKTsKKyAgICBpZiAoIWZv
cm1hdERlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBDRlJldGFpbihmb3JtYXRE
ZXNjcmlwdGlvbik7CisgICAgbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uID0gYWRvcHRDRihmb3Jt
YXREZXNjcmlwdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcl9oCisjZGVmaW5lIEFW
Q2FwdHVyZURldmljZU1hbmFnZXJfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyLmgiCisjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrU291cmNl
c1JlcXVlc3RDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK09CSkNfQ0xBU1MgQVZDYXB0dXJlRGV2aWNlOworT0JK
Q19DTEFTUyBBVkNhcHR1cmVTZXNzaW9uOworT0JKQ19DTEFTUyBOU1N0cmluZzsKK09CSkNfQ0xB
U1MgV2ViQ29yZUFWQ2FwdHVyZURldmljZU1hbmFnZXJPYnNlcnZlcjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDYXB0dXJlRGV2aWNlOworCitjbGFzcyBBVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciYgc2hh
cmVkKCk7CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKworICAgIFZlY3RvcjxSZWZQ
dHI8VHJhY2tTb3VyY2VJbmZvPj4gZ2V0U291cmNlc0luZm8oY29uc3QgU3RyaW5nJik7CisgICAg
Ym9vbCB2ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6VHlw
ZSwgTWVkaWFDb25zdHJhaW50cyosIFN0cmluZyYpOworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNv
dXJjZT4gYmVzdFNvdXJjZUZvclR5cGVBbmRDb25zdHJhaW50cyhNZWRpYVN0cmVhbVNvdXJjZTo6
VHlwZSwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7CisKKyAgICBlbnVtIFZhbGlkQ29u
c3RyYWludHMgeyB3aWR0aCA9IDAsIGhlaWdodCwgZnJhbWVSYXRlLCBmYWNpbmdNb2RlLCBnYWlu
IH07CisgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiB2YWxpZENvbnN0cmFp
bnROYW1lcygpOworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgdmFsaWRG
YWNpbmdNb2RlcygpOworCisgICAgc3RhdGljIGJvb2wgZGV2aWNlU3VwcG9ydHNGYWNpbmdNb2Rl
KEFWQ2FwdHVyZURldmljZSosIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01v
ZGUpOworICAgIHN0YXRpYyBib29sIGlzVmFsaWRDb25zdHJhaW50KE1lZGlhU3RyZWFtU291cmNl
OjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBTdHJpbmcgYmVzdFNlc3Np
b25QcmVzZXRGb3JWaWRlb1NpemUoQVZDYXB0dXJlU2Vzc2lvbiosIGludCB3aWR0aCwgaW50IGhl
aWdodCk7CisKKyAgICB2b2lkIHJlZ2lzdGVyRm9yRGV2aWNlTm90aWZpY2F0aW9ucygpOworICAg
IHZvaWQgZGV2aWNlQ29ubmVjdGVkKCk7CisgICAgdm9pZCBkZXZpY2VEaXNjb25uZWN0ZWQoQVZD
YXB0dXJlRGV2aWNlKik7CisKK3Byb3RlY3RlZDoKKyAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
KCk7CisgICAgfkFWQ2FwdHVyZURldmljZU1hbmFnZXIoKTsKKworICAgIENhcHR1cmVEZXZpY2Uq
IGJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpWaWRlb0Zh
Y2luZ01vZGUpOworICAgIGJvb2wgc2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChBVkNhcHR1cmVT
ZXNzaW9uKiwgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisKKyAgICBSZXRhaW5QdHI8V2ViQ29yZUFWQ2FwdHVyZURldmlj
ZU1hbmFnZXJPYnNlcnZlcj4gbV9vYmpjT2JzZXJ2ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gQVZD
YXB0dXJlRGV2aWNlTWFuYWdlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdl
ci5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbXBvcnQgIkFWQ2FwdHVyZURldmljZU1h
bmFnZXIuaCIKKworI2ltcG9ydCAiQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKyNpbXBvcnQgIkFW
TWVkaWFDYXB0dXJlU291cmNlLmgiCisjaW1wb3J0ICJBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIgor
I2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5oIgorI2ltcG9y
dCAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNpbXBvcnQgIk1lZGlhU3RyZWFtU291cmNlU3RhdGVz
LmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIK
KyNpbXBvcnQgIlVVSUQuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkZvdW5kYXRpb24uaD4K
KyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNp
bXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCit0eXBlZGVmIEFWQ2FwdHVyZURldmljZSBB
VkNhcHR1cmVEZXZpY2VUeXBlOwordHlwZWRlZiBBVkNhcHR1cmVTZXNzaW9uIEFWQ2FwdHVyZVNl
c3Npb25UeXBlOworCitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWRm91bmRhdGlvbikK
KworU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlRGV2aWNlKQorU09GVF9M
SU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlU2Vzc2lvbikKKworI2RlZmluZSBBVkNh
cHR1cmVEZXZpY2UgZ2V0QVZDYXB0dXJlRGV2aWNlQ2xhc3MoKQorI2RlZmluZSBBVkNhcHR1cmVT
ZXNzaW9uIGdldEFWQ2FwdHVyZVNlc3Npb25DbGFzcygpCisKK1NPRlRfTElOS19QT0lOVEVSKEFW
Rm91bmRhdGlvbiwgQVZNZWRpYVR5cGVBdWRpbywgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lO
VEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYVR5cGVNdXhlZCwgTlNTdHJpbmcgKikKK1NPRlRfTElO
S19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYVR5cGVWaWRlbywgTlNTdHJpbmcgKikKK1NP
RlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4
NzIwLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1
cmVTZXNzaW9uUHJlc2V0NjQweDQ4MCwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFW
Rm91bmRhdGlvbiwgQVZDYXB0dXJlU2Vzc2lvblByZXNldDM1MngyODgsIE5TU3RyaW5nICopCitT
T0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXRMb3cs
IE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZURl
dmljZVdhc0Nvbm5lY3RlZE5vdGlmaWNhdGlvbiwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lO
VEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlRGV2aWNlV2FzRGlzY29ubmVjdGVkTm90aWZpY2F0
aW9uLCBOU1N0cmluZyAqKQorCisjZGVmaW5lIEFWTWVkaWFUeXBlQXVkaW8gZ2V0QVZNZWRpYVR5
cGVBdWRpbygpCisjZGVmaW5lIEFWTWVkaWFUeXBlTXV4ZWQgZ2V0QVZNZWRpYVR5cGVNdXhlZCgp
CisjZGVmaW5lIEFWTWVkaWFUeXBlVmlkZW8gZ2V0QVZNZWRpYVR5cGVWaWRlbygpCisjZGVmaW5l
IEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMCBnZXRBVkNhcHR1cmVTZXNzaW9uUHJlc2V0
MTI4MHg3MjAoKQorI2RlZmluZSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0NjQweDQ4MCBnZXRBVkNh
cHR1cmVTZXNzaW9uUHJlc2V0NjQweDQ4MCgpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25QcmVz
ZXQzNTJ4Mjg4IGdldEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4KCkKKyNkZWZpbmUgQVZD
YXB0dXJlU2Vzc2lvblByZXNldExvdyBnZXRBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93KCkKKyNk
ZWZpbmUgQVZDYXB0dXJlRGV2aWNlV2FzQ29ubmVjdGVkTm90aWZpY2F0aW9uIGdldEFWQ2FwdHVy
ZURldmljZVdhc0Nvbm5lY3RlZE5vdGlmaWNhdGlvbigpCisjZGVmaW5lIEFWQ2FwdHVyZURldmlj
ZVdhc0Rpc2Nvbm5lY3RlZE5vdGlmaWNhdGlvbiBnZXRBVkNhcHR1cmVEZXZpY2VXYXNEaXNjb25u
ZWN0ZWROb3RpZmljYXRpb24oKQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQGludGVy
ZmFjZSBXZWJDb3JlQVZDYXB0dXJlRGV2aWNlTWFuYWdlck9ic2VydmVyIDogTlNPYmplY3QKK3sK
KyAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyKiBtX2NhbGxiYWNrOworfQorCistKGlkKWluaXRX
aXRoQ2FsbGJhY2s6KEFWQ2FwdHVyZURldmljZU1hbmFnZXIqKWNhbGxiYWNrOworLSh2b2lkKWRp
c2Nvbm5lY3Q7CistKHZvaWQpZGV2aWNlRGlzY29ubmVjdGVkOihOU05vdGlmaWNhdGlvbiAqKW5v
dGlmaWNhdGlvbjsKKy0odm9pZClkZXZpY2VDb25uZWN0ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90
aWZpY2F0aW9uOworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIHJl
ZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgpOworCitjbGFzcyBDYXB0dXJlRGV2aWNlIHsKK3B1Ymxp
YzoKKyAgICBDYXB0dXJlRGV2aWNlKCkKKyAgICAgICAgOm1fZW5hYmxlZChmYWxzZSkKKyAgICB7
CisgICAgfQorCisgICAgU3RyaW5nIG1fY2FwdHVyZURldmljZUlEOworCisgICAgU3RyaW5nIG1f
YXVkaW9Tb3VyY2VJZDsKKyAgICBSZWZQdHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IG1fYXVkaW9T
b3VyY2U7CisKKyAgICBTdHJpbmcgbV92aWRlb1NvdXJjZUlkOworICAgIFJlZlB0cjxBVk1lZGlh
Q2FwdHVyZVNvdXJjZT4gbV92aWRlb1NvdXJjZTsKKworICAgIGJvb2wgbV9lbmFibGVkOworfTsK
Kworc3RhdGljIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgY2FwdHVyZURldmljZUxpc3QoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPENhcHR1cmVEZXZpY2U+LCBjYXB0dXJlRGV2
aWNlTGlzdCwgKCkpOworICAgIHN0YXRpYyBib29sIGZpcnN0VGltZSA9IHRydWU7CisKKyAgICBp
ZiAoZmlyc3RUaW1lICYmICFjYXB0dXJlRGV2aWNlTGlzdC5zaXplKCkpIHsKKyAgICAgICAgZmly
c3RUaW1lID0gZmFsc2U7CisgICAgICAgIHJlZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgpOworICAg
ICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKS5yZWdpc3RlckZvckRldmljZU5v
dGlmaWNhdGlvbnMoKTsKKyAgICB9CisKKyAgICByZXR1cm4gY2FwdHVyZURldmljZUxpc3Q7Cit9
CisKK3N0YXRpYyBib29sIGNhcHR1cmVEZXZpY2VGcm9tRGV2aWNlSUQoY29uc3QgU3RyaW5nJiBj
YXB0dXJlRGV2aWNlSUQsIENhcHR1cmVEZXZpY2UmIHNvdXJjZSkKK3sKKyAgICBWZWN0b3I8Q2Fw
dHVyZURldmljZT4mIGRldmljZXMgPSBjYXB0dXJlRGV2aWNlTGlzdCgpOworICAgIAorICAgIHNp
emVfdCBjb3VudCA9IGRldmljZXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgeworICAgICAgICBpZiAoZGV2aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJRCA9
PSBjYXB0dXJlRGV2aWNlSUQpIHsKKyAgICAgICAgICAgIHNvdXJjZSA9IGRldmljZXNbaV07Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHJlZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgpCit7
CisgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxpc3Qo
KTsKKyAgICAKKyAgICBmb3IgKEFWQ2FwdHVyZURldmljZVR5cGUgKmRldmljZSBpbiBbQVZDYXB0
dXJlRGV2aWNlIGRldmljZXNdKSB7CisgICAgICAgIENhcHR1cmVEZXZpY2Ugc291cmNlOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlRnJvbURldmljZUlEKGRldmljZS51bmlx
dWVJRCwgc291cmNlKSkgeworICAgICAgICAgICAgLy8gQW4gQVZDYXB0dXJlRGV2aWNlIGhhcyBh
IHVuaXF1ZSBJRCwgYnV0IHdlIGNhbid0IHVzZSBpdCBmb3IgdGhlIHNvdXJjZSBJRCBiZWNhdXNl
OgorICAgICAgICAgICAgLy8gMS4gaWYgaXQgcHJvdmlkZXMgYm90aCBhdWRpbyBhbmQgdmlkZW8g
d2Ugd2lsbCBuZWVkIHRvIGNyZWF0ZSB0d28gc291cmNlcyBmb3IgaXQKKyAgICAgICAgICAgIC8v
IDIuIHRoZSB1bmlxdWUgSUQgcGVyc2lzdHMgb24gb25lIHN5c3RlbSBhY3Jvc3MgZGV2aWNlIGNv
bm5lY3Rpb25zLCBkaXNjb25uZWN0aW9ucywKKyAgICAgICAgICAgIC8vICAgIGFwcGxpY2F0aW9u
IHJlc3RhcnRzLCBhbmQgcmVib290cywgc28gaXQgY291bGQgYmUgdXNlZCB0byBmaWdlcnByaW50
IGEgdXNlci4KKyAgICAgICAgICAgIHNvdXJjZS5tX2NhcHR1cmVEZXZpY2VJRCA9IGRldmljZS51
bmlxdWVJRDsKKyAgICAgICAgICAgIHNvdXJjZS5tX2VuYWJsZWQgPSB0cnVlOworICAgICAgICAg
ICAgaWYgKFtkZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlQXVkaW9dIHx8IFtkZXZpY2Ug
aGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlTXV4ZWRdKQorICAgICAgICAgICAgICAgIHNvdXJjZS5t
X2F1ZGlvU291cmNlSWQgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CisKKyAgICAgICAg
ICAgIGlmIChbZGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZVZpZGVvXSB8fCBbZGV2aWNl
IGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZU11eGVkXSkKKyAgICAgICAgICAgICAgICBzb3VyY2Uu
bV92aWRlb1NvdXJjZUlkID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworCisgICAgICAg
ICAgICBkZXZpY2VzLmFwcGVuZChzb3VyY2UpOworICAgICAgICB9IGVsc2UgaWYgKCFzb3VyY2Uu
bV9lbmFibGVkKSB7CisgICAgICAgICAgICBzb3VyY2UubV9lbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGlmIChzb3VyY2UubV9hdWRpb1NvdXJjZSkKKyAgICAgICAgICAgICAgICBzb3VyY2Uu
bV9hdWRpb1NvdXJjZS0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgIGlmIChzb3VyY2Uu
bV92aWRlb1NvdXJjZSkKKyAgICAgICAgICAgICAgICBzb3VyY2UubV92aWRlb1NvdXJjZS0+c2V0
RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjppc0F2YWlsYWJsZSgpCit7CisgICAgcmV0dXJuIEFWRm91bmRhdGlvbkxpYnJh
cnkoKTsKK30KKworQVZDYXB0dXJlRGV2aWNlTWFuYWdlciYgQVZDYXB0dXJlRGV2aWNlTWFuYWdl
cjo6c2hhcmVkKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEFWQ2FwdHVyZURldmljZU1h
bmFnZXIsIG1hbmFnZXIsICgpKTsKKyAgICByZXR1cm4gbWFuYWdlcjsKK30KKworQVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcigpCisgICAgOiBtX29iamNPYnNl
cnZlcihhZG9wdE5TKFtbV2ViQ29yZUFWQ2FwdHVyZURldmljZU1hbmFnZXJPYnNlcnZlciBhbGxv
Y10gaW5pdFdpdGhDYWxsYmFjazp0aGlzXSkpCit7Cit9CisKK0FWQ2FwdHVyZURldmljZU1hbmFn
ZXI6On5BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpXTsK
KyAgICBbbV9vYmpjT2JzZXJ2ZXIgZGlzY29ubmVjdF07Cit9CisKK1N0cmluZyBBVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjpiZXN0U2Vzc2lvblByZXNldEZvclZpZGVvU2l6ZShBVkNhcHR1cmVTZXNz
aW9uVHlwZSAqY2FwdHVyZVNlc3Npb24sIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBB
U1NFUlQod2lkdGggPj0gMCk7CisgICAgQVNTRVJUKGhlaWdodCA+PSAwKTsKKyAgICAKKyAgICBp
ZiAod2lkdGggPiAxMjgwIHx8IGhlaWdodCA+IDcyMCkKKyAgICAgICAgLy8gRklYTUU6IHRoaXMg
cmVzdHJpY3Rpb24gY291bGQgYmUgYWRqdXN0ZWQgd2l0aCB0aGUgdmlkZW9NYXhTY2FsZUFuZENy
b3BGYWN0b3IgcHJvcGVydHkuCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIAor
ICAgIGlmICh3aWR0aCA+IDY0MCB8fCBoZWlnaHQgPiA0ODApIHsKKyAgICAgICAgaWYgKCFbY2Fw
dHVyZVNlc3Npb24gY2FuU2V0U2Vzc2lvblByZXNldDpBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MTI4
MHg3MjBdKQorICAgICAgICAgICAgZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIEFWQ2Fw
dHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMDsKKyAgICB9CisgICAgCisgICAgaWYgKHdpZHRoID4g
MzUyIHx8IGhlaWdodCA+IDI4OCkgeworICAgICAgICBpZiAoIVtjYXB0dXJlU2Vzc2lvbiBjYW5T
ZXRTZXNzaW9uUHJlc2V0OkFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwXSkKKyAgICAgICAg
ICAgIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0
NjQweDQ4MDsKKyAgICB9CisgICAgCisgICAgaWYgKFtjYXB0dXJlU2Vzc2lvbiBjYW5TZXRTZXNz
aW9uUHJlc2V0OkFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4XSkKKyAgICAgICAgcmV0dXJu
IEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4OworICAgIAorICAgIGlmIChbY2FwdHVyZVNl
c3Npb24gY2FuU2V0U2Vzc2lvblByZXNldDpBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93XSkKKyAg
ICAgICAgcmV0dXJuIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXRMb3c7CisgICAgCisgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7Cit9CisKK2Jvb2wgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNl
U3VwcG9ydHNGYWNpbmdNb2RlKEFWQ2FwdHVyZURldmljZVR5cGUgKmRldmljZSwgTWVkaWFTdHJl
YW1Tb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZSBmYWNpbmdNb2RlKQoreworICAgIGlmICgh
W2RldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRpYVR5cGVWaWRlb10pCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKGZhY2luZ01vZGUpIHsKKyAgICBjYXNlIE1lZGlhU3Ry
ZWFtU291cmNlU3RhdGVzOjpVc2VyOgorICAgICAgICBpZiAoW2RldmljZSBwb3NpdGlvbl0gPT0g
QVZDYXB0dXJlRGV2aWNlUG9zaXRpb25Gcm9udCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpFbnZpcm9u
bWVudDoKKyAgICAgICAgaWYgKFtkZXZpY2UgcG9zaXRpb25dID09IEFWQ2FwdHVyZURldmljZVBv
c2l0aW9uQmFjaykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpMZWZ0OgorICAgIGNhc2UgTWVkaWFTdHJl
YW1Tb3VyY2VTdGF0ZXM6OlJpZ2h0OgorICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6
OlVua25vd246CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitDYXB0dXJlRGV2aWNlKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpiZXN0
RGV2aWNlRm9yRmFjaW5nTW9kZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdN
b2RlIGZhY2luZ01vZGUpCit7CisgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0g
Y2FwdHVyZURldmljZUxpc3QoKTsKKyAgICAKKyAgICBzaXplX3QgY291bnQgPSBkZXZpY2VzLnNp
emUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAg
QVZDYXB0dXJlRGV2aWNlVHlwZSAqZGV2aWNlID0gW0FWQ2FwdHVyZURldmljZSBkZXZpY2VXaXRo
VW5pcXVlSUQ6ZGV2aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJRF07CisgICAgICAgIEFTU0VSVChk
ZXZpY2UpOworICAgICAgICAKKyAgICAgICAgaWYgKGRldmljZSAmJiBkZXZpY2VTdXBwb3J0c0Zh
Y2luZ01vZGUoZGV2aWNlLCBmYWNpbmdNb2RlKSkKKyAgICAgICAgICAgIHJldHVybiAmZGV2aWNl
c1tpXTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgQVZDYXB0dXJlRGV2
aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChBVkNhcHR1cmVTZXNzaW9uVHlw
ZSAqc2Vzc2lvbiwgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIHNpemVfdCBjb25zdHJhaW50ID0gdmFs
aWRDb25zdHJhaW50TmFtZXMoKS5maW5kKG5hbWUpOworICAgIGlmIChjb25zdHJhaW50ID09IG5v
dEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoIChjb25zdHJh
aW50KSB7CisgICAgY2FzZSB3aWR0aDoKKyAgICAgICAgaWYgKHR5cGUgPT0gTWVkaWFTdHJlYW1T
b3VyY2U6OkF1ZGlvKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVy
biAhYmVzdFNlc3Npb25QcmVzZXRGb3JWaWRlb1NpemUoc2Vzc2lvbiwgdmFsdWUudG9JbnQoKSwg
MCkuaXNFbXB0eSgpOworICAgIGNhc2UgaGVpZ2h0OgorICAgICAgICBpZiAodHlwZSA9PSBNZWRp
YVN0cmVhbVNvdXJjZTo6QXVkaW8pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgcmV0dXJuICFiZXN0U2Vzc2lvblByZXNldEZvclZpZGVvU2l6ZShzZXNzaW9uLCAwLCB2YWx1
ZS50b0ludCgpKS5pc0VtcHR5KCk7CisgICAgY2FzZSBmcmFtZVJhdGU6IHsKKyAgICAgICAgaWYg
KHR5cGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAKKyAgICAgICAgLy8gSXQgd291bGQgbWFrZSBzZW5zZSB0byB1c2UgW0FW
Q2FwdHVyZUNvbm5lY3Rpb24gdmlkZW9NaW5GcmFtZUR1cmF0aW9uXSBhbmQKKyAgICAgICAgLy8g
W0FWQ2FwdHVyZUNvbm5lY3Rpb24gdmlkZW9NYXhGcmFtZUR1cmF0aW9uXSwgYnV0IHRoZXkgb25s
eSB3b3JrIHdpdGggYSAibGl2ZSIgQVZDYXB0dXJlQ29ubmVjdGlvbi4KKyAgICAgICAgZmxvYXQg
cmF0ZSA9IHZhbHVlLnRvRmxvYXQoKTsKKyAgICAgICAgcmV0dXJuIHJhdGUgPiAwICYmIHJhdGUg
PD0gNjA7CisgICAgfQorICAgIGNhc2UgZ2FpbjogeworICAgICAgICBpZiAodHlwZSAhPSBNZWRp
YVN0cmVhbVNvdXJjZTo6QXVkaW8pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICBmbG9hdCBsZXZlbCA9IHZhbHVlLnRvRmxvYXQoKTsKKyAgICAgICAgcmV0dXJu
IGxldmVsID4gMCAmJiBsZXZlbCA8PSAxOworICAgIH0KKyAgICBjYXNlIGZhY2luZ01vZGU6IHsK
KyAgICAgICAgaWYgKHR5cGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHNpemVfdCBmYWNpbmdNb2RlID0gIHZhbGlkRmFj
aW5nTW9kZXMoKS5maW5kKHZhbHVlKTsKKyAgICAgICAgaWYgKGZhY2luZ01vZGUgIT0gbm90Rm91
bmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBiZXN0RGV2aWNl
Rm9yRmFjaW5nTW9kZShzdGF0aWNfY2FzdDxNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VmlkZW9G
YWNpbmdNb2RlPihmYWNpbmdNb2RlKSk7CisgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6aXNWYWxpZENvbnN0cmFp
bnQoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIHNpemVfdCBjb25zdHJhaW50ID0gdmFsaWRDb25zdHJhaW50TmFtZXMoKS5maW5kKG5hbWUp
OworICAgIGlmIChjb25zdHJhaW50ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoY29uc3RyYWludCA9PSBnYWluKQorICAgICAgICByZXR1cm4gdHlwZSA9PSBN
ZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW87CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmVjdG9y
PFJlZlB0cjxUcmFja1NvdXJjZUluZm8+PiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRTb3Vy
Y2VzSW5mbyhjb25zdCBTdHJpbmcmIC8qcmVxdWVzdE9yaWdpbiovKQoreworICAgIFZlY3RvcjxS
ZWZQdHI8VHJhY2tTb3VyY2VJbmZvPj4gc291cmNlc0luZm87CisKKyAgICBpZiAoIWlzQXZhaWxh
YmxlKCkpCisgICAgICAgIHJldHVybiBzb3VyY2VzSW5mbzsKKworICAgIFZlY3RvcjxDYXB0dXJl
RGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVEZXZpY2VMaXN0KCk7CisgICAgc2l6ZV90IGNvdW50
ID0gZGV2aWNlcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIEFWQ2FwdHVyZURldmljZVR5cGUgKmRldmljZSA9IFtBVkNhcHR1cmVEZXZp
Y2UgZGV2aWNlV2l0aFVuaXF1ZUlEOmRldmljZXNbaV0ubV9jYXB0dXJlRGV2aWNlSURdOworICAg
ICAgICBBU1NFUlQoZGV2aWNlKTsKKworICAgICAgICBpZiAoIWRldmljZXNbaV0ubV9lbmFibGVk
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGRldmljZXNbaV0ubV92aWRl
b1NvdXJjZSkKKyAgICAgICAgICAgIHNvdXJjZXNJbmZvLmFwcGVuZChUcmFja1NvdXJjZUluZm86
OmNyZWF0ZShkZXZpY2VzW2ldLm1fdmlkZW9Tb3VyY2VJZCwgVHJhY2tTb3VyY2VJbmZvOjpWaWRl
bywgZGV2aWNlLmxvY2FsaXplZE5hbWUpKTsKKyAgICAgICAgaWYgKGRldmljZXNbaV0ubV9hdWRp
b1NvdXJjZSkKKyAgICAgICAgICAgIHNvdXJjZXNJbmZvLmFwcGVuZChUcmFja1NvdXJjZUluZm86
OmNyZWF0ZShkZXZpY2VzW2ldLm1fYXVkaW9Tb3VyY2VJZCwgVHJhY2tTb3VyY2VJbmZvOjpBdWRp
bywgZGV2aWNlLmxvY2FsaXplZE5hbWUpKTsKKyAgICB9CisgICAgCisgICAgTE9HKE1lZGlhLCAi
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Z2V0U291cmNlc0luZm8oJXApLCBmb3VuZCAlZCBhY3Rp
dmUgZGV2aWNlcyIsIHRoaXMsIHNvdXJjZXNJbmZvLnNpemUoKSk7CisKKyAgICByZXR1cm4gc291
cmNlc0luZm87Cit9CisKK2Jvb2wgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3Ry
YWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUgdHlwZSwgTWVkaWFDb25z
dHJhaW50cyogY29uc3RyYWludHMsIFN0cmluZyYgaW52YWxpZENvbnN0cmFpbnQpCit7CisgICAg
aWYgKCFpc0F2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNv
bnN0cmFpbnRzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFZlY3RvcjxNZWRpYUNvbnN0
cmFpbnQ+IG1hbmRhdG9yeUNvbnN0cmFpbnRzOworICAgIGNvbnN0cmFpbnRzLT5nZXRNYW5kYXRv
cnlDb25zdHJhaW50cyhtYW5kYXRvcnlDb25zdHJhaW50cyk7CisgICAgaWYgKG1hbmRhdG9yeUNv
bnN0cmFpbnRzLnNpemUoKSkgeworICAgICAgICBSZXRhaW5QdHI8QVZDYXB0dXJlU2Vzc2lvblR5
cGU+IHNlc3Npb24gPSBhZG9wdE5TKFtbQVZDYXB0dXJlU2Vzc2lvbiBhbGxvY10gaW5pdF0pOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hbmRhdG9yeUNvbnN0cmFpbnRzLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQg
PSBtYW5kYXRvcnlDb25zdHJhaW50c1tpXTsKKyAgICAgICAgICAgIGlmICghc2Vzc2lvblN1cHBv
cnRzQ29uc3RyYWludChzZXNzaW9uLmdldCgpLCB0eXBlLCBjb25zdHJhaW50Lm1fbmFtZSwgY29u
c3RyYWludC5tX3ZhbHVlKSkgeworICAgICAgICAgICAgICAgIGludmFsaWRDb25zdHJhaW50ID0g
Y29uc3RyYWludC5tX25hbWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIFZlY3RvcjxNZWRpYUNvbnN0cmFp
bnQ+IG9wdGlvbmFsQ29uc3RyYWludHM7CisgICAgY29uc3RyYWludHMtPmdldE9wdGlvbmFsQ29u
c3RyYWludHMob3B0aW9uYWxDb25zdHJhaW50cyk7CisgICAgaWYgKCFvcHRpb25hbENvbnN0cmFp
bnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG9wdGlvbmFsQ29uc3RyYWludHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
TWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50ID0gb3B0aW9uYWxDb25zdHJhaW50c1tpXTsKKyAg
ICAgICAgaWYgKCFpc1ZhbGlkQ29uc3RyYWludCh0eXBlLCBjb25zdHJhaW50Lm1fbmFtZSkpIHsK
KyAgICAgICAgICAgIGludmFsaWRDb25zdHJhaW50ID0gY29uc3RyYWludC5tX25hbWU7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpiZXN0U291cmNlRm9yVHlwZUFuZENvbnN0cmFpbnRzKE1lZGlhU3RyZWFtU291cmNlOjpUeXBl
IHR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpCit7CisgICAg
aWYgKCFpc0F2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFZlY3RvcjxDYXB0
dXJlRGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVEZXZpY2VMaXN0KCk7CisgICAgc2l6ZV90IGNv
dW50ID0gZGV2aWNlcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CisgICAgICAgIGlmICghZGV2aWNlc1tpXS5tX2VuYWJsZWQpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgdGhlIGNvbnN0cmFpbnRzIHdo
ZW4gY2hvb3NpbmcgYW1vbmcgbXVsdGlwbGUgZGV2aWNlcy4gRm9yIG5vdyBqdXN0IHNlbGVjdCB0
aGUgZmlyc3QgYXZhaWxhYmxlCisgICAgICAgIC8vIGRldmljZSBvZiB0aGUgYXBwcm9wcmlhdGUg
dHlwZS4KKyAgICAgICAgaWYgKHR5cGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvICYmICFk
ZXZpY2VzW2ldLm1fYXVkaW9Tb3VyY2VJZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmICgh
ZGV2aWNlc1tpXS5tX2F1ZGlvU291cmNlKSB7CisgICAgICAgICAgICAgICAgQVZDYXB0dXJlRGV2
aWNlVHlwZSAqZGV2aWNlID0gW0FWQ2FwdHVyZURldmljZSBkZXZpY2VXaXRoVW5pcXVlSUQ6ZGV2
aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJRF07CisgICAgICAgICAgICAgICAgQVNTRVJUKGRldmlj
ZSk7CisgICAgICAgICAgICAgICAgZGV2aWNlc1tpXS5tX2F1ZGlvU291cmNlID0gQVZBdWRpb0Nh
cHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGRldmljZXNbaV0ubV9hdWRpb1NvdXJjZUlkLCBj
b25zdHJhaW50cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXZpY2VzW2ldLm1fYXVk
aW9Tb3VyY2UtPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUpOworICAgICAg
ICAgICAgcmV0dXJuIGRldmljZXNbaV0ubV9hdWRpb1NvdXJjZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICh0eXBlID09IE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbyAmJiAhZGV2aWNlc1tpXS5t
X3ZpZGVvU291cmNlSWQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAoIWRldmljZXNbaV0u
bV92aWRlb1NvdXJjZSkgeworICAgICAgICAgICAgICAgIEFWQ2FwdHVyZURldmljZVR5cGUgKmRl
dmljZSA9IFtBVkNhcHR1cmVEZXZpY2UgZGV2aWNlV2l0aFVuaXF1ZUlEOmRldmljZXNbaV0ubV9j
YXB0dXJlRGV2aWNlSURdOworICAgICAgICAgICAgICAgIEFTU0VSVChkZXZpY2UpOworICAgICAg
ICAgICAgICAgIGRldmljZXNbaV0ubV92aWRlb1NvdXJjZSA9IEFWVmlkZW9DYXB0dXJlU291cmNl
OjpjcmVhdGUoZGV2aWNlLCBkZXZpY2VzW2ldLm1fdmlkZW9Tb3VyY2VJZCwgY29uc3RyYWludHMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGV2aWNlc1tpXS5tX3ZpZGVvU291cmNlLT5z
ZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpMaXZlKTsKKyAgICAgICAgICAgIHJldHVy
biBkZXZpY2VzW2ldLm1fdmlkZW9Tb3VyY2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpyZWdpc3RlckZvckRldmlj
ZU5vdGlmaWNhdGlvbnMoKQoreworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9y
KGRldmljZUNvbm5lY3RlZDopIG5hbWU6QVZDYXB0dXJlRGV2aWNlV2FzQ29ubmVjdGVkTm90aWZp
Y2F0aW9uIG9iamVjdDpuaWxdOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9y
KGRldmljZURpc2Nvbm5lY3RlZDopIG5hbWU6QVZDYXB0dXJlRGV2aWNlV2FzRGlzY29ubmVjdGVk
Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworfQorCit2b2lkIEFWQ2FwdHVyZURldmljZU1hbmFn
ZXI6OmRldmljZUNvbm5lY3RlZCgpCit7CisgICAgcmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0KCk7
Cit9CisKK3ZvaWQgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNlRGlzY29ubmVjdGVkKEFW
Q2FwdHVyZURldmljZVR5cGUqIGRldmljZSkKK3sKKyAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4m
IGRldmljZXMgPSBjYXB0dXJlRGV2aWNlTGlzdCgpOworCisgICAgc2l6ZV90IGNvdW50ID0gZGV2
aWNlcy5zaXplKCk7CisgICAgaWYgKCFjb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3Ry
aW5nIGRldmljZUlEID0gZGV2aWNlLnVuaXF1ZUlEOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBpZiAoZGV2aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJ
RCA9PSBkZXZpY2VJRCkgeworICAgICAgICAgICAgTE9HKE1lZGlhLCAiQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6ZGV2aWNlRGlzY29ubmVjdGVkKCVwKSwgZGV2aWNlICVkIGRpc2FibGVkIiwgdGhp
cywgaSk7CisgICAgICAgICAgICBkZXZpY2VzW2ldLm1fZW5hYmxlZCA9IGZhbHNlOworICAgICAg
ICAgICAgaWYgKGRldmljZXNbaV0ubV9hdWRpb1NvdXJjZSkKKyAgICAgICAgICAgICAgICBkZXZp
Y2VzW2ldLm1fYXVkaW9Tb3VyY2UtPnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgaWYg
KGRldmljZXNbaV0ubV92aWRlb1NvdXJjZSkKKyAgICAgICAgICAgICAgICBkZXZpY2VzW2ldLm1f
dmlkZW9Tb3VyY2UtPnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICB9CisgICAgfQorfQorCitj
b25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmFsaWRD
b25zdHJhaW50TmFtZXMoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEF0b21p
Y1N0cmluZz4sIGNvbnN0cmFpbnRzLCAoKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4gaGVpZ2h0Q29uc3RyYWludCgiaGVpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmlu
Zz4gd2lkdGhDb25zdHJhaW50KCJ3aWR0aCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGZyYW1lUmF0
ZUNvbnN0cmFpbnQoImZyYW1lUmF0ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGZhY2luZ01vZGVD
b25zdHJhaW50KCJmYWNpbmdNb2RlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2FpbkNvbnN0cmFp
bnQoImdhaW4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAKKyAg
ICBpZiAoIWNvbnN0cmFpbnRzLnNpemUoKSkgeworICAgICAgICBjb25zdHJhaW50cy5pbnNlcnQo
d2lkdGgsIHdpZHRoQ29uc3RyYWludCk7CisgICAgICAgIGNvbnN0cmFpbnRzLmluc2VydChoZWln
aHQsIGhlaWdodENvbnN0cmFpbnQpOworICAgICAgICBjb25zdHJhaW50cy5pbnNlcnQoZnJhbWVS
YXRlLCBmcmFtZVJhdGVDb25zdHJhaW50KTsKKyAgICAgICAgY29uc3RyYWludHMuaW5zZXJ0KGZh
Y2luZ01vZGUsIGZhY2luZ01vZGVDb25zdHJhaW50KTsKKyAgICAgICAgY29uc3RyYWludHMuaW5z
ZXJ0KGdhaW4sIGdhaW5Db25zdHJhaW50KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNvbnN0
cmFpbnRzOworfQorCitjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6dmFsaWRGYWNpbmdNb2RlcygpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChW
ZWN0b3I8QXRvbWljU3RyaW5nPiwgbW9kZXMsICgpKTsKKyAgICAKKyAgICBpZiAoIW1vZGVzLnNp
emUoKSkgeworICAgICAgICBtb2Rlcy5pbnNlcnQoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlVz
ZXIsIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKE1lZGlhU3RyZWFtU291cmNl
U3RhdGVzOjpVc2VyKSk7CisgICAgICAgIG1vZGVzLmluc2VydChNZWRpYVN0cmVhbVNvdXJjZVN0
YXRlczo6RW52aXJvbm1lbnQsIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKE1l
ZGlhU3RyZWFtU291cmNlU3RhdGVzOjpFbnZpcm9ubWVudCkpOworICAgICAgICBtb2Rlcy5pbnNl
cnQoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkxlZnQsIE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
OjpmYWNpbmdNb2RlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpMZWZ0KSk7CisgICAgICAgIG1v
ZGVzLmluc2VydChNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6UmlnaHQsIE1lZGlhU3RyZWFtU291
cmNlU3RhdGVzOjpmYWNpbmdNb2RlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpSaWdodCkpOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gbW9kZXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworQGltcGxlbWVudGF0aW9uIFdlYkNvcmVBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyT2JzZXJ2
ZXIKKworLSAoaWQpaW5pdFdpdGhDYWxsYmFjazooQVZDYXB0dXJlRGV2aWNlTWFuYWdlciopY2Fs
bGJhY2sKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICBtX2NhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpZGlzY29ubmVjdAoreworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2
aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZl07CisgICAgbV9jYWxsYmFjayA9IDA7
Cit9CisKKy0gKHZvaWQpZGV2aWNlRGlzY29ubmVjdGVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlm
aWNhdGlvbgoreworICAgIGlmICghbV9jYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYg
KG1fY2FsbGJhY2spIHsKKyAgICAgICAgICAgIEFWQ2FwdHVyZURldmljZVR5cGUgKmRldmljZSA9
IFtub3RpZmljYXRpb24gb2JqZWN0XTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2stPmRldmljZURp
c2Nvbm5lY3RlZChkZXZpY2UpOworICAgICAgICB9CisgICAgfSk7Cit9CisKKy0gKHZvaWQpZGV2
aWNlQ29ubmVjdGVkOihOU05vdGlmaWNhdGlvbiAqKXVudXNlZE5vdGlmaWNhdGlvbgoreworICAg
IFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOworICAgIGlmICghbV9jYWxsYmFjaykK
KyAgICAgICAgcmV0dXJuOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgXnsKKyAgICAgICAgaWYgKG1fY2FsbGJhY2spCisgICAgICAgICAgICBtX2NhbGxi
YWNrLT5kZXZpY2VDb25uZWN0ZWQoKTsKKyAgICB9KTsKK30KKworQGVuZAorCisjZW5kaWYgLy8g
RU5BQkxFKE1FRElBX1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FW
TWVkaWFDYXB0dXJlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBVk1lZGlhQ2FwdHVyZVNvdXJjZV9oCisjZGVmaW5lIEFWTWVkaWFDYXB0
dXJlU291cmNlX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJ
T04pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKworT0JKQ19DTEFTUyBBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXQ7CitPQkpDX0NM
QVNTIEFWQ2FwdHVyZUNvbm5lY3Rpb247CitPQkpDX0NMQVNTIEFWQ2FwdHVyZURldmljZTsKK09C
SkNfQ0xBU1MgQVZDYXB0dXJlT3V0cHV0OworT0JKQ19DTEFTUyBBVkNhcHR1cmVTZXNzaW9uOwor
T0JKQ19DTEFTUyBBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXQ7CitPQkpDX0NMQVNTIFdlYkNvcmVB
Vk1lZGlhQ2FwdHVyZVNvdXJjZU9ic2VydmVyOworCit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNh
bXBsZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQVZNZWRpYUNhcHR1cmVTb3VyY2UgOiBwdWJsaWMgTWVkaWFTdHJlYW1Tb3VyY2Ugewor
cHVibGljOgorICAgIHZpcnR1YWwgfkFWTWVkaWFDYXB0dXJlU291cmNlKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9u
KEFWQ2FwdHVyZU91dHB1dCosIENNU2FtcGxlQnVmZmVyUmVmLCBBVkNhcHR1cmVDb25uZWN0aW9u
KikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNhcHR1cmVTZXNzaW9uU3RvcHBlZFJ1bm5pbmco
KTsKKworcHJvdGVjdGVkOgorICAgIEFWTWVkaWFDYXB0dXJlU291cmNlKEFWQ2FwdHVyZURldmlj
ZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlLCBQYXNzUmVm
UHRyPE1lZGlhQ29uc3RyYWludHM+KTsKKworICAgIHZpcnR1YWwgY29uc3QgTWVkaWFTdHJlYW1T
b3VyY2VTdGF0ZXMmIHN0YXRlcygpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0
UHJvZHVjaW5nRGF0YSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdG9wUHJvZHVjaW5n
RGF0YSgpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldHVwQ2FwdHVyZVNlc3Npb24o
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlcygpID0gMDsKKworICAgIEFWQ2Fw
dHVyZVNlc3Npb24gKnNlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb24uZ2V0KCk7IH0K
KyAgICBBVkNhcHR1cmVEZXZpY2UgKmRldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlLmdl
dCgpOyB9CisgICAgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMqIGN1cnJlbnRTdGF0ZXMoKSB7IHJl
dHVybiAmbV9jdXJyZW50U3RhdGVzOyB9CisgICAgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWlu
dHMoKSB7IHJldHVybiBtX2NvbnN0cmFpbnRzLmdldCgpOyB9CisKKyAgICB2b2lkIHNldFZpZGVv
U2FtcGxlQnVmZmVyRGVsZWdhdGUoQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0Kik7CisgICAgdm9p
ZCBzZXRBdWRpb1NhbXBsZUJ1ZmZlckRlbGVnYXRlKEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dCop
OworCitwcml2YXRlOgorICAgIHZvaWQgc2V0dXBTZXNzaW9uKCk7CisKKyAgICBSZXRhaW5QdHI8
V2ViQ29yZUFWTWVkaWFDYXB0dXJlU291cmNlT2JzZXJ2ZXI+IG1fb2JqY09ic2VydmVyOworICAg
IFJlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBtX2NvbnN0cmFpbnRzOworICAgIE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzIG1fY3VycmVudFN0YXRlczsKKyAgICBSZXRhaW5QdHI8QVZDYXB0dXJlU2Vz
c2lvbj4gbV9zZXNzaW9uOworICAgIFJldGFpblB0cjxBVkNhcHR1cmVEZXZpY2U+IG1fZGV2aWNl
OworICAgIAorICAgIGJvb2wgbV9pc1J1bm5pbmc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gQVZNZWRp
YUNhcHR1cmVTb3VyY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbQkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1l
ZGlhQ2FwdHVyZVNvdXJjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBV
U0UoQVZGT1VOREFUSU9OKQorCisjaW1wb3J0ICJBVk1lZGlhQ2FwdHVyZVNvdXJjZS5oIgorCisj
aW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgiCisjaW1wb3J0
ICJNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oIgorI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJVVUlELmgiCisjaW1wb3J0IDxBVkZv
dW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBv
cnQgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKwor
dHlwZWRlZiBBVkNhcHR1cmVDb25uZWN0aW9uIEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlOwordHlw
ZWRlZiBBVkNhcHR1cmVEZXZpY2UgQVZDYXB0dXJlRGV2aWNlVHlwZTsKK3R5cGVkZWYgQVZDYXB0
dXJlRGV2aWNlSW5wdXQgQVZDYXB0dXJlRGV2aWNlSW5wdXRUeXBlOwordHlwZWRlZiBBVkNhcHR1
cmVPdXRwdXQgQVZDYXB0dXJlT3V0cHV0VHlwZTsKK3R5cGVkZWYgQVZDYXB0dXJlU2Vzc2lvbiBB
VkNhcHR1cmVTZXNzaW9uVHlwZTsKK3R5cGVkZWYgQVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0IEFW
Q2FwdHVyZUF1ZGlvRGF0YU91dHB1dFR5cGU7Cit0eXBlZGVmIEFWQ2FwdHVyZVZpZGVvRGF0YU91
dHB1dCBBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXRUeXBlOworCitTT0ZUX0xJTktfRlJBTUVXT1JL
X09QVElPTkFMKEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQ29y
ZU1lZGlhKQorCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVBdWRpb0Rh
dGFPdXRwdXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVDb25uZWN0
aW9uKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlRGV2aWNlKQorU09G
VF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlRGV2aWNlSW5wdXQpCitTT0ZUX0xJ
TktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVPdXRwdXQpCitTT0ZUX0xJTktfQ0xBU1Mo
QVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRh
dGlvbiwgQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0KQorCisjZGVmaW5lIEFWQ2FwdHVyZUF1ZGlv
RGF0YU91dHB1dCBnZXRBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXRDbGFzcygpCisjZGVmaW5lIEFW
Q2FwdHVyZUNvbm5lY3Rpb24gZ2V0QVZDYXB0dXJlQ29ubmVjdGlvbkNsYXNzKCkKKyNkZWZpbmUg
QVZDYXB0dXJlRGV2aWNlIGdldEFWQ2FwdHVyZURldmljZUNsYXNzKCkKKyNkZWZpbmUgQVZDYXB0
dXJlRGV2aWNlSW5wdXQgZ2V0QVZDYXB0dXJlRGV2aWNlSW5wdXRDbGFzcygpCisjZGVmaW5lIEFW
Q2FwdHVyZU91dHB1dCBnZXRBVkNhcHR1cmVPdXRwdXRDbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVy
ZVNlc3Npb24gZ2V0QVZDYXB0dXJlU2Vzc2lvbkNsYXNzKCkKKyNkZWZpbmUgQVZDYXB0dXJlVmlk
ZW9EYXRhT3V0cHV0IGdldEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dENsYXNzKCkKKworU09GVF9M
SU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZUF1ZGlvLCBOU1N0cmluZyAqKQor
U09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZU11eGVkLCBOU1N0cmlu
ZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZVZpZGVvLCBO
U1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNz
aW9uUHJlc2V0MTI4MHg3MjAsIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5k
YXRpb24sIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwLCBOU1N0cmluZyAqKQorU09GVF9M
SU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MzUyeDI4OCwg
TlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlU2Vz
c2lvblByZXNldExvdywgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlv
biwgQVZDYXB0dXJlU2Vzc2lvbkRpZFN0b3BSdW5uaW5nTm90aWZpY2F0aW9uLCBOU1N0cmluZyAq
KQorCisjZGVmaW5lIEFWTWVkaWFUeXBlQXVkaW8gZ2V0QVZNZWRpYVR5cGVBdWRpbygpCisjZGVm
aW5lIEFWTWVkaWFUeXBlTXV4ZWQgZ2V0QVZNZWRpYVR5cGVNdXhlZCgpCisjZGVmaW5lIEFWTWVk
aWFUeXBlVmlkZW8gZ2V0QVZNZWRpYVR5cGVWaWRlbygpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Np
b25QcmVzZXQxMjgweDcyMCBnZXRBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjAoKQorI2Rl
ZmluZSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0NjQweDQ4MCBnZXRBVkNhcHR1cmVTZXNzaW9uUHJl
c2V0NjQweDQ4MCgpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4IGdldEFW
Q2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4KCkKKyNkZWZpbmUgQVZDYXB0dXJlU2Vzc2lvblBy
ZXNldExvdyBnZXRBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93KCkKKyNkZWZpbmUgQVZDYXB0dXJl
U2Vzc2lvbkRpZFN0b3BSdW5uaW5nTm90aWZpY2F0aW9uIGdldEFWQ2FwdHVyZVNlc3Npb25EaWRT
dG9wUnVubmluZ05vdGlmaWNhdGlvbigpCisKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNU2FtcGxl
QnVmZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24sIENNRm9ybWF0RGVzY3JpcHRpb25SZWYsIChDTVNh
bXBsZUJ1ZmZlclJlZiBzYnVmKSwgKHNidWYpKTsKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNU2Ft
cGxlQnVmZmVyR2V0UHJlc2VudGF0aW9uVGltZVN0YW1wLCBDTVRpbWUsIChDTVNhbXBsZUJ1ZmZl
clJlZiBzYnVmKSwgKHNidWYpKTsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRl
cmZhY2UgV2ViQ29yZUFWTWVkaWFDYXB0dXJlU291cmNlT2JzZXJ2ZXIgOiBOU09iamVjdDxBVkNh
cHR1cmVBdWRpb0RhdGFPdXRwdXRTYW1wbGVCdWZmZXJEZWxlZ2F0ZSwgQVZDYXB0dXJlVmlkZW9E
YXRhT3V0cHV0U2FtcGxlQnVmZmVyRGVsZWdhdGU+Cit7CisgICAgQVZNZWRpYUNhcHR1cmVTb3Vy
Y2UqIG1fY2FsbGJhY2s7Cit9CisKKy0oaWQpaW5pdFdpdGhDYWxsYmFjazooQVZNZWRpYUNhcHR1
cmVTb3VyY2UqKWNhbGxiYWNrOworLSh2b2lkKWRpc2Nvbm5lY3Q7CistKHZvaWQpY2FwdHVyZVNl
c3Npb25TdG9wcGVkUnVubmluZzooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb247CistKHZv
aWQpY2FwdHVyZU91dHB1dDooQVZDYXB0dXJlT3V0cHV0VHlwZSAqKWNhcHR1cmVPdXRwdXQgZGlk
T3V0cHV0U2FtcGxlQnVmZmVyOihDTVNhbXBsZUJ1ZmZlclJlZilzYW1wbGVCdWZmZXIgZnJvbUNv
bm5lY3Rpb246KEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlICopY29ubmVjdGlvbjsKK0BlbmQKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYUF1ZGlv
Q2FwdHVyZVNlcmlhbFF1ZXVlKCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9i
YWxRdWV1ZTsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNw
YXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hf
cXVldWVfY3JlYXRlKCJXZWJDb3JlQVZNZWRpYUNhcHR1cmVTb3VyY2UgYXVkaW8gY2FwdHVyZSBx
dWV1ZSIsIERJU1BBVENIX1FVRVVFX1NFUklBTCk7CisgICAgfSk7CisgICAgcmV0dXJuIGdsb2Jh
bFF1ZXVlOworfQorCitzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYVZpZGVvQ2FwdHVyZVNl
cmlhbFF1ZXVlKCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYWxRdWV1ZTsK
KyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNl
KCZvbmNlVG9rZW4sIF57CisgICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3Jl
YXRlKCJXZWJDb3JlQVZNZWRpYUNhcHR1cmVTb3VyY2UgdmlkZW8gY2FwdHVyZSBxdWV1ZSIsIERJ
U1BBVENIX1FVRVVFX1NFUklBTCk7CisgICAgICAgIGRpc3BhdGNoX3NldF90YXJnZXRfcXVldWUo
Z2xvYmFsUXVldWUsIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoIERJU1BBVENIX1FVRVVFX1BS
SU9SSVRZX0hJR0gsIDApKTsKKyAgICB9KTsKKyAgICByZXR1cm4gZ2xvYmFsUXVldWU7Cit9CisK
K0FWTWVkaWFDYXB0dXJlU291cmNlOjpBVk1lZGlhQ2FwdHVyZVNvdXJjZShBVkNhcHR1cmVEZXZp
Y2VUeXBlKiBkZXZpY2UsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIE1lZGlhU3RyZWFtU291cmNl
OjpUeXBlIHR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpCisg
ICAgOiBNZWRpYVN0cmVhbVNvdXJjZShpZCwgdHlwZSwgZW1wdHlTdHJpbmcoKSkKKyAgICAsIG1f
b2JqY09ic2VydmVyKGFkb3B0TlMoW1tXZWJDb3JlQVZNZWRpYUNhcHR1cmVTb3VyY2VPYnNlcnZl
ciBhbGxvY10gaW5pdFdpdGhDYWxsYmFjazp0aGlzXSkpCisgICAgLCBtX2NvbnN0cmFpbnRzKGNv
bnN0cmFpbnRzKQorICAgICwgbV9kZXZpY2UoZGV2aWNlKQorICAgICwgbV9pc1J1bm5pbmcoZmFs
c2UpCit7CisgICAgc2V0TmFtZShbZGV2aWNlIGxvY2FsaXplZE5hbWVdKTsKKyAgICBtX2N1cnJl
bnRTdGF0ZXMuc2V0U291cmNlVHlwZSh0eXBlID09IE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbyA/
IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpDYW1lcmEgOiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRl
czo6TWljcm9waG9uZSk7Cit9CisKK0FWTWVkaWFDYXB0dXJlU291cmNlOjp+QVZNZWRpYUNhcHR1
cmVTb3VyY2UoKQoreworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
cmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCldOworICAgIFttX29iamNPYnNlcnZl
ciBkaXNjb25uZWN0XTsKKyAgICBbbV9zZXNzaW9uLmdldCgpIHN0b3BSdW5uaW5nXTsKKworICAg
IHNldFJlYWR5U3RhdGUoRW5kZWQpOworfQorCit2b2lkIEFWTWVkaWFDYXB0dXJlU291cmNlOjpz
dGFydFByb2R1Y2luZ0RhdGEoKQoreworICAgIGlmICghbV9zZXNzaW9uKQorCQlzZXR1cFNlc3Np
b24oKTsKKwkKKwlpZiAoW21fc2Vzc2lvbi5nZXQoKSBpc1J1bm5pbmddKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgW21fc2Vzc2lvbi5nZXQoKSBzdGFydFJ1bm5pbmddOworICAgIHNldEVu
YWJsZWQodHJ1ZSk7CisgICAgbV9pc1J1bm5pbmcgPSB0cnVlOworfQorCit2b2lkIEFWTWVkaWFD
YXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgaWYgKCFtX3Nlc3Npb24g
fHwgIVttX3Nlc3Npb24uZ2V0KCkgaXNSdW5uaW5nXSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
W21fc2Vzc2lvbi5nZXQoKSBzdG9wUnVubmluZ107CisgICAgc2V0RW5hYmxlZChmYWxzZSk7Cisg
ICAgbV9pc1J1bm5pbmcgPSB0cnVlOworfQorCitjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRl
cyYgQVZNZWRpYUNhcHR1cmVTb3VyY2U6OnN0YXRlcygpCit7CisgICAgdXBkYXRlU3RhdGVzKCk7
CisgICAgcmV0dXJuIG1fY3VycmVudFN0YXRlczsKK30KKwordm9pZCBBVk1lZGlhQ2FwdHVyZVNv
dXJjZTo6c2V0dXBTZXNzaW9uKCkKK3sKKyAgICBpZiAobV9zZXNzaW9uKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3Nlc3Npb24gPSBhZG9wdE5TKFtbQVZDYXB0dXJlU2Vzc2lvbiBhbGxvY10g
aW5pdF0pOworICAgIAorICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
YWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGNhcHR1
cmVTZXNzaW9uU3RvcHBlZFJ1bm5pbmc6KSBuYW1lOkFWQ2FwdHVyZVNlc3Npb25EaWRTdG9wUnVu
bmluZ05vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAKKyAgICBzZXR1cENhcHR1cmVTZXNz
aW9uKCk7CisgICAgc2V0UmVhZHlTdGF0ZShMaXZlKTsKK30KKyAKK3ZvaWQgQVZNZWRpYUNhcHR1
cmVTb3VyY2U6OmNhcHR1cmVTZXNzaW9uU3RvcHBlZFJ1bm5pbmcoKQoreworICAgIHN0b3BQcm9k
dWNpbmdEYXRhKCk7Cit9CisKK3ZvaWQgQVZNZWRpYUNhcHR1cmVTb3VyY2U6OnNldFZpZGVvU2Ft
cGxlQnVmZmVyRGVsZWdhdGUoQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0VHlwZSogdmlkZW9PdXRw
dXQpCit7CisgICAgW3ZpZGVvT3V0cHV0IHNldFNhbXBsZUJ1ZmZlckRlbGVnYXRlOm1fb2JqY09i
c2VydmVyLmdldCgpIHF1ZXVlOmdsb2JhVmlkZW9DYXB0dXJlU2VyaWFsUXVldWUoKV07Cit9CisK
K3ZvaWQgQVZNZWRpYUNhcHR1cmVTb3VyY2U6OnNldEF1ZGlvU2FtcGxlQnVmZmVyRGVsZWdhdGUo
QVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0VHlwZSogYXVkaW9PdXRwdXQpCit7CisgICAgW2F1ZGlv
T3V0cHV0IHNldFNhbXBsZUJ1ZmZlckRlbGVnYXRlOm1fb2JqY09ic2VydmVyLmdldCgpIHF1ZXVl
Omdsb2JhQXVkaW9DYXB0dXJlU2VyaWFsUXVldWUoKV07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworQGltcGxlbWVudGF0aW9uIFdlYkNvcmVBVk1lZGlhQ2FwdHVyZVNvdXJjZU9ic2Vy
dmVyCisKKy0gKGlkKWluaXRXaXRoQ2FsbGJhY2s6KEFWTWVkaWFDYXB0dXJlU291cmNlKiljYWxs
YmFjaworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIG1fY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClkaXNjb25uZWN0Cit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZp
b3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmXTsKKyAgICBtX2NhbGxiYWNrID0gMDsK
K30KKworLSAodm9pZCljYXB0dXJlU2Vzc2lvblN0b3BwZWRSdW5uaW5nOihOU05vdGlmaWNhdGlv
biAqKW5vdGlmaWNhdGlvbgoreworICAgIFVOVVNFRF9QQVJBTShub3RpZmljYXRpb24pOworCisg
ICAgaWYgKCFtX2NhbGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAobV9jYWxsYmFjaykK
KyAgICAgICAgICAgIG1fY2FsbGJhY2stPmNhcHR1cmVTZXNzaW9uU3RvcHBlZFJ1bm5pbmcoKTsK
KyAgICB9KTsKK30KKworLSAodm9pZCljYXB0dXJlT3V0cHV0OihBVkNhcHR1cmVPdXRwdXRUeXBl
ICopY2FwdHVyZU91dHB1dCBkaWRPdXRwdXRTYW1wbGVCdWZmZXI6KENNU2FtcGxlQnVmZmVyUmVm
KXNhbXBsZUJ1ZmZlciBmcm9tQ29ubmVjdGlvbjooQVZDYXB0dXJlQ29ubmVjdGlvblR5cGUgKilj
b25uZWN0aW9uCit7CisgICAgaWYgKCFtX2NhbGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDRlJldGFpbihzYW1wbGVCdWZmZXIpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmIChtX2NhbGxiYWNrKQorICAgICAgICAgICAg
bV9jYWxsYmFjay0+Y2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0
aW9uKGNhcHR1cmVPdXRwdXQsIHNhbXBsZUJ1ZmZlciwgY29ubmVjdGlvbik7CisgICAgICAgIENG
UmVsZWFzZShzYW1wbGVCdWZmZXIpOworICAgIH0pOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZW
aWRlb0NhcHR1cmVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEFWVmlkZW9DYXB0dXJlU291cmNlX2gKKyNkZWZpbmUgQVZWaWRlb0NhcHR1
cmVTb3VyY2VfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElP
TikKKworI2luY2x1ZGUgIkFWTWVkaWFDYXB0dXJlU291cmNlLmgiCisKK3R5cGVkZWYgY29uc3Qg
c3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24gKkNNRm9ybWF0RGVzY3JpcHRpb25SZWY7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQVZWaWRlb0NhcHR1cmVTb3VyY2UgOiBw
dWJsaWMgQVZNZWRpYUNhcHR1cmVTb3VyY2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8
QVZNZWRpYUNhcHR1cmVTb3VyY2U+IGNyZWF0ZShBVkNhcHR1cmVEZXZpY2UqLCBjb25zdCBBdG9t
aWNTdHJpbmcmLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KTsKKworICAgIHZpcnR1YWwg
UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzPiBjYXBhYmlsaXRpZXMoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBs
ZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dCosIENNU2FtcGxlQnVmZmVyUmVm
LCBBVkNhcHR1cmVDb25uZWN0aW9uKikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgQVZWaWRl
b0NhcHR1cmVTb3VyY2UoQVZDYXB0dXJlRGV2aWNlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwgUGFz
c1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7CisgICAgdmlydHVhbCB+QVZWaWRlb0NhcHR1cmVT
b3VyY2UoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXR1cENhcHR1cmVTZXNzaW9uKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlcygpIE9WRVJSSURFOworCisgICAgYm9v
bCBhcHBseUNvbnN0cmFpbnRzKE1lZGlhQ29uc3RyYWludHMqKTsKKyAgICBib29sIHNldEZyYW1l
UmF0ZUNvbnN0cmFpbnQoZmxvYXQgbWluRnJhbWVSYXRlLCBmbG9hdCBtYXhGcmFtZVJhdGUpOwor
CisgICAgdm9pZCBjYWxjdWxhdGVGcmFtZXJhdGUoQ01TYW1wbGVCdWZmZXJSZWYpOworCisgICAg
UmV0YWluUHRyPEFWQ2FwdHVyZUNvbm5lY3Rpb24+IG1fdmlkZW9Db25uZWN0aW9uOworICAgIFJl
dGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb247
CisgICAgVmVjdG9yPEZsb2F0NjQ+IG1fdmlkZW9GcmFtZVRpbWVTdGFtcHM7CisgICAgRmxvYXQ2
NCBtX2ZyYW1lUmF0ZTsKKwlpbnQzMl90IG1fd2lkdGg7CisJaW50MzJfdCBtX2hlaWdodDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCisKKyNlbmRpZiAvLyBBVlZpZGVvQ2FwdHVyZVNvdXJjZV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlk
ZW9DYXB0dXJlU291cmNlLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbXBvcnQgIkFWVmlk
ZW9DYXB0dXJlU291cmNlLmgiCisKKyNpbXBvcnQgIkFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCIK
KyNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9y
dCAiTWVkaWFDb25zdHJhaW50cy5oIgorI2ltcG9ydCAiTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMu
aCIKKyNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgor
I2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8b2JqYy9ydW50
aW1lLmg+CisKK3R5cGVkZWYgQVZDYXB0dXJlQ29ubmVjdGlvbiBBVkNhcHR1cmVDb25uZWN0aW9u
VHlwZTsKK3R5cGVkZWYgQVZDYXB0dXJlRGV2aWNlIEFWQ2FwdHVyZURldmljZVR5cGU7Cit0eXBl
ZGVmIEFWQ2FwdHVyZURldmljZUlucHV0IEFWQ2FwdHVyZURldmljZUlucHV0VHlwZTsKK3R5cGVk
ZWYgQVZDYXB0dXJlT3V0cHV0IEFWQ2FwdHVyZU91dHB1dFR5cGU7Cit0eXBlZGVmIEFWQ2FwdHVy
ZVZpZGVvRGF0YU91dHB1dCBBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXRUeXBlOworCitTT0ZUX0xJ
TktfRlJBTUVXT1JLX09QVElPTkFMKEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19GUkFNRVdPUktf
T1BUSU9OQUwoQ29yZU1lZGlhKQorCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNh
cHR1cmVDb25uZWN0aW9uKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJl
RGV2aWNlKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlRGV2aWNlSW5w
dXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVPdXRwdXQpCitTT0ZU
X0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXQpCisKKyNk
ZWZpbmUgQVZDYXB0dXJlQ29ubmVjdGlvbiBnZXRBVkNhcHR1cmVDb25uZWN0aW9uQ2xhc3MoKQor
I2RlZmluZSBBVkNhcHR1cmVEZXZpY2UgZ2V0QVZDYXB0dXJlRGV2aWNlQ2xhc3MoKQorI2RlZmlu
ZSBBVkNhcHR1cmVEZXZpY2VJbnB1dCBnZXRBVkNhcHR1cmVEZXZpY2VJbnB1dENsYXNzKCkKKyNk
ZWZpbmUgQVZDYXB0dXJlT3V0cHV0IGdldEFWQ2FwdHVyZU91dHB1dENsYXNzKCkKKyNkZWZpbmUg
QVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0IGdldEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dENsYXNz
KCkKKworU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZUF1ZGlvLCBO
U1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZVZp
ZGVvLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1
cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjAsIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihB
VkZvdW5kYXRpb24sIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwLCBOU1N0cmluZyAqKQor
U09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MzUy
eDI4OCwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0
dXJlU2Vzc2lvblByZXNldExvdywgTlNTdHJpbmcgKikKKworI2RlZmluZSBBVk1lZGlhVHlwZVZp
ZGVvIGdldEFWTWVkaWFUeXBlVmlkZW8oKQorI2RlZmluZSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0
MTI4MHg3MjAgZ2V0QVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwKCkKKyNkZWZpbmUgQVZD
YXB0dXJlU2Vzc2lvblByZXNldDY0MHg0ODAgZ2V0QVZDYXB0dXJlU2Vzc2lvblByZXNldDY0MHg0
ODAoKQorI2RlZmluZSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MzUyeDI4OCBnZXRBVkNhcHR1cmVT
ZXNzaW9uUHJlc2V0MzUyeDI4OCgpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXRMb3cg
Z2V0QVZDYXB0dXJlU2Vzc2lvblByZXNldExvdygpCisKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENN
U2FtcGxlQnVmZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24sIENNRm9ybWF0RGVzY3JpcHRpb25SZWYs
IChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVmKSwgKHNidWYpKTsKK1NPRlRfTElOSyhDb3JlTWVkaWEs
IENNU2FtcGxlQnVmZmVyR2V0UHJlc2VudGF0aW9uVGltZVN0YW1wLCBDTVRpbWUsIChDTVNhbXBs
ZUJ1ZmZlclJlZiBzYnVmKSwgKHNidWYpKTsKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNVGltZUNv
bXBhcmUsIGludDMyX3QsIChDTVRpbWUgdGltZTEsIENNVGltZSB0aW1lMiksICh0aW1lMSwgdGlt
ZTIpKQorU09GVF9MSU5LKENvcmVNZWRpYSwgQ01UaW1lTWFrZSwgQ01UaW1lLCAoaW50NjRfdCB2
YWx1ZSwgaW50MzJfdCB0aW1lc2NhbGUpLCAodmFsdWUsIHRpbWVzY2FsZSkpCitTT0ZUX0xJTkso
Q29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25zLCBDTVZpZGVv
RGltZW5zaW9ucywgKENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiB2aWRlb0Rlc2MpLCAodmlk
ZW9EZXNjKSk7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEFWTWVkaWFDYXB0dXJl
U291cmNlPiBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKEFWQ2FwdHVyZURldmljZVR5cGUq
IGRldmljZSwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFp
bnRzPiBjb25zdHJhaW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQVZWaWRlb0NhcHR1
cmVTb3VyY2UoZGV2aWNlLCBpZCwgY29uc3RyYWludCkpOworfQorCitBVlZpZGVvQ2FwdHVyZVNv
dXJjZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2UoQVZDYXB0dXJlRGV2aWNlVHlwZSogZGV2aWNlLCBj
b25zdCBBdG9taWNTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGNvbnN0
cmFpbnQpCisgICAgOiBBVk1lZGlhQ2FwdHVyZVNvdXJjZShkZXZpY2UsIGlkLCBNZWRpYVN0cmVh
bVNvdXJjZTo6VmlkZW8sIGNvbnN0cmFpbnQpCisgICAgLCBtX2ZyYW1lUmF0ZSgwKQorICAgICwg
bV93aWR0aCgwKQorICAgICwgbV9oZWlnaHQoMCkKK3sKKyAgICBjdXJyZW50U3RhdGVzKCktPnNl
dFNvdXJjZUlkKGlkKTsKKyAgICBjdXJyZW50U3RhdGVzKCktPnNldFNvdXJjZVR5cGUoTWVkaWFT
dHJlYW1Tb3VyY2VTdGF0ZXM6OkNhbWVyYSk7Cit9CisKK0FWVmlkZW9DYXB0dXJlU291cmNlOjp+
QVZWaWRlb0NhcHR1cmVTb3VyY2UoKQoreworfQorCitSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VD
YXBhYmlsaXRpZXM+IEFWVmlkZW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQVZWaWRl
b0NhcHR1cmVTb3VyY2U6OnVwZGF0ZVN0YXRlcygpCit7CisgICAgTWVkaWFTdHJlYW1Tb3VyY2VT
dGF0ZXMqIHN0YXRlcyA9IGN1cnJlbnRTdGF0ZXMoKTsKKworICAgIGlmIChbZGV2aWNlKCkgcG9z
aXRpb25dID09IEFWQ2FwdHVyZURldmljZVBvc2l0aW9uRnJvbnQpCisgICAgICAgIHN0YXRlcy0+
c2V0RmFjaW5nTW9kZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VXNlcik7CisgICAgZWxzZSBp
ZiAoW2RldmljZSgpIHBvc2l0aW9uXSA9PSBBVkNhcHR1cmVEZXZpY2VQb3NpdGlvbkJhY2spCisg
ICAgICAgIHN0YXRlcy0+c2V0RmFjaW5nTW9kZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6RW52
aXJvbm1lbnQpOworICAgIGVsc2UKKyAgICAgICAgc3RhdGVzLT5zZXRGYWNpbmdNb2RlKE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzOjpVbmtub3duKTsKKyAgICAKKyAgICBzdGF0ZXMtPnNldEZyYW1l
UmF0ZShtX2ZyYW1lUmF0ZSk7CisgICAgc3RhdGVzLT5zZXRXaWR0aChtX3dpZHRoKTsKKyAgICBz
dGF0ZXMtPnNldEhlaWdodChtX2hlaWdodCk7CisgICAgc3RhdGVzLT5zZXRBc3BlY3RSYXRpbyhz
dGF0aWNfY2FzdDxmbG9hdD4obV93aWR0aCkgLyBtX2hlaWdodCk7Cit9CisKK2Jvb2wgQVZWaWRl
b0NhcHR1cmVTb3VyY2U6OnNldEZyYW1lUmF0ZUNvbnN0cmFpbnQoZmxvYXQgbWluRnJhbWVSYXRl
LCBmbG9hdCBtYXhGcmFtZVJhdGUpCit7CisgICAgQVZGcmFtZVJhdGVSYW5nZSAqYmVzdEZyYW1l
UmF0ZVJhbmdlID0gMDsKKworCWZvciAoQVZGcmFtZVJhdGVSYW5nZSAqZnJhbWVSYXRlUmFuZ2Ug
aW4gW1tkZXZpY2UoKSBhY3RpdmVGb3JtYXRdIHZpZGVvU3VwcG9ydGVkRnJhbWVSYXRlUmFuZ2Vz
XSkgeworICAgICAgICBpZiAoIW1heEZyYW1lUmF0ZSkgeworICAgICAgICAgICAgaWYgKG1pbkZy
YW1lUmF0ZSA9PSBbZnJhbWVSYXRlUmFuZ2UgbWluRnJhbWVSYXRlXSkKKyAgICAgICAgICAgICAg
ICBiZXN0RnJhbWVSYXRlUmFuZ2UgPSBmcmFtZVJhdGVSYW5nZTsKKyAgICAgICAgfSBlbHNlIGlm
IChtaW5GcmFtZVJhdGUgPj0gW2ZyYW1lUmF0ZVJhbmdlIG1pbkZyYW1lUmF0ZV0gJiYgbWF4RnJh
bWVSYXRlIDw9IFtmcmFtZVJhdGVSYW5nZSBtYXhGcmFtZVJhdGVdKSB7CisgICAgICAgICAgICBp
ZiAoQ01USU1FX0NPTVBBUkVfSU5MSU5FKFtmcmFtZVJhdGVSYW5nZSBtaW5GcmFtZUR1cmF0aW9u
XSwgPiwgW2Jlc3RGcmFtZVJhdGVSYW5nZSBtaW5GcmFtZUR1cmF0aW9uXSkpCisgICAgICAgICAg
ICAgICAgYmVzdEZyYW1lUmF0ZVJhbmdlID0gZnJhbWVSYXRlUmFuZ2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgaWYgKCFiZXN0RnJhbWVSYXRlUmFuZ2UpIHsKKyAgICAgICAgTE9HKE1l
ZGlhLCAiQVZWaWRlb0NhcHR1cmVTb3VyY2U6OnNldEZyYW1lUmF0ZUNvbnN0cmFpbnQoJXApLCBm
cmFtZSByYXRlIHJhbmdlICVmLi4lZiBub3Qgc3VwcG9ydGVkIGJ5IHZpZGVvIGRldmljZSIsIHRo
aXMsIG1pbkZyYW1lUmF0ZSwgbWF4RnJhbWVSYXRlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICAKKwlOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBAdHJ5IHsKKyAgICAgICAg
aWYgKFtkZXZpY2UoKSBsb2NrRm9yQ29uZmlndXJhdGlvbjomZXJyb3JdKSB7CisgICAgICAgICAg
ICBbZGV2aWNlKCkgc2V0QWN0aXZlVmlkZW9NaW5GcmFtZUR1cmF0aW9uOltiZXN0RnJhbWVSYXRl
UmFuZ2UgbWluRnJhbWVEdXJhdGlvbl1dOworICAgICAgICAgICAgaWYgKG1heEZyYW1lUmF0ZSkK
KyAgICAgICAgICAgICAgICBbZGV2aWNlKCkgc2V0QWN0aXZlVmlkZW9NYXhGcmFtZUR1cmF0aW9u
OltiZXN0RnJhbWVSYXRlUmFuZ2UgbWF4RnJhbWVEdXJhdGlvbl1dOworICAgICAgICAgICAgW2Rl
dmljZSgpIHVubG9ja0ZvckNvbmZpZ3VyYXRpb25dOworICAgICAgICB9CisgICAgfSBAY2F0Y2go
TlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgeworICAgICAgICBMT0coTWVkaWEsICJBVlZpZGVvQ2Fw
dHVyZVNvdXJjZTo6c2V0RnJhbWVSYXRlQ29uc3RyYWludCglcCksIGV4Y2VwdGlvbiB0aHJvd24g
Y29uZmlndXJpbmcgZGV2aWNlOiA8JXM+ICVzIiwgdGhpcywgW1tleGNlcHRpb24gbmFtZV0gVVRG
OFN0cmluZ10sIFtbZXhjZXB0aW9uIHJlYXNvbl0gVVRGOFN0cmluZ10pOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChlcnJvcikgeworICAgICAgICBMT0coTWVk
aWEsICJBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6c2V0RnJhbWVSYXRlQ29uc3RyYWludCglcCksIGZh
aWxlZCB0byBsb2NrIHZpZGVvIGRldmljZSBmb3IgY29uZmlndXJhdGlvbjogJXMiLCB0aGlzLCBb
W2Vycm9yIGxvY2FsaXplZERlc2NyaXB0aW9uXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKK05TTG9nKEAic2V0IGZyYW1lIHJhdGUgdG8gJWYiLCBbYmVzdEZy
YW1lUmF0ZVJhbmdlIG1pbkZyYW1lUmF0ZV0pOworICAgIExPRyhNZWRpYSwgIkFWVmlkZW9DYXB0
dXJlU291cmNlOjpzZXRGcmFtZVJhdGVDb25zdHJhaW50KCVwKSAtIHNldCBmcmFtZSByYXRlIHJh
bmdlIHRvICVmLi4lZiIsIHRoaXMsIG1pbkZyYW1lUmF0ZSwgbWF4RnJhbWVSYXRlKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6YXBwbHlDb25zdHJh
aW50cyhNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKK3sKKyAgICBBU1NFUlQoY29uc3Ry
YWludHMpOworCisgICAgY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIGNvbnN0cmFpbnROYW1l
cyA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnZhbGlkQ29uc3RyYWludE5hbWVzKCk7CisgICAg
U3RyaW5nIHdpZHRoQ29uc3RyYWludDsKKyAgICBTdHJpbmcgaGVpZ2h0Q29uc3RyYWludDsKKwor
ICAgIGNvbnN0cmFpbnRzLT5nZXRNYW5kYXRvcnlDb25zdHJhaW50VmFsdWUoY29uc3RyYWludE5h
bWVzW0FWQ2FwdHVyZURldmljZU1hbmFnZXI6OndpZHRoXSwgd2lkdGhDb25zdHJhaW50KTsKKyAg
ICBjb25zdHJhaW50cy0+Z2V0TWFuZGF0b3J5Q29uc3RyYWludFZhbHVlKGNvbnN0cmFpbnROYW1l
c1tBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpoZWlnaHRdLCBoZWlnaHRDb25zdHJhaW50KTsKKwor
ICAgIGludCB3aWR0aCA9IHdpZHRoQ29uc3RyYWludC50b0ludCgpOworICAgIGludCBoZWlnaHQg
PSBoZWlnaHRDb25zdHJhaW50LnRvSW50KCk7CisgICAgaWYgKCF3aWR0aCAmJiAhaGVpZ2h0KSB7
CisgICAgICAgIGNvbnN0cmFpbnRzLT5nZXRPcHRpb25hbENvbnN0cmFpbnRWYWx1ZShjb25zdHJh
aW50TmFtZXNbQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6d2lkdGhdLCB3aWR0aENvbnN0cmFpbnQp
OworICAgICAgICBjb25zdHJhaW50cy0+Z2V0T3B0aW9uYWxDb25zdHJhaW50VmFsdWUoY29uc3Ry
YWludE5hbWVzW0FWQ2FwdHVyZURldmljZU1hbmFnZXI6OmhlaWdodF0sIGhlaWdodENvbnN0cmFp
bnQpOworICAgICAgICB3aWR0aCA9IHdpZHRoQ29uc3RyYWludC50b0ludCgpOworICAgICAgICBo
ZWlnaHQgPSBoZWlnaHRDb25zdHJhaW50LnRvSW50KCk7CisgICAgfQorICAgIAorICAgIGlmICh3
aWR0aCB8fCBoZWlnaHQpIHsKKyAgICAgICAgTlNTdHJpbmcgKnByZXNldCA9IEFWQ2FwdHVyZURl
dmljZU1hbmFnZXI6OmJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlkZW9TaXplKHNlc3Npb24oKSwgd2lk
dGgsIGhlaWdodCk7CisgICAgICAgIGlmICghcHJlc2V0IHx8ICFbc2Vzc2lvbigpIGNhblNldFNl
c3Npb25QcmVzZXQ6cHJlc2V0XSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIFtzZXNzaW9uKCkgc2V0U2Vzc2lvblByZXNldDpwcmVzZXRdOworICAgIH0KKwor
ICAgIFN0cmluZyBmcmFtZVJhdGVDb25zdHJhaW50OworICAgIGNvbnN0cmFpbnRzLT5nZXRNYW5k
YXRvcnlDb25zdHJhaW50VmFsdWUoY29uc3RyYWludE5hbWVzW0FWQ2FwdHVyZURldmljZU1hbmFn
ZXI6OmZyYW1lUmF0ZV0sIGZyYW1lUmF0ZUNvbnN0cmFpbnQpOworICAgIGZsb2F0IGZyYW1lUmF0
ZSA9IGZyYW1lUmF0ZUNvbnN0cmFpbnQudG9GbG9hdCgpOworICAgIGlmICghZnJhbWVSYXRlKSB7
CisgICAgICAgIGNvbnN0cmFpbnRzLT5nZXRPcHRpb25hbENvbnN0cmFpbnRWYWx1ZShjb25zdHJh
aW50TmFtZXNbQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZnJhbWVSYXRlXSwgZnJhbWVSYXRlQ29u
c3RyYWludCk7CisgICAgICAgIGZyYW1lUmF0ZSA9IGZyYW1lUmF0ZUNvbnN0cmFpbnQudG9GbG9h
dCgpOworICAgIH0KKyAgICBpZiAoZnJhbWVSYXRlICYmICFzZXRGcmFtZVJhdGVDb25zdHJhaW50
KGZyYW1lUmF0ZSwgMCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpzZXR1cENhcHR1cmVTZXNzaW9uKCkK
K3sKKyAgICBSZXRhaW5QdHI8QVZDYXB0dXJlRGV2aWNlSW5wdXRUeXBlPiB2aWRlb0luID0gYWRv
cHROUyhbW0FWQ2FwdHVyZURldmljZUlucHV0IGFsbG9jXSBpbml0V2l0aERldmljZTpkZXZpY2Uo
KSBlcnJvcjpuaWxdKTsKKyAgICBBU1NFUlQoW3Nlc3Npb24oKSBjYW5BZGRJbnB1dDp2aWRlb0lu
LmdldCgpXSk7CisgICAgaWYgKFtzZXNzaW9uKCkgY2FuQWRkSW5wdXQ6dmlkZW9Jbi5nZXQoKV0p
CisgICAgICAgIFtzZXNzaW9uKCkgYWRkSW5wdXQ6dmlkZW9Jbi5nZXQoKV07CisJCisgICAgaWYg
KGNvbnN0cmFpbnRzKCkpCisgICAgICAgIGFwcGx5Q29uc3RyYWludHMoY29uc3RyYWludHMoKSk7
CisKKyAgICBSZXRhaW5QdHI8QVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0VHlwZT4gdmlkZW9PdXRw
dXQgPSBhZG9wdE5TKFtbQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0IGFsbG9jXSBpbml0XSk7Cisg
ICAgc2V0VmlkZW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZSh2aWRlb091dHB1dC5nZXQoKSk7CisgICAg
QVNTRVJUKFtzZXNzaW9uKCkgY2FuQWRkT3V0cHV0OnZpZGVvT3V0cHV0LmdldCgpXSk7CisgICAg
aWYgKFtzZXNzaW9uKCkgY2FuQWRkT3V0cHV0OnZpZGVvT3V0cHV0LmdldCgpXSkKKyAgICAgICAg
W3Nlc3Npb24oKSBhZGRPdXRwdXQ6dmlkZW9PdXRwdXQuZ2V0KCldOworCQorCW1fdmlkZW9Db25u
ZWN0aW9uID0gYWRvcHROUyhbdmlkZW9PdXRwdXQuZ2V0KCkgY29ubmVjdGlvbldpdGhNZWRpYVR5
cGU6QVZNZWRpYVR5cGVWaWRlb10pOworfQorCit2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpj
YWxjdWxhdGVGcmFtZXJhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKQoreworICAg
IENNVGltZSBzYW1wbGVUaW1lID0gQ01TYW1wbGVCdWZmZXJHZXRQcmVzZW50YXRpb25UaW1lU3Rh
bXAoc2FtcGxlQnVmZmVyKTsKKyAgICBpZiAoIUNNVElNRV9JU19OVU1FUklDKHNhbXBsZVRpbWUp
KQorICAgICAgICByZXR1cm47CisKKwlGbG9hdDY0IGZyYW1lVGltZSA9IENNVGltZUdldFNlY29u
ZHMoc2FtcGxlVGltZSk7CisgICAgRmxvYXQ2NCBvbmVTZWNvbmRBZ28gPSBmcmFtZVRpbWUgLSAx
OworICAgIAorICAgIG1fdmlkZW9GcmFtZVRpbWVTdGFtcHMuYXBwZW5kKGZyYW1lVGltZSk7Cisg
ICAgCisgICAgd2hpbGUgKG1fdmlkZW9GcmFtZVRpbWVTdGFtcHNbMF0gPCBvbmVTZWNvbmRBZ28p
CisgICAgICAgIG1fdmlkZW9GcmFtZVRpbWVTdGFtcHMucmVtb3ZlKDApOworICAgIAorICAgIG1f
ZnJhbWVSYXRlID0gKG1fZnJhbWVSYXRlICsgbV92aWRlb0ZyYW1lVGltZVN0YW1wcy5zaXplKCkp
IC8gMjsKK30KKyAgICAKK3ZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVPdXRwdXRE
aWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbihBVkNhcHR1cmVPdXRwdXRUeXBlKiwg
Q01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBBVkNhcHR1cmVDb25uZWN0aW9uVHlwZSop
Cit7CisgICAgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IENNU2Ft
cGxlQnVmZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24oc2FtcGxlQnVmZmVyKTsKKyAgICBpZiAoIWZv
cm1hdERlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBDRlJldGFpbihmb3JtYXRE
ZXNjcmlwdGlvbik7CisgICAgbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uID0gYWRvcHRDRihmb3Jt
YXREZXNjcmlwdGlvbik7CisgICAgY2FsY3VsYXRlRnJhbWVyYXRlKHNhbXBsZUJ1ZmZlcik7CisK
KyAgICBDTVZpZGVvRGltZW5zaW9ucyBkaW1lbnNpb25zID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0
aW9uR2V0RGltZW5zaW9ucyhmb3JtYXREZXNjcmlwdGlvbik7CisgICAgbV93aWR0aCA9IGRpbWVu
c2lvbnMud2lkdGg7CisgICAgbV9oZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9NZWRpYVN0cmVhbUNl
bnRlck1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01lZGlhU3RyZWFtQ2VudGVyTWFjLmNwcAkocmV2aXNpb24gMTU4MDI1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01lZGlhU3RyZWFtQ2VudGVy
TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEwIEBACiAKICNpbmNsdWRlICJN
ZWRpYVN0cmVhbUNlbnRlck1hYy5oIgogCisjaW5jbHVkZSAiQVZDYXB0dXJlRGV2aWNlTWFuYWdl
ci5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQuaCIKICNpbmNsdWRlICJN
ZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrU291cmNl
c1JlcXVlc3RDbGllbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU3LDIwICs1Nyw4
MSBAQCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6fk1lZGlhU3RyZWFtQ2VudGVyCiB7CiB9CiAKLXZv
aWQgTWVkaWFTdHJlYW1DZW50ZXJNYWM6OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NS
ZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJh
aW50cz4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pCit2b2lkIE1lZGlhU3RyZWFtQ2Vu
dGVyTWFjOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
Q3JlYXRpb25DbGllbnQ+IHBycFF1ZXJ5Q2xpZW50LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWlu
dHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9D
b25zdHJhaW50cykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlZlB0cjxNZWRpYVN0
cmVhbUNyZWF0aW9uQ2xpZW50PiBjbGllbnQgPSBwcnBRdWVyeUNsaWVudDsKKyAgICAKKyAgICBB
U1NFUlQoY2xpZW50KTsKKworICAgIGlmIChhdWRpb0NvbnN0cmFpbnRzKSB7CisgICAgICAgIFN0
cmluZyBpbnZhbGlkQ29uc3RyYWludDsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
c2hhcmVkKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2U6
OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CisgICAg
ICAgIGlmICghaW52YWxpZENvbnN0cmFpbnQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjbGll
bnQtPmNvbnN0cmFpbnRzSW52YWxpZChpbnZhbGlkQ29uc3RyYWludCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodmlkZW9Db25zdHJhaW50cykgewor
ICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7CisgICAgICAgIEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OnNoYXJlZCgpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKE1lZGlhU3Ry
ZWFtU291cmNlOjpWaWRlbywgdmlkZW9Db25zdHJhaW50cy5nZXQoKSwgaW52YWxpZENvbnN0cmFp
bnQpOworICAgICAgICBpZiAoIWludmFsaWRDb25zdHJhaW50LmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgY2xpZW50LT5jb25zdHJhaW50c0ludmFsaWQoaW52YWxpZENvbnN0cmFpbnQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgY2xpZW50LT5jb25zdHJh
aW50c1ZhbGlkYXRlZCgpOwogfQogICAgIAotdm9pZCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6Y3Jl
YXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiwgUGFz
c1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPikK
K3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJNYWM6OmNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4gcHJwUXVlcnlDbGllbnQsIFBhc3NSZWZQdHI8TWVk
aWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFp
bnRzPiB2aWRlb0NvbnN0cmFpbnRzKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUmVm
UHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+IGNsaWVudCA9IHBycFF1ZXJ5Q2xpZW50Owor
ICAgIAorICAgIEFTU0VSVChjbGllbnQpOworICAgIAorICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFT
dHJlYW1Tb3VyY2U+PiBhdWRpb1NvdXJjZXM7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVh
bVNvdXJjZT4+IHZpZGVvU291cmNlczsKKyAgICAKKyAgICBpZiAoYXVkaW9Db25zdHJhaW50cykg
eworICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7CisgICAgICAgIEFWQ2FwdHVyZURl
dmljZU1hbmFnZXI6OnNoYXJlZCgpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKE1lZGlh
U3RyZWFtU291cmNlOjpBdWRpbywgYXVkaW9Db25zdHJhaW50cy5nZXQoKSwgaW52YWxpZENvbnN0
cmFpbnQpOworICAgICAgICBpZiAoIWludmFsaWRDb25zdHJhaW50LmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgY2xpZW50LT5mYWlsZWRUb0NyZWF0ZVN0cmVhbVdpdGhDb25zdHJhaW50c0Vycm9y
KGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBhdWRpb1NvdXJjZSA9IEFW
Q2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLmJlc3RTb3VyY2VGb3JUeXBlQW5kQ29uc3Ry
YWludHMoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpKTsK
KyAgICAgICAgQVNTRVJUKGF1ZGlvU291cmNlKTsKKyAgICAgICAgCisgICAgICAgIGF1ZGlvU291
cmNlcy5hcHBlbmQoYXVkaW9Tb3VyY2UucmVsZWFzZSgpKTsKKyAgICB9CisgICAgCisgICAgaWYg
KHZpZGVvQ29uc3RyYWludHMpIHsKKyAgICAgICAgU3RyaW5nIGludmFsaWRDb25zdHJhaW50Owor
ICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKS52ZXJpZnlDb25zdHJhaW50
c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMu
Z2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgaWYgKCFpbnZhbGlkQ29uc3RyYWlu
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNsaWVudC0+ZmFpbGVkVG9DcmVhdGVTdHJlYW1X
aXRoQ29uc3RyYWludHNFcnJvcihpbnZhbGlkQ29uc3RyYWludCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJj
ZT4gdmlkZW9Tb3VyY2UgPSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKS5iZXN0U291
cmNlRm9yVHlwZUFuZENvbnN0cmFpbnRzKE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbywgdmlkZW9D
b25zdHJhaW50cy5nZXQoKSk7CisgICAgICAgIEFTU0VSVCh2aWRlb1NvdXJjZSk7CisgICAgICAg
IAorICAgICAgICB2aWRlb1NvdXJjZXMuYXBwZW5kKHZpZGVvU291cmNlLnJlbGVhc2UoKSk7Cisg
ICAgfQorICAgIAorICAgIGNsaWVudC0+ZGlkQ3JlYXRlU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBNZWRpYVN0cmVhbURlc2Ny
aXB0b3I6OklzTm90RW5kZWQpKTsKIH0KIAotYm9vbCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6Z2V0
TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNl
c1JlcXVlc3RDbGllbnQ+KQorYm9vbCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6Z2V0TWVkaWFTdHJl
YW1UcmFja1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RD
bGllbnQ+IHBycENsaWVudCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBm
YWxzZTsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50PiBy
ZXF1ZXN0Q2xpZW50ID0gcHJwQ2xpZW50OworCisgICAgVmVjdG9yPFJlZlB0cjxUcmFja1NvdXJj
ZUluZm8+PiBzb3VyY2VzID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2hhcmVkKCkuZ2V0U291
cmNlc0luZm8ocmVxdWVzdENsaWVudC0+cmVxdWVzdE9yaWdpbigpKTsKKworICAgIHJlcXVlc3RD
bGllbnQtPmRpZENvbXBsZXRlUmVxdWVzdChzb3VyY2VzKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhU3RyZWFtQ2VudGVyLmNwcAkocmV2aXNpb24gMTU4
MDI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxNCArOTEsMTQgQEAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZU1vY2tTb3VyY2VzKCkKICAgICBtb2NrU291cmNlMS0+bV9jYXBhYmlsaXRpZXMtPnNl
dEFzcGVjdFJhdGlvUmFuZ2UoTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXR5UmFuZ2UoNCAvIDMu
MGYsIDE2IC8gOS4wZiwgdHJ1ZSkpOwogICAgIG1vY2tTb3VyY2UxLT5tX2NhcGFiaWxpdGllcy0+
c2V0Vm9sdW1lUmFuZ2UoTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXR5UmFuZ2UoMTBVTCwgOTBV
TCwgdHJ1ZSkpOwogCi0gICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy5zb3VyY2VUeXBl
ID0gTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkNhbWVyYTsKLSAgICBtb2NrU291cmNlMS0+bV9j
dXJyZW50U3RhdGVzLnNvdXJjZUlkID0gbW9ja1NvdXJjZTEtPmlkKCk7Ci0gICAgbW9ja1NvdXJj
ZTEtPm1fY3VycmVudFN0YXRlcy5mYWNpbmdNb2RlID0gTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6
OlVzZXI7Ci0gICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy53aWR0aCA9IDE5MjA7Ci0g
ICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy5oZWlnaHQgPSAxMDgwOwotICAgIG1vY2tT
b3VyY2UxLT5tX2N1cnJlbnRTdGF0ZXMuZnJhbWVSYXRlID0gMzA7Ci0gICAgbW9ja1NvdXJjZTEt
Pm1fY3VycmVudFN0YXRlcy5hc3BlY3RSYXRpbyA9IDE2IC8gOS4wZjsKLSAgICBtb2NrU291cmNl
MS0+bV9jdXJyZW50U3RhdGVzLnZvbHVtZSA9IDcwOworICAgIG1vY2tTb3VyY2UxLT5tX2N1cnJl
bnRTdGF0ZXMuc2V0U291cmNlVHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6Q2FtZXJhKTsK
KyAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLnNldFNvdXJjZUlkKG1vY2tTb3VyY2Ux
LT5pZCgpKTsKKyAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLnNldEZhY2luZ01vZGUo
TWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlVzZXIpOworICAgIG1vY2tTb3VyY2UxLT5tX2N1cnJl
bnRTdGF0ZXMuc2V0V2lkdGgoMTkyMCk7CisgICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRl
cy5zZXRIZWlnaHQoMTA4MCk7CisgICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy5zZXRG
cmFtZVJhdGUoMzApOworICAgIG1vY2tTb3VyY2UxLT5tX2N1cnJlbnRTdGF0ZXMuc2V0QXNwZWN0
UmF0aW8oMTYgLyA5LjBmKTsKKyAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLnNldFZv
bHVtZSg3MCk7CiAgICAgU3RyaW5nIG1vY2tTb3VyY2UxaWQgPSBtb2NrU291cmNlMS0+aWQoKTsK
ICAgICBtb2NrU291cmNlTWFwKCkuYWRkKG1vY2tTb3VyY2UxaWQsIG1vY2tTb3VyY2UxLnJlbGVh
c2UoKSk7CiAKQEAgLTEwNyw5ICsxMDcsOSBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplTW9ja1Nv
dXJjZXMoKQogICAgIG1vY2tTb3VyY2UyLT5tX2NhcGFiaWxpdGllcy0+c2V0U291cmNlSWQobW9j
a1NvdXJjZTItPmlkKCkpOwogICAgIG1vY2tTb3VyY2UyLT5tX2NhcGFiaWxpdGllcy0+c2V0Vm9s
dW1lUmFuZ2UoTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXR5UmFuZ2UoMFVMLCAxMDBVTCwgdHJ1
ZSkpOwogCi0gICAgbW9ja1NvdXJjZTItPm1fY3VycmVudFN0YXRlcy5zb3VyY2VUeXBlID0gTWVk
aWFTdHJlYW1Tb3VyY2VTdGF0ZXM6Ok1pY3JvcGhvbmU7Ci0gICAgbW9ja1NvdXJjZTItPm1fY3Vy
cmVudFN0YXRlcy5zb3VyY2VJZCA9IG1vY2tTb3VyY2UyLT5pZCgpOwotICAgIG1vY2tTb3VyY2Uy
LT5tX2N1cnJlbnRTdGF0ZXMudm9sdW1lID0gNTA7CisgICAgbW9ja1NvdXJjZTItPm1fY3VycmVu
dFN0YXRlcy5zZXRTb3VyY2VUeXBlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpNaWNyb3Bob25l
KTsKKyAgICBtb2NrU291cmNlMi0+bV9jdXJyZW50U3RhdGVzLnNldFNvdXJjZUlkKG1vY2tTb3Vy
Y2UyLT5pZCgpKTsKKyAgICBtb2NrU291cmNlMi0+bV9jdXJyZW50U3RhdGVzLnNldFZvbHVtZSg1
MCk7CiAgICAgU3RyaW5nIG1vY2tTb3VyY2UyaWQgPSBtb2NrU291cmNlMi0+aWQoKTsKICAgICBt
b2NrU291cmNlTWFwKCkuYWRkKG1vY2tTb3VyY2UyaWQsIG1vY2tTb3VyY2UyLnJlbGVhc2UoKSk7
CiB9CkBAIC0yMDQsMTUgKzIwNCwxMyBAQCB2b2lkIE1vY2tNZWRpYVN0cmVhbUNlbnRlcjo6Y3Jl
YXRlTWVkaWFTCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
YXVkaW9Db25zdHJhaW50cykgewotICAgICAgICAgICAgTW9ja1NvdXJjZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtYXAuZmluZChtb2NrQXVkaW9Tb3VyY2VJRCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChp
dCAhPSBtYXAuZW5kKCkpOwotCi0gICAgICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+
IGF1ZGlvU291cmNlID0gaXQtPnZhbHVlOwotICAgICAgICAgICAgYXVkaW9Tb3VyY2UtPnJlc2V0
KCk7Ci0gICAgICAgICAgICBhdWRpb1NvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNv
dXJjZTo6TGl2ZSk7Ci0gICAgICAgICAgICBhdWRpb1NvdXJjZXMuYXBwZW5kKGF1ZGlvU291cmNl
LnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgTW9ja1NvdXJjZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtYXAuZmluZChtb2NrQXVkaW9Tb3VyY2VJRCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ICE9
IG1hcC5lbmQoKSk7CisKKyAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBhdWRpb1Nv
dXJjZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgYXVkaW9Tb3VyY2UtPnJlc2V0KCk7CisgICAgICAg
IGF1ZGlvU291cmNlLT5zZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpMaXZlKTsKKyAg
ICAgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChhdWRpb1NvdXJjZS5yZWxlYXNlKCkpOwogICAgIH0K
IAogICAgIGlmICh2aWRlb0NvbnN0cmFpbnRzKSB7CkBAIC0yMjIsMTUgKzIyMCwxMyBAQCB2b2lk
IE1vY2tNZWRpYVN0cmVhbUNlbnRlcjo6Y3JlYXRlTWVkaWFTCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodmlkZW9Db25zdHJhaW50cykgewotICAgICAgICAg
ICAgTW9ja1NvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZChtb2NrVmlkZW9Tb3VyY2VJ
RCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtYXAuZW5kKCkpOwotCi0gICAgICAgICAg
ICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHZpZGVvU291cmNlID0gaXQtPnZhbHVlOwotICAg
ICAgICAgICAgdmlkZW9Tb3VyY2UtPnJlc2V0KCk7Ci0gICAgICAgICAgICB2aWRlb1NvdXJjZS0+
c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSk7Ci0gICAgICAgICAgICB2aWRl
b1NvdXJjZXMuYXBwZW5kKHZpZGVvU291cmNlLnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgTW9ja1NvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZChtb2NrVmlkZW9Tb3VyY2VJ
RCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC5lbmQoKSk7CisKKyAgICAgICAgUmVmUHRy
PE1lZGlhU3RyZWFtU291cmNlPiB2aWRlb1NvdXJjZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgdmlk
ZW9Tb3VyY2UtPnJlc2V0KCk7CisgICAgICAgIHZpZGVvU291cmNlLT5zZXRSZWFkeVN0YXRlKE1l
ZGlhU3RyZWFtU291cmNlOjpMaXZlKTsKKyAgICAgICAgdmlkZW9Tb3VyY2VzLmFwcGVuZCh2aWRl
b1NvdXJjZS5yZWxlYXNlKCkpOwogICAgIH0KICAgICAKICAgICBjbGllbnQtPmRpZENyZWF0ZVN0
cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShhdWRpb1NvdXJjZXMsIHZpZGVvU291
cmNlcywgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpJc05vdEVuZGVkKSk7CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxNTgwOTYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOCBAQAorMjAxMy0xMC0yNyAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFw
cGxlLmNvbT4KKworICAgICAgICBbTWFjIE1lZGlhU3RyZWFtXSBpbXBsZW1lbnQgQVZGb3VuZGF0
aW9uIGJhY2tlZCBNZWRpYVN0cmVhbVNvdXJjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1y
ZW1vdmUtdHJhY2tzLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAgKiBmYXN0L21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tzLmh0bWw6IERpdHRvLgorICAgICAg
ICAqIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6
IERpdHRvLgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rv
ci5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJh
Y2stZ2V0U291cmNlcy5odG1sOiBSZW1vdmUgdHlwby4KKyAgICAgICAgKiBmYXN0L21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtVHJhY2stZXhwZWN0ZWQudHh0OiBVcGRhdGVkIHJlc3VsdHMuCisgICAg
ICAgICogZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmh0bWw6IFVwZGF0ZSB0byB0
ZXN0IHRyYWNrLnN0b3AoKSBiZWhhdmlvci4KKwogMjAxMy0xMC0yNiAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaHkgV2ViR0wgdGVzdCBpcyBj
cmFzaHkuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFk
ZC1yZW1vdmUtdHJhY2tzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tzLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMTU4MDI1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbS1hZGQtcmVtb3ZlLXRyYWNrcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDEyICs0MiwxNCBAQCBQQVNTIHN0cmVhbTEuZ2V0VmlkZW9UcmFja3MoKS5sZW5ndGggaXMg
CiBQQVNTIHN0cmVhbTEuZ2V0QXVkaW9UcmFja3MoKS5sZW5ndGggaXMgMgogUEFTUyBzdHJlYW0x
LmdldFZpZGVvVHJhY2tzKCkubGVuZ3RoIGlzIDIKIAotKioqIGFmdGVyIGFsbCB0cmFja3MgaGF2
ZSBiZWVuIHJlbW92ZWQsIHN0cmVhbS5lbmRlZCBzaG91bGQgcmV0dXJuIHRydWUKKyoqKiByZW1v
dmUgYWZ0ZXIgYWxsIHRyYWNrcywgc3RyZWFtLmVuZGVkIHNob3VsZCByZXR1cm4gdHJ1ZQorUEFT
UyBzdHJlYW0yLmdldEF1ZGlvVHJhY2tzKCkubGVuZ3RoIGlzIDAKK1BBU1Mgc3RyZWFtMi5nZXRW
aWRlb1RyYWNrcygpLmxlbmd0aCBpcyAwCiBQQVNTIHN0cmVhbTIuZW5kZWQgaXMgdHJ1ZQogCiAq
KiogaXQgc2hvdWxkIGJlIGltcG9zc2libGUgdG8gYWRkIGEgdHJhY2sgYWZ0ZXIgdGhlIHN0cmVh
bSBoYXMgZW5kZWQKLVBBU1Mgc3RyZWFtMS5hZGRUcmFjayhhdWRpb1RyYWNrKSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgotUEFTUyBz
dHJlYW0xLnJlbW92ZVRyYWNrKGF1ZGlvVHJhY2spIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52
YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIHN0cmVhbTIuYWRkVHJhY2so
YXVkaW9UcmFjaykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9N
IEV4Y2VwdGlvbiAxMS4KK1BBU1Mgc3RyZWFtMi5yZW1vdmVUcmFjayhhdWRpb1RyYWNrKSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tz
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbS1hZGQtcmVtb3ZlLXRyYWNrcy5odG1sCShyZXZpc2lvbiAxNTgwMjUpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tzLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOSwxNCArMTA5LDE2IEBAIGZ1bmN0aW9uIGdvdFN0cmVhbTIo
cykgewogICAgIHNob3VsZEJlKCdzdHJlYW0xLmdldEF1ZGlvVHJhY2tzKCkubGVuZ3RoJywgJzIn
KTsKICAgICBzaG91bGRCZSgnc3RyZWFtMS5nZXRWaWRlb1RyYWNrcygpLmxlbmd0aCcsICcyJyk7
CiAKLSAgICBkZWJ1ZygiPGJyPioqKiBhZnRlciBhbGwgdHJhY2tzIGhhdmUgYmVlbiByZW1vdmVk
LCBzdHJlYW0uZW5kZWQgc2hvdWxkIHJldHVybiB0cnVlIik7CisgICAgZGVidWcoIjxicj4qKiog
cmVtb3ZlIGFmdGVyIGFsbCB0cmFja3MsIHN0cmVhbS5lbmRlZCBzaG91bGQgcmV0dXJuIHRydWUi
KTsKICAgICB0cnlSZW1vdmVUcmFjayhzdHJlYW0yLCBzdHJlYW0yLmdldEF1ZGlvVHJhY2tzKClb
MF0pOwogICAgIHRyeVJlbW92ZVRyYWNrKHN0cmVhbTIsIHN0cmVhbTIuZ2V0VmlkZW9UcmFja3Mo
KVswXSk7CisgICAgc2hvdWxkQmUoJ3N0cmVhbTIuZ2V0QXVkaW9UcmFja3MoKS5sZW5ndGgnLCAn
MCcpOworICAgIHNob3VsZEJlKCdzdHJlYW0yLmdldFZpZGVvVHJhY2tzKCkubGVuZ3RoJywgJzAn
KTsKICAgICBzaG91bGRCZVRydWUoJ3N0cmVhbTIuZW5kZWQnKTsKIAogICAgIGRlYnVnKCI8YnI+
KioqIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIHRvIGFkZCBhIHRyYWNrIGFmdGVyIHRoZSBzdHJl
YW0gaGFzIGVuZGVkIik7Ci0gICAgc2hvdWxkVGhyb3coJ3N0cmVhbTEuYWRkVHJhY2soYXVkaW9U
cmFjayknLCAnIkVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSInKTsK
LSAgICBzaG91bGRUaHJvdygnc3RyZWFtMS5yZW1vdmVUcmFjayhhdWRpb1RyYWNrKScsICciRXJy
b3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExIicpOworICAgIHNob3VsZFRo
cm93KCdzdHJlYW0yLmFkZFRyYWNrKGF1ZGlvVHJhY2spJywgJyJFcnJvcjogSW52YWxpZFN0YXRl
RXJyb3I6IERPTSBFeGNlcHRpb24gMTEiJyk7CisgICAgc2hvdWxkVGhyb3coJ3N0cmVhbTIucmVt
b3ZlVHJhY2soYXVkaW9UcmFjayknLCAnIkVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4
Y2VwdGlvbiAxMSInKTsKIAogICAgIHNldFRpbWVvdXQoZmluaXNoSlNUZXN0LCAwKTsKIH0KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rvci1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbUNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU4MDI1KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbnN0cnVjdG9yLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBQQVNTIG5ld1N0cmVhbS5j
b25zdHJ1Y3Rvci50b1N0cmluZygpIGlzCiBQQVNTIG5ld1N0cmVhbS5nZXRBdWRpb1RyYWNrcygp
Lmxlbmd0aCBpcyBuQXVkaW8KIFBBU1MgbmV3U3RyZWFtLmdldFZpZGVvVHJhY2tzKCkubGVuZ3Ro
IGlzIG5WaWRlbwogUEFTUyBjaGVja0lkQXR0cmlidXRlKG5ld1N0cmVhbS5pZCkgaXMgdHJ1ZQor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCiAKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rvci5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1D
b25zdHJ1Y3Rvci5odG1sCShyZXZpc2lvbiAxNTgwMjUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29uc3RydWN0b3IuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNiArODQsOCBAQCBmdW5jdGlvbiB0ZXN0Q29uc3RydWN0b3IocykgewogICAgIHZlcmlmeVN0
cmVhbSgibmV3IHdlYmtpdE1lZGlhU3RyZWFtKFtzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXV0p
IiwgMCwgMSk7CiAgICAgdmVyaWZ5U3RyZWFtKCJuZXcgd2Via2l0TWVkaWFTdHJlYW0oW3N0cmVh
bS5nZXRBdWRpb1RyYWNrcygpWzBdLCBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXV0pIiwgMSwg
MSk7CiAgICAgdmVyaWZ5U3RyZWFtKCJuZXcgd2Via2l0TWVkaWFTdHJlYW0oW3N0cmVhbS5nZXRW
aWRlb1RyYWNrcygpWzBdLCBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXSwgc3RyZWFtLmdldFZp
ZGVvVHJhY2tzKClbMF1dKSIsIDEsIDEpOworCisgICAgZmluaXNoSlNUZXN0KCk7CiB9CiAKIGZ1
bmN0aW9uIHZlcmlmeVN0cmVhbShzY3JpcHQsIG51bUF1ZGlvVHJhY2tzLCBudW1WaWRlb1RyYWNr
cykgewpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNr
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtVHJhY2stZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNTgwMjUpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2stZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBAIGNoZWNraW5nIHRyYWNrLmNhcGFiaWxpdGll
cygpCiAgICBtYXggOiA2MAogICAgc3VwcG9ydGVkIDogdHJ1ZQogICBhc3BlY3RSYXRpbwotICAg
bWluIDogMS4zMzMzMzMzNzMwNjk3NjMyCi0gICBtYXggOiAxLjc3Nzc3Nzc5MTAyMzI1NDQKKyAg
IG1pbiA6IDEuMzMKKyAgIG1heCA6IDEuNzgKICAgIHN1cHBvcnRlZCA6IHRydWUKICAgZmFjaW5n
TW9kZQogICAgIDAgOiB1c2VyCkBAIC0zNSwxMSArMzUsMTQgQEAgY2hlY2tpbmcgdHJhY2suY2Fw
YWJpbGl0aWVzKCkKIGNoZWNraW5nIHRyYWNrLnN0YXRlcygpCiBQQVNTIHN0YXRlcy5zb3VyY2VJ
ZCBpcyBjYXBhYmlsaXRpZXMuc291cmNlSWRbMF0KIFBBU1Mgc3RhdGVzLnNvdXJjZVR5cGUgaXMg
ImNhbWVyYSIKLSAgd2lkdGggOiAxOTIwCi0gIGhlaWdodCA6IDEwODAKLSAgZnJhbWVSYXRlIDog
MzAKLSAgYXNwZWN0UmF0aW8gOiAxLjc3Nzc3Nzc5MTAyMzI1NDQKLSAgZmFjaW5nTW9kZSA6IHVz
ZXIKKyAgc3RhdGVzLnZvbHVtZSA9IHVuZGVmaW5lZAorICBzdGF0ZXMud2lkdGggPSAxOTIwCisg
IHN0YXRlcy5zb3VyY2VJZCA9IDIzOWMyNGIwLTJiMTUtMTFlMy04MjI0LTA4MDAyMDBjOWE2Ngor
ICBzdGF0ZXMuaGVpZ2h0ID0gMTA4MAorICBzdGF0ZXMuc291cmNlVHlwZSA9IGNhbWVyYQorICBz
dGF0ZXMuZmFjaW5nTW9kZSA9IHVzZXIKKyAgc3RhdGVzLmZyYW1lUmF0ZSA9IDMwCisgIHN0YXRl
cy5hc3BlY3RSYXRpbyA9IDEuNzgKIAogYXVkaW9UcmFjayA9IG1lZGlhU3RyZWFtLmdldEF1ZGlv
VHJhY2tzKClbMF0KIFBBU1MgdHJhY2sucmVhZHlTdGF0ZSBpcyAibGl2ZSIKQEAgLTUzLDcgKzU2
LDE0IEBAIGNoZWNraW5nIHRyYWNrLmNhcGFiaWxpdGllcygpCiBjaGVja2luZyB0cmFjay5zdGF0
ZXMoKQogUEFTUyBzdGF0ZXMuc291cmNlSWQgaXMgY2FwYWJpbGl0aWVzLnNvdXJjZUlkWzBdCiBQ
QVNTIHN0YXRlcy5zb3VyY2VUeXBlIGlzICJtaWNyb3Bob25lIgotICB2b2x1bWUgOiA1MAorICBz
dGF0ZXMudm9sdW1lID0gNTAKKyAgc3RhdGVzLndpZHRoID0gdW5kZWZpbmVkCisgIHN0YXRlcy5z
b3VyY2VJZCA9IDIzOWMyNGIxLTJiMTUtMTFlMy04MjI0LTA4MDAyMDBjOWE2NgorICBzdGF0ZXMu
aGVpZ2h0ID0gdW5kZWZpbmVkCisgIHN0YXRlcy5zb3VyY2VUeXBlID0gbWljcm9waG9uZQorICBz
dGF0ZXMuZmFjaW5nTW9kZSA9IHVuZGVmaW5lZAorICBzdGF0ZXMuZnJhbWVSYXRlID0gdW5kZWZp
bmVkCisgIHN0YXRlcy5hc3BlY3RSYXRpbyA9IHVuZGVmaW5lZAogCiB2aWRlb1RyYWNrMiA9IHZp
ZGVvVHJhY2suY2xvbmUoKQogUEFTUyB0cmFjay5yZWFkeVN0YXRlIGlzICJsaXZlIgpAQCAtNzYs
OCArODYsOCBAQCBjaGVja2luZyB0cmFjay5jYXBhYmlsaXRpZXMoKQogICAgbWF4IDogNjAKICAg
IHN1cHBvcnRlZCA6IHRydWUKICAgYXNwZWN0UmF0aW8KLSAgIG1pbiA6IDEuMzMzMzMzMzczMDY5
NzYzMgotICAgbWF4IDogMS43Nzc3Nzc3OTEwMjMyNTQ0CisgICBtaW4gOiAxLjMzCisgICBtYXgg
OiAxLjc4CiAgICBzdXBwb3J0ZWQgOiB0cnVlCiAgIGZhY2luZ01vZGUKICAgICAwIDogdXNlcgpA
QCAtODUsMTEgKzk1LDE0IEBAIGNoZWNraW5nIHRyYWNrLmNhcGFiaWxpdGllcygpCiBjaGVja2lu
ZyB0cmFjay5zdGF0ZXMoKQogUEFTUyBzdGF0ZXMuc291cmNlSWQgaXMgY2FwYWJpbGl0aWVzLnNv
dXJjZUlkWzBdCiBQQVNTIHN0YXRlcy5zb3VyY2VUeXBlIGlzICJjYW1lcmEiCi0gIHdpZHRoIDog
MTkyMAotICBoZWlnaHQgOiAxMDgwCi0gIGZyYW1lUmF0ZSA6IDMwCi0gIGFzcGVjdFJhdGlvIDog
MS43Nzc3Nzc3OTEwMjMyNTQ0Ci0gIGZhY2luZ01vZGUgOiB1c2VyCisgIHN0YXRlcy52b2x1bWUg
PSB1bmRlZmluZWQKKyAgc3RhdGVzLndpZHRoID0gMTkyMAorICBzdGF0ZXMuc291cmNlSWQgPSAy
MzljMjRiMC0yYjE1LTExZTMtODIyNC0wODAwMjAwYzlhNjYKKyAgc3RhdGVzLmhlaWdodCA9IDEw
ODAKKyAgc3RhdGVzLnNvdXJjZVR5cGUgPSBjYW1lcmEKKyAgc3RhdGVzLmZhY2luZ01vZGUgPSB1
c2VyCisgIHN0YXRlcy5mcmFtZVJhdGUgPSAzMAorICBzdGF0ZXMuYXNwZWN0UmF0aW8gPSAxLjc4
CiBQQVNTIHZpZGVvVHJhY2suaWQgaXMgbm90IHZpZGVvVHJhY2syLmlkCiBQQVNTIHZpZGVvVHJh
Y2sua2luZCBpcyB2aWRlb1RyYWNrMi5raW5kCiBQQVNTIHZpZGVvVHJhY2subGFiZWwgaXMgdmlk
ZW9UcmFjazIubGFiZWwKQEAgLTk3LDkgKzExMCwxMSBAQCBQQVNTIHZpZGVvVHJhY2subXV0ZWQg
aXMgdmlkZW9UcmFjazIubXV0CiBQQVNTIHZpZGVvVHJhY2suZW5hYmxlZCBpcyB2aWRlb1RyYWNr
Mi5lbmFibGVkCiBQQVNTIHZpZGVvVHJhY2sucmVhZHlTdGF0ZSBpcyB2aWRlb1RyYWNrMi5yZWFk
eVN0YXRlCiAKK3RyYWNrLnN0b3AoKSBzaG91bGQgZW5kIGFsbCB0cmFja3MgdXNpbmcgdGhlIHNh
bWUgc291cmNlCiB2aWRlb1RyYWNrLnN0b3AoKQogUEFTUyBUcmFjayBvbmVuZGVkIGNhbGxiYWNr
IHN1Y2NlZWRlZC4KIFBBU1MgdmlkZW9UcmFjay5yZWFkeVN0YXRlIGlzICJlbmRlZCIKK1BBU1Mg
dmlkZW9UcmFjazIucmVhZHlTdGF0ZSBpcyAiZW5kZWQiCiAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVRyYWNrLWdldFNvdXJjZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2stZ2V0U291cmNlcy5odG1sCShyZXZpc2lvbiAx
NTgwMjUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2st
Z2V0U291cmNlcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAg
ICAgICAgICAgICAgIHByaW1lVGltZW91dCgiVGltZW91dCB3YWl0aW5nIGZvciB3ZWJraXRHZXRV
c2VyTWVkaWEoKSIpOwogICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50cyA9IF9jb25zdHJh
aW50czsKICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2s7Ci0gICAgICAg
ICAgICAgICAgZGVidWcoIjxicj4qKiogY2FsbGluZyBuYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1l
ZGlhKCkgKioqIik7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKCI8YnI+KioqIGNhbGxpbmcg
bmF2aWdhdG9yLndlYmtpdEdldFVzZXJNZWRpYSgpICoqKiIpOwogICAgICAgICAgICAgICAgICAg
ICBzaG91bGROb3RUaHJvdygibmF2aWdhdG9yLndlYmtpdEdldFVzZXJNZWRpYShjb25zdHJhaW50
cywgY2FsbGJhY2ssIGVycm9yKSIpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgnd2Via2l0R2V0VXNlck1lZGlhIHRocmV3IGV4
Y2VwdGlvbiA6JyArIGUpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbVRyYWNrLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmh0bWwJKHJldmlzaW9uIDE1ODAyNSkKKysrIExheW91dFRl
c3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVzdFBh
c3NlZCgnVHJhY2sgb25lbmRlZCBjYWxsYmFjayBzdWNjZWVkZWQuJyk7CiAgICAgICAgICAgICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd2aWRlb1RyYWNrLnJlYWR5U3RhdGUnLCAnZW5kZWQn
KTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3ZpZGVvVHJhY2syLnJl
YWR5U3RhdGUnLCAnZW5kZWQnKTsKICAgICAgICAgICAgICAgICBkZWJ1ZygiIik7CiAgICAgICAg
ICAgICAgICAgZmluaXNoSlNUZXN0KCk7CiAgICAgICAgICAgICB9CkBAIC01NiwxMiArNTcsMTkg
QEAKICAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCdUcmFjayBvbm11dGUgY2FsbGJhY2sgc3Vj
Y2VlZGVkLicpOwogICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWwoJ3ZpZGVvVHJhY2subXV0
ZWQnLCB0cnVlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVu
Y3Rpb24gbGltaXRQcmVjaXNpb24odmFsdWUsIHByZWNpc2lvbikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIiAmJiB2YWx1ZSAlIDEg
IT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQocHJlY2lzaW9u
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGZ1bmN0aW9uIGxvZ0NhcGFiaWxpdHlSYW5nZShuYW1lLCByYW5nZSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiICAiICsgbmFtZSk7Ci0gICAgICAgICAgICAg
ICAgZGVidWcoIiAgIG1pbiA6ICIgKyByYW5nZS5taW4pOwotICAgICAgICAgICAgICAgIGRlYnVn
KCIgICBtYXggOiAiICsgcmFuZ2UubWF4KTsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiICAgbWlu
IDogIiArIGxpbWl0UHJlY2lzaW9uKHJhbmdlLm1pbiwgMikpOworICAgICAgICAgICAgICAgIGRl
YnVnKCIgICBtYXggOiAiICsgbGltaXRQcmVjaXNpb24ocmFuZ2UubWF4LCAyKSk7CiAgICAgICAg
ICAgICAgICAgZGVidWcoIiAgIHN1cHBvcnRlZCA6ICIgKyByYW5nZS5zdXBwb3J0ZWQpOwogICAg
ICAgICAgICAgfQogCkBAIC02OSw3ICs3Nyw3IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgZGVidWcoIiAgIiArIG5hbWUpOwogICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg
PCBsaXN0Lmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgIiArIGkgKyAi
IDogIiArIGxpc3RbaV0pOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAgICIgKyBpICsg
IiA6ICIgKyBsaXN0W2ldKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZnVuY3Rpb24g
Y2hlY2tDYXBhYmlsaXRpZXModHJhY2spCkBAIC05NCwxNiArMTAyLDEzIEBACiAgICAgICAgICAg
ICAgICAgY2FwYWJpbGl0aWVzID0gdHJhY2suY2FwYWJpbGl0aWVzKCk7CiAgICAgICAgICAgICAg
ICAgc3RhdGVzID0gdHJhY2suc3RhdGVzKCk7CiAgICAgICAgICAgICAgICAgc2hvdWxkQmUoJ3N0
YXRlcy5zb3VyY2VJZCcsICdjYXBhYmlsaXRpZXMuc291cmNlSWRbMF0nKTsKLSAgICAgICAgICAg
ICAgICBpZiAodHJhY2sua2luZCA9PSAidmlkZW8iKSB7CisgICAgICAgICAgICAgICAgaWYgKHRy
YWNrLmtpbmQgPT0gInZpZGVvIikKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdzdGF0ZXMuc291cmNlVHlwZScsICdjYW1lcmEnKTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVidWcoIiAgd2lkdGggOiAiICsgc3RhdGVzLndpZHRoKTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVidWcoIiAgaGVpZ2h0IDogIiArIHN0YXRlcy5oZWlnaHQpOwotICAgICAgICAgICAgICAg
ICAgICBkZWJ1ZygiICBmcmFtZVJhdGUgOiAiICsgc3RhdGVzLmZyYW1lUmF0ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlYnVnKCIgIGFzcGVjdFJhdGlvIDogIiArIHN0YXRlcy5hc3BlY3RSYXRp
byk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgIGZhY2luZ01vZGUgOiAiICsgc3RhdGVz
LmZhY2luZ01vZGUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3N0YXRlcy5z
b3VyY2VUeXBlJywgJ21pY3JvcGhvbmUnKTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAg
dm9sdW1lIDogIiArIHN0YXRlcy52b2x1bWUpOworICAgICAgICAgICAgICAgIGZvciAodmFyIHBy
b3BlcnR5IGluIHN0YXRlcykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVzLmhhc093
blByb3BlcnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgIHN0
YXRlcy4iICsgcHJvcGVydHkgKyAiID0gIiArIGxpbWl0UHJlY2lzaW9uKHN0YXRlc1twcm9wZXJ0
eV0sIDIpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
QEAgLTE0NSw2ICsxNTAsNyBAQAogICAgICAgICAgICAgICAgIHNob3VsZEJlKCd2aWRlb1RyYWNr
LnJlYWR5U3RhdGUnLCAndmlkZW9UcmFjazIucmVhZHlTdGF0ZScpOwogCiAgICAgICAgICAgICAg
ICAgZGVidWcoIiIpOworICAgICAgICAgICAgICAgIGRlYnVnKCJ0cmFjay5zdG9wKCkgc2hvdWxk
IGVuZCBhbGwgdHJhY2tzIHVzaW5nIHRoZSBzYW1lIHNvdXJjZSIpOwogICAgICAgICAgICAgICAg
IGV2YWxBbmRMb2coInZpZGVvVHJhY2suc3RvcCgpIik7CiAgICAgICAgICAgICB9CiAK
</data>
<flag name="commit-queue"
          id="237971"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215280</attachid>
            <date>2013-10-27 15:32:41 -0700</date>
            <delta_ts>2013-10-28 11:21:37 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>capture_device_13.txt</filename>
            <type>text/plain</type>
            <size>152924</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODA5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNSBAQAorMjAxMy0xMC0yNyAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjIE1lZGlhU3Ry
ZWFtXSBpbXBsZW1lbnQgQVZGb3VuZGF0aW9uIGJhY2tlZCBNZWRpYVN0cmVhbVNvdXJjZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzE2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBleGlzdGluZyB0ZXN0cyB1cGRhdGVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFk
ZCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHAuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU291cmNlU3RhdGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291
cmNlU3RhdGVzOjpNZWRpYVNvdXJjZVN0YXRlcyk6IG1fU291cmNlU3RhdGVzIC0+IG1fc291cmNl
U3RhdGVzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VTdGF0ZXM6OnNvdXJjZVR5cGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2Rl
KTogRGl0dG8uCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRl
cy5oOiBEaXR0by4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU291cmNlU3Rh
dGVzLmlkbDogTWFyayBzb21lIGF0dHJpYnV0ZXMgYXMgb3B0aW9uYWwuCisKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtOjphZGRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6cmVt
b3ZlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OmFkZFJlbW90ZVNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6cmVtb3ZlUmVtb3RlU291cmNlKToK
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM6OnNvdXJjZVR5
cGUpOiBNZWRpYVNvdXJjZVN0YXRlcyAtPiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcworICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM6OmZhY2luZ01vZGUpOiBEaXR0by4K
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKTogRG9u
J3Qgb2JzZXJ2ZSBzb3VyY2UgY2hhbmdlcyBkaXJlY3RseSwgbGV0IHRoZQorICAgICAgICAgICAg
cHJpdmF0ZSB0cmFjayBkbyB0aGF0LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFj
azo6fk1lZGlhU3RyZWFtVHJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtVHJhY2s6OnNldFNvdXJjZSk6IFNldCB0cmFjayBjbGllbnQgdG8gbnVsbC4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnN0b3BwZWQpOiBQYXNzIHRocm91Z2ggdG8gcHJp
dmF0ZSB0cmFjay4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnN0YXRlcyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6Y2FwYWJpbGl0aWVz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjphcHBseUNvbnN0
cmFpbnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpzdG9w
UHJvZHVjaW5nRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFj
azo6dHJhY2tSZWFkeVN0YXRlQ2hhbmdlZCk6IFJlbmFtZWQgZnJvbSBzb3VyY2VTdGF0ZUNoYW5n
ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjp0cmFja011dGVkQ2hhbmdl
ZCk6IFJlbmFtZXMgZnJvbSBzb3VyY2VNdXRlZENoYW5nZWQuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbVRyYWNrOjp0cmFja0VuYWJsZWRDaGFuZ2VkKTogUmVuYW1lZCBmcm9tIHNvdXJj
ZUVuYWJsZWRDaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6c3Rv
cCk6IFBhc3MgdGhyb3VnaCB0byBwcml2YXRlIHRyYWNrLgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJl
YW1UcmFjazo6T2JzZXJ2ZXI6On5PYnNlcnZlcik6IEFkZCB2aXJ0dWFsIGRlc3RydWN0b3IuCisK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VXNlck1lZGlhUmVxdWVzdDo6Y2FsbFN1Y2Nlc3NIYW5kbGVyKTogU2V0
IHRyYWNrLCBub3Qgc291cmNlLCBjb25zdHJhaW50cy4KKworICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIG5ldyBmaWxlcy4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZSk6IFJldHVybiBqc1VuZGVmaW5lZCB3aGVu
IHRoZSBmYWNpbmcgbW9kZQorICAgICAgICAgICAgaXMgVW5rbm93bi4KKworICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmg6IFJlbW92ZSB1bnVzZWQgY2xh
c3MgZm9yd2FyZCBkZWZpbmVzIGFuZAorICAgICAgICAgICAgdW5kZWZpbmVkIG1ldGhvZCBwcm90
b3R5cGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2Ny
aXB0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRT
b3VyY2UpOiBBU1NFUlQgaWYgc291cmNlIGlzIGtpbmQgTm9uZS4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6cmVtb3ZlU291cmNlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcik6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6c2V0UmVhZHlTdGF0ZSk6IENhbGwg
c3RhcnRQcm9kdWNpbmdEYXRhIHdoZW4gcmVhZHlTdGF0ZSBjaGFuZ2VzCisgICAgICAgICAgICB0
byBMaXZlLCBzdG9wUHJvZHVjaW5nRGF0YSB3aGVuIGl0IGNoYW5nZXMgdG8gRW5kZWQuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6cmVtb3ZlT2JzZXJ2ZXIpOiBDYWxsIHN0
b3AoKSB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIG9ic2VydmVycy4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtU291cmNlOjpzZXRFbmFibGVkKTogSWYgcGFzc2VkIGZhbHNlLCBkbyBub3Ro
aW5nIHVubGVzcyBhbGwgb2JzZXJ2ZXJzCisgICAgICAgICAgICBhcmUgZGlzYWJsZWQuIENhbGwg
c3RhcnRQcm9kdWNpbmdEYXRhL3N0b3BQcm9kdWNpbmdEYXRhIHdoZW4gYmVjb21pbmcgZW5hYmxl
ZC9kaXNhYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpzdG9wKTog
RG9uJ3QgYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiBvdGhlciBvYnNlcnZlcnMgaGF2ZQorICAg
ICAgICAgICAgc3RvcHBlZCwgdGhlIHNwZWMgc2F5cyB0aGF0IHRyYWNrLnN0b3AoKSBzaG91bGQg
cGVybWFuZW50bHkgc3RvcCB0aGUgdHJhY2sncyBzb3VyY2UuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U3RyZWFtU291cmNlOjpuYW1lKTogTWFrZSB2aXJ0dWFsIHNvIGRlcml2ZWQgY2xhc3NlcyBjYW4g
b3ZlcnJpZGUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6c2V0TmFtZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnJlYWR5U3RhdGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjplbmFibGVkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6bXV0ZWQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpzZXRSZWFkb25seSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnJlbW90ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnNldFJlbW90ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0
YSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnN0b3BQcm9k
dWNpbmdEYXRhKTogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcy5oOiBNb3ZlIE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
IHRvCisgICAgICAgICAgICBpdHMgb3duIGZpbGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUpOiBNb3ZlZCBoZXJlIGZy
b20gTWVkaWFTb3VyY2VTdGF0ZXMgc28gdGhlIAorICAgICAgICAgICAgc3RyaW5ncyBhcmUgYXZh
aWxhYmxlIHRvIHBsYXRmb3JtIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNv
dXJjZVN0YXRlczo6c291cmNlVHlwZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtU291cmNlU3RhdGVzLmg6IEFkZGVkLCBtb3ZlZCBmcm9tIE1lZGlh
U3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzLmguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKTogUGFzcyBwcml2YXRlIHRyYWNrIHRvIGNvbnN0
cnVjdG9yIGFzIFBhc3NSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUpOiBJbml0aWFsaXplIG1lbWJlciB2YXJp
YWJsZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6fk1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlKTogVW5yZWdpc3RlciBhcyBzb3VyY2Ugb2JzZXJ2ZXIuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0U291cmNlKTogVW5yZWdp
c3Rlci9yZWdpc3RlciBhcyBzb3VyY2Ugb2JzZXJ2ZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0RW5hYmxlZCk6IEVuYWJsZS9kaXNhYmxlIHNvdXJjZSwg
Y2FsbCBjbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6
c3RvcCk6IE5ldy4gU2V0IHJlYWR5U3RhdGUgdG8gRW5kZWQsIG9wdGlvbmFsbHkgc3RvcCBzb3Vy
Y2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0UmVhZHlT
dGF0ZSk6IElubGluZSB0aGUgbG9naWMgZnJvbSBzaG91bGRGaXJlVHJhY2tSZWFkeVN0YXRlQ2hh
bmdlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjb25zdHJh
aW50cyk6IE5ldywgcGFzc3Rocm91Z2ggdG8gdGhlIHNvdXJjZS4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzdGF0ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjp0eXBlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y2FwYWJpbGl0aWVzKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6YXBwbHlDb25zdHJhaW50cyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnNvdXJj
ZVJlYWR5U3RhdGVDaGFuZ2VkKTogUmVhY3QgdG8gc291cmNlIGNoYW5nZXMuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c291cmNlTXV0ZWRDaGFuZ2VkKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c291cmNlRW5h
YmxlZENoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlOjpvYnNlcnZlcklzRW5hYmxlZCk6IFJlc3BvbmQgdG8gc291cmNlIHF1ZXJ5LgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Om9ic2VydmVySXNTdG9wcGVk
KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUuaDoKKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlv
Q2FwdHVyZVNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQVZBdWRpb0NhcHR1cmVTb3VyY2UubW06IEFkZGVkLgorCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW06IEFk
ZGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJl
U291cmNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1l
ZGlhQ2FwdHVyZVNvdXJjZS5tbTogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tOiBBZGRlZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9NZWRpYVN0cmVhbUNlbnRlck1hYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlck1hYzo6dmFsaWRhdGVSZXF1ZXN0
Q29uc3RyYWludHMpOiBJbXBsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNl
bnRlck1hYzo6Y3JlYXRlTWVkaWFTdHJlYW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtQ2VudGVyTWFjOjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyk6IERpdHRvLgor
CisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZU1vY2tTb3VyY2VzKTogVXBkYXRlIGZvciBNZWRpYVN0
cmVhbVNvdXJjZVN0YXRlcyBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhU3Ry
ZWFtQ2VudGVyOjpjcmVhdGVNZWRpYVN0cmVhbSk6CisKIDIwMTMtMTAtMjYgIFRpbSBIb3J0b24g
IDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY10gUmVtb3ZlIFdlYlRp
bGVkTGF5ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTgwMjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTk5MCw2ICsx
OTkwLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZS5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVNvdXJjZS5jcHAKKyAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZVN0
YXRlcy5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGVEZXNjcmlw
dG9yLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uSGFuZGxl
ci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb25EZXNj
cmlwdG9yLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YVNvdXJjZVN0YXRlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5jcHAJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTb3VyY2VTdGF0ZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw1OSArMzksMTggQEAgUmVmUHRyPE1lZGlhU291cmNlU3RhdGVz
PiBNZWRpYVNvdXJjZVN0YQogfQogCiBNZWRpYVNvdXJjZVN0YXRlczo6TWVkaWFTb3VyY2VTdGF0
ZXMoY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMmIHN0YXRlcykKLSAgICA6IG1fU291cmNl
U3RhdGVzKHN0YXRlcykKKyAgICA6IG1fc291cmNlU3RhdGVzKHN0YXRlcykKIHsKIH0KIAotY29u
c3QgQXRvbWljU3RyaW5nJiBNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShNZWRpYVN0cmVh
bVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlIG1vZGUpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gdXNlckZhY2luZygidXNlciIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGVudmlyb25tZW50RmFjaW5nKCJlbnZpcm9ubWVudCIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IGxlZnRGYWNpbmcoImxlZnQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiByaWdodEZhY2luZygi
cmlnaHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAKLSAgICBz
d2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpVc2VyOgot
ICAgICAgICByZXR1cm4gdXNlckZhY2luZzsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlU3Rh
dGVzOjpFbnZpcm9ubWVudDoKLSAgICAgICAgcmV0dXJuIGVudmlyb25tZW50RmFjaW5nOwotICAg
IGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkxlZnQ6Ci0gICAgICAgIHJldHVybiBsZWZ0
RmFjaW5nOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlJpZ2h0OgotICAgICAg
ICByZXR1cm4gcmlnaHRGYWNpbmc7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIGVtcHR5QXRvbTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVNv
dXJjZVN0YXRlczo6c291cmNlVHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6U291cmNlVHlw
ZSBzb3VyY2VUeXBlKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IG5vbmUoIm5vbmUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjYW1lcmEoImNhbWVyYSIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IG1pY3JvcGhvbmUoIm1pY3JvcGhvbmUiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKLQotICAgIHN3aXRjaCAoc291cmNlVHlwZSkgewotICAgIGNh
c2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6Ok5vbmU6Ci0gICAgICAgIHJldHVybiBub25lOwot
ICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkNhbWVyYToKLSAgICAgICAgcmV0dXJu
IGNhbWVyYTsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpNaWNyb3Bob25lOgot
ICAgICAgICByZXR1cm4gbWljcm9waG9uZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZW1wdHlBdG9tOwotfQotCiBjb25zdCBBdG9taWNTdHJpbmcmIE1l
ZGlhU291cmNlU3RhdGVzOjpzb3VyY2VUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gTWVkaWFT
b3VyY2VTdGF0ZXM6OnNvdXJjZVR5cGUobV9Tb3VyY2VTdGF0ZXMuc291cmNlVHlwZSk7CisgICAg
cmV0dXJuIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpzb3VyY2VUeXBlKG1fc291cmNlU3RhdGVz
LnNvdXJjZVR5cGUoKSk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTb3VyY2VTdGF0
ZXM6OmZhY2luZ01vZGUoKSBjb25zdAogewotICAgIHJldHVybiBNZWRpYVNvdXJjZVN0YXRlczo6
ZmFjaW5nTW9kZShtX1NvdXJjZVN0YXRlcy5mYWNpbmdNb2RlKTsKKyAgICByZXR1cm4gTWVkaWFT
dHJlYW1Tb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUobV9zb3VyY2VTdGF0ZXMuZmFjaW5nTW9kZSgp
KTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
U291cmNlU3RhdGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5oCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU291cmNlU3RhdGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDI0ICszOSwyMSBAQCBjbGFzcyBNZWRpYVNvdXJjZVN0YXRlcyA6IHB1Ymxp
YyBSZWZDb3VuCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxNZWRpYVNvdXJjZVN0YXRlcz4g
Y3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzJik7CiAKLSAgICBzdGF0aWMgY29u
c3QgQXRvbWljU3RyaW5nJiBzb3VyY2VUeXBlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpTb3Vy
Y2VUeXBlKTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBmYWNpbmdNb2RlKE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGUpOwotICAgIAogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc291cmNlVHlwZSgpIGNvbnN0OwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
c291cmNlSWQoKSBjb25zdCB7IHJldHVybiBtX1NvdXJjZVN0YXRlcy5zb3VyY2VJZDsgfQotICAg
IHVuc2lnbmVkIGxvbmcgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX1NvdXJjZVN0YXRlcy53aWR0
aDsgfQotICAgIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9Tb3VyY2VT
dGF0ZXMuaGVpZ2h0OyB9Ci0gICAgZmxvYXQgZnJhbWVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9T
b3VyY2VTdGF0ZXMuZnJhbWVSYXRlOyB9Ci0gICAgZmxvYXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7
IHJldHVybiBtX1NvdXJjZVN0YXRlcy5hc3BlY3RSYXRpbzsgfQorICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgc291cmNlSWQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVN0YXRlcy5zb3VyY2VJZCgp
OyB9CisgICAgdW5zaWduZWQgbG9uZyB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlU3Rh
dGVzLndpZHRoKCk7IH0KKyAgICB1bnNpZ25lZCBsb25nIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlU3RhdGVzLmhlaWdodCgpOyB9CisgICAgZmxvYXQgZnJhbWVSYXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VTdGF0ZXMuZnJhbWVSYXRlKCk7IH0KKyAgICBmbG9hdCBhc3BlY3RS
YXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlU3RhdGVzLmFzcGVjdFJhdGlvKCk7IH0KICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGZhY2luZ01vZGUoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBs
b25nIHZvbHVtZSgpIGNvbnN0IHsgcmV0dXJuIG1fU291cmNlU3RhdGVzLnZvbHVtZTsgfQorICAg
IHVuc2lnbmVkIGxvbmcgdm9sdW1lKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VTdGF0ZXMudm9s
dW1lKCk7IH0KICAgICAKLSAgICBib29sIGhhc1ZpZGVvU291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9Tb3VyY2VTdGF0ZXMuc291cmNlVHlwZSA9PSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6Q2Ft
ZXJhOyB9CisgICAgYm9vbCBoYXNWaWRlb1NvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
U3RhdGVzLnNvdXJjZVR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6Q2FtZXJhOyB9
CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTWVkaWFTb3VyY2VTdGF0ZXMoY29uc3QgTWVkaWFT
dHJlYW1Tb3VyY2VTdGF0ZXMmKTsKIAotICAgIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzIG1fU291
cmNlU3RhdGVzOworICAgIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzIG1fc291cmNlU3RhdGVzOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5pZGwJKHJldmlz
aW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
b3VyY2VTdGF0ZXMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTEgQEAgZW51bSBW
aWRlb0ZhY2luZ01vZGVFbnVtIHsgInVzZXIiLCAiZW52aQogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBTb3VyY2VUeXBlRW51bSBzb3VyY2VUeXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgc291cmNlSWQ7CiAKLSAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZyB3aWR0aDsKLSAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1
dGUgdW5zaWduZWQgbG9uZyBoZWlnaHQ7Ci0gICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0
cmlidXRlIGZsb2F0IGZyYW1lUmF0ZTsKLSAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRy
aWJ1dGUgZmxvYXQgYXNwZWN0UmF0aW87Ci0gICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0
cmlidXRlIFZpZGVvRmFjaW5nTW9kZUVudW0gZmFjaW5nTW9kZTsKLSAgICBbQ3VzdG9tR2V0dGVy
XSByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB2b2x1bWU7CisgICAgW0N1c3RvbUdl
dHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IHdpZHRoOworICAgIFtDdXN0
b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nPyBoZWlnaHQ7CisgICAg
W0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0PyBmcmFtZVJhdGU7CisgICAg
W0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0PyBhc3BlY3RSYXRpbzsKKyAg
ICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgVmlkZW9GYWNpbmdNb2RlRW51bT8g
ZmFjaW5nTW9kZTsKKyAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZz8gdm9sdW1lOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTEsNiArMTkxLDkgQEAgdm9pZCBNZWRpYVN0cmVhbTo6YWRkVHJhY2soUGFz
c1JlZlB0cjxNZQogICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvOgogICAgICAgICBt
X3ZpZGVvVHJhY2tzLmFwcGVuZCh0cmFjayk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVk
aWFTdHJlYW1Tb3VyY2U6Ok5vbmU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKICAgICB9CiAKICAgICB0cmFjay0+YWRkT2JzZXJ2ZXIodGhpcyk7CkBAIC0y
MjMsNiArMjI2LDkgQEAgdm9pZCBNZWRpYVN0cmVhbTo6cmVtb3ZlVHJhY2soUGFzc1JlZlB0cgog
ICAgICAgICBpZiAocG9zICE9IG5vdEZvdW5kKQogICAgICAgICAgICAgbV92aWRlb1RyYWNrcy5y
ZW1vdmUocG9zKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6
Tm9uZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGlmIChwb3MgPT0gbm90Rm91bmQpCkBAIC0zMTUsNiArMzIxLDkgQEAgdm9pZCBN
ZWRpYVN0cmVhbTo6YWRkUmVtb3RlU291cmNlKE1lZGlhUwogICAgICAgICB0cmFjayA9IFZpZGVv
U3RyZWFtVHJhY2s6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlOjpjcmVhdGUoc291cmNlKSk7CiAgICAgICAgIG1fdmlkZW9UcmFja3MuYXBw
ZW5kKHRyYWNrKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6
Tm9uZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICB0cmFjay0+YWRkT2JzZXJ2ZXIodGhpcyk7CiAgICAgbV9kZXNjcmlwdG9yLT5hZGRT
b3VyY2Uoc291cmNlKTsKQEAgLTMzNSw2ICszNDQsOSBAQCB2b2lkIE1lZGlhU3RyZWFtOjpyZW1v
dmVSZW1vdGVTb3VyY2UoTWVkCiAgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW86CiAg
ICAgICAgIHRyYWNrcyA9ICZtX3ZpZGVvVHJhY2tzOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IE1lZGlhU3RyZWFtU291cmNlOjpOb25lOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgVmVjdG9yPGludD4gdHJhY2tzVG9SZW1vdmU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2Fw
YWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTU4MDI1KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNhcGFiaWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgVmVjdG9yPFN0cmluZz4gTWVk
aWFTdHJlYW1DYXBhYmlsaXRpZXM6OgogICAgIGNhcGFiaWxpdGllcy5yZXNlcnZlQ2FwYWNpdHko
Y291bnQpOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAg
ICAgICAgY2FwYWJpbGl0aWVzLmFwcGVuZChNZWRpYVNvdXJjZVN0YXRlczo6c291cmNlVHlwZShz
b3VyY2VUeXBlc1tpXSkpOworICAgICAgICBjYXBhYmlsaXRpZXMuYXBwZW5kKE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzOjpzb3VyY2VUeXBlKHNvdXJjZVR5cGVzW2ldKSk7CiAgICAgCiAgICAgcmV0
dXJuIGNhcGFiaWxpdGllczsKIH0KQEAgLTk3LDcgKzk3LDcgQEAgVmVjdG9yPFN0cmluZz4gTWVk
aWFTdHJlYW1DYXBhYmlsaXRpZXM6OgogICAgIGNhcGFiaWxpdGllcy5yZXNlcnZlQ2FwYWNpdHko
Y291bnQpOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAg
ICAgICAgY2FwYWJpbGl0aWVzLmFwcGVuZChNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShm
YWNpbmdNb2Rlc1tpXSkpOworICAgICAgICBjYXBhYmlsaXRpZXMuYXBwZW5kKE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKGZhY2luZ01vZGVzW2ldKSk7CiAgICAgCiAgICAgcmV0
dXJuIGNhcGFiaWxpdGllczsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcAkocmV2aXNpb24gMTU4MDI1
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRpY3Rpb25h
cnkuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJNZWRpYUNvbnN0
cmFpbnRzSW1wbC5oIgogI2luY2x1ZGUgIk1lZGlhU291cmNlU3RhdGVzLmgiCiAjaW5jbHVkZSAi
TWVkaWFTdHJlYW0uaCIKQEAgLTQ0LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJNZWRpYVN0cmVhbVRy
YWNrU291cmNlc1JlcXVlc3QuaCIKICNpbmNsdWRlICJNZWRpYVRyYWNrQ29uc3RyYWludHMuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlVVSUQuaCIKICNpbmNsdWRl
ICJWaWRlb1N0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTU2LDEwICs1NiwxMSBAQCBNZWRpYVN0cmVh
bVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKFNjcmlwCiAgICAgLCBtX3ByaXZhdGVUcmFjayhwcml2
YXRlVHJhY2spCiAgICAgLCBtX2V2ZW50RGlzcGF0Y2hTY2hlZHVsZWQoZmFsc2UpCiB7CisgICAg
QVNTRVJUKG1fcHJpdmF0ZVRyYWNrKTsKKwogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogCi0gICAg
aWYgKG1fcHJpdmF0ZVRyYWNrLT5zb3VyY2UoKSkKLSAgICAgICAgbV9wcml2YXRlVHJhY2stPnNv
dXJjZSgpLT5hZGRPYnNlcnZlcih0aGlzKTsKKyAgICBtX3ByaXZhdGVUcmFjay0+c2V0Q2xpZW50
KHRoaXMpOwogfQogCiBNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3Ry
ZWFtVHJhY2sqIG90aGVyKQpAQCAtNjksMzEgKzcwLDE2IEBAIE1lZGlhU3RyZWFtVHJhY2s6Ok1l
ZGlhU3RyZWFtVHJhY2soTWVkaWEKIAogICAgIG1fcHJpdmF0ZVRyYWNrID0gb3RoZXItPnByaXZh
dGVUcmFjaygpLT5jbG9uZSgpOwogCi0gICAgaWYgKG1fcHJpdmF0ZVRyYWNrLT5zb3VyY2UoKSkK
LSAgICAgICAgbV9wcml2YXRlVHJhY2stPnNvdXJjZSgpLT5hZGRPYnNlcnZlcih0aGlzKTsKLQog
ICAgIG1fZXZlbnREaXNwYXRjaFNjaGVkdWxlZCA9IGZhbHNlOwogfQogCiBNZWRpYVN0cmVhbVRy
YWNrOjp+TWVkaWFTdHJlYW1UcmFjaygpCiB7CisgICAgbV9wcml2YXRlVHJhY2stPnNldENsaWVu
dChudWxscHRyKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpr
aW5kKCkgY29uc3QKK3ZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c2V0U291cmNlKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2U+IG5ld1NvdXJjZSkKIHsKLSAgICByZXR1cm4gbV9wcml2YXRlVHJh
Y2stPmtpbmQoKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzZXRTb3VyY2UoTWVkaWFT
dHJlYW1Tb3VyY2UqIG5ld1NvdXJjZSkKLXsKLSAgICBNZWRpYVN0cmVhbVNvdXJjZSogdHJhY2tT
b3VyY2UgPSBzb3VyY2UoKTsKLQotICAgIGlmICh0cmFja1NvdXJjZSkKLSAgICAgICAgdHJhY2tT
b3VyY2UtPnJlbW92ZU9ic2VydmVyKHRoaXMpOwotCi0gICAgaWYgKG5ld1NvdXJjZSkKLSAgICAg
ICAgbmV3U291cmNlLT5hZGRPYnNlcnZlcih0aGlzKTsKLQogICAgIG1fcHJpdmF0ZVRyYWNrLT5z
ZXRTb3VyY2UobmV3U291cmNlKTsKIH0KIApAQCAtMTE3LDYgKzEwMywxMSBAQCB2b2lkIE1lZGlh
U3RyZWFtVHJhY2s6OnNldEVuYWJsZWQoYm9vbCBlCiAgICAgbV9wcml2YXRlVHJhY2stPnNldEVu
YWJsZWQoZW5hYmxlZCk7CiB9CiAKK2Jvb2wgTWVkaWFTdHJlYW1UcmFjazo6c3RvcHBlZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZVRyYWNrLT5zdG9wcGVkKCk7Cit9CisKIGJvb2wg
TWVkaWFTdHJlYW1UcmFjazo6bXV0ZWQoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGVU
cmFjay0+bXV0ZWQoKTsKQEAgLTE2NywxOCArMTU4LDEyIEBAIFJlZlB0cjxNZWRpYVRyYWNrQ29u
c3RyYWludHM+IE1lZGlhU3RyZWEKIAogUmVmUHRyPE1lZGlhU291cmNlU3RhdGVzPiBNZWRpYVN0
cmVhbVRyYWNrOjpzdGF0ZXMoKSBjb25zdAogewotICAgIGlmICghc291cmNlKCkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgcmV0dXJuIE1lZGlhU291cmNlU3RhdGVzOjpjcmVhdGUoc291cmNl
KCktPnN0YXRlcygpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlVHJhY2stPnN0YXRlcygpOwogfQog
CiBSZWZQdHI8TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM+IE1lZGlhU3RyZWFtVHJhY2s6OmNhcGFi
aWxpdGllcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFzb3VyY2UoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM6OmNyZWF0ZShzb3VyY2UoKS0+
Y2FwYWJpbGl0aWVzKCkpOworICAgIHJldHVybiBtX3ByaXZhdGVUcmFjay0+Y2FwYWJpbGl0aWVz
KCk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6YXBwbHlDb25zdHJhaW50cyhjb25zdCBE
aWN0aW9uYXJ5JiBjb25zdHJhaW50cykKQEAgLTE4Niw2ICsxNzEsMTQgQEAgdm9pZCBNZWRpYVN0
cmVhbVRyYWNrOjphcHBseUNvbnN0cmFpbnRzKAogICAgIC8vIEZJWE1FOiBhcHBseSB0aGUgbmV3
IGNvbnN0cmFpbnRzIHRvIHRoZSB0cmFjawogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjI0MjgKICAgICBtX2NvbnN0cmFpbnRzLT5pbml0aWFsaXplKGNv
bnN0cmFpbnRzKTsKKworICAgIG1fcHJpdmF0ZVRyYWNrLT5hcHBseUNvbnN0cmFpbnRzKG1fY29u
c3RyYWludHMpOworfQorCit2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OmFwcGx5Q29uc3RyYWludHMo
UGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPikKK3sKKyAgICAvLyBGSVhNRTogYXBwbHkgdGhl
IG5ldyBjb25zdHJhaW50cyB0byB0aGUgdHJhY2sKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI4CiB9CiAKIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNr
PiBNZWRpYVN0cmVhbVRyYWNrOjpjbG9uZSgpCkBAIC0xOTgsMTEgKzE5MSwxMiBAQCBSZWZQdHI8
TWVkaWFTdHJlYW1UcmFjaz4gTWVkaWFTdHJlYW1UcmFjCiAKIHZvaWQgTWVkaWFTdHJlYW1UcmFj
azo6c3RvcFByb2R1Y2luZ0RhdGEoKQogewotICAgIGlmIChzdG9wcGVkKCkgfHwgIXNvdXJjZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ByaXZhdGVUcmFjay0+c2V0UmVhZHlTdGF0ZShN
ZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpOwotICAgIG1fcHJpdmF0ZVRyYWNrLT5zdG9wKCk7Cisg
ICAgLy8gTk9URTogdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlICJzdG9wIiBpcyBjYWxs
ZWQgZnJvbSBKUywgdXNpbmcgdGhlCisgICAgLy8gIkltcGxlbWVudGVkQXMiIElETCBhdHRyaWJ1
dGUuIFRoaXMgaXMgZG9uZSBiZWNhdXNlIEFjdGl2ZURPTU9iamVjdCByZXF1aXJlcworICAgIC8v
IGEgInN0b3AiIG1ldGhvZC4KKyAgICAKKyAgICAvLyBUaGUgc3RvcCBtZXRob2Qgc2hvdWxkICJQ
ZXJtYW5lbnRseSBzdG9wIHRoZSBnZW5lcmF0aW9uIG9mIGRhdGEgZm9yIHRyYWNrJ3Mgc291cmNl
LiIKKyAgICBtX3ByaXZhdGVUcmFjay0+c3RvcChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6U3Rv
cFRyYWNrQW5kU3RvcFNvdXJjZSk7CiB9CiAKIGJvb2wgTWVkaWFTdHJlYW1UcmFjazo6ZW5kZWQo
KSBjb25zdApAQCAtMjIyLDMxICsyMTYsNDEgQEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpyZW1v
dmVPYnNlcnZlcihNZQogICAgICAgICBtX29ic2VydmVycy5yZW1vdmUocG9zKTsKIH0KIAotdm9p
ZCBNZWRpYVN0cmVhbVRyYWNrOjpzb3VyY2VTdGF0ZUNoYW5nZWQoKQordm9pZCBNZWRpYVN0cmVh
bVRyYWNrOjp0cmFja1JlYWR5U3RhdGVDaGFuZ2VkKCkKIHsKICAgICBpZiAoc3RvcHBlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3ByaXZhdGVUcmFjay0+c2V0UmVhZHlTdGF0ZShzb3Vy
Y2UoKS0+cmVhZHlTdGF0ZSgpKTsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSBy
ZWFkeVN0YXRlID0gbV9wcml2YXRlVHJhY2stPnJlYWR5U3RhdGUoKTsKKyAgICBpZiAocmVhZHlT
dGF0ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSkKKyAgICAgICAgc2NoZWR1bGVFdmVudERp
c3BhdGNoKEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0YXJ0ZWRFdmVudCwgZmFsc2UsIGZh
bHNlKSk7CisgICAgZWxzZSBpZiAocmVhZHlTdGF0ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6RW5k
ZWQpCisgICAgICAgIHNjaGVkdWxlRXZlbnREaXNwYXRjaChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5lbmRlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKworICAgIGNvbmZpZ3VyZVRyYWNrUmVu
ZGVyaW5nKCk7CiB9CiAgICAgCi12b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnNvdXJjZU11dGVkQ2hh
bmdlZCgpCit2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrTXV0ZWRDaGFuZ2VkKCkKIHsKICAg
ICBpZiAoc3RvcHBlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3ByaXZhdGVUcmFjay0+
c2V0TXV0ZWQoc291cmNlKCktPm11dGVkKCkpOworICAgIGlmIChtdXRlZCgpKQorICAgICAgICBz
Y2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubXV0ZUV2ZW50
LCBmYWxzZSwgZmFsc2UpKTsKKyAgICBlbHNlCisgICAgICAgIHNjaGVkdWxlRXZlbnREaXNwYXRj
aChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS51bm11dGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7
CiAKICAgICBjb25maWd1cmVUcmFja1JlbmRlcmluZygpOwogfQogCi12b2lkIE1lZGlhU3RyZWFt
VHJhY2s6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKK3ZvaWQgTWVkaWFTdHJlYW1UcmFjazo6dHJh
Y2tFbmFibGVkQ2hhbmdlZCgpCiB7CiAgICAgaWYgKHN0b3BwZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgc2V0RW5hYmxlZChzb3VyY2UoKS0+ZW5hYmxlZCgpKTsKLSAgICAvLyBtZWRpYSBm
cm9tIHRoZSBzb3VyY2Ugb25seSBmbG93cyB3aGVuIGEgTWVkaWFTdHJlYW1UcmFjayBvYmplY3Qg
aXMgYm90aCB1bm11dGVkIGFuZCBlbmFibGVkCisKKyAgICAvLyBNZWRpYSBmcm9tIHRoZSBzb3Vy
Y2Ugb25seSBmbG93cyB3aGVuIGEgTWVkaWFTdHJlYW1UcmFjayBvYmplY3QgaXMgYm90aCB1bm11
dGVkIGFuZCBlbmFibGVkLgogICAgIGNvbmZpZ3VyZVRyYWNrUmVuZGVyaW5nKCk7CiB9CiAKQEAg
LTI1OSwxMSArMjYzLDYgQEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpjb25maWd1cmVUcmFja1Jl
bgogICAgIC8vIC4uLiBtZWRpYSBmcm9tIHRoZSBzb3VyY2Ugb25seSBmbG93cyB3aGVuIGEgTWVk
aWFTdHJlYW1UcmFjayBvYmplY3QgaXMgYm90aCB1bm11dGVkIGFuZCBlbmFibGVkCiB9CiAKLWJv
b2wgTWVkaWFTdHJlYW1UcmFjazo6c3RvcHBlZCgpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZVRy
YWNrLT5zdG9wcGVkKCk7Ci19Ci0KIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6dHJhY2tEaWRFbmQo
KQogewogICAgIG1fcHJpdmF0ZVRyYWNrLT5zZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNl
OjpFbmRlZCk7CkBAIC0yNzQsNyArMjczLDcgQEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjp0cmFj
a0RpZEVuZCgpCiAKIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c3RvcCgpCiB7Ci0gICAgc3RvcFBy
b2R1Y2luZ0RhdGEoKTsKKyAgICBtX3ByaXZhdGVUcmFjay0+c3RvcChNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZTo6U3RvcFRyYWNrT25seSk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c2No
ZWR1bGVFdmVudERpc3BhdGNoKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQpAQCAtMzA3LDIyICsz
MDYsNiBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OmRpc3BhdGNoUXVldWVkRXZlCiAgICAgZXZl
bnRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1UcmFjazo6dHJhY2tSZWFkeVN0YXRl
Q2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fcHJpdmF0ZVRyYWNrLT5yZWFkeVN0YXRlKCkgPT0gTWVk
aWFTdHJlYW1Tb3VyY2U6OkxpdmUpCi0gICAgICAgIHNjaGVkdWxlRXZlbnREaXNwYXRjaChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdGFydGVkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotICAg
IGVsc2UgaWYgKG1fcHJpdmF0ZVRyYWNrLT5yZWFkeVN0YXRlKCkgPT0gTWVkaWFTdHJlYW1Tb3Vy
Y2U6OkVuZGVkKQotICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkuZW5kZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgTWVkaWFT
dHJlYW1UcmFjazo6dHJhY2tNdXRlZENoYW5nZWQoKQotewotICAgIGlmIChtdXRlZCgpKQotICAg
ICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubXV0
ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLSAgICBlbHNlCi0gICAgICAgIHNjaGVkdWxlRXZlbnRE
aXNwYXRjaChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS51bm11dGVFdmVudCwgZmFsc2UsIGZh
bHNlKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtVHJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaAkocmV2aXNpb24gMTU4MDI1KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDEwICs0OCwxMSBAQCBjbGFzcyBNZWRpYVN0cmVhbVRyYWNrU291cmNlc0Nh
bGxiYWNrOwogY2xhc3MgTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM7CiBjbGFzcyBNZWRpYVRyYWNr
Q29uc3RyYWludHM7CiAKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2sgOiBwdWJsaWMgUmVmQ291bnRl
ZDxNZWRpYVN0cmVhbVRyYWNrPiwgcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIEFjdGl2
ZURPTU9iamVjdCwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBNZWRp
YVN0cmVhbVNvdXJjZTo6T2JzZXJ2ZXIsIHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUNs
aWVudCB7CitjbGFzcyBNZWRpYVN0cmVhbVRyYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFT
dHJlYW1UcmFjaz4sIHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBBY3RpdmVET01PYmpl
Y3QsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGVDbGllbnQgewogcHVibGljOgogICAgIGNsYXNzIE9ic2VydmVyIHsKICAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9ic2VydmVyKCkgeyB9CiAgICAgICAgIHZpcnR1YWwg
dm9pZCB0cmFja0RpZEVuZCgpID0gMDsKICAgICB9OwogCkBAIC02Nyw2ICs2OCw3IEBAIHB1Ymxp
YzoKICAgICBib29sIG11dGVkKCkgY29uc3Q7CiAgICAgYm9vbCByZWFkb25seSgpIGNvbnN0Owog
ICAgIGJvb2wgcmVtb3RlKCkgY29uc3Q7CisgICAgYm9vbCBzdG9wcGVkKCkgY29uc3Q7CiAKICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHJlYWR5U3RhdGUoKSBjb25zdDsKIApAQCAtNzYsNiArNzgs
NyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPE1lZGlhU291cmNlU3RhdGVzPiBzdGF0ZXMoKSBjb25z
dDsKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllcygpIGNv
bnN0OwogICAgIHZvaWQgYXBwbHlDb25zdHJhaW50cyhjb25zdCBEaWN0aW9uYXJ5Jik7CisgICAg
dm9pZCBhcHBseUNvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pOwogCiAg
ICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IGNsb25lKCk7CiAgICAgdm9pZCBzdG9wUHJvZHVj
aW5nRGF0YSgpOwpAQCAtODcsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihvdmVyY29uc3RyYWluZWQpOwogCiAgICAgTWVkaWFTdHJlYW1Tb3Vy
Y2UqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpdmF0ZVRyYWNrLT5zb3VyY2UoKTsgfQot
ICAgIHZvaWQgc2V0U291cmNlKE1lZGlhU3RyZWFtU291cmNlKik7CisgICAgdm9pZCBzZXRTb3Vy
Y2UoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4pOwogCiAgICAgYm9vbCBlbmRlZCgpIGNv
bnN0OwogCkBAIC05NSwxMCArOTgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVPYnNlcnZl
cihPYnNlcnZlciopOwogICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiBwcml2YXRlVHJhY2so
KSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGVUcmFjay5nZXQoKTsgfQogCi0gICAgLy8gTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGVDbGllbnQKLSAgICB2b2lkIHRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQo
KTsKLSAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKCk7Ci0KICAgICAvLyBFdmVudFRhcmdldAog
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiBNZWRpYVN0cmVhbVRyYWNrRXZlbnRUYXJnZXRJ
bnRlcmZhY2VUeXBlOyB9CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gQWN0aXZl
RE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KQEAgLTEyNCwxMSArMTIzLDEw
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgT1ZFUlJJREUg
RklOQUwgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgT1ZF
UlJJREUgRklOQUwgeyBkZXJlZigpOyB9CiAKLSAgICAvLyBNZWRpYVN0cmVhbVNvdXJjZU9ic2Vy
dmVyCi0gICAgdmlydHVhbCB2b2lkIHNvdXJjZVN0YXRlQ2hhbmdlZCgpIE9WRVJSSURFIEZJTkFM
OwotICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VNdXRlZENoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsK
LSAgICB2aXJ0dWFsIHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsK
LSAgICB2aXJ0dWFsIGJvb2wgc3RvcHBlZCgpIE9WRVJSSURFIEZJTkFMOworICAgIC8vIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50CisgICAgdm9pZCB0cmFja1JlYWR5U3RhdGVDaGFuZ2Vk
KCk7CisgICAgdm9pZCB0cmFja011dGVkQ2hhbmdlZCgpOworICAgIHZvaWQgdHJhY2tFbmFibGVk
Q2hhbmdlZCgpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fc2NoZWR1bGVkRXZlbnRz
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJl
cXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vVXNlck1lZGlhUmVxdWVzdC5jcHAJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NywxMSArMTY3LDExIEBAIHZvaWQgVXNlck1lZGlhUmVxdWVzdDo6Y2FsbFN1Y2Nl
c3NIYW5kbGUKIAogICAgIE1lZGlhU3RyZWFtVHJhY2tWZWN0b3IgdHJhY2tzID0gc3RyZWFtLT5n
ZXRBdWRpb1RyYWNrcygpOwogICAgIGZvciAoTWVkaWFTdHJlYW1UcmFja1ZlY3Rvcjo6aXRlcmF0
b3IgaXRlciA9IHRyYWNrcy5iZWdpbigpOyBpdGVyICE9IHRyYWNrcy5lbmQoKTsgKytpdGVyKQot
ICAgICAgICAoKml0ZXIpLT5zb3VyY2UoKS0+c2V0Q29uc3RyYWludHMobV9hdWRpb0NvbnN0cmFp
bnRzKTsKKyAgICAgICAgKCppdGVyKS0+YXBwbHlDb25zdHJhaW50cyhtX2F1ZGlvQ29uc3RyYWlu
dHMpOwogCiAgICAgdHJhY2tzID0gc3RyZWFtLT5nZXRWaWRlb1RyYWNrcygpOwogICAgIGZvciAo
TWVkaWFTdHJlYW1UcmFja1ZlY3Rvcjo6aXRlcmF0b3IgaXRlciA9IHRyYWNrcy5iZWdpbigpOyBp
dGVyICE9IHRyYWNrcy5lbmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT5zb3VyY2UoKS0+
c2V0Q29uc3RyYWludHMobV92aWRlb0NvbnN0cmFpbnRzKTsKKyAgICAgICAgKCppdGVyKS0+YXBw
bHlDb25zdHJhaW50cyhtX3ZpZGVvQ29uc3RyYWludHMpOwogCiAgICAgbV9zdWNjZXNzQ2FsbGJh
Y2stPmhhbmRsZUV2ZW50KHN0cmVhbS5nZXQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTgwMjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDE2IEBACiAJCTA3MDMzNEQ3MTQ1OUZGRDUwMDhEOEQ0
NSAvKiBUcmFja0Jhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3MDMzNEQ2MTQ1OUZGRDUwMDhEOEQ0NSAvKiBUcmFja0Jhc2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzAzMzREOTE0NUEwMDZG
MDA4RDhENDUgLyogVHJhY2tCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3MDMzNEQ4MTQ1QTAwNkYwMDhEOEQ0NSAvKiBUcmFja0Jhc2UuY3Bw
ICovOyB9OwogCQkwNzAzMzRFOTE0NUExRjM2MDA4RDhENDUgLyogSlNUcmFja0N1c3RvbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAzMzRFODE0
NUExRjM1MDA4RDhENDUgLyogSlNUcmFja0N1c3RvbS5jcHAgKi87IH07CisJCTA3MDM2M0Q2MTgx
QTE0NjUwMEMwNzRBNSAvKiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAzNjNENDE4MUExNDY1MDBDMDc0
QTUgLyogTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuY3BwICovOyB9OworCQkwNzAzNjNENzE4MUEx
NDY1MDBDMDc0QTUgLyogTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0Q1MTgxQTE0NjUwMEMwNzRBNSAv
KiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oICovOyB9OworCQkwNzAzNjNFMDE4MUExQ0RDMDBD
MDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0Q4MTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1ZGlv
Q2FwdHVyZVNvdXJjZS5oICovOyB9OworCQkwNzAzNjNFMTE4MUExQ0RDMDBDMDc0QTUgLyogQVZB
dWRpb0NhcHR1cmVTb3VyY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwNzAzNjNEOTE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3Vy
Y2UubW0gKi87IH07CisJCTA3MDM2M0UyMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwNzAzNjNEQTE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oICov
OyB9OworCQkwNzAzNjNFMzE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2
M0RCMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tICovOyB9Owor
CQkwNzAzNjNFNDE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0RDMTgxQTFD
REMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5oICovOyB9OworCQkwNzAzNjNFNTE4
MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAzNjNERDE4MUExQ0RDMDBDMDc0QTUg
LyogQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0gKi87IH07CisJCTA3MDM2M0U2MTgxQTFDREMwMEMw
NzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREUxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9D
YXB0dXJlU291cmNlLmggKi87IH07CisJCTA3MDM2M0U3MTgxQTFDREMwMEMwNzRBNSAvKiBBVlZp
ZGVvQ2FwdHVyZVNvdXJjZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3MDM2M0RGMTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJj
ZS5tbSAqLzsgfTsKIAkJMDcwNTg0RkQxN0Y5RDZERjAwNUYyQkNCIC8qIE1lZGlhU3RyZWFtU291
cmNlQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwNzA1ODRGQjE3RjlENkRGMDA1RjJCQ0IgLyogTWVkaWFTdHJlYW1Tb3VyY2VDYXBh
YmlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwNzA1ODRGRjE3RjlGMDVFMDA1RjJCQ0IgLyogQ2FwYWJpbGl0eVJhbmdlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDU4NEZFMTdGOUYw
NUUwMDVGMkJDQiAvKiBDYXBhYmlsaXR5UmFuZ2UuY3BwICovOyB9OwogCQkwNzA1ODUwMjE3RkEx
MEQwMDA1RjJCQ0IgLyogSlNBbGxWaWRlb0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzA1ODUwMDE3RkExMEQwMDA1RjJCQ0Ig
LyogSlNBbGxWaWRlb0NhcGFiaWxpdGllcy5jcHAgKi87IH07CkBAIC0zMTMsNiArMzIzLDggQEAK
IAkJMDdEQzVGRDQxN0QzRUVFOTAwOTlGODkwIC8qIEpTUlRDU3RhdHNSZXNwb25zZUN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0RDNUZE
MzE3RDNFRUU5MDA5OUY4OTAgLyogSlNSVENTdGF0c1Jlc3BvbnNlQ3VzdG9tLmNwcCAqLzsgfTsK
IAkJMDdFMTE2QjExNDg5QzlBMTAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RTExNkIwMTQ4OUM5
QTEwMEVDNUFDRSAvKiBKU1RleHRUcmFja0N1c3RvbS5jcHAgKi87IH07CiAJCTA3RTExNzA3MTQ4
OUVCRUIwMEVDNUFDRSAvKiBKU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0UxMTcwNjE0ODlFQkVCMDBFQzVBQ0Ug
LyogSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwICovOyB9OworCQkwN0ZGREU2ODE4MUFFRDQyMDA3
MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdGRkRFNjYxODFBRUQ0MjAwNzJENDA5IC8qIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCAqLzsgfTsKKwkJMDdGRkRFNjkxODFBRUQ0MjAwNzJE
NDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0ZGREU2NzE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUuaCAqLzsgfTsKIAkJMDgwNkU1N0ExMjg5MzA0NTAwN0NFRDMyIC8q
IFNWR01hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDgwNkU1NzkxMjg5MzA0NTAwN0NFRDMyIC8qIFNWR01hdHJpeC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4MEU0OTI2MTI1NUYzQkQwMEVG
Q0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEU0OTIyMTI1NUYzQkQwMEVGQ0EyNyAvKiBT
VkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCAqLzsgfTsKIAkJMDgwRTQ5MjgxMjU1RjNCRDAw
RUZDQTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODBFNDkyNDEyNTVGM0JEMDBFRkNBMjcgLyog
U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCAqLzsgfTsKQEAgLTY0ODEsNiArNjQ5MywxNiBA
QAogCQkwNzAzMzRENjE0NTlGRkQ1MDA4RDhENDUgLyogVHJhY2tCYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYWNrQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzAzMzREODE0NUEwMDZGMDA4RDhENDUgLyogVHJhY2tCYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYWNrQmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3MDMzNEU4MTQ1QTFGMzUwMDhEOEQ0NSAvKiBKU1RyYWNrQ3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHJhY2tDdXN0
b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzAzNjNENDE4MUExNDY1MDBD
MDc0QTUgLyogTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwNzAzNjNENTE4MUExNDY1MDBDMDc0QTUgLyogTWVkaWFTdHJl
YW1Tb3VyY2VTdGF0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFT
dHJlYW1Tb3VyY2VTdGF0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwMzYz
RDgxODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFWQXVkaW9DYXB0dXJlU291cmNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTA3MDM2M0Q5MTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1ZGlvQ2Fw
dHVyZVNvdXJjZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFW
QXVkaW9DYXB0dXJlU291cmNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzAz
NjNEQTE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDM2M0RCMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMDcwMzYzREMxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFWTWVkaWFDYXB0dXJlU291cmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDM2M0REMTgxQTFDREMwMEMwNzRBNSAv
KiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEFWTWVkaWFDYXB0dXJlU291cmNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwNzAzNjNERTE4MUExQ0RDMDBDMDc0QTUgLyogQVZWaWRlb0NhcHR1cmVTb3VyY2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVZWaWRlb0NhcHR1cmVTb3VyY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwMzYzREYxODFBMUNEQzAwQzA3NEE1
IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQVZWaWRlb0NhcHR1cmVTb3VyY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA3MDU4NEZCMTdGOUQ2REYwMDVGMkJDQiAvKiBNZWRpYVN0cmVhbVNvdXJjZUNh
cGFiaWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVh
bVNvdXJjZUNhcGFiaWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzA1
ODRGRTE3RjlGMDVFMDA1RjJCQ0IgLyogQ2FwYWJpbGl0eVJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhcGFiaWxpdHlSYW5nZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3MDU4NTAwMTdGQTEwRDAwMDVGMkJDQiAvKiBKU0FsbFZpZGVv
Q2FwYWJpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
QWxsVmlkZW9DYXBhYmlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
Njc1MCw2ICs2NzcyLDggQEAKIAkJMDdEQzVGRDMxN0QzRUVFOTAwOTlGODkwIC8qIEpTUlRDU3Rh
dHNSZXNwb25zZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1JUQ1N0YXRzUmVzcG9uc2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwN0UxMTZCMDE0ODlDOUExMDBFQzVBQ0UgLyogSlNUZXh0VHJhY2tDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUZXh0VHJhY2tDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0UxMTcwNjE0ODlFQkVCMDBFQzVBQ0Ug
LyogSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwN0ZGREU2NjE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwN0ZGREU2NzE4
MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgwNkU1NzkxMjg5MzA0NTAwN0NFRDMyIC8qIFNWR01hdHJp
eC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdNYXRyaXguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgwRTQ5MjExMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1Rl
eHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwODBFNDkyMjEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVu
Z2luZUJhc2VsaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM0
NjQsNiArMTM0ODgsMTAgQEAKIAkJMDcyMjFCOTIxN0NGMEFENDAwODQ4RTUxIC8qIG1lZGlhc3Ry
ZWFtICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwN0ZG
REU2NjE4MUFFRDQyMDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwICovLAor
CQkJCTA3RkZERTY3MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5o
ICovLAorCQkJCTA3MDM2M0Q0MTgxQTE0NjUwMEMwNzRBNSAvKiBNZWRpYVN0cmVhbVNvdXJjZVN0
YXRlcy5jcHAgKi8sCisJCQkJMDcwMzYzRDUxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzLmggKi8sCiAJCQkJMDcyOUIxNEQxN0NGQ0NBMDAwNEYxRDYwIC8qIG1hYyAq
LywKIAkJCQkwNzIyMUI5OTE3Q0YwQUQ0MDA4NDhFNTEgLyogTWVkaWFDb25zdHJhaW50cy5oICov
LAogCQkJCTA3MjIxQjlBMTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYVN0cmVhbUNlbnRlci5jcHAg
Ki8sCkBAIC0xMzQ5OSw2ICsxMzUyNywxNCBAQAogCQkwNzI5QjE0RDE3Q0ZDQ0EwMDA0RjFENjAg
LyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkw
NzAzNjNEODE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLywKKwkJ
CQkwNzAzNjNEOTE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UubW0gKi8s
CisJCQkJMDcwMzYzREExODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIu
aCAqLywKKwkJCQkwNzAzNjNEQjE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFu
YWdlci5tbSAqLywKKwkJCQkwNzAzNjNEQzE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1
cmVTb3VyY2UuaCAqLywKKwkJCQkwNzAzNjNERDE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNh
cHR1cmVTb3VyY2UubW0gKi8sCisJCQkJMDcwMzYzREUxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlk
ZW9DYXB0dXJlU291cmNlLmggKi8sCisJCQkJMDcwMzYzREYxODFBMUNEQzAwQzA3NEE1IC8qIEFW
VmlkZW9DYXB0dXJlU291cmNlLm1tICovLAogCQkJCTA3MjlCMTRFMTdDRkNDQTAwMDRGMUQ2MCAv
KiBNZWRpYVN0cmVhbUNlbnRlck1hYy5jcHAgKi8sCiAJCQkJMDcyOUIxNEYxN0NGQ0NBMDAwNEYx
RDYwIC8qIE1lZGlhU3RyZWFtQ2VudGVyTWFjLmggKi8sCiAJCQkpOwpAQCAtMjIzMzgsNiArMjIz
NzQsNyBAQAogCQkJCTg1RTcxMUQ5MEFDNUQ1MzUwMDUzMjcwRiAvKiBET01UZXh0SW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE4ODYwNEI0MEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1l
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDVGRDY5RTAxMjg0NUQ0MzAwQjJCRUIzIC8qIERPTVRp
bWVTdGFtcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDdGRkRFNjkxODFBRUQ0MjAwNzJENDA5IC8q
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NkZDMkIwQzEy
MzcwREEwMDA2QTk5MUEgLyogRE9NVG9rZW5MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTQ1
MzQ5NzE2QTlCQjZBMDAwRjZGRDIgLyogRE9NVHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMTQ1MzQ5OTE2QTlCQjZBMDAwRjZGRDIgLyogRE9NVHJhbnNpdGlvbkV2ZW50SW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMjI0MjYsNiArMjI0NjMsNyBAQAogCQkJCUE4RUE3
RUMwMEExOTQ1RDAwMEE4RUY1RiAvKiBFbnRpdHlSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZEMzE2MDkzMTJCMDI2RjcwMEMxQTM1OSAvKiBFcXVhbFBvd2VyUGFubmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyRUNGN0FFMjEwMTYyQjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMDcwMzYzRTQxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0
dXJlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAzMUI0MjBBNDRFRkM3MDBGOTkyRTAg
LyogRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzhEMzM1MTI0NDA1NDgwMDMyM0QzMyAv
KiBFdmVudENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQUI2RDI5MTdDN0RFNkMwMEM2
MEIzNCAvKiBNZWRpYUNvbnRyb2xzSG9zdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzMyOCw2ICsy
MzM2Niw3IEBACiAJCQkJQjJGQTNFMDcwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNFMDkwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHVGl0bGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0UwQjBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAorCQkJCTA3
MDM2M0Q3MTgxQTE0NjUwMEMwNzRBNSAvKiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjJGQTNFMEQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVHJhbnNmb3Jt
TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcyNzdFNEYxN0QwMThDQzAwMTU1MzREIC8qIEpT
TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJG
QTNFMEYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVFJlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMjM2NDUsNiArMjM2ODQsNyBAQAogCQkJCUIyMjI3OTcxMEQwMEJGMjIwMDcxQjc4MiAv
KiBQYXR0ZXJuQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NjUwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCThBN0ND
OTZCMTIwNzZENzMwMDFENDU4OCAvKiBQZW5kaW5nU2NyaXB0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwNzAzNjNFNjE4MUExQ0RDMDBDMDc0QTUgLyogQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCThBODQ0RDA1MTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJmb3JtYW5jZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5NjlEQjAxN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDRFRN
RlNlbmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZCRTM0MDExNTA1OENCMjAwQ0UwRkQ4IC8q
IFBlcmZvcm1hbmNlRW50cnkuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ1MDIsNiArMjQ1NDIsNyBA
QAogCQkJCTQ5RTkxMUQyMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NEZFNzM3MEEyMjk3QkUwMDU4RDdBRCAvKiBU
cmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3RkQ0Mjk4MTE4MzY4NDYwMDkzQzAyOSAv
KiBUcmVlRGVwdGhMaW1pdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDcwMzYzRTAxODFBMUNEQzAw
QzA3NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEQ2
NEI1RDEzNEE1QjZCMDBFNThGREEgLyogVHJlZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MUQ3MTlEMTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzdFMUZGMDE0QUFDQjZFMDA1QjdDQjYgLyogVHJlZVNjb3BlQWRvcHRlci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNDU5MCw2ICsyNDYzMSw3IEBACiAJCQkJQTBFRTBERjYxNDRG
ODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdSZW5kZXJlckluZm8uaCBpbiBIZWFkZXJzICovLAog
CQkJCUEwRUUwREY4MTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJHTERlYnVnU2hhZGVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkUzRkFFOEYxNDczM0ZEQjAwRTQyMzA3IC8qIFdlYkdMRGVwdGhUZXh0
dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzAzNjNFMjE4MUExQ0RDMDBDMDc0QTUgLyogQVZD
YXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkVCRjBFNTUxMkE4OTI5
ODAwREIxNzA5IC8qIFdlYkdMRXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlD
RjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNkU0N0U2NjExMEI3OTQ0QjAwQjE4NkM4IC8qIFdlYkdMR2V0SW5mby5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNjEyNiw2ICsyNjE2OCw3IEBACiAJCQkJMTRDRjdCMzMwOUY2RUNENzAwRUIzNjY1
IC8qIEpTQ1NTUnVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQ2QzFFRTBDMEREQkRGMDAy
MENGQzMgLyogSlNDU1NSdWxlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4RDA1RkE3
MEEyM0IzMDEwMDVFNzIwMyAvKiBKU0NTU1J1bGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTA3MDM2M0U1MTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTkzOTIyNjJGMTAzMjEwODQwMDZFN0Q1RCAvKiBKU0NTU1J1bGVMaXN0
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjAxMUI2MEEwMDMxMzMwMDgzMDNGOSAv
KiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1ODI1RjMw
QzBCODkzODAwNTNGMUI1IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTI2NTI2LDYgKzI2NTY5LDcgQEAKIAkJCQlCMkZBM0Q5ODBBQjc1QTZGMDAw
RTVBQzQgLyogSlNTVkdGb3JlaWduT2JqZWN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMkZBM0Q5QTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdHRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMjdCMjgyNzBDRUYwQzA3MDBEMzlENTQgLyogSlNTVkdHbHlwaEVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDcwMzYzRTExODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVk
aW9DYXB0dXJlU291cmNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjREOTEyOTgxM0NBOTZERTAw
RDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
RkEzRDlDMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0dyYWRpZW50RWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NTE3NEVDMkJDQ0FGMTdFQUUzRjQ2RjggLyogSlNTVkdHcmFwaGljc0Vs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjU5Nyw2ICsyNjY0MSw3IEBACiAJCQkJQjJG
QTNFMEEwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyRkEzRTBDMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RyYW5zZm9ybUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNFMEUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVFJl
ZkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDcwMzYzRDYxODFBMTQ2NTAwQzA3NEE1
IC8qIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEz
RTEwMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RTcGFuRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMkZBM0UxMjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdVbml0VHlwZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNFMTQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVXNlRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2OTIzLDYgKzI2OTY4LDcgQEAKIAkJCQlBOUM2
RTRGMzBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5NzIwNUFCQjEyMzkyOTI3MDBCMTczODAgLyogUGx1Z2luRG9jdW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFEQTE0MTAwRTFBRTVEOTAwMDIzRUU1IC8qIFBsdWdpbk1haW5UaHJlYWRT
Y2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDcwMzYzRTMxODFBMUNEQzAwQzA3NEE1
IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk3MUUyMTgz
QjE3MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzZGRjE3RTMxMTIzNTY3MzAwMUQ2MUI1IC8qIFBsdWdpblZpZXdOb25lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyQjFGNzE2MEQwMENBQTgwMDRBRUE2NCAvKiBQb2ludGVyRXZl
bnRzSGl0UnVsZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzIyNSw2ICsyNzI3MSw3IEBACiAJ
CQkJMDc4RTA5MEUxN0QxNENFRTAwNDIwQUExIC8qIFJUQ1N0YXRzUmVwb3J0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUQwMUEyN0FEMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5n
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyNkNERTBFMTE0MDQyNEMwMDFFNUE2OCAvKiBTcGF0
aWFsTmF2aWdhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwN0ZGREU2ODE4MUFFRDQyMDA3
MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzU0MTVDMjkxMjlBOTkyMDAwM0FENjY5IC8qIFNwZWVjaElucHV0UmVzdWx0TGlzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBQTJBNUFENTE2QTQ4NjE0MDA5NzVBMjUgLyogU3BlZWNoU3ludGhl
c2lzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFBMkE1QUQzMTZBNDg2MEQwMDk3NUEyNSAvKiBT
cGVlY2hTeW50aGVzaXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3NjM0LDYgKzI3Njgx
LDcgQEAKIAkJCQlCNTBGNUI4MTBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9iakNFeHRyYXMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTgwODEwRTE2RkNFQ0RGMDBCODBEMDcgLyogV2ViQ29y
ZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxNTI1NTE2
MTZGRDIzNTAwMDNEN0FEQiAvKiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09wZXJhdGlvblF1ZXVl
RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKKwkJCQkwNzAzNjNFNzE4MUExQ0RDMDBDMDc0QTUg
LyogQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0VCMTY5NTA5
Rjg4MEIwMDA5MUY4RkYgLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTM3RjgxOEZFMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0g
aW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUIwNzA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZVZp
ZXcubSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3RvbS5jcHAJKHJldmlzaW9uIDE1ODAy
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMCBAQCBKU1ZhbHVlIEpTTWVkaWFT
b3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoCiAgICAgaWYgKCFpbXBsKCkuaGFzVmlkZW9Tb3VyY2Uo
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIG1vZGUgPSBpbXBsKCkuZmFjaW5nTW9kZSgpOworICAgIGlmIChtb2RlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgCiAgICAgcmV0dXJuIGpzU3RyaW5n
V2l0aENhY2hlKGV4ZWMsIGltcGwoKS5mYWNpbmdNb2RlKCkpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2Vu
dGVyLmgJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEzICs0Miw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFDb25zdHJhaW50czsKIGNsYXNz
IE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ7Ci1jbGFzcyBNZWRpYVN0cmVhbUNyZWF0aW9uQ2xp
ZW50OwotY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOwotY2xhc3MgTWVkaWFTdHJlYW1Tb3Vy
Y2VDYXBhYmlsaXRpZXM7CitjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczsKIGNsYXNzIE1l
ZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudDsKIAotc3RydWN0IE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzOwotCiBjbGFzcyBNZWRpYVN0cmVhbUNlbnRlciB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+TWVkaWFTdHJlYW1DZW50ZXIoKTsKQEAgLTY1LDcgKzYxLDYgQEAgcHVibGljOgog
cHJvdGVjdGVkOgogICAgIE1lZGlhU3RyZWFtQ2VudGVyKCk7CiAKLSAgICB2b2lkIGVuZExvY2Fs
TWVkaWFTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKik7CiAgICAgc3RhdGljIE1lZGlhU3Ry
ZWFtQ2VudGVyJiBwbGF0Zm9ybUNlbnRlcigpOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2Ny
aXB0b3IuY3BwCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw2ICs2MCw5IEBAIHZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRTb3VyY2UoUGEKICAg
ICAgICAgaWYgKG1fdmlkZW9TdHJlYW1Tb3VyY2VzLmZpbmQoc291cmNlKSA9PSBub3RGb3VuZCkK
ICAgICAgICAgICAgIG1fdmlkZW9TdHJlYW1Tb3VyY2VzLmFwcGVuZChzb3VyY2UpOwogICAgICAg
ICBicmVhazsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpOb25lOgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC03OSw2ICs4
Miw5IEBAIHZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpyZW1vdmVTb3VyY2UKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgbV92aWRlb1N0cmVhbVNvdXJjZXMucmVtb3ZlKHBvcyk7CiAg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6Ok5vbmU6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTEw
NSwxMyArMTExLDE1IEBAIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6TWVkaWFTdHJlYW1EZXNjcmkK
IHsKICAgICBBU1NFUlQobV9pZC5sZW5ndGgoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhdWRpb1NvdXJjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbV9hdWRpb1N0cmVhbVNvdXJj
ZXMuYXBwZW5kKGF1ZGlvU291cmNlc1tpXSk7Ci0gICAgICAgIG1fYXVkaW9UcmFja0Rlc2NyaXB0
b3JzLmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKGF1ZGlvU291cmNlc1tp
XSkpOworICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSA9IGF1ZGlvU291
cmNlc1tpXTsKKyAgICAgICAgbV9hdWRpb1N0cmVhbVNvdXJjZXMuYXBwZW5kKHNvdXJjZSk7Cisg
ICAgICAgIG1fYXVkaW9UcmFja0Rlc2NyaXB0b3JzLmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZTo6Y3JlYXRlKHNvdXJjZSkpOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdmlkZW9Tb3VyY2VzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIG1fdmlkZW9TdHJlYW1Tb3Vy
Y2VzLmFwcGVuZCh2aWRlb1NvdXJjZXNbaV0pOwotICAgICAgICBtX3ZpZGVvVHJhY2tEZXNjcmlw
dG9ycy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZSh2aWRlb1NvdXJjZXNb
aV0pKTsKKyAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBzb3VyY2UgPSB2aWRlb1Nv
dXJjZXNbaV07CisgICAgICAgIG1fdmlkZW9TdHJlYW1Tb3VyY2VzLmFwcGVuZChzb3VyY2UpOwor
ICAgICAgICBtX3ZpZGVvVHJhY2tEZXNjcmlwdG9ycy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGU6OmNyZWF0ZShzb3VyY2UpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5j
cHAJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsMjAg
QEAgdm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6c2V0UmVhZHlTdGF0ZShSZQogCiAgICAgbV9yZWFk
eVN0YXRlID0gcmVhZHlTdGF0ZTsKICAgICBmb3IgKFZlY3RvcjxPYnNlcnZlcio+OjppdGVyYXRv
ciBpID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgaSAhPSBtX29ic2VydmVycy5lbmQoKTsgKytpKQot
ICAgICAgICAoKmkpLT5zb3VyY2VTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgKCppKS0+c291cmNl
UmVhZHlTdGF0ZUNoYW5nZWQoKTsKKworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTGl2ZSkgewor
ICAgICAgICBzdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IEVuZGVkKQorICAgICAgICAvLyBUaGVyZSBhcmUg
bm8gbW9yZSBjb25zdW1lcnMgb2YgdGhpcyBzb3VyY2UncyBkYXRhLCBzaHV0IGl0IGRvd24gYXMg
YXBwcm9wcmlhdGUuCisgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL21lZGlhY2FwdHVy
ZS1zdHJlYW1zLyN3aWRsLU1lZGlhU3RyZWFtVHJhY2stc3RvcC12b2lkCisgICAgICAgIC8vIElm
IHRoZSBkYXRhIGlzIGJlaW5nIGdlbmVyYXRlZCBmcm9tIGEgbGl2ZSBzb3VyY2UgKGUuZy4sIGEg
bWljcm9waG9uZSBvciBjYW1lcmEpLCB0aGVuIHRoZSB1c2VyCisgICAgICAgIC8vIGFnZW50IHNo
b3VsZCByZW1vdmUgYW55IGFjdGl2ZSAib24tYWlyIiBpbmRpY2F0b3IgZm9yIHRoYXQgc291cmNl
LiBJZiB0aGUgZGF0YSBpcyBiZWluZworICAgICAgICAvLyBnZW5lcmF0ZWQgZnJvbSBhIHByZXJl
Y29yZGVkIHNvdXJjZSAoZS5nLiBhIHZpZGVvIGZpbGUpLCBhbnkgcmVtYWluaW5nIGNvbnRlbnQg
aW4gdGhlIGZpbGUgaXMgaWdub3JlZC4KKyAgICAgICAgc3RvcFByb2R1Y2luZ0RhdGEoKTsKIH0K
IAogdm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6YWRkT2JzZXJ2ZXIoTWVkaWFTdHJlYW1Tb3VyY2U6
Ok9ic2VydmVyKiBvYnNlcnZlcikKQEAgLTg4LDE4ICsxMDEsOSBAQCB2b2lkIE1lZGlhU3RyZWFt
U291cmNlOjpyZW1vdmVPYnNlcnZlcihNCiAgICAgc2l6ZV90IHBvcyA9IG1fb2JzZXJ2ZXJzLmZp
bmQob2JzZXJ2ZXIpOwogICAgIGlmIChwb3MgIT0gbm90Rm91bmQpCiAgICAgICAgIG1fb2JzZXJ2
ZXJzLnJlbW92ZShwb3MpOwotfQogCi1NZWRpYUNvbnN0cmFpbnRzKiBNZWRpYVN0cmVhbVNvdXJj
ZTo6Y29uc3RyYWludHMoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBXaGlsZSB0aGlzIHJldHVy
bnMgCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjQy
OAotICAgIHJldHVybiBtX2NvbnN0cmFpbnRzLmdldCgpOwotfQotICAgIAotdm9pZCBNZWRpYVN0
cmVhbVNvdXJjZTo6c2V0Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBj
b25zdHJhaW50cykKLXsKLSAgICBtX2NvbnN0cmFpbnRzID0gY29uc3RyYWludHM7CisgICAgaWYg
KCFtX29ic2VydmVycy5zaXplKCkpCisgICAgICAgIHN0b3AoKTsKIH0KIAogdm9pZCBNZWRpYVN0
cmVhbVNvdXJjZTo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKQEAgLTExOCwxNCArMTIyLDI3IEBAIHZv
aWQgTWVkaWFTdHJlYW1Tb3VyY2U6OnNldE11dGVkKGJvb2wgbXUKIAogdm9pZCBNZWRpYVN0cmVh
bVNvdXJjZTo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCiB7CisgICAgaWYgKCFlbmFibGVkKSB7
CisgICAgICAgIC8vIERvbid0IGRpc2FibGUgdGhlIHNvdXJjZSB1bmxlc3MgYWxsIG9ic2VydmVy
cyBhcmUgZGlzYWJsZWQuCisgICAgICAgIGZvciAoVmVjdG9yPE9ic2VydmVyKj46Oml0ZXJhdG9y
IGkgPSBtX29ic2VydmVycy5iZWdpbigpOyBpICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmICgoKmkpLT5vYnNlcnZlcklzRW5hYmxlZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChtX2VuYWJsZWQgPT0gZW5h
YmxlZCkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgbV9lbmFibGVkID0gZW5hYmxlZDsK
IAogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gRW5kZWQpCiAgICAgICAgIHJldHVybjsKLSAgICAK
KworICAgIGlmICghZW5hYmxlZCkKKyAgICAgICAgc3RvcFByb2R1Y2luZ0RhdGEoKTsKKyAgICBl
bHNlCisgICAgICAgIHN0YXJ0UHJvZHVjaW5nRGF0YSgpOworCiAgICAgZm9yIChWZWN0b3I8T2Jz
ZXJ2ZXIqPjo6aXRlcmF0b3IgaSA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGkgIT0gbV9vYnNlcnZl
cnMuZW5kKCk7ICsraSkKICAgICAgICAgKCppKS0+c291cmNlRW5hYmxlZENoYW5nZWQoKTsKIH0K
QEAgLTE0MSwxOCArMTU4LDEwIEBAIGJvb2wgTWVkaWFTdHJlYW1Tb3VyY2U6OnJlYWRvbmx5KCkg
Y29uc3QKIAogdm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6c3RvcCgpCiB7Ci0gICAgZm9yIChWZWN0
b3I8T2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaSA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGkgIT0gbV9v
YnNlcnZlcnMuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAoISgqaSktPnN0b3BwZWQoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBUaGVyZSBhcmUgbm8gbW9yZSBjb25z
dW1lcnMgb2YgdGhpcyBzb3VyY2UncyBkYXRhLCBzaHV0IGl0IGRvd24gYXMgYXBwcm9wcmlhdGUu
CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgdHJhY2suc3RvcCgpIG1ldGhvZCwgd2hp
Y2ggc2hvdWxkICJQZXJtYW5lbnRseSBzdG9wIHRoZSBnZW5lcmF0aW9uIG9mIGRhdGEKKyAgICAv
LyBmb3IgdHJhY2sncyBzb3VyY2UiLCBzbyBnbyBzdHJhaWdodCB0byBlbmRlZC4gVGhpcyB3aWxs
IG5vdGlmeSBhbnkgb3RoZXIgdHJhY2tzIHVzaW5nIHRoaXMgc291cmNlCisgICAgLy8gdGhhdCBp
dCBpcyBubyBsb25nZXIgYXZhaWxhYmxlLgogICAgIHNldFJlYWR5U3RhdGUoRW5kZWQpOwotCi0g
ICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvbWVkaWFjYXB0dXJlLXN0cmVhbXMvI3dpZGwtTWVk
aWFTdHJlYW1UcmFjay1zdG9wLXZvaWQKLSAgICAvLyBJZiB0aGUgZGF0YSBpcyBiZWluZyBnZW5l
cmF0ZWQgZnJvbSBhIGxpdmUgc291cmNlIChlLmcuLCBhIG1pY3JvcGhvbmUgb3IgY2FtZXJhKSwg
dGhlbiB0aGUgdXNlciAKLSAgICAvLyBhZ2VudCBzaG91bGQgcmVtb3ZlIGFueSBhY3RpdmUgIm9u
LWFpciIgaW5kaWNhdG9yIGZvciB0aGF0IHNvdXJjZS4gSWYgdGhlIGRhdGEgaXMgYmVpbmcgCi0g
ICAgLy8gZ2VuZXJhdGVkIGZyb20gYSBwcmVyZWNvcmRlZCBzb3VyY2UgKGUuZy4gYSB2aWRlbyBm
aWxlKSwgYW55IHJlbWFpbmluZyBjb250ZW50IGluIHRoZSBmaWxlIGlzIGlnbm9yZWQuCiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaAkocmV2aXNpb24gMTU4
MDI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1T
b3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNTkgKzQ3LDY1IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIEF1ZGlvQnVzOwogY2xhc3MgTWVkaWFDb25zdHJhaW50czsKIGNsYXNzIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvcjsKLXN0cnVjdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczsKK2Ns
YXNzIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOwogCiBjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZSA6
IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtU291cmNlPiB7CiBwdWJsaWM6CiAgICAgY2xh
c3MgT2JzZXJ2ZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+T2JzZXJ2ZXIoKSB7
IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVN0YXRlQ2hhbmdlZCgpID0gMDsKKyAgICAg
ICAgCisgICAgICAgIC8vIFNvdXJjZSBzdGF0ZSBjaGFuZ2VzLgorICAgICAgICB2aXJ0dWFsIHZv
aWQgc291cmNlUmVhZHlTdGF0ZUNoYW5nZWQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
b3VyY2VNdXRlZENoYW5nZWQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VFbmFi
bGVkQ2hhbmdlZCgpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIHN0b3BwZWQoKSA9IDA7Ci0g
ICAgfTsKIAotICAgIGVudW0gVHlwZSB7IEF1ZGlvLCBWaWRlbyB9OwotICAgIGVudW0gUmVhZHlT
dGF0ZSB7IE5ldyA9IDAsIExpdmUgPSAxLCBFbmRlZCA9IDIgfTsKKyAgICAgICAgLy8gT2JzZXJ2
ZXIgc3RhdGUgcXVlcmllcy4KKyAgICAgICAgdmlydHVhbCBib29sIG9ic2VydmVySXNFbmFibGVk
KCkgPSAwOworICAgIH07CiAKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVNvdXJjZSgpIHsgfQog
CiAgICAgYm9vbCBpc0F1ZGlvU3RyZWFtU291cmNlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IEF1ZGlvOyB9CiAgICAgdmlydHVhbCBib29sIHVzZUlERm9yVHJhY2tJRCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIHJlc2V0KCk7Ci0KICAgICBjb25zdCBTdHJpbmcmIGlk
KCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorCisgICAgZW51bSBUeXBlIHsgTm9uZSwgQXVkaW8s
IFZpZGVvIH07CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAg
Y29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICB2aXJ0
dWFsIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX25hbWUgPSBuYW1lOyB9
CiAKICAgICB2aXJ0dWFsIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcz4gY2Fw
YWJpbGl0aWVzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgTWVkaWFTdHJlYW1Tb3Vy
Y2VTdGF0ZXMmIHN0YXRlcygpID0gMDsKICAgICAKLSAgICB2b2lkIHNldFJlYWR5U3RhdGUoUmVh
ZHlTdGF0ZSk7Ci0gICAgUmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFkeVN0YXRlOyB9Ci0KLSAgICB2b2lkIGFkZE9ic2VydmVyKE9ic2VydmVyKik7Ci0gICAgdm9p
ZCByZW1vdmVPYnNlcnZlcihPYnNlcnZlciopOworICAgIGVudW0gUmVhZHlTdGF0ZSB7IE5ldyA9
IDAsIExpdmUgPSAxLCBFbmRlZCA9IDIgfTsKKyAgICB2aXJ0dWFsIFJlYWR5U3RhdGUgcmVhZHlT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRSZWFkeVN0YXRlKFJlYWR5U3RhdGUpOwogCi0gICAgdm9pZCBzZXRDb25zdHJhaW50cyhQYXNz
UmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KTsKLSAgICBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJh
aW50cygpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBlbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9lbmFibGVkOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CiAKLSAgICBi
b29sIGVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2VuYWJsZWQ7IH0KLSAgICB2b2lkIHNldEVu
YWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIG11dGVkKCkgY29uc3QgeyByZXR1cm4gbV9t
dXRlZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRNdXRlZChib29sKTsKIAotICAgIGJvb2wgbXV0
ZWQoKSBjb25zdCB7IHJldHVybiBtX211dGVkOyB9Ci0gICAgdm9pZCBzZXRNdXRlZChib29sKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcmVhZG9ubHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UmVhZG9ubHkoYm9vbCByZWFkb25seSkgeyBtX3JlYWRvbmx5ID0gcmVhZG9ubHk7IH0KIAotICAg
IGJvb2wgcmVhZG9ubHkoKSBjb25zdDsKLSAgICB2b2lkIHNldFJlYWRvbmx5KGJvb2wgcmVhZG9u
bHkpIHsgbV9yZWFkb25seSA9IHJlYWRvbmx5OyB9CisgICAgdmlydHVhbCBib29sIHJlbW90ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVtb3RlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFJlbW90ZShi
b29sIHJlbW90ZSkgeyBtX3JlbW90ZSA9IHJlbW90ZTsgfQogCi0gICAgYm9vbCByZW1vdGUoKSBj
b25zdCB7IHJldHVybiBtX3JlbW90ZTsgfQotICAgIHZvaWQgc2V0UmVtb3RlKGJvb2wgcmVtb3Rl
KSB7IG1fcmVtb3RlID0gcmVtb3RlOyB9CisgICAgdm9pZCBhZGRPYnNlcnZlcihPYnNlcnZlciop
OworICAgIHZvaWQgcmVtb3ZlT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0b3BQcm9k
dWNpbmdEYXRhKCkgeyB9CiAKICAgICB2b2lkIHN0b3AoKTsKIAorICAgIHZvaWQgcmVzZXQoKTsK
KwogcHJvdGVjdGVkOgogICAgIE1lZGlhU3RyZWFtU291cmNlKGNvbnN0IFN0cmluZyYgaWQsIFR5
cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKQEAgLTEwOSw4ICsxMTUsNiBAQCBwcml2YXRlOgog
ICAgIFN0cmluZyBtX25hbWU7CiAgICAgUmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiAgICAgVmVj
dG9yPE9ic2VydmVyKj4gbV9vYnNlcnZlcnM7Ci0gICAgUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+
IG1fY29uc3RyYWludHM7Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMgbV9zdGF0ZXM7CiAK
ICAgICBib29sIG1fZW5hYmxlZDsKICAgICBib29sIG1fbXV0ZWQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDQwICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKIAorI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmgiCiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0
IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzIHsKLXB1YmxpYzoKLSAgICBlbnVtIFNvdXJjZVR5cGUg
eyBOb25lLCBDYW1lcmEsIE1pY3JvcGhvbmUgfTsKLSAgICBlbnVtIFZpZGVvRmFjaW5nTW9kZSB7
IFVzZXIsIEVudmlyb25tZW50LCBMZWZ0LCBSaWdodCB9OwotCi0gICAgTWVkaWFTdHJlYW1Tb3Vy
Y2VTdGF0ZXMoKQotICAgICAgICA6IHNvdXJjZVR5cGUoTm9uZSkKLSAgICAgICAgLCBmYWNpbmdN
b2RlKFVzZXIpCi0gICAgICAgICwgd2lkdGgoMCkKLSAgICAgICAgLCBoZWlnaHQoMCkKLSAgICAg
ICAgLCBmcmFtZVJhdGUoMCkKLSAgICAgICAgLCBhc3BlY3RSYXRpbygwKQotICAgICAgICAsIHZv
bHVtZSgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBTb3VyY2VUeXBlIHNvdXJjZVR5cGU7Ci0gICAg
QXRvbWljU3RyaW5nIHNvdXJjZUlkOwotICAgIFZpZGVvRmFjaW5nTW9kZSBmYWNpbmdNb2RlOwot
ICAgIHVuc2lnbmVkIGxvbmcgd2lkdGg7Ci0gICAgdW5zaWduZWQgbG9uZyBoZWlnaHQ7Ci0gICAg
ZmxvYXQgZnJhbWVSYXRlOwotICAgIGZsb2F0IGFzcGVjdFJhdGlvOwotICAgIHVuc2lnbmVkIGxv
bmcgdm9sdW1lOwotICAgIAotICAgIGJvb2wgaGFzVmlkZW9Tb3VyY2U7Ci19OwotCiBjbGFzcyBN
ZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdHlSYW5nZSB7CiBwdWJsaWM6CiAgICAgCkBAIC0xMTgs
NiArOTEsNyBAQCBwdWJsaWM6CiAgICAgfk1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzKCkg
eyB9CiAKICAgICBjb25zdCBWZWN0b3I8TWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlNvdXJjZVR5
cGU+JiBzb3VyY2VUeXBlcygpIHsgcmV0dXJuIG1fc291cmNlVHlwZTsgfQorICAgIHZvaWQgc2V0
U291cmNlVHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6U291cmNlVHlwZSBzb3VyY2VUeXBl
KSB7IG1fc291cmNlVHlwZS5yZXNpemVUb0ZpdCgxKTsgYWRkU291cmNlVHlwZShzb3VyY2VUeXBl
KTsgfQogICAgIHZvaWQgYWRkU291cmNlVHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6U291
cmNlVHlwZSBzb3VyY2VUeXBlKQogICAgIHsKICAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT0gTWVk
aWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkNhbWVyYSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlU3RhdGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZVN0
YXRlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
ICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMK
KyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmgiCisKKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBB
dG9taWNTdHJpbmcmIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKE1lZGlhU3Ry
ZWFtU291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGUgbW9kZSkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB1c2VyRmFjaW5nKCJ1c2VyIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gZW52aXJvbm1lbnRGYWNpbmcoImVudmlyb25tZW50IiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gbGVmdEZhY2luZygibGVmdCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHJpZ2h0RmFjaW5n
KCJyaWdodCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIAorICAg
IHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlVzZXI6
CisgICAgICAgIHJldHVybiB1c2VyRmFjaW5nOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VT
dGF0ZXM6OkVudmlyb25tZW50OgorICAgICAgICByZXR1cm4gZW52aXJvbm1lbnRGYWNpbmc7Cisg
ICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6TGVmdDoKKyAgICAgICAgcmV0dXJuIGxl
ZnRGYWNpbmc7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6UmlnaHQ6CisgICAg
ICAgIHJldHVybiByaWdodEZhY2luZzsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
OjpVbmtub3duOgorICAgICAgICByZXR1cm4gZW1wdHlBdG9tOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZW1wdHlBdG9tOworfQorCitjb25zdCBB
dG9taWNTdHJpbmcmIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpzb3VyY2VUeXBlKE1lZGlhU3Ry
ZWFtU291cmNlU3RhdGVzOjpTb3VyY2VUeXBlIHNvdXJjZVR5cGUpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbm9uZSgibm9uZSIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IGNhbWVyYSgiY2FtZXJhIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbWljcm9waG9uZSgibWlj
cm9waG9uZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIAorICAg
IHN3aXRjaCAoc291cmNlVHlwZSkgeworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6
Ok5vbmU6CisgICAgICAgIHJldHVybiBub25lOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VT
dGF0ZXM6OkNhbWVyYToKKyAgICAgICAgcmV0dXJuIGNhbWVyYTsKKyAgICBjYXNlIE1lZGlhU3Ry
ZWFtU291cmNlU3RhdGVzOjpNaWNyb3Bob25lOgorICAgICAgICByZXR1cm4gbWljcm9waG9uZTsK
KyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGVtcHR5
QXRvbTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtU291cmNlU3RhdGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNl
U3RhdGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlc19oCisjZGVmaW5lIE1lZGlhU3RyZWFtU291cmNlU3Rh
dGVzX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVN0cmVhbVNv
dXJjZVN0YXRlcyB7CitwdWJsaWM6CisgICAgZW51bSBTb3VyY2VUeXBlIHsgTm9uZSwgQ2FtZXJh
LCBNaWNyb3Bob25lIH07CisgICAgZW51bSBWaWRlb0ZhY2luZ01vZGUgeyBVbmtub3duLCBVc2Vy
LCBFbnZpcm9ubWVudCwgTGVmdCwgUmlnaHQgfTsKKworICAgIE1lZGlhU3RyZWFtU291cmNlU3Rh
dGVzKCkKKyAgICAgICAgOiBtX3NvdXJjZVR5cGUoTm9uZSkKKyAgICAgICAgLCBtX2ZhY2luZ01v
ZGUoVW5rbm93bikKKyAgICAgICAgLCBtX3dpZHRoKDApCisgICAgICAgICwgbV9oZWlnaHQoMCkK
KyAgICAgICAgLCBtX2ZyYW1lUmF0ZSgwKQorICAgICAgICAsIG1fYXNwZWN0UmF0aW8oMCkKKyAg
ICAgICAgLCBtX3ZvbHVtZSgwKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgQXRv
bWljU3RyaW5nJiBzb3VyY2VUeXBlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpTb3VyY2VUeXBl
KTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBmYWNpbmdNb2RlKE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGUpOworCisgICAgU291cmNlVHlwZSBzb3VyY2VU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VUeXBlOyB9CisgICAgdm9pZCBzZXRTb3VyY2VU
eXBlKFNvdXJjZVR5cGUgdHlwZSkgeyBtX3NvdXJjZVR5cGUgPSB0eXBlOyB9CisKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHNvdXJjZUlkKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJZDsgfQor
ICAgIHZvaWQgc2V0U291cmNlSWQoY29uc3QgQXRvbWljU3RyaW5nJiBzb3VyY2VJZCkgeyBtX3Nv
dXJjZUlkID0gc291cmNlSWQ7IH0KKworICAgIFZpZGVvRmFjaW5nTW9kZSBmYWNpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9mYWNpbmdNb2RlOyB9CisgICAgdm9pZCBzZXRGYWNpbmdNb2RlKFZp
ZGVvRmFjaW5nTW9kZSBmYWNpbmdNb2RlKSB7IG1fZmFjaW5nTW9kZSA9IGZhY2luZ01vZGU7IH0K
KyAgICAKKyAgICB1bnNpZ25lZCBsb25nIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsg
fQorICAgIHZvaWQgc2V0V2lkdGgodW5zaWduZWQgbG9uZyB3aWR0aCkgeyBtX3dpZHRoID0gd2lk
dGg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBsb25nIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGVpZ2h0OyB9CisgICAgdm9pZCBzZXRIZWlnaHQodW5zaWduZWQgbG9uZyBoZWlnaHQpIHsgbV9o
ZWlnaHQgPSBoZWlnaHQ7IH0KKyAgICAKKyAgICBmbG9hdCBmcmFtZVJhdGUoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lUmF0ZTsgfQorICAgIHZvaWQgc2V0RnJhbWVSYXRlKGZsb2F0IGZyYW1lUmF0
ZSkgeyBtX2ZyYW1lUmF0ZSA9IGZyYW1lUmF0ZTsgfQorICAgIAorICAgIGZsb2F0IGFzcGVjdFJh
dGlvKCkgY29uc3QgeyByZXR1cm4gbV9hc3BlY3RSYXRpbzsgfQorICAgIHZvaWQgc2V0QXNwZWN0
UmF0aW8oZmxvYXQgYXNwZWN0UmF0aW8pIHsgbV9hc3BlY3RSYXRpbyA9IGFzcGVjdFJhdGlvOyB9
CisgICAgCisgICAgdW5zaWduZWQgbG9uZyB2b2x1bWUoKSBjb25zdCB7IHJldHVybiBtX3ZvbHVt
ZTsgfQorICAgIHZvaWQgc2V0Vm9sdW1lKHVuc2lnbmVkIGxvbmcgdm9sdW1lKSB7IG1fdm9sdW1l
ID0gdm9sdW1lOyB9CisgICAgCitwcml2YXRlOgorICAgIFNvdXJjZVR5cGUgbV9zb3VyY2VUeXBl
OworICAgIEF0b21pY1N0cmluZyBtX3NvdXJjZUlkOworICAgIFZpZGVvRmFjaW5nTW9kZSBtX2Zh
Y2luZ01vZGU7CisgICAgdW5zaWduZWQgbG9uZyBtX3dpZHRoOworICAgIHVuc2lnbmVkIGxvbmcg
bV9oZWlnaHQ7CisgICAgZmxvYXQgbV9mcmFtZVJhdGU7CisgICAgZmxvYXQgbV9hc3BlY3RSYXRp
bzsKKyAgICB1bnNpZ25lZCBsb25nIG1fdm9sdW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXNfaAorCisjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTAgQEAKIAogI2luY2x1ZGUgIk1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCisjaW5jbHVk
ZSAiTWVkaWFTb3VyY2VTdGF0ZXMuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNhcGFiaWxpdGll
cy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiVVVJRC5oIgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCkBAIC0zNiw3ICs0MCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBz
b3VyY2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZShzb3VyY2UuZ2V0KCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlKHNvdXJjZSkpOwogfQogCiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6TWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIG90aGVyKQpAQCAtNDcs
NyArNTEsNyBAQCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6TWVkaWFTdHJlYW1UcmFjCiAgICAg
bV9pZCA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKIAogICAgIC8vIDMuIExldCB0cmFj
a0Nsb25lIGluaGVyaXQgdGhpcyB0cmFjaydzIHVuZGVybHlpbmcgc291cmNlLCBraW5kLCBsYWJl
bCBhbmQgZW5hYmxlZCBhdHRyaWJ1dGVzLgotICAgIG1fc291cmNlID0gb3RoZXItPnNvdXJjZSgp
OworICAgIHNldFNvdXJjZShvdGhlci0+c291cmNlKCkpOwogICAgIG1fcmVhZHlTdGF0ZSA9IG1f
c291cmNlID8gbV9zb3VyY2UtPnJlYWR5U3RhdGUoKSA6IE1lZGlhU3RyZWFtU291cmNlOjpOZXc7
CiAgICAgbV9lbmFibGVkID0gb3RoZXItPmVuYWJsZWQoKTsKIApAQCAtNTYsMTEgKzYwLDE0IEBA
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpNZWRpYVN0cmVhbVRyYWMKICAgICAvLyB1bmxlc3Mg
c3RhdGVkIG90aGVyd2lzZSAoZm9yIGV4YW1scGUgd2hlbiBjbG9uZWQpIGFuZCB0aGUgbXV0ZWQg
c3RhdGUgcmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZQogICAgIC8vIHNvdXJjZSBhdCB0aGUgdGlt
ZSB0aGUgdHJhY2sgaXMgY3JlYXRlZC4KICAgICBtX211dGVkID0gb3RoZXItPm11dGVkKCk7CisK
ICAgICBtX3N0b3BwZWQgPSBvdGhlci0+c3RvcHBlZCgpOworICAgIG1fY2xpZW50ID0gb3RoZXIt
PmNsaWVudCgpOwogfQogCi1NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUoTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSkKLSAgICA6IG1fc291cmNlKDApCitN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbVNvdXJjZT4gc291cmNlKQorICAgIDogbV9zb3VyY2UobnVsbHB0cikKKyAg
ICAsIG1fY2xpZW50KG51bGxwdHIpCiAgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3Vy
Y2U6Ok5ldykKICAgICAsIG1fbXV0ZWQoZmFsc2UpCiAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKQEAg
LTY5LDggKzc2LDE3IEBAIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpNZWRpYVN0cmVhbVRyYWMK
ICAgICBzZXRTb3VyY2Uoc291cmNlKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZTo6c2V0U291cmNlKE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2UpCitNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZTo6fk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKCkKK3sKKyAgICBpZiAobV9zb3VyY2Up
CisgICAgICAgIG1fc291cmNlLT5yZW1vdmVPYnNlcnZlcih0aGlzKTsKK30KKwordm9pZCBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0U291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2U+IHNvdXJjZSkKIHsKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIG1fc291cmNlLT5yZW1v
dmVPYnNlcnZlcih0aGlzKTsKKwogICAgIG1fc291cmNlID0gc291cmNlOwogCiAgICAgaWYgKCFt
X3NvdXJjZSkKQEAgLTc4LDIyICs5NCw4IEBAIHZvaWQgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6
OnNldFNvdXJjZSgKIAogICAgIHNldE11dGVkKG1fc291cmNlLT5tdXRlZCgpKTsKICAgICBzZXRS
ZWFkeVN0YXRlKG1fc291cmNlLT5yZWFkeVN0YXRlKCkpOwotfQotCi1ib29sIE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlOjpzaG91bGRGaXJlVHJhY2tSZWFkeVN0YXRlQ2hhbmdlZChNZWRpYVN0cmVh
bVNvdXJjZTo6UmVhZHlTdGF0ZSBvbGRTdGF0ZSkKLXsKLSAgICByZXR1cm4gKG1fcmVhZHlTdGF0
ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSAmJiBvbGRTdGF0ZSA9PSBNZWRpYVN0cmVhbVNv
dXJjZTo6TmV3KSB8fCAobV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCAm
JiBvbGRTdGF0ZSAhPSBNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpOwotfQotCi1jb25zdCBBdG9t
aWNTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpraW5kKCkgY29uc3QKLXsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBhdWRpbygiYXVkaW8iLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiB2aWRlbygidmlkZW8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLQotICAgIGlmIChtX3R5cGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvKQot
ICAgICAgICByZXR1cm4gYXVkaW87Ci0KLSAgICByZXR1cm4gdmlkZW87CisgICAgaWYgKG1fc291
cmNlKQorICAgICAgICBtX3NvdXJjZS0+YWRkT2JzZXJ2ZXIodGhpcyk7CiB9CiAKIGNvbnN0IFN0
cmluZyYgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmlkKCkgY29uc3QKQEAgLTE2OSw2ICsxNzEs
MjQgQEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0RW5hYmxlZAogICAgIC8vIC4u
LiBhZnRlciBhIE1lZGlhU3RyZWFtVHJhY2sgaXMgZGlzYXNzb2NpYXRlZCBmcm9tIGl0cyB0cmFj
aywgaXRzIGVuYWJsZWQgYXR0cmlidXRlIHN0aWxsCiAgICAgLy8gY2hhbmdlcyB2YWx1ZSB3aGVu
IHNldDsgaXQganVzdCBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggdGhhdCBuZXcgdmFsdWUuCiAg
ICAgbV9lbmFibGVkID0gZW5hYmxlZDsKKworICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAgbV9z
b3VyY2UtPnNldEVuYWJsZWQoZW5hYmxlZCk7CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAg
IG1fY2xpZW50LT50cmFja0VuYWJsZWRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU6OnN0b3AoU3RvcEJlaGF2aW9yIHN0b3BTb3VyY2UpCit7CisgICAgaWYgKG1f
c3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVh
bVNvdXJjZTo6RW5kZWQpOworICAgIG1fc3RvcHBlZCA9IHRydWU7CisgICAgCisgICAgaWYgKHN0
b3BTb3VyY2UgPT0gU3RvcFRyYWNrQW5kU3RvcFNvdXJjZSAmJiBtX3NvdXJjZSkKKyAgICAgICAg
bV9zb3VyY2UtPnN0b3AoKTsKIH0KIAogTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUgTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU6OnJlYWR5U3RhdGUoKSBjb25zdApAQCAtMTg3LDcgKzIwNywx
MCBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzZXRSZWFkeVN0CiAgICAgTWVkaWFT
dHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUgb2xkU3RhdGUgPSBtX3JlYWR5U3RhdGU7CiAgICAgbV9y
ZWFkeVN0YXRlID0gc3RhdGU7CiAKLSAgICBpZiAobV9jbGllbnQgJiYgc2hvdWxkRmlyZVRyYWNr
UmVhZHlTdGF0ZUNoYW5nZWQob2xkU3RhdGUpKQorICAgIGlmICghbV9jbGllbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICgobV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpM
aXZlICYmIG9sZFN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpOZXcpIHx8IG1fcmVhZHlTdGF0
ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpCiAgICAgICAgIG1fY2xpZW50LT50cmFja1Jl
YWR5U3RhdGVDaGFuZ2VkKCk7CiB9CiAKQEAgLTE5Niw2ICsyMTksNzggQEAgUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiBNZWRpYVN0cgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUodGhpcykpOwogfQogCisgICAgCitSZWZQdHI8TWVkaWFDb25z
dHJhaW50cz4gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNvbnN0cmFpbnRzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jb25zdHJhaW50czsKK30KKworUmVmUHRyPE1lZGlhU291cmNlU3RhdGVz
PiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c3RhdGVzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
c291cmNlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gTWVkaWFTb3VyY2VT
dGF0ZXM6OmNyZWF0ZShtX3NvdXJjZS0+c3RhdGVzKCkpOworfQorCitNZWRpYVN0cmVhbVNvdXJj
ZTo6VHlwZSBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6dHlwZSgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIE1lZGlhU3RyZWFtU291cmNlOjpOb25lOworCisg
ICAgcmV0dXJuIG1fc291cmNlLT50eXBlKCk7Cit9CisKK1JlZlB0cjxNZWRpYVN0cmVhbUNhcGFi
aWxpdGllcz4gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgLy8gVGhl
IHNvdXJjZSBtYXkgYmUgc2hhcmVkIGJ5IG11bHRpcGxlIHRyYWNrcywgc28gaXRzIHN0YXRlcyBp
cyBub3QgbmVjZXNzYXJpbHkKKyAgICAvLyBpbiBzeW5jIHdpdGggdGhlIHRyYWNrIHN0YXRlLiBB
IHRyYWNrIHRoYXQgaXMgbmV3IG9yIGhhcyBlbmRlZCBhbHdheXMgaGFzIGEgc291cmNlCisgICAg
Ly8gdHlwZSBvZiAibm9uZSIuCisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0
aWVzPiBzb3VyY2VDYXBhYmlsaXRpZXMgPSBtX3NvdXJjZS0+Y2FwYWJpbGl0aWVzKCk7CisgICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6TmV3IHx8IG1fcmVhZHlTdGF0
ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpCisgICAgICAgIHNvdXJjZUNhcGFiaWxpdGll
cy0+c2V0U291cmNlVHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6Tm9uZSk7CisgICAgCisg
ICAgcmV0dXJuIE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOjpjcmVhdGUoc291cmNlQ2FwYWJpbGl0
aWVzLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmFwcGx5
Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPikKK3sKKyAgICAvLyBGSVhN
RTogYXBwbHkgdGhlIG5ldyBjb25zdHJhaW50cyB0byB0aGUgdHJhY2sKKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI4Cit9CisKK3ZvaWQgTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU6OnNvdXJjZVJlYWR5U3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
c3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc2V0UmVhZHlTdGF0ZShtX3Nv
dXJjZS0+cmVhZHlTdGF0ZSgpKTsKK30KKwordm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6
c291cmNlTXV0ZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoc3RvcHBlZCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgc2V0TXV0ZWQobV9zb3VyY2UtPm11dGVkKCkpOworfQorCit2b2lkIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzb3VyY2VFbmFibGVkQ2hhbmdlZCgpCit7CisgICAgaWYg
KHN0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHNldEVuYWJsZWQobV9zb3Vy
Y2UtPmVuYWJsZWQoKSk7Cit9CisKK2Jvb2wgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Om9ic2Vy
dmVySXNFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gZW5hYmxlZCgpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZS5oCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwxOCArMzUsMjQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBNZWRpYVNvdXJjZVN0YXRlczsKK2NsYXNzIE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOworCiBj
bGFzcyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUNsaWVudCB7CiBwdWJsaWM6CisgICAgdmlydHVh
bCB+TWVkaWFTdHJlYW1UcmFja1ByaXZhdGVDbGllbnQoKSB7IH0KKwogICAgIHZpcnR1YWwgdm9p
ZCB0cmFja1JlYWR5U3RhdGVDaGFuZ2VkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB0cmFja011
dGVkQ2hhbmdlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZCgp
ID0gMDsKIH07CiAKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIDogcHVibGljIFJlZkNv
dW50ZWQ8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IHsKK2NsYXNzIE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+LCBwdWJs
aWMgTWVkaWFTdHJlYW1Tb3VyY2U6Ok9ic2VydmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gY3JlYXRlKFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW1Tb3VyY2U+KTsKLSAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSgpIHsg
fQogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBraW5kKCkgY29uc3Q7CisgICAgdmlydHVhbCB+
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoKTsKKwogICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25z
dDsKICAgICBjb25zdCBTdHJpbmcmIGxhYmVsKCkgY29uc3Q7CiAKQEAgLTY3LDI5ICs3Myw0NCBA
QCBwdWJsaWM6CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBjbG9uZSgpOwog
CiAgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2UqKTsKKyAgICB2
b2lkIHNldFNvdXJjZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPik7CiAKLSAgICB2b2lk
IHN0b3AoKSB7IG1fc3RvcHBlZCA9IHRydWU7IH0KKyAgICBlbnVtIFN0b3BCZWhhdmlvciB7IFN0
b3BUcmFja0FuZFN0b3BTb3VyY2UsIFN0b3BUcmFja09ubHkgfTsKKyAgICB2b2lkIHN0b3AoU3Rv
cEJlaGF2aW9yKTsKICAgICBib29sIHN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX3N0b3BwZWQ7
IH0KKyAgICAKKyAgICB2b2lkIHNldENsaWVudChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUNsaWVu
dCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CiAKLSAgICBNZWRpYVN0cmVhbVNvdXJj
ZTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgTWVkaWFTdHJlYW1T
b3VyY2U6OlR5cGUgdHlwZSgpIGNvbnN0OworCisgICAgUmVmUHRyPE1lZGlhU291cmNlU3RhdGVz
PiBzdGF0ZXMoKSBjb25zdDsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM+IGNh
cGFiaWxpdGllcygpIGNvbnN0OworCisgICAgUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGNvbnN0
cmFpbnRzKCkgY29uc3Q7CisgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVk
aWFDb25zdHJhaW50cz4pOwogCi0gICAgdm9pZCBzZXRDbGllbnQoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGVDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQogcHJvdGVjdGVkOgog
ICAgIGV4cGxpY2l0IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlKik7Ci0gICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoTWVkaWFTdHJlYW1Tb3VyY2UqKTsK
KyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNl
Pik7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBzaG91bGRGaXJlVHJhY2tSZWFkeVN0YXRlQ2hhbmdl
ZChNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSk7CisgICAgTWVkaWFTdHJlYW1UcmFja1By
aXZhdGVDbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAgICAv
LyBNZWRpYVN0cmVhbVNvdXJjZU9ic2VydmVyCisgICAgdmlydHVhbCB2b2lkIHNvdXJjZVJlYWR5
U3RhdGVDaGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHNvdXJjZU11
dGVkQ2hhbmdlZCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VFbmFi
bGVkQ2hhbmdlZCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgYm9vbCBvYnNlcnZlcklz
RW5hYmxlZCgpIE9WRVJSSURFIEZJTkFMOworICAgIAogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNv
dXJjZT4gbV9zb3VyY2U7CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVDbGllbnQqIG1fY2xp
ZW50OworICAgIFJlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBtX2NvbnN0cmFpbnRzOwogICAgIE1l
ZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKICAgICBtdXRhYmxlIFN0
cmluZyBtX2lkOwogCiAgICAgYm9vbCBtX211dGVkOwogICAgIGJvb2wgbV9lbmFibGVkOwogICAg
IGJvb2wgbV9zdG9wcGVkOwotICAgIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlIG1fdHlwZTsKLSAg
ICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUNsaWVudCogbV9jbGllbnQ7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQVZBdWRpb0NhcHR1cmVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZBdWRpb0NhcHR1cmVTb3VyY2UuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlv
Q2FwdHVyZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQVZBdWRpb0NhcHR1cmVTb3VyY2VfaAorI2RlZmluZSBBVkF1ZGlvQ2FwdHVyZVNv
dXJjZV9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQor
CisjaW5jbHVkZSAiQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCIKKwordHlwZWRlZiBjb25zdCBzdHJ1
Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiAqQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgQVZBdWRpb0NhcHR1cmVTb3VyY2UgOiBw
dWJsaWMgQVZNZWRpYUNhcHR1cmVTb3VyY2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8
QVZNZWRpYUNhcHR1cmVTb3VyY2U+IGNyZWF0ZShBVkNhcHR1cmVEZXZpY2UqLCBjb25zdCBBdG9t
aWNTdHJpbmcmLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KTsKKyAgICAKK3ByaXZhdGU6
CisgICAgQVZBdWRpb0NhcHR1cmVTb3VyY2UoQVZDYXB0dXJlRGV2aWNlKiwgY29uc3QgQXRvbWlj
U3RyaW5nJiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7CisgICAgdmlydHVhbCB+QVZB
dWRpb0NhcHR1cmVTb3VyY2UoKTsKKyAgICAKKyAgICB2aXJ0dWFsIFJlZlB0cjxNZWRpYVN0cmVh
bVNvdXJjZUNhcGFiaWxpdGllcz4gY2FwYWJpbGl0aWVzKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVj
dGlvbihBVkNhcHR1cmVPdXRwdXQqLCBDTVNhbXBsZUJ1ZmZlclJlZiwgQVZDYXB0dXJlQ29ubmVj
dGlvbiopIE9WRVJSSURFOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXR1cENhcHR1cmVTZXNz
aW9uKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlcygpIE9WRVJSSURF
OworICAgICAgICAKKyAgICBSZXRhaW5QdHI8QVZDYXB0dXJlQ29ubmVjdGlvbj4gbV9hdWRpb0Nv
bm5lY3Rpb247CisgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fYXVkaW9G
b3JtYXREZXNjcmlwdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBBVlZpZGVvQ2FwdHVyZVNvdXJj
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZBdWRp
b0NhcHR1cmVTb3VyY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWQXVkaW9DYXB0dXJlU291cmNlLm1tCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQXVkaW9DYXB0dXJlU291
cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJ
T04pCisKKyNpbXBvcnQgIkFWQXVkaW9DYXB0dXJlU291cmNlLmgiCisKKyNpbXBvcnQgIkxvZ2dp
bmcuaCIKKyNpbXBvcnQgIk1lZGlhQ29uc3RyYWludHMuaCIKKyNpbXBvcnQgIk1lZGlhU3RyZWFt
U291cmNlU3RhdGVzLmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiU29m
dExpbmtpbmcuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkZvdW5kYXRpb24uaD4KKyNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgorCit0eXBlZGVmIEFWQ2FwdHVyZUNvbm5lY3Rpb24gQVZDYXB0
dXJlQ29ubmVjdGlvblR5cGU7Cit0eXBlZGVmIEFWQ2FwdHVyZURldmljZSBBVkNhcHR1cmVEZXZp
Y2VUeXBlOwordHlwZWRlZiBBVkNhcHR1cmVEZXZpY2VJbnB1dCBBVkNhcHR1cmVEZXZpY2VJbnB1
dFR5cGU7Cit0eXBlZGVmIEFWQ2FwdHVyZU91dHB1dCBBVkNhcHR1cmVPdXRwdXRUeXBlOwordHlw
ZWRlZiBBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXQgQVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0VHlw
ZTsKKworU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRpb24pCisKK1NPRlRf
TElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dCkKK1NPRlRf
TElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZUNvbm5lY3Rpb24pCitTT0ZUX0xJTktf
Q0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVEZXZpY2UpCitTT0ZUX0xJTktfQ0xBU1MoQVZG
b3VuZGF0aW9uLCBBVkNhcHR1cmVEZXZpY2VJbnB1dCkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5k
YXRpb24sIEFWQ2FwdHVyZU91dHB1dCkKKworI2RlZmluZSBBVkNhcHR1cmVBdWRpb0RhdGFPdXRw
dXQgZ2V0QVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0Q2xhc3MoKQorI2RlZmluZSBBVkNhcHR1cmVD
b25uZWN0aW9uIGdldEFWQ2FwdHVyZUNvbm5lY3Rpb25DbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVy
ZURldmljZSBnZXRBVkNhcHR1cmVEZXZpY2VDbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVyZURldmlj
ZUlucHV0IGdldEFWQ2FwdHVyZURldmljZUlucHV0Q2xhc3MoKQorI2RlZmluZSBBVkNhcHR1cmVP
dXRwdXQgZ2V0QVZDYXB0dXJlT3V0cHV0Q2xhc3MoKQorCitTT0ZUX0xJTktfUE9JTlRFUihBVkZv
dW5kYXRpb24sIEFWTWVkaWFUeXBlQXVkaW8sIE5TU3RyaW5nICopCisKKyNkZWZpbmUgQVZNZWRp
YVR5cGVBdWRpbyBnZXRBVk1lZGlhVHlwZUF1ZGlvKCkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZWZQdHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IEFWQXVkaW9DYXB0dXJlU291cmNlOjpjcmVh
dGUoQVZDYXB0dXJlRGV2aWNlVHlwZSogZGV2aWNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBQ
YXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGNvbnN0cmFpbnQpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBBVkF1ZGlvQ2FwdHVyZVNvdXJjZShkZXZpY2UsIGlkLCBjb25zdHJhaW50KSk7
Cit9CisgICAgCitBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6QVZBdWRpb0NhcHR1cmVTb3VyY2UoQVZD
YXB0dXJlRGV2aWNlVHlwZSogZGV2aWNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBQYXNzUmVm
UHRyPE1lZGlhQ29uc3RyYWludHM+IGNvbnN0cmFpbnRzKQorICAgIDogQVZNZWRpYUNhcHR1cmVT
b3VyY2UoZGV2aWNlLCBpZCwgTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvLCBjb25zdHJhaW50cykK
K3sKKyAgICBjdXJyZW50U3RhdGVzKCktPnNldFNvdXJjZUlkKGlkKTsKKyAgICBjdXJyZW50U3Rh
dGVzKCktPnNldFNvdXJjZVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6Ok1pY3JvcGhvbmUp
OworfQorICAgIAorQVZBdWRpb0NhcHR1cmVTb3VyY2U6On5BVkF1ZGlvQ2FwdHVyZVNvdXJjZSgp
Cit7Cit9CisKK1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcz4gQVZBdWRpb0Nh
cHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6dXBkYXRl
U3RhdGVzKCkKK3sKKyAgICAvLyBGSVhNRTogdXNlIFtBVkNhcHR1cmVBdWRpb1ByZXZpZXdPdXRw
dXQgdm9sdW1lXSBmb3Igdm9sdW1lCit9CisKK3ZvaWQgQVZBdWRpb0NhcHR1cmVTb3VyY2U6OnNl
dHVwQ2FwdHVyZVNlc3Npb24oKQoreworICAgIFJldGFpblB0cjxBVkNhcHR1cmVEZXZpY2VJbnB1
dFR5cGU+IGF1ZGlvSW4gPSBhZG9wdE5TKFtbQVZDYXB0dXJlRGV2aWNlSW5wdXQgYWxsb2NdIGlu
aXRXaXRoRGV2aWNlOmRldmljZSgpIGVycm9yOm5pbF0pOworICAgIEFTU0VSVChbc2Vzc2lvbigp
IGNhbkFkZElucHV0OmF1ZGlvSW4uZ2V0KCldKTsKKyAgICBpZiAoW3Nlc3Npb24oKSBjYW5BZGRJ
bnB1dDphdWRpb0luLmdldCgpXSkKKyAgICAgICAgW3Nlc3Npb24oKSBhZGRJbnB1dDphdWRpb0lu
LmdldCgpXTsKKyAgICAKKyAgICBSZXRhaW5QdHI8QVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0VHlw
ZT4gYXVkaW9PdXRwdXQgPSBhZG9wdE5TKFtbQVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0IGFsbG9j
XSBpbml0XSk7CisgICAgc2V0QXVkaW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZShhdWRpb091dHB1dC5n
ZXQoKSk7CisgICAgQVNTRVJUKFtzZXNzaW9uKCkgY2FuQWRkT3V0cHV0OmF1ZGlvT3V0cHV0Lmdl
dCgpXSk7CisgICAgaWYgKFtzZXNzaW9uKCkgY2FuQWRkT3V0cHV0OmF1ZGlvT3V0cHV0LmdldCgp
XSkKKyAgICAgICAgW3Nlc3Npb24oKSBhZGRPdXRwdXQ6YXVkaW9PdXRwdXQuZ2V0KCldOworICAg
IG1fYXVkaW9Db25uZWN0aW9uID0gYWRvcHROUyhbYXVkaW9PdXRwdXQuZ2V0KCkgY29ubmVjdGlv
bldpdGhNZWRpYVR5cGU6QVZNZWRpYVR5cGVBdWRpb10pOworfQorCit2b2lkIEFWQXVkaW9DYXB0
dXJlU291cmNlOjpjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5lY3Rp
b24oQVZDYXB0dXJlT3V0cHV0VHlwZSosIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlciwg
QVZDYXB0dXJlQ29ubmVjdGlvblR5cGUqKQoreworICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYg
Zm9ybWF0RGVzY3JpcHRpb24gPSBDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHNh
bXBsZUJ1ZmZlcik7CisgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ0ZSZXRhaW4oZm9ybWF0RGVzY3JpcHRpb24pOworICAgIG1fYXVkaW9Gb3JtYXRE
ZXNjcmlwdGlvbiA9IGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFn
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFWQ2FwdHVyZURl
dmljZU1hbmFnZXJfaAorI2RlZmluZSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyX2gKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJNZWRp
YVN0cmVhbUNlbnRlci5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCisjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50LmgiCisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitPQkpDX0NM
QVNTIEFWQ2FwdHVyZURldmljZTsKK09CSkNfQ0xBU1MgQVZDYXB0dXJlU2Vzc2lvbjsKK09CSkNf
Q0xBU1MgTlNTdHJpbmc7CitPQkpDX0NMQVNTIFdlYkNvcmVBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
T2JzZXJ2ZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FwdHVyZURldmljZTsK
KworY2xhc3MgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciB7CitwdWJsaWM6CisgICAgc3RhdGljIEFW
Q2FwdHVyZURldmljZU1hbmFnZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBib29sIGlzQXZhaWxh
YmxlKCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPFRyYWNrU291cmNlSW5mbz4+IGdldFNvdXJjZXNJ
bmZvKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgdmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5
cGUoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUsIE1lZGlhQ29uc3RyYWludHMqLCBTdHJpbmcmKTsK
KyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IGJlc3RTb3VyY2VGb3JUeXBlQW5kQ29uc3Ry
YWludHMoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50
cz4pOworCisgICAgZW51bSBWYWxpZENvbnN0cmFpbnRzIHsgV2lkdGggPSAwLCBIZWlnaHQsIEZy
YW1lUmF0ZSwgRmFjaW5nTW9kZSwgR2FpbiB9OworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8QXRv
bWljU3RyaW5nPiYgdmFsaWRDb25zdHJhaW50TmFtZXMoKTsKKyAgICBzdGF0aWMgY29uc3QgVmVj
dG9yPEF0b21pY1N0cmluZz4mIHZhbGlkRmFjaW5nTW9kZXMoKTsKKworICAgIHN0YXRpYyBib29s
IGRldmljZVN1cHBvcnRzRmFjaW5nTW9kZShBVkNhcHR1cmVEZXZpY2UqLCBNZWRpYVN0cmVhbVNv
dXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkQ29u
c3RyYWludChNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJik7CisgICAgc3Rh
dGljIFN0cmluZyBiZXN0U2Vzc2lvblByZXNldEZvclZpZGVvU2l6ZShBVkNhcHR1cmVTZXNzaW9u
KiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIHZvaWQgcmVnaXN0ZXJGb3JEZXZpY2VO
b3RpZmljYXRpb25zKCk7CisgICAgdm9pZCBkZXZpY2VDb25uZWN0ZWQoKTsKKyAgICB2b2lkIGRl
dmljZURpc2Nvbm5lY3RlZChBVkNhcHR1cmVEZXZpY2UqKTsKKworcHJvdGVjdGVkOgorICAgIEFW
Q2FwdHVyZURldmljZU1hbmFnZXIoKTsKKyAgICB+QVZDYXB0dXJlRGV2aWNlTWFuYWdlcigpOwor
CisgICAgQ2FwdHVyZURldmljZSogYmVzdERldmljZUZvckZhY2luZ01vZGUoTWVkaWFTdHJlYW1T
b3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZSk7CisgICAgYm9vbCBzZXNzaW9uU3VwcG9ydHND
b25zdHJhaW50KEFWQ2FwdHVyZVNlc3Npb24qLCBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworICAgIFJldGFpblB0cjxX
ZWJDb3JlQVZDYXB0dXJlRGV2aWNlTWFuYWdlck9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCisKKyNlbmRpZiAvLyBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9B
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0JKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2ltcG9y
dCAiQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorCisjaW1wb3J0ICJBVkF1ZGlvQ2FwdHVyZVNv
dXJjZS5oIgorI2ltcG9ydCAiQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCIKKyNpbXBvcnQgIkFWVmlk
ZW9DYXB0dXJlU291cmNlLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYUNv
bnN0cmFpbnRzLmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVNvdXJjZS5oIgorI2ltcG9ydCAiTWVk
aWFTdHJlYW1Tb3VyY2VTdGF0ZXMuaCIKKyNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1w
b3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCAiVVVJRC5oIgorI2ltcG9ydCA8QVZGb3VuZGF0
aW9uL0FWRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaW1wb3J0IDx3
dGYvTWFpblRocmVhZC5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK3R5cGVk
ZWYgQVZDYXB0dXJlRGV2aWNlIEFWQ2FwdHVyZURldmljZVR5cGU7Cit0eXBlZGVmIEFWQ2FwdHVy
ZVNlc3Npb24gQVZDYXB0dXJlU2Vzc2lvblR5cGU7CisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BU
SU9OQUwoQVZGb3VuZGF0aW9uKQorCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNh
cHR1cmVEZXZpY2UpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNz
aW9uKQorCisjZGVmaW5lIEFWQ2FwdHVyZURldmljZSBnZXRBVkNhcHR1cmVEZXZpY2VDbGFzcygp
CisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb24gZ2V0QVZDYXB0dXJlU2Vzc2lvbkNsYXNzKCkKKwor
U09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZUF1ZGlvLCBOU1N0cmlu
ZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZU11eGVkLCBO
U1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZVZp
ZGVvLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1
cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjAsIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihB
VkZvdW5kYXRpb24sIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwLCBOU1N0cmluZyAqKQor
U09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MzUy
eDI4OCwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0
dXJlU2Vzc2lvblByZXNldExvdywgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91
bmRhdGlvbiwgQVZDYXB0dXJlRGV2aWNlV2FzQ29ubmVjdGVkTm90aWZpY2F0aW9uLCBOU1N0cmlu
ZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVEZXZpY2VXYXNE
aXNjb25uZWN0ZWROb3RpZmljYXRpb24sIE5TU3RyaW5nICopCisKKyNkZWZpbmUgQVZNZWRpYVR5
cGVBdWRpbyBnZXRBVk1lZGlhVHlwZUF1ZGlvKCkKKyNkZWZpbmUgQVZNZWRpYVR5cGVNdXhlZCBn
ZXRBVk1lZGlhVHlwZU11eGVkKCkKKyNkZWZpbmUgQVZNZWRpYVR5cGVWaWRlbyBnZXRBVk1lZGlh
VHlwZVZpZGVvKCkKKyNkZWZpbmUgQVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwIGdldEFW
Q2FwdHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMCgpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25Q
cmVzZXQ2NDB4NDgwIGdldEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwKCkKKyNkZWZpbmUg
QVZDYXB0dXJlU2Vzc2lvblByZXNldDM1MngyODggZ2V0QVZDYXB0dXJlU2Vzc2lvblByZXNldDM1
MngyODgoKQorI2RlZmluZSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93IGdldEFWQ2FwdHVyZVNl
c3Npb25QcmVzZXRMb3coKQorI2RlZmluZSBBVkNhcHR1cmVEZXZpY2VXYXNDb25uZWN0ZWROb3Rp
ZmljYXRpb24gZ2V0QVZDYXB0dXJlRGV2aWNlV2FzQ29ubmVjdGVkTm90aWZpY2F0aW9uKCkKKyNk
ZWZpbmUgQVZDYXB0dXJlRGV2aWNlV2FzRGlzY29ubmVjdGVkTm90aWZpY2F0aW9uIGdldEFWQ2Fw
dHVyZURldmljZVdhc0Rpc2Nvbm5lY3RlZE5vdGlmaWNhdGlvbigpCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitAaW50ZXJmYWNlIFdlYkNvcmVBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyT2Jz
ZXJ2ZXIgOiBOU09iamVjdAoreworICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXIqIG1fY2FsbGJh
Y2s7Cit9CisKKy0oaWQpaW5pdFdpdGhDYWxsYmFjazooQVZDYXB0dXJlRGV2aWNlTWFuYWdlciop
Y2FsbGJhY2s7CistKHZvaWQpZGlzY29ubmVjdDsKKy0odm9pZClkZXZpY2VEaXNjb25uZWN0ZWQ6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uOworLSh2b2lkKWRldmljZUNvbm5lY3RlZDoo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb247CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIHZvaWQgcmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0KCk7CisKK2NsYXNzIENh
cHR1cmVEZXZpY2UgeworcHVibGljOgorICAgIENhcHR1cmVEZXZpY2UoKQorICAgICAgICA6bV9l
bmFibGVkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcgbV9jYXB0dXJlRGV2aWNl
SUQ7CisKKyAgICBTdHJpbmcgbV9hdWRpb1NvdXJjZUlkOworICAgIFJlZlB0cjxBVk1lZGlhQ2Fw
dHVyZVNvdXJjZT4gbV9hdWRpb1NvdXJjZTsKKworICAgIFN0cmluZyBtX3ZpZGVvU291cmNlSWQ7
CisgICAgUmVmUHRyPEFWTWVkaWFDYXB0dXJlU291cmNlPiBtX3ZpZGVvU291cmNlOworCisgICAg
Ym9vbCBtX2VuYWJsZWQ7Cit9OworCitzdGF0aWMgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBjYXB0
dXJlRGV2aWNlTGlzdCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8Q2FwdHVy
ZURldmljZT4sIGNhcHR1cmVEZXZpY2VMaXN0LCAoKSk7CisgICAgc3RhdGljIGJvb2wgZmlyc3RU
aW1lID0gdHJ1ZTsKKworICAgIGlmIChmaXJzdFRpbWUgJiYgIWNhcHR1cmVEZXZpY2VMaXN0LnNp
emUoKSkgeworICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTsKKyAgICAgICAgcmVmcmVzaENhcHR1
cmVEZXZpY2VMaXN0KCk7CisgICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgp
LnJlZ2lzdGVyRm9yRGV2aWNlTm90aWZpY2F0aW9ucygpOworICAgIH0KKworICAgIHJldHVybiBj
YXB0dXJlRGV2aWNlTGlzdDsKK30KKworc3RhdGljIGJvb2wgY2FwdHVyZURldmljZUZyb21EZXZp
Y2VJRChjb25zdCBTdHJpbmcmIGNhcHR1cmVEZXZpY2VJRCwgQ2FwdHVyZURldmljZSYgc291cmNl
KQoreworICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVEZXZpY2VM
aXN0KCk7CisgICAgCisgICAgc2l6ZV90IGNvdW50ID0gZGV2aWNlcy5zaXplKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChkZXZpY2VzW2ld
Lm1fY2FwdHVyZURldmljZUlEID09IGNhcHR1cmVEZXZpY2VJRCkgeworICAgICAgICAgICAgc291
cmNlID0gZGV2aWNlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgcmVmcmVzaENh
cHR1cmVEZXZpY2VMaXN0KCkKK3sKKyAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGRldmljZXMg
PSBjYXB0dXJlRGV2aWNlTGlzdCgpOworICAgIAorICAgIGZvciAoQVZDYXB0dXJlRGV2aWNlVHlw
ZSAqZGV2aWNlIGluIFtBVkNhcHR1cmVEZXZpY2UgZGV2aWNlc10pIHsKKyAgICAgICAgQ2FwdHVy
ZURldmljZSBzb3VyY2U7CisgICAgICAgIAorICAgICAgICBpZiAoIWNhcHR1cmVEZXZpY2VGcm9t
RGV2aWNlSUQoZGV2aWNlLnVuaXF1ZUlELCBzb3VyY2UpKSB7CisgICAgICAgICAgICAvLyBBbiBB
VkNhcHR1cmVEZXZpY2UgaGFzIGEgdW5pcXVlIElELCBidXQgd2UgY2FuJ3QgdXNlIGl0IGZvciB0
aGUgc291cmNlIElEIGJlY2F1c2U6CisgICAgICAgICAgICAvLyAxLiBpZiBpdCBwcm92aWRlcyBi
b3RoIGF1ZGlvIGFuZCB2aWRlbyB3ZSB3aWxsIG5lZWQgdG8gY3JlYXRlIHR3byBzb3VyY2VzIGZv
ciBpdAorICAgICAgICAgICAgLy8gMi4gdGhlIHVuaXF1ZSBJRCBwZXJzaXN0cyBvbiBvbmUgc3lz
dGVtIGFjcm9zcyBkZXZpY2UgY29ubmVjdGlvbnMsIGRpc2Nvbm5lY3Rpb25zLAorICAgICAgICAg
ICAgLy8gICAgYXBwbGljYXRpb24gcmVzdGFydHMsIGFuZCByZWJvb3RzLCBzbyBpdCBjb3VsZCBi
ZSB1c2VkIHRvIGZpZ2VycHJpbnQgYSB1c2VyLgorICAgICAgICAgICAgc291cmNlLm1fY2FwdHVy
ZURldmljZUlEID0gZGV2aWNlLnVuaXF1ZUlEOworICAgICAgICAgICAgc291cmNlLm1fZW5hYmxl
ZCA9IHRydWU7CisgICAgICAgICAgICBpZiAoW2RldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRpYVR5
cGVBdWRpb10gfHwgW2RldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRpYVR5cGVNdXhlZF0pCisgICAg
ICAgICAgICAgICAgc291cmNlLm1fYXVkaW9Tb3VyY2VJZCA9IGNyZWF0ZUNhbm9uaWNhbFVVSURT
dHJpbmcoKTsKKworICAgICAgICAgICAgaWYgKFtkZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFU
eXBlVmlkZW9dIHx8IFtkZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlTXV4ZWRdKQorICAg
ICAgICAgICAgICAgIHNvdXJjZS5tX3ZpZGVvU291cmNlSWQgPSBjcmVhdGVDYW5vbmljYWxVVUlE
U3RyaW5nKCk7CisKKyAgICAgICAgICAgIGRldmljZXMuYXBwZW5kKHNvdXJjZSk7CisgICAgICAg
IH0gZWxzZSBpZiAoIXNvdXJjZS5tX2VuYWJsZWQpIHsKKyAgICAgICAgICAgIHNvdXJjZS5tX2Vu
YWJsZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKHNvdXJjZS5tX2F1ZGlvU291cmNlKQorICAg
ICAgICAgICAgICAgIHNvdXJjZS5tX2F1ZGlvU291cmNlLT5zZXRFbmFibGVkKHRydWUpOworICAg
ICAgICAgICAgaWYgKHNvdXJjZS5tX3ZpZGVvU291cmNlKQorICAgICAgICAgICAgICAgIHNvdXJj
ZS5tX3ZpZGVvU291cmNlLT5zZXRFbmFibGVkKHRydWUpOworICAgICAgICB9CisgICAgfQorfQor
Citib29sIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1
cm4gQVZGb3VuZGF0aW9uTGlicmFyeSgpOworfQorCitBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyJiBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQVZDYXB0dXJlRGV2aWNlTWFuYWdlciwgbWFuYWdlciwgKCkpOworICAgIHJldHVybiBtYW5h
Z2VyOworfQorCitBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
KCkKKyAgICA6IG1fb2JqY09ic2VydmVyKGFkb3B0TlMoW1tXZWJDb3JlQVZDYXB0dXJlRGV2aWNl
TWFuYWdlck9ic2VydmVyIGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNdKSkKK3sKK30KKwor
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6fkFWQ2FwdHVyZURldmljZU1hbmFnZXIoKQoreworICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9v
YmpjT2JzZXJ2ZXIuZ2V0KCldOworICAgIFttX29iamNPYnNlcnZlciBkaXNjb25uZWN0XTsKK30K
KworU3RyaW5nIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlk
ZW9TaXplKEFWQ2FwdHVyZVNlc3Npb25UeXBlICpjYXB0dXJlU2Vzc2lvbiwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQoreworICAgIEFTU0VSVCh3aWR0aCA+PSAwKTsKKyAgICBBU1NFUlQoaGVpZ2h0
ID49IDApOworICAgIAorICAgIGlmICh3aWR0aCA+IDEyODAgfHwgaGVpZ2h0ID4gNzIwKQorICAg
ICAgICAvLyBGSVhNRTogdGhpcyByZXN0cmljdGlvbiBjb3VsZCBiZSBhZGp1c3RlZCB3aXRoIHRo
ZSB2aWRlb01heFNjYWxlQW5kQ3JvcEZhY3RvciBwcm9wZXJ0eS4KKyAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CisgICAgCisgICAgaWYgKHdpZHRoID4gNjQwIHx8IGhlaWdodCA+IDQ4MCkg
eworICAgICAgICBpZiAoIVtjYXB0dXJlU2Vzc2lvbiBjYW5TZXRTZXNzaW9uUHJlc2V0OkFWQ2Fw
dHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMF0pCisgICAgICAgICAgICBlbXB0eVN0cmluZygpOwor
ICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwOworICAgIH0KKyAg
ICAKKyAgICBpZiAod2lkdGggPiAzNTIgfHwgaGVpZ2h0ID4gMjg4KSB7CisgICAgICAgIGlmICgh
W2NhcHR1cmVTZXNzaW9uIGNhblNldFNlc3Npb25QcmVzZXQ6QVZDYXB0dXJlU2Vzc2lvblByZXNl
dDY0MHg0ODBdKQorICAgICAgICAgICAgZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIEFW
Q2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwOworICAgIH0KKyAgICAKKyAgICBpZiAoW2NhcHR1
cmVTZXNzaW9uIGNhblNldFNlc3Npb25QcmVzZXQ6QVZDYXB0dXJlU2Vzc2lvblByZXNldDM1Mngy
ODhdKQorICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldDM1MngyODg7CisgICAg
CisgICAgaWYgKFtjYXB0dXJlU2Vzc2lvbiBjYW5TZXRTZXNzaW9uUHJlc2V0OkFWQ2FwdHVyZVNl
c3Npb25QcmVzZXRMb3ddKQorICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldExv
dzsKKyAgICAKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKworYm9vbCBBVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjpkZXZpY2VTdXBwb3J0c0ZhY2luZ01vZGUoQVZDYXB0dXJlRGV2aWNlVHlw
ZSAqZGV2aWNlLCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlIGZhY2lu
Z01vZGUpCit7CisgICAgaWYgKCFbZGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZVZpZGVv
XSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAoZmFjaW5nTW9kZSkg
eworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlVzZXI6CisgICAgICAgIGlmIChb
ZGV2aWNlIHBvc2l0aW9uXSA9PSBBVkNhcHR1cmVEZXZpY2VQb3NpdGlvbkZyb250KQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1T
b3VyY2VTdGF0ZXM6OkVudmlyb25tZW50OgorICAgICAgICBpZiAoW2RldmljZSBwb3NpdGlvbl0g
PT0gQVZDYXB0dXJlRGV2aWNlUG9zaXRpb25CYWNrKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkxlZnQ6
CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6UmlnaHQ6CisgICAgY2FzZSBNZWRp
YVN0cmVhbVNvdXJjZVN0YXRlczo6VW5rbm93bjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NhcHR1cmVEZXZpY2UqIEFWQ2FwdHVy
ZURldmljZU1hbmFnZXI6OmJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKE1lZGlhU3RyZWFtU291cmNl
U3RhdGVzOjpWaWRlb0ZhY2luZ01vZGUgZmFjaW5nTW9kZSkKK3sKKyAgICBWZWN0b3I8Q2FwdHVy
ZURldmljZT4mIGRldmljZXMgPSBjYXB0dXJlRGV2aWNlTGlzdCgpOworICAgIAorICAgIHNpemVf
dCBjb3VudCA9IGRldmljZXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICBBVkNhcHR1cmVEZXZpY2VUeXBlICpkZXZpY2UgPSBbQVZDYXB0
dXJlRGV2aWNlIGRldmljZVdpdGhVbmlxdWVJRDpkZXZpY2VzW2ldLm1fY2FwdHVyZURldmljZUlE
XTsKKyAgICAgICAgQVNTRVJUKGRldmljZSk7CisgICAgICAgIAorICAgICAgICBpZiAoZGV2aWNl
ICYmIGRldmljZVN1cHBvcnRzRmFjaW5nTW9kZShkZXZpY2UsIGZhY2luZ01vZGUpKQorICAgICAg
ICAgICAgcmV0dXJuICZkZXZpY2VzW2ldOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gMDsKK30K
KworYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXNzaW9uU3VwcG9ydHNDb25zdHJhaW50
KEFWQ2FwdHVyZVNlc3Npb25UeXBlICpzZXNzaW9uLCBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgc2l6
ZV90IGNvbnN0cmFpbnQgPSB2YWxpZENvbnN0cmFpbnROYW1lcygpLmZpbmQobmFtZSk7CisgICAg
aWYgKGNvbnN0cmFpbnQgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBzd2l0Y2ggKGNvbnN0cmFpbnQpIHsKKyAgICBjYXNlIFdpZHRoOgorICAgICAgICBpZiAo
dHlwZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8pCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgcmV0dXJuICFiZXN0U2Vzc2lvblByZXNldEZvclZpZGVvU2l6ZShzZXNz
aW9uLCB2YWx1ZS50b0ludCgpLCAwKS5pc0VtcHR5KCk7CisgICAgY2FzZSBIZWlnaHQ6CisgICAg
ICAgIGlmICh0eXBlID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbykKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gIWJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlkZW9T
aXplKHNlc3Npb24sIDAsIHZhbHVlLnRvSW50KCkpLmlzRW1wdHkoKTsKKyAgICBjYXNlIEZyYW1l
UmF0ZTogeworICAgICAgICBpZiAodHlwZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8pCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBJdCB3b3VsZCBt
YWtlIHNlbnNlIHRvIHVzZSBbQVZDYXB0dXJlQ29ubmVjdGlvbiB2aWRlb01pbkZyYW1lRHVyYXRp
b25dIGFuZAorICAgICAgICAvLyBbQVZDYXB0dXJlQ29ubmVjdGlvbiB2aWRlb01heEZyYW1lRHVy
YXRpb25dLCBidXQgdGhleSBvbmx5IHdvcmsgd2l0aCBhICJsaXZlIiBBVkNhcHR1cmVDb25uZWN0
aW9uLgorICAgICAgICBmbG9hdCByYXRlID0gdmFsdWUudG9GbG9hdCgpOworICAgICAgICByZXR1
cm4gcmF0ZSA+IDAgJiYgcmF0ZSA8PSA2MDsKKyAgICB9CisgICAgY2FzZSBHYWluOiB7CisgICAg
ICAgIGlmICh0eXBlICE9IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbykKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZsb2F0IGxldmVsID0gdmFsdWUudG9GbG9h
dCgpOworICAgICAgICByZXR1cm4gbGV2ZWwgPiAwICYmIGxldmVsIDw9IDE7CisgICAgfQorICAg
IGNhc2UgRmFjaW5nTW9kZTogeworICAgICAgICBpZiAodHlwZSA9PSBNZWRpYVN0cmVhbVNvdXJj
ZTo6QXVkaW8pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc2l6ZV90IGZh
Y2luZ01vZGUgPSAgdmFsaWRGYWNpbmdNb2RlcygpLmZpbmQodmFsdWUpOworICAgICAgICBpZiAo
ZmFjaW5nTW9kZSAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIGJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKHN0YXRpY19jYXN0PE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGU+KGZhY2luZ01vZGUpKTsKKyAgICB9CisgICAg
fQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyOjppc1ZhbGlkQ29uc3RyYWludChNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgc2l6ZV90IGNvbnN0cmFpbnQgPSB2YWxpZENvbnN0cmFp
bnROYW1lcygpLmZpbmQobmFtZSk7CisgICAgaWYgKGNvbnN0cmFpbnQgPT0gbm90Rm91bmQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb25zdHJhaW50ID09IEdhaW4pCisgICAg
ICAgIHJldHVybiB0eXBlID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbzsKKworICAgIHJldHVy
biB0cnVlOworfQorCitWZWN0b3I8UmVmUHRyPFRyYWNrU291cmNlSW5mbz4+IEFWQ2FwdHVyZURl
dmljZU1hbmFnZXI6OmdldFNvdXJjZXNJbmZvKGNvbnN0IFN0cmluZyYgLypyZXF1ZXN0T3JpZ2lu
Ki8pCit7CisgICAgVmVjdG9yPFJlZlB0cjxUcmFja1NvdXJjZUluZm8+PiBzb3VyY2VzSW5mbzsK
KworICAgIGlmICghaXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIHNvdXJjZXNJbmZvOwor
CisgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxpc3Qo
KTsKKyAgICBzaXplX3QgY291bnQgPSBkZXZpY2VzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlVHlwZSAqZGV2
aWNlID0gW0FWQ2FwdHVyZURldmljZSBkZXZpY2VXaXRoVW5pcXVlSUQ6ZGV2aWNlc1tpXS5tX2Nh
cHR1cmVEZXZpY2VJRF07CisgICAgICAgIEFTU0VSVChkZXZpY2UpOworCisgICAgICAgIGlmICgh
ZGV2aWNlc1tpXS5tX2VuYWJsZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBp
ZiAoZGV2aWNlc1tpXS5tX3ZpZGVvU291cmNlKQorICAgICAgICAgICAgc291cmNlc0luZm8uYXBw
ZW5kKFRyYWNrU291cmNlSW5mbzo6Y3JlYXRlKGRldmljZXNbaV0ubV92aWRlb1NvdXJjZUlkLCBU
cmFja1NvdXJjZUluZm86OlZpZGVvLCBkZXZpY2UubG9jYWxpemVkTmFtZSkpOworICAgICAgICBp
ZiAoZGV2aWNlc1tpXS5tX2F1ZGlvU291cmNlKQorICAgICAgICAgICAgc291cmNlc0luZm8uYXBw
ZW5kKFRyYWNrU291cmNlSW5mbzo6Y3JlYXRlKGRldmljZXNbaV0ubV9hdWRpb1NvdXJjZUlkLCBU
cmFja1NvdXJjZUluZm86OkF1ZGlvLCBkZXZpY2UubG9jYWxpemVkTmFtZSkpOworICAgIH0KKyAg
ICAKKyAgICBMT0coTWVkaWEsICJBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRTb3VyY2VzSW5m
byglcCksIGZvdW5kICVkIGFjdGl2ZSBkZXZpY2VzIiwgdGhpcywgc291cmNlc0luZm8uc2l6ZSgp
KTsKKworICAgIHJldHVybiBzb3VyY2VzSW5mbzsKK30KKworYm9vbCBBVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyOjp2ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6
VHlwZSB0eXBlLCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cywgU3RyaW5nJiBpbnZhbGlk
Q29uc3RyYWludCkKK3sKKyAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghY29uc3RyYWludHMpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgVmVjdG9yPE1lZGlhQ29uc3RyYWludD4gbWFuZGF0b3J5Q29uc3RyYWludHM7CisgICAgY29u
c3RyYWludHMtPmdldE1hbmRhdG9yeUNvbnN0cmFpbnRzKG1hbmRhdG9yeUNvbnN0cmFpbnRzKTsK
KyAgICBpZiAobWFuZGF0b3J5Q29uc3RyYWludHMuc2l6ZSgpKSB7CisgICAgICAgIFJldGFpblB0
cjxBVkNhcHR1cmVTZXNzaW9uVHlwZT4gc2Vzc2lvbiA9IGFkb3B0TlMoW1tBVkNhcHR1cmVTZXNz
aW9uIGFsbG9jXSBpbml0XSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFuZGF0
b3J5Q29uc3RyYWludHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IE1lZGlhQ29u
c3RyYWludCYgY29uc3RyYWludCA9IG1hbmRhdG9yeUNvbnN0cmFpbnRzW2ldOworICAgICAgICAg
ICAgaWYgKCFzZXNzaW9uU3VwcG9ydHNDb25zdHJhaW50KHNlc3Npb24uZ2V0KCksIHR5cGUsIGNv
bnN0cmFpbnQubV9uYW1lLCBjb25zdHJhaW50Lm1fdmFsdWUpKSB7CisgICAgICAgICAgICAgICAg
aW52YWxpZENvbnN0cmFpbnQgPSBjb25zdHJhaW50Lm1fbmFtZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
VmVjdG9yPE1lZGlhQ29uc3RyYWludD4gb3B0aW9uYWxDb25zdHJhaW50czsKKyAgICBjb25zdHJh
aW50cy0+Z2V0T3B0aW9uYWxDb25zdHJhaW50cyhvcHRpb25hbENvbnN0cmFpbnRzKTsKKyAgICBp
ZiAoIW9wdGlvbmFsQ29uc3RyYWludHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3B0aW9uYWxDb25zdHJhaW50cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSBvcHRpb25h
bENvbnN0cmFpbnRzW2ldOworICAgICAgICBpZiAoIWlzVmFsaWRDb25zdHJhaW50KHR5cGUsIGNv
bnN0cmFpbnQubV9uYW1lKSkgeworICAgICAgICAgICAgaW52YWxpZENvbnN0cmFpbnQgPSBjb25z
dHJhaW50Lm1fbmFtZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IEFW
Q2FwdHVyZURldmljZU1hbmFnZXI6OmJlc3RTb3VyY2VGb3JUeXBlQW5kQ29uc3RyYWludHMoTWVk
aWFTdHJlYW1Tb3VyY2U6OlR5cGUgdHlwZSwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBj
b25zdHJhaW50cykKK3sKKyAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxp
c3QoKTsKKyAgICBzaXplX3QgY291bnQgPSBkZXZpY2VzLnNpemUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKCFkZXZpY2VzW2ldLm1fZW5h
YmxlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEZJWE1FOiBjb25zaWRl
ciB0aGUgY29uc3RyYWludHMgd2hlbiBjaG9vc2luZyBhbW9uZyBtdWx0aXBsZSBkZXZpY2VzLiBG
b3Igbm93IGp1c3Qgc2VsZWN0IHRoZSBmaXJzdCBhdmFpbGFibGUKKyAgICAgICAgLy8gZGV2aWNl
IG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLgorICAgICAgICBpZiAodHlwZSA9PSBNZWRpYVN0cmVh
bVNvdXJjZTo6QXVkaW8gJiYgIWRldmljZXNbaV0ubV9hdWRpb1NvdXJjZUlkLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgaWYgKCFkZXZpY2VzW2ldLm1fYXVkaW9Tb3VyY2UpIHsKKyAgICAgICAg
ICAgICAgICBBVkNhcHR1cmVEZXZpY2VUeXBlICpkZXZpY2UgPSBbQVZDYXB0dXJlRGV2aWNlIGRl
dmljZVdpdGhVbmlxdWVJRDpkZXZpY2VzW2ldLm1fY2FwdHVyZURldmljZUlEXTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoZGV2aWNlKTsKKyAgICAgICAgICAgICAgICBkZXZpY2VzW2ldLm1fYXVk
aW9Tb3VyY2UgPSBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwgZGV2aWNlc1tp
XS5tX2F1ZGlvU291cmNlSWQsIGNvbnN0cmFpbnRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRldmljZXNbaV0ubV9hdWRpb1NvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNv
dXJjZTo6TGl2ZSk7CisgICAgICAgICAgICByZXR1cm4gZGV2aWNlc1tpXS5tX2F1ZGlvU291cmNl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OlZp
ZGVvICYmICFkZXZpY2VzW2ldLm1fdmlkZW9Tb3VyY2VJZC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIGlmICghZGV2aWNlc1tpXS5tX3ZpZGVvU291cmNlKSB7CisgICAgICAgICAgICAgICAgQVZD
YXB0dXJlRGV2aWNlVHlwZSAqZGV2aWNlID0gW0FWQ2FwdHVyZURldmljZSBkZXZpY2VXaXRoVW5p
cXVlSUQ6ZGV2aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJRF07CisgICAgICAgICAgICAgICAgQVNT
RVJUKGRldmljZSk7CisgICAgICAgICAgICAgICAgZGV2aWNlc1tpXS5tX3ZpZGVvU291cmNlID0g
QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGRldmljZXNbaV0ubV92aWRlb1Nv
dXJjZUlkLCBjb25zdHJhaW50cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXZpY2Vz
W2ldLm1fdmlkZW9Tb3VyY2UtPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUp
OworICAgICAgICAgICAgcmV0dXJuIGRldmljZXNbaV0ubV92aWRlb1NvdXJjZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIEFWQ2FwdHVyZURldmljZU1hbmFn
ZXI6OnJlZ2lzdGVyRm9yRGV2aWNlTm90aWZpY2F0aW9ucygpCit7CisgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQo
KSBzZWxlY3RvcjpAc2VsZWN0b3IoZGV2aWNlQ29ubmVjdGVkOikgbmFtZTpBVkNhcHR1cmVEZXZp
Y2VXYXNDb25uZWN0ZWROb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQo
KSBzZWxlY3RvcjpAc2VsZWN0b3IoZGV2aWNlRGlzY29ubmVjdGVkOikgbmFtZTpBVkNhcHR1cmVE
ZXZpY2VXYXNEaXNjb25uZWN0ZWROb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Cit9CisKK3ZvaWQg
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNlQ29ubmVjdGVkKCkKK3sKKyAgICByZWZyZXNo
Q2FwdHVyZURldmljZUxpc3QoKTsKK30KKwordm9pZCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpk
ZXZpY2VEaXNjb25uZWN0ZWQoQVZDYXB0dXJlRGV2aWNlVHlwZSogZGV2aWNlKQoreworICAgIFZl
Y3RvcjxDYXB0dXJlRGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVEZXZpY2VMaXN0KCk7CisKKyAg
ICBzaXplX3QgY291bnQgPSBkZXZpY2VzLnNpemUoKTsKKyAgICBpZiAoIWNvdW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBTdHJpbmcgZGV2aWNlSUQgPSBkZXZpY2UudW5pcXVlSUQ7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChkZXZpY2Vz
W2ldLm1fY2FwdHVyZURldmljZUlEID09IGRldmljZUlEKSB7CisgICAgICAgICAgICBMT0coTWVk
aWEsICJBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZXZpY2VEaXNjb25uZWN0ZWQoJXApLCBkZXZp
Y2UgJWQgZGlzYWJsZWQiLCB0aGlzLCBpKTsKKyAgICAgICAgICAgIGRldmljZXNbaV0ubV9lbmFi
bGVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoZGV2aWNlc1tpXS5tX2F1ZGlvU291cmNlKQor
ICAgICAgICAgICAgICAgIGRldmljZXNbaV0ubV9hdWRpb1NvdXJjZS0+c2V0RW5hYmxlZChmYWxz
ZSk7CisgICAgICAgICAgICBpZiAoZGV2aWNlc1tpXS5tX3ZpZGVvU291cmNlKQorICAgICAgICAg
ICAgICAgIGRldmljZXNbaV0ubV92aWRlb1NvdXJjZS0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBBVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjp2YWxpZENvbnN0cmFpbnROYW1lcygpCit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChWZWN0b3I8QXRvbWljU3RyaW5nPiwgY29uc3RyYWludHMsICgpKTsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBoZWlnaHRDb25zdHJhaW50KCJoZWlnaHQi
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB3aWR0aENvbnN0cmFpbnQoIndpZHRoIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4gZnJhbWVSYXRlQ29uc3RyYWludCgiZnJhbWVSYXRlIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gZmFjaW5nTW9kZUNvbnN0cmFpbnQoImZhY2luZ01vZGUiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBnYWluQ29uc3RyYWludCgiZ2FpbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgIAorICAgIGlmICghY29uc3RyYWludHMuc2l6ZSgpKSB7CisgICAgICAg
IGNvbnN0cmFpbnRzLmluc2VydChXaWR0aCwgd2lkdGhDb25zdHJhaW50KTsKKyAgICAgICAgY29u
c3RyYWludHMuaW5zZXJ0KEhlaWdodCwgaGVpZ2h0Q29uc3RyYWludCk7CisgICAgICAgIGNvbnN0
cmFpbnRzLmluc2VydChGcmFtZVJhdGUsIGZyYW1lUmF0ZUNvbnN0cmFpbnQpOworICAgICAgICBj
b25zdHJhaW50cy5pbnNlcnQoRmFjaW5nTW9kZSwgZmFjaW5nTW9kZUNvbnN0cmFpbnQpOworICAg
ICAgICBjb25zdHJhaW50cy5pbnNlcnQoR2FpbiwgZ2FpbkNvbnN0cmFpbnQpOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gY29uc3RyYWludHM7Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJp
bmc+JiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjp2YWxpZEZhY2luZ01vZGVzKCkKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxBdG9taWNTdHJpbmc+LCBtb2RlcywgKCkpOworICAg
IAorICAgIGlmICghbW9kZXMuc2l6ZSgpKSB7CisgICAgICAgIG1vZGVzLmluc2VydChNZWRpYVN0
cmVhbVNvdXJjZVN0YXRlczo6VXNlciwgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OmZhY2luZ01v
ZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlVzZXIpKTsKKyAgICAgICAgbW9kZXMuaW5zZXJ0
KE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpFbnZpcm9ubWVudCwgTWVkaWFTdHJlYW1Tb3VyY2VT
dGF0ZXM6OmZhY2luZ01vZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkVudmlyb25tZW50KSk7
CisgICAgICAgIG1vZGVzLmluc2VydChNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6TGVmdCwgTWVk
aWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6
OkxlZnQpKTsKKyAgICAgICAgbW9kZXMuaW5zZXJ0KE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpS
aWdodCwgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoTWVkaWFTdHJlYW1Tb3Vy
Y2VTdGF0ZXM6OlJpZ2h0KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBtb2RlczsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitAaW1wbGVtZW50YXRpb24gV2ViQ29yZUFWQ2FwdHVy
ZURldmljZU1hbmFnZXJPYnNlcnZlcgorCistIChpZClpbml0V2l0aENhbGxiYWNrOihBVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyKiljYWxsYmFjaworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIG1fY2FsbGJhY2sgPSBjYWxs
YmFjazsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkaXNjb25uZWN0Cit7CisgICAg
W05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmXTsK
KyAgICBtX2NhbGxiYWNrID0gMDsKK30KKworLSAodm9pZClkZXZpY2VEaXNjb25uZWN0ZWQ6KE5T
Tm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFtX2NhbGxiYWNrKQorICAg
ICAgICByZXR1cm47CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBeeworICAgICAgICBpZiAobV9jYWxsYmFjaykgeworICAgICAgICAgICAgQVZDYXB0dXJl
RGV2aWNlVHlwZSAqZGV2aWNlID0gW25vdGlmaWNhdGlvbiBvYmplY3RdOworICAgICAgICAgICAg
bV9jYWxsYmFjay0+ZGV2aWNlRGlzY29ubmVjdGVkKGRldmljZSk7CisgICAgICAgIH0KKyAgICB9
KTsKK30KKworLSAodm9pZClkZXZpY2VDb25uZWN0ZWQ6KE5TTm90aWZpY2F0aW9uICopdW51c2Vk
Tm90aWZpY2F0aW9uCit7CisgICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlmaWNhdGlvbik7Cisg
ICAgaWYgKCFtX2NhbGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAobV9jYWxsYmFjaykK
KyAgICAgICAgICAgIG1fY2FsbGJhY2stPmRldmljZUNvbm5lY3RlZCgpOworICAgIH0pOworfQor
CitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVk
aWFDYXB0dXJlU291cmNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFWTWVkaWFDYXB0dXJlU291cmNlX2gK
KyNkZWZpbmUgQVZNZWRpYUNhcHR1cmVTb3VyY2VfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgi
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIEFWQ2FwdHVyZUF1ZGlv
RGF0YU91dHB1dDsKK09CSkNfQ0xBU1MgQVZDYXB0dXJlQ29ubmVjdGlvbjsKK09CSkNfQ0xBU1Mg
QVZDYXB0dXJlRGV2aWNlOworT0JKQ19DTEFTUyBBVkNhcHR1cmVPdXRwdXQ7CitPQkpDX0NMQVNT
IEFWQ2FwdHVyZVNlc3Npb247CitPQkpDX0NMQVNTIEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dDsK
K09CSkNfQ0xBU1MgV2ViQ29yZUFWTWVkaWFDYXB0dXJlU291cmNlT2JzZXJ2ZXI7CisKK3R5cGVk
ZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBVk1lZGlhQ2FwdHVyZVNvdXJjZSA6IHB1YmxpYyBN
ZWRpYVN0cmVhbVNvdXJjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QVZNZWRpYUNhcHR1cmVT
b3VyY2UoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxl
QnVmZmVyRnJvbUNvbm5lY3Rpb24oQVZDYXB0dXJlT3V0cHV0KiwgQ01TYW1wbGVCdWZmZXJSZWYs
IEFWQ2FwdHVyZUNvbm5lY3Rpb24qKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZVNl
c3Npb25TdG9wcGVkUnVubmluZygpOworCitwcm90ZWN0ZWQ6CisgICAgQVZNZWRpYUNhcHR1cmVT
b3VyY2UoQVZDYXB0dXJlRGV2aWNlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTWVkaWFTdHJlYW1T
b3VyY2U6OlR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pOworCisgICAgdmlydHVh
bCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyYgc3RhdGVzKCkgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0dXBDYXB0dXJlU2Vzc2lvbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGVz
KCkgPSAwOworCisgICAgQVZDYXB0dXJlU2Vzc2lvbiAqc2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2Vzc2lvbi5nZXQoKTsgfQorICAgIEFWQ2FwdHVyZURldmljZSAqZGV2aWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9kZXZpY2UuZ2V0KCk7IH0KKyAgICBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyog
Y3VycmVudFN0YXRlcygpIHsgcmV0dXJuICZtX2N1cnJlbnRTdGF0ZXM7IH0KKyAgICBNZWRpYUNv
bnN0cmFpbnRzKiBjb25zdHJhaW50cygpIHsgcmV0dXJuIG1fY29uc3RyYWludHMuZ2V0KCk7IH0K
KworICAgIHZvaWQgc2V0VmlkZW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZShBVkNhcHR1cmVWaWRlb0Rh
dGFPdXRwdXQqKTsKKyAgICB2b2lkIHNldEF1ZGlvU2FtcGxlQnVmZmVyRGVsZWdhdGUoQVZDYXB0
dXJlQXVkaW9EYXRhT3V0cHV0Kik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXR1cFNlc3Npb24o
KTsKKworICAgIFJldGFpblB0cjxXZWJDb3JlQVZNZWRpYUNhcHR1cmVTb3VyY2VPYnNlcnZlcj4g
bV9vYmpjT2JzZXJ2ZXI7CisgICAgUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IG1fY29uc3RyYWlu
dHM7CisgICAgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMgbV9jdXJyZW50U3RhdGVzOworICAgIFJl
dGFpblB0cjxBVkNhcHR1cmVTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgUmV0YWluUHRyPEFWQ2Fw
dHVyZURldmljZT4gbV9kZXZpY2U7CisgICAgCisgICAgYm9vbCBtX2lzUnVubmluZzsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0p
CisKKyNlbmRpZiAvLyBBVk1lZGlhQ2FwdHVyZVNvdXJjZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFD
YXB0dXJlU291cmNlLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbXBvcnQgIkFWTWVkaWFD
YXB0dXJlU291cmNlLmgiCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhQ29u
c3RyYWludHMuaCIKKyNpbXBvcnQgIk1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmgiCisjaW1wb3J0
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgIlVV
SUQuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPG9i
amMvcnVudGltZS5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorCit0eXBlZGVmIEFWQ2FwdHVyZUNvbm5lY3Rpb24gQVZDYXB0dXJl
Q29ubmVjdGlvblR5cGU7Cit0eXBlZGVmIEFWQ2FwdHVyZURldmljZSBBVkNhcHR1cmVEZXZpY2VU
eXBlOwordHlwZWRlZiBBVkNhcHR1cmVEZXZpY2VJbnB1dCBBVkNhcHR1cmVEZXZpY2VJbnB1dFR5
cGU7Cit0eXBlZGVmIEFWQ2FwdHVyZU91dHB1dCBBVkNhcHR1cmVPdXRwdXRUeXBlOwordHlwZWRl
ZiBBVkNhcHR1cmVTZXNzaW9uIEFWQ2FwdHVyZVNlc3Npb25UeXBlOwordHlwZWRlZiBBVkNhcHR1
cmVBdWRpb0RhdGFPdXRwdXQgQVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0VHlwZTsKK3R5cGVkZWYg
QVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0IEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dFR5cGU7CisK
K1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0ZS
QU1FV09SS19PUFRJT05BTChDb3JlTWVkaWEpCisKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRp
b24sIEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dCkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRp
b24sIEFWQ2FwdHVyZUNvbm5lY3Rpb24pCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBB
VkNhcHR1cmVEZXZpY2UpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVE
ZXZpY2VJbnB1dCkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZU91dHB1
dCkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZVNlc3Npb24pCitTT0ZU
X0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXQpCisKKyNk
ZWZpbmUgQVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0IGdldEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1
dENsYXNzKCkKKyNkZWZpbmUgQVZDYXB0dXJlQ29ubmVjdGlvbiBnZXRBVkNhcHR1cmVDb25uZWN0
aW9uQ2xhc3MoKQorI2RlZmluZSBBVkNhcHR1cmVEZXZpY2UgZ2V0QVZDYXB0dXJlRGV2aWNlQ2xh
c3MoKQorI2RlZmluZSBBVkNhcHR1cmVEZXZpY2VJbnB1dCBnZXRBVkNhcHR1cmVEZXZpY2VJbnB1
dENsYXNzKCkKKyNkZWZpbmUgQVZDYXB0dXJlT3V0cHV0IGdldEFWQ2FwdHVyZU91dHB1dENsYXNz
KCkKKyNkZWZpbmUgQVZDYXB0dXJlU2Vzc2lvbiBnZXRBVkNhcHR1cmVTZXNzaW9uQ2xhc3MoKQor
I2RlZmluZSBBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXQgZ2V0QVZDYXB0dXJlVmlkZW9EYXRhT3V0
cHV0Q2xhc3MoKQorCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBl
QXVkaW8sIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWTWVk
aWFUeXBlTXV4ZWQsIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24s
IEFWTWVkaWFUeXBlVmlkZW8sIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5k
YXRpb24sIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMCwgTlNTdHJpbmcgKikKK1NPRlRf
TElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlU2Vzc2lvblByZXNldDY0MHg0ODAs
IE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZVNl
c3Npb25QcmVzZXQzNTJ4Mjg4LCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3Vu
ZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93LCBOU1N0cmluZyAqKQorU09GVF9MSU5L
X1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uRGlkU3RvcFJ1bm5pbmdOb3Rp
ZmljYXRpb24sIE5TU3RyaW5nICopCisKKyNkZWZpbmUgQVZNZWRpYVR5cGVBdWRpbyBnZXRBVk1l
ZGlhVHlwZUF1ZGlvKCkKKyNkZWZpbmUgQVZNZWRpYVR5cGVNdXhlZCBnZXRBVk1lZGlhVHlwZU11
eGVkKCkKKyNkZWZpbmUgQVZNZWRpYVR5cGVWaWRlbyBnZXRBVk1lZGlhVHlwZVZpZGVvKCkKKyNk
ZWZpbmUgQVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwIGdldEFWQ2FwdHVyZVNlc3Npb25Q
cmVzZXQxMjgweDcyMCgpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwIGdl
dEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwKCkKKyNkZWZpbmUgQVZDYXB0dXJlU2Vzc2lv
blByZXNldDM1MngyODggZ2V0QVZDYXB0dXJlU2Vzc2lvblByZXNldDM1MngyODgoKQorI2RlZmlu
ZSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93IGdldEFWQ2FwdHVyZVNlc3Npb25QcmVzZXRMb3co
KQorI2RlZmluZSBBVkNhcHR1cmVTZXNzaW9uRGlkU3RvcFJ1bm5pbmdOb3RpZmljYXRpb24gZ2V0
QVZDYXB0dXJlU2Vzc2lvbkRpZFN0b3BSdW5uaW5nTm90aWZpY2F0aW9uKCkKKworU09GVF9MSU5L
KENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbiwgQ01Gb3JtYXRE
ZXNjcmlwdGlvblJlZiwgKENNU2FtcGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpOworU09GVF9M
SU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJHZXRQcmVzZW50YXRpb25UaW1lU3RhbXAsIENN
VGltZSwgKENNU2FtcGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpOworCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworQGludGVyZmFjZSBXZWJDb3JlQVZNZWRpYUNhcHR1cmVTb3VyY2VPYnNl
cnZlciA6IE5TT2JqZWN0PEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dFNhbXBsZUJ1ZmZlckRlbGVn
YXRlLCBBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXRTYW1wbGVCdWZmZXJEZWxlZ2F0ZT4KK3sKKyAg
ICBBVk1lZGlhQ2FwdHVyZVNvdXJjZSogbV9jYWxsYmFjazsKK30KKworLShpZClpbml0V2l0aENh
bGxiYWNrOihBVk1lZGlhQ2FwdHVyZVNvdXJjZSopY2FsbGJhY2s7CistKHZvaWQpZGlzY29ubmVj
dDsKKy0odm9pZCljYXB0dXJlU2Vzc2lvblN0b3BwZWRSdW5uaW5nOihOU05vdGlmaWNhdGlvbiAq
KW5vdGlmaWNhdGlvbjsKKy0odm9pZCljYXB0dXJlT3V0cHV0OihBVkNhcHR1cmVPdXRwdXRUeXBl
ICopY2FwdHVyZU91dHB1dCBkaWRPdXRwdXRTYW1wbGVCdWZmZXI6KENNU2FtcGxlQnVmZmVyUmVm
KXNhbXBsZUJ1ZmZlciBmcm9tQ29ubmVjdGlvbjooQVZDYXB0dXJlQ29ubmVjdGlvblR5cGUgKilj
b25uZWN0aW9uOworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBkaXNwYXRj
aF9xdWV1ZV90IGdsb2JhQXVkaW9DYXB0dXJlU2VyaWFsUXVldWUoKQoreworICAgIHN0YXRpYyBk
aXNwYXRjaF9xdWV1ZV90IGdsb2JhbFF1ZXVlOworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qg
b25jZVRva2VuOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgZ2xv
YmFsUXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoIldlYkNvcmVBVk1lZGlhQ2FwdHVyZVNv
dXJjZSBhdWRpbyBjYXB0dXJlIHF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfU0VSSUFMKTsKKyAgICB9
KTsKKyAgICByZXR1cm4gZ2xvYmFsUXVldWU7Cit9CisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90
IGdsb2JhVmlkZW9DYXB0dXJlU2VyaWFsUXVldWUoKQoreworICAgIHN0YXRpYyBkaXNwYXRjaF9x
dWV1ZV90IGdsb2JhbFF1ZXVlOworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2Vu
OworICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgZ2xvYmFsUXVldWUg
PSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoIldlYkNvcmVBVk1lZGlhQ2FwdHVyZVNvdXJjZSB2aWRl
byBjYXB0dXJlIHF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfU0VSSUFMKTsKKyAgICAgICAgZGlzcGF0
Y2hfc2V0X3RhcmdldF9xdWV1ZShnbG9iYWxRdWV1ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1
ZSggRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfSElHSCwgMCkpOworICAgIH0pOworICAgIHJldHVy
biBnbG9iYWxRdWV1ZTsKK30KKworQVZNZWRpYUNhcHR1cmVTb3VyY2U6OkFWTWVkaWFDYXB0dXJl
U291cmNlKEFWQ2FwdHVyZURldmljZVR5cGUqIGRldmljZSwgY29uc3QgQXRvbWljU3RyaW5nJiBp
ZCwgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUgdHlwZSwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFp
bnRzPiBjb25zdHJhaW50cykKKyAgICA6IE1lZGlhU3RyZWFtU291cmNlKGlkLCB0eXBlLCBlbXB0
eVN0cmluZygpKQorICAgICwgbV9vYmpjT2JzZXJ2ZXIoYWRvcHROUyhbW1dlYkNvcmVBVk1lZGlh
Q2FwdHVyZVNvdXJjZU9ic2VydmVyIGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNdKSkKKyAg
ICAsIG1fY29uc3RyYWludHMoY29uc3RyYWludHMpCisgICAgLCBtX2RldmljZShkZXZpY2UpCisg
ICAgLCBtX2lzUnVubmluZyhmYWxzZSkKK3sKKyAgICBzZXROYW1lKFtkZXZpY2UgbG9jYWxpemVk
TmFtZV0pOworICAgIG1fY3VycmVudFN0YXRlcy5zZXRTb3VyY2VUeXBlKHR5cGUgPT0gTWVkaWFT
dHJlYW1Tb3VyY2U6OlZpZGVvID8gTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkNhbWVyYSA6IE1l
ZGlhU3RyZWFtU291cmNlU3RhdGVzOjpNaWNyb3Bob25lKTsKK30KKworQVZNZWRpYUNhcHR1cmVT
b3VyY2U6On5BVk1lZGlhQ2FwdHVyZVNvdXJjZSgpCit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKV07
CisgICAgW21fb2JqY09ic2VydmVyIGRpc2Nvbm5lY3RdOworICAgIFttX3Nlc3Npb24uZ2V0KCkg
c3RvcFJ1bm5pbmddOworCisgICAgc2V0UmVhZHlTdGF0ZShFbmRlZCk7Cit9CisKK3ZvaWQgQVZN
ZWRpYUNhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAgaWYgKCFtX3Nl
c3Npb24pCisgICAgICAgIHNldHVwU2Vzc2lvbigpOworICAgIAorICAgIGlmIChbbV9zZXNzaW9u
LmdldCgpIGlzUnVubmluZ10pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBbbV9zZXNzaW9u
LmdldCgpIHN0YXJ0UnVubmluZ107CisgICAgc2V0RW5hYmxlZCh0cnVlKTsKKyAgICBtX2lzUnVu
bmluZyA9IHRydWU7Cit9CisKK3ZvaWQgQVZNZWRpYUNhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNp
bmdEYXRhKCkKK3sKKyAgICBpZiAoIW1fc2Vzc2lvbiB8fCAhW21fc2Vzc2lvbi5nZXQoKSBpc1J1
bm5pbmddKQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9zZXNzaW9uLmdldCgpIHN0b3BSdW5u
aW5nXTsKKyAgICBzZXRFbmFibGVkKGZhbHNlKTsKKyAgICBtX2lzUnVubmluZyA9IHRydWU7Cit9
CisKK2NvbnN0IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzJiBBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6
c3RhdGVzKCkKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKKyAgICByZXR1cm4gbV9jdXJyZW50U3Rh
dGVzOworfQorCit2b2lkIEFWTWVkaWFDYXB0dXJlU291cmNlOjpzZXR1cFNlc3Npb24oKQorewor
ICAgIGlmIChtX3Nlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Vzc2lvbiA9IGFk
b3B0TlMoW1tBVkNhcHR1cmVTZXNzaW9uIGFsbG9jXSBpbml0XSk7CisgICAgCisgICAgW1tOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZl
ci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoY2FwdHVyZVNlc3Npb25TdG9wcGVkUnVubmluZzop
IG5hbWU6QVZDYXB0dXJlU2Vzc2lvbkRpZFN0b3BSdW5uaW5nTm90aWZpY2F0aW9uIG9iamVjdDpu
aWxdOworICAgIAorICAgIHNldHVwQ2FwdHVyZVNlc3Npb24oKTsKKyAgICBzZXRSZWFkeVN0YXRl
KExpdmUpOworfQorIAordm9pZCBBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6Y2FwdHVyZVNlc3Npb25T
dG9wcGVkUnVubmluZygpCit7CisgICAgc3RvcFByb2R1Y2luZ0RhdGEoKTsKK30KKwordm9pZCBB
Vk1lZGlhQ2FwdHVyZVNvdXJjZTo6c2V0VmlkZW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZShBVkNhcHR1
cmVWaWRlb0RhdGFPdXRwdXRUeXBlKiB2aWRlb091dHB1dCkKK3sKKyAgICBbdmlkZW9PdXRwdXQg
c2V0U2FtcGxlQnVmZmVyRGVsZWdhdGU6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgcXVldWU6Z2xvYmFW
aWRlb0NhcHR1cmVTZXJpYWxRdWV1ZSgpXTsKK30KKwordm9pZCBBVk1lZGlhQ2FwdHVyZVNvdXJj
ZTo6c2V0QXVkaW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZShBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXRU
eXBlKiBhdWRpb091dHB1dCkKK3sKKyAgICBbYXVkaW9PdXRwdXQgc2V0U2FtcGxlQnVmZmVyRGVs
ZWdhdGU6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgcXVldWU6Z2xvYmFBdWRpb0NhcHR1cmVTZXJpYWxR
dWV1ZSgpXTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitAaW1wbGVtZW50YXRpb24g
V2ViQ29yZUFWTWVkaWFDYXB0dXJlU291cmNlT2JzZXJ2ZXIKKworLSAoaWQpaW5pdFdpdGhDYWxs
YmFjazooQVZNZWRpYUNhcHR1cmVTb3VyY2UqKWNhbGxiYWNrCit7CisgICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgbV9jYWxs
YmFjayA9IGNhbGxiYWNrOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRpc2Nvbm5l
Y3QKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFy
Z2V0OnNlbGZdOworICAgIG1fY2FsbGJhY2sgPSAwOworfQorCistICh2b2lkKWNhcHR1cmVTZXNz
aW9uU3RvcHBlZFJ1bm5pbmc6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAg
VU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7CisKKyAgICBpZiAoIW1fY2FsbGJhY2spCisgICAg
ICAgIHJldHVybjsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIF57CisgICAgICAgIGlmIChtX2NhbGxiYWNrKQorICAgICAgICAgICAgbV9jYWxsYmFjay0+
Y2FwdHVyZVNlc3Npb25TdG9wcGVkUnVubmluZygpOworICAgIH0pOworfQorCistICh2b2lkKWNh
cHR1cmVPdXRwdXQ6KEFWQ2FwdHVyZU91dHB1dFR5cGUgKiljYXB0dXJlT3V0cHV0IGRpZE91dHB1
dFNhbXBsZUJ1ZmZlcjooQ01TYW1wbGVCdWZmZXJSZWYpc2FtcGxlQnVmZmVyIGZyb21Db25uZWN0
aW9uOihBVkNhcHR1cmVDb25uZWN0aW9uVHlwZSAqKWNvbm5lY3Rpb24KK3sKKyAgICBpZiAoIW1f
Y2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKworICAgIENGUmV0YWluKHNhbXBsZUJ1ZmZlcik7
CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAg
ICAgaWYgKG1fY2FsbGJhY2spCisgICAgICAgICAgICBtX2NhbGxiYWNrLT5jYXB0dXJlT3V0cHV0
RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5lY3Rpb24oY2FwdHVyZU91dHB1dCwgc2FtcGxl
QnVmZmVyLCBjb25uZWN0aW9uKTsKKyAgICAgICAgQ0ZSZWxlYXNlKHNhbXBsZUJ1ZmZlcik7Cisg
ICAgfSk7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVT
b3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQVZWaWRlb0NhcHR1
cmVTb3VyY2VfaAorI2RlZmluZSBBVlZpZGVvQ2FwdHVyZVNvdXJjZV9oCisKKyNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW5jbHVkZSAiQVZNZWRpYUNh
cHR1cmVTb3VyY2UuaCIKKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNj
cmlwdGlvbiAqQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBBVlZpZGVvQ2FwdHVyZVNvdXJjZSA6IHB1YmxpYyBBVk1lZGlhQ2FwdHVyZVNvdXJj
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxBVk1lZGlhQ2FwdHVyZVNvdXJjZT4gY3Jl
YXRlKEFWQ2FwdHVyZURldmljZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIFBhc3NSZWZQdHI8TWVk
aWFDb25zdHJhaW50cz4pOworCisgICAgdmlydHVhbCBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VD
YXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5lY3Rpb24oQVZD
YXB0dXJlT3V0cHV0KiwgQ01TYW1wbGVCdWZmZXJSZWYsIEFWQ2FwdHVyZUNvbm5lY3Rpb24qKSBP
VkVSUklERTsKKworcHJpdmF0ZToKKyAgICBBVlZpZGVvQ2FwdHVyZVNvdXJjZShBVkNhcHR1cmVE
ZXZpY2UqLCBjb25zdCBBdG9taWNTdHJpbmcmLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+
KTsKKyAgICB2aXJ0dWFsIH5BVlZpZGVvQ2FwdHVyZVNvdXJjZSgpOworCisgICAgdmlydHVhbCB2
b2lkIHNldHVwQ2FwdHVyZVNlc3Npb24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlU3RhdGVzKCkgT1ZFUlJJREU7CisKKyAgICBib29sIGFwcGx5Q29uc3RyYWludHMoTWVkaWFD
b25zdHJhaW50cyopOworICAgIGJvb2wgc2V0RnJhbWVSYXRlQ29uc3RyYWludChmbG9hdCBtaW5G
cmFtZVJhdGUsIGZsb2F0IG1heEZyYW1lUmF0ZSk7CisKKyAgICB2b2lkIGNhbGN1bGF0ZUZyYW1l
cmF0ZShDTVNhbXBsZUJ1ZmZlclJlZik7CisKKyAgICBSZXRhaW5QdHI8QVZDYXB0dXJlQ29ubmVj
dGlvbj4gbV92aWRlb0Nvbm5lY3Rpb247CisgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IG1fdmlkZW9Gb3JtYXREZXNjcmlwdGlvbjsKKyAgICBWZWN0b3I8RmxvYXQ2ND4gbV92
aWRlb0ZyYW1lVGltZVN0YW1wczsKKyAgICBGbG9hdDY0IG1fZnJhbWVSYXRlOworICAgIGludDMy
X3QgbV93aWR0aDsKKyAgICBpbnQzMl90IG1faGVpZ2h0OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIEFW
VmlkZW9DYXB0dXJlU291cmNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0J
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
QVZWaWRlb0NhcHR1cmVTb3VyY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKEFWRk9VTkRBVElPTikKKworI2ltcG9ydCAiQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCIK
KworI2ltcG9ydCAiQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorI2ltcG9ydCAiQmxvY2tFeGNl
cHRpb25zLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRz
LmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oIgorI2ltcG9ydCAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRp
b24vQVZGb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKwordHlwZWRlZiBB
VkNhcHR1cmVDb25uZWN0aW9uIEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlOwordHlwZWRlZiBBVkNh
cHR1cmVEZXZpY2UgQVZDYXB0dXJlRGV2aWNlVHlwZTsKK3R5cGVkZWYgQVZDYXB0dXJlRGV2aWNl
SW5wdXQgQVZDYXB0dXJlRGV2aWNlSW5wdXRUeXBlOwordHlwZWRlZiBBVkNhcHR1cmVPdXRwdXQg
QVZDYXB0dXJlT3V0cHV0VHlwZTsKK3R5cGVkZWYgQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0IEFW
Q2FwdHVyZVZpZGVvRGF0YU91dHB1dFR5cGU7CisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9O
QUwoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChDb3JlTWVkaWEp
CisKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZUNvbm5lY3Rpb24pCitT
T0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVEZXZpY2UpCitTT0ZUX0xJTktf
Q0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVEZXZpY2VJbnB1dCkKK1NPRlRfTElOS19DTEFT
UyhBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZU91dHB1dCkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5k
YXRpb24sIEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dCkKKworI2RlZmluZSBBVkNhcHR1cmVDb25u
ZWN0aW9uIGdldEFWQ2FwdHVyZUNvbm5lY3Rpb25DbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVyZURl
dmljZSBnZXRBVkNhcHR1cmVEZXZpY2VDbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVyZURldmljZUlu
cHV0IGdldEFWQ2FwdHVyZURldmljZUlucHV0Q2xhc3MoKQorI2RlZmluZSBBVkNhcHR1cmVPdXRw
dXQgZ2V0QVZDYXB0dXJlT3V0cHV0Q2xhc3MoKQorI2RlZmluZSBBVkNhcHR1cmVWaWRlb0RhdGFP
dXRwdXQgZ2V0QVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0Q2xhc3MoKQorCitTT0ZUX0xJTktfUE9J
TlRFUihBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlQXVkaW8sIE5TU3RyaW5nICopCitTT0ZUX0xJ
TktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlVmlkZW8sIE5TU3RyaW5nICopCitT
T0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQxMjgw
eDcyMCwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0
dXJlU2Vzc2lvblByZXNldDY0MHg0ODAsIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihB
VkZvdW5kYXRpb24sIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4LCBOU1N0cmluZyAqKQor
U09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93
LCBOU1N0cmluZyAqKQorCisjZGVmaW5lIEFWTWVkaWFUeXBlVmlkZW8gZ2V0QVZNZWRpYVR5cGVW
aWRlbygpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMCBnZXRBVkNhcHR1
cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjAoKQorI2RlZmluZSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0
NjQweDQ4MCBnZXRBVkNhcHR1cmVTZXNzaW9uUHJlc2V0NjQweDQ4MCgpCisjZGVmaW5lIEFWQ2Fw
dHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4IGdldEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4
KCkKKyNkZWZpbmUgQVZDYXB0dXJlU2Vzc2lvblByZXNldExvdyBnZXRBVkNhcHR1cmVTZXNzaW9u
UHJlc2V0TG93KCkKKworU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJHZXRGb3Jt
YXREZXNjcmlwdGlvbiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiwgKENNU2FtcGxlQnVmZmVyUmVm
IHNidWYpLCAoc2J1ZikpOworU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJHZXRQ
cmVzZW50YXRpb25UaW1lU3RhbXAsIENNVGltZSwgKENNU2FtcGxlQnVmZmVyUmVmIHNidWYpLCAo
c2J1ZikpOworU09GVF9MSU5LKENvcmVNZWRpYSwgQ01UaW1lQ29tcGFyZSwgaW50MzJfdCwgKENN
VGltZSB0aW1lMSwgQ01UaW1lIHRpbWUyKSwgKHRpbWUxLCB0aW1lMikpCitTT0ZUX0xJTksoQ29y
ZU1lZGlhLCBDTVRpbWVNYWtlLCBDTVRpbWUsIChpbnQ2NF90IHZhbHVlLCBpbnQzMl90IHRpbWVz
Y2FsZSksICh2YWx1ZSwgdGltZXNjYWxlKSkKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNVmlkZW9G
b3JtYXREZXNjcmlwdGlvbkdldERpbWVuc2lvbnMsIENNVmlkZW9EaW1lbnNpb25zLCAoQ01WaWRl
b0Zvcm1hdERlc2NyaXB0aW9uUmVmIHZpZGVvRGVzYyksICh2aWRlb0Rlc2MpKTsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitSZWZQdHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IEFWVmlkZW9DYXB0
dXJlU291cmNlOjpjcmVhdGUoQVZDYXB0dXJlRGV2aWNlVHlwZSogZGV2aWNlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGNvbnN0cmFpbnQpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBVlZpZGVvQ2FwdHVyZVNvdXJjZShkZXZpY2UsIGlk
LCBjb25zdHJhaW50KSk7Cit9CisKK0FWVmlkZW9DYXB0dXJlU291cmNlOjpBVlZpZGVvQ2FwdHVy
ZVNvdXJjZShBVkNhcHR1cmVEZXZpY2VUeXBlKiBkZXZpY2UsIGNvbnN0IEF0b21pY1N0cmluZyYg
aWQsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludCkKKyAgICA6IEFWTWVk
aWFDYXB0dXJlU291cmNlKGRldmljZSwgaWQsIE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbywgY29u
c3RyYWludCkKKyAgICAsIG1fZnJhbWVSYXRlKDApCisgICAgLCBtX3dpZHRoKDApCisgICAgLCBt
X2hlaWdodCgwKQoreworICAgIGN1cnJlbnRTdGF0ZXMoKS0+c2V0U291cmNlSWQoaWQpOworICAg
IGN1cnJlbnRTdGF0ZXMoKS0+c2V0U291cmNlVHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6
Q2FtZXJhKTsKK30KKworQVZWaWRlb0NhcHR1cmVTb3VyY2U6On5BVlZpZGVvQ2FwdHVyZVNvdXJj
ZSgpCit7Cit9CisKK1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcz4gQVZWaWRl
b0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6dXBk
YXRlU3RhdGVzKCkKK3sKKyAgICBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyogc3RhdGVzID0gY3Vy
cmVudFN0YXRlcygpOworCisgICAgaWYgKFtkZXZpY2UoKSBwb3NpdGlvbl0gPT0gQVZDYXB0dXJl
RGV2aWNlUG9zaXRpb25Gcm9udCkKKyAgICAgICAgc3RhdGVzLT5zZXRGYWNpbmdNb2RlKE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzOjpVc2VyKTsKKyAgICBlbHNlIGlmIChbZGV2aWNlKCkgcG9zaXRp
b25dID09IEFWQ2FwdHVyZURldmljZVBvc2l0aW9uQmFjaykKKyAgICAgICAgc3RhdGVzLT5zZXRG
YWNpbmdNb2RlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpFbnZpcm9ubWVudCk7CisgICAgZWxz
ZQorICAgICAgICBzdGF0ZXMtPnNldEZhY2luZ01vZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6
OlVua25vd24pOworICAgIAorICAgIHN0YXRlcy0+c2V0RnJhbWVSYXRlKG1fZnJhbWVSYXRlKTsK
KyAgICBzdGF0ZXMtPnNldFdpZHRoKG1fd2lkdGgpOworICAgIHN0YXRlcy0+c2V0SGVpZ2h0KG1f
aGVpZ2h0KTsKKyAgICBzdGF0ZXMtPnNldEFzcGVjdFJhdGlvKHN0YXRpY19jYXN0PGZsb2F0Piht
X3dpZHRoKSAvIG1faGVpZ2h0KTsKK30KKworYm9vbCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6c2V0
RnJhbWVSYXRlQ29uc3RyYWludChmbG9hdCBtaW5GcmFtZVJhdGUsIGZsb2F0IG1heEZyYW1lUmF0
ZSkKK3sKKyAgICBBVkZyYW1lUmF0ZVJhbmdlICpiZXN0RnJhbWVSYXRlUmFuZ2UgPSAwOworCisg
ICAgZm9yIChBVkZyYW1lUmF0ZVJhbmdlICpmcmFtZVJhdGVSYW5nZSBpbiBbW2RldmljZSgpIGFj
dGl2ZUZvcm1hdF0gdmlkZW9TdXBwb3J0ZWRGcmFtZVJhdGVSYW5nZXNdKSB7CisgICAgICAgIGlm
ICghbWF4RnJhbWVSYXRlKSB7CisgICAgICAgICAgICBpZiAobWluRnJhbWVSYXRlID09IFtmcmFt
ZVJhdGVSYW5nZSBtaW5GcmFtZVJhdGVdKQorICAgICAgICAgICAgICAgIGJlc3RGcmFtZVJhdGVS
YW5nZSA9IGZyYW1lUmF0ZVJhbmdlOworICAgICAgICB9IGVsc2UgaWYgKG1pbkZyYW1lUmF0ZSA+
PSBbZnJhbWVSYXRlUmFuZ2UgbWluRnJhbWVSYXRlXSAmJiBtYXhGcmFtZVJhdGUgPD0gW2ZyYW1l
UmF0ZVJhbmdlIG1heEZyYW1lUmF0ZV0pIHsKKyAgICAgICAgICAgIGlmIChDTVRJTUVfQ09NUEFS
RV9JTkxJTkUoW2ZyYW1lUmF0ZVJhbmdlIG1pbkZyYW1lRHVyYXRpb25dLCA+LCBbYmVzdEZyYW1l
UmF0ZVJhbmdlIG1pbkZyYW1lRHVyYXRpb25dKSkKKyAgICAgICAgICAgICAgICBiZXN0RnJhbWVS
YXRlUmFuZ2UgPSBmcmFtZVJhdGVSYW5nZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBp
ZiAoIWJlc3RGcmFtZVJhdGVSYW5nZSkgeworICAgICAgICBMT0coTWVkaWEsICJBVlZpZGVvQ2Fw
dHVyZVNvdXJjZTo6c2V0RnJhbWVSYXRlQ29uc3RyYWludCglcCksIGZyYW1lIHJhdGUgcmFuZ2Ug
JWYuLiVmIG5vdCBzdXBwb3J0ZWQgYnkgdmlkZW8gZGV2aWNlIiwgdGhpcywgbWluRnJhbWVSYXRl
LCBtYXhGcmFtZVJhdGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIEB0cnkgeworICAgICAgICBpZiAoW2RldmljZSgp
IGxvY2tGb3JDb25maWd1cmF0aW9uOiZlcnJvcl0pIHsKKyAgICAgICAgICAgIFtkZXZpY2UoKSBz
ZXRBY3RpdmVWaWRlb01pbkZyYW1lRHVyYXRpb246W2Jlc3RGcmFtZVJhdGVSYW5nZSBtaW5GcmFt
ZUR1cmF0aW9uXV07CisgICAgICAgICAgICBpZiAobWF4RnJhbWVSYXRlKQorICAgICAgICAgICAg
ICAgIFtkZXZpY2UoKSBzZXRBY3RpdmVWaWRlb01heEZyYW1lRHVyYXRpb246W2Jlc3RGcmFtZVJh
dGVSYW5nZSBtYXhGcmFtZUR1cmF0aW9uXV07CisgICAgICAgICAgICBbZGV2aWNlKCkgdW5sb2Nr
Rm9yQ29uZmlndXJhdGlvbl07CisgICAgICAgIH0KKyAgICB9IEBjYXRjaChOU0V4Y2VwdGlvbiAq
ZXhjZXB0aW9uKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkFWVmlkZW9DYXB0dXJlU291cmNlOjpz
ZXRGcmFtZVJhdGVDb25zdHJhaW50KCVwKSwgZXhjZXB0aW9uIHRocm93biBjb25maWd1cmluZyBk
ZXZpY2U6IDwlcz4gJXMiLCB0aGlzLCBbW2V4Y2VwdGlvbiBuYW1lXSBVVEY4U3RyaW5nXSwgW1tl
eGNlcHRpb24gcmVhc29uXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkFWVmlkZW9D
YXB0dXJlU291cmNlOjpzZXRGcmFtZVJhdGVDb25zdHJhaW50KCVwKSwgZmFpbGVkIHRvIGxvY2sg
dmlkZW8gZGV2aWNlIGZvciBjb25maWd1cmF0aW9uOiAlcyIsIHRoaXMsIFtbZXJyb3IgbG9jYWxp
emVkRGVzY3JpcHRpb25dIFVURjhTdHJpbmddKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworTlNMb2coQCJzZXQgZnJhbWUgcmF0ZSB0byAlZiIsIFtiZXN0RnJhbWVSYXRlUmFuZ2Ug
bWluRnJhbWVSYXRlXSk7CisgICAgTE9HKE1lZGlhLCAiQVZWaWRlb0NhcHR1cmVTb3VyY2U6OnNl
dEZyYW1lUmF0ZUNvbnN0cmFpbnQoJXApIC0gc2V0IGZyYW1lIHJhdGUgcmFuZ2UgdG8gJWYuLiVm
IiwgdGhpcywgbWluRnJhbWVSYXRlLCBtYXhGcmFtZVJhdGUpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEFWVmlkZW9DYXB0dXJlU291cmNlOjphcHBseUNvbnN0cmFpbnRzKE1lZGlhQ29u
c3RyYWludHMqIGNvbnN0cmFpbnRzKQoreworICAgIEFTU0VSVChjb25zdHJhaW50cyk7CisKKyAg
ICBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgY29uc3RyYWludE5hbWVzID0gQVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6dmFsaWRDb25zdHJhaW50TmFtZXMoKTsKKyAgICBTdHJpbmcgd2lkdGhD
b25zdHJhaW50OworICAgIFN0cmluZyBoZWlnaHRDb25zdHJhaW50OworCisgICAgY29uc3RyYWlu
dHMtPmdldE1hbmRhdG9yeUNvbnN0cmFpbnRWYWx1ZShjb25zdHJhaW50TmFtZXNbQVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6d2lkdGhdLCB3aWR0aENvbnN0cmFpbnQpOworICAgIGNvbnN0cmFpbnRz
LT5nZXRNYW5kYXRvcnlDb25zdHJhaW50VmFsdWUoY29uc3RyYWludE5hbWVzW0FWQ2FwdHVyZURl
dmljZU1hbmFnZXI6OmhlaWdodF0sIGhlaWdodENvbnN0cmFpbnQpOworCisgICAgaW50IHdpZHRo
ID0gd2lkdGhDb25zdHJhaW50LnRvSW50KCk7CisgICAgaW50IGhlaWdodCA9IGhlaWdodENvbnN0
cmFpbnQudG9JbnQoKTsKKyAgICBpZiAoIXdpZHRoICYmICFoZWlnaHQpIHsKKyAgICAgICAgY29u
c3RyYWludHMtPmdldE9wdGlvbmFsQ29uc3RyYWludFZhbHVlKGNvbnN0cmFpbnROYW1lc1tBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjp3aWR0aF0sIHdpZHRoQ29uc3RyYWludCk7CisgICAgICAgIGNv
bnN0cmFpbnRzLT5nZXRPcHRpb25hbENvbnN0cmFpbnRWYWx1ZShjb25zdHJhaW50TmFtZXNbQVZD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6aGVpZ2h0XSwgaGVpZ2h0Q29uc3RyYWludCk7CisgICAgICAg
IHdpZHRoID0gd2lkdGhDb25zdHJhaW50LnRvSW50KCk7CisgICAgICAgIGhlaWdodCA9IGhlaWdo
dENvbnN0cmFpbnQudG9JbnQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKHdpZHRoIHx8IGhlaWdo
dCkgeworICAgICAgICBOU1N0cmluZyAqcHJlc2V0ID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
YmVzdFNlc3Npb25QcmVzZXRGb3JWaWRlb1NpemUoc2Vzc2lvbigpLCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICAgICAgaWYgKCFwcmVzZXQgfHwgIVtzZXNzaW9uKCkgY2FuU2V0U2Vzc2lvblByZXNldDpw
cmVzZXRdKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgW3Nl
c3Npb24oKSBzZXRTZXNzaW9uUHJlc2V0OnByZXNldF07CisgICAgfQorCisgICAgU3RyaW5nIGZy
YW1lUmF0ZUNvbnN0cmFpbnQ7CisgICAgY29uc3RyYWludHMtPmdldE1hbmRhdG9yeUNvbnN0cmFp
bnRWYWx1ZShjb25zdHJhaW50TmFtZXNbQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZnJhbWVSYXRl
XSwgZnJhbWVSYXRlQ29uc3RyYWludCk7CisgICAgZmxvYXQgZnJhbWVSYXRlID0gZnJhbWVSYXRl
Q29uc3RyYWludC50b0Zsb2F0KCk7CisgICAgaWYgKCFmcmFtZVJhdGUpIHsKKyAgICAgICAgY29u
c3RyYWludHMtPmdldE9wdGlvbmFsQ29uc3RyYWludFZhbHVlKGNvbnN0cmFpbnROYW1lc1tBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpmcmFtZVJhdGVdLCBmcmFtZVJhdGVDb25zdHJhaW50KTsKKyAg
ICAgICAgZnJhbWVSYXRlID0gZnJhbWVSYXRlQ29uc3RyYWludC50b0Zsb2F0KCk7CisgICAgfQor
ICAgIGlmIChmcmFtZVJhdGUgJiYgIXNldEZyYW1lUmF0ZUNvbnN0cmFpbnQoZnJhbWVSYXRlLCAw
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
QVZWaWRlb0NhcHR1cmVTb3VyY2U6OnNldHVwQ2FwdHVyZVNlc3Npb24oKQoreworICAgIFJldGFp
blB0cjxBVkNhcHR1cmVEZXZpY2VJbnB1dFR5cGU+IHZpZGVvSW4gPSBhZG9wdE5TKFtbQVZDYXB0
dXJlRGV2aWNlSW5wdXQgYWxsb2NdIGluaXRXaXRoRGV2aWNlOmRldmljZSgpIGVycm9yOm5pbF0p
OworICAgIEFTU0VSVChbc2Vzc2lvbigpIGNhbkFkZElucHV0OnZpZGVvSW4uZ2V0KCldKTsKKyAg
ICBpZiAoW3Nlc3Npb24oKSBjYW5BZGRJbnB1dDp2aWRlb0luLmdldCgpXSkKKyAgICAgICAgW3Nl
c3Npb24oKSBhZGRJbnB1dDp2aWRlb0luLmdldCgpXTsKKyAgICAKKyAgICBpZiAoY29uc3RyYWlu
dHMoKSkKKyAgICAgICAgYXBwbHlDb25zdHJhaW50cyhjb25zdHJhaW50cygpKTsKKworICAgIFJl
dGFpblB0cjxBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXRUeXBlPiB2aWRlb091dHB1dCA9IGFkb3B0
TlMoW1tBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXQgYWxsb2NdIGluaXRdKTsKKyAgICBzZXRWaWRl
b1NhbXBsZUJ1ZmZlckRlbGVnYXRlKHZpZGVvT3V0cHV0LmdldCgpKTsKKyAgICBBU1NFUlQoW3Nl
c3Npb24oKSBjYW5BZGRPdXRwdXQ6dmlkZW9PdXRwdXQuZ2V0KCldKTsKKyAgICBpZiAoW3Nlc3Np
b24oKSBjYW5BZGRPdXRwdXQ6dmlkZW9PdXRwdXQuZ2V0KCldKQorICAgICAgICBbc2Vzc2lvbigp
IGFkZE91dHB1dDp2aWRlb091dHB1dC5nZXQoKV07CisgICAgCisgICAgbV92aWRlb0Nvbm5lY3Rp
b24gPSBhZG9wdE5TKFt2aWRlb091dHB1dC5nZXQoKSBjb25uZWN0aW9uV2l0aE1lZGlhVHlwZTpB
Vk1lZGlhVHlwZVZpZGVvXSk7Cit9CisKK3ZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhbGN1
bGF0ZUZyYW1lcmF0ZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIpCit7CisgICAgQ01U
aW1lIHNhbXBsZVRpbWUgPSBDTVNhbXBsZUJ1ZmZlckdldFByZXNlbnRhdGlvblRpbWVTdGFtcChz
YW1wbGVCdWZmZXIpOworICAgIGlmICghQ01USU1FX0lTX05VTUVSSUMoc2FtcGxlVGltZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEZsb2F0NjQgZnJhbWVUaW1lID0gQ01UaW1lR2V0U2Vjb25k
cyhzYW1wbGVUaW1lKTsKKyAgICBGbG9hdDY0IG9uZVNlY29uZEFnbyA9IGZyYW1lVGltZSAtIDE7
CisgICAgCisgICAgbV92aWRlb0ZyYW1lVGltZVN0YW1wcy5hcHBlbmQoZnJhbWVUaW1lKTsKKyAg
ICAKKyAgICB3aGlsZSAobV92aWRlb0ZyYW1lVGltZVN0YW1wc1swXSA8IG9uZVNlY29uZEFnbykK
KyAgICAgICAgbV92aWRlb0ZyYW1lVGltZVN0YW1wcy5yZW1vdmUoMCk7CisgICAgCisgICAgbV9m
cmFtZVJhdGUgPSAobV9mcmFtZVJhdGUgKyBtX3ZpZGVvRnJhbWVUaW1lU3RhbXBzLnNpemUoKSkg
LyAyOworfQorICAgIAordm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwdHVyZU91dHB1dERp
ZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dFR5cGUqLCBD
TVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIsIEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlKikK
K3sKKyAgICBDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gQ01TYW1w
bGVCdWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbihzYW1wbGVCdWZmZXIpOworICAgIGlmICghZm9y
bWF0RGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIENGUmV0YWluKGZvcm1hdERl
c2NyaXB0aW9uKTsKKyAgICBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb24gPSBhZG9wdENGKGZvcm1h
dERlc2NyaXB0aW9uKTsKKyAgICBjYWxjdWxhdGVGcmFtZXJhdGUoc2FtcGxlQnVmZmVyKTsKKwor
ICAgIENNVmlkZW9EaW1lbnNpb25zIGRpbWVuc2lvbnMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRp
b25HZXREaW1lbnNpb25zKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBtX3dpZHRoID0gZGltZW5z
aW9ucy53aWR0aDsKKyAgICBtX2hlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0OworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01lZGlhU3RyZWFtQ2Vu
dGVyTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMuY3BwCShyZXZpc2lvbiAxNTgwMjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJN
YWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAKIAogI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtQ2VudGVyTWFjLmgiCiAKKyNpbmNsdWRlICJBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtRGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tTb3VyY2Vz
UmVxdWVzdENsaWVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTcsMjAgKzU3LDgx
IEBAIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjp+TWVkaWFTdHJlYW1DZW50ZXIKIHsKIH0KIAotdm9p
ZCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6dmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoUGFzc1Jl
ZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFp
bnRzPiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPikKK3ZvaWQgTWVkaWFTdHJlYW1DZW50
ZXJNYWM6OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1D
cmVhdGlvbkNsaWVudD4gcHJwUXVlcnlDbGllbnQsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50
cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0Nv
bnN0cmFpbnRzKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUmVmUHRyPE1lZGlhU3Ry
ZWFtQ3JlYXRpb25DbGllbnQ+IGNsaWVudCA9IHBycFF1ZXJ5Q2xpZW50OworICAgIAorICAgIEFT
U0VSVChjbGllbnQpOworCisgICAgaWYgKGF1ZGlvQ29uc3RyYWludHMpIHsKKyAgICAgICAgU3Ry
aW5nIGludmFsaWRDb25zdHJhaW50OworICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpz
aGFyZWQoKS52ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6
QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKKyAgICAg
ICAgaWYgKCFpbnZhbGlkQ29uc3RyYWludC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNsaWVu
dC0+Y29uc3RyYWludHNJbnZhbGlkKGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2aWRlb0NvbnN0cmFpbnRzKSB7Cisg
ICAgICAgIFN0cmluZyBpbnZhbGlkQ29uc3RyYWludDsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2hhcmVkKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJl
YW1Tb3VyY2U6OlZpZGVvLCB2aWRlb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWlu
dCk7CisgICAgICAgIGlmICghaW52YWxpZENvbnN0cmFpbnQuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBjbGllbnQtPmNvbnN0cmFpbnRzSW52YWxpZChpbnZhbGlkQ29uc3RyYWludCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGllbnQtPmNvbnN0cmFp
bnRzVmFsaWRhdGVkKCk7CiB9CiAgICAgCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpjcmVh
dGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNz
UmVmUHRyPE1lZGlhQ29uc3RyYWludHM+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KQor
dm9pZCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6Y3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiBwcnBRdWVyeUNsaWVudCwgUGFzc1JlZlB0cjxNZWRp
YUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0cmFpbnRzLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWlu
dHM+IHZpZGVvQ29uc3RyYWludHMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZWZQ
dHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4gY2xpZW50ID0gcHJwUXVlcnlDbGllbnQ7Cisg
ICAgCisgICAgQVNTRVJUKGNsaWVudCk7CisgICAgCisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0
cmVhbVNvdXJjZT4+IGF1ZGlvU291cmNlczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFt
U291cmNlPj4gdmlkZW9Tb3VyY2VzOworICAgIAorICAgIGlmIChhdWRpb0NvbnN0cmFpbnRzKSB7
CisgICAgICAgIFN0cmluZyBpbnZhbGlkQ29uc3RyYWludDsKKyAgICAgICAgQVZDYXB0dXJlRGV2
aWNlTWFuYWdlcjo6c2hhcmVkKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFT
dHJlYW1Tb3VyY2U6OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3Ry
YWludCk7CisgICAgICAgIGlmICghaW52YWxpZENvbnN0cmFpbnQuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBjbGllbnQtPmZhaWxlZFRvQ3JlYXRlU3RyZWFtV2l0aENvbnN0cmFpbnRzRXJyb3Io
aW52YWxpZENvbnN0cmFpbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IGF1ZGlvU291cmNlID0gQVZD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6c2hhcmVkKCkuYmVzdFNvdXJjZUZvclR5cGVBbmRDb25zdHJh
aW50cyhNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMuZ2V0KCkpOwor
ICAgICAgICBBU1NFUlQoYXVkaW9Tb3VyY2UpOworICAgICAgICAKKyAgICAgICAgYXVkaW9Tb3Vy
Y2VzLmFwcGVuZChhdWRpb1NvdXJjZS5yZWxlYXNlKCkpOworICAgIH0KKyAgICAKKyAgICBpZiAo
dmlkZW9Db25zdHJhaW50cykgeworICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7Cisg
ICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLnZlcmlmeUNvbnN0cmFpbnRz
Rm9yTWVkaWFUeXBlKE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbywgdmlkZW9Db25zdHJhaW50cy5n
ZXQoKSwgaW52YWxpZENvbnN0cmFpbnQpOworICAgICAgICBpZiAoIWludmFsaWRDb25zdHJhaW50
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY2xpZW50LT5mYWlsZWRUb0NyZWF0ZVN0cmVhbVdp
dGhDb25zdHJhaW50c0Vycm9yKGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNl
PiB2aWRlb1NvdXJjZSA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLmJlc3RTb3Vy
Y2VGb3JUeXBlQW5kQ29uc3RyYWludHMoTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvLCB2aWRlb0Nv
bnN0cmFpbnRzLmdldCgpKTsKKyAgICAgICAgQVNTRVJUKHZpZGVvU291cmNlKTsKKyAgICAgICAg
CisgICAgICAgIHZpZGVvU291cmNlcy5hcHBlbmQodmlkZW9Tb3VyY2UucmVsZWFzZSgpKTsKKyAg
ICB9CisgICAgCisgICAgY2xpZW50LT5kaWRDcmVhdGVTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlw
dG9yOjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMsIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6SXNOb3RFbmRlZCkpOwogfQogCi1ib29sIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpnZXRN
ZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2Vz
UmVxdWVzdENsaWVudD4pCitib29sIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpnZXRNZWRpYVN0cmVh
bVRyYWNrU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENs
aWVudD4gcHJwQ2xpZW50KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+IHJl
cXVlc3RDbGllbnQgPSBwcnBDbGllbnQ7CisKKyAgICBWZWN0b3I8UmVmUHRyPFRyYWNrU291cmNl
SW5mbz4+IHNvdXJjZXMgPSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKS5nZXRTb3Vy
Y2VzSW5mbyhyZXF1ZXN0Q2xpZW50LT5yZXF1ZXN0T3JpZ2luKCkpOworCisgICAgcmVxdWVzdENs
aWVudC0+ZGlkQ29tcGxldGVSZXF1ZXN0KHNvdXJjZXMpOworICAgIHJldHVybiB0cnVlOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL01vY2tNZWRpYVN0cmVhbUNlbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50ZXIuY3BwCShyZXZpc2lvbiAxNTgw
MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYVN0cmVhbUNlbnRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDE0ICs5MSwxNCBAQCBzdGF0aWMgdm9pZCBpbml0
aWFsaXplTW9ja1NvdXJjZXMoKQogICAgIG1vY2tTb3VyY2UxLT5tX2NhcGFiaWxpdGllcy0+c2V0
QXNwZWN0UmF0aW9SYW5nZShNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdHlSYW5nZSg0IC8gMy4w
ZiwgMTYgLyA5LjBmLCB0cnVlKSk7CiAgICAgbW9ja1NvdXJjZTEtPm1fY2FwYWJpbGl0aWVzLT5z
ZXRWb2x1bWVSYW5nZShNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdHlSYW5nZSgxMFVMLCA5MFVM
LCB0cnVlKSk7CiAKLSAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLnNvdXJjZVR5cGUg
PSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6Q2FtZXJhOwotICAgIG1vY2tTb3VyY2UxLT5tX2N1
cnJlbnRTdGF0ZXMuc291cmNlSWQgPSBtb2NrU291cmNlMS0+aWQoKTsKLSAgICBtb2NrU291cmNl
MS0+bV9jdXJyZW50U3RhdGVzLmZhY2luZ01vZGUgPSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6
VXNlcjsKLSAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLndpZHRoID0gMTkyMDsKLSAg
ICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLmhlaWdodCA9IDEwODA7Ci0gICAgbW9ja1Nv
dXJjZTEtPm1fY3VycmVudFN0YXRlcy5mcmFtZVJhdGUgPSAzMDsKLSAgICBtb2NrU291cmNlMS0+
bV9jdXJyZW50U3RhdGVzLmFzcGVjdFJhdGlvID0gMTYgLyA5LjBmOwotICAgIG1vY2tTb3VyY2Ux
LT5tX2N1cnJlbnRTdGF0ZXMudm9sdW1lID0gNzA7CisgICAgbW9ja1NvdXJjZTEtPm1fY3VycmVu
dFN0YXRlcy5zZXRTb3VyY2VUeXBlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpDYW1lcmEpOwor
ICAgIG1vY2tTb3VyY2UxLT5tX2N1cnJlbnRTdGF0ZXMuc2V0U291cmNlSWQobW9ja1NvdXJjZTEt
PmlkKCkpOworICAgIG1vY2tTb3VyY2UxLT5tX2N1cnJlbnRTdGF0ZXMuc2V0RmFjaW5nTW9kZShN
ZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VXNlcik7CisgICAgbW9ja1NvdXJjZTEtPm1fY3VycmVu
dFN0YXRlcy5zZXRXaWR0aCgxOTIwKTsKKyAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVz
LnNldEhlaWdodCgxMDgwKTsKKyAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLnNldEZy
YW1lUmF0ZSgzMCk7CisgICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy5zZXRBc3BlY3RS
YXRpbygxNiAvIDkuMGYpOworICAgIG1vY2tTb3VyY2UxLT5tX2N1cnJlbnRTdGF0ZXMuc2V0Vm9s
dW1lKDcwKTsKICAgICBTdHJpbmcgbW9ja1NvdXJjZTFpZCA9IG1vY2tTb3VyY2UxLT5pZCgpOwog
ICAgIG1vY2tTb3VyY2VNYXAoKS5hZGQobW9ja1NvdXJjZTFpZCwgbW9ja1NvdXJjZTEucmVsZWFz
ZSgpKTsKIApAQCAtMTA3LDkgKzEwNyw5IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVNb2NrU291
cmNlcygpCiAgICAgbW9ja1NvdXJjZTItPm1fY2FwYWJpbGl0aWVzLT5zZXRTb3VyY2VJZChtb2Nr
U291cmNlMi0+aWQoKSk7CiAgICAgbW9ja1NvdXJjZTItPm1fY2FwYWJpbGl0aWVzLT5zZXRWb2x1
bWVSYW5nZShNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdHlSYW5nZSgwVUwsIDEwMFVMLCB0cnVl
KSk7CiAKLSAgICBtb2NrU291cmNlMi0+bV9jdXJyZW50U3RhdGVzLnNvdXJjZVR5cGUgPSBNZWRp
YVN0cmVhbVNvdXJjZVN0YXRlczo6TWljcm9waG9uZTsKLSAgICBtb2NrU291cmNlMi0+bV9jdXJy
ZW50U3RhdGVzLnNvdXJjZUlkID0gbW9ja1NvdXJjZTItPmlkKCk7Ci0gICAgbW9ja1NvdXJjZTIt
Pm1fY3VycmVudFN0YXRlcy52b2x1bWUgPSA1MDsKKyAgICBtb2NrU291cmNlMi0+bV9jdXJyZW50
U3RhdGVzLnNldFNvdXJjZVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6Ok1pY3JvcGhvbmUp
OworICAgIG1vY2tTb3VyY2UyLT5tX2N1cnJlbnRTdGF0ZXMuc2V0U291cmNlSWQobW9ja1NvdXJj
ZTItPmlkKCkpOworICAgIG1vY2tTb3VyY2UyLT5tX2N1cnJlbnRTdGF0ZXMuc2V0Vm9sdW1lKDUw
KTsKICAgICBTdHJpbmcgbW9ja1NvdXJjZTJpZCA9IG1vY2tTb3VyY2UyLT5pZCgpOwogICAgIG1v
Y2tTb3VyY2VNYXAoKS5hZGQobW9ja1NvdXJjZTJpZCwgbW9ja1NvdXJjZTIucmVsZWFzZSgpKTsK
IH0KQEAgLTIwNCwxNSArMjA0LDEzIEBAIHZvaWQgTW9ja01lZGlhU3RyZWFtQ2VudGVyOjpjcmVh
dGVNZWRpYVMKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChh
dWRpb0NvbnN0cmFpbnRzKSB7Ci0gICAgICAgICAgICBNb2NrU291cmNlTWFwOjppdGVyYXRvciBp
dCA9IG1hcC5maW5kKG1vY2tBdWRpb1NvdXJjZUlEKCkpOwotICAgICAgICAgICAgQVNTRVJUKGl0
ICE9IG1hcC5lbmQoKSk7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4g
YXVkaW9Tb3VyY2UgPSBpdC0+dmFsdWU7Ci0gICAgICAgICAgICBhdWRpb1NvdXJjZS0+cmVzZXQo
KTsKLSAgICAgICAgICAgIGF1ZGlvU291cmNlLT5zZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291
cmNlOjpMaXZlKTsKLSAgICAgICAgICAgIGF1ZGlvU291cmNlcy5hcHBlbmQoYXVkaW9Tb3VyY2Uu
cmVsZWFzZSgpKTsKLSAgICAgICAgfQorICAgICAgICBNb2NrU291cmNlTWFwOjppdGVyYXRvciBp
dCA9IG1hcC5maW5kKG1vY2tBdWRpb1NvdXJjZUlEKCkpOworICAgICAgICBBU1NFUlQoaXQgIT0g
bWFwLmVuZCgpKTsKKworICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IGF1ZGlvU291
cmNlID0gaXQtPnZhbHVlOworICAgICAgICBhdWRpb1NvdXJjZS0+cmVzZXQoKTsKKyAgICAgICAg
YXVkaW9Tb3VyY2UtPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUpOworICAg
ICAgICBhdWRpb1NvdXJjZXMuYXBwZW5kKGF1ZGlvU291cmNlLnJlbGVhc2UoKSk7CiAgICAgfQog
CiAgICAgaWYgKHZpZGVvQ29uc3RyYWludHMpIHsKQEAgLTIyMiwxNSArMjIwLDEzIEBAIHZvaWQg
TW9ja01lZGlhU3RyZWFtQ2VudGVyOjpjcmVhdGVNZWRpYVMKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmICh2aWRlb0NvbnN0cmFpbnRzKSB7Ci0gICAgICAgICAg
ICBNb2NrU291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5kKG1vY2tWaWRlb1NvdXJjZUlE
KCkpOwotICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC5lbmQoKSk7Ci0KLSAgICAgICAgICAg
IFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gdmlkZW9Tb3VyY2UgPSBpdC0+dmFsdWU7Ci0gICAg
ICAgICAgICB2aWRlb1NvdXJjZS0+cmVzZXQoKTsKLSAgICAgICAgICAgIHZpZGVvU291cmNlLT5z
ZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpMaXZlKTsKLSAgICAgICAgICAgIHZpZGVv
U291cmNlcy5hcHBlbmQodmlkZW9Tb3VyY2UucmVsZWFzZSgpKTsKLSAgICAgICAgfQorICAgICAg
ICBNb2NrU291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5kKG1vY2tWaWRlb1NvdXJjZUlE
KCkpOworICAgICAgICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKKworICAgICAgICBSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2U+IHZpZGVvU291cmNlID0gaXQtPnZhbHVlOworICAgICAgICB2aWRl
b1NvdXJjZS0+cmVzZXQoKTsKKyAgICAgICAgdmlkZW9Tb3VyY2UtPnNldFJlYWR5U3RhdGUoTWVk
aWFTdHJlYW1Tb3VyY2U6OkxpdmUpOworICAgICAgICB2aWRlb1NvdXJjZXMuYXBwZW5kKHZpZGVv
U291cmNlLnJlbGVhc2UoKSk7CiAgICAgfQogICAgIAogICAgIGNsaWVudC0+ZGlkQ3JlYXRlU3Ry
ZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgdmlkZW9Tb3Vy
Y2VzLCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OklzTm90RW5kZWQpKTsKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE1ODA5NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE4IEBACisyMDEzLTEwLTI3ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBw
bGUuY29tPgorCisgICAgICAgIFtNYWMgTWVkaWFTdHJlYW1dIGltcGxlbWVudCBBVkZvdW5kYXRp
b24gYmFja2VkIE1lZGlhU3RyZWFtU291cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjMzMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tYWRkLXJl
bW92ZS10cmFja3MtZXhwZWN0ZWQudHh0OiBVcGRhdGVkLgorICAgICAgICAqIGZhc3QvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW0tYWRkLXJlbW92ZS10cmFja3MuaHRtbDogRGl0dG8uCisgICAgICAg
ICogZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dDog
RGl0dG8uCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbnN0cnVjdG9y
Lmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFj
ay1nZXRTb3VyY2VzLmh0bWw6IFJlbW92ZSB0eXBvLgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1UcmFjay1leHBlY3RlZC50eHQ6IFVwZGF0ZWQgcmVzdWx0cy4KKyAgICAg
ICAgKiBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaHRtbDogVXBkYXRlIHRvIHRl
c3QgdHJhY2suc3RvcCgpIGJlaGF2aW9yLgorCiAyMDEzLTEwLTI2ICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoeSBXZWJHTCB0ZXN0IGlzIGNy
YXNoeS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tYWRk
LXJlbW92ZS10cmFja3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tYWRkLXJlbW92ZS10cmFja3MtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAxNTgwMjUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NDIsMTIgKzQyLDE0IEBAIFBBU1Mgc3RyZWFtMS5nZXRWaWRlb1RyYWNrcygpLmxlbmd0aCBpcyAK
IFBBU1Mgc3RyZWFtMS5nZXRBdWRpb1RyYWNrcygpLmxlbmd0aCBpcyAyCiBQQVNTIHN0cmVhbTEu
Z2V0VmlkZW9UcmFja3MoKS5sZW5ndGggaXMgMgogCi0qKiogYWZ0ZXIgYWxsIHRyYWNrcyBoYXZl
IGJlZW4gcmVtb3ZlZCwgc3RyZWFtLmVuZGVkIHNob3VsZCByZXR1cm4gdHJ1ZQorKioqIHJlbW92
ZSBhZnRlciBhbGwgdHJhY2tzLCBzdHJlYW0uZW5kZWQgc2hvdWxkIHJldHVybiB0cnVlCitQQVNT
IHN0cmVhbTIuZ2V0QXVkaW9UcmFja3MoKS5sZW5ndGggaXMgMAorUEFTUyBzdHJlYW0yLmdldFZp
ZGVvVHJhY2tzKCkubGVuZ3RoIGlzIDAKIFBBU1Mgc3RyZWFtMi5lbmRlZCBpcyB0cnVlCiAKICoq
KiBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSB0byBhZGQgYSB0cmFjayBhZnRlciB0aGUgc3RyZWFt
IGhhcyBlbmRlZAotUEFTUyBzdHJlYW0xLmFkZFRyYWNrKGF1ZGlvVHJhY2spIHRocmV3IGV4Y2Vw
dGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEuCi1QQVNTIHN0
cmVhbTEucmVtb3ZlVHJhY2soYXVkaW9UcmFjaykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZh
bGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1Mgc3RyZWFtMi5hZGRUcmFjayhh
dWRpb1RyYWNrKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00g
RXhjZXB0aW9uIDExLgorUEFTUyBzdHJlYW0yLnJlbW92ZVRyYWNrKGF1ZGlvVHJhY2spIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEuCiBQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tYWRkLXJlbW92ZS10cmFja3Mu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtLWFkZC1yZW1vdmUtdHJhY2tzLmh0bWwJKHJldmlzaW9uIDE1ODAyNSkKKysrIExheW91dFRl
c3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tYWRkLXJlbW92ZS10cmFja3MuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMTA5LDE0ICsxMDksMTYgQEAgZnVuY3Rpb24gZ290U3RyZWFtMihz
KSB7CiAgICAgc2hvdWxkQmUoJ3N0cmVhbTEuZ2V0QXVkaW9UcmFja3MoKS5sZW5ndGgnLCAnMicp
OwogICAgIHNob3VsZEJlKCdzdHJlYW0xLmdldFZpZGVvVHJhY2tzKCkubGVuZ3RoJywgJzInKTsK
IAotICAgIGRlYnVnKCI8YnI+KioqIGFmdGVyIGFsbCB0cmFja3MgaGF2ZSBiZWVuIHJlbW92ZWQs
IHN0cmVhbS5lbmRlZCBzaG91bGQgcmV0dXJuIHRydWUiKTsKKyAgICBkZWJ1ZygiPGJyPioqKiBy
ZW1vdmUgYWZ0ZXIgYWxsIHRyYWNrcywgc3RyZWFtLmVuZGVkIHNob3VsZCByZXR1cm4gdHJ1ZSIp
OwogICAgIHRyeVJlbW92ZVRyYWNrKHN0cmVhbTIsIHN0cmVhbTIuZ2V0QXVkaW9UcmFja3MoKVsw
XSk7CiAgICAgdHJ5UmVtb3ZlVHJhY2soc3RyZWFtMiwgc3RyZWFtMi5nZXRWaWRlb1RyYWNrcygp
WzBdKTsKKyAgICBzaG91bGRCZSgnc3RyZWFtMi5nZXRBdWRpb1RyYWNrcygpLmxlbmd0aCcsICcw
Jyk7CisgICAgc2hvdWxkQmUoJ3N0cmVhbTIuZ2V0VmlkZW9UcmFja3MoKS5sZW5ndGgnLCAnMCcp
OwogICAgIHNob3VsZEJlVHJ1ZSgnc3RyZWFtMi5lbmRlZCcpOwogCiAgICAgZGVidWcoIjxicj4q
KiogaXQgc2hvdWxkIGJlIGltcG9zc2libGUgdG8gYWRkIGEgdHJhY2sgYWZ0ZXIgdGhlIHN0cmVh
bSBoYXMgZW5kZWQiKTsKLSAgICBzaG91bGRUaHJvdygnc3RyZWFtMS5hZGRUcmFjayhhdWRpb1Ry
YWNrKScsICciRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExIicpOwot
ICAgIHNob3VsZFRocm93KCdzdHJlYW0xLnJlbW92ZVRyYWNrKGF1ZGlvVHJhY2spJywgJyJFcnJv
cjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEiJyk7CisgICAgc2hvdWxkVGhy
b3coJ3N0cmVhbTIuYWRkVHJhY2soYXVkaW9UcmFjayknLCAnIkVycm9yOiBJbnZhbGlkU3RhdGVF
cnJvcjogRE9NIEV4Y2VwdGlvbiAxMSInKTsKKyAgICBzaG91bGRUaHJvdygnc3RyZWFtMi5yZW1v
dmVUcmFjayhhdWRpb1RyYWNrKScsICciRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhj
ZXB0aW9uIDExIicpOwogCiAgICAgc2V0VGltZW91dChmaW5pc2hKU1Rlc3QsIDApOwogfQpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbnN0cnVjdG9yLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtQ29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNTgwMjUpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29uc3RydWN0b3ItZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIFBBU1MgbmV3U3RyZWFtLmNv
bnN0cnVjdG9yLnRvU3RyaW5nKCkgaXMKIFBBU1MgbmV3U3RyZWFtLmdldEF1ZGlvVHJhY2tzKCku
bGVuZ3RoIGlzIG5BdWRpbwogUEFTUyBuZXdTdHJlYW0uZ2V0VmlkZW9UcmFja3MoKS5sZW5ndGgg
aXMgblZpZGVvCiBQQVNTIGNoZWNrSWRBdHRyaWJ1dGUobmV3U3RyZWFtLmlkKSBpcyB0cnVlCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKIApJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbnN0cnVjdG9yLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNv
bnN0cnVjdG9yLmh0bWwJKHJldmlzaW9uIDE1ODAyNSkKKysrIExheW91dFRlc3RzL2Zhc3QvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rvci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC04
NCw2ICs4NCw4IEBAIGZ1bmN0aW9uIHRlc3RDb25zdHJ1Y3RvcihzKSB7CiAgICAgdmVyaWZ5U3Ry
ZWFtKCJuZXcgd2Via2l0TWVkaWFTdHJlYW0oW3N0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdXSki
LCAwLCAxKTsKICAgICB2ZXJpZnlTdHJlYW0oIm5ldyB3ZWJraXRNZWRpYVN0cmVhbShbc3RyZWFt
LmdldEF1ZGlvVHJhY2tzKClbMF0sIHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdXSkiLCAxLCAx
KTsKICAgICB2ZXJpZnlTdHJlYW0oIm5ldyB3ZWJraXRNZWRpYVN0cmVhbShbc3RyZWFtLmdldFZp
ZGVvVHJhY2tzKClbMF0sIHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdLCBzdHJlYW0uZ2V0Vmlk
ZW9UcmFja3MoKVswXV0pIiwgMSwgMSk7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKIH0KIAogZnVu
Y3Rpb24gdmVyaWZ5U3RyZWFtKHNjcmlwdCwgbnVtQXVkaW9UcmFja3MsIG51bVZpZGVvVHJhY2tz
KSB7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2st
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1UcmFjay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1ODAyNSkKKysrIExheW91
dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAgY2hlY2tpbmcgdHJhY2suY2FwYWJpbGl0aWVz
KCkKICAgIG1heCA6IDYwCiAgICBzdXBwb3J0ZWQgOiB0cnVlCiAgIGFzcGVjdFJhdGlvCi0gICBt
aW4gOiAxLjMzMzMzMzM3MzA2OTc2MzIKLSAgIG1heCA6IDEuNzc3Nzc3NzkxMDIzMjU0NAorICAg
bWluIDogMS4zMworICAgbWF4IDogMS43OAogICAgc3VwcG9ydGVkIDogdHJ1ZQogICBmYWNpbmdN
b2RlCiAgICAgMCA6IHVzZXIKQEAgLTM1LDExICszNSwxNCBAQCBjaGVja2luZyB0cmFjay5jYXBh
YmlsaXRpZXMoKQogY2hlY2tpbmcgdHJhY2suc3RhdGVzKCkKIFBBU1Mgc3RhdGVzLnNvdXJjZUlk
IGlzIGNhcGFiaWxpdGllcy5zb3VyY2VJZFswXQogUEFTUyBzdGF0ZXMuc291cmNlVHlwZSBpcyAi
Y2FtZXJhIgotICB3aWR0aCA6IDE5MjAKLSAgaGVpZ2h0IDogMTA4MAotICBmcmFtZVJhdGUgOiAz
MAotICBhc3BlY3RSYXRpbyA6IDEuNzc3Nzc3NzkxMDIzMjU0NAotICBmYWNpbmdNb2RlIDogdXNl
cgorICBzdGF0ZXMudm9sdW1lID0gdW5kZWZpbmVkCisgIHN0YXRlcy53aWR0aCA9IDE5MjAKKyAg
c3RhdGVzLnNvdXJjZUlkID0gMjM5YzI0YjAtMmIxNS0xMWUzLTgyMjQtMDgwMDIwMGM5YTY2Cisg
IHN0YXRlcy5oZWlnaHQgPSAxMDgwCisgIHN0YXRlcy5zb3VyY2VUeXBlID0gY2FtZXJhCisgIHN0
YXRlcy5mYWNpbmdNb2RlID0gdXNlcgorICBzdGF0ZXMuZnJhbWVSYXRlID0gMzAKKyAgc3RhdGVz
LmFzcGVjdFJhdGlvID0gMS43OAogCiBhdWRpb1RyYWNrID0gbWVkaWFTdHJlYW0uZ2V0QXVkaW9U
cmFja3MoKVswXQogUEFTUyB0cmFjay5yZWFkeVN0YXRlIGlzICJsaXZlIgpAQCAtNTMsNyArNTYs
MTQgQEAgY2hlY2tpbmcgdHJhY2suY2FwYWJpbGl0aWVzKCkKIGNoZWNraW5nIHRyYWNrLnN0YXRl
cygpCiBQQVNTIHN0YXRlcy5zb3VyY2VJZCBpcyBjYXBhYmlsaXRpZXMuc291cmNlSWRbMF0KIFBB
U1Mgc3RhdGVzLnNvdXJjZVR5cGUgaXMgIm1pY3JvcGhvbmUiCi0gIHZvbHVtZSA6IDUwCisgIHN0
YXRlcy52b2x1bWUgPSA1MAorICBzdGF0ZXMud2lkdGggPSB1bmRlZmluZWQKKyAgc3RhdGVzLnNv
dXJjZUlkID0gMjM5YzI0YjEtMmIxNS0xMWUzLTgyMjQtMDgwMDIwMGM5YTY2CisgIHN0YXRlcy5o
ZWlnaHQgPSB1bmRlZmluZWQKKyAgc3RhdGVzLnNvdXJjZVR5cGUgPSBtaWNyb3Bob25lCisgIHN0
YXRlcy5mYWNpbmdNb2RlID0gdW5kZWZpbmVkCisgIHN0YXRlcy5mcmFtZVJhdGUgPSB1bmRlZmlu
ZWQKKyAgc3RhdGVzLmFzcGVjdFJhdGlvID0gdW5kZWZpbmVkCiAKIHZpZGVvVHJhY2syID0gdmlk
ZW9UcmFjay5jbG9uZSgpCiBQQVNTIHRyYWNrLnJlYWR5U3RhdGUgaXMgImxpdmUiCkBAIC03Niw4
ICs4Niw4IEBAIGNoZWNraW5nIHRyYWNrLmNhcGFiaWxpdGllcygpCiAgICBtYXggOiA2MAogICAg
c3VwcG9ydGVkIDogdHJ1ZQogICBhc3BlY3RSYXRpbwotICAgbWluIDogMS4zMzMzMzMzNzMwNjk3
NjMyCi0gICBtYXggOiAxLjc3Nzc3Nzc5MTAyMzI1NDQKKyAgIG1pbiA6IDEuMzMKKyAgIG1heCA6
IDEuNzgKICAgIHN1cHBvcnRlZCA6IHRydWUKICAgZmFjaW5nTW9kZQogICAgIDAgOiB1c2VyCkBA
IC04NSwxMSArOTUsMTQgQEAgY2hlY2tpbmcgdHJhY2suY2FwYWJpbGl0aWVzKCkKIGNoZWNraW5n
IHRyYWNrLnN0YXRlcygpCiBQQVNTIHN0YXRlcy5zb3VyY2VJZCBpcyBjYXBhYmlsaXRpZXMuc291
cmNlSWRbMF0KIFBBU1Mgc3RhdGVzLnNvdXJjZVR5cGUgaXMgImNhbWVyYSIKLSAgd2lkdGggOiAx
OTIwCi0gIGhlaWdodCA6IDEwODAKLSAgZnJhbWVSYXRlIDogMzAKLSAgYXNwZWN0UmF0aW8gOiAx
Ljc3Nzc3Nzc5MTAyMzI1NDQKLSAgZmFjaW5nTW9kZSA6IHVzZXIKKyAgc3RhdGVzLnZvbHVtZSA9
IHVuZGVmaW5lZAorICBzdGF0ZXMud2lkdGggPSAxOTIwCisgIHN0YXRlcy5zb3VyY2VJZCA9IDIz
OWMyNGIwLTJiMTUtMTFlMy04MjI0LTA4MDAyMDBjOWE2NgorICBzdGF0ZXMuaGVpZ2h0ID0gMTA4
MAorICBzdGF0ZXMuc291cmNlVHlwZSA9IGNhbWVyYQorICBzdGF0ZXMuZmFjaW5nTW9kZSA9IHVz
ZXIKKyAgc3RhdGVzLmZyYW1lUmF0ZSA9IDMwCisgIHN0YXRlcy5hc3BlY3RSYXRpbyA9IDEuNzgK
IFBBU1MgdmlkZW9UcmFjay5pZCBpcyBub3QgdmlkZW9UcmFjazIuaWQKIFBBU1MgdmlkZW9UcmFj
ay5raW5kIGlzIHZpZGVvVHJhY2syLmtpbmQKIFBBU1MgdmlkZW9UcmFjay5sYWJlbCBpcyB2aWRl
b1RyYWNrMi5sYWJlbApAQCAtOTcsOSArMTEwLDExIEBAIFBBU1MgdmlkZW9UcmFjay5tdXRlZCBp
cyB2aWRlb1RyYWNrMi5tdXQKIFBBU1MgdmlkZW9UcmFjay5lbmFibGVkIGlzIHZpZGVvVHJhY2sy
LmVuYWJsZWQKIFBBU1MgdmlkZW9UcmFjay5yZWFkeVN0YXRlIGlzIHZpZGVvVHJhY2syLnJlYWR5
U3RhdGUKIAordHJhY2suc3RvcCgpIHNob3VsZCBlbmQgYWxsIHRyYWNrcyB1c2luZyB0aGUgc2Ft
ZSBzb3VyY2UKIHZpZGVvVHJhY2suc3RvcCgpCiBQQVNTIFRyYWNrIG9uZW5kZWQgY2FsbGJhY2sg
c3VjY2VlZGVkLgogUEFTUyB2aWRlb1RyYWNrLnJlYWR5U3RhdGUgaXMgImVuZGVkIgorUEFTUyB2
aWRlb1RyYWNrMi5yZWFkeVN0YXRlIGlzICJlbmRlZCIKIAogUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtVHJhY2stZ2V0U291cmNlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay1nZXRTb3VyY2VzLmh0bWwJKHJldmlzaW9uIDE1
ODAyNSkKKysrIExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay1n
ZXRTb3VyY2VzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAg
ICAgICAgICAgICAgcHJpbWVUaW1lb3V0KCJUaW1lb3V0IHdhaXRpbmcgZm9yIHdlYmtpdEdldFVz
ZXJNZWRpYSgpIik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzID0gX2NvbnN0cmFp
bnRzOwogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IF9jYWxsYmFjazsKLSAgICAgICAg
ICAgICAgICBkZWJ1ZygiPGJyPioqKiBjYWxsaW5nIG5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVk
aWEoKSAqKioiKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoIjxicj4qKiogY2FsbGluZyBu
YXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlhKCkgKioqIik7CiAgICAgICAgICAgICAgICAgICAg
IHNob3VsZE5vdFRocm93KCJuYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlhKGNvbnN0cmFpbnRz
LCBjYWxsYmFjaywgZXJyb3IpIik7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAg
ICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCd3ZWJraXRHZXRVc2VyTWVkaWEgdGhyZXcgZXhj
ZXB0aW9uIDonICsgZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtVHJhY2suaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtVHJhY2suaHRtbAkocmV2aXNpb24gMTU4MDI1KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZXN0UGFz
c2VkKCdUcmFjayBvbmVuZGVkIGNhbGxiYWNrIHN1Y2NlZWRlZC4nKTsKICAgICAgICAgICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3ZpZGVvVHJhY2sucmVhZHlTdGF0ZScsICdlbmRlZCcp
OworICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygndmlkZW9UcmFjazIucmVh
ZHlTdGF0ZScsICdlbmRlZCcpOwogICAgICAgICAgICAgICAgIGRlYnVnKCIiKTsKICAgICAgICAg
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKICAgICAgICAgICAgIH0KQEAgLTU2LDEyICs1NywxOSBA
QAogICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoJ1RyYWNrIG9ubXV0ZSBjYWxsYmFjayBzdWNj
ZWVkZWQuJyk7CiAgICAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbCgndmlkZW9UcmFjay5tdXRl
ZCcsIHRydWUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5j
dGlvbiBsaW1pdFByZWNpc2lvbih2YWx1ZSwgcHJlY2lzaW9uKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiICYmIHZhbHVlICUgMSAh
PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9GaXhlZChwcmVjaXNpb24p
OworICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgZnVuY3Rpb24gbG9nQ2FwYWJpbGl0eVJhbmdlKG5hbWUsIHJhbmdlKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIGRlYnVnKCIgICIgKyBuYW1lKTsKLSAgICAgICAgICAgICAg
ICBkZWJ1ZygiICAgbWluIDogIiArIHJhbmdlLm1pbik7Ci0gICAgICAgICAgICAgICAgZGVidWco
IiAgIG1heCA6ICIgKyByYW5nZS5tYXgpOworICAgICAgICAgICAgICAgIGRlYnVnKCIgICBtaW4g
OiAiICsgbGltaXRQcmVjaXNpb24ocmFuZ2UubWluLCAyKSk7CisgICAgICAgICAgICAgICAgZGVi
dWcoIiAgIG1heCA6ICIgKyBsaW1pdFByZWNpc2lvbihyYW5nZS5tYXgsIDIpKTsKICAgICAgICAg
ICAgICAgICBkZWJ1ZygiICAgc3VwcG9ydGVkIDogIiArIHJhbmdlLnN1cHBvcnRlZCk7CiAgICAg
ICAgICAgICB9CiAKQEAgLTY5LDcgKzc3LDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBkZWJ1ZygiICAiICsgbmFtZSk7CiAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IGxpc3QubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgZGVidWcoIiAgICAiICsgaSArICIg
OiAiICsgbGlzdFtpXSk7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgIiArIGkgKyAi
IDogIiArIGxpc3RbaV0pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmdW5jdGlvbiBj
aGVja0NhcGFiaWxpdGllcyh0cmFjaykKQEAgLTk0LDE2ICsxMDIsMTMgQEAKICAgICAgICAgICAg
ICAgICBjYXBhYmlsaXRpZXMgPSB0cmFjay5jYXBhYmlsaXRpZXMoKTsKICAgICAgICAgICAgICAg
ICBzdGF0ZXMgPSB0cmFjay5zdGF0ZXMoKTsKICAgICAgICAgICAgICAgICBzaG91bGRCZSgnc3Rh
dGVzLnNvdXJjZUlkJywgJ2NhcGFiaWxpdGllcy5zb3VyY2VJZFswXScpOwotICAgICAgICAgICAg
ICAgIGlmICh0cmFjay5raW5kID09ICJ2aWRlbyIpIHsKKyAgICAgICAgICAgICAgICBpZiAodHJh
Y2sua2luZCA9PSAidmlkZW8iKQogICAgICAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ3N0YXRlcy5zb3VyY2VUeXBlJywgJ2NhbWVyYScpOwotICAgICAgICAgICAgICAgICAg
ICBkZWJ1ZygiICB3aWR0aCA6ICIgKyBzdGF0ZXMud2lkdGgpOwotICAgICAgICAgICAgICAgICAg
ICBkZWJ1ZygiICBoZWlnaHQgOiAiICsgc3RhdGVzLmhlaWdodCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlYnVnKCIgIGZyYW1lUmF0ZSA6ICIgKyBzdGF0ZXMuZnJhbWVSYXRlKTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVidWcoIiAgYXNwZWN0UmF0aW8gOiAiICsgc3RhdGVzLmFzcGVjdFJhdGlv
KTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAgZmFjaW5nTW9kZSA6ICIgKyBzdGF0ZXMu
ZmFjaW5nTW9kZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnc3RhdGVzLnNv
dXJjZVR5cGUnLCAnbWljcm9waG9uZScpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICB2
b2x1bWUgOiAiICsgc3RhdGVzLnZvbHVtZSk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJv
cGVydHkgaW4gc3RhdGVzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZXMuaGFzT3du
UHJvcGVydHkocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAgc3Rh
dGVzLiIgKyBwcm9wZXJ0eSArICIgPSAiICsgbGltaXRQcmVjaXNpb24oc3RhdGVzW3Byb3BlcnR5
XSwgMikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApA
QCAtMTQ1LDYgKzE1MCw3IEBACiAgICAgICAgICAgICAgICAgc2hvdWxkQmUoJ3ZpZGVvVHJhY2su
cmVhZHlTdGF0ZScsICd2aWRlb1RyYWNrMi5yZWFkeVN0YXRlJyk7CiAKICAgICAgICAgICAgICAg
ICBkZWJ1ZygiIik7CisgICAgICAgICAgICAgICAgZGVidWcoInRyYWNrLnN0b3AoKSBzaG91bGQg
ZW5kIGFsbCB0cmFja3MgdXNpbmcgdGhlIHNhbWUgc291cmNlIik7CiAgICAgICAgICAgICAgICAg
ZXZhbEFuZExvZygidmlkZW9UcmFjay5zdG9wKCkiKTsKICAgICAgICAgICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215320</attachid>
            <date>2013-10-28 11:21:37 -0700</date>
            <delta_ts>2013-10-28 13:47:46 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>capture_device_15.txt</filename>
            <type>text/plain</type>
            <size>162948</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODA5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAxMy0xMC0yNyAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjIE1lZGlhU3Ry
ZWFtXSBpbXBsZW1lbnQgQVZGb3VuZGF0aW9uIGJhY2tlZCBNZWRpYVN0cmVhbVNvdXJjZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzE2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBleGlzdGluZyB0ZXN0cyB1cGRhdGVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFk
ZCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHAuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU291cmNlU3RhdGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291
cmNlU3RhdGVzOjpNZWRpYVNvdXJjZVN0YXRlcyk6IG1fU291cmNlU3RhdGVzIC0+IG1fc291cmNl
U3RhdGVzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VTdGF0ZXM6OnNvdXJjZVR5cGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2Rl
KTogRGl0dG8uCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRl
cy5oOiBEaXR0by4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU291cmNlU3Rh
dGVzLmlkbDogTWFyayBzb21lIGF0dHJpYnV0ZXMgYXMgb3B0aW9uYWwuCisKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtOjphZGRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6cmVt
b3ZlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OmFkZFJlbW90ZVNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6cmVtb3ZlUmVtb3RlU291cmNlKToK
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM6OnNvdXJjZVR5
cGUpOiBNZWRpYVNvdXJjZVN0YXRlcyAtPiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcworICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM6OmZhY2luZ01vZGUpOiBEaXR0by4K
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKTogRG9u
J3Qgb2JzZXJ2ZSBzb3VyY2UgY2hhbmdlcyBkaXJlY3RseSwgbGV0IHRoZQorICAgICAgICAgICAg
cHJpdmF0ZSB0cmFjayBkbyB0aGF0LiBDaGFuZ2UgcHJpdmF0ZSB0cmFjayBwYXJhbWV0ZXIgdG8g
cmVmIGJlY2F1c2UgaXQgY2FuJ3QgYmUgTlVMTC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtVHJhY2s6On5NZWRpYVN0cmVhbVRyYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbVRyYWNrOjpzZXRTb3VyY2UpOiBQYXNzIHRocm91Z2ggdG8gcHJpdmF0ZSB0cmFj
ay4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnN0b3BwZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnN0YXRlcyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6Y2FwYWJpbGl0aWVzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjphcHBseUNvbnN0cmFpbnRzKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpzdG9wUHJvZHVjaW5nRGF0
YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6dHJhY2tSZWFk
eVN0YXRlQ2hhbmdlZCk6IFJlbmFtZWQgZnJvbSBzb3VyY2VTdGF0ZUNoYW5nZWQuIERvbid0Cisg
ICAgICAgICAgICBzY2hlZHVsZSBhbiAnZW5kZWQnIGV2ZW50IGlmIGNhbGxlZCBhcyBhIHNpZGUg
ZWZmZWN0IG9mIHRoZSBzdG9wKCkgbWV0aG9kIGhhdmluZyBiZWVuCisgICAgICAgICAgICBjYWxs
ZWQgYXMgcGVyIHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjp0cmFj
a011dGVkQ2hhbmdlZCk6IFJlbmFtZWQgZnJvbSBzb3VyY2VNdXRlZENoYW5nZWQuCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjp0cmFja0VuYWJsZWRDaGFuZ2VkKTogUmVuYW1l
ZCBmcm9tIHNvdXJjZUVuYWJsZWRDaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJl
YW1UcmFjazo6c3RvcCk6IFBhc3MgdGhyb3VnaCB0byBwcml2YXRlIHRyYWNrLgorICAgICAgICAq
IE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1UcmFjazo6T2JzZXJ2ZXI6On5PYnNlcnZlcik6IEFkZCB2aXJ0dWFsIGRl
c3RydWN0b3IuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJlcXVl
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lZGlhUmVxdWVzdDo6Y2FsbFN1Y2Nlc3NI
YW5kbGVyKTogU2V0IHRyYWNrLCBub3Qgc291cmNlLCBjb25zdHJhaW50cy4KKworICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIG5ldyBmaWxlcy4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZSk6IFJldHVybiBqc1Vu
ZGVmaW5lZCB3aGVuIHRoZSBmYWNpbmcgbW9kZQorICAgICAgICAgICAgaXMgVW5rbm93bi4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmg6IFJlbW92
ZSB1bnVzZWQgY2xhc3MgZm9yd2FyZCBkZWZpbmVzIGFuZAorICAgICAgICAgICAgdW5kZWZpbmVk
IG1ldGhvZCBwcm90b3R5cGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNj
cmlwdG9yOjphZGRTb3VyY2UpOiBBU1NFUlQgaWYgc291cmNlIGlzIGtpbmQgTm9uZS4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6cmVtb3ZlU291cmNlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFtRGVz
Y3JpcHRvcik6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6c2V0UmVhZHlT
dGF0ZSk6IENhbGwgc3RhcnRQcm9kdWNpbmdEYXRhIHdoZW4gcmVhZHlTdGF0ZSBjaGFuZ2VzCisg
ICAgICAgICAgICB0byBMaXZlLCBzdG9wUHJvZHVjaW5nRGF0YSB3aGVuIGl0IGNoYW5nZXMgdG8g
RW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6cmVtb3ZlT2JzZXJ2
ZXIpOiBDYWxsIHN0b3AoKSB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIG9ic2VydmVycy4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpzZXRFbmFibGVkKTogSWYgcGFzc2VkIGZh
bHNlLCBkbyBub3RoaW5nIHVubGVzcyBhbGwgb2JzZXJ2ZXJzCisgICAgICAgICAgICBhcmUgZGlz
YWJsZWQuIENhbGwgc3RhcnRQcm9kdWNpbmdEYXRhL3N0b3BQcm9kdWNpbmdEYXRhIHdoZW4gYmVj
b21pbmcgZW5hYmxlZC9kaXNhYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291
cmNlOjpzdG9wKTogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiBvdGhlciBvYnNlcnZl
cnMgaGF2ZQorICAgICAgICAgICAgc3RvcHBlZCwgdGhlIHNwZWMgc2F5cyB0aGF0IHRyYWNrLnN0
b3AoKSBzaG91bGQgcGVybWFuZW50bHkgc3RvcCB0aGUgdHJhY2sncyBzb3VyY2UuCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpuYW1lKTogTWFrZSB2aXJ0dWFsIHNvIGRlcml2ZWQg
Y2xhc3NlcyBjYW4gb3ZlcnJpZGUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJj
ZTo6c2V0TmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6
OnJlYWR5U3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNl
OjplbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6
bXV0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpzZXRS
ZWFkb25seSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnJl
bW90ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnNldFJl
bW90ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnN0YXJ0
UHJvZHVjaW5nRGF0YSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3Vy
Y2U6OnN0b3BQcm9kdWNpbmdEYXRhKTogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcy5oOiBNb3ZlIE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzIHRvCisgICAgICAgICAgICBpdHMgb3duIGZpbGUuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUpOiBN
b3ZlZCBoZXJlIGZyb20gTWVkaWFTb3VyY2VTdGF0ZXMgc28gdGhlIAorICAgICAgICAgICAgc3Ry
aW5ncyBhcmUgYXZhaWxhYmxlIHRvIHBsYXRmb3JtIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6c291cmNlVHlwZSk6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlU3RhdGVzLmg6IEFkZGVkLCBtb3Zl
ZCBmcm9tIE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzLmguCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKTogUGFzcyBwcml2YXRlIHRy
YWNrIHRvIGNvbnN0cnVjdG9yIGFzIFBhc3NSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUpOiBJbml0aWFsaXpl
IG1lbWJlciB2YXJpYWJsZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZTo6fk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKTogVW5yZWdpc3RlciBhcyBzb3VyY2Ugb2Jz
ZXJ2ZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0U291
cmNlKTogVW5yZWdpc3Rlci9yZWdpc3RlciBhcyBzb3VyY2Ugb2JzZXJ2ZXIuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0RW5hYmxlZCk6IEVuYWJsZS9kaXNh
YmxlIHNvdXJjZSwgY2FsbCBjbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZTo6c3RvcCk6IE5ldy4gU2V0IHJlYWR5U3RhdGUgdG8gRW5kZWQsIG9wdGlvbmFs
bHkgc3RvcCBzb3VyY2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZTo6c2V0UmVhZHlTdGF0ZSk6IElubGluZSB0aGUgbG9naWMgZnJvbSBzaG91bGRGaXJlVHJhY2tS
ZWFkeVN0YXRlQ2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlOjpjb25zdHJhaW50cyk6IE5ldywgcGFzc3Rocm91Z2ggdG8gdGhlIHNvdXJjZS4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzdGF0ZXMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjp0eXBlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y2FwYWJpbGl0aWVzKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6YXBwbHlD
b25zdHJhaW50cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja1By
aXZhdGU6OnNvdXJjZVJlYWR5U3RhdGVDaGFuZ2VkKTogUmVhY3QgdG8gc291cmNlIGNoYW5nZXMu
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c291cmNlTXV0ZWRD
aGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZTo6c291cmNlRW5hYmxlZENoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlOjpvYnNlcnZlcklzRW5hYmxlZCk6IFJlc3BvbmQgdG8gc291cmNl
IHF1ZXJ5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Om9ic2Vy
dmVySXNTdG9wcGVkKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUuaDoKKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQVZBdWRpb0NhcHR1cmVTb3VyY2UubW06IEFkZGVkLgorCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1h
bmFnZXIubW06IEFkZGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FW
TWVkaWFDYXB0dXJlU291cmNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbTogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tOiBB
ZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9NZWRpYVN0cmVhbUNl
bnRlck1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlck1hYzo6dmFs
aWRhdGVSZXF1ZXN0Q29uc3RyYWludHMpOiBJbXBsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbUNlbnRlck1hYzo6Y3JlYXRlTWVkaWFTdHJlYW0pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVyTWFjOjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNl
cyk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZU1vY2tTb3VyY2VzKTogVXBkYXRl
IGZvciBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6
TW9ja01lZGlhU3RyZWFtQ2VudGVyOjpjcmVhdGVNZWRpYVN0cmVhbSk6CisKIDIwMTMtMTAtMjYg
IFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY10g
UmVtb3ZlIFdlYlRpbGVkTGF5ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAx
NTgwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTk5MCw2ICsxOTkwLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbVNvdXJjZS5jcHAKKyAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVNvdXJjZVN0YXRlcy5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENJY2VDYW5k
aWRhdGVEZXNjcmlwdG9yLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uSGFuZGxlci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVz
Y3JpcHRpb25EZXNjcmlwdG9yLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9BdWRpb1N0cmVhbVRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0F1ZGlvU3RyZWFtVHJhY2suY3BwCShyZXZpc2lvbiAxNTgw
MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0F1ZGlvU3RyZWFtVHJh
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBSZWZQdHI8QXVkaW9TdHJlYW1UcmFjaz4gQXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERpY3Rpb25hcnkmIGF1ZGlv
Q29uc3RyYWludHMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1N0cmVhbVRyYWNr
KGNvbnRleHQsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoMCksICZhdWRpb0NvbnN0
cmFpbnRzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1N0cmVhbVRyYWNrKGNvbnRl
eHQsICpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKDApLCAmYXVkaW9Db25zdHJhaW50
cykpOwogfQogCi1SZWZQdHI8QXVkaW9TdHJlYW1UcmFjaz4gQXVkaW9TdHJlYW1UcmFjazo6Y3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU+IHByaXZhdGVUcmFjaykKK1JlZlB0cjxBdWRpb1N0cmVhbVRyYWNrPiBB
dWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHByaXZhdGVUcmFjaykKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEF1ZGlvU3RyZWFtVHJhY2soY29udGV4dCwgcHJpdmF0ZVRyYWNrLCAwKSk7CiB9
CkBAIC01MCw3ICs1MCw3IEBAIFJlZlB0cjxBdWRpb1N0cmVhbVRyYWNrPiBBdWRpb1N0cmVhbVRy
YWMKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvU3RyZWFtVHJhY2sodHJhY2spKTsKIH0K
IAotQXVkaW9TdHJlYW1UcmFjazo6QXVkaW9TdHJlYW1UcmFjayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBwcml2YXRl
VHJhY2ssIGNvbnN0IERpY3Rpb25hcnkqIGF1ZGlvQ29uc3RyYWludHMpCitBdWRpb1N0cmVhbVRy
YWNrOjpBdWRpb1N0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBwcml2YXRlVHJhY2ssIGNvbnN0IERpY3Rpb25hcnkqIGF1
ZGlvQ29uc3RyYWludHMpCiAgICAgOiBNZWRpYVN0cmVhbVRyYWNrKGNvbnRleHQsIHByaXZhdGVU
cmFjaywgYXVkaW9Db25zdHJhaW50cykKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vQXVkaW9TdHJlYW1UcmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQXVkaW9TdHJlYW1UcmFjay5oCShyZXZpc2lvbiAx
NTgwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0F1ZGlvU3RyZWFt
VHJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogY2xhc3MgQXVkaW9TdHJlYW1UcmFjayBGSU5BTCA6IHB1YmxpYyBNZWRp
YVN0cmVhbVRyYWNrIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEF1ZGlvU3RyZWFtVHJh
Y2s+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGljdGlvbmFyeSYpOwot
ICAgIHN0YXRpYyBSZWZQdHI8QXVkaW9TdHJlYW1UcmFjaz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPik7CisgICAgc3Rh
dGljIFJlZlB0cjxBdWRpb1N0cmVhbVRyYWNrPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJik7CiAgICAgc3RhdGljIFJlZlB0cjxBdWRpb1N0
cmVhbVRyYWNrPiBjcmVhdGUoTWVkaWFTdHJlYW1UcmFjayopOwogCiAgICAgdmlydHVhbCB+QXVk
aW9TdHJlYW1UcmFjaygpIHsgfQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGtpbmQoKSBjb25zdCBPVkVSUklERTsKIAogcHJpdmF0ZToK
LSAgICBBdWRpb1N0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiwgY29uc3QgRGljdGlvbmFyeSopOworICAgIEF1ZGlv
U3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJiwgY29uc3QgRGljdGlvbmFyeSopOwogICAgIGV4cGxpY2l0IEF1ZGlvU3RyZWFtVHJhY2so
TWVkaWFTdHJlYW1UcmFjayopOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5jcHAJKHJldmlzaW9u
IDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTb3Vy
Y2VTdGF0ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw1OSArMzksMTggQEAgUmVmUHRyPE1l
ZGlhU291cmNlU3RhdGVzPiBNZWRpYVNvdXJjZVN0YQogfQogCiBNZWRpYVNvdXJjZVN0YXRlczo6
TWVkaWFTb3VyY2VTdGF0ZXMoY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMmIHN0YXRlcykK
LSAgICA6IG1fU291cmNlU3RhdGVzKHN0YXRlcykKKyAgICA6IG1fc291cmNlU3RhdGVzKHN0YXRl
cykKIHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5n
TW9kZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlIG1vZGUpCi17Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdXNlckZhY2luZygidXNlciIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGVudmlyb25tZW50RmFjaW5nKCJlbnZpcm9ubWVudCIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IGxlZnRGYWNpbmcoImxlZnQiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiByaWdodEZhY2luZygicmlnaHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICAKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNl
U3RhdGVzOjpVc2VyOgotICAgICAgICByZXR1cm4gdXNlckZhY2luZzsKLSAgICBjYXNlIE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzOjpFbnZpcm9ubWVudDoKLSAgICAgICAgcmV0dXJuIGVudmlyb25t
ZW50RmFjaW5nOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkxlZnQ6Ci0gICAg
ICAgIHJldHVybiBsZWZ0RmFjaW5nOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6
OlJpZ2h0OgotICAgICAgICByZXR1cm4gcmlnaHRGYWNpbmc7Ci0gICAgfQotCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGVtcHR5QXRvbTsKLX0KLQotY29uc3QgQXRvbWlj
U3RyaW5nJiBNZWRpYVNvdXJjZVN0YXRlczo6c291cmNlVHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0
YXRlczo6U291cmNlVHlwZSBzb3VyY2VUeXBlKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IG5vbmUoIm5vbmUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjYW1lcmEo
ImNhbWVyYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1pY3JvcGhvbmUoIm1pY3JvcGhvbmUiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLQotICAgIHN3aXRjaCAoc291cmNl
VHlwZSkgewotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6Ok5vbmU6Ci0gICAgICAg
IHJldHVybiBub25lOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkNhbWVyYToK
LSAgICAgICAgcmV0dXJuIGNhbWVyYTsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
OjpNaWNyb3Bob25lOgotICAgICAgICByZXR1cm4gbWljcm9waG9uZTsKLSAgICB9Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZW1wdHlBdG9tOwotfQotCiBjb25zdCBB
dG9taWNTdHJpbmcmIE1lZGlhU291cmNlU3RhdGVzOjpzb3VyY2VUeXBlKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gTWVkaWFTb3VyY2VTdGF0ZXM6OnNvdXJjZVR5cGUobV9Tb3VyY2VTdGF0ZXMuc291
cmNlVHlwZSk7CisgICAgcmV0dXJuIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpzb3VyY2VUeXBl
KG1fc291cmNlU3RhdGVzLnNvdXJjZVR5cGUoKSk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYg
TWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoKSBjb25zdAogewotICAgIHJldHVybiBNZWRp
YVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShtX1NvdXJjZVN0YXRlcy5mYWNpbmdNb2RlKTsKKyAg
ICByZXR1cm4gTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUobV9zb3VyY2VTdGF0
ZXMuZmFjaW5nTW9kZSgpKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU291cmNlU3RhdGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5oCShyZXZpc2lvbiAxNTgw
MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU291cmNlU3Rh
dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDI0ICszOSwyMSBAQCBjbGFzcyBNZWRpYVNvdXJj
ZVN0YXRlcyA6IHB1YmxpYyBSZWZDb3VuCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxNZWRp
YVNvdXJjZVN0YXRlcz4gY3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzJik7CiAK
LSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzb3VyY2VUeXBlKE1lZGlhU3RyZWFtU291
cmNlU3RhdGVzOjpTb3VyY2VUeXBlKTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBm
YWNpbmdNb2RlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGUpOwotICAg
IAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc291cmNlVHlwZSgpIGNvbnN0OwotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgc291cmNlSWQoKSBjb25zdCB7IHJldHVybiBtX1NvdXJjZVN0YXRlcy5z
b3VyY2VJZDsgfQotICAgIHVuc2lnbmVkIGxvbmcgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX1Nv
dXJjZVN0YXRlcy53aWR0aDsgfQotICAgIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9Tb3VyY2VTdGF0ZXMuaGVpZ2h0OyB9Ci0gICAgZmxvYXQgZnJhbWVSYXRlKCkgY29u
c3QgeyByZXR1cm4gbV9Tb3VyY2VTdGF0ZXMuZnJhbWVSYXRlOyB9Ci0gICAgZmxvYXQgYXNwZWN0
UmF0aW8oKSBjb25zdCB7IHJldHVybiBtX1NvdXJjZVN0YXRlcy5hc3BlY3RSYXRpbzsgfQorICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgc291cmNlSWQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVN0
YXRlcy5zb3VyY2VJZCgpOyB9CisgICAgdW5zaWduZWQgbG9uZyB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlU3RhdGVzLndpZHRoKCk7IH0KKyAgICB1bnNpZ25lZCBsb25nIGhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlU3RhdGVzLmhlaWdodCgpOyB9CisgICAgZmxvYXQgZnJh
bWVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VTdGF0ZXMuZnJhbWVSYXRlKCk7IH0KKyAg
ICBmbG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlU3RhdGVzLmFzcGVj
dFJhdGlvKCk7IH0KICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhY2luZ01vZGUoKSBjb25zdDsK
LSAgICB1bnNpZ25lZCBsb25nIHZvbHVtZSgpIGNvbnN0IHsgcmV0dXJuIG1fU291cmNlU3RhdGVz
LnZvbHVtZTsgfQorICAgIHVuc2lnbmVkIGxvbmcgdm9sdW1lKCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2VTdGF0ZXMudm9sdW1lKCk7IH0KICAgICAKLSAgICBib29sIGhhc1ZpZGVvU291cmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9Tb3VyY2VTdGF0ZXMuc291cmNlVHlwZSA9PSBNZWRpYVN0cmVhbVNv
dXJjZVN0YXRlczo6Q2FtZXJhOyB9CisgICAgYm9vbCBoYXNWaWRlb1NvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlU3RhdGVzLnNvdXJjZVR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZVN0
YXRlczo6Q2FtZXJhOyB9CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTWVkaWFTb3VyY2VTdGF0
ZXMoY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMmKTsKIAotICAgIE1lZGlhU3RyZWFtU291
cmNlU3RhdGVzIG1fU291cmNlU3RhdGVzOworICAgIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzIG1f
c291cmNlU3RhdGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0
YXRlcy5pZGwJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTb3VyY2VTdGF0ZXMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSAr
MzQsMTEgQEAgZW51bSBWaWRlb0ZhY2luZ01vZGVFbnVtIHsgInVzZXIiLCAiZW52aQogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTb3VyY2VUeXBlRW51bSBzb3VyY2VUeXBlOwogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgc291cmNlSWQ7CiAKLSAgICBbQ3VzdG9tR2V0dGVyXSByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB3aWR0aDsKLSAgICBbQ3VzdG9tR2V0dGVyXSBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBoZWlnaHQ7Ci0gICAgW0N1c3RvbUdldHRl
cl0gcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IGZyYW1lUmF0ZTsKLSAgICBbQ3VzdG9tR2V0dGVy
XSByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgYXNwZWN0UmF0aW87Ci0gICAgW0N1c3RvbUdldHRl
cl0gcmVhZG9ubHkgYXR0cmlidXRlIFZpZGVvRmFjaW5nTW9kZUVudW0gZmFjaW5nTW9kZTsKLSAg
ICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB2b2x1bWU7
CisgICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IHdp
ZHRoOworICAgIFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
PyBoZWlnaHQ7CisgICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0PyBm
cmFtZVJhdGU7CisgICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0PyBh
c3BlY3RSYXRpbzsKKyAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgVmlkZW9G
YWNpbmdNb2RlRW51bT8gZmFjaW5nTW9kZTsKKyAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZz8gdm9sdW1lOwogfTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAJKHJldmlzaW9u
IDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgTWVkaWFTdHJlYW06Ok1l
ZGlhU3RyZWFtKFNjcmlwdEV4ZWN1dGlvbgogICAgIHNpemVfdCBudW1iZXJPZkF1ZGlvVHJhY2tz
ID0gbV9kZXNjcmlwdG9yLT5udW1iZXJPZkF1ZGlvVHJhY2tzKCk7CiAgICAgbV9hdWRpb1RyYWNr
cy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZBdWRpb1RyYWNrcyk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkF1ZGlvVHJhY2tzOyBpKyspIHsKLSAgICAgICAgdHJhY2sgPSBB
dWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUoY29udGV4dCwgbV9kZXNjcmlwdG9yLT5hdWRpb1RyYWNr
cyhpKSk7CisgICAgICAgIHRyYWNrID0gQXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRlKGNvbnRleHQs
ICptX2Rlc2NyaXB0b3ItPmF1ZGlvVHJhY2tzKGkpKTsKICAgICAgICAgdHJhY2stPmFkZE9ic2Vy
dmVyKHRoaXMpOwogICAgICAgICBtX2F1ZGlvVHJhY2tzLmFwcGVuZCh0cmFjay5yZWxlYXNlKCkp
OwogICAgIH0KQEAgLTEzMCw3ICsxMzAsNyBAQCBNZWRpYVN0cmVhbTo6TWVkaWFTdHJlYW0oU2Ny
aXB0RXhlY3V0aW9uCiAgICAgc2l6ZV90IG51bWJlck9mVmlkZW9UcmFja3MgPSBtX2Rlc2NyaXB0
b3ItPm51bWJlck9mVmlkZW9UcmFja3MoKTsKICAgICBtX3ZpZGVvVHJhY2tzLnJlc2VydmVDYXBh
Y2l0eShudW1iZXJPZlZpZGVvVHJhY2tzKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bWJlck9mVmlkZW9UcmFja3M7IGkrKykgewotICAgICAgICB0cmFjayA9IFZpZGVvU3RyZWFtVHJh
Y2s6OmNyZWF0ZShjb250ZXh0LCBtX2Rlc2NyaXB0b3ItPnZpZGVvVHJhY2tzKGkpKTsKKyAgICAg
ICAgdHJhY2sgPSBWaWRlb1N0cmVhbVRyYWNrOjpjcmVhdGUoY29udGV4dCwgKm1fZGVzY3JpcHRv
ci0+dmlkZW9UcmFja3MoaSkpOwogICAgICAgICB0cmFjay0+YWRkT2JzZXJ2ZXIodGhpcyk7CiAg
ICAgICAgIG1fdmlkZW9UcmFja3MuYXBwZW5kKHRyYWNrLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAt
MTkxLDYgKzE5MSw5IEBAIHZvaWQgTWVkaWFTdHJlYW06OmFkZFRyYWNrKFBhc3NSZWZQdHI8TWUK
ICAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbzoKICAgICAgICAgbV92aWRlb1RyYWNr
cy5hcHBlbmQodHJhY2spOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291
cmNlOjpOb25lOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgdHJhY2stPmFkZE9ic2VydmVyKHRoaXMpOwpAQCAtMjIzLDYgKzIyNiw5
IEBAIHZvaWQgTWVkaWFTdHJlYW06OnJlbW92ZVRyYWNrKFBhc3NSZWZQdHIKICAgICAgICAgaWYg
KHBvcyAhPSBub3RGb3VuZCkKICAgICAgICAgICAgIG1fdmlkZW9UcmFja3MucmVtb3ZlKHBvcyk7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6Ok5vbmU6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBp
ZiAocG9zID09IG5vdEZvdW5kKQpAQCAtMzA4LDEzICszMTQsMTYgQEAgdm9pZCBNZWRpYVN0cmVh
bTo6YWRkUmVtb3RlU291cmNlKE1lZGlhUwogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiB0
cmFjazsKICAgICBzd2l0Y2ggKHNvdXJjZS0+dHlwZSgpKSB7CiAgICAgY2FzZSBNZWRpYVN0cmVh
bVNvdXJjZTo6QXVkaW86Ci0gICAgICAgIHRyYWNrID0gQXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRl
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0
ZShzb3VyY2UpKTsKKyAgICAgICAgdHJhY2sgPSBBdWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShz
b3VyY2UpKTsKICAgICAgICAgbV9hdWRpb1RyYWNrcy5hcHBlbmQodHJhY2spOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbzoKLSAgICAgICAgdHJhY2sg
PSBWaWRlb1N0cmVhbVRyYWNrOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHNvdXJjZSkpOworICAgICAgICB0cmFjayA9IFZp
ZGVvU3RyZWFtVHJhY2s6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICpNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHNvdXJjZSkpOwogICAgICAgICBtX3ZpZGVvVHJhY2tz
LmFwcGVuZCh0cmFjayk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3Vy
Y2U6Ok5vbmU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgdHJhY2stPmFkZE9ic2VydmVyKHRoaXMpOwogICAgIG1fZGVzY3JpcHRvci0+
YWRkU291cmNlKHNvdXJjZSk7CkBAIC0zMzUsNiArMzQ0LDkgQEAgdm9pZCBNZWRpYVN0cmVhbTo6
cmVtb3ZlUmVtb3RlU291cmNlKE1lZAogICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVv
OgogICAgICAgICB0cmFja3MgPSAmbV92aWRlb1RyYWNrczsKICAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6Tm9uZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIFZlY3RvcjxpbnQ+IHRyYWNrc1RvUmVt
b3ZlOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bUNhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1ODAyNSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DYXBhYmls
aXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFZlY3RvcjxTdHJpbmc+
IE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOjoKICAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUNhcGFj
aXR5KGNvdW50KTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgIGNhcGFiaWxpdGllcy5hcHBlbmQoTWVkaWFTb3VyY2VTdGF0ZXM6OnNvdXJjZVR5
cGUoc291cmNlVHlwZXNbaV0pKTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmFwcGVuZChNZWRpYVN0
cmVhbVNvdXJjZVN0YXRlczo6c291cmNlVHlwZShzb3VyY2VUeXBlc1tpXSkpOwogICAgIAogICAg
IHJldHVybiBjYXBhYmlsaXRpZXM7CiB9CkBAIC05Nyw3ICs5Nyw3IEBAIFZlY3RvcjxTdHJpbmc+
IE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOjoKICAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUNhcGFj
aXR5KGNvdW50KTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgIGNhcGFiaWxpdGllcy5hcHBlbmQoTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01v
ZGUoZmFjaW5nTW9kZXNbaV0pKTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmFwcGVuZChNZWRpYVN0
cmVhbVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShmYWNpbmdNb2Rlc1tpXSkpOwogICAgIAogICAg
IHJldHVybiBjYXBhYmlsaXRpZXM7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAJKHJldmlzaW9uIDE1
ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJEaWN0
aW9uYXJ5LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiTWVkaWFD
b25zdHJhaW50c0ltcGwuaCIKICNpbmNsdWRlICJNZWRpYVNvdXJjZVN0YXRlcy5oIgogI2luY2x1
ZGUgIk1lZGlhU3RyZWFtLmgiCkBAIC00NCw1NiArNDUsNDQgQEAKICNpbmNsdWRlICJNZWRpYVN0
cmVhbVRyYWNrU291cmNlc1JlcXVlc3QuaCIKICNpbmNsdWRlICJNZWRpYVRyYWNrQ29uc3RyYWlu
dHMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlVVSUQuaCIKICNp
bmNsdWRlICJWaWRlb1N0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1NZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IHByaXZhdGVU
cmFjaywgY29uc3QgRGljdGlvbmFyeSopCitNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRy
YWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJiBwcml2YXRlVHJhY2ssIGNvbnN0IERpY3Rpb25hcnkqIGNvbnN0cmFpbnRzKQogICAgIDog
QWN0aXZlRE9NT2JqZWN0KGNvbnRleHQpCiAgICAgLCBtX3ByaXZhdGVUcmFjayhwcml2YXRlVHJh
Y2spCiAgICAgLCBtX2V2ZW50RGlzcGF0Y2hTY2hlZHVsZWQoZmFsc2UpCisgICAgLCBtX3N0b3Bw
aW5nVHJhY2soZmFsc2UpCiB7CiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiAKLSAgICBpZiAobV9w
cml2YXRlVHJhY2stPnNvdXJjZSgpKQotICAgICAgICBtX3ByaXZhdGVUcmFjay0+c291cmNlKCkt
PmFkZE9ic2VydmVyKHRoaXMpOworICAgIG1fcHJpdmF0ZVRyYWNrLT5zZXRDbGllbnQodGhpcyk7
CisKKyAgICBpZiAoY29uc3RyYWludHMpCisgICAgICAgIGFwcGx5Q29uc3RyYWludHMoKmNvbnN0
cmFpbnRzKTsKIH0KIAogTWVkaWFTdHJlYW1UcmFjazo6TWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0
cmVhbVRyYWNrKiBvdGhlcikKICAgICA6IEFjdGl2ZURPTU9iamVjdChvdGhlci0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9wcml2YXRlVHJhY2soKm90aGVyLT5wcml2YXRlVHJh
Y2soKS5jbG9uZSgpKQorICAgICwgbV9ldmVudERpc3BhdGNoU2NoZWR1bGVkKGZhbHNlKQorICAg
ICwgbV9zdG9wcGluZ1RyYWNrKGZhbHNlKQogewogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogCi0g
ICAgbV9wcml2YXRlVHJhY2sgPSBvdGhlci0+cHJpdmF0ZVRyYWNrKCktPmNsb25lKCk7Ci0KLSAg
ICBpZiAobV9wcml2YXRlVHJhY2stPnNvdXJjZSgpKQotICAgICAgICBtX3ByaXZhdGVUcmFjay0+
c291cmNlKCktPmFkZE9ic2VydmVyKHRoaXMpOwotCi0gICAgbV9ldmVudERpc3BhdGNoU2NoZWR1
bGVkID0gZmFsc2U7CisgICAgbV9wcml2YXRlVHJhY2stPnNldENsaWVudCh0aGlzKTsKIH0KIAog
TWVkaWFTdHJlYW1UcmFjazo6fk1lZGlhU3RyZWFtVHJhY2soKQogeworICAgIG1fcHJpdmF0ZVRy
YWNrLT5zZXRDbGllbnQobnVsbHB0cik7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFT
dHJlYW1UcmFjazo6a2luZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZVRyYWNrLT5r
aW5kKCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c2V0U291cmNlKE1lZGlhU3RyZWFt
U291cmNlKiBuZXdTb3VyY2UpCit2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnNldFNvdXJjZShQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBuZXdTb3VyY2UpCiB7Ci0gICAgTWVkaWFTdHJlYW1T
b3VyY2UqIHRyYWNrU291cmNlID0gc291cmNlKCk7Ci0KLSAgICBpZiAodHJhY2tTb3VyY2UpCi0g
ICAgICAgIHRyYWNrU291cmNlLT5yZW1vdmVPYnNlcnZlcih0aGlzKTsKLQotICAgIGlmIChuZXdT
b3VyY2UpCi0gICAgICAgIG5ld1NvdXJjZS0+YWRkT2JzZXJ2ZXIodGhpcyk7Ci0KICAgICBtX3By
aXZhdGVUcmFjay0+c2V0U291cmNlKG5ld1NvdXJjZSk7CiB9CiAKQEAgLTExNyw2ICsxMDYsMTEg
QEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzZXRFbmFibGVkKGJvb2wgZQogICAgIG1fcHJpdmF0
ZVRyYWNrLT5zZXRFbmFibGVkKGVuYWJsZWQpOwogfQogCitib29sIE1lZGlhU3RyZWFtVHJhY2s6
OnN0b3BwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGVUcmFjay0+c3RvcHBlZCgp
OworfQorCiBib29sIE1lZGlhU3RyZWFtVHJhY2s6Om11dGVkKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9wcml2YXRlVHJhY2stPm11dGVkKCk7CkBAIC0xNjcsMzAgKzE2MSwyOSBAQCBSZWZQdHI8
TWVkaWFUcmFja0NvbnN0cmFpbnRzPiBNZWRpYVN0cmVhCiAKIFJlZlB0cjxNZWRpYVNvdXJjZVN0
YXRlcz4gTWVkaWFTdHJlYW1UcmFjazo6c3RhdGVzKCkgY29uc3QKIHsKLSAgICBpZiAoIXNvdXJj
ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBNZWRpYVNvdXJjZVN0YXRlczo6
Y3JlYXRlKHNvdXJjZSgpLT5zdGF0ZXMoKSk7CisgICAgcmV0dXJuIE1lZGlhU291cmNlU3RhdGVz
OjpjcmVhdGUobV9wcml2YXRlVHJhY2stPnN0YXRlcygpKTsKIH0KIAogUmVmUHRyPE1lZGlhU3Ry
ZWFtQ2FwYWJpbGl0aWVzPiBNZWRpYVN0cmVhbVRyYWNrOjpjYXBhYmlsaXRpZXMoKSBjb25zdAog
ewotICAgIGlmICghc291cmNlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIE1l
ZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOjpjcmVhdGUoc291cmNlKCktPmNhcGFiaWxpdGllcygpKTsK
KyAgICByZXR1cm4gbV9wcml2YXRlVHJhY2stPmNhcGFiaWxpdGllcygpOwogfQogCiB2b2lkIE1l
ZGlhU3RyZWFtVHJhY2s6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgRGljdGlvbmFyeSYgY29uc3Ry
YWludHMpCiB7CisgICAgbV9jb25zdHJhaW50cy0+aW5pdGlhbGl6ZShjb25zdHJhaW50cyk7Cisg
ICAgbV9wcml2YXRlVHJhY2stPmFwcGx5Q29uc3RyYWludHMobV9jb25zdHJhaW50cyk7Cit9CisK
K3ZvaWQgTWVkaWFTdHJlYW1UcmFjazo6YXBwbHlDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlh
Q29uc3RyYWludHM+KQorewogICAgIC8vIEZJWE1FOiBhcHBseSB0aGUgbmV3IGNvbnN0cmFpbnRz
IHRvIHRoZSB0cmFjawogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjI0MjgKLSAgICBtX2NvbnN0cmFpbnRzLT5pbml0aWFsaXplKGNvbnN0cmFpbnRzKTsK
IH0KIAogUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IE1lZGlhU3RyZWFtVHJhY2s6OmNsb25lKCkK
IHsKLSAgICBpZiAoc291cmNlKCkgJiYgc291cmNlKCktPnR5cGUoKSA9PSBNZWRpYVN0cmVhbVNv
dXJjZTo6QXVkaW8pCisgICAgaWYgKG1fcHJpdmF0ZVRyYWNrLT50eXBlKCkgPT0gTWVkaWFTdHJl
YW1Tb3VyY2U6OkF1ZGlvKQogICAgICAgICByZXR1cm4gQXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRl
KHRoaXMpOwogCiAgICAgcmV0dXJuIFZpZGVvU3RyZWFtVHJhY2s6OmNyZWF0ZSh0aGlzKTsKQEAg
LTE5OCwxMSArMTkxLDE0IEBAIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBNZWRpYVN0cmVhbVRy
YWMKIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzdG9wUHJvZHVjaW5nRGF0YSgpCiB7Ci0gICAg
aWYgKHN0b3BwZWQoKSB8fCAhc291cmNlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJp
dmF0ZVRyYWNrLT5zZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCk7Ci0gICAg
bV9wcml2YXRlVHJhY2stPnN0b3AoKTsKKyAgICAvLyBOT1RFOiB0aGlzIG1ldGhvZCBpcyBjYWxs
ZWQgd2hlbiB0aGUgInN0b3AiIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBKUywgdXNpbmcKKyAgICAv
LyB0aGUgIkltcGxlbWVudGVkQXMiIElETCBhdHRyaWJ1dGUuIFRoaXMgaXMgZG9uZSBiZWNhdXNl
IEFjdGl2ZURPTU9iamVjdCByZXF1aXJlcworICAgIC8vIGEgInN0b3AiIG1ldGhvZC4KKyAgICAK
KyAgICAvLyBUaGUgc3RvcCBtZXRob2Qgc2hvdWxkICJQZXJtYW5lbnRseSBzdG9wIHRoZSBnZW5l
cmF0aW9uIG9mIGRhdGEgZm9yIHRyYWNrJ3Mgc291cmNlLiIKKyAgICBtX3N0b3BwaW5nVHJhY2sg
PSB0cnVlOworICAgIG1fcHJpdmF0ZVRyYWNrLT5zdG9wKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
OjpTdG9wVHJhY2tBbmRTdG9wU291cmNlKTsKKyAgICBtX3N0b3BwaW5nVHJhY2sgPSBmYWxzZTsK
IH0KIAogYm9vbCBNZWRpYVN0cmVhbVRyYWNrOjplbmRlZCgpIGNvbnN0CkBAIC0yMjIsMzEgKzIx
OCwzOSBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnJlbW92ZU9ic2VydmVyKE1lCiAgICAgICAg
IG1fb2JzZXJ2ZXJzLnJlbW92ZShwb3MpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnNv
dXJjZVN0YXRlQ2hhbmdlZCgpCit2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrUmVhZHlTdGF0
ZUNoYW5nZWQoKQogewogICAgIGlmIChzdG9wcGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fcHJpdmF0ZVRyYWNrLT5zZXRSZWFkeVN0YXRlKHNvdXJjZSgpLT5yZWFkeVN0YXRlKCkpOwor
ICAgIE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUgPSBtX3ByaXZhdGVU
cmFjay0+cmVhZHlTdGF0ZSgpOworICAgIGlmIChyZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291
cmNlOjpMaXZlKQorICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkuc3RhcnRlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAgICBlbHNlIGlmIChy
ZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCAmJiAhbV9zdG9wcGluZ1RyYWNr
KQorICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuZW5kZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisKKyAgICBjb25maWd1cmVUcmFja1JlbmRl
cmluZygpOwogfQogICAgIAotdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzb3VyY2VNdXRlZENoYW5n
ZWQoKQordm9pZCBNZWRpYVN0cmVhbVRyYWNrOjp0cmFja011dGVkQ2hhbmdlZCgpCiB7CiAgICAg
aWYgKHN0b3BwZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcml2YXRlVHJhY2stPnNl
dE11dGVkKHNvdXJjZSgpLT5tdXRlZCgpKTsKKyAgICBpZiAobXV0ZWQoKSkKKyAgICAgICAgc2No
ZWR1bGVFdmVudERpc3BhdGNoKEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLm11dGVFdmVudCwg
ZmFsc2UsIGZhbHNlKSk7CisgICAgZWxzZQorICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2go
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkudW5tdXRlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwog
CiAgICAgY29uZmlndXJlVHJhY2tSZW5kZXJpbmcoKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbVRy
YWNrOjpzb3VyY2VFbmFibGVkQ2hhbmdlZCgpCit2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnRyYWNr
RW5hYmxlZENoYW5nZWQoKQogewogICAgIGlmIChzdG9wcGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHNldEVuYWJsZWQoc291cmNlKCktPmVuYWJsZWQoKSk7Ci0gICAgLy8gbWVkaWEgZnJv
bSB0aGUgc291cmNlIG9ubHkgZmxvd3Mgd2hlbiBhIE1lZGlhU3RyZWFtVHJhY2sgb2JqZWN0IGlz
IGJvdGggdW5tdXRlZCBhbmQgZW5hYmxlZAorICAgIHNldEVuYWJsZWQobV9wcml2YXRlVHJhY2st
PmVuYWJsZWQoKSk7CiAgICAgY29uZmlndXJlVHJhY2tSZW5kZXJpbmcoKTsKIH0KIApAQCAtMjU5
LDExICsyNjMsNiBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OmNvbmZpZ3VyZVRyYWNrUmVuCiAg
ICAgLy8gLi4uIG1lZGlhIGZyb20gdGhlIHNvdXJjZSBvbmx5IGZsb3dzIHdoZW4gYSBNZWRpYVN0
cmVhbVRyYWNrIG9iamVjdCBpcyBib3RoIHVubXV0ZWQgYW5kIGVuYWJsZWQKIH0KIAotYm9vbCBN
ZWRpYVN0cmVhbVRyYWNrOjpzdG9wcGVkKCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlVHJhY2st
PnN0b3BwZWQoKTsKLX0KLQogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjp0cmFja0RpZEVuZCgpCiB7
CiAgICAgbV9wcml2YXRlVHJhY2stPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkVu
ZGVkKTsKQEAgLTI3NCw3ICsyNzMsNyBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrRGlk
RW5kKCkKIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzdG9wKCkKIHsKLSAgICBzdG9wUHJvZHVj
aW5nRGF0YSgpOworICAgIG1fcHJpdmF0ZVRyYWNrLT5zdG9wKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlOjpTdG9wVHJhY2tPbmx5KTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzY2hlZHVs
ZUV2ZW50RGlzcGF0Y2goUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCkBAIC0zMDcsMjIgKzMwNiw2
IEBAIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6ZGlzcGF0Y2hRdWV1ZWRFdmUKICAgICBldmVudHMu
Y2xlYXIoKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjp0cmFja1JlYWR5U3RhdGVDaGFu
Z2VkKCkKLXsKLSAgICBpZiAobV9wcml2YXRlVHJhY2stPnJlYWR5U3RhdGUoKSA9PSBNZWRpYVN0
cmVhbVNvdXJjZTo6TGl2ZSkKLSAgICAgICAgc2NoZWR1bGVFdmVudERpc3BhdGNoKEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLnN0YXJ0ZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci0gICAgZWxz
ZSBpZiAobV9wcml2YXRlVHJhY2stPnJlYWR5U3RhdGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6
RW5kZWQpCi0gICAgICAgIHNjaGVkdWxlRXZlbnREaXNwYXRjaChFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5lbmRlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVh
bVRyYWNrOjp0cmFja011dGVkQ2hhbmdlZCgpCi17Ci0gICAgaWYgKG11dGVkKCkpCi0gICAgICAg
IHNjaGVkdWxlRXZlbnREaXNwYXRjaChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5tdXRlRXZl
bnQsIGZhbHNlLCBmYWxzZSkpOwotICAgIGVsc2UKLSAgICAgICAgc2NoZWR1bGVFdmVudERpc3Bh
dGNoKEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubXV0ZUV2ZW50LCBmYWxzZSwgZmFsc2Up
KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElB
X1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1UcmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsMTAgKzQ4LDExIEBAIGNsYXNzIE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzQ2FsbGJh
Y2s7CiBjbGFzcyBNZWRpYVN0cmVhbUNhcGFiaWxpdGllczsKIGNsYXNzIE1lZGlhVHJhY2tDb25z
dHJhaW50czsKIAotY2xhc3MgTWVkaWFTdHJlYW1UcmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPE1l
ZGlhU3RyZWFtVHJhY2s+LCBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgQWN0aXZlRE9N
T2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIE1lZGlhU3Ry
ZWFtU291cmNlOjpPYnNlcnZlciwgcHVibGljIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50
IHsKK2NsYXNzIE1lZGlhU3RyZWFtVHJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVh
bVRyYWNrPiwgcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwg
cHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgY2xhc3MgT2JzZXJ2ZXIgewogICAgIHB1Ymxp
YzoKKyAgICAgICAgdmlydHVhbCB+T2JzZXJ2ZXIoKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lk
IHRyYWNrRGlkRW5kKCkgPSAwOwogICAgIH07CiAKQEAgLTY3LDYgKzY4LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgbXV0ZWQoKSBjb25zdDsKICAgICBib29sIHJlYWRvbmx5KCkgY29uc3Q7CiAgICAg
Ym9vbCByZW1vdGUoKSBjb25zdDsKKyAgICBib29sIHN0b3BwZWQoKSBjb25zdDsKIAogICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgcmVhZHlTdGF0ZSgpIGNvbnN0OwogCkBAIC03Niw2ICs3OCw3IEBA
IHB1YmxpYzoKICAgICBSZWZQdHI8TWVkaWFTb3VyY2VTdGF0ZXM+IHN0YXRlcygpIGNvbnN0Owog
ICAgIFJlZlB0cjxNZWRpYVN0cmVhbUNhcGFiaWxpdGllcz4gY2FwYWJpbGl0aWVzKCkgY29uc3Q7
CiAgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0IERpY3Rpb25hcnkmKTsKKyAgICB2b2lk
IGFwcGx5Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7CiAKICAgICBS
ZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gY2xvbmUoKTsKICAgICB2b2lkIHN0b3BQcm9kdWNpbmdE
YXRhKCk7CkBAIC04NywxNyArOTAsMTEgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIob3ZlcmNvbnN0cmFpbmVkKTsKIAogICAgIE1lZGlhU3RyZWFtU291cmNl
KiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGVUcmFjay0+c291cmNlKCk7IH0KLSAg
ICB2b2lkIHNldFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSopOwogCiAgICAgYm9vbCBlbmRlZCgp
IGNvbnN0OwogCiAgICAgdm9pZCBhZGRPYnNlcnZlcihPYnNlcnZlciopOwogICAgIHZvaWQgcmVt
b3ZlT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKLSAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSogcHJp
dmF0ZVRyYWNrKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlVHJhY2suZ2V0KCk7IH0KLQotICAg
IC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50Ci0gICAgdm9pZCB0cmFja1JlYWR5U3Rh
dGVDaGFuZ2VkKCk7Ci0gICAgdm9pZCB0cmFja011dGVkQ2hhbmdlZCgpOwogCiAgICAgLy8gRXZl
bnRUYXJnZXQKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50
ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gTWVkaWFTdHJlYW1UcmFja0V2
ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQpAQCAtMTA4LDcgKzEwNSwxMCBAQCBwdWJsaWM6CiAK
IHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtVHJh
Y2sqKTsKLSAgICBNZWRpYVN0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiwgY29uc3QgRGljdGlvbmFyeSopOworICAg
IE1lZGlhU3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlJiwgY29uc3QgRGljdGlvbmFyeSopOworCisgICAgTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUmIHByaXZhdGVUcmFjaygpIHsgcmV0dXJuIG1fcHJpdmF0ZVRyYWNrLmdldCgpOyB9Cisg
ICAgdm9pZCBzZXRTb3VyY2UoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4pOwogCiBwcml2
YXRlOgogCkBAIC0xMjQsMTEgKzEyNCwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBy
ZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIEZJTkFMIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGVyZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIEZJTkFMIHsgZGVyZWYoKTsgfQogCi0gICAg
Ly8gTWVkaWFTdHJlYW1Tb3VyY2VPYnNlcnZlcgotICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VTdGF0
ZUNoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKLSAgICB2aXJ0dWFsIHZvaWQgc291cmNlTXV0ZWRD
aGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIHNvdXJjZUVuYWJsZWRD
aGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCBib29sIHN0b3BwZWQoKSBPVkVS
UklERSBGSU5BTDsKKyAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUNsaWVudAorICAgIHZv
aWQgdHJhY2tSZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIHZvaWQgdHJhY2tNdXRlZENoYW5nZWQo
KTsKKyAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8
RXZlbnQ+PiBtX3NjaGVkdWxlZEV2ZW50czsKIApAQCAtMTM3LDggKzEzNiwxMCBAQCBwcml2YXRl
OgogCiAgICAgVmVjdG9yPE9ic2VydmVyKj4gbV9vYnNlcnZlcnM7CiAKLSAgICBSZWZQdHI8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+IG1fcHJpdmF0ZVRyYWNrOworICAgIFJlZjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4gbV9wcml2YXRlVHJhY2s7CiAgICAgYm9vbCBtX2V2ZW50RGlzcGF0Y2hT
Y2hlZHVsZWQ7CisKKyAgICBib29sIG1fc3RvcHBpbmdUcmFjazsKIH07CiAKIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPj4gTWVkaWFTdHJlYW1UcmFja1ZlY3RvcjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhUmVxdWVzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2Vy
TWVkaWFSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY3LDExICsxNjcsMTEgQEAgdm9pZCBVc2VyTWVkaWFSZXF1ZXN0OjpjYWxsU3VjY2Vzc0hhbmRs
ZQogCiAgICAgTWVkaWFTdHJlYW1UcmFja1ZlY3RvciB0cmFja3MgPSBzdHJlYW0tPmdldEF1ZGlv
VHJhY2tzKCk7CiAgICAgZm9yIChNZWRpYVN0cmVhbVRyYWNrVmVjdG9yOjppdGVyYXRvciBpdGVy
ID0gdHJhY2tzLmJlZ2luKCk7IGl0ZXIgIT0gdHJhY2tzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAg
ICgqaXRlciktPnNvdXJjZSgpLT5zZXRDb25zdHJhaW50cyhtX2F1ZGlvQ29uc3RyYWludHMpOwor
ICAgICAgICAoKml0ZXIpLT5hcHBseUNvbnN0cmFpbnRzKG1fYXVkaW9Db25zdHJhaW50cyk7CiAK
ICAgICB0cmFja3MgPSBzdHJlYW0tPmdldFZpZGVvVHJhY2tzKCk7CiAgICAgZm9yIChNZWRpYVN0
cmVhbVRyYWNrVmVjdG9yOjppdGVyYXRvciBpdGVyID0gdHJhY2tzLmJlZ2luKCk7IGl0ZXIgIT0g
dHJhY2tzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPnNvdXJjZSgpLT5zZXRDb25z
dHJhaW50cyhtX3ZpZGVvQ29uc3RyYWludHMpOworICAgICAgICAoKml0ZXIpLT5hcHBseUNvbnN0
cmFpbnRzKG1fdmlkZW9Db25zdHJhaW50cyk7CiAKICAgICBtX3N1Y2Nlc3NDYWxsYmFjay0+aGFu
ZGxlRXZlbnQoc3RyZWFtLmdldCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vVmlkZW9TdHJlYW1UcmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9WaWRlb1N0cmVhbVRyYWNrLmNwcAkocmV2aXNpb24g
MTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9WaWRlb1N0cmVh
bVRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogUmVmUHRyPFZpZGVvU3RyZWFtVHJhY2s+IFZpZGVvU3RyZWFtVHJhY2s6OmNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEaWN0aW9uYXJ5JiB2
aWRlb0NvbnN0cmFpbnRzKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmlkZW9TdHJlYW1U
cmFjayhjb250ZXh0LCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKDApLCAmdmlkZW9D
b25zdHJhaW50cykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmlkZW9TdHJlYW1UcmFjayhj
b250ZXh0LCAqTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZSgwKSwgJnZpZGVvQ29uc3Ry
YWludHMpKTsKIH0KIAotUmVmUHRyPFZpZGVvU3RyZWFtVHJhY2s+IFZpZGVvU3RyZWFtVHJhY2s6
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPiBwcml2YXRlVHJhY2spCitSZWZQdHI8VmlkZW9TdHJlYW1UcmFj
az4gVmlkZW9TdHJlYW1UcmFjazo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBwcml2YXRlVHJhY2spCiB7CiAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBWaWRlb1N0cmVhbVRyYWNrKGNvbnRleHQsIHByaXZhdGVUcmFjaywgMCkp
OwogfQpAQCAtNTAsNyArNTAsNyBAQCBSZWZQdHI8VmlkZW9TdHJlYW1UcmFjaz4gVmlkZW9TdHJl
YW1UcmFjCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWaWRlb1N0cmVhbVRyYWNrKHRyYWNrKSk7
CiB9CiAKLVZpZGVvU3RyZWFtVHJhY2s6OlZpZGVvU3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gcHJp
dmF0ZVRyYWNrLCBjb25zdCBEaWN0aW9uYXJ5KiB2aWRlb0NvbnN0cmFpbnRzKQorVmlkZW9TdHJl
YW1UcmFjazo6VmlkZW9TdHJlYW1UcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgcHJpdmF0ZVRyYWNrLCBjb25zdCBEaWN0aW9uYXJ5
KiB2aWRlb0NvbnN0cmFpbnRzKQogICAgIDogTWVkaWFTdHJlYW1UcmFjayhjb250ZXh0LCBwcml2
YXRlVHJhY2ssIHZpZGVvQ29uc3RyYWludHMpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1ZpZGVvU3RyZWFtVHJhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1ZpZGVvU3RyZWFtVHJhY2suaAkocmV2aXNp
b24gMTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9WaWRlb1N0
cmVhbVRyYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgTWVkaWFT
dHJlbVRyYWNrRGVzY3JpcHRvcjsKIGNsYXNzIFZpZGVvU3RyZWFtVHJhY2sgRklOQUwgOiBwdWJs
aWMgTWVkaWFTdHJlYW1UcmFjayB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxWaWRlb1N0
cmVhbVRyYWNrPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERpY3Rpb25h
cnkmKTsKLSAgICBzdGF0aWMgUmVmUHRyPFZpZGVvU3RyZWFtVHJhY2s+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4pOwor
ICAgIHN0YXRpYyBSZWZQdHI8VmlkZW9TdHJlYW1UcmFjaz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpOwogICAgIHN0YXRpYyBSZWZQdHI8
VmlkZW9TdHJlYW1UcmFjaz4gY3JlYXRlKE1lZGlhU3RyZWFtVHJhY2sqKTsKIAogICAgIHZpcnR1
YWwgflZpZGVvU3RyZWFtVHJhY2soKSB7IH0KQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBraW5kKCkgY29uc3QgT1ZFUlJJREU7CiAKIHBy
aXZhdGU6Ci0gICAgVmlkZW9TdHJlYW1UcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4sIGNvbnN0IERpY3Rpb25hcnkqKTsKKyAg
ICBWaWRlb1N0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZSYsIGNvbnN0IERpY3Rpb25hcnkqKTsKICAgICBleHBsaWNpdCBWaWRlb1N0cmVh
bVRyYWNrKE1lZGlhU3RyZWFtVHJhY2sqKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1ODAyNSkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtODQsNiArODQsMTYgQEAKIAkJMDcwMzM0RDcxNDU5RkZENTAwOEQ4RDQ1
IC8qIFRyYWNrQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDcwMzM0RDYxNDU5RkZENTAwOEQ4RDQ1IC8qIFRyYWNrQmFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3MDMzNEQ5MTQ1QTAwNkYw
MDhEOEQ0NSAvKiBUcmFja0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDcwMzM0RDgxNDVBMDA2RjAwOEQ4RDQ1IC8qIFRyYWNrQmFzZS5jcHAg
Ki87IH07CiAJCTA3MDMzNEU5MTQ1QTFGMzYwMDhEOEQ0NSAvKiBKU1RyYWNrQ3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDMzNEU4MTQ1
QTFGMzUwMDhEOEQ0NSAvKiBKU1RyYWNrQ3VzdG9tLmNwcCAqLzsgfTsKKwkJMDcwMzYzRDYxODFB
MTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0Q0MTgxQTE0NjUwMEMwNzRB
NSAvKiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHAgKi87IH07CisJCTA3MDM2M0Q3MTgxQTE0
NjUwMEMwNzRBNSAvKiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzRDUxODFBMTQ2NTAwQzA3NEE1IC8q
IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmggKi87IH07CisJCTA3MDM2M0UwMTgxQTFDREMwMEMw
NzRBNSAvKiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzRDgxODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9D
YXB0dXJlU291cmNlLmggKi87IH07CisJCTA3MDM2M0UxMTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1
ZGlvQ2FwdHVyZVNvdXJjZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3MDM2M0Q5MTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1ZGlvQ2FwdHVyZVNvdXJj
ZS5tbSAqLzsgfTsKKwkJMDcwMzYzRTIxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA3MDM2M0RBMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi87
IH07CisJCTA3MDM2M0UzMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYz
REIxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIubW0gKi87IH07CisJ
CTA3MDM2M0U0MTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREMxODFBMUNE
QzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLmggKi87IH07CisJCTA3MDM2M0U1MTgx
QTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0REMTgxQTFDREMwMEMwNzRBNSAv
KiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbSAqLzsgfTsKKwkJMDcwMzYzRTYxODFBMUNEQzAwQzA3
NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAzNjNERTE4MUExQ0RDMDBDMDc0QTUgLyogQVZWaWRlb0Nh
cHR1cmVTb3VyY2UuaCAqLzsgfTsKKwkJMDcwMzYzRTcxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlk
ZW9DYXB0dXJlU291cmNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDcwMzYzREYxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNl
Lm1tICovOyB9OwogCQkwNzA1ODRGRDE3RjlENkRGMDA1RjJCQ0IgLyogTWVkaWFTdHJlYW1Tb3Vy
Y2VDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3MDU4NEZCMTdGOUQ2REYwMDVGMkJDQiAvKiBNZWRpYVN0cmVhbVNvdXJjZUNhcGFi
aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTA3MDU4NEZGMTdGOUYwNUUwMDVGMkJDQiAvKiBDYXBhYmlsaXR5UmFuZ2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwNTg0RkUxN0Y5RjA1
RTAwNUYyQkNCIC8qIENhcGFiaWxpdHlSYW5nZS5jcHAgKi87IH07CiAJCTA3MDU4NTAyMTdGQTEw
RDAwMDVGMkJDQiAvKiBKU0FsbFZpZGVvQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDU4NTAwMTdGQTEwRDAwMDVGMkJDQiAv
KiBKU0FsbFZpZGVvQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTMxMyw2ICszMjMsOCBAQAog
CQkwN0RDNUZENDE3RDNFRUU5MDA5OUY4OTAgLyogSlNSVENTdGF0c1Jlc3BvbnNlQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3REM1RkQz
MTdEM0VFRTkwMDk5Rjg5MCAvKiBKU1JUQ1N0YXRzUmVzcG9uc2VDdXN0b20uY3BwICovOyB9Owog
CQkwN0UxMTZCMTE0ODlDOUExMDBFQzVBQ0UgLyogSlNUZXh0VHJhY2tDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdFMTE2QjAxNDg5QzlB
MTAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VzdG9tLmNwcCAqLzsgfTsKIAkJMDdFMTE3MDcxNDg5
RUJFQjAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RTExNzA2MTQ4OUVCRUIwMEVDNUFDRSAv
KiBKU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAgKi87IH07CisJCTA3RkZERTY4MTgxQUVENDIwMDcy
RDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0ZGREU2NjE4MUFFRDQyMDA3MkQ0MDkgLyogTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwICovOyB9OworCQkwN0ZGREU2OTE4MUFFRDQyMDA3MkQ0
MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RkZERTY3MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZS5oICovOyB9OwogCQkwODA2RTU3QTEyODkzMDQ1MDA3Q0VEMzIgLyog
U1ZHTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwODA2RTU3OTEyODkzMDQ1MDA3Q0VEMzIgLyogU1ZHTWF0cml4LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDgwRTQ5MjYxMjU1RjNCRDAwRUZD
QTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgwRTQ5MjIxMjU1RjNCRDAwRUZDQTI3IC8qIFNW
R1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oICovOyB9OwogCQkwODBFNDkyODEyNTVGM0JEMDBF
RkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEU0OTI0MTI1NUYzQkQwMEVGQ0EyNyAvKiBT
VkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oICovOyB9OwpAQCAtNjQ4MSw2ICs2NDkzLDE2IEBA
CiAJCTA3MDMzNEQ2MTQ1OUZGRDUwMDhEOEQ0NSAvKiBUcmFja0Jhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhY2tCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3MDMzNEQ4MTQ1QTAwNkYwMDhEOEQ0NSAvKiBUcmFja0Jhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhY2tCYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDcwMzM0RTgxNDVBMUYzNTAwOEQ4RDQ1IC8qIEpTVHJhY2tDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUcmFja0N1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDM2M0Q0MTgxQTE0NjUwMEMw
NzRBNSAvKiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTA3MDM2M0Q1MTgxQTE0NjUwMEMwNzRBNSAvKiBNZWRpYVN0cmVh
bVNvdXJjZVN0YXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0
cmVhbVNvdXJjZVN0YXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzAzNjNE
ODE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQVZBdWRpb0NhcHR1cmVTb3VyY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMDcwMzYzRDkxODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVkaW9DYXB0
dXJlU291cmNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQVZB
dWRpb0NhcHR1cmVTb3VyY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDM2
M0RBMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwMzYzREIxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2Fw
dHVyZURldmljZU1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwNzAzNjNEQzE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVZNZWRpYUNhcHR1cmVTb3VyY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwMzYzREQxODFBMUNEQzAwQzA3NEE1IC8q
IEFWTWVkaWFDYXB0dXJlU291cmNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gQVZNZWRpYUNhcHR1cmVTb3VyY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTA3MDM2M0RFMTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzAzNjNERjE4MUExQ0RDMDBDMDc0QTUg
LyogQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDcwNTg0RkIxN0Y5RDZERjAwNUYyQkNCIC8qIE1lZGlhU3RyZWFtU291cmNlQ2Fw
YWJpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFt
U291cmNlQ2FwYWJpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MDU4
NEZFMTdGOUYwNUUwMDVGMkJDQiAvKiBDYXBhYmlsaXR5UmFuZ2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FwYWJpbGl0eVJhbmdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDcwNTg1MDAxN0ZBMTBEMDAwNUYyQkNCIC8qIEpTQWxsVmlkZW9D
YXBhYmlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNB
bGxWaWRlb0NhcGFiaWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02
NzUwLDYgKzY3NzIsOCBAQAogCQkwN0RDNUZEMzE3RDNFRUU5MDA5OUY4OTAgLyogSlNSVENTdGF0
c1Jlc3BvbnNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTUlRDU3RhdHNSZXNwb25zZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA3RTExNkIwMTQ4OUM5QTEwMEVDNUFDRSAvKiBKU1RleHRUcmFja0N1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1RleHRUcmFja0N1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RTExNzA2MTQ4OUVCRUIwMEVDNUFDRSAv
KiBKU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1RleHRUcmFja0N1ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTA3RkZERTY2MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3RkZERTY3MTgx
QUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwODA2RTU3OTEyODkzMDQ1MDA3Q0VEMzIgLyogU1ZHTWF0cml4
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01hdHJpeC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODBFNDkyMTEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4
dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA4MEU0OTIyMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5n
aW5lQmFzZWxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExh
eW91dEVuZ2luZUJhc2VsaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzQ2
NCw2ICsxMzQ4OCwxMCBAQAogCQkwNzIyMUI5MjE3Q0YwQUQ0MDA4NDhFNTEgLyogbWVkaWFzdHJl
YW0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTA3RkZE
RTY2MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgKi8sCisJ
CQkJMDdGRkRFNjcxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgg
Ki8sCisJCQkJMDcwMzYzRDQxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFtU291cmNlU3Rh
dGVzLmNwcCAqLywKKwkJCQkwNzAzNjNENTE4MUExNDY1MDBDMDc0QTUgLyogTWVkaWFTdHJlYW1T
b3VyY2VTdGF0ZXMuaCAqLywKIAkJCQkwNzI5QjE0RDE3Q0ZDQ0EwMDA0RjFENjAgLyogbWFjICov
LAogCQkJCTA3MjIxQjk5MTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYUNvbnN0cmFpbnRzLmggKi8s
CiAJCQkJMDcyMjFCOUExN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtQ2VudGVyLmNwcCAq
LywKQEAgLTEzNDk5LDYgKzEzNTI3LDE0IEBACiAJCTA3MjlCMTREMTdDRkNDQTAwMDRGMUQ2MCAv
KiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTA3
MDM2M0Q4MTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oICovLAorCQkJ
CTA3MDM2M0Q5MTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbSAqLywK
KwkJCQkwNzAzNjNEQTE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5o
ICovLAorCQkJCTA3MDM2M0RCMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyLm1tICovLAorCQkJCTA3MDM2M0RDMTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVy
ZVNvdXJjZS5oICovLAorCQkJCTA3MDM2M0REMTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2Fw
dHVyZVNvdXJjZS5tbSAqLywKKwkJCQkwNzAzNjNERTE4MUExQ0RDMDBDMDc0QTUgLyogQVZWaWRl
b0NhcHR1cmVTb3VyY2UuaCAqLywKKwkJCQkwNzAzNjNERjE4MUExQ0RDMDBDMDc0QTUgLyogQVZW
aWRlb0NhcHR1cmVTb3VyY2UubW0gKi8sCiAJCQkJMDcyOUIxNEUxN0NGQ0NBMDAwNEYxRDYwIC8q
IE1lZGlhU3RyZWFtQ2VudGVyTWFjLmNwcCAqLywKIAkJCQkwNzI5QjE0RjE3Q0ZDQ0EwMDA0RjFE
NjAgLyogTWVkaWFTdHJlYW1DZW50ZXJNYWMuaCAqLywKIAkJCSk7CkBAIC0yMjMzOCw2ICsyMjM3
NCw3IEBACiAJCQkJODVFNzExRDkwQUM1RDUzNTAwNTMyNzBGIC8qIERPTVRleHRJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTg4NjA0QjQwRjJFNjU0QTAwMEI2NDQzIC8qIERPTVRpbWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNUZENjlFMDEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGlt
ZVN0YW1wLmggaW4gSGVhZGVycyAqLywKKwkJCQkwN0ZGREU2OTE4MUFFRDQyMDA3MkQ0MDkgLyog
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc2RkMyQjBDMTIz
NzBEQTAwMDZBOTkxQSAvKiBET01Ub2tlbkxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNDUz
NDk3MTZBOUJCNkEwMDBGNkZEMiAvKiBET01UcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxNDUzNDk5MTZBOUJCNkEwMDBGNkZEMiAvKiBET01UcmFuc2l0aW9uRXZlbnRJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjQyNiw2ICsyMjQ2Myw3IEBACiAJCQkJQThFQTdF
QzAwQTE5NDVEMDAwQThFRjVGIC8qIEVudGl0eVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkQzMTYwOTMxMkIwMjZGNzAwQzFBMzU5IC8qIEVxdWFsUG93ZXJQYW5uZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJFQ0Y3QUUyMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmggaW4g
SGVhZGVycyAqLywKKwkJCQkwNzAzNjNFNDE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1
cmVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjQyMEE0NEVGQzcwMEY5OTJFMCAv
KiBFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzOEQzMzUxMjQ0MDU0ODAwMzIzRDMzIC8q
IEV2ZW50Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RBQjZEMjkxN0M3REU2QzAwQzYw
QjM0IC8qIE1lZGlhQ29udHJvbHNIb3N0LmggaW4gSGVhZGVycyAqLywKQEAgLTIzMzI4LDYgKzIz
MzY2LDcgQEAKIAkJCQlCMkZBM0UwNzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0UwOTBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdUaXRsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzRTBCMEFC
NzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDcw
MzYzRDcxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkZBM0UwRDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUcmFuc2Zvcm1M
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzI3N0U0RjE3RDAxOENDMDAxNTUzNEQgLyogSlNN
ZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZB
M0UwRjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUUmVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yMzY0NSw2ICsyMzY4NCw3IEBACiAJCQkJQjIyMjc5NzEwRDAwQkYyMjAwNzFCNzgyIC8q
IFBhdHRlcm5BdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1MzU2NTBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEE3Q0M5
NkIxMjA3NkQ3MzAwMUQ0NTg4IC8qIFBlbmRpbmdTY3JpcHQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTA3MDM2M0U2MTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOEE4NDREMDUxMUQzQzE4RTAwMTQwNjVDIC8qIFBlcmZvcm1hbmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwNzk2OURCMDE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENEVE1G
U2VuZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkJFMzQwMTE1MDU4Q0IyMDBDRTBGRDggLyog
UGVyZm9ybWFuY2VFbnRyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDUwMiw2ICsyNDU0Miw3IEBA
CiAJCQkJNDlFOTExRDIwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzcwQTIyOTdCRTAwNThEN0FEIC8qIFRy
YXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdGRDQyOTgxMTgzNjg0NjAwOTNDMDI5IC8q
IFRyZWVEZXB0aExpbWl0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzAzNjNFMDE4MUExQ0RDMDBD
MDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RDY0
QjVEMTM0QTVCNkIwMEU1OEZEQSAvKiBUcmVlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
RDcxOUQxMTgxMTA2RTAwMDE2REM1MSAvKiBJREJFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3N0UxRkYwMTRBQUNCNkUwMDVCN0NCNiAvKiBUcmVlU2NvcGVBZG9wdGVyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI0NTkwLDYgKzI0NjMxLDcgQEAKIAkJCQlBMEVFMERGNjE0NEY4
MjU1MDBGODBCMEQgLyogV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTBFRTBERjgxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdTaGFkZXJzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2RTNGQUU4RjE0NzMzRkRCMDBFNDIzMDcgLyogV2ViR0xEZXB0aFRleHR1
cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3MDM2M0UyMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUJGMEU1NTEyQTg5Mjk4
MDBEQjE3MDkgLyogV2ViR0xFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUNG
MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTEZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2RTQ3RTY2MTEwQjc5NDRCMDBCMTg2QzggLyogV2ViR0xHZXRJbmZvLmggaW4gSGVhZGVycyAq
LywKQEAgLTI2MTI2LDYgKzI2MTY4LDcgQEAKIAkJCQkxNENGN0IzMzA5RjZFQ0Q3MDBFQjM2NjUg
LyogSlNDU1NSdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDZDMUVFMEMwRERCREYwMDIw
Q0ZDMyAvKiBKU0NTU1J1bGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThEMDVGQTcw
QTIzQjMwMTAwNUU3MjAzIC8qIEpTQ1NTUnVsZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MDcwMzYzRTUxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTM5MjI2MkYxMDMyMTA4NDAwNkU3RDVEIC8qIEpTQ1NTUnVsZUxpc3RD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyMDExQjYwQTAwMzEzMzAwODMwM0Y5IC8q
IEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzU4MjVGMzBD
MEI4OTM4MDA1M0YxQjUgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMjY1MjYsNiArMjY1NjksNyBAQAogCQkJCUIyRkEzRDk4MEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyRkEzRDlBMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0dFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyN0IyODI3MENFRjBDMDcwMEQzOUQ1NCAvKiBKU1NWR0dseXBoRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzAzNjNFMTE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRp
b0NhcHR1cmVTb3VyY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkyNEQ5MTI5ODEzQ0E5NkRFMDBE
MjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJG
QTNEOUMwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHR3JhZGllbnRFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg1MTc0RUMyQkNDQUYxN0VBRTNGNDZGOCAvKiBKU1NWR0dyYXBoaWNzRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2NTk3LDYgKzI2NjQxLDcgQEAKIAkJCQlCMkZB
M0UwQTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjJGQTNFMEMwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVHJhbnNmb3JtTGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0UwRTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUUmVm
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzAzNjNENjE4MUExNDY1MDBDMDc0QTUg
LyogTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNF
MTAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVFNwYW5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyRkEzRTEyMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1VuaXRUeXBlcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMkZBM0UxNDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdVc2VFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY5MjMsNiArMjY5NjgsNyBAQAogCQkJCUE5QzZF
NEYzMEQ3NDVFNDgwMDY0NDJFOSAvKiBQbHVnaW5EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk3MjA1QUJCMTIzOTI5MjcwMEIxNzM4MCAvKiBQbHVnaW5Eb2N1bWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQURBMTQxMDBFMUFFNUQ5MDAwMjNFRTUgLyogUGx1Z2luTWFpblRocmVhZFNj
aGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzAzNjNFMzE4MUExQ0RDMDBDMDc0QTUg
LyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTcxRTIxODNC
MTczNTlGQjgwMDZFNkU0RCAvKiBQbHVnSW5zUmVzb3VyY2VzRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3NkZGMTdFMzExMjM1NjczMDAxRDYxQjUgLyogUGx1Z2luVmlld05vbmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjJCMUY3MTYwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVu
dHNIaXRSdWxlcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MjI1LDYgKzI3MjcxLDcgQEAKIAkJ
CQkwNzhFMDkwRTE3RDE0Q0VFMDA0MjBBQTEgLyogUlRDU3RhdHNSZXBvcnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRDAxQTI3QUQxMEM5QkZEODAwMDI2QTQyIC8qIFNwYWNlU3BsaXRTdHJpbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjI2Q0RFMEUxMTQwNDI0QzAwMUU1QTY4IC8qIFNwYXRp
YWxOYXZpZ2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3RkZERTY4MTgxQUVENDIwMDcy
RDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
NTQxNUMyOTEyOUE5OTIwMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUFBMkE1QUQ1MTZBNDg2MTQwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVz
aXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyQTVBRDMxNkE0ODYwRDAwOTc1QTI1IC8qIFNw
ZWVjaFN5bnRoZXNpc0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc2MzQsNiArMjc2ODEs
NyBAQAogCQkJCUI1MEY1QjgxMEU5NkNEOTkwMEFENzFBNiAvKiBXZWJDb3JlT2JqQ0V4dHJhcy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUUxODA4MTBFMTZGQ0VDREYwMEI4MEQwNyAvKiBXZWJDb3Jl
UmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE1MjU1MTYx
NkZEMjM1MDAwM0Q3QURCIC8qIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9uUXVldWVE
ZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTA3MDM2M0U3MTgxQTFDREMwMEMwNzRBNSAv
KiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRUIxNjk1MDlG
ODgwQjAwMDkxRjhGRiAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzdGODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTkzRjE5QjA3MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlVmll
dy5tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
ZGlhU291cmNlU3RhdGVzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lZGlhU291cmNlU3RhdGVzQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU4MDI1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVNvdXJjZVN0YXRlc0N1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDEwIEBAIEpTVmFsdWUgSlNNZWRpYVNv
dXJjZVN0YXRlczo6ZmFjaW5nTW9kZSgKICAgICBpZiAoIWltcGwoKS5oYXNWaWRlb1NvdXJjZSgp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAorICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbW9kZSA9IGltcGwoKS5mYWNpbmdNb2RlKCk7CisgICAgaWYgKG1vZGUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAKICAgICByZXR1cm4ganNTdHJpbmdX
aXRoQ2FjaGUoZXhlYywgaW1wbCgpLmZhY2luZ01vZGUoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50
ZXIuaAkocmV2aXNpb24gMTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYUNvbnN0cmFpbnRzOwogY2xhc3Mg
TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudDsKLWNsYXNzIE1lZGlhU3RyZWFtQ3JlYXRpb25DbGll
bnQ7Ci1jbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7Ci1jbGFzcyBNZWRpYVN0cmVhbVNvdXJj
ZUNhcGFiaWxpdGllczsKK2NsYXNzIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOwogY2xhc3MgTWVk
aWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50OwogCi1zdHJ1Y3QgTWVkaWFTdHJlYW1T
b3VyY2VTdGF0ZXM7Ci0KIGNsYXNzIE1lZGlhU3RyZWFtQ2VudGVyIHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5NZWRpYVN0cmVhbUNlbnRlcigpOwpAQCAtNjUsNyArNjEsNiBAQCBwdWJsaWM6CiBw
cm90ZWN0ZWQ6CiAgICAgTWVkaWFTdHJlYW1DZW50ZXIoKTsKIAotICAgIHZvaWQgZW5kTG9jYWxN
ZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqKTsKICAgICBzdGF0aWMgTWVkaWFTdHJl
YW1DZW50ZXImIHBsYXRmb3JtQ2VudGVyKCk7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3Jp
cHRvci5jcHAJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDYgKzYwLDkgQEAgdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFkZFNvdXJjZShQYQogICAg
ICAgICBpZiAobV92aWRlb1N0cmVhbVNvdXJjZXMuZmluZChzb3VyY2UpID09IG5vdEZvdW5kKQog
ICAgICAgICAgICAgbV92aWRlb1N0cmVhbVNvdXJjZXMuYXBwZW5kKHNvdXJjZSk7CiAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6Ok5vbmU6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTc5LDYgKzgy
LDkgQEAgdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlbW92ZVNvdXJjZQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBtX3ZpZGVvU3RyZWFtU291cmNlcy5yZW1vdmUocG9zKTsKICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6Tm9uZToKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMTA1
LDEzICsxMTEsMTUgQEAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpNZWRpYVN0cmVhbURlc2NyaQog
ewogICAgIEFTU0VSVChtX2lkLmxlbmd0aCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGF1ZGlvU291cmNlcy5zaXplKCk7IGkrKykgewotICAgICAgICBtX2F1ZGlvU3RyZWFtU291cmNl
cy5hcHBlbmQoYXVkaW9Tb3VyY2VzW2ldKTsKLSAgICAgICAgbV9hdWRpb1RyYWNrRGVzY3JpcHRv
cnMuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoYXVkaW9Tb3VyY2VzW2ld
KSk7CisgICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gc291cmNlID0gYXVkaW9Tb3Vy
Y2VzW2ldOworICAgICAgICBtX2F1ZGlvU3RyZWFtU291cmNlcy5hcHBlbmQoc291cmNlKTsKKyAg
ICAgICAgbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnMuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlOjpjcmVhdGUoc291cmNlKSk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2aWRlb1NvdXJjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbV92aWRlb1N0cmVhbVNvdXJj
ZXMuYXBwZW5kKHZpZGVvU291cmNlc1tpXSk7Ci0gICAgICAgIG1fdmlkZW9UcmFja0Rlc2NyaXB0
b3JzLmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHZpZGVvU291cmNlc1tp
XSkpOworICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSA9IHZpZGVvU291
cmNlc1tpXTsKKyAgICAgICAgbV92aWRlb1N0cmVhbVNvdXJjZXMuYXBwZW5kKHNvdXJjZSk7Cisg
ICAgICAgIG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzLmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZTo6Y3JlYXRlKHNvdXJjZSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNw
cAkocmV2aXNpb24gMTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCwxNyBA
QCB2b2lkIE1lZGlhU3RyZWFtU291cmNlOjpzZXRSZWFkeVN0YXRlKFJlCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7Ci0gICAgZm9yIChWZWN0b3I8T2Jz
ZXJ2ZXIqPjo6aXRlcmF0b3IgaSA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGkgIT0gbV9vYnNlcnZl
cnMuZW5kKCk7ICsraSkKLSAgICAgICAgKCppKS0+c291cmNlU3RhdGVDaGFuZ2VkKCk7CisgICAg
Zm9yIChhdXRvIG9ic2VydmVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgb2JzZXJ2ZXIgIT0gbV9v
YnNlcnZlcnMuZW5kKCk7ICsrb2JzZXJ2ZXIpCisgICAgICAgICgqb2JzZXJ2ZXIpLT5zb3VyY2VS
ZWFkeVN0YXRlQ2hhbmdlZCgpOworCisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBMaXZlKSB7Cisg
ICAgICAgIHN0YXJ0UHJvZHVjaW5nRGF0YSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIC8vIFRoZXJlIGFyZSBubyBtb3JlIGNvbnN1bWVycyBvZiB0aGlzIHNvdXJjZSdzIGRh
dGEsIHNodXQgaXQgZG93biBhcyBhcHByb3ByaWF0ZS4KKyAgICBpZiAobV9yZWFkeVN0YXRlID09
IEVuZGVkKQorICAgICAgICBzdG9wUHJvZHVjaW5nRGF0YSgpOwogfQogCiB2b2lkIE1lZGlhU3Ry
ZWFtU291cmNlOjphZGRPYnNlcnZlcihNZWRpYVN0cmVhbVNvdXJjZTo6T2JzZXJ2ZXIqIG9ic2Vy
dmVyKQpAQCAtODgsMTggKzk3LDkgQEAgdm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6cmVtb3ZlT2Jz
ZXJ2ZXIoTQogICAgIHNpemVfdCBwb3MgPSBtX29ic2VydmVycy5maW5kKG9ic2VydmVyKTsKICAg
ICBpZiAocG9zICE9IG5vdEZvdW5kKQogICAgICAgICBtX29ic2VydmVycy5yZW1vdmUocG9zKTsK
LX0KIAotTWVkaWFDb25zdHJhaW50cyogTWVkaWFTdHJlYW1Tb3VyY2U6OmNvbnN0cmFpbnRzKCkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2hpbGUgdGhpcyByZXR1cm5zIAotICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI0MjgKLSAgICByZXR1cm4gbV9j
b25zdHJhaW50cy5nZXQoKTsKLX0KLSAgICAKLXZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6OnNldENv
bnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpCi17Ci0g
ICAgbV9jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzOworICAgIGlmICghbV9vYnNlcnZlcnMuc2l6
ZSgpKQorICAgICAgICBzdG9wKCk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6OnNldE11
dGVkKGJvb2wgbXV0ZWQpCkBAIC0xMTIsNDcgKzExMiw0OCBAQCB2b2lkIE1lZGlhU3RyZWFtU291
cmNlOjpzZXRNdXRlZChib29sIG11CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBFbmRlZCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChWZWN0b3I8T2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaSA9
IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGkgIT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsraSkKLSAgICAg
ICAgKCppKS0+c291cmNlTXV0ZWRDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvIG9ic2VydmVyID0g
bV9vYnNlcnZlcnMuYmVnaW4oKTsgb2JzZXJ2ZXIgIT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsrb2Jz
ZXJ2ZXIpCisgICAgICAgICgqb2JzZXJ2ZXIpLT5zb3VyY2VNdXRlZENoYW5nZWQoKTsKIH0KIAog
dm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCiB7CisgICAg
aWYgKCFlbmFibGVkKSB7CisgICAgICAgIC8vIERvbid0IGRpc2FibGUgdGhlIHNvdXJjZSB1bmxl
c3MgYWxsIG9ic2VydmVycyBhcmUgZGlzYWJsZWQuCisgICAgICAgIGZvciAoYXV0byBvYnNlcnZl
ciA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IG9ic2VydmVyICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyAr
K29ic2VydmVyKSB7CisgICAgICAgICAgICBpZiAoKCpvYnNlcnZlciktPm9ic2VydmVySXNFbmFi
bGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAg
aWYgKG1fZW5hYmxlZCA9PSBlbmFibGVkKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBt
X2VuYWJsZWQgPSBlbmFibGVkOwogCiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBFbmRlZCkKICAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGZvciAoVmVjdG9yPE9ic2VydmVyKj46Oml0ZXJhdG9y
IGkgPSBtX29ic2VydmVycy5iZWdpbigpOyBpICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2kpCi0g
ICAgICAgICgqaSktPnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7CisKKyAgICBpZiAoIWVuYWJsZWQp
CisgICAgICAgIHN0b3BQcm9kdWNpbmdEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBzdGFydFBy
b2R1Y2luZ0RhdGEoKTsKKworICAgIGZvciAoYXV0byBvYnNlcnZlciA9IG1fb2JzZXJ2ZXJzLmJl
Z2luKCk7IG9ic2VydmVyICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK29ic2VydmVyKQorICAgICAg
ICAoKm9ic2VydmVyKS0+c291cmNlRW5hYmxlZENoYW5nZWQoKTsKIH0KIAogYm9vbCBNZWRpYVN0
cmVhbVNvdXJjZTo6cmVhZG9ubHkoKSBjb25zdAogewotICAgIC8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSL21lZGlhY2FwdHVyZS1zdHJlYW1zLyN3aWRsLU1lZGlhU3RyZWFtVHJhY2stX3JlYWRvbmx5
Ci0gICAgLy8gSWYgdGhlIHRyYWNrIChhdWRpbyBvciB2aWRlbykgaXMgYmFja2VkIGJ5IGEgcmVh
ZC1vbmx5IHNvdXJjZSBzdWNoIGFzIGEgZmlsZSwgb3IgdGhlIHRyYWNrIHNvdXJjZSAKLSAgICAv
LyBpcyBhIGxvY2FsIG1pY3JvcGhvbmUgb3IgY2FtZXJhLCBidXQgaXMgc2hhcmVkIHNvIHRoYXQg
dGhpcyB0cmFjayBjYW5ub3QgbW9kaWZ5IGFueSBvZiB0aGUgc291cmNlJ3MKLSAgICAvLyBzZXR0
aW5ncywgdGhlIHJlYWRvbmx5IGF0dHJpYnV0ZSBtdXN0IHJldHVybiB0aGUgdmFsdWUgdHJ1ZS4g
T3RoZXJ3aXNlLCBpdCBtdXN0IHJldHVybiB0aGUgdmFsdWUgZmFsc2UuCiAgICAgcmV0dXJuIG1f
cmVhZG9ubHk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6OnN0b3AoKQogewotICAgIGZv
ciAoVmVjdG9yPE9ic2VydmVyKj46Oml0ZXJhdG9yIGkgPSBtX29ic2VydmVycy5iZWdpbigpOyBp
ICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKCEoKmkpLT5zdG9wcGVk
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVGhlcmUgYXJlIG5vIG1v
cmUgY29uc3VtZXJzIG9mIHRoaXMgc291cmNlJ3MgZGF0YSwgc2h1dCBpdCBkb3duIGFzIGFwcHJv
cHJpYXRlLgorICAgIC8vIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIHRyYWNrLnN0b3AoKSBtZXRo
b2QsIHdoaWNoIHNob3VsZCAiUGVybWFuZW50bHkgc3RvcCB0aGUgZ2VuZXJhdGlvbiBvZiBkYXRh
CisgICAgLy8gZm9yIHRyYWNrJ3Mgc291cmNlIiwgc28gZ28gc3RyYWlnaHQgdG8gZW5kZWQuIFRo
aXMgd2lsbCBub3RpZnkgYW55IG90aGVyIHRyYWNrcyB1c2luZyB0aGlzIHNvdXJjZQorICAgIC8v
IHRoYXQgaXQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS4KICAgICBzZXRSZWFkeVN0YXRlKEVuZGVk
KTsKLQotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL21lZGlhY2FwdHVyZS1zdHJlYW1zLyN3
aWRsLU1lZGlhU3RyZWFtVHJhY2stc3RvcC12b2lkCi0gICAgLy8gSWYgdGhlIGRhdGEgaXMgYmVp
bmcgZ2VuZXJhdGVkIGZyb20gYSBsaXZlIHNvdXJjZSAoZS5nLiwgYSBtaWNyb3Bob25lIG9yIGNh
bWVyYSksIHRoZW4gdGhlIHVzZXIgCi0gICAgLy8gYWdlbnQgc2hvdWxkIHJlbW92ZSBhbnkgYWN0
aXZlICJvbi1haXIiIGluZGljYXRvciBmb3IgdGhhdCBzb3VyY2UuIElmIHRoZSBkYXRhIGlzIGJl
aW5nIAotICAgIC8vIGdlbmVyYXRlZCBmcm9tIGEgcHJlcmVjb3JkZWQgc291cmNlIChlLmcuIGEg
dmlkZW8gZmlsZSksIGFueSByZW1haW5pbmcgY29udGVudCBpbiB0aGUgZmlsZSBpcyBpZ25vcmVk
LgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmgJKHJldmlz
aW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDU5ICs0Nyw2NSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBBdWRpb0J1czsKIGNsYXNzIE1lZGlhQ29uc3RyYWludHM7CiBj
bGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7Ci1zdHJ1Y3QgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0
ZXM7CitjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczsKIAogY2xhc3MgTWVkaWFTdHJlYW1T
b3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbVNvdXJjZT4gewogcHVibGljOgog
ICAgIGNsYXNzIE9ic2VydmVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk9ic2Vy
dmVyKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VTdGF0ZUNoYW5nZWQoKSA9IDA7
CisgICAgICAgIAorICAgICAgICAvLyBTb3VyY2Ugc3RhdGUgY2hhbmdlcy4KKyAgICAgICAgdmly
dHVhbCB2b2lkIHNvdXJjZVJlYWR5U3RhdGVDaGFuZ2VkKCkgPSAwOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc291
cmNlRW5hYmxlZENoYW5nZWQoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBzdG9wcGVkKCkg
PSAwOwotICAgIH07CiAKLSAgICBlbnVtIFR5cGUgeyBBdWRpbywgVmlkZW8gfTsKLSAgICBlbnVt
IFJlYWR5U3RhdGUgeyBOZXcgPSAwLCBMaXZlID0gMSwgRW5kZWQgPSAyIH07CisgICAgICAgIC8v
IE9ic2VydmVyIHN0YXRlIHF1ZXJpZXMuCisgICAgICAgIHZpcnR1YWwgYm9vbCBvYnNlcnZlcklz
RW5hYmxlZCgpID0gMDsKKyAgICB9OwogCiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1Tb3VyY2Uo
KSB7IH0KIAogICAgIGJvb2wgaXNBdWRpb1N0cmVhbVNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUoKSA9PSBBdWRpbzsgfQogICAgIHZpcnR1YWwgYm9vbCB1c2VJREZvclRyYWNrSUQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCByZXNldCgpOwotCiAgICAgY29uc3QgU3Ry
aW5nJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIGVudW0gVHlwZSB7IE5vbmUs
IEF1ZGlvLCBWaWRlbyB9OwogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorCisg
ICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9uYW1lID0g
bmFtZTsgfQogCiAgICAgdmlydHVhbCBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRp
ZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IE1lZGlhU3Ry
ZWFtU291cmNlU3RhdGVzJiBzdGF0ZXMoKSA9IDA7CiAgICAgCi0gICAgdm9pZCBzZXRSZWFkeVN0
YXRlKFJlYWR5U3RhdGUpOwotICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVhZHlTdGF0ZTsgfQotCi0gICAgdm9pZCBhZGRPYnNlcnZlcihPYnNlcnZlciopOwot
ICAgIHZvaWQgcmVtb3ZlT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKKyAgICBlbnVtIFJlYWR5U3RhdGUg
eyBOZXcgPSAwLCBMaXZlID0gMSwgRW5kZWQgPSAyIH07CisgICAgdmlydHVhbCBSZWFkeVN0YXRl
IHJlYWR5U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0UmVhZHlTdGF0ZShSZWFkeVN0YXRlKTsKIAotICAgIHZvaWQgc2V0Q29uc3RyYWlu
dHMoUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7Ci0gICAgTWVkaWFDb25zdHJhaW50cyog
Y29uc3RyYWludHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5hYmxlZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwog
Ci0gICAgYm9vbCBlbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9Ci0gICAgdm9p
ZCBzZXRFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBtdXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbXV0ZWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCk7CiAKLSAgICBi
b29sIG11dGVkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRlZDsgfQotICAgIHZvaWQgc2V0TXV0ZWQo
Ym9vbCk7CisgICAgdmlydHVhbCBib29sIHJlYWRvbmx5KCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHNldFJlYWRvbmx5KGJvb2wgcmVhZG9ubHkpIHsgbV9yZWFkb25seSA9IHJlYWRvbmx5OyB9
CiAKLSAgICBib29sIHJlYWRvbmx5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSZWFkb25seShib29s
IHJlYWRvbmx5KSB7IG1fcmVhZG9ubHkgPSByZWFkb25seTsgfQorICAgIHZpcnR1YWwgYm9vbCBy
ZW1vdGUoKSBjb25zdCB7IHJldHVybiBtX3JlbW90ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRS
ZW1vdGUoYm9vbCByZW1vdGUpIHsgbV9yZW1vdGUgPSByZW1vdGU7IH0KIAotICAgIGJvb2wgcmVt
b3RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdGU7IH0KLSAgICB2b2lkIHNldFJlbW90ZShib29s
IHJlbW90ZSkgeyBtX3JlbW90ZSA9IHJlbW90ZTsgfQorICAgIHZvaWQgYWRkT2JzZXJ2ZXIoT2Jz
ZXJ2ZXIqKTsKKyAgICB2b2lkIHJlbW92ZU9ic2VydmVyKE9ic2VydmVyKik7CisgICAgCisgICAg
dmlydHVhbCB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBz
dG9wUHJvZHVjaW5nRGF0YSgpIHsgfQogCiAgICAgdm9pZCBzdG9wKCk7CiAKKyAgICB2b2lkIHJl
c2V0KCk7CisKIHByb3RlY3RlZDoKICAgICBNZWRpYVN0cmVhbVNvdXJjZShjb25zdCBTdHJpbmcm
IGlkLCBUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCkBAIC0xMDksOCArMTE1LDYgQEAgcHJp
dmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwog
ICAgIFZlY3RvcjxPYnNlcnZlcio+IG1fb2JzZXJ2ZXJzOwotICAgIFJlZlB0cjxNZWRpYUNvbnN0
cmFpbnRzPiBtX2NvbnN0cmFpbnRzOwotICAgIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzIG1fc3Rh
dGVzOwogCiAgICAgYm9vbCBtX2VuYWJsZWQ7CiAgICAgYm9vbCBtX211dGVkOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmls
aXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNTgwMjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZUNhcGFi
aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw0MCArMjgsMTMgQEAKIAogI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCiAKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXN0cnVjdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTb3Vy
Y2VUeXBlIHsgTm9uZSwgQ2FtZXJhLCBNaWNyb3Bob25lIH07Ci0gICAgZW51bSBWaWRlb0ZhY2lu
Z01vZGUgeyBVc2VyLCBFbnZpcm9ubWVudCwgTGVmdCwgUmlnaHQgfTsKLQotICAgIE1lZGlhU3Ry
ZWFtU291cmNlU3RhdGVzKCkKLSAgICAgICAgOiBzb3VyY2VUeXBlKE5vbmUpCi0gICAgICAgICwg
ZmFjaW5nTW9kZShVc2VyKQotICAgICAgICAsIHdpZHRoKDApCi0gICAgICAgICwgaGVpZ2h0KDAp
Ci0gICAgICAgICwgZnJhbWVSYXRlKDApCi0gICAgICAgICwgYXNwZWN0UmF0aW8oMCkKLSAgICAg
ICAgLCB2b2x1bWUoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgU291cmNlVHlwZSBzb3VyY2VUeXBl
OwotICAgIEF0b21pY1N0cmluZyBzb3VyY2VJZDsKLSAgICBWaWRlb0ZhY2luZ01vZGUgZmFjaW5n
TW9kZTsKLSAgICB1bnNpZ25lZCBsb25nIHdpZHRoOwotICAgIHVuc2lnbmVkIGxvbmcgaGVpZ2h0
OwotICAgIGZsb2F0IGZyYW1lUmF0ZTsKLSAgICBmbG9hdCBhc3BlY3RSYXRpbzsKLSAgICB1bnNp
Z25lZCBsb25nIHZvbHVtZTsKLSAgICAKLSAgICBib29sIGhhc1ZpZGVvU291cmNlOwotfTsKLQog
Y2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXR5UmFuZ2UgewogcHVibGljOgogICAgIApA
QCAtMTE4LDYgKzkxLDcgQEAgcHVibGljOgogICAgIH5NZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxp
dGllcygpIHsgfQogCiAgICAgY29uc3QgVmVjdG9yPE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpT
b3VyY2VUeXBlPiYgc291cmNlVHlwZXMoKSB7IHJldHVybiBtX3NvdXJjZVR5cGU7IH0KKyAgICB2
b2lkIHNldFNvdXJjZVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlNvdXJjZVR5cGUgc291
cmNlVHlwZSkgeyBtX3NvdXJjZVR5cGUucmVzaXplVG9GaXQoMSk7IGFkZFNvdXJjZVR5cGUoc291
cmNlVHlwZSk7IH0KICAgICB2b2lkIGFkZFNvdXJjZVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0
ZXM6OlNvdXJjZVR5cGUgc291cmNlVHlwZSkKICAgICB7CiAgICAgICAgIGlmIChzb3VyY2VUeXBl
ID09IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpDYW1lcmEpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1T
b3VyY2VTdGF0ZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oIgorCisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShN
ZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlIG1vZGUpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdXNlckZhY2luZygidXNlciIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGVudmlyb25tZW50RmFjaW5nKCJlbnZpcm9ubWVudCIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxB
dG9taWNTdHJpbmc+IGxlZnRGYWNpbmcoImxlZnQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiByaWdo
dEZhY2luZygicmlnaHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAg
ICAKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
OjpVc2VyOgorICAgICAgICByZXR1cm4gdXNlckZhY2luZzsKKyAgICBjYXNlIE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzOjpFbnZpcm9ubWVudDoKKyAgICAgICAgcmV0dXJuIGVudmlyb25tZW50RmFj
aW5nOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkxlZnQ6CisgICAgICAgIHJl
dHVybiBsZWZ0RmFjaW5nOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlJpZ2h0
OgorICAgICAgICByZXR1cm4gcmlnaHRGYWNpbmc7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJj
ZVN0YXRlczo6VW5rbm93bjoKKyAgICAgICAgcmV0dXJuIGVtcHR5QXRvbTsKKyAgICB9CisgICAg
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGVtcHR5QXRvbTsKK30KKwor
Y29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6c291cmNlVHlwZShN
ZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6U291cmNlVHlwZSBzb3VyY2VUeXBlKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG5vbmUoIm5vbmUiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBjYW1lcmEoImNhbWVyYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1pY3JvcGhv
bmUoIm1pY3JvcGhvbmUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAg
ICAKKyAgICBzd2l0Y2ggKHNvdXJjZVR5cGUpIHsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNl
U3RhdGVzOjpOb25lOgorICAgICAgICByZXR1cm4gbm9uZTsKKyAgICBjYXNlIE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzOjpDYW1lcmE6CisgICAgICAgIHJldHVybiBjYW1lcmE7CisgICAgY2FzZSBN
ZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6TWljcm9waG9uZToKKyAgICAgICAgcmV0dXJuIG1pY3Jv
cGhvbmU7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBlbXB0eUF0b207Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlU3RhdGVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVNvdXJjZVN0YXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXNfaAorI2RlZmluZSBNZWRpYVN0cmVhbVNv
dXJjZVN0YXRlc19oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFT
dHJlYW1Tb3VyY2VTdGF0ZXMgeworcHVibGljOgorICAgIGVudW0gU291cmNlVHlwZSB7IE5vbmUs
IENhbWVyYSwgTWljcm9waG9uZSB9OworICAgIGVudW0gVmlkZW9GYWNpbmdNb2RlIHsgVW5rbm93
biwgVXNlciwgRW52aXJvbm1lbnQsIExlZnQsIFJpZ2h0IH07CisKKyAgICBNZWRpYVN0cmVhbVNv
dXJjZVN0YXRlcygpCisgICAgICAgIDogbV9zb3VyY2VUeXBlKE5vbmUpCisgICAgICAgICwgbV9m
YWNpbmdNb2RlKFVua25vd24pCisgICAgICAgICwgbV93aWR0aCgwKQorICAgICAgICAsIG1faGVp
Z2h0KDApCisgICAgICAgICwgbV9mcmFtZVJhdGUoMCkKKyAgICAgICAgLCBtX2FzcGVjdFJhdGlv
KDApCisgICAgICAgICwgbV92b2x1bWUoMCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIGNv
bnN0IEF0b21pY1N0cmluZyYgc291cmNlVHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6U291
cmNlVHlwZSk7CisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZmFjaW5nTW9kZShNZWRp
YVN0cmVhbVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlKTsKKworICAgIFNvdXJjZVR5cGUg
c291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVHlwZTsgfQorICAgIHZvaWQgc2V0
U291cmNlVHlwZShTb3VyY2VUeXBlIHR5cGUpIHsgbV9zb3VyY2VUeXBlID0gdHlwZTsgfQorCisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzb3VyY2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
SWQ7IH0KKyAgICB2b2lkIHNldFNvdXJjZUlkKGNvbnN0IEF0b21pY1N0cmluZyYgc291cmNlSWQp
IHsgbV9zb3VyY2VJZCA9IHNvdXJjZUlkOyB9CisKKyAgICBWaWRlb0ZhY2luZ01vZGUgZmFjaW5n
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmFjaW5nTW9kZTsgfQorICAgIHZvaWQgc2V0RmFjaW5n
TW9kZShWaWRlb0ZhY2luZ01vZGUgZmFjaW5nTW9kZSkgeyBtX2ZhY2luZ01vZGUgPSBmYWNpbmdN
b2RlOyB9CisgICAgCisgICAgdW5zaWduZWQgbG9uZyB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
d2lkdGg7IH0KKyAgICB2b2lkIHNldFdpZHRoKHVuc2lnbmVkIGxvbmcgd2lkdGgpIHsgbV93aWR0
aCA9IHdpZHRoOyB9CisgICAgCisgICAgdW5zaWduZWQgbG9uZyBoZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX2hlaWdodDsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KHVuc2lnbmVkIGxvbmcgaGVpZ2h0
KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9CisgICAgCisgICAgZmxvYXQgZnJhbWVSYXRlKCkgY29u
c3QgeyByZXR1cm4gbV9mcmFtZVJhdGU7IH0KKyAgICB2b2lkIHNldEZyYW1lUmF0ZShmbG9hdCBm
cmFtZVJhdGUpIHsgbV9mcmFtZVJhdGUgPSBmcmFtZVJhdGU7IH0KKyAgICAKKyAgICBmbG9hdCBh
c3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fYXNwZWN0UmF0aW87IH0KKyAgICB2b2lkIHNl
dEFzcGVjdFJhdGlvKGZsb2F0IGFzcGVjdFJhdGlvKSB7IG1fYXNwZWN0UmF0aW8gPSBhc3BlY3RS
YXRpbzsgfQorICAgIAorICAgIHVuc2lnbmVkIGxvbmcgdm9sdW1lKCkgY29uc3QgeyByZXR1cm4g
bV92b2x1bWU7IH0KKyAgICB2b2lkIHNldFZvbHVtZSh1bnNpZ25lZCBsb25nIHZvbHVtZSkgeyBt
X3ZvbHVtZSA9IHZvbHVtZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBTb3VyY2VUeXBlIG1fc291
cmNlVHlwZTsKKyAgICBBdG9taWNTdHJpbmcgbV9zb3VyY2VJZDsKKyAgICBWaWRlb0ZhY2luZ01v
ZGUgbV9mYWNpbmdNb2RlOworICAgIHVuc2lnbmVkIGxvbmcgbV93aWR0aDsKKyAgICB1bnNpZ25l
ZCBsb25nIG1faGVpZ2h0OworICAgIGZsb2F0IG1fZnJhbWVSYXRlOworICAgIGZsb2F0IG1fYXNw
ZWN0UmF0aW87CisgICAgdW5zaWduZWQgbG9uZyBtX3ZvbHVtZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzX2gKKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCShyZXZpc2lvbiAxNTgxMTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKIAogI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCiAKKyNpbmNsdWRlICJNZWRpYVNvdXJjZVN0YXRl
cy5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJVVUlELmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAKQEAgLTM2LDQyICszOSw0MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
OjpjcmVhdGUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gc291cmNlKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoc291cmNlLmdldCgpKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShzb3VyY2Up
KTsKIH0KIAogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
KE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiBvdGhlcikKKyAgICA6IG1fY2xpZW50KG51bGxwdHIp
CiB7Ci0gICAgLy8gV2hlbiB0aGUgY2xvbmUoKSBtZXRob2QgaXMgaW52b2tlZCwgdGhlIHVzZXIg
YWdlbnQgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICAvLyAxLiBMZXQgdHJhY2tD
bG9uZSBiZSBhIG5ld2x5IGNvbnN0cnVjdGVkIE1lZGlhU3RyZWFtVHJhY2sgb2JqZWN0LgotICAg
IC8vIDIuIEluaXRpYWxpemUgdHJhY2tDbG9uZSdzIGlkIGF0dHJpYnV0ZSB0byBhIG5ld2x5IGdl
bmVyYXRlZCB2YWx1ZS4KICAgICBtX2lkID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwot
Ci0gICAgLy8gMy4gTGV0IHRyYWNrQ2xvbmUgaW5oZXJpdCB0aGlzIHRyYWNrJ3MgdW5kZXJseWlu
ZyBzb3VyY2UsIGtpbmQsIGxhYmVsIGFuZCBlbmFibGVkIGF0dHJpYnV0ZXMuCi0gICAgbV9zb3Vy
Y2UgPSBvdGhlci0+c291cmNlKCk7CisgICAgc2V0U291cmNlKG90aGVyLT5zb3VyY2UoKSk7CiAg
ICAgbV9yZWFkeVN0YXRlID0gbV9zb3VyY2UgPyBtX3NvdXJjZS0+cmVhZHlTdGF0ZSgpIDogTWVk
aWFTdHJlYW1Tb3VyY2U6Ok5ldzsKLSAgICBtX2VuYWJsZWQgPSBvdGhlci0+ZW5hYmxlZCgpOwot
Ci0gICAgLy8gTm90ZTogdGhlICJjbG9uZSIgc3RlcHMgZG9uJ3Qgc2F5IGFueXRoaW5nIGFib3V0
ICdtdXRlZCcsIGJ1dCA0LjMuMSBzYXlzOgotICAgIC8vIEZvciBhIG5ld2x5IGNyZWF0ZWQgTWVk
aWFTdHJlYW1UcmFjayBvYmplY3QsIHRoZSBmb2xsb3dpbmcgYXBwbGllcy4gVGhlIHRyYWNrIGlz
IGFsd2F5cyBlbmFibGVkCi0gICAgLy8gdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UgKGZvciBleGFt
bHBlIHdoZW4gY2xvbmVkKSBhbmQgdGhlIG11dGVkIHN0YXRlIHJlZmxlY3RzIHRoZSBzdGF0ZSBv
ZiB0aGUKLSAgICAvLyBzb3VyY2UgYXQgdGhlIHRpbWUgdGhlIHRyYWNrIGlzIGNyZWF0ZWQuCiAg
ICAgbV9tdXRlZCA9IG90aGVyLT5tdXRlZCgpOworICAgIG1fZW5hYmxlZCA9IG90aGVyLT5lbmFi
bGVkKCk7CiAgICAgbV9zdG9wcGVkID0gb3RoZXItPnN0b3BwZWQoKTsKIH0KIAotTWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKE1lZGlhU3RyZWFtU291cmNl
KiBzb3VyY2UpCi0gICAgOiBtX3NvdXJjZSgwKQorTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJj
ZSkKKyAgICA6IG1fc291cmNlKG51bGxwdHIpCisgICAgLCBtX2NsaWVudChudWxscHRyKQogICAg
ICwgbV9yZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpOZXcpCiAgICAgLCBtX211dGVkKGZh
bHNlKQogICAgICwgbV9lbmFibGVkKHRydWUpCiAgICAgLCBtX3N0b3BwZWQoZmFsc2UpCi0gICAg
LCBtX2NsaWVudCgwKQogewogICAgIHNldFNvdXJjZShzb3VyY2UpOwogfQogCi12b2lkIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlOjpzZXRTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSkK
K01lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjp+TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoKQogewor
ICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAgbV9zb3VyY2UtPnJlbW92ZU9ic2VydmVyKHRoaXMp
OworfQorCit2b2lkIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzZXRTb3VyY2UoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbVNvdXJjZT4gc291cmNlKQoreworICAgIGlmIChtX3NvdXJjZSkKKyAgICAg
ICAgbV9zb3VyY2UtPnJlbW92ZU9ic2VydmVyKHRoaXMpOworCiAgICAgbV9zb3VyY2UgPSBzb3Vy
Y2U7CiAKICAgICBpZiAoIW1fc291cmNlKQpAQCAtNzksMjIgKzgyLDggQEAgdm9pZCBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6c2V0U291cmNlKAogCiAgICAgc2V0TXV0ZWQobV9zb3VyY2UtPm11
dGVkKCkpOwogICAgIHNldFJlYWR5U3RhdGUobV9zb3VyY2UtPnJlYWR5U3RhdGUoKSk7Ci19Ci0K
LWJvb2wgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnNob3VsZEZpcmVUcmFja1JlYWR5U3RhdGVD
aGFuZ2VkKE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRlIG9sZFN0YXRlKQotewotICAgIHJl
dHVybiAobV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpMaXZlICYmIG9sZFN0YXRl
ID09IE1lZGlhU3RyZWFtU291cmNlOjpOZXcpIHx8IChtX3JlYWR5U3RhdGUgPT0gTWVkaWFTdHJl
YW1Tb3VyY2U6OkVuZGVkICYmIG9sZFN0YXRlICE9IE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCk7
Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmtpbmQo
KSBjb25zdAotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGF1ZGlv
KCJhdWRpbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHZpZGVvKCJ2aWRlbyIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgaWYgKG1fdHlwZSA9PSBNZWRpYVN0cmVh
bVNvdXJjZTo6QXVkaW8pCi0gICAgICAgIHJldHVybiBhdWRpbzsKLQotICAgIHJldHVybiB2aWRl
bzsKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIG1fc291cmNlLT5hZGRPYnNlcnZlcih0aGlz
KTsKIH0KIAogY29uc3QgU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6aWQoKSBjb25z
dApAQCAtMTcwLDYgKzE1OSwyNCBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzZXRF
bmFibGVkCiAgICAgLy8gLi4uIGFmdGVyIGEgTWVkaWFTdHJlYW1UcmFjayBpcyBkaXNhc3NvY2lh
dGVkIGZyb20gaXRzIHRyYWNrLCBpdHMgZW5hYmxlZCBhdHRyaWJ1dGUgc3RpbGwKICAgICAvLyBj
aGFuZ2VzIHZhbHVlIHdoZW4gc2V0OyBpdCBqdXN0IGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCB0
aGF0IG5ldyB2YWx1ZS4KICAgICBtX2VuYWJsZWQgPSBlbmFibGVkOworCisgICAgaWYgKG1fc291
cmNlKQorICAgICAgICBtX3NvdXJjZS0+c2V0RW5hYmxlZChlbmFibGVkKTsKKworICAgIGlmICht
X2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnRyYWNrRW5hYmxlZENoYW5nZWQoKTsKK30KKwor
dm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c3RvcChTdG9wQmVoYXZpb3Igc3RvcFNvdXJj
ZSkKK3sKKyAgICBpZiAobV9zdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3Rv
cFNvdXJjZSA9PSBTdG9wVHJhY2tBbmRTdG9wU291cmNlICYmIG1fc291cmNlKQorICAgICAgICBt
X3NvdXJjZS0+c3RvcCgpOworCisgICAgc2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6
RW5kZWQpOworICAgIG1fc3RvcHBlZCA9IHRydWU7CiB9CiAKIE1lZGlhU3RyZWFtU291cmNlOjpS
ZWFkeVN0YXRlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpyZWFkeVN0YXRlKCkgY29uc3QKQEAg
LTE4OCw3ICsxOTUsMTAgQEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0UmVhZHlT
dAogICAgIE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRlIG9sZFN0YXRlID0gbV9yZWFkeVN0
YXRlOwogICAgIG1fcmVhZHlTdGF0ZSA9IHN0YXRlOwogCi0gICAgaWYgKG1fY2xpZW50ICYmIHNo
b3VsZEZpcmVUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKG9sZFN0YXRlKSkKKyAgICBpZiAoIW1fY2xp
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoKG1fcmVhZHlTdGF0ZSA9PSBNZWRpYVN0
cmVhbVNvdXJjZTo6TGl2ZSAmJiBvbGRTdGF0ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6TmV3KSB8
fCBtX3JlYWR5U3RhdGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkVuZGVkKQogICAgICAgICBtX2Ns
aWVudC0+dHJhY2tSZWFkeVN0YXRlQ2hhbmdlZCgpOwogfQogCkBAIC0xOTcsNiArMjA3LDgwIEBA
IFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gTWVkaWFTdHIKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKHRoaXMpKTsKIH0KIAorICAgIAorUmVm
UHRyPE1lZGlhQ29uc3RyYWludHM+IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjb25zdHJhaW50
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29uc3RyYWludHM7Cit9CisKK2NvbnN0IE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzJiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c3RhdGVzKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fc291cmNlKSB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMsIG5vU3RhdGUsICgpKTsKKyAgICAgICAgcmV0
dXJuIG5vU3RhdGU7CisgICAgfQorICAgIAorICAgIHJldHVybiBtX3NvdXJjZS0+c3RhdGVzKCk7
Cit9CisKK01lZGlhU3RyZWFtU291cmNlOjpUeXBlIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjp0
eXBlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm4gTWVkaWFT
dHJlYW1Tb3VyY2U6Ok5vbmU7CisKKyAgICByZXR1cm4gbV9zb3VyY2UtPnR5cGUoKTsKK30KKwor
UmVmUHRyPE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzPiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6
Y2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1
cm4gMDsKKyAgICAKKyAgICAvLyBUaGUgc291cmNlIG1heSBiZSBzaGFyZWQgYnkgbXVsdGlwbGUg
dHJhY2tzLCBzbyBpdHMgc3RhdGVzIGlzIG5vdCBuZWNlc3NhcmlseQorICAgIC8vIGluIHN5bmMg
d2l0aCB0aGUgdHJhY2sgc3RhdGUuIEEgdHJhY2sgdGhhdCBpcyBuZXcgb3IgaGFzIGVuZGVkIGFs
d2F5cyBoYXMgYSBzb3VyY2UKKyAgICAvLyB0eXBlIG9mICJub25lIi4KKyAgICBSZWZQdHI8TWVk
aWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXM+IHNvdXJjZUNhcGFiaWxpdGllcyA9IG1fc291cmNl
LT5jYXBhYmlsaXRpZXMoKTsKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291
cmNlOjpOZXcgfHwgbV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCkKKyAg
ICAgICAgc291cmNlQ2FwYWJpbGl0aWVzLT5zZXRTb3VyY2VUeXBlKE1lZGlhU3RyZWFtU291cmNl
U3RhdGVzOjpOb25lKTsKKyAgICAKKyAgICByZXR1cm4gTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM6
OmNyZWF0ZShzb3VyY2VDYXBhYmlsaXRpZXMucmVsZWFzZSgpKTsKK30KKwordm9pZCBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6YXBwbHlDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhQ29uc3Ry
YWludHM+KQoreworICAgIC8vIEZJWE1FOiBhcHBseSB0aGUgbmV3IGNvbnN0cmFpbnRzIHRvIHRo
ZSB0cmFjaworICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjI0MjgKK30KKwordm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c291cmNlUmVhZHlTdGF0
ZUNoYW5nZWQoKQoreworICAgIGlmIChzdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBzZXRSZWFkeVN0YXRlKG1fc291cmNlLT5yZWFkeVN0YXRlKCkpOworfQorCit2b2lkIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzb3VyY2VNdXRlZENoYW5nZWQoKQoreworICAgIGlmIChz
dG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzZXRNdXRlZChtX3NvdXJjZS0+
bXV0ZWQoKSk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnNvdXJjZUVuYWJs
ZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoc3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgc2V0RW5hYmxlZChtX3NvdXJjZS0+ZW5hYmxlZCgpKTsKK30KKworYm9vbCBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6b2JzZXJ2ZXJJc0VuYWJsZWQoKQoreworICAgIHJldHVybiBlbmFi
bGVkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgJKHJldmlzaW9uIDE1
ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
VHJhY2tQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE4ICszNSwyNCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIE1lZGlhU291cmNlU3RhdGVzOworY2xhc3MgTWVkaWFT
dHJlYW1DYXBhYmlsaXRpZXM7CisKIGNsYXNzIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50
IHsKIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUNsaWVudCgp
IHsgfQorCiAgICAgdmlydHVhbCB2b2lkIHRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB0cmFja0VuYWJsZWRDaGFuZ2VkKCkgPSAwOwogfTsKIAotY2xhc3MgTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gewor
Y2xhc3MgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4sIHB1YmxpYyBNZWRpYVN0cmVhbVNvdXJjZTo6T2JzZXJ2ZXIgewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBj
cmVhdGUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4pOwotICAgIHZpcnR1YWwgfk1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlKCkgeyB9CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGtpbmQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSgpOworCiAgICAg
Y29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgbGFiZWwoKSBjb25z
dDsKIApAQCAtNjcsMjkgKzczLDQ2IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU+IGNsb25lKCk7CiAKICAgICBNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFNvdXJjZShNZWRp
YVN0cmVhbVNvdXJjZSopOworICAgIHZvaWQgc2V0U291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1Tb3VyY2U+KTsKIAotICAgIHZvaWQgc3RvcCgpIHsgbV9zdG9wcGVkID0gdHJ1ZTsgfQorICAg
IGVudW0gU3RvcEJlaGF2aW9yIHsgU3RvcFRyYWNrQW5kU3RvcFNvdXJjZSwgU3RvcFRyYWNrT25s
eSB9OworICAgIHZvaWQgc3RvcChTdG9wQmVoYXZpb3IpOwogICAgIGJvb2wgc3RvcHBlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RvcHBlZDsgfQorICAgIAorICAgIHZvaWQgc2V0Q2xpZW50KE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0K
IAotICAgIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KKyAgICBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlKCkgY29uc3Q7CisKKyAgICBj
b25zdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyYgc3RhdGVzKCkgY29uc3Q7CisgICAgUmVmUHRy
PE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzPiBjYXBhYmlsaXRpZXMoKSBjb25zdDsKKworICAgIFJl
ZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBjb25zdHJhaW50cygpIGNvbnN0OworICAgIHZvaWQgYXBw
bHlDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KTsKKworICAgIHZvaWQg
Y29uZmlndXJlVHJhY2tSZW5kZXJpbmcoKTsKIAotICAgIHZvaWQgc2V0Q2xpZW50KE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KIHBy
b3RlY3RlZDoKICAgICBleHBsaWNpdCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZSopOwotICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKE1lZGlhU3RyZWFt
U291cmNlKik7CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbVNvdXJjZT4pOwogCiBwcml2YXRlOgotICAgIGJvb2wgc2hvdWxkRmlyZVRyYWNrUmVhZHlT
dGF0ZUNoYW5nZWQoTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUpOworICAgIE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsg
fQorCisgICAgLy8gTWVkaWFTdHJlYW1Tb3VyY2VPYnNlcnZlcgorICAgIHZpcnR1YWwgdm9pZCBz
b3VyY2VSZWFkeVN0YXRlQ2hhbmdlZCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9p
ZCBzb3VyY2VNdXRlZENoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQg
c291cmNlRW5hYmxlZENoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIGJvb2wg
b2JzZXJ2ZXJJc0VuYWJsZWQoKSBPVkVSUklERSBGSU5BTDsKKyAgICAKICAgICBSZWZQdHI8TWVk
aWFTdHJlYW1Tb3VyY2U+IG1fc291cmNlOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xp
ZW50KiBtX2NsaWVudDsKKyAgICBSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gbV9jb25zdHJhaW50
czsKICAgICBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiAgICAg
bXV0YWJsZSBTdHJpbmcgbV9pZDsKIAogICAgIGJvb2wgbV9tdXRlZDsKICAgICBib29sIG1fZW5h
YmxlZDsKICAgICBib29sIG1fc3RvcHBlZDsKLSAgICBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSBt
X3R5cGU7Ci0gICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVDbGllbnQqIG1fY2xpZW50OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWQXVkaW9DYXB0dXJlU291cmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQXVkaW9DYXB0dXJlU291cmNl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQVZBdWRpb0NhcHR1cmVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEFWQXVkaW9DYXB0dXJlU291cmNlX2gKKyNkZWZpbmUgQVZBdWRp
b0NhcHR1cmVTb3VyY2VfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9V
TkRBVElPTikKKworI2luY2x1ZGUgIkFWTWVkaWFDYXB0dXJlU291cmNlLmgiCisKK3R5cGVkZWYg
Y29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24gKkNNRm9ybWF0RGVzY3JpcHRp
b25SZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIEFWQXVkaW9DYXB0dXJl
U291cmNlIDogcHVibGljIEFWTWVkaWFDYXB0dXJlU291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmUHRyPEFWTWVkaWFDYXB0dXJlU291cmNlPiBjcmVhdGUoQVZDYXB0dXJlRGV2aWNlKiwg
Y29uc3QgQXRvbWljU3RyaW5nJiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7CisgICAg
Citwcml2YXRlOgorICAgIEFWQXVkaW9DYXB0dXJlU291cmNlKEFWQ2FwdHVyZURldmljZSosIGNv
bnN0IEF0b21pY1N0cmluZyYsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pOworICAgIHZp
cnR1YWwgfkFWQXVkaW9DYXB0dXJlU291cmNlKCk7CisgICAgCisgICAgdmlydHVhbCBSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVy
RnJvbUNvbm5lY3Rpb24oQVZDYXB0dXJlT3V0cHV0KiwgQ01TYW1wbGVCdWZmZXJSZWYsIEFWQ2Fw
dHVyZUNvbm5lY3Rpb24qKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0dXBD
YXB0dXJlU2Vzc2lvbigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZXMo
KSBPVkVSUklERTsKKyAgICAgICAgCisgICAgUmV0YWluUHRyPEFWQ2FwdHVyZUNvbm5lY3Rpb24+
IG1fYXVkaW9Db25uZWN0aW9uOworICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVm
PiBtX2F1ZGlvRm9ybWF0RGVzY3JpcHRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gQVZWaWRlb0Nh
cHR1cmVTb3VyY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0FWQXVkaW9DYXB0dXJlU291cmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbQkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlv
Q2FwdHVyZVNvdXJjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0Uo
QVZGT1VOREFUSU9OKQorCisjaW1wb3J0ICJBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgorCisjaW1w
b3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgiCisjaW1wb3J0ICJN
ZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oIgorI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9u
Lmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKwordHlwZWRlZiBBVkNhcHR1cmVDb25uZWN0
aW9uIEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlOwordHlwZWRlZiBBVkNhcHR1cmVEZXZpY2UgQVZD
YXB0dXJlRGV2aWNlVHlwZTsKK3R5cGVkZWYgQVZDYXB0dXJlRGV2aWNlSW5wdXQgQVZDYXB0dXJl
RGV2aWNlSW5wdXRUeXBlOwordHlwZWRlZiBBVkNhcHR1cmVPdXRwdXQgQVZDYXB0dXJlT3V0cHV0
VHlwZTsKK3R5cGVkZWYgQVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0IEFWQ2FwdHVyZUF1ZGlvRGF0
YU91dHB1dFR5cGU7CisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9u
KQorCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVBdWRpb0RhdGFPdXRw
dXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVDb25uZWN0aW9uKQor
U09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlRGV2aWNlKQorU09GVF9MSU5L
X0NMQVNTKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlRGV2aWNlSW5wdXQpCitTT0ZUX0xJTktfQ0xB
U1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVPdXRwdXQpCisKKyNkZWZpbmUgQVZDYXB0dXJlQXVk
aW9EYXRhT3V0cHV0IGdldEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dENsYXNzKCkKKyNkZWZpbmUg
QVZDYXB0dXJlQ29ubmVjdGlvbiBnZXRBVkNhcHR1cmVDb25uZWN0aW9uQ2xhc3MoKQorI2RlZmlu
ZSBBVkNhcHR1cmVEZXZpY2UgZ2V0QVZDYXB0dXJlRGV2aWNlQ2xhc3MoKQorI2RlZmluZSBBVkNh
cHR1cmVEZXZpY2VJbnB1dCBnZXRBVkNhcHR1cmVEZXZpY2VJbnB1dENsYXNzKCkKKyNkZWZpbmUg
QVZDYXB0dXJlT3V0cHV0IGdldEFWQ2FwdHVyZU91dHB1dENsYXNzKCkKKworU09GVF9MSU5LX1BP
SU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZUF1ZGlvLCBOU1N0cmluZyAqKQorCisjZGVm
aW5lIEFWTWVkaWFUeXBlQXVkaW8gZ2V0QVZNZWRpYVR5cGVBdWRpbygpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUmVmUHRyPEFWTWVkaWFDYXB0dXJlU291cmNlPiBBVkF1ZGlvQ2FwdHVyZVNv
dXJjZTo6Y3JlYXRlKEFWQ2FwdHVyZURldmljZVR5cGUqIGRldmljZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpZCwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBjb25zdHJhaW50KQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQVZBdWRpb0NhcHR1cmVTb3VyY2UoZGV2aWNlLCBpZCwgY29u
c3RyYWludCkpOworfQorICAgIAorQVZBdWRpb0NhcHR1cmVTb3VyY2U6OkFWQXVkaW9DYXB0dXJl
U291cmNlKEFWQ2FwdHVyZURldmljZVR5cGUqIGRldmljZSwgY29uc3QgQXRvbWljU3RyaW5nJiBp
ZCwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBjb25zdHJhaW50cykKKyAgICA6IEFWTWVk
aWFDYXB0dXJlU291cmNlKGRldmljZSwgaWQsIE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbywgY29u
c3RyYWludHMpCit7CisgICAgY3VycmVudFN0YXRlcygpLT5zZXRTb3VyY2VJZChpZCk7CisgICAg
Y3VycmVudFN0YXRlcygpLT5zZXRTb3VyY2VUeXBlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpN
aWNyb3Bob25lKTsKK30KKyAgICAKK0FWQXVkaW9DYXB0dXJlU291cmNlOjp+QVZBdWRpb0NhcHR1
cmVTb3VyY2UoKQoreworfQorCitSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXM+
IEFWQXVkaW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQVZBdWRpb0NhcHR1cmVTb3Vy
Y2U6OnVwZGF0ZVN0YXRlcygpCit7CisgICAgLy8gRklYTUU6IHVzZSBbQVZDYXB0dXJlQXVkaW9Q
cmV2aWV3T3V0cHV0IHZvbHVtZV0gZm9yIHZvbHVtZQorfQorCit2b2lkIEFWQXVkaW9DYXB0dXJl
U291cmNlOjpzZXR1cENhcHR1cmVTZXNzaW9uKCkKK3sKKyAgICBSZXRhaW5QdHI8QVZDYXB0dXJl
RGV2aWNlSW5wdXRUeXBlPiBhdWRpb0luID0gYWRvcHROUyhbW0FWQ2FwdHVyZURldmljZUlucHV0
IGFsbG9jXSBpbml0V2l0aERldmljZTpkZXZpY2UoKSBlcnJvcjpuaWxdKTsKKyAgICBBU1NFUlQo
W3Nlc3Npb24oKSBjYW5BZGRJbnB1dDphdWRpb0luLmdldCgpXSk7CisgICAgaWYgKFtzZXNzaW9u
KCkgY2FuQWRkSW5wdXQ6YXVkaW9Jbi5nZXQoKV0pCisgICAgICAgIFtzZXNzaW9uKCkgYWRkSW5w
dXQ6YXVkaW9Jbi5nZXQoKV07CisgICAgCisgICAgUmV0YWluUHRyPEFWQ2FwdHVyZUF1ZGlvRGF0
YU91dHB1dFR5cGU+IGF1ZGlvT3V0cHV0ID0gYWRvcHROUyhbW0FWQ2FwdHVyZUF1ZGlvRGF0YU91
dHB1dCBhbGxvY10gaW5pdF0pOworICAgIHNldEF1ZGlvU2FtcGxlQnVmZmVyRGVsZWdhdGUoYXVk
aW9PdXRwdXQuZ2V0KCkpOworICAgIEFTU0VSVChbc2Vzc2lvbigpIGNhbkFkZE91dHB1dDphdWRp
b091dHB1dC5nZXQoKV0pOworICAgIGlmIChbc2Vzc2lvbigpIGNhbkFkZE91dHB1dDphdWRpb091
dHB1dC5nZXQoKV0pCisgICAgICAgIFtzZXNzaW9uKCkgYWRkT3V0cHV0OmF1ZGlvT3V0cHV0Lmdl
dCgpXTsKKyAgICBtX2F1ZGlvQ29ubmVjdGlvbiA9IGFkb3B0TlMoW2F1ZGlvT3V0cHV0LmdldCgp
IGNvbm5lY3Rpb25XaXRoTWVkaWFUeXBlOkFWTWVkaWFUeXBlQXVkaW9dKTsKK30KKwordm9pZCBB
VkF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZy
b21Db25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dFR5cGUqLCBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1w
bGVCdWZmZXIsIEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlKikKK3sKKyAgICBDTUZvcm1hdERlc2Ny
aXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNj
cmlwdGlvbihzYW1wbGVCdWZmZXIpOworICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIENGUmV0YWluKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBtX2F1
ZGlvRm9ybWF0RGVzY3JpcHRpb24gPSBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyX2gKKyNkZWZpbmUgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcl9o
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW5j
bHVkZSAiTWVkaWFTdHJlYW1DZW50ZXIuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5o
IgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudC5oIgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworT0JKQ19DTEFTUyBBVkNhcHR1cmVEZXZpY2U7CitPQkpDX0NMQVNTIEFWQ2FwdHVyZVNlc3Np
b247CitPQkpDX0NMQVNTIE5TU3RyaW5nOworT0JKQ19DTEFTUyBXZWJDb3JlQVZDYXB0dXJlRGV2
aWNlTWFuYWdlck9ic2VydmVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhcHR1
cmVEZXZpY2U7CisKK2NsYXNzIEFWQ2FwdHVyZURldmljZU1hbmFnZXIgeworcHVibGljOgorICAg
IHN0YXRpYyBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgYm9v
bCBpc0F2YWlsYWJsZSgpOworCisgICAgVmVjdG9yPFJlZlB0cjxUcmFja1NvdXJjZUluZm8+PiBn
ZXRTb3VyY2VzSW5mbyhjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIHZlcmlmeUNvbnN0cmFpbnRz
Rm9yTWVkaWFUeXBlKE1lZGlhU3RyZWFtU291cmNlOjpUeXBlLCBNZWRpYUNvbnN0cmFpbnRzKiwg
U3RyaW5nJik7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBiZXN0U291cmNlRm9yVHlw
ZUFuZENvbnN0cmFpbnRzKE1lZGlhU3RyZWFtU291cmNlOjpUeXBlLCBQYXNzUmVmUHRyPE1lZGlh
Q29uc3RyYWludHM+KTsKKworICAgIGVudW0gVmFsaWRDb25zdHJhaW50cyB7IFdpZHRoID0gMCwg
SGVpZ2h0LCBGcmFtZVJhdGUsIEZhY2luZ01vZGUsIEdhaW4gfTsKKyAgICBzdGF0aWMgY29uc3Qg
VmVjdG9yPEF0b21pY1N0cmluZz4mIHZhbGlkQ29uc3RyYWludE5hbWVzKCk7CisgICAgc3RhdGlj
IGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiB2YWxpZEZhY2luZ01vZGVzKCk7CisKKyAgICBz
dGF0aWMgYm9vbCBkZXZpY2VTdXBwb3J0c0ZhY2luZ01vZGUoQVZDYXB0dXJlRGV2aWNlKiwgTWVk
aWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZSk7CisgICAgc3RhdGljIGJvb2wg
aXNWYWxpZENvbnN0cmFpbnQoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUsIGNvbnN0IFN0cmluZyYp
OworICAgIHN0YXRpYyBTdHJpbmcgYmVzdFNlc3Npb25QcmVzZXRGb3JWaWRlb1NpemUoQVZDYXB0
dXJlU2Vzc2lvbiosIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICB2b2lkIHJlZ2lzdGVy
Rm9yRGV2aWNlTm90aWZpY2F0aW9ucygpOworICAgIHZvaWQgZGV2aWNlQ29ubmVjdGVkKCk7Cisg
ICAgdm9pZCBkZXZpY2VEaXNjb25uZWN0ZWQoQVZDYXB0dXJlRGV2aWNlKik7CisKK3Byb3RlY3Rl
ZDoKKyAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyKCk7CisgICAgfkFWQ2FwdHVyZURldmljZU1h
bmFnZXIoKTsKKworICAgIENhcHR1cmVEZXZpY2UqIGJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKE1l
ZGlhU3RyZWFtU291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGUpOworICAgIGJvb2wgc2Vzc2lv
blN1cHBvcnRzQ29uc3RyYWludChBVkNhcHR1cmVTZXNzaW9uKiwgTWVkaWFTdHJlYW1Tb3VyY2U6
OlR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKyAgICBS
ZXRhaW5QdHI8V2ViQ29yZUFWQ2FwdHVyZURldmljZU1hbmFnZXJPYnNlcnZlcj4gbV9vYmpjT2Jz
ZXJ2ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcl9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNl
TWFuYWdlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTM2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04p
CisKKyNpbXBvcnQgIkFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKKworI2ltcG9ydCAiQVZBdWRp
b0NhcHR1cmVTb3VyY2UuaCIKKyNpbXBvcnQgIkFWTWVkaWFDYXB0dXJlU291cmNlLmgiCisjaW1w
b3J0ICJBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9y
dCAiTWVkaWFDb25zdHJhaW50cy5oIgorI2ltcG9ydCAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNp
bXBvcnQgIk1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgIlVVSUQuaCIKKyNpbXBvcnQg
PEFWRm91bmRhdGlvbi9BVkZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgor
I2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorCit0eXBlZGVmIEFWQ2FwdHVyZURldmljZSBBVkNhcHR1cmVEZXZpY2VUeXBlOwordHlwZWRl
ZiBBVkNhcHR1cmVTZXNzaW9uIEFWQ2FwdHVyZVNlc3Npb25UeXBlOworCitTT0ZUX0xJTktfRlJB
TUVXT1JLX09QVElPTkFMKEFWRm91bmRhdGlvbikKKworU09GVF9MSU5LX0NMQVNTKEFWRm91bmRh
dGlvbiwgQVZDYXB0dXJlRGV2aWNlKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZD
YXB0dXJlU2Vzc2lvbikKKworI2RlZmluZSBBVkNhcHR1cmVEZXZpY2UgZ2V0QVZDYXB0dXJlRGV2
aWNlQ2xhc3MoKQorI2RlZmluZSBBVkNhcHR1cmVTZXNzaW9uIGdldEFWQ2FwdHVyZVNlc3Npb25D
bGFzcygpCisKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYVR5cGVBdWRp
bywgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYVR5
cGVNdXhlZCwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZN
ZWRpYVR5cGVWaWRlbywgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlv
biwgQVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwLCBOU1N0cmluZyAqKQorU09GVF9MSU5L
X1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0NjQweDQ4MCwgTlNT
dHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlU2Vzc2lv
blByZXNldDM1MngyODgsIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRp
b24sIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXRMb3csIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9J
TlRFUihBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZURldmljZVdhc0Nvbm5lY3RlZE5vdGlmaWNhdGlv
biwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJl
RGV2aWNlV2FzRGlzY29ubmVjdGVkTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQorCisjZGVmaW5l
IEFWTWVkaWFUeXBlQXVkaW8gZ2V0QVZNZWRpYVR5cGVBdWRpbygpCisjZGVmaW5lIEFWTWVkaWFU
eXBlTXV4ZWQgZ2V0QVZNZWRpYVR5cGVNdXhlZCgpCisjZGVmaW5lIEFWTWVkaWFUeXBlVmlkZW8g
Z2V0QVZNZWRpYVR5cGVWaWRlbygpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQxMjgw
eDcyMCBnZXRBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjAoKQorI2RlZmluZSBBVkNhcHR1
cmVTZXNzaW9uUHJlc2V0NjQweDQ4MCBnZXRBVkNhcHR1cmVTZXNzaW9uUHJlc2V0NjQweDQ4MCgp
CisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4IGdldEFWQ2FwdHVyZVNlc3Np
b25QcmVzZXQzNTJ4Mjg4KCkKKyNkZWZpbmUgQVZDYXB0dXJlU2Vzc2lvblByZXNldExvdyBnZXRB
VkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93KCkKKyNkZWZpbmUgQVZDYXB0dXJlRGV2aWNlV2FzQ29u
bmVjdGVkTm90aWZpY2F0aW9uIGdldEFWQ2FwdHVyZURldmljZVdhc0Nvbm5lY3RlZE5vdGlmaWNh
dGlvbigpCisjZGVmaW5lIEFWQ2FwdHVyZURldmljZVdhc0Rpc2Nvbm5lY3RlZE5vdGlmaWNhdGlv
biBnZXRBVkNhcHR1cmVEZXZpY2VXYXNEaXNjb25uZWN0ZWROb3RpZmljYXRpb24oKQorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQGludGVyZmFjZSBXZWJDb3JlQVZDYXB0dXJlRGV2aWNl
TWFuYWdlck9ic2VydmVyIDogTlNPYmplY3QKK3sKKyAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
KiBtX2NhbGxiYWNrOworfQorCistKGlkKWluaXRXaXRoQ2FsbGJhY2s6KEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXIqKWNhbGxiYWNrOworLSh2b2lkKWRpc2Nvbm5lY3Q7CistKHZvaWQpZGV2aWNlRGlz
Y29ubmVjdGVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbjsKKy0odm9pZClkZXZpY2VD
b25uZWN0ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uOworQGVuZAorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIHJlZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgpOwor
CitjbGFzcyBDYXB0dXJlRGV2aWNlIHsKK3B1YmxpYzoKKyAgICBDYXB0dXJlRGV2aWNlKCkKKyAg
ICAgICAgOm1fZW5hYmxlZChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgU3RyaW5nIG1fY2Fw
dHVyZURldmljZUlEOworCisgICAgU3RyaW5nIG1fYXVkaW9Tb3VyY2VJZDsKKyAgICBSZWZQdHI8
QVZNZWRpYUNhcHR1cmVTb3VyY2U+IG1fYXVkaW9Tb3VyY2U7CisKKyAgICBTdHJpbmcgbV92aWRl
b1NvdXJjZUlkOworICAgIFJlZlB0cjxBVk1lZGlhQ2FwdHVyZVNvdXJjZT4gbV92aWRlb1NvdXJj
ZTsKKworICAgIGJvb2wgbV9lbmFibGVkOworfTsKKworc3RhdGljIFZlY3RvcjxDYXB0dXJlRGV2
aWNlPiYgY2FwdHVyZURldmljZUxpc3QoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVj
dG9yPENhcHR1cmVEZXZpY2U+LCBjYXB0dXJlRGV2aWNlTGlzdCwgKCkpOworICAgIHN0YXRpYyBi
b29sIGZpcnN0VGltZSA9IHRydWU7CisKKyAgICBpZiAoZmlyc3RUaW1lICYmICFjYXB0dXJlRGV2
aWNlTGlzdC5zaXplKCkpIHsKKyAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7CisgICAgICAgIHJl
ZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgpOworICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpzaGFyZWQoKS5yZWdpc3RlckZvckRldmljZU5vdGlmaWNhdGlvbnMoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gY2FwdHVyZURldmljZUxpc3Q7Cit9CisKK3N0YXRpYyBib29sIGNhcHR1cmVEZXZp
Y2VGcm9tRGV2aWNlSUQoY29uc3QgU3RyaW5nJiBjYXB0dXJlRGV2aWNlSUQsIENhcHR1cmVEZXZp
Y2UmIHNvdXJjZSkKK3sKKyAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGRldmljZXMgPSBjYXB0
dXJlRGV2aWNlTGlzdCgpOworICAgIAorICAgIHNpemVfdCBjb3VudCA9IGRldmljZXMuc2l6ZSgp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBpZiAo
ZGV2aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJRCA9PSBjYXB0dXJlRGV2aWNlSUQpIHsKKyAgICAg
ICAgICAgIHNvdXJjZSA9IGRldmljZXNbaV07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lk
IHJlZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgpCit7CisgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+
JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxpc3QoKTsKKyAgICAKKyAgICBmb3IgKEFWQ2FwdHVy
ZURldmljZVR5cGUgKmRldmljZSBpbiBbQVZDYXB0dXJlRGV2aWNlIGRldmljZXNdKSB7CisgICAg
ICAgIENhcHR1cmVEZXZpY2Ugc291cmNlOworICAgICAgICAKKyAgICAgICAgaWYgKCFjYXB0dXJl
RGV2aWNlRnJvbURldmljZUlEKGRldmljZS51bmlxdWVJRCwgc291cmNlKSkgeworICAgICAgICAg
ICAgLy8gQW4gQVZDYXB0dXJlRGV2aWNlIGhhcyBhIHVuaXF1ZSBJRCwgYnV0IHdlIGNhbid0IHVz
ZSBpdCBmb3IgdGhlIHNvdXJjZSBJRCBiZWNhdXNlOgorICAgICAgICAgICAgLy8gMS4gaWYgaXQg
cHJvdmlkZXMgYm90aCBhdWRpbyBhbmQgdmlkZW8gd2Ugd2lsbCBuZWVkIHRvIGNyZWF0ZSB0d28g
c291cmNlcyBmb3IgaXQKKyAgICAgICAgICAgIC8vIDIuIHRoZSB1bmlxdWUgSUQgcGVyc2lzdHMg
b24gb25lIHN5c3RlbSBhY3Jvc3MgZGV2aWNlIGNvbm5lY3Rpb25zLCBkaXNjb25uZWN0aW9ucywK
KyAgICAgICAgICAgIC8vICAgIGFwcGxpY2F0aW9uIHJlc3RhcnRzLCBhbmQgcmVib290cywgc28g
aXQgY291bGQgYmUgdXNlZCB0byBmaWdlcnByaW50IGEgdXNlci4KKyAgICAgICAgICAgIHNvdXJj
ZS5tX2NhcHR1cmVEZXZpY2VJRCA9IGRldmljZS51bmlxdWVJRDsKKyAgICAgICAgICAgIHNvdXJj
ZS5tX2VuYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKFtkZXZpY2UgaGFzTWVkaWFUeXBl
OkFWTWVkaWFUeXBlQXVkaW9dIHx8IFtkZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlTXV4
ZWRdKQorICAgICAgICAgICAgICAgIHNvdXJjZS5tX2F1ZGlvU291cmNlSWQgPSBjcmVhdGVDYW5v
bmljYWxVVUlEU3RyaW5nKCk7CisKKyAgICAgICAgICAgIGlmIChbZGV2aWNlIGhhc01lZGlhVHlw
ZTpBVk1lZGlhVHlwZVZpZGVvXSB8fCBbZGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZU11
eGVkXSkKKyAgICAgICAgICAgICAgICBzb3VyY2UubV92aWRlb1NvdXJjZUlkID0gY3JlYXRlQ2Fu
b25pY2FsVVVJRFN0cmluZygpOworCisgICAgICAgICAgICBkZXZpY2VzLmFwcGVuZChzb3VyY2Up
OworICAgICAgICB9IGVsc2UgaWYgKCFzb3VyY2UubV9lbmFibGVkKSB7CisgICAgICAgICAgICBz
b3VyY2UubV9lbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChzb3VyY2UubV9hdWRpb1Nv
dXJjZSkKKyAgICAgICAgICAgICAgICBzb3VyY2UubV9hdWRpb1NvdXJjZS0+c2V0RW5hYmxlZCh0
cnVlKTsKKyAgICAgICAgICAgIGlmIChzb3VyY2UubV92aWRlb1NvdXJjZSkKKyAgICAgICAgICAg
ICAgICBzb3VyY2UubV92aWRlb1NvdXJjZS0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjppc0F2YWlsYWJsZSgpCit7
CisgICAgcmV0dXJuIEFWRm91bmRhdGlvbkxpYnJhcnkoKTsKK30KKworQVZDYXB0dXJlRGV2aWNl
TWFuYWdlciYgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2hhcmVkKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEFWQ2FwdHVyZURldmljZU1hbmFnZXIsIG1hbmFnZXIsICgpKTsKKyAgICBy
ZXR1cm4gbWFuYWdlcjsKK30KKworQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6QVZDYXB0dXJlRGV2
aWNlTWFuYWdlcigpCisgICAgOiBtX29iamNPYnNlcnZlcihhZG9wdE5TKFtbV2ViQ29yZUFWQ2Fw
dHVyZURldmljZU1hbmFnZXJPYnNlcnZlciBhbGxvY10gaW5pdFdpdGhDYWxsYmFjazp0aGlzXSkp
Cit7Cit9CisKK0FWQ2FwdHVyZURldmljZU1hbmFnZXI6On5BVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
KCkKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9i
c2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpXTsKKyAgICBbbV9vYmpjT2JzZXJ2ZXIgZGlzY29u
bmVjdF07Cit9CisKK1N0cmluZyBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpiZXN0U2Vzc2lvblBy
ZXNldEZvclZpZGVvU2l6ZShBVkNhcHR1cmVTZXNzaW9uVHlwZSAqY2FwdHVyZVNlc3Npb24sIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBBU1NFUlQod2lkdGggPj0gMCk7CisgICAgQVNT
RVJUKGhlaWdodCA+PSAwKTsKKyAgICAKKyAgICBpZiAod2lkdGggPiAxMjgwIHx8IGhlaWdodCA+
IDcyMCkKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgcmVzdHJpY3Rpb24gY291bGQgYmUgYWRqdXN0
ZWQgd2l0aCB0aGUgdmlkZW9NYXhTY2FsZUFuZENyb3BGYWN0b3IgcHJvcGVydHkuCisgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOworICAgIAorICAgIGlmICh3aWR0aCA+IDY0MCB8fCBoZWln
aHQgPiA0ODApIHsKKyAgICAgICAgaWYgKCFbY2FwdHVyZVNlc3Npb24gY2FuU2V0U2Vzc2lvblBy
ZXNldDpBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjBdKQorICAgICAgICAgICAgZW1wdHlT
dHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMDsK
KyAgICB9CisgICAgCisgICAgaWYgKHdpZHRoID4gMzUyIHx8IGhlaWdodCA+IDI4OCkgeworICAg
ICAgICBpZiAoIVtjYXB0dXJlU2Vzc2lvbiBjYW5TZXRTZXNzaW9uUHJlc2V0OkFWQ2FwdHVyZVNl
c3Npb25QcmVzZXQ2NDB4NDgwXSkKKyAgICAgICAgICAgIGVtcHR5U3RyaW5nKCk7CisgICAgICAg
IHJldHVybiBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0NjQweDQ4MDsKKyAgICB9CisgICAgCisgICAg
aWYgKFtjYXB0dXJlU2Vzc2lvbiBjYW5TZXRTZXNzaW9uUHJlc2V0OkFWQ2FwdHVyZVNlc3Npb25Q
cmVzZXQzNTJ4Mjg4XSkKKyAgICAgICAgcmV0dXJuIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4
Mjg4OworICAgIAorICAgIGlmIChbY2FwdHVyZVNlc3Npb24gY2FuU2V0U2Vzc2lvblByZXNldDpB
VkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93XSkKKyAgICAgICAgcmV0dXJuIEFWQ2FwdHVyZVNlc3Np
b25QcmVzZXRMb3c7CisgICAgCisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisKK2Jvb2wg
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNlU3VwcG9ydHNGYWNpbmdNb2RlKEFWQ2FwdHVy
ZURldmljZVR5cGUgKmRldmljZSwgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5n
TW9kZSBmYWNpbmdNb2RlKQoreworICAgIGlmICghW2RldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRp
YVR5cGVWaWRlb10pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKGZh
Y2luZ01vZGUpIHsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpVc2VyOgorICAg
ICAgICBpZiAoW2RldmljZSBwb3NpdGlvbl0gPT0gQVZDYXB0dXJlRGV2aWNlUG9zaXRpb25Gcm9u
dCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1l
ZGlhU3RyZWFtU291cmNlU3RhdGVzOjpFbnZpcm9ubWVudDoKKyAgICAgICAgaWYgKFtkZXZpY2Ug
cG9zaXRpb25dID09IEFWQ2FwdHVyZURldmljZVBvc2l0aW9uQmFjaykKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlU3Rh
dGVzOjpMZWZ0OgorICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlJpZ2h0OgorICAg
IGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlVua25vd246CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitDYXB0dXJlRGV2aWNl
KiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpiZXN0RGV2aWNlRm9yRmFjaW5nTW9kZShNZWRpYVN0
cmVhbVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlIGZhY2luZ01vZGUpCit7CisgICAgVmVj
dG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxpc3QoKTsKKyAgICAK
KyAgICBzaXplX3QgY291bnQgPSBkZXZpY2VzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlVHlwZSAqZGV2aWNl
ID0gW0FWQ2FwdHVyZURldmljZSBkZXZpY2VXaXRoVW5pcXVlSUQ6ZGV2aWNlc1tpXS5tX2NhcHR1
cmVEZXZpY2VJRF07CisgICAgICAgIEFTU0VSVChkZXZpY2UpOworICAgICAgICAKKyAgICAgICAg
aWYgKGRldmljZSAmJiBkZXZpY2VTdXBwb3J0c0ZhY2luZ01vZGUoZGV2aWNlLCBmYWNpbmdNb2Rl
KSkKKyAgICAgICAgICAgIHJldHVybiAmZGV2aWNlc1tpXTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIDA7Cit9CisKK2Jvb2wgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRz
Q29uc3RyYWludChBVkNhcHR1cmVTZXNzaW9uVHlwZSAqc2Vzc2lvbiwgTWVkaWFTdHJlYW1Tb3Vy
Y2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIHNpemVfdCBjb25zdHJhaW50ID0gdmFsaWRDb25zdHJhaW50TmFtZXMoKS5maW5kKG5h
bWUpOworICAgIGlmIChjb25zdHJhaW50ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgc3dpdGNoIChjb25zdHJhaW50KSB7CisgICAgY2FzZSBXaWR0aDoKKyAg
ICAgICAgaWYgKHR5cGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiAhYmVzdFNlc3Npb25QcmVzZXRGb3JWaWRl
b1NpemUoc2Vzc2lvbiwgdmFsdWUudG9JbnQoKSwgMCkuaXNFbXB0eSgpOworICAgIGNhc2UgSGVp
Z2h0OgorICAgICAgICBpZiAodHlwZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8pCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuICFiZXN0U2Vzc2lvblByZXNl
dEZvclZpZGVvU2l6ZShzZXNzaW9uLCAwLCB2YWx1ZS50b0ludCgpKS5pc0VtcHR5KCk7CisgICAg
Y2FzZSBGcmFtZVJhdGU6IHsKKyAgICAgICAgaWYgKHR5cGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6
OkF1ZGlvKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8g
SXQgd291bGQgbWFrZSBzZW5zZSB0byB1c2UgW0FWQ2FwdHVyZUNvbm5lY3Rpb24gdmlkZW9NaW5G
cmFtZUR1cmF0aW9uXSBhbmQKKyAgICAgICAgLy8gW0FWQ2FwdHVyZUNvbm5lY3Rpb24gdmlkZW9N
YXhGcmFtZUR1cmF0aW9uXSwgYnV0IHRoZXkgb25seSB3b3JrIHdpdGggYSAibGl2ZSIgQVZDYXB0
dXJlQ29ubmVjdGlvbi4KKyAgICAgICAgZmxvYXQgcmF0ZSA9IHZhbHVlLnRvRmxvYXQoKTsKKyAg
ICAgICAgcmV0dXJuIHJhdGUgPiAwICYmIHJhdGUgPD0gNjA7CisgICAgfQorICAgIGNhc2UgR2Fp
bjogeworICAgICAgICBpZiAodHlwZSAhPSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8pCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBmbG9hdCBsZXZlbCA9IHZh
bHVlLnRvRmxvYXQoKTsKKyAgICAgICAgcmV0dXJuIGxldmVsID4gMCAmJiBsZXZlbCA8PSAxOwor
ICAgIH0KKyAgICBjYXNlIEZhY2luZ01vZGU6IHsKKyAgICAgICAgaWYgKHR5cGUgPT0gTWVkaWFT
dHJlYW1Tb3VyY2U6OkF1ZGlvKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IHNpemVfdCBmYWNpbmdNb2RlID0gIHZhbGlkRmFjaW5nTW9kZXMoKS5maW5kKHZhbHVlKTsKKyAg
ICAgICAgaWYgKGZhY2luZ01vZGUgIT0gbm90Rm91bmQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiBiZXN0RGV2aWNlRm9yRmFjaW5nTW9kZShzdGF0aWNfY2FzdDxN
ZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlPihmYWNpbmdNb2RlKSk7Cisg
ICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6aXNWYWxpZENvbnN0cmFpbnQoTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUg
dHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHNpemVfdCBjb25zdHJhaW50ID0gdmFs
aWRDb25zdHJhaW50TmFtZXMoKS5maW5kKG5hbWUpOworICAgIGlmIChjb25zdHJhaW50ID09IG5v
dEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY29uc3RyYWludCA9PSBH
YWluKQorICAgICAgICByZXR1cm4gdHlwZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW87CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmVjdG9yPFJlZlB0cjxUcmFja1NvdXJjZUluZm8+PiBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRTb3VyY2VzSW5mbyhjb25zdCBTdHJpbmcmIC8qcmVx
dWVzdE9yaWdpbiovKQoreworICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tTb3VyY2VJbmZvPj4gc291
cmNlc0luZm87CisKKyAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBzb3Vy
Y2VzSW5mbzsKKworICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVE
ZXZpY2VMaXN0KCk7CisgICAgc2l6ZV90IGNvdW50ID0gZGV2aWNlcy5zaXplKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIEFWQ2FwdHVyZURldmlj
ZVR5cGUgKmRldmljZSA9IFtBVkNhcHR1cmVEZXZpY2UgZGV2aWNlV2l0aFVuaXF1ZUlEOmRldmlj
ZXNbaV0ubV9jYXB0dXJlRGV2aWNlSURdOworICAgICAgICBBU1NFUlQoZGV2aWNlKTsKKworICAg
ICAgICBpZiAoIWRldmljZXNbaV0ubV9lbmFibGVkKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgaWYgKGRldmljZXNbaV0ubV92aWRlb1NvdXJjZSkKKyAgICAgICAgICAgIHNvdXJj
ZXNJbmZvLmFwcGVuZChUcmFja1NvdXJjZUluZm86OmNyZWF0ZShkZXZpY2VzW2ldLm1fdmlkZW9T
b3VyY2VJZCwgVHJhY2tTb3VyY2VJbmZvOjpWaWRlbywgZGV2aWNlLmxvY2FsaXplZE5hbWUpKTsK
KyAgICAgICAgaWYgKGRldmljZXNbaV0ubV9hdWRpb1NvdXJjZSkKKyAgICAgICAgICAgIHNvdXJj
ZXNJbmZvLmFwcGVuZChUcmFja1NvdXJjZUluZm86OmNyZWF0ZShkZXZpY2VzW2ldLm1fYXVkaW9T
b3VyY2VJZCwgVHJhY2tTb3VyY2VJbmZvOjpBdWRpbywgZGV2aWNlLmxvY2FsaXplZE5hbWUpKTsK
KyAgICB9CisgICAgCisgICAgTE9HKE1lZGlhLCAiQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Z2V0
U291cmNlc0luZm8oJXApLCBmb3VuZCAlZCBhY3RpdmUgZGV2aWNlcyIsIHRoaXMsIHNvdXJjZXNJ
bmZvLnNpemUoKSk7CisKKyAgICByZXR1cm4gc291cmNlc0luZm87Cit9CisKK2Jvb2wgQVZDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJl
YW1Tb3VyY2U6OlR5cGUgdHlwZSwgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMsIFN0cmlu
ZyYgaW52YWxpZENvbnN0cmFpbnQpCit7CisgICAgaWYgKCFpc0F2YWlsYWJsZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNvbnN0cmFpbnRzKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIFZlY3RvcjxNZWRpYUNvbnN0cmFpbnQ+IG1hbmRhdG9yeUNvbnN0cmFpbnRz
OworICAgIGNvbnN0cmFpbnRzLT5nZXRNYW5kYXRvcnlDb25zdHJhaW50cyhtYW5kYXRvcnlDb25z
dHJhaW50cyk7CisgICAgaWYgKG1hbmRhdG9yeUNvbnN0cmFpbnRzLnNpemUoKSkgeworICAgICAg
ICBSZXRhaW5QdHI8QVZDYXB0dXJlU2Vzc2lvblR5cGU+IHNlc3Npb24gPSBhZG9wdE5TKFtbQVZD
YXB0dXJlU2Vzc2lvbiBhbGxvY10gaW5pdF0pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1hbmRhdG9yeUNvbnN0cmFpbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25z
dCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSBtYW5kYXRvcnlDb25zdHJhaW50c1tpXTsK
KyAgICAgICAgICAgIGlmICghc2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChzZXNzaW9uLmdldCgp
LCB0eXBlLCBjb25zdHJhaW50Lm1fbmFtZSwgY29uc3RyYWludC5tX3ZhbHVlKSkgeworICAgICAg
ICAgICAgICAgIGludmFsaWRDb25zdHJhaW50ID0gY29uc3RyYWludC5tX25hbWU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIFZlY3RvcjxNZWRpYUNvbnN0cmFpbnQ+IG9wdGlvbmFsQ29uc3RyYWludHM7Cisg
ICAgY29uc3RyYWludHMtPmdldE9wdGlvbmFsQ29uc3RyYWludHMob3B0aW9uYWxDb25zdHJhaW50
cyk7CisgICAgaWYgKCFvcHRpb25hbENvbnN0cmFpbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wdGlvbmFsQ29uc3RyYWludHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50
ID0gb3B0aW9uYWxDb25zdHJhaW50c1tpXTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkQ29uc3RyYWlu
dCh0eXBlLCBjb25zdHJhaW50Lm1fbmFtZSkpIHsKKyAgICAgICAgICAgIGludmFsaWRDb25zdHJh
aW50ID0gY29uc3RyYWludC5tX25hbWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmVmUHRyPE1lZGlhU3RyZWFt
U291cmNlPiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpiZXN0U291cmNlRm9yVHlwZUFuZENvbnN0
cmFpbnRzKE1lZGlhU3RyZWFtU291cmNlOjpUeXBlIHR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25z
dHJhaW50cz4gY29uc3RyYWludHMpCit7CisgICAgaWYgKCFpc0F2YWlsYWJsZSgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1
cmVEZXZpY2VMaXN0KCk7CisgICAgc2l6ZV90IGNvdW50ID0gZGV2aWNlcy5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmICghZGV2aWNl
c1tpXS5tX2VuYWJsZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBGSVhN
RTogY29uc2lkZXIgdGhlIGNvbnN0cmFpbnRzIHdoZW4gY2hvb3NpbmcgYW1vbmcgbXVsdGlwbGUg
ZGV2aWNlcy4gRm9yIG5vdyBqdXN0IHNlbGVjdCB0aGUgZmlyc3QgYXZhaWxhYmxlCisgICAgICAg
IC8vIGRldmljZSBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KKyAgICAgICAgaWYgKHR5cGUgPT0g
TWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvICYmICFkZXZpY2VzW2ldLm1fYXVkaW9Tb3VyY2VJZC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmICghZGV2aWNlc1tpXS5tX2F1ZGlvU291cmNlKSB7
CisgICAgICAgICAgICAgICAgQVZDYXB0dXJlRGV2aWNlVHlwZSAqZGV2aWNlID0gW0FWQ2FwdHVy
ZURldmljZSBkZXZpY2VXaXRoVW5pcXVlSUQ6ZGV2aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJRF07
CisgICAgICAgICAgICAgICAgQVNTRVJUKGRldmljZSk7CisgICAgICAgICAgICAgICAgZGV2aWNl
c1tpXS5tX2F1ZGlvU291cmNlID0gQVZBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2Us
IGRldmljZXNbaV0ubV9hdWRpb1NvdXJjZUlkLCBjb25zdHJhaW50cyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBkZXZpY2VzW2ldLm1fYXVkaW9Tb3VyY2UtPnNldFJlYWR5U3RhdGUoTWVk
aWFTdHJlYW1Tb3VyY2U6OkxpdmUpOworICAgICAgICAgICAgcmV0dXJuIGRldmljZXNbaV0ubV9h
dWRpb1NvdXJjZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09IE1lZGlhU3RyZWFt
U291cmNlOjpWaWRlbyAmJiAhZGV2aWNlc1tpXS5tX3ZpZGVvU291cmNlSWQuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBpZiAoIWRldmljZXNbaV0ubV92aWRlb1NvdXJjZSkgeworICAgICAgICAg
ICAgICAgIEFWQ2FwdHVyZURldmljZVR5cGUgKmRldmljZSA9IFtBVkNhcHR1cmVEZXZpY2UgZGV2
aWNlV2l0aFVuaXF1ZUlEOmRldmljZXNbaV0ubV9jYXB0dXJlRGV2aWNlSURdOworICAgICAgICAg
ICAgICAgIEFTU0VSVChkZXZpY2UpOworICAgICAgICAgICAgICAgIGRldmljZXNbaV0ubV92aWRl
b1NvdXJjZSA9IEFWVmlkZW9DYXB0dXJlU291cmNlOjpjcmVhdGUoZGV2aWNlLCBkZXZpY2VzW2ld
Lm1fdmlkZW9Tb3VyY2VJZCwgY29uc3RyYWludHMpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGV2aWNlc1tpXS5tX3ZpZGVvU291cmNlLT5zZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291
cmNlOjpMaXZlKTsKKyAgICAgICAgICAgIHJldHVybiBkZXZpY2VzW2ldLm1fdmlkZW9Tb3VyY2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBBVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjpyZWdpc3RlckZvckRldmljZU5vdGlmaWNhdGlvbnMoKQoreworICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpjT2Jz
ZXJ2ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGRldmljZUNvbm5lY3RlZDopIG5hbWU6QVZD
YXB0dXJlRGV2aWNlV2FzQ29ubmVjdGVkTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpjT2Jz
ZXJ2ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGRldmljZURpc2Nvbm5lY3RlZDopIG5hbWU6
QVZDYXB0dXJlRGV2aWNlV2FzRGlzY29ubmVjdGVkTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwor
fQorCit2b2lkIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmRldmljZUNvbm5lY3RlZCgpCit7Cisg
ICAgcmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0KCk7Cit9CisKK3ZvaWQgQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6ZGV2aWNlRGlzY29ubmVjdGVkKEFWQ2FwdHVyZURldmljZVR5cGUqIGRldmljZSkK
K3sKKyAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGRldmljZXMgPSBjYXB0dXJlRGV2aWNlTGlz
dCgpOworCisgICAgc2l6ZV90IGNvdW50ID0gZGV2aWNlcy5zaXplKCk7CisgICAgaWYgKCFjb3Vu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGRldmljZUlEID0gZGV2aWNlLnVuaXF1
ZUlEOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBp
ZiAoZGV2aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJRCA9PSBkZXZpY2VJRCkgeworICAgICAgICAg
ICAgTE9HKE1lZGlhLCAiQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNlRGlzY29ubmVjdGVk
KCVwKSwgZGV2aWNlICVkIGRpc2FibGVkIiwgdGhpcywgaSk7CisgICAgICAgICAgICBkZXZpY2Vz
W2ldLm1fZW5hYmxlZCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGRldmljZXNbaV0ubV9hdWRp
b1NvdXJjZSkKKyAgICAgICAgICAgICAgICBkZXZpY2VzW2ldLm1fYXVkaW9Tb3VyY2UtPnNldEVu
YWJsZWQoZmFsc2UpOworICAgICAgICAgICAgaWYgKGRldmljZXNbaV0ubV92aWRlb1NvdXJjZSkK
KyAgICAgICAgICAgICAgICBkZXZpY2VzW2ldLm1fdmlkZW9Tb3VyY2UtPnNldEVuYWJsZWQoZmFs
c2UpOworICAgICAgICB9CisgICAgfQorfQorCitjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYg
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmFsaWRDb25zdHJhaW50TmFtZXMoKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEF0b21pY1N0cmluZz4sIGNvbnN0cmFpbnRzLCAoKSk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gaGVpZ2h0Q29uc3RyYWlu
dCgiaGVpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gd2lkdGhDb25zdHJhaW50KCJ3aWR0aCIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGZyYW1lUmF0ZUNvbnN0cmFpbnQoImZyYW1lUmF0ZSIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IGZhY2luZ01vZGVDb25zdHJhaW50KCJmYWNpbmdNb2RlIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gZ2FpbkNvbnN0cmFpbnQoImdhaW4iLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAKKyAgICBpZiAoIWNvbnN0cmFpbnRzLnNpemUoKSkg
eworICAgICAgICBjb25zdHJhaW50cy5pbnNlcnQoV2lkdGgsIHdpZHRoQ29uc3RyYWludCk7Cisg
ICAgICAgIGNvbnN0cmFpbnRzLmluc2VydChIZWlnaHQsIGhlaWdodENvbnN0cmFpbnQpOworICAg
ICAgICBjb25zdHJhaW50cy5pbnNlcnQoRnJhbWVSYXRlLCBmcmFtZVJhdGVDb25zdHJhaW50KTsK
KyAgICAgICAgY29uc3RyYWludHMuaW5zZXJ0KEZhY2luZ01vZGUsIGZhY2luZ01vZGVDb25zdHJh
aW50KTsKKyAgICAgICAgY29uc3RyYWludHMuaW5zZXJ0KEdhaW4sIGdhaW5Db25zdHJhaW50KTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIGNvbnN0cmFpbnRzOworfQorCitjb25zdCBWZWN0b3I8
QXRvbWljU3RyaW5nPiYgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmFsaWRGYWNpbmdNb2Rlcygp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8QXRvbWljU3RyaW5nPiwgbW9kZXMs
ICgpKTsKKyAgICAKKyAgICBpZiAoIW1vZGVzLnNpemUoKSkgeworICAgICAgICBtb2Rlcy5pbnNl
cnQoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlVzZXIsIE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
OjpmYWNpbmdNb2RlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpVc2VyKSk7CisgICAgICAgIG1v
ZGVzLmluc2VydChNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6RW52aXJvbm1lbnQsIE1lZGlhU3Ry
ZWFtU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpFbnZp
cm9ubWVudCkpOworICAgICAgICBtb2Rlcy5pbnNlcnQoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6
OkxlZnQsIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKE1lZGlhU3RyZWFtU291
cmNlU3RhdGVzOjpMZWZ0KSk7CisgICAgICAgIG1vZGVzLmluc2VydChNZWRpYVN0cmVhbVNvdXJj
ZVN0YXRlczo6UmlnaHQsIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzOjpSaWdodCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbW9k
ZXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworQGltcGxlbWVudGF0aW9uIFdlYkNv
cmVBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyT2JzZXJ2ZXIKKworLSAoaWQpaW5pdFdpdGhDYWxsYmFj
azooQVZDYXB0dXJlRGV2aWNlTWFuYWdlciopY2FsbGJhY2sKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBtX2NhbGxi
YWNrID0gY2FsbGJhY2s7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGlzY29ubmVj
dAoreworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJn
ZXQ6c2VsZl07CisgICAgbV9jYWxsYmFjayA9IDA7Cit9CisKKy0gKHZvaWQpZGV2aWNlRGlzY29u
bmVjdGVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICghbV9jYWxs
YmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKG1fY2FsbGJhY2spIHsKKyAgICAgICAgICAg
IEFWQ2FwdHVyZURldmljZVR5cGUgKmRldmljZSA9IFtub3RpZmljYXRpb24gb2JqZWN0XTsKKyAg
ICAgICAgICAgIG1fY2FsbGJhY2stPmRldmljZURpc2Nvbm5lY3RlZChkZXZpY2UpOworICAgICAg
ICB9CisgICAgfSk7Cit9CisKKy0gKHZvaWQpZGV2aWNlQ29ubmVjdGVkOihOU05vdGlmaWNhdGlv
biAqKXVudXNlZE5vdGlmaWNhdGlvbgoreworICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmlj
YXRpb24pOworICAgIGlmICghbV9jYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgZGlz
cGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKG1f
Y2FsbGJhY2spCisgICAgICAgICAgICBtX2NhbGxiYWNrLT5kZXZpY2VDb25uZWN0ZWQoKTsKKyAg
ICB9KTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBVk1lZGlhQ2FwdHVy
ZVNvdXJjZV9oCisjZGVmaW5lIEFWTWVkaWFDYXB0dXJlU291cmNlX2gKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVh
bVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworT0JKQ19DTEFTUyBBVkNh
cHR1cmVBdWRpb0RhdGFPdXRwdXQ7CitPQkpDX0NMQVNTIEFWQ2FwdHVyZUNvbm5lY3Rpb247CitP
QkpDX0NMQVNTIEFWQ2FwdHVyZURldmljZTsKK09CSkNfQ0xBU1MgQVZDYXB0dXJlT3V0cHV0Owor
T0JKQ19DTEFTUyBBVkNhcHR1cmVTZXNzaW9uOworT0JKQ19DTEFTUyBBVkNhcHR1cmVWaWRlb0Rh
dGFPdXRwdXQ7CitPQkpDX0NMQVNTIFdlYkNvcmVBVk1lZGlhQ2FwdHVyZVNvdXJjZU9ic2VydmVy
OworCit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJS
ZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQVZNZWRpYUNhcHR1cmVTb3VyY2Ug
OiBwdWJsaWMgTWVkaWFTdHJlYW1Tb3VyY2UgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFWTWVk
aWFDYXB0dXJlU291cmNlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZU91dHB1dERpZE91
dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dCosIENNU2FtcGxl
QnVmZmVyUmVmLCBBVkNhcHR1cmVDb25uZWN0aW9uKikgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IGNhcHR1cmVTZXNzaW9uU3RvcHBlZFJ1bm5pbmcoKTsKKworcHJvdGVjdGVkOgorICAgIEFWTWVk
aWFDYXB0dXJlU291cmNlKEFWQ2FwdHVyZURldmljZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIE1l
ZGlhU3RyZWFtU291cmNlOjpUeXBlLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KTsKKwor
ICAgIHZpcnR1YWwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMmIHN0YXRlcygpIE9WRVJS
SURFOworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIE9WRVJSSURFOworCisgICAgdmly
dHVhbCB2b2lkIHNldHVwQ2FwdHVyZVNlc3Npb24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVN0YXRlcygpID0gMDsKKworICAgIEFWQ2FwdHVyZVNlc3Npb24gKnNlc3Npb24oKSBjb25z
dCB7IHJldHVybiBtX3Nlc3Npb24uZ2V0KCk7IH0KKyAgICBBVkNhcHR1cmVEZXZpY2UgKmRldmlj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlLmdldCgpOyB9CisgICAgTWVkaWFTdHJlYW1Tb3Vy
Y2VTdGF0ZXMqIGN1cnJlbnRTdGF0ZXMoKSB7IHJldHVybiAmbV9jdXJyZW50U3RhdGVzOyB9Cisg
ICAgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMoKSB7IHJldHVybiBtX2NvbnN0cmFpbnRz
LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFZpZGVvU2FtcGxlQnVmZmVyRGVsZWdhdGUoQVZDYXB0
dXJlVmlkZW9EYXRhT3V0cHV0Kik7CisgICAgdm9pZCBzZXRBdWRpb1NhbXBsZUJ1ZmZlckRlbGVn
YXRlKEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dCopOworCitwcml2YXRlOgorICAgIHZvaWQgc2V0
dXBTZXNzaW9uKCk7CisKKyAgICBSZXRhaW5QdHI8V2ViQ29yZUFWTWVkaWFDYXB0dXJlU291cmNl
T2JzZXJ2ZXI+IG1fb2JqY09ic2VydmVyOworICAgIFJlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBt
X2NvbnN0cmFpbnRzOworICAgIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzIG1fY3VycmVudFN0YXRl
czsKKyAgICBSZXRhaW5QdHI8QVZDYXB0dXJlU2Vzc2lvbj4gbV9zZXNzaW9uOworICAgIFJldGFp
blB0cjxBVkNhcHR1cmVEZXZpY2U+IG1fZGV2aWNlOworICAgIAorICAgIGJvb2wgbV9pc1J1bm5p
bmc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorCisjZW5kaWYgLy8gQVZNZWRpYUNhcHR1cmVTb3VyY2VfaApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW1wb3J0
ICJBVk1lZGlhQ2FwdHVyZVNvdXJjZS5oIgorCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0
ICJNZWRpYUNvbnN0cmFpbnRzLmgiCisjaW1wb3J0ICJNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5o
IgorI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisj
aW1wb3J0ICJVVUlELmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+Cisj
aW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW1w
b3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKwordHlwZWRlZiBBVkNhcHR1cmVDb25uZWN0aW9u
IEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlOwordHlwZWRlZiBBVkNhcHR1cmVEZXZpY2UgQVZDYXB0
dXJlRGV2aWNlVHlwZTsKK3R5cGVkZWYgQVZDYXB0dXJlRGV2aWNlSW5wdXQgQVZDYXB0dXJlRGV2
aWNlSW5wdXRUeXBlOwordHlwZWRlZiBBVkNhcHR1cmVPdXRwdXQgQVZDYXB0dXJlT3V0cHV0VHlw
ZTsKK3R5cGVkZWYgQVZDYXB0dXJlU2Vzc2lvbiBBVkNhcHR1cmVTZXNzaW9uVHlwZTsKK3R5cGVk
ZWYgQVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0IEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dFR5cGU7
Cit0eXBlZGVmIEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dCBBVkNhcHR1cmVWaWRlb0RhdGFPdXRw
dXRUeXBlOworCitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWRm91bmRhdGlvbikKK1NP
RlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQ29yZU1lZGlhKQorCitTT0ZUX0xJTktfQ0xBU1Mo
QVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXQpCitTT0ZUX0xJTktfQ0xBU1Mo
QVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVDb25uZWN0aW9uKQorU09GVF9MSU5LX0NMQVNTKEFWRm91
bmRhdGlvbiwgQVZDYXB0dXJlRGV2aWNlKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwg
QVZDYXB0dXJlRGV2aWNlSW5wdXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNh
cHR1cmVPdXRwdXQpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNz
aW9uKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlVmlkZW9EYXRhT3V0
cHV0KQorCisjZGVmaW5lIEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dCBnZXRBVkNhcHR1cmVBdWRp
b0RhdGFPdXRwdXRDbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVyZUNvbm5lY3Rpb24gZ2V0QVZDYXB0
dXJlQ29ubmVjdGlvbkNsYXNzKCkKKyNkZWZpbmUgQVZDYXB0dXJlRGV2aWNlIGdldEFWQ2FwdHVy
ZURldmljZUNsYXNzKCkKKyNkZWZpbmUgQVZDYXB0dXJlRGV2aWNlSW5wdXQgZ2V0QVZDYXB0dXJl
RGV2aWNlSW5wdXRDbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVyZU91dHB1dCBnZXRBVkNhcHR1cmVP
dXRwdXRDbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb24gZ2V0QVZDYXB0dXJlU2Vzc2lv
bkNsYXNzKCkKKyNkZWZpbmUgQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0IGdldEFWQ2FwdHVyZVZp
ZGVvRGF0YU91dHB1dENsYXNzKCkKKworU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBB
Vk1lZGlhVHlwZUF1ZGlvLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0
aW9uLCBBVk1lZGlhVHlwZU11eGVkLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZG
b3VuZGF0aW9uLCBBVk1lZGlhVHlwZVZpZGVvLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5U
RVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjAsIE5TU3RyaW5n
ICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZVNlc3Npb25QcmVz
ZXQ2NDB4NDgwLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBB
VkNhcHR1cmVTZXNzaW9uUHJlc2V0MzUyeDI4OCwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lO
VEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlU2Vzc2lvblByZXNldExvdywgTlNTdHJpbmcgKikK
K1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlU2Vzc2lvbkRpZFN0b3BS
dW5uaW5nTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQorCisjZGVmaW5lIEFWTWVkaWFUeXBlQXVk
aW8gZ2V0QVZNZWRpYVR5cGVBdWRpbygpCisjZGVmaW5lIEFWTWVkaWFUeXBlTXV4ZWQgZ2V0QVZN
ZWRpYVR5cGVNdXhlZCgpCisjZGVmaW5lIEFWTWVkaWFUeXBlVmlkZW8gZ2V0QVZNZWRpYVR5cGVW
aWRlbygpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMCBnZXRBVkNhcHR1
cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjAoKQorI2RlZmluZSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0
NjQweDQ4MCBnZXRBVkNhcHR1cmVTZXNzaW9uUHJlc2V0NjQweDQ4MCgpCisjZGVmaW5lIEFWQ2Fw
dHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4IGdldEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4
KCkKKyNkZWZpbmUgQVZDYXB0dXJlU2Vzc2lvblByZXNldExvdyBnZXRBVkNhcHR1cmVTZXNzaW9u
UHJlc2V0TG93KCkKKyNkZWZpbmUgQVZDYXB0dXJlU2Vzc2lvbkRpZFN0b3BSdW5uaW5nTm90aWZp
Y2F0aW9uIGdldEFWQ2FwdHVyZVNlc3Npb25EaWRTdG9wUnVubmluZ05vdGlmaWNhdGlvbigpCisK
K1NPRlRfTElOSyhDb3JlTWVkaWEsIENNU2FtcGxlQnVmZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24s
IENNRm9ybWF0RGVzY3JpcHRpb25SZWYsIChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVmKSwgKHNidWYp
KTsKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNU2FtcGxlQnVmZmVyR2V0UHJlc2VudGF0aW9uVGlt
ZVN0YW1wLCBDTVRpbWUsIChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVmKSwgKHNidWYpKTsKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV2ViQ29yZUFWTWVkaWFDYXB0dXJl
U291cmNlT2JzZXJ2ZXIgOiBOU09iamVjdDxBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXRTYW1wbGVC
dWZmZXJEZWxlZ2F0ZSwgQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0U2FtcGxlQnVmZmVyRGVsZWdh
dGU+Cit7CisgICAgQVZNZWRpYUNhcHR1cmVTb3VyY2UqIG1fY2FsbGJhY2s7Cit9CisKKy0oaWQp
aW5pdFdpdGhDYWxsYmFjazooQVZNZWRpYUNhcHR1cmVTb3VyY2UqKWNhbGxiYWNrOworLSh2b2lk
KWRpc2Nvbm5lY3Q7CistKHZvaWQpY2FwdHVyZVNlc3Npb25TdG9wcGVkUnVubmluZzooTlNOb3Rp
ZmljYXRpb24gKilub3RpZmljYXRpb247CistKHZvaWQpY2FwdHVyZU91dHB1dDooQVZDYXB0dXJl
T3V0cHV0VHlwZSAqKWNhcHR1cmVPdXRwdXQgZGlkT3V0cHV0U2FtcGxlQnVmZmVyOihDTVNhbXBs
ZUJ1ZmZlclJlZilzYW1wbGVCdWZmZXIgZnJvbUNvbm5lY3Rpb246KEFWQ2FwdHVyZUNvbm5lY3Rp
b25UeXBlICopY29ubmVjdGlvbjsKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYUF1ZGlvQ2FwdHVyZVNlcmlhbFF1ZXVlKCkKK3sKKyAg
ICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYWxRdWV1ZTsKKyAgICBzdGF0aWMgZGlzcGF0
Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Cisg
ICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJDb3JlQVZNZWRp
YUNhcHR1cmVTb3VyY2UgYXVkaW8gY2FwdHVyZSBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX1NFUklB
TCk7CisgICAgfSk7CisgICAgcmV0dXJuIGdsb2JhbFF1ZXVlOworfQorCitzdGF0aWMgZGlzcGF0
Y2hfcXVldWVfdCBnbG9iYVZpZGVvQ2FwdHVyZVNlcmlhbFF1ZXVlKCkKK3sKKyAgICBzdGF0aWMg
ZGlzcGF0Y2hfcXVldWVfdCBnbG9iYWxRdWV1ZTsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90
IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGds
b2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJDb3JlQVZNZWRpYUNhcHR1cmVT
b3VyY2UgdmlkZW8gY2FwdHVyZSBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX1NFUklBTCk7CisgICAg
ICAgIGRpc3BhdGNoX3NldF90YXJnZXRfcXVldWUoZ2xvYmFsUXVldWUsIGRpc3BhdGNoX2dldF9n
bG9iYWxfcXVldWUoIERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0hJR0gsIDApKTsKKyAgICB9KTsK
KyAgICByZXR1cm4gZ2xvYmFsUXVldWU7Cit9CisKK0FWTWVkaWFDYXB0dXJlU291cmNlOjpBVk1l
ZGlhQ2FwdHVyZVNvdXJjZShBVkNhcHR1cmVEZXZpY2VUeXBlKiBkZXZpY2UsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaWQsIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlIHR5cGUsIFBhc3NSZWZQdHI8TWVk
aWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpCisgICAgOiBNZWRpYVN0cmVhbVNvdXJjZShpZCwg
dHlwZSwgZW1wdHlTdHJpbmcoKSkKKyAgICAsIG1fb2JqY09ic2VydmVyKGFkb3B0TlMoW1tXZWJD
b3JlQVZNZWRpYUNhcHR1cmVTb3VyY2VPYnNlcnZlciBhbGxvY10gaW5pdFdpdGhDYWxsYmFjazp0
aGlzXSkpCisgICAgLCBtX2NvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKQorICAgICwgbV9kZXZpY2Uo
ZGV2aWNlKQorICAgICwgbV9pc1J1bm5pbmcoZmFsc2UpCit7CisgICAgc2V0TmFtZShbZGV2aWNl
IGxvY2FsaXplZE5hbWVdKTsKKyAgICBtX2N1cnJlbnRTdGF0ZXMuc2V0U291cmNlVHlwZSh0eXBl
ID09IE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbyA/IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpD
YW1lcmEgOiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6TWljcm9waG9uZSk7Cit9CisKK0FWTWVk
aWFDYXB0dXJlU291cmNlOjp+QVZNZWRpYUNhcHR1cmVTb3VyY2UoKQoreworICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2
ZXIuZ2V0KCldOworICAgIFttX29iamNPYnNlcnZlciBkaXNjb25uZWN0XTsKKyAgICBbbV9zZXNz
aW9uLmdldCgpIHN0b3BSdW5uaW5nXTsKKworICAgIHNldFJlYWR5U3RhdGUoRW5kZWQpOworfQor
Cit2b2lkIEFWTWVkaWFDYXB0dXJlU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKQoreworICAg
IGlmICghbV9zZXNzaW9uKQorICAgICAgICBzZXR1cFNlc3Npb24oKTsKKyAgICAKKyAgICBpZiAo
W21fc2Vzc2lvbi5nZXQoKSBpc1J1bm5pbmddKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
W21fc2Vzc2lvbi5nZXQoKSBzdGFydFJ1bm5pbmddOworICAgIHNldEVuYWJsZWQodHJ1ZSk7Cisg
ICAgbV9pc1J1bm5pbmcgPSB0cnVlOworfQorCit2b2lkIEFWTWVkaWFDYXB0dXJlU291cmNlOjpz
dG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgaWYgKCFtX3Nlc3Npb24gfHwgIVttX3Nlc3Npb24u
Z2V0KCkgaXNSdW5uaW5nXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW21fc2Vzc2lvbi5nZXQo
KSBzdG9wUnVubmluZ107CisgICAgc2V0RW5hYmxlZChmYWxzZSk7CisgICAgbV9pc1J1bm5pbmcg
PSB0cnVlOworfQorCitjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyYgQVZNZWRpYUNhcHR1
cmVTb3VyY2U6OnN0YXRlcygpCit7CisgICAgdXBkYXRlU3RhdGVzKCk7CisgICAgcmV0dXJuIG1f
Y3VycmVudFN0YXRlczsKK30KKwordm9pZCBBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6c2V0dXBTZXNz
aW9uKCkKK3sKKyAgICBpZiAobV9zZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nl
c3Npb24gPSBhZG9wdE5TKFtbQVZDYXB0dXJlU2Vzc2lvbiBhbGxvY10gaW5pdF0pOworICAgIAor
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9v
YmpjT2JzZXJ2ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGNhcHR1cmVTZXNzaW9uU3RvcHBl
ZFJ1bm5pbmc6KSBuYW1lOkFWQ2FwdHVyZVNlc3Npb25EaWRTdG9wUnVubmluZ05vdGlmaWNhdGlv
biBvYmplY3Q6bmlsXTsKKyAgICAKKyAgICBzZXR1cENhcHR1cmVTZXNzaW9uKCk7CisgICAgc2V0
UmVhZHlTdGF0ZShMaXZlKTsKK30KKyAKK3ZvaWQgQVZNZWRpYUNhcHR1cmVTb3VyY2U6OmNhcHR1
cmVTZXNzaW9uU3RvcHBlZFJ1bm5pbmcoKQoreworICAgIHN0b3BQcm9kdWNpbmdEYXRhKCk7Cit9
CisKK3ZvaWQgQVZNZWRpYUNhcHR1cmVTb3VyY2U6OnNldFZpZGVvU2FtcGxlQnVmZmVyRGVsZWdh
dGUoQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0VHlwZSogdmlkZW9PdXRwdXQpCit7CisgICAgW3Zp
ZGVvT3V0cHV0IHNldFNhbXBsZUJ1ZmZlckRlbGVnYXRlOm1fb2JqY09ic2VydmVyLmdldCgpIHF1
ZXVlOmdsb2JhVmlkZW9DYXB0dXJlU2VyaWFsUXVldWUoKV07Cit9CisKK3ZvaWQgQVZNZWRpYUNh
cHR1cmVTb3VyY2U6OnNldEF1ZGlvU2FtcGxlQnVmZmVyRGVsZWdhdGUoQVZDYXB0dXJlQXVkaW9E
YXRhT3V0cHV0VHlwZSogYXVkaW9PdXRwdXQpCit7CisgICAgW2F1ZGlvT3V0cHV0IHNldFNhbXBs
ZUJ1ZmZlckRlbGVnYXRlOm1fb2JqY09ic2VydmVyLmdldCgpIHF1ZXVlOmdsb2JhQXVkaW9DYXB0
dXJlU2VyaWFsUXVldWUoKV07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworQGltcGxl
bWVudGF0aW9uIFdlYkNvcmVBVk1lZGlhQ2FwdHVyZVNvdXJjZU9ic2VydmVyCisKKy0gKGlkKWlu
aXRXaXRoQ2FsbGJhY2s6KEFWTWVkaWFDYXB0dXJlU291cmNlKiljYWxsYmFjaworeworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIG1fY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClkaXNjb25uZWN0Cit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVl
c3RzV2l0aFRhcmdldDpzZWxmXTsKKyAgICBtX2NhbGxiYWNrID0gMDsKK30KKworLSAodm9pZClj
YXB0dXJlU2Vzc2lvblN0b3BwZWRSdW5uaW5nOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgoreworICAgIFVOVVNFRF9QQVJBTShub3RpZmljYXRpb24pOworCisgICAgaWYgKCFtX2NhbGxi
YWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAobV9jYWxsYmFjaykKKyAgICAgICAgICAgIG1f
Y2FsbGJhY2stPmNhcHR1cmVTZXNzaW9uU3RvcHBlZFJ1bm5pbmcoKTsKKyAgICB9KTsKK30KKwor
LSAodm9pZCljYXB0dXJlT3V0cHV0OihBVkNhcHR1cmVPdXRwdXRUeXBlICopY2FwdHVyZU91dHB1
dCBkaWRPdXRwdXRTYW1wbGVCdWZmZXI6KENNU2FtcGxlQnVmZmVyUmVmKXNhbXBsZUJ1ZmZlciBm
cm9tQ29ubmVjdGlvbjooQVZDYXB0dXJlQ29ubmVjdGlvblR5cGUgKiljb25uZWN0aW9uCit7Cisg
ICAgaWYgKCFtX2NhbGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBDRlJldGFpbihzYW1w
bGVCdWZmZXIpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IF57CisgICAgICAgIGlmIChtX2NhbGxiYWNrKQorICAgICAgICAgICAgbV9jYWxsYmFjay0+Y2Fw
dHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKGNhcHR1cmVPdXRw
dXQsIHNhbXBsZUJ1ZmZlciwgY29ubmVjdGlvbik7CisgICAgICAgIENGUmVsZWFzZShzYW1wbGVC
dWZmZXIpOworICAgIH0pOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlk
ZW9DYXB0dXJlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3Vy
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFW
VmlkZW9DYXB0dXJlU291cmNlX2gKKyNkZWZpbmUgQVZWaWRlb0NhcHR1cmVTb3VyY2VfaAorCisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUg
IkFWTWVkaWFDYXB0dXJlU291cmNlLmgiCisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNN
Rm9ybWF0RGVzY3JpcHRpb24gKkNNRm9ybWF0RGVzY3JpcHRpb25SZWY7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQVZWaWRlb0NhcHR1cmVTb3VyY2UgOiBwdWJsaWMgQVZNZWRpYUNh
cHR1cmVTb3VyY2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8QVZNZWRpYUNhcHR1cmVT
b3VyY2U+IGNyZWF0ZShBVkNhcHR1cmVEZXZpY2UqLCBjb25zdCBBdG9taWNTdHJpbmcmLCBQYXNz
UmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KTsKKworICAgIHZpcnR1YWwgUmVmUHRyPE1lZGlhU3Ry
ZWFtU291cmNlQ2FwYWJpbGl0aWVzPiBjYXBhYmlsaXRpZXMoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25u
ZWN0aW9uKEFWQ2FwdHVyZU91dHB1dCosIENNU2FtcGxlQnVmZmVyUmVmLCBBVkNhcHR1cmVDb25u
ZWN0aW9uKikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgQVZWaWRlb0NhcHR1cmVTb3VyY2Uo
QVZDYXB0dXJlRGV2aWNlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwgUGFzc1JlZlB0cjxNZWRpYUNv
bnN0cmFpbnRzPik7CisgICAgdmlydHVhbCB+QVZWaWRlb0NhcHR1cmVTb3VyY2UoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXR1cENhcHR1cmVTZXNzaW9uKCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVN0YXRlcygpIE9WRVJSSURFOworCisgICAgYm9vbCBhcHBseUNvbnN0cmFp
bnRzKE1lZGlhQ29uc3RyYWludHMqKTsKKyAgICBib29sIHNldEZyYW1lUmF0ZUNvbnN0cmFpbnQo
ZmxvYXQgbWluRnJhbWVSYXRlLCBmbG9hdCBtYXhGcmFtZVJhdGUpOworCisgICAgdm9pZCBjYWxj
dWxhdGVGcmFtZXJhdGUoQ01TYW1wbGVCdWZmZXJSZWYpOworCisgICAgUmV0YWluUHRyPEFWQ2Fw
dHVyZUNvbm5lY3Rpb24+IG1fdmlkZW9Db25uZWN0aW9uOworICAgIFJldGFpblB0cjxDTUZvcm1h
dERlc2NyaXB0aW9uUmVmPiBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb247CisgICAgVmVjdG9yPEZs
b2F0NjQ+IG1fdmlkZW9GcmFtZVRpbWVTdGFtcHM7CisgICAgRmxvYXQ2NCBtX2ZyYW1lUmF0ZTsK
KyAgICBpbnQzMl90IG1fd2lkdGg7CisgICAgaW50MzJfdCBtX2hlaWdodDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNl
bmRpZiAvLyBBVlZpZGVvQ2FwdHVyZVNvdXJjZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJl
U291cmNlLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbXBvcnQgIkFWVmlkZW9DYXB0dXJl
U291cmNlLmgiCisKKyNpbXBvcnQgIkFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKKyNpbXBvcnQg
IkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFD
b25zdHJhaW50cy5oIgorI2ltcG9ydCAiTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuaCIKKyNpbXBv
cnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCA8
QVZGb3VuZGF0aW9uL0FWRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisK
K3R5cGVkZWYgQVZDYXB0dXJlQ29ubmVjdGlvbiBBVkNhcHR1cmVDb25uZWN0aW9uVHlwZTsKK3R5
cGVkZWYgQVZDYXB0dXJlRGV2aWNlIEFWQ2FwdHVyZURldmljZVR5cGU7Cit0eXBlZGVmIEFWQ2Fw
dHVyZURldmljZUlucHV0IEFWQ2FwdHVyZURldmljZUlucHV0VHlwZTsKK3R5cGVkZWYgQVZDYXB0
dXJlT3V0cHV0IEFWQ2FwdHVyZU91dHB1dFR5cGU7Cit0eXBlZGVmIEFWQ2FwdHVyZVZpZGVvRGF0
YU91dHB1dCBBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXRUeXBlOworCitTT0ZUX0xJTktfRlJBTUVX
T1JLX09QVElPTkFMKEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwo
Q29yZU1lZGlhKQorCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVDb25u
ZWN0aW9uKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlRGV2aWNlKQor
U09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlRGV2aWNlSW5wdXQpCitTT0ZU
X0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVPdXRwdXQpCitTT0ZUX0xJTktfQ0xB
U1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXQpCisKKyNkZWZpbmUgQVZD
YXB0dXJlQ29ubmVjdGlvbiBnZXRBVkNhcHR1cmVDb25uZWN0aW9uQ2xhc3MoKQorI2RlZmluZSBB
VkNhcHR1cmVEZXZpY2UgZ2V0QVZDYXB0dXJlRGV2aWNlQ2xhc3MoKQorI2RlZmluZSBBVkNhcHR1
cmVEZXZpY2VJbnB1dCBnZXRBVkNhcHR1cmVEZXZpY2VJbnB1dENsYXNzKCkKKyNkZWZpbmUgQVZD
YXB0dXJlT3V0cHV0IGdldEFWQ2FwdHVyZU91dHB1dENsYXNzKCkKKyNkZWZpbmUgQVZDYXB0dXJl
VmlkZW9EYXRhT3V0cHV0IGdldEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dENsYXNzKCkKKworU09G
VF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZUF1ZGlvLCBOU1N0cmluZyAq
KQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZVZpZGVvLCBOU1N0
cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9u
UHJlc2V0MTI4MHg3MjAsIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRp
b24sIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwLCBOU1N0cmluZyAqKQorU09GVF9MSU5L
X1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MzUyeDI4OCwgTlNT
dHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlU2Vzc2lv
blByZXNldExvdywgTlNTdHJpbmcgKikKKworI2RlZmluZSBBVk1lZGlhVHlwZVZpZGVvIGdldEFW
TWVkaWFUeXBlVmlkZW8oKQorI2RlZmluZSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjAg
Z2V0QVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwKCkKKyNkZWZpbmUgQVZDYXB0dXJlU2Vz
c2lvblByZXNldDY0MHg0ODAgZ2V0QVZDYXB0dXJlU2Vzc2lvblByZXNldDY0MHg0ODAoKQorI2Rl
ZmluZSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MzUyeDI4OCBnZXRBVkNhcHR1cmVTZXNzaW9uUHJl
c2V0MzUyeDI4OCgpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXRMb3cgZ2V0QVZDYXB0
dXJlU2Vzc2lvblByZXNldExvdygpCisKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNU2FtcGxlQnVm
ZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24sIENNRm9ybWF0RGVzY3JpcHRpb25SZWYsIChDTVNhbXBs
ZUJ1ZmZlclJlZiBzYnVmKSwgKHNidWYpKTsKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNU2FtcGxl
QnVmZmVyR2V0UHJlc2VudGF0aW9uVGltZVN0YW1wLCBDTVRpbWUsIChDTVNhbXBsZUJ1ZmZlclJl
ZiBzYnVmKSwgKHNidWYpKTsKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNVGltZUNvbXBhcmUsIGlu
dDMyX3QsIChDTVRpbWUgdGltZTEsIENNVGltZSB0aW1lMiksICh0aW1lMSwgdGltZTIpKQorU09G
VF9MSU5LKENvcmVNZWRpYSwgQ01UaW1lTWFrZSwgQ01UaW1lLCAoaW50NjRfdCB2YWx1ZSwgaW50
MzJfdCB0aW1lc2NhbGUpLCAodmFsdWUsIHRpbWVzY2FsZSkpCitTT0ZUX0xJTksoQ29yZU1lZGlh
LCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25zLCBDTVZpZGVvRGltZW5zaW9u
cywgKENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiB2aWRlb0Rlc2MpLCAodmlkZW9EZXNjKSk7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEFWTWVkaWFDYXB0dXJlU291cmNlPiBB
VlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKEFWQ2FwdHVyZURldmljZVR5cGUqIGRldmljZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBjb25z
dHJhaW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQVZWaWRlb0NhcHR1cmVTb3VyY2Uo
ZGV2aWNlLCBpZCwgY29uc3RyYWludCkpOworfQorCitBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6QVZW
aWRlb0NhcHR1cmVTb3VyY2UoQVZDYXB0dXJlRGV2aWNlVHlwZSogZGV2aWNlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGNvbnN0cmFpbnQpCisg
ICAgOiBBVk1lZGlhQ2FwdHVyZVNvdXJjZShkZXZpY2UsIGlkLCBNZWRpYVN0cmVhbVNvdXJjZTo6
VmlkZW8sIGNvbnN0cmFpbnQpCisgICAgLCBtX2ZyYW1lUmF0ZSgwKQorICAgICwgbV93aWR0aCgw
KQorICAgICwgbV9oZWlnaHQoMCkKK3sKKyAgICBjdXJyZW50U3RhdGVzKCktPnNldFNvdXJjZUlk
KGlkKTsKKyAgICBjdXJyZW50U3RhdGVzKCktPnNldFNvdXJjZVR5cGUoTWVkaWFTdHJlYW1Tb3Vy
Y2VTdGF0ZXM6OkNhbWVyYSk7Cit9CisKK0FWVmlkZW9DYXB0dXJlU291cmNlOjp+QVZWaWRlb0Nh
cHR1cmVTb3VyY2UoKQoreworfQorCitSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRp
ZXM+IEFWVmlkZW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQVZWaWRlb0NhcHR1cmVT
b3VyY2U6OnVwZGF0ZVN0YXRlcygpCit7CisgICAgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMqIHN0
YXRlcyA9IGN1cnJlbnRTdGF0ZXMoKTsKKworICAgIGlmIChbZGV2aWNlKCkgcG9zaXRpb25dID09
IEFWQ2FwdHVyZURldmljZVBvc2l0aW9uRnJvbnQpCisgICAgICAgIHN0YXRlcy0+c2V0RmFjaW5n
TW9kZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VXNlcik7CisgICAgZWxzZSBpZiAoW2Rldmlj
ZSgpIHBvc2l0aW9uXSA9PSBBVkNhcHR1cmVEZXZpY2VQb3NpdGlvbkJhY2spCisgICAgICAgIHN0
YXRlcy0+c2V0RmFjaW5nTW9kZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6RW52aXJvbm1lbnQp
OworICAgIGVsc2UKKyAgICAgICAgc3RhdGVzLT5zZXRGYWNpbmdNb2RlKE1lZGlhU3RyZWFtU291
cmNlU3RhdGVzOjpVbmtub3duKTsKKyAgICAKKyAgICBzdGF0ZXMtPnNldEZyYW1lUmF0ZShtX2Zy
YW1lUmF0ZSk7CisgICAgc3RhdGVzLT5zZXRXaWR0aChtX3dpZHRoKTsKKyAgICBzdGF0ZXMtPnNl
dEhlaWdodChtX2hlaWdodCk7CisgICAgc3RhdGVzLT5zZXRBc3BlY3RSYXRpbyhzdGF0aWNfY2Fz
dDxmbG9hdD4obV93aWR0aCkgLyBtX2hlaWdodCk7Cit9CisKK2Jvb2wgQVZWaWRlb0NhcHR1cmVT
b3VyY2U6OnNldEZyYW1lUmF0ZUNvbnN0cmFpbnQoZmxvYXQgbWluRnJhbWVSYXRlLCBmbG9hdCBt
YXhGcmFtZVJhdGUpCit7CisgICAgQVZGcmFtZVJhdGVSYW5nZSAqYmVzdEZyYW1lUmF0ZVJhbmdl
ID0gMDsKKworICAgIGZvciAoQVZGcmFtZVJhdGVSYW5nZSAqZnJhbWVSYXRlUmFuZ2UgaW4gW1tk
ZXZpY2UoKSBhY3RpdmVGb3JtYXRdIHZpZGVvU3VwcG9ydGVkRnJhbWVSYXRlUmFuZ2VzXSkgewor
ICAgICAgICBpZiAoIW1heEZyYW1lUmF0ZSkgeworICAgICAgICAgICAgaWYgKG1pbkZyYW1lUmF0
ZSA9PSBbZnJhbWVSYXRlUmFuZ2UgbWluRnJhbWVSYXRlXSkKKyAgICAgICAgICAgICAgICBiZXN0
RnJhbWVSYXRlUmFuZ2UgPSBmcmFtZVJhdGVSYW5nZTsKKyAgICAgICAgfSBlbHNlIGlmIChtaW5G
cmFtZVJhdGUgPj0gW2ZyYW1lUmF0ZVJhbmdlIG1pbkZyYW1lUmF0ZV0gJiYgbWF4RnJhbWVSYXRl
IDw9IFtmcmFtZVJhdGVSYW5nZSBtYXhGcmFtZVJhdGVdKSB7CisgICAgICAgICAgICBpZiAoQ01U
SU1FX0NPTVBBUkVfSU5MSU5FKFtmcmFtZVJhdGVSYW5nZSBtaW5GcmFtZUR1cmF0aW9uXSwgPiwg
W2Jlc3RGcmFtZVJhdGVSYW5nZSBtaW5GcmFtZUR1cmF0aW9uXSkpCisgICAgICAgICAgICAgICAg
YmVzdEZyYW1lUmF0ZVJhbmdlID0gZnJhbWVSYXRlUmFuZ2U7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgaWYgKCFiZXN0RnJhbWVSYXRlUmFuZ2UpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAi
QVZWaWRlb0NhcHR1cmVTb3VyY2U6OnNldEZyYW1lUmF0ZUNvbnN0cmFpbnQoJXApLCBmcmFtZSBy
YXRlIHJhbmdlICVmLi4lZiBub3Qgc3VwcG9ydGVkIGJ5IHZpZGVvIGRldmljZSIsIHRoaXMsIG1p
bkZyYW1lUmF0ZSwgbWF4RnJhbWVSYXRlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBAdHJ5IHsKKyAgICAgICAgaWYg
KFtkZXZpY2UoKSBsb2NrRm9yQ29uZmlndXJhdGlvbjomZXJyb3JdKSB7CisgICAgICAgICAgICBb
ZGV2aWNlKCkgc2V0QWN0aXZlVmlkZW9NaW5GcmFtZUR1cmF0aW9uOltiZXN0RnJhbWVSYXRlUmFu
Z2UgbWluRnJhbWVEdXJhdGlvbl1dOworICAgICAgICAgICAgaWYgKG1heEZyYW1lUmF0ZSkKKyAg
ICAgICAgICAgICAgICBbZGV2aWNlKCkgc2V0QWN0aXZlVmlkZW9NYXhGcmFtZUR1cmF0aW9uOlti
ZXN0RnJhbWVSYXRlUmFuZ2UgbWF4RnJhbWVEdXJhdGlvbl1dOworICAgICAgICAgICAgW2Rldmlj
ZSgpIHVubG9ja0ZvckNvbmZpZ3VyYXRpb25dOworICAgICAgICB9CisgICAgfSBAY2F0Y2goTlNF
eGNlcHRpb24gKmV4Y2VwdGlvbikgeworICAgICAgICBMT0coTWVkaWEsICJBVlZpZGVvQ2FwdHVy
ZVNvdXJjZTo6c2V0RnJhbWVSYXRlQ29uc3RyYWludCglcCksIGV4Y2VwdGlvbiB0aHJvd24gY29u
ZmlndXJpbmcgZGV2aWNlOiA8JXM+ICVzIiwgdGhpcywgW1tleGNlcHRpb24gbmFtZV0gVVRGOFN0
cmluZ10sIFtbZXhjZXB0aW9uIHJlYXNvbl0gVVRGOFN0cmluZ10pOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChlcnJvcikgeworICAgICAgICBMT0coTWVkaWEs
ICJBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6c2V0RnJhbWVSYXRlQ29uc3RyYWludCglcCksIGZhaWxl
ZCB0byBsb2NrIHZpZGVvIGRldmljZSBmb3IgY29uZmlndXJhdGlvbjogJXMiLCB0aGlzLCBbW2Vy
cm9yIGxvY2FsaXplZERlc2NyaXB0aW9uXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKK05TTG9nKEAic2V0IGZyYW1lIHJhdGUgdG8gJWYiLCBbYmVzdEZyYW1l
UmF0ZVJhbmdlIG1pbkZyYW1lUmF0ZV0pOworICAgIExPRyhNZWRpYSwgIkFWVmlkZW9DYXB0dXJl
U291cmNlOjpzZXRGcmFtZVJhdGVDb25zdHJhaW50KCVwKSAtIHNldCBmcmFtZSByYXRlIHJhbmdl
IHRvICVmLi4lZiIsIHRoaXMsIG1pbkZyYW1lUmF0ZSwgbWF4RnJhbWVSYXRlKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6YXBwbHlDb25zdHJhaW50
cyhNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKK3sKKyAgICBBU1NFUlQoY29uc3RyYWlu
dHMpOworCisgICAgY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIGNvbnN0cmFpbnROYW1lcyA9
IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnZhbGlkQ29uc3RyYWludE5hbWVzKCk7CisgICAgU3Ry
aW5nIHdpZHRoQ29uc3RyYWludDsKKyAgICBTdHJpbmcgaGVpZ2h0Q29uc3RyYWludDsKKworICAg
IGNvbnN0cmFpbnRzLT5nZXRNYW5kYXRvcnlDb25zdHJhaW50VmFsdWUoY29uc3RyYWludE5hbWVz
W0FWQ2FwdHVyZURldmljZU1hbmFnZXI6OldpZHRoXSwgd2lkdGhDb25zdHJhaW50KTsKKyAgICBj
b25zdHJhaW50cy0+Z2V0TWFuZGF0b3J5Q29uc3RyYWludFZhbHVlKGNvbnN0cmFpbnROYW1lc1tB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpIZWlnaHRdLCBoZWlnaHRDb25zdHJhaW50KTsKKworICAg
IGludCB3aWR0aCA9IHdpZHRoQ29uc3RyYWludC50b0ludCgpOworICAgIGludCBoZWlnaHQgPSBo
ZWlnaHRDb25zdHJhaW50LnRvSW50KCk7CisgICAgaWYgKCF3aWR0aCAmJiAhaGVpZ2h0KSB7Cisg
ICAgICAgIGNvbnN0cmFpbnRzLT5nZXRPcHRpb25hbENvbnN0cmFpbnRWYWx1ZShjb25zdHJhaW50
TmFtZXNbQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6V2lkdGhdLCB3aWR0aENvbnN0cmFpbnQpOwor
ICAgICAgICBjb25zdHJhaW50cy0+Z2V0T3B0aW9uYWxDb25zdHJhaW50VmFsdWUoY29uc3RyYWlu
dE5hbWVzW0FWQ2FwdHVyZURldmljZU1hbmFnZXI6OkhlaWdodF0sIGhlaWdodENvbnN0cmFpbnQp
OworICAgICAgICB3aWR0aCA9IHdpZHRoQ29uc3RyYWludC50b0ludCgpOworICAgICAgICBoZWln
aHQgPSBoZWlnaHRDb25zdHJhaW50LnRvSW50KCk7CisgICAgfQorICAgIAorICAgIGlmICh3aWR0
aCB8fCBoZWlnaHQpIHsKKyAgICAgICAgTlNTdHJpbmcgKnByZXNldCA9IEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OmJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlkZW9TaXplKHNlc3Npb24oKSwgd2lkdGgs
IGhlaWdodCk7CisgICAgICAgIGlmICghcHJlc2V0IHx8ICFbc2Vzc2lvbigpIGNhblNldFNlc3Np
b25QcmVzZXQ6cHJlc2V0XSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIFtzZXNzaW9uKCkgc2V0U2Vzc2lvblByZXNldDpwcmVzZXRdOworICAgIH0KKworICAg
IFN0cmluZyBmcmFtZVJhdGVDb25zdHJhaW50OworICAgIGNvbnN0cmFpbnRzLT5nZXRNYW5kYXRv
cnlDb25zdHJhaW50VmFsdWUoY29uc3RyYWludE5hbWVzW0FWQ2FwdHVyZURldmljZU1hbmFnZXI6
OkZyYW1lUmF0ZV0sIGZyYW1lUmF0ZUNvbnN0cmFpbnQpOworICAgIGZsb2F0IGZyYW1lUmF0ZSA9
IGZyYW1lUmF0ZUNvbnN0cmFpbnQudG9GbG9hdCgpOworICAgIGlmICghZnJhbWVSYXRlKSB7Cisg
ICAgICAgIGNvbnN0cmFpbnRzLT5nZXRPcHRpb25hbENvbnN0cmFpbnRWYWx1ZShjb25zdHJhaW50
TmFtZXNbQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6RnJhbWVSYXRlXSwgZnJhbWVSYXRlQ29uc3Ry
YWludCk7CisgICAgICAgIGZyYW1lUmF0ZSA9IGZyYW1lUmF0ZUNvbnN0cmFpbnQudG9GbG9hdCgp
OworICAgIH0KKyAgICBpZiAoZnJhbWVSYXRlICYmICFzZXRGcmFtZVJhdGVDb25zdHJhaW50KGZy
YW1lUmF0ZSwgMCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpzZXR1cENhcHR1cmVTZXNzaW9uKCkKK3sK
KyAgICBSZXRhaW5QdHI8QVZDYXB0dXJlRGV2aWNlSW5wdXRUeXBlPiB2aWRlb0luID0gYWRvcHRO
UyhbW0FWQ2FwdHVyZURldmljZUlucHV0IGFsbG9jXSBpbml0V2l0aERldmljZTpkZXZpY2UoKSBl
cnJvcjpuaWxdKTsKKyAgICBBU1NFUlQoW3Nlc3Npb24oKSBjYW5BZGRJbnB1dDp2aWRlb0luLmdl
dCgpXSk7CisgICAgaWYgKFtzZXNzaW9uKCkgY2FuQWRkSW5wdXQ6dmlkZW9Jbi5nZXQoKV0pCisg
ICAgICAgIFtzZXNzaW9uKCkgYWRkSW5wdXQ6dmlkZW9Jbi5nZXQoKV07CisgICAgCisgICAgaWYg
KGNvbnN0cmFpbnRzKCkpCisgICAgICAgIGFwcGx5Q29uc3RyYWludHMoY29uc3RyYWludHMoKSk7
CisKKyAgICBSZXRhaW5QdHI8QVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0VHlwZT4gdmlkZW9PdXRw
dXQgPSBhZG9wdE5TKFtbQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0IGFsbG9jXSBpbml0XSk7Cisg
ICAgc2V0VmlkZW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZSh2aWRlb091dHB1dC5nZXQoKSk7CisgICAg
QVNTRVJUKFtzZXNzaW9uKCkgY2FuQWRkT3V0cHV0OnZpZGVvT3V0cHV0LmdldCgpXSk7CisgICAg
aWYgKFtzZXNzaW9uKCkgY2FuQWRkT3V0cHV0OnZpZGVvT3V0cHV0LmdldCgpXSkKKyAgICAgICAg
W3Nlc3Npb24oKSBhZGRPdXRwdXQ6dmlkZW9PdXRwdXQuZ2V0KCldOworICAgIAorICAgIG1fdmlk
ZW9Db25uZWN0aW9uID0gYWRvcHROUyhbdmlkZW9PdXRwdXQuZ2V0KCkgY29ubmVjdGlvbldpdGhN
ZWRpYVR5cGU6QVZNZWRpYVR5cGVWaWRlb10pOworfQorCit2b2lkIEFWVmlkZW9DYXB0dXJlU291
cmNlOjpjYWxjdWxhdGVGcmFtZXJhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKQor
eworICAgIENNVGltZSBzYW1wbGVUaW1lID0gQ01TYW1wbGVCdWZmZXJHZXRQcmVzZW50YXRpb25U
aW1lU3RhbXAoc2FtcGxlQnVmZmVyKTsKKyAgICBpZiAoIUNNVElNRV9JU19OVU1FUklDKHNhbXBs
ZVRpbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdDY0IGZyYW1lVGltZSA9IENNVGlt
ZUdldFNlY29uZHMoc2FtcGxlVGltZSk7CisgICAgRmxvYXQ2NCBvbmVTZWNvbmRBZ28gPSBmcmFt
ZVRpbWUgLSAxOworICAgIAorICAgIG1fdmlkZW9GcmFtZVRpbWVTdGFtcHMuYXBwZW5kKGZyYW1l
VGltZSk7CisgICAgCisgICAgd2hpbGUgKG1fdmlkZW9GcmFtZVRpbWVTdGFtcHNbMF0gPCBvbmVT
ZWNvbmRBZ28pCisgICAgICAgIG1fdmlkZW9GcmFtZVRpbWVTdGFtcHMucmVtb3ZlKDApOworICAg
IAorICAgIG1fZnJhbWVSYXRlID0gKG1fZnJhbWVSYXRlICsgbV92aWRlb0ZyYW1lVGltZVN0YW1w
cy5zaXplKCkpIC8gMjsKK30KKyAgICAKK3ZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1
cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbihBVkNhcHR1cmVPdXRw
dXRUeXBlKiwgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBBVkNhcHR1cmVDb25uZWN0
aW9uVHlwZSopCit7CisgICAgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlv
biA9IENNU2FtcGxlQnVmZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24oc2FtcGxlQnVmZmVyKTsKKyAg
ICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBDRlJldGFp
bihmb3JtYXREZXNjcmlwdGlvbik7CisgICAgbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uID0gYWRv
cHRDRihmb3JtYXREZXNjcmlwdGlvbik7CisgICAgY2FsY3VsYXRlRnJhbWVyYXRlKHNhbXBsZUJ1
ZmZlcik7CisKKyAgICBDTVZpZGVvRGltZW5zaW9ucyBkaW1lbnNpb25zID0gQ01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uR2V0RGltZW5zaW9ucyhmb3JtYXREZXNjcmlwdGlvbik7CisgICAgbV93aWR0
aCA9IGRpbWVuc2lvbnMud2lkdGg7CisgICAgbV9oZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NU
UkVBTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9NZWRp
YVN0cmVhbUNlbnRlck1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL01lZGlhU3RyZWFtQ2VudGVyTWFjLmNwcAkocmV2aXNpb24gMTU4
MDI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01lZGlhU3Ry
ZWFtQ2VudGVyTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEwIEBACiAKICNp
bmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlck1hYy5oIgogCisjaW5jbHVkZSAiQVZDYXB0dXJlRGV2
aWNlTWFuYWdlci5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQuaCIKICNp
bmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVRy
YWNrU291cmNlc1JlcXVlc3RDbGllbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU3
LDIwICs1Nyw4MSBAQCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6fk1lZGlhU3RyZWFtQ2VudGVyCiB7
CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1DZW50ZXJNYWM6OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFp
bnRzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVk
aWFDb25zdHJhaW50cz4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pCit2b2lkIE1lZGlh
U3RyZWFtQ2VudGVyTWFjOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+IHBycFF1ZXJ5Q2xpZW50LCBQYXNzUmVmUHRyPE1lZGlh
Q29uc3RyYWludHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50
cz4gdmlkZW9Db25zdHJhaW50cykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlZlB0
cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW50PiBjbGllbnQgPSBwcnBRdWVyeUNsaWVudDsKKyAg
ICAKKyAgICBBU1NFUlQoY2xpZW50KTsKKworICAgIGlmIChhdWRpb0NvbnN0cmFpbnRzKSB7Cisg
ICAgICAgIFN0cmluZyBpbnZhbGlkQ29uc3RyYWludDsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2hhcmVkKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJl
YW1Tb3VyY2U6OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWlu
dCk7CisgICAgICAgIGlmICghaW52YWxpZENvbnN0cmFpbnQuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBjbGllbnQtPmNvbnN0cmFpbnRzSW52YWxpZChpbnZhbGlkQ29uc3RyYWludCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodmlkZW9Db25zdHJh
aW50cykgeworICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7CisgICAgICAgIEFWQ2Fw
dHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBl
KE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbywgdmlkZW9Db25zdHJhaW50cy5nZXQoKSwgaW52YWxp
ZENvbnN0cmFpbnQpOworICAgICAgICBpZiAoIWludmFsaWRDb25zdHJhaW50LmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgY2xpZW50LT5jb25zdHJhaW50c0ludmFsaWQoaW52YWxpZENvbnN0cmFp
bnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgY2xpZW50
LT5jb25zdHJhaW50c1ZhbGlkYXRlZCgpOwogfQogICAgIAotdm9pZCBNZWRpYVN0cmVhbUNlbnRl
ck1hYzo6Y3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xp
ZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0
cmFpbnRzPikKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJNYWM6OmNyZWF0ZU1lZGlhU3RyZWFtKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudD4gcHJwUXVlcnlDbGllbnQsIFBhc3NS
ZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJhaW50cywgUGFzc1JlZlB0cjxNZWRp
YUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+IGNsaWVudCA9IHBycFF1ZXJ5
Q2xpZW50OworICAgIAorICAgIEFTU0VSVChjbGllbnQpOworICAgIAorICAgIFZlY3RvcjxSZWZQ
dHI8TWVkaWFTdHJlYW1Tb3VyY2U+PiBhdWRpb1NvdXJjZXM7CisgICAgVmVjdG9yPFJlZlB0cjxN
ZWRpYVN0cmVhbVNvdXJjZT4+IHZpZGVvU291cmNlczsKKyAgICAKKyAgICBpZiAoYXVkaW9Db25z
dHJhaW50cykgeworICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7CisgICAgICAgIEFW
Q2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFU
eXBlKE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbywgYXVkaW9Db25zdHJhaW50cy5nZXQoKSwgaW52
YWxpZENvbnN0cmFpbnQpOworICAgICAgICBpZiAoIWludmFsaWRDb25zdHJhaW50LmlzRW1wdHko
KSkgeworICAgICAgICAgICAgY2xpZW50LT5mYWlsZWRUb0NyZWF0ZVN0cmVhbVdpdGhDb25zdHJh
aW50c0Vycm9yKGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBhdWRpb1Nv
dXJjZSA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLmJlc3RTb3VyY2VGb3JUeXBl
QW5kQ29uc3RyYWludHMoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRz
LmdldCgpKTsKKyAgICAgICAgQVNTRVJUKGF1ZGlvU291cmNlKTsKKyAgICAgICAgCisgICAgICAg
IGF1ZGlvU291cmNlcy5hcHBlbmQoYXVkaW9Tb3VyY2UucmVsZWFzZSgpKTsKKyAgICB9CisgICAg
CisgICAgaWYgKHZpZGVvQ29uc3RyYWludHMpIHsKKyAgICAgICAgU3RyaW5nIGludmFsaWRDb25z
dHJhaW50OworICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKS52ZXJpZnlD
b25zdHJhaW50c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29u
c3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgaWYgKCFpbnZhbGlk
Q29uc3RyYWludC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNsaWVudC0+ZmFpbGVkVG9DcmVh
dGVTdHJlYW1XaXRoQ29uc3RyYWludHNFcnJvcihpbnZhbGlkQ29uc3RyYWludCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxNZWRpYVN0
cmVhbVNvdXJjZT4gdmlkZW9Tb3VyY2UgPSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQo
KS5iZXN0U291cmNlRm9yVHlwZUFuZENvbnN0cmFpbnRzKE1lZGlhU3RyZWFtU291cmNlOjpWaWRl
bywgdmlkZW9Db25zdHJhaW50cy5nZXQoKSk7CisgICAgICAgIEFTU0VSVCh2aWRlb1NvdXJjZSk7
CisgICAgICAgIAorICAgICAgICB2aWRlb1NvdXJjZXMuYXBwZW5kKHZpZGVvU291cmNlLnJlbGVh
c2UoKSk7CisgICAgfQorICAgIAorICAgIGNsaWVudC0+ZGlkQ3JlYXRlU3RyZWFtKE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBNZWRpYVN0
cmVhbURlc2NyaXB0b3I6OklzTm90RW5kZWQpKTsKIH0KIAotYm9vbCBNZWRpYVN0cmVhbUNlbnRl
ck1hYzo6Z2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRy
YWNrU291cmNlc1JlcXVlc3RDbGllbnQ+KQorYm9vbCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6Z2V0
TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNl
c1JlcXVlc3RDbGllbnQ+IHBycENsaWVudCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBmYWxzZTsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0
Q2xpZW50PiByZXF1ZXN0Q2xpZW50ID0gcHJwQ2xpZW50OworCisgICAgVmVjdG9yPFJlZlB0cjxU
cmFja1NvdXJjZUluZm8+PiBzb3VyY2VzID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2hhcmVk
KCkuZ2V0U291cmNlc0luZm8ocmVxdWVzdENsaWVudC0+cmVxdWVzdE9yaWdpbigpKTsKKworICAg
IHJlcXVlc3RDbGllbnQtPmRpZENvbXBsZXRlUmVxdWVzdChzb3VyY2VzKTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhU3RyZWFtQ2VudGVyLmNwcAkocmV2
aXNpb24gMTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFT
dHJlYW1DZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxNCArOTEsMTQgQEAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZU1vY2tTb3VyY2VzKCkKICAgICBtb2NrU291cmNlMS0+bV9jYXBhYmls
aXRpZXMtPnNldEFzcGVjdFJhdGlvUmFuZ2UoTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXR5UmFu
Z2UoNCAvIDMuMGYsIDE2IC8gOS4wZiwgdHJ1ZSkpOwogICAgIG1vY2tTb3VyY2UxLT5tX2NhcGFi
aWxpdGllcy0+c2V0Vm9sdW1lUmFuZ2UoTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXR5UmFuZ2Uo
MTBVTCwgOTBVTCwgdHJ1ZSkpOwogCi0gICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy5z
b3VyY2VUeXBlID0gTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkNhbWVyYTsKLSAgICBtb2NrU291
cmNlMS0+bV9jdXJyZW50U3RhdGVzLnNvdXJjZUlkID0gbW9ja1NvdXJjZTEtPmlkKCk7Ci0gICAg
bW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy5mYWNpbmdNb2RlID0gTWVkaWFTdHJlYW1Tb3Vy
Y2VTdGF0ZXM6OlVzZXI7Ci0gICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy53aWR0aCA9
IDE5MjA7Ci0gICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy5oZWlnaHQgPSAxMDgwOwot
ICAgIG1vY2tTb3VyY2UxLT5tX2N1cnJlbnRTdGF0ZXMuZnJhbWVSYXRlID0gMzA7Ci0gICAgbW9j
a1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy5hc3BlY3RSYXRpbyA9IDE2IC8gOS4wZjsKLSAgICBt
b2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLnZvbHVtZSA9IDcwOworICAgIG1vY2tTb3VyY2Ux
LT5tX2N1cnJlbnRTdGF0ZXMuc2V0U291cmNlVHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6
Q2FtZXJhKTsKKyAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLnNldFNvdXJjZUlkKG1v
Y2tTb3VyY2UxLT5pZCgpKTsKKyAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLnNldEZh
Y2luZ01vZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlVzZXIpOworICAgIG1vY2tTb3VyY2Ux
LT5tX2N1cnJlbnRTdGF0ZXMuc2V0V2lkdGgoMTkyMCk7CisgICAgbW9ja1NvdXJjZTEtPm1fY3Vy
cmVudFN0YXRlcy5zZXRIZWlnaHQoMTA4MCk7CisgICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0
YXRlcy5zZXRGcmFtZVJhdGUoMzApOworICAgIG1vY2tTb3VyY2UxLT5tX2N1cnJlbnRTdGF0ZXMu
c2V0QXNwZWN0UmF0aW8oMTYgLyA5LjBmKTsKKyAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3Rh
dGVzLnNldFZvbHVtZSg3MCk7CiAgICAgU3RyaW5nIG1vY2tTb3VyY2UxaWQgPSBtb2NrU291cmNl
MS0+aWQoKTsKICAgICBtb2NrU291cmNlTWFwKCkuYWRkKG1vY2tTb3VyY2UxaWQsIG1vY2tTb3Vy
Y2UxLnJlbGVhc2UoKSk7CiAKQEAgLTEwNyw5ICsxMDcsOSBAQCBzdGF0aWMgdm9pZCBpbml0aWFs
aXplTW9ja1NvdXJjZXMoKQogICAgIG1vY2tTb3VyY2UyLT5tX2NhcGFiaWxpdGllcy0+c2V0U291
cmNlSWQobW9ja1NvdXJjZTItPmlkKCkpOwogICAgIG1vY2tTb3VyY2UyLT5tX2NhcGFiaWxpdGll
cy0+c2V0Vm9sdW1lUmFuZ2UoTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXR5UmFuZ2UoMFVMLCAx
MDBVTCwgdHJ1ZSkpOwogCi0gICAgbW9ja1NvdXJjZTItPm1fY3VycmVudFN0YXRlcy5zb3VyY2VU
eXBlID0gTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6Ok1pY3JvcGhvbmU7Ci0gICAgbW9ja1NvdXJj
ZTItPm1fY3VycmVudFN0YXRlcy5zb3VyY2VJZCA9IG1vY2tTb3VyY2UyLT5pZCgpOwotICAgIG1v
Y2tTb3VyY2UyLT5tX2N1cnJlbnRTdGF0ZXMudm9sdW1lID0gNTA7CisgICAgbW9ja1NvdXJjZTIt
Pm1fY3VycmVudFN0YXRlcy5zZXRTb3VyY2VUeXBlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpN
aWNyb3Bob25lKTsKKyAgICBtb2NrU291cmNlMi0+bV9jdXJyZW50U3RhdGVzLnNldFNvdXJjZUlk
KG1vY2tTb3VyY2UyLT5pZCgpKTsKKyAgICBtb2NrU291cmNlMi0+bV9jdXJyZW50U3RhdGVzLnNl
dFZvbHVtZSg1MCk7CiAgICAgU3RyaW5nIG1vY2tTb3VyY2UyaWQgPSBtb2NrU291cmNlMi0+aWQo
KTsKICAgICBtb2NrU291cmNlTWFwKCkuYWRkKG1vY2tTb3VyY2UyaWQsIG1vY2tTb3VyY2UyLnJl
bGVhc2UoKSk7CiB9CkBAIC0yMDQsMTUgKzIwNCwxMyBAQCB2b2lkIE1vY2tNZWRpYVN0cmVhbUNl
bnRlcjo6Y3JlYXRlTWVkaWFTCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoYXVkaW9Db25zdHJhaW50cykgewotICAgICAgICAgICAgTW9ja1NvdXJjZU1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAuZmluZChtb2NrQXVkaW9Tb3VyY2VJRCgpKTsKLSAgICAgICAgICAg
IEFTU0VSVChpdCAhPSBtYXAuZW5kKCkpOwotCi0gICAgICAgICAgICBSZWZQdHI8TWVkaWFTdHJl
YW1Tb3VyY2U+IGF1ZGlvU291cmNlID0gaXQtPnZhbHVlOwotICAgICAgICAgICAgYXVkaW9Tb3Vy
Y2UtPnJlc2V0KCk7Ci0gICAgICAgICAgICBhdWRpb1NvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRp
YVN0cmVhbVNvdXJjZTo6TGl2ZSk7Ci0gICAgICAgICAgICBhdWRpb1NvdXJjZXMuYXBwZW5kKGF1
ZGlvU291cmNlLnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgTW9ja1NvdXJjZU1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAuZmluZChtb2NrQXVkaW9Tb3VyY2VJRCgpKTsKKyAgICAgICAgQVNT
RVJUKGl0ICE9IG1hcC5lbmQoKSk7CisKKyAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNl
PiBhdWRpb1NvdXJjZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgYXVkaW9Tb3VyY2UtPnJlc2V0KCk7
CisgICAgICAgIGF1ZGlvU291cmNlLT5zZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpM
aXZlKTsKKyAgICAgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChhdWRpb1NvdXJjZS5yZWxlYXNlKCkp
OwogICAgIH0KIAogICAgIGlmICh2aWRlb0NvbnN0cmFpbnRzKSB7CkBAIC0yMjIsMTUgKzIyMCwx
MyBAQCB2b2lkIE1vY2tNZWRpYVN0cmVhbUNlbnRlcjo6Y3JlYXRlTWVkaWFTCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodmlkZW9Db25zdHJhaW50cykgewot
ICAgICAgICAgICAgTW9ja1NvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZChtb2NrVmlk
ZW9Tb3VyY2VJRCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtYXAuZW5kKCkpOwotCi0g
ICAgICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHZpZGVvU291cmNlID0gaXQtPnZh
bHVlOwotICAgICAgICAgICAgdmlkZW9Tb3VyY2UtPnJlc2V0KCk7Ci0gICAgICAgICAgICB2aWRl
b1NvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSk7Ci0gICAgICAg
ICAgICB2aWRlb1NvdXJjZXMuYXBwZW5kKHZpZGVvU291cmNlLnJlbGVhc2UoKSk7Ci0gICAgICAg
IH0KKyAgICAgICAgTW9ja1NvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZChtb2NrVmlk
ZW9Tb3VyY2VJRCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC5lbmQoKSk7CisKKyAgICAg
ICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiB2aWRlb1NvdXJjZSA9IGl0LT52YWx1ZTsKKyAg
ICAgICAgdmlkZW9Tb3VyY2UtPnJlc2V0KCk7CisgICAgICAgIHZpZGVvU291cmNlLT5zZXRSZWFk
eVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpMaXZlKTsKKyAgICAgICAgdmlkZW9Tb3VyY2VzLmFw
cGVuZCh2aWRlb1NvdXJjZS5yZWxlYXNlKCkpOwogICAgIH0KICAgICAKICAgICBjbGllbnQtPmRp
ZENyZWF0ZVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShhdWRpb1NvdXJjZXMs
IHZpZGVvU291cmNlcywgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpJc05vdEVuZGVkKSk7CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNTgwOTYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0xMC0yNyAgRXJpYyBDYXJsc29uICA8ZXJpYy5j
YXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjIE1lZGlhU3RyZWFtXSBpbXBsZW1lbnQg
QVZGb3VuZGF0aW9uIGJhY2tlZCBNZWRpYVN0cmVhbVNvdXJjZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzE2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtLWFkZC1yZW1vdmUtdHJhY2tzLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAgKiBm
YXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tzLmh0bWw6IERpdHRv
LgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rvci1leHBl
Y3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1D
b25zdHJ1Y3Rvci5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtVHJhY2stZ2V0U291cmNlcy5odG1sOiBSZW1vdmUgdHlwby4KKyAgICAgICAgKiBmYXN0
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2stZXhwZWN0ZWQudHh0OiBVcGRhdGVkIHJlc3Vs
dHMuCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmh0bWw6IFVw
ZGF0ZSB0byB0ZXN0IHRyYWNrLnN0b3AoKSBiZWhhdmlvci4KKwogMjAxMy0xMC0yNiAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaHkgV2ViR0wg
dGVzdCBpcyBjcmFzaHkuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMTU4MDI1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbS1hZGQtcmVtb3ZlLXRyYWNrcy1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDEyICs0MiwxNCBAQCBQQVNTIHN0cmVhbTEuZ2V0VmlkZW9UcmFja3MoKS5s
ZW5ndGggaXMgCiBQQVNTIHN0cmVhbTEuZ2V0QXVkaW9UcmFja3MoKS5sZW5ndGggaXMgMgogUEFT
UyBzdHJlYW0xLmdldFZpZGVvVHJhY2tzKCkubGVuZ3RoIGlzIDIKIAotKioqIGFmdGVyIGFsbCB0
cmFja3MgaGF2ZSBiZWVuIHJlbW92ZWQsIHN0cmVhbS5lbmRlZCBzaG91bGQgcmV0dXJuIHRydWUK
KyoqKiByZW1vdmUgYWxsIHRyYWNrcywgc3RyZWFtLmVuZGVkIHNob3VsZCByZXR1cm4gdHJ1ZQor
UEFTUyBzdHJlYW0yLmdldEF1ZGlvVHJhY2tzKCkubGVuZ3RoIGlzIDAKK1BBU1Mgc3RyZWFtMi5n
ZXRWaWRlb1RyYWNrcygpLmxlbmd0aCBpcyAwCiBQQVNTIHN0cmVhbTIuZW5kZWQgaXMgdHJ1ZQog
CiAqKiogaXQgc2hvdWxkIGJlIGltcG9zc2libGUgdG8gYWRkIGEgdHJhY2sgYWZ0ZXIgdGhlIHN0
cmVhbSBoYXMgZW5kZWQKLVBBU1Mgc3RyZWFtMS5hZGRUcmFjayhhdWRpb1RyYWNrKSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgotUEFT
UyBzdHJlYW0xLnJlbW92ZVRyYWNrKGF1ZGlvVHJhY2spIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjog
SW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIHN0cmVhbTIuYWRkVHJh
Y2soYXVkaW9UcmFjaykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjog
RE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1Mgc3RyZWFtMi5yZW1vdmVUcmFjayhhdWRpb1RyYWNrKSB0
aHJldyBleGNlcHRpb24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDEx
LgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1vdmUtdHJh
Y2tzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbS1hZGQtcmVtb3ZlLXRyYWNrcy5odG1sCShyZXZpc2lvbiAxNTgwMjUpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tzLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxNCArMTA5LDE2IEBAIGZ1bmN0aW9uIGdvdFN0cmVh
bTIocykgewogICAgIHNob3VsZEJlKCdzdHJlYW0xLmdldEF1ZGlvVHJhY2tzKCkubGVuZ3RoJywg
JzInKTsKICAgICBzaG91bGRCZSgnc3RyZWFtMS5nZXRWaWRlb1RyYWNrcygpLmxlbmd0aCcsICcy
Jyk7CiAKLSAgICBkZWJ1ZygiPGJyPioqKiBhZnRlciBhbGwgdHJhY2tzIGhhdmUgYmVlbiByZW1v
dmVkLCBzdHJlYW0uZW5kZWQgc2hvdWxkIHJldHVybiB0cnVlIik7CisgICAgZGVidWcoIjxicj4q
KiogcmVtb3ZlIGFsbCB0cmFja3MsIHN0cmVhbS5lbmRlZCBzaG91bGQgcmV0dXJuIHRydWUiKTsK
ICAgICB0cnlSZW1vdmVUcmFjayhzdHJlYW0yLCBzdHJlYW0yLmdldEF1ZGlvVHJhY2tzKClbMF0p
OwogICAgIHRyeVJlbW92ZVRyYWNrKHN0cmVhbTIsIHN0cmVhbTIuZ2V0VmlkZW9UcmFja3MoKVsw
XSk7CisgICAgc2hvdWxkQmUoJ3N0cmVhbTIuZ2V0QXVkaW9UcmFja3MoKS5sZW5ndGgnLCAnMCcp
OworICAgIHNob3VsZEJlKCdzdHJlYW0yLmdldFZpZGVvVHJhY2tzKCkubGVuZ3RoJywgJzAnKTsK
ICAgICBzaG91bGRCZVRydWUoJ3N0cmVhbTIuZW5kZWQnKTsKIAogICAgIGRlYnVnKCI8YnI+Kioq
IGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIHRvIGFkZCBhIHRyYWNrIGFmdGVyIHRoZSBzdHJlYW0g
aGFzIGVuZGVkIik7Ci0gICAgc2hvdWxkVGhyb3coJ3N0cmVhbTEuYWRkVHJhY2soYXVkaW9UcmFj
ayknLCAnIkVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSInKTsKLSAg
ICBzaG91bGRUaHJvdygnc3RyZWFtMS5yZW1vdmVUcmFjayhhdWRpb1RyYWNrKScsICciRXJyb3I6
IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExIicpOworICAgIHNob3VsZFRocm93
KCdzdHJlYW0yLmFkZFRyYWNrKGF1ZGlvVHJhY2spJywgJyJFcnJvcjogSW52YWxpZFN0YXRlRXJy
b3I6IERPTSBFeGNlcHRpb24gMTEiJyk7CisgICAgc2hvdWxkVGhyb3coJ3N0cmVhbTIucmVtb3Zl
VHJhY2soYXVkaW9UcmFjayknLCAnIkVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2Vw
dGlvbiAxMSInKTsKIAogICAgIHNldFRpbWVvdXQoZmluaXNoSlNUZXN0LCAwKTsKIH0KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rvci1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbUNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU4MDI1KQorKysgTGF5
b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbnN0cnVjdG9yLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBQQVNTIG5ld1N0cmVhbS5jb25z
dHJ1Y3Rvci50b1N0cmluZygpIGlzCiBQQVNTIG5ld1N0cmVhbS5nZXRBdWRpb1RyYWNrcygpLmxl
bmd0aCBpcyBuQXVkaW8KIFBBU1MgbmV3U3RyZWFtLmdldFZpZGVvVHJhY2tzKCkubGVuZ3RoIGlz
IG5WaWRlbwogUEFTUyBjaGVja0lkQXR0cmlidXRlKG5ld1N0cmVhbS5pZCkgaXMgdHJ1ZQorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCiAKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rvci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25z
dHJ1Y3Rvci5odG1sCShyZXZpc2lvbiAxNTgwMjUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtQ29uc3RydWN0b3IuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtODQs
NiArODQsOCBAQCBmdW5jdGlvbiB0ZXN0Q29uc3RydWN0b3IocykgewogICAgIHZlcmlmeVN0cmVh
bSgibmV3IHdlYmtpdE1lZGlhU3RyZWFtKFtzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXV0pIiwg
MCwgMSk7CiAgICAgdmVyaWZ5U3RyZWFtKCJuZXcgd2Via2l0TWVkaWFTdHJlYW0oW3N0cmVhbS5n
ZXRBdWRpb1RyYWNrcygpWzBdLCBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXV0pIiwgMSwgMSk7
CiAgICAgdmVyaWZ5U3RyZWFtKCJuZXcgd2Via2l0TWVkaWFTdHJlYW0oW3N0cmVhbS5nZXRWaWRl
b1RyYWNrcygpWzBdLCBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXSwgc3RyZWFtLmdldFZpZGVv
VHJhY2tzKClbMF1dKSIsIDEsIDEpOworCisgICAgZmluaXNoSlNUZXN0KCk7CiB9CiAKIGZ1bmN0
aW9uIHZlcmlmeVN0cmVhbShzY3JpcHQsIG51bUF1ZGlvVHJhY2tzLCBudW1WaWRlb1RyYWNrcykg
ewpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtVHJhY2stZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNTgwMjUpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2stZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBAIGNoZWNraW5nIHRyYWNrLmNhcGFiaWxpdGllcygp
CiAgICBtYXggOiA2MAogICAgc3VwcG9ydGVkIDogdHJ1ZQogICBhc3BlY3RSYXRpbwotICAgbWlu
IDogMS4zMzMzMzMzNzMwNjk3NjMyCi0gICBtYXggOiAxLjc3Nzc3Nzc5MTAyMzI1NDQKKyAgIG1p
biA6IDEuMzMKKyAgIG1heCA6IDEuNzgKICAgIHN1cHBvcnRlZCA6IHRydWUKICAgZmFjaW5nTW9k
ZQogICAgIDAgOiB1c2VyCkBAIC0zNSwxMSArMzUsMTQgQEAgY2hlY2tpbmcgdHJhY2suY2FwYWJp
bGl0aWVzKCkKIGNoZWNraW5nIHRyYWNrLnN0YXRlcygpCiBQQVNTIHN0YXRlcy5zb3VyY2VJZCBp
cyBjYXBhYmlsaXRpZXMuc291cmNlSWRbMF0KIFBBU1Mgc3RhdGVzLnNvdXJjZVR5cGUgaXMgImNh
bWVyYSIKLSAgd2lkdGggOiAxOTIwCi0gIGhlaWdodCA6IDEwODAKLSAgZnJhbWVSYXRlIDogMzAK
LSAgYXNwZWN0UmF0aW8gOiAxLjc3Nzc3Nzc5MTAyMzI1NDQKLSAgZmFjaW5nTW9kZSA6IHVzZXIK
KyAgc3RhdGVzLnZvbHVtZSA9IHVuZGVmaW5lZAorICBzdGF0ZXMud2lkdGggPSAxOTIwCisgIHN0
YXRlcy5zb3VyY2VJZCA9IDIzOWMyNGIwLTJiMTUtMTFlMy04MjI0LTA4MDAyMDBjOWE2NgorICBz
dGF0ZXMuaGVpZ2h0ID0gMTA4MAorICBzdGF0ZXMuc291cmNlVHlwZSA9IGNhbWVyYQorICBzdGF0
ZXMuZmFjaW5nTW9kZSA9IHVzZXIKKyAgc3RhdGVzLmZyYW1lUmF0ZSA9IDMwCisgIHN0YXRlcy5h
c3BlY3RSYXRpbyA9IDEuNzgKIAogYXVkaW9UcmFjayA9IG1lZGlhU3RyZWFtLmdldEF1ZGlvVHJh
Y2tzKClbMF0KIFBBU1MgdHJhY2sucmVhZHlTdGF0ZSBpcyAibGl2ZSIKQEAgLTUzLDcgKzU2LDE0
IEBAIGNoZWNraW5nIHRyYWNrLmNhcGFiaWxpdGllcygpCiBjaGVja2luZyB0cmFjay5zdGF0ZXMo
KQogUEFTUyBzdGF0ZXMuc291cmNlSWQgaXMgY2FwYWJpbGl0aWVzLnNvdXJjZUlkWzBdCiBQQVNT
IHN0YXRlcy5zb3VyY2VUeXBlIGlzICJtaWNyb3Bob25lIgotICB2b2x1bWUgOiA1MAorICBzdGF0
ZXMudm9sdW1lID0gNTAKKyAgc3RhdGVzLndpZHRoID0gdW5kZWZpbmVkCisgIHN0YXRlcy5zb3Vy
Y2VJZCA9IDIzOWMyNGIxLTJiMTUtMTFlMy04MjI0LTA4MDAyMDBjOWE2NgorICBzdGF0ZXMuaGVp
Z2h0ID0gdW5kZWZpbmVkCisgIHN0YXRlcy5zb3VyY2VUeXBlID0gbWljcm9waG9uZQorICBzdGF0
ZXMuZmFjaW5nTW9kZSA9IHVuZGVmaW5lZAorICBzdGF0ZXMuZnJhbWVSYXRlID0gdW5kZWZpbmVk
CisgIHN0YXRlcy5hc3BlY3RSYXRpbyA9IHVuZGVmaW5lZAogCiB2aWRlb1RyYWNrMiA9IHZpZGVv
VHJhY2suY2xvbmUoKQogUEFTUyB0cmFjay5yZWFkeVN0YXRlIGlzICJsaXZlIgpAQCAtNzYsOCAr
ODYsOCBAQCBjaGVja2luZyB0cmFjay5jYXBhYmlsaXRpZXMoKQogICAgbWF4IDogNjAKICAgIHN1
cHBvcnRlZCA6IHRydWUKICAgYXNwZWN0UmF0aW8KLSAgIG1pbiA6IDEuMzMzMzMzMzczMDY5NzYz
MgotICAgbWF4IDogMS43Nzc3Nzc3OTEwMjMyNTQ0CisgICBtaW4gOiAxLjMzCisgICBtYXggOiAx
Ljc4CiAgICBzdXBwb3J0ZWQgOiB0cnVlCiAgIGZhY2luZ01vZGUKICAgICAwIDogdXNlcgpAQCAt
ODUsMTEgKzk1LDE0IEBAIGNoZWNraW5nIHRyYWNrLmNhcGFiaWxpdGllcygpCiBjaGVja2luZyB0
cmFjay5zdGF0ZXMoKQogUEFTUyBzdGF0ZXMuc291cmNlSWQgaXMgY2FwYWJpbGl0aWVzLnNvdXJj
ZUlkWzBdCiBQQVNTIHN0YXRlcy5zb3VyY2VUeXBlIGlzICJjYW1lcmEiCi0gIHdpZHRoIDogMTky
MAotICBoZWlnaHQgOiAxMDgwCi0gIGZyYW1lUmF0ZSA6IDMwCi0gIGFzcGVjdFJhdGlvIDogMS43
Nzc3Nzc3OTEwMjMyNTQ0Ci0gIGZhY2luZ01vZGUgOiB1c2VyCisgIHN0YXRlcy52b2x1bWUgPSB1
bmRlZmluZWQKKyAgc3RhdGVzLndpZHRoID0gMTkyMAorICBzdGF0ZXMuc291cmNlSWQgPSAyMzlj
MjRiMC0yYjE1LTExZTMtODIyNC0wODAwMjAwYzlhNjYKKyAgc3RhdGVzLmhlaWdodCA9IDEwODAK
KyAgc3RhdGVzLnNvdXJjZVR5cGUgPSBjYW1lcmEKKyAgc3RhdGVzLmZhY2luZ01vZGUgPSB1c2Vy
CisgIHN0YXRlcy5mcmFtZVJhdGUgPSAzMAorICBzdGF0ZXMuYXNwZWN0UmF0aW8gPSAxLjc4CiBQ
QVNTIHZpZGVvVHJhY2suaWQgaXMgbm90IHZpZGVvVHJhY2syLmlkCiBQQVNTIHZpZGVvVHJhY2su
a2luZCBpcyB2aWRlb1RyYWNrMi5raW5kCiBQQVNTIHZpZGVvVHJhY2subGFiZWwgaXMgdmlkZW9U
cmFjazIubGFiZWwKQEAgLTk3LDkgKzExMCwxMiBAQCBQQVNTIHZpZGVvVHJhY2subXV0ZWQgaXMg
dmlkZW9UcmFjazIubXV0CiBQQVNTIHZpZGVvVHJhY2suZW5hYmxlZCBpcyB2aWRlb1RyYWNrMi5l
bmFibGVkCiBQQVNTIHZpZGVvVHJhY2sucmVhZHlTdGF0ZSBpcyB2aWRlb1RyYWNrMi5yZWFkeVN0
YXRlCiAKLXZpZGVvVHJhY2suc3RvcCgpCit0cmFjay5zdG9wKCkgc2hvdWxkIG5vdCBmaXJlICdl
bmRlZCcgb24gdGhlIHRyYWNrIGl0IGlzIGNhbGxlZCBvbiwgYnV0IGl0IHNob3VsZCBlbmQgYWxs
IHRyYWNrcyB1c2luZyB0aGUgc2FtZSBzb3VyY2UKK3ZpZGVvVHJhY2syLnN0b3AoKQogUEFTUyBU
cmFjayBvbmVuZGVkIGNhbGxiYWNrIHN1Y2NlZWRlZC4KK1BBU1MgdmlkZW9UcmFjayBpcyBldmVu
dC50YXJnZXQKIFBBU1MgdmlkZW9UcmFjay5yZWFkeVN0YXRlIGlzICJlbmRlZCIKK1BBU1Mgdmlk
ZW9UcmFjazIucmVhZHlTdGF0ZSBpcyAiZW5kZWQiCiAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVRyYWNrLWdldFNvdXJjZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2stZ2V0U291cmNlcy5odG1sCShyZXZpc2lvbiAxNTgw
MjUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2stZ2V0
U291cmNlcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgICAg
ICAgICAgICAgIHByaW1lVGltZW91dCgiVGltZW91dCB3YWl0aW5nIGZvciB3ZWJraXRHZXRVc2Vy
TWVkaWEoKSIpOwogICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50cyA9IF9jb25zdHJhaW50
czsKICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2s7Ci0gICAgICAgICAg
ICAgICAgZGVidWcoIjxicj4qKiogY2FsbGluZyBuYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlh
KCkgKioqIik7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKCI8YnI+KioqIGNhbGxpbmcgbmF2
aWdhdG9yLndlYmtpdEdldFVzZXJNZWRpYSgpICoqKiIpOwogICAgICAgICAgICAgICAgICAgICBz
aG91bGROb3RUaHJvdygibmF2aWdhdG9yLndlYmtpdEdldFVzZXJNZWRpYShjb25zdHJhaW50cywg
Y2FsbGJhY2ssIGVycm9yKSIpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgnd2Via2l0R2V0VXNlck1lZGlhIHRocmV3IGV4Y2Vw
dGlvbiA6JyArIGUpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVRyYWNrLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbVRyYWNrLmh0bWwJKHJldmlzaW9uIDE1ODAyNSkKKysrIExheW91dFRlc3Rz
L2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0yMywxMSArMjMsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKK2NvdW50ZXIg
PSAwOwordmFyIHQgPSBbXTsKICAgICAgICAgICAgIGZ1bmN0aW9uIG9uVHJhY2tFbmRlZCgpCiAg
ICAgICAgICAgICB7Cit0W2NvdW50ZXIrK10gPSBldmVudC50YXJnZXQ7CiAgICAgICAgICAgICAg
ICAgdGVzdFBhc3NlZCgnVHJhY2sgb25lbmRlZCBjYWxsYmFjayBzdWNjZWVkZWQuJyk7CisgICAg
ICAgICAgICAgICAgc2hvdWxkQmUoJ3ZpZGVvVHJhY2snLCAnZXZlbnQudGFyZ2V0Jyk7CiAgICAg
ICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd2aWRlb1RyYWNrLnJlYWR5U3RhdGUn
LCAnZW5kZWQnKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3ZpZGVv
VHJhY2syLnJlYWR5U3RhdGUnLCAnZW5kZWQnKTsKICAgICAgICAgICAgICAgICBkZWJ1ZygiIik7
CiAgICAgICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CiAgICAgICAgICAgICB9CkBAIC01Niwx
MiArNjEsMTkgQEAKICAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCdUcmFjayBvbm11dGUgY2Fs
bGJhY2sgc3VjY2VlZGVkLicpOwogICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWwoJ3ZpZGVv
VHJhY2subXV0ZWQnLCB0cnVlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZnVuY3Rpb24gbGltaXRQcmVjaXNpb24odmFsdWUsIHByZWNpc2lvbikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIiAmJiB2
YWx1ZSAlIDEgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQo
cHJlY2lzaW9uKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGZ1bmN0aW9uIGxvZ0NhcGFiaWxpdHlSYW5nZShuYW1lLCByYW5nZSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiICAiICsgbmFtZSk7Ci0gICAg
ICAgICAgICAgICAgZGVidWcoIiAgIG1pbiA6ICIgKyByYW5nZS5taW4pOwotICAgICAgICAgICAg
ICAgIGRlYnVnKCIgICBtYXggOiAiICsgcmFuZ2UubWF4KTsKKyAgICAgICAgICAgICAgICBkZWJ1
ZygiICAgbWluIDogIiArIGxpbWl0UHJlY2lzaW9uKHJhbmdlLm1pbiwgMikpOworICAgICAgICAg
ICAgICAgIGRlYnVnKCIgICBtYXggOiAiICsgbGltaXRQcmVjaXNpb24ocmFuZ2UubWF4LCAyKSk7
CiAgICAgICAgICAgICAgICAgZGVidWcoIiAgIHN1cHBvcnRlZCA6ICIgKyByYW5nZS5zdXBwb3J0
ZWQpOwogICAgICAgICAgICAgfQogCkBAIC02OSw3ICs4MSw3IEBACiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgZGVidWcoIiAgIiArIG5hbWUpOwogICAgICAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGRlYnVnKCIgICAg
IiArIGkgKyAiIDogIiArIGxpc3RbaV0pOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAg
ICIgKyBpICsgIiA6ICIgKyBsaXN0W2ldKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ZnVuY3Rpb24gY2hlY2tDYXBhYmlsaXRpZXModHJhY2spCkBAIC05NCwxNiArMTA2LDEzIEBACiAg
ICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzID0gdHJhY2suY2FwYWJpbGl0aWVzKCk7CiAgICAg
ICAgICAgICAgICAgc3RhdGVzID0gdHJhY2suc3RhdGVzKCk7CiAgICAgICAgICAgICAgICAgc2hv
dWxkQmUoJ3N0YXRlcy5zb3VyY2VJZCcsICdjYXBhYmlsaXRpZXMuc291cmNlSWRbMF0nKTsKLSAg
ICAgICAgICAgICAgICBpZiAodHJhY2sua2luZCA9PSAidmlkZW8iKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHRyYWNrLmtpbmQgPT0gInZpZGVvIikKICAgICAgICAgICAgICAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdzdGF0ZXMuc291cmNlVHlwZScsICdjYW1lcmEnKTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVidWcoIiAgd2lkdGggOiAiICsgc3RhdGVzLndpZHRoKTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVidWcoIiAgaGVpZ2h0IDogIiArIHN0YXRlcy5oZWlnaHQpOwotICAgICAg
ICAgICAgICAgICAgICBkZWJ1ZygiICBmcmFtZVJhdGUgOiAiICsgc3RhdGVzLmZyYW1lUmF0ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgIGFzcGVjdFJhdGlvIDogIiArIHN0YXRlcy5h
c3BlY3RSYXRpbyk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgIGZhY2luZ01vZGUgOiAi
ICsgc3RhdGVzLmZhY2luZ01vZGUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J3N0YXRlcy5zb3VyY2VUeXBlJywgJ21pY3JvcGhvbmUnKTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVidWcoIiAgdm9sdW1lIDogIiArIHN0YXRlcy52b2x1bWUpOworICAgICAgICAgICAgICAgIGZv
ciAodmFyIHByb3BlcnR5IGluIHN0YXRlcykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
dGVzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
YnVnKCIgIHN0YXRlcy4iICsgcHJvcGVydHkgKyAiID0gIiArIGxpbWl0UHJlY2lzaW9uKHN0YXRl
c1twcm9wZXJ0eV0sIDIpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTEzNiw2ICsxNDUsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgZGVidWcoIiIpOwogICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coInZpZGVvVHJhY2syID0g
dmlkZW9UcmFjay5jbG9uZSgpIik7CisgICAgICAgICAgICAgICAgdmlkZW9UcmFjazIub25lbmRl
ZCA9IG9uVHJhY2tFbmRlZDsKICAgICAgICAgICAgICAgICBjaGVja1RyYWNrKHZpZGVvVHJhY2sy
KTsKICAgICAgICAgICAgICAgICBzaG91bGROb3RCZSgndmlkZW9UcmFjay5pZCcsICd2aWRlb1Ry
YWNrMi5pZCcpOwogICAgICAgICAgICAgICAgIHNob3VsZEJlKCd2aWRlb1RyYWNrLmtpbmQnLCAn
dmlkZW9UcmFjazIua2luZCcpOwpAQCAtMTQ1LDcgKzE1NSw4IEBACiAgICAgICAgICAgICAgICAg
c2hvdWxkQmUoJ3ZpZGVvVHJhY2sucmVhZHlTdGF0ZScsICd2aWRlb1RyYWNrMi5yZWFkeVN0YXRl
Jyk7CiAKICAgICAgICAgICAgICAgICBkZWJ1ZygiIik7Ci0gICAgICAgICAgICAgICAgZXZhbEFu
ZExvZygidmlkZW9UcmFjay5zdG9wKCkiKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZygidHJhY2su
c3RvcCgpIHNob3VsZCBub3QgZmlyZSAnZW5kZWQnIG9uIHRoZSB0cmFjayBpdCBpcyBjYWxsZWQg
b24sIGJ1dCBpdCBzaG91bGQgZW5kIGFsbCB0cmFja3MgdXNpbmcgdGhlIHNhbWUgc291cmNlIik7
CisgICAgICAgICAgICAgICAgZXZhbEFuZExvZygidmlkZW9UcmFjazIuc3RvcCgpIik7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGZ1bmN0aW9uIHN0YXJ0KCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215329</attachid>
            <date>2013-10-28 13:47:46 -0700</date>
            <delta_ts>2013-10-29 13:49:13 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>capture_device_16.txt</filename>
            <type>text/plain</type>
            <size>164703</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODA5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAxMy0xMC0yNyAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjIE1lZGlhU3Ry
ZWFtXSBpbXBsZW1lbnQgQVZGb3VuZGF0aW9uIGJhY2tlZCBNZWRpYVN0cmVhbVNvdXJjZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzE2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBleGlzdGluZyB0ZXN0cyB1cGRhdGVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFk
ZCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHAuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU291cmNlU3RhdGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291
cmNlU3RhdGVzOjpNZWRpYVNvdXJjZVN0YXRlcyk6IG1fU291cmNlU3RhdGVzIC0+IG1fc291cmNl
U3RhdGVzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VTdGF0ZXM6OnNvdXJjZVR5cGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2Rl
KTogRGl0dG8uCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRl
cy5oOiBEaXR0by4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU291cmNlU3Rh
dGVzLmlkbDogTWFyayBzb21lIGF0dHJpYnV0ZXMgYXMgb3B0aW9uYWwuCisKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtOjphZGRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6cmVt
b3ZlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OmFkZFJlbW90ZVNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbTo6cmVtb3ZlUmVtb3RlU291cmNlKToK
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DYXBhYmlsaXRpZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM6OnNvdXJjZVR5
cGUpOiBNZWRpYVNvdXJjZVN0YXRlcyAtPiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcworICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DYXBhYmlsaXRpZXM6OmZhY2luZ01vZGUpOiBEaXR0by4K
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKTogRG9u
J3Qgb2JzZXJ2ZSBzb3VyY2UgY2hhbmdlcyBkaXJlY3RseSwgbGV0IHRoZQorICAgICAgICAgICAg
cHJpdmF0ZSB0cmFjayBkbyB0aGF0LiBDaGFuZ2UgcHJpdmF0ZSB0cmFjayBwYXJhbWV0ZXIgdG8g
cmVmIGJlY2F1c2UgaXQgY2FuJ3QgYmUgTlVMTC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtVHJhY2s6On5NZWRpYVN0cmVhbVRyYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbVRyYWNrOjpzZXRTb3VyY2UpOiBQYXNzIHRocm91Z2ggdG8gcHJpdmF0ZSB0cmFj
ay4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnN0b3BwZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2s6OnN0YXRlcyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6Y2FwYWJpbGl0aWVzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjphcHBseUNvbnN0cmFpbnRzKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjpzdG9wUHJvZHVjaW5nRGF0
YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFjazo6dHJhY2tSZWFk
eVN0YXRlQ2hhbmdlZCk6IFJlbmFtZWQgZnJvbSBzb3VyY2VTdGF0ZUNoYW5nZWQuIERvbid0Cisg
ICAgICAgICAgICBzY2hlZHVsZSBhbiAnZW5kZWQnIGV2ZW50IGlmIGNhbGxlZCBhcyBhIHNpZGUg
ZWZmZWN0IG9mIHRoZSBzdG9wKCkgbWV0aG9kIGhhdmluZyBiZWVuCisgICAgICAgICAgICBjYWxs
ZWQgYXMgcGVyIHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjp0cmFj
a011dGVkQ2hhbmdlZCk6IFJlbmFtZWQgZnJvbSBzb3VyY2VNdXRlZENoYW5nZWQuCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrOjp0cmFja0VuYWJsZWRDaGFuZ2VkKTogUmVuYW1l
ZCBmcm9tIHNvdXJjZUVuYWJsZWRDaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJl
YW1UcmFjazo6c3RvcCk6IFBhc3MgdGhyb3VnaCB0byBwcml2YXRlIHRyYWNrLgorICAgICAgICAq
IE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1UcmFjazo6T2JzZXJ2ZXI6On5PYnNlcnZlcik6IEFkZCB2aXJ0dWFsIGRl
c3RydWN0b3IuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJlcXVl
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lZGlhUmVxdWVzdDo6Y2FsbFN1Y2Nlc3NI
YW5kbGVyKTogU2V0IHRyYWNrLCBub3Qgc291cmNlLCBjb25zdHJhaW50cy4KKworICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIG5ldyBmaWxlcy4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTTWVkaWFTb3VyY2VTdGF0ZXNDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZSk6IFJldHVybiBqc1Vu
ZGVmaW5lZCB3aGVuIHRoZSBmYWNpbmcgbW9kZQorICAgICAgICAgICAgaXMgVW5rbm93bi4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmg6IFJlbW92
ZSB1bnVzZWQgY2xhc3MgZm9yd2FyZCBkZWZpbmVzIGFuZAorICAgICAgICAgICAgdW5kZWZpbmVk
IG1ldGhvZCBwcm90b3R5cGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNj
cmlwdG9yOjphZGRTb3VyY2UpOiBBU1NFUlQgaWYgc291cmNlIGlzIGtpbmQgTm9uZS4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6cmVtb3ZlU291cmNlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFtRGVz
Y3JpcHRvcik6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6c2V0UmVhZHlT
dGF0ZSk6IENhbGwgc3RhcnRQcm9kdWNpbmdEYXRhIHdoZW4gcmVhZHlTdGF0ZSBjaGFuZ2VzCisg
ICAgICAgICAgICB0byBMaXZlLCBzdG9wUHJvZHVjaW5nRGF0YSB3aGVuIGl0IGNoYW5nZXMgdG8g
RW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6cmVtb3ZlT2JzZXJ2
ZXIpOiBDYWxsIHN0b3AoKSB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIG9ic2VydmVycy4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpzZXRFbmFibGVkKTogSWYgcGFzc2VkIGZh
bHNlLCBkbyBub3RoaW5nIHVubGVzcyBhbGwgb2JzZXJ2ZXJzCisgICAgICAgICAgICBhcmUgZGlz
YWJsZWQuIENhbGwgc3RhcnRQcm9kdWNpbmdEYXRhL3N0b3BQcm9kdWNpbmdEYXRhIHdoZW4gYmVj
b21pbmcgZW5hYmxlZC9kaXNhYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291
cmNlOjpzdG9wKTogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiBvdGhlciBvYnNlcnZl
cnMgaGF2ZQorICAgICAgICAgICAgc3RvcHBlZCwgdGhlIHNwZWMgc2F5cyB0aGF0IHRyYWNrLnN0
b3AoKSBzaG91bGQgcGVybWFuZW50bHkgc3RvcCB0aGUgdHJhY2sncyBzb3VyY2UuCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpuYW1lKTogTWFrZSB2aXJ0dWFsIHNvIGRlcml2ZWQg
Y2xhc3NlcyBjYW4gb3ZlcnJpZGUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJj
ZTo6c2V0TmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6
OnJlYWR5U3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNl
OjplbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6
bXV0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpzZXRS
ZWFkb25seSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnJl
bW90ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnNldFJl
bW90ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnN0YXJ0
UHJvZHVjaW5nRGF0YSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3Vy
Y2U6OnN0b3BQcm9kdWNpbmdEYXRhKTogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcy5oOiBNb3ZlIE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzIHRvCisgICAgICAgICAgICBpdHMgb3duIGZpbGUuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUpOiBN
b3ZlZCBoZXJlIGZyb20gTWVkaWFTb3VyY2VTdGF0ZXMgc28gdGhlIAorICAgICAgICAgICAgc3Ry
aW5ncyBhcmUgYXZhaWxhYmxlIHRvIHBsYXRmb3JtIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6c291cmNlVHlwZSk6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlU3RhdGVzLmg6IEFkZGVkLCBtb3Zl
ZCBmcm9tIE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzLmguCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKTogUGFzcyBwcml2YXRlIHRy
YWNrIHRvIGNvbnN0cnVjdG9yIGFzIFBhc3NSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUpOiBJbml0aWFsaXpl
IG1lbWJlciB2YXJpYWJsZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZTo6fk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKTogVW5yZWdpc3RlciBhcyBzb3VyY2Ugb2Jz
ZXJ2ZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0U291
cmNlKTogVW5yZWdpc3Rlci9yZWdpc3RlciBhcyBzb3VyY2Ugb2JzZXJ2ZXIuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0RW5hYmxlZCk6IEVuYWJsZS9kaXNh
YmxlIHNvdXJjZSwgY2FsbCBjbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZTo6c3RvcCk6IE5ldy4gU2V0IHJlYWR5U3RhdGUgdG8gRW5kZWQsIG9wdGlvbmFs
bHkgc3RvcCBzb3VyY2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZTo6c2V0UmVhZHlTdGF0ZSk6IElubGluZSB0aGUgbG9naWMgZnJvbSBzaG91bGRGaXJlVHJhY2tS
ZWFkeVN0YXRlQ2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlOjpjb25zdHJhaW50cyk6IE5ldywgcGFzc3Rocm91Z2ggdG8gdGhlIHNvdXJjZS4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzdGF0ZXMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjp0eXBlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y2FwYWJpbGl0aWVzKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6YXBwbHlD
b25zdHJhaW50cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja1By
aXZhdGU6OnNvdXJjZVJlYWR5U3RhdGVDaGFuZ2VkKTogUmVhY3QgdG8gc291cmNlIGNoYW5nZXMu
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c291cmNlTXV0ZWRD
aGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZTo6c291cmNlRW5hYmxlZENoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlOjpvYnNlcnZlcklzRW5hYmxlZCk6IFJlc3BvbmQgdG8gc291cmNl
IHF1ZXJ5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Om9ic2Vy
dmVySXNTdG9wcGVkKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUuaDoKKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQVZBdWRpb0NhcHR1cmVTb3VyY2UubW06IEFkZGVkLgorCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1h
bmFnZXIubW06IEFkZGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FW
TWVkaWFDYXB0dXJlU291cmNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbTogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tOiBB
ZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9NZWRpYVN0cmVhbUNl
bnRlck1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlck1hYzo6dmFs
aWRhdGVSZXF1ZXN0Q29uc3RyYWludHMpOiBJbXBsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbUNlbnRlck1hYzo6Y3JlYXRlTWVkaWFTdHJlYW0pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2VudGVyTWFjOjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNl
cyk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZU1vY2tTb3VyY2VzKTogVXBkYXRl
IGZvciBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6
TW9ja01lZGlhU3RyZWFtQ2VudGVyOjpjcmVhdGVNZWRpYVN0cmVhbSk6CisKIDIwMTMtMTAtMjYg
IFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY10g
UmVtb3ZlIFdlYlRpbGVkTGF5ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAx
NTgwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTk5MCw2ICsxOTkwLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbVNvdXJjZS5jcHAKKyAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVNvdXJjZVN0YXRlcy5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENJY2VDYW5k
aWRhdGVEZXNjcmlwdG9yLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uSGFuZGxlci5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVz
Y3JpcHRpb25EZXNjcmlwdG9yLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9BdWRpb1N0cmVhbVRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0F1ZGlvU3RyZWFtVHJhY2suY3BwCShyZXZpc2lvbiAxNTgw
MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0F1ZGlvU3RyZWFtVHJh
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBSZWZQdHI8QXVkaW9TdHJlYW1UcmFjaz4gQXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERpY3Rpb25hcnkmIGF1ZGlv
Q29uc3RyYWludHMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1N0cmVhbVRyYWNr
KGNvbnRleHQsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoMCksICZhdWRpb0NvbnN0
cmFpbnRzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1N0cmVhbVRyYWNrKGNvbnRl
eHQsICpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKDApLCAmYXVkaW9Db25zdHJhaW50
cykpOwogfQogCi1SZWZQdHI8QXVkaW9TdHJlYW1UcmFjaz4gQXVkaW9TdHJlYW1UcmFjazo6Y3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU+IHByaXZhdGVUcmFjaykKK1JlZlB0cjxBdWRpb1N0cmVhbVRyYWNrPiBB
dWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHByaXZhdGVUcmFjaykKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEF1ZGlvU3RyZWFtVHJhY2soY29udGV4dCwgcHJpdmF0ZVRyYWNrLCAwKSk7CiB9
CkBAIC01MCw3ICs1MCw3IEBAIFJlZlB0cjxBdWRpb1N0cmVhbVRyYWNrPiBBdWRpb1N0cmVhbVRy
YWMKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvU3RyZWFtVHJhY2sodHJhY2spKTsKIH0K
IAotQXVkaW9TdHJlYW1UcmFjazo6QXVkaW9TdHJlYW1UcmFjayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBwcml2YXRl
VHJhY2ssIGNvbnN0IERpY3Rpb25hcnkqIGF1ZGlvQ29uc3RyYWludHMpCitBdWRpb1N0cmVhbVRy
YWNrOjpBdWRpb1N0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBwcml2YXRlVHJhY2ssIGNvbnN0IERpY3Rpb25hcnkqIGF1
ZGlvQ29uc3RyYWludHMpCiAgICAgOiBNZWRpYVN0cmVhbVRyYWNrKGNvbnRleHQsIHByaXZhdGVU
cmFjaywgYXVkaW9Db25zdHJhaW50cykKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vQXVkaW9TdHJlYW1UcmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQXVkaW9TdHJlYW1UcmFjay5oCShyZXZpc2lvbiAx
NTgwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0F1ZGlvU3RyZWFt
VHJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogY2xhc3MgQXVkaW9TdHJlYW1UcmFjayBGSU5BTCA6IHB1YmxpYyBNZWRp
YVN0cmVhbVRyYWNrIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEF1ZGlvU3RyZWFtVHJh
Y2s+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGljdGlvbmFyeSYpOwot
ICAgIHN0YXRpYyBSZWZQdHI8QXVkaW9TdHJlYW1UcmFjaz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPik7CisgICAgc3Rh
dGljIFJlZlB0cjxBdWRpb1N0cmVhbVRyYWNrPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJik7CiAgICAgc3RhdGljIFJlZlB0cjxBdWRpb1N0
cmVhbVRyYWNrPiBjcmVhdGUoTWVkaWFTdHJlYW1UcmFjayopOwogCiAgICAgdmlydHVhbCB+QXVk
aW9TdHJlYW1UcmFjaygpIHsgfQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGtpbmQoKSBjb25zdCBPVkVSUklERTsKIAogcHJpdmF0ZToK
LSAgICBBdWRpb1N0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiwgY29uc3QgRGljdGlvbmFyeSopOworICAgIEF1ZGlv
U3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJiwgY29uc3QgRGljdGlvbmFyeSopOwogICAgIGV4cGxpY2l0IEF1ZGlvU3RyZWFtVHJhY2so
TWVkaWFTdHJlYW1UcmFjayopOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5jcHAJKHJldmlzaW9u
IDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTb3Vy
Y2VTdGF0ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw1OSArMzksMTggQEAgUmVmUHRyPE1l
ZGlhU291cmNlU3RhdGVzPiBNZWRpYVNvdXJjZVN0YQogfQogCiBNZWRpYVNvdXJjZVN0YXRlczo6
TWVkaWFTb3VyY2VTdGF0ZXMoY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMmIHN0YXRlcykK
LSAgICA6IG1fU291cmNlU3RhdGVzKHN0YXRlcykKKyAgICA6IG1fc291cmNlU3RhdGVzKHN0YXRl
cykKIHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5n
TW9kZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlIG1vZGUpCi17Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdXNlckZhY2luZygidXNlciIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGVudmlyb25tZW50RmFjaW5nKCJlbnZpcm9ubWVudCIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IGxlZnRGYWNpbmcoImxlZnQiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiByaWdodEZhY2luZygicmlnaHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICAKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNl
U3RhdGVzOjpVc2VyOgotICAgICAgICByZXR1cm4gdXNlckZhY2luZzsKLSAgICBjYXNlIE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzOjpFbnZpcm9ubWVudDoKLSAgICAgICAgcmV0dXJuIGVudmlyb25t
ZW50RmFjaW5nOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkxlZnQ6Ci0gICAg
ICAgIHJldHVybiBsZWZ0RmFjaW5nOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6
OlJpZ2h0OgotICAgICAgICByZXR1cm4gcmlnaHRGYWNpbmc7Ci0gICAgfQotCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGVtcHR5QXRvbTsKLX0KLQotY29uc3QgQXRvbWlj
U3RyaW5nJiBNZWRpYVNvdXJjZVN0YXRlczo6c291cmNlVHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0
YXRlczo6U291cmNlVHlwZSBzb3VyY2VUeXBlKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IG5vbmUoIm5vbmUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjYW1lcmEo
ImNhbWVyYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1pY3JvcGhvbmUoIm1pY3JvcGhvbmUiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLQotICAgIHN3aXRjaCAoc291cmNl
VHlwZSkgewotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6Ok5vbmU6Ci0gICAgICAg
IHJldHVybiBub25lOwotICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkNhbWVyYToK
LSAgICAgICAgcmV0dXJuIGNhbWVyYTsKLSAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
OjpNaWNyb3Bob25lOgotICAgICAgICByZXR1cm4gbWljcm9waG9uZTsKLSAgICB9Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZW1wdHlBdG9tOwotfQotCiBjb25zdCBB
dG9taWNTdHJpbmcmIE1lZGlhU291cmNlU3RhdGVzOjpzb3VyY2VUeXBlKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gTWVkaWFTb3VyY2VTdGF0ZXM6OnNvdXJjZVR5cGUobV9Tb3VyY2VTdGF0ZXMuc291
cmNlVHlwZSk7CisgICAgcmV0dXJuIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpzb3VyY2VUeXBl
KG1fc291cmNlU3RhdGVzLnNvdXJjZVR5cGUoKSk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYg
TWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoKSBjb25zdAogewotICAgIHJldHVybiBNZWRp
YVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShtX1NvdXJjZVN0YXRlcy5mYWNpbmdNb2RlKTsKKyAg
ICByZXR1cm4gTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUobV9zb3VyY2VTdGF0
ZXMuZmFjaW5nTW9kZSgpKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU291cmNlU3RhdGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5oCShyZXZpc2lvbiAxNTgw
MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU291cmNlU3Rh
dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDI0ICszOSwyMSBAQCBjbGFzcyBNZWRpYVNvdXJj
ZVN0YXRlcyA6IHB1YmxpYyBSZWZDb3VuCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxNZWRp
YVNvdXJjZVN0YXRlcz4gY3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzJik7CiAK
LSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzb3VyY2VUeXBlKE1lZGlhU3RyZWFtU291
cmNlU3RhdGVzOjpTb3VyY2VUeXBlKTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBm
YWNpbmdNb2RlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGUpOwotICAg
IAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc291cmNlVHlwZSgpIGNvbnN0OwotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgc291cmNlSWQoKSBjb25zdCB7IHJldHVybiBtX1NvdXJjZVN0YXRlcy5z
b3VyY2VJZDsgfQotICAgIHVuc2lnbmVkIGxvbmcgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX1Nv
dXJjZVN0YXRlcy53aWR0aDsgfQotICAgIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9Tb3VyY2VTdGF0ZXMuaGVpZ2h0OyB9Ci0gICAgZmxvYXQgZnJhbWVSYXRlKCkgY29u
c3QgeyByZXR1cm4gbV9Tb3VyY2VTdGF0ZXMuZnJhbWVSYXRlOyB9Ci0gICAgZmxvYXQgYXNwZWN0
UmF0aW8oKSBjb25zdCB7IHJldHVybiBtX1NvdXJjZVN0YXRlcy5hc3BlY3RSYXRpbzsgfQorICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgc291cmNlSWQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVN0
YXRlcy5zb3VyY2VJZCgpOyB9CisgICAgdW5zaWduZWQgbG9uZyB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlU3RhdGVzLndpZHRoKCk7IH0KKyAgICB1bnNpZ25lZCBsb25nIGhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlU3RhdGVzLmhlaWdodCgpOyB9CisgICAgZmxvYXQgZnJh
bWVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VTdGF0ZXMuZnJhbWVSYXRlKCk7IH0KKyAg
ICBmbG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlU3RhdGVzLmFzcGVj
dFJhdGlvKCk7IH0KICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhY2luZ01vZGUoKSBjb25zdDsK
LSAgICB1bnNpZ25lZCBsb25nIHZvbHVtZSgpIGNvbnN0IHsgcmV0dXJuIG1fU291cmNlU3RhdGVz
LnZvbHVtZTsgfQorICAgIHVuc2lnbmVkIGxvbmcgdm9sdW1lKCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2VTdGF0ZXMudm9sdW1lKCk7IH0KICAgICAKLSAgICBib29sIGhhc1ZpZGVvU291cmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9Tb3VyY2VTdGF0ZXMuc291cmNlVHlwZSA9PSBNZWRpYVN0cmVhbVNv
dXJjZVN0YXRlczo6Q2FtZXJhOyB9CisgICAgYm9vbCBoYXNWaWRlb1NvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlU3RhdGVzLnNvdXJjZVR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZVN0
YXRlczo6Q2FtZXJhOyB9CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTWVkaWFTb3VyY2VTdGF0
ZXMoY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMmKTsKIAotICAgIE1lZGlhU3RyZWFtU291
cmNlU3RhdGVzIG1fU291cmNlU3RhdGVzOworICAgIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzIG1f
c291cmNlU3RhdGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0YXRlcy5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVNvdXJjZVN0
YXRlcy5pZGwJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTb3VyY2VTdGF0ZXMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSAr
MzQsMTEgQEAgZW51bSBWaWRlb0ZhY2luZ01vZGVFbnVtIHsgInVzZXIiLCAiZW52aQogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTb3VyY2VUeXBlRW51bSBzb3VyY2VUeXBlOwogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgc291cmNlSWQ7CiAKLSAgICBbQ3VzdG9tR2V0dGVyXSByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB3aWR0aDsKLSAgICBbQ3VzdG9tR2V0dGVyXSBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBoZWlnaHQ7Ci0gICAgW0N1c3RvbUdldHRl
cl0gcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IGZyYW1lUmF0ZTsKLSAgICBbQ3VzdG9tR2V0dGVy
XSByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgYXNwZWN0UmF0aW87Ci0gICAgW0N1c3RvbUdldHRl
cl0gcmVhZG9ubHkgYXR0cmlidXRlIFZpZGVvRmFjaW5nTW9kZUVudW0gZmFjaW5nTW9kZTsKLSAg
ICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB2b2x1bWU7
CisgICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IHdp
ZHRoOworICAgIFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
PyBoZWlnaHQ7CisgICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0PyBm
cmFtZVJhdGU7CisgICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0PyBh
c3BlY3RSYXRpbzsKKyAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgVmlkZW9G
YWNpbmdNb2RlRW51bT8gZmFjaW5nTW9kZTsKKyAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZz8gdm9sdW1lOwogfTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAJKHJldmlzaW9u
IDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgTWVkaWFTdHJlYW06Ok1l
ZGlhU3RyZWFtKFNjcmlwdEV4ZWN1dGlvbgogICAgIHNpemVfdCBudW1iZXJPZkF1ZGlvVHJhY2tz
ID0gbV9kZXNjcmlwdG9yLT5udW1iZXJPZkF1ZGlvVHJhY2tzKCk7CiAgICAgbV9hdWRpb1RyYWNr
cy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZBdWRpb1RyYWNrcyk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkF1ZGlvVHJhY2tzOyBpKyspIHsKLSAgICAgICAgdHJhY2sgPSBB
dWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUoY29udGV4dCwgbV9kZXNjcmlwdG9yLT5hdWRpb1RyYWNr
cyhpKSk7CisgICAgICAgIHRyYWNrID0gQXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRlKGNvbnRleHQs
ICptX2Rlc2NyaXB0b3ItPmF1ZGlvVHJhY2tzKGkpKTsKICAgICAgICAgdHJhY2stPmFkZE9ic2Vy
dmVyKHRoaXMpOwogICAgICAgICBtX2F1ZGlvVHJhY2tzLmFwcGVuZCh0cmFjay5yZWxlYXNlKCkp
OwogICAgIH0KQEAgLTEzMCw3ICsxMzAsNyBAQCBNZWRpYVN0cmVhbTo6TWVkaWFTdHJlYW0oU2Ny
aXB0RXhlY3V0aW9uCiAgICAgc2l6ZV90IG51bWJlck9mVmlkZW9UcmFja3MgPSBtX2Rlc2NyaXB0
b3ItPm51bWJlck9mVmlkZW9UcmFja3MoKTsKICAgICBtX3ZpZGVvVHJhY2tzLnJlc2VydmVDYXBh
Y2l0eShudW1iZXJPZlZpZGVvVHJhY2tzKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bWJlck9mVmlkZW9UcmFja3M7IGkrKykgewotICAgICAgICB0cmFjayA9IFZpZGVvU3RyZWFtVHJh
Y2s6OmNyZWF0ZShjb250ZXh0LCBtX2Rlc2NyaXB0b3ItPnZpZGVvVHJhY2tzKGkpKTsKKyAgICAg
ICAgdHJhY2sgPSBWaWRlb1N0cmVhbVRyYWNrOjpjcmVhdGUoY29udGV4dCwgKm1fZGVzY3JpcHRv
ci0+dmlkZW9UcmFja3MoaSkpOwogICAgICAgICB0cmFjay0+YWRkT2JzZXJ2ZXIodGhpcyk7CiAg
ICAgICAgIG1fdmlkZW9UcmFja3MuYXBwZW5kKHRyYWNrLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAt
MTkxLDYgKzE5MSw5IEBAIHZvaWQgTWVkaWFTdHJlYW06OmFkZFRyYWNrKFBhc3NSZWZQdHI8TWUK
ICAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbzoKICAgICAgICAgbV92aWRlb1RyYWNr
cy5hcHBlbmQodHJhY2spOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291
cmNlOjpOb25lOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgdHJhY2stPmFkZE9ic2VydmVyKHRoaXMpOwpAQCAtMjIzLDYgKzIyNiw5
IEBAIHZvaWQgTWVkaWFTdHJlYW06OnJlbW92ZVRyYWNrKFBhc3NSZWZQdHIKICAgICAgICAgaWYg
KHBvcyAhPSBub3RGb3VuZCkKICAgICAgICAgICAgIG1fdmlkZW9UcmFja3MucmVtb3ZlKHBvcyk7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6Ok5vbmU6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBp
ZiAocG9zID09IG5vdEZvdW5kKQpAQCAtMzA4LDEzICszMTQsMTYgQEAgdm9pZCBNZWRpYVN0cmVh
bTo6YWRkUmVtb3RlU291cmNlKE1lZGlhUwogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiB0
cmFjazsKICAgICBzd2l0Y2ggKHNvdXJjZS0+dHlwZSgpKSB7CiAgICAgY2FzZSBNZWRpYVN0cmVh
bVNvdXJjZTo6QXVkaW86Ci0gICAgICAgIHRyYWNrID0gQXVkaW9TdHJlYW1UcmFjazo6Y3JlYXRl
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0
ZShzb3VyY2UpKTsKKyAgICAgICAgdHJhY2sgPSBBdWRpb1N0cmVhbVRyYWNrOjpjcmVhdGUoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShz
b3VyY2UpKTsKICAgICAgICAgbV9hdWRpb1RyYWNrcy5hcHBlbmQodHJhY2spOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbzoKLSAgICAgICAgdHJhY2sg
PSBWaWRlb1N0cmVhbVRyYWNrOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHNvdXJjZSkpOworICAgICAgICB0cmFjayA9IFZp
ZGVvU3RyZWFtVHJhY2s6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICpNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHNvdXJjZSkpOwogICAgICAgICBtX3ZpZGVvVHJhY2tz
LmFwcGVuZCh0cmFjayk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3Vy
Y2U6Ok5vbmU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgdHJhY2stPmFkZE9ic2VydmVyKHRoaXMpOwogICAgIG1fZGVzY3JpcHRvci0+
YWRkU291cmNlKHNvdXJjZSk7CkBAIC0zMzUsNiArMzQ0LDkgQEAgdm9pZCBNZWRpYVN0cmVhbTo6
cmVtb3ZlUmVtb3RlU291cmNlKE1lZAogICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVv
OgogICAgICAgICB0cmFja3MgPSAmbV92aWRlb1RyYWNrczsKICAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6Tm9uZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIFZlY3RvcjxpbnQ+IHRyYWNrc1RvUmVt
b3ZlOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bUNhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1ODAyNSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DYXBhYmls
aXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFZlY3RvcjxTdHJpbmc+
IE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOjoKICAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUNhcGFj
aXR5KGNvdW50KTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgIGNhcGFiaWxpdGllcy5hcHBlbmQoTWVkaWFTb3VyY2VTdGF0ZXM6OnNvdXJjZVR5
cGUoc291cmNlVHlwZXNbaV0pKTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmFwcGVuZChNZWRpYVN0
cmVhbVNvdXJjZVN0YXRlczo6c291cmNlVHlwZShzb3VyY2VUeXBlc1tpXSkpOwogICAgIAogICAg
IHJldHVybiBjYXBhYmlsaXRpZXM7CiB9CkBAIC05Nyw3ICs5Nyw3IEBAIFZlY3RvcjxTdHJpbmc+
IE1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOjoKICAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUNhcGFj
aXR5KGNvdW50KTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgIGNhcGFiaWxpdGllcy5hcHBlbmQoTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01v
ZGUoZmFjaW5nTW9kZXNbaV0pKTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmFwcGVuZChNZWRpYVN0
cmVhbVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShmYWNpbmdNb2Rlc1tpXSkpOwogICAgIAogICAg
IHJldHVybiBjYXBhYmlsaXRpZXM7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAJKHJldmlzaW9uIDE1
ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJEaWN0
aW9uYXJ5LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiTWVkaWFD
b25zdHJhaW50c0ltcGwuaCIKICNpbmNsdWRlICJNZWRpYVNvdXJjZVN0YXRlcy5oIgogI2luY2x1
ZGUgIk1lZGlhU3RyZWFtLmgiCkBAIC00NCw1NiArNDUsNDQgQEAKICNpbmNsdWRlICJNZWRpYVN0
cmVhbVRyYWNrU291cmNlc1JlcXVlc3QuaCIKICNpbmNsdWRlICJNZWRpYVRyYWNrQ29uc3RyYWlu
dHMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlVVSUQuaCIKICNp
bmNsdWRlICJWaWRlb1N0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1NZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IHByaXZhdGVU
cmFjaywgY29uc3QgRGljdGlvbmFyeSopCitNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRy
YWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlJiBwcml2YXRlVHJhY2ssIGNvbnN0IERpY3Rpb25hcnkqIGNvbnN0cmFpbnRzKQogICAgIDog
QWN0aXZlRE9NT2JqZWN0KGNvbnRleHQpCiAgICAgLCBtX3ByaXZhdGVUcmFjayhwcml2YXRlVHJh
Y2spCiAgICAgLCBtX2V2ZW50RGlzcGF0Y2hTY2hlZHVsZWQoZmFsc2UpCisgICAgLCBtX3N0b3Bw
aW5nVHJhY2soZmFsc2UpCiB7CiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiAKLSAgICBpZiAobV9w
cml2YXRlVHJhY2stPnNvdXJjZSgpKQotICAgICAgICBtX3ByaXZhdGVUcmFjay0+c291cmNlKCkt
PmFkZE9ic2VydmVyKHRoaXMpOworICAgIG1fcHJpdmF0ZVRyYWNrLT5zZXRDbGllbnQodGhpcyk7
CisKKyAgICBpZiAoY29uc3RyYWludHMpCisgICAgICAgIGFwcGx5Q29uc3RyYWludHMoKmNvbnN0
cmFpbnRzKTsKIH0KIAogTWVkaWFTdHJlYW1UcmFjazo6TWVkaWFTdHJlYW1UcmFjayhNZWRpYVN0
cmVhbVRyYWNrKiBvdGhlcikKICAgICA6IEFjdGl2ZURPTU9iamVjdChvdGhlci0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9wcml2YXRlVHJhY2soKm90aGVyLT5wcml2YXRlVHJh
Y2soKS5jbG9uZSgpKQorICAgICwgbV9ldmVudERpc3BhdGNoU2NoZWR1bGVkKGZhbHNlKQorICAg
ICwgbV9zdG9wcGluZ1RyYWNrKGZhbHNlKQogewogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogCi0g
ICAgbV9wcml2YXRlVHJhY2sgPSBvdGhlci0+cHJpdmF0ZVRyYWNrKCktPmNsb25lKCk7Ci0KLSAg
ICBpZiAobV9wcml2YXRlVHJhY2stPnNvdXJjZSgpKQotICAgICAgICBtX3ByaXZhdGVUcmFjay0+
c291cmNlKCktPmFkZE9ic2VydmVyKHRoaXMpOwotCi0gICAgbV9ldmVudERpc3BhdGNoU2NoZWR1
bGVkID0gZmFsc2U7CisgICAgbV9wcml2YXRlVHJhY2stPnNldENsaWVudCh0aGlzKTsKIH0KIAog
TWVkaWFTdHJlYW1UcmFjazo6fk1lZGlhU3RyZWFtVHJhY2soKQogeworICAgIG1fcHJpdmF0ZVRy
YWNrLT5zZXRDbGllbnQobnVsbHB0cik7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFT
dHJlYW1UcmFjazo6a2luZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZVRyYWNrLT5r
aW5kKCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1UcmFjazo6c2V0U291cmNlKE1lZGlhU3RyZWFt
U291cmNlKiBuZXdTb3VyY2UpCit2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnNldFNvdXJjZShQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBuZXdTb3VyY2UpCiB7Ci0gICAgTWVkaWFTdHJlYW1T
b3VyY2UqIHRyYWNrU291cmNlID0gc291cmNlKCk7Ci0KLSAgICBpZiAodHJhY2tTb3VyY2UpCi0g
ICAgICAgIHRyYWNrU291cmNlLT5yZW1vdmVPYnNlcnZlcih0aGlzKTsKLQotICAgIGlmIChuZXdT
b3VyY2UpCi0gICAgICAgIG5ld1NvdXJjZS0+YWRkT2JzZXJ2ZXIodGhpcyk7Ci0KICAgICBtX3By
aXZhdGVUcmFjay0+c2V0U291cmNlKG5ld1NvdXJjZSk7CiB9CiAKQEAgLTExNyw2ICsxMDYsMTEg
QEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzZXRFbmFibGVkKGJvb2wgZQogICAgIG1fcHJpdmF0
ZVRyYWNrLT5zZXRFbmFibGVkKGVuYWJsZWQpOwogfQogCitib29sIE1lZGlhU3RyZWFtVHJhY2s6
OnN0b3BwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGVUcmFjay0+c3RvcHBlZCgp
OworfQorCiBib29sIE1lZGlhU3RyZWFtVHJhY2s6Om11dGVkKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9wcml2YXRlVHJhY2stPm11dGVkKCk7CkBAIC0xNjcsMzAgKzE2MSwzNyBAQCBSZWZQdHI8
TWVkaWFUcmFja0NvbnN0cmFpbnRzPiBNZWRpYVN0cmVhCiAKIFJlZlB0cjxNZWRpYVNvdXJjZVN0
YXRlcz4gTWVkaWFTdHJlYW1UcmFjazo6c3RhdGVzKCkgY29uc3QKIHsKLSAgICBpZiAoIXNvdXJj
ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBNZWRpYVNvdXJjZVN0YXRlczo6
Y3JlYXRlKHNvdXJjZSgpLT5zdGF0ZXMoKSk7CisgICAgcmV0dXJuIE1lZGlhU291cmNlU3RhdGVz
OjpjcmVhdGUobV9wcml2YXRlVHJhY2stPnN0YXRlcygpKTsKIH0KIAogUmVmUHRyPE1lZGlhU3Ry
ZWFtQ2FwYWJpbGl0aWVzPiBNZWRpYVN0cmVhbVRyYWNrOjpjYXBhYmlsaXRpZXMoKSBjb25zdAog
ewotICAgIGlmICghc291cmNlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIE1l
ZGlhU3RyZWFtQ2FwYWJpbGl0aWVzOjpjcmVhdGUoc291cmNlKCktPmNhcGFiaWxpdGllcygpKTsK
KyAgICAvLyBUaGUgc291cmNlIG1heSBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgdHJhY2tzLCBzbyBp
dHMgc3RhdGVzIGlzIG5vdCBuZWNlc3NhcmlseQorICAgIC8vIGluIHN5bmMgd2l0aCB0aGUgdHJh
Y2sgc3RhdGUuIEEgdHJhY2sgdGhhdCBpcyBuZXcgb3IgaGFzIGVuZGVkIGFsd2F5cyBoYXMgYSBz
b3VyY2UKKyAgICAvLyB0eXBlIG9mICJub25lIi4KKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2VDYXBhYmlsaXRpZXM+IHNvdXJjZUNhcGFiaWxpdGllcyA9IG1fcHJpdmF0ZVRyYWNrLT5jYXBh
YmlsaXRpZXMoKTsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSByZWFkeVN0YXRl
ID0gbV9wcml2YXRlVHJhY2stPnJlYWR5U3RhdGUoKTsKKyAgICBpZiAocmVhZHlTdGF0ZSA9PSBN
ZWRpYVN0cmVhbVNvdXJjZTo6TmV3IHx8IHJlYWR5U3RhdGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6
OkVuZGVkKQorICAgICAgICBzb3VyY2VDYXBhYmlsaXRpZXMtPnNldFNvdXJjZVR5cGUoTWVkaWFT
dHJlYW1Tb3VyY2VTdGF0ZXM6Ok5vbmUpOworICAgIAorICAgIHJldHVybiBNZWRpYVN0cmVhbUNh
cGFiaWxpdGllczo6Y3JlYXRlKHNvdXJjZUNhcGFiaWxpdGllcy5yZWxlYXNlKCkpOwogfQogCiB2
b2lkIE1lZGlhU3RyZWFtVHJhY2s6OmFwcGx5Q29uc3RyYWludHMoY29uc3QgRGljdGlvbmFyeSYg
Y29uc3RyYWludHMpCiB7CisgICAgbV9jb25zdHJhaW50cy0+aW5pdGlhbGl6ZShjb25zdHJhaW50
cyk7CisgICAgbV9wcml2YXRlVHJhY2stPmFwcGx5Q29uc3RyYWludHMobV9jb25zdHJhaW50cyk7
Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1UcmFjazo6YXBwbHlDb25zdHJhaW50cyhQYXNzUmVmUHRy
PE1lZGlhQ29uc3RyYWludHM+KQorewogICAgIC8vIEZJWE1FOiBhcHBseSB0aGUgbmV3IGNvbnN0
cmFpbnRzIHRvIHRoZSB0cmFjawogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjI0MjgKLSAgICBtX2NvbnN0cmFpbnRzLT5pbml0aWFsaXplKGNvbnN0cmFp
bnRzKTsKIH0KIAogUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IE1lZGlhU3RyZWFtVHJhY2s6OmNs
b25lKCkKIHsKLSAgICBpZiAoc291cmNlKCkgJiYgc291cmNlKCktPnR5cGUoKSA9PSBNZWRpYVN0
cmVhbVNvdXJjZTo6QXVkaW8pCisgICAgaWYgKG1fcHJpdmF0ZVRyYWNrLT50eXBlKCkgPT0gTWVk
aWFTdHJlYW1Tb3VyY2U6OkF1ZGlvKQogICAgICAgICByZXR1cm4gQXVkaW9TdHJlYW1UcmFjazo6
Y3JlYXRlKHRoaXMpOwogCiAgICAgcmV0dXJuIFZpZGVvU3RyZWFtVHJhY2s6OmNyZWF0ZSh0aGlz
KTsKQEAgLTE5OCwxMSArMTk5LDE0IEBAIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBNZWRpYVN0
cmVhbVRyYWMKIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzdG9wUHJvZHVjaW5nRGF0YSgpCiB7
Ci0gICAgaWYgKHN0b3BwZWQoKSB8fCAhc291cmNlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fcHJpdmF0ZVRyYWNrLT5zZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCk7
Ci0gICAgbV9wcml2YXRlVHJhY2stPnN0b3AoKTsKKyAgICAvLyBOT1RFOiB0aGlzIG1ldGhvZCBp
cyBjYWxsZWQgd2hlbiB0aGUgInN0b3AiIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBKUywgdXNpbmcK
KyAgICAvLyB0aGUgIkltcGxlbWVudGVkQXMiIElETCBhdHRyaWJ1dGUuIFRoaXMgaXMgZG9uZSBi
ZWNhdXNlIEFjdGl2ZURPTU9iamVjdCByZXF1aXJlcworICAgIC8vIGEgInN0b3AiIG1ldGhvZC4K
KyAgICAKKyAgICAvLyBUaGUgc3RvcCBtZXRob2Qgc2hvdWxkICJQZXJtYW5lbnRseSBzdG9wIHRo
ZSBnZW5lcmF0aW9uIG9mIGRhdGEgZm9yIHRyYWNrJ3Mgc291cmNlLiIKKyAgICBtX3N0b3BwaW5n
VHJhY2sgPSB0cnVlOworICAgIG1fcHJpdmF0ZVRyYWNrLT5zdG9wKE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlOjpTdG9wVHJhY2tBbmRTdG9wU291cmNlKTsKKyAgICBtX3N0b3BwaW5nVHJhY2sgPSBm
YWxzZTsKIH0KIAogYm9vbCBNZWRpYVN0cmVhbVRyYWNrOjplbmRlZCgpIGNvbnN0CkBAIC0yMjIs
MzEgKzIyNiwzOSBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnJlbW92ZU9ic2VydmVyKE1lCiAg
ICAgICAgIG1fb2JzZXJ2ZXJzLnJlbW92ZShwb3MpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtVHJh
Y2s6OnNvdXJjZVN0YXRlQ2hhbmdlZCgpCit2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnRyYWNrUmVh
ZHlTdGF0ZUNoYW5nZWQoKQogewogICAgIGlmIChzdG9wcGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fcHJpdmF0ZVRyYWNrLT5zZXRSZWFkeVN0YXRlKHNvdXJjZSgpLT5yZWFkeVN0YXRl
KCkpOworICAgIE1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUgPSBtX3By
aXZhdGVUcmFjay0+cmVhZHlTdGF0ZSgpOworICAgIGlmIChyZWFkeVN0YXRlID09IE1lZGlhU3Ry
ZWFtU291cmNlOjpMaXZlKQorICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuc3RhcnRlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAgICBlbHNl
IGlmIChyZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCAmJiAhbV9zdG9wcGlu
Z1RyYWNrKQorICAgICAgICBzY2hlZHVsZUV2ZW50RGlzcGF0Y2goRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuZW5kZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisKKyAgICBjb25maWd1cmVUcmFj
a1JlbmRlcmluZygpOwogfQogICAgIAotdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzb3VyY2VNdXRl
ZENoYW5nZWQoKQordm9pZCBNZWRpYVN0cmVhbVRyYWNrOjp0cmFja011dGVkQ2hhbmdlZCgpCiB7
CiAgICAgaWYgKHN0b3BwZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcml2YXRlVHJh
Y2stPnNldE11dGVkKHNvdXJjZSgpLT5tdXRlZCgpKTsKKyAgICBpZiAobXV0ZWQoKSkKKyAgICAg
ICAgc2NoZWR1bGVFdmVudERpc3BhdGNoKEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLm11dGVF
dmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAgZWxzZQorICAgICAgICBzY2hlZHVsZUV2ZW50RGlz
cGF0Y2goRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkudW5tdXRlRXZlbnQsIGZhbHNlLCBmYWxz
ZSkpOwogCiAgICAgY29uZmlndXJlVHJhY2tSZW5kZXJpbmcoKTsKIH0KIAotdm9pZCBNZWRpYVN0
cmVhbVRyYWNrOjpzb3VyY2VFbmFibGVkQ2hhbmdlZCgpCit2b2lkIE1lZGlhU3RyZWFtVHJhY2s6
OnRyYWNrRW5hYmxlZENoYW5nZWQoKQogewogICAgIGlmIChzdG9wcGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHNldEVuYWJsZWQoc291cmNlKCktPmVuYWJsZWQoKSk7Ci0gICAgLy8gbWVk
aWEgZnJvbSB0aGUgc291cmNlIG9ubHkgZmxvd3Mgd2hlbiBhIE1lZGlhU3RyZWFtVHJhY2sgb2Jq
ZWN0IGlzIGJvdGggdW5tdXRlZCBhbmQgZW5hYmxlZAorICAgIHNldEVuYWJsZWQobV9wcml2YXRl
VHJhY2stPmVuYWJsZWQoKSk7CiAgICAgY29uZmlndXJlVHJhY2tSZW5kZXJpbmcoKTsKIH0KIApA
QCAtMjU5LDExICsyNzEsNiBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OmNvbmZpZ3VyZVRyYWNr
UmVuCiAgICAgLy8gLi4uIG1lZGlhIGZyb20gdGhlIHNvdXJjZSBvbmx5IGZsb3dzIHdoZW4gYSBN
ZWRpYVN0cmVhbVRyYWNrIG9iamVjdCBpcyBib3RoIHVubXV0ZWQgYW5kIGVuYWJsZWQKIH0KIAot
Ym9vbCBNZWRpYVN0cmVhbVRyYWNrOjpzdG9wcGVkKCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRl
VHJhY2stPnN0b3BwZWQoKTsKLX0KLQogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjp0cmFja0RpZEVu
ZCgpCiB7CiAgICAgbV9wcml2YXRlVHJhY2stPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3Vy
Y2U6OkVuZGVkKTsKQEAgLTI3NCw3ICsyODEsNyBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2s6OnRy
YWNrRGlkRW5kKCkKIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpzdG9wKCkKIHsKLSAgICBzdG9w
UHJvZHVjaW5nRGF0YSgpOworICAgIG1fcHJpdmF0ZVRyYWNrLT5zdG9wKE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlOjpTdG9wVHJhY2tPbmx5KTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjpz
Y2hlZHVsZUV2ZW50RGlzcGF0Y2goUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCkBAIC0zMDcsMjIg
KzMxNCw2IEBAIHZvaWQgTWVkaWFTdHJlYW1UcmFjazo6ZGlzcGF0Y2hRdWV1ZWRFdmUKICAgICBl
dmVudHMuY2xlYXIoKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbVRyYWNrOjp0cmFja1JlYWR5U3Rh
dGVDaGFuZ2VkKCkKLXsKLSAgICBpZiAobV9wcml2YXRlVHJhY2stPnJlYWR5U3RhdGUoKSA9PSBN
ZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSkKLSAgICAgICAgc2NoZWR1bGVFdmVudERpc3BhdGNoKEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0YXJ0ZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci0g
ICAgZWxzZSBpZiAobV9wcml2YXRlVHJhY2stPnJlYWR5U3RhdGUoKSA9PSBNZWRpYVN0cmVhbVNv
dXJjZTo6RW5kZWQpCi0gICAgICAgIHNjaGVkdWxlRXZlbnREaXNwYXRjaChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5lbmRlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKLX0KLQotdm9pZCBNZWRp
YVN0cmVhbVRyYWNrOjp0cmFja011dGVkQ2hhbmdlZCgpCi17Ci0gICAgaWYgKG11dGVkKCkpCi0g
ICAgICAgIHNjaGVkdWxlRXZlbnREaXNwYXRjaChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5t
dXRlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotICAgIGVsc2UKLSAgICAgICAgc2NoZWR1bGVFdmVu
dERpc3BhdGNoKEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubXV0ZUV2ZW50LCBmYWxzZSwg
ZmFsc2UpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1UcmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDExIEBAIGNsYXNzIE1lZGlhU3RyZWFtVHJhY2tTb3VyY2Vz
Q2FsbGJhY2s7CiBjbGFzcyBNZWRpYVN0cmVhbUNhcGFiaWxpdGllczsKIGNsYXNzIE1lZGlhVHJh
Y2tDb25zdHJhaW50czsKIAotY2xhc3MgTWVkaWFTdHJlYW1UcmFjayA6IHB1YmxpYyBSZWZDb3Vu
dGVkPE1lZGlhU3RyZWFtVHJhY2s+LCBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgQWN0
aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIE1l
ZGlhU3RyZWFtU291cmNlOjpPYnNlcnZlciwgcHVibGljIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
Q2xpZW50IHsKK2NsYXNzIE1lZGlhU3RyZWFtVHJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRp
YVN0cmVhbVRyYWNrPiwgcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIEFjdGl2ZURPTU9i
amVjdCwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgY2xhc3MgT2JzZXJ2ZXIgewogICAg
IHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+T2JzZXJ2ZXIoKSB7IH0KICAgICAgICAgdmlydHVh
bCB2b2lkIHRyYWNrRGlkRW5kKCkgPSAwOwogICAgIH07CiAKQEAgLTY3LDYgKzY4LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgbXV0ZWQoKSBjb25zdDsKICAgICBib29sIHJlYWRvbmx5KCkgY29uc3Q7
CiAgICAgYm9vbCByZW1vdGUoKSBjb25zdDsKKyAgICBib29sIHN0b3BwZWQoKSBjb25zdDsKIAog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcmVhZHlTdGF0ZSgpIGNvbnN0OwogCkBAIC03Niw2ICs3
OCw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8TWVkaWFTb3VyY2VTdGF0ZXM+IHN0YXRlcygpIGNv
bnN0OwogICAgIFJlZlB0cjxNZWRpYVN0cmVhbUNhcGFiaWxpdGllcz4gY2FwYWJpbGl0aWVzKCkg
Y29uc3Q7CiAgICAgdm9pZCBhcHBseUNvbnN0cmFpbnRzKGNvbnN0IERpY3Rpb25hcnkmKTsKKyAg
ICB2b2lkIGFwcGx5Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7CiAK
ICAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4gY2xvbmUoKTsKICAgICB2b2lkIHN0b3BQcm9k
dWNpbmdEYXRhKCk7CkBAIC04NywxNyArOTAsMTEgQEAgcHVibGljOgogICAgIERFRklORV9BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIob3ZlcmNvbnN0cmFpbmVkKTsKIAogICAgIE1lZGlhU3RyZWFt
U291cmNlKiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGVUcmFjay0+c291cmNlKCk7
IH0KLSAgICB2b2lkIHNldFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSopOwogCiAgICAgYm9vbCBl
bmRlZCgpIGNvbnN0OwogCiAgICAgdm9pZCBhZGRPYnNlcnZlcihPYnNlcnZlciopOwogICAgIHZv
aWQgcmVtb3ZlT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKLSAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZSogcHJpdmF0ZVRyYWNrKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlVHJhY2suZ2V0KCk7IH0K
LQotICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50Ci0gICAgdm9pZCB0cmFja1Jl
YWR5U3RhdGVDaGFuZ2VkKCk7Ci0gICAgdm9pZCB0cmFja011dGVkQ2hhbmdlZCgpOwogCiAgICAg
Ly8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gTWVkaWFTdHJlYW1U
cmFja0V2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQpAQCAtMTA4LDcgKzEwNSwxMCBAQCBwdWJs
aWM6CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3Ry
ZWFtVHJhY2sqKTsKLSAgICBNZWRpYVN0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiwgY29uc3QgRGljdGlvbmFyeSop
OworICAgIE1lZGlhU3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlJiwgY29uc3QgRGljdGlvbmFyeSopOworCisgICAgTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUmIHByaXZhdGVUcmFjaygpIHsgcmV0dXJuIG1fcHJpdmF0ZVRyYWNrLmdldCgp
OyB9CisgICAgdm9pZCBzZXRTb3VyY2UoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4pOwog
CiBwcml2YXRlOgogCkBAIC0xMjQsMTEgKzEyNCwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCByZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIEZJTkFMIHsgcmVmKCk7IH0KICAgICB2aXJ0
dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIE9WRVJSSURFIEZJTkFMIHsgZGVyZWYoKTsgfQog
Ci0gICAgLy8gTWVkaWFTdHJlYW1Tb3VyY2VPYnNlcnZlcgotICAgIHZpcnR1YWwgdm9pZCBzb3Vy
Y2VTdGF0ZUNoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKLSAgICB2aXJ0dWFsIHZvaWQgc291cmNl
TXV0ZWRDaGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCB2b2lkIHNvdXJjZUVu
YWJsZWRDaGFuZ2VkKCkgT1ZFUlJJREUgRklOQUw7Ci0gICAgdmlydHVhbCBib29sIHN0b3BwZWQo
KSBPVkVSUklERSBGSU5BTDsKKyAgICAvLyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUNsaWVudAor
ICAgIHZvaWQgdHJhY2tSZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIHZvaWQgdHJhY2tNdXRlZENo
YW5nZWQoKTsKKyAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoKTsKIAogICAgIFZlY3RvcjxS
ZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEV2ZW50czsKIApAQCAtMTM3LDggKzEzNiwxMCBAQCBw
cml2YXRlOgogCiAgICAgVmVjdG9yPE9ic2VydmVyKj4gbV9vYnNlcnZlcnM7CiAKLSAgICBSZWZQ
dHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IG1fcHJpdmF0ZVRyYWNrOworICAgIFJlZjxNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZT4gbV9wcml2YXRlVHJhY2s7CiAgICAgYm9vbCBtX2V2ZW50RGlz
cGF0Y2hTY2hlZHVsZWQ7CisKKyAgICBib29sIG1fc3RvcHBpbmdUcmFjazsKIH07CiAKIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPj4gTWVkaWFTdHJlYW1UcmFja1ZlY3Rv
cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhUmVx
dWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTU4MDI1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY3LDExICsxNjcsMTEgQEAgdm9pZCBVc2VyTWVkaWFSZXF1ZXN0OjpjYWxsU3VjY2Vz
c0hhbmRsZQogCiAgICAgTWVkaWFTdHJlYW1UcmFja1ZlY3RvciB0cmFja3MgPSBzdHJlYW0tPmdl
dEF1ZGlvVHJhY2tzKCk7CiAgICAgZm9yIChNZWRpYVN0cmVhbVRyYWNrVmVjdG9yOjppdGVyYXRv
ciBpdGVyID0gdHJhY2tzLmJlZ2luKCk7IGl0ZXIgIT0gdHJhY2tzLmVuZCgpOyArK2l0ZXIpCi0g
ICAgICAgICgqaXRlciktPnNvdXJjZSgpLT5zZXRDb25zdHJhaW50cyhtX2F1ZGlvQ29uc3RyYWlu
dHMpOworICAgICAgICAoKml0ZXIpLT5hcHBseUNvbnN0cmFpbnRzKG1fYXVkaW9Db25zdHJhaW50
cyk7CiAKICAgICB0cmFja3MgPSBzdHJlYW0tPmdldFZpZGVvVHJhY2tzKCk7CiAgICAgZm9yIChN
ZWRpYVN0cmVhbVRyYWNrVmVjdG9yOjppdGVyYXRvciBpdGVyID0gdHJhY2tzLmJlZ2luKCk7IGl0
ZXIgIT0gdHJhY2tzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPnNvdXJjZSgpLT5z
ZXRDb25zdHJhaW50cyhtX3ZpZGVvQ29uc3RyYWludHMpOworICAgICAgICAoKml0ZXIpLT5hcHBs
eUNvbnN0cmFpbnRzKG1fdmlkZW9Db25zdHJhaW50cyk7CiAKICAgICBtX3N1Y2Nlc3NDYWxsYmFj
ay0+aGFuZGxlRXZlbnQoc3RyZWFtLmdldCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vVmlkZW9TdHJlYW1UcmFjay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9WaWRlb1N0cmVhbVRyYWNrLmNwcAkocmV2
aXNpb24gMTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9WaWRl
b1N0cmVhbVRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogUmVmUHRyPFZpZGVvU3RyZWFtVHJhY2s+IFZpZGVvU3RyZWFtVHJh
Y2s6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEaWN0aW9u
YXJ5JiB2aWRlb0NvbnN0cmFpbnRzKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmlkZW9T
dHJlYW1UcmFjayhjb250ZXh0LCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKDApLCAm
dmlkZW9Db25zdHJhaW50cykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmlkZW9TdHJlYW1U
cmFjayhjb250ZXh0LCAqTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZSgwKSwgJnZpZGVv
Q29uc3RyYWludHMpKTsKIH0KIAotUmVmUHRyPFZpZGVvU3RyZWFtVHJhY2s+IFZpZGVvU3RyZWFt
VHJhY2s6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBwcml2YXRlVHJhY2spCitSZWZQdHI8VmlkZW9TdHJl
YW1UcmFjaz4gVmlkZW9TdHJlYW1UcmFjazo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBwcml2YXRlVHJhY2spCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBWaWRlb1N0cmVhbVRyYWNrKGNvbnRleHQsIHByaXZhdGVUcmFj
aywgMCkpOwogfQpAQCAtNTAsNyArNTAsNyBAQCBSZWZQdHI8VmlkZW9TdHJlYW1UcmFjaz4gVmlk
ZW9TdHJlYW1UcmFjCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWaWRlb1N0cmVhbVRyYWNrKHRy
YWNrKSk7CiB9CiAKLVZpZGVvU3RyZWFtVHJhY2s6OlZpZGVvU3RyZWFtVHJhY2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4gcHJpdmF0ZVRyYWNrLCBjb25zdCBEaWN0aW9uYXJ5KiB2aWRlb0NvbnN0cmFpbnRzKQorVmlk
ZW9TdHJlYW1UcmFjazo6VmlkZW9TdHJlYW1UcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgcHJpdmF0ZVRyYWNrLCBjb25zdCBEaWN0
aW9uYXJ5KiB2aWRlb0NvbnN0cmFpbnRzKQogICAgIDogTWVkaWFTdHJlYW1UcmFjayhjb250ZXh0
LCBwcml2YXRlVHJhY2ssIHZpZGVvQ29uc3RyYWludHMpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1ZpZGVvU3RyZWFtVHJhY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1ZpZGVvU3RyZWFtVHJhY2suaAko
cmV2aXNpb24gMTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9W
aWRlb1N0cmVhbVRyYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3Mg
TWVkaWFTdHJlbVRyYWNrRGVzY3JpcHRvcjsKIGNsYXNzIFZpZGVvU3RyZWFtVHJhY2sgRklOQUwg
OiBwdWJsaWMgTWVkaWFTdHJlYW1UcmFjayB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxW
aWRlb1N0cmVhbVRyYWNrPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERp
Y3Rpb25hcnkmKTsKLSAgICBzdGF0aWMgUmVmUHRyPFZpZGVvU3RyZWFtVHJhY2s+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4pOworICAgIHN0YXRpYyBSZWZQdHI8VmlkZW9TdHJlYW1UcmFjaz4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpOwogICAgIHN0YXRpYyBS
ZWZQdHI8VmlkZW9TdHJlYW1UcmFjaz4gY3JlYXRlKE1lZGlhU3RyZWFtVHJhY2sqKTsKIAogICAg
IHZpcnR1YWwgflZpZGVvU3RyZWFtVHJhY2soKSB7IH0KQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBraW5kKCkgY29uc3QgT1ZFUlJJREU7
CiAKIHByaXZhdGU6Ci0gICAgVmlkZW9TdHJlYW1UcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4sIGNvbnN0IERpY3Rpb25hcnkq
KTsKKyAgICBWaWRlb1N0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSYsIGNvbnN0IERpY3Rpb25hcnkqKTsKICAgICBleHBsaWNpdCBWaWRl
b1N0cmVhbVRyYWNrKE1lZGlhU3RyZWFtVHJhY2sqKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1
ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsMTYgQEAKIAkJMDcwMzM0RDcxNDU5RkZENTAw
OEQ4RDQ1IC8qIFRyYWNrQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDcwMzM0RDYxNDU5RkZENTAwOEQ4RDQ1IC8qIFRyYWNrQmFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3MDMzNEQ5MTQ1
QTAwNkYwMDhEOEQ0NSAvKiBUcmFja0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzM0RDgxNDVBMDA2RjAwOEQ4RDQ1IC8qIFRyYWNrQmFz
ZS5jcHAgKi87IH07CiAJCTA3MDMzNEU5MTQ1QTFGMzYwMDhEOEQ0NSAvKiBKU1RyYWNrQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDMz
NEU4MTQ1QTFGMzUwMDhEOEQ0NSAvKiBKU1RyYWNrQ3VzdG9tLmNwcCAqLzsgfTsKKwkJMDcwMzYz
RDYxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0Q0MTgxQTE0NjUw
MEMwNzRBNSAvKiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHAgKi87IH07CisJCTA3MDM2M0Q3
MTgxQTE0NjUwMEMwNzRBNSAvKiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzRDUxODFBMTQ2NTAwQzA3
NEE1IC8qIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmggKi87IH07CisJCTA3MDM2M0UwMTgxQTFD
REMwMEMwNzRBNSAvKiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzRDgxODFBMUNEQzAwQzA3NEE1IC8qIEFW
QXVkaW9DYXB0dXJlU291cmNlLmggKi87IH07CisJCTA3MDM2M0UxMTgxQTFDREMwMEMwNzRBNSAv
KiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3MDM2M0Q5MTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1ZGlvQ2FwdHVy
ZVNvdXJjZS5tbSAqLzsgfTsKKwkJMDcwMzYzRTIxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVy
ZURldmljZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3MDM2M0RBMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmggKi87IH07CisJCTA3MDM2M0UzMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDcwMzYzREIxODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFnZXIubW0gKi87
IH07CisJCTA3MDM2M0U0MTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwMzYzREMx
ODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLmggKi87IH07CisJCTA3MDM2
M0U1MTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDM2M0REMTgxQTFDREMwMEMw
NzRBNSAvKiBBVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbSAqLzsgfTsKKwkJMDcwMzYzRTYxODFBMUNE
QzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzAzNjNERTE4MUExQ0RDMDBDMDc0QTUgLyogQVZW
aWRlb0NhcHR1cmVTb3VyY2UuaCAqLzsgfTsKKwkJMDcwMzYzRTcxODFBMUNEQzAwQzA3NEE1IC8q
IEFWVmlkZW9DYXB0dXJlU291cmNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDcwMzYzREYxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJl
U291cmNlLm1tICovOyB9OwogCQkwNzA1ODRGRDE3RjlENkRGMDA1RjJCQ0IgLyogTWVkaWFTdHJl
YW1Tb3VyY2VDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA3MDU4NEZCMTdGOUQ2REYwMDVGMkJDQiAvKiBNZWRpYVN0cmVhbVNvdXJj
ZUNhcGFiaWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTA3MDU4NEZGMTdGOUYwNUUwMDVGMkJDQiAvKiBDYXBhYmlsaXR5UmFuZ2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwNTg0RkUx
N0Y5RjA1RTAwNUYyQkNCIC8qIENhcGFiaWxpdHlSYW5nZS5jcHAgKi87IH07CiAJCTA3MDU4NTAy
MTdGQTEwRDAwMDVGMkJDQiAvKiBKU0FsbFZpZGVvQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDU4NTAwMTdGQTEwRDAwMDVG
MkJDQiAvKiBKU0FsbFZpZGVvQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKQEAgLTMxMyw2ICszMjMs
OCBAQAogCQkwN0RDNUZENDE3RDNFRUU5MDA5OUY4OTAgLyogSlNSVENTdGF0c1Jlc3BvbnNlQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
REM1RkQzMTdEM0VFRTkwMDk5Rjg5MCAvKiBKU1JUQ1N0YXRzUmVzcG9uc2VDdXN0b20uY3BwICov
OyB9OwogCQkwN0UxMTZCMTE0ODlDOUExMDBFQzVBQ0UgLyogSlNUZXh0VHJhY2tDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdFMTE2QjAx
NDg5QzlBMTAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VzdG9tLmNwcCAqLzsgfTsKIAkJMDdFMTE3
MDcxNDg5RUJFQjAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RTExNzA2MTQ4OUVCRUIwMEVD
NUFDRSAvKiBKU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAgKi87IH07CisJCTA3RkZERTY4MTgxQUVE
NDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0ZGREU2NjE4MUFFRDQyMDA3MkQ0MDkg
LyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwICovOyB9OworCQkwN0ZGREU2OTE4MUFFRDQy
MDA3MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RkZERTY3MTgxQUVENDIwMDcyRDQwOSAvKiBN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oICovOyB9OwogCQkwODA2RTU3QTEyODkzMDQ1MDA3Q0VE
MzIgLyogU1ZHTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODA2RTU3OTEyODkzMDQ1MDA3Q0VEMzIgLyogU1ZHTWF0cml4LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDgwRTQ5MjYxMjU1RjNC
RDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgwRTQ5MjIxMjU1RjNCRDAwRUZDQTI3
IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oICovOyB9OwogCQkwODBFNDkyODEyNTVG
M0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEU0OTI0MTI1NUYzQkQwMEVGQ0Ey
NyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oICovOyB9OwpAQCAtNjQ4MSw2ICs2NDkz
LDE2IEBACiAJCTA3MDMzNEQ2MTQ1OUZGRDUwMDhEOEQ0NSAvKiBUcmFja0Jhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhY2tCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA3MDMzNEQ4MTQ1QTAwNkYwMDhEOEQ0NSAvKiBUcmFja0Jhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhY2tCYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwMzM0RTgxNDVBMUYzNTAwOEQ4RDQ1IC8qIEpTVHJh
Y2tDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUcmFj
a0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDM2M0Q0MTgxQTE0
NjUwMEMwNzRBNSAvKiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MDM2M0Q1MTgxQTE0NjUwMEMwNzRBNSAvKiBNZWRp
YVN0cmVhbVNvdXJjZVN0YXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
NzAzNjNEODE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVZBdWRpb0NhcHR1cmVTb3VyY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwMzYzRDkxODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVk
aW9DYXB0dXJlU291cmNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gQVZBdWRpb0NhcHR1cmVTb3VyY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTA3MDM2M0RBMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwMzYzREIxODFBMUNEQzAwQzA3NEE1IC8q
IEFWQ2FwdHVyZURldmljZU1hbmFnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwNzAzNjNEQzE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3Vy
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVZNZWRpYUNhcHR1cmVTb3Vy
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcwMzYzREQxODFBMUNEQzAwQzA3
NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gQVZNZWRpYUNhcHR1cmVTb3VyY2UubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTA3MDM2M0RFMTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNv
dXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBVlZpZGVvQ2FwdHVyZVNv
dXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzAzNjNERjE4MUExQ0RDMDBD
MDc0QTUgLyogQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDcwNTg0RkIxN0Y5RDZERjAwNUYyQkNCIC8qIE1lZGlhU3RyZWFtU291
cmNlQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlh
U3RyZWFtU291cmNlQ2FwYWJpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA3MDU4NEZFMTdGOUYwNUUwMDVGMkJDQiAvKiBDYXBhYmlsaXR5UmFuZ2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FwYWJpbGl0eVJhbmdlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwNTg1MDAxN0ZBMTBEMDAwNUYyQkNCIC8qIEpTQWxs
VmlkZW9DYXBhYmlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNBbGxWaWRlb0NhcGFiaWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02NzUwLDYgKzY3NzIsOCBAQAogCQkwN0RDNUZEMzE3RDNFRUU5MDA5OUY4OTAgLyogSlNS
VENTdGF0c1Jlc3BvbnNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTUlRDU3RhdHNSZXNwb25zZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA3RTExNkIwMTQ4OUM5QTEwMEVDNUFDRSAvKiBKU1RleHRUcmFja0N1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1RleHRUcmFja0N1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RTExNzA2MTQ4OUVCRUIwMEVD
NUFDRSAvKiBKU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1RleHRUcmFja0N1ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTA3RkZERTY2MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3RkZE
RTY3MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODA2RTU3OTEyODkzMDQ1MDA3Q0VEMzIgLyogU1ZH
TWF0cml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01hdHJpeC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODBFNDkyMTEyNTVGM0JEMDBFRkNBMjcgLyog
U1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA4MEU0OTIyMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5
b3V0RW5naW5lQmFzZWxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
VGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMzQ2NCw2ICsxMzQ4OCwxMCBAQAogCQkwNzIyMUI5MjE3Q0YwQUQ0MDA4NDhFNTEgLyogbWVk
aWFzdHJlYW0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTA3RkZERTY2MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAg
Ki8sCisJCQkJMDdGRkRFNjcxODFBRUQ0MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlLmggKi8sCisJCQkJMDcwMzYzRDQxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFtU291
cmNlU3RhdGVzLmNwcCAqLywKKwkJCQkwNzAzNjNENTE4MUExNDY1MDBDMDc0QTUgLyogTWVkaWFT
dHJlYW1Tb3VyY2VTdGF0ZXMuaCAqLywKIAkJCQkwNzI5QjE0RDE3Q0ZDQ0EwMDA0RjFENjAgLyog
bWFjICovLAogCQkJCTA3MjIxQjk5MTdDRjBBRDQwMDg0OEU1MSAvKiBNZWRpYUNvbnN0cmFpbnRz
LmggKi8sCiAJCQkJMDcyMjFCOUExN0NGMEFENDAwODQ4RTUxIC8qIE1lZGlhU3RyZWFtQ2VudGVy
LmNwcCAqLywKQEAgLTEzNDk5LDYgKzEzNTI3LDE0IEBACiAJCTA3MjlCMTREMTdDRkNDQTAwMDRG
MUQ2MCAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTA3MDM2M0Q4MTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oICov
LAorCQkJCTA3MDM2M0Q5MTgxQTFDREMwMEMwNzRBNSAvKiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5t
bSAqLywKKwkJCQkwNzAzNjNEQTE4MUExQ0RDMDBDMDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFu
YWdlci5oICovLAorCQkJCTA3MDM2M0RCMTgxQTFDREMwMEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLm1tICovLAorCQkJCTA3MDM2M0RDMTgxQTFDREMwMEMwNzRBNSAvKiBBVk1lZGlh
Q2FwdHVyZVNvdXJjZS5oICovLAorCQkJCTA3MDM2M0REMTgxQTFDREMwMEMwNzRBNSAvKiBBVk1l
ZGlhQ2FwdHVyZVNvdXJjZS5tbSAqLywKKwkJCQkwNzAzNjNERTE4MUExQ0RDMDBDMDc0QTUgLyog
QVZWaWRlb0NhcHR1cmVTb3VyY2UuaCAqLywKKwkJCQkwNzAzNjNERjE4MUExQ0RDMDBDMDc0QTUg
LyogQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0gKi8sCiAJCQkJMDcyOUIxNEUxN0NGQ0NBMDAwNEYx
RDYwIC8qIE1lZGlhU3RyZWFtQ2VudGVyTWFjLmNwcCAqLywKIAkJCQkwNzI5QjE0RjE3Q0ZDQ0Ew
MDA0RjFENjAgLyogTWVkaWFTdHJlYW1DZW50ZXJNYWMuaCAqLywKIAkJCSk7CkBAIC0yMjMzOCw2
ICsyMjM3NCw3IEBACiAJCQkJODVFNzExRDkwQUM1RDUzNTAwNTMyNzBGIC8qIERPTVRleHRJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTg4NjA0QjQwRjJFNjU0QTAwMEI2NDQzIC8qIERP
TVRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNUZENjlFMDEyODQ1RDQzMDBCMkJFQjMgLyog
RE9NVGltZVN0YW1wLmggaW4gSGVhZGVycyAqLywKKwkJCQkwN0ZGREU2OTE4MUFFRDQyMDA3MkQ0
MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc2RkMy
QjBDMTIzNzBEQTAwMDZBOTkxQSAvKiBET01Ub2tlbkxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxNDUzNDk3MTZBOUJCNkEwMDBGNkZEMiAvKiBET01UcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxNDUzNDk5MTZBOUJCNkEwMDBGNkZEMiAvKiBET01UcmFuc2l0aW9uRXZl
bnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjQyNiw2ICsyMjQ2Myw3IEBACiAJCQkJ
QThFQTdFQzAwQTE5NDVEMDAwQThFRjVGIC8qIEVudGl0eVJlZmVyZW5jZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkQzMTYwOTMxMkIwMjZGNzAwQzFBMzU5IC8qIEVxdWFsUG93ZXJQYW5uZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTJFQ0Y3QUUyMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzAzNjNFNDE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRp
YUNhcHR1cmVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjQyMEE0NEVGQzcwMEY5
OTJFMCAvKiBFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzOEQzMzUxMjQ0MDU0ODAwMzIz
RDMzIC8qIEV2ZW50Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RBQjZEMjkxN0M3REU2
QzAwQzYwQjM0IC8qIE1lZGlhQ29udHJvbHNIb3N0LmggaW4gSGVhZGVycyAqLywKQEAgLTIzMzI4
LDYgKzIzMzY2LDcgQEAKIAkJCQlCMkZBM0UwNzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUZXh0
UG9zaXRpb25pbmdFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0UwOTBBQjc1QTZG
MDAwRTVBQzQgLyogSlNTVkdUaXRsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEz
RTBCMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1RyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMDcwMzYzRDcxODFBMTQ2NTAwQzA3NEE1IC8qIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0UwRDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUcmFu
c2Zvcm1MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzI3N0U0RjE3RDAxOENDMDAxNTUzNEQg
LyogSlNNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkZBM0UwRjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUUmVmRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yMzY0NSw2ICsyMzY4NCw3IEBACiAJCQkJQjIyMjc5NzEwRDAwQkYyMjAwNzFC
NzgyIC8qIFBhdHRlcm5BdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1MzU2NTBC
MDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OEE3Q0M5NkIxMjA3NkQ3MzAwMUQ0NTg4IC8qIFBlbmRpbmdTY3JpcHQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTA3MDM2M0U2MTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOEE4NDREMDUxMUQzQzE4RTAwMTQwNjVDIC8qIFBlcmZvcm1h
bmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzk2OURCMDE3RDE0MTUxMDA3RkY4NDIgLyogSlNS
VENEVE1GU2VuZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkJFMzQwMTE1MDU4Q0IyMDBDRTBG
RDggLyogUGVyZm9ybWFuY2VFbnRyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDUwMiw2ICsyNDU0
Miw3IEBACiAJCQkJNDlFOTExRDIwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzcwQTIyOTdCRTAwNThEN0FE
IC8qIFRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdGRDQyOTgxMTgzNjg0NjAwOTND
MDI5IC8qIFRyZWVEZXB0aExpbWl0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzAzNjNFMDE4MUEx
Q0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0RDY0QjVEMTM0QTVCNkIwMEU1OEZEQSAvKiBUcmVlU2NvcGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxRDcxOUQxMTgxMTA2RTAwMDE2REM1MSAvKiBJREJFdmVudERpc3BhdGNoZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3N0UxRkYwMTRBQUNCNkUwMDVCN0NCNiAvKiBUcmVlU2NvcGVBZG9w
dGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NTkwLDYgKzI0NjMxLDcgQEAKIAkJCQlBMEVFMERG
NjE0NEY4MjU1MDBGODBCMEQgLyogV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTBFRTBERjgxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdTaGFkZXJzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2RTNGQUU4RjE0NzMzRkRCMDBFNDIzMDcgLyogV2ViR0xEZXB0
aFRleHR1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3MDM2M0UyMTgxQTFDREMwMEMwNzRBNSAv
KiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUJGMEU1NTEy
QTg5Mjk4MDBEQjE3MDkgLyogV2ViR0xFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5
QzdCOUNGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTEZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2RTQ3RTY2MTEwQjc5NDRCMDBCMTg2QzggLyogV2ViR0xHZXRJbmZvLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI2MTI2LDYgKzI2MTY4LDcgQEAKIAkJCQkxNENGN0IzMzA5RjZFQ0Q3MDBF
QjM2NjUgLyogSlNDU1NSdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDZDMUVFMEMwRERC
REYwMDIwQ0ZDMyAvKiBKU0NTU1J1bGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThE
MDVGQTcwQTIzQjMwMTAwNUU3MjAzIC8qIEpTQ1NTUnVsZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMDcwMzYzRTUxODFBMUNEQzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MjI2MkYxMDMyMTA4NDAwNkU3RDVEIC8qIEpTQ1NTUnVs
ZUxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyMDExQjYwQTAwMzEzMzAwODMw
M0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzU4
MjVGMzBDMEI4OTM4MDA1M0YxQjUgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjY1MjYsNiArMjY1NjksNyBAQAogCQkJCUIyRkEzRDk4MEFCNzVB
NkYwMDBFNUFDNCAvKiBKU1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyRkEzRDlBMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0dFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyN0IyODI3MENFRjBDMDcwMEQzOUQ1NCAvKiBKU1NWR0dseXBoRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzAzNjNFMTE4MUExQ0RDMDBDMDc0QTUgLyog
QVZBdWRpb0NhcHR1cmVTb3VyY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkyNEQ5MTI5ODEzQ0E5
NkRFMDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjJGQTNEOUMwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHR3JhZGllbnRFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg1MTc0RUMyQkNDQUYxN0VBRTNGNDZGOCAvKiBKU1NWR0dyYXBo
aWNzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2NTk3LDYgKzI2NjQxLDcgQEAKIAkJ
CQlCMkZBM0UwQTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdUcmFuc2Zvcm0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjJGQTNFMEMwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVHJhbnNmb3JtTGlz
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0UwRTBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdUUmVmRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzAzNjNENjE4MUExNDY1MDBD
MDc0QTUgLyogTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjJGQTNFMTAwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHVFNwYW5FbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyRkEzRTEyMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1VuaXRUeXBlcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0UxNDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdV
c2VFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY5MjMsNiArMjY5NjgsNyBAQAogCQkJ
CUE5QzZFNEYzMEQ3NDVFNDgwMDY0NDJFOSAvKiBQbHVnaW5EYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3MjA1QUJCMTIzOTI5MjcwMEIxNzM4MCAvKiBQbHVnaW5Eb2N1bWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQURBMTQxMDBFMUFFNUQ5MDAwMjNFRTUgLyogUGx1Z2luTWFpblRo
cmVhZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNzAzNjNFMzE4MUExQ0RDMDBD
MDc0QTUgLyogQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTcx
RTIxODNCMTczNTlGQjgwMDZFNkU0RCAvKiBQbHVnSW5zUmVzb3VyY2VzRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3NkZGMTdFMzExMjM1NjczMDAxRDYxQjUgLyogUGx1Z2luVmlld05vbmUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJCMUY3MTYwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50
ZXJFdmVudHNIaXRSdWxlcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3MjI1LDYgKzI3MjcxLDcg
QEAKIAkJCQkwNzhFMDkwRTE3RDE0Q0VFMDA0MjBBQTEgLyogUlRDU3RhdHNSZXBvcnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRDAxQTI3QUQxMEM5QkZEODAwMDI2QTQyIC8qIFNwYWNlU3BsaXRT
dHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjI2Q0RFMEUxMTQwNDI0QzAwMUU1QTY4IC8q
IFNwYXRpYWxOYXZpZ2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3RkZERTY4MTgxQUVE
NDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3NTQxNUMyOTEyOUE5OTIwMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUFBMkE1QUQ1MTZBNDg2MTQwMDk3NUEyNSAvKiBTcGVlY2hT
eW50aGVzaXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyQTVBRDMxNkE0ODYwRDAwOTc1QTI1
IC8qIFNwZWVjaFN5bnRoZXNpc0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc2MzQsNiAr
Mjc2ODEsNyBAQAogCQkJCUI1MEY1QjgxMEU5NkNEOTkwMEFENzFBNiAvKiBXZWJDb3JlT2JqQ0V4
dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxODA4MTBFMTZGQ0VDREYwMEI4MEQwNyAvKiBX
ZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE1
MjU1MTYxNkZEMjM1MDAwM0Q3QURCIC8qIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzT3BlcmF0aW9u
UXVldWVEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTA3MDM2M0U3MTgxQTFDREMwMEMw
NzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRUIx
Njk1MDlGODgwQjAwMDkxRjhGRiAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzdGODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25z
ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QjA3MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJD
b3JlVmlldy5tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lZGlhU291cmNlU3RhdGVzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU291cmNlU3RhdGVzQ3VzdG9tLmNwcAkocmV2aXNpb24g
MTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVNvdXJjZVN0YXRl
c0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDEwIEBAIEpTVmFsdWUgSlNN
ZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZSgKICAgICBpZiAoIWltcGwoKS5oYXNWaWRlb1Nv
dXJjZSgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAorICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbW9kZSA9IGltcGwoKS5mYWNpbmdNb2RlKCk7CisgICAgaWYgKG1vZGUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAKICAgICByZXR1cm4ganNT
dHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbCgpLmZhY2luZ01vZGUoKSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1DZW50ZXIuaAkocmV2aXNpb24gMTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTMg
KzQyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYUNvbnN0cmFpbnRzOwog
Y2xhc3MgTWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudDsKLWNsYXNzIE1lZGlhU3RyZWFtQ3JlYXRp
b25DbGllbnQ7Ci1jbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7Ci1jbGFzcyBNZWRpYVN0cmVh
bVNvdXJjZUNhcGFiaWxpdGllczsKK2NsYXNzIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOwogY2xh
c3MgTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50OwogCi1zdHJ1Y3QgTWVkaWFT
dHJlYW1Tb3VyY2VTdGF0ZXM7Ci0KIGNsYXNzIE1lZGlhU3RyZWFtQ2VudGVyIHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbUNlbnRlcigpOwpAQCAtNjUsNyArNjEsNiBAQCBwdWJs
aWM6CiBwcm90ZWN0ZWQ6CiAgICAgTWVkaWFTdHJlYW1DZW50ZXIoKTsKIAotICAgIHZvaWQgZW5k
TG9jYWxNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqKTsKICAgICBzdGF0aWMgTWVk
aWFTdHJlYW1DZW50ZXImIHBsYXRmb3JtQ2VudGVyKCk7CiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
RGVzY3JpcHRvci5jcHAJKHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDYgKzYwLDkgQEAgdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFkZFNvdXJjZShQ
YQogICAgICAgICBpZiAobV92aWRlb1N0cmVhbVNvdXJjZXMuZmluZChzb3VyY2UpID09IG5vdEZv
dW5kKQogICAgICAgICAgICAgbV92aWRlb1N0cmVhbVNvdXJjZXMuYXBwZW5kKHNvdXJjZSk7CiAg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2U6Ok5vbmU6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTc5
LDYgKzgyLDkgQEAgdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlbW92ZVNvdXJjZQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3ZpZGVvU3RyZWFtU291cmNlcy5yZW1vdmUocG9z
KTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJjZTo6Tm9uZToKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApA
QCAtMTA1LDEzICsxMTEsMTUgQEAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpNZWRpYVN0cmVhbURl
c2NyaQogewogICAgIEFTU0VSVChtX2lkLmxlbmd0aCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGF1ZGlvU291cmNlcy5zaXplKCk7IGkrKykgewotICAgICAgICBtX2F1ZGlvU3RyZWFt
U291cmNlcy5hcHBlbmQoYXVkaW9Tb3VyY2VzW2ldKTsKLSAgICAgICAgbV9hdWRpb1RyYWNrRGVz
Y3JpcHRvcnMuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoYXVkaW9Tb3Vy
Y2VzW2ldKSk7CisgICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gc291cmNlID0gYXVk
aW9Tb3VyY2VzW2ldOworICAgICAgICBtX2F1ZGlvU3RyZWFtU291cmNlcy5hcHBlbmQoc291cmNl
KTsKKyAgICAgICAgbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnMuYXBwZW5kKE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlOjpjcmVhdGUoc291cmNlKSk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2aWRlb1NvdXJjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbV92aWRlb1N0cmVh
bVNvdXJjZXMuYXBwZW5kKHZpZGVvU291cmNlc1tpXSk7Ci0gICAgICAgIG1fdmlkZW9UcmFja0Rl
c2NyaXB0b3JzLmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHZpZGVvU291
cmNlc1tpXSkpOworICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSA9IHZp
ZGVvU291cmNlc1tpXTsKKyAgICAgICAgbV92aWRlb1N0cmVhbVNvdXJjZXMuYXBwZW5kKHNvdXJj
ZSk7CisgICAgICAgIG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzLmFwcGVuZChNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZTo6Y3JlYXRlKHNvdXJjZSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291
cmNlLmNwcAkocmV2aXNpb24gMTU4MDI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3
NCwxNyBAQCB2b2lkIE1lZGlhU3RyZWFtU291cmNlOjpzZXRSZWFkeVN0YXRlKFJlCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7Ci0gICAgZm9yIChWZWN0
b3I8T2JzZXJ2ZXIqPjo6aXRlcmF0b3IgaSA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGkgIT0gbV9v
YnNlcnZlcnMuZW5kKCk7ICsraSkKLSAgICAgICAgKCppKS0+c291cmNlU3RhdGVDaGFuZ2VkKCk7
CisgICAgZm9yIChhdXRvIG9ic2VydmVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgb2JzZXJ2ZXIg
IT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsrb2JzZXJ2ZXIpCisgICAgICAgICgqb2JzZXJ2ZXIpLT5z
b3VyY2VSZWFkeVN0YXRlQ2hhbmdlZCgpOworCisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBMaXZl
KSB7CisgICAgICAgIHN0YXJ0UHJvZHVjaW5nRGF0YSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIC8vIFRoZXJlIGFyZSBubyBtb3JlIGNvbnN1bWVycyBvZiB0aGlzIHNvdXJj
ZSdzIGRhdGEsIHNodXQgaXQgZG93biBhcyBhcHByb3ByaWF0ZS4KKyAgICBpZiAobV9yZWFkeVN0
YXRlID09IEVuZGVkKQorICAgICAgICBzdG9wUHJvZHVjaW5nRGF0YSgpOwogfQogCiB2b2lkIE1l
ZGlhU3RyZWFtU291cmNlOjphZGRPYnNlcnZlcihNZWRpYVN0cmVhbVNvdXJjZTo6T2JzZXJ2ZXIq
IG9ic2VydmVyKQpAQCAtODgsMTggKzk3LDkgQEAgdm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6cmVt
b3ZlT2JzZXJ2ZXIoTQogICAgIHNpemVfdCBwb3MgPSBtX29ic2VydmVycy5maW5kKG9ic2VydmVy
KTsKICAgICBpZiAocG9zICE9IG5vdEZvdW5kKQogICAgICAgICBtX29ic2VydmVycy5yZW1vdmUo
cG9zKTsKLX0KIAotTWVkaWFDb25zdHJhaW50cyogTWVkaWFTdHJlYW1Tb3VyY2U6OmNvbnN0cmFp
bnRzKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2hpbGUgdGhpcyByZXR1cm5zIAotICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI0MjgKLSAgICByZXR1
cm4gbV9jb25zdHJhaW50cy5nZXQoKTsKLX0KLSAgICAKLXZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6
OnNldENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMp
Ci17Ci0gICAgbV9jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzOworICAgIGlmICghbV9vYnNlcnZl
cnMuc2l6ZSgpKQorICAgICAgICBzdG9wKCk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6
OnNldE11dGVkKGJvb2wgbXV0ZWQpCkBAIC0xMTIsNDcgKzExMiw0OCBAQCB2b2lkIE1lZGlhU3Ry
ZWFtU291cmNlOjpzZXRNdXRlZChib29sIG11CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBFbmRl
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChWZWN0b3I8T2JzZXJ2ZXIqPjo6aXRlcmF0
b3IgaSA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IGkgIT0gbV9vYnNlcnZlcnMuZW5kKCk7ICsraSkK
LSAgICAgICAgKCppKS0+c291cmNlTXV0ZWRDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvIG9ic2Vy
dmVyID0gbV9vYnNlcnZlcnMuYmVnaW4oKTsgb2JzZXJ2ZXIgIT0gbV9vYnNlcnZlcnMuZW5kKCk7
ICsrb2JzZXJ2ZXIpCisgICAgICAgICgqb2JzZXJ2ZXIpLT5zb3VyY2VNdXRlZENoYW5nZWQoKTsK
IH0KIAogdm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCiB7
CisgICAgaWYgKCFlbmFibGVkKSB7CisgICAgICAgIC8vIERvbid0IGRpc2FibGUgdGhlIHNvdXJj
ZSB1bmxlc3MgYWxsIG9ic2VydmVycyBhcmUgZGlzYWJsZWQuCisgICAgICAgIGZvciAoYXV0byBv
YnNlcnZlciA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7IG9ic2VydmVyICE9IG1fb2JzZXJ2ZXJzLmVu
ZCgpOyArK29ic2VydmVyKSB7CisgICAgICAgICAgICBpZiAoKCpvYnNlcnZlciktPm9ic2VydmVy
SXNFbmFibGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CiAgICAgaWYgKG1fZW5hYmxlZCA9PSBlbmFibGVkKQogICAgICAgICByZXR1cm47Ci0gICAgCisK
ICAgICBtX2VuYWJsZWQgPSBlbmFibGVkOwogCiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBFbmRl
ZCkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGZvciAoVmVjdG9yPE9ic2VydmVyKj46Oml0
ZXJhdG9yIGkgPSBtX29ic2VydmVycy5iZWdpbigpOyBpICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyAr
K2kpCi0gICAgICAgICgqaSktPnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7CisKKyAgICBpZiAoIWVu
YWJsZWQpCisgICAgICAgIHN0b3BQcm9kdWNpbmdEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBz
dGFydFByb2R1Y2luZ0RhdGEoKTsKKworICAgIGZvciAoYXV0byBvYnNlcnZlciA9IG1fb2JzZXJ2
ZXJzLmJlZ2luKCk7IG9ic2VydmVyICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK29ic2VydmVyKQor
ICAgICAgICAoKm9ic2VydmVyKS0+c291cmNlRW5hYmxlZENoYW5nZWQoKTsKIH0KIAogYm9vbCBN
ZWRpYVN0cmVhbVNvdXJjZTo6cmVhZG9ubHkoKSBjb25zdAogewotICAgIC8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL21lZGlhY2FwdHVyZS1zdHJlYW1zLyN3aWRsLU1lZGlhU3RyZWFtVHJhY2stX3Jl
YWRvbmx5Ci0gICAgLy8gSWYgdGhlIHRyYWNrIChhdWRpbyBvciB2aWRlbykgaXMgYmFja2VkIGJ5
IGEgcmVhZC1vbmx5IHNvdXJjZSBzdWNoIGFzIGEgZmlsZSwgb3IgdGhlIHRyYWNrIHNvdXJjZSAK
LSAgICAvLyBpcyBhIGxvY2FsIG1pY3JvcGhvbmUgb3IgY2FtZXJhLCBidXQgaXMgc2hhcmVkIHNv
IHRoYXQgdGhpcyB0cmFjayBjYW5ub3QgbW9kaWZ5IGFueSBvZiB0aGUgc291cmNlJ3MKLSAgICAv
LyBzZXR0aW5ncywgdGhlIHJlYWRvbmx5IGF0dHJpYnV0ZSBtdXN0IHJldHVybiB0aGUgdmFsdWUg
dHJ1ZS4gT3RoZXJ3aXNlLCBpdCBtdXN0IHJldHVybiB0aGUgdmFsdWUgZmFsc2UuCiAgICAgcmV0
dXJuIG1fcmVhZG9ubHk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6OnN0b3AoKQogewot
ICAgIGZvciAoVmVjdG9yPE9ic2VydmVyKj46Oml0ZXJhdG9yIGkgPSBtX29ic2VydmVycy5iZWdp
bigpOyBpICE9IG1fb2JzZXJ2ZXJzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKCEoKmkpLT5z
dG9wcGVkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVGhlcmUgYXJl
IG5vIG1vcmUgY29uc3VtZXJzIG9mIHRoaXMgc291cmNlJ3MgZGF0YSwgc2h1dCBpdCBkb3duIGFz
IGFwcHJvcHJpYXRlLgorICAgIC8vIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIHRyYWNrLnN0b3Ao
KSBtZXRob2QsIHdoaWNoIHNob3VsZCAiUGVybWFuZW50bHkgc3RvcCB0aGUgZ2VuZXJhdGlvbiBv
ZiBkYXRhCisgICAgLy8gZm9yIHRyYWNrJ3Mgc291cmNlIiwgc28gZ28gc3RyYWlnaHQgdG8gZW5k
ZWQuIFRoaXMgd2lsbCBub3RpZnkgYW55IG90aGVyIHRyYWNrcyB1c2luZyB0aGlzIHNvdXJjZQor
ICAgIC8vIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS4KICAgICBzZXRSZWFkeVN0YXRl
KEVuZGVkKTsKLQotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL21lZGlhY2FwdHVyZS1zdHJl
YW1zLyN3aWRsLU1lZGlhU3RyZWFtVHJhY2stc3RvcC12b2lkCi0gICAgLy8gSWYgdGhlIGRhdGEg
aXMgYmVpbmcgZ2VuZXJhdGVkIGZyb20gYSBsaXZlIHNvdXJjZSAoZS5nLiwgYSBtaWNyb3Bob25l
IG9yIGNhbWVyYSksIHRoZW4gdGhlIHVzZXIgCi0gICAgLy8gYWdlbnQgc2hvdWxkIHJlbW92ZSBh
bnkgYWN0aXZlICJvbi1haXIiIGluZGljYXRvciBmb3IgdGhhdCBzb3VyY2UuIElmIHRoZSBkYXRh
IGlzIGJlaW5nIAotICAgIC8vIGdlbmVyYXRlZCBmcm9tIGEgcHJlcmVjb3JkZWQgc291cmNlIChl
LmcuIGEgdmlkZW8gZmlsZSksIGFueSByZW1haW5pbmcgY29udGVudCBpbiB0aGUgZmlsZSBpcyBp
Z25vcmVkLgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmgJ
KHJldmlzaW9uIDE1ODAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDU5ICs0Nyw2NSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdWRpb0J1czsKIGNsYXNzIE1lZGlhQ29uc3RyYWlu
dHM7CiBjbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7Ci1zdHJ1Y3QgTWVkaWFTdHJlYW1Tb3Vy
Y2VTdGF0ZXM7CitjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczsKIAogY2xhc3MgTWVkaWFT
dHJlYW1Tb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbVNvdXJjZT4gewogcHVi
bGljOgogICAgIGNsYXNzIE9ic2VydmVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwg
fk9ic2VydmVyKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VTdGF0ZUNoYW5nZWQo
KSA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBTb3VyY2Ugc3RhdGUgY2hhbmdlcy4KKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNvdXJjZVJlYWR5U3RhdGVDaGFuZ2VkKCkgPSAwOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgc291cmNlRW5hYmxlZENoYW5nZWQoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBzdG9w
cGVkKCkgPSAwOwotICAgIH07CiAKLSAgICBlbnVtIFR5cGUgeyBBdWRpbywgVmlkZW8gfTsKLSAg
ICBlbnVtIFJlYWR5U3RhdGUgeyBOZXcgPSAwLCBMaXZlID0gMSwgRW5kZWQgPSAyIH07CisgICAg
ICAgIC8vIE9ic2VydmVyIHN0YXRlIHF1ZXJpZXMuCisgICAgICAgIHZpcnR1YWwgYm9vbCBvYnNl
cnZlcklzRW5hYmxlZCgpID0gMDsKKyAgICB9OwogCiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1T
b3VyY2UoKSB7IH0KIAogICAgIGJvb2wgaXNBdWRpb1N0cmVhbVNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSA9PSBBdWRpbzsgfQogICAgIHZpcnR1YWwgYm9vbCB1c2VJREZvclRyYWNrSUQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCByZXNldCgpOwotCiAgICAgY29u
c3QgU3RyaW5nJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIGVudW0gVHlwZSB7
IE5vbmUsIEF1ZGlvLCBWaWRlbyB9OwogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQorCisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25h
bWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9u
YW1lID0gbmFtZTsgfQogCiAgICAgdmlydHVhbCBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VDYXBh
YmlsaXRpZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IE1l
ZGlhU3RyZWFtU291cmNlU3RhdGVzJiBzdGF0ZXMoKSA9IDA7CiAgICAgCi0gICAgdm9pZCBzZXRS
ZWFkeVN0YXRlKFJlYWR5U3RhdGUpOwotICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQotCi0gICAgdm9pZCBhZGRPYnNlcnZlcihPYnNlcnZl
ciopOwotICAgIHZvaWQgcmVtb3ZlT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKKyAgICBlbnVtIFJlYWR5
U3RhdGUgeyBOZXcgPSAwLCBMaXZlID0gMSwgRW5kZWQgPSAyIH07CisgICAgdmlydHVhbCBSZWFk
eVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShSZWFkeVN0YXRlKTsKIAotICAgIHZvaWQgc2V0Q29u
c3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7Ci0gICAgTWVkaWFDb25zdHJh
aW50cyogY29uc3RyYWludHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJv
b2wpOwogCi0gICAgYm9vbCBlbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9Ci0g
ICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBtdXRlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fbXV0ZWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCk7CiAK
LSAgICBib29sIG11dGVkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRlZDsgfQotICAgIHZvaWQgc2V0
TXV0ZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIHJlYWRvbmx5KCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHNldFJlYWRvbmx5KGJvb2wgcmVhZG9ubHkpIHsgbV9yZWFkb25seSA9IHJlYWRv
bmx5OyB9CiAKLSAgICBib29sIHJlYWRvbmx5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSZWFkb25s
eShib29sIHJlYWRvbmx5KSB7IG1fcmVhZG9ubHkgPSByZWFkb25seTsgfQorICAgIHZpcnR1YWwg
Ym9vbCByZW1vdGUoKSBjb25zdCB7IHJldHVybiBtX3JlbW90ZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRSZW1vdGUoYm9vbCByZW1vdGUpIHsgbV9yZW1vdGUgPSByZW1vdGU7IH0KIAotICAgIGJv
b2wgcmVtb3RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdGU7IH0KLSAgICB2b2lkIHNldFJlbW90
ZShib29sIHJlbW90ZSkgeyBtX3JlbW90ZSA9IHJlbW90ZTsgfQorICAgIHZvaWQgYWRkT2JzZXJ2
ZXIoT2JzZXJ2ZXIqKTsKKyAgICB2b2lkIHJlbW92ZU9ic2VydmVyKE9ic2VydmVyKik7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIHsgfQogCiAgICAgdm9pZCBzdG9wKCk7CiAKKyAgICB2
b2lkIHJlc2V0KCk7CisKIHByb3RlY3RlZDoKICAgICBNZWRpYVN0cmVhbVNvdXJjZShjb25zdCBT
dHJpbmcmIGlkLCBUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCkBAIC0xMDksOCArMTE1LDYg
QEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0
YXRlOwogICAgIFZlY3RvcjxPYnNlcnZlcio+IG1fb2JzZXJ2ZXJzOwotICAgIFJlZlB0cjxNZWRp
YUNvbnN0cmFpbnRzPiBtX2NvbnN0cmFpbnRzOwotICAgIE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
IG1fc3RhdGVzOwogCiAgICAgYm9vbCBtX2VuYWJsZWQ7CiAgICAgYm9vbCBtX211dGVkOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2VD
YXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNTgwMjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJj
ZUNhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw0MCArMjgsMTMgQEAKIAogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCiAKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZVN0YXRl
cy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0cnVjdCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyB7Ci1wdWJsaWM6Ci0gICAgZW51
bSBTb3VyY2VUeXBlIHsgTm9uZSwgQ2FtZXJhLCBNaWNyb3Bob25lIH07Ci0gICAgZW51bSBWaWRl
b0ZhY2luZ01vZGUgeyBVc2VyLCBFbnZpcm9ubWVudCwgTGVmdCwgUmlnaHQgfTsKLQotICAgIE1l
ZGlhU3RyZWFtU291cmNlU3RhdGVzKCkKLSAgICAgICAgOiBzb3VyY2VUeXBlKE5vbmUpCi0gICAg
ICAgICwgZmFjaW5nTW9kZShVc2VyKQotICAgICAgICAsIHdpZHRoKDApCi0gICAgICAgICwgaGVp
Z2h0KDApCi0gICAgICAgICwgZnJhbWVSYXRlKDApCi0gICAgICAgICwgYXNwZWN0UmF0aW8oMCkK
LSAgICAgICAgLCB2b2x1bWUoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgU291cmNlVHlwZSBzb3Vy
Y2VUeXBlOwotICAgIEF0b21pY1N0cmluZyBzb3VyY2VJZDsKLSAgICBWaWRlb0ZhY2luZ01vZGUg
ZmFjaW5nTW9kZTsKLSAgICB1bnNpZ25lZCBsb25nIHdpZHRoOwotICAgIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0OwotICAgIGZsb2F0IGZyYW1lUmF0ZTsKLSAgICBmbG9hdCBhc3BlY3RSYXRpbzsKLSAg
ICB1bnNpZ25lZCBsb25nIHZvbHVtZTsKLSAgICAKLSAgICBib29sIGhhc1ZpZGVvU291cmNlOwot
fTsKLQogY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXR5UmFuZ2UgewogcHVibGljOgog
ICAgIApAQCAtMTE4LDYgKzkxLDcgQEAgcHVibGljOgogICAgIH5NZWRpYVN0cmVhbVNvdXJjZUNh
cGFiaWxpdGllcygpIHsgfQogCiAgICAgY29uc3QgVmVjdG9yPE1lZGlhU3RyZWFtU291cmNlU3Rh
dGVzOjpTb3VyY2VUeXBlPiYgc291cmNlVHlwZXMoKSB7IHJldHVybiBtX3NvdXJjZVR5cGU7IH0K
KyAgICB2b2lkIHNldFNvdXJjZVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlNvdXJjZVR5
cGUgc291cmNlVHlwZSkgeyBtX3NvdXJjZVR5cGUucmVzaXplVG9GaXQoMSk7IGFkZFNvdXJjZVR5
cGUoc291cmNlVHlwZSk7IH0KICAgICB2b2lkIGFkZFNvdXJjZVR5cGUoTWVkaWFTdHJlYW1Tb3Vy
Y2VTdGF0ZXM6OlNvdXJjZVR5cGUgc291cmNlVHlwZSkKICAgICB7CiAgICAgICAgIGlmIChzb3Vy
Y2VUeXBlID09IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpDYW1lcmEpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1Tb3VyY2VTdGF0ZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5o
IgorCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6ZmFjaW5n
TW9kZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlIG1vZGUpCit7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdXNlckZhY2luZygidXNlciIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGVudmlyb25tZW50RmFjaW5nKCJlbnZpcm9ubWVudCIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IGxlZnRGYWNpbmcoImxlZnQiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiByaWdodEZhY2luZygicmlnaHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKKyAgICAKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIE1lZGlhU3RyZWFtU291cmNl
U3RhdGVzOjpVc2VyOgorICAgICAgICByZXR1cm4gdXNlckZhY2luZzsKKyAgICBjYXNlIE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzOjpFbnZpcm9ubWVudDoKKyAgICAgICAgcmV0dXJuIGVudmlyb25t
ZW50RmFjaW5nOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkxlZnQ6CisgICAg
ICAgIHJldHVybiBsZWZ0RmFjaW5nOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6
OlJpZ2h0OgorICAgICAgICByZXR1cm4gcmlnaHRGYWNpbmc7CisgICAgY2FzZSBNZWRpYVN0cmVh
bVNvdXJjZVN0YXRlczo6VW5rbm93bjoKKyAgICAgICAgcmV0dXJuIGVtcHR5QXRvbTsKKyAgICB9
CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGVtcHR5QXRvbTsK
K30KKworY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6c291cmNl
VHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6U291cmNlVHlwZSBzb3VyY2VUeXBlKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG5vbmUoIm5vbmUiLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiBjYW1lcmEoImNhbWVyYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1p
Y3JvcGhvbmUoIm1pY3JvcGhvbmUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKKyAgICAKKyAgICBzd2l0Y2ggKHNvdXJjZVR5cGUpIHsKKyAgICBjYXNlIE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzOjpOb25lOgorICAgICAgICByZXR1cm4gbm9uZTsKKyAgICBjYXNlIE1lZGlh
U3RyZWFtU291cmNlU3RhdGVzOjpDYW1lcmE6CisgICAgICAgIHJldHVybiBjYW1lcmE7CisgICAg
Y2FzZSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6TWljcm9waG9uZToKKyAgICAgICAgcmV0dXJu
IG1pY3JvcGhvbmU7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBlbXB0eUF0b207Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlU3RhdGVzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbVNvdXJjZVN0YXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXNfaAorI2RlZmluZSBNZWRpYVN0
cmVhbVNvdXJjZVN0YXRlc19oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
TWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXMgeworcHVibGljOgorICAgIGVudW0gU291cmNlVHlwZSB7
IE5vbmUsIENhbWVyYSwgTWljcm9waG9uZSB9OworICAgIGVudW0gVmlkZW9GYWNpbmdNb2RlIHsg
VW5rbm93biwgVXNlciwgRW52aXJvbm1lbnQsIExlZnQsIFJpZ2h0IH07CisKKyAgICBNZWRpYVN0
cmVhbVNvdXJjZVN0YXRlcygpCisgICAgICAgIDogbV9zb3VyY2VUeXBlKE5vbmUpCisgICAgICAg
ICwgbV9mYWNpbmdNb2RlKFVua25vd24pCisgICAgICAgICwgbV93aWR0aCgwKQorICAgICAgICAs
IG1faGVpZ2h0KDApCisgICAgICAgICwgbV9mcmFtZVJhdGUoMCkKKyAgICAgICAgLCBtX2FzcGVj
dFJhdGlvKDApCisgICAgICAgICwgbV92b2x1bWUoMCkKKyAgICB7CisgICAgfQorCisgICAgc3Rh
dGljIGNvbnN0IEF0b21pY1N0cmluZyYgc291cmNlVHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRl
czo6U291cmNlVHlwZSk7CisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZmFjaW5nTW9k
ZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlKTsKKworICAgIFNvdXJj
ZVR5cGUgc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVHlwZTsgfQorICAgIHZv
aWQgc2V0U291cmNlVHlwZShTb3VyY2VUeXBlIHR5cGUpIHsgbV9zb3VyY2VUeXBlID0gdHlwZTsg
fQorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzb3VyY2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlSWQ7IH0KKyAgICB2b2lkIHNldFNvdXJjZUlkKGNvbnN0IEF0b21pY1N0cmluZyYgc291
cmNlSWQpIHsgbV9zb3VyY2VJZCA9IHNvdXJjZUlkOyB9CisKKyAgICBWaWRlb0ZhY2luZ01vZGUg
ZmFjaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmFjaW5nTW9kZTsgfQorICAgIHZvaWQgc2V0
RmFjaW5nTW9kZShWaWRlb0ZhY2luZ01vZGUgZmFjaW5nTW9kZSkgeyBtX2ZhY2luZ01vZGUgPSBm
YWNpbmdNb2RlOyB9CisgICAgCisgICAgdW5zaWduZWQgbG9uZyB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fd2lkdGg7IH0KKyAgICB2b2lkIHNldFdpZHRoKHVuc2lnbmVkIGxvbmcgd2lkdGgpIHsg
bV93aWR0aCA9IHdpZHRoOyB9CisgICAgCisgICAgdW5zaWduZWQgbG9uZyBoZWlnaHQoKSBjb25z
dCB7IHJldHVybiBtX2hlaWdodDsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KHVuc2lnbmVkIGxvbmcg
aGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9CisgICAgCisgICAgZmxvYXQgZnJhbWVSYXRl
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJhdGU7IH0KKyAgICB2b2lkIHNldEZyYW1lUmF0ZShm
bG9hdCBmcmFtZVJhdGUpIHsgbV9mcmFtZVJhdGUgPSBmcmFtZVJhdGU7IH0KKyAgICAKKyAgICBm
bG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fYXNwZWN0UmF0aW87IH0KKyAgICB2
b2lkIHNldEFzcGVjdFJhdGlvKGZsb2F0IGFzcGVjdFJhdGlvKSB7IG1fYXNwZWN0UmF0aW8gPSBh
c3BlY3RSYXRpbzsgfQorICAgIAorICAgIHVuc2lnbmVkIGxvbmcgdm9sdW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV92b2x1bWU7IH0KKyAgICB2b2lkIHNldFZvbHVtZSh1bnNpZ25lZCBsb25nIHZvbHVt
ZSkgeyBtX3ZvbHVtZSA9IHZvbHVtZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBTb3VyY2VUeXBl
IG1fc291cmNlVHlwZTsKKyAgICBBdG9taWNTdHJpbmcgbV9zb3VyY2VJZDsKKyAgICBWaWRlb0Zh
Y2luZ01vZGUgbV9mYWNpbmdNb2RlOworICAgIHVuc2lnbmVkIGxvbmcgbV93aWR0aDsKKyAgICB1
bnNpZ25lZCBsb25nIG1faGVpZ2h0OworICAgIGZsb2F0IG1fZnJhbWVSYXRlOworICAgIGZsb2F0
IG1fYXNwZWN0UmF0aW87CisgICAgdW5zaWduZWQgbG9uZyBtX3ZvbHVtZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE1lZGlhU3RyZWFtU291cmNlU3RhdGVzX2gK
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCShyZXZpc2lvbiAx
NTgxMTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKIAogI2lu
Y2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCiAKKyNpbmNsdWRlICJNZWRpYVNvdXJj
ZVN0YXRlcy5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJVVUlELmgiCiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAKQEAgLTM2LDQyICszOSw0NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlOjpjcmVhdGUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gc291cmNlKQogewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoc291cmNlLmdl
dCgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShz
b3VyY2UpKTsKIH0KIAotTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiBvdGhlcikKK01lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShjb25zdCBNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZSYgb3RoZXIpCisgICAgOiBtX2NsaWVudChudWxscHRyKQogewotICAgIC8vIFdoZW4gdGhl
IGNsb25lKCkgbWV0aG9kIGlzIGludm9rZWQsIHRoZSB1c2VyIGFnZW50IG11c3QgcnVuIHRoZSBm
b2xsb3dpbmcgc3RlcHM6Ci0gICAgLy8gMS4gTGV0IHRyYWNrQ2xvbmUgYmUgYSBuZXdseSBjb25z
dHJ1Y3RlZCBNZWRpYVN0cmVhbVRyYWNrIG9iamVjdC4KLSAgICAvLyAyLiBJbml0aWFsaXplIHRy
YWNrQ2xvbmUncyBpZCBhdHRyaWJ1dGUgdG8gYSBuZXdseSBnZW5lcmF0ZWQgdmFsdWUuCisgICAg
bV9pZ25vcmVNdXRhdGlvbnMgPSB0cnVlOwogICAgIG1faWQgPSBjcmVhdGVDYW5vbmljYWxVVUlE
U3RyaW5nKCk7Ci0KLSAgICAvLyAzLiBMZXQgdHJhY2tDbG9uZSBpbmhlcml0IHRoaXMgdHJhY2sn
cyB1bmRlcmx5aW5nIHNvdXJjZSwga2luZCwgbGFiZWwgYW5kIGVuYWJsZWQgYXR0cmlidXRlcy4K
LSAgICBtX3NvdXJjZSA9IG90aGVyLT5zb3VyY2UoKTsKLSAgICBtX3JlYWR5U3RhdGUgPSBtX3Nv
dXJjZSA/IG1fc291cmNlLT5yZWFkeVN0YXRlKCkgOiBNZWRpYVN0cmVhbVNvdXJjZTo6TmV3Owot
ICAgIG1fZW5hYmxlZCA9IG90aGVyLT5lbmFibGVkKCk7Ci0KLSAgICAvLyBOb3RlOiB0aGUgImNs
b25lIiBzdGVwcyBkb24ndCBzYXkgYW55dGhpbmcgYWJvdXQgJ211dGVkJywgYnV0IDQuMy4xIHNh
eXM6Ci0gICAgLy8gRm9yIGEgbmV3bHkgY3JlYXRlZCBNZWRpYVN0cmVhbVRyYWNrIG9iamVjdCwg
dGhlIGZvbGxvd2luZyBhcHBsaWVzLiBUaGUgdHJhY2sgaXMgYWx3YXlzIGVuYWJsZWQKLSAgICAv
LyB1bmxlc3Mgc3RhdGVkIG90aGVyd2lzZSAoZm9yIGV4YW1scGUgd2hlbiBjbG9uZWQpIGFuZCB0
aGUgbXV0ZWQgc3RhdGUgcmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZQotICAgIC8vIHNvdXJjZSBh
dCB0aGUgdGltZSB0aGUgdHJhY2sgaXMgY3JlYXRlZC4KLSAgICBtX211dGVkID0gb3RoZXItPm11
dGVkKCk7Ci0gICAgbV9zdG9wcGVkID0gb3RoZXItPnN0b3BwZWQoKTsKKyAgICBzZXRTb3VyY2Uo
b3RoZXIuc291cmNlKCkpOworICAgIG1fcmVhZHlTdGF0ZSA9IG90aGVyLnJlYWR5U3RhdGUoKTsK
KyAgICBtX211dGVkID0gb3RoZXIubXV0ZWQoKTsKKyAgICBtX2VuYWJsZWQgPSBvdGhlci5lbmFi
bGVkKCk7CisgICAgbV9zdG9wcGVkID0gb3RoZXIuc3RvcHBlZCgpOworICAgIG1faWdub3JlTXV0
YXRpb25zID0gZmFsc2U7CiB9CiAKLU1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZShNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKQotICAgIDogbV9zb3VyY2Uo
MCkKK01lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBzb3VyY2UpCisgICAgOiBtX3NvdXJjZShudWxscHRy
KQorICAgICwgbV9jbGllbnQobnVsbHB0cikKICAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVN0cmVh
bVNvdXJjZTo6TmV3KQogICAgICwgbV9tdXRlZChmYWxzZSkKICAgICAsIG1fZW5hYmxlZCh0cnVl
KQogICAgICwgbV9zdG9wcGVkKGZhbHNlKQotICAgICwgbV9jbGllbnQoMCkKIHsKKyAgICBtX2ln
bm9yZU11dGF0aW9ucyA9IHRydWU7CiAgICAgc2V0U291cmNlKHNvdXJjZSk7CisgICAgbV9pZ25v
cmVNdXRhdGlvbnMgPSBmYWxzZTsKK30KKworTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6On5NZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZSgpCit7CisgICAgaWYgKG1fc291cmNlKQorICAgICAgICBtX3Nv
dXJjZS0+cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1UcmFja1By
aXZhdGU6OnNldFNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKQordm9pZCBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6c2V0U291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+
IHNvdXJjZSkKIHsKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIG1fc291cmNlLT5yZW1vdmVP
YnNlcnZlcih0aGlzKTsKKwogICAgIG1fc291cmNlID0gc291cmNlOwogCiAgICAgaWYgKCFtX3Nv
dXJjZSkKQEAgLTc5LDIyICs4Niw4IEBAIHZvaWQgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnNl
dFNvdXJjZSgKIAogICAgIHNldE11dGVkKG1fc291cmNlLT5tdXRlZCgpKTsKICAgICBzZXRSZWFk
eVN0YXRlKG1fc291cmNlLT5yZWFkeVN0YXRlKCkpOwotfQotCi1ib29sIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlOjpzaG91bGRGaXJlVHJhY2tSZWFkeVN0YXRlQ2hhbmdlZChNZWRpYVN0cmVhbVNv
dXJjZTo6UmVhZHlTdGF0ZSBvbGRTdGF0ZSkKLXsKLSAgICByZXR1cm4gKG1fcmVhZHlTdGF0ZSA9
PSBNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSAmJiBvbGRTdGF0ZSA9PSBNZWRpYVN0cmVhbVNvdXJj
ZTo6TmV3KSB8fCAobV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpFbmRlZCAmJiBv
bGRTdGF0ZSAhPSBNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpOwotfQotCi1jb25zdCBBdG9taWNT
dHJpbmcmIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpraW5kKCkgY29uc3QKLXsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBhdWRpbygiYXVkaW8iLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiB2aWRlbygidmlkZW8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKLQotICAgIGlmIChtX3R5cGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvKQotICAg
ICAgICByZXR1cm4gYXVkaW87Ci0KLSAgICByZXR1cm4gdmlkZW87CisgICAgaWYgKG1fc291cmNl
KQorICAgICAgICBtX3NvdXJjZS0+YWRkT2JzZXJ2ZXIodGhpcyk7CiB9CiAKIGNvbnN0IFN0cmlu
ZyYgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmlkKCkgY29uc3QKQEAgLTE0MSw4ICsxMzQsMTAg
QEAgdm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6c2V0TXV0ZWQoYgogCiAgICAgbV9tdXRl
ZCA9IG11dGVkOwogCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+dHJhY2tN
dXRlZENoYW5nZWQoKTsKKyAgICBpZiAoIW1fY2xpZW50IHx8IG1faWdub3JlTXV0YXRpb25zKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC0+dHJhY2tNdXRlZENoYW5nZWQoKTsKIH0K
IAogYm9vbCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6cmVhZG9ubHkoKSBjb25zdApAQCAtMTcw
LDYgKzE2NSwyNiBAQCB2b2lkIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpzZXRFbmFibGVkCiAg
ICAgLy8gLi4uIGFmdGVyIGEgTWVkaWFTdHJlYW1UcmFjayBpcyBkaXNhc3NvY2lhdGVkIGZyb20g
aXRzIHRyYWNrLCBpdHMgZW5hYmxlZCBhdHRyaWJ1dGUgc3RpbGwKICAgICAvLyBjaGFuZ2VzIHZh
bHVlIHdoZW4gc2V0OyBpdCBqdXN0IGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGF0IG5ldyB2
YWx1ZS4KICAgICBtX2VuYWJsZWQgPSBlbmFibGVkOworCisgICAgaWYgKG1fc291cmNlKQorICAg
ICAgICBtX3NvdXJjZS0+c2V0RW5hYmxlZChlbmFibGVkKTsKKworICAgIGlmICghbV9jbGllbnQg
fHwgbV9pZ25vcmVNdXRhdGlvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LT50
cmFja0VuYWJsZWRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6
OnN0b3AoU3RvcEJlaGF2aW9yIHN0b3BTb3VyY2UpCit7CisgICAgaWYgKG1fc3RvcHBlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKHN0b3BTb3VyY2UgPT0gU3RvcFRyYWNrQW5kU3RvcFNv
dXJjZSAmJiBtX3NvdXJjZSkKKyAgICAgICAgbV9zb3VyY2UtPnN0b3AoKTsKKworICAgIHNldFJl
YWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkVuZGVkKTsKKyAgICBtX3N0b3BwZWQgPSB0cnVl
OwogfQogCiBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSBNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZTo6cmVhZHlTdGF0ZSgpIGNvbnN0CkBAIC0xODgsMTMgKzIwMyw4MyBAQCB2b2lkIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlOjpzZXRSZWFkeVN0CiAgICAgTWVkaWFTdHJlYW1Tb3VyY2U6OlJl
YWR5U3RhdGUgb2xkU3RhdGUgPSBtX3JlYWR5U3RhdGU7CiAgICAgbV9yZWFkeVN0YXRlID0gc3Rh
dGU7CiAKLSAgICBpZiAobV9jbGllbnQgJiYgc2hvdWxkRmlyZVRyYWNrUmVhZHlTdGF0ZUNoYW5n
ZWQob2xkU3RhdGUpKQorICAgIGlmICghbV9jbGllbnQgfHwgbV9pZ25vcmVNdXRhdGlvbnMpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICgobV9yZWFkeVN0YXRlID09IE1lZGlhU3RyZWFtU291
cmNlOjpMaXZlICYmIG9sZFN0YXRlID09IE1lZGlhU3RyZWFtU291cmNlOjpOZXcpIHx8IG1fcmVh
ZHlTdGF0ZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6RW5kZWQpCiAgICAgICAgIG1fY2xpZW50LT50
cmFja1JlYWR5U3RhdGVDaGFuZ2VkKCk7CiB9CiAKIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNsb25lKCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKHRoaXMpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKCp0aGlzKSk7Cit9CisKKyAgICAKK1Jl
ZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y29uc3RyYWlu
dHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnN0cmFpbnRzOworfQorCitjb25zdCBNZWRp
YVN0cmVhbVNvdXJjZVN0YXRlcyYgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnN0YXRlcygpIGNv
bnN0Cit7CisgICAgaWYgKCFtX3NvdXJjZSkgeworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IE1lZGlhU3RyZWFtU291cmNlU3RhdGVzLCBub1N0YXRlLCAoKSk7CisgICAgICAgIHJl
dHVybiBub1N0YXRlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbV9zb3VyY2UtPnN0YXRlcygp
OworfQorCitNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6
dHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIE1lZGlh
U3RyZWFtU291cmNlOjpOb25lOworCisgICAgcmV0dXJuIG1fc291cmNlLT50eXBlKCk7Cit9CisK
K1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcz4gTWVkaWFTdHJlYW1UcmFja1By
aXZhdGU6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9zb3VyY2UtPmNhcGFiaWxpdGllcygpOworfQor
Cit2b2lkIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjphcHBseUNvbnN0cmFpbnRzKFBhc3NSZWZQ
dHI8TWVkaWFDb25zdHJhaW50cz4pCit7CisgICAgLy8gRklYTUU6IGFwcGx5IHRoZSBuZXcgY29u
c3RyYWludHMgdG8gdGhlIHRyYWNrCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMjQyOAorfQorCit2b2lkIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpz
b3VyY2VSZWFkeVN0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKHN0b3BwZWQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIHNldFJlYWR5U3RhdGUobV9zb3VyY2UtPnJlYWR5U3RhdGUoKSk7
Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OnNvdXJjZU11dGVkQ2hhbmdlZCgp
Cit7CisgICAgaWYgKHN0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHNldE11
dGVkKG1fc291cmNlLT5tdXRlZCgpKTsKK30KKwordm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZTo6c291cmNlRW5hYmxlZENoYW5nZWQoKQoreworICAgIGlmIChzdG9wcGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBzZXRFbmFibGVkKG1fc291cmNlLT5lbmFibGVkKCkpOworfQor
Citib29sIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpvYnNlcnZlcklzRW5hYmxlZCgpCit7Cisg
ICAgcmV0dXJuIGVuYWJsZWQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxOCArMzUsMjQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBNZWRpYVNvdXJjZVN0YXRlczsKK2NsYXNzIE1lZGlhU3RyZWFtU291cmNlQ2FwYWJpbGl0
aWVzOworCiBjbGFzcyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZUNsaWVudCB7CiBwdWJsaWM6Cisg
ICAgdmlydHVhbCB+TWVkaWFTdHJlYW1UcmFja1ByaXZhdGVDbGllbnQoKSB7IH0KKwogICAgIHZp
cnR1YWwgdm9pZCB0cmFja1JlYWR5U3RhdGVDaGFuZ2VkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCB0cmFja011dGVkQ2hhbmdlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhY2tFbmFibGVk
Q2hhbmdlZCgpID0gMDsKIH07CiAKLWNsYXNzIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIDogcHVi
bGljIFJlZkNvdW50ZWQ8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IHsKK2NsYXNzIE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU+LCBwdWJsaWMgTWVkaWFTdHJlYW1Tb3VyY2U6Ok9ic2VydmVyIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4gY3JlYXRlKFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW1Tb3VyY2U+KTsKLSAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZSgpIHsgfQogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBraW5kKCkgY29uc3Q7CisgICAg
dmlydHVhbCB+TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoKTsKKwogICAgIGNvbnN0IFN0cmluZyYg
aWQoKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIGxhYmVsKCkgY29uc3Q7CiAKQEAgLTY3LDI5
ICs3Myw0NyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiBj
bG9uZSgpOwogCiAgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2Uq
KTsKKyAgICB2b2lkIHNldFNvdXJjZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPik7CiAK
LSAgICB2b2lkIHN0b3AoKSB7IG1fc3RvcHBlZCA9IHRydWU7IH0KKyAgICBlbnVtIFN0b3BCZWhh
dmlvciB7IFN0b3BUcmFja0FuZFN0b3BTb3VyY2UsIFN0b3BUcmFja09ubHkgfTsKKyAgICB2b2lk
IHN0b3AoU3RvcEJlaGF2aW9yKTsKICAgICBib29sIHN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBt
X3N0b3BwZWQ7IH0KKyAgICAKKyAgICB2b2lkIHNldENsaWVudChNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CiAKLSAgICBNZWRpYVN0
cmVhbVNvdXJjZTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgTWVk
aWFTdHJlYW1Tb3VyY2U6OlR5cGUgdHlwZSgpIGNvbnN0OworCisgICAgY29uc3QgTWVkaWFTdHJl
YW1Tb3VyY2VTdGF0ZXMmIHN0YXRlcygpIGNvbnN0OworICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNv
dXJjZUNhcGFiaWxpdGllcz4gY2FwYWJpbGl0aWVzKCkgY29uc3Q7CisKKyAgICBSZWZQdHI8TWVk
aWFDb25zdHJhaW50cz4gY29uc3RyYWludHMoKSBjb25zdDsKKyAgICB2b2lkIGFwcGx5Q29uc3Ry
YWludHMoUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7CisKKyAgICB2b2lkIGNvbmZpZ3Vy
ZVRyYWNrUmVuZGVyaW5nKCk7CiAKLSAgICB2b2lkIHNldENsaWVudChNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CiBwcm90ZWN0ZWQ6
Ci0gICAgZXhwbGljaXQgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUqKTsKLSAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZShNZWRpYVN0cmVhbVNvdXJjZSop
OworICAgIGV4cGxpY2l0IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKGNvbnN0IE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlJik7CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUoUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbVNvdXJjZT4pOwogCiBwcml2YXRlOgotICAgIGJvb2wgc2hvdWxkRmlyZVRyYWNr
UmVhZHlTdGF0ZUNoYW5nZWQoTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGUpOworICAgIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aWVudDsgfQorCisgICAgLy8gTWVkaWFTdHJlYW1Tb3VyY2VPYnNlcnZlcgorICAgIHZpcnR1YWwg
dm9pZCBzb3VyY2VSZWFkeVN0YXRlQ2hhbmdlZCgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1
YWwgdm9pZCBzb3VyY2VNdXRlZENoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFs
IHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQoKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFs
IGJvb2wgb2JzZXJ2ZXJJc0VuYWJsZWQoKSBPVkVSUklERSBGSU5BTDsKKyAgICAKICAgICBSZWZQ
dHI8TWVkaWFTdHJlYW1Tb3VyY2U+IG1fc291cmNlOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gbV9jb25z
dHJhaW50czsKICAgICBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7
CiAgICAgbXV0YWJsZSBTdHJpbmcgbV9pZDsKIAogICAgIGJvb2wgbV9tdXRlZDsKICAgICBib29s
IG1fZW5hYmxlZDsKICAgICBib29sIG1fc3RvcHBlZDsKLSAgICBNZWRpYVN0cmVhbVNvdXJjZTo6
VHlwZSBtX3R5cGU7Ci0gICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVDbGllbnQqIG1fY2xpZW50
OworICAgIGJvb2wgbV9pZ25vcmVNdXRhdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZBdWRp
b0NhcHR1cmVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQVZBdWRpb0NhcHR1cmVTb3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQVZB
dWRpb0NhcHR1cmVTb3VyY2VfaAorI2RlZmluZSBBVkF1ZGlvQ2FwdHVyZVNvdXJjZV9oCisKKyNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW5jbHVkZSAi
QVZNZWRpYUNhcHR1cmVTb3VyY2UuaCIKKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01G
b3JtYXREZXNjcmlwdGlvbiAqQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIAorY2xhc3MgQVZBdWRpb0NhcHR1cmVTb3VyY2UgOiBwdWJsaWMgQVZNZWRp
YUNhcHR1cmVTb3VyY2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8QVZNZWRpYUNhcHR1
cmVTb3VyY2U+IGNyZWF0ZShBVkNhcHR1cmVEZXZpY2UqLCBjb25zdCBBdG9taWNTdHJpbmcmLCBQ
YXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KTsKKyAgICAKK3ByaXZhdGU6CisgICAgQVZBdWRp
b0NhcHR1cmVTb3VyY2UoQVZDYXB0dXJlRGV2aWNlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwgUGFz
c1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7CisgICAgdmlydHVhbCB+QVZBdWRpb0NhcHR1cmVT
b3VyY2UoKTsKKyAgICAKKyAgICB2aXJ0dWFsIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNhcGFi
aWxpdGllcz4gY2FwYWJpbGl0aWVzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbihBVkNhcHR1
cmVPdXRwdXQqLCBDTVNhbXBsZUJ1ZmZlclJlZiwgQVZDYXB0dXJlQ29ubmVjdGlvbiopIE9WRVJS
SURFOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXR1cENhcHR1cmVTZXNzaW9uKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlcygpIE9WRVJSSURFOworICAgICAgICAK
KyAgICBSZXRhaW5QdHI8QVZDYXB0dXJlQ29ubmVjdGlvbj4gbV9hdWRpb0Nvbm5lY3Rpb247Cisg
ICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fYXVkaW9Gb3JtYXREZXNjcmlw
dGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBBVlZpZGVvQ2FwdHVyZVNvdXJjZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZBdWRpb0NhcHR1cmVTb3Vy
Y2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0FWQXVkaW9DYXB0dXJlU291cmNlLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQXVkaW9DYXB0dXJlU291cmNlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbXBv
cnQgIkFWQXVkaW9DYXB0dXJlU291cmNlLmgiCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBv
cnQgIk1lZGlhQ29uc3RyYWludHMuaCIKKyNpbXBvcnQgIk1lZGlhU3RyZWFtU291cmNlU3RhdGVz
LmgiCisjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIK
KyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPG9iamMvcnVu
dGltZS5oPgorCit0eXBlZGVmIEFWQ2FwdHVyZUNvbm5lY3Rpb24gQVZDYXB0dXJlQ29ubmVjdGlv
blR5cGU7Cit0eXBlZGVmIEFWQ2FwdHVyZURldmljZSBBVkNhcHR1cmVEZXZpY2VUeXBlOwordHlw
ZWRlZiBBVkNhcHR1cmVEZXZpY2VJbnB1dCBBVkNhcHR1cmVEZXZpY2VJbnB1dFR5cGU7Cit0eXBl
ZGVmIEFWQ2FwdHVyZU91dHB1dCBBVkNhcHR1cmVPdXRwdXRUeXBlOwordHlwZWRlZiBBVkNhcHR1
cmVBdWRpb0RhdGFPdXRwdXQgQVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0VHlwZTsKKworU09GVF9M
SU5LX0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRpb24pCisKK1NPRlRfTElOS19DTEFTUyhB
VkZvdW5kYXRpb24sIEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dCkKK1NPRlRfTElOS19DTEFTUyhB
VkZvdW5kYXRpb24sIEFWQ2FwdHVyZUNvbm5lY3Rpb24pCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3Vu
ZGF0aW9uLCBBVkNhcHR1cmVEZXZpY2UpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBB
VkNhcHR1cmVEZXZpY2VJbnB1dCkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2Fw
dHVyZU91dHB1dCkKKworI2RlZmluZSBBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXQgZ2V0QVZDYXB0
dXJlQXVkaW9EYXRhT3V0cHV0Q2xhc3MoKQorI2RlZmluZSBBVkNhcHR1cmVDb25uZWN0aW9uIGdl
dEFWQ2FwdHVyZUNvbm5lY3Rpb25DbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVyZURldmljZSBnZXRB
VkNhcHR1cmVEZXZpY2VDbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVyZURldmljZUlucHV0IGdldEFW
Q2FwdHVyZURldmljZUlucHV0Q2xhc3MoKQorI2RlZmluZSBBVkNhcHR1cmVPdXRwdXQgZ2V0QVZD
YXB0dXJlT3V0cHV0Q2xhc3MoKQorCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFW
TWVkaWFUeXBlQXVkaW8sIE5TU3RyaW5nICopCisKKyNkZWZpbmUgQVZNZWRpYVR5cGVBdWRpbyBn
ZXRBVk1lZGlhVHlwZUF1ZGlvKCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8QVZN
ZWRpYUNhcHR1cmVTb3VyY2U+IEFWQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUoQVZDYXB0dXJl
RGV2aWNlVHlwZSogZGV2aWNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPE1l
ZGlhQ29uc3RyYWludHM+IGNvbnN0cmFpbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBB
VkF1ZGlvQ2FwdHVyZVNvdXJjZShkZXZpY2UsIGlkLCBjb25zdHJhaW50KSk7Cit9CisgICAgCitB
VkF1ZGlvQ2FwdHVyZVNvdXJjZTo6QVZBdWRpb0NhcHR1cmVTb3VyY2UoQVZDYXB0dXJlRGV2aWNl
VHlwZSogZGV2aWNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPE1lZGlhQ29u
c3RyYWludHM+IGNvbnN0cmFpbnRzKQorICAgIDogQVZNZWRpYUNhcHR1cmVTb3VyY2UoZGV2aWNl
LCBpZCwgTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvLCBjb25zdHJhaW50cykKK3sKKyAgICBjdXJy
ZW50U3RhdGVzKCktPnNldFNvdXJjZUlkKGlkKTsKKyAgICBjdXJyZW50U3RhdGVzKCktPnNldFNv
dXJjZVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6Ok1pY3JvcGhvbmUpOworfQorICAgIAor
QVZBdWRpb0NhcHR1cmVTb3VyY2U6On5BVkF1ZGlvQ2FwdHVyZVNvdXJjZSgpCit7Cit9CisKK1Jl
ZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcz4gQVZBdWRpb0NhcHR1cmVTb3VyY2U6
OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6dXBkYXRlU3RhdGVzKCkKK3sK
KyAgICAvLyBGSVhNRTogdXNlIFtBVkNhcHR1cmVBdWRpb1ByZXZpZXdPdXRwdXQgdm9sdW1lXSBm
b3Igdm9sdW1lCit9CisKK3ZvaWQgQVZBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQ2FwdHVyZVNl
c3Npb24oKQoreworICAgIFJldGFpblB0cjxBVkNhcHR1cmVEZXZpY2VJbnB1dFR5cGU+IGF1ZGlv
SW4gPSBhZG9wdE5TKFtbQVZDYXB0dXJlRGV2aWNlSW5wdXQgYWxsb2NdIGluaXRXaXRoRGV2aWNl
OmRldmljZSgpIGVycm9yOm5pbF0pOworICAgIEFTU0VSVChbc2Vzc2lvbigpIGNhbkFkZElucHV0
OmF1ZGlvSW4uZ2V0KCldKTsKKyAgICBpZiAoW3Nlc3Npb24oKSBjYW5BZGRJbnB1dDphdWRpb0lu
LmdldCgpXSkKKyAgICAgICAgW3Nlc3Npb24oKSBhZGRJbnB1dDphdWRpb0luLmdldCgpXTsKKyAg
ICAKKyAgICBSZXRhaW5QdHI8QVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0VHlwZT4gYXVkaW9PdXRw
dXQgPSBhZG9wdE5TKFtbQVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0IGFsbG9jXSBpbml0XSk7Cisg
ICAgc2V0QXVkaW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZShhdWRpb091dHB1dC5nZXQoKSk7CisgICAg
QVNTRVJUKFtzZXNzaW9uKCkgY2FuQWRkT3V0cHV0OmF1ZGlvT3V0cHV0LmdldCgpXSk7CisgICAg
aWYgKFtzZXNzaW9uKCkgY2FuQWRkT3V0cHV0OmF1ZGlvT3V0cHV0LmdldCgpXSkKKyAgICAgICAg
W3Nlc3Npb24oKSBhZGRPdXRwdXQ6YXVkaW9PdXRwdXQuZ2V0KCldOworICAgIG1fYXVkaW9Db25u
ZWN0aW9uID0gYWRvcHROUyhbYXVkaW9PdXRwdXQuZ2V0KCkgY29ubmVjdGlvbldpdGhNZWRpYVR5
cGU6QVZNZWRpYVR5cGVBdWRpb10pOworfQorCit2b2lkIEFWQXVkaW9DYXB0dXJlU291cmNlOjpj
YXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5lY3Rpb24oQVZDYXB0dXJl
T3V0cHV0VHlwZSosIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlciwgQVZDYXB0dXJlQ29u
bmVjdGlvblR5cGUqKQoreworICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3Jp
cHRpb24gPSBDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHNhbXBsZUJ1ZmZlcik7
CisgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZS
ZXRhaW4oZm9ybWF0RGVzY3JpcHRpb24pOworICAgIG1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbiA9
IGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJl
RGV2aWNlTWFuYWdlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFWQ2FwdHVyZURldmljZU1hbmFnZXJf
aAorI2RlZmluZSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyX2gKKworI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRl
ci5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJl
YW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitPQkpDX0NMQVNTIEFWQ2FwdHVy
ZURldmljZTsKK09CSkNfQ0xBU1MgQVZDYXB0dXJlU2Vzc2lvbjsKK09CSkNfQ0xBU1MgTlNTdHJp
bmc7CitPQkpDX0NMQVNTIFdlYkNvcmVBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyT2JzZXJ2ZXI7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FwdHVyZURldmljZTsKKworY2xhc3MgQVZD
YXB0dXJlRGV2aWNlTWFuYWdlciB7CitwdWJsaWM6CisgICAgc3RhdGljIEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAg
ICBWZWN0b3I8UmVmUHRyPFRyYWNrU291cmNlSW5mbz4+IGdldFNvdXJjZXNJbmZvKGNvbnN0IFN0
cmluZyYpOworICAgIGJvb2wgdmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJl
YW1Tb3VyY2U6OlR5cGUsIE1lZGlhQ29uc3RyYWludHMqLCBTdHJpbmcmKTsKKyAgICBSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2U+IGJlc3RTb3VyY2VGb3JUeXBlQW5kQ29uc3RyYWludHMoTWVkaWFT
dHJlYW1Tb3VyY2U6OlR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pOworCisgICAg
ZW51bSBWYWxpZENvbnN0cmFpbnRzIHsgV2lkdGggPSAwLCBIZWlnaHQsIEZyYW1lUmF0ZSwgRmFj
aW5nTW9kZSwgR2FpbiB9OworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYg
dmFsaWRDb25zdHJhaW50TmFtZXMoKTsKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPEF0b21pY1N0
cmluZz4mIHZhbGlkRmFjaW5nTW9kZXMoKTsKKworICAgIHN0YXRpYyBib29sIGRldmljZVN1cHBv
cnRzRmFjaW5nTW9kZShBVkNhcHR1cmVEZXZpY2UqLCBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6
VmlkZW9GYWNpbmdNb2RlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkQ29uc3RyYWludChNZWRp
YVN0cmVhbVNvdXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIFN0cmluZyBi
ZXN0U2Vzc2lvblByZXNldEZvclZpZGVvU2l6ZShBVkNhcHR1cmVTZXNzaW9uKiwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKKworICAgIHZvaWQgcmVnaXN0ZXJGb3JEZXZpY2VOb3RpZmljYXRpb25z
KCk7CisgICAgdm9pZCBkZXZpY2VDb25uZWN0ZWQoKTsKKyAgICB2b2lkIGRldmljZURpc2Nvbm5l
Y3RlZChBVkNhcHR1cmVEZXZpY2UqKTsKKworcHJvdGVjdGVkOgorICAgIEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXIoKTsKKyAgICB+QVZDYXB0dXJlRGV2aWNlTWFuYWdlcigpOworCisgICAgQ2FwdHVy
ZURldmljZSogYmVzdERldmljZUZvckZhY2luZ01vZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6
OlZpZGVvRmFjaW5nTW9kZSk7CisgICAgYm9vbCBzZXNzaW9uU3VwcG9ydHNDb25zdHJhaW50KEFW
Q2FwdHVyZVNlc3Npb24qLCBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworICAgIFJldGFpblB0cjxXZWJDb3JlQVZDYXB0
dXJlRGV2aWNlTWFuYWdlck9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRp
ZiAvLyBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0JKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2ltcG9ydCAiQVZDYXB0dXJl
RGV2aWNlTWFuYWdlci5oIgorCisjaW1wb3J0ICJBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgorI2lt
cG9ydCAiQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCIKKyNpbXBvcnQgIkFWVmlkZW9DYXB0dXJlU291
cmNlLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgi
CisjaW1wb3J0ICJNZWRpYVN0cmVhbVNvdXJjZS5oIgorI2ltcG9ydCAiTWVkaWFTdHJlYW1Tb3Vy
Y2VTdGF0ZXMuaCIKKyNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJTb2Z0TGlu
a2luZy5oIgorI2ltcG9ydCAiVVVJRC5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWRm91bmRh
dGlvbi5oPgorI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvTWFpblRocmVh
ZC5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK3R5cGVkZWYgQVZDYXB0dXJl
RGV2aWNlIEFWQ2FwdHVyZURldmljZVR5cGU7Cit0eXBlZGVmIEFWQ2FwdHVyZVNlc3Npb24gQVZD
YXB0dXJlU2Vzc2lvblR5cGU7CisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3Vu
ZGF0aW9uKQorCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVEZXZpY2Up
CitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uKQorCisjZGVm
aW5lIEFWQ2FwdHVyZURldmljZSBnZXRBVkNhcHR1cmVEZXZpY2VDbGFzcygpCisjZGVmaW5lIEFW
Q2FwdHVyZVNlc3Npb24gZ2V0QVZDYXB0dXJlU2Vzc2lvbkNsYXNzKCkKKworU09GVF9MSU5LX1BP
SU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZUF1ZGlvLCBOU1N0cmluZyAqKQorU09GVF9M
SU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZU11eGVkLCBOU1N0cmluZyAqKQor
U09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZVZpZGVvLCBOU1N0cmlu
ZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uUHJl
c2V0MTI4MHg3MjAsIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24s
IEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BP
SU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MzUyeDI4OCwgTlNTdHJp
bmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlU2Vzc2lvblBy
ZXNldExvdywgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZD
YXB0dXJlRGV2aWNlV2FzQ29ubmVjdGVkTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQorU09GVF9M
SU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVEZXZpY2VXYXNEaXNjb25uZWN0ZWRO
b3RpZmljYXRpb24sIE5TU3RyaW5nICopCisKKyNkZWZpbmUgQVZNZWRpYVR5cGVBdWRpbyBnZXRB
Vk1lZGlhVHlwZUF1ZGlvKCkKKyNkZWZpbmUgQVZNZWRpYVR5cGVNdXhlZCBnZXRBVk1lZGlhVHlw
ZU11eGVkKCkKKyNkZWZpbmUgQVZNZWRpYVR5cGVWaWRlbyBnZXRBVk1lZGlhVHlwZVZpZGVvKCkK
KyNkZWZpbmUgQVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwIGdldEFWQ2FwdHVyZVNlc3Np
b25QcmVzZXQxMjgweDcyMCgpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgw
IGdldEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwKCkKKyNkZWZpbmUgQVZDYXB0dXJlU2Vz
c2lvblByZXNldDM1MngyODggZ2V0QVZDYXB0dXJlU2Vzc2lvblByZXNldDM1MngyODgoKQorI2Rl
ZmluZSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93IGdldEFWQ2FwdHVyZVNlc3Npb25QcmVzZXRM
b3coKQorI2RlZmluZSBBVkNhcHR1cmVEZXZpY2VXYXNDb25uZWN0ZWROb3RpZmljYXRpb24gZ2V0
QVZDYXB0dXJlRGV2aWNlV2FzQ29ubmVjdGVkTm90aWZpY2F0aW9uKCkKKyNkZWZpbmUgQVZDYXB0
dXJlRGV2aWNlV2FzRGlzY29ubmVjdGVkTm90aWZpY2F0aW9uIGdldEFWQ2FwdHVyZURldmljZVdh
c0Rpc2Nvbm5lY3RlZE5vdGlmaWNhdGlvbigpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitAaW50ZXJmYWNlIFdlYkNvcmVBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyT2JzZXJ2ZXIgOiBOU09i
amVjdAoreworICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXIqIG1fY2FsbGJhY2s7Cit9CisKKy0o
aWQpaW5pdFdpdGhDYWxsYmFjazooQVZDYXB0dXJlRGV2aWNlTWFuYWdlciopY2FsbGJhY2s7Cist
KHZvaWQpZGlzY29ubmVjdDsKKy0odm9pZClkZXZpY2VEaXNjb25uZWN0ZWQ6KE5TTm90aWZpY2F0
aW9uICopbm90aWZpY2F0aW9uOworLSh2b2lkKWRldmljZUNvbm5lY3RlZDooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb247CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IHZvaWQgcmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0KCk7CisKK2NsYXNzIENhcHR1cmVEZXZpY2Ug
eworcHVibGljOgorICAgIENhcHR1cmVEZXZpY2UoKQorICAgICAgICA6bV9lbmFibGVkKGZhbHNl
KQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcgbV9jYXB0dXJlRGV2aWNlSUQ7CisKKyAgICBT
dHJpbmcgbV9hdWRpb1NvdXJjZUlkOworICAgIFJlZlB0cjxBVk1lZGlhQ2FwdHVyZVNvdXJjZT4g
bV9hdWRpb1NvdXJjZTsKKworICAgIFN0cmluZyBtX3ZpZGVvU291cmNlSWQ7CisgICAgUmVmUHRy
PEFWTWVkaWFDYXB0dXJlU291cmNlPiBtX3ZpZGVvU291cmNlOworCisgICAgYm9vbCBtX2VuYWJs
ZWQ7Cit9OworCitzdGF0aWMgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBjYXB0dXJlRGV2aWNlTGlz
dCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8Q2FwdHVyZURldmljZT4sIGNh
cHR1cmVEZXZpY2VMaXN0LCAoKSk7CisgICAgc3RhdGljIGJvb2wgZmlyc3RUaW1lID0gdHJ1ZTsK
KworICAgIGlmIChmaXJzdFRpbWUgJiYgIWNhcHR1cmVEZXZpY2VMaXN0LnNpemUoKSkgeworICAg
ICAgICBmaXJzdFRpbWUgPSBmYWxzZTsKKyAgICAgICAgcmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0
KCk7CisgICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLnJlZ2lzdGVyRm9y
RGV2aWNlTm90aWZpY2F0aW9ucygpOworICAgIH0KKworICAgIHJldHVybiBjYXB0dXJlRGV2aWNl
TGlzdDsKK30KKworc3RhdGljIGJvb2wgY2FwdHVyZURldmljZUZyb21EZXZpY2VJRChjb25zdCBT
dHJpbmcmIGNhcHR1cmVEZXZpY2VJRCwgQ2FwdHVyZURldmljZSYgc291cmNlKQoreworICAgIFZl
Y3RvcjxDYXB0dXJlRGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVEZXZpY2VMaXN0KCk7CisgICAg
CisgICAgc2l6ZV90IGNvdW50ID0gZGV2aWNlcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChkZXZpY2VzW2ldLm1fY2FwdHVyZURl
dmljZUlEID09IGNhcHR1cmVEZXZpY2VJRCkgeworICAgICAgICAgICAgc291cmNlID0gZGV2aWNl
c1tpXTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgcmVmcmVzaENhcHR1cmVEZXZpY2VM
aXN0KCkKK3sKKyAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGRldmljZXMgPSBjYXB0dXJlRGV2
aWNlTGlzdCgpOworICAgIAorICAgIGZvciAoQVZDYXB0dXJlRGV2aWNlVHlwZSAqZGV2aWNlIGlu
IFtBVkNhcHR1cmVEZXZpY2UgZGV2aWNlc10pIHsKKyAgICAgICAgQ2FwdHVyZURldmljZSBzb3Vy
Y2U7CisgICAgICAgIAorICAgICAgICBpZiAoIWNhcHR1cmVEZXZpY2VGcm9tRGV2aWNlSUQoZGV2
aWNlLnVuaXF1ZUlELCBzb3VyY2UpKSB7CisgICAgICAgICAgICAvLyBBbiBBVkNhcHR1cmVEZXZp
Y2UgaGFzIGEgdW5pcXVlIElELCBidXQgd2UgY2FuJ3QgdXNlIGl0IGZvciB0aGUgc291cmNlIElE
IGJlY2F1c2U6CisgICAgICAgICAgICAvLyAxLiBpZiBpdCBwcm92aWRlcyBib3RoIGF1ZGlvIGFu
ZCB2aWRlbyB3ZSB3aWxsIG5lZWQgdG8gY3JlYXRlIHR3byBzb3VyY2VzIGZvciBpdAorICAgICAg
ICAgICAgLy8gMi4gdGhlIHVuaXF1ZSBJRCBwZXJzaXN0cyBvbiBvbmUgc3lzdGVtIGFjcm9zcyBk
ZXZpY2UgY29ubmVjdGlvbnMsIGRpc2Nvbm5lY3Rpb25zLAorICAgICAgICAgICAgLy8gICAgYXBw
bGljYXRpb24gcmVzdGFydHMsIGFuZCByZWJvb3RzLCBzbyBpdCBjb3VsZCBiZSB1c2VkIHRvIGZp
Z2VycHJpbnQgYSB1c2VyLgorICAgICAgICAgICAgc291cmNlLm1fY2FwdHVyZURldmljZUlEID0g
ZGV2aWNlLnVuaXF1ZUlEOworICAgICAgICAgICAgc291cmNlLm1fZW5hYmxlZCA9IHRydWU7Cisg
ICAgICAgICAgICBpZiAoW2RldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRpYVR5cGVBdWRpb10gfHwg
W2RldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRpYVR5cGVNdXhlZF0pCisgICAgICAgICAgICAgICAg
c291cmNlLm1fYXVkaW9Tb3VyY2VJZCA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKwor
ICAgICAgICAgICAgaWYgKFtkZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlVmlkZW9dIHx8
IFtkZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlTXV4ZWRdKQorICAgICAgICAgICAgICAg
IHNvdXJjZS5tX3ZpZGVvU291cmNlSWQgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CisK
KyAgICAgICAgICAgIGRldmljZXMuYXBwZW5kKHNvdXJjZSk7CisgICAgICAgIH0gZWxzZSBpZiAo
IXNvdXJjZS5tX2VuYWJsZWQpIHsKKyAgICAgICAgICAgIHNvdXJjZS5tX2VuYWJsZWQgPSB0cnVl
OworICAgICAgICAgICAgaWYgKHNvdXJjZS5tX2F1ZGlvU291cmNlKQorICAgICAgICAgICAgICAg
IHNvdXJjZS5tX2F1ZGlvU291cmNlLT5zZXRFbmFibGVkKHRydWUpOworICAgICAgICAgICAgaWYg
KHNvdXJjZS5tX3ZpZGVvU291cmNlKQorICAgICAgICAgICAgICAgIHNvdXJjZS5tX3ZpZGVvU291
cmNlLT5zZXRFbmFibGVkKHRydWUpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIEFWQ2Fw
dHVyZURldmljZU1hbmFnZXI6OmlzQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4gQVZGb3VuZGF0
aW9uTGlicmFyeSgpOworfQorCitBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyJiBBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjpzaGFyZWQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQVZDYXB0dXJl
RGV2aWNlTWFuYWdlciwgbWFuYWdlciwgKCkpOworICAgIHJldHVybiBtYW5hZ2VyOworfQorCitB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkKKyAgICA6IG1f
b2JqY09ic2VydmVyKGFkb3B0TlMoW1tXZWJDb3JlQVZDYXB0dXJlRGV2aWNlTWFuYWdlck9ic2Vy
dmVyIGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNdKSkKK3sKK30KKworQVZDYXB0dXJlRGV2
aWNlTWFuYWdlcjo6fkFWQ2FwdHVyZURldmljZU1hbmFnZXIoKQoreworICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIu
Z2V0KCldOworICAgIFttX29iamNPYnNlcnZlciBkaXNjb25uZWN0XTsKK30KKworU3RyaW5nIEFW
Q2FwdHVyZURldmljZU1hbmFnZXI6OmJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlkZW9TaXplKEFWQ2Fw
dHVyZVNlc3Npb25UeXBlICpjYXB0dXJlU2Vzc2lvbiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQor
eworICAgIEFTU0VSVCh3aWR0aCA+PSAwKTsKKyAgICBBU1NFUlQoaGVpZ2h0ID49IDApOworICAg
IAorICAgIGlmICh3aWR0aCA+IDEyODAgfHwgaGVpZ2h0ID4gNzIwKQorICAgICAgICAvLyBGSVhN
RTogdGhpcyByZXN0cmljdGlvbiBjb3VsZCBiZSBhZGp1c3RlZCB3aXRoIHRoZSB2aWRlb01heFNj
YWxlQW5kQ3JvcEZhY3RvciBwcm9wZXJ0eS4KKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
CisgICAgCisgICAgaWYgKHdpZHRoID4gNjQwIHx8IGhlaWdodCA+IDQ4MCkgeworICAgICAgICBp
ZiAoIVtjYXB0dXJlU2Vzc2lvbiBjYW5TZXRTZXNzaW9uUHJlc2V0OkFWQ2FwdHVyZVNlc3Npb25Q
cmVzZXQxMjgweDcyMF0pCisgICAgICAgICAgICBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1
cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwOworICAgIH0KKyAgICAKKyAgICBpZiAo
d2lkdGggPiAzNTIgfHwgaGVpZ2h0ID4gMjg4KSB7CisgICAgICAgIGlmICghW2NhcHR1cmVTZXNz
aW9uIGNhblNldFNlc3Npb25QcmVzZXQ6QVZDYXB0dXJlU2Vzc2lvblByZXNldDY0MHg0ODBdKQor
ICAgICAgICAgICAgZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIEFWQ2FwdHVyZVNlc3Np
b25QcmVzZXQ2NDB4NDgwOworICAgIH0KKyAgICAKKyAgICBpZiAoW2NhcHR1cmVTZXNzaW9uIGNh
blNldFNlc3Npb25QcmVzZXQ6QVZDYXB0dXJlU2Vzc2lvblByZXNldDM1MngyODhdKQorICAgICAg
ICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldDM1MngyODg7CisgICAgCisgICAgaWYgKFtj
YXB0dXJlU2Vzc2lvbiBjYW5TZXRTZXNzaW9uUHJlc2V0OkFWQ2FwdHVyZVNlc3Npb25QcmVzZXRM
b3ddKQorICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldExvdzsKKyAgICAKKyAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKworYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpkZXZpY2VTdXBwb3J0c0ZhY2luZ01vZGUoQVZDYXB0dXJlRGV2aWNlVHlwZSAqZGV2aWNlLCBN
ZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlIGZhY2luZ01vZGUpCit7Cisg
ICAgaWYgKCFbZGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZVZpZGVvXSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAoZmFjaW5nTW9kZSkgeworICAgIGNhc2Ug
TWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlVzZXI6CisgICAgICAgIGlmIChbZGV2aWNlIHBvc2l0
aW9uXSA9PSBBVkNhcHR1cmVEZXZpY2VQb3NpdGlvbkZyb250KQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6
OkVudmlyb25tZW50OgorICAgICAgICBpZiAoW2RldmljZSBwb3NpdGlvbl0gPT0gQVZDYXB0dXJl
RGV2aWNlUG9zaXRpb25CYWNrKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkxlZnQ6CisgICAgY2FzZSBN
ZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6UmlnaHQ6CisgICAgY2FzZSBNZWRpYVN0cmVhbVNvdXJj
ZVN0YXRlczo6VW5rbm93bjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0NhcHR1cmVEZXZpY2UqIEFWQ2FwdHVyZURldmljZU1hbmFn
ZXI6OmJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpWaWRl
b0ZhY2luZ01vZGUgZmFjaW5nTW9kZSkKK3sKKyAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGRl
dmljZXMgPSBjYXB0dXJlRGV2aWNlTGlzdCgpOworICAgIAorICAgIHNpemVfdCBjb3VudCA9IGRl
dmljZXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewor
ICAgICAgICBBVkNhcHR1cmVEZXZpY2VUeXBlICpkZXZpY2UgPSBbQVZDYXB0dXJlRGV2aWNlIGRl
dmljZVdpdGhVbmlxdWVJRDpkZXZpY2VzW2ldLm1fY2FwdHVyZURldmljZUlEXTsKKyAgICAgICAg
QVNTRVJUKGRldmljZSk7CisgICAgICAgIAorICAgICAgICBpZiAoZGV2aWNlICYmIGRldmljZVN1
cHBvcnRzRmFjaW5nTW9kZShkZXZpY2UsIGZhY2luZ01vZGUpKQorICAgICAgICAgICAgcmV0dXJu
ICZkZXZpY2VzW2ldOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXNzaW9uU3VwcG9ydHNDb25zdHJhaW50KEFWQ2FwdHVyZVNl
c3Npb25UeXBlICpzZXNzaW9uLCBNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgc2l6ZV90IGNvbnN0cmFp
bnQgPSB2YWxpZENvbnN0cmFpbnROYW1lcygpLmZpbmQobmFtZSk7CisgICAgaWYgKGNvbnN0cmFp
bnQgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2gg
KGNvbnN0cmFpbnQpIHsKKyAgICBjYXNlIFdpZHRoOgorICAgICAgICBpZiAodHlwZSA9PSBNZWRp
YVN0cmVhbVNvdXJjZTo6QXVkaW8pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgcmV0dXJuICFiZXN0U2Vzc2lvblByZXNldEZvclZpZGVvU2l6ZShzZXNzaW9uLCB2YWx1ZS50
b0ludCgpLCAwKS5pc0VtcHR5KCk7CisgICAgY2FzZSBIZWlnaHQ6CisgICAgICAgIGlmICh0eXBl
ID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICByZXR1cm4gIWJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlkZW9TaXplKHNlc3Npb24s
IDAsIHZhbHVlLnRvSW50KCkpLmlzRW1wdHkoKTsKKyAgICBjYXNlIEZyYW1lUmF0ZTogeworICAg
ICAgICBpZiAodHlwZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8pCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBJdCB3b3VsZCBtYWtlIHNlbnNlIHRv
IHVzZSBbQVZDYXB0dXJlQ29ubmVjdGlvbiB2aWRlb01pbkZyYW1lRHVyYXRpb25dIGFuZAorICAg
ICAgICAvLyBbQVZDYXB0dXJlQ29ubmVjdGlvbiB2aWRlb01heEZyYW1lRHVyYXRpb25dLCBidXQg
dGhleSBvbmx5IHdvcmsgd2l0aCBhICJsaXZlIiBBVkNhcHR1cmVDb25uZWN0aW9uLgorICAgICAg
ICBmbG9hdCByYXRlID0gdmFsdWUudG9GbG9hdCgpOworICAgICAgICByZXR1cm4gcmF0ZSA+IDAg
JiYgcmF0ZSA8PSA2MDsKKyAgICB9CisgICAgY2FzZSBHYWluOiB7CisgICAgICAgIGlmICh0eXBl
ICE9IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIGZsb2F0IGxldmVsID0gdmFsdWUudG9GbG9hdCgpOworICAgICAg
ICByZXR1cm4gbGV2ZWwgPiAwICYmIGxldmVsIDw9IDE7CisgICAgfQorICAgIGNhc2UgRmFjaW5n
TW9kZTogeworICAgICAgICBpZiAodHlwZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8pCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc2l6ZV90IGZhY2luZ01vZGUgPSAg
dmFsaWRGYWNpbmdNb2RlcygpLmZpbmQodmFsdWUpOworICAgICAgICBpZiAoZmFjaW5nTW9kZSAh
PSBub3RGb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGJl
c3REZXZpY2VGb3JGYWNpbmdNb2RlKHN0YXRpY19jYXN0PE1lZGlhU3RyZWFtU291cmNlU3RhdGVz
OjpWaWRlb0ZhY2luZ01vZGU+KGZhY2luZ01vZGUpKTsKKyAgICB9CisgICAgfQorICAgIAorICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjppc1ZhbGlk
Q29uc3RyYWludChNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisgICAgc2l6ZV90IGNvbnN0cmFpbnQgPSB2YWxpZENvbnN0cmFpbnROYW1lcygpLmZp
bmQobmFtZSk7CisgICAgaWYgKGNvbnN0cmFpbnQgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChjb25zdHJhaW50ID09IEdhaW4pCisgICAgICAgIHJldHVybiB0
eXBlID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbzsKKworICAgIHJldHVybiB0cnVlOworfQor
CitWZWN0b3I8UmVmUHRyPFRyYWNrU291cmNlSW5mbz4+IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6
OmdldFNvdXJjZXNJbmZvKGNvbnN0IFN0cmluZyYgLypyZXF1ZXN0T3JpZ2luKi8pCit7CisgICAg
VmVjdG9yPFJlZlB0cjxUcmFja1NvdXJjZUluZm8+PiBzb3VyY2VzSW5mbzsKKworICAgIGlmICgh
aXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIHNvdXJjZXNJbmZvOworCisgICAgVmVjdG9y
PENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxpc3QoKTsKKyAgICBzaXpl
X3QgY291bnQgPSBkZXZpY2VzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlVHlwZSAqZGV2aWNlID0gW0FWQ2Fw
dHVyZURldmljZSBkZXZpY2VXaXRoVW5pcXVlSUQ6ZGV2aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJ
RF07CisgICAgICAgIEFTU0VSVChkZXZpY2UpOworCisgICAgICAgIGlmICghZGV2aWNlc1tpXS5t
X2VuYWJsZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoZGV2aWNlc1tp
XS5tX3ZpZGVvU291cmNlKQorICAgICAgICAgICAgc291cmNlc0luZm8uYXBwZW5kKFRyYWNrU291
cmNlSW5mbzo6Y3JlYXRlKGRldmljZXNbaV0ubV92aWRlb1NvdXJjZUlkLCBUcmFja1NvdXJjZUlu
Zm86OlZpZGVvLCBkZXZpY2UubG9jYWxpemVkTmFtZSkpOworICAgICAgICBpZiAoZGV2aWNlc1tp
XS5tX2F1ZGlvU291cmNlKQorICAgICAgICAgICAgc291cmNlc0luZm8uYXBwZW5kKFRyYWNrU291
cmNlSW5mbzo6Y3JlYXRlKGRldmljZXNbaV0ubV9hdWRpb1NvdXJjZUlkLCBUcmFja1NvdXJjZUlu
Zm86OkF1ZGlvLCBkZXZpY2UubG9jYWxpemVkTmFtZSkpOworICAgIH0KKyAgICAKKyAgICBMT0co
TWVkaWEsICJBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRTb3VyY2VzSW5mbyglcCksIGZvdW5k
ICVkIGFjdGl2ZSBkZXZpY2VzIiwgdGhpcywgc291cmNlc0luZm8uc2l6ZSgpKTsKKworICAgIHJl
dHVybiBzb3VyY2VzSW5mbzsKK30KKworYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjp2ZXJp
ZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6VHlwZSB0eXBlLCBN
ZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cywgU3RyaW5nJiBpbnZhbGlkQ29uc3RyYWludCkK
K3sKKyAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghY29uc3RyYWludHMpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgVmVjdG9yPE1l
ZGlhQ29uc3RyYWludD4gbWFuZGF0b3J5Q29uc3RyYWludHM7CisgICAgY29uc3RyYWludHMtPmdl
dE1hbmRhdG9yeUNvbnN0cmFpbnRzKG1hbmRhdG9yeUNvbnN0cmFpbnRzKTsKKyAgICBpZiAobWFu
ZGF0b3J5Q29uc3RyYWludHMuc2l6ZSgpKSB7CisgICAgICAgIFJldGFpblB0cjxBVkNhcHR1cmVT
ZXNzaW9uVHlwZT4gc2Vzc2lvbiA9IGFkb3B0TlMoW1tBVkNhcHR1cmVTZXNzaW9uIGFsbG9jXSBp
bml0XSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFuZGF0b3J5Q29uc3RyYWlu
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IE1lZGlhQ29uc3RyYWludCYgY29u
c3RyYWludCA9IG1hbmRhdG9yeUNvbnN0cmFpbnRzW2ldOworICAgICAgICAgICAgaWYgKCFzZXNz
aW9uU3VwcG9ydHNDb25zdHJhaW50KHNlc3Npb24uZ2V0KCksIHR5cGUsIGNvbnN0cmFpbnQubV9u
YW1lLCBjb25zdHJhaW50Lm1fdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgaW52YWxpZENvbnN0
cmFpbnQgPSBjb25zdHJhaW50Lm1fbmFtZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgVmVjdG9yPE1lZGlh
Q29uc3RyYWludD4gb3B0aW9uYWxDb25zdHJhaW50czsKKyAgICBjb25zdHJhaW50cy0+Z2V0T3B0
aW9uYWxDb25zdHJhaW50cyhvcHRpb25hbENvbnN0cmFpbnRzKTsKKyAgICBpZiAoIW9wdGlvbmFs
Q29uc3RyYWludHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb3B0aW9uYWxDb25zdHJhaW50cy5zaXplKCk7ICsraSkgeworICAgICAg
ICBjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSBvcHRpb25hbENvbnN0cmFpbnRz
W2ldOworICAgICAgICBpZiAoIWlzVmFsaWRDb25zdHJhaW50KHR5cGUsIGNvbnN0cmFpbnQubV9u
YW1lKSkgeworICAgICAgICAgICAgaW52YWxpZENvbnN0cmFpbnQgPSBjb25zdHJhaW50Lm1fbmFt
ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OmJlc3RTb3VyY2VGb3JUeXBlQW5kQ29uc3RyYWludHMoTWVkaWFTdHJlYW1Tb3Vy
Y2U6OlR5cGUgdHlwZSwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBjb25zdHJhaW50cykK
K3sKKyAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgVmVj
dG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxpc3QoKTsKKyAgICBz
aXplX3QgY291bnQgPSBkZXZpY2VzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKCFkZXZpY2VzW2ldLm1fZW5hYmxlZCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciB0aGUgY29uc3Ry
YWludHMgd2hlbiBjaG9vc2luZyBhbW9uZyBtdWx0aXBsZSBkZXZpY2VzLiBGb3Igbm93IGp1c3Qg
c2VsZWN0IHRoZSBmaXJzdCBhdmFpbGFibGUKKyAgICAgICAgLy8gZGV2aWNlIG9mIHRoZSBhcHBy
b3ByaWF0ZSB0eXBlLgorICAgICAgICBpZiAodHlwZSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVk
aW8gJiYgIWRldmljZXNbaV0ubV9hdWRpb1NvdXJjZUlkLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgaWYgKCFkZXZpY2VzW2ldLm1fYXVkaW9Tb3VyY2UpIHsKKyAgICAgICAgICAgICAgICBBVkNh
cHR1cmVEZXZpY2VUeXBlICpkZXZpY2UgPSBbQVZDYXB0dXJlRGV2aWNlIGRldmljZVdpdGhVbmlx
dWVJRDpkZXZpY2VzW2ldLm1fY2FwdHVyZURldmljZUlEXTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoZGV2aWNlKTsKKyAgICAgICAgICAgICAgICBkZXZpY2VzW2ldLm1fYXVkaW9Tb3VyY2UgPSBB
VkF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwgZGV2aWNlc1tpXS5tX2F1ZGlvU291
cmNlSWQsIGNvbnN0cmFpbnRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRldmljZXNb
aV0ubV9hdWRpb1NvdXJjZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6TGl2ZSk7
CisgICAgICAgICAgICByZXR1cm4gZGV2aWNlc1tpXS5tX2F1ZGlvU291cmNlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHR5cGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvICYmICFkZXZp
Y2VzW2ldLm1fdmlkZW9Tb3VyY2VJZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmICghZGV2
aWNlc1tpXS5tX3ZpZGVvU291cmNlKSB7CisgICAgICAgICAgICAgICAgQVZDYXB0dXJlRGV2aWNl
VHlwZSAqZGV2aWNlID0gW0FWQ2FwdHVyZURldmljZSBkZXZpY2VXaXRoVW5pcXVlSUQ6ZGV2aWNl
c1tpXS5tX2NhcHR1cmVEZXZpY2VJRF07CisgICAgICAgICAgICAgICAgQVNTRVJUKGRldmljZSk7
CisgICAgICAgICAgICAgICAgZGV2aWNlc1tpXS5tX3ZpZGVvU291cmNlID0gQVZWaWRlb0NhcHR1
cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGRldmljZXNbaV0ubV92aWRlb1NvdXJjZUlkLCBjb25z
dHJhaW50cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXZpY2VzW2ldLm1fdmlkZW9T
b3VyY2UtPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUpOworICAgICAgICAg
ICAgcmV0dXJuIGRldmljZXNbaV0ubV92aWRlb1NvdXJjZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnJlZ2lzdGVy
Rm9yRGV2aWNlTm90aWZpY2F0aW9ucygpCit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBzZWxlY3RvcjpA
c2VsZWN0b3IoZGV2aWNlQ29ubmVjdGVkOikgbmFtZTpBVkNhcHR1cmVEZXZpY2VXYXNDb25uZWN0
ZWROb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBzZWxlY3RvcjpA
c2VsZWN0b3IoZGV2aWNlRGlzY29ubmVjdGVkOikgbmFtZTpBVkNhcHR1cmVEZXZpY2VXYXNEaXNj
b25uZWN0ZWROb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Cit9CisKK3ZvaWQgQVZDYXB0dXJlRGV2
aWNlTWFuYWdlcjo6ZGV2aWNlQ29ubmVjdGVkKCkKK3sKKyAgICByZWZyZXNoQ2FwdHVyZURldmlj
ZUxpc3QoKTsKK30KKwordm9pZCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZXZpY2VEaXNjb25u
ZWN0ZWQoQVZDYXB0dXJlRGV2aWNlVHlwZSogZGV2aWNlKQoreworICAgIFZlY3RvcjxDYXB0dXJl
RGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVEZXZpY2VMaXN0KCk7CisKKyAgICBzaXplX3QgY291
bnQgPSBkZXZpY2VzLnNpemUoKTsKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBTdHJpbmcgZGV2aWNlSUQgPSBkZXZpY2UudW5pcXVlSUQ7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChkZXZpY2VzW2ldLm1fY2FwdHVy
ZURldmljZUlEID09IGRldmljZUlEKSB7CisgICAgICAgICAgICBMT0coTWVkaWEsICJBVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyOjpkZXZpY2VEaXNjb25uZWN0ZWQoJXApLCBkZXZpY2UgJWQgZGlzYWJs
ZWQiLCB0aGlzLCBpKTsKKyAgICAgICAgICAgIGRldmljZXNbaV0ubV9lbmFibGVkID0gZmFsc2U7
CisgICAgICAgICAgICBpZiAoZGV2aWNlc1tpXS5tX2F1ZGlvU291cmNlKQorICAgICAgICAgICAg
ICAgIGRldmljZXNbaV0ubV9hdWRpb1NvdXJjZS0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAg
ICAgICBpZiAoZGV2aWNlc1tpXS5tX3ZpZGVvU291cmNlKQorICAgICAgICAgICAgICAgIGRldmlj
ZXNbaV0ubV92aWRlb1NvdXJjZS0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
Ojp2YWxpZENvbnN0cmFpbnROYW1lcygpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0
b3I8QXRvbWljU3RyaW5nPiwgY29uc3RyYWludHMsICgpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBoZWlnaHRDb25zdHJhaW50KCJoZWlnaHQiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiB3aWR0aENvbnN0cmFpbnQoIndpZHRoIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
ZnJhbWVSYXRlQ29uc3RyYWludCgiZnJhbWVSYXRlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZmFj
aW5nTW9kZUNvbnN0cmFpbnQoImZhY2luZ01vZGUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBnYWlu
Q29uc3RyYWludCgiZ2FpbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwor
ICAgIAorICAgIGlmICghY29uc3RyYWludHMuc2l6ZSgpKSB7CisgICAgICAgIGNvbnN0cmFpbnRz
Lmluc2VydChXaWR0aCwgd2lkdGhDb25zdHJhaW50KTsKKyAgICAgICAgY29uc3RyYWludHMuaW5z
ZXJ0KEhlaWdodCwgaGVpZ2h0Q29uc3RyYWludCk7CisgICAgICAgIGNvbnN0cmFpbnRzLmluc2Vy
dChGcmFtZVJhdGUsIGZyYW1lUmF0ZUNvbnN0cmFpbnQpOworICAgICAgICBjb25zdHJhaW50cy5p
bnNlcnQoRmFjaW5nTW9kZSwgZmFjaW5nTW9kZUNvbnN0cmFpbnQpOworICAgICAgICBjb25zdHJh
aW50cy5pbnNlcnQoR2FpbiwgZ2FpbkNvbnN0cmFpbnQpOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gY29uc3RyYWludHM7Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBBVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyOjp2YWxpZEZhY2luZ01vZGVzKCkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFZlY3RvcjxBdG9taWNTdHJpbmc+LCBtb2RlcywgKCkpOworICAgIAorICAgIGlmICgh
bW9kZXMuc2l6ZSgpKSB7CisgICAgICAgIG1vZGVzLmluc2VydChNZWRpYVN0cmVhbVNvdXJjZVN0
YXRlczo6VXNlciwgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoTWVkaWFTdHJl
YW1Tb3VyY2VTdGF0ZXM6OlVzZXIpKTsKKyAgICAgICAgbW9kZXMuaW5zZXJ0KE1lZGlhU3RyZWFt
U291cmNlU3RhdGVzOjpFbnZpcm9ubWVudCwgTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OmZhY2lu
Z01vZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkVudmlyb25tZW50KSk7CisgICAgICAgIG1v
ZGVzLmluc2VydChNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6TGVmdCwgTWVkaWFTdHJlYW1Tb3Vy
Y2VTdGF0ZXM6OmZhY2luZ01vZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkxlZnQpKTsKKyAg
ICAgICAgbW9kZXMuaW5zZXJ0KE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpSaWdodCwgTWVkaWFT
dHJlYW1Tb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlJp
Z2h0KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBtb2RlczsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCitAaW1wbGVtZW50YXRpb24gV2ViQ29yZUFWQ2FwdHVyZURldmljZU1hbmFn
ZXJPYnNlcnZlcgorCistIChpZClpbml0V2l0aENhbGxiYWNrOihBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyKiljYWxsYmFjaworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIG1fY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkaXNjb25uZWN0Cit7CisgICAgW05TT2JqZWN0IGNh
bmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmXTsKKyAgICBtX2NhbGxi
YWNrID0gMDsKK30KKworLSAodm9pZClkZXZpY2VEaXNjb25uZWN0ZWQ6KE5TTm90aWZpY2F0aW9u
ICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFtX2NhbGxiYWNrKQorICAgICAgICByZXR1cm47
CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAg
ICAgICBpZiAobV9jYWxsYmFjaykgeworICAgICAgICAgICAgQVZDYXB0dXJlRGV2aWNlVHlwZSAq
ZGV2aWNlID0gW25vdGlmaWNhdGlvbiBvYmplY3RdOworICAgICAgICAgICAgbV9jYWxsYmFjay0+
ZGV2aWNlRGlzY29ubmVjdGVkKGRldmljZSk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworLSAo
dm9pZClkZXZpY2VDb25uZWN0ZWQ6KE5TTm90aWZpY2F0aW9uICopdW51c2VkTm90aWZpY2F0aW9u
Cit7CisgICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlmaWNhdGlvbik7CisgICAgaWYgKCFtX2Nh
bGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAobV9jYWxsYmFjaykKKyAgICAgICAgICAg
IG1fY2FsbGJhY2stPmRldmljZUNvbm5lY3RlZCgpOworICAgIH0pOworfQorCitAZW5kCisKKyNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291
cmNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEFWTWVkaWFDYXB0dXJlU291cmNlX2gKKyNkZWZpbmUgQVZN
ZWRpYUNhcHR1cmVTb3VyY2VfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFW
Rk9VTkRBVElPTikKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dDsK
K09CSkNfQ0xBU1MgQVZDYXB0dXJlQ29ubmVjdGlvbjsKK09CSkNfQ0xBU1MgQVZDYXB0dXJlRGV2
aWNlOworT0JKQ19DTEFTUyBBVkNhcHR1cmVPdXRwdXQ7CitPQkpDX0NMQVNTIEFWQ2FwdHVyZVNl
c3Npb247CitPQkpDX0NMQVNTIEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dDsKK09CSkNfQ0xBU1Mg
V2ViQ29yZUFWTWVkaWFDYXB0dXJlU291cmNlT2JzZXJ2ZXI7CisKK3R5cGVkZWYgc3RydWN0IG9w
YXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBBVk1lZGlhQ2FwdHVyZVNvdXJjZSA6IHB1YmxpYyBNZWRpYVN0cmVhbVNv
dXJjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QVZNZWRpYUNhcHR1cmVTb3VyY2UoKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNv
bm5lY3Rpb24oQVZDYXB0dXJlT3V0cHV0KiwgQ01TYW1wbGVCdWZmZXJSZWYsIEFWQ2FwdHVyZUNv
bm5lY3Rpb24qKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZVNlc3Npb25TdG9wcGVk
UnVubmluZygpOworCitwcm90ZWN0ZWQ6CisgICAgQVZNZWRpYUNhcHR1cmVTb3VyY2UoQVZDYXB0
dXJlRGV2aWNlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGUs
IFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pOworCisgICAgdmlydHVhbCBjb25zdCBNZWRp
YVN0cmVhbVNvdXJjZVN0YXRlcyYgc3RhdGVzKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0b3BQ
cm9kdWNpbmdEYXRhKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0dXBDYXB0dXJl
U2Vzc2lvbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGVzKCkgPSAwOworCisg
ICAgQVZDYXB0dXJlU2Vzc2lvbiAqc2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbi5n
ZXQoKTsgfQorICAgIEFWQ2FwdHVyZURldmljZSAqZGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXZpY2UuZ2V0KCk7IH0KKyAgICBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyogY3VycmVudFN0YXRl
cygpIHsgcmV0dXJuICZtX2N1cnJlbnRTdGF0ZXM7IH0KKyAgICBNZWRpYUNvbnN0cmFpbnRzKiBj
b25zdHJhaW50cygpIHsgcmV0dXJuIG1fY29uc3RyYWludHMuZ2V0KCk7IH0KKworICAgIHZvaWQg
c2V0VmlkZW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZShBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXQqKTsK
KyAgICB2b2lkIHNldEF1ZGlvU2FtcGxlQnVmZmVyRGVsZWdhdGUoQVZDYXB0dXJlQXVkaW9EYXRh
T3V0cHV0Kik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXR1cFNlc3Npb24oKTsKKworICAgIFJl
dGFpblB0cjxXZWJDb3JlQVZNZWRpYUNhcHR1cmVTb3VyY2VPYnNlcnZlcj4gbV9vYmpjT2JzZXJ2
ZXI7CisgICAgUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IG1fY29uc3RyYWludHM7CisgICAgTWVk
aWFTdHJlYW1Tb3VyY2VTdGF0ZXMgbV9jdXJyZW50U3RhdGVzOworICAgIFJldGFpblB0cjxBVkNh
cHR1cmVTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgUmV0YWluUHRyPEFWQ2FwdHVyZURldmljZT4g
bV9kZXZpY2U7CisgICAgCisgICAgYm9vbCBtX2lzUnVubmluZzsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAv
LyBBVk1lZGlhQ2FwdHVyZVNvdXJjZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNl
Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0FWTWVkaWFDYXB0dXJlU291cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbXBvcnQgIkFWTWVkaWFDYXB0dXJlU291cmNl
LmgiCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhQ29uc3RyYWludHMuaCIK
KyNpbXBvcnQgIk1lZGlhU3RyZWFtU291cmNlU3RhdGVzLmgiCisjaW1wb3J0ICJOb3RJbXBsZW1l
bnRlZC5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgIlVVSUQuaCIKKyNpbXBv
cnQgPEFWRm91bmRhdGlvbi9BVkZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPG9iamMvcnVudGltZS5o
PgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorCit0eXBlZGVmIEFWQ2FwdHVyZUNvbm5lY3Rpb24gQVZDYXB0dXJlQ29ubmVjdGlvblR5
cGU7Cit0eXBlZGVmIEFWQ2FwdHVyZURldmljZSBBVkNhcHR1cmVEZXZpY2VUeXBlOwordHlwZWRl
ZiBBVkNhcHR1cmVEZXZpY2VJbnB1dCBBVkNhcHR1cmVEZXZpY2VJbnB1dFR5cGU7Cit0eXBlZGVm
IEFWQ2FwdHVyZU91dHB1dCBBVkNhcHR1cmVPdXRwdXRUeXBlOwordHlwZWRlZiBBVkNhcHR1cmVT
ZXNzaW9uIEFWQ2FwdHVyZVNlc3Npb25UeXBlOwordHlwZWRlZiBBVkNhcHR1cmVBdWRpb0RhdGFP
dXRwdXQgQVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0VHlwZTsKK3R5cGVkZWYgQVZDYXB0dXJlVmlk
ZW9EYXRhT3V0cHV0IEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dFR5cGU7CisKK1NPRlRfTElOS19G
UkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJ
T05BTChDb3JlTWVkaWEpCisKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2FwdHVy
ZUF1ZGlvRGF0YU91dHB1dCkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2FwdHVy
ZUNvbm5lY3Rpb24pCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVEZXZp
Y2UpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVEZXZpY2VJbnB1dCkK
K1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZU91dHB1dCkKK1NPRlRfTElO
S19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZVNlc3Npb24pCitTT0ZUX0xJTktfQ0xBU1Mo
QVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXQpCisKKyNkZWZpbmUgQVZDYXB0
dXJlQXVkaW9EYXRhT3V0cHV0IGdldEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dENsYXNzKCkKKyNk
ZWZpbmUgQVZDYXB0dXJlQ29ubmVjdGlvbiBnZXRBVkNhcHR1cmVDb25uZWN0aW9uQ2xhc3MoKQor
I2RlZmluZSBBVkNhcHR1cmVEZXZpY2UgZ2V0QVZDYXB0dXJlRGV2aWNlQ2xhc3MoKQorI2RlZmlu
ZSBBVkNhcHR1cmVEZXZpY2VJbnB1dCBnZXRBVkNhcHR1cmVEZXZpY2VJbnB1dENsYXNzKCkKKyNk
ZWZpbmUgQVZDYXB0dXJlT3V0cHV0IGdldEFWQ2FwdHVyZU91dHB1dENsYXNzKCkKKyNkZWZpbmUg
QVZDYXB0dXJlU2Vzc2lvbiBnZXRBVkNhcHR1cmVTZXNzaW9uQ2xhc3MoKQorI2RlZmluZSBBVkNh
cHR1cmVWaWRlb0RhdGFPdXRwdXQgZ2V0QVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0Q2xhc3MoKQor
CitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlQXVkaW8sIE5TU3Ry
aW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlTXV4ZWQs
IE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWTWVkaWFUeXBl
VmlkZW8sIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQ2Fw
dHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMCwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVS
KEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlU2Vzc2lvblByZXNldDY0MHg0ODAsIE5TU3RyaW5nICop
CitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQz
NTJ4Mjg4LCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkNh
cHR1cmVTZXNzaW9uUHJlc2V0TG93LCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZG
b3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uRGlkU3RvcFJ1bm5pbmdOb3RpZmljYXRpb24sIE5T
U3RyaW5nICopCisKKyNkZWZpbmUgQVZNZWRpYVR5cGVBdWRpbyBnZXRBVk1lZGlhVHlwZUF1ZGlv
KCkKKyNkZWZpbmUgQVZNZWRpYVR5cGVNdXhlZCBnZXRBVk1lZGlhVHlwZU11eGVkKCkKKyNkZWZp
bmUgQVZNZWRpYVR5cGVWaWRlbyBnZXRBVk1lZGlhVHlwZVZpZGVvKCkKKyNkZWZpbmUgQVZDYXB0
dXJlU2Vzc2lvblByZXNldDEyODB4NzIwIGdldEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQxMjgweDcy
MCgpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwIGdldEFWQ2FwdHVyZVNl
c3Npb25QcmVzZXQ2NDB4NDgwKCkKKyNkZWZpbmUgQVZDYXB0dXJlU2Vzc2lvblByZXNldDM1Mngy
ODggZ2V0QVZDYXB0dXJlU2Vzc2lvblByZXNldDM1MngyODgoKQorI2RlZmluZSBBVkNhcHR1cmVT
ZXNzaW9uUHJlc2V0TG93IGdldEFWQ2FwdHVyZVNlc3Npb25QcmVzZXRMb3coKQorI2RlZmluZSBB
VkNhcHR1cmVTZXNzaW9uRGlkU3RvcFJ1bm5pbmdOb3RpZmljYXRpb24gZ2V0QVZDYXB0dXJlU2Vz
c2lvbkRpZFN0b3BSdW5uaW5nTm90aWZpY2F0aW9uKCkKKworU09GVF9MSU5LKENvcmVNZWRpYSwg
Q01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbiwgQ01Gb3JtYXREZXNjcmlwdGlvblJl
ZiwgKENNU2FtcGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpOworU09GVF9MSU5LKENvcmVNZWRp
YSwgQ01TYW1wbGVCdWZmZXJHZXRQcmVzZW50YXRpb25UaW1lU3RhbXAsIENNVGltZSwgKENNU2Ft
cGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpOworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworQGludGVyZmFjZSBXZWJDb3JlQVZNZWRpYUNhcHR1cmVTb3VyY2VPYnNlcnZlciA6IE5TT2Jq
ZWN0PEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dFNhbXBsZUJ1ZmZlckRlbGVnYXRlLCBBVkNhcHR1
cmVWaWRlb0RhdGFPdXRwdXRTYW1wbGVCdWZmZXJEZWxlZ2F0ZT4KK3sKKyAgICBBVk1lZGlhQ2Fw
dHVyZVNvdXJjZSogbV9jYWxsYmFjazsKK30KKworLShpZClpbml0V2l0aENhbGxiYWNrOihBVk1l
ZGlhQ2FwdHVyZVNvdXJjZSopY2FsbGJhY2s7CistKHZvaWQpZGlzY29ubmVjdDsKKy0odm9pZClj
YXB0dXJlU2Vzc2lvblN0b3BwZWRSdW5uaW5nOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bjsKKy0odm9pZCljYXB0dXJlT3V0cHV0OihBVkNhcHR1cmVPdXRwdXRUeXBlICopY2FwdHVyZU91
dHB1dCBkaWRPdXRwdXRTYW1wbGVCdWZmZXI6KENNU2FtcGxlQnVmZmVyUmVmKXNhbXBsZUJ1ZmZl
ciBmcm9tQ29ubmVjdGlvbjooQVZDYXB0dXJlQ29ubmVjdGlvblR5cGUgKiljb25uZWN0aW9uOwor
QGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IGds
b2JhQXVkaW9DYXB0dXJlU2VyaWFsUXVldWUoKQoreworICAgIHN0YXRpYyBkaXNwYXRjaF9xdWV1
ZV90IGdsb2JhbFF1ZXVlOworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwor
ICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgZ2xvYmFsUXVldWUgPSBk
aXNwYXRjaF9xdWV1ZV9jcmVhdGUoIldlYkNvcmVBVk1lZGlhQ2FwdHVyZVNvdXJjZSBhdWRpbyBj
YXB0dXJlIHF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfU0VSSUFMKTsKKyAgICB9KTsKKyAgICByZXR1
cm4gZ2xvYmFsUXVldWU7Cit9CisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IGdsb2JhVmlkZW9D
YXB0dXJlU2VyaWFsUXVldWUoKQoreworICAgIHN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IGdsb2Jh
bFF1ZXVlOworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3Bh
dGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgZ2xvYmFsUXVldWUgPSBkaXNwYXRjaF9x
dWV1ZV9jcmVhdGUoIldlYkNvcmVBVk1lZGlhQ2FwdHVyZVNvdXJjZSB2aWRlbyBjYXB0dXJlIHF1
ZXVlIiwgRElTUEFUQ0hfUVVFVUVfU0VSSUFMKTsKKyAgICAgICAgZGlzcGF0Y2hfc2V0X3Rhcmdl
dF9xdWV1ZShnbG9iYWxRdWV1ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZSggRElTUEFUQ0hf
UVVFVUVfUFJJT1JJVFlfSElHSCwgMCkpOworICAgIH0pOworICAgIHJldHVybiBnbG9iYWxRdWV1
ZTsKK30KKworQVZNZWRpYUNhcHR1cmVTb3VyY2U6OkFWTWVkaWFDYXB0dXJlU291cmNlKEFWQ2Fw
dHVyZURldmljZVR5cGUqIGRldmljZSwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgTWVkaWFTdHJl
YW1Tb3VyY2U6OlR5cGUgdHlwZSwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBjb25zdHJh
aW50cykKKyAgICA6IE1lZGlhU3RyZWFtU291cmNlKGlkLCB0eXBlLCBlbXB0eVN0cmluZygpKQor
ICAgICwgbV9vYmpjT2JzZXJ2ZXIoYWRvcHROUyhbW1dlYkNvcmVBVk1lZGlhQ2FwdHVyZVNvdXJj
ZU9ic2VydmVyIGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNdKSkKKyAgICAsIG1fY29uc3Ry
YWludHMoY29uc3RyYWludHMpCisgICAgLCBtX2RldmljZShkZXZpY2UpCisgICAgLCBtX2lzUnVu
bmluZyhmYWxzZSkKK3sKKyAgICBzZXROYW1lKFtkZXZpY2UgbG9jYWxpemVkTmFtZV0pOworICAg
IG1fY3VycmVudFN0YXRlcy5zZXRTb3VyY2VUeXBlKHR5cGUgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6
OlZpZGVvID8gTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OkNhbWVyYSA6IE1lZGlhU3RyZWFtU291
cmNlU3RhdGVzOjpNaWNyb3Bob25lKTsKK30KKworQVZNZWRpYUNhcHR1cmVTb3VyY2U6On5BVk1l
ZGlhQ2FwdHVyZVNvdXJjZSgpCit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0
Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKV07CisgICAgW21fb2Jq
Y09ic2VydmVyIGRpc2Nvbm5lY3RdOworICAgIFttX3Nlc3Npb24uZ2V0KCkgc3RvcFJ1bm5pbmdd
OworCisgICAgc2V0UmVhZHlTdGF0ZShFbmRlZCk7Cit9CisKK3ZvaWQgQVZNZWRpYUNhcHR1cmVT
b3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAgaWYgKCFtX3Nlc3Npb24pCisgICAg
ICAgIHNldHVwU2Vzc2lvbigpOworICAgIAorICAgIGlmIChbbV9zZXNzaW9uLmdldCgpIGlzUnVu
bmluZ10pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBbbV9zZXNzaW9uLmdldCgpIHN0YXJ0
UnVubmluZ107CisgICAgc2V0RW5hYmxlZCh0cnVlKTsKKyAgICBtX2lzUnVubmluZyA9IHRydWU7
Cit9CisKK3ZvaWQgQVZNZWRpYUNhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sK
KyAgICBpZiAoIW1fc2Vzc2lvbiB8fCAhW21fc2Vzc2lvbi5nZXQoKSBpc1J1bm5pbmddKQorICAg
ICAgICByZXR1cm47CisKKyAgICBbbV9zZXNzaW9uLmdldCgpIHN0b3BSdW5uaW5nXTsKKyAgICBz
ZXRFbmFibGVkKGZhbHNlKTsKKyAgICBtX2lzUnVubmluZyA9IHRydWU7Cit9CisKK2NvbnN0IE1l
ZGlhU3RyZWFtU291cmNlU3RhdGVzJiBBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6c3RhdGVzKCkKK3sK
KyAgICB1cGRhdGVTdGF0ZXMoKTsKKyAgICByZXR1cm4gbV9jdXJyZW50U3RhdGVzOworfQorCit2
b2lkIEFWTWVkaWFDYXB0dXJlU291cmNlOjpzZXR1cFNlc3Npb24oKQoreworICAgIGlmIChtX3Nl
c3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Vzc2lvbiA9IGFkb3B0TlMoW1tBVkNh
cHR1cmVTZXNzaW9uIGFsbG9jXSBpbml0XSk7CisgICAgCisgICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBzZWxl
Y3RvcjpAc2VsZWN0b3IoY2FwdHVyZVNlc3Npb25TdG9wcGVkUnVubmluZzopIG5hbWU6QVZDYXB0
dXJlU2Vzc2lvbkRpZFN0b3BSdW5uaW5nTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIAor
ICAgIHNldHVwQ2FwdHVyZVNlc3Npb24oKTsKKyAgICBzZXRSZWFkeVN0YXRlKExpdmUpOworfQor
IAordm9pZCBBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6Y2FwdHVyZVNlc3Npb25TdG9wcGVkUnVubmlu
ZygpCit7CisgICAgc3RvcFByb2R1Y2luZ0RhdGEoKTsKK30KKwordm9pZCBBVk1lZGlhQ2FwdHVy
ZVNvdXJjZTo6c2V0VmlkZW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZShBVkNhcHR1cmVWaWRlb0RhdGFP
dXRwdXRUeXBlKiB2aWRlb091dHB1dCkKK3sKKyAgICBbdmlkZW9PdXRwdXQgc2V0U2FtcGxlQnVm
ZmVyRGVsZWdhdGU6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgcXVldWU6Z2xvYmFWaWRlb0NhcHR1cmVT
ZXJpYWxRdWV1ZSgpXTsKK30KKwordm9pZCBBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6c2V0QXVkaW9T
YW1wbGVCdWZmZXJEZWxlZ2F0ZShBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXRUeXBlKiBhdWRpb091
dHB1dCkKK3sKKyAgICBbYXVkaW9PdXRwdXQgc2V0U2FtcGxlQnVmZmVyRGVsZWdhdGU6bV9vYmpj
T2JzZXJ2ZXIuZ2V0KCkgcXVldWU6Z2xvYmFBdWRpb0NhcHR1cmVTZXJpYWxRdWV1ZSgpXTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitAaW1wbGVtZW50YXRpb24gV2ViQ29yZUFWTWVk
aWFDYXB0dXJlU291cmNlT2JzZXJ2ZXIKKworLSAoaWQpaW5pdFdpdGhDYWxsYmFjazooQVZNZWRp
YUNhcHR1cmVTb3VyY2UqKWNhbGxiYWNrCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAg
ICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgbV9jYWxsYmFjayA9IGNhbGxi
YWNrOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRpc2Nvbm5lY3QKK3sKKyAgICBb
TlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGZdOwor
ICAgIG1fY2FsbGJhY2sgPSAwOworfQorCistICh2b2lkKWNhcHR1cmVTZXNzaW9uU3RvcHBlZFJ1
bm5pbmc6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgVU5VU0VEX1BBUkFN
KG5vdGlmaWNhdGlvbik7CisKKyAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgIHJldHVybjsK
KworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAg
ICAgIGlmIChtX2NhbGxiYWNrKQorICAgICAgICAgICAgbV9jYWxsYmFjay0+Y2FwdHVyZVNlc3Np
b25TdG9wcGVkUnVubmluZygpOworICAgIH0pOworfQorCistICh2b2lkKWNhcHR1cmVPdXRwdXQ6
KEFWQ2FwdHVyZU91dHB1dFR5cGUgKiljYXB0dXJlT3V0cHV0IGRpZE91dHB1dFNhbXBsZUJ1ZmZl
cjooQ01TYW1wbGVCdWZmZXJSZWYpc2FtcGxlQnVmZmVyIGZyb21Db25uZWN0aW9uOihBVkNhcHR1
cmVDb25uZWN0aW9uVHlwZSAqKWNvbm5lY3Rpb24KK3sKKyAgICBpZiAoIW1fY2FsbGJhY2spCisg
ICAgICAgIHJldHVybjsKKworICAgIENGUmV0YWluKHNhbXBsZUJ1ZmZlcik7CisgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKG1fY2Fs
bGJhY2spCisgICAgICAgICAgICBtX2NhbGxiYWNrLT5jYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2Ft
cGxlQnVmZmVyRnJvbUNvbm5lY3Rpb24oY2FwdHVyZU91dHB1dCwgc2FtcGxlQnVmZmVyLCBjb25u
ZWN0aW9uKTsKKyAgICAgICAgQ0ZSZWxlYXNlKHNhbXBsZUJ1ZmZlcik7CisgICAgfSk7Cit9CisK
K0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRl
b0NhcHR1cmVTb3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQVZWaWRlb0NhcHR1cmVTb3VyY2VfaAor
I2RlZmluZSBBVlZpZGVvQ2FwdHVyZVNvdXJjZV9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQorCisjaW5jbHVkZSAiQVZNZWRpYUNhcHR1cmVTb3VyY2Uu
aCIKKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiAqQ01G
b3JtYXREZXNjcmlwdGlvblJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBVlZp
ZGVvQ2FwdHVyZVNvdXJjZSA6IHB1YmxpYyBBVk1lZGlhQ2FwdHVyZVNvdXJjZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZlB0cjxBVk1lZGlhQ2FwdHVyZVNvdXJjZT4gY3JlYXRlKEFWQ2FwdHVy
ZURldmljZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50
cz4pOworCisgICAgdmlydHVhbCBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2VDYXBhYmlsaXRpZXM+
IGNhcGFiaWxpdGllcygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjYXB0dXJl
T3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5lY3Rpb24oQVZDYXB0dXJlT3V0cHV0
KiwgQ01TYW1wbGVCdWZmZXJSZWYsIEFWQ2FwdHVyZUNvbm5lY3Rpb24qKSBPVkVSUklERTsKKwor
cHJpdmF0ZToKKyAgICBBVlZpZGVvQ2FwdHVyZVNvdXJjZShBVkNhcHR1cmVEZXZpY2UqLCBjb25z
dCBBdG9taWNTdHJpbmcmLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KTsKKyAgICB2aXJ0
dWFsIH5BVlZpZGVvQ2FwdHVyZVNvdXJjZSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldHVwQ2Fw
dHVyZVNlc3Npb24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGVzKCkg
T1ZFUlJJREU7CisKKyAgICBib29sIGFwcGx5Q29uc3RyYWludHMoTWVkaWFDb25zdHJhaW50cyop
OworICAgIGJvb2wgc2V0RnJhbWVSYXRlQ29uc3RyYWludChmbG9hdCBtaW5GcmFtZVJhdGUsIGZs
b2F0IG1heEZyYW1lUmF0ZSk7CisKKyAgICB2b2lkIGNhbGN1bGF0ZUZyYW1lcmF0ZShDTVNhbXBs
ZUJ1ZmZlclJlZik7CisKKyAgICBSZXRhaW5QdHI8QVZDYXB0dXJlQ29ubmVjdGlvbj4gbV92aWRl
b0Nvbm5lY3Rpb247CisgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fdmlk
ZW9Gb3JtYXREZXNjcmlwdGlvbjsKKyAgICBWZWN0b3I8RmxvYXQ2ND4gbV92aWRlb0ZyYW1lVGlt
ZVN0YW1wczsKKyAgICBGbG9hdDY0IG1fZnJhbWVSYXRlOworICAgIGludDMyX3QgbV93aWR0aDsK
KyAgICBpbnQzMl90IG1faGVpZ2h0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIEFWVmlkZW9DYXB0dXJl
U291cmNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9B
VlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0JKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1
cmVTb3VyY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9V
TkRBVElPTikKKworI2ltcG9ydCAiQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKworI2ltcG9ydCAi
QVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisj
aW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgiCisjaW1wb3J0
ICJNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcy5oIgorI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0
aW9uLmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKwordHlwZWRlZiBBVkNhcHR1cmVDb25u
ZWN0aW9uIEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlOwordHlwZWRlZiBBVkNhcHR1cmVEZXZpY2Ug
QVZDYXB0dXJlRGV2aWNlVHlwZTsKK3R5cGVkZWYgQVZDYXB0dXJlRGV2aWNlSW5wdXQgQVZDYXB0
dXJlRGV2aWNlSW5wdXRUeXBlOwordHlwZWRlZiBBVkNhcHR1cmVPdXRwdXQgQVZDYXB0dXJlT3V0
cHV0VHlwZTsKK3R5cGVkZWYgQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0IEFWQ2FwdHVyZVZpZGVv
RGF0YU91dHB1dFR5cGU7CisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0
aW9uKQorU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChDb3JlTWVkaWEpCisKK1NPRlRfTElO
S19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZUNvbm5lY3Rpb24pCitTT0ZUX0xJTktfQ0xB
U1MoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVEZXZpY2UpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3Vu
ZGF0aW9uLCBBVkNhcHR1cmVEZXZpY2VJbnB1dCkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRp
b24sIEFWQ2FwdHVyZU91dHB1dCkKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQ2Fw
dHVyZVZpZGVvRGF0YU91dHB1dCkKKworI2RlZmluZSBBVkNhcHR1cmVDb25uZWN0aW9uIGdldEFW
Q2FwdHVyZUNvbm5lY3Rpb25DbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVyZURldmljZSBnZXRBVkNh
cHR1cmVEZXZpY2VDbGFzcygpCisjZGVmaW5lIEFWQ2FwdHVyZURldmljZUlucHV0IGdldEFWQ2Fw
dHVyZURldmljZUlucHV0Q2xhc3MoKQorI2RlZmluZSBBVkNhcHR1cmVPdXRwdXQgZ2V0QVZDYXB0
dXJlT3V0cHV0Q2xhc3MoKQorI2RlZmluZSBBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXQgZ2V0QVZD
YXB0dXJlVmlkZW9EYXRhT3V0cHV0Q2xhc3MoKQorCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5k
YXRpb24sIEFWTWVkaWFUeXBlQXVkaW8sIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihB
VkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlVmlkZW8sIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9J
TlRFUihBVkZvdW5kYXRpb24sIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMCwgTlNTdHJp
bmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZDYXB0dXJlU2Vzc2lvblBy
ZXNldDY0MHg0ODAsIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24s
IEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4LCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BP
SU5URVIoQVZGb3VuZGF0aW9uLCBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93LCBOU1N0cmluZyAq
KQorCisjZGVmaW5lIEFWTWVkaWFUeXBlVmlkZW8gZ2V0QVZNZWRpYVR5cGVWaWRlbygpCisjZGVm
aW5lIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMCBnZXRBVkNhcHR1cmVTZXNzaW9uUHJl
c2V0MTI4MHg3MjAoKQorI2RlZmluZSBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0NjQweDQ4MCBnZXRB
VkNhcHR1cmVTZXNzaW9uUHJlc2V0NjQweDQ4MCgpCisjZGVmaW5lIEFWQ2FwdHVyZVNlc3Npb25Q
cmVzZXQzNTJ4Mjg4IGdldEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4KCkKKyNkZWZpbmUg
QVZDYXB0dXJlU2Vzc2lvblByZXNldExvdyBnZXRBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93KCkK
KworU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlwdGlv
biwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiwgKENNU2FtcGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1
ZikpOworU09GVF9MSU5LKENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJHZXRQcmVzZW50YXRpb25U
aW1lU3RhbXAsIENNVGltZSwgKENNU2FtcGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpOworU09G
VF9MSU5LKENvcmVNZWRpYSwgQ01UaW1lQ29tcGFyZSwgaW50MzJfdCwgKENNVGltZSB0aW1lMSwg
Q01UaW1lIHRpbWUyKSwgKHRpbWUxLCB0aW1lMikpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRp
bWVNYWtlLCBDTVRpbWUsIChpbnQ2NF90IHZhbHVlLCBpbnQzMl90IHRpbWVzY2FsZSksICh2YWx1
ZSwgdGltZXNjYWxlKSkKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlw
dGlvbkdldERpbWVuc2lvbnMsIENNVmlkZW9EaW1lbnNpb25zLCAoQ01WaWRlb0Zvcm1hdERlc2Ny
aXB0aW9uUmVmIHZpZGVvRGVzYyksICh2aWRlb0Rlc2MpKTsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitSZWZQdHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IEFWVmlkZW9DYXB0dXJlU291cmNlOjpj
cmVhdGUoQVZDYXB0dXJlRGV2aWNlVHlwZSogZGV2aWNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGlk
LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGNvbnN0cmFpbnQpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBBVlZpZGVvQ2FwdHVyZVNvdXJjZShkZXZpY2UsIGlkLCBjb25zdHJhaW50
KSk7Cit9CisKK0FWVmlkZW9DYXB0dXJlU291cmNlOjpBVlZpZGVvQ2FwdHVyZVNvdXJjZShBVkNh
cHR1cmVEZXZpY2VUeXBlKiBkZXZpY2UsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFBhc3NSZWZQ
dHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludCkKKyAgICA6IEFWTWVkaWFDYXB0dXJlU291
cmNlKGRldmljZSwgaWQsIE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbywgY29uc3RyYWludCkKKyAg
ICAsIG1fZnJhbWVSYXRlKDApCisgICAgLCBtX3dpZHRoKDApCisgICAgLCBtX2hlaWdodCgwKQor
eworICAgIGN1cnJlbnRTdGF0ZXMoKS0+c2V0U291cmNlSWQoaWQpOworICAgIGN1cnJlbnRTdGF0
ZXMoKS0+c2V0U291cmNlVHlwZShNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6Q2FtZXJhKTsKK30K
KworQVZWaWRlb0NhcHR1cmVTb3VyY2U6On5BVlZpZGVvQ2FwdHVyZVNvdXJjZSgpCit7Cit9CisK
K1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdGllcz4gQVZWaWRlb0NhcHR1cmVTb3Vy
Y2U6OmNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6dXBkYXRlU3RhdGVzKCkK
K3sKKyAgICBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlcyogc3RhdGVzID0gY3VycmVudFN0YXRlcygp
OworCisgICAgaWYgKFtkZXZpY2UoKSBwb3NpdGlvbl0gPT0gQVZDYXB0dXJlRGV2aWNlUG9zaXRp
b25Gcm9udCkKKyAgICAgICAgc3RhdGVzLT5zZXRGYWNpbmdNb2RlKE1lZGlhU3RyZWFtU291cmNl
U3RhdGVzOjpVc2VyKTsKKyAgICBlbHNlIGlmIChbZGV2aWNlKCkgcG9zaXRpb25dID09IEFWQ2Fw
dHVyZURldmljZVBvc2l0aW9uQmFjaykKKyAgICAgICAgc3RhdGVzLT5zZXRGYWNpbmdNb2RlKE1l
ZGlhU3RyZWFtU291cmNlU3RhdGVzOjpFbnZpcm9ubWVudCk7CisgICAgZWxzZQorICAgICAgICBz
dGF0ZXMtPnNldEZhY2luZ01vZGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6OlVua25vd24pOwor
ICAgIAorICAgIHN0YXRlcy0+c2V0RnJhbWVSYXRlKG1fZnJhbWVSYXRlKTsKKyAgICBzdGF0ZXMt
PnNldFdpZHRoKG1fd2lkdGgpOworICAgIHN0YXRlcy0+c2V0SGVpZ2h0KG1faGVpZ2h0KTsKKyAg
ICBzdGF0ZXMtPnNldEFzcGVjdFJhdGlvKHN0YXRpY19jYXN0PGZsb2F0PihtX3dpZHRoKSAvIG1f
aGVpZ2h0KTsKK30KKworYm9vbCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6c2V0RnJhbWVSYXRlQ29u
c3RyYWludChmbG9hdCBtaW5GcmFtZVJhdGUsIGZsb2F0IG1heEZyYW1lUmF0ZSkKK3sKKyAgICBB
VkZyYW1lUmF0ZVJhbmdlICpiZXN0RnJhbWVSYXRlUmFuZ2UgPSAwOworCisgICAgZm9yIChBVkZy
YW1lUmF0ZVJhbmdlICpmcmFtZVJhdGVSYW5nZSBpbiBbW2RldmljZSgpIGFjdGl2ZUZvcm1hdF0g
dmlkZW9TdXBwb3J0ZWRGcmFtZVJhdGVSYW5nZXNdKSB7CisgICAgICAgIGlmICghbWF4RnJhbWVS
YXRlKSB7CisgICAgICAgICAgICBpZiAobWluRnJhbWVSYXRlID09IFtmcmFtZVJhdGVSYW5nZSBt
aW5GcmFtZVJhdGVdKQorICAgICAgICAgICAgICAgIGJlc3RGcmFtZVJhdGVSYW5nZSA9IGZyYW1l
UmF0ZVJhbmdlOworICAgICAgICB9IGVsc2UgaWYgKG1pbkZyYW1lUmF0ZSA+PSBbZnJhbWVSYXRl
UmFuZ2UgbWluRnJhbWVSYXRlXSAmJiBtYXhGcmFtZVJhdGUgPD0gW2ZyYW1lUmF0ZVJhbmdlIG1h
eEZyYW1lUmF0ZV0pIHsKKyAgICAgICAgICAgIGlmIChDTVRJTUVfQ09NUEFSRV9JTkxJTkUoW2Zy
YW1lUmF0ZVJhbmdlIG1pbkZyYW1lRHVyYXRpb25dLCA+LCBbYmVzdEZyYW1lUmF0ZVJhbmdlIG1p
bkZyYW1lRHVyYXRpb25dKSkKKyAgICAgICAgICAgICAgICBiZXN0RnJhbWVSYXRlUmFuZ2UgPSBm
cmFtZVJhdGVSYW5nZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIWJlc3RGcmFt
ZVJhdGVSYW5nZSkgeworICAgICAgICBMT0coTWVkaWEsICJBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6
c2V0RnJhbWVSYXRlQ29uc3RyYWludCglcCksIGZyYW1lIHJhdGUgcmFuZ2UgJWYuLiVmIG5vdCBz
dXBwb3J0ZWQgYnkgdmlkZW8gZGV2aWNlIiwgdGhpcywgbWluRnJhbWVSYXRlLCBtYXhGcmFtZVJh
dGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIE5TRXJyb3IgKmVy
cm9yID0gbmlsOworICAgIEB0cnkgeworICAgICAgICBpZiAoW2RldmljZSgpIGxvY2tGb3JDb25m
aWd1cmF0aW9uOiZlcnJvcl0pIHsKKyAgICAgICAgICAgIFtkZXZpY2UoKSBzZXRBY3RpdmVWaWRl
b01pbkZyYW1lRHVyYXRpb246W2Jlc3RGcmFtZVJhdGVSYW5nZSBtaW5GcmFtZUR1cmF0aW9uXV07
CisgICAgICAgICAgICBpZiAobWF4RnJhbWVSYXRlKQorICAgICAgICAgICAgICAgIFtkZXZpY2Uo
KSBzZXRBY3RpdmVWaWRlb01heEZyYW1lRHVyYXRpb246W2Jlc3RGcmFtZVJhdGVSYW5nZSBtYXhG
cmFtZUR1cmF0aW9uXV07CisgICAgICAgICAgICBbZGV2aWNlKCkgdW5sb2NrRm9yQ29uZmlndXJh
dGlvbl07CisgICAgICAgIH0KKyAgICB9IEBjYXRjaChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7
CisgICAgICAgIExPRyhNZWRpYSwgIkFWVmlkZW9DYXB0dXJlU291cmNlOjpzZXRGcmFtZVJhdGVD
b25zdHJhaW50KCVwKSwgZXhjZXB0aW9uIHRocm93biBjb25maWd1cmluZyBkZXZpY2U6IDwlcz4g
JXMiLCB0aGlzLCBbW2V4Y2VwdGlvbiBuYW1lXSBVVEY4U3RyaW5nXSwgW1tleGNlcHRpb24gcmVh
c29uXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgaWYgKGVycm9yKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkFWVmlkZW9DYXB0dXJlU291cmNl
OjpzZXRGcmFtZVJhdGVDb25zdHJhaW50KCVwKSwgZmFpbGVkIHRvIGxvY2sgdmlkZW8gZGV2aWNl
IGZvciBjb25maWd1cmF0aW9uOiAlcyIsIHRoaXMsIFtbZXJyb3IgbG9jYWxpemVkRGVzY3JpcHRp
b25dIFVURjhTdHJpbmddKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworTlNMb2co
QCJzZXQgZnJhbWUgcmF0ZSB0byAlZiIsIFtiZXN0RnJhbWVSYXRlUmFuZ2UgbWluRnJhbWVSYXRl
XSk7CisgICAgTE9HKE1lZGlhLCAiQVZWaWRlb0NhcHR1cmVTb3VyY2U6OnNldEZyYW1lUmF0ZUNv
bnN0cmFpbnQoJXApIC0gc2V0IGZyYW1lIHJhdGUgcmFuZ2UgdG8gJWYuLiVmIiwgdGhpcywgbWlu
RnJhbWVSYXRlLCBtYXhGcmFtZVJhdGUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFW
VmlkZW9DYXB0dXJlU291cmNlOjphcHBseUNvbnN0cmFpbnRzKE1lZGlhQ29uc3RyYWludHMqIGNv
bnN0cmFpbnRzKQoreworICAgIEFTU0VSVChjb25zdHJhaW50cyk7CisKKyAgICBjb25zdCBWZWN0
b3I8QXRvbWljU3RyaW5nPiYgY29uc3RyYWludE5hbWVzID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdl
cjo6dmFsaWRDb25zdHJhaW50TmFtZXMoKTsKKyAgICBTdHJpbmcgd2lkdGhDb25zdHJhaW50Owor
ICAgIFN0cmluZyBoZWlnaHRDb25zdHJhaW50OworCisgICAgY29uc3RyYWludHMtPmdldE1hbmRh
dG9yeUNvbnN0cmFpbnRWYWx1ZShjb25zdHJhaW50TmFtZXNbQVZDYXB0dXJlRGV2aWNlTWFuYWdl
cjo6V2lkdGhdLCB3aWR0aENvbnN0cmFpbnQpOworICAgIGNvbnN0cmFpbnRzLT5nZXRNYW5kYXRv
cnlDb25zdHJhaW50VmFsdWUoY29uc3RyYWludE5hbWVzW0FWQ2FwdHVyZURldmljZU1hbmFnZXI6
OkhlaWdodF0sIGhlaWdodENvbnN0cmFpbnQpOworCisgICAgaW50IHdpZHRoID0gd2lkdGhDb25z
dHJhaW50LnRvSW50KCk7CisgICAgaW50IGhlaWdodCA9IGhlaWdodENvbnN0cmFpbnQudG9JbnQo
KTsKKyAgICBpZiAoIXdpZHRoICYmICFoZWlnaHQpIHsKKyAgICAgICAgY29uc3RyYWludHMtPmdl
dE9wdGlvbmFsQ29uc3RyYWludFZhbHVlKGNvbnN0cmFpbnROYW1lc1tBVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyOjpXaWR0aF0sIHdpZHRoQ29uc3RyYWludCk7CisgICAgICAgIGNvbnN0cmFpbnRzLT5n
ZXRPcHRpb25hbENvbnN0cmFpbnRWYWx1ZShjb25zdHJhaW50TmFtZXNbQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6SGVpZ2h0XSwgaGVpZ2h0Q29uc3RyYWludCk7CisgICAgICAgIHdpZHRoID0gd2lk
dGhDb25zdHJhaW50LnRvSW50KCk7CisgICAgICAgIGhlaWdodCA9IGhlaWdodENvbnN0cmFpbnQu
dG9JbnQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKHdpZHRoIHx8IGhlaWdodCkgeworICAgICAg
ICBOU1N0cmluZyAqcHJlc2V0ID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNlc3Npb25Q
cmVzZXRGb3JWaWRlb1NpemUoc2Vzc2lvbigpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgaWYg
KCFwcmVzZXQgfHwgIVtzZXNzaW9uKCkgY2FuU2V0U2Vzc2lvblByZXNldDpwcmVzZXRdKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgW3Nlc3Npb24oKSBzZXRT
ZXNzaW9uUHJlc2V0OnByZXNldF07CisgICAgfQorCisgICAgU3RyaW5nIGZyYW1lUmF0ZUNvbnN0
cmFpbnQ7CisgICAgY29uc3RyYWludHMtPmdldE1hbmRhdG9yeUNvbnN0cmFpbnRWYWx1ZShjb25z
dHJhaW50TmFtZXNbQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6RnJhbWVSYXRlXSwgZnJhbWVSYXRl
Q29uc3RyYWludCk7CisgICAgZmxvYXQgZnJhbWVSYXRlID0gZnJhbWVSYXRlQ29uc3RyYWludC50
b0Zsb2F0KCk7CisgICAgaWYgKCFmcmFtZVJhdGUpIHsKKyAgICAgICAgY29uc3RyYWludHMtPmdl
dE9wdGlvbmFsQ29uc3RyYWludFZhbHVlKGNvbnN0cmFpbnROYW1lc1tBVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyOjpGcmFtZVJhdGVdLCBmcmFtZVJhdGVDb25zdHJhaW50KTsKKyAgICAgICAgZnJhbWVS
YXRlID0gZnJhbWVSYXRlQ29uc3RyYWludC50b0Zsb2F0KCk7CisgICAgfQorICAgIGlmIChmcmFt
ZVJhdGUgJiYgIXNldEZyYW1lUmF0ZUNvbnN0cmFpbnQoZnJhbWVSYXRlLCAwKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQVZWaWRlb0NhcHR1
cmVTb3VyY2U6OnNldHVwQ2FwdHVyZVNlc3Npb24oKQoreworICAgIFJldGFpblB0cjxBVkNhcHR1
cmVEZXZpY2VJbnB1dFR5cGU+IHZpZGVvSW4gPSBhZG9wdE5TKFtbQVZDYXB0dXJlRGV2aWNlSW5w
dXQgYWxsb2NdIGluaXRXaXRoRGV2aWNlOmRldmljZSgpIGVycm9yOm5pbF0pOworICAgIEFTU0VS
VChbc2Vzc2lvbigpIGNhbkFkZElucHV0OnZpZGVvSW4uZ2V0KCldKTsKKyAgICBpZiAoW3Nlc3Np
b24oKSBjYW5BZGRJbnB1dDp2aWRlb0luLmdldCgpXSkKKyAgICAgICAgW3Nlc3Npb24oKSBhZGRJ
bnB1dDp2aWRlb0luLmdldCgpXTsKKyAgICAKKyAgICBpZiAoY29uc3RyYWludHMoKSkKKyAgICAg
ICAgYXBwbHlDb25zdHJhaW50cyhjb25zdHJhaW50cygpKTsKKworICAgIFJldGFpblB0cjxBVkNh
cHR1cmVWaWRlb0RhdGFPdXRwdXRUeXBlPiB2aWRlb091dHB1dCA9IGFkb3B0TlMoW1tBVkNhcHR1
cmVWaWRlb0RhdGFPdXRwdXQgYWxsb2NdIGluaXRdKTsKKyAgICBzZXRWaWRlb1NhbXBsZUJ1ZmZl
ckRlbGVnYXRlKHZpZGVvT3V0cHV0LmdldCgpKTsKKyAgICBBU1NFUlQoW3Nlc3Npb24oKSBjYW5B
ZGRPdXRwdXQ6dmlkZW9PdXRwdXQuZ2V0KCldKTsKKyAgICBpZiAoW3Nlc3Npb24oKSBjYW5BZGRP
dXRwdXQ6dmlkZW9PdXRwdXQuZ2V0KCldKQorICAgICAgICBbc2Vzc2lvbigpIGFkZE91dHB1dDp2
aWRlb091dHB1dC5nZXQoKV07CisgICAgCisgICAgbV92aWRlb0Nvbm5lY3Rpb24gPSBhZG9wdE5T
KFt2aWRlb091dHB1dC5nZXQoKSBjb25uZWN0aW9uV2l0aE1lZGlhVHlwZTpBVk1lZGlhVHlwZVZp
ZGVvXSk7Cit9CisKK3ZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhbGN1bGF0ZUZyYW1lcmF0
ZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIpCit7CisgICAgQ01UaW1lIHNhbXBsZVRp
bWUgPSBDTVNhbXBsZUJ1ZmZlckdldFByZXNlbnRhdGlvblRpbWVTdGFtcChzYW1wbGVCdWZmZXIp
OworICAgIGlmICghQ01USU1FX0lTX05VTUVSSUMoc2FtcGxlVGltZSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEZsb2F0NjQgZnJhbWVUaW1lID0gQ01UaW1lR2V0U2Vjb25kcyhzYW1wbGVUaW1l
KTsKKyAgICBGbG9hdDY0IG9uZVNlY29uZEFnbyA9IGZyYW1lVGltZSAtIDE7CisgICAgCisgICAg
bV92aWRlb0ZyYW1lVGltZVN0YW1wcy5hcHBlbmQoZnJhbWVUaW1lKTsKKyAgICAKKyAgICB3aGls
ZSAobV92aWRlb0ZyYW1lVGltZVN0YW1wc1swXSA8IG9uZVNlY29uZEFnbykKKyAgICAgICAgbV92
aWRlb0ZyYW1lVGltZVN0YW1wcy5yZW1vdmUoMCk7CisgICAgCisgICAgbV9mcmFtZVJhdGUgPSAo
bV9mcmFtZVJhdGUgKyBtX3ZpZGVvRnJhbWVUaW1lU3RhbXBzLnNpemUoKSkgLyAyOworfQorICAg
IAordm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBs
ZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dFR5cGUqLCBDTVNhbXBsZUJ1ZmZl
clJlZiBzYW1wbGVCdWZmZXIsIEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlKikKK3sKKyAgICBDTUZv
cm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRG
b3JtYXREZXNjcmlwdGlvbihzYW1wbGVCdWZmZXIpOworICAgIGlmICghZm9ybWF0RGVzY3JpcHRp
b24pCisgICAgICAgIHJldHVybjsKKworICAgIENGUmV0YWluKGZvcm1hdERlc2NyaXB0aW9uKTsK
KyAgICBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb24gPSBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9u
KTsKKyAgICBjYWxjdWxhdGVGcmFtZXJhdGUoc2FtcGxlQnVmZmVyKTsKKworICAgIENNVmlkZW9E
aW1lbnNpb25zIGRpbWVuc2lvbnMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNp
b25zKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBtX3dpZHRoID0gZGltZW5zaW9ucy53aWR0aDsK
KyAgICBtX2hlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0OworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01lZGlhU3RyZWFtQ2VudGVyTWFjLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTWVk
aWFTdHJlYW1DZW50ZXJNYWMuY3BwCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2Vu
dGVyTWFjLmgiCiAKKyNpbmNsdWRlICJBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVz
Y3JpcHRvci5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVu
dC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTcsMjAgKzU3LDgxIEBAIE1lZGlhU3Ry
ZWFtQ2VudGVyTWFjOjp+TWVkaWFTdHJlYW1DZW50ZXIKIHsKIH0KIAotdm9pZCBNZWRpYVN0cmVh
bUNlbnRlck1hYzo6dmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbUNyZWF0aW9uQ2xpZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiwgUGFzc1Jl
ZlB0cjxNZWRpYUNvbnN0cmFpbnRzPikKK3ZvaWQgTWVkaWFTdHJlYW1DZW50ZXJNYWM6OnZhbGlk
YXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVu
dD4gcHJwUXVlcnlDbGllbnQsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25z
dHJhaW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25D
bGllbnQ+IGNsaWVudCA9IHBycFF1ZXJ5Q2xpZW50OworICAgIAorICAgIEFTU0VSVChjbGllbnQp
OworCisgICAgaWYgKGF1ZGlvQ29uc3RyYWludHMpIHsKKyAgICAgICAgU3RyaW5nIGludmFsaWRD
b25zdHJhaW50OworICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKS52ZXJp
ZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8sIGF1ZGlv
Q29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgaWYgKCFpbnZh
bGlkQ29uc3RyYWludC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNsaWVudC0+Y29uc3RyYWlu
dHNJbnZhbGlkKGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICh2aWRlb0NvbnN0cmFpbnRzKSB7CisgICAgICAgIFN0cmlu
ZyBpbnZhbGlkQ29uc3RyYWludDsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2hh
cmVkKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2U6OlZp
ZGVvLCB2aWRlb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CisgICAgICAg
IGlmICghaW52YWxpZENvbnN0cmFpbnQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjbGllbnQt
PmNvbnN0cmFpbnRzSW52YWxpZChpbnZhbGlkQ29uc3RyYWludCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGllbnQtPmNvbnN0cmFpbnRzVmFsaWRhdGVk
KCk7CiB9CiAgICAgCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpjcmVhdGVNZWRpYVN0cmVh
bShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlh
Q29uc3RyYWludHM+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KQordm9pZCBNZWRpYVN0
cmVhbUNlbnRlck1hYzo6Y3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNy
ZWF0aW9uQ2xpZW50PiBwcnBRdWVyeUNsaWVudCwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRz
PiBhdWRpb0NvbnN0cmFpbnRzLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29u
c3RyYWludHMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZWZQdHI8TWVkaWFTdHJl
YW1DcmVhdGlvbkNsaWVudD4gY2xpZW50ID0gcHJwUXVlcnlDbGllbnQ7CisgICAgCisgICAgQVNT
RVJUKGNsaWVudCk7CisgICAgCisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4+
IGF1ZGlvU291cmNlczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPj4gdmlk
ZW9Tb3VyY2VzOworICAgIAorICAgIGlmIChhdWRpb0NvbnN0cmFpbnRzKSB7CisgICAgICAgIFN0
cmluZyBpbnZhbGlkQ29uc3RyYWludDsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
c2hhcmVkKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2U6
OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CisgICAg
ICAgIGlmICghaW52YWxpZENvbnN0cmFpbnQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjbGll
bnQtPmZhaWxlZFRvQ3JlYXRlU3RyZWFtV2l0aENvbnN0cmFpbnRzRXJyb3IoaW52YWxpZENvbnN0
cmFpbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IGF1ZGlvU291cmNlID0gQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2hhcmVkKCkuYmVzdFNvdXJjZUZvclR5cGVBbmRDb25zdHJhaW50cyhNZWRpYVN0
cmVhbVNvdXJjZTo6QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMuZ2V0KCkpOworICAgICAgICBBU1NF
UlQoYXVkaW9Tb3VyY2UpOworICAgICAgICAKKyAgICAgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChh
dWRpb1NvdXJjZS5yZWxlYXNlKCkpOworICAgIH0KKyAgICAKKyAgICBpZiAodmlkZW9Db25zdHJh
aW50cykgeworICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7CisgICAgICAgIEFWQ2Fw
dHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBl
KE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbywgdmlkZW9Db25zdHJhaW50cy5nZXQoKSwgaW52YWxp
ZENvbnN0cmFpbnQpOworICAgICAgICBpZiAoIWludmFsaWRDb25zdHJhaW50LmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgY2xpZW50LT5mYWlsZWRUb0NyZWF0ZVN0cmVhbVdpdGhDb25zdHJhaW50
c0Vycm9yKGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiB2aWRlb1NvdXJj
ZSA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLmJlc3RTb3VyY2VGb3JUeXBlQW5k
Q29uc3RyYWludHMoTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvLCB2aWRlb0NvbnN0cmFpbnRzLmdl
dCgpKTsKKyAgICAgICAgQVNTRVJUKHZpZGVvU291cmNlKTsKKyAgICAgICAgCisgICAgICAgIHZp
ZGVvU291cmNlcy5hcHBlbmQodmlkZW9Tb3VyY2UucmVsZWFzZSgpKTsKKyAgICB9CisgICAgCisg
ICAgY2xpZW50LT5kaWRDcmVhdGVTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUo
YXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMsIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6SXNOb3RF
bmRlZCkpOwogfQogCi1ib29sIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpnZXRNZWRpYVN0cmVhbVRy
YWNrU291cmNlcyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVu
dD4pCitib29sIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNl
cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudD4gcHJwQ2xp
ZW50KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+IHJlcXVlc3RDbGllbnQg
PSBwcnBDbGllbnQ7CisKKyAgICBWZWN0b3I8UmVmUHRyPFRyYWNrU291cmNlSW5mbz4+IHNvdXJj
ZXMgPSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKS5nZXRTb3VyY2VzSW5mbyhyZXF1
ZXN0Q2xpZW50LT5yZXF1ZXN0T3JpZ2luKCkpOworCisgICAgcmVxdWVzdENsaWVudC0+ZGlkQ29t
cGxldGVSZXF1ZXN0KHNvdXJjZXMpOworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRp
YVN0cmVhbUNlbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50ZXIuY3BwCShyZXZpc2lvbiAxNTgwMjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYVN0cmVhbUNlbnRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkxLDE0ICs5MSwxNCBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplTW9ja1Nv
dXJjZXMoKQogICAgIG1vY2tTb3VyY2UxLT5tX2NhcGFiaWxpdGllcy0+c2V0QXNwZWN0UmF0aW9S
YW5nZShNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdHlSYW5nZSg0IC8gMy4wZiwgMTYgLyA5LjBm
LCB0cnVlKSk7CiAgICAgbW9ja1NvdXJjZTEtPm1fY2FwYWJpbGl0aWVzLT5zZXRWb2x1bWVSYW5n
ZShNZWRpYVN0cmVhbVNvdXJjZUNhcGFiaWxpdHlSYW5nZSgxMFVMLCA5MFVMLCB0cnVlKSk7CiAK
LSAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLnNvdXJjZVR5cGUgPSBNZWRpYVN0cmVh
bVNvdXJjZVN0YXRlczo6Q2FtZXJhOwotICAgIG1vY2tTb3VyY2UxLT5tX2N1cnJlbnRTdGF0ZXMu
c291cmNlSWQgPSBtb2NrU291cmNlMS0+aWQoKTsKLSAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50
U3RhdGVzLmZhY2luZ01vZGUgPSBNZWRpYVN0cmVhbVNvdXJjZVN0YXRlczo6VXNlcjsKLSAgICBt
b2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLndpZHRoID0gMTkyMDsKLSAgICBtb2NrU291cmNl
MS0+bV9jdXJyZW50U3RhdGVzLmhlaWdodCA9IDEwODA7Ci0gICAgbW9ja1NvdXJjZTEtPm1fY3Vy
cmVudFN0YXRlcy5mcmFtZVJhdGUgPSAzMDsKLSAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3Rh
dGVzLmFzcGVjdFJhdGlvID0gMTYgLyA5LjBmOwotICAgIG1vY2tTb3VyY2UxLT5tX2N1cnJlbnRT
dGF0ZXMudm9sdW1lID0gNzA7CisgICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy5zZXRT
b3VyY2VUeXBlKE1lZGlhU3RyZWFtU291cmNlU3RhdGVzOjpDYW1lcmEpOworICAgIG1vY2tTb3Vy
Y2UxLT5tX2N1cnJlbnRTdGF0ZXMuc2V0U291cmNlSWQobW9ja1NvdXJjZTEtPmlkKCkpOworICAg
IG1vY2tTb3VyY2UxLT5tX2N1cnJlbnRTdGF0ZXMuc2V0RmFjaW5nTW9kZShNZWRpYVN0cmVhbVNv
dXJjZVN0YXRlczo6VXNlcik7CisgICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy5zZXRX
aWR0aCgxOTIwKTsKKyAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLnNldEhlaWdodCgx
MDgwKTsKKyAgICBtb2NrU291cmNlMS0+bV9jdXJyZW50U3RhdGVzLnNldEZyYW1lUmF0ZSgzMCk7
CisgICAgbW9ja1NvdXJjZTEtPm1fY3VycmVudFN0YXRlcy5zZXRBc3BlY3RSYXRpbygxNiAvIDku
MGYpOworICAgIG1vY2tTb3VyY2UxLT5tX2N1cnJlbnRTdGF0ZXMuc2V0Vm9sdW1lKDcwKTsKICAg
ICBTdHJpbmcgbW9ja1NvdXJjZTFpZCA9IG1vY2tTb3VyY2UxLT5pZCgpOwogICAgIG1vY2tTb3Vy
Y2VNYXAoKS5hZGQobW9ja1NvdXJjZTFpZCwgbW9ja1NvdXJjZTEucmVsZWFzZSgpKTsKIApAQCAt
MTA3LDkgKzEwNyw5IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVNb2NrU291cmNlcygpCiAgICAg
bW9ja1NvdXJjZTItPm1fY2FwYWJpbGl0aWVzLT5zZXRTb3VyY2VJZChtb2NrU291cmNlMi0+aWQo
KSk7CiAgICAgbW9ja1NvdXJjZTItPm1fY2FwYWJpbGl0aWVzLT5zZXRWb2x1bWVSYW5nZShNZWRp
YVN0cmVhbVNvdXJjZUNhcGFiaWxpdHlSYW5nZSgwVUwsIDEwMFVMLCB0cnVlKSk7CiAKLSAgICBt
b2NrU291cmNlMi0+bV9jdXJyZW50U3RhdGVzLnNvdXJjZVR5cGUgPSBNZWRpYVN0cmVhbVNvdXJj
ZVN0YXRlczo6TWljcm9waG9uZTsKLSAgICBtb2NrU291cmNlMi0+bV9jdXJyZW50U3RhdGVzLnNv
dXJjZUlkID0gbW9ja1NvdXJjZTItPmlkKCk7Ci0gICAgbW9ja1NvdXJjZTItPm1fY3VycmVudFN0
YXRlcy52b2x1bWUgPSA1MDsKKyAgICBtb2NrU291cmNlMi0+bV9jdXJyZW50U3RhdGVzLnNldFNv
dXJjZVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2VTdGF0ZXM6Ok1pY3JvcGhvbmUpOworICAgIG1vY2tT
b3VyY2UyLT5tX2N1cnJlbnRTdGF0ZXMuc2V0U291cmNlSWQobW9ja1NvdXJjZTItPmlkKCkpOwor
ICAgIG1vY2tTb3VyY2UyLT5tX2N1cnJlbnRTdGF0ZXMuc2V0Vm9sdW1lKDUwKTsKICAgICBTdHJp
bmcgbW9ja1NvdXJjZTJpZCA9IG1vY2tTb3VyY2UyLT5pZCgpOwogICAgIG1vY2tTb3VyY2VNYXAo
KS5hZGQobW9ja1NvdXJjZTJpZCwgbW9ja1NvdXJjZTIucmVsZWFzZSgpKTsKIH0KQEAgLTIwNCwx
NSArMjA0LDEzIEBAIHZvaWQgTW9ja01lZGlhU3RyZWFtQ2VudGVyOjpjcmVhdGVNZWRpYVMKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChhdWRpb0NvbnN0cmFp
bnRzKSB7Ci0gICAgICAgICAgICBNb2NrU291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5k
KG1vY2tBdWRpb1NvdXJjZUlEKCkpOwotICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC5lbmQo
KSk7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gYXVkaW9Tb3VyY2Ug
PSBpdC0+dmFsdWU7Ci0gICAgICAgICAgICBhdWRpb1NvdXJjZS0+cmVzZXQoKTsKLSAgICAgICAg
ICAgIGF1ZGlvU291cmNlLT5zZXRSZWFkeVN0YXRlKE1lZGlhU3RyZWFtU291cmNlOjpMaXZlKTsK
LSAgICAgICAgICAgIGF1ZGlvU291cmNlcy5hcHBlbmQoYXVkaW9Tb3VyY2UucmVsZWFzZSgpKTsK
LSAgICAgICAgfQorICAgICAgICBNb2NrU291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5k
KG1vY2tBdWRpb1NvdXJjZUlEKCkpOworICAgICAgICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsK
KworICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IGF1ZGlvU291cmNlID0gaXQtPnZh
bHVlOworICAgICAgICBhdWRpb1NvdXJjZS0+cmVzZXQoKTsKKyAgICAgICAgYXVkaW9Tb3VyY2Ut
PnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkxpdmUpOworICAgICAgICBhdWRpb1Nv
dXJjZXMuYXBwZW5kKGF1ZGlvU291cmNlLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgaWYgKHZp
ZGVvQ29uc3RyYWludHMpIHsKQEAgLTIyMiwxNSArMjIwLDEzIEBAIHZvaWQgTW9ja01lZGlhU3Ry
ZWFtQ2VudGVyOjpjcmVhdGVNZWRpYVMKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmICh2aWRlb0NvbnN0cmFpbnRzKSB7Ci0gICAgICAgICAgICBNb2NrU291cmNl
TWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5kKG1vY2tWaWRlb1NvdXJjZUlEKCkpOwotICAgICAg
ICAgICAgQVNTRVJUKGl0ICE9IG1hcC5lbmQoKSk7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxNZWRp
YVN0cmVhbVNvdXJjZT4gdmlkZW9Tb3VyY2UgPSBpdC0+dmFsdWU7Ci0gICAgICAgICAgICB2aWRl
b1NvdXJjZS0+cmVzZXQoKTsKLSAgICAgICAgICAgIHZpZGVvU291cmNlLT5zZXRSZWFkeVN0YXRl
KE1lZGlhU3RyZWFtU291cmNlOjpMaXZlKTsKLSAgICAgICAgICAgIHZpZGVvU291cmNlcy5hcHBl
bmQodmlkZW9Tb3VyY2UucmVsZWFzZSgpKTsKLSAgICAgICAgfQorICAgICAgICBNb2NrU291cmNl
TWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5kKG1vY2tWaWRlb1NvdXJjZUlEKCkpOworICAgICAg
ICBBU1NFUlQoaXQgIT0gbWFwLmVuZCgpKTsKKworICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1T
b3VyY2U+IHZpZGVvU291cmNlID0gaXQtPnZhbHVlOworICAgICAgICB2aWRlb1NvdXJjZS0+cmVz
ZXQoKTsKKyAgICAgICAgdmlkZW9Tb3VyY2UtPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3Vy
Y2U6OkxpdmUpOworICAgICAgICB2aWRlb1NvdXJjZXMuYXBwZW5kKHZpZGVvU291cmNlLnJlbGVh
c2UoKSk7CiAgICAgfQogICAgIAogICAgIGNsaWVudC0+ZGlkQ3JlYXRlU3RyZWFtKE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBNZWRpYVN0
cmVhbURlc2NyaXB0b3I6OklzTm90RW5kZWQpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvY29tLmFwcGxlLldlYlByb2Nlc3Muc2IuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9jb20uYXBwbGUuV2ViUHJvY2Vzcy5zYi5pbgkocmV2aXNpb24gMTU4
MDI1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb20uYXBwbGUuV2ViUHJvY2Vzcy5z
Yi5pbgkod29ya2luZyBjb3B5KQpAQCAtMzEzLDMgKzMxMywxOCBAQAogI2lmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPT0gMTA3MAogKGRlbnkgbWFjaC1sb29rdXAgKHdpdGggbm8t
bG9nKSAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS50c20udWlzZXJ2ZXIiKSkgOzsgPHJkYXI6Ly9w
cm9ibGVtLzEzOTAyNzA2PgogI2VuZGlmCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorOzsg
Q2FtZXJhCisoYWxsb3cgbWFjaC1sb29rdXAKKyAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5j
bWlvLkFwcGxlQ2FtZXJhQXNzaXN0YW50IikKKyAgICA7OyBBcHBsZSBEQUwgYXNzaXN0YW50cwor
ICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmNtaW8uVkRDQXNzaXN0YW50IikKKyAgICAoZ2xv
YmFsLW5hbWUgImNvbS5hcHBsZS5jbWlvLkFWQ0Fzc2lzdGFudCIpCisgICAgKGdsb2JhbC1uYW1l
ICJjb20uYXBwbGUuY21pby5JSURDVmlkZW9Bc3Npc3RhbnQiKQorICAgIChnbG9iYWwtbmFtZSAi
Y29tLmFwcGxlLmNtaW8uREFMIikpCisoYWxsb3cgZGV2aWNlLWNhbWVyYSkKKworOzsgTWljcm9w
aG9uZQorKGFsbG93IGRldmljZS1taWNyb3Bob25lKQorI2VuZGlmCkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAxNTgwOTYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOCBAQAorMjAxMy0xMC0yNyAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxl
LmNvbT4KKworICAgICAgICBbTWFjIE1lZGlhU3RyZWFtXSBpbXBsZW1lbnQgQVZGb3VuZGF0aW9u
IGJhY2tlZCBNZWRpYVN0cmVhbVNvdXJjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1v
dmUtdHJhY2tzLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAgKiBmYXN0L21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tzLmh0bWw6IERpdHRvLgorICAgICAgICAq
IGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6IERp
dHRvLgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rvci5o
dG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2st
Z2V0U291cmNlcy5odG1sOiBSZW1vdmUgdHlwby4KKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtVHJhY2stZXhwZWN0ZWQudHh0OiBVcGRhdGVkIHJlc3VsdHMuCisgICAgICAg
ICogZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmh0bWw6IFVwZGF0ZSB0byB0ZXN0
IHRyYWNrLnN0b3AoKSBiZWhhdmlvci4KKwogMjAxMy0xMC0yNiAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaHkgV2ViR0wgdGVzdCBpcyBjcmFz
aHkuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1y
ZW1vdmUtdHJhY2tzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tzLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMTU4MDI1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbS1hZGQtcmVtb3ZlLXRyYWNrcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDEyICs0MiwxNCBAQCBQQVNTIHN0cmVhbTEuZ2V0VmlkZW9UcmFja3MoKS5sZW5ndGggaXMgCiBQ
QVNTIHN0cmVhbTEuZ2V0QXVkaW9UcmFja3MoKS5sZW5ndGggaXMgMgogUEFTUyBzdHJlYW0xLmdl
dFZpZGVvVHJhY2tzKCkubGVuZ3RoIGlzIDIKIAotKioqIGFmdGVyIGFsbCB0cmFja3MgaGF2ZSBi
ZWVuIHJlbW92ZWQsIHN0cmVhbS5lbmRlZCBzaG91bGQgcmV0dXJuIHRydWUKKyoqKiByZW1vdmUg
YWxsIHRyYWNrcywgc3RyZWFtLmVuZGVkIHNob3VsZCByZXR1cm4gdHJ1ZQorUEFTUyBzdHJlYW0y
LmdldEF1ZGlvVHJhY2tzKCkubGVuZ3RoIGlzIDAKK1BBU1Mgc3RyZWFtMi5nZXRWaWRlb1RyYWNr
cygpLmxlbmd0aCBpcyAwCiBQQVNTIHN0cmVhbTIuZW5kZWQgaXMgdHJ1ZQogCiAqKiogaXQgc2hv
dWxkIGJlIGltcG9zc2libGUgdG8gYWRkIGEgdHJhY2sgYWZ0ZXIgdGhlIHN0cmVhbSBoYXMgZW5k
ZWQKLVBBU1Mgc3RyZWFtMS5hZGRUcmFjayhhdWRpb1RyYWNrKSB0aHJldyBleGNlcHRpb24gRXJy
b3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgotUEFTUyBzdHJlYW0xLnJl
bW92ZVRyYWNrKGF1ZGlvVHJhY2spIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSW52YWxpZFN0YXRl
RXJyb3I6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIHN0cmVhbTIuYWRkVHJhY2soYXVkaW9UcmFj
aykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlv
biAxMS4KK1BBU1Mgc3RyZWFtMi5yZW1vdmVUcmFjayhhdWRpb1RyYWNrKSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IEludmFsaWRTdGF0ZUVycm9yOiBET00gRXhjZXB0aW9uIDExLgogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS1hZGQt
cmVtb3ZlLXRyYWNrcy5odG1sCShyZXZpc2lvbiAxNTgwMjUpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLWFkZC1yZW1vdmUtdHJhY2tzLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOSwxNCArMTA5LDE2IEBAIGZ1bmN0aW9uIGdvdFN0cmVhbTIocykgewogICAg
IHNob3VsZEJlKCdzdHJlYW0xLmdldEF1ZGlvVHJhY2tzKCkubGVuZ3RoJywgJzInKTsKICAgICBz
aG91bGRCZSgnc3RyZWFtMS5nZXRWaWRlb1RyYWNrcygpLmxlbmd0aCcsICcyJyk7CiAKLSAgICBk
ZWJ1ZygiPGJyPioqKiBhZnRlciBhbGwgdHJhY2tzIGhhdmUgYmVlbiByZW1vdmVkLCBzdHJlYW0u
ZW5kZWQgc2hvdWxkIHJldHVybiB0cnVlIik7CisgICAgZGVidWcoIjxicj4qKiogcmVtb3ZlIGFs
bCB0cmFja3MsIHN0cmVhbS5lbmRlZCBzaG91bGQgcmV0dXJuIHRydWUiKTsKICAgICB0cnlSZW1v
dmVUcmFjayhzdHJlYW0yLCBzdHJlYW0yLmdldEF1ZGlvVHJhY2tzKClbMF0pOwogICAgIHRyeVJl
bW92ZVRyYWNrKHN0cmVhbTIsIHN0cmVhbTIuZ2V0VmlkZW9UcmFja3MoKVswXSk7CisgICAgc2hv
dWxkQmUoJ3N0cmVhbTIuZ2V0QXVkaW9UcmFja3MoKS5sZW5ndGgnLCAnMCcpOworICAgIHNob3Vs
ZEJlKCdzdHJlYW0yLmdldFZpZGVvVHJhY2tzKCkubGVuZ3RoJywgJzAnKTsKICAgICBzaG91bGRC
ZVRydWUoJ3N0cmVhbTIuZW5kZWQnKTsKIAogICAgIGRlYnVnKCI8YnI+KioqIGl0IHNob3VsZCBi
ZSBpbXBvc3NpYmxlIHRvIGFkZCBhIHRyYWNrIGFmdGVyIHRoZSBzdHJlYW0gaGFzIGVuZGVkIik7
Ci0gICAgc2hvdWxkVGhyb3coJ3N0cmVhbTEuYWRkVHJhY2soYXVkaW9UcmFjayknLCAnIkVycm9y
OiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSInKTsKLSAgICBzaG91bGRUaHJv
dygnc3RyZWFtMS5yZW1vdmVUcmFjayhhdWRpb1RyYWNrKScsICciRXJyb3I6IEludmFsaWRTdGF0
ZUVycm9yOiBET00gRXhjZXB0aW9uIDExIicpOworICAgIHNob3VsZFRocm93KCdzdHJlYW0yLmFk
ZFRyYWNrKGF1ZGlvVHJhY2spJywgJyJFcnJvcjogSW52YWxpZFN0YXRlRXJyb3I6IERPTSBFeGNl
cHRpb24gMTEiJyk7CisgICAgc2hvdWxkVGhyb3coJ3N0cmVhbTIucmVtb3ZlVHJhY2soYXVkaW9U
cmFjayknLCAnIkVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMSInKTsK
IAogICAgIHNldFRpbWVvdXQoZmluaXNoSlNUZXN0LCAwKTsKIH0KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbnN0
cnVjdG9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU4MDI1KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBQQVNTIG5ld1N0cmVhbS5jb25zdHJ1Y3Rvci50b1N0
cmluZygpIGlzCiBQQVNTIG5ld1N0cmVhbS5nZXRBdWRpb1RyYWNrcygpLmxlbmd0aCBpcyBuQXVk
aW8KIFBBU1MgbmV3U3RyZWFtLmdldFZpZGVvVHJhY2tzKCkubGVuZ3RoIGlzIG5WaWRlbwogUEFT
UyBjaGVja0lkQXR0cmlidXRlKG5ld1N0cmVhbS5pZCkgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCiAKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rvci5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db25zdHJ1Y3Rvci5odG1s
CShyZXZpc2lvbiAxNTgwMjUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtQ29uc3RydWN0b3IuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsOCBAQCBm
dW5jdGlvbiB0ZXN0Q29uc3RydWN0b3IocykgewogICAgIHZlcmlmeVN0cmVhbSgibmV3IHdlYmtp
dE1lZGlhU3RyZWFtKFtzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXV0pIiwgMCwgMSk7CiAgICAg
dmVyaWZ5U3RyZWFtKCJuZXcgd2Via2l0TWVkaWFTdHJlYW0oW3N0cmVhbS5nZXRBdWRpb1RyYWNr
cygpWzBdLCBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXV0pIiwgMSwgMSk7CiAgICAgdmVyaWZ5
U3RyZWFtKCJuZXcgd2Via2l0TWVkaWFTdHJlYW0oW3N0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBd
LCBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXSwgc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF1d
KSIsIDEsIDEpOworCisgICAgZmluaXNoSlNUZXN0KCk7CiB9CiAKIGZ1bmN0aW9uIHZlcmlmeVN0
cmVhbShzY3JpcHQsIG51bUF1ZGlvVHJhY2tzLCBudW1WaWRlb1RyYWNrcykgewpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJh
Y2stZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNTgwMjUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2stZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw4ICsyNiw4IEBAIGNoZWNraW5nIHRyYWNrLmNhcGFiaWxpdGllcygpCiAgICBtYXggOiA2
MAogICAgc3VwcG9ydGVkIDogdHJ1ZQogICBhc3BlY3RSYXRpbwotICAgbWluIDogMS4zMzMzMzMz
NzMwNjk3NjMyCi0gICBtYXggOiAxLjc3Nzc3Nzc5MTAyMzI1NDQKKyAgIG1pbiA6IDEuMzMKKyAg
IG1heCA6IDEuNzgKICAgIHN1cHBvcnRlZCA6IHRydWUKICAgZmFjaW5nTW9kZQogICAgIDAgOiB1
c2VyCkBAIC0zNSwxMSArMzUsMTQgQEAgY2hlY2tpbmcgdHJhY2suY2FwYWJpbGl0aWVzKCkKIGNo
ZWNraW5nIHRyYWNrLnN0YXRlcygpCiBQQVNTIHN0YXRlcy5zb3VyY2VJZCBpcyBjYXBhYmlsaXRp
ZXMuc291cmNlSWRbMF0KIFBBU1Mgc3RhdGVzLnNvdXJjZVR5cGUgaXMgImNhbWVyYSIKLSAgd2lk
dGggOiAxOTIwCi0gIGhlaWdodCA6IDEwODAKLSAgZnJhbWVSYXRlIDogMzAKLSAgYXNwZWN0UmF0
aW8gOiAxLjc3Nzc3Nzc5MTAyMzI1NDQKLSAgZmFjaW5nTW9kZSA6IHVzZXIKKyAgc3RhdGVzLnZv
bHVtZSA9IHVuZGVmaW5lZAorICBzdGF0ZXMud2lkdGggPSAxOTIwCisgIHN0YXRlcy5zb3VyY2VJ
ZCA9IDIzOWMyNGIwLTJiMTUtMTFlMy04MjI0LTA4MDAyMDBjOWE2NgorICBzdGF0ZXMuaGVpZ2h0
ID0gMTA4MAorICBzdGF0ZXMuc291cmNlVHlwZSA9IGNhbWVyYQorICBzdGF0ZXMuZmFjaW5nTW9k
ZSA9IHVzZXIKKyAgc3RhdGVzLmZyYW1lUmF0ZSA9IDMwCisgIHN0YXRlcy5hc3BlY3RSYXRpbyA9
IDEuNzgKIAogYXVkaW9UcmFjayA9IG1lZGlhU3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0KIFBB
U1MgdHJhY2sucmVhZHlTdGF0ZSBpcyAibGl2ZSIKQEAgLTUzLDcgKzU2LDE0IEBAIGNoZWNraW5n
IHRyYWNrLmNhcGFiaWxpdGllcygpCiBjaGVja2luZyB0cmFjay5zdGF0ZXMoKQogUEFTUyBzdGF0
ZXMuc291cmNlSWQgaXMgY2FwYWJpbGl0aWVzLnNvdXJjZUlkWzBdCiBQQVNTIHN0YXRlcy5zb3Vy
Y2VUeXBlIGlzICJtaWNyb3Bob25lIgotICB2b2x1bWUgOiA1MAorICBzdGF0ZXMudm9sdW1lID0g
NTAKKyAgc3RhdGVzLndpZHRoID0gdW5kZWZpbmVkCisgIHN0YXRlcy5zb3VyY2VJZCA9IDIzOWMy
NGIxLTJiMTUtMTFlMy04MjI0LTA4MDAyMDBjOWE2NgorICBzdGF0ZXMuaGVpZ2h0ID0gdW5kZWZp
bmVkCisgIHN0YXRlcy5zb3VyY2VUeXBlID0gbWljcm9waG9uZQorICBzdGF0ZXMuZmFjaW5nTW9k
ZSA9IHVuZGVmaW5lZAorICBzdGF0ZXMuZnJhbWVSYXRlID0gdW5kZWZpbmVkCisgIHN0YXRlcy5h
c3BlY3RSYXRpbyA9IHVuZGVmaW5lZAogCiB2aWRlb1RyYWNrMiA9IHZpZGVvVHJhY2suY2xvbmUo
KQogUEFTUyB0cmFjay5yZWFkeVN0YXRlIGlzICJsaXZlIgpAQCAtNzYsOCArODYsOCBAQCBjaGVj
a2luZyB0cmFjay5jYXBhYmlsaXRpZXMoKQogICAgbWF4IDogNjAKICAgIHN1cHBvcnRlZCA6IHRy
dWUKICAgYXNwZWN0UmF0aW8KLSAgIG1pbiA6IDEuMzMzMzMzMzczMDY5NzYzMgotICAgbWF4IDog
MS43Nzc3Nzc3OTEwMjMyNTQ0CisgICBtaW4gOiAxLjMzCisgICBtYXggOiAxLjc4CiAgICBzdXBw
b3J0ZWQgOiB0cnVlCiAgIGZhY2luZ01vZGUKICAgICAwIDogdXNlcgpAQCAtODUsMTEgKzk1LDE0
IEBAIGNoZWNraW5nIHRyYWNrLmNhcGFiaWxpdGllcygpCiBjaGVja2luZyB0cmFjay5zdGF0ZXMo
KQogUEFTUyBzdGF0ZXMuc291cmNlSWQgaXMgY2FwYWJpbGl0aWVzLnNvdXJjZUlkWzBdCiBQQVNT
IHN0YXRlcy5zb3VyY2VUeXBlIGlzICJjYW1lcmEiCi0gIHdpZHRoIDogMTkyMAotICBoZWlnaHQg
OiAxMDgwCi0gIGZyYW1lUmF0ZSA6IDMwCi0gIGFzcGVjdFJhdGlvIDogMS43Nzc3Nzc3OTEwMjMy
NTQ0Ci0gIGZhY2luZ01vZGUgOiB1c2VyCisgIHN0YXRlcy52b2x1bWUgPSB1bmRlZmluZWQKKyAg
c3RhdGVzLndpZHRoID0gMTkyMAorICBzdGF0ZXMuc291cmNlSWQgPSAyMzljMjRiMC0yYjE1LTEx
ZTMtODIyNC0wODAwMjAwYzlhNjYKKyAgc3RhdGVzLmhlaWdodCA9IDEwODAKKyAgc3RhdGVzLnNv
dXJjZVR5cGUgPSBjYW1lcmEKKyAgc3RhdGVzLmZhY2luZ01vZGUgPSB1c2VyCisgIHN0YXRlcy5m
cmFtZVJhdGUgPSAzMAorICBzdGF0ZXMuYXNwZWN0UmF0aW8gPSAxLjc4CiBQQVNTIHZpZGVvVHJh
Y2suaWQgaXMgbm90IHZpZGVvVHJhY2syLmlkCiBQQVNTIHZpZGVvVHJhY2sua2luZCBpcyB2aWRl
b1RyYWNrMi5raW5kCiBQQVNTIHZpZGVvVHJhY2subGFiZWwgaXMgdmlkZW9UcmFjazIubGFiZWwK
QEAgLTk3LDkgKzExMCwxMiBAQCBQQVNTIHZpZGVvVHJhY2subXV0ZWQgaXMgdmlkZW9UcmFjazIu
bXV0CiBQQVNTIHZpZGVvVHJhY2suZW5hYmxlZCBpcyB2aWRlb1RyYWNrMi5lbmFibGVkCiBQQVNT
IHZpZGVvVHJhY2sucmVhZHlTdGF0ZSBpcyB2aWRlb1RyYWNrMi5yZWFkeVN0YXRlCiAKLXZpZGVv
VHJhY2suc3RvcCgpCit0cmFjay5zdG9wKCkgc2hvdWxkIG5vdCBmaXJlICdlbmRlZCcgb24gdGhl
IHRyYWNrIGl0IGlzIGNhbGxlZCBvbiwgYnV0IGl0IHNob3VsZCBlbmQgYWxsIHRyYWNrcyB1c2lu
ZyB0aGUgc2FtZSBzb3VyY2UKK3ZpZGVvVHJhY2syLnN0b3AoKQogUEFTUyBUcmFjayBvbmVuZGVk
IGNhbGxiYWNrIHN1Y2NlZWRlZC4KK1BBU1MgdmlkZW9UcmFjayBpcyBldmVudC50YXJnZXQKIFBB
U1MgdmlkZW9UcmFjay5yZWFkeVN0YXRlIGlzICJlbmRlZCIKK1BBU1MgdmlkZW9UcmFjazIucmVh
ZHlTdGF0ZSBpcyAiZW5kZWQiCiAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLWdldFNv
dXJjZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtVHJhY2stZ2V0U291cmNlcy5odG1sCShyZXZpc2lvbiAxNTgwMjUpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2stZ2V0U291cmNlcy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHBy
aW1lVGltZW91dCgiVGltZW91dCB3YWl0aW5nIGZvciB3ZWJraXRHZXRVc2VyTWVkaWEoKSIpOwog
ICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50cyA9IF9jb25zdHJhaW50czsKICAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2s7Ci0gICAgICAgICAgICAgICAgZGVidWco
Ijxicj4qKiogY2FsbGluZyBuYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlhKCkgKioqIik7Cisg
ICAgICAgICAgICAgICAgICAgIGRlYnVnKCI8YnI+KioqIGNhbGxpbmcgbmF2aWdhdG9yLndlYmtp
dEdldFVzZXJNZWRpYSgpICoqKiIpOwogICAgICAgICAgICAgICAgICAgICBzaG91bGROb3RUaHJv
dygibmF2aWdhdG9yLndlYmtpdEdldFVzZXJNZWRpYShjb25zdHJhaW50cywgY2FsbGJhY2ssIGVy
cm9yKSIpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAg
ICAgdGVzdEZhaWxlZCgnd2Via2l0R2V0VXNlck1lZGlhIHRocmV3IGV4Y2VwdGlvbiA6JyArIGUp
OwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVRyYWNrLmh0bWwJKHJldmlzaW9uIDE1ODAyNSkKKysrIExheW91dFRlc3RzL2Zhc3QvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1UcmFjay5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMs
MTYgQEAKICAgICAgICAgICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKK2NvdW50ZXIgPSAwOwordmFyIHQg
PSBbXTsKICAgICAgICAgICAgIGZ1bmN0aW9uIG9uVHJhY2tFbmRlZCgpCiAgICAgICAgICAgICB7
Cit0W2NvdW50ZXIrK10gPSBldmVudC50YXJnZXQ7CiAgICAgICAgICAgICAgICAgdGVzdFBhc3Nl
ZCgnVHJhY2sgb25lbmRlZCBjYWxsYmFjayBzdWNjZWVkZWQuJyk7CisgICAgICAgICAgICAgICAg
c2hvdWxkQmUoJ3ZpZGVvVHJhY2snLCAnZXZlbnQudGFyZ2V0Jyk7CiAgICAgICAgICAgICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCd2aWRlb1RyYWNrLnJlYWR5U3RhdGUnLCAnZW5kZWQnKTsK
KyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3ZpZGVvVHJhY2syLnJlYWR5
U3RhdGUnLCAnZW5kZWQnKTsKICAgICAgICAgICAgICAgICBkZWJ1ZygiIik7CiAgICAgICAgICAg
ICAgICAgZmluaXNoSlNUZXN0KCk7CiAgICAgICAgICAgICB9CkBAIC01NiwxMiArNjEsMTkgQEAK
ICAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCdUcmFjayBvbm11dGUgY2FsbGJhY2sgc3VjY2Vl
ZGVkLicpOwogICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWwoJ3ZpZGVvVHJhY2subXV0ZWQn
LCB0cnVlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rp
b24gbGltaXRQcmVjaXNpb24odmFsdWUsIHByZWNpc2lvbikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIiAmJiB2YWx1ZSAlIDEgIT0g
MCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQocHJlY2lzaW9uKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGZ1bmN0aW9uIGxvZ0NhcGFiaWxpdHlSYW5nZShuYW1lLCByYW5nZSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiICAiICsgbmFtZSk7Ci0gICAgICAgICAgICAgICAg
ZGVidWcoIiAgIG1pbiA6ICIgKyByYW5nZS5taW4pOwotICAgICAgICAgICAgICAgIGRlYnVnKCIg
ICBtYXggOiAiICsgcmFuZ2UubWF4KTsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiICAgbWluIDog
IiArIGxpbWl0UHJlY2lzaW9uKHJhbmdlLm1pbiwgMikpOworICAgICAgICAgICAgICAgIGRlYnVn
KCIgICBtYXggOiAiICsgbGltaXRQcmVjaXNpb24ocmFuZ2UubWF4LCAyKSk7CiAgICAgICAgICAg
ICAgICAgZGVidWcoIiAgIHN1cHBvcnRlZCA6ICIgKyByYW5nZS5zdXBwb3J0ZWQpOwogICAgICAg
ICAgICAgfQogCkBAIC02OSw3ICs4MSw3IEBACiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgZGVidWcoIiAgIiArIG5hbWUpOwogICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBs
aXN0Lmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgIiArIGkgKyAiIDog
IiArIGxpc3RbaV0pOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAgICIgKyBpICsgIiA6
ICIgKyBsaXN0W2ldKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZnVuY3Rpb24gY2hl
Y2tDYXBhYmlsaXRpZXModHJhY2spCkBAIC05NCwxNiArMTA2LDEzIEBACiAgICAgICAgICAgICAg
ICAgY2FwYWJpbGl0aWVzID0gdHJhY2suY2FwYWJpbGl0aWVzKCk7CiAgICAgICAgICAgICAgICAg
c3RhdGVzID0gdHJhY2suc3RhdGVzKCk7CiAgICAgICAgICAgICAgICAgc2hvdWxkQmUoJ3N0YXRl
cy5zb3VyY2VJZCcsICdjYXBhYmlsaXRpZXMuc291cmNlSWRbMF0nKTsKLSAgICAgICAgICAgICAg
ICBpZiAodHJhY2sua2luZCA9PSAidmlkZW8iKSB7CisgICAgICAgICAgICAgICAgaWYgKHRyYWNr
LmtpbmQgPT0gInZpZGVvIikKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdzdGF0ZXMuc291cmNlVHlwZScsICdjYW1lcmEnKTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVidWcoIiAgd2lkdGggOiAiICsgc3RhdGVzLndpZHRoKTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVidWcoIiAgaGVpZ2h0IDogIiArIHN0YXRlcy5oZWlnaHQpOwotICAgICAgICAgICAgICAgICAg
ICBkZWJ1ZygiICBmcmFtZVJhdGUgOiAiICsgc3RhdGVzLmZyYW1lUmF0ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlYnVnKCIgIGFzcGVjdFJhdGlvIDogIiArIHN0YXRlcy5hc3BlY3RSYXRpbyk7
Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgIGZhY2luZ01vZGUgOiAiICsgc3RhdGVzLmZh
Y2luZ01vZGUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3N0YXRlcy5zb3Vy
Y2VUeXBlJywgJ21pY3JvcGhvbmUnKTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAgdm9s
dW1lIDogIiArIHN0YXRlcy52b2x1bWUpOworICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3Bl
cnR5IGluIHN0YXRlcykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVzLmhhc093blBy
b3BlcnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgIHN0YXRl
cy4iICsgcHJvcGVydHkgKyAiID0gIiArIGxpbWl0UHJlY2lzaW9uKHN0YXRlc1twcm9wZXJ0eV0s
IDIpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAg
LTEzNiw2ICsxNDUsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVidWcoIiIp
OwogICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coInZpZGVvVHJhY2syID0gdmlkZW9UcmFjay5j
bG9uZSgpIik7CisgICAgICAgICAgICAgICAgdmlkZW9UcmFjazIub25lbmRlZCA9IG9uVHJhY2tF
bmRlZDsKICAgICAgICAgICAgICAgICBjaGVja1RyYWNrKHZpZGVvVHJhY2syKTsKICAgICAgICAg
ICAgICAgICBzaG91bGROb3RCZSgndmlkZW9UcmFjay5pZCcsICd2aWRlb1RyYWNrMi5pZCcpOwog
ICAgICAgICAgICAgICAgIHNob3VsZEJlKCd2aWRlb1RyYWNrLmtpbmQnLCAndmlkZW9UcmFjazIu
a2luZCcpOwpAQCAtMTQ1LDcgKzE1NSw4IEBACiAgICAgICAgICAgICAgICAgc2hvdWxkQmUoJ3Zp
ZGVvVHJhY2sucmVhZHlTdGF0ZScsICd2aWRlb1RyYWNrMi5yZWFkeVN0YXRlJyk7CiAKICAgICAg
ICAgICAgICAgICBkZWJ1ZygiIik7Ci0gICAgICAgICAgICAgICAgZXZhbEFuZExvZygidmlkZW9U
cmFjay5zdG9wKCkiKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZygidHJhY2suc3RvcCgpIHNob3Vs
ZCBub3QgZmlyZSAnZW5kZWQnIG9uIHRoZSB0cmFjayBpdCBpcyBjYWxsZWQgb24sIGJ1dCBpdCBz
aG91bGQgZW5kIGFsbCB0cmFja3MgdXNpbmcgdGhlIHNhbWUgc291cmNlIik7CisgICAgICAgICAg
ICAgICAgZXZhbEFuZExvZygidmlkZW9UcmFjazIuc3RvcCgpIik7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGZ1bmN0aW9uIHN0YXJ0KCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>